added support for push_constant layout

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2187433003

Committed: https://skia.googlesource.com/skia/+/fa5f65ac61fd525029aa9dab161ffe4896c10f6d
Review-Url: https://codereview.chromium.org/2187433003
diff --git a/src/sksl/SkSLParser.cpp b/src/sksl/SkSLParser.cpp
index 58ec750..80ef870 100644
--- a/src/sksl/SkSLParser.cpp
+++ b/src/sksl/SkSLParser.cpp
@@ -535,8 +535,7 @@
     return -1;
 }
 
-/* LAYOUT LPAREN IDENTIFIER EQ INT_LITERAL (COMMA IDENTIFIER EQ INT_LITERAL)*
-   RPAREN */
+/* LAYOUT LPAREN IDENTIFIER (EQ INT_LITERAL)? (COMMA IDENTIFIER (EQ INT_LITERAL)?)* RPAREN */
 ASTLayout Parser::layout() {
     int location = -1;
     int binding = -1;
@@ -548,11 +547,13 @@
     bool overrideCoverage = false;
     bool blendSupportAllEquations = false;
     ASTLayout::Format format = ASTLayout::Format::kUnspecified;
+    bool pushConstant = false;
     if (this->peek().fKind == Token::LAYOUT) {
         this->nextToken();
         if (!this->expect(Token::LPAREN, "'('")) {
             return ASTLayout(location, binding, index, set, builtin, inputAttachmentIndex,
-                             originUpperLeft, overrideCoverage, blendSupportAllEquations, format);
+                             originUpperLeft, overrideCoverage, blendSupportAllEquations, format,
+                             pushConstant);
         }
         for (;;) {
             Token t = this->nextToken();
@@ -576,6 +577,8 @@
                 blendSupportAllEquations = true;
             } else if (ASTLayout::ReadFormat(t.fText, &format)) {
                // AST::ReadFormat stored the result in 'format'.
+            } else if (t.fText == "push_constant") {
+                pushConstant = true;
             } else {
                 this->error(t.fPosition, ("'" + t.fText +
                                           "' is not a valid layout qualifier").c_str());
@@ -590,7 +593,7 @@
         }
     }
     return ASTLayout(location, binding, index, set, builtin, inputAttachmentIndex, originUpperLeft,
-                     overrideCoverage, blendSupportAllEquations, format);
+                     overrideCoverage, blendSupportAllEquations, format, pushConstant);
 }
 
 /* layout? (UNIFORM | CONST | IN | OUT | INOUT | LOWP | MEDIUMP | HIGHP | FLAT | NOPERSPECTIVE)* */