Commit 2a1d8a38 by Nicolas Capens Committed by Shannon Woods

Add shadow samplers to the compiler front-end.

TRAC #23394 Signed-off-by: Jamie Madill Signed-off-by: Shannon Woods Author: Nicolas Capens
parent aaaec130
...@@ -125,7 +125,10 @@ typedef enum { ...@@ -125,7 +125,10 @@ typedef enum {
SH_UNSIGNED_INT_SAMPLER_2D = 0x8DD2, SH_UNSIGNED_INT_SAMPLER_2D = 0x8DD2,
SH_UNSIGNED_INT_SAMPLER_3D = 0x8DD3, SH_UNSIGNED_INT_SAMPLER_3D = 0x8DD3,
SH_UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4, SH_UNSIGNED_INT_SAMPLER_CUBE = 0x8DD4,
SH_UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7 SH_UNSIGNED_INT_SAMPLER_2D_ARRAY = 0x8DD7,
SH_SAMPLER_2D_SHADOW = 0x8B62,
SH_SAMPLER_CUBE_SHADOW = 0x8DC5,
SH_SAMPLER_2D_ARRAY_SHADOW = 0x8DC4
} ShDataType; } ShDataType;
typedef enum { typedef enum {
......
...@@ -57,6 +57,9 @@ enum TBasicType ...@@ -57,6 +57,9 @@ enum TBasicType
EbtUSampler3D, EbtUSampler3D,
EbtUSamplerCube, EbtUSamplerCube,
EbtUSampler2DArray, EbtUSampler2DArray,
EbtSampler2DShadow,
EbtSamplerCubeShadow,
EbtSampler2DArrayShadow,
EbtGuardSamplerEnd, // non type: see implementation of IsSampler() EbtGuardSamplerEnd, // non type: see implementation of IsSampler()
EbtStruct, EbtStruct,
EbtInterfaceBlock, EbtInterfaceBlock,
...@@ -68,28 +71,31 @@ inline const char* getBasicString(TBasicType t) ...@@ -68,28 +71,31 @@ inline const char* getBasicString(TBasicType t)
{ {
switch (t) switch (t)
{ {
case EbtVoid: return "void"; break; case EbtVoid: return "void"; break;
case EbtFloat: return "float"; break; case EbtFloat: return "float"; break;
case EbtInt: return "int"; break; case EbtInt: return "int"; break;
case EbtUInt: return "uint"; break; case EbtUInt: return "uint"; break;
case EbtBool: return "bool"; break; case EbtBool: return "bool"; break;
case EbtSampler2D: return "sampler2D"; break; case EbtSampler2D: return "sampler2D"; break;
case EbtSampler3D: return "sampler3D"; break; case EbtSampler3D: return "sampler3D"; break;
case EbtSamplerCube: return "samplerCube"; break; case EbtSamplerCube: return "samplerCube"; break;
case EbtSamplerExternalOES: return "samplerExternalOES"; break; case EbtSamplerExternalOES: return "samplerExternalOES"; break;
case EbtSampler2DRect: return "sampler2DRect"; break; case EbtSampler2DRect: return "sampler2DRect"; break;
case EbtSampler2DArray: return "sampler2DArray"; break; case EbtSampler2DArray: return "sampler2DArray"; break;
case EbtISampler2D: return "isampler2D"; break; case EbtISampler2D: return "isampler2D"; break;
case EbtISampler3D: return "isampler3D"; break; case EbtISampler3D: return "isampler3D"; break;
case EbtISamplerCube: return "isamplerCube"; break; case EbtISamplerCube: return "isamplerCube"; break;
case EbtISampler2DArray: return "isampler2DArray"; break; case EbtISampler2DArray: return "isampler2DArray"; break;
case EbtUSampler2D: return "usampler2D"; break; case EbtUSampler2D: return "usampler2D"; break;
case EbtUSampler3D: return "usampler3D"; break; case EbtUSampler3D: return "usampler3D"; break;
case EbtUSamplerCube: return "usamplerCube"; break; case EbtUSamplerCube: return "usamplerCube"; break;
case EbtUSampler2DArray: return "usampler2DArray"; break; case EbtUSampler2DArray: return "usampler2DArray"; break;
case EbtStruct: return "structure"; break; case EbtSampler2DShadow: return "sampler2DShadow"; break;
case EbtInterfaceBlock: return "interface block"; break; case EbtSamplerCubeShadow: return "samplerCubeShadow"; break;
default: return "unknown type"; case EbtSampler2DArrayShadow: return "sampler2DArrayShadow"; break;
case EbtStruct: return "structure"; break;
case EbtInterfaceBlock: return "interface block"; break;
default: return "unknown type";
} }
} }
...@@ -117,6 +123,9 @@ inline bool IsIntegerSampler(TBasicType type) ...@@ -117,6 +123,9 @@ inline bool IsIntegerSampler(TBasicType type)
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSampler2DArray: case EbtSampler2DArray:
case EbtSampler2DShadow:
case EbtSamplerCubeShadow:
case EbtSampler2DArrayShadow:
return false; return false;
default: default:
assert(!IsSampler(type)); assert(!IsSampler(type));
...@@ -137,6 +146,8 @@ inline bool IsSampler2D(TBasicType type) ...@@ -137,6 +146,8 @@ inline bool IsSampler2D(TBasicType type)
case EbtUSampler2DArray: case EbtUSampler2DArray:
case EbtSampler2DRect: case EbtSampler2DRect:
case EbtSamplerExternalOES: case EbtSamplerExternalOES:
case EbtSampler2DShadow:
case EbtSampler2DArrayShadow:
return true; return true;
case EbtSampler3D: case EbtSampler3D:
case EbtISampler3D: case EbtISampler3D:
...@@ -144,6 +155,7 @@ inline bool IsSampler2D(TBasicType type) ...@@ -144,6 +155,7 @@ inline bool IsSampler2D(TBasicType type)
case EbtISamplerCube: case EbtISamplerCube:
case EbtUSamplerCube: case EbtUSamplerCube:
case EbtSamplerCube: case EbtSamplerCube:
case EbtSamplerCubeShadow:
return false; return false;
default: default:
assert(!IsSampler(type)); assert(!IsSampler(type));
...@@ -159,6 +171,7 @@ inline bool IsSamplerCube(TBasicType type) ...@@ -159,6 +171,7 @@ inline bool IsSamplerCube(TBasicType type)
case EbtSamplerCube: case EbtSamplerCube:
case EbtISamplerCube: case EbtISamplerCube:
case EbtUSamplerCube: case EbtUSamplerCube:
case EbtSamplerCubeShadow:
return true; return true;
case EbtSampler2D: case EbtSampler2D:
case EbtSampler3D: case EbtSampler3D:
...@@ -171,6 +184,8 @@ inline bool IsSamplerCube(TBasicType type) ...@@ -171,6 +184,8 @@ inline bool IsSamplerCube(TBasicType type)
case EbtUSampler2D: case EbtUSampler2D:
case EbtUSampler3D: case EbtUSampler3D:
case EbtUSampler2DArray: case EbtUSampler2DArray:
case EbtSampler2DShadow:
case EbtSampler2DArrayShadow:
return false; return false;
default: default:
assert(!IsSampler(type)); assert(!IsSampler(type));
...@@ -198,6 +213,9 @@ inline bool IsSampler3D(TBasicType type) ...@@ -198,6 +213,9 @@ inline bool IsSampler3D(TBasicType type)
case EbtUSampler2D: case EbtUSampler2D:
case EbtUSamplerCube: case EbtUSamplerCube:
case EbtUSampler2DArray: case EbtUSampler2DArray:
case EbtSampler2DShadow:
case EbtSamplerCubeShadow:
case EbtSampler2DArrayShadow:
return false; return false;
default: default:
assert(!IsSampler(type)); assert(!IsSampler(type));
...@@ -213,6 +231,7 @@ inline bool IsSamplerArray(TBasicType type) ...@@ -213,6 +231,7 @@ inline bool IsSamplerArray(TBasicType type)
case EbtSampler2DArray: case EbtSampler2DArray:
case EbtISampler2DArray: case EbtISampler2DArray:
case EbtUSampler2DArray: case EbtUSampler2DArray:
case EbtSampler2DArrayShadow:
return true; return true;
case EbtSampler2D: case EbtSampler2D:
case EbtISampler2D: case EbtISampler2D:
...@@ -225,6 +244,8 @@ inline bool IsSamplerArray(TBasicType type) ...@@ -225,6 +244,8 @@ inline bool IsSamplerArray(TBasicType type)
case EbtISamplerCube: case EbtISamplerCube:
case EbtUSamplerCube: case EbtUSamplerCube:
case EbtSamplerCube: case EbtSamplerCube:
case EbtSampler2DShadow:
case EbtSamplerCubeShadow:
return false; return false;
default: default:
assert(!IsSampler(type)); assert(!IsSampler(type));
......
...@@ -41,25 +41,29 @@ TString TType::buildMangledName() const ...@@ -41,25 +41,29 @@ TString TType::buildMangledName() const
else if (isVector()) else if (isVector())
mangledName += 'v'; mangledName += 'v';
switch (type) { switch (type)
case EbtFloat: mangledName += 'f'; break; {
case EbtInt: mangledName += 'i'; break; case EbtFloat: mangledName += 'f'; break;
case EbtBool: mangledName += 'b'; break; case EbtInt: mangledName += 'i'; break;
case EbtSampler2D: mangledName += "s2"; break; case EbtBool: mangledName += 'b'; break;
case EbtSampler3D: mangledName += "s3"; break; case EbtSampler2D: mangledName += "s2"; break;
case EbtSamplerCube: mangledName += "sC"; break; case EbtSampler3D: mangledName += "s3"; break;
case EbtSampler2DArray: mangledName += "s2a"; break; case EbtSamplerCube: mangledName += "sC"; break;
case EbtISampler2D: mangledName += "is2"; break; case EbtSampler2DArray: mangledName += "s2a"; break;
case EbtISampler3D: mangledName += "is3"; break; case EbtISampler2D: mangledName += "is2"; break;
case EbtISamplerCube: mangledName += "isC"; break; case EbtISampler3D: mangledName += "is3"; break;
case EbtISampler2DArray: mangledName += "is2a"; break; case EbtISamplerCube: mangledName += "isC"; break;
case EbtUSampler2D: mangledName += "us2"; break; case EbtISampler2DArray: mangledName += "is2a"; break;
case EbtUSampler3D: mangledName += "us3"; break; case EbtUSampler2D: mangledName += "us2"; break;
case EbtUSamplerCube: mangledName += "usC"; break; case EbtUSampler3D: mangledName += "us3"; break;
case EbtUSampler2DArray: mangledName += "us2a"; break; case EbtUSamplerCube: mangledName += "usC"; break;
case EbtStruct: mangledName += structure->mangledName(); break; case EbtUSampler2DArray: mangledName += "us2a"; break;
case EbtInterfaceBlock: mangledName += interfaceBlock->mangledName(); break; case EbtSampler2DShadow: mangledName += "s2s"; break;
default: break; case EbtSamplerCubeShadow: mangledName += "sCs"; break;
case EbtSampler2DArrayShadow: mangledName += "s2as"; break;
case EbtStruct: mangledName += structure->mangledName(); break;
case EbtInterfaceBlock: mangledName += interfaceBlock->mangledName(); break;
default: UNREACHABLE();
} }
if (isMatrix()) if (isMatrix())
......
...@@ -109,6 +109,9 @@ static ShDataType getVariableDataType(const TType& type) ...@@ -109,6 +109,9 @@ static ShDataType getVariableDataType(const TType& type)
case EbtUSampler3D: return SH_UNSIGNED_INT_SAMPLER_3D; case EbtUSampler3D: return SH_UNSIGNED_INT_SAMPLER_3D;
case EbtUSamplerCube: return SH_UNSIGNED_INT_SAMPLER_CUBE; case EbtUSamplerCube: return SH_UNSIGNED_INT_SAMPLER_CUBE;
case EbtUSampler2DArray: return SH_UNSIGNED_INT_SAMPLER_2D_ARRAY; case EbtUSampler2DArray: return SH_UNSIGNED_INT_SAMPLER_2D_ARRAY;
case EbtSampler2DShadow: return SH_SAMPLER_2D_SHADOW;
case EbtSamplerCubeShadow: return SH_SAMPLER_CUBE_SHADOW;
case EbtSampler2DArrayShadow: return SH_SAMPLER_2D_ARRAY_SHADOW;
default: UNREACHABLE(); default: UNREACHABLE();
} }
return SH_NONE; return SH_NONE;
......
...@@ -150,22 +150,24 @@ O [0-7] ...@@ -150,22 +150,24 @@ O [0-7]
"uvec3" { return ES2_ident_ES3_keyword(context, UVEC3); } "uvec3" { return ES2_ident_ES3_keyword(context, UVEC3); }
"uvec4" { return ES2_ident_ES3_keyword(context, UVEC4); } "uvec4" { return ES2_ident_ES3_keyword(context, UVEC4); }
"sampler2D" { return SAMPLER2D; } "sampler2D" { return SAMPLER2D; }
"samplerCube" { return SAMPLERCUBE; } "samplerCube" { return SAMPLERCUBE; }
"samplerExternalOES" { return SAMPLER_EXTERNAL_OES; } "samplerExternalOES" { return SAMPLER_EXTERNAL_OES; }
"sampler3D" { return ES2_reserved_ES3_keyword(context, SAMPLER3D); } "sampler3D" { return ES2_reserved_ES3_keyword(context, SAMPLER3D); }
"sampler3DRect" { return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); } "sampler3DRect" { return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
"sampler2DShadow" { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); } "sampler2DRect" { return SAMPLER2DRECT; }
"sampler2DRect" { return SAMPLER2DRECT; } "sampler2DArray" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAY); }
"sampler2DArray" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAY); } "isampler2D" { return ES2_ident_ES3_keyword(context, ISAMPLER2D); }
"isampler2D" { return ES2_ident_ES3_keyword(context, ISAMPLER2D); } "isampler3D" { return ES2_ident_ES3_keyword(context, ISAMPLER3D); }
"isampler3D" { return ES2_ident_ES3_keyword(context, ISAMPLER3D); } "isamplerCube" { return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); }
"isamplerCube" { return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); } "isampler2DArray" { return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); }
"isampler2DArray" { return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); } "usampler2D" { return ES2_ident_ES3_keyword(context, USAMPLER2D); }
"usampler2D" { return ES2_ident_ES3_keyword(context, USAMPLER2D); } "usampler3D" { return ES2_ident_ES3_keyword(context, USAMPLER3D); }
"usampler3D" { return ES2_ident_ES3_keyword(context, USAMPLER3D); } "usamplerCube" { return ES2_ident_ES3_keyword(context, USAMPLERCUBE); }
"usamplerCube" { return ES2_ident_ES3_keyword(context, USAMPLERCUBE); } "usampler2DArray" { return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); }
"usampler2DArray" { return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); } "sampler2DShadow" { return ES2_ident_ES3_keyword(context, SAMPLER2DSHADOW); }
"samplerCubeShadow" { return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
"sampler2DArrayShadow" { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
"struct" { return STRUCT; } "struct" { return STRUCT; }
......
...@@ -145,7 +145,7 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, const char* reason) ...@@ -145,7 +145,7 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, const char* reason)
%token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT SAMPLER2DARRAY %token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT SAMPLER2DARRAY
%token <lex> ISAMPLER2D ISAMPLER3D ISAMPLERCUBE ISAMPLER2DARRAY %token <lex> ISAMPLER2D ISAMPLER3D ISAMPLERCUBE ISAMPLER2DARRAY
%token <lex> USAMPLER2D USAMPLER3D USAMPLERCUBE USAMPLER2DARRAY %token <lex> USAMPLER2D USAMPLER3D USAMPLERCUBE USAMPLER2DARRAY
%token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW %token <lex> SAMPLER3D SAMPLER3DRECT SAMPLER2DSHADOW SAMPLERCUBESHADOW SAMPLER2DARRAYSHADOW
%token <lex> LAYOUT %token <lex> LAYOUT
%token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT %token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT
...@@ -1503,6 +1503,18 @@ type_specifier_nonarray ...@@ -1503,6 +1503,18 @@ type_specifier_nonarray
TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
$$.setBasic(EbtUSampler2DArray, qual, @1); $$.setBasic(EbtUSampler2DArray, qual, @1);
} }
| SAMPLER2DSHADOW {
TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
$$.setBasic(EbtSampler2DShadow, qual, @1);
}
| SAMPLERCUBESHADOW {
TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
$$.setBasic(EbtSamplerCubeShadow, qual, @1);
}
| SAMPLER2DARRAYSHADOW {
TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
$$.setBasic(EbtSampler2DArrayShadow, qual, @1);
}
| SAMPLER_EXTERNAL_OES { | SAMPLER_EXTERNAL_OES {
if (!context->supportsExtension("GL_OES_EGL_image_external")) { if (!context->supportsExtension("GL_OES_EGL_image_external")) {
context->error(@1, "unsupported type", "samplerExternalOES"); context->error(@1, "unsupported type", "samplerExternalOES");
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -124,59 +124,61 @@ extern int yydebug; ...@@ -124,59 +124,61 @@ extern int yydebug;
SAMPLER3D = 325, SAMPLER3D = 325,
SAMPLER3DRECT = 326, SAMPLER3DRECT = 326,
SAMPLER2DSHADOW = 327, SAMPLER2DSHADOW = 327,
LAYOUT = 328, SAMPLERCUBESHADOW = 328,
IDENTIFIER = 329, SAMPLER2DARRAYSHADOW = 329,
TYPE_NAME = 330, LAYOUT = 330,
FLOATCONSTANT = 331, IDENTIFIER = 331,
INTCONSTANT = 332, TYPE_NAME = 332,
UINTCONSTANT = 333, FLOATCONSTANT = 333,
BOOLCONSTANT = 334, INTCONSTANT = 334,
FIELD_SELECTION = 335, UINTCONSTANT = 335,
LEFT_OP = 336, BOOLCONSTANT = 336,
RIGHT_OP = 337, FIELD_SELECTION = 337,
INC_OP = 338, LEFT_OP = 338,
DEC_OP = 339, RIGHT_OP = 339,
LE_OP = 340, INC_OP = 340,
GE_OP = 341, DEC_OP = 341,
EQ_OP = 342, LE_OP = 342,
NE_OP = 343, GE_OP = 343,
AND_OP = 344, EQ_OP = 344,
OR_OP = 345, NE_OP = 345,
XOR_OP = 346, AND_OP = 346,
MUL_ASSIGN = 347, OR_OP = 347,
DIV_ASSIGN = 348, XOR_OP = 348,
ADD_ASSIGN = 349, MUL_ASSIGN = 349,
MOD_ASSIGN = 350, DIV_ASSIGN = 350,
LEFT_ASSIGN = 351, ADD_ASSIGN = 351,
RIGHT_ASSIGN = 352, MOD_ASSIGN = 352,
AND_ASSIGN = 353, LEFT_ASSIGN = 353,
XOR_ASSIGN = 354, RIGHT_ASSIGN = 354,
OR_ASSIGN = 355, AND_ASSIGN = 355,
SUB_ASSIGN = 356, XOR_ASSIGN = 356,
LEFT_PAREN = 357, OR_ASSIGN = 357,
RIGHT_PAREN = 358, SUB_ASSIGN = 358,
LEFT_BRACKET = 359, LEFT_PAREN = 359,
RIGHT_BRACKET = 360, RIGHT_PAREN = 360,
LEFT_BRACE = 361, LEFT_BRACKET = 361,
RIGHT_BRACE = 362, RIGHT_BRACKET = 362,
DOT = 363, LEFT_BRACE = 363,
COMMA = 364, RIGHT_BRACE = 364,
COLON = 365, DOT = 365,
EQUAL = 366, COMMA = 366,
SEMICOLON = 367, COLON = 367,
BANG = 368, EQUAL = 368,
DASH = 369, SEMICOLON = 369,
TILDE = 370, BANG = 370,
PLUS = 371, DASH = 371,
STAR = 372, TILDE = 372,
SLASH = 373, PLUS = 373,
PERCENT = 374, STAR = 374,
LEFT_ANGLE = 375, SLASH = 375,
RIGHT_ANGLE = 376, PERCENT = 376,
VERTICAL_BAR = 377, LEFT_ANGLE = 377,
CARET = 378, RIGHT_ANGLE = 378,
AMPERSAND = 379, VERTICAL_BAR = 379,
QUESTION = 380 CARET = 380,
AMPERSAND = 381,
QUESTION = 382
}; };
#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