Web: Prune grammar and lexor down to needed subset.

About 60K smaller (20% the target size is these units of 300K).
Over 300 fewer #ifdef.

This adds a new glslang.m4 file that needs to be processed by m4 to get
the glslang.y file needed by bison.  See comment in glslang.m4 for more
detail.

This updates the updateGrammar script to do the .m4 -> .y processing,
to conditionally exclude grammar not needed for the web build.
This commit is contained in:
John Kessenich 2019-08-06 23:16:35 -06:00
parent a28f7a75d1
commit 441b2ac4d1
7 changed files with 9107 additions and 5829 deletions

View File

@ -7,6 +7,7 @@ else(WIN32)
endif(WIN32) endif(WIN32)
set(SOURCES set(SOURCES
MachineIndependent/glslang.m4
MachineIndependent/glslang.y MachineIndependent/glslang.y
MachineIndependent/glslang_tab.cpp MachineIndependent/glslang_tab.cpp
MachineIndependent/attribute.cpp MachineIndependent/attribute.cpp
@ -71,15 +72,6 @@ set(HEADERS
MachineIndependent/preprocessor/PpContext.h MachineIndependent/preprocessor/PpContext.h
MachineIndependent/preprocessor/PpTokens.h) MachineIndependent/preprocessor/PpTokens.h)
# This might be useful for making grammar changes:
#
# find_package(BISON)
# add_custom_command(OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp.h
# COMMAND ${BISON_EXECUTABLE} --defines=${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp.h -t ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang.y -o ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp
# MAIN_DEPENDENCY MachineIndependent/glslang.y
# WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})
# set(BISON_GLSLParser_OUTPUT_SOURCE ${CMAKE_CURRENT_SOURCE_DIR}/MachineIndependent/glslang_tab.cpp)
glslang_pch(SOURCES MachineIndependent/pch.cpp) glslang_pch(SOURCES MachineIndependent/pch.cpp)
add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS}) add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${SOURCES} ${HEADERS})

View File

