Implement GL_EXT_terminate_invocation (#2454)

* Implement GL_EXT_terminate_invocation.

* terminateInvocation: declare the SPV extension

* Update test results for spirv-tools and bison version bumps

Co-authored-by: John Kessenich <cepheus@frii.com>
This commit is contained in:
Jesse Hall 2020-11-09 08:30:01 -08:00 committed by GitHub
parent 383eaf3293
commit 74e8f05b9f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 6223 additions and 5846 deletions

View File

@ -49,4 +49,6 @@ static const char* const E_SPV_KHR_non_semantic_info = "SPV_KHR_non_s
static const char* const E_SPV_KHR_ray_tracing = "SPV_KHR_ray_tracing"; static const char* const E_SPV_KHR_ray_tracing = "SPV_KHR_ray_tracing";
static const char* const E_SPV_KHR_ray_query = "SPV_KHR_ray_query"; static const char* const E_SPV_KHR_ray_query = "SPV_KHR_ray_query";
static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragment_shading_rate"; static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragment_shading_rate";
static const char* const E_SPV_KHR_terminate_invocation = "SPV_KHR_terminate_invocation";
#endif // #ifndef GLSLextKHR_H #endif // #ifndef GLSLextKHR_H

View File

@ -3458,6 +3458,10 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
case glslang::EOpKill: case glslang::EOpKill:
builder.makeDiscard(); builder.makeDiscard();
break; break;
case glslang::EOpTerminateInvocation:
builder.addExtension(spv::E_SPV_KHR_terminate_invocation);
builder.makeTerminateInvocation();
break;
case glslang::EOpBreak: case glslang::EOpBreak:
if (breakForLoop.top()) if (breakForLoop.top())
builder.createLoopExit(); builder.createLoopExit();

View File

@ -1453,6 +1453,13 @@ void Builder::makeDiscard()
createAndSetNoPredecessorBlock("post-discard"); createAndSetNoPredecessorBlock("post-discard");
} }
// Comments in header
void Builder::makeTerminateInvocation()
{
buildPoint->addInstruction(std::unique_ptr<Instruction>(new Instruction(OpTerminateInvocation)));
createAndSetNoPredecessorBlock("post-terminate-invocation");
}
// Comments in header // Comments in header
Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name, Id initializer) Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name, Id initializer)
{ {

View File

@ -357,8 +357,9 @@ public:
// Generate all the code needed to finish up a function. // Generate all the code needed to finish up a function.
void leaveFunction(); void leaveFunction();
// Create a discard. // Create a discard or terminate-invocation.
void makeDiscard(); void makeDiscard();
void makeTerminateInvocation();
// Create a global or function local or IO variable. // Create a global or function local or IO variable.
Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr, Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr,

View File

@ -1336,6 +1336,8 @@ const char* OpcodeString(int op)
case 365: return "OpGroupNonUniformQuadBroadcast"; case 365: return "OpGroupNonUniformQuadBroadcast";
case 366: return "OpGroupNonUniformQuadSwap"; case 366: return "OpGroupNonUniformQuadSwap";
case OpTerminateInvocation: return "OpTerminateInvocation";
case 4421: return "OpSubgroupBallotKHR"; case 4421: return "OpSubgroupBallotKHR";
case 4422: return "OpSubgroupFirstInvocationKHR"; case 4422: return "OpSubgroupFirstInvocationKHR";
case 4428: return "OpSubgroupAllKHR"; case 4428: return "OpSubgroupAllKHR";
@ -1504,6 +1506,7 @@ void Parameterize()
InstructionDesc[OpBranchConditional].setResultAndType(false, false); InstructionDesc[OpBranchConditional].setResultAndType(false, false);
InstructionDesc[OpSwitch].setResultAndType(false, false); InstructionDesc[OpSwitch].setResultAndType(false, false);
InstructionDesc[OpKill].setResultAndType(false, false); InstructionDesc[OpKill].setResultAndType(false, false);
InstructionDesc[OpTerminateInvocation].setResultAndType(false, false);
InstructionDesc[OpReturn].setResultAndType(false, false); InstructionDesc[OpReturn].setResultAndType(false, false);
InstructionDesc[OpReturnValue].setResultAndType(false, false); InstructionDesc[OpReturnValue].setResultAndType(false, false);
InstructionDesc[OpUnreachable].setResultAndType(false, false); InstructionDesc[OpUnreachable].setResultAndType(false, false);

View File

@ -1849,6 +1849,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
case OpBranchConditional: *hasResult = false; *hasResultType = false; break; case OpBranchConditional: *hasResult = false; *hasResultType = false; break;
case OpSwitch: *hasResult = false; *hasResultType = false; break; case OpSwitch: *hasResult = false; *hasResultType = false; break;
case OpKill: *hasResult = false; *hasResultType = false; break; case OpKill: *hasResult = false; *hasResultType = false; break;
case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break;
case OpReturn: *hasResult = false; *hasResultType = false; break; case OpReturn: *hasResult = false; *hasResultType = false; break;
case OpReturnValue: *hasResult = false; *hasResultType = false; break; case OpReturnValue: *hasResult = false; *hasResultType = false; break;
case OpUnreachable: *hasResult = false; *hasResultType = false; break; case OpUnreachable: *hasResult = false; *hasResultType = false; break;

View File

@ -263,6 +263,7 @@ public:
case OpBranchConditional: case OpBranchConditional:
case OpSwitch: case OpSwitch:
case OpKill: case OpKill:
case OpTerminateInvocation:
case OpReturn: case OpReturn:
case OpReturnValue: case OpReturnValue:
case OpUnreachable: case OpUnreachable:

View File

@ -1,7 +1,7 @@
cppDeepNest.frag cppDeepNest.frag
ERROR: 0:66: '#if/#ifdef/#ifndef' : maximum nesting depth exceeded ERROR: 0:66: '#if/#ifdef/#ifndef' : maximum nesting depth exceeded
ERROR: 0:66: '' : missing #endif ERROR: 0:66: '' : missing #endif
ERROR: 0:66: '' : syntax error, unexpected $end ERROR: 0:66: '' : syntax error, unexpected end of file
ERROR: 3 compilation errors. No code generated. ERROR: 3 compilation errors. No code generated.

View File

@ -12,7 +12,7 @@ ERROR: 0:88: '' : float literal needs a decimal point or exponent
ERROR: 0:98: '' : numeric literal too big ERROR: 0:98: '' : numeric literal too big
ERROR: 0:101: '' : numeric literal too big ERROR: 0:101: '' : numeric literal too big
ERROR: 0:104: '#' : preprocessor directive cannot be preceded by another token ERROR: 0:104: '#' : preprocessor directive cannot be preceded by another token
ERROR: 0:104: '' : syntax error, unexpected $end, expecting COMMA or SEMICOLON ERROR: 0:104: '' : syntax error, unexpected end of file, expecting COMMA or SEMICOLON
ERROR: 14 compilation errors. No code generated. ERROR: 14 compilation errors. No code generated.

View File

@ -0,0 +1,20 @@
spv.terminate.frag
// Module Version 10000
// Generated by (magic number): 8000a
// Id's are bound by 7
Capability Shader
Extension "SPV_KHR_terminate_invocation"
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Source GLSL 400
SourceExtension "GL_EXT_terminate_invocation"
Name 4 "main"
2: TypeVoid
3: TypeFunction 2
4(main): 2 Function None 3
5: Label
TerminateInvocation
FunctionEnd

View File

@ -0,0 +1,24 @@
terminate.frag
ERROR: 0:3: 'terminateInvocation' : undeclared identifier
ERROR: 0:9: '' : syntax error, unexpected TERMINATE_INVOCATION, expecting COMMA or SEMICOLON
ERROR: 2 compilation errors. No code generated.
Shader version: 400
Requested GL_EXT_terminate_invocation
ERROR: node is still EOpNull!
0:3 Function Definition: foo( ( global void)
0:3 Function Parameters:
0:3 Sequence
0:3 'terminateInvocation' ( temp float)
0:? Linker Objects
Linked fragment stage:
Shader version: 400
Requested GL_EXT_terminate_invocation
ERROR: node is still EOpNull!
0:? Linker Objects

View File

@ -0,0 +1,36 @@
terminate.vert
ERROR: 0:3: 'terminateInvocation' : undeclared identifier
ERROR: 0:9: 'terminateInvocation' : not supported in this stage: vertex
ERROR: 2 compilation errors. No code generated.
Shader version: 400
Requested GL_EXT_terminate_invocation
ERROR: node is still EOpNull!
0:3 Function Definition: foo( ( global void)
0:3 Function Parameters:
0:3 Sequence
0:3 'terminateInvocation' ( temp float)
0:7 Function Definition: main( ( global void)
0:7 Function Parameters:
0:9 Sequence
0:9 Branch: TerminateInvocation
0:? Linker Objects
0:? 'gl_VertexID' ( gl_VertexId int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
Linked vertex stage:
Shader version: 400
Requested GL_EXT_terminate_invocation
ERROR: node is still EOpNull!
0:7 Function Definition: main( ( global void)
0:7 Function Parameters:
0:9 Sequence
0:9 Branch: TerminateInvocation
0:? Linker Objects
0:? 'gl_VertexID' ( gl_VertexId int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)

8
Test/spv.terminate.frag Normal file
View File

@ -0,0 +1,8 @@
#version 400
#extension GL_EXT_terminate_invocation : enable
void main()
{
terminateInvocation;
}

10
Test/terminate.frag Normal file
View File

@ -0,0 +1,10 @@
#version 400
void foo() { terminateInvocation; } // ERROR: identifier undeclared
#extension GL_EXT_terminate_invocation : enable
void main()
{
int terminateInvocation; // syntax ERROR
}

10
Test/terminate.vert Normal file
View File

@ -0,0 +1,10 @@
#version 400
void foo() { terminateInvocation; } // ERROR: identifier undeclared
#extension GL_EXT_terminate_invocation : enable
void main()
{
terminateInvocation; // ERROR: wrong stage
}

View File

@ -628,13 +628,14 @@ enum TOperator {
// Branch // Branch
// //
EOpKill, // Fragment only EOpKill, // Fragment only
EOpTerminateInvocation, // Fragment only
EOpDemote, // Fragment only
EOpReturn, EOpReturn,
EOpBreak, EOpBreak,
EOpContinue, EOpContinue,
EOpCase, EOpCase,
EOpDefault, EOpDefault,
EOpDemote, // Fragment only
// //
// Constructors // Constructors

View File

@ -365,6 +365,7 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["if"] = IF; (*KeywordMap)["if"] = IF;
(*KeywordMap)["else"] = ELSE; (*KeywordMap)["else"] = ELSE;
(*KeywordMap)["discard"] = DISCARD; (*KeywordMap)["discard"] = DISCARD;
(*KeywordMap)["terminateInvocation"] = TERMINATE_INVOCATION;
(*KeywordMap)["return"] = RETURN; (*KeywordMap)["return"] = RETURN;
(*KeywordMap)["void"] = VOID; (*KeywordMap)["void"] = VOID;
(*KeywordMap)["bool"] = BOOL; (*KeywordMap)["bool"] = BOOL;
@ -936,6 +937,11 @@ int TScanContext::tokenizeIdentifier()
case CASE: case CASE:
return keyword; return keyword;
case TERMINATE_INVOCATION:
if (!parseContext.extensionTurnedOn(E_GL_EXT_terminate_invocation))
return identifierOrType();
return keyword;
case BUFFER: case BUFFER:
afterBuffer = true; afterBuffer = true;
if ((parseContext.isEsProfile() && parseContext.version < 310) || if ((parseContext.isEsProfile() && parseContext.version < 310) ||

View File

@ -329,6 +329,7 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable; extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable;
extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable; extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable;
extensionBehavior[E_GL_EXT_shader_image_int64] = EBhDisable; extensionBehavior[E_GL_EXT_shader_image_int64] = EBhDisable;
extensionBehavior[E_GL_EXT_terminate_invocation] = EBhDisable;
// OVR extensions // OVR extensions
extensionBehavior[E_GL_OVR_multiview] = EBhDisable; extensionBehavior[E_GL_OVR_multiview] = EBhDisable;
@ -411,7 +412,7 @@ void TParseVersions::getPreamble(std::string& preamble)
preamble += "#define GL_NV_shader_noperspective_interpolation 1\n"; preamble += "#define GL_NV_shader_noperspective_interpolation 1\n";
} }
} else { } else { // !isEsProfile()
preamble = preamble =
"#define GL_FRAGMENT_PRECISION_HIGH 1\n" "#define GL_FRAGMENT_PRECISION_HIGH 1\n"
"#define GL_ARB_texture_rectangle 1\n" "#define GL_ARB_texture_rectangle 1\n"
@ -563,6 +564,11 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_GOOGLE_include_directive 1\n" "#define GL_GOOGLE_include_directive 1\n"
"#define GL_KHR_blend_equation_advanced 1\n" "#define GL_KHR_blend_equation_advanced 1\n"
; ;
// other general extensions
preamble +=
"#define GL_EXT_terminate_invocation 1\n"
;
#endif #endif
// #define VULKAN XXXX // #define VULKAN XXXX

View File

@ -299,6 +299,7 @@ const char* const E_GL_EXT_shader_subgroup_extended_types_int8 = "GL_EXT_shad
const char* const E_GL_EXT_shader_subgroup_extended_types_int16 = "GL_EXT_shader_subgroup_extended_types_int16"; const char* const E_GL_EXT_shader_subgroup_extended_types_int16 = "GL_EXT_shader_subgroup_extended_types_int16";
const char* const E_GL_EXT_shader_subgroup_extended_types_int64 = "GL_EXT_shader_subgroup_extended_types_int64"; const char* const E_GL_EXT_shader_subgroup_extended_types_int64 = "GL_EXT_shader_subgroup_extended_types_int64";
const char* const E_GL_EXT_shader_subgroup_extended_types_float16 = "GL_EXT_shader_subgroup_extended_types_float16"; const char* const E_GL_EXT_shader_subgroup_extended_types_float16 = "GL_EXT_shader_subgroup_extended_types_float16";
const char* const E_GL_EXT_terminate_invocation = "GL_EXT_terminate_invocation";
const char* const E_GL_EXT_shader_atomic_float = "GL_EXT_shader_atomic_float"; const char* const E_GL_EXT_shader_atomic_float = "GL_EXT_shader_atomic_float";

View File

@ -293,6 +293,7 @@ GLSLANG_WEB_EXCLUDE_OFF
%token <lex> CENTROID IN OUT INOUT %token <lex> CENTROID IN OUT INOUT
%token <lex> STRUCT VOID WHILE %token <lex> STRUCT VOID WHILE
%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> TERMINATE_INVOCATION
%token <lex> UNIFORM SHARED BUFFER %token <lex> UNIFORM SHARED BUFFER
%token <lex> FLAT SMOOTH LAYOUT %token <lex> FLAT SMOOTH LAYOUT
@ -3927,6 +3928,10 @@ jump_statement
parseContext.requireStage($1.loc, EShLangFragment, "discard"); parseContext.requireStage($1.loc, EShLangFragment, "discard");
$$ = parseContext.intermediate.addBranch(EOpKill, $1.loc); $$ = parseContext.intermediate.addBranch(EOpKill, $1.loc);
} }
| TERMINATE_INVOCATION SEMICOLON {
parseContext.requireStage($1.loc, EShLangFragment, "terminateInvocation");
$$ = parseContext.intermediate.addBranch(EOpTerminateInvocation, $1.loc);
}
; ;
// Grammar Note: No 'goto'. Gotos are not supported. // Grammar Note: No 'goto'. Gotos are not supported.

View File

@ -293,6 +293,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
%token <lex> CENTROID IN OUT INOUT %token <lex> CENTROID IN OUT INOUT
%token <lex> STRUCT VOID WHILE %token <lex> STRUCT VOID WHILE
%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> TERMINATE_INVOCATION
%token <lex> UNIFORM SHARED BUFFER %token <lex> UNIFORM SHARED BUFFER
%token <lex> FLAT SMOOTH LAYOUT %token <lex> FLAT SMOOTH LAYOUT
@ -3927,6 +3928,10 @@ jump_statement
parseContext.requireStage($1.loc, EShLangFragment, "discard"); parseContext.requireStage($1.loc, EShLangFragment, "discard");
$$ = parseContext.intermediate.addBranch(EOpKill, $1.loc); $$ = parseContext.intermediate.addBranch(EOpKill, $1.loc);
} }
| TERMINATE_INVOCATION SEMICOLON {
parseContext.requireStage($1.loc, EShLangFragment, "terminateInvocation");
$$ = parseContext.intermediate.addBranch(EOpTerminateInvocation, $1.loc);
}
; ;
// Grammar Note: No 'goto'. Gotos are not supported. // Grammar Note: No 'goto'. Gotos are not supported.

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,9 @@
/* A Bison parser, made by GNU Bison 3.0.4. */ /* A Bison parser, made by GNU Bison 3.7.2. */
/* Bison interface for Yacc-like parsers in C /* Bison interface for Yacc-like parsers in C
Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
Inc.
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -30,8 +31,12 @@
This special exception was added by the Free Software Foundation in This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */ version 2.2 of Bison. */
#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED especially those whose name start with YY_ or yy_. They are
private implementation details that can be changed or removed. */
#ifndef YY_YY_GLSLANG_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
# define YY_YY_GLSLANG_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED
/* Debug traces. */ /* Debug traces. */
#ifndef YYDEBUG #ifndef YYDEBUG
# define YYDEBUG 1 # define YYDEBUG 1
@ -40,459 +45,464 @@
extern int yydebug; extern int yydebug;
#endif #endif
/* Token type. */ /* Token kinds. */
#ifndef YYTOKENTYPE #ifndef YYTOKENTYPE
# define YYTOKENTYPE # define YYTOKENTYPE
enum yytokentype enum yytokentype
{ {
CONST = 258, YYEMPTY = -2,
BOOL = 259, YYEOF = 0, /* "end of file" */
INT = 260, YYerror = 256, /* error */
UINT = 261, YYUNDEF = 257, /* "invalid token" */
FLOAT = 262, CONST = 258, /* CONST */
BVEC2 = 263, BOOL = 259, /* BOOL */
BVEC3 = 264, INT = 260, /* INT */
BVEC4 = 265, UINT = 261, /* UINT */
IVEC2 = 266, FLOAT = 262, /* FLOAT */
IVEC3 = 267, BVEC2 = 263, /* BVEC2 */
IVEC4 = 268, BVEC3 = 264, /* BVEC3 */
UVEC2 = 269, BVEC4 = 265, /* BVEC4 */
UVEC3 = 270, IVEC2 = 266, /* IVEC2 */
UVEC4 = 271, IVEC3 = 267, /* IVEC3 */
VEC2 = 272, IVEC4 = 268, /* IVEC4 */
VEC3 = 273, UVEC2 = 269, /* UVEC2 */
VEC4 = 274, UVEC3 = 270, /* UVEC3 */
MAT2 = 275, UVEC4 = 271, /* UVEC4 */
MAT3 = 276, VEC2 = 272, /* VEC2 */
MAT4 = 277, VEC3 = 273, /* VEC3 */
MAT2X2 = 278, VEC4 = 274, /* VEC4 */
MAT2X3 = 279, MAT2 = 275, /* MAT2 */
MAT2X4 = 280, MAT3 = 276, /* MAT3 */
MAT3X2 = 281, MAT4 = 277, /* MAT4 */
MAT3X3 = 282, MAT2X2 = 278, /* MAT2X2 */
MAT3X4 = 283, MAT2X3 = 279, /* MAT2X3 */
MAT4X2 = 284, MAT2X4 = 280, /* MAT2X4 */
MAT4X3 = 285, MAT3X2 = 281, /* MAT3X2 */
MAT4X4 = 286, MAT3X3 = 282, /* MAT3X3 */
SAMPLER2D = 287, MAT3X4 = 283, /* MAT3X4 */
SAMPLER3D = 288, MAT4X2 = 284, /* MAT4X2 */
SAMPLERCUBE = 289, MAT4X3 = 285, /* MAT4X3 */
SAMPLER2DSHADOW = 290, MAT4X4 = 286, /* MAT4X4 */
SAMPLERCUBESHADOW = 291, SAMPLER2D = 287, /* SAMPLER2D */
SAMPLER2DARRAY = 292, SAMPLER3D = 288, /* SAMPLER3D */
SAMPLER2DARRAYSHADOW = 293, SAMPLERCUBE = 289, /* SAMPLERCUBE */
ISAMPLER2D = 294, SAMPLER2DSHADOW = 290, /* SAMPLER2DSHADOW */
ISAMPLER3D = 295, SAMPLERCUBESHADOW = 291, /* SAMPLERCUBESHADOW */
ISAMPLERCUBE = 296, SAMPLER2DARRAY = 292, /* SAMPLER2DARRAY */
ISAMPLER2DARRAY = 297, SAMPLER2DARRAYSHADOW = 293, /* SAMPLER2DARRAYSHADOW */
USAMPLER2D = 298, ISAMPLER2D = 294, /* ISAMPLER2D */
USAMPLER3D = 299, ISAMPLER3D = 295, /* ISAMPLER3D */
USAMPLERCUBE = 300, ISAMPLERCUBE = 296, /* ISAMPLERCUBE */
USAMPLER2DARRAY = 301, ISAMPLER2DARRAY = 297, /* ISAMPLER2DARRAY */
SAMPLER = 302, USAMPLER2D = 298, /* USAMPLER2D */
SAMPLERSHADOW = 303, USAMPLER3D = 299, /* USAMPLER3D */
TEXTURE2D = 304, USAMPLERCUBE = 300, /* USAMPLERCUBE */
TEXTURE3D = 305, USAMPLER2DARRAY = 301, /* USAMPLER2DARRAY */
TEXTURECUBE = 306, SAMPLER = 302, /* SAMPLER */
TEXTURE2DARRAY = 307, SAMPLERSHADOW = 303, /* SAMPLERSHADOW */
ITEXTURE2D = 308, TEXTURE2D = 304, /* TEXTURE2D */
ITEXTURE3D = 309, TEXTURE3D = 305, /* TEXTURE3D */
ITEXTURECUBE = 310, TEXTURECUBE = 306, /* TEXTURECUBE */
ITEXTURE2DARRAY = 311, TEXTURE2DARRAY = 307, /* TEXTURE2DARRAY */
UTEXTURE2D = 312, ITEXTURE2D = 308, /* ITEXTURE2D */
UTEXTURE3D = 313, ITEXTURE3D = 309, /* ITEXTURE3D */
UTEXTURECUBE = 314, ITEXTURECUBE = 310, /* ITEXTURECUBE */
UTEXTURE2DARRAY = 315, ITEXTURE2DARRAY = 311, /* ITEXTURE2DARRAY */
ATTRIBUTE = 316, UTEXTURE2D = 312, /* UTEXTURE2D */
VARYING = 317, UTEXTURE3D = 313, /* UTEXTURE3D */
FLOAT16_T = 318, UTEXTURECUBE = 314, /* UTEXTURECUBE */
FLOAT32_T = 319, UTEXTURE2DARRAY = 315, /* UTEXTURE2DARRAY */
DOUBLE = 320, ATTRIBUTE = 316, /* ATTRIBUTE */
FLOAT64_T = 321, VARYING = 317, /* VARYING */
INT64_T = 322, FLOAT16_T = 318, /* FLOAT16_T */
UINT64_T = 323, FLOAT32_T = 319, /* FLOAT32_T */
INT32_T = 324, DOUBLE = 320, /* DOUBLE */
UINT32_T = 325, FLOAT64_T = 321, /* FLOAT64_T */
INT16_T = 326, INT64_T = 322, /* INT64_T */
UINT16_T = 327, UINT64_T = 323, /* UINT64_T */
INT8_T = 328, INT32_T = 324, /* INT32_T */
UINT8_T = 329, UINT32_T = 325, /* UINT32_T */
I64VEC2 = 330, INT16_T = 326, /* INT16_T */
I64VEC3 = 331, UINT16_T = 327, /* UINT16_T */
I64VEC4 = 332, INT8_T = 328, /* INT8_T */
U64VEC2 = 333, UINT8_T = 329, /* UINT8_T */
U64VEC3 = 334, I64VEC2 = 330, /* I64VEC2 */
U64VEC4 = 335, I64VEC3 = 331, /* I64VEC3 */
I32VEC2 = 336, I64VEC4 = 332, /* I64VEC4 */
I32VEC3 = 337, U64VEC2 = 333, /* U64VEC2 */
I32VEC4 = 338, U64VEC3 = 334, /* U64VEC3 */
U32VEC2 = 339, U64VEC4 = 335, /* U64VEC4 */
U32VEC3 = 340, I32VEC2 = 336, /* I32VEC2 */
U32VEC4 = 341, I32VEC3 = 337, /* I32VEC3 */
I16VEC2 = 342, I32VEC4 = 338, /* I32VEC4 */
I16VEC3 = 343, U32VEC2 = 339, /* U32VEC2 */
I16VEC4 = 344, U32VEC3 = 340, /* U32VEC3 */
U16VEC2 = 345, U32VEC4 = 341, /* U32VEC4 */
U16VEC3 = 346, I16VEC2 = 342, /* I16VEC2 */
U16VEC4 = 347, I16VEC3 = 343, /* I16VEC3 */
I8VEC2 = 348, I16VEC4 = 344, /* I16VEC4 */
I8VEC3 = 349, U16VEC2 = 345, /* U16VEC2 */
I8VEC4 = 350, U16VEC3 = 346, /* U16VEC3 */
U8VEC2 = 351, U16VEC4 = 347, /* U16VEC4 */
U8VEC3 = 352, I8VEC2 = 348, /* I8VEC2 */
U8VEC4 = 353, I8VEC3 = 349, /* I8VEC3 */
DVEC2 = 354, I8VEC4 = 350, /* I8VEC4 */
DVEC3 = 355, U8VEC2 = 351, /* U8VEC2 */
DVEC4 = 356, U8VEC3 = 352, /* U8VEC3 */
DMAT2 = 357, U8VEC4 = 353, /* U8VEC4 */
DMAT3 = 358, DVEC2 = 354, /* DVEC2 */
DMAT4 = 359, DVEC3 = 355, /* DVEC3 */
F16VEC2 = 360, DVEC4 = 356, /* DVEC4 */
F16VEC3 = 361, DMAT2 = 357, /* DMAT2 */
F16VEC4 = 362, DMAT3 = 358, /* DMAT3 */
F16MAT2 = 363, DMAT4 = 359, /* DMAT4 */
F16MAT3 = 364, F16VEC2 = 360, /* F16VEC2 */
F16MAT4 = 365, F16VEC3 = 361, /* F16VEC3 */
F32VEC2 = 366, F16VEC4 = 362, /* F16VEC4 */
F32VEC3 = 367, F16MAT2 = 363, /* F16MAT2 */
F32VEC4 = 368, F16MAT3 = 364, /* F16MAT3 */
F32MAT2 = 369, F16MAT4 = 365, /* F16MAT4 */
F32MAT3 = 370, F32VEC2 = 366, /* F32VEC2 */
F32MAT4 = 371, F32VEC3 = 367, /* F32VEC3 */
F64VEC2 = 372, F32VEC4 = 368, /* F32VEC4 */
F64VEC3 = 373, F32MAT2 = 369, /* F32MAT2 */
F64VEC4 = 374, F32MAT3 = 370, /* F32MAT3 */
F64MAT2 = 375, F32MAT4 = 371, /* F32MAT4 */
F64MAT3 = 376, F64VEC2 = 372, /* F64VEC2 */
F64MAT4 = 377, F64VEC3 = 373, /* F64VEC3 */
DMAT2X2 = 378, F64VEC4 = 374, /* F64VEC4 */
DMAT2X3 = 379, F64MAT2 = 375, /* F64MAT2 */
DMAT2X4 = 380, F64MAT3 = 376, /* F64MAT3 */
DMAT3X2 = 381, F64MAT4 = 377, /* F64MAT4 */
DMAT3X3 = 382, DMAT2X2 = 378, /* DMAT2X2 */
DMAT3X4 = 383, DMAT2X3 = 379, /* DMAT2X3 */
DMAT4X2 = 384, DMAT2X4 = 380, /* DMAT2X4 */
DMAT4X3 = 385, DMAT3X2 = 381, /* DMAT3X2 */
DMAT4X4 = 386, DMAT3X3 = 382, /* DMAT3X3 */
F16MAT2X2 = 387, DMAT3X4 = 383, /* DMAT3X4 */
F16MAT2X3 = 388, DMAT4X2 = 384, /* DMAT4X2 */
F16MAT2X4 = 389, DMAT4X3 = 385, /* DMAT4X3 */
F16MAT3X2 = 390, DMAT4X4 = 386, /* DMAT4X4 */
F16MAT3X3 = 391, F16MAT2X2 = 387, /* F16MAT2X2 */
F16MAT3X4 = 392, F16MAT2X3 = 388, /* F16MAT2X3 */
F16MAT4X2 = 393, F16MAT2X4 = 389, /* F16MAT2X4 */
F16MAT4X3 = 394, F16MAT3X2 = 390, /* F16MAT3X2 */
F16MAT4X4 = 395, F16MAT3X3 = 391, /* F16MAT3X3 */
F32MAT2X2 = 396, F16MAT3X4 = 392, /* F16MAT3X4 */
F32MAT2X3 = 397, F16MAT4X2 = 393, /* F16MAT4X2 */
F32MAT2X4 = 398, F16MAT4X3 = 394, /* F16MAT4X3 */
F32MAT3X2 = 399, F16MAT4X4 = 395, /* F16MAT4X4 */
F32MAT3X3 = 400, F32MAT2X2 = 396, /* F32MAT2X2 */
F32MAT3X4 = 401, F32MAT2X3 = 397, /* F32MAT2X3 */
F32MAT4X2 = 402, F32MAT2X4 = 398, /* F32MAT2X4 */
F32MAT4X3 = 403, F32MAT3X2 = 399, /* F32MAT3X2 */
F32MAT4X4 = 404, F32MAT3X3 = 400, /* F32MAT3X3 */
F64MAT2X2 = 405, F32MAT3X4 = 401, /* F32MAT3X4 */
F64MAT2X3 = 406, F32MAT4X2 = 402, /* F32MAT4X2 */
F64MAT2X4 = 407, F32MAT4X3 = 403, /* F32MAT4X3 */
F64MAT3X2 = 408, F32MAT4X4 = 404, /* F32MAT4X4 */
F64MAT3X3 = 409, F64MAT2X2 = 405, /* F64MAT2X2 */
F64MAT3X4 = 410, F64MAT2X3 = 406, /* F64MAT2X3 */
F64MAT4X2 = 411, F64MAT2X4 = 407, /* F64MAT2X4 */
F64MAT4X3 = 412, F64MAT3X2 = 408, /* F64MAT3X2 */
F64MAT4X4 = 413, F64MAT3X3 = 409, /* F64MAT3X3 */
ATOMIC_UINT = 414, F64MAT3X4 = 410, /* F64MAT3X4 */
ACCSTRUCTNV = 415, F64MAT4X2 = 411, /* F64MAT4X2 */
ACCSTRUCTEXT = 416, F64MAT4X3 = 412, /* F64MAT4X3 */
RAYQUERYEXT = 417, F64MAT4X4 = 413, /* F64MAT4X4 */
FCOOPMATNV = 418, ATOMIC_UINT = 414, /* ATOMIC_UINT */
ICOOPMATNV = 419, ACCSTRUCTNV = 415, /* ACCSTRUCTNV */
UCOOPMATNV = 420, ACCSTRUCTEXT = 416, /* ACCSTRUCTEXT */
SAMPLERCUBEARRAY = 421, RAYQUERYEXT = 417, /* RAYQUERYEXT */
SAMPLERCUBEARRAYSHADOW = 422, FCOOPMATNV = 418, /* FCOOPMATNV */
ISAMPLERCUBEARRAY = 423, ICOOPMATNV = 419, /* ICOOPMATNV */
USAMPLERCUBEARRAY = 424, UCOOPMATNV = 420, /* UCOOPMATNV */
SAMPLER1D = 425, SAMPLERCUBEARRAY = 421, /* SAMPLERCUBEARRAY */
SAMPLER1DARRAY = 426, SAMPLERCUBEARRAYSHADOW = 422, /* SAMPLERCUBEARRAYSHADOW */
SAMPLER1DARRAYSHADOW = 427, ISAMPLERCUBEARRAY = 423, /* ISAMPLERCUBEARRAY */
ISAMPLER1D = 428, USAMPLERCUBEARRAY = 424, /* USAMPLERCUBEARRAY */
SAMPLER1DSHADOW = 429, SAMPLER1D = 425, /* SAMPLER1D */
SAMPLER2DRECT = 430, SAMPLER1DARRAY = 426, /* SAMPLER1DARRAY */
SAMPLER2DRECTSHADOW = 431, SAMPLER1DARRAYSHADOW = 427, /* SAMPLER1DARRAYSHADOW */
ISAMPLER2DRECT = 432, ISAMPLER1D = 428, /* ISAMPLER1D */
USAMPLER2DRECT = 433, SAMPLER1DSHADOW = 429, /* SAMPLER1DSHADOW */
SAMPLERBUFFER = 434, SAMPLER2DRECT = 430, /* SAMPLER2DRECT */
ISAMPLERBUFFER = 435, SAMPLER2DRECTSHADOW = 431, /* SAMPLER2DRECTSHADOW */
USAMPLERBUFFER = 436, ISAMPLER2DRECT = 432, /* ISAMPLER2DRECT */
SAMPLER2DMS = 437, USAMPLER2DRECT = 433, /* USAMPLER2DRECT */
ISAMPLER2DMS = 438, SAMPLERBUFFER = 434, /* SAMPLERBUFFER */
USAMPLER2DMS = 439, ISAMPLERBUFFER = 435, /* ISAMPLERBUFFER */
SAMPLER2DMSARRAY = 440, USAMPLERBUFFER = 436, /* USAMPLERBUFFER */
ISAMPLER2DMSARRAY = 441, SAMPLER2DMS = 437, /* SAMPLER2DMS */
USAMPLER2DMSARRAY = 442, ISAMPLER2DMS = 438, /* ISAMPLER2DMS */
SAMPLEREXTERNALOES = 443, USAMPLER2DMS = 439, /* USAMPLER2DMS */
SAMPLEREXTERNAL2DY2YEXT = 444, SAMPLER2DMSARRAY = 440, /* SAMPLER2DMSARRAY */
ISAMPLER1DARRAY = 445, ISAMPLER2DMSARRAY = 441, /* ISAMPLER2DMSARRAY */
USAMPLER1D = 446, USAMPLER2DMSARRAY = 442, /* USAMPLER2DMSARRAY */
USAMPLER1DARRAY = 447, SAMPLEREXTERNALOES = 443, /* SAMPLEREXTERNALOES */
F16SAMPLER1D = 448, SAMPLEREXTERNAL2DY2YEXT = 444, /* SAMPLEREXTERNAL2DY2YEXT */
F16SAMPLER2D = 449, ISAMPLER1DARRAY = 445, /* ISAMPLER1DARRAY */
F16SAMPLER3D = 450, USAMPLER1D = 446, /* USAMPLER1D */
F16SAMPLER2DRECT = 451, USAMPLER1DARRAY = 447, /* USAMPLER1DARRAY */
F16SAMPLERCUBE = 452, F16SAMPLER1D = 448, /* F16SAMPLER1D */
F16SAMPLER1DARRAY = 453, F16SAMPLER2D = 449, /* F16SAMPLER2D */
F16SAMPLER2DARRAY = 454, F16SAMPLER3D = 450, /* F16SAMPLER3D */
F16SAMPLERCUBEARRAY = 455, F16SAMPLER2DRECT = 451, /* F16SAMPLER2DRECT */
F16SAMPLERBUFFER = 456, F16SAMPLERCUBE = 452, /* F16SAMPLERCUBE */
F16SAMPLER2DMS = 457, F16SAMPLER1DARRAY = 453, /* F16SAMPLER1DARRAY */
F16SAMPLER2DMSARRAY = 458, F16SAMPLER2DARRAY = 454, /* F16SAMPLER2DARRAY */
F16SAMPLER1DSHADOW = 459, F16SAMPLERCUBEARRAY = 455, /* F16SAMPLERCUBEARRAY */
F16SAMPLER2DSHADOW = 460, F16SAMPLERBUFFER = 456, /* F16SAMPLERBUFFER */
F16SAMPLER1DARRAYSHADOW = 461, F16SAMPLER2DMS = 457, /* F16SAMPLER2DMS */
F16SAMPLER2DARRAYSHADOW = 462, F16SAMPLER2DMSARRAY = 458, /* F16SAMPLER2DMSARRAY */
F16SAMPLER2DRECTSHADOW = 463, F16SAMPLER1DSHADOW = 459, /* F16SAMPLER1DSHADOW */
F16SAMPLERCUBESHADOW = 464, F16SAMPLER2DSHADOW = 460, /* F16SAMPLER2DSHADOW */
F16SAMPLERCUBEARRAYSHADOW = 465, F16SAMPLER1DARRAYSHADOW = 461, /* F16SAMPLER1DARRAYSHADOW */
IMAGE1D = 466, F16SAMPLER2DARRAYSHADOW = 462, /* F16SAMPLER2DARRAYSHADOW */
IIMAGE1D = 467, F16SAMPLER2DRECTSHADOW = 463, /* F16SAMPLER2DRECTSHADOW */
UIMAGE1D = 468, F16SAMPLERCUBESHADOW = 464, /* F16SAMPLERCUBESHADOW */
IMAGE2D = 469, F16SAMPLERCUBEARRAYSHADOW = 465, /* F16SAMPLERCUBEARRAYSHADOW */
IIMAGE2D = 470, IMAGE1D = 466, /* IMAGE1D */
UIMAGE2D = 471, IIMAGE1D = 467, /* IIMAGE1D */
IMAGE3D = 472, UIMAGE1D = 468, /* UIMAGE1D */
IIMAGE3D = 473, IMAGE2D = 469, /* IMAGE2D */
UIMAGE3D = 474, IIMAGE2D = 470, /* IIMAGE2D */
IMAGE2DRECT = 475, UIMAGE2D = 471, /* UIMAGE2D */
IIMAGE2DRECT = 476, IMAGE3D = 472, /* IMAGE3D */
UIMAGE2DRECT = 477, IIMAGE3D = 473, /* IIMAGE3D */
IMAGECUBE = 478, UIMAGE3D = 474, /* UIMAGE3D */
IIMAGECUBE = 479, IMAGE2DRECT = 475, /* IMAGE2DRECT */
UIMAGECUBE = 480, IIMAGE2DRECT = 476, /* IIMAGE2DRECT */
IMAGEBUFFER = 481, UIMAGE2DRECT = 477, /* UIMAGE2DRECT */
IIMAGEBUFFER = 482, IMAGECUBE = 478, /* IMAGECUBE */
UIMAGEBUFFER = 483, IIMAGECUBE = 479, /* IIMAGECUBE */
IMAGE1DARRAY = 484, UIMAGECUBE = 480, /* UIMAGECUBE */
IIMAGE1DARRAY = 485, IMAGEBUFFER = 481, /* IMAGEBUFFER */
UIMAGE1DARRAY = 486, IIMAGEBUFFER = 482, /* IIMAGEBUFFER */
IMAGE2DARRAY = 487, UIMAGEBUFFER = 483, /* UIMAGEBUFFER */
IIMAGE2DARRAY = 488, IMAGE1DARRAY = 484, /* IMAGE1DARRAY */
UIMAGE2DARRAY = 489, IIMAGE1DARRAY = 485, /* IIMAGE1DARRAY */
IMAGECUBEARRAY = 490, UIMAGE1DARRAY = 486, /* UIMAGE1DARRAY */
IIMAGECUBEARRAY = 491, IMAGE2DARRAY = 487, /* IMAGE2DARRAY */
UIMAGECUBEARRAY = 492, IIMAGE2DARRAY = 488, /* IIMAGE2DARRAY */
IMAGE2DMS = 493, UIMAGE2DARRAY = 489, /* UIMAGE2DARRAY */
IIMAGE2DMS = 494, IMAGECUBEARRAY = 490, /* IMAGECUBEARRAY */
UIMAGE2DMS = 495, IIMAGECUBEARRAY = 491, /* IIMAGECUBEARRAY */
IMAGE2DMSARRAY = 496, UIMAGECUBEARRAY = 492, /* UIMAGECUBEARRAY */
IIMAGE2DMSARRAY = 497, IMAGE2DMS = 493, /* IMAGE2DMS */
UIMAGE2DMSARRAY = 498, IIMAGE2DMS = 494, /* IIMAGE2DMS */
F16IMAGE1D = 499, UIMAGE2DMS = 495, /* UIMAGE2DMS */
F16IMAGE2D = 500, IMAGE2DMSARRAY = 496, /* IMAGE2DMSARRAY */
F16IMAGE3D = 501, IIMAGE2DMSARRAY = 497, /* IIMAGE2DMSARRAY */
F16IMAGE2DRECT = 502, UIMAGE2DMSARRAY = 498, /* UIMAGE2DMSARRAY */
F16IMAGECUBE = 503, F16IMAGE1D = 499, /* F16IMAGE1D */
F16IMAGE1DARRAY = 504, F16IMAGE2D = 500, /* F16IMAGE2D */
F16IMAGE2DARRAY = 505, F16IMAGE3D = 501, /* F16IMAGE3D */
F16IMAGECUBEARRAY = 506, F16IMAGE2DRECT = 502, /* F16IMAGE2DRECT */
F16IMAGEBUFFER = 507, F16IMAGECUBE = 503, /* F16IMAGECUBE */
F16IMAGE2DMS = 508, F16IMAGE1DARRAY = 504, /* F16IMAGE1DARRAY */
F16IMAGE2DMSARRAY = 509, F16IMAGE2DARRAY = 505, /* F16IMAGE2DARRAY */
I64IMAGE1D = 510, F16IMAGECUBEARRAY = 506, /* F16IMAGECUBEARRAY */
U64IMAGE1D = 511, F16IMAGEBUFFER = 507, /* F16IMAGEBUFFER */
I64IMAGE2D = 512, F16IMAGE2DMS = 508, /* F16IMAGE2DMS */
U64IMAGE2D = 513, F16IMAGE2DMSARRAY = 509, /* F16IMAGE2DMSARRAY */
I64IMAGE3D = 514, I64IMAGE1D = 510, /* I64IMAGE1D */
U64IMAGE3D = 515, U64IMAGE1D = 511, /* U64IMAGE1D */
I64IMAGE2DRECT = 516, I64IMAGE2D = 512, /* I64IMAGE2D */
U64IMAGE2DRECT = 517, U64IMAGE2D = 513, /* U64IMAGE2D */
I64IMAGECUBE = 518, I64IMAGE3D = 514, /* I64IMAGE3D */
U64IMAGECUBE = 519, U64IMAGE3D = 515, /* U64IMAGE3D */
I64IMAGEBUFFER = 520, I64IMAGE2DRECT = 516, /* I64IMAGE2DRECT */
U64IMAGEBUFFER = 521, U64IMAGE2DRECT = 517, /* U64IMAGE2DRECT */
I64IMAGE1DARRAY = 522, I64IMAGECUBE = 518, /* I64IMAGECUBE */
U64IMAGE1DARRAY = 523, U64IMAGECUBE = 519, /* U64IMAGECUBE */
I64IMAGE2DARRAY = 524, I64IMAGEBUFFER = 520, /* I64IMAGEBUFFER */
U64IMAGE2DARRAY = 525, U64IMAGEBUFFER = 521, /* U64IMAGEBUFFER */
I64IMAGECUBEARRAY = 526, I64IMAGE1DARRAY = 522, /* I64IMAGE1DARRAY */
U64IMAGECUBEARRAY = 527, U64IMAGE1DARRAY = 523, /* U64IMAGE1DARRAY */
I64IMAGE2DMS = 528, I64IMAGE2DARRAY = 524, /* I64IMAGE2DARRAY */
U64IMAGE2DMS = 529, U64IMAGE2DARRAY = 525, /* U64IMAGE2DARRAY */
I64IMAGE2DMSARRAY = 530, I64IMAGECUBEARRAY = 526, /* I64IMAGECUBEARRAY */
U64IMAGE2DMSARRAY = 531, U64IMAGECUBEARRAY = 527, /* U64IMAGECUBEARRAY */
TEXTURECUBEARRAY = 532, I64IMAGE2DMS = 528, /* I64IMAGE2DMS */
ITEXTURECUBEARRAY = 533, U64IMAGE2DMS = 529, /* U64IMAGE2DMS */
UTEXTURECUBEARRAY = 534, I64IMAGE2DMSARRAY = 530, /* I64IMAGE2DMSARRAY */
TEXTURE1D = 535, U64IMAGE2DMSARRAY = 531, /* U64IMAGE2DMSARRAY */
ITEXTURE1D = 536, TEXTURECUBEARRAY = 532, /* TEXTURECUBEARRAY */
UTEXTURE1D = 537, ITEXTURECUBEARRAY = 533, /* ITEXTURECUBEARRAY */
TEXTURE1DARRAY = 538, UTEXTURECUBEARRAY = 534, /* UTEXTURECUBEARRAY */
ITEXTURE1DARRAY = 539, TEXTURE1D = 535, /* TEXTURE1D */
UTEXTURE1DARRAY = 540, ITEXTURE1D = 536, /* ITEXTURE1D */
TEXTURE2DRECT = 541, UTEXTURE1D = 537, /* UTEXTURE1D */
ITEXTURE2DRECT = 542, TEXTURE1DARRAY = 538, /* TEXTURE1DARRAY */
UTEXTURE2DRECT = 543, ITEXTURE1DARRAY = 539, /* ITEXTURE1DARRAY */
TEXTUREBUFFER = 544, UTEXTURE1DARRAY = 540, /* UTEXTURE1DARRAY */
ITEXTUREBUFFER = 545, TEXTURE2DRECT = 541, /* TEXTURE2DRECT */
UTEXTUREBUFFER = 546, ITEXTURE2DRECT = 542, /* ITEXTURE2DRECT */
TEXTURE2DMS = 547, UTEXTURE2DRECT = 543, /* UTEXTURE2DRECT */
ITEXTURE2DMS = 548, TEXTUREBUFFER = 544, /* TEXTUREBUFFER */
UTEXTURE2DMS = 549, ITEXTUREBUFFER = 545, /* ITEXTUREBUFFER */
TEXTURE2DMSARRAY = 550, UTEXTUREBUFFER = 546, /* UTEXTUREBUFFER */
ITEXTURE2DMSARRAY = 551, TEXTURE2DMS = 547, /* TEXTURE2DMS */
UTEXTURE2DMSARRAY = 552, ITEXTURE2DMS = 548, /* ITEXTURE2DMS */
F16TEXTURE1D = 553, UTEXTURE2DMS = 549, /* UTEXTURE2DMS */
F16TEXTURE2D = 554, TEXTURE2DMSARRAY = 550, /* TEXTURE2DMSARRAY */
F16TEXTURE3D = 555, ITEXTURE2DMSARRAY = 551, /* ITEXTURE2DMSARRAY */
F16TEXTURE2DRECT = 556, UTEXTURE2DMSARRAY = 552, /* UTEXTURE2DMSARRAY */
F16TEXTURECUBE = 557, F16TEXTURE1D = 553, /* F16TEXTURE1D */
F16TEXTURE1DARRAY = 558, F16TEXTURE2D = 554, /* F16TEXTURE2D */
F16TEXTURE2DARRAY = 559, F16TEXTURE3D = 555, /* F16TEXTURE3D */
F16TEXTURECUBEARRAY = 560, F16TEXTURE2DRECT = 556, /* F16TEXTURE2DRECT */
F16TEXTUREBUFFER = 561, F16TEXTURECUBE = 557, /* F16TEXTURECUBE */
F16TEXTURE2DMS = 562, F16TEXTURE1DARRAY = 558, /* F16TEXTURE1DARRAY */
F16TEXTURE2DMSARRAY = 563, F16TEXTURE2DARRAY = 559, /* F16TEXTURE2DARRAY */
SUBPASSINPUT = 564, F16TEXTURECUBEARRAY = 560, /* F16TEXTURECUBEARRAY */
SUBPASSINPUTMS = 565, F16TEXTUREBUFFER = 561, /* F16TEXTUREBUFFER */
ISUBPASSINPUT = 566, F16TEXTURE2DMS = 562, /* F16TEXTURE2DMS */
ISUBPASSINPUTMS = 567, F16TEXTURE2DMSARRAY = 563, /* F16TEXTURE2DMSARRAY */
USUBPASSINPUT = 568, SUBPASSINPUT = 564, /* SUBPASSINPUT */
USUBPASSINPUTMS = 569, SUBPASSINPUTMS = 565, /* SUBPASSINPUTMS */
F16SUBPASSINPUT = 570, ISUBPASSINPUT = 566, /* ISUBPASSINPUT */
F16SUBPASSINPUTMS = 571, ISUBPASSINPUTMS = 567, /* ISUBPASSINPUTMS */
LEFT_OP = 572, USUBPASSINPUT = 568, /* USUBPASSINPUT */
RIGHT_OP = 573, USUBPASSINPUTMS = 569, /* USUBPASSINPUTMS */
INC_OP = 574, F16SUBPASSINPUT = 570, /* F16SUBPASSINPUT */
DEC_OP = 575, F16SUBPASSINPUTMS = 571, /* F16SUBPASSINPUTMS */
LE_OP = 576, LEFT_OP = 572, /* LEFT_OP */
GE_OP = 577, RIGHT_OP = 573, /* RIGHT_OP */
EQ_OP = 578, INC_OP = 574, /* INC_OP */
NE_OP = 579, DEC_OP = 575, /* DEC_OP */
AND_OP = 580, LE_OP = 576, /* LE_OP */
OR_OP = 581, GE_OP = 577, /* GE_OP */
XOR_OP = 582, EQ_OP = 578, /* EQ_OP */
MUL_ASSIGN = 583, NE_OP = 579, /* NE_OP */
DIV_ASSIGN = 584, AND_OP = 580, /* AND_OP */
ADD_ASSIGN = 585, OR_OP = 581, /* OR_OP */
MOD_ASSIGN = 586, XOR_OP = 582, /* XOR_OP */
LEFT_ASSIGN = 587, MUL_ASSIGN = 583, /* MUL_ASSIGN */
RIGHT_ASSIGN = 588, DIV_ASSIGN = 584, /* DIV_ASSIGN */
AND_ASSIGN = 589, ADD_ASSIGN = 585, /* ADD_ASSIGN */
XOR_ASSIGN = 590, MOD_ASSIGN = 586, /* MOD_ASSIGN */
OR_ASSIGN = 591, LEFT_ASSIGN = 587, /* LEFT_ASSIGN */
SUB_ASSIGN = 592, RIGHT_ASSIGN = 588, /* RIGHT_ASSIGN */
STRING_LITERAL = 593, AND_ASSIGN = 589, /* AND_ASSIGN */
LEFT_PAREN = 594, XOR_ASSIGN = 590, /* XOR_ASSIGN */
RIGHT_PAREN = 595, OR_ASSIGN = 591, /* OR_ASSIGN */
LEFT_BRACKET = 596, SUB_ASSIGN = 592, /* SUB_ASSIGN */
RIGHT_BRACKET = 597, STRING_LITERAL = 593, /* STRING_LITERAL */
LEFT_BRACE = 598, LEFT_PAREN = 594, /* LEFT_PAREN */
RIGHT_BRACE = 599, RIGHT_PAREN = 595, /* RIGHT_PAREN */
DOT = 600, LEFT_BRACKET = 596, /* LEFT_BRACKET */
COMMA = 601, RIGHT_BRACKET = 597, /* RIGHT_BRACKET */
COLON = 602, LEFT_BRACE = 598, /* LEFT_BRACE */
EQUAL = 603, RIGHT_BRACE = 599, /* RIGHT_BRACE */
SEMICOLON = 604, DOT = 600, /* DOT */
BANG = 605, COMMA = 601, /* COMMA */
DASH = 606, COLON = 602, /* COLON */
TILDE = 607, EQUAL = 603, /* EQUAL */
PLUS = 608, SEMICOLON = 604, /* SEMICOLON */
STAR = 609, BANG = 605, /* BANG */
SLASH = 610, DASH = 606, /* DASH */
PERCENT = 611, TILDE = 607, /* TILDE */
LEFT_ANGLE = 612, PLUS = 608, /* PLUS */
RIGHT_ANGLE = 613, STAR = 609, /* STAR */
VERTICAL_BAR = 614, SLASH = 610, /* SLASH */
CARET = 615, PERCENT = 611, /* PERCENT */
AMPERSAND = 616, LEFT_ANGLE = 612, /* LEFT_ANGLE */
QUESTION = 617, RIGHT_ANGLE = 613, /* RIGHT_ANGLE */
INVARIANT = 618, VERTICAL_BAR = 614, /* VERTICAL_BAR */
HIGH_PRECISION = 619, CARET = 615, /* CARET */
MEDIUM_PRECISION = 620, AMPERSAND = 616, /* AMPERSAND */
LOW_PRECISION = 621, QUESTION = 617, /* QUESTION */
PRECISION = 622, INVARIANT = 618, /* INVARIANT */
PACKED = 623, HIGH_PRECISION = 619, /* HIGH_PRECISION */
RESOURCE = 624, MEDIUM_PRECISION = 620, /* MEDIUM_PRECISION */
SUPERP = 625, LOW_PRECISION = 621, /* LOW_PRECISION */
FLOATCONSTANT = 626, PRECISION = 622, /* PRECISION */
INTCONSTANT = 627, PACKED = 623, /* PACKED */
UINTCONSTANT = 628, RESOURCE = 624, /* RESOURCE */
BOOLCONSTANT = 629, SUPERP = 625, /* SUPERP */
IDENTIFIER = 630, FLOATCONSTANT = 626, /* FLOATCONSTANT */
TYPE_NAME = 631, INTCONSTANT = 627, /* INTCONSTANT */
CENTROID = 632, UINTCONSTANT = 628, /* UINTCONSTANT */
IN = 633, BOOLCONSTANT = 629, /* BOOLCONSTANT */
OUT = 634, IDENTIFIER = 630, /* IDENTIFIER */
INOUT = 635, TYPE_NAME = 631, /* TYPE_NAME */
STRUCT = 636, CENTROID = 632, /* CENTROID */
VOID = 637, IN = 633, /* IN */
WHILE = 638, OUT = 634, /* OUT */
BREAK = 639, INOUT = 635, /* INOUT */
CONTINUE = 640, STRUCT = 636, /* STRUCT */
DO = 641, VOID = 637, /* VOID */
ELSE = 642, WHILE = 638, /* WHILE */
FOR = 643, BREAK = 639, /* BREAK */
IF = 644, CONTINUE = 640, /* CONTINUE */
DISCARD = 645, DO = 641, /* DO */
RETURN = 646, ELSE = 642, /* ELSE */
SWITCH = 647, FOR = 643, /* FOR */
CASE = 648, IF = 644, /* IF */
DEFAULT = 649, DISCARD = 645, /* DISCARD */
UNIFORM = 650, RETURN = 646, /* RETURN */
SHARED = 651, SWITCH = 647, /* SWITCH */
BUFFER = 652, CASE = 648, /* CASE */
FLAT = 653, DEFAULT = 649, /* DEFAULT */
SMOOTH = 654, TERMINATE_INVOCATION = 650, /* TERMINATE_INVOCATION */
LAYOUT = 655, UNIFORM = 651, /* UNIFORM */
DOUBLECONSTANT = 656, SHARED = 652, /* SHARED */
INT16CONSTANT = 657, BUFFER = 653, /* BUFFER */
UINT16CONSTANT = 658, FLAT = 654, /* FLAT */
FLOAT16CONSTANT = 659, SMOOTH = 655, /* SMOOTH */
INT32CONSTANT = 660, LAYOUT = 656, /* LAYOUT */
UINT32CONSTANT = 661, DOUBLECONSTANT = 657, /* DOUBLECONSTANT */
INT64CONSTANT = 662, INT16CONSTANT = 658, /* INT16CONSTANT */
UINT64CONSTANT = 663, UINT16CONSTANT = 659, /* UINT16CONSTANT */
SUBROUTINE = 664, FLOAT16CONSTANT = 660, /* FLOAT16CONSTANT */
DEMOTE = 665, INT32CONSTANT = 661, /* INT32CONSTANT */
PAYLOADNV = 666, UINT32CONSTANT = 662, /* UINT32CONSTANT */
PAYLOADINNV = 667, INT64CONSTANT = 663, /* INT64CONSTANT */
HITATTRNV = 668, UINT64CONSTANT = 664, /* UINT64CONSTANT */
CALLDATANV = 669, SUBROUTINE = 665, /* SUBROUTINE */
CALLDATAINNV = 670, DEMOTE = 666, /* DEMOTE */
PAYLOADEXT = 671, PAYLOADNV = 667, /* PAYLOADNV */
PAYLOADINEXT = 672, PAYLOADINNV = 668, /* PAYLOADINNV */
HITATTREXT = 673, HITATTRNV = 669, /* HITATTRNV */
CALLDATAEXT = 674, CALLDATANV = 670, /* CALLDATANV */
CALLDATAINEXT = 675, CALLDATAINNV = 671, /* CALLDATAINNV */
PATCH = 676, PAYLOADEXT = 672, /* PAYLOADEXT */
SAMPLE = 677, PAYLOADINEXT = 673, /* PAYLOADINEXT */
NONUNIFORM = 678, HITATTREXT = 674, /* HITATTREXT */
COHERENT = 679, CALLDATAEXT = 675, /* CALLDATAEXT */
VOLATILE = 680, CALLDATAINEXT = 676, /* CALLDATAINEXT */
RESTRICT = 681, PATCH = 677, /* PATCH */
READONLY = 682, SAMPLE = 678, /* SAMPLE */
WRITEONLY = 683, NONUNIFORM = 679, /* NONUNIFORM */
DEVICECOHERENT = 684, COHERENT = 680, /* COHERENT */
QUEUEFAMILYCOHERENT = 685, VOLATILE = 681, /* VOLATILE */
WORKGROUPCOHERENT = 686, RESTRICT = 682, /* RESTRICT */
SUBGROUPCOHERENT = 687, READONLY = 683, /* READONLY */
NONPRIVATE = 688, WRITEONLY = 684, /* WRITEONLY */
SHADERCALLCOHERENT = 689, DEVICECOHERENT = 685, /* DEVICECOHERENT */
NOPERSPECTIVE = 690, QUEUEFAMILYCOHERENT = 686, /* QUEUEFAMILYCOHERENT */
EXPLICITINTERPAMD = 691, WORKGROUPCOHERENT = 687, /* WORKGROUPCOHERENT */
PERVERTEXNV = 692, SUBGROUPCOHERENT = 688, /* SUBGROUPCOHERENT */
PERPRIMITIVENV = 693, NONPRIVATE = 689, /* NONPRIVATE */
PERVIEWNV = 694, SHADERCALLCOHERENT = 690, /* SHADERCALLCOHERENT */
PERTASKNV = 695, NOPERSPECTIVE = 691, /* NOPERSPECTIVE */
PRECISE = 696 EXPLICITINTERPAMD = 692, /* EXPLICITINTERPAMD */
PERVERTEXNV = 693, /* PERVERTEXNV */
PERPRIMITIVENV = 694, /* PERPRIMITIVENV */
PERVIEWNV = 695, /* PERVIEWNV */
PERTASKNV = 696, /* PERTASKNV */
PRECISE = 697 /* PRECISE */
}; };
typedef enum yytokentype yytoken_kind_t;
#endif #endif
/* Value type. */ /* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE union YYSTYPE
{ {
#line 97 "MachineIndependent/glslang.y" /* yacc.c:1909 */ #line 97 "glslang/MachineIndependent/glslang.y"
struct { struct {
glslang::TSourceLoc loc; glslang::TSourceLoc loc;
@ -528,9 +538,9 @@ union YYSTYPE
glslang::TArraySizes* typeParameters; glslang::TArraySizes* typeParameters;
} interm; } interm;
#line 532 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */ #line 542 "glslang/MachineIndependent/glslang_tab.cpp.h"
};
};
typedef union YYSTYPE YYSTYPE; typedef union YYSTYPE YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_TRIVIAL 1
# define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_DECLARED 1
@ -540,4 +550,4 @@ typedef union YYSTYPE YYSTYPE;
int yyparse (glslang::TParseContext* pParseContext); int yyparse (glslang::TParseContext* pParseContext);
#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */ #endif /* !YY_YY_GLSLANG_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */

View File

@ -1409,14 +1409,15 @@ bool TOutputTraverser::visitBranch(TVisit /* visit*/, TIntermBranch* node)
OutputTreeText(out, node, depth); OutputTreeText(out, node, depth);
switch (node->getFlowOp()) { switch (node->getFlowOp()) {
case EOpKill: out.debug << "Branch: Kill"; break; case EOpKill: out.debug << "Branch: Kill"; break;
case EOpBreak: out.debug << "Branch: Break"; break; case EOpTerminateInvocation: out.debug << "Branch: TerminateInvocation"; break;
case EOpContinue: out.debug << "Branch: Continue"; break; case EOpBreak: out.debug << "Branch: Break"; break;
case EOpReturn: out.debug << "Branch: Return"; break; case EOpContinue: out.debug << "Branch: Continue"; break;
case EOpCase: out.debug << "case: "; break; case EOpReturn: out.debug << "Branch: Return"; break;
case EOpDemote: out.debug << "Demote"; break; case EOpCase: out.debug << "case: "; break;
case EOpDefault: out.debug << "default: "; break; case EOpDemote: out.debug << "Demote"; break;
default: out.debug << "Branch: Unknown Branch"; break; case EOpDefault: out.debug << "default: "; break;
default: out.debug << "Branch: Unknown Branch"; break;
} }
if (node->getExpression()) { if (node->getExpression()) {

View File

@ -278,6 +278,8 @@ INSTANTIATE_TEST_SUITE_P(
"glsl.es320.subgroupShuffleRelative.comp", "glsl.es320.subgroupShuffleRelative.comp",
"glsl.es320.subgroupQuad.comp", "glsl.es320.subgroupQuad.comp",
"glsl.es320.subgroupVote.comp", "glsl.es320.subgroupVote.comp",
"terminate.frag",
"terminate.vert",
})), })),
FileNameAsCustomTestSuffix FileNameAsCustomTestSuffix
); );

View File

@ -436,6 +436,7 @@ INSTANTIATE_TEST_SUITE_P(
"spv.specConstant.int16.comp", "spv.specConstant.int16.comp",
"spv.specConstant.int8.comp", "spv.specConstant.int8.comp",
"spv.storageBuffer.vert", "spv.storageBuffer.vert",
"spv.terminate.frag",
"spv.precise.tese", "spv.precise.tese",
"spv.precise.tesc", "spv.precise.tesc",
"spv.volatileAtomic.comp", "spv.volatileAtomic.comp",