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