#include "SymbolTable.h"
#include "ParseHelper.h"
#include "attribute.h"
+#include "glslang_tab.cpp.h"
#include "ScanContext.h"
#include "Scan.h"
-#ifdef GLSLANG_ANGLE
-#include "glslang_angle_tab.cpp.h"
-#else
-#include "glslang_tab.cpp.h"
-#endif
-
// preprocessor includes
#include "preprocessor/PpContext.h"
#include "preprocessor/PpTokens.h"
(*KeywordMap)["if"] = IF;
(*KeywordMap)["else"] = ELSE;
(*KeywordMap)["discard"] = DISCARD;
+ (*KeywordMap)["terminateInvocation"] = TERMINATE_INVOCATION;
+ (*KeywordMap)["terminateRayEXT"] = TERMINATE_RAY;
+ (*KeywordMap)["ignoreIntersectionEXT"] = IGNORE_INTERSECTION;
(*KeywordMap)["return"] = RETURN;
(*KeywordMap)["void"] = VOID;
(*KeywordMap)["bool"] = BOOL;
(*KeywordMap)["uvec4"] = UVEC4;
#ifndef GLSLANG_WEB
+ (*KeywordMap)["nonuniformEXT"] = NONUNIFORM;
+ (*KeywordMap)["demote"] = DEMOTE;
(*KeywordMap)["attribute"] = ATTRIBUTE;
(*KeywordMap)["varying"] = VARYING;
(*KeywordMap)["noperspective"] = NOPERSPECTIVE;
- (*KeywordMap)["precise"] = PRECISE;
(*KeywordMap)["coherent"] = COHERENT;
- (*KeywordMap)["restrict"] = RESTRICT;
- (*KeywordMap)["readonly"] = READONLY;
- (*KeywordMap)["writeonly"] = WRITEONLY;
- (*KeywordMap)["volatile"] = VOLATILE;
- (*KeywordMap)["patch"] = PATCH;
- (*KeywordMap)["sample"] = SAMPLE;
-
-#ifndef GLSLANG_ANGLE
- (*KeywordMap)["nonuniformEXT"] = NONUNIFORM;
- (*KeywordMap)["demote"] = DEMOTE;
(*KeywordMap)["devicecoherent"] = DEVICECOHERENT;
(*KeywordMap)["queuefamilycoherent"] = QUEUEFAMILYCOHERENT;
(*KeywordMap)["workgroupcoherent"] = WORKGROUPCOHERENT;
(*KeywordMap)["subgroupcoherent"] = SUBGROUPCOHERENT;
(*KeywordMap)["shadercallcoherent"] = SHADERCALLCOHERENT;
(*KeywordMap)["nonprivate"] = NONPRIVATE;
+ (*KeywordMap)["restrict"] = RESTRICT;
+ (*KeywordMap)["readonly"] = READONLY;
+ (*KeywordMap)["writeonly"] = WRITEONLY;
(*KeywordMap)["atomic_uint"] = ATOMIC_UINT;
+ (*KeywordMap)["volatile"] = VOLATILE;
+ (*KeywordMap)["patch"] = PATCH;
+ (*KeywordMap)["sample"] = SAMPLE;
(*KeywordMap)["subroutine"] = SUBROUTINE;
(*KeywordMap)["dmat2"] = DMAT2;
(*KeywordMap)["dmat3"] = DMAT3;
(*KeywordMap)["image1D"] = IMAGE1D;
(*KeywordMap)["iimage1D"] = IIMAGE1D;
(*KeywordMap)["uimage1D"] = UIMAGE1D;
- (*KeywordMap)["image1DArray"] = IMAGE1DARRAY;
- (*KeywordMap)["iimage1DArray"] = IIMAGE1DARRAY;
- (*KeywordMap)["uimage1DArray"] = UIMAGE1DARRAY;
-#endif
(*KeywordMap)["image2D"] = IMAGE2D;
(*KeywordMap)["iimage2D"] = IIMAGE2D;
(*KeywordMap)["uimage2D"] = UIMAGE2D;
(*KeywordMap)["imageBuffer"] = IMAGEBUFFER;
(*KeywordMap)["iimageBuffer"] = IIMAGEBUFFER;
(*KeywordMap)["uimageBuffer"] = UIMAGEBUFFER;
+ (*KeywordMap)["image1DArray"] = IMAGE1DARRAY;
+ (*KeywordMap)["iimage1DArray"] = IIMAGE1DARRAY;
+ (*KeywordMap)["uimage1DArray"] = UIMAGE1DARRAY;
(*KeywordMap)["image2DArray"] = IMAGE2DARRAY;
(*KeywordMap)["iimage2DArray"] = IIMAGE2DARRAY;
(*KeywordMap)["uimage2DArray"] = UIMAGE2DARRAY;
(*KeywordMap)["image2DMSArray"] = IMAGE2DMSARRAY;
(*KeywordMap)["iimage2DMSArray"] = IIMAGE2DMSARRAY;
(*KeywordMap)["uimage2DMSArray"] = UIMAGE2DMSARRAY;
-#ifndef GLSLANG_ANGLE
+ (*KeywordMap)["i64image1D"] = I64IMAGE1D;
+ (*KeywordMap)["u64image1D"] = U64IMAGE1D;
+ (*KeywordMap)["i64image2D"] = I64IMAGE2D;
+ (*KeywordMap)["u64image2D"] = U64IMAGE2D;
+ (*KeywordMap)["i64image3D"] = I64IMAGE3D;
+ (*KeywordMap)["u64image3D"] = U64IMAGE3D;
+ (*KeywordMap)["i64image2DRect"] = I64IMAGE2DRECT;
+ (*KeywordMap)["u64image2DRect"] = U64IMAGE2DRECT;
+ (*KeywordMap)["i64imageCube"] = I64IMAGECUBE;
+ (*KeywordMap)["u64imageCube"] = U64IMAGECUBE;
+ (*KeywordMap)["i64imageBuffer"] = I64IMAGEBUFFER;
+ (*KeywordMap)["u64imageBuffer"] = U64IMAGEBUFFER;
+ (*KeywordMap)["i64image1DArray"] = I64IMAGE1DARRAY;
+ (*KeywordMap)["u64image1DArray"] = U64IMAGE1DARRAY;
+ (*KeywordMap)["i64image2DArray"] = I64IMAGE2DARRAY;
+ (*KeywordMap)["u64image2DArray"] = U64IMAGE2DARRAY;
+ (*KeywordMap)["i64imageCubeArray"] = I64IMAGECUBEARRAY;
+ (*KeywordMap)["u64imageCubeArray"] = U64IMAGECUBEARRAY;
+ (*KeywordMap)["i64image2DMS"] = I64IMAGE2DMS;
+ (*KeywordMap)["u64image2DMS"] = U64IMAGE2DMS;
+ (*KeywordMap)["i64image2DMSArray"] = I64IMAGE2DMSARRAY;
+ (*KeywordMap)["u64image2DMSArray"] = U64IMAGE2DMSARRAY;
(*KeywordMap)["double"] = DOUBLE;
(*KeywordMap)["dvec2"] = DVEC2;
(*KeywordMap)["dvec3"] = DVEC3;
(*KeywordMap)["f64mat4x2"] = F64MAT4X2;
(*KeywordMap)["f64mat4x3"] = F64MAT4X3;
(*KeywordMap)["f64mat4x4"] = F64MAT4X4;
-#endif
+
+ // GL_EXT_spirv_intrinsics
+ (*KeywordMap)["spirv_instruction"] = SPIRV_INSTRUCTION;
+ (*KeywordMap)["spirv_execution_mode"] = SPIRV_EXECUTION_MODE;
+ (*KeywordMap)["spirv_execution_mode_id"] = SPIRV_EXECUTION_MODE_ID;
+ (*KeywordMap)["spirv_decorate"] = SPIRV_DECORATE;
+ (*KeywordMap)["spirv_decorate_id"] = SPIRV_DECORATE_ID;
+ (*KeywordMap)["spirv_decorate_string"] = SPIRV_DECORATE_STRING;
+ (*KeywordMap)["spirv_type"] = SPIRV_TYPE;
+ (*KeywordMap)["spirv_storage_class"] = SPIRV_STORAGE_CLASS;
+ (*KeywordMap)["spirv_by_reference"] = SPIRV_BY_REFERENCE;
+ (*KeywordMap)["spirv_literal"] = SPIRV_LITERAL;
#endif
(*KeywordMap)["sampler2D"] = SAMPLER2D;
(*KeywordMap)["samplerCubeArrayShadow"] = SAMPLERCUBEARRAYSHADOW;
(*KeywordMap)["isamplerCubeArray"] = ISAMPLERCUBEARRAY;
(*KeywordMap)["usamplerCubeArray"] = USAMPLERCUBEARRAY;
-#ifndef GLSLANG_ANGLE
- (*KeywordMap)["sampler1D"] = SAMPLER1D;
- (*KeywordMap)["isampler1D"] = ISAMPLER1D;
- (*KeywordMap)["usampler1D"] = USAMPLER1D;
- (*KeywordMap)["sampler1DArray"] = SAMPLER1DARRAY;
+ (*KeywordMap)["sampler1DArrayShadow"] = SAMPLER1DARRAYSHADOW;
(*KeywordMap)["isampler1DArray"] = ISAMPLER1DARRAY;
+ (*KeywordMap)["usampler1D"] = USAMPLER1D;
+ (*KeywordMap)["isampler1D"] = ISAMPLER1D;
(*KeywordMap)["usampler1DArray"] = USAMPLER1DARRAY;
- (*KeywordMap)["sampler1DShadow"] = SAMPLER1DSHADOW;
- (*KeywordMap)["sampler1DArrayShadow"] = SAMPLER1DARRAYSHADOW;
-#endif
(*KeywordMap)["samplerBuffer"] = SAMPLERBUFFER;
(*KeywordMap)["isampler2DRect"] = ISAMPLER2DRECT;
(*KeywordMap)["usampler2DRect"] = USAMPLER2DRECT;
(*KeywordMap)["sampler2DMSArray"] = SAMPLER2DMSARRAY;
(*KeywordMap)["isampler2DMSArray"] = ISAMPLER2DMSARRAY;
(*KeywordMap)["usampler2DMSArray"] = USAMPLER2DMSARRAY;
+ (*KeywordMap)["sampler1D"] = SAMPLER1D;
+ (*KeywordMap)["sampler1DShadow"] = SAMPLER1DSHADOW;
(*KeywordMap)["sampler2DRect"] = SAMPLER2DRECT;
(*KeywordMap)["sampler2DRectShadow"] = SAMPLER2DRECTSHADOW;
+ (*KeywordMap)["sampler1DArray"] = SAMPLER1DARRAY;
(*KeywordMap)["samplerExternalOES"] = SAMPLEREXTERNALOES; // GL_OES_EGL_image_external
(*KeywordMap)["__samplerExternal2DY2YEXT"] = SAMPLEREXTERNAL2DY2YEXT; // GL_EXT_YUV_target
-#ifndef GLSLANG_ANGLE
- (*KeywordMap)["texture1D"] = TEXTURE1D;
- (*KeywordMap)["itexture1D"] = ITEXTURE1D;
- (*KeywordMap)["utexture1D"] = UTEXTURE1D;
- (*KeywordMap)["texture1DArray"] = TEXTURE1DARRAY;
(*KeywordMap)["itexture1DArray"] = ITEXTURE1DARRAY;
+ (*KeywordMap)["utexture1D"] = UTEXTURE1D;
+ (*KeywordMap)["itexture1D"] = ITEXTURE1D;
(*KeywordMap)["utexture1DArray"] = UTEXTURE1DARRAY;
-#endif
(*KeywordMap)["textureBuffer"] = TEXTUREBUFFER;
(*KeywordMap)["itexture2DRect"] = ITEXTURE2DRECT;
(*KeywordMap)["utexture2DRect"] = UTEXTURE2DRECT;
(*KeywordMap)["texture2DMSArray"] = TEXTURE2DMSARRAY;
(*KeywordMap)["itexture2DMSArray"] = ITEXTURE2DMSARRAY;
(*KeywordMap)["utexture2DMSArray"] = UTEXTURE2DMSARRAY;
+ (*KeywordMap)["texture1D"] = TEXTURE1D;
(*KeywordMap)["texture2DRect"] = TEXTURE2DRECT;
+ (*KeywordMap)["texture1DArray"] = TEXTURE1DARRAY;
-#ifndef GLSLANG_ANGLE
(*KeywordMap)["subpassInput"] = SUBPASSINPUT;
(*KeywordMap)["subpassInputMS"] = SUBPASSINPUTMS;
(*KeywordMap)["isubpassInput"] = ISUBPASSINPUT;
(*KeywordMap)["f16subpassInputMS"] = F16SUBPASSINPUTMS;
(*KeywordMap)["__explicitInterpAMD"] = EXPLICITINTERPAMD;
(*KeywordMap)["pervertexNV"] = PERVERTEXNV;
+ (*KeywordMap)["pervertexEXT"] = PERVERTEXEXT;
+ (*KeywordMap)["precise"] = PRECISE;
(*KeywordMap)["rayPayloadNV"] = PAYLOADNV;
(*KeywordMap)["rayPayloadEXT"] = PAYLOADEXT;
(*KeywordMap)["perprimitiveNV"] = PERPRIMITIVENV;
(*KeywordMap)["perviewNV"] = PERVIEWNV;
(*KeywordMap)["taskNV"] = PERTASKNV;
+ (*KeywordMap)["perprimitiveEXT"] = PERPRIMITIVEEXT;
+ (*KeywordMap)["taskPayloadSharedEXT"] = TASKPAYLOADWORKGROUPEXT;
(*KeywordMap)["fcoopmatNV"] = FCOOPMATNV;
(*KeywordMap)["icoopmatNV"] = ICOOPMATNV;
(*KeywordMap)["ucoopmatNV"] = UCOOPMATNV;
-#endif
+
+ (*KeywordMap)["hitObjectNV"] = HITOBJECTNV;
+ (*KeywordMap)["hitObjectAttributeNV"] = HITOBJECTATTRNV;
ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
case PpAtomConstInt: parserToken->sType.lex.i = ppToken.ival; return INTCONSTANT;
case PpAtomConstUint: parserToken->sType.lex.i = ppToken.ival; return UINTCONSTANT;
case PpAtomConstFloat: parserToken->sType.lex.d = ppToken.dval; return FLOATCONSTANT;
-#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE)
+#ifndef GLSLANG_WEB
case PpAtomConstInt16: parserToken->sType.lex.i = ppToken.ival; return INT16CONSTANT;
case PpAtomConstUint16: parserToken->sType.lex.i = ppToken.ival; return UINT16CONSTANT;
case PpAtomConstInt64: parserToken->sType.lex.i64 = ppToken.i64val; return INT64CONSTANT;
case CASE:
return keyword;
+ case TERMINATE_INVOCATION:
+ if (!parseContext.extensionTurnedOn(E_GL_EXT_terminate_invocation))
+ return identifierOrType();
+ return keyword;
+
+ case TERMINATE_RAY:
+ case IGNORE_INTERSECTION:
+ if (!parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing))
+ return identifierOrType();
+ return keyword;
+
case BUFFER:
afterBuffer = true;
if ((parseContext.isEsProfile() && parseContext.version < 310) ||
return keyword;
case PACKED:
if ((parseContext.isEsProfile() && parseContext.version < 300) ||
- (!parseContext.isEsProfile() && parseContext.version < 330))
+ (!parseContext.isEsProfile() && parseContext.version < 140))
return reservedWord();
return identifierOrType();
return keyword;
return es30ReservedFromGLSL(130);
- case ATTRIBUTE:
- case VARYING:
- if (parseContext.isEsProfile() && parseContext.version >= 300)
- reservedWord();
- return keyword;
-#ifndef GLSLANG_ANGLE
case NONUNIFORM:
if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
return keyword;
else
return identifierOrType();
+ case ATTRIBUTE:
+ case VARYING:
+ if (parseContext.isEsProfile() && parseContext.version >= 300)
+ reservedWord();
+ return keyword;
case PAYLOADNV:
case PAYLOADINNV:
case HITATTRNV:
return keyword;
return es30ReservedFromGLSL(420);
- case SUBROUTINE:
- return es30ReservedFromGLSL(400);
-
+ case COHERENT:
case DEVICECOHERENT:
case QUEUEFAMILYCOHERENT:
case WORKGROUPCOHERENT:
case SUBGROUPCOHERENT:
case SHADERCALLCOHERENT:
case NONPRIVATE:
-#endif
- case COHERENT:
case RESTRICT:
case READONLY:
case WRITEONLY:
parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation))
return keyword;
return es30ReservedFromGLSL(400);
+
+ case SUBROUTINE:
+ return es30ReservedFromGLSL(400);
#endif
case SHARED:
if ((parseContext.isEsProfile() && parseContext.version < 300) ||
return matNxM();
#ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
case DMAT2:
case DMAT3:
case DMAT4:
case IMAGE1DARRAY:
case IIMAGE1DARRAY:
case UIMAGE1DARRAY:
-#endif
case IMAGE2DRECT:
case IIMAGE2DRECT:
case UIMAGE2DRECT:
afterType = true;
return firstGenerationImage(false);
+ case I64IMAGE1D:
+ case U64IMAGE1D:
+ case I64IMAGE1DARRAY:
+ case U64IMAGE1DARRAY:
+ case I64IMAGE2DRECT:
+ case U64IMAGE2DRECT:
+ afterType = true;
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
+ return firstGenerationImage(false);
+ }
+ return identifierOrType();
+
case IMAGEBUFFER:
case IIMAGEBUFFER:
case UIMAGEBUFFER:
parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
return keyword;
return firstGenerationImage(false);
+
+ case I64IMAGEBUFFER:
+ case U64IMAGEBUFFER:
+ afterType = true;
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
+ if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
+ parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer))
+ return keyword;
+ return firstGenerationImage(false);
+ }
+ return identifierOrType();
case IMAGE2D:
case IIMAGE2D:
afterType = true;
return firstGenerationImage(true);
+ case I64IMAGE2D:
+ case U64IMAGE2D:
+ case I64IMAGE3D:
+ case U64IMAGE3D:
+ case I64IMAGECUBE:
+ case U64IMAGECUBE:
+ case I64IMAGE2DARRAY:
+ case U64IMAGE2DARRAY:
+ afterType = true;
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64))
+ return firstGenerationImage(true);
+ return identifierOrType();
+
case IMAGECUBEARRAY:
case IIMAGECUBEARRAY:
case UIMAGECUBEARRAY:
parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
return keyword;
return secondGenerationImage();
+
+ case I64IMAGECUBEARRAY:
+ case U64IMAGECUBEARRAY:
+ afterType = true;
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
+ if ((parseContext.isEsProfile() && parseContext.version >= 320) ||
+ parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array))
+ return keyword;
+ return secondGenerationImage();
+ }
+ return identifierOrType();
case IMAGE2DMS:
case IIMAGE2DMS:
case UIMAGE2DMSARRAY:
afterType = true;
return secondGenerationImage();
+
+ case I64IMAGE2DMS:
+ case U64IMAGE2DMS:
+ case I64IMAGE2DMSARRAY:
+ case U64IMAGE2DMSARRAY:
+ afterType = true;
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) {
+ return secondGenerationImage();
+ }
+ return identifierOrType();
-#ifndef GLSLANG_ANGLE
case DOUBLE:
case DVEC2:
case DVEC3:
return keyword;
return identifierOrType();
-#endif
case SAMPLERCUBEARRAY:
case SAMPLERCUBEARRAYSHADOW:
return identifierOrType();
#ifndef GLSLANG_WEB
-#ifndef GLSLANG_ANGLE
case ISAMPLER1D:
case ISAMPLER1DARRAY:
case SAMPLER1DARRAYSHADOW:
case USAMPLER1DARRAY:
afterType = true;
return es30ReservedFromGLSL(130);
-
- case SAMPLER1D:
- case SAMPLER1DSHADOW:
- afterType = true;
- if (parseContext.isEsProfile())
- reservedWord();
- return keyword;
-
- case SAMPLER1DARRAY:
- afterType = true;
- if (parseContext.isEsProfile() && parseContext.version == 300)
- reservedWord();
- else if ((parseContext.isEsProfile() && parseContext.version < 300) ||
- (!parseContext.isEsProfile() && parseContext.version < 130))
- return identifierOrType();
- return keyword;
-#endif
case ISAMPLER2DRECT:
case USAMPLER2DRECT:
afterType = true;
return keyword;
return es30ReservedFromGLSL(150);
+ case SAMPLER1D:
+ case SAMPLER1DSHADOW:
+ afterType = true;
+ if (parseContext.isEsProfile())
+ reservedWord();
+ return keyword;
+
case SAMPLER2DRECT:
case SAMPLER2DRECTSHADOW:
afterType = true;
}
return keyword;
+ case SAMPLER1DARRAY:
+ afterType = true;
+ if (parseContext.isEsProfile() && parseContext.version == 300)
+ reservedWord();
+ else if ((parseContext.isEsProfile() && parseContext.version < 300) ||
+ (!parseContext.isEsProfile() && parseContext.version < 130))
+ return identifierOrType();
+ return keyword;
+
case SAMPLEREXTERNALOES:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
return keyword;
return identifierOrType();
-#ifndef GLSLANG_ANGLE
- case TEXTURE1D:
- case ITEXTURE1D:
- case UTEXTURE1D:
- case TEXTURE1DARRAY:
case ITEXTURE1DARRAY:
+ case UTEXTURE1D:
+ case ITEXTURE1D:
case UTEXTURE1DARRAY:
-#endif
case TEXTUREBUFFER:
case ITEXTURE2DRECT:
case UTEXTURE2DRECT:
case TEXTURE2DMSARRAY:
case ITEXTURE2DMSARRAY:
case UTEXTURE2DMSARRAY:
+ case TEXTURE1D:
case TEXTURE2DRECT:
+ case TEXTURE1DARRAY:
if (parseContext.spvVersion.vulkan > 0)
return keyword;
else
return identifierOrType();
- case PRECISE:
- if ((parseContext.isEsProfile() &&
- (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) ||
- (!parseContext.isEsProfile() && parseContext.version >= 400))
- return keyword;
- if (parseContext.isEsProfile() && parseContext.version == 310) {
- reservedWord();
- return keyword;
- }
- return identifierOrType();
-
-#ifndef GLSLANG_ANGLE
case SUBPASSINPUT:
case SUBPASSINPUTMS:
case ISUBPASSINPUT:
return keyword;
return identifierOrType();
+ case PERVERTEXEXT:
+ if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
+ parseContext.extensionTurnedOn(E_GL_EXT_fragment_shader_barycentric))
+ return keyword;
+ return identifierOrType();
+
+ case PRECISE:
+ if ((parseContext.isEsProfile() &&
+ (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) ||
+ (!parseContext.isEsProfile() && parseContext.version >= 400))
+ return keyword;
+ if (parseContext.isEsProfile() && parseContext.version == 310) {
+ reservedWord();
+ return keyword;
+ }
+ return identifierOrType();
+
case PERPRIMITIVENV:
case PERVIEWNV:
case PERTASKNV:
- if ((!parseContext.isEsProfile() && parseContext.version >= 450) ||
- (parseContext.isEsProfile() && parseContext.version >= 320) ||
+ if (parseContext.symbolTable.atBuiltInLevel() ||
parseContext.extensionTurnedOn(E_GL_NV_mesh_shader))
return keyword;
return identifierOrType();
+ case PERPRIMITIVEEXT:
+ case TASKPAYLOADWORKGROUPEXT:
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_EXT_mesh_shader))
+ return keyword;
+ return identifierOrType();
+
case FCOOPMATNV:
afterType = true;
if (parseContext.symbolTable.atBuiltInLevel() ||
return keyword;
else
return identifierOrType();
-#endif
+
+ case SPIRV_INSTRUCTION:
+ case SPIRV_EXECUTION_MODE:
+ case SPIRV_EXECUTION_MODE_ID:
+ case SPIRV_DECORATE:
+ case SPIRV_DECORATE_ID:
+ case SPIRV_DECORATE_STRING:
+ case SPIRV_TYPE:
+ case SPIRV_STORAGE_CLASS:
+ case SPIRV_BY_REFERENCE:
+ case SPIRV_LITERAL:
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ parseContext.extensionTurnedOn(E_GL_EXT_spirv_intrinsics))
+ return keyword;
+ return identifierOrType();
+
+ case HITOBJECTNV:
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ (!parseContext.isEsProfile() && parseContext.version >= 460
+ && parseContext.extensionTurnedOn(E_GL_NV_shader_invocation_reorder)))
+ return keyword;
+ return identifierOrType();
+
+ case HITOBJECTATTRNV:
+ if (parseContext.symbolTable.atBuiltInLevel() ||
+ (!parseContext.isEsProfile() && parseContext.version >= 460
+ && parseContext.extensionTurnedOn(E_GL_NV_shader_invocation_reorder)))
+ return keyword;
+ return identifierOrType();
#endif
default: