Commit c6841851 by Nicolas Capens

Add support for new ESSL 3.00 keywords.

Bug 19331817 Change-Id: I3315de44d1976219fada3013af13146433aa6eaa Reviewed-on: https://swiftshader-review.googlesource.com/2100Reviewed-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com> Tested-by: 's avatarNicolas Capens <capn@google.com>
parent 996314b4
...@@ -120,7 +120,7 @@ bool TCompiler::compile(const char* const shaderStrings[], ...@@ -120,7 +120,7 @@ bool TCompiler::compile(const char* const shaderStrings[],
(PaParseStrings(numStrings - firstSource, &shaderStrings[firstSource], NULL, &parseContext) == 0) && (PaParseStrings(numStrings - firstSource, &shaderStrings[firstSource], NULL, &parseContext) == 0) &&
(parseContext.treeRoot != NULL); (parseContext.treeRoot != NULL);
shaderVersion = parseContext.shaderVersion(); shaderVersion = parseContext.getShaderVersion();
if (success) { if (success) {
TIntermNode* root = parseContext.treeRoot; TIntermNode* root = parseContext.treeRoot;
......
...@@ -297,6 +297,9 @@ ...@@ -297,6 +297,9 @@
<ClInclude Include="ConstantUnion.h" /> <ClInclude Include="ConstantUnion.h" />
<ClInclude Include="debug.h" /> <ClInclude Include="debug.h" />
<ClInclude Include="Diagnostics.h" /> <ClInclude Include="Diagnostics.h" />
<ClInclude Include="DirectiveHandler.h" />
<ClInclude Include="ExtensionBehavior.h" />
<ClInclude Include="glslang.h" />
<ClInclude Include="InfoSink.h" /> <ClInclude Include="InfoSink.h" />
<ClInclude Include="Initialize.h" /> <ClInclude Include="Initialize.h" />
<ClInclude Include="InitializeGlobals.h" /> <ClInclude Include="InitializeGlobals.h" />
......
...@@ -160,6 +160,15 @@ ...@@ -160,6 +160,15 @@
<ClInclude Include="Compiler.h"> <ClInclude Include="Compiler.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="DirectiveHandler.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ExtensionBehavior.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="glslang.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<CustomBuild Include="glslang.l"> <CustomBuild Include="glslang.l">
......
...@@ -26,9 +26,11 @@ static TBehavior getBehavior(const std::string& str) ...@@ -26,9 +26,11 @@ static TBehavior getBehavior(const std::string& str)
} }
TDirectiveHandler::TDirectiveHandler(TExtensionBehavior& extBehavior, TDirectiveHandler::TDirectiveHandler(TExtensionBehavior& extBehavior,
TDiagnostics& diagnostics) TDiagnostics& diagnostics,
int& shaderVersion)
: mExtensionBehavior(extBehavior), : mExtensionBehavior(extBehavior),
mDiagnostics(diagnostics) mDiagnostics(diagnostics),
mShaderVersion(shaderVersion)
{ {
} }
...@@ -151,7 +153,7 @@ void TDirectiveHandler::handleVersion(const pp::SourceLocation& loc, ...@@ -151,7 +153,7 @@ void TDirectiveHandler::handleVersion(const pp::SourceLocation& loc,
if (version == 100 || if (version == 100 ||
version == 300) version == 300)
{ {
mDiagnostics.setShaderVersion(version); mShaderVersion = version;
} }
else else
{ {
......
...@@ -15,9 +15,10 @@ class TDiagnostics; ...@@ -15,9 +15,10 @@ class TDiagnostics;
class TDirectiveHandler : public pp::DirectiveHandler class TDirectiveHandler : public pp::DirectiveHandler
{ {
public: public:
TDirectiveHandler(TExtensionBehavior& extBehavior, TDirectiveHandler(TExtensionBehavior& extBehavior,
TDiagnostics& diagnostics); TDiagnostics& diagnostics,
int& shaderVersion);
virtual ~TDirectiveHandler(); virtual ~TDirectiveHandler();
const TPragma& pragma() const { return mPragma; } const TPragma& pragma() const { return mPragma; }
...@@ -37,10 +38,11 @@ class TDirectiveHandler : public pp::DirectiveHandler ...@@ -37,10 +38,11 @@ class TDirectiveHandler : public pp::DirectiveHandler
virtual void handleVersion(const pp::SourceLocation& loc, virtual void handleVersion(const pp::SourceLocation& loc,
int version); int version);
private: private:
TPragma mPragma; TPragma mPragma;
TExtensionBehavior& mExtensionBehavior; TExtensionBehavior& mExtensionBehavior;
TDiagnostics& mDiagnostics; TDiagnostics& mDiagnostics;
int& mShaderVersion;
}; };
#endif // COMPILER_DIRECTIVE_HANDLER_H_ #endif // COMPILER_DIRECTIVE_HANDLER_H_
...@@ -40,12 +40,14 @@ struct TParseContext { ...@@ -40,12 +40,14 @@ struct TParseContext {
functionReturnsValue(false), functionReturnsValue(false),
checksPrecisionErrors(checksPrecErrors), checksPrecisionErrors(checksPrecErrors),
diagnostics(is), diagnostics(is),
directiveHandler(ext, diagnostics), shaderVersion(100),
directiveHandler(ext, diagnostics, shaderVersion),
preprocessor(&diagnostics, &directiveHandler), preprocessor(&diagnostics, &directiveHandler),
scanner(NULL) { } scanner(NULL) { }
TIntermediate& intermediate; // to hold and build a parse tree TIntermediate& intermediate; // to hold and build a parse tree
TSymbolTable& symbolTable; // symbol table that goes with the language currently being parsed TSymbolTable& symbolTable; // symbol table that goes with the language currently being parsed
GLenum shaderType; // vertex or fragment language (future: pack or unpack) GLenum shaderType; // vertex or fragment language (future: pack or unpack)
int shaderVersion;
int compileOptions; int compileOptions;
const char* sourcePath; // Path of source file or NULL. const char* sourcePath; // Path of source file or NULL.
TIntermNode* treeRoot; // root of parse tree being created TIntermNode* treeRoot; // root of parse tree being created
...@@ -63,7 +65,7 @@ struct TParseContext { ...@@ -63,7 +65,7 @@ struct TParseContext {
pp::Preprocessor preprocessor; pp::Preprocessor preprocessor;
void* scanner; void* scanner;
int shaderVersion() const { return diagnostics.shaderVersion(); } int getShaderVersion() const { return shaderVersion; }
int numErrors() const { return diagnostics.numErrors(); } int numErrors() const { return diagnostics.numErrors(); }
TInfoSink& infoSink() { return diagnostics.infoSink(); } TInfoSink& infoSink() { return diagnostics.infoSink(); }
void error(TSourceLoc loc, const char *reason, const char* token, void error(TSourceLoc loc, const char *reason, const char* token,
......
...@@ -15,7 +15,7 @@ WHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp). ...@@ -15,7 +15,7 @@ WHICH GENERATES THE GLSL ES LEXER (glslang_lex.cpp).
%top{ %top{
// //
// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. // Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
...@@ -89,10 +89,10 @@ O [0-7] ...@@ -89,10 +89,10 @@ O [0-7]
"lowp" { return(LOW_PRECISION); } "lowp" { return(LOW_PRECISION); }
"precision" { return(PRECISION); } "precision" { return(PRECISION); }
"attribute" { return(ATTRIBUTE); } "attribute" { if (context->shaderVersion < 300) return(ATTRIBUTE); return reserved_word(yyscanner); }
"const" { return(CONST_QUAL); } "const" { return(CONST_QUAL); }
"uniform" { return(UNIFORM); } "uniform" { return(UNIFORM); }
"varying" { return(VARYING); } "varying" { if (context->shaderVersion < 300) return(VARYING); return reserved_word(yyscanner); }
"break" { return(BREAK); } "break" { return(BREAK); }
"continue" { return(CONTINUE); } "continue" { return(CONTINUE); }
...@@ -102,6 +102,13 @@ O [0-7] ...@@ -102,6 +102,13 @@ O [0-7]
"if" { return(IF); } "if" { return(IF); }
"else" { return(ELSE); } "else" { return(ELSE); }
"switch" { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(SWITCH); }
"case" { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(CASE); }
"default" { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(DEFAULT); }
"centroid" { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(CENTROID); }
"flat" { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(FLAT); }
"smooth" { if (context->shaderVersion < 300) return reserved_word(yyscanner); return(SMOOTH); }
"in" { return(IN_QUAL); } "in" { return(IN_QUAL); }
"out" { return(OUT_QUAL); } "out" { return(OUT_QUAL); }
...@@ -131,71 +138,133 @@ O [0-7] ...@@ -131,71 +138,133 @@ O [0-7]
"bvec3" { context->lexAfterType = true; return (BVEC3); } "bvec3" { context->lexAfterType = true; return (BVEC3); }
"bvec4" { context->lexAfterType = true; return (BVEC4); } "bvec4" { context->lexAfterType = true; return (BVEC4); }
"sampler2D" { context->lexAfterType = true; return SAMPLER2D; } "sampler2D" { context->lexAfterType = true; return SAMPLER2D; }
"samplerCube" { context->lexAfterType = true; return SAMPLERCUBE; } "samplerCube" { context->lexAfterType = true; return SAMPLERCUBE; }
"samplerExternalOES" { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; } "samplerExternalOES" { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
"sampler3D" { context->lexAfterType = true; return SAMPLER3D; } "sampler3D" { context->lexAfterType = true; return SAMPLER3D; }
"sampler3DRect" { if (context->shaderVersion < 300) return reserved_word(yyscanner); context->lexAfterType = true; return SAMPLER3DRECT; }
"sampler2DShadow" { if (context->shaderVersion < 300) return reserved_word(yyscanner); context->lexAfterType = true; return SAMPLER2DSHADOW; }
"struct" { context->lexAfterType = true; return(STRUCT); } "struct" { context->lexAfterType = true; return(STRUCT); }
"asm" { return reserved_word(yyscanner); } /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
"coherent" |
"class" { return reserved_word(yyscanner); } "restrict" |
"union" { return reserved_word(yyscanner); } "readonly" |
"enum" { return reserved_word(yyscanner); } "writeonly" |
"typedef" { return reserved_word(yyscanner); } "resource" |
"template" { return reserved_word(yyscanner); } "atomic_uint" |
"this" { return reserved_word(yyscanner); } "noperspective" |
"packed" { return reserved_word(yyscanner); } "patch" |
"sample" |
"goto" { return reserved_word(yyscanner); } "subroutine" |
"switch" { return reserved_word(yyscanner); } "common" |
"default" { return reserved_word(yyscanner); } "partition" |
"active" |
"inline" { return reserved_word(yyscanner); }
"noinline" { return reserved_word(yyscanner); } "filter" |
"volatile" { return reserved_word(yyscanner); } "image1D" |
"public" { return reserved_word(yyscanner); } "image2D" |
"static" { return reserved_word(yyscanner); } "image3D" |
"extern" { return reserved_word(yyscanner); } "imageCube" |
"external" { return reserved_word(yyscanner); } "iimage1D" |
"interface" { return reserved_word(yyscanner); } "iimage2D" |
"flat" { return reserved_word(yyscanner); } "iimage3D" |
"iimageCube" |
"long" { return reserved_word(yyscanner); } "uimage1D" |
"short" { return reserved_word(yyscanner); } "uimage2D" |
"double" { return reserved_word(yyscanner); } "uimage3D" |
"half" { return reserved_word(yyscanner); } "uimageCube" |
"fixed" { return reserved_word(yyscanner); } "image1DArray" |
"unsigned" { return reserved_word(yyscanner); } "image2DArray" |
"superp" { return reserved_word(yyscanner); } "iimage1DArray" |
"iimage2DArray" |
"input" { return reserved_word(yyscanner); } "uimage1DArray" |
"output" { return reserved_word(yyscanner); } "uimage2DArray" |
"image1DShadow" |
"hvec2" { return reserved_word(yyscanner); } "image2DShadow" |
"hvec3" { return reserved_word(yyscanner); } "image1DArrayShadow" |
"hvec4" { return reserved_word(yyscanner); } "image2DArrayShadow" |
"dvec2" { return reserved_word(yyscanner); } "imageBuffer" |
"dvec3" { return reserved_word(yyscanner); } "iimageBuffer" |
"dvec4" { return reserved_word(yyscanner); } "uimageBuffer" |
"fvec2" { return reserved_word(yyscanner); }
"fvec3" { return reserved_word(yyscanner); } "sampler1DArray" |
"fvec4" { return reserved_word(yyscanner); } "sampler1DArrayShadow" |
"isampler1D" |
"sampler1D" { return reserved_word(yyscanner); } "isampler1DArray" |
"usampler1D" |
"sampler1DShadow" { return reserved_word(yyscanner); } "usampler1DArray" |
"sampler2DShadow" { return reserved_word(yyscanner); } "isampler2DRect" |
"usampler2DRect" |
"sampler2DRect" { return reserved_word(yyscanner); } "samplerBuffer" |
"sampler3DRect" { return reserved_word(yyscanner); } "isamplerBuffer" |
"sampler2DRectShadow" { return reserved_word(yyscanner); } "usamplerBuffer" |
"sampler2DMS" |
"sizeof" { return reserved_word(yyscanner); } "isampler2DMS" |
"cast" { return reserved_word(yyscanner); } "usampler2DMS" |
"sampler2DMSArray" |
"namespace" { return reserved_word(yyscanner); } "isampler2DMSArray" |
"usampler2DMSArray" {
if (context->shaderVersion < 300) {
yylval->lex.string = NewPoolTString(yytext);
return check_type(yyscanner);
}
return reserved_word(yyscanner);
}
/* Reserved keywords */
"asm" |
"class" |
"union" |
"enum" |
"typedef" |
"template" |
"this" |
"packed" |
"goto" |
"inline" |
"noinline" |
"volatile" |
"public" |
"static" |
"extern" |
"external" |
"interface" |
"long" |
"short" |
"double" |
"half" |
"fixed" |
"unsigned" |
"superp" |
"input" |
"output" |
"hvec2" |
"hvec3" |
"hvec4" |
"dvec2" |
"dvec3" |
"dvec4" |
"fvec2" |
"fvec3" |
"fvec4" |
"sampler1D" |
"sampler1DShadow" |
"sampler2DRect" |
"sampler2DRectShadow" |
"sizeof" |
"cast" |
"namespace" |
"using" { return reserved_word(yyscanner); } "using" { return reserved_word(yyscanner); }
{L}({L}|{D})* { {L}({L}|{D})* {
...@@ -237,27 +306,27 @@ O [0-7] ...@@ -237,27 +306,27 @@ O [0-7]
";" { context->lexAfterType = false; return(SEMICOLON); } ";" { context->lexAfterType = false; return(SEMICOLON); }
("{"|"<%") { context->lexAfterType = false; return(LEFT_BRACE); } ("{"|"<%") { context->lexAfterType = false; return(LEFT_BRACE); }
("}"|"%>") { return(RIGHT_BRACE); } ("}"|"%>") { return(RIGHT_BRACE); }
"," { if (context->inTypeParen) context->lexAfterType = false; return(COMMA); } "," { if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
":" { return(COLON); } ":" { return(COLON); }
"=" { context->lexAfterType = false; return(EQUAL); } "=" { context->lexAfterType = false; return(EQUAL); }
"(" { context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); } "(" { context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
")" { context->inTypeParen = false; return(RIGHT_PAREN); } ")" { context->inTypeParen = false; return(RIGHT_PAREN); }
("["|"<:") { return(LEFT_BRACKET); } ("["|"<:") { return(LEFT_BRACKET); }
("]"|":>") { return(RIGHT_BRACKET); } ("]"|":>") { return(RIGHT_BRACKET); }
"." { BEGIN(FIELDS); return(DOT); } "." { BEGIN(FIELDS); return(DOT); }
"!" { return(BANG); } "!" { return(BANG); }
"-" { return(DASH); } "-" { return(DASH); }
"~" { return(TILDE); } "~" { return(TILDE); }
"+" { return(PLUS); } "+" { return(PLUS); }
"*" { return(STAR); } "*" { return(STAR); }
"/" { return(SLASH); } "/" { return(SLASH); }
"%" { return(PERCENT); } "%" { return(PERCENT); }
"<" { return(LEFT_ANGLE); } "<" { return(LEFT_ANGLE); }
">" { return(RIGHT_ANGLE); } ">" { return(RIGHT_ANGLE); }
"|" { return(VERTICAL_BAR); } "|" { return(VERTICAL_BAR); }
"^" { return(CARET); } "^" { return(CARET); }
"&" { return(AMPERSAND); } "&" { return(AMPERSAND); }
"?" { return(QUESTION); } "?" { return(QUESTION); }
<FIELDS>{L}({L}|{D})* { <FIELDS>{L}({L}|{D})* {
BEGIN(INITIAL); BEGIN(INITIAL);
......
...@@ -104,15 +104,31 @@ extern void yyerror(TParseContext* context, const char* reason); ...@@ -104,15 +104,31 @@ extern void yyerror(TParseContext* context, const char* reason);
context->recover(); \ context->recover(); \
} \ } \
} }
#define ES2_ONLY(S, L) { \
if (context->shaderVersion != 100) { \
context->error(L, " supported in GLSL ES 1.00 only ", S); \
context->recover(); \
} \
}
#define ES3_ONLY(S, L) { \
if (context->shaderVersion != 300) { \
context->error(L, " supported in GLSL ES 3.00 only ", S); \
context->recover(); \
} \
}
%} %}
%token <lex> INVARIANT HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION %token <lex> INVARIANT HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION
%token <lex> ATTRIBUTE CONST_QUAL BOOL_TYPE FLOAT_TYPE INT_TYPE %token <lex> ATTRIBUTE CONST_QUAL BOOL_TYPE FLOAT_TYPE INT_TYPE
%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
%token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4 %token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4
%token <lex> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM VARYING %token <lex> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM VARYING
%token <lex> CENTROID FLAT SMOOTH
%token <lex> STRUCT VOID_TYPE WHILE %token <lex> STRUCT VOID_TYPE WHILE
%token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER3D %token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT
%token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW
%token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT BOOLCONSTANT %token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT BOOLCONSTANT
%token <lex> FIELD_SELECTION %token <lex> FIELD_SELECTION
...@@ -1486,11 +1502,13 @@ type_qualifier ...@@ -1486,11 +1502,13 @@ type_qualifier
} }
| ATTRIBUTE { | ATTRIBUTE {
VERTEX_ONLY("attribute", $1.line); VERTEX_ONLY("attribute", $1.line);
ES2_ONLY("attribute", $1.line);
if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "attribute")) if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "attribute"))
context->recover(); context->recover();
$$.setBasic(EbtVoid, EvqAttribute, $1.line); $$.setBasic(EbtVoid, EvqAttribute, $1.line);
} }
| VARYING { | VARYING {
ES2_ONLY("varying", $1.line);
if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "varying")) if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "varying"))
context->recover(); context->recover();
if (context->shaderType == GL_VERTEX_SHADER) if (context->shaderType == GL_VERTEX_SHADER)
...@@ -1499,6 +1517,7 @@ type_qualifier ...@@ -1499,6 +1517,7 @@ type_qualifier
$$.setBasic(EbtVoid, EvqVaryingIn, $1.line); $$.setBasic(EbtVoid, EvqVaryingIn, $1.line);
} }
| INVARIANT VARYING { | INVARIANT VARYING {
ES2_ONLY("varying", $1.line);
if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "invariant varying")) if (context->globalErrorCheck($1.line, context->symbolTable.atGlobalLevel(), "invariant varying"))
context->recover(); context->recover();
if (context->shaderType == GL_VERTEX_SHADER) if (context->shaderType == GL_VERTEX_SHADER)
......
...@@ -57,81 +57,90 @@ ...@@ -57,81 +57,90 @@
IF = 273, IF = 273,
DISCARD = 274, DISCARD = 274,
RETURN = 275, RETURN = 275,
BVEC2 = 276, SWITCH = 276,
BVEC3 = 277, CASE = 277,
BVEC4 = 278, DEFAULT = 278,
IVEC2 = 279, BVEC2 = 279,
IVEC3 = 280, BVEC3 = 280,
IVEC4 = 281, BVEC4 = 281,
VEC2 = 282, IVEC2 = 282,
VEC3 = 283, IVEC3 = 283,
VEC4 = 284, IVEC4 = 284,
MATRIX2 = 285, VEC2 = 285,
MATRIX3 = 286, VEC3 = 286,
MATRIX4 = 287, VEC4 = 287,
IN_QUAL = 288, MATRIX2 = 288,
OUT_QUAL = 289, MATRIX3 = 289,
INOUT_QUAL = 290, MATRIX4 = 290,
UNIFORM = 291, IN_QUAL = 291,
VARYING = 292, OUT_QUAL = 292,
STRUCT = 293, INOUT_QUAL = 293,
VOID_TYPE = 294, UNIFORM = 294,
WHILE = 295, VARYING = 295,
SAMPLER2D = 296, CENTROID = 296,
SAMPLERCUBE = 297, FLAT = 297,
SAMPLER_EXTERNAL_OES = 298, SMOOTH = 298,
SAMPLER3D = 299, STRUCT = 299,
IDENTIFIER = 300, VOID_TYPE = 300,
TYPE_NAME = 301, WHILE = 301,
FLOATCONSTANT = 302, SAMPLER2D = 302,
INTCONSTANT = 303, SAMPLERCUBE = 303,
BOOLCONSTANT = 304, SAMPLER_EXTERNAL_OES = 304,
FIELD_SELECTION = 305, SAMPLER2DRECT = 305,
LEFT_OP = 306, SAMPLER3D = 306,
RIGHT_OP = 307, SAMPLER3DRECT = 307,
INC_OP = 308, SAMPLER2DSHADOW = 308,
DEC_OP = 309, IDENTIFIER = 309,
LE_OP = 310, TYPE_NAME = 310,
GE_OP = 311, FLOATCONSTANT = 311,
EQ_OP = 312, INTCONSTANT = 312,
NE_OP = 313, BOOLCONSTANT = 313,
AND_OP = 314, FIELD_SELECTION = 314,
OR_OP = 315, LEFT_OP = 315,
XOR_OP = 316, RIGHT_OP = 316,
MUL_ASSIGN = 317, INC_OP = 317,
DIV_ASSIGN = 318, DEC_OP = 318,
ADD_ASSIGN = 319, LE_OP = 319,
MOD_ASSIGN = 320, GE_OP = 320,
LEFT_ASSIGN = 321, EQ_OP = 321,
RIGHT_ASSIGN = 322, NE_OP = 322,
AND_ASSIGN = 323, AND_OP = 323,
XOR_ASSIGN = 324, OR_OP = 324,
OR_ASSIGN = 325, XOR_OP = 325,
SUB_ASSIGN = 326, MUL_ASSIGN = 326,
LEFT_PAREN = 327, DIV_ASSIGN = 327,
RIGHT_PAREN = 328, ADD_ASSIGN = 328,
LEFT_BRACKET = 329, MOD_ASSIGN = 329,
RIGHT_BRACKET = 330, LEFT_ASSIGN = 330,
LEFT_BRACE = 331, RIGHT_ASSIGN = 331,
RIGHT_BRACE = 332, AND_ASSIGN = 332,
DOT = 333, XOR_ASSIGN = 333,
COMMA = 334, OR_ASSIGN = 334,
COLON = 335, SUB_ASSIGN = 335,
EQUAL = 336, LEFT_PAREN = 336,
SEMICOLON = 337, RIGHT_PAREN = 337,
BANG = 338, LEFT_BRACKET = 338,
DASH = 339, RIGHT_BRACKET = 339,
TILDE = 340, LEFT_BRACE = 340,
PLUS = 341, RIGHT_BRACE = 341,
STAR = 342, DOT = 342,
SLASH = 343, COMMA = 343,
PERCENT = 344, COLON = 344,
LEFT_ANGLE = 345, EQUAL = 345,
RIGHT_ANGLE = 346, SEMICOLON = 346,
VERTICAL_BAR = 347, BANG = 347,
CARET = 348, DASH = 348,
AMPERSAND = 349, TILDE = 349,
QUESTION = 350 PLUS = 350,
STAR = 351,
SLASH = 352,
PERCENT = 353,
LEFT_ANGLE = 354,
RIGHT_ANGLE = 355,
VERTICAL_BAR = 356,
CARET = 357,
AMPERSAND = 358,
QUESTION = 359
}; };
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment