Add support for unsigned integer vector types to the shader translator.

TRAC #23080 Signed-off-by: Nicolas Capens Signed-off-by: Shannon Woods Author: Jamie Madill git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2404 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 6b709911
...@@ -168,12 +168,15 @@ int VariableRowCount(GLenum type) ...@@ -168,12 +168,15 @@ int VariableRowCount(GLenum type)
case GL_BOOL_VEC2: case GL_BOOL_VEC2:
case GL_FLOAT_VEC2: case GL_FLOAT_VEC2:
case GL_INT_VEC2: case GL_INT_VEC2:
case GL_INT_VEC3: case GL_UNSIGNED_INT_VEC2:
case GL_FLOAT_VEC3:
case GL_BOOL_VEC3: case GL_BOOL_VEC3:
case GL_FLOAT_VEC3:
case GL_INT_VEC3:
case GL_UNSIGNED_INT_VEC3:
case GL_BOOL_VEC4: case GL_BOOL_VEC4:
case GL_FLOAT_VEC4: case GL_FLOAT_VEC4:
case GL_INT_VEC4: case GL_INT_VEC4:
case GL_UNSIGNED_INT_VEC4:
case GL_SAMPLER_2D: case GL_SAMPLER_2D:
case GL_SAMPLER_CUBE: case GL_SAMPLER_CUBE:
return 1; return 1;
...@@ -212,13 +215,15 @@ int VariableColumnCount(GLenum type) ...@@ -212,13 +215,15 @@ int VariableColumnCount(GLenum type)
case GL_BOOL_VEC2: case GL_BOOL_VEC2:
case GL_FLOAT_VEC2: case GL_FLOAT_VEC2:
case GL_INT_VEC2: case GL_INT_VEC2:
case GL_UNSIGNED_INT_VEC2:
case GL_FLOAT_MAT2: case GL_FLOAT_MAT2:
case GL_FLOAT_MAT2x3: case GL_FLOAT_MAT2x3:
case GL_FLOAT_MAT2x4: case GL_FLOAT_MAT2x4:
return 2; return 2;
case GL_INT_VEC3:
case GL_FLOAT_VEC3:
case GL_BOOL_VEC3: case GL_BOOL_VEC3:
case GL_FLOAT_VEC3:
case GL_INT_VEC3:
case GL_UNSIGNED_INT_VEC3:
case GL_FLOAT_MAT3: case GL_FLOAT_MAT3:
case GL_FLOAT_MAT3x2: case GL_FLOAT_MAT3x2:
case GL_FLOAT_MAT3x4: case GL_FLOAT_MAT3x4:
...@@ -226,6 +231,7 @@ int VariableColumnCount(GLenum type) ...@@ -226,6 +231,7 @@ int VariableColumnCount(GLenum type)
case GL_BOOL_VEC4: case GL_BOOL_VEC4:
case GL_FLOAT_VEC4: case GL_FLOAT_VEC4:
case GL_INT_VEC4: case GL_INT_VEC4:
case GL_UNSIGNED_INT_VEC4:
case GL_FLOAT_MAT4: case GL_FLOAT_MAT4:
case GL_FLOAT_MAT4x2: case GL_FLOAT_MAT4x2:
case GL_FLOAT_MAT4x3: case GL_FLOAT_MAT4x3:
......
...@@ -829,6 +829,9 @@ bool TIntermOperator::isConstructor() const ...@@ -829,6 +829,9 @@ bool TIntermOperator::isConstructor() const
case EOpConstructIVec3: case EOpConstructIVec3:
case EOpConstructIVec4: case EOpConstructIVec4:
case EOpConstructInt: case EOpConstructInt:
case EOpConstructUVec2:
case EOpConstructUVec3:
case EOpConstructUVec4:
case EOpConstructUnsignedInt: case EOpConstructUnsignedInt:
case EOpConstructBVec2: case EOpConstructBVec2:
case EOpConstructBVec3: case EOpConstructBVec3:
......
...@@ -82,6 +82,9 @@ OutputHLSL::OutputHLSL(TParseContext &context, const ShBuiltInResources& resourc ...@@ -82,6 +82,9 @@ OutputHLSL::OutputHLSL(TParseContext &context, const ShBuiltInResources& resourc
mUsesEqualIVec2 = false; mUsesEqualIVec2 = false;
mUsesEqualIVec3 = false; mUsesEqualIVec3 = false;
mUsesEqualIVec4 = false; mUsesEqualIVec4 = false;
mUsesEqualUVec2 = false;
mUsesEqualUVec3 = false;
mUsesEqualUVec4 = false;
mUsesEqualBVec2 = false; mUsesEqualBVec2 = false;
mUsesEqualBVec3 = false; mUsesEqualBVec3 = false;
mUsesEqualBVec4 = false; mUsesEqualBVec4 = false;
...@@ -1268,6 +1271,30 @@ void OutputHLSL::header() ...@@ -1268,6 +1271,30 @@ void OutputHLSL::header()
"}\n"; "}\n";
} }
if (mUsesEqualUVec2)
{
out << "bool equal(uint2 v, uint2 u)\n"
"{\n"
" return v.x == u.x && v.y == u.y;\n"
"}\n";
}
if (mUsesEqualUVec3)
{
out << "bool equal(uint3 v, uint3 u)\n"
"{\n"
" return v.x == u.x && v.y == u.y && v.z == u.z;\n"
"}\n";
}
if (mUsesEqualUVec4)
{
out << "bool equal(uint4 v, uint4 u)\n"
"{\n"
" return v.x == u.x && v.y == u.y && v.z == u.z && v.w == u.w;\n"
"}\n";
}
if (mUsesEqualBVec2) if (mUsesEqualBVec2)
{ {
out << "bool equal(bool2 v, bool2 u)\n" out << "bool equal(bool2 v, bool2 u)\n"
...@@ -1620,8 +1647,13 @@ bool OutputHLSL::visitBinary(Visit visit, TIntermBinary *node) ...@@ -1620,8 +1647,13 @@ bool OutputHLSL::visitBinary(Visit visit, TIntermBinary *node)
} }
break; break;
case EbtUInt: case EbtUInt:
// TODO switch (node->getLeft()->getNominalSize())
UNIMPLEMENTED(); {
case 2: mUsesEqualUVec2 = true; break;
case 3: mUsesEqualUVec3 = true; break;
case 4: mUsesEqualUVec4 = true; break;
default: UNREACHABLE();
}
break; break;
case EbtBool: case EbtBool:
switch (node->getLeft()->getNominalSize()) switch (node->getLeft()->getNominalSize())
...@@ -1725,9 +1757,9 @@ bool OutputHLSL::visitUnary(Visit visit, TIntermUnary *node) ...@@ -1725,9 +1757,9 @@ bool OutputHLSL::visitUnary(Visit visit, TIntermUnary *node)
switch (node->getOperand()->getType().getCols()) switch (node->getOperand()->getType().getCols())
{ {
case 1: outputTriplet(visit, "uint(", "", ")"); break; case 1: outputTriplet(visit, "uint(", "", ")"); break;
case 2: case 2: outputTriplet(visit, "uint2(", "", ")"); break;
case 3: case 3: outputTriplet(visit, "uint3(", "", ")"); break;
case 4: UNIMPLEMENTED(); break; case 4: outputTriplet(visit, "uint4(", "", ")"); break;
default: UNREACHABLE(); default: UNREACHABLE();
} }
break; break;
...@@ -2224,6 +2256,18 @@ bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node) ...@@ -2224,6 +2256,18 @@ bool OutputHLSL::visitAggregate(Visit visit, TIntermAggregate *node)
addConstructor(node->getType(), "uvec1", &node->getSequence()); addConstructor(node->getType(), "uvec1", &node->getSequence());
outputTriplet(visit, "uvec1(", "", ")"); outputTriplet(visit, "uvec1(", "", ")");
break; break;
case EOpConstructUVec2:
addConstructor(node->getType(), "uvec2", &node->getSequence());
outputTriplet(visit, "uvec2(", ", ", ")");
break;
case EOpConstructUVec3:
addConstructor(node->getType(), "uvec3", &node->getSequence());
outputTriplet(visit, "uvec3(", ", ", ")");
break;
case EOpConstructUVec4:
addConstructor(node->getType(), "uvec4", &node->getSequence());
outputTriplet(visit, "uvec4(", ", ", ")");
break;
case EOpConstructMat2: case EOpConstructMat2:
addConstructor(node->getType(), "mat2", &node->getSequence()); addConstructor(node->getType(), "mat2", &node->getSequence());
outputTriplet(visit, "mat2(", ", ", ")"); outputTriplet(visit, "mat2(", ", ", ")");
...@@ -2883,7 +2927,9 @@ TString OutputHLSL::typeString(const TType &type) ...@@ -2883,7 +2927,9 @@ TString OutputHLSL::typeString(const TType &type)
switch (type.getCols()) switch (type.getCols())
{ {
case 1: return "uint"; case 1: return "uint";
default: UNIMPLEMENTED(); return "error"; case 2: return "uint2";
case 3: return "uint3";
case 4: return "uint4";
} }
case EbtBool: case EbtBool:
switch (type.getNominalSize()) switch (type.getNominalSize())
...@@ -3455,7 +3501,13 @@ GLenum OutputHLSL::glVariableType(const TType &type) ...@@ -3455,7 +3501,13 @@ GLenum OutputHLSL::glVariableType(const TType &type)
} }
else if (type.isVector()) else if (type.isVector())
{ {
UNIMPLEMENTED(); switch(type.getCols())
{
case 2: return GL_UNSIGNED_INT_VEC2;
case 3: return GL_UNSIGNED_INT_VEC3;
case 4: return GL_UNSIGNED_INT_VEC4;
default: UNREACHABLE();
}
} }
else UNREACHABLE(); else UNREACHABLE();
} }
......
...@@ -131,6 +131,9 @@ class OutputHLSL : public TIntermTraverser ...@@ -131,6 +131,9 @@ class OutputHLSL : public TIntermTraverser
bool mUsesEqualIVec2; bool mUsesEqualIVec2;
bool mUsesEqualIVec3; bool mUsesEqualIVec3;
bool mUsesEqualIVec4; bool mUsesEqualIVec4;
bool mUsesEqualUVec2;
bool mUsesEqualUVec3;
bool mUsesEqualUVec4;
bool mUsesEqualBVec2; bool mUsesEqualBVec2;
bool mUsesEqualBVec3; bool mUsesEqualBVec3;
bool mUsesEqualBVec4; bool mUsesEqualBVec4;
......
...@@ -1215,7 +1215,9 @@ TFunction *TParseContext::addConstructorFunc(TPublicType publicType) ...@@ -1215,7 +1215,9 @@ TFunction *TParseContext::addConstructorFunc(TPublicType publicType)
switch(publicType.getNominalSize()) switch(publicType.getNominalSize())
{ {
case 1: op = EOpConstructUnsignedInt; break; case 1: op = EOpConstructUnsignedInt; break;
default: UNIMPLEMENTED(); break; case 2: op = EOpConstructUVec2; break;
case 3: op = EOpConstructUVec3; break;
case 4: op = EOpConstructUVec4; break;
} }
break; break;
...@@ -1385,6 +1387,9 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType* type, TOperator op, T ...@@ -1385,6 +1387,9 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType* type, TOperator op, T
basicOp = EOpConstructInt; basicOp = EOpConstructInt;
break; break;
case EOpConstructUVec2:
case EOpConstructUVec3:
case EOpConstructUVec4:
case EOpConstructUnsignedInt: case EOpConstructUnsignedInt:
basicOp = EOpConstructUnsignedInt; basicOp = EOpConstructUnsignedInt;
break; break;
......
...@@ -149,6 +149,9 @@ O [0-7] ...@@ -149,6 +149,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_ident_ES3_keyword(context, UVEC2); }
"uvec3" { return ES2_ident_ES3_keyword(context, UVEC3); }
"uvec4" { return ES2_ident_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); }
......
...@@ -124,7 +124,7 @@ extern void yyerror(TParseContext* context, const char* reason); ...@@ -124,7 +124,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> MATRIX2x3 MATRIX3x2 MATRIX2x4 MATRIX4x2 MATRIX3x4 MATRIX4x3 %token <lex> MATRIX2x3 MATRIX3x2 MATRIX2x4 MATRIX4x2 MATRIX3x4 MATRIX4x3
%token <lex> CENTROID FLAT SMOOTH %token <lex> CENTROID FLAT SMOOTH
...@@ -1511,6 +1511,21 @@ type_specifier_nonarray ...@@ -1511,6 +1511,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;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -77,84 +77,87 @@ extern int yydebug; ...@@ -77,84 +77,87 @@ extern int yydebug;
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,
MATRIX2x3 = 297, INOUT_QUAL = 297,
MATRIX3x2 = 298, UNIFORM = 298,
MATRIX2x4 = 299, VARYING = 299,
MATRIX4x2 = 300, MATRIX2x3 = 300,
MATRIX3x4 = 301, MATRIX3x2 = 301,
MATRIX4x3 = 302, MATRIX2x4 = 302,
CENTROID = 303, MATRIX4x2 = 303,
FLAT = 304, MATRIX3x4 = 304,
SMOOTH = 305, MATRIX4x3 = 305,
STRUCT = 306, CENTROID = 306,
VOID_TYPE = 307, FLAT = 307,
WHILE = 308, SMOOTH = 308,
SAMPLER2D = 309, STRUCT = 309,
SAMPLERCUBE = 310, VOID_TYPE = 310,
SAMPLER_EXTERNAL_OES = 311, WHILE = 311,
SAMPLER2DRECT = 312, SAMPLER2D = 312,
SAMPLER3D = 313, SAMPLERCUBE = 313,
SAMPLER3DRECT = 314, SAMPLER_EXTERNAL_OES = 314,
SAMPLER2DSHADOW = 315, SAMPLER2DRECT = 315,
IDENTIFIER = 316, SAMPLER3D = 316,
TYPE_NAME = 317, SAMPLER3DRECT = 317,
FLOATCONSTANT = 318, SAMPLER2DSHADOW = 318,
INTCONSTANT = 319, IDENTIFIER = 319,
BOOLCONSTANT = 320, TYPE_NAME = 320,
FIELD_SELECTION = 321, FLOATCONSTANT = 321,
LEFT_OP = 322, INTCONSTANT = 322,
RIGHT_OP = 323, BOOLCONSTANT = 323,
INC_OP = 324, FIELD_SELECTION = 324,
DEC_OP = 325, LEFT_OP = 325,
LE_OP = 326, RIGHT_OP = 326,
GE_OP = 327, INC_OP = 327,
EQ_OP = 328, DEC_OP = 328,
NE_OP = 329, LE_OP = 329,
AND_OP = 330, GE_OP = 330,
OR_OP = 331, EQ_OP = 331,
XOR_OP = 332, NE_OP = 332,
MUL_ASSIGN = 333, AND_OP = 333,
DIV_ASSIGN = 334, OR_OP = 334,
ADD_ASSIGN = 335, XOR_OP = 335,
MOD_ASSIGN = 336, MUL_ASSIGN = 336,
LEFT_ASSIGN = 337, DIV_ASSIGN = 337,
RIGHT_ASSIGN = 338, ADD_ASSIGN = 338,
AND_ASSIGN = 339, MOD_ASSIGN = 339,
XOR_ASSIGN = 340, LEFT_ASSIGN = 340,
OR_ASSIGN = 341, RIGHT_ASSIGN = 341,
SUB_ASSIGN = 342, AND_ASSIGN = 342,
LEFT_PAREN = 343, XOR_ASSIGN = 343,
RIGHT_PAREN = 344, OR_ASSIGN = 344,
LEFT_BRACKET = 345, SUB_ASSIGN = 345,
RIGHT_BRACKET = 346, LEFT_PAREN = 346,
LEFT_BRACE = 347, RIGHT_PAREN = 347,
RIGHT_BRACE = 348, LEFT_BRACKET = 348,
DOT = 349, RIGHT_BRACKET = 349,
COMMA = 350, LEFT_BRACE = 350,
COLON = 351, RIGHT_BRACE = 351,
EQUAL = 352, DOT = 352,
SEMICOLON = 353, COMMA = 353,
BANG = 354, COLON = 354,
DASH = 355, EQUAL = 355,
TILDE = 356, SEMICOLON = 356,
PLUS = 357, BANG = 357,
STAR = 358, DASH = 358,
SLASH = 359, TILDE = 359,
PERCENT = 360, PLUS = 360,
LEFT_ANGLE = 361, STAR = 361,
RIGHT_ANGLE = 362, SLASH = 362,
VERTICAL_BAR = 363, PERCENT = 363,
CARET = 364, LEFT_ANGLE = 364,
AMPERSAND = 365, RIGHT_ANGLE = 365,
QUESTION = 366 VERTICAL_BAR = 366,
CARET = 367,
AMPERSAND = 368,
QUESTION = 369
}; };
#endif #endif
......
...@@ -173,6 +173,9 @@ enum TOperator { ...@@ -173,6 +173,9 @@ enum TOperator {
EOpConstructIVec2, EOpConstructIVec2,
EOpConstructIVec3, EOpConstructIVec3,
EOpConstructIVec4, EOpConstructIVec4,
EOpConstructUVec2,
EOpConstructUVec3,
EOpConstructUVec4,
EOpConstructMat2, EOpConstructMat2,
EOpConstructMat3, EOpConstructMat3,
EOpConstructMat4, EOpConstructMat4,
......
...@@ -51,6 +51,9 @@ namespace gl_d3d ...@@ -51,6 +51,9 @@ namespace gl_d3d
case GL_INT_VEC3: return "int3"; case GL_INT_VEC3: return "int3";
case GL_INT_VEC4: return "int4"; case GL_INT_VEC4: return "int4";
case GL_UNSIGNED_INT: return "uint"; case GL_UNSIGNED_INT: return "uint";
case GL_UNSIGNED_INT_VEC2: return "uint2";
case GL_UNSIGNED_INT_VEC3: return "uint3";
case GL_UNSIGNED_INT_VEC4: return "uint4";
case GL_FLOAT_MAT2: return "float2x2"; case GL_FLOAT_MAT2: return "float2x2";
case GL_FLOAT_MAT3: return "float3x3"; case GL_FLOAT_MAT3: return "float3x3";
case GL_FLOAT_MAT4: return "float4x4"; case GL_FLOAT_MAT4: return "float4x4";
......
...@@ -537,6 +537,18 @@ GLenum Shader::parseType(const std::string &type) ...@@ -537,6 +537,18 @@ GLenum Shader::parseType(const std::string &type)
{ {
return GL_UNSIGNED_INT; return GL_UNSIGNED_INT;
} }
else if (type == "uint2")
{
return GL_UNSIGNED_INT_VEC2;
}
else if (type == "uint3")
{
return GL_UNSIGNED_INT_VEC3;
}
else if (type == "uint4")
{
return GL_UNSIGNED_INT_VEC4;
}
else UNREACHABLE(); else UNREACHABLE();
return GL_NONE; return GL_NONE;
...@@ -555,13 +567,16 @@ static void makeVaryingPriorityMap() ...@@ -555,13 +567,16 @@ static void makeVaryingPriorityMap()
varyingPriorities[GL_FLOAT_MAT2] = 50; varyingPriorities[GL_FLOAT_MAT2] = 50;
varyingPriorities[GL_FLOAT_VEC4] = 60; varyingPriorities[GL_FLOAT_VEC4] = 60;
varyingPriorities[GL_INT_VEC4] = 61; varyingPriorities[GL_INT_VEC4] = 61;
varyingPriorities[GL_UNSIGNED_INT_VEC4] = 62;
varyingPriorities[GL_FLOAT_MAT3] = 70; varyingPriorities[GL_FLOAT_MAT3] = 70;
varyingPriorities[GL_FLOAT_MAT2x3] = 80; varyingPriorities[GL_FLOAT_MAT2x3] = 80;
varyingPriorities[GL_FLOAT_MAT3x2] = 90; varyingPriorities[GL_FLOAT_MAT3x2] = 90;
varyingPriorities[GL_FLOAT_VEC3] = 100; varyingPriorities[GL_FLOAT_VEC3] = 100;
varyingPriorities[GL_INT_VEC3] = 101; varyingPriorities[GL_INT_VEC3] = 101;
varyingPriorities[GL_UNSIGNED_INT_VEC3] = 102;
varyingPriorities[GL_FLOAT_VEC2] = 110; varyingPriorities[GL_FLOAT_VEC2] = 110;
varyingPriorities[GL_INT_VEC2] = 111; varyingPriorities[GL_INT_VEC2] = 111;
varyingPriorities[GL_UNSIGNED_INT_VEC2] = 112;
varyingPriorities[GL_FLOAT] = 120; varyingPriorities[GL_FLOAT] = 120;
varyingPriorities[GL_INT] = 125; varyingPriorities[GL_INT] = 125;
varyingPriorities[GL_UNSIGNED_INT] = 130; varyingPriorities[GL_UNSIGNED_INT] = 130;
......
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