Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: src/sksl/SkSLParser.cpp

Issue 2185393003: added initial GLSL support to skslc (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fixed gn build Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/sksl/SkSLIRGenerator.cpp ('k') | src/sksl/SkSLSPIRVCodeGenerator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2016 Google Inc. 2 * Copyright 2016 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "stdio.h" 8 #include "stdio.h"
9 #include "SkSLParser.h" 9 #include "SkSLParser.h"
10 #include "SkSLToken.h" 10 #include "SkSLToken.h"
11 11
12 #define register 12 #define register
13 #ifdef __clang__ 13 #ifdef __clang__
14 #pragma clang diagnostic push 14 #pragma clang diagnostic push
15 #pragma clang diagnostic ignored "-Wunneeded-internal-declaration" 15 #pragma clang diagnostic ignored "-Wunneeded-internal-declaration"
16 #pragma clang diagnostic ignored "-Wnull-conversion" 16 #pragma clang diagnostic ignored "-Wnull-conversion"
17 #pragma clang diagnostic ignored "-Wsign-compare"
18 #endif
19 #ifdef __GNUC__
20 #pragma GCC diagnostic push
21 #pragma GCC diagnostic ignored "-Wsign-compare"
22 #endif
23 #ifdef _MSC_VER
24 #pragma warning(push)
25 #pragma warning(disable:4018)
17 #endif 26 #endif
18 #include "lex.sksl.c" 27 #include "lex.sksl.c"
19 #ifdef __clang__ 28 #ifdef __clang__
20 #pragma clang diagnostic pop 29 #pragma clang diagnostic pop
21 #endif 30 #endif
31 #ifdef __GNUC__
32 #pragma GCC diagnostic pop
33 #endif
34 #ifdef _MSC_VER
35 #pragma warning(pop)
36 #endif
22 #undef register 37 #undef register
23 38
24 #include "ast/SkSLASTBinaryExpression.h" 39 #include "ast/SkSLASTBinaryExpression.h"
25 #include "ast/SkSLASTBlock.h" 40 #include "ast/SkSLASTBlock.h"
26 #include "ast/SkSLASTBoolLiteral.h" 41 #include "ast/SkSLASTBoolLiteral.h"
27 #include "ast/SkSLASTBreakStatement.h" 42 #include "ast/SkSLASTBreakStatement.h"
28 #include "ast/SkSLASTCallSuffix.h" 43 #include "ast/SkSLASTCallSuffix.h"
29 #include "ast/SkSLASTContinueStatement.h" 44 #include "ast/SkSLASTContinueStatement.h"
30 #include "ast/SkSLASTDiscardStatement.h" 45 #include "ast/SkSLASTDiscardStatement.h"
31 #include "ast/SkSLASTDoStatement.h" 46 #include "ast/SkSLASTDoStatement.h"
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 } 479 }
465 480
466 /* LAYOUT LPAREN IDENTIFIER EQ INT_LITERAL (COMMA IDENTIFIER EQ INT_LITERAL)* 481 /* LAYOUT LPAREN IDENTIFIER EQ INT_LITERAL (COMMA IDENTIFIER EQ INT_LITERAL)*
467 RPAREN */ 482 RPAREN */
468 ASTLayout Parser::layout() { 483 ASTLayout Parser::layout() {
469 int location = -1; 484 int location = -1;
470 int binding = -1; 485 int binding = -1;
471 int index = -1; 486 int index = -1;
472 int set = -1; 487 int set = -1;
473 int builtin = -1; 488 int builtin = -1;
489 bool originUpperLeft = false;
474 if (this->peek().fKind == Token::LAYOUT) { 490 if (this->peek().fKind == Token::LAYOUT) {
475 this->nextToken(); 491 this->nextToken();
476 if (!this->expect(Token::LPAREN, "'('")) { 492 if (!this->expect(Token::LPAREN, "'('")) {
477 return ASTLayout(location, binding, index, set, builtin); 493 return ASTLayout(location, binding, index, set, builtin, originUpper Left);
478 } 494 }
479 for (;;) { 495 for (;;) {
480 Token t = this->nextToken(); 496 Token t = this->nextToken();
481 if (t.fText == "location") { 497 if (t.fText == "location") {
482 location = this->layoutInt(); 498 location = this->layoutInt();
483 } else if (t.fText == "binding") { 499 } else if (t.fText == "binding") {
484 binding = this->layoutInt(); 500 binding = this->layoutInt();
485 } else if (t.fText == "index") { 501 } else if (t.fText == "index") {
486 index = this->layoutInt(); 502 index = this->layoutInt();
487 } else if (t.fText == "set") { 503 } else if (t.fText == "set") {
488 set = this->layoutInt(); 504 set = this->layoutInt();
489 } else if (t.fText == "builtin") { 505 } else if (t.fText == "builtin") {
490 builtin = this->layoutInt(); 506 builtin = this->layoutInt();
507 } else if (t.fText == "origin_upper_left") {
508 originUpperLeft = true;
491 } else { 509 } else {
492 this->error(t.fPosition, ("'" + t.fText + 510 this->error(t.fPosition, ("'" + t.fText +
493 "' is not a valid layout qualifier").c _str()); 511 "' is not a valid layout qualifier").c _str());
494 } 512 }
495 if (this->peek().fKind == Token::RPAREN) { 513 if (this->peek().fKind == Token::RPAREN) {
496 this->nextToken(); 514 this->nextToken();
497 break; 515 break;
498 } 516 }
499 if (!this->expect(Token::COMMA, "','")) { 517 if (!this->expect(Token::COMMA, "','")) {
500 break; 518 break;
501 } 519 }
502 } 520 }
503 } 521 }
504 return ASTLayout(location, binding, index, set, builtin); 522 return ASTLayout(location, binding, index, set, builtin, originUpperLeft);
505 } 523 }
506 524
507 /* layout? (UNIFORM | CONST | IN | OUT | INOUT | LOWP | 525 /* layout? (UNIFORM | CONST | IN | OUT | INOUT | LOWP | MEDIUMP | HIGHP | FLAT | NOPERSPECTIVE)* */
508 MEDIUMP | HIGHP)* */
509 ASTModifiers Parser::modifiers() { 526 ASTModifiers Parser::modifiers() {
510 ASTLayout layout = this->layout(); 527 ASTLayout layout = this->layout();
511 int flags = 0; 528 int flags = 0;
512 for (;;) { 529 for (;;) {
513 // TODO: handle duplicate / incompatible flags 530 // TODO: handle duplicate / incompatible flags
514 switch (peek().fKind) { 531 switch (peek().fKind) {
515 case Token::UNIFORM: 532 case Token::UNIFORM:
516 this->nextToken(); 533 this->nextToken();
517 flags |= ASTModifiers::kUniform_Flag; 534 flags |= ASTModifiers::kUniform_Flag;
518 break; 535 break;
(...skipping 19 matching lines...) Expand all
538 flags |= ASTModifiers::kLowp_Flag; 555 flags |= ASTModifiers::kLowp_Flag;
539 break; 556 break;
540 case Token::MEDIUMP: 557 case Token::MEDIUMP:
541 this->nextToken(); 558 this->nextToken();
542 flags |= ASTModifiers::kMediump_Flag; 559 flags |= ASTModifiers::kMediump_Flag;
543 break; 560 break;
544 case Token::HIGHP: 561 case Token::HIGHP:
545 this->nextToken(); 562 this->nextToken();
546 flags |= ASTModifiers::kHighp_Flag; 563 flags |= ASTModifiers::kHighp_Flag;
547 break; 564 break;
565 case Token::FLAT:
566 this->nextToken();
567 flags |= ASTModifiers::kFlat_Flag;
568 break;
569 case Token::NOPERSPECTIVE:
570 this->nextToken();
571 flags |= ASTModifiers::kNoPerspective_Flag;
572 break;
548 default: 573 default:
549 return ASTModifiers(layout, flags); 574 return ASTModifiers(layout, flags);
550 } 575 }
551 } 576 }
552 } 577 }
553 578
554 ASTModifiers Parser::modifiersWithDefaults(int defaultFlags) { 579 ASTModifiers Parser::modifiersWithDefaults(int defaultFlags) {
555 ASTModifiers result = this->modifiers(); 580 ASTModifiers result = this->modifiers();
556 if (!result.fFlags) { 581 if (!result.fFlags) {
557 return ASTModifiers(result.fLayout, defaultFlags); 582 return ASTModifiers(result.fLayout, defaultFlags);
(...skipping 824 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 bool Parser::identifier(std::string* dest) { 1407 bool Parser::identifier(std::string* dest) {
1383 Token t; 1408 Token t;
1384 if (this->expect(Token::IDENTIFIER, "identifier", &t)) { 1409 if (this->expect(Token::IDENTIFIER, "identifier", &t)) {
1385 *dest = t.fText; 1410 *dest = t.fText;
1386 return true; 1411 return true;
1387 } 1412 }
1388 return false; 1413 return false;
1389 } 1414 }
1390 1415
1391 } // namespace 1416 } // namespace
OLDNEW
« no previous file with comments | « src/sksl/SkSLIRGenerator.cpp ('k') | src/sksl/SkSLSPIRVCodeGenerator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698