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