@ -341,9 +341,14 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["const"] = CONST; (*KeywordMap)["const"] = CONST;
(*KeywordMap)["uniform"] = UNIFORM; (*KeywordMap)["uniform"] = UNIFORM;
(*KeywordMap)["nonuniformEXT"] = NONUNIFORM;
(*KeywordMap)["in"] = IN; (*KeywordMap)["in"] = IN;
(*KeywordMap)["out"] = OUT; (*KeywordMap)["out"] = OUT;
(*KeywordMap)["smooth"] = SMOOTH;
(*KeywordMap)["flat"] = FLAT;
(*KeywordMap)["centroid"] = CENTROID;
(*KeywordMap)["invariant"] = INVARIANT;
(*KeywordMap)["packed"] = PACKED;
(*KeywordMap)["resource"] = RESOURCE;
(*KeywordMap)["inout"] = INOUT; (*KeywordMap)["inout"] = INOUT;
(*KeywordMap)["struct"] = STRUCT; (*KeywordMap)["struct"] = STRUCT;
(*KeywordMap)["break"] = BREAK; (*KeywordMap)["break"] = BREAK;
@ -356,7 +361,6 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["default"] = DEFAULT; (*KeywordMap)["default"] = DEFAULT;
(*KeywordMap)["if"] = IF; (*KeywordMap)["if"] = IF;
(*KeywordMap)["else"] = ELSE; (*KeywordMap)["else"] = ELSE;
(*KeywordMap)["demote"] = DEMOTE;
(*KeywordMap)["discard"] = DISCARD; (*KeywordMap)["discard"] = DISCARD;
(*KeywordMap)["return"] = RETURN; (*KeywordMap)["return"] = RETURN;
(*KeywordMap)["void"] = VOID; (*KeywordMap)["void"] = VOID;
@ -377,8 +381,33 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["mat4"] = MAT4; (*KeywordMap)["mat4"] = MAT4;
(*KeywordMap)["true"] = BOOLCONSTANT; (*KeywordMap)["true"] = BOOLCONSTANT;
(*KeywordMap)["false"] = BOOLCONSTANT; (*KeywordMap)["false"] = BOOLCONSTANT;
(*KeywordMap)["layout"] = LAYOUT;
(*KeywordMap)["shared"] = SHARED;
(*KeywordMap)["highp"] = HIGH_PRECISION;
(*KeywordMap)["mediump"] = MEDIUM_PRECISION;
(*KeywordMap)["lowp"] = LOW_PRECISION;
(*KeywordMap)["superp"] = SUPERP;
(*KeywordMap)["precision"] = PRECISION;
(*KeywordMap)["mat2x2"] = MAT2X2;
(*KeywordMap)["mat2x3"] = MAT2X3;
(*KeywordMap)["mat2x4"] = MAT2X4;
(*KeywordMap)["mat3x2"] = MAT3X2;
(*KeywordMap)["mat3x3"] = MAT3X3;
(*KeywordMap)["mat3x4"] = MAT3X4;
(*KeywordMap)["mat4x2"] = MAT4X2;
(*KeywordMap)["mat4x3"] = MAT4X3;
(*KeywordMap)["mat4x4"] = MAT4X4;
(*KeywordMap)["uint"] = UINT;
(*KeywordMap)["uvec2"] = UVEC2;
(*KeywordMap)["uvec3"] = UVEC3;
(*KeywordMap)["uvec4"] = UVEC4;
#ifndef GLSLANG_WEB
(*KeywordMap)["nonuniformEXT"] = NONUNIFORM;
(*KeywordMap)["demote"] = DEMOTE;
(*KeywordMap)["attribute"] = ATTRIBUTE; (*KeywordMap)["attribute"] = ATTRIBUTE;
(*KeywordMap)["varying"] = VARYING; (*KeywordMap)["varying"] = VARYING;
(*KeywordMap)["noperspective"] = NOPERSPECTIVE;
(*KeywordMap)["buffer"] = BUFFER; (*KeywordMap)["buffer"] = BUFFER;
(*KeywordMap)["coherent"] = COHERENT; (*KeywordMap)["coherent"] = COHERENT;
(*KeywordMap)["devicecoherent"] = DEVICECOHERENT; (*KeywordMap)["devicecoherent"] = DEVICECOHERENT;
@ -391,24 +420,9 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["writeonly"] = WRITEONLY; (*KeywordMap)["writeonly"] = WRITEONLY;
(*KeywordMap)["atomic_uint"] = ATOMIC_UINT; (*KeywordMap)["atomic_uint"] = ATOMIC_UINT;
(*KeywordMap)["volatile"] = VOLATILE; (*KeywordMap)["volatile"] = VOLATILE;
(*KeywordMap)["layout"] = LAYOUT;
(*KeywordMap)["shared"] = SHARED;
(*KeywordMap)["patch"] = PATCH; (*KeywordMap)["patch"] = PATCH;
(*KeywordMap)["sample"] = SAMPLE; (*KeywordMap)["sample"] = SAMPLE;
(*KeywordMap)["subroutine"] = SUBROUTINE; (*KeywordMap)["subroutine"] = SUBROUTINE;
(*KeywordMap)["highp"] = HIGH_PRECISION;
(*KeywordMap)["mediump"] = MEDIUM_PRECISION;
(*KeywordMap)["lowp"] = LOW_PRECISION;
(*KeywordMap)["precision"] = PRECISION;
(*KeywordMap)["mat2x2"] = MAT2X2;
(*KeywordMap)["mat2x3"] = MAT2X3;
(*KeywordMap)["mat2x4"] = MAT2X4;
(*KeywordMap)["mat3x2"] = MAT3X2;
(*KeywordMap)["mat3x3"] = MAT3X3;
(*KeywordMap)["mat3x4"] = MAT3X4;
(*KeywordMap)["mat4x2"] = MAT4X2;
(*KeywordMap)["mat4x3"] = MAT4X3;
(*KeywordMap)["mat4x4"] = MAT4X4;
(*KeywordMap)["dmat2"] = DMAT2; (*KeywordMap)["dmat2"] = DMAT2;
(*KeywordMap)["dmat3"] = DMAT3; (*KeywordMap)["dmat3"] = DMAT3;
(*KeywordMap)["dmat4"] = DMAT4; (*KeywordMap)["dmat4"] = DMAT4;
@ -458,11 +472,6 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["dvec2"] = DVEC2; (*KeywordMap)["dvec2"] = DVEC2;
(*KeywordMap)["dvec3"] = DVEC3; (*KeywordMap)["dvec3"] = DVEC3;
(*KeywordMap)["dvec4"] = DVEC4; (*KeywordMap)["dvec4"] = DVEC4;
(*KeywordMap)["uint"] = UINT;
(*KeywordMap)["uvec2"] = UVEC2;
(*KeywordMap)["uvec3"] = UVEC3;
(*KeywordMap)["uvec4"] = UVEC4;
(*KeywordMap)["int64_t"] = INT64_T; (*KeywordMap)["int64_t"] = INT64_T;
(*KeywordMap)["uint64_t"] = UINT64_T; (*KeywordMap)["uint64_t"] = UINT64_T;
(*KeywordMap)["i64vec2"] = I64VEC2; (*KeywordMap)["i64vec2"] = I64VEC2;
@ -549,6 +558,7 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["f64mat4x2"] = F64MAT4X2; (*KeywordMap)["f64mat4x2"] = F64MAT4X2;
(*KeywordMap)["f64mat4x3"] = F64MAT4X3; (*KeywordMap)["f64mat4x3"] = F64MAT4X3;
(*KeywordMap)["f64mat4x4"] = F64MAT4X4; (*KeywordMap)["f64mat4x4"] = F64MAT4X4;
#endif
(*KeywordMap)["sampler2D"] = SAMPLER2D; (*KeywordMap)["sampler2D"] = SAMPLER2D;
(*KeywordMap)["samplerCube"] = SAMPLERCUBE; (*KeywordMap)["samplerCube"] = SAMPLERCUBE;
@ -556,12 +566,6 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["samplerCubeArrayShadow"] = SAMPLERCUBEARRAYSHADOW; (*KeywordMap)["samplerCubeArrayShadow"] = SAMPLERCUBEARRAYSHADOW;
(*KeywordMap)["isamplerCubeArray"] = ISAMPLERCUBEARRAY; (*KeywordMap)["isamplerCubeArray"] = ISAMPLERCUBEARRAY;
(*KeywordMap)["usamplerCubeArray"] = USAMPLERCUBEARRAY; (*KeywordMap)["usamplerCubeArray"] = USAMPLERCUBEARRAY;
(*KeywordMap)["sampler1DArrayShadow"] = SAMPLER1DARRAYSHADOW;
(*KeywordMap)["isampler1DArray"] = ISAMPLER1DARRAY;
(*KeywordMap)["usampler1D"] = USAMPLER1D;
(*KeywordMap)["isampler1D"] = ISAMPLER1D;
(*KeywordMap)["usampler1DArray"] = USAMPLER1DARRAY;
(*KeywordMap)["samplerBuffer"] = SAMPLERBUFFER;
(*KeywordMap)["samplerCubeShadow"] = SAMPLERCUBESHADOW; (*KeywordMap)["samplerCubeShadow"] = SAMPLERCUBESHADOW;
(*KeywordMap)["sampler2DArray"] = SAMPLER2DARRAY; (*KeywordMap)["sampler2DArray"] = SAMPLER2DARRAY;
(*KeywordMap)["sampler2DArrayShadow"] = SAMPLER2DARRAYSHADOW; (*KeywordMap)["sampler2DArrayShadow"] = SAMPLER2DARRAYSHADOW;
@ -573,6 +577,16 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["usampler3D"] = USAMPLER3D; (*KeywordMap)["usampler3D"] = USAMPLER3D;
(*KeywordMap)["usamplerCube"] = USAMPLERCUBE; (*KeywordMap)["usamplerCube"] = USAMPLERCUBE;
(*KeywordMap)["usampler2DArray"] = USAMPLER2DARRAY; (*KeywordMap)["usampler2DArray"] = USAMPLER2DARRAY;
(*KeywordMap)["sampler3D"] = SAMPLER3D;
(*KeywordMap)["sampler2DShadow"] = SAMPLER2DSHADOW;
#ifndef GLSLANG_WEB
(*KeywordMap)["sampler1DArrayShadow"] = SAMPLER1DARRAYSHADOW;
(*KeywordMap)["isampler1DArray"] = ISAMPLER1DARRAY;
(*KeywordMap)["usampler1D"] = USAMPLER1D;
(*KeywordMap)["isampler1D"] = ISAMPLER1D;
(*KeywordMap)["usampler1DArray"] = USAMPLER1DARRAY;
(*KeywordMap)["samplerBuffer"] = SAMPLERBUFFER;
(*KeywordMap)["isampler2DRect"] = ISAMPLER2DRECT; (*KeywordMap)["isampler2DRect"] = ISAMPLER2DRECT;
(*KeywordMap)["usampler2DRect"] = USAMPLER2DRECT; (*KeywordMap)["usampler2DRect"] = USAMPLER2DRECT;
(*KeywordMap)["isamplerBuffer"] = ISAMPLERBUFFER; (*KeywordMap)["isamplerBuffer"] = ISAMPLERBUFFER;
@ -585,8 +599,6 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["usampler2DMSArray"] = USAMPLER2DMSARRAY; (*KeywordMap)["usampler2DMSArray"] = USAMPLER2DMSARRAY;
(*KeywordMap)["sampler1D"] = SAMPLER1D; (*KeywordMap)["sampler1D"] = SAMPLER1D;
(*KeywordMap)["sampler1DShadow"] = SAMPLER1DSHADOW; (*KeywordMap)["sampler1DShadow"] = SAMPLER1DSHADOW;
(*KeywordMap)["sampler3D"] = SAMPLER3D;
(*KeywordMap)["sampler2DShadow"] = SAMPLER2DSHADOW;
(*KeywordMap)["sampler2DRect"] = SAMPLER2DRECT; (*KeywordMap)["sampler2DRect"] = SAMPLER2DRECT;
(*KeywordMap)["sampler2DRectShadow"] = SAMPLER2DRECTSHADOW; (*KeywordMap)["sampler2DRectShadow"] = SAMPLER2DRECTSHADOW;
(*KeywordMap)["sampler1DArray"] = SAMPLER1DARRAY; (*KeywordMap)["sampler1DArray"] = SAMPLER1DARRAY;
@ -639,7 +651,6 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["usubpassInput"] = USUBPASSINPUT; (*KeywordMap)["usubpassInput"] = USUBPASSINPUT;
(*KeywordMap)["usubpassInputMS"] = USUBPASSINPUTMS; (*KeywordMap)["usubpassInputMS"] = USUBPASSINPUTMS;
#ifdef AMD_EXTENSIONS
(*KeywordMap)["f16sampler1D"] = F16SAMPLER1D; (*KeywordMap)["f16sampler1D"] = F16SAMPLER1D;
(*KeywordMap)["f16sampler2D"] = F16SAMPLER2D; (*KeywordMap)["f16sampler2D"] = F16SAMPLER2D;
(*KeywordMap)["f16sampler3D"] = F16SAMPLER3D; (*KeywordMap)["f16sampler3D"] = F16SAMPLER3D;
@ -685,25 +696,10 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["f16subpassInput"] = F16SUBPASSINPUT; (*KeywordMap)["f16subpassInput"] = F16SUBPASSINPUT;
(*KeywordMap)["f16subpassInputMS"] = F16SUBPASSINPUTMS; (*KeywordMap)["f16subpassInputMS"] = F16SUBPASSINPUTMS;
#endif
(*KeywordMap)["noperspective"] = NOPERSPECTIVE;
(*KeywordMap)["smooth"] = SMOOTH;
(*KeywordMap)["flat"] = FLAT;
#ifdef AMD_EXTENSIONS
(*KeywordMap)["__explicitInterpAMD"] = EXPLICITINTERPAMD; (*KeywordMap)["__explicitInterpAMD"] = EXPLICITINTERPAMD;
#endif
(*KeywordMap)["centroid"] = CENTROID;
#ifdef NV_EXTENSIONS
(*KeywordMap)["pervertexNV"] = PERVERTEXNV; (*KeywordMap)["pervertexNV"] = PERVERTEXNV;
#endif
(*KeywordMap)["precise"] = PRECISE; (*KeywordMap)["precise"] = PRECISE;
(*KeywordMap)["invariant"] = INVARIANT;
(*KeywordMap)["packed"] = PACKED;
(*KeywordMap)["resource"] = RESOURCE;
(*KeywordMap)["superp"] = SUPERP;
#ifdef NV_EXTENSIONS
(*KeywordMap)["rayPayloadNV"] = PAYLOADNV; (*KeywordMap)["rayPayloadNV"] = PAYLOADNV;
(*KeywordMap)["rayPayloadInNV"] = PAYLOADINNV; (*KeywordMap)["rayPayloadInNV"] = PAYLOADINNV;
(*KeywordMap)["hitAttributeNV"] = HITATTRNV; (*KeywordMap)["hitAttributeNV"] = HITATTRNV;
@ -713,7 +709,6 @@ void TScanContext::fillInKeywordMap()
(*KeywordMap)["perprimitiveNV"] = PERPRIMITIVENV; (*KeywordMap)["perprimitiveNV"] = PERPRIMITIVENV;
(*KeywordMap)["perviewNV"] = PERVIEWNV; (*KeywordMap)["perviewNV"] = PERVIEWNV;
(*KeywordMap)["taskNV"] = PERTASKNV; (*KeywordMap)["taskNV"] = PERTASKNV;
#endif
(*KeywordMap)["fcoopmatNV"] = FCOOPMATNV; (*KeywordMap)["fcoopmatNV"] = FCOOPMATNV;
@ -756,6 +751,7 @@ void TScanContext::fillInKeywordMap()
ReservedSet->insert("cast"); ReservedSet->insert("cast");
ReservedSet->insert("namespace"); ReservedSet->insert("namespace");
ReservedSet->insert("using"); ReservedSet->insert("using");
#endif
} }
void TScanContext::deleteKeywordMap() void TScanContext::deleteKeywordMap()
@ -842,13 +838,15 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
case PpAtomConstInt: parserToken->sType.lex.i = ppToken.ival; return INTCONSTANT; case PpAtomConstInt: parserToken->sType.lex.i = ppToken.ival; return INTCONSTANT;
case PpAtomConstUint: parserToken->sType.lex.i = ppToken.ival; return UINTCONSTANT; case PpAtomConstUint: parserToken->sType.lex.i = ppToken.ival; return UINTCONSTANT;
case PpAtomConstFloat: parserToken->sType.lex.d = ppToken.dval; return FLOATCONSTANT;
#ifndef GLSLANG_WEB
case PpAtomConstInt16: parserToken->sType.lex.i = ppToken.ival; return INT16CONSTANT; case PpAtomConstInt16: parserToken->sType.lex.i = ppToken.ival; return INT16CONSTANT;
case PpAtomConstUint16: parserToken->sType.lex.i = ppToken.ival; return UINT16CONSTANT; case PpAtomConstUint16: parserToken->sType.lex.i = ppToken.ival; return UINT16CONSTANT;
case PpAtomConstInt64: parserToken->sType.lex.i64 = ppToken.i64val; return INT64CONSTANT; case PpAtomConstInt64: parserToken->sType.lex.i64 = ppToken.i64val; return INT64CONSTANT;
case PpAtomConstUint64: parserToken->sType.lex.i64 = ppToken.i64val; return UINT64CONSTANT; case PpAtomConstUint64: parserToken->sType.lex.i64 = ppToken.i64val; return UINT64CONSTANT;
case PpAtomConstFloat: parserToken->sType.lex.d = ppToken.dval; return FLOATCONSTANT;
case PpAtomConstDouble: parserToken->sType.lex.d = ppToken.dval; return DOUBLECONSTANT; case PpAtomConstDouble: parserToken->sType.lex.d = ppToken.dval; return DOUBLECONSTANT;
case PpAtomConstFloat16: parserToken->sType.lex.d = ppToken.dval; return FLOAT16CONSTANT; case PpAtomConstFloat16: parserToken->sType.lex.d = ppToken.dval; return FLOAT16CONSTANT;
#endif
case PpAtomIdentifier: case PpAtomIdentifier:
{ {
int token = tokenizeIdentifier(); int token = tokenizeIdentifier();
@ -870,8 +868,10 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
int TScanContext::tokenizeIdentifier() int TScanContext::tokenizeIdentifier()
{ {
#ifndef GLSLANG_WEB
if (ReservedSet->find(tokenText) != ReservedSet->end()) if (ReservedSet->find(tokenText) != ReservedSet->end())
return reservedWord(); return reservedWord();
#endif
auto it = KeywordMap->find(tokenText); auto it = KeywordMap->find(tokenText);
if (it == KeywordMap->end()) { if (it == KeywordMap->end()) {
@ -902,12 +902,6 @@ int TScanContext::tokenizeIdentifier()
afterStruct = true; afterStruct = true;
return keyword; return keyword;
case NONUNIFORM:
if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
return keyword;
else
return identifierOrType();
case SWITCH: case SWITCH:
case DEFAULT: case DEFAULT:
if ((parseContext.profile == EEsProfile && parseContext.version < 300) || if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
@ -943,20 +937,66 @@ int TScanContext::tokenizeIdentifier()
parserToken->sType.lex.b = false; parserToken->sType.lex.b = false;
return keyword; return keyword;
case SMOOTH:
if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
(parseContext.profile != EEsProfile && parseContext.version < 130))
return identifierOrType();
return keyword;
case FLAT:
if (parseContext.profile == EEsProfile && parseContext.version < 300)
reservedWord();
else if (parseContext.profile != EEsProfile && parseContext.version < 130)
return identifierOrType();
return keyword;
case CENTROID:
if (parseContext.version < 120)
return identifierOrType();
return keyword;
case INVARIANT:
if (parseContext.profile != EEsProfile && parseContext.version < 120)
return identifierOrType();
return keyword;
case PACKED:
if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
(parseContext.profile != EEsProfile && parseContext.version < 330))
return reservedWord();
return identifierOrType();
case RESOURCE:
{
bool reserved = (parseContext.profile == EEsProfile && parseContext.version >= 300) ||
(parseContext.profile != EEsProfile && parseContext.version >= 420);
return identifierOrReserved(reserved);
}
case SUPERP:
{
bool reserved = parseContext.profile == EEsProfile || parseContext.version >= 130;
return identifierOrReserved(reserved);
}
#ifndef GLSLANG_WEB
case NOPERSPECTIVE:
if (parseContext.profile == EEsProfile && parseContext.version >= 300 &&
parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
return keyword;
return es30ReservedFromGLSL(130);
case NONUNIFORM:
if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
return keyword;
else
return identifierOrType();
case ATTRIBUTE: case ATTRIBUTE:
case VARYING: case VARYING:
if (parseContext.profile == EEsProfile && parseContext.version >= 300) if (parseContext.profile == EEsProfile && parseContext.version >= 300)
reservedWord(); reservedWord();
return keyword; return keyword;
case BUFFER: case BUFFER:
afterBuffer = true; afterBuffer = true;
if ((parseContext.profile == EEsProfile && parseContext.version < 310) || if ((parseContext.profile == EEsProfile && parseContext.version < 310) ||
(parseContext.profile != EEsProfile && parseContext.version < 430)) (parseContext.profile != EEsProfile && parseContext.version < 430))
return identifierOrType(); return identifierOrType();
return keyword; return keyword;
#ifdef NV_EXTENSIONS
case PAYLOADNV: case PAYLOADNV:
case PAYLOADINNV: case PAYLOADINNV:
case HITATTRNV: case HITATTRNV:
@ -968,8 +1008,6 @@ int TScanContext::tokenizeIdentifier()
&& parseContext.extensionTurnedOn(E_GL_NV_ray_tracing))) && parseContext.extensionTurnedOn(E_GL_NV_ray_tracing)))
return keyword; return keyword;
return identifierOrType(); return identifierOrType();
#endif
case ATOMIC_UINT: case ATOMIC_UINT:
if ((parseContext.profile == EEsProfile && parseContext.version >= 310) || if ((parseContext.profile == EEsProfile && parseContext.version >= 310) ||
parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters)) parseContext.extensionTurnedOn(E_GL_ARB_shader_atomic_counters))
@ -988,7 +1026,6 @@ int TScanContext::tokenizeIdentifier()
if (parseContext.profile == EEsProfile && parseContext.version >= 310) if (parseContext.profile == EEsProfile && parseContext.version >= 310)
return keyword; return keyword;
return es30ReservedFromGLSL(parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store) ? 130 : 420); return es30ReservedFromGLSL(parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store) ? 130 : 420);
case VOLATILE: case VOLATILE:
if (parseContext.profile == EEsProfile && parseContext.version >= 310) if (parseContext.profile == EEsProfile && parseContext.version >= 310)
return keyword; return keyword;
@ -996,24 +1033,6 @@ int TScanContext::tokenizeIdentifier()
(parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store)))) (parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store))))
reservedWord(); reservedWord();
return keyword; return keyword;
case LAYOUT:
{
const int numLayoutExts = 2;
const char* layoutExts[numLayoutExts] = { E_GL_ARB_shading_language_420pack,
E_GL_ARB_explicit_attrib_location };
if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
(parseContext.profile != EEsProfile && parseContext.version < 140 &&
! parseContext.extensionsTurnedOn(numLayoutExts, layoutExts)))
return identifierOrType();
return keyword;
}
case SHARED:
if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
(parseContext.profile != EEsProfile && parseContext.version < 140))
return identifierOrType();
return keyword;
case PATCH: case PATCH:
if (parseContext.symbolTable.atBuiltInLevel() || if (parseContext.symbolTable.atBuiltInLevel() ||
(parseContext.profile == EEsProfile && (parseContext.profile == EEsProfile &&
@ -1032,6 +1051,24 @@ int TScanContext::tokenizeIdentifier()
case SUBROUTINE: case SUBROUTINE:
return es30ReservedFromGLSL(400); return es30ReservedFromGLSL(400);
#endif
case LAYOUT:
{
const int numLayoutExts = 2;
const char* layoutExts[numLayoutExts] = { E_GL_ARB_shading_language_420pack,
E_GL_ARB_explicit_attrib_location };
if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
(parseContext.profile != EEsProfile && parseContext.version < 140 &&
! parseContext.extensionsTurnedOn(numLayoutExts, layoutExts)))
return identifierOrType();
return keyword;
}
case SHARED:
if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
(parseContext.profile != EEsProfile && parseContext.version < 140))
return identifierOrType();
return keyword;
case HIGH_PRECISION: case HIGH_PRECISION:
case MEDIUM_PRECISION: case MEDIUM_PRECISION:
@ -1050,6 +1087,7 @@ int TScanContext::tokenizeIdentifier()
case MAT4X4: case MAT4X4:
return matNxM(); return matNxM();
#ifndef GLSLANG_WEB
case DMAT2: case DMAT2:
case DMAT3: case DMAT3:
case DMAT4: case DMAT4:
@ -1172,10 +1210,7 @@ int TScanContext::tokenizeIdentifier()
afterType = true; afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() || if (parseContext.symbolTable.atBuiltInLevel() ||
(parseContext.profile != EEsProfile && parseContext.version >= 450 && (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
( (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
#ifdef AMD_EXTENSIONS
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) ||
#endif
parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) || parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16)))) parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16))))
@ -1251,10 +1286,7 @@ int TScanContext::tokenizeIdentifier()
afterType = true; afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() || if (parseContext.symbolTable.atBuiltInLevel() ||
(parseContext.profile != EEsProfile && parseContext.version >= 450 && (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
( (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
#ifdef AMD_EXTENSIONS
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
#endif
parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) || parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16)))) parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))))
@ -1277,15 +1309,13 @@ int TScanContext::tokenizeIdentifier()
afterType = true; afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() || if (parseContext.symbolTable.atBuiltInLevel() ||
(parseContext.profile != EEsProfile && parseContext.version >= 450 && (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
( (parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
#ifdef AMD_EXTENSIONS
parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) ||
#endif
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16)))) parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16))))
return keyword; return keyword;
return identifierOrType(); return identifierOrType();
#endif
case SAMPLERCUBEARRAY: case SAMPLERCUBEARRAY:
case SAMPLERCUBEARRAYSHADOW: case SAMPLERCUBEARRAYSHADOW:
@ -1299,14 +1329,6 @@ int TScanContext::tokenizeIdentifier()
reservedWord(); reservedWord();
return keyword; return keyword;
case ISAMPLER1D:
case ISAMPLER1DARRAY:
case SAMPLER1DARRAYSHADOW:
case USAMPLER1D:
case USAMPLER1DARRAY:
afterType = true;
return es30ReservedFromGLSL(130);
case UINT: case UINT:
case UVEC2: case UVEC2:
case UVEC3: case UVEC3:
@ -1325,6 +1347,30 @@ int TScanContext::tokenizeIdentifier()
afterType = true; afterType = true;
return nonreservedKeyword(300, 130); return nonreservedKeyword(300, 130);
case SAMPLER3D:
afterType = true;
if (parseContext.profile == EEsProfile && parseContext.version < 300) {
if (!parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
reservedWord();
}
return keyword;
case SAMPLER2DSHADOW:
afterType = true;
if (parseContext.profile == EEsProfile && parseContext.version < 300) {
if (!parseContext.extensionTurnedOn(E_GL_EXT_shadow_samplers))
reservedWord();
}
return keyword;
#ifndef GLSLANG_WEB
case ISAMPLER1D:
case ISAMPLER1DARRAY:
case SAMPLER1DARRAYSHADOW:
case USAMPLER1D:
case USAMPLER1DARRAY:
afterType = true;
return es30ReservedFromGLSL(130);
case ISAMPLER2DRECT: case ISAMPLER2DRECT:
case USAMPLER2DRECT: case USAMPLER2DRECT:
afterType = true; afterType = true;
@ -1369,22 +1415,6 @@ int TScanContext::tokenizeIdentifier()
reservedWord(); reservedWord();
return keyword; return keyword;
case SAMPLER3D:
afterType = true;
if (parseContext.profile == EEsProfile && parseContext.version < 300) {
if (!parseContext.extensionTurnedOn(E_GL_OES_texture_3D))
reservedWord();
}
return keyword;
case SAMPLER2DSHADOW:
afterType = true;
if (parseContext.profile == EEsProfile && parseContext.version < 300) {
if (!parseContext.extensionTurnedOn(E_GL_EXT_shadow_samplers))
reservedWord();
}
return keyword;
case SAMPLER2DRECT: case SAMPLER2DRECT:
case SAMPLER2DRECTSHADOW: case SAMPLER2DRECTSHADOW:
afterType = true; afterType = true;
@ -1473,7 +1503,6 @@ int TScanContext::tokenizeIdentifier()
else else
return identifierOrType(); return identifierOrType();
#ifdef AMD_EXTENSIONS
case F16SAMPLER1D: case F16SAMPLER1D:
case F16SAMPLER2D: case F16SAMPLER2D:
case F16SAMPLER3D: case F16SAMPLER3D:
@ -1525,50 +1554,19 @@ int TScanContext::tokenizeIdentifier()
parseContext.profile != EEsProfile && parseContext.version >= 450)) parseContext.profile != EEsProfile && parseContext.version >= 450))
return keyword; return keyword;
return identifierOrType(); return identifierOrType();
#endif
case NOPERSPECTIVE:
#ifdef NV_EXTENSIONS
if (parseContext.profile == EEsProfile && parseContext.version >= 300 &&
parseContext.extensionTurnedOn(E_GL_NV_shader_noperspective_interpolation))
return keyword;
#endif
return es30ReservedFromGLSL(130);
case SMOOTH:
if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
(parseContext.profile != EEsProfile && parseContext.version < 130))
return identifierOrType();
return keyword;
#ifdef AMD_EXTENSIONS
case EXPLICITINTERPAMD: case EXPLICITINTERPAMD:
if (parseContext.profile != EEsProfile && parseContext.version >= 450 && if (parseContext.profile != EEsProfile && parseContext.version >= 450 &&
parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter)) parseContext.extensionTurnedOn(E_GL_AMD_shader_explicit_vertex_parameter))
return keyword; return keyword;
return identifierOrType(); return identifierOrType();
#endif
#ifdef NV_EXTENSIONS
case PERVERTEXNV: case PERVERTEXNV:
if (((parseContext.profile != EEsProfile && parseContext.version >= 450) || if (((parseContext.profile != EEsProfile && parseContext.version >= 450) ||
(parseContext.profile == EEsProfile && parseContext.version >= 320)) && (parseContext.profile == EEsProfile && parseContext.version >= 320)) &&
parseContext.extensionTurnedOn(E_GL_NV_fragment_shader_barycentric)) parseContext.extensionTurnedOn(E_GL_NV_fragment_shader_barycentric))
return keyword; return keyword;
return identifierOrType(); return identifierOrType();
#endif
case FLAT:
if (parseContext.profile == EEsProfile && parseContext.version < 300)
reservedWord();
else if (parseContext.profile != EEsProfile && parseContext.version < 130)
return identifierOrType();
return keyword;
case CENTROID:
if (parseContext.version < 120)
return identifierOrType();
return keyword;
case PRECISE: case PRECISE:
if ((parseContext.profile == EEsProfile && if ((parseContext.profile == EEsProfile &&
@ -1581,30 +1579,6 @@ int TScanContext::tokenizeIdentifier()
} }
return identifierOrType(); return identifierOrType();
case INVARIANT:
if (parseContext.profile != EEsProfile && parseContext.version < 120)
return identifierOrType();
return keyword;
case PACKED:
if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
(parseContext.profile != EEsProfile && parseContext.version < 330))
return reservedWord();
return identifierOrType();
case RESOURCE:
{
bool reserved = (parseContext.profile == EEsProfile && parseContext.version >= 300) ||
(parseContext.profile != EEsProfile && parseContext.version >= 420);
return identifierOrReserved(reserved);
}
case SUPERP:
{
bool reserved = parseContext.profile == EEsProfile || parseContext.version >= 130;
return identifierOrReserved(reserved);
}
#ifdef NV_EXTENSIONS
case PERPRIMITIVENV: case PERPRIMITIVENV:
case PERVIEWNV: case PERVIEWNV:
case PERTASKNV: case PERTASKNV:
@ -1613,7 +1587,6 @@ int TScanContext::tokenizeIdentifier()
parseContext.extensionTurnedOn(E_GL_NV_mesh_shader)) parseContext.extensionTurnedOn(E_GL_NV_mesh_shader))
return keyword; return keyword;
return identifierOrType(); return identifierOrType();
#endif
case FCOOPMATNV: case FCOOPMATNV:
afterType = true; afterType = true;
@ -1627,6 +1600,7 @@ int TScanContext::tokenizeIdentifier()
return keyword; return keyword;
else else
return identifierOrType(); return identifierOrType();
#endif
default: default:
parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc); parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -1,3 +1,16 @@
#!/usr/bin/env bash #!/usr/bin/bash
if [ "$1" = 'web' ]
then
m4 -P -DGLSLANG_WEB MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
elif [ "$#" -eq 0 ]
then
m4 -P MachineIndependent/glslang.m4 > MachineIndependent/glslang.y
else
echo usage:
echo $0 web
echo $0
exit
fi
bison --defines=MachineIndependent/glslang_tab.cpp.h -t MachineIndependent/glslang.y -o MachineIndependent/glslang_tab.cpp bison --defines=MachineIndependent/glslang_tab.cpp.h -t MachineIndependent/glslang.y -o MachineIndependent/glslang_tab.cpp