Commit e4b1b1d8 by Nicolas Capens

Implement shader compiler support for uint vectors.

Bug 19331817 Change-Id: Ib85c82f7490a5e48830fb496cddbb5aa6837dfb2 Reviewed-on: https://swiftshader-review.googlesource.com/2313Reviewed-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 3c20f806
...@@ -601,6 +601,9 @@ bool TIntermOperator::isConstructor() const ...@@ -601,6 +601,9 @@ bool TIntermOperator::isConstructor() const
case EOpConstructIVec3: case EOpConstructIVec3:
case EOpConstructIVec4: case EOpConstructIVec4:
case EOpConstructInt: case EOpConstructInt:
case EOpConstructUVec2:
case EOpConstructUVec3:
case EOpConstructUVec4:
case EOpConstructUInt: case EOpConstructUInt:
case EOpConstructBVec2: case EOpConstructBVec2:
case EOpConstructBVec3: case EOpConstructBVec3:
......
...@@ -138,6 +138,9 @@ O [0-7] ...@@ -138,6 +138,9 @@ O [0-7]
"ivec2" { context->lexAfterType = true; return (IVEC2); } "ivec2" { context->lexAfterType = true; return (IVEC2); }
"ivec3" { context->lexAfterType = true; return (IVEC3); } "ivec3" { context->lexAfterType = true; return (IVEC3); }
"ivec4" { context->lexAfterType = true; return (IVEC4); } "ivec4" { context->lexAfterType = true; return (IVEC4); }
"uvec2" { return ES2_identifier_ES3_keyword(context, UVEC2); }
"uvec3" { return ES2_identifier_ES3_keyword(context, UVEC3); }
"uvec4" { return ES2_identifier_ES3_keyword(context, UVEC4); }
"bvec2" { context->lexAfterType = true; return (BVEC2); } "bvec2" { context->lexAfterType = true; return (BVEC2); }
"bvec3" { context->lexAfterType = true; return (BVEC3); } "bvec3" { context->lexAfterType = true; return (BVEC3); }
"bvec4" { context->lexAfterType = true; return (BVEC4); } "bvec4" { context->lexAfterType = true; return (BVEC4); }
......
...@@ -123,7 +123,7 @@ extern void yyerror(TParseContext* context, const char* reason); ...@@ -123,7 +123,7 @@ extern void yyerror(TParseContext* context, const char* reason);
%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 UINT_TYPE %token <lex> ATTRIBUTE CONST_QUAL BOOL_TYPE FLOAT_TYPE INT_TYPE UINT_TYPE
%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT %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 UVEC2 UVEC3 UVEC4
%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> CENTROID FLAT SMOOTH
%token <lex> STRUCT VOID_TYPE WHILE %token <lex> STRUCT VOID_TYPE WHILE
...@@ -1673,6 +1673,21 @@ type_specifier_nonarray ...@@ -1673,6 +1673,21 @@ type_specifier_nonarray
$$.setBasic(EbtInt, qual, $1.line); $$.setBasic(EbtInt, qual, $1.line);
$$.setAggregate(4); $$.setAggregate(4);
} }
| UVEC2 {
TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
$$.setBasic(EbtUInt, qual, $1.line);
$$.setAggregate(2);
}
| UVEC3 {
TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
$$.setBasic(EbtUInt, qual, $1.line);
$$.setAggregate(3);
}
| UVEC4 {
TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
$$.setBasic(EbtUInt, qual, $1.line);
$$.setAggregate(4);
}
| MATRIX2 { | MATRIX2 {
FRAG_VERT_ONLY("mat2", $1.line); FRAG_VERT_ONLY("mat2", $1.line);
TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
......
...@@ -70,78 +70,81 @@ ...@@ -70,78 +70,81 @@
VEC2 = 286, VEC2 = 286,
VEC3 = 287, VEC3 = 287,
VEC4 = 288, VEC4 = 288,
MATRIX2 = 289, UVEC2 = 289,
MATRIX3 = 290, UVEC3 = 290,
MATRIX4 = 291, UVEC4 = 291,
IN_QUAL = 292, MATRIX2 = 292,
OUT_QUAL = 293, MATRIX3 = 293,
INOUT_QUAL = 294, MATRIX4 = 294,
UNIFORM = 295, IN_QUAL = 295,
VARYING = 296, OUT_QUAL = 296,
CENTROID = 297, INOUT_QUAL = 297,
FLAT = 298, UNIFORM = 298,
SMOOTH = 299, VARYING = 299,
STRUCT = 300, CENTROID = 300,
VOID_TYPE = 301, FLAT = 301,
WHILE = 302, SMOOTH = 302,
SAMPLER2D = 303, STRUCT = 303,
SAMPLERCUBE = 304, VOID_TYPE = 304,
SAMPLER_EXTERNAL_OES = 305, WHILE = 305,
SAMPLER2DRECT = 306, SAMPLER2D = 306,
SAMPLER3D = 307, SAMPLERCUBE = 307,
SAMPLER3DRECT = 308, SAMPLER_EXTERNAL_OES = 308,
SAMPLER2DSHADOW = 309, SAMPLER2DRECT = 309,
IDENTIFIER = 310, SAMPLER3D = 310,
TYPE_NAME = 311, SAMPLER3DRECT = 311,
FLOATCONSTANT = 312, SAMPLER2DSHADOW = 312,
INTCONSTANT = 313, IDENTIFIER = 313,
BOOLCONSTANT = 314, TYPE_NAME = 314,
FIELD_SELECTION = 315, FLOATCONSTANT = 315,
LEFT_OP = 316, INTCONSTANT = 316,
RIGHT_OP = 317, BOOLCONSTANT = 317,
INC_OP = 318, FIELD_SELECTION = 318,
DEC_OP = 319, LEFT_OP = 319,
LE_OP = 320, RIGHT_OP = 320,
GE_OP = 321, INC_OP = 321,
EQ_OP = 322, DEC_OP = 322,
NE_OP = 323, LE_OP = 323,
AND_OP = 324, GE_OP = 324,
OR_OP = 325, EQ_OP = 325,
XOR_OP = 326, NE_OP = 326,
MUL_ASSIGN = 327, AND_OP = 327,
DIV_ASSIGN = 328, OR_OP = 328,
ADD_ASSIGN = 329, XOR_OP = 329,
MOD_ASSIGN = 330, MUL_ASSIGN = 330,
LEFT_ASSIGN = 331, DIV_ASSIGN = 331,
RIGHT_ASSIGN = 332, ADD_ASSIGN = 332,
AND_ASSIGN = 333, MOD_ASSIGN = 333,
XOR_ASSIGN = 334, LEFT_ASSIGN = 334,
OR_ASSIGN = 335, RIGHT_ASSIGN = 335,
SUB_ASSIGN = 336, AND_ASSIGN = 336,
LEFT_PAREN = 337, XOR_ASSIGN = 337,
RIGHT_PAREN = 338, OR_ASSIGN = 338,
LEFT_BRACKET = 339, SUB_ASSIGN = 339,
RIGHT_BRACKET = 340, LEFT_PAREN = 340,
LEFT_BRACE = 341, RIGHT_PAREN = 341,
RIGHT_BRACE = 342, LEFT_BRACKET = 342,
DOT = 343, RIGHT_BRACKET = 343,
COMMA = 344, LEFT_BRACE = 344,
COLON = 345, RIGHT_BRACE = 345,
EQUAL = 346, DOT = 346,
SEMICOLON = 347, COMMA = 347,
BANG = 348, COLON = 348,
DASH = 349, EQUAL = 349,
TILDE = 350, SEMICOLON = 350,
PLUS = 351, BANG = 351,
STAR = 352, DASH = 352,
SLASH = 353, TILDE = 353,
PERCENT = 354, PLUS = 354,
LEFT_ANGLE = 355, STAR = 355,
RIGHT_ANGLE = 356, SLASH = 356,
VERTICAL_BAR = 357, PERCENT = 357,
CARET = 358, LEFT_ANGLE = 358,
AMPERSAND = 359, RIGHT_ANGLE = 359,
QUESTION = 360 VERTICAL_BAR = 360,
CARET = 361,
AMPERSAND = 362,
QUESTION = 363
}; };
#endif #endif
......
...@@ -223,7 +223,10 @@ bool TOutputTraverser::visitAggregate(Visit visit, TIntermAggregate* node) ...@@ -223,7 +223,10 @@ bool TOutputTraverser::visitAggregate(Visit visit, TIntermAggregate* node)
case EOpConstructIVec2: out << "Construct ivec2"; break; case EOpConstructIVec2: out << "Construct ivec2"; break;
case EOpConstructIVec3: out << "Construct ivec3"; break; case EOpConstructIVec3: out << "Construct ivec3"; break;
case EOpConstructIVec4: out << "Construct ivec4"; break; case EOpConstructIVec4: out << "Construct ivec4"; break;
case EOpConstructUInt: out << "Construct uint"; break; case EOpConstructUInt: out << "Construct uint"; break;
case EOpConstructUVec2: out << "Construct uvec2"; break;
case EOpConstructUVec3: out << "Construct uvec3"; break;
case EOpConstructUVec4: out << "Construct uvec4"; break;
case EOpConstructMat2: out << "Construct mat2"; break; case EOpConstructMat2: out << "Construct mat2"; break;
case EOpConstructMat3: out << "Construct mat3"; break; case EOpConstructMat3: out << "Construct mat3"; break;
case EOpConstructMat4: out << "Construct mat4"; break; case EOpConstructMat4: out << "Construct mat4"; break;
......
...@@ -157,6 +157,9 @@ enum TOperator { ...@@ -157,6 +157,9 @@ enum TOperator {
EOpConstructIVec2, EOpConstructIVec2,
EOpConstructIVec3, EOpConstructIVec3,
EOpConstructIVec4, EOpConstructIVec4,
EOpConstructUVec2,
EOpConstructUVec3,
EOpConstructUVec4,
EOpConstructMat2, EOpConstructMat2,
EOpConstructMat3, EOpConstructMat3,
EOpConstructMat4, EOpConstructMat4,
......
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