| Index: src/sksl/SkSLParser.cpp
|
| diff --git a/src/sksl/SkSLParser.cpp b/src/sksl/SkSLParser.cpp
|
| index edff0c67d15516a9f4b4f8def23c9bdced04ea36..d6acc7d8a877c8e0998985c7338410da0a2eadb1 100644
|
| --- a/src/sksl/SkSLParser.cpp
|
| +++ b/src/sksl/SkSLParser.cpp
|
| @@ -14,11 +14,26 @@
|
| #pragma clang diagnostic push
|
| #pragma clang diagnostic ignored "-Wunneeded-internal-declaration"
|
| #pragma clang diagnostic ignored "-Wnull-conversion"
|
| +#pragma clang diagnostic ignored "-Wsign-compare"
|
| +#endif
|
| +#ifdef __GNUC__
|
| +#pragma GCC diagnostic push
|
| +#pragma GCC diagnostic ignored "-Wsign-compare"
|
| +#endif
|
| +#ifdef _MSC_VER
|
| +#pragma warning(push)
|
| +#pragma warning(disable:4018)
|
| #endif
|
| #include "lex.sksl.c"
|
| #ifdef __clang__
|
| #pragma clang diagnostic pop
|
| #endif
|
| +#ifdef __GNUC__
|
| +#pragma GCC diagnostic pop
|
| +#endif
|
| +#ifdef _MSC_VER
|
| +#pragma warning(pop)
|
| +#endif
|
| #undef register
|
|
|
| #include "ast/SkSLASTBinaryExpression.h"
|
| @@ -471,10 +486,11 @@ ASTLayout Parser::layout() {
|
| int index = -1;
|
| int set = -1;
|
| int builtin = -1;
|
| + bool originUpperLeft = false;
|
| if (this->peek().fKind == Token::LAYOUT) {
|
| this->nextToken();
|
| if (!this->expect(Token::LPAREN, "'('")) {
|
| - return ASTLayout(location, binding, index, set, builtin);
|
| + return ASTLayout(location, binding, index, set, builtin, originUpperLeft);
|
| }
|
| for (;;) {
|
| Token t = this->nextToken();
|
| @@ -488,6 +504,8 @@ ASTLayout Parser::layout() {
|
| set = this->layoutInt();
|
| } else if (t.fText == "builtin") {
|
| builtin = this->layoutInt();
|
| + } else if (t.fText == "origin_upper_left") {
|
| + originUpperLeft = true;
|
| } else {
|
| this->error(t.fPosition, ("'" + t.fText +
|
| "' is not a valid layout qualifier").c_str());
|
| @@ -501,11 +519,10 @@ ASTLayout Parser::layout() {
|
| }
|
| }
|
| }
|
| - return ASTLayout(location, binding, index, set, builtin);
|
| + return ASTLayout(location, binding, index, set, builtin, originUpperLeft);
|
| }
|
|
|
| -/* layout? (UNIFORM | CONST | IN | OUT | INOUT | LOWP |
|
| - MEDIUMP | HIGHP)* */
|
| +/* layout? (UNIFORM | CONST | IN | OUT | INOUT | LOWP | MEDIUMP | HIGHP | FLAT | NOPERSPECTIVE)* */
|
| ASTModifiers Parser::modifiers() {
|
| ASTLayout layout = this->layout();
|
| int flags = 0;
|
| @@ -545,6 +562,14 @@ ASTModifiers Parser::modifiers() {
|
| this->nextToken();
|
| flags |= ASTModifiers::kHighp_Flag;
|
| break;
|
| + case Token::FLAT:
|
| + this->nextToken();
|
| + flags |= ASTModifiers::kFlat_Flag;
|
| + break;
|
| + case Token::NOPERSPECTIVE:
|
| + this->nextToken();
|
| + flags |= ASTModifiers::kNoPerspective_Flag;
|
| + break;
|
| default:
|
| return ASTModifiers(layout, flags);
|
| }
|
|
|