GL_EXT_mesh_shader/SPV_EXT_mesh_shader implementation
authorPankaj Mistry <pmistry@nvidia.com>
Wed, 25 Aug 2021 20:41:32 +0000 (13:41 -0700)
committerPankaj Mistry <pmistry@nvidia.com>
Fri, 2 Sep 2022 01:02:21 +0000 (18:02 -0700)
Added following updates to GL_EXT_mesh_shader implementation:

1. Added SPIRV and GLSL test cases
2. Added checks to ensure NV and EXT mesh shader builtins cannot be used interchangeably.
3. Updated the language name by removing the postfix "NV" to MeshShader and TaskShader.
4. Added checks for grammar checking to comply with the spec.

5. Added gl_NumWorkGroups builtin to Mesh shader
6. Fixed data type of gl_PrimitiveLineIndicesEXT and gl_PrimitiveTriangleIndicesEXT
7. Added new constants to the resources table
8. Updates to handle new storage qualifier "taskPayloadSharedEXT"
9. Updated test cases by replacing "taskEXT" with storage qualifier "taskPayloadSharedEXT"

Addressed  Review comments
1. Fixed instruction description used by glslang disassembly.
2. Updated OpEmitMeshTasksEXT as per spec update
3. Fixed implementation that errors out if there are more then one taskPayloadSharedEXT varjables.
4. Fixed miscellaneous error logs and removed unwanted code.

SPIRV 1.6 related build failure fixes
- Update SPIRV header to 1.6
- Fix conflict wiht SPIRV 1.6 change, where localSizeId is used for execution mode for mesh/task shaders

Enable SPIRV generated for EXT_mesh_shader to be version 1.4

GL_EXT_mesh_shader: Add checks for atomic support and corresponding test cases

52 files changed:
SPIRV/CInterface/spirv_c_interface.cpp
SPIRV/GLSL.ext.EXT.h
SPIRV/GlslangToSpv.cpp
SPIRV/doc.cpp
SPIRV/spirv.hpp
StandAlone/ResourceLimits.cpp
StandAlone/StandAlone.cpp
Test/baseResults/glsl.460.subgroupEXT.mesh.out [new file with mode: 0644]
Test/baseResults/glsl.460.subgroupEXT.task.out [new file with mode: 0644]
Test/baseResults/spv.460.subgroupEXT.mesh.out [new file with mode: 0644]
Test/baseResults/spv.460.subgroupEXT.task.out [new file with mode: 0644]
Test/baseResults/spv.atomiAddEXT.error.mesh.out [new file with mode: 0644]
Test/baseResults/spv.atomiAddEXT.task.out [new file with mode: 0644]
Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out [new file with mode: 0644]
Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out [new file with mode: 0644]
Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out [new file with mode: 0644]
Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out [new file with mode: 0644]
Test/baseResults/spv.ext.meshTaskShader.task.out [new file with mode: 0644]
Test/baseResults/test.conf
Test/spv.460.subgroupEXT.mesh [new file with mode: 0644]
Test/spv.460.subgroupEXT.task [new file with mode: 0644]
Test/spv.atomiAddEXT.error.mesh [new file with mode: 0644]
Test/spv.atomiAddEXT.task [new file with mode: 0644]
Test/spv.ext.meshShaderBuiltins.mesh [new file with mode: 0644]
Test/spv.ext.meshShaderRedeclBuiltins.mesh [new file with mode: 0644]
Test/spv.ext.meshShaderTaskMem.mesh [new file with mode: 0644]
Test/spv.ext.meshShaderUserDefined.mesh [new file with mode: 0644]
Test/spv.ext.meshTaskShader.task [new file with mode: 0644]
glslang/CInterface/glslang_c_interface.cpp
glslang/Include/BaseTypes.h
glslang/Include/ResourceLimits.h
glslang/Include/Types.h
glslang/Include/glslang_c_interface.h
glslang/Include/glslang_c_shader_types.h
glslang/Include/intermediate.h
glslang/MachineIndependent/Initialize.cpp
glslang/MachineIndependent/ParseHelper.cpp
glslang/MachineIndependent/Scan.cpp
glslang/MachineIndependent/ShaderLang.cpp
glslang/MachineIndependent/Versions.cpp
glslang/MachineIndependent/Versions.h
glslang/MachineIndependent/glslang.m4
glslang/MachineIndependent/glslang.y
glslang/MachineIndependent/glslang_tab.cpp
glslang/MachineIndependent/glslang_tab.cpp.h
glslang/MachineIndependent/intermOut.cpp
glslang/MachineIndependent/linkValidate.cpp
glslang/MachineIndependent/localintermediate.h
glslang/Public/ShaderLang.h
gtests/Spv.FromFile.cpp
gtests/TestFixture.cpp
known_good.json

index d9312bb..61e27e1 100644 (file)
@@ -71,10 +71,10 @@ static EShLanguage c_shader_stage(glslang_stage_t stage)
         return EShLangMiss;
     case GLSLANG_STAGE_CALLABLE_NV:
         return EShLangCallable;
-    case GLSLANG_STAGE_TASK_NV:
-        return EShLangTaskNV;
-    case GLSLANG_STAGE_MESH_NV:
-        return EShLangMeshNV;
+    case GLSLANG_STAGE_TASK:
+        return EShLangTask;
+    case GLSLANG_STAGE_MESH:
+        return EShLangMesh;
     default:
         break;
     }
index f48f130..a247b4c 100644 (file)
@@ -39,5 +39,6 @@ static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_ato
 static const char* const E_SPV_EXT_shader_atomic_float16_add = "SPV_EXT_shader_atomic_float16_add";
 static const char* const E_SPV_EXT_shader_atomic_float_min_max = "SPV_EXT_shader_atomic_float_min_max";
 static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64";
+static const char* const E_SPV_EXT_mesh_shader = "SPV_EXT_mesh_shader";
 
 #endif  // #ifndef GLSLextEXT_H
index bff57bc..bcfc6e8 100644 (file)
@@ -280,6 +280,9 @@ protected:
 
     // Used later for generating OpTraceKHR/OpExecuteCallableKHR
     std::unordered_map<unsigned int, glslang::TIntermSymbol *> locationToSymbol[2];
+
+    // Used by Task shader while generating opearnds for OpEmitMeshTasksEXT
+    spv::Id taskPayloadID;
 };
 
 //
@@ -315,7 +318,7 @@ spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile
 }
 
 // Translate glslang language (stage) to SPIR-V execution model.
-spv::ExecutionModel TranslateExecutionModel(EShLanguage stage)
+spv::ExecutionModel TranslateExecutionModel(EShLanguage stage, bool isMeshShaderEXT = false)
 {
     switch (stage) {
     case EShLangVertex:           return spv::ExecutionModelVertex;
@@ -331,8 +334,8 @@ spv::ExecutionModel TranslateExecutionModel(EShLanguage stage)
     case EShLangClosestHit:       return spv::ExecutionModelClosestHitKHR;
     case EShLangMiss:             return spv::ExecutionModelMissKHR;
     case EShLangCallable:         return spv::ExecutionModelCallableKHR;
-    case EShLangTaskNV:           return spv::ExecutionModelTaskNV;
-    case EShLangMeshNV:           return spv::ExecutionModelMeshNV;
+    case EShLangTask:             return (isMeshShaderEXT)? spv::ExecutionModelTaskEXT : spv::ExecutionModelTaskNV;
+    case EShLangMesh:             return (isMeshShaderEXT)? spv::ExecutionModelMeshEXT: spv::ExecutionModelMeshNV;
 #endif
     default:
         assert(0);
@@ -763,7 +766,7 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
         return spv::BuiltInSampleMask;
 
     case glslang::EbvLayer:
-        if (glslangIntermediate->getStage() == EShLangMeshNV) {
+        if (glslangIntermediate->getStage() == EShLangMesh) {
             return spv::BuiltInLayer;
         }
         if (glslangIntermediate->getStage() == EShLangGeometry ||
@@ -1078,6 +1081,16 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI
     case glslang::EbvMeshViewIndicesNV:
         return spv::BuiltInMeshViewIndicesNV;
 
+    // SPV_EXT_mesh_shader
+    case glslang::EbvPrimitivePointIndicesEXT:
+        return spv::BuiltInPrimitivePointIndicesEXT;
+    case glslang::EbvPrimitiveLineIndicesEXT:
+        return spv::BuiltInPrimitiveLineIndicesEXT;
+    case glslang::EbvPrimitiveTriangleIndicesEXT:
+        return spv::BuiltInPrimitiveTriangleIndicesEXT;
+    case glslang::EbvCullPrimitiveEXT:
+        return spv::BuiltInCullPrimitiveEXT;
+
     // sm builtins
     case glslang::EbvWarpsPerSM:
         builder.addExtension(spv::E_SPV_NV_shader_sm_builtins);
@@ -1321,6 +1334,7 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
     case glslang::EvqHitAttr:        return spv::StorageClassHitAttributeKHR;
     case glslang::EvqCallableData:   return spv::StorageClassCallableDataKHR;
     case glslang::EvqCallableDataIn: return spv::StorageClassIncomingCallableDataKHR;
+    case glslang::EvqtaskPayloadSharedEXT : return spv::StorageClassTaskPayloadWorkgroupEXT;
     case glslang::EvqSpirvStorageClass: return static_cast<spv::StorageClass>(type.getQualifier().spirvStorageClass);
 #endif
     default:
@@ -1466,6 +1480,8 @@ void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& pa
         child.perViewNV = true;
     if (parent.perTaskNV)
         child.perTaskNV = true;
+    if (parent.storage == glslang::EvqtaskPayloadSharedEXT)
+        child.storage = glslang::EvqtaskPayloadSharedEXT;
     if (parent.patch)
         child.patch = true;
     if (parent.sample)
@@ -1525,9 +1541,12 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
         inEntryPoint(false), entryPointTerminated(false), linkageOnly(false),
         glslangIntermediate(glslangIntermediate),
         nanMinMaxClamp(glslangIntermediate->getNanMinMaxClamp()),
-        nonSemanticDebugPrintf(0)
+        nonSemanticDebugPrintf(0),
+        taskPayloadID(0)
 {
-    spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage());
+    bool isMeshShaderExt = (glslangIntermediate->getRequestedExtensions().find(glslang::E_GL_EXT_mesh_shader) !=
+                            glslangIntermediate->getRequestedExtensions().end());
+    spv::ExecutionModel executionModel = TranslateExecutionModel(glslangIntermediate->getStage(), isMeshShaderExt);
 
     builder.clearAccessChain();
     builder.setSource(TranslateSourceLanguage(glslangIntermediate->getSource(), glslangIntermediate->getProfile()),
@@ -1803,7 +1822,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
     case EShLangAnyHit:
     case EShLangClosestHit:
     case EShLangMiss:
-    case EShLangCallable: 
+    case EShLangCallable:
     {
         auto& extensions = glslangIntermediate->getRequestedExtensions();
         if (extensions.find("GL_NV_ray_tracing") == extensions.end()) {
@@ -1823,10 +1842,15 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
        }
         break;
     }
-    case EShLangTaskNV:
-    case EShLangMeshNV:
-        builder.addCapability(spv::CapabilityMeshShadingNV);
-        builder.addExtension(spv::E_SPV_NV_mesh_shader);
+    case EShLangTask:
+    case EShLangMesh:
+        if(isMeshShaderExt) {
+            builder.addCapability(spv::CapabilityMeshShadingEXT);
+            builder.addExtension(spv::E_SPV_EXT_mesh_shader);
+        } else {
+            builder.addCapability(spv::CapabilityMeshShadingNV);
+            builder.addExtension(spv::E_SPV_NV_mesh_shader);
+        }
         if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) {
             std::vector<spv::Id> dimConstId;
             for (int dim = 0; dim < 3; ++dim) {
@@ -1843,7 +1867,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
                                                                                glslangIntermediate->getLocalSize(1),
                                                                                glslangIntermediate->getLocalSize(2));
         }
-        if (glslangIntermediate->getStage() == EShLangMeshNV) {
+        if (glslangIntermediate->getStage() == EShLangMesh) {
             builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices,
                 glslangIntermediate->getVertices());
             builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputPrimitivesNV,
@@ -1962,7 +1986,6 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
 
     if (symbol->getType().getQualifier().isSpecConstant())
         spec_constant_op_mode_setter.turnOnSpecConstantOpMode();
-
 #ifdef ENABLE_HLSL
     // Skip symbol handling if it is string-typed
     if (symbol->getBasicType() == glslang::EbtString)
@@ -1973,6 +1996,9 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
     // Formal function parameters were mapped during makeFunctions().
     spv::Id id = getSymbolId(symbol);
 
+    if (symbol->getType().getQualifier().isTaskPayload())
+        taskPayloadID = id; // cache the taskPayloadID to be used it as operand for OpEmitMeshTasksEXT
+
     if (builder.isPointer(id)) {
         if (!symbol->getType().getQualifier().isParamInput() &&
             !symbol->getType().getQualifier().isParamOutput()) {
@@ -2516,7 +2542,7 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI
         operandNode = node->getOperand()->getAsBinaryNode()->getLeft();
     else
         operandNode = node->getOperand();
-    
+
     operandNode->traverse(this);
 
     spv::Id operand = spv::NoResult;
@@ -3111,6 +3137,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
     case glslang::EOpExecuteCallableNV:
     case glslang::EOpExecuteCallableKHR:
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
+    case glslang::EOpEmitMeshTasksEXT:
+    case glslang::EOpSetMeshOutputsEXT:
         noReturnValue = true;
         break;
     case glslang::EOpRayQueryInitialize:
@@ -3505,7 +3533,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
             break;
         case 1:
             {
-                OpDecorations decorations = { precision, 
+                OpDecorations decorations = { precision,
                                               TranslateNoContractionDecoration(node->getType().getQualifier()),
                                               TranslateNonUniformDecoration(node->getType().getQualifier()) };
                 result = createUnaryOperation(
@@ -3627,7 +3655,7 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang
             // smear condition to vector, if necessary (AST is always scalar)
             // Before 1.4, smear like for mix(), starting with 1.4, keep it scalar
             if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_4 && builder.isVector(trueValue)) {
-                condition = builder.smearScalar(spv::NoPrecision, condition, 
+                condition = builder.smearScalar(spv::NoPrecision, condition,
                                                 builder.makeVectorType(builder.makeBoolType(),
                                                                        builder.getNumComponents(trueValue)));
             }
@@ -4206,7 +4234,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
                 spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler),
                                                 sampler.isShadow(), sampler.isArrayed(), sampler.isMultiSample(),
                                                 sampler.isImageClass() ? 2 : 1, TranslateImageFormat(type));
-                if (sampler.isCombined() && 
+                if (sampler.isCombined() &&
                     (!sampler.isBuffer() || glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_6)) {
                     // Already has both image and sampler, make the combined type. Only combine sampler to
                     // buffer if before SPIR-V 1.6.
@@ -4396,7 +4424,7 @@ bool TGlslangToSpvTraverser::filterMember(const glslang::TType& member)
         extensions.find("GL_NV_stereo_view_rendering") == extensions.end())
         return true;
 
-    if (glslangIntermediate->getStage() != EShLangMeshNV) {
+    if (glslangIntermediate->getStage() != EShLangMesh) {
         if (member.getFieldName() == "gl_ViewportMask" &&
             extensions.find("GL_NV_viewport_array2") == extensions.end())
             return true;
@@ -5831,10 +5859,10 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
         assert(builder.isStructType(resultStructType));
 
         //resType (SPIR-V type) contains 6 elements:
-        //Member 0 must be a Boolean type scalar(LOD), 
-        //Member 1 must be a vector of integer type, whose Signedness operand is 0(anchor),  
-        //Member 2 must be a vector of integer type, whose Signedness operand is 0(offset), 
-        //Member 3 must be a vector of integer type, whose Signedness operand is 0(mask), 
+        //Member 0 must be a Boolean type scalar(LOD),
+        //Member 1 must be a vector of integer type, whose Signedness operand is 0(anchor),
+        //Member 2 must be a vector of integer type, whose Signedness operand is 0(offset),
+        //Member 3 must be a vector of integer type, whose Signedness operand is 0(mask),
         //Member 4 must be a scalar of integer type, whose Signedness operand is 0(lod),
         //Member 5 must be a scalar of integer type, whose Signedness operand is 0(granularity).
         std::vector<spv::Id> members;
@@ -5847,7 +5875,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
         //call ImageFootprintNV
         spv::Id res = builder.createTextureCall(precision, resType, sparse, cracked.fetch, cracked.proj,
                                                 cracked.gather, noImplicitLod, params, signExtensionMask());
-        
+
         //copy resType (SPIR-V type) to resultStructType(OpenGL type)
         for (int i = 0; i < 5; i++) {
             builder.clearAccessChain();
@@ -5900,7 +5928,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
     }
 #endif
 
-    std::vector<spv::Id> result( 1, 
+    std::vector<spv::Id> result( 1,
         builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather,
                                   noImplicitLod, params, signExtensionMask())
     );
@@ -7423,7 +7451,7 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv
     } else {
         scopeId = builder.makeUintConstant(spv::ScopeDevice);
     }
-    // semantics default to relaxed 
+    // semantics default to relaxed
     spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() &&
         glslangIntermediate->usingVulkanMemoryModel() ?
                                                     spv::MemorySemanticsVolatileMask :
@@ -8527,6 +8555,14 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv::
     case glslang::EOpWritePackedPrimitiveIndices4x8NV:
         builder.createNoResultOp(spv::OpWritePackedPrimitiveIndices4x8NV, operands);
         return 0;
+    case glslang::EOpEmitMeshTasksEXT:
+        if(taskPayloadID)
+            operands.push_back(taskPayloadID);
+        builder.createNoResultOp(spv::OpEmitMeshTasksEXT, operands);
+        return 0;
+    case glslang::EOpSetMeshOutputsEXT:
+        builder.createNoResultOp(spv::OpSetMeshOutputsEXT, operands);
+        return 0;
     case glslang::EOpCooperativeMatrixMulAdd:
         opCode = spv::OpCooperativeMatrixMulAddNV;
         break;
@@ -9011,13 +9047,21 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
 // add per-primitive, per-view. per-task decorations to a struct member (member >= 0) or an object
 void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier& qualifier)
 {
+    bool isMeshShaderExt = (glslangIntermediate->getRequestedExtensions().find(glslang::E_GL_EXT_mesh_shader) !=
+                            glslangIntermediate->getRequestedExtensions().end());
+
     if (member >= 0) {
         if (qualifier.perPrimitiveNV) {
             // Need to add capability/extension for fragment shader.
             // Mesh shader already adds this by default.
             if (glslangIntermediate->getStage() == EShLangFragment) {
-                builder.addCapability(spv::CapabilityMeshShadingNV);
-                builder.addExtension(spv::E_SPV_NV_mesh_shader);
+                if(isMeshShaderExt) {
+                    builder.addCapability(spv::CapabilityMeshShadingEXT);
+                    builder.addExtension(spv::E_SPV_EXT_mesh_shader);
+                } else {
+                    builder.addCapability(spv::CapabilityMeshShadingNV);
+                    builder.addExtension(spv::E_SPV_NV_mesh_shader);
+                }
             }
             builder.addMemberDecoration(id, (unsigned)member, spv::DecorationPerPrimitiveNV);
         }
@@ -9030,8 +9074,13 @@ void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const g
             // Need to add capability/extension for fragment shader.
             // Mesh shader already adds this by default.
             if (glslangIntermediate->getStage() == EShLangFragment) {
-                builder.addCapability(spv::CapabilityMeshShadingNV);
-                builder.addExtension(spv::E_SPV_NV_mesh_shader);
+                if(isMeshShaderExt) {
+                    builder.addCapability(spv::CapabilityMeshShadingEXT);
+                    builder.addExtension(spv::E_SPV_EXT_mesh_shader);
+                } else {
+                    builder.addCapability(spv::CapabilityMeshShadingNV);
+                    builder.addExtension(spv::E_SPV_NV_mesh_shader);
+                }
             }
             builder.addDecoration(id, spv::DecorationPerPrimitiveNV);
         }
index 9cc2654..b7fe3e7 100644 (file)
@@ -97,6 +97,8 @@ const char* ExecutionModelString(int model)
     case 6:  return "Kernel";
     case ExecutionModelTaskNV: return "TaskNV";
     case ExecutionModelMeshNV: return "MeshNV";
+    case ExecutionModelTaskEXT: return "TaskEXT";
+    case ExecutionModelMeshEXT: return "MeshEXT";
 
     default: return "Bad";
 
@@ -242,7 +244,7 @@ const char* StorageClassString(int StorageClass)
     case StorageClassIncomingCallableDataKHR:  return "IncomingCallableDataKHR";
 
     case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT";
-
+    case StorageClassTaskPayloadWorkgroupEXT:  return "TaskPayloadWorkgroupEXT";
     default: return "Bad";
     }
 }
@@ -433,6 +435,10 @@ const char* BuiltInString(int builtIn)
     case BuiltInWarpIDNV:               return "WarpIDNV";
     case BuiltInSMIDNV:                 return "SMIDNV";
     case BuiltInCurrentRayTimeNV:       return "CurrentRayTimeNV";
+    case BuiltInPrimitivePointIndicesEXT:        return "PrimitivePointIndicesEXT";
+    case BuiltInPrimitiveLineIndicesEXT:         return "PrimitiveLineIndicesEXT";
+    case BuiltInPrimitiveTriangleIndicesEXT:     return "PrimitiveTriangleIndicesEXT";
+    case BuiltInCullPrimitiveEXT:                return "CullPrimitiveEXT";
 
     default: return "Bad";
     }
@@ -940,6 +946,7 @@ const char* CapabilityString(int info)
     case CapabilityFragmentBarycentricKHR:          return "FragmentBarycentricKHR";
     case CapabilityMeshShadingNV:                   return "MeshShadingNV";
     case CapabilityImageFootprintNV:                return "ImageFootprintNV";
+    case CapabilityMeshShadingEXT:                  return "MeshShadingEXT";
 //    case CapabilityShadingRateNV:                   return "ShadingRateNV";  // superseded by FragmentDensityEXT
     case CapabilitySampleMaskOverrideCoverageNV:    return "SampleMaskOverrideCoverageNV";
     case CapabilityFragmentDensityEXT:              return "FragmentDensityEXT";
@@ -1407,6 +1414,8 @@ const char* OpcodeString(int op)
     case OpGroupNonUniformPartitionNV:       return "OpGroupNonUniformPartitionNV";
     case OpImageSampleFootprintNV:           return "OpImageSampleFootprintNV";
     case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
+    case OpEmitMeshTasksEXT:                 return "OpEmitMeshTasksEXT";
+    case OpSetMeshOutputsEXT:                return "OpSetMeshOutputsEXT";
 
     case OpTypeRayQueryKHR:                                                   return "OpTypeRayQueryKHR";
     case OpRayQueryInitializeKHR:                                             return "OpRayQueryInitializeKHR";
@@ -2981,6 +2990,17 @@ void Parameterize()
     InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'");
     InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'");
 
+    InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountX'");
+    InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountY'");
+    InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountZ'");
+    InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'Payload'");
+    InstructionDesc[OpEmitMeshTasksEXT].setResultAndType(false, false);
+
+    InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'vertexCount'");
+    InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'primitiveCount'");
+    InstructionDesc[OpSetMeshOutputsEXT].setResultAndType(false, false);
+
+
     InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'");
     InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'");
     InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'");
index 9afd8a9..0e40544 100644 (file)
@@ -1,19 +1,19 @@
 // Copyright (c) 2014-2020 The Khronos Group Inc.\r
-// \r
+//\r
 // Permission is hereby granted, free of charge, to any person obtaining a copy\r
 // of this software and/or associated documentation files (the "Materials"),\r
 // to deal in the Materials without restriction, including without limitation\r
 // the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
 // and/or sell copies of the Materials, and to permit persons to whom the\r
 // Materials are furnished to do so, subject to the following conditions:\r
-// \r
+//\r
 // The above copyright notice and this permission notice shall be included in\r
 // all copies or substantial portions of the Materials.\r
-// \r
+//\r
 // MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS\r
 // STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND\r
-// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ \r
-// \r
+// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/\r
+//\r
 // THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL\r
@@ -27,7 +27,7 @@
 \r
 // Enumeration tokens for SPIR-V, in various styles:\r
 //   C, C++, C++11, JSON, Lua, Python, C#, D\r
-// \r
+//\r
 // - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL\r
 // - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL\r
 // - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL\r
@@ -36,7 +36,7 @@
 // - C# will use enum classes in the Specification class located in the "Spv" namespace,\r
 //     e.g.: Spv.Specification.SourceLanguage.GLSL\r
 // - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL\r
-// \r
+//\r
 // Some tokens act like mask values, which can be OR'd together,\r
 // while others are mutually exclusive.  The mask-like ones have\r
 // "Mask" in their name, and a parallel enum that has the shift\r
@@ -91,6 +91,8 @@ enum ExecutionModel {
     ExecutionModelMissNV = 5317,\r
     ExecutionModelCallableKHR = 5318,\r
     ExecutionModelCallableNV = 5318,\r
+    ExecutionModelTaskEXT = 5364,\r
+    ExecutionModelMeshEXT = 5365,\r
     ExecutionModelMax = 0x7fffffff,\r
 };\r
 \r
@@ -166,10 +168,13 @@ enum ExecutionMode {
     ExecutionModeStencilRefUnchangedBackAMD = 5082,\r
     ExecutionModeStencilRefGreaterBackAMD = 5083,\r
     ExecutionModeStencilRefLessBackAMD = 5084,\r
+    ExecutionModeOutputLinesEXT = 5269,\r
     ExecutionModeOutputLinesNV = 5269,\r
+    ExecutionModeOutputPrimitivesEXT = 5270,\r
     ExecutionModeOutputPrimitivesNV = 5270,\r
     ExecutionModeDerivativeGroupQuadsNV = 5289,\r
     ExecutionModeDerivativeGroupLinearNV = 5290,\r
+    ExecutionModeOutputTrianglesEXT = 5298,\r
     ExecutionModeOutputTrianglesNV = 5298,\r
     ExecutionModePixelInterlockOrderedEXT = 5366,\r
     ExecutionModePixelInterlockUnorderedEXT = 5367,\r
@@ -218,6 +223,7 @@ enum StorageClass {
     StorageClassShaderRecordBufferNV = 5343,\r
     StorageClassPhysicalStorageBuffer = 5349,\r
     StorageClassPhysicalStorageBufferEXT = 5349,\r
+    StorageClassTaskPayloadWorkgroupEXT = 5402,\r
     StorageClassCodeSectionINTEL = 5605,\r
     StorageClassDeviceOnlyINTEL = 5936,\r
     StorageClassHostOnlyINTEL = 5937,\r
@@ -500,6 +506,7 @@ enum Decoration {
     DecorationPassthroughNV = 5250,\r
     DecorationViewportRelativeNV = 5252,\r
     DecorationSecondaryViewportRelativeNV = 5256,\r
+    DecorationPerPrimitiveEXT = 5271,\r
     DecorationPerPrimitiveNV = 5271,\r
     DecorationPerViewNV = 5272,\r
     DecorationPerTaskNV = 5273,\r
@@ -647,6 +654,10 @@ enum BuiltIn {
     BuiltInFragmentSizeNV = 5292,\r
     BuiltInFragInvocationCountEXT = 5293,\r
     BuiltInInvocationsPerPixelNV = 5293,\r
+    BuiltInPrimitivePointIndicesEXT = 5294,\r
+    BuiltInPrimitiveLineIndicesEXT = 5295,\r
+    BuiltInPrimitiveTriangleIndicesEXT = 5296,\r
+    BuiltInCullPrimitiveEXT = 5299,\r
     BuiltInLaunchIdKHR = 5319,\r
     BuiltInLaunchIdNV = 5319,\r
     BuiltInLaunchSizeKHR = 5320,\r
@@ -983,7 +994,8 @@ enum Capability {
     CapabilityFragmentFullyCoveredEXT = 5265,\r
     CapabilityMeshShadingNV = 5266,\r
     CapabilityImageFootprintNV = 5282,\r
-    CapabilityFragmentBarycentricKHR = 5284,\r
+    CapabilityMeshShadingEXT = 5283,\r
+       CapabilityFragmentBarycentricKHR = 5284,\r
     CapabilityFragmentBarycentricNV = 5284,\r
     CapabilityComputeDerivativeGroupQuadsNV = 5288,\r
     CapabilityFragmentDensityEXT = 5291,\r
@@ -1577,6 +1589,8 @@ enum Op {
     OpFragmentFetchAMD = 5012,\r
     OpReadClockKHR = 5056,\r
     OpImageSampleFootprintNV = 5283,\r
+    OpEmitMeshTasksEXT = 5294,\r
+    OpSetMeshOutputsEXT = 5295,\r
     OpGroupNonUniformPartitionNV = 5296,\r
     OpWritePackedPrimitiveIndices4x8NV = 5299,\r
     OpReportIntersectionKHR = 5334,\r
@@ -2234,6 +2248,8 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
     case OpReadClockKHR: *hasResult = true; *hasResultType = true; break;\r
     case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;\r
     case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;\r
+    case OpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break;\r
+    case OpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break;\r
     case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;\r
     case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;\r
     case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;\r
@@ -2515,4 +2531,3 @@ inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShad
 }  // end namespace spv\r
 \r
 #endif  // #ifndef spirv_HPP\r
-\r
index 7c7f4c4..1a76bf6 100644 (file)
@@ -134,6 +134,15 @@ const TBuiltInResource DefaultTBuiltInResource = {
     /* .maxTaskWorkGroupSizeY_NV = */ 1,
     /* .maxTaskWorkGroupSizeZ_NV = */ 1,
     /* .maxMeshViewCountNV = */ 4,
+    /* .maxMeshOutputVerticesEXT = */ 256,
+    /* .maxMeshOutputPrimitivesEXT = */ 256,
+    /* .maxMeshWorkGroupSizeX_EXT = */ 128,
+    /* .maxMeshWorkGroupSizeY_EXT = */ 128,
+    /* .maxMeshWorkGroupSizeZ_EXT = */ 128,
+    /* .maxTaskWorkGroupSizeX_EXT = */ 128,
+    /* .maxTaskWorkGroupSizeY_EXT = */ 128,
+    /* .maxTaskWorkGroupSizeZ_EXT = */ 128,
+    /* .maxMeshViewCountEXT = */ 4,
     /* .maxDualSourceDrawBuffersEXT = */ 1,
 
     /* .limits = */ {
@@ -244,6 +253,15 @@ std::string GetDefaultTBuiltInResourceString()
             << "MaxTaskWorkGroupSizeY_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_NV << "\n"
             << "MaxTaskWorkGroupSizeZ_NV "                  << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_NV << "\n"
             << "MaxMeshViewCountNV "                        << DefaultTBuiltInResource.maxMeshViewCountNV << "\n"
+            << "MaxMeshOutputVerticesEXT "                  << DefaultTBuiltInResource.maxMeshOutputVerticesEXT << "\n"
+            << "MaxMeshOutputPrimitivesEXT "                << DefaultTBuiltInResource.maxMeshOutputPrimitivesEXT << "\n"
+            << "MaxMeshWorkGroupSizeX_EXT "                 << DefaultTBuiltInResource.maxMeshWorkGroupSizeX_EXT << "\n"
+            << "MaxMeshWorkGroupSizeY_EXT "                 << DefaultTBuiltInResource.maxMeshWorkGroupSizeY_EXT << "\n"
+            << "MaxMeshWorkGroupSizeZ_EXT "                 << DefaultTBuiltInResource.maxMeshWorkGroupSizeZ_EXT << "\n"
+            << "MaxTaskWorkGroupSizeX_EXT "                 << DefaultTBuiltInResource.maxTaskWorkGroupSizeX_EXT << "\n"
+            << "MaxTaskWorkGroupSizeY_EXT "                 << DefaultTBuiltInResource.maxTaskWorkGroupSizeY_EXT << "\n"
+            << "MaxTaskWorkGroupSizeZ_EXT "                 << DefaultTBuiltInResource.maxTaskWorkGroupSizeZ_EXT << "\n"
+            << "MaxMeshViewCountEXT "                       << DefaultTBuiltInResource.maxMeshViewCountEXT << "\n"
             << "MaxDualSourceDrawBuffersEXT "               << DefaultTBuiltInResource.maxDualSourceDrawBuffersEXT << "\n"
             << "nonInductiveForLoops "                      << DefaultTBuiltInResource.limits.nonInductiveForLoops << "\n"
             << "whileLoops "                                << DefaultTBuiltInResource.limits.whileLoops << "\n"
@@ -469,6 +487,24 @@ void DecodeResourceLimits(TBuiltInResource* resources, char* config)
             resources->maxTaskWorkGroupSizeZ_NV = value;
         else if (tokenStr == "MaxMeshViewCountNV")
             resources->maxMeshViewCountNV = value;
+        else if (tokenStr == "MaxMeshOutputVerticesEXT")
+            resources->maxMeshOutputVerticesEXT = value;
+        else if (tokenStr == "MaxMeshOutputPrimitivesEXT")
+            resources->maxMeshOutputPrimitivesEXT = value;
+        else if (tokenStr == "MaxMeshWorkGroupSizeX_EXT")
+            resources->maxMeshWorkGroupSizeX_EXT = value;
+        else if (tokenStr == "MaxMeshWorkGroupSizeY_EXT")
+            resources->maxMeshWorkGroupSizeY_EXT = value;
+        else if (tokenStr == "MaxMeshWorkGroupSizeZ_EXT")
+            resources->maxMeshWorkGroupSizeZ_EXT = value;
+        else if (tokenStr == "MaxTaskWorkGroupSizeX_EXT")
+            resources->maxTaskWorkGroupSizeX_EXT = value;
+        else if (tokenStr == "MaxTaskWorkGroupSizeY_EXT")
+            resources->maxTaskWorkGroupSizeY_EXT = value;
+        else if (tokenStr == "MaxTaskWorkGroupSizeZ_EXT")
+            resources->maxTaskWorkGroupSizeZ_EXT = value;
+        else if (tokenStr == "MaxMeshViewCountEXT")
+            resources->maxMeshViewCountEXT = value;
         else if (tokenStr == "nonInductiveForLoops")
             resources->limits.nonInductiveForLoops = (value != 0);
         else if (tokenStr == "whileLoops")
index 37282f2..3812770 100644 (file)
@@ -293,8 +293,8 @@ const char* GetBinaryName(EShLanguage stage)
         case EShLangClosestHit:      name = "rchit.spv";   break;
         case EShLangMiss:            name = "rmiss.spv";   break;
         case EShLangCallable:        name = "rcall.spv";   break;
-        case EShLangMeshNV:          name = "mesh.spv";    break;
-        case EShLangTaskNV:          name = "task.spv";    break;
+        case EShLangMesh :           name = "mesh.spv";    break;
+        case EShLangTask :           name = "task.spv";    break;
         default:                     name = "unknown";     break;
         }
     } else
@@ -1780,9 +1780,9 @@ EShLanguage FindLanguage(const std::string& name, bool parseStageName)
     else if (stageName == "rcall")
         return EShLangCallable;
     else if (stageName == "mesh")
-        return EShLangMeshNV;
+        return EShLangMesh;
     else if (stageName == "task")
-        return EShLangTaskNV;
+        return EShLangTask;
 
     usage();
     return EShLangVertex;
diff --git a/Test/baseResults/glsl.460.subgroupEXT.mesh.out b/Test/baseResults/glsl.460.subgroupEXT.mesh.out
new file mode 100644 (file)
index 0000000..8d45106
--- /dev/null
@@ -0,0 +1,1039 @@
+glsl.460.subgroupEXT.mesh
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 64 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_EXT_mesh_shader
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+max_vertices = 81
+max_primitives = 32
+output primitive = triangles
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:14      'gl_SubgroupID' ( in uint SubgroupID)
+0:15      subgroupMemoryBarrierShared ( global void)
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Branch: Return with expression
+0:77        'result' ( temp 4-component vector of float)
+0:97  Function Definition: main( ( global void)
+0:97    Function Parameters: 
+0:99    Sequence
+0:99      Sequence
+0:99        move second child to first child ( temp uint)
+0:99          'iid' ( temp uint)
+0:99          direct index ( temp uint)
+0:99            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:99            Constant:
+0:99              0 (const int)
+0:100      Sequence
+0:100        move second child to first child ( temp uint)
+0:100          'gid' ( temp uint)
+0:100          direct index ( temp uint)
+0:100            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:100            Constant:
+0:100              0 (const int)
+0:101      Sequence
+0:101        move second child to first child ( temp uint)
+0:101          'vertexCount' ( temp uint)
+0:101          Constant:
+0:101            81 (const uint)
+0:102      Sequence
+0:102        move second child to first child ( temp uint)
+0:102          'primitiveCount' ( temp uint)
+0:102          Constant:
+0:102            32 (const uint)
+0:103      SetMeshOutputsEXT ( global void)
+0:103        'vertexCount' ( temp uint)
+0:103        'primitiveCount' ( temp uint)
+0:105      move second child to first child ( temp 4-component vector of float)
+0:105        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:105          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:105            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:105            'iid' ( temp uint)
+0:105          Constant:
+0:105            0 (const int)
+0:105        Constant:
+0:105          1.000000
+0:105          1.000000
+0:105          1.000000
+0:105          1.000000
+0:106      move second child to first child ( temp float)
+0:106        gl_PointSize: direct index for structure ( out float PointSize)
+0:106          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:106            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:106            'iid' ( temp uint)
+0:106          Constant:
+0:106            1 (const int)
+0:106        Constant:
+0:106          2.000000
+0:107      move second child to first child ( temp float)
+0:107        direct index ( temp float ClipDistance)
+0:107          gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:107            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:107              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:107              'iid' ( temp uint)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Constant:
+0:107            3 (const int)
+0:107        Constant:
+0:107          3.000000
+0:108      move second child to first child ( temp float)
+0:108        direct index ( temp float CullDistance)
+0:108          gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:108            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:108              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:108              'iid' ( temp uint)
+0:108            Constant:
+0:108              3 (const int)
+0:108          Constant:
+0:108            2 (const int)
+0:108        Constant:
+0:108          4.000000
+0:110      MemoryBarrierShared ( global void)
+0:110      Barrier ( global void)
+0:112      move second child to first child ( temp 4-component vector of float)
+0:112        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:112          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:112            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:112            add ( temp uint)
+0:112              'iid' ( temp uint)
+0:112              Constant:
+0:112                1 (const uint)
+0:112          Constant:
+0:112            0 (const int)
+0:112        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:112          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:112            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:112            'iid' ( temp uint)
+0:112          Constant:
+0:112            0 (const int)
+0:113      move second child to first child ( temp float)
+0:113        gl_PointSize: direct index for structure ( out float PointSize)
+0:113          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:113            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:113            add ( temp uint)
+0:113              'iid' ( temp uint)
+0:113              Constant:
+0:113                1 (const uint)
+0:113          Constant:
+0:113            1 (const int)
+0:113        gl_PointSize: direct index for structure ( out float PointSize)
+0:113          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:113            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:113            'iid' ( temp uint)
+0:113          Constant:
+0:113            1 (const int)
+0:114      move second child to first child ( temp float)
+0:114        direct index ( temp float ClipDistance)
+0:114          gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:114            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:114              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:114              add ( temp uint)
+0:114                'iid' ( temp uint)
+0:114                Constant:
+0:114                  1 (const uint)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Constant:
+0:114            3 (const int)
+0:114        direct index ( temp float ClipDistance)
+0:114          gl_ClipDistance: direct index for structure ( out unsized 4-element array of float ClipDistance)
+0:114            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:114              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:114              'iid' ( temp uint)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Constant:
+0:114            3 (const int)
+0:115      move second child to first child ( temp float)
+0:115        direct index ( temp float CullDistance)
+0:115          gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:115            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:115              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:115              add ( temp uint)
+0:115                'iid' ( temp uint)
+0:115                Constant:
+0:115                  1 (const uint)
+0:115            Constant:
+0:115              3 (const int)
+0:115          Constant:
+0:115            2 (const int)
+0:115        direct index ( temp float CullDistance)
+0:115          gl_CullDistance: direct index for structure ( out unsized 3-element array of float CullDistance)
+0:115            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:115              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:115              'iid' ( temp uint)
+0:115            Constant:
+0:115              3 (const int)
+0:115          Constant:
+0:115            2 (const int)
+0:117      MemoryBarrierShared ( global void)
+0:117      Barrier ( global void)
+0:119      move second child to first child ( temp int)
+0:119        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:119          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:119            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:119            'iid' ( temp uint)
+0:119          Constant:
+0:119            0 (const int)
+0:119        Constant:
+0:119          6 (const int)
+0:120      move second child to first child ( temp int)
+0:120        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:120          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:120            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:120            'iid' ( temp uint)
+0:120          Constant:
+0:120            1 (const int)
+0:120        Constant:
+0:120          7 (const int)
+0:121      move second child to first child ( temp int)
+0:121        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:121          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:121            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:121            'iid' ( temp uint)
+0:121          Constant:
+0:121            2 (const int)
+0:121        Constant:
+0:121          8 (const int)
+0:122      move second child to first child ( temp bool)
+0:122        gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT)
+0:122          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:122            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:122            'iid' ( temp uint)
+0:122          Constant:
+0:122            3 (const int)
+0:122        Constant:
+0:122          false (const bool)
+0:124      MemoryBarrierShared ( global void)
+0:124      Barrier ( global void)
+0:126      move second child to first child ( temp int)
+0:126        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:126          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            add ( temp uint)
+0:126              'iid' ( temp uint)
+0:126              Constant:
+0:126                1 (const uint)
+0:126          Constant:
+0:126            0 (const int)
+0:126        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:126          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'iid' ( temp uint)
+0:126          Constant:
+0:126            0 (const int)
+0:127      move second child to first child ( temp int)
+0:127        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:127          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            add ( temp uint)
+0:127              'iid' ( temp uint)
+0:127              Constant:
+0:127                1 (const uint)
+0:127          Constant:
+0:127            1 (const int)
+0:127        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:127          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'iid' ( temp uint)
+0:127          Constant:
+0:127            1 (const int)
+0:128      move second child to first child ( temp int)
+0:128        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:128          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            add ( temp uint)
+0:128              'iid' ( temp uint)
+0:128              Constant:
+0:128                1 (const uint)
+0:128          Constant:
+0:128            2 (const int)
+0:128        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:128          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'iid' ( temp uint)
+0:128          Constant:
+0:128            2 (const int)
+0:129      move second child to first child ( temp bool)
+0:129        gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT)
+0:129          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:129            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:129            add ( temp uint)
+0:129              'iid' ( temp uint)
+0:129              Constant:
+0:129                1 (const uint)
+0:129          Constant:
+0:129            3 (const int)
+0:129        Constant:
+0:129          false (const bool)
+0:131      MemoryBarrierShared ( global void)
+0:131      Barrier ( global void)
+0:134      move second child to first child ( temp 3-component vector of uint)
+0:134        direct index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:134          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:134          Constant:
+0:134            0 (const int)
+0:134        Constant:
+0:134          1 (const uint)
+0:134          1 (const uint)
+0:134          1 (const uint)
+0:135      move second child to first child ( temp 3-component vector of uint)
+0:135        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:135          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:135          subtract ( temp uint)
+0:135            'primitiveCount' ( temp uint)
+0:135            Constant:
+0:135              1 (const uint)
+0:135        Constant:
+0:135          2 (const uint)
+0:135          2 (const uint)
+0:135          2 (const uint)
+0:136      move second child to first child ( temp 3-component vector of uint)
+0:136        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gid' ( temp uint)
+0:136        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          subtract ( temp uint)
+0:136            'gid' ( temp uint)
+0:136            Constant:
+0:136              1 (const uint)
+0:139      MemoryBarrierShared ( global void)
+0:139      Barrier ( global void)
+0:143  Function Definition: basic_works( ( global void)
+0:143    Function Parameters: 
+0:145    Sequence
+0:145      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:146      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:147      subgroupBarrier ( global void)
+0:148      subgroupMemoryBarrier ( global void)
+0:149      subgroupMemoryBarrierBuffer ( global void)
+0:150      subgroupMemoryBarrierImage ( global void)
+0:151      subgroupElect ( global bool)
+0:152      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:153      'gl_SubgroupID' ( in uint SubgroupID)
+0:154      subgroupMemoryBarrierShared ( global void)
+0:158  Function Definition: ballot_works(vf4; ( global void)
+0:158    Function Parameters: 
+0:158      'f4' ( in 4-component vector of float)
+0:159    Sequence
+0:159      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:160      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:161      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:162      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:163      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:164      subgroupBroadcast ( global 4-component vector of float)
+0:164        'f4' ( in 4-component vector of float)
+0:164        Constant:
+0:164          0 (const uint)
+0:165      subgroupBroadcastFirst ( global 4-component vector of float)
+0:165        'f4' ( in 4-component vector of float)
+0:166      Sequence
+0:166        move second child to first child ( temp 4-component vector of uint)
+0:166          'ballot' ( temp 4-component vector of uint)
+0:166          subgroupBallot ( global 4-component vector of uint)
+0:166            Constant:
+0:166              false (const bool)
+0:167      subgroupInverseBallot ( global bool)
+0:167        Constant:
+0:167          1 (const uint)
+0:167          1 (const uint)
+0:167          1 (const uint)
+0:167          1 (const uint)
+0:168      subgroupBallotBitExtract ( global bool)
+0:168        'ballot' ( temp 4-component vector of uint)
+0:168        Constant:
+0:168          0 (const uint)
+0:169      subgroupBallotBitCount ( global uint)
+0:169        'ballot' ( temp 4-component vector of uint)
+0:170      subgroupBallotInclusiveBitCount ( global uint)
+0:170        'ballot' ( temp 4-component vector of uint)
+0:171      subgroupBallotExclusiveBitCount ( global uint)
+0:171        'ballot' ( temp 4-component vector of uint)
+0:172      subgroupBallotFindLSB ( global uint)
+0:172        'ballot' ( temp 4-component vector of uint)
+0:173      subgroupBallotFindMSB ( global uint)
+0:173        'ballot' ( temp 4-component vector of uint)
+0:177  Function Definition: vote_works(vf4; ( global void)
+0:177    Function Parameters: 
+0:177      'f4' ( in 4-component vector of float)
+0:179    Sequence
+0:179      subgroupAll ( global bool)
+0:179        Constant:
+0:179          true (const bool)
+0:180      subgroupAny ( global bool)
+0:180        Constant:
+0:180          false (const bool)
+0:181      subgroupAllEqual ( global bool)
+0:181        'f4' ( in 4-component vector of float)
+0:186  Function Definition: shuffle_works(vf4; ( global void)
+0:186    Function Parameters: 
+0:186      'f4' ( in 4-component vector of float)
+0:188    Sequence
+0:188      subgroupShuffle ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:188        Constant:
+0:188          0 (const uint)
+0:189      subgroupShuffleXor ( global 4-component vector of float)
+0:189        'f4' ( in 4-component vector of float)
+0:189        Constant:
+0:189          1 (const uint)
+0:190      subgroupShuffleUp ( global 4-component vector of float)
+0:190        'f4' ( in 4-component vector of float)
+0:190        Constant:
+0:190          1 (const uint)
+0:191      subgroupShuffleDown ( global 4-component vector of float)
+0:191        'f4' ( in 4-component vector of float)
+0:191        Constant:
+0:191          1 (const uint)
+0:195  Function Definition: arith_works(vf4; ( global void)
+0:195    Function Parameters: 
+0:195      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:198      subgroupAdd ( global 4-component vector of float)
+0:198        'f4' ( in 4-component vector of float)
+0:199      subgroupMul ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:200      subgroupMin ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:201      subgroupMax ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:202      subgroupAnd ( global 4-component vector of uint)
+0:202        'ballot' ( temp 4-component vector of uint)
+0:203      subgroupOr ( global 4-component vector of uint)
+0:203        'ballot' ( temp 4-component vector of uint)
+0:204      subgroupXor ( global 4-component vector of uint)
+0:204        'ballot' ( temp 4-component vector of uint)
+0:205      subgroupInclusiveAdd ( global 4-component vector of float)
+0:205        'f4' ( in 4-component vector of float)
+0:206      subgroupInclusiveMul ( global 4-component vector of float)
+0:206        'f4' ( in 4-component vector of float)
+0:207      subgroupInclusiveMin ( global 4-component vector of float)
+0:207        'f4' ( in 4-component vector of float)
+0:208      subgroupInclusiveMax ( global 4-component vector of float)
+0:208        'f4' ( in 4-component vector of float)
+0:209      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:209        'ballot' ( temp 4-component vector of uint)
+0:210      subgroupInclusiveOr ( global 4-component vector of uint)
+0:210        'ballot' ( temp 4-component vector of uint)
+0:211      subgroupInclusiveXor ( global 4-component vector of uint)
+0:211        'ballot' ( temp 4-component vector of uint)
+0:212      subgroupExclusiveAdd ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
+0:213      subgroupExclusiveMul ( global 4-component vector of float)
+0:213        'f4' ( in 4-component vector of float)
+0:214      subgroupExclusiveMin ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:215      subgroupExclusiveMax ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:216      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:216        'ballot' ( temp 4-component vector of uint)
+0:217      subgroupExclusiveOr ( global 4-component vector of uint)
+0:217        'ballot' ( temp 4-component vector of uint)
+0:218      subgroupExclusiveXor ( global 4-component vector of uint)
+0:218        'ballot' ( temp 4-component vector of uint)
+0:222  Function Definition: clustered_works(vf4; ( global void)
+0:222    Function Parameters: 
+0:222      'f4' ( in 4-component vector of float)
+0:224    Sequence
+0:224      Sequence
+0:224        move second child to first child ( temp 4-component vector of uint)
+0:224          'ballot' ( temp 4-component vector of uint)
+0:224          Constant:
+0:224            85 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:224            0 (const uint)
+0:225      subgroupClusteredAdd ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
+0:225        Constant:
+0:225          2 (const uint)
+0:226      subgroupClusteredMul ( global 4-component vector of float)
+0:226        'f4' ( in 4-component vector of float)
+0:226        Constant:
+0:226          2 (const uint)
+0:227      subgroupClusteredMin ( global 4-component vector of float)
+0:227        'f4' ( in 4-component vector of float)
+0:227        Constant:
+0:227          2 (const uint)
+0:228      subgroupClusteredMax ( global 4-component vector of float)
+0:228        'f4' ( in 4-component vector of float)
+0:228        Constant:
+0:228          2 (const uint)
+0:229      subgroupClusteredAnd ( global 4-component vector of uint)
+0:229        'ballot' ( temp 4-component vector of uint)
+0:229        Constant:
+0:229          2 (const uint)
+0:230      subgroupClusteredOr ( global 4-component vector of uint)
+0:230        'ballot' ( temp 4-component vector of uint)
+0:230        Constant:
+0:230          2 (const uint)
+0:231      subgroupClusteredXor ( global 4-component vector of uint)
+0:231        'ballot' ( temp 4-component vector of uint)
+0:231        Constant:
+0:231          2 (const uint)
+0:235  Function Definition: quad_works(vf4; ( global void)
+0:235    Function Parameters: 
+0:235      'f4' ( in 4-component vector of float)
+0:237    Sequence
+0:237      subgroupQuadBroadcast ( global 4-component vector of float)
+0:237        'f4' ( in 4-component vector of float)
+0:237        Constant:
+0:237          0 (const uint)
+0:238      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:238        'f4' ( in 4-component vector of float)
+0:239      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:239        'f4' ( in 4-component vector of float)
+0:240      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:240        'f4' ( in 4-component vector of float)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out unsized 4-element array of float ClipDistance gl_ClipDistance,  out unsized 3-element array of float CullDistance gl_CullDistance})
+0:?     'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:?     'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+
+
+Linked mesh stage:
+
+
+Shader version: 460
+Requested GL_EXT_mesh_shader
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+max_vertices = 81
+max_primitives = 32
+output primitive = triangles
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:97  Function Definition: main( ( global void)
+0:97    Function Parameters: 
+0:99    Sequence
+0:99      Sequence
+0:99        move second child to first child ( temp uint)
+0:99          'iid' ( temp uint)
+0:99          direct index ( temp uint)
+0:99            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:99            Constant:
+0:99              0 (const int)
+0:100      Sequence
+0:100        move second child to first child ( temp uint)
+0:100          'gid' ( temp uint)
+0:100          direct index ( temp uint)
+0:100            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:100            Constant:
+0:100              0 (const int)
+0:101      Sequence
+0:101        move second child to first child ( temp uint)
+0:101          'vertexCount' ( temp uint)
+0:101          Constant:
+0:101            81 (const uint)
+0:102      Sequence
+0:102        move second child to first child ( temp uint)
+0:102          'primitiveCount' ( temp uint)
+0:102          Constant:
+0:102            32 (const uint)
+0:103      SetMeshOutputsEXT ( global void)
+0:103        'vertexCount' ( temp uint)
+0:103        'primitiveCount' ( temp uint)
+0:105      move second child to first child ( temp 4-component vector of float)
+0:105        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:105          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:105            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:105            'iid' ( temp uint)
+0:105          Constant:
+0:105            0 (const int)
+0:105        Constant:
+0:105          1.000000
+0:105          1.000000
+0:105          1.000000
+0:105          1.000000
+0:106      move second child to first child ( temp float)
+0:106        gl_PointSize: direct index for structure ( out float PointSize)
+0:106          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:106            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:106            'iid' ( temp uint)
+0:106          Constant:
+0:106            1 (const int)
+0:106        Constant:
+0:106          2.000000
+0:107      move second child to first child ( temp float)
+0:107        direct index ( temp float ClipDistance)
+0:107          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:107            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:107              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:107              'iid' ( temp uint)
+0:107            Constant:
+0:107              2 (const int)
+0:107          Constant:
+0:107            3 (const int)
+0:107        Constant:
+0:107          3.000000
+0:108      move second child to first child ( temp float)
+0:108        direct index ( temp float CullDistance)
+0:108          gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:108            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:108              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:108              'iid' ( temp uint)
+0:108            Constant:
+0:108              3 (const int)
+0:108          Constant:
+0:108            2 (const int)
+0:108        Constant:
+0:108          4.000000
+0:110      MemoryBarrierShared ( global void)
+0:110      Barrier ( global void)
+0:112      move second child to first child ( temp 4-component vector of float)
+0:112        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:112          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:112            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:112            add ( temp uint)
+0:112              'iid' ( temp uint)
+0:112              Constant:
+0:112                1 (const uint)
+0:112          Constant:
+0:112            0 (const int)
+0:112        gl_Position: direct index for structure ( out 4-component vector of float Position)
+0:112          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:112            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:112            'iid' ( temp uint)
+0:112          Constant:
+0:112            0 (const int)
+0:113      move second child to first child ( temp float)
+0:113        gl_PointSize: direct index for structure ( out float PointSize)
+0:113          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:113            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:113            add ( temp uint)
+0:113              'iid' ( temp uint)
+0:113              Constant:
+0:113                1 (const uint)
+0:113          Constant:
+0:113            1 (const int)
+0:113        gl_PointSize: direct index for structure ( out float PointSize)
+0:113          indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:113            'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:113            'iid' ( temp uint)
+0:113          Constant:
+0:113            1 (const int)
+0:114      move second child to first child ( temp float)
+0:114        direct index ( temp float ClipDistance)
+0:114          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:114            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:114              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:114              add ( temp uint)
+0:114                'iid' ( temp uint)
+0:114                Constant:
+0:114                  1 (const uint)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Constant:
+0:114            3 (const int)
+0:114        direct index ( temp float ClipDistance)
+0:114          gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance)
+0:114            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:114              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:114              'iid' ( temp uint)
+0:114            Constant:
+0:114              2 (const int)
+0:114          Constant:
+0:114            3 (const int)
+0:115      move second child to first child ( temp float)
+0:115        direct index ( temp float CullDistance)
+0:115          gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:115            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:115              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:115              add ( temp uint)
+0:115                'iid' ( temp uint)
+0:115                Constant:
+0:115                  1 (const uint)
+0:115            Constant:
+0:115              3 (const int)
+0:115          Constant:
+0:115            2 (const int)
+0:115        direct index ( temp float CullDistance)
+0:115          gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance)
+0:115            indirect index ( temp block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:115              'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:115              'iid' ( temp uint)
+0:115            Constant:
+0:115              3 (const int)
+0:115          Constant:
+0:115            2 (const int)
+0:117      MemoryBarrierShared ( global void)
+0:117      Barrier ( global void)
+0:119      move second child to first child ( temp int)
+0:119        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:119          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:119            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:119            'iid' ( temp uint)
+0:119          Constant:
+0:119            0 (const int)
+0:119        Constant:
+0:119          6 (const int)
+0:120      move second child to first child ( temp int)
+0:120        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:120          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:120            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:120            'iid' ( temp uint)
+0:120          Constant:
+0:120            1 (const int)
+0:120        Constant:
+0:120          7 (const int)
+0:121      move second child to first child ( temp int)
+0:121        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:121          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:121            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:121            'iid' ( temp uint)
+0:121          Constant:
+0:121            2 (const int)
+0:121        Constant:
+0:121          8 (const int)
+0:122      move second child to first child ( temp bool)
+0:122        gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT)
+0:122          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:122            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:122            'iid' ( temp uint)
+0:122          Constant:
+0:122            3 (const int)
+0:122        Constant:
+0:122          false (const bool)
+0:124      MemoryBarrierShared ( global void)
+0:124      Barrier ( global void)
+0:126      move second child to first child ( temp int)
+0:126        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:126          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            add ( temp uint)
+0:126              'iid' ( temp uint)
+0:126              Constant:
+0:126                1 (const uint)
+0:126          Constant:
+0:126            0 (const int)
+0:126        gl_PrimitiveID: direct index for structure ( perprimitiveNV out int PrimitiveID)
+0:126          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:126            'iid' ( temp uint)
+0:126          Constant:
+0:126            0 (const int)
+0:127      move second child to first child ( temp int)
+0:127        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:127          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            add ( temp uint)
+0:127              'iid' ( temp uint)
+0:127              Constant:
+0:127                1 (const uint)
+0:127          Constant:
+0:127            1 (const int)
+0:127        gl_Layer: direct index for structure ( perprimitiveNV out int Layer)
+0:127          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:127            'iid' ( temp uint)
+0:127          Constant:
+0:127            1 (const int)
+0:128      move second child to first child ( temp int)
+0:128        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:128          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            add ( temp uint)
+0:128              'iid' ( temp uint)
+0:128              Constant:
+0:128                1 (const uint)
+0:128          Constant:
+0:128            2 (const int)
+0:128        gl_ViewportIndex: direct index for structure ( perprimitiveNV out int ViewportIndex)
+0:128          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:128            'iid' ( temp uint)
+0:128          Constant:
+0:128            2 (const int)
+0:129      move second child to first child ( temp bool)
+0:129        gl_CullPrimitiveEXT: direct index for structure ( perprimitiveNV out bool CullPrimitiveEXT)
+0:129          indirect index ( perprimitiveNV temp block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:129            'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:129            add ( temp uint)
+0:129              'iid' ( temp uint)
+0:129              Constant:
+0:129                1 (const uint)
+0:129          Constant:
+0:129            3 (const int)
+0:129        Constant:
+0:129          false (const bool)
+0:131      MemoryBarrierShared ( global void)
+0:131      Barrier ( global void)
+0:134      move second child to first child ( temp 3-component vector of uint)
+0:134        direct index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:134          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:134          Constant:
+0:134            0 (const int)
+0:134        Constant:
+0:134          1 (const uint)
+0:134          1 (const uint)
+0:134          1 (const uint)
+0:135      move second child to first child ( temp 3-component vector of uint)
+0:135        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:135          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:135          subtract ( temp uint)
+0:135            'primitiveCount' ( temp uint)
+0:135            Constant:
+0:135              1 (const uint)
+0:135        Constant:
+0:135          2 (const uint)
+0:135          2 (const uint)
+0:135          2 (const uint)
+0:136      move second child to first child ( temp 3-component vector of uint)
+0:136        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gid' ( temp uint)
+0:136        indirect index ( temp 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+0:136          subtract ( temp uint)
+0:136            'gid' ( temp uint)
+0:136            Constant:
+0:136              1 (const uint)
+0:139      MemoryBarrierShared ( global void)
+0:139      Barrier ( global void)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'gl_MeshVerticesEXT' ( out 81-element array of block{ out 4-component vector of float Position gl_Position,  out float PointSize gl_PointSize,  out 4-element array of float ClipDistance gl_ClipDistance,  out 3-element array of float CullDistance gl_CullDistance})
+0:?     'gl_MeshPrimitivesEXT' ( perprimitiveNV out 32-element array of block{ perprimitiveNV out int PrimitiveID gl_PrimitiveID,  perprimitiveNV out int Layer gl_Layer,  perprimitiveNV out int ViewportIndex gl_ViewportIndex,  perprimitiveNV out bool CullPrimitiveEXT gl_CullPrimitiveEXT,  perprimitiveNV out int PrimitiveShadingRateKHR gl_PrimitiveShadingRateEXT})
+0:?     'gl_PrimitiveTriangleIndicesEXT' ( out 96-element array of 3-component vector of uint PrimitiveTriangleIndicesEXT)
+
diff --git a/Test/baseResults/glsl.460.subgroupEXT.task.out b/Test/baseResults/glsl.460.subgroupEXT.task.out
new file mode 100644 (file)
index 0000000..c756f38
--- /dev/null
@@ -0,0 +1,707 @@
+glsl.460.subgroupEXT.task
+ERROR: 0:6: 'gl_SubgroupSize' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:7: 'gl_SubgroupInvocationID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:8: 'subgroupBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:9: 'subgroupMemoryBarrier' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:10: 'subgroupMemoryBarrierBuffer' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:11: 'subgroupMemoryBarrierImage' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:12: 'subgroupElect' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:13: 'gl_NumSubgroups' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:14: 'gl_SubgroupID' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:15: 'subgroupMemoryBarrierShared' : required extension not requested: GL_KHR_shader_subgroup_basic
+ERROR: 0:17: 'subgroupAll' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:18: 'subgroupAny' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:19: 'subgroupAllEqual' : required extension not requested: GL_KHR_shader_subgroup_vote
+ERROR: 0:21: 'gl_SubgroupEqMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:22: 'gl_SubgroupGeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:23: 'gl_SubgroupGtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:24: 'gl_SubgroupLeMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:25: 'gl_SubgroupLtMask' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:26: 'subgroupBroadcast' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:27: 'subgroupBroadcastFirst' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:28: 'subgroupBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:29: 'subgroupInverseBallot' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:30: 'subgroupBallotBitExtract' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:31: 'subgroupBallotBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:32: 'subgroupBallotInclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:33: 'subgroupBallotExclusiveBitCount' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:34: 'subgroupBallotFindLSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:35: 'subgroupBallotFindMSB' : required extension not requested: GL_KHR_shader_subgroup_ballot
+ERROR: 0:37: 'subgroupShuffle' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:38: 'subgroupShuffleXor' : required extension not requested: GL_KHR_shader_subgroup_shuffle
+ERROR: 0:39: 'subgroupShuffleUp' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:40: 'subgroupShuffleDown' : required extension not requested: GL_KHR_shader_subgroup_shuffle_relative
+ERROR: 0:42: 'subgroupAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:43: 'subgroupMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:44: 'subgroupMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:45: 'subgroupMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:46: 'subgroupAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:47: 'subgroupOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:48: 'subgroupXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:49: 'subgroupInclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:50: 'subgroupInclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:51: 'subgroupInclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:52: 'subgroupInclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:53: 'subgroupInclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:54: 'subgroupInclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:55: 'subgroupInclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:56: 'subgroupExclusiveAdd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:57: 'subgroupExclusiveMul' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:58: 'subgroupExclusiveMin' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:59: 'subgroupExclusiveMax' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:60: 'subgroupExclusiveAnd' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:61: 'subgroupExclusiveOr' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:62: 'subgroupExclusiveXor' : required extension not requested: GL_KHR_shader_subgroup_arithmetic
+ERROR: 0:64: 'subgroupClusteredAdd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:65: 'subgroupClusteredMul' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:66: 'subgroupClusteredMin' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:67: 'subgroupClusteredMax' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:68: 'subgroupClusteredAnd' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:69: 'subgroupClusteredOr' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:70: 'subgroupClusteredXor' : required extension not requested: GL_KHR_shader_subgroup_clustered
+ERROR: 0:72: 'subgroupQuadBroadcast' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:73: 'subgroupQuadSwapHorizontal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:74: 'subgroupQuadSwapVertical' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 0:75: 'subgroupQuadSwapDiagonal' : required extension not requested: GL_KHR_shader_subgroup_quad
+ERROR: 64 compilation errors.  No code generated.
+
+
+Shader version: 460
+Requested GL_EXT_mesh_shader
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:3  Function Definition: undeclared_errors(vf4; ( global 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:6      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:7      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:8      subgroupBarrier ( global void)
+0:9      subgroupMemoryBarrier ( global void)
+0:10      subgroupMemoryBarrierBuffer ( global void)
+0:11      subgroupMemoryBarrierImage ( global void)
+0:12      subgroupElect ( global bool)
+0:13      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:14      'gl_SubgroupID' ( in uint SubgroupID)
+0:15      subgroupMemoryBarrierShared ( global void)
+0:17      subgroupAll ( global bool)
+0:17        Constant:
+0:17          true (const bool)
+0:18      subgroupAny ( global bool)
+0:18        Constant:
+0:18          false (const bool)
+0:19      subgroupAllEqual ( global bool)
+0:19        'f4' ( in 4-component vector of float)
+0:21      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:22      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:23      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:24      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:25      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:26      subgroupBroadcast ( global 4-component vector of float)
+0:26        'f4' ( in 4-component vector of float)
+0:26        Constant:
+0:26          0 (const uint)
+0:27      subgroupBroadcastFirst ( global 4-component vector of float)
+0:27        'f4' ( in 4-component vector of float)
+0:28      Sequence
+0:28        move second child to first child ( temp 4-component vector of uint)
+0:28          'ballot' ( temp 4-component vector of uint)
+0:28          subgroupBallot ( global 4-component vector of uint)
+0:28            Constant:
+0:28              false (const bool)
+0:29      subgroupInverseBallot ( global bool)
+0:29        Constant:
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:29          1 (const uint)
+0:30      subgroupBallotBitExtract ( global bool)
+0:30        'ballot' ( temp 4-component vector of uint)
+0:30        Constant:
+0:30          0 (const uint)
+0:31      subgroupBallotBitCount ( global uint)
+0:31        'ballot' ( temp 4-component vector of uint)
+0:32      subgroupBallotInclusiveBitCount ( global uint)
+0:32        'ballot' ( temp 4-component vector of uint)
+0:33      subgroupBallotExclusiveBitCount ( global uint)
+0:33        'ballot' ( temp 4-component vector of uint)
+0:34      subgroupBallotFindLSB ( global uint)
+0:34        'ballot' ( temp 4-component vector of uint)
+0:35      subgroupBallotFindMSB ( global uint)
+0:35        'ballot' ( temp 4-component vector of uint)
+0:37      subgroupShuffle ( global 4-component vector of float)
+0:37        'f4' ( in 4-component vector of float)
+0:37        Constant:
+0:37          0 (const uint)
+0:38      subgroupShuffleXor ( global 4-component vector of float)
+0:38        'f4' ( in 4-component vector of float)
+0:38        Constant:
+0:38          1 (const uint)
+0:39      subgroupShuffleUp ( global 4-component vector of float)
+0:39        'f4' ( in 4-component vector of float)
+0:39        Constant:
+0:39          1 (const uint)
+0:40      subgroupShuffleDown ( global 4-component vector of float)
+0:40        'f4' ( in 4-component vector of float)
+0:40        Constant:
+0:40          1 (const uint)
+0:42      move second child to first child ( temp 4-component vector of float)
+0:42        'result' ( temp 4-component vector of float)
+0:42        subgroupAdd ( global 4-component vector of float)
+0:42          'f4' ( in 4-component vector of float)
+0:43      subgroupMul ( global 4-component vector of float)
+0:43        'f4' ( in 4-component vector of float)
+0:44      subgroupMin ( global 4-component vector of float)
+0:44        'f4' ( in 4-component vector of float)
+0:45      subgroupMax ( global 4-component vector of float)
+0:45        'f4' ( in 4-component vector of float)
+0:46      subgroupAnd ( global 4-component vector of uint)
+0:46        'ballot' ( temp 4-component vector of uint)
+0:47      subgroupOr ( global 4-component vector of uint)
+0:47        'ballot' ( temp 4-component vector of uint)
+0:48      subgroupXor ( global 4-component vector of uint)
+0:48        'ballot' ( temp 4-component vector of uint)
+0:49      subgroupInclusiveAdd ( global 4-component vector of float)
+0:49        'f4' ( in 4-component vector of float)
+0:50      subgroupInclusiveMul ( global 4-component vector of float)
+0:50        'f4' ( in 4-component vector of float)
+0:51      subgroupInclusiveMin ( global 4-component vector of float)
+0:51        'f4' ( in 4-component vector of float)
+0:52      subgroupInclusiveMax ( global 4-component vector of float)
+0:52        'f4' ( in 4-component vector of float)
+0:53      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:53        'ballot' ( temp 4-component vector of uint)
+0:54      subgroupInclusiveOr ( global 4-component vector of uint)
+0:54        'ballot' ( temp 4-component vector of uint)
+0:55      subgroupInclusiveXor ( global 4-component vector of uint)
+0:55        'ballot' ( temp 4-component vector of uint)
+0:56      subgroupExclusiveAdd ( global 4-component vector of float)
+0:56        'f4' ( in 4-component vector of float)
+0:57      subgroupExclusiveMul ( global 4-component vector of float)
+0:57        'f4' ( in 4-component vector of float)
+0:58      subgroupExclusiveMin ( global 4-component vector of float)
+0:58        'f4' ( in 4-component vector of float)
+0:59      subgroupExclusiveMax ( global 4-component vector of float)
+0:59        'f4' ( in 4-component vector of float)
+0:60      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:60        'ballot' ( temp 4-component vector of uint)
+0:61      subgroupExclusiveOr ( global 4-component vector of uint)
+0:61        'ballot' ( temp 4-component vector of uint)
+0:62      subgroupExclusiveXor ( global 4-component vector of uint)
+0:62        'ballot' ( temp 4-component vector of uint)
+0:64      subgroupClusteredAdd ( global 4-component vector of float)
+0:64        'f4' ( in 4-component vector of float)
+0:64        Constant:
+0:64          2 (const uint)
+0:65      subgroupClusteredMul ( global 4-component vector of float)
+0:65        'f4' ( in 4-component vector of float)
+0:65        Constant:
+0:65          2 (const uint)
+0:66      subgroupClusteredMin ( global 4-component vector of float)
+0:66        'f4' ( in 4-component vector of float)
+0:66        Constant:
+0:66          2 (const uint)
+0:67      subgroupClusteredMax ( global 4-component vector of float)
+0:67        'f4' ( in 4-component vector of float)
+0:67        Constant:
+0:67          2 (const uint)
+0:68      subgroupClusteredAnd ( global 4-component vector of uint)
+0:68        'ballot' ( temp 4-component vector of uint)
+0:68        Constant:
+0:68          2 (const uint)
+0:69      subgroupClusteredOr ( global 4-component vector of uint)
+0:69        'ballot' ( temp 4-component vector of uint)
+0:69        Constant:
+0:69          2 (const uint)
+0:70      subgroupClusteredXor ( global 4-component vector of uint)
+0:70        'ballot' ( temp 4-component vector of uint)
+0:70        Constant:
+0:70          2 (const uint)
+0:72      subgroupQuadBroadcast ( global 4-component vector of float)
+0:72        'f4' ( in 4-component vector of float)
+0:72        Constant:
+0:72          0 (const uint)
+0:73      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:73        'f4' ( in 4-component vector of float)
+0:74      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:74        'f4' ( in 4-component vector of float)
+0:75      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:75        'f4' ( in 4-component vector of float)
+0:77      Branch: Return with expression
+0:77        'result' ( temp 4-component vector of float)
+0:102  Function Definition: main( ( global void)
+0:102    Function Parameters: 
+0:104    Sequence
+0:104      Sequence
+0:104        move second child to first child ( temp uint)
+0:104          'iid' ( temp uint)
+0:104          direct index ( temp uint)
+0:104            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:104            Constant:
+0:104              0 (const int)
+0:105      Sequence
+0:105        move second child to first child ( temp uint)
+0:105          'gid' ( temp uint)
+0:105          direct index ( temp uint)
+0:105            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:105            Constant:
+0:105              0 (const int)
+0:108      Sequence
+0:108        Sequence
+0:108          move second child to first child ( temp uint)
+0:108            'i' ( temp uint)
+0:108            Constant:
+0:108              0 (const uint)
+0:108        Loop with condition tested first
+0:108          Loop Condition
+0:108          Compare Less Than ( temp bool)
+0:108            'i' ( temp uint)
+0:108            Constant:
+0:108              10 (const uint)
+0:108          Loop Body
+0:109          Sequence
+0:109            move second child to first child ( temp 4-component vector of float)
+0:109              indirect index ( temp 4-component vector of float)
+0:109                'mem' ( shared 10-element array of 4-component vector of float)
+0:109                'i' ( temp uint)
+0:109              Construct vec4 ( temp 4-component vector of float)
+0:109                Convert uint to float ( temp float)
+0:109                  add ( temp uint)
+0:109                    'i' ( temp uint)
+0:109                    uni_value: direct index for structure (layout( column_major shared) uniform uint)
+0:109                      'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:109                      Constant:
+0:109                        0 (const uint)
+0:108          Loop Terminal Expression
+0:108          Pre-Increment ( temp uint)
+0:108            'i' ( temp uint)
+0:111      imageStore ( global void)
+0:111        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:111        Construct ivec2 ( temp 2-component vector of int)
+0:111          Convert uint to int ( temp int)
+0:111            'iid' ( temp uint)
+0:111        indirect index ( temp 4-component vector of float)
+0:111          'mem' ( shared 10-element array of 4-component vector of float)
+0:111          'gid' ( temp uint)
+0:112      imageStore ( global void)
+0:112        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:112        Construct ivec2 ( temp 2-component vector of int)
+0:112          Convert uint to int ( temp int)
+0:112            'iid' ( temp uint)
+0:112        indirect index ( temp 4-component vector of float)
+0:112          'mem' ( shared 10-element array of 4-component vector of float)
+0:112          add ( temp uint)
+0:112            'gid' ( temp uint)
+0:112            Constant:
+0:112              1 (const uint)
+0:114      MemoryBarrierShared ( global void)
+0:114      Barrier ( global void)
+0:118      move second child to first child ( temp 2-component vector of float)
+0:118        dummy: direct index for structure ( global 2-component vector of float)
+0:118          'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:118          Constant:
+0:118            0 (const int)
+0:118        Constant:
+0:118          30.000000
+0:118          31.000000
+0:119      move second child to first child ( temp 2-component vector of float)
+0:119        direct index ( temp 2-component vector of float)
+0:119          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:119            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:119            Constant:
+0:119              1 (const int)
+0:119          Constant:
+0:119            0 (const int)
+0:119        Constant:
+0:119          32.000000
+0:119          33.000000
+0:120      move second child to first child ( temp 2-component vector of float)
+0:120        direct index ( temp 2-component vector of float)
+0:120          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:120            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            1 (const int)
+0:120        Constant:
+0:120          34.000000
+0:120          35.000000
+0:121      move second child to first child ( temp 2-component vector of float)
+0:121        direct index ( temp 2-component vector of float)
+0:121          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:121            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:121            Constant:
+0:121              1 (const int)
+0:121          Constant:
+0:121            2 (const int)
+0:121        indirect index ( temp 2-component vector of float)
+0:121          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:121            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:121            Constant:
+0:121              1 (const int)
+0:121          mod ( temp uint)
+0:121            'gid' ( temp uint)
+0:121            Constant:
+0:121              2 (const uint)
+0:123      MemoryBarrierShared ( global void)
+0:123      Barrier ( global void)
+0:126      EmitMeshTasksEXT ( global void)
+0:126        Constant:
+0:126          3 (const uint)
+0:126        Constant:
+0:126          1 (const uint)
+0:126        Constant:
+0:126          1 (const uint)
+0:130  Function Definition: basic_works( ( global void)
+0:130    Function Parameters: 
+0:132    Sequence
+0:132      'gl_SubgroupSize' ( in uint SubgroupSize)
+0:133      'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID)
+0:134      subgroupBarrier ( global void)
+0:135      subgroupMemoryBarrier ( global void)
+0:136      subgroupMemoryBarrierBuffer ( global void)
+0:137      subgroupMemoryBarrierImage ( global void)
+0:138      subgroupElect ( global bool)
+0:139      'gl_NumSubgroups' ( in uint NumSubgroups)
+0:140      'gl_SubgroupID' ( in uint SubgroupID)
+0:141      subgroupMemoryBarrierShared ( global void)
+0:145  Function Definition: ballot_works(vf4; ( global void)
+0:145    Function Parameters: 
+0:145      'f4' ( in 4-component vector of float)
+0:146    Sequence
+0:146      'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask)
+0:147      'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask)
+0:148      'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask)
+0:149      'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask)
+0:150      'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask)
+0:151      subgroupBroadcast ( global 4-component vector of float)
+0:151        'f4' ( in 4-component vector of float)
+0:151        Constant:
+0:151          0 (const uint)
+0:152      subgroupBroadcastFirst ( global 4-component vector of float)
+0:152        'f4' ( in 4-component vector of float)
+0:153      Sequence
+0:153        move second child to first child ( temp 4-component vector of uint)
+0:153          'ballot' ( temp 4-component vector of uint)
+0:153          subgroupBallot ( global 4-component vector of uint)
+0:153            Constant:
+0:153              false (const bool)
+0:154      subgroupInverseBallot ( global bool)
+0:154        Constant:
+0:154          1 (const uint)
+0:154          1 (const uint)
+0:154          1 (const uint)
+0:154          1 (const uint)
+0:155      subgroupBallotBitExtract ( global bool)
+0:155        'ballot' ( temp 4-component vector of uint)
+0:155        Constant:
+0:155          0 (const uint)
+0:156      subgroupBallotBitCount ( global uint)
+0:156        'ballot' ( temp 4-component vector of uint)
+0:157      subgroupBallotInclusiveBitCount ( global uint)
+0:157        'ballot' ( temp 4-component vector of uint)
+0:158      subgroupBallotExclusiveBitCount ( global uint)
+0:158        'ballot' ( temp 4-component vector of uint)
+0:159      subgroupBallotFindLSB ( global uint)
+0:159        'ballot' ( temp 4-component vector of uint)
+0:160      subgroupBallotFindMSB ( global uint)
+0:160        'ballot' ( temp 4-component vector of uint)
+0:164  Function Definition: vote_works(vf4; ( global void)
+0:164    Function Parameters: 
+0:164      'f4' ( in 4-component vector of float)
+0:166    Sequence
+0:166      subgroupAll ( global bool)
+0:166        Constant:
+0:166          true (const bool)
+0:167      subgroupAny ( global bool)
+0:167        Constant:
+0:167          false (const bool)
+0:168      subgroupAllEqual ( global bool)
+0:168        'f4' ( in 4-component vector of float)
+0:173  Function Definition: shuffle_works(vf4; ( global void)
+0:173    Function Parameters: 
+0:173      'f4' ( in 4-component vector of float)
+0:175    Sequence
+0:175      subgroupShuffle ( global 4-component vector of float)
+0:175        'f4' ( in 4-component vector of float)
+0:175        Constant:
+0:175          0 (const uint)
+0:176      subgroupShuffleXor ( global 4-component vector of float)
+0:176        'f4' ( in 4-component vector of float)
+0:176        Constant:
+0:176          1 (const uint)
+0:177      subgroupShuffleUp ( global 4-component vector of float)
+0:177        'f4' ( in 4-component vector of float)
+0:177        Constant:
+0:177          1 (const uint)
+0:178      subgroupShuffleDown ( global 4-component vector of float)
+0:178        'f4' ( in 4-component vector of float)
+0:178        Constant:
+0:178          1 (const uint)
+0:182  Function Definition: arith_works(vf4; ( global void)
+0:182    Function Parameters: 
+0:182      'f4' ( in 4-component vector of float)
+0:?     Sequence
+0:185      subgroupAdd ( global 4-component vector of float)
+0:185        'f4' ( in 4-component vector of float)
+0:186      subgroupMul ( global 4-component vector of float)
+0:186        'f4' ( in 4-component vector of float)
+0:187      subgroupMin ( global 4-component vector of float)
+0:187        'f4' ( in 4-component vector of float)
+0:188      subgroupMax ( global 4-component vector of float)
+0:188        'f4' ( in 4-component vector of float)
+0:189      subgroupAnd ( global 4-component vector of uint)
+0:189        'ballot' ( temp 4-component vector of uint)
+0:190      subgroupOr ( global 4-component vector of uint)
+0:190        'ballot' ( temp 4-component vector of uint)
+0:191      subgroupXor ( global 4-component vector of uint)
+0:191        'ballot' ( temp 4-component vector of uint)
+0:192      subgroupInclusiveAdd ( global 4-component vector of float)
+0:192        'f4' ( in 4-component vector of float)
+0:193      subgroupInclusiveMul ( global 4-component vector of float)
+0:193        'f4' ( in 4-component vector of float)
+0:194      subgroupInclusiveMin ( global 4-component vector of float)
+0:194        'f4' ( in 4-component vector of float)
+0:195      subgroupInclusiveMax ( global 4-component vector of float)
+0:195        'f4' ( in 4-component vector of float)
+0:196      subgroupInclusiveAnd ( global 4-component vector of uint)
+0:196        'ballot' ( temp 4-component vector of uint)
+0:197      subgroupInclusiveOr ( global 4-component vector of uint)
+0:197        'ballot' ( temp 4-component vector of uint)
+0:198      subgroupInclusiveXor ( global 4-component vector of uint)
+0:198        'ballot' ( temp 4-component vector of uint)
+0:199      subgroupExclusiveAdd ( global 4-component vector of float)
+0:199        'f4' ( in 4-component vector of float)
+0:200      subgroupExclusiveMul ( global 4-component vector of float)
+0:200        'f4' ( in 4-component vector of float)
+0:201      subgroupExclusiveMin ( global 4-component vector of float)
+0:201        'f4' ( in 4-component vector of float)
+0:202      subgroupExclusiveMax ( global 4-component vector of float)
+0:202        'f4' ( in 4-component vector of float)
+0:203      subgroupExclusiveAnd ( global 4-component vector of uint)
+0:203        'ballot' ( temp 4-component vector of uint)
+0:204      subgroupExclusiveOr ( global 4-component vector of uint)
+0:204        'ballot' ( temp 4-component vector of uint)
+0:205      subgroupExclusiveXor ( global 4-component vector of uint)
+0:205        'ballot' ( temp 4-component vector of uint)
+0:209  Function Definition: clustered_works(vf4; ( global void)
+0:209    Function Parameters: 
+0:209      'f4' ( in 4-component vector of float)
+0:211    Sequence
+0:211      Sequence
+0:211        move second child to first child ( temp 4-component vector of uint)
+0:211          'ballot' ( temp 4-component vector of uint)
+0:211          Constant:
+0:211            85 (const uint)
+0:211            0 (const uint)
+0:211            0 (const uint)
+0:211            0 (const uint)
+0:212      subgroupClusteredAdd ( global 4-component vector of float)
+0:212        'f4' ( in 4-component vector of float)
+0:212        Constant:
+0:212          2 (const uint)
+0:213      subgroupClusteredMul ( global 4-component vector of float)
+0:213        'f4' ( in 4-component vector of float)
+0:213        Constant:
+0:213          2 (const uint)
+0:214      subgroupClusteredMin ( global 4-component vector of float)
+0:214        'f4' ( in 4-component vector of float)
+0:214        Constant:
+0:214          2 (const uint)
+0:215      subgroupClusteredMax ( global 4-component vector of float)
+0:215        'f4' ( in 4-component vector of float)
+0:215        Constant:
+0:215          2 (const uint)
+0:216      subgroupClusteredAnd ( global 4-component vector of uint)
+0:216        'ballot' ( temp 4-component vector of uint)
+0:216        Constant:
+0:216          2 (const uint)
+0:217      subgroupClusteredOr ( global 4-component vector of uint)
+0:217        'ballot' ( temp 4-component vector of uint)
+0:217        Constant:
+0:217          2 (const uint)
+0:218      subgroupClusteredXor ( global 4-component vector of uint)
+0:218        'ballot' ( temp 4-component vector of uint)
+0:218        Constant:
+0:218          2 (const uint)
+0:222  Function Definition: quad_works(vf4; ( global void)
+0:222    Function Parameters: 
+0:222      'f4' ( in 4-component vector of float)
+0:224    Sequence
+0:224      subgroupQuadBroadcast ( global 4-component vector of float)
+0:224        'f4' ( in 4-component vector of float)
+0:224        Constant:
+0:224          0 (const uint)
+0:225      subgroupQuadSwapHorizontal ( global 4-component vector of float)
+0:225        'f4' ( in 4-component vector of float)
+0:226      subgroupQuadSwapVertical ( global 4-component vector of float)
+0:226        'f4' ( in 4-component vector of float)
+0:227      subgroupQuadSwapDiagonal ( global 4-component vector of float)
+0:227        'f4' ( in 4-component vector of float)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:?     'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:?     'mem' ( shared 10-element array of 4-component vector of float)
+0:?     'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+
+
+Linked task stage:
+
+
+Shader version: 460
+Requested GL_EXT_mesh_shader
+Requested GL_KHR_shader_subgroup_arithmetic
+Requested GL_KHR_shader_subgroup_ballot
+Requested GL_KHR_shader_subgroup_basic
+Requested GL_KHR_shader_subgroup_clustered
+Requested GL_KHR_shader_subgroup_quad
+Requested GL_KHR_shader_subgroup_shuffle
+Requested GL_KHR_shader_subgroup_shuffle_relative
+Requested GL_KHR_shader_subgroup_vote
+local_size = (32, 1, 1)
+ERROR: node is still EOpNull!
+0:102  Function Definition: main( ( global void)
+0:102    Function Parameters: 
+0:104    Sequence
+0:104      Sequence
+0:104        move second child to first child ( temp uint)
+0:104          'iid' ( temp uint)
+0:104          direct index ( temp uint)
+0:104            'gl_LocalInvocationID' ( in 3-component vector of uint LocalInvocationID)
+0:104            Constant:
+0:104              0 (const int)
+0:105      Sequence
+0:105        move second child to first child ( temp uint)
+0:105          'gid' ( temp uint)
+0:105          direct index ( temp uint)
+0:105            'gl_WorkGroupID' ( in 3-component vector of uint WorkGroupID)
+0:105            Constant:
+0:105              0 (const int)
+0:108      Sequence
+0:108        Sequence
+0:108          move second child to first child ( temp uint)
+0:108            'i' ( temp uint)
+0:108            Constant:
+0:108              0 (const uint)
+0:108        Loop with condition tested first
+0:108          Loop Condition
+0:108          Compare Less Than ( temp bool)
+0:108            'i' ( temp uint)
+0:108            Constant:
+0:108              10 (const uint)
+0:108          Loop Body
+0:109          Sequence
+0:109            move second child to first child ( temp 4-component vector of float)
+0:109              indirect index ( temp 4-component vector of float)
+0:109                'mem' ( shared 10-element array of 4-component vector of float)
+0:109                'i' ( temp uint)
+0:109              Construct vec4 ( temp 4-component vector of float)
+0:109                Convert uint to float ( temp float)
+0:109                  add ( temp uint)
+0:109                    'i' ( temp uint)
+0:109                    uni_value: direct index for structure (layout( column_major shared) uniform uint)
+0:109                      'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:109                      Constant:
+0:109                        0 (const uint)
+0:108          Loop Terminal Expression
+0:108          Pre-Increment ( temp uint)
+0:108            'i' ( temp uint)
+0:111      imageStore ( global void)
+0:111        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:111        Construct ivec2 ( temp 2-component vector of int)
+0:111          Convert uint to int ( temp int)
+0:111            'iid' ( temp uint)
+0:111        indirect index ( temp 4-component vector of float)
+0:111          'mem' ( shared 10-element array of 4-component vector of float)
+0:111          'gid' ( temp uint)
+0:112      imageStore ( global void)
+0:112        'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:112        Construct ivec2 ( temp 2-component vector of int)
+0:112          Convert uint to int ( temp int)
+0:112            'iid' ( temp uint)
+0:112        indirect index ( temp 4-component vector of float)
+0:112          'mem' ( shared 10-element array of 4-component vector of float)
+0:112          add ( temp uint)
+0:112            'gid' ( temp uint)
+0:112            Constant:
+0:112              1 (const uint)
+0:114      MemoryBarrierShared ( global void)
+0:114      Barrier ( global void)
+0:118      move second child to first child ( temp 2-component vector of float)
+0:118        dummy: direct index for structure ( global 2-component vector of float)
+0:118          'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:118          Constant:
+0:118            0 (const int)
+0:118        Constant:
+0:118          30.000000
+0:118          31.000000
+0:119      move second child to first child ( temp 2-component vector of float)
+0:119        direct index ( temp 2-component vector of float)
+0:119          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:119            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:119            Constant:
+0:119              1 (const int)
+0:119          Constant:
+0:119            0 (const int)
+0:119        Constant:
+0:119          32.000000
+0:119          33.000000
+0:120      move second child to first child ( temp 2-component vector of float)
+0:120        direct index ( temp 2-component vector of float)
+0:120          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:120            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:120            Constant:
+0:120              1 (const int)
+0:120          Constant:
+0:120            1 (const int)
+0:120        Constant:
+0:120          34.000000
+0:120          35.000000
+0:121      move second child to first child ( temp 2-component vector of float)
+0:121        direct index ( temp 2-component vector of float)
+0:121          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:121            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:121            Constant:
+0:121              1 (const int)
+0:121          Constant:
+0:121            2 (const int)
+0:121        indirect index ( temp 2-component vector of float)
+0:121          submesh: direct index for structure ( global 3-element array of 2-component vector of float)
+0:121            'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+0:121            Constant:
+0:121              1 (const int)
+0:121          mod ( temp uint)
+0:121            'gid' ( temp uint)
+0:121            Constant:
+0:121              2 (const uint)
+0:123      MemoryBarrierShared ( global void)
+0:123      Barrier ( global void)
+0:126      EmitMeshTasksEXT ( global void)
+0:126        Constant:
+0:126          3 (const uint)
+0:126        Constant:
+0:126          1 (const uint)
+0:126        Constant:
+0:126          1 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       32 (const uint)
+0:?       1 (const uint)
+0:?       1 (const uint)
+0:?     'uni_image' (layout( binding=0) writeonly uniform image2D)
+0:?     'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform uint uni_value})
+0:?     'mem' ( shared 10-element array of 4-component vector of float)
+0:?     'mytask' ( taskPayloadSharedEXT structure{ global 2-component vector of float dummy,  global 3-element array of 2-component vector of float submesh})
+
diff --git a/Test/baseResults/spv.460.subgroupEXT.mesh.out b/Test/baseResults/spv.460.subgroupEXT.mesh.out
new file mode 100644 (file)
index 0000000..350f8d8
--- /dev/null
@@ -0,0 +1,448 @@
+spv.460.subgroupEXT.mesh
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 280
+
+                              Capability ClipDistance
+                              Capability CullDistance
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+                              Capability GroupNonUniformArithmetic
+                              Capability GroupNonUniformBallot
+                              Capability GroupNonUniformShuffle
+                              Capability GroupNonUniformShuffleRelative
+                              Capability GroupNonUniformClustered
+                              Capability GroupNonUniformQuad
+                              Capability FragmentShadingRateKHR
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+                              Extension  "SPV_KHR_fragment_shading_rate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshEXT 4  "main" 35 41 57 109 148 162 163 168 169 172 173 174 175 176
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              SourceExtension  "GL_KHR_shader_subgroup_arithmetic"
+                              SourceExtension  "GL_KHR_shader_subgroup_ballot"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_clustered"
+                              SourceExtension  "GL_KHR_shader_subgroup_quad"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle_relative"
+                              SourceExtension  "GL_KHR_shader_subgroup_vote"
+                              Name 4  "main"
+                              Name 6  "basic_works("
+                              Name 13  "ballot_works(vf4;"
+                              Name 12  "f4"
+                              Name 16  "vote_works(vf4;"
+                              Name 15  "f4"
+                              Name 19  "shuffle_works(vf4;"
+                              Name 18  "f4"
+                              Name 22  "arith_works(vf4;"
+                              Name 21  "f4"
+                              Name 25  "clustered_works(vf4;"
+                              Name 24  "f4"
+                              Name 28  "quad_works(vf4;"
+                              Name 27  "f4"
+                              Name 32  "iid"
+                              Name 35  "gl_LocalInvocationID"
+                              Name 40  "gid"
+                              Name 41  "gl_WorkGroupID"
+                              Name 44  "vertexCount"
+                              Name 46  "primitiveCount"
+                              Name 54  "gl_MeshPerVertexEXT"
+                              MemberName 54(gl_MeshPerVertexEXT) 0  "gl_Position"
+                              MemberName 54(gl_MeshPerVertexEXT) 1  "gl_PointSize"
+                              MemberName 54(gl_MeshPerVertexEXT) 2  "gl_ClipDistance"
+                              MemberName 54(gl_MeshPerVertexEXT) 3  "gl_CullDistance"
+                              Name 57  "gl_MeshVerticesEXT"
+                              Name 106  "gl_MeshPerPrimitiveEXT"
+                              MemberName 106(gl_MeshPerPrimitiveEXT) 0  "gl_PrimitiveID"
+                              MemberName 106(gl_MeshPerPrimitiveEXT) 1  "gl_Layer"
+                              MemberName 106(gl_MeshPerPrimitiveEXT) 2  "gl_ViewportIndex"
+                              MemberName 106(gl_MeshPerPrimitiveEXT) 3  "gl_CullPrimitiveEXT"
+                              MemberName 106(gl_MeshPerPrimitiveEXT) 4  "gl_PrimitiveShadingRateEXT"
+                              Name 109  "gl_MeshPrimitivesEXT"
+                              Name 148  "gl_PrimitiveTriangleIndicesEXT"
+                              Name 162  "gl_SubgroupSize"
+                              Name 163  "gl_SubgroupInvocationID"
+                              Name 168  "gl_NumSubgroups"
+                              Name 169  "gl_SubgroupID"
+                              Name 172  "gl_SubgroupEqMask"
+                              Name 173  "gl_SubgroupGeMask"
+                              Name 174  "gl_SubgroupGtMask"
+                              Name 175  "gl_SubgroupLeMask"
+                              Name 176  "gl_SubgroupLtMask"
+                              Name 182  "ballot"
+                              Name 219  "ballot"
+                              Name 254  "ballot"
+                              Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId
+                              MemberDecorate 54(gl_MeshPerVertexEXT) 0 BuiltIn Position
+                              MemberDecorate 54(gl_MeshPerVertexEXT) 1 BuiltIn PointSize
+                              MemberDecorate 54(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance
+                              MemberDecorate 54(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance
+                              Decorate 54(gl_MeshPerVertexEXT) Block
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR
+                              Decorate 106(gl_MeshPerPrimitiveEXT) Block
+                              Decorate 148(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
+                              Decorate 162(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 162(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 163(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 163(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 168(gl_NumSubgroups) BuiltIn NumSubgroups
+                              Decorate 169(gl_SubgroupID) BuiltIn SubgroupId
+                              Decorate 172(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
+                              Decorate 173(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR
+                              Decorate 174(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
+                              Decorate 175(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
+                              Decorate 176(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
+                              Decorate 279 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+              10:             TypePointer Function 9(fvec4)
+              11:             TypeFunction 2 10(ptr)
+              30:             TypeInt 32 0
+              31:             TypePointer Function 30(int)
+              33:             TypeVector 30(int) 3
+              34:             TypePointer Input 33(ivec3)
+35(gl_LocalInvocationID):     34(ptr) Variable Input
+              36:     30(int) Constant 0
+              37:             TypePointer Input 30(int)
+41(gl_WorkGroupID):     34(ptr) Variable Input
+              45:     30(int) Constant 81
+              47:     30(int) Constant 32
+              50:     30(int) Constant 4
+              51:             TypeArray 8(float) 50
+              52:     30(int) Constant 3
+              53:             TypeArray 8(float) 52
+54(gl_MeshPerVertexEXT):             TypeStruct 9(fvec4) 8(float) 51 53
+              55:             TypeArray 54(gl_MeshPerVertexEXT) 45
+              56:             TypePointer Output 55
+57(gl_MeshVerticesEXT):     56(ptr) Variable Output
+              59:             TypeInt 32 1
+              60:     59(int) Constant 0
+              61:    8(float) Constant 1065353216
+              62:    9(fvec4) ConstantComposite 61 61 61 61
+              63:             TypePointer Output 9(fvec4)
+              66:     59(int) Constant 1
+              67:    8(float) Constant 1073741824
+              68:             TypePointer Output 8(float)
+              71:     59(int) Constant 2
+              72:     59(int) Constant 3
+              73:    8(float) Constant 1077936128
+              76:    8(float) Constant 1082130432
+              78:     30(int) Constant 1
+              79:     30(int) Constant 264
+              80:     30(int) Constant 2
+             105:             TypeBool
+106(gl_MeshPerPrimitiveEXT):             TypeStruct 59(int) 59(int) 59(int) 105(bool) 59(int)
+             107:             TypeArray 106(gl_MeshPerPrimitiveEXT) 47
+             108:             TypePointer Output 107
+109(gl_MeshPrimitivesEXT):    108(ptr) Variable Output
+             111:     59(int) Constant 6
+             112:             TypePointer Output 59(int)
+             115:     59(int) Constant 7
+             118:     59(int) Constant 8
+             121:   105(bool) ConstantFalse
+             122:             TypePointer Output 105(bool)
+             145:     30(int) Constant 96
+             146:             TypeArray 33(ivec3) 145
+             147:             TypePointer Output 146
+148(gl_PrimitiveTriangleIndicesEXT):    147(ptr) Variable Output
+             149:   33(ivec3) ConstantComposite 78 78 78
+             150:             TypePointer Output 33(ivec3)
+             154:   33(ivec3) ConstantComposite 80 80 80
+162(gl_SubgroupSize):     37(ptr) Variable Input
+163(gl_SubgroupInvocationID):     37(ptr) Variable Input
+             164:     30(int) Constant 3400
+             165:     30(int) Constant 72
+             166:     30(int) Constant 2056
+168(gl_NumSubgroups):     37(ptr) Variable Input
+169(gl_SubgroupID):     37(ptr) Variable Input
+             170:             TypeVector 30(int) 4
+             171:             TypePointer Input 170(ivec4)
+172(gl_SubgroupEqMask):    171(ptr) Variable Input
+173(gl_SubgroupGeMask):    171(ptr) Variable Input
+174(gl_SubgroupGtMask):    171(ptr) Variable Input
+175(gl_SubgroupLeMask):    171(ptr) Variable Input
+176(gl_SubgroupLtMask):    171(ptr) Variable Input
+             181:             TypePointer Function 170(ivec4)
+             184:  170(ivec4) ConstantComposite 78 78 78 78
+             198:   105(bool) ConstantTrue
+             255:     30(int) Constant 85
+             256:  170(ivec4) ConstantComposite 255 36 36 36
+             279:   33(ivec3) ConstantComposite 47 78 78
+         4(main):           2 Function None 3
+               5:             Label
+         32(iid):     31(ptr) Variable Function
+         40(gid):     31(ptr) Variable Function
+ 44(vertexCount):     31(ptr) Variable Function
+46(primitiveCount):     31(ptr) Variable Function
+              38:     37(ptr) AccessChain 35(gl_LocalInvocationID) 36
+              39:     30(int) Load 38
+                              Store 32(iid) 39
+              42:     37(ptr) AccessChain 41(gl_WorkGroupID) 36
+              43:     30(int) Load 42
+                              Store 40(gid) 43
+                              Store 44(vertexCount) 45
+                              Store 46(primitiveCount) 47
+              48:     30(int) Load 44(vertexCount)
+              49:     30(int) Load 46(primitiveCount)
+                              SetMeshOutputsEXT 48 49
+              58:     30(int) Load 32(iid)
+              64:     63(ptr) AccessChain 57(gl_MeshVerticesEXT) 58 60
+                              Store 64 62
+              65:     30(int) Load 32(iid)
+              69:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 65 66
+                              Store 69 67
+              70:     30(int) Load 32(iid)
+              74:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 70 71 72
+                              Store 74 73
+              75:     30(int) Load 32(iid)
+              77:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 75 72 71
+                              Store 77 76
+                              MemoryBarrier 78 79
+                              ControlBarrier 80 80 79
+              81:     30(int) Load 32(iid)
+              82:     30(int) IAdd 81 78
+              83:     30(int) Load 32(iid)
+              84:     63(ptr) AccessChain 57(gl_MeshVerticesEXT) 83 60
+              85:    9(fvec4) Load 84
+              86:     63(ptr) AccessChain 57(gl_MeshVerticesEXT) 82 60
+                              Store 86 85
+              87:     30(int) Load 32(iid)
+              88:     30(int) IAdd 87 78
+              89:     30(int) Load 32(iid)
+              90:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 89 66
+              91:    8(float) Load 90
+              92:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 88 66
+                              Store 92 91
+              93:     30(int) Load 32(iid)
+              94:     30(int) IAdd 93 78
+              95:     30(int) Load 32(iid)
+              96:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 95 71 72
+              97:    8(float) Load 96
+              98:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 94 71 72
+                              Store 98 97
+              99:     30(int) Load 32(iid)
+             100:     30(int) IAdd 99 78
+             101:     30(int) Load 32(iid)
+             102:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 101 72 71
+             103:    8(float) Load 102
+             104:     68(ptr) AccessChain 57(gl_MeshVerticesEXT) 100 72 71
+                              Store 104 103
+                              MemoryBarrier 78 79
+                              ControlBarrier 80 80 79
+             110:     30(int) Load 32(iid)
+             113:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 110 60
+                              Store 113 111
+             114:     30(int) Load 32(iid)
+             116:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 114 66
+                              Store 116 115
+             117:     30(int) Load 32(iid)
+             119:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 117 71
+                              Store 119 118
+             120:     30(int) Load 32(iid)
+             123:    122(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 120 72
+                              Store 123 121
+                              MemoryBarrier 78 79
+                              ControlBarrier 80 80 79
+             124:     30(int) Load 32(iid)
+             125:     30(int) IAdd 124 78
+             126:     30(int) Load 32(iid)
+             127:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 126 60
+             128:     59(int) Load 127
+             129:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 125 60
+                              Store 129 128
+             130:     30(int) Load 32(iid)
+             131:     30(int) IAdd 130 78
+             132:     30(int) Load 32(iid)
+             133:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 132 66
+             134:     59(int) Load 133
+             135:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 131 66
+                              Store 135 134
+             136:     30(int) Load 32(iid)
+             137:     30(int) IAdd 136 78
+             138:     30(int) Load 32(iid)
+             139:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 138 71
+             140:     59(int) Load 139
+             141:    112(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 137 71
+                              Store 141 140
+             142:     30(int) Load 32(iid)
+             143:     30(int) IAdd 142 78
+             144:    122(ptr) AccessChain 109(gl_MeshPrimitivesEXT) 143 72
+                              Store 144 121
+                              MemoryBarrier 78 79
+                              ControlBarrier 80 80 79
+             151:    150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 60
+                              Store 151 149
+             152:     30(int) Load 46(primitiveCount)
+             153:     30(int) ISub 152 78
+             155:    150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 153
+                              Store 155 154
+             156:     30(int) Load 40(gid)
+             157:     30(int) Load 40(gid)
+             158:     30(int) ISub 157 78
+             159:    150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 158
+             160:   33(ivec3) Load 159
+             161:    150(ptr) AccessChain 148(gl_PrimitiveTriangleIndicesEXT) 156
+                              Store 161 160
+                              MemoryBarrier 78 79
+                              ControlBarrier 80 80 79
+                              Return
+                              FunctionEnd
+ 6(basic_works():           2 Function None 3
+               7:             Label
+                              ControlBarrier 52 52 164
+                              MemoryBarrier 52 164
+                              MemoryBarrier 52 165
+                              MemoryBarrier 52 166
+             167:   105(bool) GroupNonUniformElect 52
+                              MemoryBarrier 52 79
+                              Return
+                              FunctionEnd
+13(ballot_works(vf4;):           2 Function None 11
+          12(f4):     10(ptr) FunctionParameter
+              14:             Label
+     182(ballot):    181(ptr) Variable Function
+             177:    9(fvec4) Load 12(f4)
+             178:    9(fvec4) GroupNonUniformBroadcast 52 177 36
+             179:    9(fvec4) Load 12(f4)
+             180:    9(fvec4) GroupNonUniformBroadcastFirst 52 179
+             183:  170(ivec4) GroupNonUniformBallot 52 121
+                              Store 182(ballot) 183
+             185:   105(bool) GroupNonUniformInverseBallot 52 184
+             186:  170(ivec4) Load 182(ballot)
+             187:   105(bool) GroupNonUniformBallotBitExtract 52 186 36
+             188:  170(ivec4) Load 182(ballot)
+             189:     30(int) GroupNonUniformBallotBitCount 52 Reduce 188
+             190:  170(ivec4) Load 182(ballot)
+             191:     30(int) GroupNonUniformBallotBitCount 52 InclusiveScan 190
+             192:  170(ivec4) Load 182(ballot)
+             193:     30(int) GroupNonUniformBallotBitCount 52 ExclusiveScan 192
+             194:  170(ivec4) Load 182(ballot)
+             195:     30(int) GroupNonUniformBallotFindLSB 52 194
+             196:  170(ivec4) Load 182(ballot)
+             197:     30(int) GroupNonUniformBallotFindMSB 52 196
+                              Return
+                              FunctionEnd
+16(vote_works(vf4;):           2 Function None 11
+          15(f4):     10(ptr) FunctionParameter
+              17:             Label
+             199:   105(bool) GroupNonUniformAll 52 198
+             200:   105(bool) GroupNonUniformAny 52 121
+             201:    9(fvec4) Load 15(f4)
+             202:   105(bool) GroupNonUniformAllEqual 52 201
+                              Return
+                              FunctionEnd
+19(shuffle_works(vf4;):           2 Function None 11
+          18(f4):     10(ptr) FunctionParameter
+              20:             Label
+             203:    9(fvec4) Load 18(f4)
+             204:    9(fvec4) GroupNonUniformShuffle 52 203 36
+             205:    9(fvec4) Load 18(f4)
+             206:    9(fvec4) GroupNonUniformShuffleXor 52 205 78
+             207:    9(fvec4) Load 18(f4)
+             208:    9(fvec4) GroupNonUniformShuffleUp 52 207 78
+             209:    9(fvec4) Load 18(f4)
+             210:    9(fvec4) GroupNonUniformShuffleDown 52 209 78
+                              Return
+                              FunctionEnd
+22(arith_works(vf4;):           2 Function None 11
+          21(f4):     10(ptr) FunctionParameter
+              23:             Label
+     219(ballot):    181(ptr) Variable Function
+             211:    9(fvec4) Load 21(f4)
+             212:    9(fvec4) GroupNonUniformFAdd 52 Reduce 211
+             213:    9(fvec4) Load 21(f4)
+             214:    9(fvec4) GroupNonUniformFMul 52 Reduce 213
+             215:    9(fvec4) Load 21(f4)
+             216:    9(fvec4) GroupNonUniformFMin 52 Reduce 215
+             217:    9(fvec4) Load 21(f4)
+             218:    9(fvec4) GroupNonUniformFMax 52 Reduce 217
+             220:  170(ivec4) Load 219(ballot)
+             221:  170(ivec4) GroupNonUniformBitwiseAnd 52 Reduce 220
+             222:  170(ivec4) Load 219(ballot)
+             223:  170(ivec4) GroupNonUniformBitwiseOr 52 Reduce 222
+             224:  170(ivec4) Load 219(ballot)
+             225:  170(ivec4) GroupNonUniformBitwiseXor 52 Reduce 224
+             226:    9(fvec4) Load 21(f4)
+             227:    9(fvec4) GroupNonUniformFAdd 52 InclusiveScan 226
+             228:    9(fvec4) Load 21(f4)
+             229:    9(fvec4) GroupNonUniformFMul 52 InclusiveScan 228
+             230:    9(fvec4) Load 21(f4)
+             231:    9(fvec4) GroupNonUniformFMin 52 InclusiveScan 230
+             232:    9(fvec4) Load 21(f4)
+             233:    9(fvec4) GroupNonUniformFMax 52 InclusiveScan 232
+             234:  170(ivec4) Load 219(ballot)
+             235:  170(ivec4) GroupNonUniformBitwiseAnd 52 InclusiveScan 234
+             236:  170(ivec4) Load 219(ballot)
+             237:  170(ivec4) GroupNonUniformBitwiseOr 52 InclusiveScan 236
+             238:  170(ivec4) Load 219(ballot)
+             239:  170(ivec4) GroupNonUniformBitwiseXor 52 InclusiveScan 238
+             240:    9(fvec4) Load 21(f4)
+             241:    9(fvec4) GroupNonUniformFAdd 52 ExclusiveScan 240
+             242:    9(fvec4) Load 21(f4)
+             243:    9(fvec4) GroupNonUniformFMul 52 ExclusiveScan 242
+             244:    9(fvec4) Load 21(f4)
+             245:    9(fvec4) GroupNonUniformFMin 52 ExclusiveScan 244
+             246:    9(fvec4) Load 21(f4)
+             247:    9(fvec4) GroupNonUniformFMax 52 ExclusiveScan 246
+             248:  170(ivec4) Load 219(ballot)
+             249:  170(ivec4) GroupNonUniformBitwiseAnd 52 ExclusiveScan 248
+             250:  170(ivec4) Load 219(ballot)
+             251:  170(ivec4) GroupNonUniformBitwiseOr 52 ExclusiveScan 250
+             252:  170(ivec4) Load 219(ballot)
+             253:  170(ivec4) GroupNonUniformBitwiseXor 52 ExclusiveScan 252
+                              Return
+                              FunctionEnd
+25(clustered_works(vf4;):           2 Function None 11
+          24(f4):     10(ptr) FunctionParameter
+              26:             Label
+     254(ballot):    181(ptr) Variable Function
+                              Store 254(ballot) 256
+             257:    9(fvec4) Load 24(f4)
+             258:    9(fvec4) GroupNonUniformFAdd 52 ClusteredReduce 257 80
+             259:    9(fvec4) Load 24(f4)
+             260:    9(fvec4) GroupNonUniformFMul 52 ClusteredReduce 259 80
+             261:    9(fvec4) Load 24(f4)
+             262:    9(fvec4) GroupNonUniformFMin 52 ClusteredReduce 261 80
+             263:    9(fvec4) Load 24(f4)
+             264:    9(fvec4) GroupNonUniformFMax 52 ClusteredReduce 263 80
+             265:  170(ivec4) Load 254(ballot)
+             266:  170(ivec4) GroupNonUniformBitwiseAnd 52 ClusteredReduce 265 80
+             267:  170(ivec4) Load 254(ballot)
+             268:  170(ivec4) GroupNonUniformBitwiseOr 52 ClusteredReduce 267 80
+             269:  170(ivec4) Load 254(ballot)
+             270:  170(ivec4) GroupNonUniformBitwiseXor 52 ClusteredReduce 269 80
+                              Return
+                              FunctionEnd
+28(quad_works(vf4;):           2 Function None 11
+          27(f4):     10(ptr) FunctionParameter
+              29:             Label
+             271:    9(fvec4) Load 27(f4)
+             272:    9(fvec4) GroupNonUniformQuadBroadcast 52 271 36
+             273:    9(fvec4) Load 27(f4)
+             274:    9(fvec4) GroupNonUniformQuadSwap 52 273 36
+             275:    9(fvec4) Load 27(f4)
+             276:    9(fvec4) GroupNonUniformQuadSwap 52 275 78
+             277:    9(fvec4) Load 27(f4)
+             278:    9(fvec4) GroupNonUniformQuadSwap 52 277 80
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.460.subgroupEXT.task.out b/Test/baseResults/spv.460.subgroupEXT.task.out
new file mode 100644 (file)
index 0000000..9de82ce
--- /dev/null
@@ -0,0 +1,376 @@
+spv.460.subgroupEXT.task
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 242
+
+                              Capability StorageImageWriteWithoutFormat
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+                              Capability GroupNonUniformArithmetic
+                              Capability GroupNonUniformBallot
+                              Capability GroupNonUniformShuffle
+                              Capability GroupNonUniformShuffleRelative
+                              Capability GroupNonUniformClustered
+                              Capability GroupNonUniformQuad
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TaskEXT 4  "main" 35 41 56 61 77 102 122 123 128 129 132 133 134 135 136
+                              ExecutionMode 4 LocalSize 32 1 1
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              SourceExtension  "GL_KHR_shader_subgroup_arithmetic"
+                              SourceExtension  "GL_KHR_shader_subgroup_ballot"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_clustered"
+                              SourceExtension  "GL_KHR_shader_subgroup_quad"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle"
+                              SourceExtension  "GL_KHR_shader_subgroup_shuffle_relative"
+                              SourceExtension  "GL_KHR_shader_subgroup_vote"
+                              Name 4  "main"
+                              Name 6  "basic_works("
+                              Name 13  "ballot_works(vf4;"
+                              Name 12  "f4"
+                              Name 16  "vote_works(vf4;"
+                              Name 15  "f4"
+                              Name 19  "shuffle_works(vf4;"
+                              Name 18  "f4"
+                              Name 22  "arith_works(vf4;"
+                              Name 21  "f4"
+                              Name 25  "clustered_works(vf4;"
+                              Name 24  "f4"
+                              Name 28  "quad_works(vf4;"
+                              Name 27  "f4"
+                              Name 32  "iid"
+                              Name 35  "gl_LocalInvocationID"
+                              Name 40  "gid"
+                              Name 41  "gl_WorkGroupID"
+                              Name 44  "i"
+                              Name 56  "mem"
+                              Name 59  "block0"
+                              MemberName 59(block0) 0  "uni_value"
+                              Name 61  ""
+                              Name 77  "uni_image"
+                              Name 100  "Task"
+                              MemberName 100(Task) 0  "dummy"
+                              MemberName 100(Task) 1  "submesh"
+                              Name 102  "mytask"
+                              Name 122  "gl_SubgroupSize"
+                              Name 123  "gl_SubgroupInvocationID"
+                              Name 128  "gl_NumSubgroups"
+                              Name 129  "gl_SubgroupID"
+                              Name 132  "gl_SubgroupEqMask"
+                              Name 133  "gl_SubgroupGeMask"
+                              Name 134  "gl_SubgroupGtMask"
+                              Name 135  "gl_SubgroupLeMask"
+                              Name 136  "gl_SubgroupLtMask"
+                              Name 142  "ballot"
+                              Name 180  "ballot"
+                              Name 215  "ballot"
+                              Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId
+                              MemberDecorate 59(block0) 0 Offset 0
+                              Decorate 59(block0) Block
+                              Decorate 61 DescriptorSet 0
+                              Decorate 61 Binding 1
+                              Decorate 77(uni_image) DescriptorSet 0
+                              Decorate 77(uni_image) Binding 0
+                              Decorate 77(uni_image) NonReadable
+                              Decorate 122(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 122(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 123(gl_SubgroupInvocationID) RelaxedPrecision
+                              Decorate 123(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 128(gl_NumSubgroups) BuiltIn NumSubgroups
+                              Decorate 129(gl_SubgroupID) BuiltIn SubgroupId
+                              Decorate 132(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR
+                              Decorate 133(gl_SubgroupGeMask) BuiltIn SubgroupGeMaskKHR
+                              Decorate 134(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
+                              Decorate 135(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
+                              Decorate 136(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
+                              Decorate 241 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 4
+              10:             TypePointer Function 9(fvec4)
+              11:             TypeFunction 2 10(ptr)
+              30:             TypeInt 32 0
+              31:             TypePointer Function 30(int)
+              33:             TypeVector 30(int) 3
+              34:             TypePointer Input 33(ivec3)
+35(gl_LocalInvocationID):     34(ptr) Variable Input
+              36:     30(int) Constant 0
+              37:             TypePointer Input 30(int)
+41(gl_WorkGroupID):     34(ptr) Variable Input
+              51:     30(int) Constant 10
+              52:             TypeBool
+              54:             TypeArray 9(fvec4) 51
+              55:             TypePointer Workgroup 54
+         56(mem):     55(ptr) Variable Workgroup
+      59(block0):             TypeStruct 30(int)
+              60:             TypePointer Uniform 59(block0)
+              61:     60(ptr) Variable Uniform
+              62:             TypeInt 32 1
+              63:     62(int) Constant 0
+              64:             TypePointer Uniform 30(int)
+              70:             TypePointer Workgroup 9(fvec4)
+              73:     62(int) Constant 1
+              75:             TypeImage 8(float) 2D nonsampled format:Unknown
+              76:             TypePointer UniformConstant 75
+   77(uni_image):     76(ptr) Variable UniformConstant
+              81:             TypeVector 62(int) 2
+              91:     30(int) Constant 1
+              95:     30(int) Constant 264
+              96:     30(int) Constant 2
+              97:             TypeVector 8(float) 2
+              98:     30(int) Constant 3
+              99:             TypeArray 97(fvec2) 98
+       100(Task):             TypeStruct 97(fvec2) 99
+             101:             TypePointer TaskPayloadWorkgroupEXT 100(Task)
+     102(mytask):    101(ptr) Variable TaskPayloadWorkgroupEXT
+             103:    8(float) Constant 1106247680
+             104:    8(float) Constant 1106771968
+             105:   97(fvec2) ConstantComposite 103 104
+             106:             TypePointer TaskPayloadWorkgroupEXT 97(fvec2)
+             108:    8(float) Constant 1107296256
+             109:    8(float) Constant 1107558400
+             110:   97(fvec2) ConstantComposite 108 109
+             112:    8(float) Constant 1107820544
+             113:    8(float) Constant 1108082688
+             114:   97(fvec2) ConstantComposite 112 113
+             116:     62(int) Constant 2
+122(gl_SubgroupSize):     37(ptr) Variable Input
+123(gl_SubgroupInvocationID):     37(ptr) Variable Input
+             124:     30(int) Constant 3400
+             125:     30(int) Constant 72
+             126:     30(int) Constant 2056
+128(gl_NumSubgroups):     37(ptr) Variable Input
+129(gl_SubgroupID):     37(ptr) Variable Input
+             130:             TypeVector 30(int) 4
+             131:             TypePointer Input 130(ivec4)
+132(gl_SubgroupEqMask):    131(ptr) Variable Input
+133(gl_SubgroupGeMask):    131(ptr) Variable Input
+134(gl_SubgroupGtMask):    131(ptr) Variable Input
+135(gl_SubgroupLeMask):    131(ptr) Variable Input
+136(gl_SubgroupLtMask):    131(ptr) Variable Input
+             141:             TypePointer Function 130(ivec4)
+             143:    52(bool) ConstantFalse
+             145:  130(ivec4) ConstantComposite 91 91 91 91
+             159:    52(bool) ConstantTrue
+             216:     30(int) Constant 85
+             217:  130(ivec4) ConstantComposite 216 36 36 36
+             240:     30(int) Constant 32
+             241:   33(ivec3) ConstantComposite 240 91 91
+         4(main):           2 Function None 3
+               5:             Label
+         32(iid):     31(ptr) Variable Function
+         40(gid):     31(ptr) Variable Function
+           44(i):     31(ptr) Variable Function
+              38:     37(ptr) AccessChain 35(gl_LocalInvocationID) 36
+              39:     30(int) Load 38
+                              Store 32(iid) 39
+              42:     37(ptr) AccessChain 41(gl_WorkGroupID) 36
+              43:     30(int) Load 42
+                              Store 40(gid) 43
+                              Store 44(i) 36
+                              Branch 45
+              45:             Label
+                              LoopMerge 47 48 None
+                              Branch 49
+              49:             Label
+              50:     30(int) Load 44(i)
+              53:    52(bool) ULessThan 50 51
+                              BranchConditional 53 46 47
+              46:               Label
+              57:     30(int)   Load 44(i)
+              58:     30(int)   Load 44(i)
+              65:     64(ptr)   AccessChain 61 63
+              66:     30(int)   Load 65
+              67:     30(int)   IAdd 58 66
+              68:    8(float)   ConvertUToF 67
+              69:    9(fvec4)   CompositeConstruct 68 68 68 68
+              71:     70(ptr)   AccessChain 56(mem) 57
+                                Store 71 69
+                                Branch 48
+              48:               Label
+              72:     30(int)   Load 44(i)
+              74:     30(int)   IAdd 72 73
+                                Store 44(i) 74
+                                Branch 45
+              47:             Label
+              78:          75 Load 77(uni_image)
+              79:     30(int) Load 32(iid)
+              80:     62(int) Bitcast 79
+              82:   81(ivec2) CompositeConstruct 80 80
+              83:     30(int) Load 40(gid)
+              84:     70(ptr) AccessChain 56(mem) 83
+              85:    9(fvec4) Load 84
+                              ImageWrite 78 82 85
+              86:          75 Load 77(uni_image)
+              87:     30(int) Load 32(iid)
+              88:     62(int) Bitcast 87
+              89:   81(ivec2) CompositeConstruct 88 88
+              90:     30(int) Load 40(gid)
+              92:     30(int) IAdd 90 91
+              93:     70(ptr) AccessChain 56(mem) 92
+              94:    9(fvec4) Load 93
+                              ImageWrite 86 89 94
+                              MemoryBarrier 91 95
+                              ControlBarrier 96 96 95
+             107:    106(ptr) AccessChain 102(mytask) 63
+                              Store 107 105
+             111:    106(ptr) AccessChain 102(mytask) 73 63
+                              Store 111 110
+             115:    106(ptr) AccessChain 102(mytask) 73 73
+                              Store 115 114
+             117:     30(int) Load 40(gid)
+             118:     30(int) UMod 117 96
+             119:    106(ptr) AccessChain 102(mytask) 73 118
+             120:   97(fvec2) Load 119
+             121:    106(ptr) AccessChain 102(mytask) 73 116
+                              Store 121 120
+                              MemoryBarrier 91 95
+                              ControlBarrier 96 96 95
+                              EmitMeshTasksEXT 98 91 91 102(mytask)
+                              Return
+                              FunctionEnd
+ 6(basic_works():           2 Function None 3
+               7:             Label
+                              ControlBarrier 98 98 124
+                              MemoryBarrier 98 124
+                              MemoryBarrier 98 125
+                              MemoryBarrier 98 126
+             127:    52(bool) GroupNonUniformElect 98
+                              MemoryBarrier 98 95
+                              Return
+                              FunctionEnd
+13(ballot_works(vf4;):           2 Function None 11
+          12(f4):     10(ptr) FunctionParameter
+              14:             Label
+     142(ballot):    141(ptr) Variable Function
+             137:    9(fvec4) Load 12(f4)
+             138:    9(fvec4) GroupNonUniformBroadcast 98 137 36
+             139:    9(fvec4) Load 12(f4)
+             140:    9(fvec4) GroupNonUniformBroadcastFirst 98 139
+             144:  130(ivec4) GroupNonUniformBallot 98 143
+                              Store 142(ballot) 144
+             146:    52(bool) GroupNonUniformInverseBallot 98 145
+             147:  130(ivec4) Load 142(ballot)
+             148:    52(bool) GroupNonUniformBallotBitExtract 98 147 36
+             149:  130(ivec4) Load 142(ballot)
+             150:     30(int) GroupNonUniformBallotBitCount 98 Reduce 149
+             151:  130(ivec4) Load 142(ballot)
+             152:     30(int) GroupNonUniformBallotBitCount 98 InclusiveScan 151
+             153:  130(ivec4) Load 142(ballot)
+             154:     30(int) GroupNonUniformBallotBitCount 98 ExclusiveScan 153
+             155:  130(ivec4) Load 142(ballot)
+             156:     30(int) GroupNonUniformBallotFindLSB 98 155
+             157:  130(ivec4) Load 142(ballot)
+             158:     30(int) GroupNonUniformBallotFindMSB 98 157
+                              Return
+                              FunctionEnd
+16(vote_works(vf4;):           2 Function None 11
+          15(f4):     10(ptr) FunctionParameter
+              17:             Label
+             160:    52(bool) GroupNonUniformAll 98 159
+             161:    52(bool) GroupNonUniformAny 98 143
+             162:    9(fvec4) Load 15(f4)
+             163:    52(bool) GroupNonUniformAllEqual 98 162
+                              Return
+                              FunctionEnd
+19(shuffle_works(vf4;):           2 Function None 11
+          18(f4):     10(ptr) FunctionParameter
+              20:             Label
+             164:    9(fvec4) Load 18(f4)
+             165:    9(fvec4) GroupNonUniformShuffle 98 164 36
+             166:    9(fvec4) Load 18(f4)
+             167:    9(fvec4) GroupNonUniformShuffleXor 98 166 91
+             168:    9(fvec4) Load 18(f4)
+             169:    9(fvec4) GroupNonUniformShuffleUp 98 168 91
+             170:    9(fvec4) Load 18(f4)
+             171:    9(fvec4) GroupNonUniformShuffleDown 98 170 91
+                              Return
+                              FunctionEnd
+22(arith_works(vf4;):           2 Function None 11
+          21(f4):     10(ptr) FunctionParameter
+              23:             Label
+     180(ballot):    141(ptr) Variable Function
+             172:    9(fvec4) Load 21(f4)
+             173:    9(fvec4) GroupNonUniformFAdd 98 Reduce 172
+             174:    9(fvec4) Load 21(f4)
+             175:    9(fvec4) GroupNonUniformFMul 98 Reduce 174
+             176:    9(fvec4) Load 21(f4)
+             177:    9(fvec4) GroupNonUniformFMin 98 Reduce 176
+             178:    9(fvec4) Load 21(f4)
+             179:    9(fvec4) GroupNonUniformFMax 98 Reduce 178
+             181:  130(ivec4) Load 180(ballot)
+             182:  130(ivec4) GroupNonUniformBitwiseAnd 98 Reduce 181
+             183:  130(ivec4) Load 180(ballot)
+             184:  130(ivec4) GroupNonUniformBitwiseOr 98 Reduce 183
+             185:  130(ivec4) Load 180(ballot)
+             186:  130(ivec4) GroupNonUniformBitwiseXor 98 Reduce 185
+             187:    9(fvec4) Load 21(f4)
+             188:    9(fvec4) GroupNonUniformFAdd 98 InclusiveScan 187
+             189:    9(fvec4) Load 21(f4)
+             190:    9(fvec4) GroupNonUniformFMul 98 InclusiveScan 189
+             191:    9(fvec4) Load 21(f4)
+             192:    9(fvec4) GroupNonUniformFMin 98 InclusiveScan 191
+             193:    9(fvec4) Load 21(f4)
+             194:    9(fvec4) GroupNonUniformFMax 98 InclusiveScan 193
+             195:  130(ivec4) Load 180(ballot)
+             196:  130(ivec4) GroupNonUniformBitwiseAnd 98 InclusiveScan 195
+             197:  130(ivec4) Load 180(ballot)
+             198:  130(ivec4) GroupNonUniformBitwiseOr 98 InclusiveScan 197
+             199:  130(ivec4) Load 180(ballot)
+             200:  130(ivec4) GroupNonUniformBitwiseXor 98 InclusiveScan 199
+             201:    9(fvec4) Load 21(f4)
+             202:    9(fvec4) GroupNonUniformFAdd 98 ExclusiveScan 201
+             203:    9(fvec4) Load 21(f4)
+             204:    9(fvec4) GroupNonUniformFMul 98 ExclusiveScan 203
+             205:    9(fvec4) Load 21(f4)
+             206:    9(fvec4) GroupNonUniformFMin 98 ExclusiveScan 205
+             207:    9(fvec4) Load 21(f4)
+             208:    9(fvec4) GroupNonUniformFMax 98 ExclusiveScan 207
+             209:  130(ivec4) Load 180(ballot)
+             210:  130(ivec4) GroupNonUniformBitwiseAnd 98 ExclusiveScan 209
+             211:  130(ivec4) Load 180(ballot)
+             212:  130(ivec4) GroupNonUniformBitwiseOr 98 ExclusiveScan 211
+             213:  130(ivec4) Load 180(ballot)
+             214:  130(ivec4) GroupNonUniformBitwiseXor 98 ExclusiveScan 213
+                              Return
+                              FunctionEnd
+25(clustered_works(vf4;):           2 Function None 11
+          24(f4):     10(ptr) FunctionParameter
+              26:             Label
+     215(ballot):    141(ptr) Variable Function
+                              Store 215(ballot) 217
+             218:    9(fvec4) Load 24(f4)
+             219:    9(fvec4) GroupNonUniformFAdd 98 ClusteredReduce 218 96
+             220:    9(fvec4) Load 24(f4)
+             221:    9(fvec4) GroupNonUniformFMul 98 ClusteredReduce 220 96
+             222:    9(fvec4) Load 24(f4)
+             223:    9(fvec4) GroupNonUniformFMin 98 ClusteredReduce 222 96
+             224:    9(fvec4) Load 24(f4)
+             225:    9(fvec4) GroupNonUniformFMax 98 ClusteredReduce 224 96
+             226:  130(ivec4) Load 215(ballot)
+             227:  130(ivec4) GroupNonUniformBitwiseAnd 98 ClusteredReduce 226 96
+             228:  130(ivec4) Load 215(ballot)
+             229:  130(ivec4) GroupNonUniformBitwiseOr 98 ClusteredReduce 228 96
+             230:  130(ivec4) Load 215(ballot)
+             231:  130(ivec4) GroupNonUniformBitwiseXor 98 ClusteredReduce 230 96
+                              Return
+                              FunctionEnd
+28(quad_works(vf4;):           2 Function None 11
+          27(f4):     10(ptr) FunctionParameter
+              29:             Label
+             232:    9(fvec4) Load 27(f4)
+             233:    9(fvec4) GroupNonUniformQuadBroadcast 98 232 36
+             234:    9(fvec4) Load 27(f4)
+             235:    9(fvec4) GroupNonUniformQuadSwap 98 234 36
+             236:    9(fvec4) Load 27(f4)
+             237:    9(fvec4) GroupNonUniformQuadSwap 98 236 91
+             238:    9(fvec4) Load 27(f4)
+             239:    9(fvec4) GroupNonUniformQuadSwap 98 238 96
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.atomiAddEXT.error.mesh.out b/Test/baseResults/spv.atomiAddEXT.error.mesh.out
new file mode 100644 (file)
index 0000000..ce8f3d7
--- /dev/null
@@ -0,0 +1,7 @@
+spv.atomiAddEXT.error.mesh
+ERROR: 0:21: 'assign' :  l-value required "mytask" (can't modify variable with storage qualifier taskPayloadSharedEXT in mesh shaders)
+ERROR: 0:21: 'out' : Non-L-value cannot be passed for 'out' or 'inout' parameters. 
+ERROR: 2 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.atomiAddEXT.task.out b/Test/baseResults/spv.atomiAddEXT.task.out
new file mode 100644 (file)
index 0000000..4b58f15
--- /dev/null
@@ -0,0 +1,71 @@
+spv.atomiAddEXT.task
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 34
+
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TaskEXT 4  "main" 9 23 28
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              Name 4  "main"
+                              Name 7  "Buffer"
+                              MemberName 7(Buffer) 0  "x"
+                              Name 9  ""
+                              Name 20  "structType"
+                              MemberName 20(structType) 0  "y"
+                              Name 21  "t2"
+                              MemberName 21(t2) 0  "f"
+                              Name 23  "t"
+                              Name 26  "taskBlock"
+                              MemberName 26(taskBlock) 0  "atom1"
+                              Name 28  "mytask"
+                              MemberDecorate 7(Buffer) 0 Coherent
+                              MemberDecorate 7(Buffer) 0 Offset 0
+                              Decorate 7(Buffer) Block
+                              Decorate 9 DescriptorSet 0
+                              Decorate 9 Binding 1
+                              Decorate 19 ArrayStride 4
+                              MemberDecorate 20(structType) 0 Offset 0
+                              MemberDecorate 21(t2) 0 Offset 0
+                              Decorate 21(t2) Block
+                              Decorate 23(t) DescriptorSet 0
+                              Decorate 23(t) Binding 0
+                              Decorate 33 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+       7(Buffer):             TypeStruct 6(int)
+               8:             TypePointer StorageBuffer 7(Buffer)
+               9:      8(ptr) Variable StorageBuffer
+              10:      6(int) Constant 0
+              11:             TypePointer StorageBuffer 6(int)
+              13:      6(int) Constant 1
+              14:             TypeInt 32 0
+              15:     14(int) Constant 1
+              16:     14(int) Constant 0
+              18:     14(int) Constant 3
+              19:             TypeArray 6(int) 18
+  20(structType):             TypeStruct 19
+          21(t2):             TypeStruct 20(structType)
+              22:             TypePointer StorageBuffer 21(t2)
+           23(t):     22(ptr) Variable StorageBuffer
+   26(taskBlock):             TypeStruct 6(int)
+              27:             TypePointer TaskPayloadWorkgroupEXT 26(taskBlock)
+      28(mytask):     27(ptr) Variable TaskPayloadWorkgroupEXT
+              29:             TypePointer TaskPayloadWorkgroupEXT 6(int)
+              32:             TypeVector 14(int) 3
+              33:   32(ivec3) ConstantComposite 15 15 15
+         4(main):           2 Function None 3
+               5:             Label
+              12:     11(ptr) AccessChain 9 10
+              17:      6(int) AtomicIAdd 12 15 16 13
+              24:     11(ptr) AccessChain 23(t) 10 10 13
+              25:      6(int) AtomicIAdd 24 15 16 13
+              30:     29(ptr) AccessChain 28(mytask) 10
+              31:      6(int) AtomicIAdd 30 15 16 13
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out
new file mode 100644 (file)
index 0000000..ee9c603
--- /dev/null
@@ -0,0 +1,273 @@
+spv.ext.meshShaderBuiltins.mesh
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 159
+
+                              Capability ClipDistance
+                              Capability CullDistance
+                              Capability FragmentShadingRateKHR
+                              Capability DrawParameters
+                              Capability MultiView
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+                              Extension  "SPV_KHR_fragment_shading_rate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshEXT 4  "main" 13 19 24 41 93 135 153 156
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 460
+                              SourceExtension  "GL_ARB_shader_draw_parameters"
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              SourceExtension  "GL_EXT_multiview"
+                              Name 4  "main"
+                              Name 6  "testAdditionalBuiltins("
+                              Name 10  "iid"
+                              Name 13  "gl_LocalInvocationID"
+                              Name 18  "gid"
+                              Name 19  "gl_WorkGroupID"
+                              Name 23  "numWorkGrous"
+                              Name 24  "gl_NumWorkGroups"
+                              Name 26  "vertexCount"
+                              Name 28  "primitiveCount"
+                              Name 38  "gl_MeshPerVertexEXT"
+                              MemberName 38(gl_MeshPerVertexEXT) 0  "gl_Position"
+                              MemberName 38(gl_MeshPerVertexEXT) 1  "gl_PointSize"
+                              MemberName 38(gl_MeshPerVertexEXT) 2  "gl_ClipDistance"
+                              MemberName 38(gl_MeshPerVertexEXT) 3  "gl_CullDistance"
+                              Name 41  "gl_MeshVerticesEXT"
+                              Name 90  "gl_MeshPerPrimitiveEXT"
+                              MemberName 90(gl_MeshPerPrimitiveEXT) 0  "gl_PrimitiveID"
+                              MemberName 90(gl_MeshPerPrimitiveEXT) 1  "gl_Layer"
+                              MemberName 90(gl_MeshPerPrimitiveEXT) 2  "gl_ViewportIndex"
+                              MemberName 90(gl_MeshPerPrimitiveEXT) 3  "gl_CullPrimitiveEXT"
+                              MemberName 90(gl_MeshPerPrimitiveEXT) 4  "gl_PrimitiveShadingRateEXT"
+                              Name 93  "gl_MeshPrimitivesEXT"
+                              Name 135  "gl_PrimitiveTriangleIndicesEXT"
+                              Name 151  "id"
+                              Name 153  "gl_DrawIDARB"
+                              Name 155  "viewIdx"
+                              Name 156  "gl_ViewIndex"
+                              Decorate 13(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId
+                              Decorate 24(gl_NumWorkGroups) BuiltIn NumWorkgroups
+                              MemberDecorate 38(gl_MeshPerVertexEXT) 0 BuiltIn Position
+                              MemberDecorate 38(gl_MeshPerVertexEXT) 1 BuiltIn PointSize
+                              MemberDecorate 38(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance
+                              MemberDecorate 38(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance
+                              Decorate 38(gl_MeshPerVertexEXT) Block
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR
+                              Decorate 90(gl_MeshPerPrimitiveEXT) Block
+                              Decorate 135(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
+                              Decorate 153(gl_DrawIDARB) BuiltIn DrawIndex
+                              Decorate 156(gl_ViewIndex) BuiltIn ViewIndex
+                              Decorate 158 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeInt 32 0
+               9:             TypePointer Function 8(int)
+              11:             TypeVector 8(int) 3
+              12:             TypePointer Input 11(ivec3)
+13(gl_LocalInvocationID):     12(ptr) Variable Input
+              14:      8(int) Constant 0
+              15:             TypePointer Input 8(int)
+19(gl_WorkGroupID):     12(ptr) Variable Input
+              22:             TypePointer Function 11(ivec3)
+24(gl_NumWorkGroups):     12(ptr) Variable Input
+              27:      8(int) Constant 81
+              29:      8(int) Constant 32
+              32:             TypeFloat 32
+              33:             TypeVector 32(float) 4
+              34:      8(int) Constant 4
+              35:             TypeArray 32(float) 34
+              36:      8(int) Constant 3
+              37:             TypeArray 32(float) 36
+38(gl_MeshPerVertexEXT):             TypeStruct 33(fvec4) 32(float) 35 37
+              39:             TypeArray 38(gl_MeshPerVertexEXT) 27
+              40:             TypePointer Output 39
+41(gl_MeshVerticesEXT):     40(ptr) Variable Output
+              43:             TypeInt 32 1
+              44:     43(int) Constant 0
+              45:   32(float) Constant 1065353216
+              46:   33(fvec4) ConstantComposite 45 45 45 45
+              47:             TypePointer Output 33(fvec4)
+              50:     43(int) Constant 1
+              51:   32(float) Constant 1073741824
+              52:             TypePointer Output 32(float)
+              55:     43(int) Constant 2
+              56:     43(int) Constant 3
+              57:   32(float) Constant 1077936128
+              60:   32(float) Constant 1082130432
+              62:      8(int) Constant 1
+              63:      8(int) Constant 264
+              64:      8(int) Constant 2
+              89:             TypeBool
+90(gl_MeshPerPrimitiveEXT):             TypeStruct 43(int) 43(int) 43(int) 89(bool) 43(int)
+              91:             TypeArray 90(gl_MeshPerPrimitiveEXT) 29
+              92:             TypePointer Output 91
+93(gl_MeshPrimitivesEXT):     92(ptr) Variable Output
+              95:     43(int) Constant 6
+              96:             TypePointer Output 43(int)
+              99:     43(int) Constant 7
+             102:     43(int) Constant 8
+             105:    89(bool) ConstantFalse
+             106:             TypePointer Output 89(bool)
+             132:      8(int) Constant 96
+             133:             TypeArray 11(ivec3) 132
+             134:             TypePointer Output 133
+135(gl_PrimitiveTriangleIndicesEXT):    134(ptr) Variable Output
+             136:      8(int) Constant 257
+             137:   11(ivec3) ConstantComposite 136 136 136
+             138:             TypePointer Output 11(ivec3)
+             142:   11(ivec3) ConstantComposite 64 64 64
+             150:             TypePointer Function 43(int)
+             152:             TypePointer Input 43(int)
+153(gl_DrawIDARB):    152(ptr) Variable Input
+156(gl_ViewIndex):    152(ptr) Variable Input
+             158:   11(ivec3) ConstantComposite 29 62 62
+         4(main):           2 Function None 3
+               5:             Label
+         10(iid):      9(ptr) Variable Function
+         18(gid):      9(ptr) Variable Function
+23(numWorkGrous):     22(ptr) Variable Function
+ 26(vertexCount):      9(ptr) Variable Function
+28(primitiveCount):      9(ptr) Variable Function
+              16:     15(ptr) AccessChain 13(gl_LocalInvocationID) 14
+              17:      8(int) Load 16
+                              Store 10(iid) 17
+              20:     15(ptr) AccessChain 19(gl_WorkGroupID) 14
+              21:      8(int) Load 20
+                              Store 18(gid) 21
+              25:   11(ivec3) Load 24(gl_NumWorkGroups)
+                              Store 23(numWorkGrous) 25
+                              Store 26(vertexCount) 27
+                              Store 28(primitiveCount) 29
+              30:      8(int) Load 26(vertexCount)
+              31:      8(int) Load 28(primitiveCount)
+                              SetMeshOutputsEXT 30 31
+              42:      8(int) Load 10(iid)
+              48:     47(ptr) AccessChain 41(gl_MeshVerticesEXT) 42 44
+                              Store 48 46
+              49:      8(int) Load 10(iid)
+              53:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 49 50
+                              Store 53 51
+              54:      8(int) Load 10(iid)
+              58:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 54 55 56
+                              Store 58 57
+              59:      8(int) Load 10(iid)
+              61:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 59 56 55
+                              Store 61 60
+                              MemoryBarrier 62 63
+                              ControlBarrier 64 64 63
+              65:      8(int) Load 10(iid)
+              66:      8(int) IAdd 65 62
+              67:      8(int) Load 10(iid)
+              68:     47(ptr) AccessChain 41(gl_MeshVerticesEXT) 67 44
+              69:   33(fvec4) Load 68
+              70:     47(ptr) AccessChain 41(gl_MeshVerticesEXT) 66 44
+                              Store 70 69
+              71:      8(int) Load 10(iid)
+              72:      8(int) IAdd 71 62
+              73:      8(int) Load 10(iid)
+              74:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 73 50
+              75:   32(float) Load 74
+              76:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 72 50
+                              Store 76 75
+              77:      8(int) Load 10(iid)
+              78:      8(int) IAdd 77 62
+              79:      8(int) Load 10(iid)
+              80:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 79 55 56
+              81:   32(float) Load 80
+              82:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 78 55 56
+                              Store 82 81
+              83:      8(int) Load 10(iid)
+              84:      8(int) IAdd 83 62
+              85:      8(int) Load 10(iid)
+              86:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 85 56 55
+              87:   32(float) Load 86
+              88:     52(ptr) AccessChain 41(gl_MeshVerticesEXT) 84 56 55
+                              Store 88 87
+                              MemoryBarrier 62 63
+                              ControlBarrier 64 64 63
+              94:      8(int) Load 10(iid)
+              97:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 94 44
+                              Store 97 95
+              98:      8(int) Load 10(iid)
+             100:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 98 50
+                              Store 100 99
+             101:      8(int) Load 10(iid)
+             103:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 101 55
+                              Store 103 102
+             104:      8(int) Load 10(iid)
+             107:    106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 104 56
+                              Store 107 105
+                              MemoryBarrier 62 63
+                              ControlBarrier 64 64 63
+             108:      8(int) Load 10(iid)
+             109:      8(int) IAdd 108 62
+             110:      8(int) Load 10(iid)
+             111:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 110 44
+             112:     43(int) Load 111
+             113:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 109 44
+                              Store 113 112
+             114:      8(int) Load 10(iid)
+             115:      8(int) IAdd 114 62
+             116:      8(int) Load 10(iid)
+             117:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 116 50
+             118:     43(int) Load 117
+             119:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 115 50
+                              Store 119 118
+             120:      8(int) Load 10(iid)
+             121:      8(int) IAdd 120 62
+             122:      8(int) Load 10(iid)
+             123:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 122 55
+             124:     43(int) Load 123
+             125:     96(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 121 55
+                              Store 125 124
+             126:      8(int) Load 10(iid)
+             127:      8(int) IAdd 126 62
+             128:      8(int) Load 10(iid)
+             129:    106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 128 56
+             130:    89(bool) Load 129
+             131:    106(ptr) AccessChain 93(gl_MeshPrimitivesEXT) 127 56
+                              Store 131 130
+                              MemoryBarrier 62 63
+                              ControlBarrier 64 64 63
+             139:    138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 44
+                              Store 139 137
+             140:      8(int) Load 28(primitiveCount)
+             141:      8(int) ISub 140 62
+             143:    138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 141
+                              Store 143 142
+             144:      8(int) Load 18(gid)
+             145:      8(int) Load 18(gid)
+             146:      8(int) ISub 145 62
+             147:    138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 146
+             148:   11(ivec3) Load 147
+             149:    138(ptr) AccessChain 135(gl_PrimitiveTriangleIndicesEXT) 144
+                              Store 149 148
+                              MemoryBarrier 62 63
+                              ControlBarrier 64 64 63
+                              Return
+                              FunctionEnd
+6(testAdditionalBuiltins():           2 Function None 3
+               7:             Label
+         151(id):    150(ptr) Variable Function
+    155(viewIdx):    150(ptr) Variable Function
+             154:     43(int) Load 153(gl_DrawIDARB)
+                              Store 151(id) 154
+             157:     43(int) Load 156(gl_ViewIndex)
+                              Store 155(viewIdx) 157
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out
new file mode 100644 (file)
index 0000000..7f2bdf8
--- /dev/null
@@ -0,0 +1,216 @@
+spv.ext.meshShaderRedeclBuiltins.mesh
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 128
+
+                              Capability ClipDistance
+                              Capability CullDistance
+                              Capability FragmentShadingRateKHR
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+                              Extension  "SPV_KHR_fragment_shading_rate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshEXT 4  "main" 11 17 29 81 122
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputPoints
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "gid"
+                              Name 17  "gl_WorkGroupID"
+                              Name 26  "gl_MeshPerVertexEXT"
+                              MemberName 26(gl_MeshPerVertexEXT) 0  "gl_Position"
+                              MemberName 26(gl_MeshPerVertexEXT) 1  "gl_PointSize"
+                              MemberName 26(gl_MeshPerVertexEXT) 2  "gl_ClipDistance"
+                              MemberName 26(gl_MeshPerVertexEXT) 3  "gl_CullDistance"
+                              Name 29  "gl_MeshVerticesEXT"
+                              Name 78  "gl_MeshPerPrimitiveEXT"
+                              MemberName 78(gl_MeshPerPrimitiveEXT) 0  "gl_PrimitiveID"
+                              MemberName 78(gl_MeshPerPrimitiveEXT) 1  "gl_Layer"
+                              MemberName 78(gl_MeshPerPrimitiveEXT) 2  "gl_ViewportIndex"
+                              MemberName 78(gl_MeshPerPrimitiveEXT) 3  "gl_CullPrimitiveEXT"
+                              MemberName 78(gl_MeshPerPrimitiveEXT) 4  "gl_PrimitiveShadingRateEXT"
+                              Name 81  "gl_MeshPrimitivesEXT"
+                              Name 122  "gl_PrimitivePointIndicesEXT"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              MemberDecorate 26(gl_MeshPerVertexEXT) 0 BuiltIn Position
+                              MemberDecorate 26(gl_MeshPerVertexEXT) 1 BuiltIn PointSize
+                              MemberDecorate 26(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance
+                              MemberDecorate 26(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance
+                              Decorate 26(gl_MeshPerVertexEXT) Block
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR
+                              Decorate 78(gl_MeshPerPrimitiveEXT) Block
+                              Decorate 122(gl_PrimitivePointIndicesEXT) BuiltIn PrimitivePointIndicesEXT
+                              Decorate 127 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+17(gl_WorkGroupID):     10(ptr) Variable Input
+              20:      6(int) Constant 81
+              21:      6(int) Constant 32
+              22:             TypeFloat 32
+              23:             TypeVector 22(float) 4
+              24:      6(int) Constant 4
+              25:             TypeArray 22(float) 24
+26(gl_MeshPerVertexEXT):             TypeStruct 23(fvec4) 22(float) 25 25
+              27:             TypeArray 26(gl_MeshPerVertexEXT) 20
+              28:             TypePointer Output 27
+29(gl_MeshVerticesEXT):     28(ptr) Variable Output
+              31:             TypeInt 32 1
+              32:     31(int) Constant 0
+              33:   22(float) Constant 1065353216
+              34:   23(fvec4) ConstantComposite 33 33 33 33
+              35:             TypePointer Output 23(fvec4)
+              38:     31(int) Constant 1
+              39:   22(float) Constant 1073741824
+              40:             TypePointer Output 22(float)
+              43:     31(int) Constant 2
+              44:     31(int) Constant 3
+              45:   22(float) Constant 1077936128
+              48:   22(float) Constant 1082130432
+              50:      6(int) Constant 1
+              51:      6(int) Constant 264
+              52:      6(int) Constant 2
+              77:             TypeBool
+78(gl_MeshPerPrimitiveEXT):             TypeStruct 31(int) 31(int) 31(int) 77(bool) 31(int)
+              79:             TypeArray 78(gl_MeshPerPrimitiveEXT) 21
+              80:             TypePointer Output 79
+81(gl_MeshPrimitivesEXT):     80(ptr) Variable Output
+              83:     31(int) Constant 6
+              84:             TypePointer Output 31(int)
+              87:     31(int) Constant 7
+              90:     31(int) Constant 8
+              93:    77(bool) ConstantFalse
+              94:             TypePointer Output 77(bool)
+             120:             TypeArray 6(int) 21
+             121:             TypePointer Output 120
+122(gl_PrimitivePointIndicesEXT):    121(ptr) Variable Output
+             123:             TypePointer Output 6(int)
+             125:     31(int) Constant 31
+             127:    9(ivec3) ConstantComposite 21 50 50
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+         16(gid):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
+              19:      6(int) Load 18
+                              Store 16(gid) 19
+                              SetMeshOutputsEXT 20 21
+              30:      6(int) Load 8(iid)
+              36:     35(ptr) AccessChain 29(gl_MeshVerticesEXT) 30 32
+                              Store 36 34
+              37:      6(int) Load 8(iid)
+              41:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 37 38
+                              Store 41 39
+              42:      6(int) Load 8(iid)
+              46:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 42 43 44
+                              Store 46 45
+              47:      6(int) Load 8(iid)
+              49:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 47 44 43
+                              Store 49 48
+                              MemoryBarrier 50 51
+                              ControlBarrier 52 52 51
+              53:      6(int) Load 8(iid)
+              54:      6(int) IAdd 53 50
+              55:      6(int) Load 8(iid)
+              56:     35(ptr) AccessChain 29(gl_MeshVerticesEXT) 55 32
+              57:   23(fvec4) Load 56
+              58:     35(ptr) AccessChain 29(gl_MeshVerticesEXT) 54 32
+                              Store 58 57
+              59:      6(int) Load 8(iid)
+              60:      6(int) IAdd 59 50
+              61:      6(int) Load 8(iid)
+              62:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 61 38
+              63:   22(float) Load 62
+              64:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 60 38
+                              Store 64 63
+              65:      6(int) Load 8(iid)
+              66:      6(int) IAdd 65 50
+              67:      6(int) Load 8(iid)
+              68:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 67 43 44
+              69:   22(float) Load 68
+              70:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 66 43 44
+                              Store 70 69
+              71:      6(int) Load 8(iid)
+              72:      6(int) IAdd 71 50
+              73:      6(int) Load 8(iid)
+              74:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 73 44 43
+              75:   22(float) Load 74
+              76:     40(ptr) AccessChain 29(gl_MeshVerticesEXT) 72 44 43
+                              Store 76 75
+                              MemoryBarrier 50 51
+                              ControlBarrier 52 52 51
+              82:      6(int) Load 8(iid)
+              85:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 82 32
+                              Store 85 83
+              86:      6(int) Load 8(iid)
+              88:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 86 38
+                              Store 88 87
+              89:      6(int) Load 8(iid)
+              91:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 89 43
+                              Store 91 90
+              92:      6(int) Load 8(iid)
+              95:     94(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 92 44
+                              Store 95 93
+                              MemoryBarrier 50 51
+                              ControlBarrier 52 52 51
+              96:      6(int) Load 8(iid)
+              97:      6(int) IAdd 96 50
+              98:      6(int) Load 8(iid)
+              99:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 98 32
+             100:     31(int) Load 99
+             101:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 97 32
+                              Store 101 100
+             102:      6(int) Load 8(iid)
+             103:      6(int) IAdd 102 50
+             104:      6(int) Load 8(iid)
+             105:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 104 38
+             106:     31(int) Load 105
+             107:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 103 38
+                              Store 107 106
+             108:      6(int) Load 8(iid)
+             109:      6(int) IAdd 108 50
+             110:      6(int) Load 8(iid)
+             111:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 110 43
+             112:     31(int) Load 111
+             113:     84(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 109 43
+                              Store 113 112
+             114:      6(int) Load 8(iid)
+             115:      6(int) IAdd 114 50
+             116:      6(int) Load 8(iid)
+             117:     94(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 116 44
+             118:    77(bool) Load 117
+             119:     94(ptr) AccessChain 81(gl_MeshPrimitivesEXT) 115 44
+                              Store 119 118
+                              MemoryBarrier 50 51
+                              ControlBarrier 52 52 51
+             124:    123(ptr) AccessChain 122(gl_PrimitivePointIndicesEXT) 32
+                              Store 124 50
+             126:    123(ptr) AccessChain 122(gl_PrimitivePointIndicesEXT) 125
+                              Store 126 52
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out
new file mode 100644 (file)
index 0000000..79b2c65
--- /dev/null
@@ -0,0 +1,102 @@
+spv.ext.meshShaderTaskMem.mesh
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 58
+
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshEXT 4  "main" 11 22 30 38
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 18  "outBlock"
+                              MemberName 18(outBlock) 0  "gid5"
+                              MemberName 18(outBlock) 1  "gid6"
+                              Name 22  "myblk"
+                              Name 28  "taskBlock"
+                              MemberName 28(taskBlock) 0  "gid1"
+                              MemberName 28(taskBlock) 1  "gid2"
+                              Name 30  "mytask"
+                              Name 36  "bufferBlock"
+                              MemberName 36(bufferBlock) 0  "gid3"
+                              MemberName 36(bufferBlock) 1  "gid4"
+                              Name 38  "mybuf"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 18(outBlock) Block
+                              Decorate 22(myblk) Location 0
+                              Decorate 35 ArrayStride 4
+                              MemberDecorate 36(bufferBlock) 0 Offset 0
+                              MemberDecorate 36(bufferBlock) 1 Offset 16
+                              Decorate 36(bufferBlock) Block
+                              Decorate 38(mybuf) DescriptorSet 0
+                              Decorate 38(mybuf) Binding 0
+                              Decorate 57 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+              16:             TypeFloat 32
+              17:             TypeVector 16(float) 4
+    18(outBlock):             TypeStruct 16(float) 17(fvec4)
+              19:      6(int) Constant 81
+              20:             TypeArray 18(outBlock) 19
+              21:             TypePointer Output 20
+       22(myblk):     21(ptr) Variable Output
+              24:             TypeInt 32 1
+              25:     24(int) Constant 0
+              26:      6(int) Constant 2
+              27:             TypeArray 16(float) 26
+   28(taskBlock):             TypeStruct 27 17(fvec4)
+              29:             TypePointer TaskPayloadWorkgroupEXT 28(taskBlock)
+      30(mytask):     29(ptr) Variable TaskPayloadWorkgroupEXT
+              31:     24(int) Constant 1
+              32:             TypePointer TaskPayloadWorkgroupEXT 16(float)
+              35:             TypeArray 16(float) 26
+ 36(bufferBlock):             TypeStruct 35 17(fvec4)
+              37:             TypePointer StorageBuffer 36(bufferBlock)
+       38(mybuf):     37(ptr) Variable StorageBuffer
+              39:             TypePointer StorageBuffer 16(float)
+              43:             TypePointer Output 16(float)
+              46:             TypePointer TaskPayloadWorkgroupEXT 17(fvec4)
+              49:             TypePointer StorageBuffer 17(fvec4)
+              53:             TypePointer Output 17(fvec4)
+              55:      6(int) Constant 32
+              56:      6(int) Constant 1
+              57:    9(ivec3) ConstantComposite 55 56 56
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              23:      6(int) Load 8(iid)
+              33:     32(ptr) AccessChain 30(mytask) 25 31
+              34:   16(float) Load 33
+              40:     39(ptr) AccessChain 38(mybuf) 25 31
+              41:   16(float) Load 40
+              42:   16(float) FAdd 34 41
+              44:     43(ptr) AccessChain 22(myblk) 23 25
+                              Store 44 42
+              45:      6(int) Load 8(iid)
+              47:     46(ptr) AccessChain 30(mytask) 31
+              48:   17(fvec4) Load 47
+              50:     49(ptr) AccessChain 38(mybuf) 31
+              51:   17(fvec4) Load 50
+              52:   17(fvec4) FAdd 48 51
+              54:     53(ptr) AccessChain 22(myblk) 45 31
+                              Store 54 52
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out
new file mode 100644 (file)
index 0000000..d9d74ab
--- /dev/null
@@ -0,0 +1,208 @@
+spv.ext.meshShaderUserDefined.mesh
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 141
+
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint MeshEXT 4  "main" 11 17 34 104
+                              ExecutionMode 4 LocalSize 32 1 1
+                              ExecutionMode 4 OutputVertices 81
+                              ExecutionMode 4 OutputPrimitivesNV 32
+                              ExecutionMode 4 OutputTrianglesNV
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "gid"
+                              Name 17  "gl_WorkGroupID"
+                              Name 30  "myblock"
+                              MemberName 30(myblock) 0  "f"
+                              MemberName 30(myblock) 1  "fArr"
+                              MemberName 30(myblock) 2  "pos"
+                              MemberName 30(myblock) 3  "posArr"
+                              MemberName 30(myblock) 4  "m"
+                              MemberName 30(myblock) 5  "mArr"
+                              Name 34  "blk"
+                              Name 100  "myblock2"
+                              MemberName 100(myblock2) 0  "f"
+                              MemberName 100(myblock2) 1  "pos"
+                              MemberName 100(myblock2) 2  "m"
+                              Name 104  "blk2"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              MemberDecorate 30(myblock) 0 PerPrimitiveNV
+                              MemberDecorate 30(myblock) 1 PerPrimitiveNV
+                              MemberDecorate 30(myblock) 2 PerPrimitiveNV
+                              MemberDecorate 30(myblock) 3 PerPrimitiveNV
+                              MemberDecorate 30(myblock) 4 PerPrimitiveNV
+                              MemberDecorate 30(myblock) 5 PerPrimitiveNV
+                              Decorate 30(myblock) Block
+                              Decorate 34(blk) Location 0
+                              Decorate 100(myblock2) Block
+                              Decorate 104(blk2) Location 20
+                              Decorate 140 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+17(gl_WorkGroupID):     10(ptr) Variable Input
+              20:             TypeFloat 32
+              21:      6(int) Constant 4
+              22:             TypeArray 20(float) 21
+              23:             TypeVector 20(float) 3
+              24:             TypeVector 20(float) 4
+              25:             TypeArray 24(fvec4) 21
+              26:             TypeMatrix 24(fvec4) 4
+              27:             TypeMatrix 23(fvec3) 3
+              28:      6(int) Constant 2
+              29:             TypeArray 27 28
+     30(myblock):             TypeStruct 20(float) 22 23(fvec3) 25 26 29
+              31:      6(int) Constant 32
+              32:             TypeArray 30(myblock) 31
+              33:             TypePointer Output 32
+         34(blk):     33(ptr) Variable Output
+              36:             TypeInt 32 1
+              37:     36(int) Constant 0
+              38:   20(float) Constant 1093664768
+              39:             TypePointer Output 20(float)
+              42:      6(int) Constant 1
+              44:     36(int) Constant 1
+              52:     36(int) Constant 2
+              53:   20(float) Constant 1096810496
+              54:   20(float) Constant 1097859072
+              55:   20(float) Constant 1095761920
+              56:   23(fvec3) ConstantComposite 53 54 55
+              57:             TypePointer Output 23(fvec3)
+              63:     36(int) Constant 3
+              72:      6(int) Constant 3
+              77:     36(int) Constant 4
+              78:   20(float) Constant 1098907648
+              79:   24(fvec4) ConstantComposite 55 53 54 78
+              80:             TypePointer Output 24(fvec4)
+              85:     36(int) Constant 5
+              94:   20(float) Constant 1099431936
+              95:   20(float) Constant 1099956224
+              96:   20(float) Constant 1100480512
+              97:   23(fvec3) ConstantComposite 94 95 96
+              99:      6(int) Constant 264
+   100(myblock2):             TypeStruct 20(float) 24(fvec4) 26
+             101:      6(int) Constant 81
+             102:             TypeArray 100(myblock2) 101
+             103:             TypePointer Output 102
+       104(blk2):    103(ptr) Variable Output
+             110:   20(float) Constant 1101004800
+             114:   20(float) Constant 1101529088
+             115:   20(float) Constant 1102053376
+             116:   20(float) Constant 1102577664
+             117:   20(float) Constant 1103101952
+             118:   24(fvec4) ConstantComposite 114 115 116 117
+             130:   20(float) Constant 1105723392
+             140:    9(ivec3) ConstantComposite 31 42 42
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+         16(gid):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
+              19:      6(int) Load 18
+                              Store 16(gid) 19
+              35:      6(int) Load 8(iid)
+              40:     39(ptr) AccessChain 34(blk) 35 37
+                              Store 40 38
+              41:      6(int) Load 8(iid)
+              43:      6(int) IAdd 41 42
+              45:      6(int) Load 16(gid)
+              46:      6(int) Load 8(iid)
+              47:     39(ptr) AccessChain 34(blk) 46 37
+              48:   20(float) Load 47
+              49:     39(ptr) AccessChain 34(blk) 43 44 45
+                              Store 49 48
+              50:      6(int) Load 8(iid)
+              51:      6(int) UDiv 50 28
+              58:     57(ptr) AccessChain 34(blk) 51 52
+              59:   23(fvec3) Load 58
+              60:   23(fvec3) VectorShuffle 59 56 5 3 4
+                              Store 58 60
+              61:      6(int) Load 8(iid)
+              62:      6(int) IMul 61 28
+              64:      6(int) Load 8(iid)
+              65:      6(int) UDiv 64 28
+              66:     57(ptr) AccessChain 34(blk) 65 52
+              67:   23(fvec3) Load 66
+              68:     39(ptr) AccessChain 34(blk) 62 63 44 42
+              69:   20(float) CompositeExtract 67 0
+                              Store 68 69
+              70:     39(ptr) AccessChain 34(blk) 62 63 44 28
+              71:   20(float) CompositeExtract 67 1
+                              Store 70 71
+              73:     39(ptr) AccessChain 34(blk) 62 63 44 72
+              74:   20(float) CompositeExtract 67 2
+                              Store 73 74
+              75:      6(int) Load 8(iid)
+              76:      6(int) UDiv 75 21
+              81:     80(ptr) AccessChain 34(blk) 76 77 52
+              82:   24(fvec4) Load 81
+              83:   24(fvec4) VectorShuffle 82 79 7 6 5 4
+                              Store 81 83
+              84:      6(int) Load 8(iid)
+              86:      6(int) Load 8(iid)
+              87:      6(int) UDiv 86 21
+              88:     39(ptr) AccessChain 34(blk) 87 77 52 72
+              89:   20(float) Load 88
+              90:     39(ptr) AccessChain 34(blk) 84 85 37 44 42
+                              Store 90 89
+              91:      6(int) Load 8(iid)
+              92:      6(int) IMul 91 21
+              93:      6(int) Load 16(gid)
+              98:     57(ptr) AccessChain 34(blk) 92 85 44 93
+                              Store 98 97
+                              MemoryBarrier 42 99
+                              ControlBarrier 28 28 99
+             105:      6(int) Load 8(iid)
+             106:      6(int) Load 8(iid)
+             107:      6(int) ISub 106 42
+             108:     39(ptr) AccessChain 104(blk2) 107 37
+             109:   20(float) Load 108
+             111:   20(float) FAdd 109 110
+             112:     39(ptr) AccessChain 104(blk2) 105 37
+                              Store 112 111
+             113:      6(int) Load 8(iid)
+             119:     80(ptr) AccessChain 104(blk2) 113 44
+                              Store 119 118
+             120:      6(int) Load 8(iid)
+             121:      6(int) IAdd 120 42
+             122:      6(int) Load 16(gid)
+             123:      6(int) Load 8(iid)
+             124:     80(ptr) AccessChain 104(blk2) 123 44
+             125:   24(fvec4) Load 124
+             126:     80(ptr) AccessChain 104(blk2) 121 52 122
+                              Store 126 125
+             127:      6(int) Load 8(iid)
+             128:      6(int) IAdd 127 42
+             129:      6(int) Load 16(gid)
+             131:     39(ptr) AccessChain 104(blk2) 128 52 129 28
+                              Store 131 130
+             132:      6(int) Load 8(iid)
+             133:      6(int) IAdd 132 28
+             134:      6(int) Load 8(iid)
+             135:      6(int) IAdd 134 42
+             136:      6(int) Load 16(gid)
+             137:     80(ptr) AccessChain 104(blk2) 135 52 136
+             138:   24(fvec4) Load 137
+             139:     80(ptr) AccessChain 104(blk2) 133 52 63
+                              Store 139 138
+                              MemoryBarrier 42 99
+                              ControlBarrier 28 28 99
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.ext.meshTaskShader.task.out b/Test/baseResults/spv.ext.meshTaskShader.task.out
new file mode 100644 (file)
index 0000000..dd6796e
--- /dev/null
@@ -0,0 +1,163 @@
+spv.ext.meshTaskShader.task
+// Module Version 10400
+// Generated by (magic number): 8000a
+// Id's are bound by 102
+
+                              Capability StorageImageWriteWithoutFormat
+                              Capability MeshShadingEXT
+                              Extension  "SPV_EXT_mesh_shader"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint TaskEXT 4  "main" 11 17 34 39 55 80
+                              ExecutionMode 4 LocalSize 32 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_mesh_shader"
+                              Name 4  "main"
+                              Name 8  "iid"
+                              Name 11  "gl_LocalInvocationID"
+                              Name 16  "gid"
+                              Name 17  "gl_WorkGroupID"
+                              Name 20  "i"
+                              Name 34  "mem"
+                              Name 37  "block0"
+                              MemberName 37(block0) 0  "uni_value"
+                              Name 39  ""
+                              Name 55  "uni_image"
+                              Name 78  "Task"
+                              MemberName 78(Task) 0  "dummy"
+                              MemberName 78(Task) 1  "submesh"
+                              Name 80  "mytask"
+                              Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
+                              Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              MemberDecorate 37(block0) 0 Offset 0
+                              Decorate 37(block0) Block
+                              Decorate 39 DescriptorSet 0
+                              Decorate 39 Binding 1
+                              Decorate 55(uni_image) DescriptorSet 0
+                              Decorate 55(uni_image) Binding 0
+                              Decorate 55(uni_image) NonReadable
+                              Decorate 101 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+               9:             TypeVector 6(int) 3
+              10:             TypePointer Input 9(ivec3)
+11(gl_LocalInvocationID):     10(ptr) Variable Input
+              12:      6(int) Constant 0
+              13:             TypePointer Input 6(int)
+17(gl_WorkGroupID):     10(ptr) Variable Input
+              27:      6(int) Constant 10
+              28:             TypeBool
+              30:             TypeFloat 32
+              31:             TypeVector 30(float) 4
+              32:             TypeArray 31(fvec4) 27
+              33:             TypePointer Workgroup 32
+         34(mem):     33(ptr) Variable Workgroup
+      37(block0):             TypeStruct 6(int)
+              38:             TypePointer Uniform 37(block0)
+              39:     38(ptr) Variable Uniform
+              40:             TypeInt 32 1
+              41:     40(int) Constant 0
+              42:             TypePointer Uniform 6(int)
+              48:             TypePointer Workgroup 31(fvec4)
+              51:     40(int) Constant 1
+              53:             TypeImage 30(float) 2D nonsampled format:Unknown
+              54:             TypePointer UniformConstant 53
+   55(uni_image):     54(ptr) Variable UniformConstant
+              59:             TypeVector 40(int) 2
+              69:      6(int) Constant 1
+              73:      6(int) Constant 264
+              74:      6(int) Constant 2
+              75:             TypeVector 30(float) 2
+              76:      6(int) Constant 3
+              77:             TypeArray 75(fvec2) 76
+        78(Task):             TypeStruct 75(fvec2) 77
+              79:             TypePointer TaskPayloadWorkgroupEXT 78(Task)
+      80(mytask):     79(ptr) Variable TaskPayloadWorkgroupEXT
+              81:   30(float) Constant 1106247680
+              82:   30(float) Constant 1106771968
+              83:   75(fvec2) ConstantComposite 81 82
+              84:             TypePointer TaskPayloadWorkgroupEXT 75(fvec2)
+              86:   30(float) Constant 1107296256
+              87:   30(float) Constant 1107558400
+              88:   75(fvec2) ConstantComposite 86 87
+              90:   30(float) Constant 1107820544
+              91:   30(float) Constant 1108082688
+              92:   75(fvec2) ConstantComposite 90 91
+              94:     40(int) Constant 2
+             100:      6(int) Constant 32
+             101:    9(ivec3) ConstantComposite 100 69 69
+         4(main):           2 Function None 3
+               5:             Label
+          8(iid):      7(ptr) Variable Function
+         16(gid):      7(ptr) Variable Function
+           20(i):      7(ptr) Variable Function
+              14:     13(ptr) AccessChain 11(gl_LocalInvocationID) 12
+              15:      6(int) Load 14
+                              Store 8(iid) 15
+              18:     13(ptr) AccessChain 17(gl_WorkGroupID) 12
+              19:      6(int) Load 18
+                              Store 16(gid) 19
+                              Store 20(i) 12
+                              Branch 21
+              21:             Label
+                              LoopMerge 23 24 None
+                              Branch 25
+              25:             Label
+              26:      6(int) Load 20(i)
+              29:    28(bool) ULessThan 26 27
+                              BranchConditional 29 22 23
+              22:               Label
+              35:      6(int)   Load 20(i)
+              36:      6(int)   Load 20(i)
+              43:     42(ptr)   AccessChain 39 41
+              44:      6(int)   Load 43
+              45:      6(int)   IAdd 36 44
+              46:   30(float)   ConvertUToF 45
+              47:   31(fvec4)   CompositeConstruct 46 46 46 46
+              49:     48(ptr)   AccessChain 34(mem) 35
+                                Store 49 47
+                                Branch 24
+              24:               Label
+              50:      6(int)   Load 20(i)
+              52:      6(int)   IAdd 50 51
+                                Store 20(i) 52
+                                Branch 21
+              23:             Label
+              56:          53 Load 55(uni_image)
+              57:      6(int) Load 8(iid)
+              58:     40(int) Bitcast 57
+              60:   59(ivec2) CompositeConstruct 58 58
+              61:      6(int) Load 16(gid)
+              62:     48(ptr) AccessChain 34(mem) 61
+              63:   31(fvec4) Load 62
+                              ImageWrite 56 60 63
+              64:          53 Load 55(uni_image)
+              65:      6(int) Load 8(iid)
+              66:     40(int) Bitcast 65
+              67:   59(ivec2) CompositeConstruct 66 66
+              68:      6(int) Load 16(gid)
+              70:      6(int) IAdd 68 69
+              71:     48(ptr) AccessChain 34(mem) 70
+              72:   31(fvec4) Load 71
+                              ImageWrite 64 67 72
+                              MemoryBarrier 69 73
+                              ControlBarrier 74 74 73
+              85:     84(ptr) AccessChain 80(mytask) 41
+                              Store 85 83
+              89:     84(ptr) AccessChain 80(mytask) 51 41
+                              Store 89 88
+              93:     84(ptr) AccessChain 80(mytask) 51 51
+                              Store 93 92
+              95:      6(int) Load 16(gid)
+              96:      6(int) UMod 95 74
+              97:     84(ptr) AccessChain 80(mytask) 51 96
+              98:   75(fvec2) Load 97
+              99:     84(ptr) AccessChain 80(mytask) 51 94
+                              Store 99 98
+                              MemoryBarrier 69 73
+                              ControlBarrier 74 74 73
+                              EmitMeshTasksEXT 76 69 69 80(mytask)
+                              Return
+                              FunctionEnd
index 98b2a84..e4cf409 100644 (file)
@@ -90,6 +90,15 @@ MaxTaskWorkGroupSizeX_NV 32
 MaxTaskWorkGroupSizeY_NV 1
 MaxTaskWorkGroupSizeZ_NV 1
 MaxMeshViewCountNV 4
+MaxMeshOutputVerticesEXT 256
+MaxMeshOutputPrimitivesEXT 256
+MaxMeshWorkGroupSizeX_EXT 128
+MaxMeshWorkGroupSizeY_EXT 128
+MaxMeshWorkGroupSizeZ_EXT 128
+MaxTaskWorkGroupSizeX_EXT 128
+MaxTaskWorkGroupSizeY_EXT 128
+MaxTaskWorkGroupSizeZ_EXT 128
+MaxMeshViewCountEXT 4
 MaxDualSourceDrawBuffersEXT 1
 nonInductiveForLoops 1
 whileLoops 1
diff --git a/Test/spv.460.subgroupEXT.mesh b/Test/spv.460.subgroupEXT.mesh
new file mode 100644 (file)
index 0000000..8ccc14e
--- /dev/null
@@ -0,0 +1,164 @@
+#version 460
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32, local_size_y=1, local_size_z=1) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of builtins in mesh shaders:
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+    uint vertexCount = MAX_VER; // vertexCount <= max_vertices
+    uint primitiveCount = MAX_PRIM; // primitiveCount <= max_primtives
+    SetMeshOutputsEXT(vertexCount, primitiveCount);
+
+    gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0);
+    gl_MeshVerticesEXT[iid].gl_PointSize = 2.0;
+    gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0;
+    gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0;
+
+    BARRIER();
+
+    gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position;
+    gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize;
+    gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3];
+    gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2];
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6;
+    gl_MeshPrimitivesEXT[iid].gl_Layer = 7;
+    gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8;
+    gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false;
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID;
+    gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer;
+    gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex;
+    gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = false;
+
+    BARRIER();
+
+    // check bound limits
+    gl_PrimitiveTriangleIndicesEXT[0] = uvec3(1, 1, 1); // range is between [0, vertexCount-1]
+    gl_PrimitiveTriangleIndicesEXT[primitiveCount - 1] = uvec3(2, 2, 2); // array size is primitiveCount*3 for triangle
+    gl_PrimitiveTriangleIndicesEXT[gid] = gl_PrimitiveTriangleIndicesEXT[gid-1];
+
+
+    BARRIER();
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+  gl_NumSubgroups;                  // allowed in mesh
+  gl_SubgroupID;                    // allowed in mesh
+  subgroupMemoryBarrierShared();    // allowed in mesh
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
diff --git a/Test/spv.460.subgroupEXT.task b/Test/spv.460.subgroupEXT.task
new file mode 100644 (file)
index 0000000..cffe98e
--- /dev/null
@@ -0,0 +1,153 @@
+#version 460
+
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32, local_size_y=1, local_size_z=1) in;
+
+// test use of shared memory in task shaders:
+layout(binding=0) writeonly uniform image2D uni_image;
+uniform block0 {
+    uint uni_value;
+};
+shared vec4 mem[10];
+
+// test use of task memory in task shaders:
+struct Task {
+    vec2 dummy;
+    vec2 submesh[3];
+};
+
+taskPayloadSharedEXT Task mytask;
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    // 1. shared memory load and stores
+    for (uint i = 0; i < 10; ++i) {
+        mem[i] = vec4(i + uni_value);
+    }
+    imageStore(uni_image, ivec2(iid), mem[gid]);
+    imageStore(uni_image, ivec2(iid), mem[gid+1]);
+
+    BARRIER();
+
+    // 2. task memory stores
+
+    mytask.dummy      = vec2(30.0, 31.0);
+    mytask.submesh[0] = vec2(32.0, 33.0);
+    mytask.submesh[1] = vec2(34.0, 35.0);
+    mytask.submesh[2] = mytask.submesh[gid%2];
+
+    BARRIER();
+
+    // 3. emit task count under uniform control flow
+    EmitMeshTasksEXT(3U, 1U, 1U);
+}
+
+#extension GL_KHR_shader_subgroup_basic: enable
+void basic_works (void)
+{
+  gl_SubgroupSize;
+  gl_SubgroupInvocationID;
+  subgroupBarrier();
+  subgroupMemoryBarrier();
+  subgroupMemoryBarrierBuffer();
+  subgroupMemoryBarrierImage();
+  subgroupElect();
+  gl_NumSubgroups;                  // allowed in task
+  gl_SubgroupID;                    // allowed in task
+  subgroupMemoryBarrierShared();    // allowed in task
+}
+
+#extension GL_KHR_shader_subgroup_ballot: enable
+void ballot_works(vec4 f4) {
+  gl_SubgroupEqMask;
+  gl_SubgroupGeMask;
+  gl_SubgroupGtMask;
+  gl_SubgroupLeMask;
+  gl_SubgroupLtMask;
+  subgroupBroadcast(f4, 0);
+  subgroupBroadcastFirst(f4);
+  uvec4 ballot = subgroupBallot(false);
+  subgroupInverseBallot(uvec4(0x1));
+  subgroupBallotBitExtract(ballot, 0);
+  subgroupBallotBitCount(ballot);
+  subgroupBallotInclusiveBitCount(ballot);
+  subgroupBallotExclusiveBitCount(ballot);
+  subgroupBallotFindLSB(ballot);
+  subgroupBallotFindMSB(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_vote: enable
+void vote_works(vec4 f4)
+{
+  subgroupAll(true);
+  subgroupAny(false);
+  subgroupAllEqual(f4);
+}
+
+#extension GL_KHR_shader_subgroup_shuffle: enable
+#extension GL_KHR_shader_subgroup_shuffle_relative: enable
+void shuffle_works(vec4 f4)
+{
+  subgroupShuffle(f4, 0);
+  subgroupShuffleXor(f4, 0x1);
+  subgroupShuffleUp(f4, 1);
+  subgroupShuffleDown(f4, 1);
+}
+
+#extension GL_KHR_shader_subgroup_arithmetic: enable
+void arith_works(vec4 f4)
+{
+  uvec4 ballot;
+  subgroupAdd(f4);
+  subgroupMul(f4);
+  subgroupMin(f4);
+  subgroupMax(f4);
+  subgroupAnd(ballot);
+  subgroupOr(ballot);
+  subgroupXor(ballot);
+  subgroupInclusiveAdd(f4);
+  subgroupInclusiveMul(f4);
+  subgroupInclusiveMin(f4);
+  subgroupInclusiveMax(f4);
+  subgroupInclusiveAnd(ballot);
+  subgroupInclusiveOr(ballot);
+  subgroupInclusiveXor(ballot);
+  subgroupExclusiveAdd(f4);
+  subgroupExclusiveMul(f4);
+  subgroupExclusiveMin(f4);
+  subgroupExclusiveMax(f4);
+  subgroupExclusiveAnd(ballot);
+  subgroupExclusiveOr(ballot);
+  subgroupExclusiveXor(ballot);
+}
+
+#extension GL_KHR_shader_subgroup_clustered: enable
+void clustered_works(vec4 f4)
+{
+  uvec4 ballot = uvec4(0x55,0,0,0);
+  subgroupClusteredAdd(f4, 2);
+  subgroupClusteredMul(f4, 2);
+  subgroupClusteredMin(f4, 2);
+  subgroupClusteredMax(f4, 2);
+  subgroupClusteredAnd(ballot, 2);
+  subgroupClusteredOr(ballot, 2);
+  subgroupClusteredXor(ballot, 2);
+}
+
+#extension GL_KHR_shader_subgroup_quad: enable
+void quad_works(vec4 f4)
+{
+  subgroupQuadBroadcast(f4, 0);
+  subgroupQuadSwapHorizontal(f4);
+  subgroupQuadSwapVertical(f4);
+  subgroupQuadSwapDiagonal(f4);
+}
+
diff --git a/Test/spv.atomiAddEXT.error.mesh b/Test/spv.atomiAddEXT.error.mesh
new file mode 100644 (file)
index 0000000..5d4247d
--- /dev/null
@@ -0,0 +1,22 @@
+#version 460\r
+#extension GL_EXT_mesh_shader : enable\r
+\r
+#define MAX_VER  81\r
+#define MAX_PRIM 32\r
+\r
+layout(local_size_x = 1) in;\r
+\r
+layout(max_vertices=MAX_VER) out;\r
+layout(max_primitives=MAX_PRIM) out;\r
+layout(triangles) out;\r
+\r
+// use of storage qualifier "taskPayloadSharedEXT" in mesh shaders:\r
+struct taskBlock {\r
+    int atom1;\r
+};\r
+taskPayloadSharedEXT taskBlock mytask;\r
+\r
+\r
+void main() {\r
+  atomicAdd(mytask.atom1, 1);\r
+}
\ No newline at end of file
diff --git a/Test/spv.atomiAddEXT.task b/Test/spv.atomiAddEXT.task
new file mode 100644 (file)
index 0000000..703117d
--- /dev/null
@@ -0,0 +1,27 @@
+#version 460\r
+#extension GL_EXT_mesh_shader : enable\r
+\r
+layout(local_size_x = 1) in;\r
+\r
+struct structType{\r
+    int y[3];\r
+};\r
+\r
+layout(std430) buffer t2 {\r
+    structType f;\r
+} t;\r
+\r
+buffer coherent Buffer { int x; };\r
+\r
+// use of storage qualifier "taskPayloadSharedEXT" in mesh shaders:\r
+struct taskBlock {\r
+    int atom1;\r
+};\r
+taskPayloadSharedEXT taskBlock mytask;\r
+\r
+\r
+void main() {\r
+  atomicAdd(x, 1);\r
+  atomicAdd(t.f.y[1], 1);\r
+  atomicAdd(mytask.atom1, 1);\r
+}
\ No newline at end of file
diff --git a/Test/spv.ext.meshShaderBuiltins.mesh b/Test/spv.ext.meshShaderBuiltins.mesh
new file mode 100644 (file)
index 0000000..70a9736
--- /dev/null
@@ -0,0 +1,74 @@
+#version 460
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32, local_size_y=1, local_size_z=1) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of builtins in mesh shaders:
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+    uvec3 numWorkGrous = gl_NumWorkGroups;
+    uint vertexCount = MAX_VER; // vertexCount <= max_vertices
+    uint primitiveCount = MAX_PRIM; // primitiveCount <= max_primtives
+    SetMeshOutputsEXT(vertexCount, primitiveCount);
+
+    gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0);
+    gl_MeshVerticesEXT[iid].gl_PointSize = 2.0;
+    gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0;
+    gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0;
+
+    BARRIER();
+
+    gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position;
+    gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize;
+    gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3];
+    gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2];
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6;
+    gl_MeshPrimitivesEXT[iid].gl_Layer = 7;
+    gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8;
+    gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false;
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID;
+    gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer;
+    gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex;
+    gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT;
+
+    BARRIER();
+
+    // check bound limits
+    gl_PrimitiveTriangleIndicesEXT[0] = uvec3(257); // should truncate 257 -> 1, range is between [0, vertexCount-1]
+    gl_PrimitiveTriangleIndicesEXT[primitiveCount - 1] = uvec3(2); // array size is primitiveCount*3 for triangle
+    gl_PrimitiveTriangleIndicesEXT[gid] = gl_PrimitiveTriangleIndicesEXT[gid-1];
+
+    BARRIER();
+}
+
+// test use of builtins enabled by other extensions
+#extension GL_ARB_shader_draw_parameters : enable
+#extension GL_EXT_multiview : enable
+
+void testAdditionalBuiltins()
+{
+    int id = gl_DrawIDARB; // GL_ARB_shader_draw_parameters
+    int viewIdx = gl_ViewIndex; // GL_EXT_multiview
+   
+}
\ No newline at end of file
diff --git a/Test/spv.ext.meshShaderRedeclBuiltins.mesh b/Test/spv.ext.meshShaderRedeclBuiltins.mesh
new file mode 100644 (file)
index 0000000..8b67034
--- /dev/null
@@ -0,0 +1,75 @@
+#version 460
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(points) out;
+
+// test use of redeclared single-view builtins in mesh shaders:
+
+out gl_MeshPerVertexEXT {
+    vec4 gl_Position;
+    float gl_PointSize;
+    float gl_ClipDistance[4];
+    float gl_CullDistance[4];
+} gl_MeshVerticesEXT[MAX_VER];                   // explicitly sized to MAX_VER
+
+perprimitiveEXT out gl_MeshPerPrimitiveEXT {
+    int gl_PrimitiveID;
+    int gl_Layer;
+    int gl_ViewportIndex;
+    bool gl_CullPrimitiveEXT;
+    int  gl_PrimitiveShadingRateEXT;
+} gl_MeshPrimitivesEXT[];                        // implicitly sized to MAX_PRIM
+
+out uint gl_PrimitivePointIndicesEXT[MAX_PRIM];     // explicitly sized to MAX_PRIM
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    SetMeshOutputsEXT(MAX_VER, MAX_PRIM);
+
+    gl_MeshVerticesEXT[iid].gl_Position = vec4(1.0);
+    gl_MeshVerticesEXT[iid].gl_PointSize = 2.0;
+    gl_MeshVerticesEXT[iid].gl_ClipDistance[3] = 3.0;
+    gl_MeshVerticesEXT[iid].gl_CullDistance[2] = 4.0;
+
+    BARRIER();
+
+    gl_MeshVerticesEXT[iid+1].gl_Position = gl_MeshVerticesEXT[iid].gl_Position;
+    gl_MeshVerticesEXT[iid+1].gl_PointSize = gl_MeshVerticesEXT[iid].gl_PointSize;
+    gl_MeshVerticesEXT[iid+1].gl_ClipDistance[3] = gl_MeshVerticesEXT[iid].gl_ClipDistance[3];
+    gl_MeshVerticesEXT[iid+1].gl_CullDistance[2] = gl_MeshVerticesEXT[iid].gl_CullDistance[2];
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid].gl_PrimitiveID = 6;
+    gl_MeshPrimitivesEXT[iid].gl_Layer = 7;
+    gl_MeshPrimitivesEXT[iid].gl_ViewportIndex = 8;
+    gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT = false;
+
+    BARRIER();
+
+    gl_MeshPrimitivesEXT[iid+1].gl_PrimitiveID = gl_MeshPrimitivesEXT[iid].gl_PrimitiveID;
+    gl_MeshPrimitivesEXT[iid+1].gl_Layer = gl_MeshPrimitivesEXT[iid].gl_Layer;
+    gl_MeshPrimitivesEXT[iid+1].gl_ViewportIndex = gl_MeshPrimitivesEXT[iid].gl_ViewportIndex;
+    gl_MeshPrimitivesEXT[iid+1].gl_CullPrimitiveEXT = gl_MeshPrimitivesEXT[iid].gl_CullPrimitiveEXT;
+
+    BARRIER();
+
+    // check bound limits
+    gl_PrimitivePointIndicesEXT[0] = 1;
+    gl_PrimitivePointIndicesEXT[MAX_PRIM - 1] = 2;
+}
diff --git a/Test/spv.ext.meshShaderTaskMem.mesh b/Test/spv.ext.meshShaderTaskMem.mesh
new file mode 100644 (file)
index 0000000..c22f767
--- /dev/null
@@ -0,0 +1,41 @@
+#version 450
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// use of storage qualifier "taskPayloadSharedEXT" in mesh shaders:
+struct taskBlock {
+    float gid1[2];
+    vec4 gid2;
+};
+taskPayloadSharedEXT taskBlock mytask;
+
+buffer bufferBlock {
+    float gid3[2];
+    vec4 gid4;
+} mybuf;
+
+layout(location=0) out outBlock {
+    float gid5;
+    vec4 gid6;
+} myblk[];
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+
+    myblk[iid].gid5 = mytask.gid1[1] + mybuf.gid3[1];
+    myblk[iid].gid6 = mytask.gid2    + mybuf.gid4;
+}
diff --git a/Test/spv.ext.meshShaderUserDefined.mesh b/Test/spv.ext.meshShaderUserDefined.mesh
new file mode 100644 (file)
index 0000000..c8035e2
--- /dev/null
@@ -0,0 +1,59 @@
+#version 450
+
+#define MAX_VER  81
+#define MAX_PRIM 32
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+layout(max_vertices=MAX_VER) out;
+layout(max_primitives=MAX_PRIM) out;
+layout(triangles) out;
+
+// test use of user defined interface out blocks:
+
+// per-primitive block
+perprimitiveEXT layout(location=0) out myblock {
+    float f;
+    float fArr[4];
+    vec3 pos;
+    vec4 posArr[4];
+    mat4 m;
+    mat3 mArr[2];
+} blk[];
+
+// per-vertex block
+layout(location=20) out myblock2 {
+    float f;
+    vec4 pos;
+    mat4 m;
+} blk2[];
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    blk[iid].f               = 11.0;
+    blk[iid+1].fArr[gid]     = blk[iid].f;
+    blk[iid/2].pos.yzx       = vec3(14.0, 15.0, 13.0);
+    blk[iid*2].posArr[1].yzw = blk[iid/2].pos;
+    blk[iid/4].m[2].wzyx     = vec4(13.0, 14.0, 15.0, 16.0);
+    blk[iid].mArr[0][1][1]   = blk[iid/4].m[2].w;
+    blk[iid*4].mArr[1][gid]  = vec3(17.0, 18.0, 19.0);
+
+    BARRIER();
+
+    blk2[iid].f           = blk2[iid-1].f + 20.0;
+    blk2[iid].pos         = vec4(21.0, 22.0, 23.0, 24.0);
+    blk2[iid+1].m[gid]    = blk2[iid].pos;
+    blk2[iid+1].m[gid][2] = 29.0;
+    blk2[iid+2].m[3]      = blk2[iid+1].m[gid];
+
+    BARRIER();
+}
diff --git a/Test/spv.ext.meshTaskShader.task b/Test/spv.ext.meshTaskShader.task
new file mode 100644 (file)
index 0000000..074fb23
--- /dev/null
@@ -0,0 +1,51 @@
+#version 450
+
+#define BARRIER() \
+    memoryBarrierShared(); \
+    barrier();
+
+#extension GL_EXT_mesh_shader : enable
+
+layout(local_size_x = 32) in;
+
+// test use of shared memory in task shaders:
+layout(binding=0) writeonly uniform image2D uni_image;
+uniform block0 {
+    uint uni_value;
+};
+shared vec4 mem[10];
+
+// use of storage qualifier "taskPayloadSharedEXT" in task shaders
+struct Task {
+    vec2 dummy;
+    vec2 submesh[3];
+};
+taskPayloadSharedEXT Task mytask;
+
+void main()
+{
+    uint iid = gl_LocalInvocationID.x;
+    uint gid = gl_WorkGroupID.x;
+
+    // 1. shared memory load and stores
+    for (uint i = 0; i < 10; ++i) {
+        mem[i] = vec4(i + uni_value);
+    }
+    imageStore(uni_image, ivec2(iid), mem[gid]);
+    imageStore(uni_image, ivec2(iid), mem[gid+1]);
+
+    BARRIER();
+
+    // 2. task memory stores
+
+    mytask.dummy      = vec2(30.0, 31.0);
+    mytask.submesh[0] = vec2(32.0, 33.0);
+    mytask.submesh[1] = vec2(34.0, 35.0);
+    mytask.submesh[2] = mytask.submesh[gid%2];
+
+    BARRIER();
+
+    // 3. emit task count under uniform control flow
+    EmitMeshTasksEXT(3U, 1U, 1U);
+
+}
index 0e691a1..ead005c 100644 (file)
@@ -192,10 +192,10 @@ static EShLanguage c_shader_stage(glslang_stage_t stage)
         return EShLangMiss;
     case GLSLANG_STAGE_CALLABLE_NV:
         return EShLangCallable;
-    case GLSLANG_STAGE_TASK_NV:
-        return EShLangTaskNV;
-    case GLSLANG_STAGE_MESH_NV:
-        return EShLangMeshNV;
+    case GLSLANG_STAGE_TASK:
+        return EShLangTask;
+    case GLSLANG_STAGE_MESH:
+        return EShLangMesh;
     default:
         break;
     }
index 6a429fd..156d98b 100644 (file)
@@ -105,6 +105,8 @@ enum TStorageQualifier {
     EvqCallableData,
     EvqCallableDataIn,
 
+    EvqtaskPayloadSharedEXT,
+
     // parameters
     EvqIn,            // also, for 'in' in the grammar before we know if it's a pipeline input or an 'in' parameter
     EvqOut,           // also, for 'out' in the grammar before we know if it's a pipeline output or an 'out' parameter
@@ -287,6 +289,11 @@ enum TBuiltInVariable {
     EbvLayerPerViewNV,
     EbvMeshViewCountNV,
     EbvMeshViewIndicesNV,
+    //GL_EXT_mesh_shader
+    EbvPrimitivePointIndicesEXT,
+    EbvPrimitiveLineIndicesEXT,
+    EbvPrimitiveTriangleIndicesEXT,
+    EbvCullPrimitiveEXT,
 
     // sm builtins
     EbvWarpsPerSM,
@@ -360,6 +367,7 @@ __inline const char* GetStorageQualifierString(TStorageQualifier q)
     case EvqHitAttr:        return "hitAttributeNV";   break;
     case EvqCallableData:   return "callableDataNV";   break;
     case EvqCallableDataIn: return "callableDataInNV"; break;
+    case EvqtaskPayloadSharedEXT: return "taskPayloadSharedEXT"; break;
     default:                return "unknown qualifier";
     }
 }
@@ -496,6 +504,11 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v)
     case EbvLayerPerViewNV:             return "LayerPerViewNV";
     case EbvMeshViewCountNV:            return "MeshViewCountNV";
     case EbvMeshViewIndicesNV:          return "MeshViewIndicesNV";
+    // GL_EXT_mesh_shader
+    case EbvPrimitivePointIndicesEXT:    return "PrimitivePointIndicesEXT";
+    case EbvPrimitiveLineIndicesEXT:     return "PrimitiveLineIndicesEXT";
+    case EbvPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT";
+    case EbvCullPrimitiveEXT:            return "CullPrimitiveEXT";
 
     case EbvWarpsPerSM:                 return "WarpsPerSMNV";
     case EbvSMCount:                    return "SMCountNV";
index b670cf1..b36c8d6 100644 (file)
@@ -142,6 +142,15 @@ struct TBuiltInResource {
     int maxTaskWorkGroupSizeY_NV;
     int maxTaskWorkGroupSizeZ_NV;
     int maxMeshViewCountNV;
+    int maxMeshOutputVerticesEXT;
+    int maxMeshOutputPrimitivesEXT;
+    int maxMeshWorkGroupSizeX_EXT;
+    int maxMeshWorkGroupSizeY_EXT;
+    int maxMeshWorkGroupSizeZ_EXT;
+    int maxTaskWorkGroupSizeX_EXT;
+    int maxTaskWorkGroupSizeY_EXT;
+    int maxTaskWorkGroupSizeZ_EXT;
+    int maxMeshViewCountEXT;
     int maxDualSourceDrawBuffersEXT;
 
     TLimits limits;
index 93909a3..05f90ac 100644 (file)
@@ -833,7 +833,7 @@ public:
             }
             storage = EvqUniform;
             break;
-        case EbsStorageBuffer : 
+        case EbsStorageBuffer :
             storage = EvqBuffer;
             break;
 #ifndef GLSLANG_WEB
@@ -856,6 +856,7 @@ public:
     bool isPerPrimitive() const { return perPrimitiveNV; }
     bool isPerView() const { return perViewNV; }
     bool isTaskMemory() const { return perTaskNV; }
+    bool isTaskPayload() const { return storage == EvqtaskPayloadSharedEXT; }
     bool isAnyPayload() const {
         return storage == EvqPayload || storage == EvqPayloadIn;
     }
@@ -874,8 +875,8 @@ public:
         case EShLangTessEvaluation:
             return ! patch && isPipeInput();
         case EShLangFragment:
-            return (pervertexNV || pervertexEXT) && isPipeInput();
-        case EShLangMeshNV:
+            return pervertexNV && isPipeInput();
+        case EShLangMesh:
             return ! perTaskNV && isPipeOutput();
 
         default:
@@ -2543,7 +2544,7 @@ public:
     void setStruct(TTypeList* s) { assert(isStruct()); structure = s; }
     TTypeList* getWritableStruct() const { assert(isStruct()); return structure; }  // This should only be used when known to not be sharing with other threads
     void setBasicType(const TBasicType& t) { basicType = t; }
-    
+
     int computeNumComponents() const
     {
         int components = 0;
index 9e5909c..41347c2 100644 (file)
@@ -148,6 +148,15 @@ typedef struct glslang_resource_s {
     int max_task_work_group_size_y_nv;
     int max_task_work_group_size_z_nv;
     int max_mesh_view_count_nv;
+    int max_mesh_output_vertices_ext;
+    int max_mesh_output_primitives_ext;
+    int max_mesh_work_group_size_x_ext;
+    int max_mesh_work_group_size_y_ext;
+    int max_mesh_work_group_size_z_ext;
+    int max_task_work_group_size_x_ext;
+    int max_task_work_group_size_y_ext;
+    int max_task_work_group_size_z_ext;
+    int max_mesh_view_count_ext;
     int maxDualSourceDrawBuffersEXT;
 
     glslang_limits_t limits;
index dc9009f..cd24b94 100644 (file)
@@ -49,8 +49,10 @@ typedef enum {
     GLSLANG_STAGE_CLOSESTHIT_NV,
     GLSLANG_STAGE_MISS_NV,
     GLSLANG_STAGE_CALLABLE_NV,
-    GLSLANG_STAGE_TASK_NV,
-    GLSLANG_STAGE_MESH_NV,
+    GLSLANG_STAGE_TASK,
+    GLSLANG_STAGE_TASK_NV = GLSLANG_STAGE_TASK,
+    GLSLANG_STAGE_MESH,
+    GLSLANG_STAGE_MESH_NV = GLSLANG_STAGE_MESH,
     LAST_ELEMENT_MARKER(GLSLANG_STAGE_COUNT),
 } glslang_stage_t; // would be better as stage, but this is ancient now
 
@@ -68,8 +70,10 @@ typedef enum {
     GLSLANG_STAGE_CLOSESTHIT_NV_MASK = (1 << GLSLANG_STAGE_CLOSESTHIT_NV),
     GLSLANG_STAGE_MISS_NV_MASK = (1 << GLSLANG_STAGE_MISS_NV),
     GLSLANG_STAGE_CALLABLE_NV_MASK = (1 << GLSLANG_STAGE_CALLABLE_NV),
-    GLSLANG_STAGE_TASK_NV_MASK = (1 << GLSLANG_STAGE_TASK_NV),
-    GLSLANG_STAGE_MESH_NV_MASK = (1 << GLSLANG_STAGE_MESH_NV),
+    GLSLANG_STAGE_TASK_MASK = (1 << GLSLANG_STAGE_TASK),
+    GLSLANG_STAGE_TASK_NV_MASK = GLSLANG_STAGE_TASK_MASK,
+    GLSLANG_STAGE_MESH_MASK = (1 << GLSLANG_STAGE_MESH),
+    GLSLANG_STAGE_MESH_NV_MASK = GLSLANG_STAGE_MESH_MASK,
     LAST_ELEMENT_MARKER(GLSLANG_STAGE_MASK_COUNT),
 } glslang_stage_mask_t;
 
index a64ed68..0c6f9fd 100644 (file)
@@ -934,6 +934,8 @@ enum TOperator {
     EOpExecuteCallableNV,
     EOpExecuteCallableKHR,
     EOpWritePackedPrimitiveIndices4x8NV,
+    EOpEmitMeshTasksEXT,
+    EOpSetMeshOutputsEXT,
 
     //
     // GL_EXT_ray_query operations
index ff3db7c..35681a5 100644 (file)
@@ -2268,11 +2268,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
             "\n"
             );
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "void subgroupMemoryBarrierShared();"
             "\n"
             );
-        stageBuiltins[EShLangTaskNV].append(
+        stageBuiltins[EShLangTask].append(
             "void subgroupMemoryBarrierShared();"
             "\n"
             );
@@ -4298,10 +4298,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "void barrier();"
             );
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "void barrier();"
             );
-        stageBuiltins[EShLangTaskNV].append(
+        stageBuiltins[EShLangTask].append(
             "void barrier();"
             );
     }
@@ -4326,11 +4326,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         commonBuiltins.append("void memoryBarrierImage();");
     }
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "void memoryBarrierShared();"
             "void groupMemoryBarrier();"
         );
-        stageBuiltins[EShLangTaskNV].append(
+        stageBuiltins[EShLangTask].append(
             "void memoryBarrierShared();"
             "void groupMemoryBarrier();"
         );
@@ -4655,10 +4655,21 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
     // Builtins for GL_NV_mesh_shader
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "void writePackedPrimitiveIndices4x8NV(uint, uint);"
             "\n");
     }
+    // Builtins for GL_EXT_mesh_shader
+    if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
+        // Builtins for GL_EXT_mesh_shader
+        stageBuiltins[EShLangTask].append(
+            "void EmitMeshTasksEXT(uint, uint, uint);"
+            "\n");
+
+        stageBuiltins[EShLangMesh].append(
+            "void SetMeshOutputsEXT(uint, uint);"
+            "\n");
+    }
 #endif // !GLSLANG_ANGLE
 #endif // !GLSLANG_WEB
 
@@ -4855,7 +4866,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
     if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
         // per-vertex attributes
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "out gl_MeshPerVertexNV {"
                 "vec4 gl_Position;"
                 "float gl_PointSize;"
@@ -4868,7 +4879,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         );
 
         // per-primitive attributes
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "perprimitiveNV out gl_MeshPerPrimitiveNV {"
                 "int gl_PrimitiveID;"
                 "int gl_Layer;"
@@ -4879,7 +4890,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
             "} gl_MeshPrimitivesNV[];"
         );
 
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "out uint gl_PrimitiveCountNV;"
             "out uint gl_PrimitiveIndicesNV[];"
 
@@ -4893,10 +4904,38 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
             "in highp uvec3 gl_GlobalInvocationID;"
             "in highp uint gl_LocalInvocationIndex;"
+            "\n");
 
+        // GL_EXT_mesh_shader
+        stageBuiltins[EShLangMesh].append(
+            "out uint gl_PrimitivePointIndicesEXT[];"
+            "out uvec2 gl_PrimitiveLineIndicesEXT[];"
+            "out uvec3 gl_PrimitiveTriangleIndicesEXT[];"
+            "in    highp uvec3 gl_NumWorkGroups;"
             "\n");
 
-        stageBuiltins[EShLangTaskNV].append(
+        // per-vertex attributes
+        stageBuiltins[EShLangMesh].append(
+            "out gl_MeshPerVertexEXT {"
+                "vec4 gl_Position;"
+                "float gl_PointSize;"
+                "float gl_ClipDistance[];"
+                "float gl_CullDistance[];"
+            "} gl_MeshVerticesEXT[];"
+        );
+
+        // per-primitive attributes
+        stageBuiltins[EShLangMesh].append(
+            "perprimitiveEXT out gl_MeshPerPrimitiveEXT {"
+                "int gl_PrimitiveID;"
+                "int gl_Layer;"
+                "int gl_ViewportIndex;"
+                "bool gl_CullPrimitiveEXT;"
+                "int  gl_PrimitiveShadingRateEXT;"
+            "} gl_MeshPrimitivesEXT[];"
+        );
+
+        stageBuiltins[EShLangTask].append(
             "out uint gl_TaskCountNV;"
 
             "const highp uvec3 gl_WorkGroupSize = uvec3(1,1,1);"
@@ -4909,27 +4948,28 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
 
             "in uint gl_MeshViewCountNV;"
             "in uint gl_MeshViewIndicesNV[4];"
-
+            "in    highp uvec3 gl_NumWorkGroups;"
             "\n");
     }
 
     if (profile != EEsProfile && version >= 450) {
-        stageBuiltins[EShLangMeshNV].append(
+        stageBuiltins[EShLangMesh].append(
             "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
             "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
+            "in int gl_ViewIndex;"             // GL_EXT_multiview
             "\n");
 
-        stageBuiltins[EShLangTaskNV].append(
+        stageBuiltins[EShLangTask].append(
             "in highp int gl_DeviceIndex;"     // GL_EXT_device_group
             "in int gl_DrawIDARB;"             // GL_ARB_shader_draw_parameters
             "\n");
 
         if (version >= 460) {
-            stageBuiltins[EShLangMeshNV].append(
+            stageBuiltins[EShLangMesh].append(
                 "in int gl_DrawID;"
                 "\n");
 
-            stageBuiltins[EShLangTaskNV].append(
+            stageBuiltins[EShLangTask].append(
                 "in int gl_DrawID;"
                 "\n");
         }
@@ -5704,8 +5744,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         stageBuiltins[EShLangGeometry]      .append(ballotDecls);
         stageBuiltins[EShLangCompute]       .append(ballotDecls);
         stageBuiltins[EShLangFragment]      .append(fragmentBallotDecls);
-        stageBuiltins[EShLangMeshNV]        .append(ballotDecls);
-        stageBuiltins[EShLangTaskNV]        .append(ballotDecls);
+        stageBuiltins[EShLangMesh]        .append(ballotDecls);
+        stageBuiltins[EShLangTask]        .append(ballotDecls);
         stageBuiltins[EShLangRayGen]        .append(rtBallotDecls);
         stageBuiltins[EShLangIntersect]     .append(rtBallotDecls);
         // No volatile qualifier on these builtins in any-hit
@@ -5773,10 +5813,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
         stageBuiltins[EShLangCompute]       .append(subgroupDecls);
         stageBuiltins[EShLangCompute]       .append(computeSubgroupDecls);
         stageBuiltins[EShLangFragment]      .append(fragmentSubgroupDecls);
-        stageBuiltins[EShLangMeshNV]        .append(subgroupDecls);
-        stageBuiltins[EShLangMeshNV]        .append(computeSubgroupDecls);
-        stageBuiltins[EShLangTaskNV]        .append(subgroupDecls);
-        stageBuiltins[EShLangTaskNV]        .append(computeSubgroupDecls);
+        stageBuiltins[EShLangMesh]        .append(subgroupDecls);
+        stageBuiltins[EShLangMesh]        .append(computeSubgroupDecls);
+        stageBuiltins[EShLangTask]        .append(subgroupDecls);
+        stageBuiltins[EShLangTask]        .append(computeSubgroupDecls);
         stageBuiltins[EShLangRayGen]        .append(rtSubgroupDecls);
         stageBuiltins[EShLangIntersect]     .append(rtSubgroupDecls);
         // No volatile qualifier on these builtins in any-hit
@@ -8883,7 +8923,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
         }
         break;
 
-    case EShLangMeshNV:
+    case EShLangMesh:
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
             // per-vertex builtins
             symbolTable.setVariableExtensions("gl_MeshVerticesNV", "gl_Position",     1, &E_GL_NV_mesh_shader);
@@ -8927,12 +8967,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.setVariableExtensions("gl_PrimitiveIndicesNV",   1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MeshViewIndicesNV",    1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
-
+            if (profile != EEsProfile) {
+                symbolTable.setVariableExtensions("gl_WorkGroupSize",        Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_WorkGroupID",          Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationID",    Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", Num_AEP_mesh_shader, AEP_mesh_shader);
+            } else {
+                symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
+            }
             BuiltInVariable("gl_PrimitiveCountNV",     EbvPrimitiveCountNV,     symbolTable);
             BuiltInVariable("gl_PrimitiveIndicesNV",   EbvPrimitiveIndicesNV,   symbolTable);
             BuiltInVariable("gl_MeshViewCountNV",      EbvMeshViewCountNV,      symbolTable);
@@ -8950,12 +8997,54 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",        1, &E_GL_NV_mesh_shader);
 
             // builtin functions
-            symbolTable.setFunctionExtensions("barrier",                      1, &E_GL_NV_mesh_shader);
-            symbolTable.setFunctionExtensions("memoryBarrierShared",          1, &E_GL_NV_mesh_shader);
-            symbolTable.setFunctionExtensions("groupMemoryBarrier",           1, &E_GL_NV_mesh_shader);
+            if (profile != EEsProfile) {
+                symbolTable.setFunctionExtensions("barrier",                      Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setFunctionExtensions("memoryBarrierShared",          Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setFunctionExtensions("groupMemoryBarrier",           Num_AEP_mesh_shader, AEP_mesh_shader);
+            } else {
+                symbolTable.setFunctionExtensions("barrier",                      1, &E_GL_NV_mesh_shader);
+                symbolTable.setFunctionExtensions("memoryBarrierShared",          1, &E_GL_NV_mesh_shader);
+                symbolTable.setFunctionExtensions("groupMemoryBarrier",           1, &E_GL_NV_mesh_shader);
+            }
+            symbolTable.setFunctionExtensions("writePackedPrimitiveIndices4x8NV",  1, &E_GL_NV_mesh_shader);
         }
 
         if (profile != EEsProfile && version >= 450) {
+            // GL_EXT_Mesh_shader
+            symbolTable.setVariableExtensions("gl_PrimitivePointIndicesEXT",    1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_PrimitiveLineIndicesEXT",     1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_PrimitiveTriangleIndicesEXT", 1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_NumWorkGroups",               1, &E_GL_EXT_mesh_shader);
+
+            BuiltInVariable("gl_PrimitivePointIndicesEXT",    EbvPrimitivePointIndicesEXT,    symbolTable);
+            BuiltInVariable("gl_PrimitiveLineIndicesEXT",     EbvPrimitiveLineIndicesEXT,     symbolTable);
+            BuiltInVariable("gl_PrimitiveTriangleIndicesEXT", EbvPrimitiveTriangleIndicesEXT, symbolTable);
+            BuiltInVariable("gl_NumWorkGroups",        EbvNumWorkGroups,        symbolTable);
+
+            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_Position",     1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_PointSize",    1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_ClipDistance", 1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshVerticesEXT", "gl_CullDistance", 1, &E_GL_EXT_mesh_shader);
+            
+            BuiltInVariable("gl_MeshVerticesEXT", "gl_Position",     EbvPosition,     symbolTable);
+            BuiltInVariable("gl_MeshVerticesEXT", "gl_PointSize",    EbvPointSize,    symbolTable);
+            BuiltInVariable("gl_MeshVerticesEXT", "gl_ClipDistance", EbvClipDistance, symbolTable);
+            BuiltInVariable("gl_MeshVerticesEXT", "gl_CullDistance", EbvCullDistance, symbolTable);
+            
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_PrimitiveID",             1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_Layer",                   1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_ViewportIndex",           1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_CullPrimitiveEXT",        1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_MeshPrimitivesEXT", "gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_mesh_shader);
+
+            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_PrimitiveID",              EbvPrimitiveId,    symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_Layer",                    EbvLayer,          symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_ViewportIndex",            EbvViewportIndex,  symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_CullPrimitiveEXT",         EbvCullPrimitiveEXT, symbolTable);
+            BuiltInVariable("gl_MeshPrimitivesEXT", "gl_PrimitiveShadingRateEXT",  EbvPrimitiveShadingRateKHR, symbolTable);
+
+            symbolTable.setFunctionExtensions("SetMeshOutputsEXT",  1, &E_GL_EXT_mesh_shader);
+
             // GL_EXT_device_group
             symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
             BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
@@ -8966,6 +9055,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             if (version >= 460) {
                 BuiltInVariable("gl_DrawID", EbvDrawId, symbolTable);
             }
+            // GL_EXT_multiview
+            BuiltInVariable("gl_ViewIndex", EbvViewIndex, symbolTable);
+            symbolTable.setVariableExtensions("gl_ViewIndex", 1, &E_GL_EXT_multiview);
 
             // GL_ARB_shader_ballot
             symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
@@ -9035,16 +9127,24 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
         }
         break;
 
-    case EShLangTaskNV:
+    case EShLangTask:
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
             symbolTable.setVariableExtensions("gl_TaskCountNV",          1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
-            symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MeshViewCountNV",      1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MeshViewIndicesNV",    1, &E_GL_NV_mesh_shader);
+            if (profile != EEsProfile) {
+                symbolTable.setVariableExtensions("gl_WorkGroupSize",        Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_WorkGroupID",          Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationID",    Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", Num_AEP_mesh_shader, AEP_mesh_shader);
+            } else {
+                symbolTable.setVariableExtensions("gl_WorkGroupSize",        1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_WorkGroupID",          1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationID",    1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_GlobalInvocationID",   1, &E_GL_NV_mesh_shader);
+                symbolTable.setVariableExtensions("gl_LocalInvocationIndex", 1, &E_GL_NV_mesh_shader);
+            }
 
             BuiltInVariable("gl_TaskCountNV",          EbvTaskCountNV,          symbolTable);
             BuiltInVariable("gl_WorkGroupSize",        EbvWorkGroupSize,        symbolTable);
@@ -9058,12 +9158,23 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.setVariableExtensions("gl_MaxTaskWorkGroupSizeNV", 1, &E_GL_NV_mesh_shader);
             symbolTable.setVariableExtensions("gl_MaxMeshViewCountNV",     1, &E_GL_NV_mesh_shader);
 
-            symbolTable.setFunctionExtensions("barrier",                   1, &E_GL_NV_mesh_shader);
-            symbolTable.setFunctionExtensions("memoryBarrierShared",       1, &E_GL_NV_mesh_shader);
-            symbolTable.setFunctionExtensions("groupMemoryBarrier",        1, &E_GL_NV_mesh_shader);
+            if (profile != EEsProfile) {
+                symbolTable.setFunctionExtensions("barrier",                   Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setFunctionExtensions("memoryBarrierShared",       Num_AEP_mesh_shader, AEP_mesh_shader);
+                symbolTable.setFunctionExtensions("groupMemoryBarrier",        Num_AEP_mesh_shader, AEP_mesh_shader);
+            } else {
+                symbolTable.setFunctionExtensions("barrier",                   1, &E_GL_NV_mesh_shader);
+                symbolTable.setFunctionExtensions("memoryBarrierShared",       1, &E_GL_NV_mesh_shader);
+                symbolTable.setFunctionExtensions("groupMemoryBarrier",        1, &E_GL_NV_mesh_shader);
+            }
         }
 
         if (profile != EEsProfile && version >= 450) {
+            // GL_EXT_mesh_shader
+            symbolTable.setFunctionExtensions("EmitMeshTasksEXT",          1, &E_GL_EXT_mesh_shader);
+            symbolTable.setVariableExtensions("gl_NumWorkGroups",        1, &E_GL_EXT_mesh_shader);
+            BuiltInVariable("gl_NumWorkGroups",        EbvNumWorkGroups,        symbolTable);
+
             // GL_EXT_device_group
             symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group);
             BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable);
@@ -9687,17 +9798,27 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
             symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR);
         }
         break;
-    case EShLangMeshNV:
+    case EShLangMesh:
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
             symbolTable.relateToOperator("writePackedPrimitiveIndices4x8NV", EOpWritePackedPrimitiveIndices4x8NV);
+            symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
+            symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
+            symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
         }
-        // fall through
-    case EShLangTaskNV:
+
+        if (profile != EEsProfile && version >= 450) {
+            symbolTable.relateToOperator("SetMeshOutputsEXT", EOpSetMeshOutputsEXT);
+        }
+        break;
+    case EShLangTask:
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
             symbolTable.relateToOperator("memoryBarrierShared", EOpMemoryBarrierShared);
             symbolTable.relateToOperator("groupMemoryBarrier", EOpGroupMemoryBarrier);
             symbolTable.relateToOperator("subgroupMemoryBarrierShared", EOpSubgroupMemoryBarrierShared);
         }
+        if (profile != EEsProfile && version >= 450) {
+            symbolTable.relateToOperator("EmitMeshTasksEXT", EOpEmitMeshTasksEXT);
+        }
         break;
 
     default:
index e6e3db8..e2ac43c 100644 (file)
@@ -502,6 +502,16 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb
                 error(loc, "cannot be used (maybe an instance name is needed)", string->c_str(), "");
                 variable = nullptr;
             }
+
+            if (language == EShLangMesh && variable) {
+                TLayoutGeometry primitiveType = intermediate.getOutputPrimitive();
+                if ((variable->getMangledName() == "gl_PrimitiveTriangleIndicesEXT" && primitiveType != ElgTriangles) ||
+                    (variable->getMangledName() == "gl_PrimitiveLineIndicesEXT" && primitiveType != ElgLines) ||
+                    (variable->getMangledName() == "gl_PrimitivePointIndicesEXT" && primitiveType != ElgPoints)) {
+                    error(loc, "cannot be used (ouput primitive type mismatch)", string->c_str(), "");
+                    variable = nullptr;
+                }
+            }
         } else {
             if (symbol)
                 error(loc, "variable name expected", string->c_str(), "");
@@ -717,7 +727,7 @@ bool TParseContext::isIoResizeArray(const TType& type) const
                 ! type.getQualifier().patch) ||
             (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&
                 (type.getQualifier().pervertexNV || type.getQualifier().pervertexEXT)) ||
-            (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut &&
+            (language == EShLangMesh && type.getQualifier().storage == EvqVaryingOut &&
                 !type.getQualifier().perTaskNV));
 }
 
@@ -794,7 +804,7 @@ void TParseContext::checkIoArraysConsistency(const TSourceLoc &loc, bool tailOnl
 
         // As I/O array sizes don't change, fetch requiredSize only once,
         // except for mesh shaders which could have different I/O array sizes based on type qualifiers.
-        if (firstIteration || (language == EShLangMeshNV)) {
+        if (firstIteration || (language == EShLangMesh)) {
             requiredSize = getIoArrayImplicitSize(type.getQualifier(), &featureString);
             if (requiredSize == 0)
                 break;
@@ -823,10 +833,11 @@ int TParseContext::getIoArrayImplicitSize(const TQualifier &qualifier, TString *
         // Number of vertices for Fragment shader is always three.
         expectedSize = 3;
         str = "vertices";
-    } else if (language == EShLangMeshNV) {
+    } else if (language == EShLangMesh) {
         unsigned int maxPrimitives =
             intermediate.getPrimitives() != TQualifier::layoutNotSet ? intermediate.getPrimitives() : 0;
-        if (qualifier.builtIn == EbvPrimitiveIndicesNV) {
+        if (qualifier.builtIn == EbvPrimitiveIndicesNV || qualifier.builtIn == EbvPrimitiveTriangleIndicesEXT ||
+            qualifier.builtIn == EbvPrimitiveLineIndicesEXT || qualifier.builtIn == EbvPrimitivePointIndicesEXT) {
             expectedSize = maxPrimitives * TQualifier::mapGeometryToSize(intermediate.getOutputPrimitive());
             str = "max_primitives*";
             str += TQualifier::getGeometryString(intermediate.getOutputPrimitive());
@@ -858,7 +869,7 @@ void TParseContext::checkIoArrayConsistency(const TSourceLoc& loc, int requiredS
             if (type.getOuterArraySize() > requiredSize)
                 error(loc, " cannot be greater than 3 for pervertexEXT", feature, name.c_str());
         }
-        else if (language == EShLangMeshNV)
+        else if (language == EShLangMesh)
             error(loc, "inconsistent output array size of", feature, name.c_str());
         else
             assert(0);
@@ -2000,18 +2011,18 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction&
         break;
     }
 
-    if ((semantics & gl_SemanticsAcquire) && 
+    if ((semantics & gl_SemanticsAcquire) &&
         (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore)) {
         error(loc, "gl_SemanticsAcquire must not be used with (image) atomic store",
               fnCandidate.getName().c_str(), "");
     }
-    if ((semantics & gl_SemanticsRelease) && 
+    if ((semantics & gl_SemanticsRelease) &&
         (callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpImageAtomicLoad)) {
         error(loc, "gl_SemanticsRelease must not be used with (image) atomic load",
               fnCandidate.getName().c_str(), "");
     }
-    if ((semantics & gl_SemanticsAcquireRelease) && 
-        (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore || 
+    if ((semantics & gl_SemanticsAcquireRelease) &&
+        (callNode.getOp() == EOpAtomicStore || callNode.getOp() == EOpImageAtomicStore ||
          callNode.getOp() == EOpAtomicLoad  || callNode.getOp() == EOpImageAtomicLoad)) {
         error(loc, "gl_SemanticsAcquireRelease must not be used with (image) atomic load/store",
               fnCandidate.getName().c_str(), "");
@@ -2462,7 +2473,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
         const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true , true);
         const TType* refType = (base->getType().isReference()) ? base->getType().getReferentType() : nullptr;
         const TQualifier& qualifier = (refType != nullptr) ? refType->getQualifier() : base->getType().getQualifier();
-        if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer)
+        if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer && qualifier.storage != EvqtaskPayloadSharedEXT)
             error(loc,"Atomic memory function can only be used for shader storage block member or shared variable.",
             fnCandidate.getName().c_str(), "");
 
@@ -2560,7 +2571,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
         }
 
         if (profile != EEsProfile && version < 450) {
-            if ((*argp)[0]->getAsTyped()->getBasicType() != EbtFloat && 
+            if ((*argp)[0]->getAsTyped()->getBasicType() != EbtFloat &&
                 (*argp)[0]->getAsTyped()->getBasicType() != EbtDouble &&
                 (*argp)[1]->getAsTyped()->getBasicType() != EbtFloat &&
                 (*argp)[1]->getAsTyped()->getBasicType() != EbtDouble &&
@@ -2995,6 +3006,10 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
             message = "can't modify EvqFragStencil if using early_fragment_tests";
         break;
 
+    case EvqtaskPayloadSharedEXT:
+        if (language == EShLangMesh)
+            message = "can't modify variable with storage qualifier taskPayloadSharedEXT in mesh shaders";
+        break;
     default:
         break;
     }
@@ -3033,7 +3048,7 @@ void TParseContext::rValueErrorCheck(const TSourceLoc& loc, const char* op, TInt
         if (symNode && symNode->getQualifier().isExplicitInterpolation())
             error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str());
 
-    // local_size_{xyz} must be assigned or specialized before gl_WorkGroupSize can be assigned. 
+    // local_size_{xyz} must be assigned or specialized before gl_WorkGroupSize can be assigned.
     if(node->getQualifier().builtIn == EbvWorkGroupSize &&
        !(intermediate.isLocalSizeSet() || intermediate.isLocalSizeSpecialized()))
         error(loc, "can't read from gl_WorkGroupSize before a fixed workgroup size has been declared", op, "");
@@ -3831,6 +3846,9 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali
     if (qualifier.isPatch() && qualifier.isInterpolation())
         error(loc, "cannot use interpolation qualifiers with patch", "patch", "");
 
+    if (qualifier.isTaskPayload() && publicType.basicType == EbtBlock)
+        error(loc, "taskPayloadSharedEXT variables should not be declared as interface blocks", "taskPayloadSharedEXT", "");
+
     if (qualifier.isTaskMemory() && publicType.basicType != EbtBlock)
         error(loc, "taskNV variables can be declared only as blocks", "taskNV", "");
 
@@ -3988,7 +4006,7 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons
                    (src.workgroupcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.subgroupcoherent || dst.shadercallcoherent)) ||
                    (src.subgroupcoherent  && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.shadercallcoherent)) ||
                    (src.shadercallcoherent && (dst.coherent || dst.devicecoherent || dst.queuefamilycoherent || dst.workgroupcoherent || dst.subgroupcoherent)))) {
-        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent/shadercallcoherent qualifier allowed", 
+        error(loc, "only one coherent/devicecoherent/queuefamilycoherent/workgroupcoherent/subgroupcoherent/shadercallcoherent qualifier allowed",
             GetPrecisionQualifierString(src.precision), "");
     }
 #endif
@@ -4346,10 +4364,10 @@ void TParseContext::arraySizesCheck(const TSourceLoc& loc, const TQualifier& qua
                 extensionsTurnedOn(Num_AEP_tessellation_shader, AEP_tessellation_shader))
                 return;
         break;
-    case EShLangMeshNV:
+    case EShLangMesh:
         if (qualifier.storage == EvqVaryingOut)
             if ((isEsProfile() && version >= 320) ||
-                extensionTurnedOn(E_GL_NV_mesh_shader))
+                extensionsTurnedOn(Num_AEP_mesh_shader, AEP_mesh_shader))
                 return;
         break;
     default:
@@ -4633,6 +4651,9 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS
          identifier == "gl_SampleMask"                                                              ||
          identifier == "gl_Layer"                                                                   ||
          identifier == "gl_PrimitiveIndicesNV"                                                      ||
+         identifier == "gl_PrimitivePointIndicesEXT"                                                ||
+         identifier == "gl_PrimitiveLineIndicesEXT"                                                 ||
+         identifier == "gl_PrimitiveTriangleIndicesEXT"                                             ||
          identifier == "gl_TexCoord") {
 
         // Find the existing symbol, if any.
@@ -4771,7 +4792,8 @@ void TParseContext::redeclareBuiltinBlock(const TSourceLoc& loc, TTypeList& newT
     profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_separate_shader_objects, feature);
 
     if (blockName != "gl_PerVertex" && blockName != "gl_PerFragment" &&
-        blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV") {
+        blockName != "gl_MeshPerVertexNV" && blockName != "gl_MeshPerPrimitiveNV" &&
+        blockName != "gl_MeshPerVertexEXT" && blockName != "gl_MeshPerPrimitiveEXT") {
         error(loc, "cannot redeclare block: ", "block declaration", blockName.c_str());
         return;
     }
@@ -5340,11 +5362,11 @@ void TParseContext::finish()
         if (!isEsProfile() && version < 430)
             requireExtensions(getCurrentLoc(), 1, &E_GL_ARB_compute_shader, "compute shaders");
         break;
-    case EShLangTaskNV:
-        requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "task shaders");
+    case EShLangTask:
+        requireExtensions(getCurrentLoc(), Num_AEP_mesh_shader, AEP_mesh_shader, "task shaders");
         break;
-    case EShLangMeshNV:
-        requireExtensions(getCurrentLoc(), 1, &E_GL_NV_mesh_shader, "mesh shaders");
+    case EShLangMesh:
+        requireExtensions(getCurrentLoc(), Num_AEP_mesh_shader, AEP_mesh_shader, "mesh shaders");
         break;
     default:
         break;
@@ -5454,12 +5476,12 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
         intermediate.setUsePhysicalStorageBuffer();
         return;
     }
-    if (language == EShLangGeometry || language == EShLangTessEvaluation || language == EShLangMeshNV) {
+    if (language == EShLangGeometry || language == EShLangTessEvaluation || language == EShLangMesh) {
         if (id == TQualifier::getGeometryString(ElgTriangles)) {
             publicType.shaderQualifiers.geometry = ElgTriangles;
             return;
         }
-        if (language == EShLangGeometry || language == EShLangMeshNV) {
+        if (language == EShLangGeometry || language == EShLangMesh) {
             if (id == TQualifier::getGeometryString(ElgPoints)) {
                 publicType.shaderQualifiers.geometry = ElgPoints;
                 return;
@@ -5737,7 +5759,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
         return;
     } else if (id == "location") {
         profileRequires(loc, EEsProfile, 300, nullptr, "location");
-        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location }; 
+        const char* exts[2] = { E_GL_ARB_separate_shader_objects, E_GL_ARB_explicit_attrib_location };
         // GL_ARB_explicit_uniform_location requires 330 or GL_ARB_explicit_attrib_location we do not need to add it here
         profileRequires(loc, ~EEsProfile, 330, 2, exts, "location");
         if ((unsigned int)value >= TQualifier::layoutLocationEnd)
@@ -5947,9 +5969,9 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
         }
         break;
 
-    case EShLangMeshNV:
+    case EShLangMesh:
         if (id == "max_vertices") {
-            requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "max_vertices");
+            requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "max_vertices");
             publicType.shaderQualifiers.vertices = value;
             if (value > resources.maxMeshOutputVerticesNV)
                 error(loc, "too large, must be less than gl_MaxMeshOutputVerticesNV", "max_vertices", "");
@@ -5958,7 +5980,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
             return;
         }
         if (id == "max_primitives") {
-            requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "max_primitives");
+            requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "max_primitives");
             publicType.shaderQualifiers.primitives = value;
             if (value > resources.maxMeshOutputPrimitivesNV)
                 error(loc, "too large, must be less than gl_MaxMeshOutputPrimitivesNV", "max_primitives", "");
@@ -5968,14 +5990,14 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi
         }
         // Fall through
 
-    case EShLangTaskNV:
+    case EShLangTask:
         // Fall through
 #endif
     case EShLangCompute:
         if (id.compare(0, 11, "local_size_") == 0) {
 #ifndef GLSLANG_WEB
-            if (language == EShLangMeshNV || language == EShLangTaskNV) {
-                requireExtensions(loc, 1, &E_GL_NV_mesh_shader, "gl_WorkGroupSize");
+            if (language == EShLangMesh || language == EShLangTask) {
+                requireExtensions(loc, Num_AEP_mesh_shader, AEP_mesh_shader, "gl_WorkGroupSize");
             } else {
                 profileRequires(loc, EEsProfile, 310, 0, "gl_WorkGroupSize");
                 profileRequires(loc, ~EEsProfile, 430, E_GL_ARB_compute_shader, "gl_WorkGroupSize");
@@ -6251,6 +6273,9 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
             if (type.getBasicType() == EbtBlock)
                 error(loc, "cannot apply to uniform or buffer block", "location", "");
             break;
+        case EvqtaskPayloadSharedEXT:
+            error(loc, "cannot apply to taskPayloadSharedEXT", "location", "");
+            break;
 #ifndef GLSLANG_WEB
         case EvqPayload:
         case EvqPayloadIn:
@@ -6612,7 +6637,7 @@ void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQua
             error(loc, message, "local_size id", "");
     }
     if (shaderQualifiers.vertices != TQualifier::layoutNotSet) {
-        if (language == EShLangGeometry || language == EShLangMeshNV)
+        if (language == EShLangGeometry || language == EShLangMesh)
             error(loc, message, "max_vertices", "");
         else if (language == EShLangTessControl)
             error(loc, message, "vertices", "");
@@ -6624,7 +6649,7 @@ void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQua
     if (shaderQualifiers.postDepthCoverage)
         error(loc, message, "post_depth_coverage", "");
     if (shaderQualifiers.primitives != TQualifier::layoutNotSet) {
-        if (language == EShLangMeshNV)
+        if (language == EShLangMesh)
             error(loc, message, "max_primitives", "");
         else
             assert(0);
@@ -7270,6 +7295,8 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden
             requireInt8Arithmetic(loc, "qualifier", "(u)int8 types can only be in uniform block or buffer storage");
     }
 
+    if (type.getQualifier().storage == EvqtaskPayloadSharedEXT)
+        intermediate.addTaskPayloadEXTCount();
     if (type.getQualifier().storage == EvqShared && type.containsCoopMat())
         error(loc, "qualifier", "Cooperative matrix types must not be used in shared memory", "");
 
@@ -8236,6 +8263,8 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con
             memberQualifier.perViewNV = currentBlockQualifier.perViewNV;
         if (currentBlockQualifier.perTaskNV)
             memberQualifier.perTaskNV = currentBlockQualifier.perTaskNV;
+        if (currentBlockQualifier.storage == EvqtaskPayloadSharedEXT)
+            memberQualifier.storage = EvqtaskPayloadSharedEXT;
         if (memberQualifier.storage == EvqSpirvStorageClass)
             error(memberLoc, "member cannot have a spirv_storage_class qualifier", memberType.getFieldName().c_str(), "");
         if (memberQualifier.hasSprivDecorate() && !memberQualifier.getSpirvDecorate().decorateIds.empty())
@@ -8536,23 +8565,23 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q
         // It is a compile-time error to have an input block in a vertex shader or an output block in a fragment shader
         // "Compute shaders do not permit user-defined input variables..."
         requireStage(loc, (EShLanguageMask)(EShLangTessControlMask|EShLangTessEvaluationMask|EShLangGeometryMask|
-            EShLangFragmentMask|EShLangMeshNVMask), "input block");
+            EShLangFragmentMask|EShLangMeshMask), "input block");
         if (language == EShLangFragment) {
             profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "fragment input block");
-        } else if (language == EShLangMeshNV && ! qualifier.isTaskMemory()) {
+        } else if (language == EShLangMesh && ! qualifier.isTaskMemory()) {
             error(loc, "input blocks cannot be used in a mesh shader", "out", "");
         }
         break;
     case EvqVaryingOut:
         profileRequires(loc, ~EEsProfile, 150, E_GL_ARB_separate_shader_objects, "output block");
         requireStage(loc, (EShLanguageMask)(EShLangVertexMask|EShLangTessControlMask|EShLangTessEvaluationMask|
-            EShLangGeometryMask|EShLangMeshNVMask|EShLangTaskNVMask), "output block");
+            EShLangGeometryMask|EShLangMeshMask|EShLangTaskMask), "output block");
         // ES 310 can have a block before shader_io is turned on, so skip this test for built-ins
         if (language == EShLangVertex && ! parsingBuiltins) {
             profileRequires(loc, EEsProfile, 320, Num_AEP_shader_io_blocks, AEP_shader_io_blocks, "vertex output block");
-        } else if (language == EShLangMeshNV && qualifier.isTaskMemory()) {
+        } else if (language == EShLangMesh && qualifier.isTaskMemory()) {
             error(loc, "can only use on input blocks in mesh shader", "taskNV", "");
-        } else if (language == EShLangTaskNV && ! qualifier.isTaskMemory()) {
+        } else if (language == EShLangTask && ! qualifier.isTaskMemory()) {
             error(loc, "output blocks cannot be used in a task shader", "out", "");
         }
         break;
@@ -8966,7 +8995,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
 {
 #ifndef GLSLANG_WEB
     if (publicType.shaderQualifiers.vertices != TQualifier::layoutNotSet) {
-        assert(language == EShLangTessControl || language == EShLangGeometry || language == EShLangMeshNV);
+        assert(language == EShLangTessControl || language == EShLangGeometry || language == EShLangMesh);
         const char* id = (language == EShLangTessControl) ? "vertices" : "max_vertices";
 
         if (publicType.qualifier.storage != EvqVaryingOut)
@@ -8978,7 +9007,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
             checkIoArraysConsistency(loc);
     }
     if (publicType.shaderQualifiers.primitives != TQualifier::layoutNotSet) {
-        assert(language == EShLangMeshNV);
+        assert(language == EShLangMesh);
         const char* id = "max_primitives";
 
         if (publicType.qualifier.storage != EvqVaryingOut)
@@ -9002,7 +9031,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
             case ElgTrianglesAdjacency:
             case ElgQuads:
             case ElgIsolines:
-                if (language == EShLangMeshNV) {
+                if (language == EShLangMesh) {
                     error(loc, "cannot apply to input", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
                     break;
                 }
@@ -9019,7 +9048,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
             switch (publicType.shaderQualifiers.geometry) {
             case ElgLines:
             case ElgTriangles:
-                if (language != EShLangMeshNV) {
+                if (language != EShLangMesh) {
                     error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
                     break;
                 }
@@ -9075,24 +9104,56 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
                             error(loc, "too large; see gl_MaxComputeWorkGroupSize", "local_size", "");
                     }
 #ifndef GLSLANG_WEB
-                    else if (language == EShLangMeshNV) {
+                    else if (language == EShLangMesh) {
                         switch (i) {
-                        case 0: max = resources.maxMeshWorkGroupSizeX_NV; break;
-                        case 1: max = resources.maxMeshWorkGroupSizeY_NV; break;
-                        case 2: max = resources.maxMeshWorkGroupSizeZ_NV; break;
+                        case 0:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxMeshWorkGroupSizeX_EXT :
+                                    resources.maxMeshWorkGroupSizeX_NV;
+                            break;
+                        case 1:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxMeshWorkGroupSizeY_EXT :
+                                    resources.maxMeshWorkGroupSizeY_NV ;
+                            break;
+                        case 2:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxMeshWorkGroupSizeZ_EXT :
+                                    resources.maxMeshWorkGroupSizeZ_NV ;
+                            break;
                         default: break;
                         }
-                        if (intermediate.getLocalSize(i) > (unsigned int)max)
-                            error(loc, "too large; see gl_MaxMeshWorkGroupSizeNV", "local_size", "");
-                    } else if (language == EShLangTaskNV) {
+                        if (intermediate.getLocalSize(i) > (unsigned int)max) {
+                            TString maxsErrtring = "too large, see ";
+                            maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                                    "gl_MaxMeshWorkGroupSizeEXT" : "gl_MaxMeshWorkGroupSizeNV");
+                            error(loc, maxsErrtring.c_str(), "local_size", "");
+                        }
+                    } else if (language == EShLangTask) {
                         switch (i) {
-                        case 0: max = resources.maxTaskWorkGroupSizeX_NV; break;
-                        case 1: max = resources.maxTaskWorkGroupSizeY_NV; break;
-                        case 2: max = resources.maxTaskWorkGroupSizeZ_NV; break;
+                        case 0:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxTaskWorkGroupSizeX_EXT :
+                                    resources.maxTaskWorkGroupSizeX_NV;
+                            break;
+                        case 1:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxTaskWorkGroupSizeY_EXT:
+                                    resources.maxTaskWorkGroupSizeY_NV;
+                            break;
+                        case 2:
+                            max = extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                    resources.maxTaskWorkGroupSizeZ_EXT:
+                                    resources.maxTaskWorkGroupSizeZ_NV;
+                            break;
                         default: break;
                         }
-                        if (intermediate.getLocalSize(i) > (unsigned int)max)
-                            error(loc, "too large; see gl_MaxTaskWorkGroupSizeNV", "local_size", "");
+                        if (intermediate.getLocalSize(i) > (unsigned int)max) {
+                            TString maxsErrtring = "too large, see ";
+                            maxsErrtring.append(extensionTurnedOn(E_GL_EXT_mesh_shader) ?
+                                                    "gl_MaxTaskWorkGroupSizeEXT" : "gl_MaxTaskWorkGroupSizeNV");
+                            error(loc, maxsErrtring.c_str(), "local_size", "");
+                        }
                     }
 #endif
                     else {
@@ -9181,7 +9242,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
             error(loc, "can only apply to 'in'", "derivative_group_linearNV", "");
     }
     // Check mesh out array sizes, once all the necessary out qualifiers are defined.
-    if ((language == EShLangMeshNV) &&
+    if ((language == EShLangMesh) &&
         (intermediate.getVertices() != TQualifier::layoutNotSet) &&
         (intermediate.getPrimitives() != TQualifier::layoutNotSet) &&
         (intermediate.getOutputPrimitive() != ElgNone))
@@ -9198,7 +9259,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con
         // Exit early as further checks are not valid
         return;
     }
-#endif 
+#endif
     const TQualifier& qualifier = publicType.qualifier;
 
     if (qualifier.isAuxiliary() ||
@@ -9396,4 +9457,3 @@ const TTypeList* TParseContext::recordStructCopy(TStructRecord& record, const TT
 }
 
 } // end namespace glslang
-
index f53677f..7f51173 100644 (file)
@@ -758,6 +758,8 @@ void TScanContext::fillInKeywordMap()
     (*KeywordMap)["perprimitiveNV"] =          PERPRIMITIVENV;
     (*KeywordMap)["perviewNV"] =               PERVIEWNV;
     (*KeywordMap)["taskNV"] =                  PERTASKNV;
+    (*KeywordMap)["perprimitiveEXT"] =         PERPRIMITIVEEXT;
+    (*KeywordMap)["taskPayloadSharedEXT"] =    TASKPAYLOADWORKGROUPEXT;
 
     (*KeywordMap)["fcoopmatNV"] =              FCOOPMATNV;
     (*KeywordMap)["icoopmatNV"] =              ICOOPMATNV;
@@ -1740,12 +1742,18 @@ int TScanContext::tokenizeIdentifier()
     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() ||
index a5ba40e..8acdb18 100644 (file)
@@ -391,13 +391,13 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TS
     // check for mesh
     if ((profile != EEsProfile && version >= 450) ||
         (profile == EEsProfile && version >= 320))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMeshNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMesh, source,
                                    infoSink, commonTable, symbolTables);
 
     // check for task
     if ((profile != EEsProfile && version >= 450) ||
         (profile == EEsProfile && version >= 320))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source,
+        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTask, source,
                                    infoSink, commonTable, symbolTables);
 #endif // !GLSLANG_ANGLE
 #endif // !GLSLANG_WEB
@@ -650,8 +650,8 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo
             version = 460;
         }
         break;
-    case EShLangMeshNV:
-    case EShLangTaskNV:
+    case EShLangMesh:
+    case EShLangTask:
         if ((profile == EEsProfile && version < 320) ||
             (profile != EEsProfile && version < 450)) {
             correct = false;
index e24d5c5..226e946 100644 (file)
@@ -166,7 +166,8 @@ void TParseVersions::initializeExtensionBehavior()
     } extensionData;
 
     const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4},
-                                   {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4}
+                                   {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4},
+                                   {E_GL_EXT_mesh_shader, EShTargetSpv_1_4}
                                  };
 
     for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) {
@@ -345,6 +346,7 @@ void TParseVersions::initializeExtensionBehavior()
     extensionBehavior[E_GL_EXT_terminate_invocation]        = EBhDisable;
     extensionBehavior[E_GL_EXT_shared_memory_block]         = EBhDisable;
     extensionBehavior[E_GL_EXT_spirv_intrinsics]            = EBhDisable;
+    extensionBehavior[E_GL_EXT_mesh_shader]                 = EBhDisable;
 
     // OVR extensions
     extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
@@ -511,6 +513,7 @@ void TParseVersions::getPreamble(std::string& preamble)
             "#define GL_EXT_ray_flags_primitive_culling 1\n"
             "#define GL_EXT_ray_cull_mask 1\n"
             "#define GL_EXT_spirv_intrinsics 1\n"
+            "#define GL_EXT_mesh_shader 1\n"
 
             "#define GL_AMD_shader_ballot 1\n"
             "#define GL_AMD_shader_trinary_minmax 1\n"
@@ -641,8 +644,8 @@ void TParseVersions::getPreamble(std::string& preamble)
         case EShLangClosestHit:     preamble += "#define GL_CLOSEST_HIT_SHADER_EXT 1 \n";           break;
         case EShLangMiss:           preamble += "#define GL_MISS_SHADER_EXT 1 \n";                  break;
         case EShLangCallable:       preamble += "#define GL_CALLABLE_SHADER_EXT 1 \n";              break;
-        case EShLangTaskNV:         preamble += "#define GL_TASK_SHADER_NV 1 \n";                   break;
-        case EShLangMeshNV:         preamble += "#define GL_MESH_SHADER_NV 1 \n";                   break;
+        case EShLangTask:           preamble += "#define GL_TASK_SHADER_NV 1 \n";                   break;
+        case EShLangMesh:           preamble += "#define GL_MESH_SHADER_NV 1 \n";                   break;
         default:                                                                                    break;
         }
     }
@@ -668,8 +671,8 @@ const char* StageName(EShLanguage stage)
     case EShLangClosestHit:     return "closest-hit";
     case EShLangMiss:           return "miss";
     case EShLangCallable:       return "callable";
-    case EShLangMeshNV:         return "mesh";
-    case EShLangTaskNV:         return "task";
+    case EShLangMesh:           return "mesh";
+    case EShLangTask:           return "task";
 #endif
     default:                    return "unknown stage";
     }
@@ -1060,10 +1063,22 @@ void TParseVersions::checkExtensionStage(const TSourceLoc& loc, const char * con
 {
     // GL_NV_mesh_shader extension is only allowed in task/mesh shaders
     if (strcmp(extension, "GL_NV_mesh_shader") == 0) {
-        requireStage(loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask | EShLangFragmentMask),
+        requireStage(loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask | EShLangFragmentMask),
                      "#extension GL_NV_mesh_shader");
         profileRequires(loc, ECoreProfile, 450, 0, "#extension GL_NV_mesh_shader");
         profileRequires(loc, EEsProfile, 320, 0, "#extension GL_NV_mesh_shader");
+        if (extensionTurnedOn(E_GL_EXT_mesh_shader)) {
+            error(loc, "GL_EXT_mesh_shader is already turned on, and not allowed with", "#extension", extension);
+        }
+    }
+    else if (strcmp(extension, "GL_EXT_mesh_shader") == 0) {
+        requireStage(loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask | EShLangFragmentMask),
+                     "#extension GL_EXT_mesh_shader");
+        profileRequires(loc, ECoreProfile, 450, 0, "#extension GL_EXT_mesh_shader");
+        profileRequires(loc, EEsProfile, 320, 0, "#extension GL_EXT_mesh_shader");
+        if (extensionTurnedOn(E_GL_NV_mesh_shader)) {
+            error(loc, "GL_NV_mesh_shader is already turned on, and not allowed with", "#extension", extension);
+        }
     }
 }
 
index 68e7063..6ab3788 100644 (file)
@@ -211,6 +211,7 @@ const char* const E_GL_EXT_shared_memory_block              = "GL_EXT_shared_mem
 const char* const E_GL_EXT_subgroup_uniform_control_flow    = "GL_EXT_subgroup_uniform_control_flow";
 const char* const E_GL_EXT_spirv_intrinsics                 = "GL_EXT_spirv_intrinsics";
 const char* const E_GL_EXT_fragment_shader_barycentric      = "GL_EXT_fragment_shader_barycentric";
+const char* const E_GL_EXT_mesh_shader                      = "GL_EXT_mesh_shader";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
@@ -288,7 +289,7 @@ const char* const E_GL_EXT_tessellation_shader                  = "GL_EXT_tessel
 const char* const E_GL_EXT_tessellation_point_size              = "GL_EXT_tessellation_point_size";
 const char* const E_GL_EXT_texture_buffer                       = "GL_EXT_texture_buffer";
 const char* const E_GL_EXT_texture_cube_map_array               = "GL_EXT_texture_cube_map_array";
-const char* const E_GL_EXT_shader_integer_mix                   = "GL_EXT_shader_integer_mix"; 
+const char* const E_GL_EXT_shader_integer_mix                   = "GL_EXT_shader_integer_mix";
 
 // OES matching AEP
 const char* const E_GL_OES_geometry_shader                      = "GL_OES_geometry_shader";
@@ -349,6 +350,9 @@ const int Num_AEP_texture_buffer = sizeof(AEP_texture_buffer)/sizeof(AEP_texture
 const char* const AEP_texture_cube_map_array[] = { E_GL_EXT_texture_cube_map_array, E_GL_OES_texture_cube_map_array };
 const int Num_AEP_texture_cube_map_array = sizeof(AEP_texture_cube_map_array)/sizeof(AEP_texture_cube_map_array[0]);
 
+const char* const AEP_mesh_shader[] = { E_GL_NV_mesh_shader, E_GL_EXT_mesh_shader };
+const int Num_AEP_mesh_shader = sizeof(AEP_mesh_shader)/sizeof(AEP_mesh_shader[0]);
+
 } // end namespace glslang
 
 #endif // _VERSIONS_INCLUDED_
index 3ab7a3c..4fee9fe 100644 (file)
@@ -315,7 +315,7 @@ GLSLANG_WEB_EXCLUDE_ON
 %token <lex> PATCH SAMPLE NONUNIFORM
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
 %token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
-%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXEXT PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXEXT PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV PERPRIMITIVEEXT TASKPAYLOADWORKGROUPEXT
 %token <lex> PRECISE
 GLSLANG_WEB_EXCLUDE_OFF
 
@@ -1301,24 +1301,34 @@ GLSLANG_WEB_EXCLUDE_ON
     | PERPRIMITIVENV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "perprimitiveNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveNV");
         // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
         if (parseContext.language == EShLangFragment)
             parseContext.requireExtensions($1.loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
         $$.init($1.loc);
         $$.qualifier.perPrimitiveNV = true;
     }
+    | PERPRIMITIVEEXT {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "perprimitiveEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveEXT");
+        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
+        if (parseContext.language == EShLangFragment)
+            parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_mesh_shader, "perprimitiveEXT");
+        $$.init($1.loc);
+        $$.qualifier.perPrimitiveNV = true;
+    }
     | PERVIEWNV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "perviewNV");
-        parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV");
+        parseContext.requireStage($1.loc, EShLangMesh, "perviewNV");
         $$.init($1.loc);
         $$.qualifier.perViewNV = true;
     }
     | PERTASKNV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "taskNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskNV");
         $$.init($1.loc);
         $$.qualifier.perTaskNV = true;
     }
@@ -1469,7 +1479,7 @@ storage_qualifier
         parseContext.globalCheck($1.loc, "shared");
         parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
         parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshMask | EShLangTaskMask), "shared");
         $$.init($1.loc);
         $$.qualifier.storage = EvqShared;
     }
@@ -1656,6 +1666,13 @@ GLSLANG_WEB_EXCLUDE_ON
         parseContext.unimplemented($1.loc, "subroutine");
         $$.init($1.loc);
     }
+    | TASKPAYLOADWORKGROUPEXT {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "taskPayloadSharedEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskPayloadSharedEXT  ");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqtaskPayloadSharedEXT;
+    }
 GLSLANG_WEB_EXCLUDE_OFF
     ;
 
index d77c831..b37924f 100644 (file)
@@ -315,7 +315,7 @@ extern int yylex(YYSTYPE*, TParseContext&);
 %token <lex> PATCH SAMPLE NONUNIFORM
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT
 %token <lex> SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT
-%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXEXT PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV
+%token <lex> NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXEXT PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV PERPRIMITIVEEXT TASKPAYLOADWORKGROUPEXT
 %token <lex> PRECISE
 
 
@@ -1301,24 +1301,34 @@ interpolation_qualifier
     | PERPRIMITIVENV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "perprimitiveNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveNV");
         // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
         if (parseContext.language == EShLangFragment)
             parseContext.requireExtensions($1.loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
         $$.init($1.loc);
         $$.qualifier.perPrimitiveNV = true;
     }
+    | PERPRIMITIVEEXT {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "perprimitiveEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveEXT");
+        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
+        if (parseContext.language == EShLangFragment)
+            parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_mesh_shader, "perprimitiveEXT");
+        $$.init($1.loc);
+        $$.qualifier.perPrimitiveNV = true;
+    }
     | PERVIEWNV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "perviewNV");
-        parseContext.requireStage($1.loc, EShLangMeshNV, "perviewNV");
+        parseContext.requireStage($1.loc, EShLangMesh, "perviewNV");
         $$.init($1.loc);
         $$.qualifier.perViewNV = true;
     }
     | PERTASKNV {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck($1.loc, "taskNV");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskNV");
         $$.init($1.loc);
         $$.qualifier.perTaskNV = true;
     }
@@ -1469,7 +1479,7 @@ storage_qualifier
         parseContext.globalCheck($1.loc, "shared");
         parseContext.profileRequires($1.loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
         parseContext.profileRequires($1.loc, EEsProfile, 310, 0, "shared");
-        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshMask | EShLangTaskMask), "shared");
         $$.init($1.loc);
         $$.qualifier.storage = EvqShared;
     }
@@ -1656,6 +1666,13 @@ storage_qualifier
         parseContext.unimplemented($1.loc, "subroutine");
         $$.init($1.loc);
     }
+    | TASKPAYLOADWORKGROUPEXT {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck($1.loc, "taskPayloadSharedEXT");
+        parseContext.requireStage($1.loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskPayloadSharedEXT  ");
+        $$.init($1.loc);
+        $$.qualifier.storage = EvqtaskPayloadSharedEXT;
+    }
 
     ;
 
index 4e4768e..29731bf 100644 (file)
@@ -576,138 +576,140 @@ enum yysymbol_kind_t
   YYSYMBOL_PERPRIMITIVENV = 452,           /* PERPRIMITIVENV  */
   YYSYMBOL_PERVIEWNV = 453,                /* PERVIEWNV  */
   YYSYMBOL_PERTASKNV = 454,                /* PERTASKNV  */
-  YYSYMBOL_PRECISE = 455,                  /* PRECISE  */
-  YYSYMBOL_YYACCEPT = 456,                 /* $accept  */
-  YYSYMBOL_variable_identifier = 457,      /* variable_identifier  */
-  YYSYMBOL_primary_expression = 458,       /* primary_expression  */
-  YYSYMBOL_postfix_expression = 459,       /* postfix_expression  */
-  YYSYMBOL_integer_expression = 460,       /* integer_expression  */
-  YYSYMBOL_function_call = 461,            /* function_call  */
-  YYSYMBOL_function_call_or_method = 462,  /* function_call_or_method  */
-  YYSYMBOL_function_call_generic = 463,    /* function_call_generic  */
-  YYSYMBOL_function_call_header_no_parameters = 464, /* function_call_header_no_parameters  */
-  YYSYMBOL_function_call_header_with_parameters = 465, /* function_call_header_with_parameters  */
-  YYSYMBOL_function_call_header = 466,     /* function_call_header  */
-  YYSYMBOL_function_identifier = 467,      /* function_identifier  */
-  YYSYMBOL_unary_expression = 468,         /* unary_expression  */
-  YYSYMBOL_unary_operator = 469,           /* unary_operator  */
-  YYSYMBOL_multiplicative_expression = 470, /* multiplicative_expression  */
-  YYSYMBOL_additive_expression = 471,      /* additive_expression  */
-  YYSYMBOL_shift_expression = 472,         /* shift_expression  */
-  YYSYMBOL_relational_expression = 473,    /* relational_expression  */
-  YYSYMBOL_equality_expression = 474,      /* equality_expression  */
-  YYSYMBOL_and_expression = 475,           /* and_expression  */
-  YYSYMBOL_exclusive_or_expression = 476,  /* exclusive_or_expression  */
-  YYSYMBOL_inclusive_or_expression = 477,  /* inclusive_or_expression  */
-  YYSYMBOL_logical_and_expression = 478,   /* logical_and_expression  */
-  YYSYMBOL_logical_xor_expression = 479,   /* logical_xor_expression  */
-  YYSYMBOL_logical_or_expression = 480,    /* logical_or_expression  */
-  YYSYMBOL_conditional_expression = 481,   /* conditional_expression  */
-  YYSYMBOL_482_1 = 482,                    /* $@1  */
-  YYSYMBOL_assignment_expression = 483,    /* assignment_expression  */
-  YYSYMBOL_assignment_operator = 484,      /* assignment_operator  */
-  YYSYMBOL_expression = 485,               /* expression  */
-  YYSYMBOL_constant_expression = 486,      /* constant_expression  */
-  YYSYMBOL_declaration = 487,              /* declaration  */
-  YYSYMBOL_block_structure = 488,          /* block_structure  */
-  YYSYMBOL_489_2 = 489,                    /* $@2  */
-  YYSYMBOL_identifier_list = 490,          /* identifier_list  */
-  YYSYMBOL_function_prototype = 491,       /* function_prototype  */
-  YYSYMBOL_function_declarator = 492,      /* function_declarator  */
-  YYSYMBOL_function_header_with_parameters = 493, /* function_header_with_parameters  */
-  YYSYMBOL_function_header = 494,          /* function_header  */
-  YYSYMBOL_parameter_declarator = 495,     /* parameter_declarator  */
-  YYSYMBOL_parameter_declaration = 496,    /* parameter_declaration  */
-  YYSYMBOL_parameter_type_specifier = 497, /* parameter_type_specifier  */
-  YYSYMBOL_init_declarator_list = 498,     /* init_declarator_list  */
-  YYSYMBOL_single_declaration = 499,       /* single_declaration  */
-  YYSYMBOL_fully_specified_type = 500,     /* fully_specified_type  */
-  YYSYMBOL_invariant_qualifier = 501,      /* invariant_qualifier  */
-  YYSYMBOL_interpolation_qualifier = 502,  /* interpolation_qualifier  */
-  YYSYMBOL_layout_qualifier = 503,         /* layout_qualifier  */
-  YYSYMBOL_layout_qualifier_id_list = 504, /* layout_qualifier_id_list  */
-  YYSYMBOL_layout_qualifier_id = 505,      /* layout_qualifier_id  */
-  YYSYMBOL_precise_qualifier = 506,        /* precise_qualifier  */
-  YYSYMBOL_type_qualifier = 507,           /* type_qualifier  */
-  YYSYMBOL_single_type_qualifier = 508,    /* single_type_qualifier  */
-  YYSYMBOL_storage_qualifier = 509,        /* storage_qualifier  */
-  YYSYMBOL_non_uniform_qualifier = 510,    /* non_uniform_qualifier  */
-  YYSYMBOL_type_name_list = 511,           /* type_name_list  */
-  YYSYMBOL_type_specifier = 512,           /* type_specifier  */
-  YYSYMBOL_array_specifier = 513,          /* array_specifier  */
-  YYSYMBOL_type_parameter_specifier_opt = 514, /* type_parameter_specifier_opt  */
-  YYSYMBOL_type_parameter_specifier = 515, /* type_parameter_specifier  */
-  YYSYMBOL_type_parameter_specifier_list = 516, /* type_parameter_specifier_list  */
-  YYSYMBOL_type_specifier_nonarray = 517,  /* type_specifier_nonarray  */
-  YYSYMBOL_precision_qualifier = 518,      /* precision_qualifier  */
-  YYSYMBOL_struct_specifier = 519,         /* struct_specifier  */
-  YYSYMBOL_520_3 = 520,                    /* $@3  */
-  YYSYMBOL_521_4 = 521,                    /* $@4  */
-  YYSYMBOL_struct_declaration_list = 522,  /* struct_declaration_list  */
-  YYSYMBOL_struct_declaration = 523,       /* struct_declaration  */
-  YYSYMBOL_struct_declarator_list = 524,   /* struct_declarator_list  */
-  YYSYMBOL_struct_declarator = 525,        /* struct_declarator  */
-  YYSYMBOL_initializer = 526,              /* initializer  */
-  YYSYMBOL_initializer_list = 527,         /* initializer_list  */
-  YYSYMBOL_declaration_statement = 528,    /* declaration_statement  */
-  YYSYMBOL_statement = 529,                /* statement  */
-  YYSYMBOL_simple_statement = 530,         /* simple_statement  */
-  YYSYMBOL_demote_statement = 531,         /* demote_statement  */
-  YYSYMBOL_compound_statement = 532,       /* compound_statement  */
-  YYSYMBOL_533_5 = 533,                    /* $@5  */
-  YYSYMBOL_534_6 = 534,                    /* $@6  */
-  YYSYMBOL_statement_no_new_scope = 535,   /* statement_no_new_scope  */
-  YYSYMBOL_statement_scoped = 536,         /* statement_scoped  */
-  YYSYMBOL_537_7 = 537,                    /* $@7  */
-  YYSYMBOL_538_8 = 538,                    /* $@8  */
-  YYSYMBOL_compound_statement_no_new_scope = 539, /* compound_statement_no_new_scope  */
-  YYSYMBOL_statement_list = 540,           /* statement_list  */
-  YYSYMBOL_expression_statement = 541,     /* expression_statement  */
-  YYSYMBOL_selection_statement = 542,      /* selection_statement  */
-  YYSYMBOL_selection_statement_nonattributed = 543, /* selection_statement_nonattributed  */
-  YYSYMBOL_selection_rest_statement = 544, /* selection_rest_statement  */
-  YYSYMBOL_condition = 545,                /* condition  */
-  YYSYMBOL_switch_statement = 546,         /* switch_statement  */
-  YYSYMBOL_switch_statement_nonattributed = 547, /* switch_statement_nonattributed  */
-  YYSYMBOL_548_9 = 548,                    /* $@9  */
-  YYSYMBOL_switch_statement_list = 549,    /* switch_statement_list  */
-  YYSYMBOL_case_label = 550,               /* case_label  */
-  YYSYMBOL_iteration_statement = 551,      /* iteration_statement  */
-  YYSYMBOL_iteration_statement_nonattributed = 552, /* iteration_statement_nonattributed  */
-  YYSYMBOL_553_10 = 553,                   /* $@10  */
-  YYSYMBOL_554_11 = 554,                   /* $@11  */
-  YYSYMBOL_555_12 = 555,                   /* $@12  */
-  YYSYMBOL_for_init_statement = 556,       /* for_init_statement  */
-  YYSYMBOL_conditionopt = 557,             /* conditionopt  */
-  YYSYMBOL_for_rest_statement = 558,       /* for_rest_statement  */
-  YYSYMBOL_jump_statement = 559,           /* jump_statement  */
-  YYSYMBOL_translation_unit = 560,         /* translation_unit  */
-  YYSYMBOL_external_declaration = 561,     /* external_declaration  */
-  YYSYMBOL_function_definition = 562,      /* function_definition  */
-  YYSYMBOL_563_13 = 563,                   /* $@13  */
-  YYSYMBOL_attribute = 564,                /* attribute  */
-  YYSYMBOL_attribute_list = 565,           /* attribute_list  */
-  YYSYMBOL_single_attribute = 566,         /* single_attribute  */
-  YYSYMBOL_spirv_requirements_list = 567,  /* spirv_requirements_list  */
-  YYSYMBOL_spirv_requirements_parameter = 568, /* spirv_requirements_parameter  */
-  YYSYMBOL_spirv_extension_list = 569,     /* spirv_extension_list  */
-  YYSYMBOL_spirv_capability_list = 570,    /* spirv_capability_list  */
-  YYSYMBOL_spirv_execution_mode_qualifier = 571, /* spirv_execution_mode_qualifier  */
-  YYSYMBOL_spirv_execution_mode_parameter_list = 572, /* spirv_execution_mode_parameter_list  */
-  YYSYMBOL_spirv_execution_mode_parameter = 573, /* spirv_execution_mode_parameter  */
-  YYSYMBOL_spirv_execution_mode_id_parameter_list = 574, /* spirv_execution_mode_id_parameter_list  */
-  YYSYMBOL_spirv_storage_class_qualifier = 575, /* spirv_storage_class_qualifier  */
-  YYSYMBOL_spirv_decorate_qualifier = 576, /* spirv_decorate_qualifier  */
-  YYSYMBOL_spirv_decorate_parameter_list = 577, /* spirv_decorate_parameter_list  */
-  YYSYMBOL_spirv_decorate_parameter = 578, /* spirv_decorate_parameter  */
-  YYSYMBOL_spirv_decorate_id_parameter_list = 579, /* spirv_decorate_id_parameter_list  */
-  YYSYMBOL_spirv_decorate_string_parameter_list = 580, /* spirv_decorate_string_parameter_list  */
-  YYSYMBOL_spirv_type_specifier = 581,     /* spirv_type_specifier  */
-  YYSYMBOL_spirv_type_parameter_list = 582, /* spirv_type_parameter_list  */
-  YYSYMBOL_spirv_type_parameter = 583,     /* spirv_type_parameter  */
-  YYSYMBOL_spirv_instruction_qualifier = 584, /* spirv_instruction_qualifier  */
-  YYSYMBOL_spirv_instruction_qualifier_list = 585, /* spirv_instruction_qualifier_list  */
-  YYSYMBOL_spirv_instruction_qualifier_id = 586 /* spirv_instruction_qualifier_id  */
+  YYSYMBOL_PERPRIMITIVEEXT = 455,          /* PERPRIMITIVEEXT  */
+  YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 456,  /* TASKPAYLOADWORKGROUPEXT  */
+  YYSYMBOL_PRECISE = 457,                  /* PRECISE  */
+  YYSYMBOL_YYACCEPT = 458,                 /* $accept  */
+  YYSYMBOL_variable_identifier = 459,      /* variable_identifier  */
+  YYSYMBOL_primary_expression = 460,       /* primary_expression  */
+  YYSYMBOL_postfix_expression = 461,       /* postfix_expression  */
+  YYSYMBOL_integer_expression = 462,       /* integer_expression  */
+  YYSYMBOL_function_call = 463,            /* function_call  */
+  YYSYMBOL_function_call_or_method = 464,  /* function_call_or_method  */
+  YYSYMBOL_function_call_generic = 465,    /* function_call_generic  */
+  YYSYMBOL_function_call_header_no_parameters = 466, /* function_call_header_no_parameters  */
+  YYSYMBOL_function_call_header_with_parameters = 467, /* function_call_header_with_parameters  */
+  YYSYMBOL_function_call_header = 468,     /* function_call_header  */
+  YYSYMBOL_function_identifier = 469,      /* function_identifier  */
+  YYSYMBOL_unary_expression = 470,         /* unary_expression  */
+  YYSYMBOL_unary_operator = 471,           /* unary_operator  */
+  YYSYMBOL_multiplicative_expression = 472, /* multiplicative_expression  */
+  YYSYMBOL_additive_expression = 473,      /* additive_expression  */
+  YYSYMBOL_shift_expression = 474,         /* shift_expression  */
+  YYSYMBOL_relational_expression = 475,    /* relational_expression  */
+  YYSYMBOL_equality_expression = 476,      /* equality_expression  */
+  YYSYMBOL_and_expression = 477,           /* and_expression  */
+  YYSYMBOL_exclusive_or_expression = 478,  /* exclusive_or_expression  */
+  YYSYMBOL_inclusive_or_expression = 479,  /* inclusive_or_expression  */
+  YYSYMBOL_logical_and_expression = 480,   /* logical_and_expression  */
+  YYSYMBOL_logical_xor_expression = 481,   /* logical_xor_expression  */
+  YYSYMBOL_logical_or_expression = 482,    /* logical_or_expression  */
+  YYSYMBOL_conditional_expression = 483,   /* conditional_expression  */
+  YYSYMBOL_484_1 = 484,                    /* $@1  */
+  YYSYMBOL_assignment_expression = 485,    /* assignment_expression  */
+  YYSYMBOL_assignment_operator = 486,      /* assignment_operator  */
+  YYSYMBOL_expression = 487,               /* expression  */
+  YYSYMBOL_constant_expression = 488,      /* constant_expression  */
+  YYSYMBOL_declaration = 489,              /* declaration  */
+  YYSYMBOL_block_structure = 490,          /* block_structure  */
+  YYSYMBOL_491_2 = 491,                    /* $@2  */
+  YYSYMBOL_identifier_list = 492,          /* identifier_list  */
+  YYSYMBOL_function_prototype = 493,       /* function_prototype  */
+  YYSYMBOL_function_declarator = 494,      /* function_declarator  */
+  YYSYMBOL_function_header_with_parameters = 495, /* function_header_with_parameters  */
+  YYSYMBOL_function_header = 496,          /* function_header  */
+  YYSYMBOL_parameter_declarator = 497,     /* parameter_declarator  */
+  YYSYMBOL_parameter_declaration = 498,    /* parameter_declaration  */
+  YYSYMBOL_parameter_type_specifier = 499, /* parameter_type_specifier  */
+  YYSYMBOL_init_declarator_list = 500,     /* init_declarator_list  */
+  YYSYMBOL_single_declaration = 501,       /* single_declaration  */
+  YYSYMBOL_fully_specified_type = 502,     /* fully_specified_type  */
+  YYSYMBOL_invariant_qualifier = 503,      /* invariant_qualifier  */
+  YYSYMBOL_interpolation_qualifier = 504,  /* interpolation_qualifier  */
+  YYSYMBOL_layout_qualifier = 505,         /* layout_qualifier  */
+  YYSYMBOL_layout_qualifier_id_list = 506, /* layout_qualifier_id_list  */
+  YYSYMBOL_layout_qualifier_id = 507,      /* layout_qualifier_id  */
+  YYSYMBOL_precise_qualifier = 508,        /* precise_qualifier  */
+  YYSYMBOL_type_qualifier = 509,           /* type_qualifier  */
+  YYSYMBOL_single_type_qualifier = 510,    /* single_type_qualifier  */
+  YYSYMBOL_storage_qualifier = 511,        /* storage_qualifier  */
+  YYSYMBOL_non_uniform_qualifier = 512,    /* non_uniform_qualifier  */
+  YYSYMBOL_type_name_list = 513,           /* type_name_list  */
+  YYSYMBOL_type_specifier = 514,           /* type_specifier  */
+  YYSYMBOL_array_specifier = 515,          /* array_specifier  */
+  YYSYMBOL_type_parameter_specifier_opt = 516, /* type_parameter_specifier_opt  */
+  YYSYMBOL_type_parameter_specifier = 517, /* type_parameter_specifier  */
+  YYSYMBOL_type_parameter_specifier_list = 518, /* type_parameter_specifier_list  */
+  YYSYMBOL_type_specifier_nonarray = 519,  /* type_specifier_nonarray  */
+  YYSYMBOL_precision_qualifier = 520,      /* precision_qualifier  */
+  YYSYMBOL_struct_specifier = 521,         /* struct_specifier  */
+  YYSYMBOL_522_3 = 522,                    /* $@3  */
+  YYSYMBOL_523_4 = 523,                    /* $@4  */
+  YYSYMBOL_struct_declaration_list = 524,  /* struct_declaration_list  */
+  YYSYMBOL_struct_declaration = 525,       /* struct_declaration  */
+  YYSYMBOL_struct_declarator_list = 526,   /* struct_declarator_list  */
+  YYSYMBOL_struct_declarator = 527,        /* struct_declarator  */
+  YYSYMBOL_initializer = 528,              /* initializer  */
+  YYSYMBOL_initializer_list = 529,         /* initializer_list  */
+  YYSYMBOL_declaration_statement = 530,    /* declaration_statement  */
+  YYSYMBOL_statement = 531,                /* statement  */
+  YYSYMBOL_simple_statement = 532,         /* simple_statement  */
+  YYSYMBOL_demote_statement = 533,         /* demote_statement  */
+  YYSYMBOL_compound_statement = 534,       /* compound_statement  */
+  YYSYMBOL_535_5 = 535,                    /* $@5  */
+  YYSYMBOL_536_6 = 536,                    /* $@6  */
+  YYSYMBOL_statement_no_new_scope = 537,   /* statement_no_new_scope  */
+  YYSYMBOL_statement_scoped = 538,         /* statement_scoped  */
+  YYSYMBOL_539_7 = 539,                    /* $@7  */
+  YYSYMBOL_540_8 = 540,                    /* $@8  */
+  YYSYMBOL_compound_statement_no_new_scope = 541, /* compound_statement_no_new_scope  */
+  YYSYMBOL_statement_list = 542,           /* statement_list  */
+  YYSYMBOL_expression_statement = 543,     /* expression_statement  */
+  YYSYMBOL_selection_statement = 544,      /* selection_statement  */
+  YYSYMBOL_selection_statement_nonattributed = 545, /* selection_statement_nonattributed  */
+  YYSYMBOL_selection_rest_statement = 546, /* selection_rest_statement  */
+  YYSYMBOL_condition = 547,                /* condition  */
+  YYSYMBOL_switch_statement = 548,         /* switch_statement  */
+  YYSYMBOL_switch_statement_nonattributed = 549, /* switch_statement_nonattributed  */
+  YYSYMBOL_550_9 = 550,                    /* $@9  */
+  YYSYMBOL_switch_statement_list = 551,    /* switch_statement_list  */
+  YYSYMBOL_case_label = 552,               /* case_label  */
+  YYSYMBOL_iteration_statement = 553,      /* iteration_statement  */
+  YYSYMBOL_iteration_statement_nonattributed = 554, /* iteration_statement_nonattributed  */
+  YYSYMBOL_555_10 = 555,                   /* $@10  */
+  YYSYMBOL_556_11 = 556,                   /* $@11  */
+  YYSYMBOL_557_12 = 557,                   /* $@12  */
+  YYSYMBOL_for_init_statement = 558,       /* for_init_statement  */
+  YYSYMBOL_conditionopt = 559,             /* conditionopt  */
+  YYSYMBOL_for_rest_statement = 560,       /* for_rest_statement  */
+  YYSYMBOL_jump_statement = 561,           /* jump_statement  */
+  YYSYMBOL_translation_unit = 562,         /* translation_unit  */
+  YYSYMBOL_external_declaration = 563,     /* external_declaration  */
+  YYSYMBOL_function_definition = 564,      /* function_definition  */
+  YYSYMBOL_565_13 = 565,                   /* $@13  */
+  YYSYMBOL_attribute = 566,                /* attribute  */
+  YYSYMBOL_attribute_list = 567,           /* attribute_list  */
+  YYSYMBOL_single_attribute = 568,         /* single_attribute  */
+  YYSYMBOL_spirv_requirements_list = 569,  /* spirv_requirements_list  */
+  YYSYMBOL_spirv_requirements_parameter = 570, /* spirv_requirements_parameter  */
+  YYSYMBOL_spirv_extension_list = 571,     /* spirv_extension_list  */
+  YYSYMBOL_spirv_capability_list = 572,    /* spirv_capability_list  */
+  YYSYMBOL_spirv_execution_mode_qualifier = 573, /* spirv_execution_mode_qualifier  */
+  YYSYMBOL_spirv_execution_mode_parameter_list = 574, /* spirv_execution_mode_parameter_list  */
+  YYSYMBOL_spirv_execution_mode_parameter = 575, /* spirv_execution_mode_parameter  */
+  YYSYMBOL_spirv_execution_mode_id_parameter_list = 576, /* spirv_execution_mode_id_parameter_list  */
+  YYSYMBOL_spirv_storage_class_qualifier = 577, /* spirv_storage_class_qualifier  */
+  YYSYMBOL_spirv_decorate_qualifier = 578, /* spirv_decorate_qualifier  */
+  YYSYMBOL_spirv_decorate_parameter_list = 579, /* spirv_decorate_parameter_list  */
+  YYSYMBOL_spirv_decorate_parameter = 580, /* spirv_decorate_parameter  */
+  YYSYMBOL_spirv_decorate_id_parameter_list = 581, /* spirv_decorate_id_parameter_list  */
+  YYSYMBOL_spirv_decorate_string_parameter_list = 582, /* spirv_decorate_string_parameter_list  */
+  YYSYMBOL_spirv_type_specifier = 583,     /* spirv_type_specifier  */
+  YYSYMBOL_spirv_type_parameter_list = 584, /* spirv_type_parameter_list  */
+  YYSYMBOL_spirv_type_parameter = 585,     /* spirv_type_parameter  */
+  YYSYMBOL_spirv_instruction_qualifier = 586, /* spirv_instruction_qualifier  */
+  YYSYMBOL_spirv_instruction_qualifier_list = 587, /* spirv_instruction_qualifier_list  */
+  YYSYMBOL_spirv_instruction_qualifier_id = 588 /* spirv_instruction_qualifier_id  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -729,7 +731,7 @@ typedef enum yysymbol_kind_t yysymbol_kind_t;
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 733 "MachineIndependent/glslang_tab.cpp"
+#line 735 "MachineIndependent/glslang_tab.cpp"
 
 
 #ifdef short
@@ -1033,21 +1035,21 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  443
+#define YYFINAL  445
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   12469
+#define YYLAST   12503
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  456
+#define YYNTOKENS  458
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  131
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  684
+#define YYNRULES  686
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  930
+#define YYNSTATES  932
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   710
+#define YYMAXUTOK   712
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1132,7 +1134,7 @@ static const yytype_int16 yytranslate[] =
      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
      435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
      445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455
+     455,   456,   457
 };
 
 #if YYDEBUG
@@ -1153,61 +1155,61 @@ static const yytype_int16 yyrline[] =
      982,   988,   994,  1004,  1007,  1014,  1022,  1042,  1065,  1080,
     1105,  1116,  1126,  1136,  1146,  1155,  1158,  1162,  1166,  1171,
     1179,  1186,  1191,  1196,  1201,  1210,  1220,  1247,  1256,  1263,
-    1271,  1278,  1285,  1293,  1301,  1311,  1318,  1329,  1335,  1338,
-    1345,  1349,  1353,  1362,  1372,  1375,  1386,  1389,  1392,  1396,
-    1400,  1405,  1409,  1412,  1417,  1421,  1426,  1435,  1439,  1444,
-    1450,  1456,  1463,  1468,  1476,  1482,  1494,  1508,  1514,  1519,
-    1527,  1535,  1543,  1551,  1559,  1567,  1575,  1583,  1590,  1597,
-    1601,  1606,  1611,  1616,  1621,  1626,  1631,  1635,  1639,  1643,
-    1647,  1653,  1664,  1671,  1674,  1683,  1688,  1698,  1703,  1711,
-    1715,  1725,  1728,  1734,  1740,  1747,  1757,  1761,  1765,  1769,
-    1774,  1778,  1783,  1788,  1793,  1798,  1803,  1808,  1813,  1818,
-    1823,  1829,  1835,  1841,  1846,  1851,  1856,  1861,  1866,  1871,
-    1876,  1881,  1886,  1891,  1896,  1902,  1909,  1914,  1919,  1924,
-    1929,  1934,  1939,  1944,  1949,  1954,  1959,  1964,  1972,  1980,
-    1988,  1994,  2000,  2006,  2012,  2018,  2024,  2030,  2036,  2042,
-    2048,  2054,  2060,  2066,  2072,  2078,  2084,  2090,  2096,  2102,
-    2108,  2114,  2120,  2126,  2132,  2138,  2144,  2150,  2156,  2162,
-    2168,  2174,  2180,  2186,  2194,  2202,  2210,  2218,  2226,  2234,
-    2242,  2250,  2258,  2266,  2274,  2282,  2288,  2294,  2300,  2306,
-    2312,  2318,  2324,  2330,  2336,  2342,  2348,  2354,  2360,  2366,
-    2372,  2378,  2384,  2390,  2396,  2402,  2408,  2414,  2420,  2426,
-    2432,  2438,  2444,  2450,  2456,  2462,  2468,  2474,  2480,  2486,
-    2492,  2498,  2502,  2506,  2510,  2515,  2521,  2526,  2531,  2536,
-    2541,  2546,  2551,  2557,  2562,  2567,  2572,  2577,  2582,  2588,
-    2594,  2600,  2606,  2612,  2618,  2624,  2630,  2636,  2642,  2648,
-    2654,  2660,  2666,  2671,  2676,  2681,  2686,  2691,  2696,  2702,
-    2707,  2712,  2717,  2722,  2727,  2732,  2737,  2743,  2748,  2753,
-    2758,  2763,  2768,  2773,  2778,  2783,  2788,  2793,  2798,  2803,
-    2808,  2813,  2819,  2824,  2829,  2835,  2841,  2846,  2851,  2856,
-    2862,  2867,  2872,  2877,  2883,  2888,  2893,  2898,  2904,  2909,
-    2914,  2919,  2925,  2931,  2937,  2943,  2948,  2954,  2960,  2966,
-    2971,  2976,  2981,  2986,  2991,  2997,  3002,  3007,  3012,  3018,
-    3023,  3028,  3033,  3039,  3044,  3049,  3054,  3060,  3065,  3070,
-    3075,  3081,  3086,  3091,  3096,  3102,  3107,  3112,  3117,  3123,
-    3128,  3133,  3138,  3144,  3149,  3154,  3159,  3165,  3170,  3175,
-    3180,  3186,  3191,  3196,  3201,  3207,  3212,  3217,  3222,  3228,
-    3233,  3238,  3243,  3249,  3254,  3259,  3264,  3270,  3275,  3280,
-    3285,  3291,  3296,  3301,  3306,  3311,  3316,  3321,  3326,  3331,
-    3336,  3341,  3346,  3351,  3356,  3361,  3366,  3371,  3376,  3381,
-    3386,  3391,  3396,  3401,  3406,  3411,  3417,  3423,  3429,  3435,
-    3442,  3449,  3455,  3461,  3467,  3473,  3479,  3485,  3491,  3496,
-    3501,  3517,  3522,  3527,  3535,  3535,  3546,  3546,  3556,  3559,
-    3572,  3594,  3621,  3625,  3631,  3636,  3647,  3651,  3657,  3663,
-    3674,  3677,  3684,  3688,  3689,  3695,  3696,  3697,  3698,  3699,
-    3700,  3701,  3703,  3709,  3718,  3719,  3723,  3719,  3735,  3736,
-    3740,  3740,  3747,  3747,  3761,  3764,  3772,  3780,  3791,  3792,
-    3796,  3800,  3808,  3815,  3819,  3827,  3831,  3844,  3848,  3856,
-    3856,  3876,  3879,  3885,  3897,  3909,  3913,  3921,  3921,  3936,
-    3936,  3954,  3954,  3975,  3978,  3984,  3987,  3993,  3997,  4004,
-    4009,  4014,  4021,  4024,  4028,  4033,  4037,  4047,  4051,  4060,
-    4063,  4067,  4076,  4076,  4118,  4123,  4126,  4131,  4134,  4141,
-    4144,  4149,  4152,  4157,  4160,  4165,  4168,  4173,  4177,  4182,
-    4186,  4191,  4195,  4202,  4205,  4210,  4213,  4216,  4219,  4222,
-    4227,  4236,  4247,  4252,  4260,  4264,  4269,  4273,  4278,  4282,
-    4287,  4291,  4298,  4301,  4306,  4309,  4312,  4315,  4320,  4328,
-    4338,  4342,  4347,  4351,  4356,  4360,  4367,  4370,  4375,  4380,
-    4383,  4389,  4392,  4397,  4400
+    1271,  1278,  1285,  1293,  1301,  1311,  1321,  1328,  1339,  1345,
+    1348,  1355,  1359,  1363,  1372,  1382,  1385,  1396,  1399,  1402,
+    1406,  1410,  1415,  1419,  1422,  1427,  1431,  1436,  1445,  1449,
+    1454,  1460,  1466,  1473,  1478,  1486,  1492,  1504,  1518,  1524,
+    1529,  1537,  1545,  1553,  1561,  1569,  1577,  1585,  1593,  1600,
+    1607,  1611,  1616,  1621,  1626,  1631,  1636,  1641,  1645,  1649,
+    1653,  1657,  1663,  1669,  1681,  1688,  1691,  1700,  1705,  1715,
+    1720,  1728,  1732,  1742,  1745,  1751,  1757,  1764,  1774,  1778,
+    1782,  1786,  1791,  1795,  1800,  1805,  1810,  1815,  1820,  1825,
+    1830,  1835,  1840,  1846,  1852,  1858,  1863,  1868,  1873,  1878,
+    1883,  1888,  1893,  1898,  1903,  1908,  1913,  1919,  1926,  1931,
+    1936,  1941,  1946,  1951,  1956,  1961,  1966,  1971,  1976,  1981,
+    1989,  1997,  2005,  2011,  2017,  2023,  2029,  2035,  2041,  2047,
+    2053,  2059,  2065,  2071,  2077,  2083,  2089,  2095,  2101,  2107,
+    2113,  2119,  2125,  2131,  2137,  2143,  2149,  2155,  2161,  2167,
+    2173,  2179,  2185,  2191,  2197,  2203,  2211,  2219,  2227,  2235,
+    2243,  2251,  2259,  2267,  2275,  2283,  2291,  2299,  2305,  2311,
+    2317,  2323,  2329,  2335,  2341,  2347,  2353,  2359,  2365,  2371,
+    2377,  2383,  2389,  2395,  2401,  2407,  2413,  2419,  2425,  2431,
+    2437,  2443,  2449,  2455,  2461,  2467,  2473,  2479,  2485,  2491,
+    2497,  2503,  2509,  2515,  2519,  2523,  2527,  2532,  2538,  2543,
+    2548,  2553,  2558,  2563,  2568,  2574,  2579,  2584,  2589,  2594,
+    2599,  2605,  2611,  2617,  2623,  2629,  2635,  2641,  2647,  2653,
+    2659,  2665,  2671,  2677,  2683,  2688,  2693,  2698,  2703,  2708,
+    2713,  2719,  2724,  2729,  2734,  2739,  2744,  2749,  2754,  2760,
+    2765,  2770,  2775,  2780,  2785,  2790,  2795,  2800,  2805,  2810,
+    2815,  2820,  2825,  2830,  2836,  2841,  2846,  2852,  2858,  2863,
+    2868,  2873,  2879,  2884,  2889,  2894,  2900,  2905,  2910,  2915,
+    2921,  2926,  2931,  2936,  2942,  2948,  2954,  2960,  2965,  2971,
+    2977,  2983,  2988,  2993,  2998,  3003,  3008,  3014,  3019,  3024,
+    3029,  3035,  3040,  3045,  3050,  3056,  3061,  3066,  3071,  3077,
+    3082,  3087,  3092,  3098,  3103,  3108,  3113,  3119,  3124,  3129,
+    3134,  3140,  3145,  3150,  3155,  3161,  3166,  3171,  3176,  3182,
+    3187,  3192,  3197,  3203,  3208,  3213,  3218,  3224,  3229,  3234,
+    3239,  3245,  3250,  3255,  3260,  3266,  3271,  3276,  3281,  3287,
+    3292,  3297,  3302,  3308,  3313,  3318,  3323,  3328,  3333,  3338,
+    3343,  3348,  3353,  3358,  3363,  3368,  3373,  3378,  3383,  3388,
+    3393,  3398,  3403,  3408,  3413,  3418,  3423,  3428,  3434,  3440,
+    3446,  3452,  3459,  3466,  3472,  3478,  3484,  3490,  3496,  3502,
+    3508,  3513,  3518,  3534,  3539,  3544,  3552,  3552,  3563,  3563,
+    3573,  3576,  3589,  3611,  3638,  3642,  3648,  3653,  3664,  3668,
+    3674,  3680,  3691,  3694,  3701,  3705,  3706,  3712,  3713,  3714,
+    3715,  3716,  3717,  3718,  3720,  3726,  3735,  3736,  3740,  3736,
+    3752,  3753,  3757,  3757,  3764,  3764,  3778,  3781,  3789,  3797,
+    3808,  3809,  3813,  3817,  3825,  3832,  3836,  3844,  3848,  3861,
+    3865,  3873,  3873,  3893,  3896,  3902,  3914,  3926,  3930,  3938,
+    3938,  3953,  3953,  3971,  3971,  3992,  3995,  4001,  4004,  4010,
+    4014,  4021,  4026,  4031,  4038,  4041,  4045,  4050,  4054,  4064,
+    4068,  4077,  4080,  4084,  4093,  4093,  4135,  4140,  4143,  4148,
+    4151,  4158,  4161,  4166,  4169,  4174,  4177,  4182,  4185,  4190,
+    4194,  4199,  4203,  4208,  4212,  4219,  4222,  4227,  4230,  4233,
+    4236,  4239,  4244,  4253,  4264,  4269,  4277,  4281,  4286,  4290,
+    4295,  4299,  4304,  4308,  4315,  4318,  4323,  4326,  4329,  4332,
+    4337,  4345,  4355,  4359,  4364,  4368,  4373,  4377,  4384,  4387,
+    4392,  4397,  4400,  4406,  4409,  4414,  4417
 };
 #endif
 
@@ -1322,9 +1324,10 @@ static const char *const yytname[] =
   "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE",
   "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD",
   "PERVERTEXEXT", "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV",
-  "PERTASKNV", "PRECISE", "$accept", "variable_identifier",
-  "primary_expression", "postfix_expression", "integer_expression",
-  "function_call", "function_call_or_method", "function_call_generic",
+  "PERTASKNV", "PERPRIMITIVEEXT", "TASKPAYLOADWORKGROUPEXT", "PRECISE",
+  "$accept", "variable_identifier", "primary_expression",
+  "postfix_expression", "integer_expression", "function_call",
+  "function_call_or_method", "function_call_generic",
   "function_call_header_no_parameters",
   "function_call_header_with_parameters", "function_call_header",
   "function_identifier", "unary_expression", "unary_operator",
@@ -1431,16 +1434,16 @@ static const yytype_int16 yytoknum[] =
      675,   676,   677,   678,   679,   680,   681,   682,   683,   684,
      685,   686,   687,   688,   689,   690,   691,   692,   693,   694,
      695,   696,   697,   698,   699,   700,   701,   702,   703,   704,
-     705,   706,   707,   708,   709,   710
+     705,   706,   707,   708,   709,   710,   711,   712
 };
 #endif
 
-#define YYPACT_NINF (-865)
+#define YYPACT_NINF (-813)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-571)
+#define YYTABLE_NINF (-573)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -1449,99 +1452,100 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    4557,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -306,  -260,  -237,  -110,  -102,
-    -100,   -83,   -77,  -865,  -865,  -301,  -865,  -865,  -865,  -865,
-    -865,  -106,  -865,  -865,  -865,  -865,  -865,  -309,  -865,  -865,
-    -865,  -865,  -865,  -865,   -66,   -54,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -328,
-    -116,   -50,   -55,  7728,  -245,  -865,   -82,  -865,  -865,  -865,
-    -865,  5463,  -865,  -865,  -865,  -865,   -63,  -865,  -865,   933,
-    -865,  -865,  7728,   -57,  -865,  -865,  -865,  5916,   -80,  -334,
-    -251,  -157,  -149,  -141,   -80,  -140,   -78, 12077,  -865,   -47,
-    -351,   -76,  -865,  -269,  -865,   -45,   -41,  7728,  -865,  -865,
-    -865,  7728,   -74,   -73,  -865,  -263,  -865,  -224,  -865,  -865,
-   10778,   -38,  -865,  -865,  -865,   -36,   -69,  7728,  -865,   -42,
-     -40,   -37,  -865,  -271,  -865,  -256,   -33,   -34,   -30,   -28,
-    -202,   -27,   -24,   -23,   -22,   -21,   -17,  -199,   -10,   -15,
-     -29,  -303,  -865,   -14,  7728,  -865,   -11,  -865,  -195,  -865,
-    -865,  -194,  9046,  -865,  -268,  1386,  -865,  -865,  -865,  -865,
-    -865,   -38,  -304,  -865,  9479,  -248,  -865,   -35,  -865,  -133,
-   10778, 10778,  -865, 10778,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -274,  -865,  -865,  -865,    -6,  -187, 11211,
-       3,  -865, 10778,  -865,  -865,  -297,    -2,   -41,     4,  -865,
-    -310,   -80,  -865,   -31,  -865,  -321,     6,  -130, 10778,  -129,
-    -865,  -166,  -128, 10778,  -124,     7,  -122,   -80,  -865, 11644,
-    -865,  -120, 10778,    10,   -78,  -865,  7728,   -26,  6369,  -865,
-    7728, 10778,  -865,  -351,  -865,   -20,  -865,  -865,   -79,  -217,
-    -200,  -299,   -56,   -13,    -9,    -3,    21,    26,  -307,    15,
-    9912,  -865,    14,  -865,  -865,    20,    12,    13,  -865,    24,
-      25,    16, 10345,    27, 10778,    23,    18,    19,    22,    28,
-    -222,  -865,  -865,  -132,  -865,  -116,    33,    35,  -865,  -865,
-    -865,  -865,  -865,  1839,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  5010,    -2,  9479,  -225,  8180,  -865,  -865,
-    9479,  7728,  -865,     8,  -865,  -865,  -865,  -184,  -865,  -865,
-   10778,    29,  -865,  -865, 10778,    38,  -865,  -865,  -865, 10778,
-    -865,  -865,  -865,  -312,  -865,  -865,  -183,    31,  -865,  -865,
-    -865,  -865,  -865,  -865,  -182,  -865,  -180,  -865,  -865,  -179,
-      34,  -865,  -865,  -865,  -865,  -175,  -865,  -172,  -865,  -171,
-      39,  -865,  -167,    40,  -163,    31,  -865,  -160,  -865,    44,
-      48,  -865,  -865,   -26,   -38,  -121,  -865,  -865,  -865,  6822,
-    -865,  -865,  -865, 10778, 10778, 10778, 10778, 10778, 10778, 10778,
-   10778, 10778, 10778, 10778, 10778, 10778, 10778, 10778, 10778, 10778,
-   10778, 10778,  -865,  -865,  -865,    53,  -865,  2292,  -865,  -865,
-    -865,  2292,  -865, 10778,  -865,  -865,  -119, 10778,  -198,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865, 10778, 10778,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  9479,  -865,  -865,  -174,  -865,  7275,
-    -865,  -865,    61,    59,  -865,  -865,  -865,  -865,  -865,  -254,
-    -142,  -865,  -308,  -865,  -321,  -865,  -321,  -865, 10778, 10778,
-    -865,  -166,  -865,  -166,  -865, 10778, 10778,  -865,    37,     7,
-    -865, 11644,  -865, 10778,  -865,  -865,   -92,    -2,   -26,  -865,
-    -865,  -865,  -865,  -865,   -79,   -79,  -217,  -217,  -200,  -200,
-    -200,  -200,  -299,  -299,   -56,   -13,    -9,    -3,    21,    26,
-   10778,  -865,  2292,  4104,    30,  3651,  -159,  -865,  -158,  -865,
-    -865,  -865,  -865,  -865,  8613,  -865,  -865,  -865,    71,  -865,
-     -12,  -865,  -156,  -865,  -155,  -865,  -148,  -865,  -147,  -865,
-    -145,  -144,  -865,  -865,  -865,   -65,    67,    59,    41,    72,
-      75,  -865,  -865,  4104,    76,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,  -865, 10778,  -865,    74,  2745,
-   10778,  -865,    66,    80,    36,    81,  3198,  -865,    82,  -865,
-    9479,  -865,  -865,  -865,  -143, 10778,  2745,    76,  -865,  -865,
-    2292,  -865,    78,    59,  -865,  -865,  2292,    84,  -865,  -865
+    4575,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -300,  -272,  -219,  -123,  -120,
+    -118,  -105,   -87,  -813,  -813,  -317,  -813,  -813,  -813,  -813,
+    -813,   -62,  -813,  -813,  -813,  -813,  -813,  -324,  -813,  -813,
+    -813,  -813,  -813,  -813,   -76,   -64,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -319,  -260,  -133,  -174,  7760,  -191,  -813,  -166,  -813,
+    -813,  -813,  -813,  5485,  -813,  -813,  -813,  -813,   -61,  -813,
+    -813,   935,  -813,  -813,  7760,   -39,  -813,  -813,  -813,  5940,
+     -50,  -335,  -267,  -162,  -152,  -139,   -50,  -137,   -46, 12111,
+    -813,   -29,  -339,   -43,  -813,  -268,  -813,   -27,    -6,  7760,
+    -813,  -813,  -813,  7760,   -37,   -36,  -813,  -298,  -813,  -237,
+    -813,  -813, 10812,    -5,  -813,  -813,  -813,     1,   -33,  7760,
+    -813,    -4,    -2,    -3,  -813,  -236,  -813,  -227,    -1,     3,
+       4,     5,  -225,     6,    10,    12,    13,    14,    17,  -223,
+       8,    18,    16,  -304,  -813,    21,  7760,  -813,    19,  -813,
+    -222,  -813,  -813,  -207,  9080,  -813,  -247,  1390,  -813,  -813,
+    -813,  -813,  -813,    -5,  -270,  -813,  9513,  -250,  -813,   -22,
+    -813,  -132, 10812, 10812,  -813, 10812,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -265,  -813,  -813,  -813,    25,
+    -204, 11245,    27,  -813, 10812,  -813,  -813,  -314,    30,    -6,
+      33,  -813,  -315,   -50,  -813,    15,  -813,  -325,    32,  -130,
+   10812,  -129,  -813,  -146,  -125, 10812,  -124,    39,  -119,   -50,
+    -813, 11678,  -813,  -115, 10812,    36,   -46,  -813,  7760,    20,
+    6395,  -813,  7760, 10812,  -813,  -339,  -813,    29,  -813,  -813,
+     -47,   -83,   -59,  -288,   -18,   -17,    22,    26,    54,    59,
+    -309,    46,  9946,  -813,    37,  -813,  -813,    50,    56,    58,
+    -813,    72,    74,    65, 10379,    76, 10812,    69,    68,    73,
+      75,    77,  -168,  -813,  -813,   -82,  -813,  -260,    79,    82,
+    -813,  -813,  -813,  -813,  -813,  1845,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  5030,    30,  9513,  -241,  8214,
+    -813,  -813,  9513,  7760,  -813,    52,  -813,  -813,  -813,  -202,
+    -813,  -813, 10812,    55,  -813,  -813, 10812,    85,  -813,  -813,
+    -813, 10812,  -813,  -813,  -813,  -310,  -813,  -813,  -197,    81,
+    -813,  -813,  -813,  -813,  -813,  -813,  -195,  -813,  -194,  -813,
+    -813,  -190,    87,  -813,  -813,  -813,  -813,  -169,  -813,  -167,
+    -813,  -165,    89,  -813,  -158,    90,  -157,    81,  -813,  -156,
+    -813,    91,    97,  -813,  -813,    20,    -5,   -77,  -813,  -813,
+    -813,  6850,  -813,  -813,  -813, 10812, 10812, 10812, 10812, 10812,
+   10812, 10812, 10812, 10812, 10812, 10812, 10812, 10812, 10812, 10812,
+   10812, 10812, 10812, 10812,  -813,  -813,  -813,    96,  -813,  2300,
+    -813,  -813,  -813,  2300,  -813, 10812,  -813,  -813,   -49, 10812,
+     -26,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813, 10812, 10812,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  9513,  -813,  -813,   -31,
+    -813,  7305,  -813,  -813,    98,    95,  -813,  -813,  -813,  -813,
+    -813,  -172,  -134,  -813,  -307,  -813,  -325,  -813,  -325,  -813,
+   10812, 10812,  -813,  -146,  -813,  -146,  -813, 10812, 10812,  -813,
+     104,    39,  -813, 11678,  -813, 10812,  -813,  -813,   -48,    30,
+      20,  -813,  -813,  -813,  -813,  -813,   -47,   -47,   -83,   -83,
+     -59,   -59,   -59,   -59,  -288,  -288,   -18,   -17,    22,    26,
+      54,    59, 10812,  -813,  2300,  4120,    60,  3665,  -155,  -813,
+    -154,  -813,  -813,  -813,  -813,  -813,  8647,  -813,  -813,  -813,
+     106,  -813,   -15,  -813,  -147,  -813,  -145,  -813,  -144,  -813,
+    -143,  -813,  -142,  -140,  -813,  -813,  -813,   -24,   101,    95,
+      71,   107,   110,  -813,  -813,  4120,   109,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813, 10812,  -813,
+     102,  2755, 10812,  -813,   105,   113,    70,   112,  3210,  -813,
+     115,  -813,  9513,  -813,  -813,  -813,  -135, 10812,  2755,   109,
+    -813,  -813,  2300,  -813,   111,    95,  -813,  -813,  2300,   117,
+    -813,  -813
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1549,137 +1553,138 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_int16 yydefact[] =
 {
-       0,   167,   220,   218,   219,   217,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   221,   222,   223,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     346,   347,   348,   349,   350,   351,   352,   372,   373,   374,
-     375,   376,   377,   378,   387,   400,   401,   388,   389,   391,
-     390,   392,   393,   394,   395,   396,   397,   398,   399,   175,
-     176,   246,   247,   245,   248,   255,   256,   253,   254,   251,
-     252,   249,   250,   278,   279,   280,   290,   291,   292,   275,
-     276,   277,   287,   288,   289,   272,   273,   274,   284,   285,
-     286,   269,   270,   271,   281,   282,   283,   257,   258,   259,
-     293,   294,   295,   260,   261,   262,   305,   306,   307,   263,
-     264,   265,   317,   318,   319,   266,   267,   268,   329,   330,
-     331,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   320,
-     321,   322,   323,   324,   325,   326,   327,   328,   332,   333,
-     334,   335,   336,   337,   338,   339,   340,   344,   341,   342,
-     343,   525,   526,   527,   356,   357,   380,   383,   345,   354,
-     355,   371,   353,   402,   403,   406,   407,   408,   410,   411,
-     412,   414,   415,   416,   418,   419,   515,   516,   379,   381,
-     382,   358,   359,   360,   404,   361,   365,   366,   369,   409,
-     413,   417,   362,   363,   367,   368,   405,   364,   370,   449,
-     451,   452,   453,   455,   456,   457,   459,   460,   461,   463,
-     464,   465,   467,   468,   469,   471,   472,   473,   475,   476,
-     477,   479,   480,   481,   483,   484,   485,   487,   488,   489,
-     491,   492,   450,   454,   458,   462,   466,   474,   478,   482,
-     470,   486,   490,   493,   494,   495,   496,   497,   498,   499,
-     500,   501,   502,   503,   504,   505,   506,   507,   508,   509,
-     510,   511,   512,   513,   514,   384,   385,   386,   420,   429,
-     431,   425,   430,   432,   433,   435,   436,   437,   439,   440,
-     441,   443,   444,   445,   447,   448,   421,   422,   423,   434,
-     424,   426,   427,   428,   438,   442,   446,   517,   518,   521,
-     522,   523,   524,   519,   520,     0,     0,     0,     0,     0,
-       0,     0,     0,   165,   166,     0,   621,   137,   531,   532,
-     533,     0,   530,   171,   169,   170,   168,     0,   216,   172,
-     173,   174,   139,   138,     0,   200,   181,   183,   179,   185,
-     187,   182,   184,   180,   186,   188,   177,   178,   202,   189,
-     196,   197,   198,   199,   190,   191,   192,   193,   194,   195,
-     140,   141,   143,   142,   144,   145,   146,   153,   620,     0,
-     622,     0,   114,   113,     0,   125,   130,   160,   159,   157,
-     161,     0,   154,   156,   162,   135,   212,   158,   529,     0,
-     617,   619,     0,     0,   163,   164,   528,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   536,     0,
-       0,     0,    99,     0,    94,     0,   109,     0,   121,   115,
-     123,     0,   124,     0,    97,   131,   102,     0,   155,   136,
-       0,   205,   211,     1,   618,     0,     0,     0,    96,     0,
-       0,     0,   629,     0,   681,     0,     0,     0,     0,     0,
+       0,   168,   222,   220,   221,   219,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   223,   224,   225,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     348,   349,   350,   351,   352,   353,   354,   374,   375,   376,
+     377,   378,   379,   380,   389,   402,   403,   390,   391,   393,
+     392,   394,   395,   396,   397,   398,   399,   400,   401,   176,
+     177,   248,   249,   247,   250,   257,   258,   255,   256,   253,
+     254,   251,   252,   280,   281,   282,   292,   293,   294,   277,
+     278,   279,   289,   290,   291,   274,   275,   276,   286,   287,
+     288,   271,   272,   273,   283,   284,   285,   259,   260,   261,
+     295,   296,   297,   262,   263,   264,   307,   308,   309,   265,
+     266,   267,   319,   320,   321,   268,   269,   270,   331,   332,
+     333,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   322,
+     323,   324,   325,   326,   327,   328,   329,   330,   334,   335,
+     336,   337,   338,   339,   340,   341,   342,   346,   343,   344,
+     345,   527,   528,   529,   358,   359,   382,   385,   347,   356,
+     357,   373,   355,   404,   405,   408,   409,   410,   412,   413,
+     414,   416,   417,   418,   420,   421,   517,   518,   381,   383,
+     384,   360,   361,   362,   406,   363,   367,   368,   371,   411,
+     415,   419,   364,   365,   369,   370,   407,   366,   372,   451,
+     453,   454,   455,   457,   458,   459,   461,   462,   463,   465,
+     466,   467,   469,   470,   471,   473,   474,   475,   477,   478,
+     479,   481,   482,   483,   485,   486,   487,   489,   490,   491,
+     493,   494,   452,   456,   460,   464,   468,   476,   480,   484,
+     472,   488,   492,   495,   496,   497,   498,   499,   500,   501,
+     502,   503,   504,   505,   506,   507,   508,   509,   510,   511,
+     512,   513,   514,   515,   516,   386,   387,   388,   422,   431,
+     433,   427,   432,   434,   435,   437,   438,   439,   441,   442,
+     443,   445,   446,   447,   449,   450,   423,   424,   425,   436,
+     426,   428,   429,   430,   440,   444,   448,   519,   520,   523,
+     524,   525,   526,   521,   522,     0,     0,     0,     0,     0,
+       0,     0,     0,   166,   167,     0,   623,   137,   533,   534,
+     535,     0,   532,   172,   170,   171,   169,     0,   218,   173,
+     174,   175,   139,   138,     0,   201,   182,   184,   180,   186,
+     188,   183,   185,   181,   187,   189,   178,   179,   204,   190,
+     197,   198,   199,   200,   191,   192,   193,   194,   195,   196,
+     140,   141,   143,   142,   144,   146,   147,   145,   203,   154,
+     622,     0,   624,     0,   114,   113,     0,   125,   130,   161,
+     160,   158,   162,     0,   155,   157,   163,   135,   214,   159,
+     531,     0,   619,   621,     0,     0,   164,   165,   530,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     627,     0,   625,     0,     0,   534,   150,   152,     0,   148,
-     203,     0,     0,   100,     0,     0,   623,   110,   116,   120,
-     122,   118,   126,   117,     0,   132,   105,     0,   103,     0,
-       0,     0,     9,     0,    43,    42,    44,    41,     5,     6,
-       7,     8,     2,    16,    14,    15,    17,    10,    11,    12,
-      13,     3,    18,    37,    20,    25,    26,     0,     0,    30,
-       0,   214,     0,    36,    34,     0,   206,   111,     0,    95,
-       0,     0,   679,     0,   637,     0,     0,     0,     0,     0,
-     654,     0,     0,     0,     0,     0,     0,     0,   674,     0,
-     652,     0,     0,     0,     0,    98,     0,     0,     0,   538,
-       0,     0,   147,     0,   201,     0,   207,    45,    49,    52,
-      55,    60,    63,    65,    67,    69,    71,    73,    75,     0,
-       0,   101,   565,   574,   578,     0,     0,     0,   599,     0,
+     538,     0,     0,     0,    99,     0,    94,     0,   109,     0,
+     121,   115,   123,     0,   124,     0,    97,   131,   102,     0,
+     156,   136,     0,   207,   213,     1,   620,     0,     0,     0,
+      96,     0,     0,     0,   631,     0,   683,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      45,    78,    91,     0,   552,     0,   162,   135,   555,   576,
-     554,   562,   553,     0,   556,   557,   580,   558,   587,   559,
-     560,   595,   561,     0,   119,     0,   127,     0,   546,   134,
-       0,     0,   107,     0,   104,    38,    39,     0,    22,    23,
-       0,     0,    28,    27,     0,   216,    31,    33,    40,     0,
-     213,   112,   683,     0,   684,   630,     0,     0,   682,   649,
-     645,   646,   647,   648,     0,   643,     0,    93,   650,     0,
-       0,   664,   665,   666,   667,     0,   662,     0,   668,     0,
-       0,   670,     0,     0,     0,     2,   678,     0,   676,     0,
-       0,   624,   626,     0,   544,     0,   542,   537,   539,     0,
-     151,   149,   204,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   629,     0,   627,     0,     0,   536,   151,   153,
+       0,   149,   205,     0,     0,   100,     0,     0,   625,   110,
+     116,   120,   122,   118,   126,   117,     0,   132,   105,     0,
+     103,     0,     0,     0,     9,     0,    43,    42,    44,    41,
+       5,     6,     7,     8,     2,    16,    14,    15,    17,    10,
+      11,    12,    13,     3,    18,    37,    20,    25,    26,     0,
+       0,    30,     0,   216,     0,    36,    34,     0,   208,   111,
+       0,    95,     0,     0,   681,     0,   639,     0,     0,     0,
+       0,     0,   656,     0,     0,     0,     0,     0,     0,     0,
+     676,     0,   654,     0,     0,     0,     0,    98,     0,     0,
+       0,   540,     0,     0,   148,     0,   202,     0,   209,    45,
+      49,    52,    55,    60,    63,    65,    67,    69,    71,    73,
+      75,     0,     0,   101,   567,   576,   580,     0,     0,     0,
+     601,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    45,    78,    91,     0,   554,     0,   163,   135,
+     557,   578,   556,   564,   555,     0,   558,   559,   582,   560,
+     589,   561,   562,   597,   563,     0,   119,     0,   127,     0,
+     548,   134,     0,     0,   107,     0,   104,    38,    39,     0,
+      22,    23,     0,     0,    28,    27,     0,   218,    31,    33,
+      40,     0,   215,   112,   685,     0,   686,   632,     0,     0,
+     684,   651,   647,   648,   649,   650,     0,   645,     0,    93,
+     652,     0,     0,   666,   667,   668,   669,     0,   664,     0,
+     670,     0,     0,   672,     0,     0,     0,     2,   680,     0,
+     678,     0,     0,   626,   628,     0,   546,     0,   544,   539,
+     541,     0,   152,   150,   206,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    76,   208,   209,     0,   564,     0,   597,   610,
-     609,     0,   601,     0,   613,   611,     0,     0,     0,   594,
-     614,   615,   616,   563,    81,    82,    84,    83,    86,    87,
-      88,    89,    90,    85,    80,     0,     0,   579,   575,   577,
-     581,   588,   596,   129,     0,   549,   550,     0,   133,     0,
-     108,     4,     0,    24,    21,    32,   215,   633,   635,     0,
-       0,   680,     0,   639,     0,   638,     0,   641,     0,     0,
-     656,     0,   655,     0,   658,     0,     0,   660,     0,     0,
-     675,     0,   672,     0,   653,   628,     0,   545,     0,   540,
-     535,    46,    47,    48,    51,    50,    53,    54,    58,    59,
-      56,    57,    61,    62,    64,    66,    68,    70,    72,    74,
-       0,   210,   566,     0,     0,     0,     0,   612,     0,   593,
-      79,    92,   128,   547,     0,   106,    19,   631,     0,   632,
-       0,   644,     0,   651,     0,   663,     0,   669,     0,   671,
-       0,     0,   677,   541,   543,     0,     0,   585,     0,     0,
-       0,   604,   603,   606,   572,   589,   548,   551,   634,   636,
-     640,   642,   657,   659,   661,   673,     0,   567,     0,     0,
-       0,   605,     0,     0,   584,     0,     0,   582,     0,    77,
-       0,   569,   598,   568,     0,   607,     0,   572,   571,   573,
-     591,   586,     0,   608,   602,   583,   592,     0,   600,   590
+       0,     0,     0,     0,    76,   210,   211,     0,   566,     0,
+     599,   612,   611,     0,   603,     0,   615,   613,     0,     0,
+       0,   596,   616,   617,   618,   565,    81,    82,    84,    83,
+      86,    87,    88,    89,    90,    85,    80,     0,     0,   581,
+     577,   579,   583,   590,   598,   129,     0,   551,   552,     0,
+     133,     0,   108,     4,     0,    24,    21,    32,   217,   635,
+     637,     0,     0,   682,     0,   641,     0,   640,     0,   643,
+       0,     0,   658,     0,   657,     0,   660,     0,     0,   662,
+       0,     0,   677,     0,   674,     0,   655,   630,     0,   547,
+       0,   542,   537,    46,    47,    48,    51,    50,    53,    54,
+      58,    59,    56,    57,    61,    62,    64,    66,    68,    70,
+      72,    74,     0,   212,   568,     0,     0,     0,     0,   614,
+       0,   595,    79,    92,   128,   549,     0,   106,    19,   633,
+       0,   634,     0,   646,     0,   653,     0,   665,     0,   671,
+       0,   673,     0,     0,   679,   543,   545,     0,     0,   587,
+       0,     0,     0,   606,   605,   608,   574,   591,   550,   553,
+     636,   638,   642,   644,   659,   661,   663,   675,     0,   569,
+       0,     0,     0,   607,     0,     0,   586,     0,     0,   584,
+       0,    77,     0,   571,   600,   570,     0,   609,     0,   574,
+     573,   575,   593,   588,     0,   610,   604,   585,   594,     0,
+     602,   592
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,  -865,
-    -865,  -865,  -211,  -865,  -423,  -422,  -501,  -426,  -287,  -286,
-    -285,  -284,  -288,  -282,  -865,  -475,  -865,  -490,  -865,  -497,
-    -525,    11,  -865,  -865,  -865,     5,  -385,  -865,  -865,    32,
-      42,    45,  -865,  -865,  -399,  -865,  -865,  -865,  -865,  -127,
-    -865,  -382,  -367,  -865,     9,  -865,     0,  -425,  -865,  -865,
-    -865,  -865,   119,  -865,  -865,  -865,  -544,  -549,  -252,  -366,
-    -622,  -865,  -391,  -611,  -864,  -865,  -452,  -865,  -865,  -461,
-    -460,  -865,  -865,    43,  -716,  -387,  -865,  -173,  -865,  -424,
-    -865,  -169,  -865,  -865,  -865,  -865,  -168,  -865,  -865,  -865,
-    -865,  -865,  -865,  -865,  -865,    63,  -865,  -865,     2,  -865,
-     -98,  -272,  -448,  -865,  -865,  -865,  -329,  -324,  -327,  -865,
-    -865,  -332,  -326,  -333,  -331,  -865,  -330,  -336,  -865,  -392,
-    -529
+    -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,  -813,
+    -813,  -813,  -429,  -813,  -381,  -380,  -483,  -383,  -262,  -257,
+    -261,  -258,  -255,  -259,  -813,  -479,  -813,  -492,  -813,  -495,
+    -536,    11,  -813,  -813,  -813,     7,  -388,  -813,  -813,    42,
+      49,    47,  -813,  -813,  -401,  -813,  -813,  -813,  -813,   -96,
+    -813,  -384,  -371,  -813,     9,  -813,     0,  -425,  -813,  -813,
+    -813,  -813,   150,  -813,  -813,  -813,  -546,  -553,  -217,  -338,
+    -607,  -813,  -364,  -619,  -812,  -813,  -421,  -813,  -813,  -428,
+    -430,  -813,  -813,    64,  -718,  -355,  -813,  -141,  -813,  -390,
+    -813,  -138,  -813,  -813,  -813,  -813,  -136,  -813,  -813,  -813,
+    -813,  -813,  -813,  -813,  -813,    92,  -813,  -813,     2,  -813,
+     -68,  -275,  -456,  -813,  -813,  -813,  -296,  -293,  -301,  -813,
+    -813,  -299,  -295,  -303,  -302,  -813,  -306,  -311,  -813,  -392,
+    -530
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   521,   522,   523,   782,   524,   525,   526,   527,   528,
-     529,   530,   610,   532,   578,   579,   580,   581,   582,   583,
-     584,   585,   586,   587,   588,   611,   840,   612,   765,   613,
-     696,   614,   379,   641,   499,   615,   381,   382,   383,   428,
-     429,   430,   384,   385,   386,   387,   388,   389,   478,   479,
-     390,   391,   392,   393,   533,   481,   534,   484,   441,   442,
-     535,   396,   397,   398,   570,   474,   568,   569,   705,   706,
-     639,   777,   618,   619,   620,   621,   622,   737,   876,   912,
-     904,   905,   906,   913,   623,   624,   625,   626,   907,   879,
-     627,   628,   908,   927,   629,   630,   631,   843,   741,   845,
-     883,   902,   903,   632,   399,   400,   401,   425,   633,   471,
-     472,   451,   452,   789,   790,   403,   674,   675,   679,   404,
-     405,   685,   686,   689,   692,   406,   697,   698,   407,   453,
-     454
+      -1,   523,   524,   525,   784,   526,   527,   528,   529,   530,
+     531,   532,   612,   534,   580,   581,   582,   583,   584,   585,
+     586,   587,   588,   589,   590,   613,   842,   614,   767,   615,
+     698,   616,   381,   643,   501,   617,   383,   384,   385,   430,
+     431,   432,   386,   387,   388,   389,   390,   391,   480,   481,
+     392,   393,   394,   395,   535,   483,   536,   486,   443,   444,
+     537,   398,   399,   400,   572,   476,   570,   571,   707,   708,
+     641,   779,   620,   621,   622,   623,   624,   739,   878,   914,
+     906,   907,   908,   915,   625,   626,   627,   628,   909,   881,
+     629,   630,   910,   929,   631,   632,   633,   845,   743,   847,
+     885,   904,   905,   634,   401,   402,   403,   427,   635,   473,
+     474,   453,   454,   791,   792,   405,   676,   677,   681,   406,
+     407,   687,   688,   691,   694,   408,   699,   700,   409,   455,
+     456
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1687,281 +1692,191 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     395,   431,   402,   446,   638,   380,   647,   589,   446,   394,
-     495,   378,   769,   773,   668,   776,   536,   445,   778,   708,
-     447,   842,   467,   678,   438,   447,   709,   669,   688,   731,
-     668,   422,   720,   721,   476,   911,   787,   700,   662,   656,
-     662,   663,   919,   408,   418,   431,   710,   482,   455,   563,
-     416,   456,   911,   564,   635,   648,   649,   423,   477,   659,
-     670,   671,   672,   673,   438,   732,   634,   636,   722,   723,
-     788,   660,   664,   677,   664,   -35,   419,   650,   677,   542,
-     438,   651,   482,   590,   677,   543,   493,   677,   482,   409,
-     483,   591,   566,   665,   544,   494,   677,   779,   857,   665,
-     545,   665,   858,   590,   665,   746,   665,   748,   665,   665,
-     640,   433,   410,   665,   434,   735,   754,   755,   756,   757,
-     758,   759,   760,   761,   762,   763,   590,   718,   719,   496,
-     844,   458,   497,   774,   456,   498,   764,   457,   459,   461,
-     463,   465,   466,   469,   716,   638,   717,   638,   550,   666,
-     638,   558,   852,   783,   551,   572,   574,   559,   766,   849,
-     708,   573,   575,   653,   785,   694,   781,   791,   793,   654,
-     795,   797,   766,   543,   794,   800,   796,   798,   802,   804,
-     853,   801,   854,   807,   803,   805,   566,   810,   566,   808,
-     812,   884,   885,   811,   890,   891,   813,   766,   766,   438,
-     794,   798,   892,   893,   926,   894,   895,   922,   801,   805,
-     859,   808,   813,   766,   860,   681,   682,   683,   684,   828,
-     829,   830,   831,   643,   766,   460,   644,   767,   456,   531,
-     708,   769,   887,   462,   446,   818,   456,   766,   819,   411,
-     847,   464,   468,   424,   456,   456,   846,   412,   445,   413,
-     848,   447,   676,   680,   687,   456,   456,   456,   690,   566,
-     693,   456,   699,   456,   818,   456,   414,   873,   328,   329,
-     330,   577,   415,   863,   678,   850,   851,   724,   725,   817,
-     867,   688,   668,   420,   638,   713,   714,   715,   921,   645,
-     646,   766,   896,   824,   825,   421,   826,   827,   832,   833,
-     426,   427,   448,   435,   440,   450,   475,   470,   485,   480,
-     325,   491,   492,   482,   537,   769,   538,   539,   540,   541,
-     562,   658,   547,   677,   677,   546,   548,   566,   549,   552,
-     677,   677,   553,   554,   555,   556,   677,   577,   677,   557,
-     560,   561,   577,   875,   652,   565,   877,   571,   577,   590,
-     642,   577,   657,   493,   667,   691,   729,   663,   726,   704,
-     577,   727,   701,   730,   638,   712,   728,   733,   736,   738,
-     889,   739,   740,   742,   743,   744,   747,   750,   751,   577,
-     749,   752,   -36,   432,   -34,   869,   877,   753,   -29,   792,
-     799,   439,   394,   780,   814,   806,   809,   566,   815,   395,
-     394,   402,   395,   914,   380,   841,   909,   395,   394,   402,
-     378,   394,   449,   856,   784,   766,   394,   473,   923,   888,
-     638,   897,   899,   880,   900,   915,   898,   432,   487,  -570,
-     916,   432,   910,   917,   592,   920,   394,   928,   929,   834,
-     394,   835,   838,   836,   878,   837,   711,   439,   786,   839,
-     417,   816,   874,   918,   881,   924,   394,   925,   882,   901,
-     770,   447,   444,   489,   771,   772,   702,   862,   486,   488,
-     861,   866,   864,   868,   567,   865,   490,   872,   870,     0,
-       0,   871,     0,   394,   878,   617,     0,     0,     0,     0,
-       0,     0,     0,     0,   616,     0,     0,     0,     0,     0,
-       0,   447,   821,   822,   823,   577,   577,   577,   577,   577,
-     577,   577,   577,   577,   577,   577,   577,   577,   577,   577,
-     577,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   661,
+     397,   433,   404,   448,   640,   591,   771,   382,   448,   396,
+     649,   380,   497,   533,   680,   670,   447,   710,   538,   690,
+     449,   844,   440,   671,   469,   449,   711,   733,   702,   420,
+     775,   670,   778,   664,   418,   780,   665,   712,   789,   658,
+     424,   664,   661,   722,   723,   433,   478,   457,   565,   410,
+     458,   495,   566,   484,   662,   579,   672,   673,   674,   675,
+     496,   421,   440,   734,   650,   651,   425,   666,   636,   638,
+     479,   679,   790,   647,   648,   666,   679,   411,   440,   724,
+     725,   484,   679,   484,   -35,   679,   652,   667,   637,   913,
+     653,   485,   568,   667,   679,   667,   921,   781,   667,   426,
+     667,   592,   667,   667,   592,   660,   913,   667,   642,   748,
+     592,   750,   593,   737,   544,   460,   498,   776,   458,   499,
+     545,   579,   500,   546,   846,   552,   579,   560,   574,   547,
+     412,   553,   579,   561,   575,   579,   459,   461,   463,   465,
+     467,   468,   471,   576,   579,   640,   655,   640,   783,   577,
+     640,   668,   656,   793,   768,   795,   797,   785,   710,   545,
+     799,   796,   798,   579,   787,   435,   800,   696,   436,   854,
+     756,   757,   758,   759,   760,   761,   762,   763,   764,   765,
+     859,   802,   429,   804,   860,   806,   568,   803,   568,   805,
+     766,   807,   809,   812,   814,   886,   887,   440,   810,   813,
+     815,   768,   768,   892,   928,   893,   894,   895,   896,   796,
+     897,   800,   803,   807,   810,   924,   815,   428,   861,   437,
+     462,   768,   862,   458,   645,   771,   413,   646,   710,   414,
+     464,   415,   788,   458,   448,   683,   684,   685,   686,   830,
+     831,   832,   833,   466,   416,   470,   458,   447,   458,   889,
+     848,   449,   678,   682,   850,   458,   458,   689,   692,   568,
+     458,   458,   417,   695,   865,   680,   458,   701,   720,   721,
+     458,   869,   690,   422,   768,   852,   853,   769,   718,   820,
+     719,   819,   821,   670,   640,   423,   823,   824,   825,   579,
+     579,   579,   579,   579,   579,   579,   579,   579,   579,   579,
+     579,   579,   579,   579,   579,   923,   442,   768,   820,   771,
+     849,   875,   328,   329,   330,   726,   727,   715,   716,   717,
+     450,   679,   679,   855,   477,   856,   487,   568,   679,   679,
+     768,   851,   768,   898,   679,   452,   679,   826,   827,   472,
+     828,   829,   482,   834,   835,   325,   484,   877,   493,   494,
+     879,   539,   540,   543,   728,   541,   542,   548,   562,   549,
+     550,   551,   554,   644,   640,   564,   555,   891,   556,   557,
+     558,   579,   579,   559,   563,   654,   659,   573,   579,   579,
+     567,   592,   495,   665,   579,   434,   579,   693,   703,   731,
+     879,   738,   729,   441,   396,   730,   732,   568,   735,   740,
+     669,   397,   396,   404,   397,   706,   911,   916,   382,   397,
+     396,   404,   380,   396,   714,   741,   451,   742,   396,   475,
+     640,   744,   925,   745,   746,   749,   751,   752,   -36,   434,
+     489,   -34,   753,   434,   754,   -29,   755,   782,   396,   794,
+     786,   816,   396,   801,   880,   808,   811,   817,   843,   441,
+     858,   768,   871,   882,   890,   899,   900,   901,   396,   902,
+     912,   449,  -572,   918,   917,   594,   836,   919,   922,   838,
+     930,   931,   837,   839,   841,   491,   569,   840,   490,   713,
+     492,   419,   876,   883,   880,   396,   920,   619,   818,   927,
+     926,   488,   884,   446,   772,   903,   618,   773,   704,   774,
+     866,   449,   864,   863,   874,   870,   868,   873,   867,   872,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   703,     0,   567,     0,
-     567,     0,     0,     0,     0,   394,     0,   394,     0,   394,
-       0,     0,     0,     0,     0,     0,     0,   577,   577,     0,
-       0,     0,     0,     0,   577,   577,     0,     0,     0,     0,
-     577,     0,   577,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   617,     0,     0,     0,     0,     0,     0,
-       0,     0,   616,   395,     0,     0,     0,     0,     0,     0,
-       0,   567,   394,     0,     0,     0,     0,     0,     0,     0,
-     394,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   663,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   705,     0,
+     569,     0,   569,     0,     0,     0,     0,   396,     0,   396,
+       0,   396,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   567,
-       0,     0,     0,     0,     0,     0,     0,     0,   394,     0,
+       0,     0,     0,     0,     0,   619,     0,     0,     0,     0,
+       0,     0,     0,     0,   618,   397,     0,     0,     0,     0,
+       0,     0,     0,   569,   396,     0,     0,     0,     0,     0,
+       0,     0,   396,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   617,     0,     0,
-       0,   617,     0,     0,     0,     0,   616,     0,     0,     0,
-     616,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   567,
-       0,     0,     0,     0,     0,     0,     0,     0,   394,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   569,     0,     0,     0,     0,     0,     0,     0,     0,
+     396,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   619,
+       0,     0,     0,   619,     0,     0,     0,     0,   618,     0,
+       0,     0,   618,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   617,   617,     0,   617,     0,   402,     0,     0,
-       0,   616,   616,     0,   616,     0,     0,     0,     0,     0,
+       0,   569,     0,     0,     0,     0,     0,     0,     0,     0,
+     396,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   617,     0,     0,     0,     0,     0,     0,
-       0,     0,   616,     0,     0,     0,     0,     0,     0,   617,
-       0,     0,     0,     0,     0,     0,   617,     0,   616,     0,
-       0,     0,     0,     0,     0,   616,   617,     0,     0,     0,
-     617,     0,     0,     0,     0,   616,   617,     0,     0,   616,
-       0,     0,     0,   443,     0,   616,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   325,     0,     0,     0,     0,     0,
-       0,     0,   326,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   327,   328,   329,   330,
-     331,     0,     0,     0,     0,     0,     0,     0,     0,   332,
-     333,   334,   335,   336,   337,   338,     0,     0,     0,     0,
+       0,     0,     0,     0,   619,   619,     0,   619,     0,   404,
+       0,     0,     0,   618,   618,     0,   618,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   339,   340,   341,   342,   343,   344,     0,     0,     0,
-       0,     0,     0,     0,     0,   345,     0,   346,   347,   348,
-     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
-     369,   370,   371,   372,   373,   374,   375,   376,   377,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,     0,     0,   500,   501,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   502,   503,     0,   325,     0,   592,
-     593,     0,     0,     0,     0,   594,   504,   505,   506,   507,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   327,
-     328,   329,   330,   331,     0,     0,     0,   508,   509,   510,
-     511,   512,   332,   333,   334,   335,   336,   337,   338,   595,
-     596,   597,   598,     0,   599,   600,   601,   602,   603,   604,
-     605,   606,   607,   608,   339,   340,   341,   342,   343,   344,
-     513,   514,   515,   516,   517,   518,   519,   520,   345,   609,
-     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
-     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
-     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,   377,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,     0,     0,   500,   501,
+       0,     0,     0,     0,     0,   619,     0,     0,     0,     0,
+       0,     0,     0,     0,   618,     0,     0,     0,     0,     0,
+       0,   619,     0,     0,     0,     0,     0,     0,   619,     0,
+     618,     0,     0,     0,     0,     0,     0,   618,   619,     0,
+       0,     0,   619,     0,     0,     0,     0,   618,   619,     0,
+       0,   618,     0,     0,     0,   445,     0,   618,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   502,   503,     0,
-     325,     0,   592,   768,     0,     0,     0,     0,   594,   504,
-     505,   506,   507,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   327,   328,   329,   330,   331,     0,     0,     0,
-     508,   509,   510,   511,   512,   332,   333,   334,   335,   336,
-     337,   338,   595,   596,   597,   598,     0,   599,   600,   601,
-     602,   603,   604,   605,   606,   607,   608,   339,   340,   341,
-     342,   343,   344,   513,   514,   515,   516,   517,   518,   519,
-     520,   345,   609,   346,   347,   348,   349,   350,   351,   352,
-     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,   376,   377,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   324,     0,
-       0,   500,   501,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   325,     0,     0,     0,
+       0,     0,     0,     0,   326,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,   331,     0,     0,     0,     0,     0,     0,     0,
+       0,   332,   333,   334,   335,   336,   337,   338,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     502,   503,     0,   325,     0,   592,     0,     0,     0,     0,
-       0,   594,   504,   505,   506,   507,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   327,   328,   329,   330,   331,
-       0,     0,     0,   508,   509,   510,   511,   512,   332,   333,
-     334,   335,   336,   337,   338,   595,   596,   597,   598,     0,
-     599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
-     339,   340,   341,   342,   343,   344,   513,   514,   515,   516,
-     517,   518,   519,   520,   345,   609,   346,   347,   348,   349,
-     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
-     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,   377,     1,     2,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
+       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,   502,
+     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
+       0,   325,     0,   594,   595,     0,     0,     0,     0,   596,
+     506,   507,   508,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,   331,     0,     0,
+       0,   510,   511,   512,   513,   514,   332,   333,   334,   335,
+     336,   337,   338,   597,   598,   599,   600,     0,   601,   602,
+     603,   604,   605,   606,   607,   608,   609,   610,   339,   340,
+     341,   342,   343,   344,   515,   516,   517,   518,   519,   520,
+     521,   522,   345,   611,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     1,     2,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
@@ -1994,201 +1909,20 @@ static const yytype_int16 yytable[] =
      293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
      303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
      313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,     0,     0,   500,   501,     0,     0,     0,     0,
+     323,   324,     0,     0,   502,   503,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   502,   503,     0,   325,     0,   485,     0,
-       0,     0,     0,     0,   594,   504,   505,   506,   507,     0,
+       0,     0,     0,   504,   505,     0,   325,     0,   594,   770,
+       0,     0,     0,     0,   596,   506,   507,   508,   509,     0,
        0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
-     329,   330,   331,     0,     0,     0,   508,   509,   510,   511,
-     512,   332,   333,   334,   335,   336,   337,   338,   595,   596,
-     597,   598,     0,   599,   600,   601,   602,   603,   604,   605,
-     606,   607,   608,   339,   340,   341,   342,   343,   344,   513,
-     514,   515,   516,   517,   518,   519,   520,   345,   609,   346,
+     329,   330,   331,     0,     0,     0,   510,   511,   512,   513,
+     514,   332,   333,   334,   335,   336,   337,   338,   597,   598,
+     599,   600,     0,   601,   602,   603,   604,   605,   606,   607,
+     608,   609,   610,   339,   340,   341,   342,   343,   344,   515,
+     516,   517,   518,   519,   520,   521,   522,   345,   611,   346,
      347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
      357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
      367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
-     377,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,   324,     0,     0,   500,   501,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   502,   503,     0,   325,
-       0,     0,     0,     0,     0,     0,     0,   594,   504,   505,
-     506,   507,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   327,   328,   329,   330,   331,     0,     0,     0,   508,
-     509,   510,   511,   512,   332,   333,   334,   335,   336,   337,
-     338,   595,   596,   597,   598,     0,   599,   600,   601,   602,
-     603,   604,   605,   606,   607,   608,   339,   340,   341,   342,
-     343,   344,   513,   514,   515,   516,   517,   518,   519,   520,
-     345,   609,   346,   347,   348,   349,   350,   351,   352,   353,
-     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
-     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,   377,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,     0,     0,
-     500,   501,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   502,
-     503,     0,   325,     0,     0,     0,     0,     0,     0,     0,
-     594,   504,   505,   506,   507,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   327,   328,   329,   330,   331,     0,
-       0,     0,   508,   509,   510,   511,   512,   332,   333,   334,
-     335,   336,   337,   338,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   339,
-     340,   341,   342,   343,   344,   513,   514,   515,   516,   517,
-     518,   519,   520,   345,     0,   346,   347,   348,   349,   350,
-     351,   352,   353,   354,   355,   356,   357,   358,   359,   360,
-     361,   362,   363,   364,   365,   366,   367,   368,   369,   370,
-     371,   372,   373,   374,   375,   376,   377,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,     0,     0,     0,   318,   319,   320,   321,   322,   323,
-     324,     0,     0,   500,   501,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   502,   503,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   504,   505,   506,   507,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   327,   328,   329,
-     330,     0,     0,     0,     0,   508,   509,   510,   511,   512,
-     332,   333,   334,   335,   336,   337,   338,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   339,   340,   341,   342,   343,   344,   513,   514,
-     515,   516,   517,   518,   519,   520,   345,     0,   346,   347,
-     348,   349,   350,   351,   352,   353,   354,   355,   356,   357,
-     358,   359,   360,   361,   362,   363,   364,   365,   366,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   325,     0,
-       0,     0,     0,     0,     0,     0,   326,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     327,   328,   329,   330,   331,     0,     0,     0,     0,     0,
-       0,     0,     0,   332,   333,   334,   335,   336,   337,   338,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   339,   340,   341,   342,   343,
-     344,     0,     0,     0,     0,     0,     0,     0,     0,   345,
-       0,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,   377,     1,     2,     3,     4,     5,     6,     7,
+     377,   378,   379,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
@@ -2219,202 +1953,21 @@ static const yytype_int16 yytable[] =
      278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
      288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
      298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,     0,     0,     0,
-     318,   319,   320,   321,   322,   323,   324,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
-     336,   337,   338,   595,     0,     0,   598,     0,   599,   600,
-       0,     0,   603,     0,     0,     0,     0,     0,   339,   340,
-     341,   342,   343,   344,     0,     0,     0,     0,     0,     0,
-       0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,   502,
+     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
+       0,   325,     0,   594,     0,     0,     0,     0,     0,   596,
+     506,   507,   508,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,   331,     0,     0,
+       0,   510,   511,   512,   513,   514,   332,   333,   334,   335,
+     336,   337,   338,   597,   598,   599,   600,     0,   601,   602,
+     603,   604,   605,   606,   607,   608,   609,   610,   339,   340,
+     341,   342,   343,   344,   515,   516,   517,   518,   519,   520,
+     521,   522,   345,   611,   346,   347,   348,   349,   350,   351,
      352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
      362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
-     372,   373,   374,   375,   376,   377,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-       0,     0,     0,   318,   319,   320,   321,   322,   323,   324,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   436,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   327,   328,   329,   330,
-       0,     0,     0,     0,     0,     0,     0,     0,   437,   332,
-     333,   334,   335,   336,   337,   338,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   339,   340,   341,   342,   343,   344,     0,     0,     0,
-       0,     0,     0,     0,     0,   345,     0,   346,   347,   348,
-     349,   350,   351,   352,   353,   354,   355,   356,   357,   358,
-     359,   360,   361,   362,   363,   364,   365,   366,   367,   368,
-     369,   370,   371,   372,   373,   374,   375,   376,   377,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,     0,     0,     0,   318,   319,   320,   321,
-     322,   323,   324,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   325,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   327,
-     328,   329,   330,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   332,   333,   334,   335,   336,   337,   338,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   339,   340,   341,   342,   343,   344,
-       0,     0,     0,     0,     0,     0,     0,     0,   345,     0,
-     346,   347,   348,   349,   350,   351,   352,   353,   354,   355,
-     356,   357,   358,   359,   360,   361,   362,   363,   364,   365,
-     366,   367,   368,   369,   370,   371,   372,   373,   374,   375,
-     376,   377,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,     0,     0,     0,   318,
-     319,   320,   321,   322,   323,   324,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   707,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   327,   328,   329,   330,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   332,   333,   334,   335,   336,
-     337,   338,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   339,   340,   341,
-     342,   343,   344,     0,     0,     0,     0,     0,     0,     0,
-       0,   345,     0,   346,   347,   348,   349,   350,   351,   352,
-     353,   354,   355,   356,   357,   358,   359,   360,   361,   362,
-     363,   364,   365,   366,   367,   368,   369,   370,   371,   372,
-     373,   374,   375,   376,   377,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,     0,
-       0,     0,   318,   319,   320,   321,   322,   323,   324,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   820,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   327,   328,   329,   330,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   332,   333,
-     334,   335,   336,   337,   338,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     339,   340,   341,   342,   343,   344,     0,     0,     0,     0,
-       0,     0,     0,     0,   345,     0,   346,   347,   348,   349,
-     350,   351,   352,   353,   354,   355,   356,   357,   358,   359,
-     360,   361,   362,   363,   364,   365,   366,   367,   368,   369,
-     370,   371,   372,   373,   374,   375,   376,   377,     1,     2,
+     372,   373,   374,   375,   376,   377,   378,   379,     1,     2,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
@@ -2446,72 +1999,118 @@ static const yytype_int16 yytable[] =
      283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
      293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
      303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,     0,     0,     0,   318,   319,   320,   321,   322,
-     323,   324,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   855,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,     0,     0,   502,   503,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   504,   505,     0,   325,     0,   487,     0,
+       0,     0,     0,     0,   596,   506,   507,   508,   509,     0,
        0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
-     329,   330,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   332,   333,   334,   335,   336,   337,   338,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
-       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     329,   330,   331,     0,     0,     0,   510,   511,   512,   513,
+     514,   332,   333,   334,   335,   336,   337,   338,   597,   598,
+     599,   600,     0,   601,   602,   603,   604,   605,   606,   607,
+     608,   609,   610,   339,   340,   341,   342,   343,   344,   515,
+     516,   517,   518,   519,   520,   521,   522,   345,   611,   346,
      347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
      357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
      367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
-     377,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,     0,     0,     0,   318,   319,
-     320,   321,   322,   323,   324,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     377,   378,   379,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,   502,
+     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
+       0,   325,     0,     0,     0,     0,     0,     0,     0,   596,
+     506,   507,   508,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,   331,     0,     0,
+       0,   510,   511,   512,   513,   514,   332,   333,   334,   335,
+     336,   337,   338,   597,   598,   599,   600,     0,   601,   602,
+     603,   604,   605,   606,   607,   608,   609,   610,   339,   340,
+     341,   342,   343,   344,   515,   516,   517,   518,   519,   520,
+     521,   522,   345,   611,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,     0,     0,   502,   503,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   504,   505,     0,   325,     0,     0,     0,
+       0,     0,     0,     0,   596,   506,   507,   508,   509,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,   331,     0,     0,     0,   510,   511,   512,   513,
+     514,   332,   333,   334,   335,   336,   337,   338,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   327,   328,   329,   330,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   332,   333,   334,   335,   336,   337,
-     338,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   339,   340,   341,   342,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-     345,     0,   346,   347,   348,   349,   350,   351,   352,   353,
-     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
-     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
-     374,   375,   376,   377,     2,     3,     4,     5,     6,     7,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,   515,
+     516,   517,   518,   519,   520,   521,   522,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,     0,     0,    61,    62,    63,    64,    65,    66,    67,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
@@ -2537,197 +2136,26 @@ static const yytype_int16 yytable[] =
      288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
      298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
      308,   309,   310,   311,   312,   313,   314,     0,     0,     0,
-       0,     0,     0,   321,     0,     0,     0,     0,     0,   500,
-     501,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   502,   503,
-       0,     0,     0,   637,   775,     0,     0,     0,     0,     0,
-     504,   505,   506,   507,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   508,   509,   510,   511,   512,   332,     0,     0,     0,
-       0,   337,   338,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   513,   514,   515,   516,   517,   518,
-     519,   520,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   358,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-       0,     0,     0,     0,     0,     0,   321,     0,     0,     0,
-       0,     0,   500,   501,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   502,   503,     0,     0,     0,   637,   886,     0,     0,
-       0,     0,     0,   504,   505,   506,   507,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   508,   509,   510,   511,   512,   332,
-       0,     0,     0,     0,   337,   338,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   513,   514,   515,
-     516,   517,   518,   519,   520,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   358,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,     0,     0,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,     0,     0,     0,     0,     0,     0,   321,
-       0,     0,     0,     0,     0,   500,   501,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   502,   503,     0,     0,   576,     0,
-       0,     0,     0,     0,     0,     0,   504,   505,   506,   507,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   508,   509,   510,
-     511,   512,   332,     0,     0,     0,     0,   337,   338,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     513,   514,   515,   516,   517,   518,   519,   520,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   358,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-       0,     0,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,     0,     0,     0,     0,
-       0,     0,   321,     0,     0,     0,     0,     0,   500,   501,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   502,   503,     0,
-       0,     0,   637,     0,     0,     0,     0,     0,     0,   504,
-     505,   506,   507,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     508,   509,   510,   511,   512,   332,     0,     0,     0,     0,
-     337,   338,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   513,   514,   515,   516,   517,   518,   519,
-     520,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   358,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,     0,     0,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,     0,
-       0,     0,     0,     0,     0,   321,     0,     0,     0,     0,
-       0,   500,   501,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     502,   503,     0,     0,   734,     0,     0,     0,     0,     0,
-       0,     0,   504,   505,   506,   507,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   508,   509,   510,   511,   512,   332,     0,
-       0,     0,     0,   337,   338,     0,     0,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,   502,
+     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   513,   514,   515,   516,
-     517,   518,   519,   520,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   358,     2,
+     506,   507,   508,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
+       0,   510,   511,   512,   513,   514,   332,   333,   334,   335,
+     336,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   339,   340,
+     341,   342,   343,   344,   515,   516,   517,   518,   519,   520,
+     521,   522,   345,     0,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     1,     2,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,     0,     0,    61,    62,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
       73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
       83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
@@ -2753,26 +2181,1283 @@ static const yytype_int16 yytable[] =
      283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
      293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
      303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,     0,     0,     0,     0,     0,     0,   321,     0,
-       0,     0,     0,     0,   500,   501,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   502,   503,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   745,   504,   505,   506,   507,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   508,   509,   510,   511,
-     512,   332,     0,     0,     0,     0,   337,   338,     0,     0,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
+     323,   324,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   513,
-     514,   515,   516,   517,   518,   519,   520,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   325,     0,     0,     0,
+       0,     0,     0,     0,   326,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,   331,     0,     0,     0,     0,     0,     0,     0,
+       0,   332,   333,   334,   335,   336,   337,   338,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   358,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,     0,
-       0,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
+       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
+     336,   337,   338,   597,     0,     0,   600,     0,   601,   602,
+       0,     0,   605,     0,     0,     0,     0,     0,   339,   340,
+     341,   342,   343,   344,     0,     0,     0,     0,     0,     0,
+       0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,     0,     0,     0,   318,   319,   320,   321,   322,
+     323,   324,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   438,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,     0,     0,     0,     0,     0,     0,     0,     0,
+     439,   332,   333,   334,   335,   336,   337,   338,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
+       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   325,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
+     336,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   339,   340,
+     341,   342,   343,   344,     0,     0,     0,     0,     0,     0,
+       0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,     0,     0,     0,   318,   319,   320,   321,   322,
+     323,   324,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   709,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   332,   333,   334,   335,   336,   337,   338,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
+       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   822,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
+     336,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   339,   340,
+     341,   342,   343,   344,     0,     0,     0,     0,     0,     0,
+       0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,     0,     0,     0,   318,   319,   320,   321,   322,
+     323,   324,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   857,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   327,   328,
+     329,   330,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   332,   333,   334,   335,   336,   337,   338,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   339,   340,   341,   342,   343,   344,     0,
+       0,     0,     0,     0,     0,     0,     0,   345,     0,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   356,
+     357,   358,   359,   360,   361,   362,   363,   364,   365,   366,
+     367,   368,   369,   370,   371,   372,   373,   374,   375,   376,
+     377,   378,   379,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,     0,     0,     0,
+     318,   319,   320,   321,   322,   323,   324,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   327,   328,   329,   330,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   332,   333,   334,   335,
+     336,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   339,   340,
+     341,   342,   343,   344,     0,     0,     0,     0,     0,     0,
+       0,     0,   345,     0,   346,   347,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+     362,   363,   364,   365,   366,   367,   368,   369,   370,   371,
+     372,   373,   374,   375,   376,   377,   378,   379,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,     0,     0,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,     0,     0,     0,     0,     0,     0,   321,     0,     0,
+       0,     0,     0,   502,   503,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   504,   505,     0,     0,     0,   639,   777,     0,
+       0,     0,     0,     0,   506,   507,   508,   509,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   510,   511,   512,   513,   514,
+     332,     0,     0,     0,     0,   337,   338,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   515,   516,
+     517,   518,   519,   520,   521,   522,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     358,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,     0,     0,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,     0,     0,     0,     0,     0,     0,
+     321,     0,     0,     0,     0,     0,   502,   503,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   504,   505,     0,     0,     0,
+     639,   888,     0,     0,     0,     0,     0,   506,   507,   508,
+     509,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   510,   511,
+     512,   513,   514,   332,     0,     0,     0,     0,   337,   338,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   515,   516,   517,   518,   519,   520,   521,   522,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   358,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,     0,     0,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,     0,     0,     0,
+       0,     0,     0,   321,     0,     0,     0,     0,     0,   502,
+     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
+       0,     0,   578,     0,     0,     0,     0,     0,     0,     0,
+     506,   507,   508,   509,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   510,   511,   512,   513,   514,   332,     0,     0,     0,
+       0,   337,   338,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   515,   516,   517,   518,   519,   520,
+     521,   522,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   358,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,     0,     0,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+       0,     0,     0,     0,     0,     0,   321,     0,     0,     0,
+       0,     0,   502,   503,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   504,   505,     0,     0,     0,   639,     0,     0,     0,
+       0,     0,     0,   506,   507,   508,   509,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   510,   511,   512,   513,   514,   332,
+       0,     0,     0,     0,   337,   338,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   515,   516,   517,
+     518,   519,   520,   521,   522,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   358,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,     0,     0,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,     0,     0,     0,     0,     0,     0,   321,
+       0,     0,     0,     0,     0,   502,   503,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   504,   505,     0,     0,   736,     0,
+       0,     0,     0,     0,     0,     0,   506,   507,   508,   509,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   510,   511,   512,
+     513,   514,   332,     0,     0,     0,     0,   337,   338,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     515,   516,   517,   518,   519,   520,   521,   522,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   358,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+       0,     0,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,     0,     0,     0,     0,
+       0,     0,   321,     0,     0,     0,     0,     0,   502,   503,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   504,   505,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   747,   506,
+     507,   508,   509,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     510,   511,   512,   513,   514,   332,     0,     0,     0,     0,
+     337,   338,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   515,   516,   517,   518,   519,   520,   521,
+     522,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   358,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,     0,     0,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,     0,
+       0,     0,     0,     0,     0,   321,     0,     0,     0,     0,
+       0,   502,   503,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     504,   505,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   506,   507,   508,   509,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   510,   511,   512,   513,   514,   332,     0,
+       0,     0,     0,   337,   338,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   515,   516,   517,   518,
+     519,   520,   521,   522,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   358,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,     0,     0,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,     0,     0,     0,     0,     0,     0,   321,     0,
+       0,     0,     0,     0,   502,   503,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   504,   505,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   506,   507,   508,   509,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   510,   511,   512,   513,
+     514,   332,     0,     0,     0,     0,   337,   657,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   515,
+     516,   517,   518,   519,   520,   521,   522,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   358,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,     0,
+       0,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,     0,     0,     0,     0,     0,
+       0,   321,     0,     0,     0,     0,     0,   502,   503,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   504,   505,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   506,   507,
+     508,   509,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   510,
+     511,   512,   513,   697,   332,     0,     0,     0,     0,   337,
+     338,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   515,   516,   517,   518,   519,   520,   521,   522,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   358,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,     0,     0,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
+     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
+     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
+     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
+     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
+     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
+     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
+     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
+     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
+     307,   308,   309,   310,   311,   312,   313,   314,     0,     0,
+       0,     0,     0,     0,   321,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   332,     0,     0,
+       0,     0,   337,   338
+};
+
+static const yytype_int16 yycheck[] =
+{
+       0,   385,     0,   404,   496,   484,   625,     0,   409,     0,
+     505,     0,   437,   442,   550,   545,   404,   570,   443,   555,
+     404,   739,   393,   348,   416,   409,   572,   336,   564,   353,
+     637,   561,   639,   348,   351,   642,   351,   573,   348,   531,
+     359,   348,   356,   331,   332,   429,   385,   382,   352,   349,
+     385,   349,   356,   351,   368,   484,   381,   382,   383,   384,
+     358,   385,   433,   372,   329,   330,   385,   382,   493,   494,
+     409,   550,   382,   502,   503,   382,   555,   349,   449,   367,
+     368,   351,   561,   351,   349,   564,   351,   543,   358,   901,
+     355,   359,   476,   549,   573,   551,   908,   643,   554,   359,
+     556,   351,   558,   559,   351,   534,   918,   563,   358,   604,
+     351,   606,   359,   592,   350,   382,   353,   358,   385,   356,
+     356,   550,   359,   350,   743,   350,   555,   350,   350,   356,
+     349,   356,   561,   356,   356,   564,   411,   412,   413,   414,
+     415,   416,   417,   350,   573,   637,   350,   639,   350,   356,
+     642,   543,   356,   350,   356,   350,   350,   652,   711,   356,
+     350,   356,   356,   592,   656,   356,   356,   559,   359,   776,
+     338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
+     352,   350,   356,   350,   356,   350,   570,   356,   572,   356,
+     358,   356,   350,   350,   350,   350,   350,   568,   356,   356,
+     356,   356,   356,   350,   922,   350,   350,   350,   350,   356,
+     350,   356,   356,   356,   356,   350,   356,   350,   352,   385,
+     382,   356,   356,   385,   356,   844,   349,   359,   781,   349,
+     382,   349,   661,   385,   635,   381,   382,   383,   384,   722,
+     723,   724,   725,   382,   349,   382,   385,   635,   385,   856,
+     745,   635,   382,   382,   749,   385,   385,   382,   382,   643,
+     385,   385,   349,   382,   800,   801,   385,   382,   327,   328,
+     385,   807,   808,   349,   356,   767,   768,   359,   361,   356,
+     363,   706,   359,   813,   776,   349,   715,   716,   717,   718,
+     719,   720,   721,   722,   723,   724,   725,   726,   727,   728,
+     729,   730,   731,   732,   733,   912,   367,   356,   356,   928,
+     359,   359,   374,   375,   376,   333,   334,   364,   365,   366,
+     359,   800,   801,   354,   353,   356,   353,   711,   807,   808,
+     356,   357,   356,   357,   813,   385,   815,   718,   719,   385,
+     720,   721,   385,   726,   727,   351,   351,   842,   385,   385,
+     845,   350,   385,   356,   371,   359,   358,   358,   350,   356,
+     356,   356,   356,   385,   856,   349,   356,   382,   356,   356,
+     356,   800,   801,   356,   356,   350,   349,   358,   807,   808,
+     359,   351,   349,   351,   813,   385,   815,   348,   352,   335,
+     885,   354,   370,   393,   385,   369,   337,   781,   352,   349,
+     385,   401,   393,   401,   404,   385,   898,   902,   401,   409,
+     401,   409,   401,   404,   385,   359,   409,   359,   409,   419,
+     912,   349,   917,   349,   359,   349,   357,   359,   349,   429,
+     428,   349,   359,   433,   359,   350,   359,   385,   429,   358,
+     385,   350,   433,   356,   845,   356,   356,   350,   352,   449,
+     352,   356,   348,   393,   348,   354,   385,   350,   449,   349,
+     358,   845,   353,   350,   359,   353,   728,   397,   353,   730,
+     359,   354,   729,   731,   733,   433,   476,   732,   429,   575,
+     433,   331,   820,   847,   885,   476,   907,   487,   705,   919,
+     918,   427,   847,   401,   635,   885,   487,   635,   566,   635,
+     801,   885,   798,   796,   815,   808,   805,   813,   803,   811,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   539,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   568,    -1,
+     570,    -1,   572,    -1,    -1,    -1,    -1,   568,    -1,   570,
+      -1,   572,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   625,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   625,   635,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   643,   635,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   643,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   711,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     711,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   739,
+      -1,    -1,    -1,   743,    -1,    -1,    -1,    -1,   739,    -1,
+      -1,    -1,   743,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   781,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     781,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   844,   845,    -1,   847,    -1,   847,
+      -1,    -1,    -1,   844,   845,    -1,   847,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   885,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   885,    -1,    -1,    -1,    -1,    -1,
+      -1,   901,    -1,    -1,    -1,    -1,    -1,    -1,   908,    -1,
+     901,    -1,    -1,    -1,    -1,    -1,    -1,   908,   918,    -1,
+      -1,    -1,   922,    -1,    -1,    -1,    -1,   918,   928,    -1,
+      -1,   922,    -1,    -1,    -1,     0,    -1,   928,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,   329,
+     330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
+      -1,   351,    -1,   353,   354,    -1,    -1,    -1,    -1,   359,
+     360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,   377,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,   393,   394,   395,   396,    -1,   398,   399,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+     420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   348,   349,    -1,   351,    -1,   353,   354,
+      -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+     395,   396,    -1,   398,   399,   400,   401,   402,   403,   404,
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,   329,
+     330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
+      -1,   351,    -1,   353,    -1,    -1,    -1,    -1,    -1,   359,
+     360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,   377,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,   393,   394,   395,   396,    -1,   398,   399,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+     420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   348,   349,    -1,   351,    -1,   353,    -1,
+      -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
+     395,   396,    -1,   398,   399,   400,   401,   402,   403,   404,
+     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,   329,
+     330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
+      -1,   351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,
+     360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,   377,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,   393,   394,   395,   396,    -1,   398,   399,
+     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+     420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   348,   349,    -1,   351,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,   420,   421,   422,    -1,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,    -1,    -1,    -1,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,   329,
+     330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,   386,   387,   388,   389,
+     390,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+     420,   421,   422,    -1,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+     325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,   377,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
       80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
       90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
      100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
@@ -2796,423 +3481,21 @@ static const yytype_int16 yytable[] =
      280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
      290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
      300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,     0,     0,     0,     0,     0,
-       0,   321,     0,     0,     0,     0,     0,   500,   501,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   502,   503,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   504,   505,
-     506,   507,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   508,
-     509,   510,   511,   512,   332,     0,     0,     0,     0,   337,
-     338,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   513,   514,   515,   516,   517,   518,   519,   520,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   358,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,     0,     0,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,     0,     0,
-       0,     0,     0,     0,   321,     0,     0,     0,     0,     0,
-     500,   501,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   502,
-     503,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   504,   505,   506,   507,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   508,   509,   510,   511,   512,   332,     0,     0,
-       0,     0,   337,   655,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   513,   514,   515,   516,   517,
-     518,   519,   520,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   358,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,     0,     0,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,     0,     0,     0,     0,     0,     0,   321,     0,     0,
-       0,     0,     0,   500,   501,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   502,   503,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   504,   505,   506,   507,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   508,   509,   510,   511,   695,
-     332,     0,     0,     0,     0,   337,   338,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   513,   514,
-     515,   516,   517,   518,   519,   520,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     358,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,     0,     0,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,     0,     0,     0,     0,     0,     0,
-     321,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   332,     0,     0,     0,     0,   337,   338
-};
-
-static const yytype_int16 yycheck[] =
-{
-       0,   383,     0,   402,   494,     0,   503,   482,   407,     0,
-     435,     0,   623,   635,   543,   637,   441,   402,   640,   568,
-     402,   737,   414,   548,   391,   407,   570,   348,   553,   336,
-     559,   359,   331,   332,   385,   899,   348,   562,   348,   529,
-     348,   351,   906,   349,   353,   427,   571,   351,   382,   352,
-     351,   385,   916,   356,   358,   329,   330,   385,   409,   356,
-     381,   382,   383,   384,   431,   372,   491,   492,   367,   368,
-     382,   368,   382,   548,   382,   349,   385,   351,   553,   350,
-     447,   355,   351,   351,   559,   356,   349,   562,   351,   349,
-     359,   359,   474,   541,   350,   358,   571,   641,   352,   547,
-     356,   549,   356,   351,   552,   602,   554,   604,   556,   557,
-     358,   356,   349,   561,   359,   590,   338,   339,   340,   341,
-     342,   343,   344,   345,   346,   347,   351,   327,   328,   353,
-     741,   382,   356,   358,   385,   359,   358,   409,   410,   411,
-     412,   413,   414,   415,   361,   635,   363,   637,   350,   541,
-     640,   350,   774,   650,   356,   350,   350,   356,   356,   357,
-     709,   356,   356,   350,   654,   557,   350,   350,   350,   356,
-     350,   350,   356,   356,   356,   350,   356,   356,   350,   350,
-     354,   356,   356,   350,   356,   356,   568,   350,   570,   356,
-     350,   350,   350,   356,   350,   350,   356,   356,   356,   566,
-     356,   356,   350,   350,   920,   350,   350,   350,   356,   356,
-     352,   356,   356,   356,   356,   381,   382,   383,   384,   720,
-     721,   722,   723,   356,   356,   382,   359,   359,   385,   440,
-     779,   842,   854,   382,   633,   356,   385,   356,   359,   349,
-     359,   382,   382,   359,   385,   385,   743,   349,   633,   349,
-     747,   633,   382,   382,   382,   385,   385,   385,   382,   641,
-     382,   385,   382,   385,   356,   385,   349,   359,   374,   375,
-     376,   482,   349,   798,   799,   765,   766,   333,   334,   704,
-     805,   806,   811,   349,   774,   364,   365,   366,   910,   500,
-     501,   356,   357,   716,   717,   349,   718,   719,   724,   725,
-     350,   356,   359,   385,   367,   385,   353,   385,   353,   385,
-     351,   385,   385,   351,   350,   926,   385,   359,   358,   356,
-     349,   532,   356,   798,   799,   358,   356,   709,   356,   356,
-     805,   806,   356,   356,   356,   356,   811,   548,   813,   356,
-     350,   356,   553,   840,   350,   359,   843,   358,   559,   351,
-     385,   562,   349,   349,   385,   348,   335,   351,   371,   385,
-     571,   370,   352,   337,   854,   385,   369,   352,   354,   349,
-     382,   359,   359,   349,   349,   359,   349,   359,   359,   590,
-     357,   359,   349,   383,   349,   348,   883,   359,   350,   358,
-     356,   391,   383,   385,   350,   356,   356,   779,   350,   399,
-     391,   399,   402,   900,   399,   352,   896,   407,   399,   407,
-     399,   402,   407,   352,   385,   356,   407,   417,   915,   348,
-     910,   354,   350,   393,   349,   359,   385,   427,   426,   353,
-     350,   431,   358,   397,   353,   353,   427,   359,   354,   726,
-     431,   727,   730,   728,   843,   729,   573,   447,   659,   731,
-     331,   703,   818,   905,   845,   916,   447,   917,   845,   883,
-     633,   843,   399,   431,   633,   633,   564,   796,   425,   427,
-     794,   803,   799,   806,   474,   801,   431,   813,   809,    -1,
-      -1,   811,    -1,   474,   883,   485,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   485,    -1,    -1,    -1,    -1,    -1,
-      -1,   883,   713,   714,   715,   716,   717,   718,   719,   720,
-     721,   722,   723,   724,   725,   726,   727,   728,   729,   730,
-     731,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   537,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   566,    -1,   568,    -1,
-     570,    -1,    -1,    -1,    -1,   566,    -1,   568,    -1,   570,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   798,   799,    -1,
-      -1,    -1,    -1,    -1,   805,   806,    -1,    -1,    -1,    -1,
-     811,    -1,   813,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   623,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   623,   633,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   641,   633,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     641,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   709,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   709,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   737,    -1,    -1,
-      -1,   741,    -1,    -1,    -1,    -1,   737,    -1,    -1,    -1,
-     741,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   779,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   779,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   842,   843,    -1,   845,    -1,   845,    -1,    -1,
-      -1,   842,   843,    -1,   845,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   883,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   883,    -1,    -1,    -1,    -1,    -1,    -1,   899,
-      -1,    -1,    -1,    -1,    -1,    -1,   906,    -1,   899,    -1,
-      -1,    -1,    -1,    -1,    -1,   906,   916,    -1,    -1,    -1,
-     920,    -1,    -1,    -1,    -1,   916,   926,    -1,    -1,   920,
-      -1,    -1,    -1,     0,    -1,   926,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,   321,   322,   323,   324,   325,   326,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   351,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,
-     377,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
+     310,   311,   312,   313,   314,   315,   316,    -1,    -1,    -1,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   408,   409,   410,   411,   412,   413,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   422,    -1,   424,   425,   426,
-     427,   428,   429,   430,   431,   432,   433,   434,   435,   436,
-     437,   438,   439,   440,   441,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,   455,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
-     324,   325,   326,    -1,    -1,   329,   330,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   348,   349,    -1,   351,    -1,   353,
-     354,    -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
-     374,   375,   376,   377,    -1,    -1,    -1,   381,   382,   383,
-     384,   385,   386,   387,   388,   389,   390,   391,   392,   393,
-     394,   395,   396,    -1,   398,   399,   400,   401,   402,   403,
-     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
-     414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   425,   426,   427,   428,   429,   430,   431,   432,   433,
-     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
-     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
-     454,   455,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,   324,   325,   326,    -1,    -1,   329,   330,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,
-     351,    -1,   353,   354,    -1,    -1,    -1,    -1,   359,   360,
-     361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   373,   374,   375,   376,   377,    -1,    -1,    -1,
-     381,   382,   383,   384,   385,   386,   387,   388,   389,   390,
-     391,   392,   393,   394,   395,   396,    -1,   398,   399,   400,
-     401,   402,   403,   404,   405,   406,   407,   408,   409,   410,
-     411,   412,   413,   414,   415,   416,   417,   418,   419,   420,
-     421,   422,   423,   424,   425,   426,   427,   428,   429,   430,
-     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
-     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,   455,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,    -1,
-      -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     348,   349,    -1,   351,    -1,   353,    -1,    -1,    -1,    -1,
-      -1,   359,   360,   361,   362,   363,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,
-      -1,    -1,    -1,   381,   382,   383,   384,   385,   386,   387,
-     388,   389,   390,   391,   392,   393,   394,   395,   396,    -1,
-     398,   399,   400,   401,   402,   403,   404,   405,   406,   407,
-     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   419,   420,   421,   422,   423,   424,   425,   426,   427,
-     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
-     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
-     448,   449,   450,   451,   452,   453,   454,   455,     3,     4,
+      -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,
+     390,   391,   392,   393,    -1,    -1,   396,    -1,   398,   399,
+      -1,    -1,   402,    -1,    -1,    -1,    -1,    -1,   408,   409,
+     410,   411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   422,    -1,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
@@ -3244,202 +3527,112 @@ static const yytype_int16 yycheck[] =
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
-     325,   326,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
+     315,   316,    -1,    -1,    -1,   320,   321,   322,   323,   324,
+     325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   348,   349,    -1,   351,    -1,   353,    -1,
-      -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
-     375,   376,   377,    -1,    -1,    -1,   381,   382,   383,   384,
-     385,   386,   387,   388,   389,   390,   391,   392,   393,   394,
-     395,   396,    -1,   398,   399,   400,   401,   402,   403,   404,
-     405,   406,   407,   408,   409,   410,   411,   412,   413,   414,
-     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     385,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   424,
      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
      435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
      445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,    -1,    -1,   329,   330,    -1,
+     455,   456,   457,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,    -1,    -1,    -1,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,   351,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,   360,   361,
-     362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   373,   374,   375,   376,   377,    -1,    -1,    -1,   381,
-     382,   383,   384,   385,   386,   387,   388,   389,   390,   391,
-     392,   393,   394,   395,   396,    -1,   398,   399,   400,   401,
-     402,   403,   404,   405,   406,   407,   408,   409,   410,   411,
-     412,   413,   414,   415,   416,   417,   418,   419,   420,   421,
-     422,   423,   424,   425,   426,   427,   428,   429,   430,   431,
-     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
-     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
-     452,   453,   454,   455,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,   321,   322,   323,   324,   325,   326,    -1,    -1,
-     329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,
-     349,    -1,   351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     359,   360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   373,   374,   375,   376,   377,    -1,
-      -1,    -1,   381,   382,   383,   384,   385,   386,   387,   388,
-     389,   390,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,
-     409,   410,   411,   412,   413,   414,   415,   416,   417,   418,
-     419,   420,   421,   422,    -1,   424,   425,   426,   427,   428,
-     429,   430,   431,   432,   433,   434,   435,   436,   437,   438,
-     439,   440,   441,   442,   443,   444,   445,   446,   447,   448,
-     449,   450,   451,   452,   453,   454,   455,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,    -1,    -1,    -1,   320,   321,   322,   323,   324,   325,
-     326,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   348,   349,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   360,   361,   362,   363,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,
-     376,    -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,
-     386,   387,   388,   389,   390,   391,   392,    -1,    -1,    -1,
+      -1,   351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   408,   409,   410,   411,   412,   413,   414,   415,
-     416,   417,   418,   419,   420,   421,   422,    -1,   424,   425,
-     426,   427,   428,   429,   430,   431,   432,   433,   434,   435,
-     436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
-     446,   447,   448,   449,   450,   451,   452,   453,   454,   455,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
-     323,   324,   325,   326,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,
+     390,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,
+     410,   411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   422,    -1,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,    -1,    -1,    -1,   320,   321,   322,   323,   324,
+     325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   351,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   359,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     373,   374,   375,   376,   377,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   386,   387,   388,   389,   390,   391,   392,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   408,   409,   410,   411,   412,
-     413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,
-      -1,   424,   425,   426,   427,   428,   429,   430,   431,   432,
-     433,   434,   435,   436,   437,   438,   439,   440,   441,   442,
-     443,   444,   445,   446,   447,   448,   449,   450,   451,   452,
-     453,   454,   455,     3,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
@@ -3474,198 +3667,17 @@ static const yytype_int16 yycheck[] =
      320,   321,   322,   323,   324,   325,   326,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   354,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,
-     390,   391,   392,   393,    -1,    -1,   396,    -1,   398,   399,
-      -1,    -1,   402,    -1,    -1,    -1,    -1,    -1,   408,   409,
+     390,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,
      410,   411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   422,    -1,   424,   425,   426,   427,   428,   429,
      430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
      440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
-     450,   451,   452,   453,   454,   455,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-      -1,    -1,    -1,   320,   321,   322,   323,   324,   325,   326,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   385,   386,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   408,   409,   410,   411,   412,   413,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   422,    -1,   424,   425,   426,
-     427,   428,   429,   430,   431,   432,   433,   434,   435,   436,
-     437,   438,   439,   440,   441,   442,   443,   444,   445,   446,
-     447,   448,   449,   450,   451,   452,   453,   454,   455,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,    -1,    -1,    -1,   320,   321,   322,   323,
-     324,   325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   351,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,
-     374,   375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   386,   387,   388,   389,   390,   391,   392,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   408,   409,   410,   411,   412,   413,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,
-     424,   425,   426,   427,   428,   429,   430,   431,   432,   433,
-     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
-     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
-     454,   455,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,    -1,    -1,    -1,   320,
-     321,   322,   323,   324,   325,   326,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   354,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,   390,
-     391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,   410,
-     411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   422,    -1,   424,   425,   426,   427,   428,   429,   430,
-     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
-     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,   455,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,    -1,
-      -1,    -1,   320,   321,   322,   323,   324,   325,   326,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   354,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   373,   374,   375,   376,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,   387,
-     388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     408,   409,   410,   411,   412,   413,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   422,    -1,   424,   425,   426,   427,
-     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
-     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
-     448,   449,   450,   451,   452,   453,   454,   455,     3,     4,
+     450,   451,   452,   453,   454,   455,   456,   457,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
@@ -3700,63 +3712,150 @@ static const yytype_int16 yycheck[] =
      315,   316,    -1,    -1,    -1,   320,   321,   322,   323,   324,
      325,   326,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
+     375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
+     310,   311,   312,   313,   314,   315,   316,    -1,    -1,    -1,
+     320,   321,   322,   323,   324,   325,   326,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   373,   374,   375,   376,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   386,   387,   388,   389,
+     390,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   408,   409,
+     410,   411,   412,   413,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   422,    -1,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,    -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,
+      -1,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   348,   349,    -1,    -1,    -1,   353,   354,    -1,
+      -1,    -1,    -1,    -1,   360,   361,   362,   363,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   373,   374,
-     375,   376,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   386,   387,   388,   389,   390,   391,   392,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,
+     386,    -1,    -1,    -1,    -1,   391,   392,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   408,   409,   410,   411,   412,   413,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   422,    -1,   424,
-     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
-     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
-     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,    -1,    -1,    -1,   320,   321,
-     322,   323,   324,   325,   326,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   414,   415,
+     416,   417,   418,   419,   420,   421,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     436,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,    -1,    -1,    -1,    -1,    -1,    -1,
+     323,    -1,    -1,    -1,    -1,    -1,   329,   330,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   348,   349,    -1,    -1,    -1,
+     353,   354,    -1,    -1,    -1,    -1,    -1,   360,   361,   362,
+     363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,
+     383,   384,   385,   386,    -1,    -1,    -1,    -1,   391,   392,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   414,   415,   416,   417,   418,   419,   420,   421,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   373,   374,   375,   376,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   386,   387,   388,   389,   390,   391,
-     392,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   408,   409,   410,   411,
-     412,   413,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     422,    -1,   424,   425,   426,   427,   428,   429,   430,   431,
-     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
-     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
-     452,   453,   454,   455,     4,     5,     6,     7,     8,     9,
+      -1,    -1,    -1,   436,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
@@ -3791,7 +3890,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,   329,
      330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,
-      -1,    -1,    -1,   353,   354,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   352,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   381,   382,   383,   384,   385,   386,    -1,    -1,    -1,
@@ -3834,7 +3933,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,
       -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   348,   349,    -1,    -1,    -1,   353,   354,    -1,    -1,
+      -1,   348,   349,    -1,    -1,    -1,   353,    -1,    -1,    -1,
       -1,    -1,    -1,   360,   361,   362,   363,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,   386,
@@ -3921,7 +4020,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,   329,   330,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,   349,    -1,
-      -1,    -1,   353,    -1,    -1,    -1,    -1,    -1,    -1,   360,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,   360,
      361,   362,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      381,   382,   383,   384,   385,   386,    -1,    -1,    -1,    -1,
@@ -3964,7 +4063,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,
       -1,   329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     348,   349,    -1,    -1,   352,    -1,    -1,    -1,    -1,    -1,
+     348,   349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   360,   361,   362,   363,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   381,   382,   383,   384,   385,   386,    -1,
@@ -4008,7 +4107,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   348,   349,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   359,   360,   361,   362,   363,    -1,
+      -1,    -1,    -1,    -1,    -1,   360,   361,   362,   363,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
      385,   386,    -1,    -1,    -1,    -1,   391,   392,    -1,    -1,
@@ -4092,99 +4191,13 @@ static const yytype_int16 yycheck[] =
      299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
      309,   310,   311,   312,   313,   314,   315,   316,    -1,    -1,
       -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,
-     329,   330,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   348,
-     349,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   360,   361,   362,   363,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   381,   382,   383,   384,   385,   386,    -1,    -1,
-      -1,    -1,   391,   392,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   414,   415,   416,   417,   418,
-     419,   420,   421,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   436,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,    -1,    -1,    -1,    -1,    -1,    -1,   323,    -1,    -1,
-      -1,    -1,    -1,   329,   330,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   348,   349,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   360,   361,   362,   363,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,
-     386,    -1,    -1,    -1,    -1,   391,   392,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   414,   415,
-     416,   417,   418,   419,   420,   421,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     436,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    -1,    -1,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,    -1,    -1,    -1,    -1,    -1,    -1,
-     323,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   386,    -1,    -1,    -1,    -1,   391,   392
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   386,    -1,    -1,
+      -1,    -1,   391,   392
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -4228,136 +4241,137 @@ static const yytype_int16 yystos[] =
      409,   410,   411,   412,   413,   422,   424,   425,   426,   427,
      428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
      438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
-     448,   449,   450,   451,   452,   453,   454,   455,   487,   488,
-     491,   492,   493,   494,   498,   499,   500,   501,   502,   503,
-     506,   507,   508,   509,   510,   512,   517,   518,   519,   560,
-     561,   562,   564,   571,   575,   576,   581,   584,   349,   349,
-     349,   349,   349,   349,   349,   349,   351,   518,   353,   385,
-     349,   349,   359,   385,   359,   563,   350,   356,   495,   496,
-     497,   507,   512,   356,   359,   385,   359,   385,   508,   512,
-     367,   514,   515,     0,   561,   492,   500,   507,   359,   491,
-     385,   567,   568,   585,   586,   382,   385,   567,   382,   567,
-     382,   567,   382,   567,   382,   567,   567,   585,   382,   567,
-     385,   565,   566,   512,   521,   353,   385,   409,   504,   505,
-     385,   511,   351,   359,   513,   353,   539,   564,   496,   495,
-     497,   385,   385,   349,   358,   513,   353,   356,   359,   490,
-     329,   330,   348,   349,   360,   361,   362,   363,   381,   382,
-     383,   384,   385,   414,   415,   416,   417,   418,   419,   420,
-     421,   457,   458,   459,   461,   462,   463,   464,   465,   466,
-     467,   468,   469,   510,   512,   516,   513,   350,   385,   359,
-     358,   356,   350,   356,   350,   356,   358,   356,   356,   356,
-     350,   356,   356,   356,   356,   356,   356,   356,   350,   356,
-     350,   356,   349,   352,   356,   359,   507,   512,   522,   523,
-     520,   358,   350,   356,   350,   356,   352,   468,   470,   471,
+     448,   449,   450,   451,   452,   453,   454,   455,   456,   457,
+     489,   490,   493,   494,   495,   496,   500,   501,   502,   503,
+     504,   505,   508,   509,   510,   511,   512,   514,   519,   520,
+     521,   562,   563,   564,   566,   573,   577,   578,   583,   586,
+     349,   349,   349,   349,   349,   349,   349,   349,   351,   520,
+     353,   385,   349,   349,   359,   385,   359,   565,   350,   356,
+     497,   498,   499,   509,   514,   356,   359,   385,   359,   385,
+     510,   514,   367,   516,   517,     0,   563,   494,   502,   509,
+     359,   493,   385,   569,   570,   587,   588,   382,   385,   569,
+     382,   569,   382,   569,   382,   569,   382,   569,   569,   587,
+     382,   569,   385,   567,   568,   514,   523,   353,   385,   409,
+     506,   507,   385,   513,   351,   359,   515,   353,   541,   566,
+     498,   497,   499,   385,   385,   349,   358,   515,   353,   356,
+     359,   492,   329,   330,   348,   349,   360,   361,   362,   363,
+     381,   382,   383,   384,   385,   414,   415,   416,   417,   418,
+     419,   420,   421,   459,   460,   461,   463,   464,   465,   466,
+     467,   468,   469,   470,   471,   512,   514,   518,   515,   350,
+     385,   359,   358,   356,   350,   356,   350,   356,   358,   356,
+     356,   356,   350,   356,   356,   356,   356,   356,   356,   356,
+     350,   356,   350,   356,   349,   352,   356,   359,   509,   514,
+     524,   525,   522,   358,   350,   356,   350,   356,   352,   470,
      472,   473,   474,   475,   476,   477,   478,   479,   480,   481,
-     351,   359,   353,   354,   359,   393,   394,   395,   396,   398,
-     399,   400,   401,   402,   403,   404,   405,   406,   407,   423,
-     468,   481,   483,   485,   487,   491,   510,   512,   528,   529,
-     530,   531,   532,   540,   541,   542,   543,   546,   547,   550,
-     551,   552,   559,   564,   513,   358,   513,   353,   483,   526,
-     358,   489,   385,   356,   359,   468,   468,   485,   329,   330,
-     351,   355,   350,   350,   356,   392,   483,   349,   468,   356,
-     368,   564,   348,   351,   382,   568,   585,   385,   586,   348,
-     381,   382,   383,   384,   572,   573,   382,   481,   486,   574,
-     382,   381,   382,   383,   384,   577,   578,   382,   486,   579,
-     382,   348,   580,   382,   585,   385,   486,   582,   583,   382,
-     486,   352,   566,   512,   385,   524,   525,   354,   523,   522,
-     486,   505,   385,   364,   365,   366,   361,   363,   327,   328,
-     331,   332,   367,   368,   333,   334,   371,   370,   369,   335,
-     337,   336,   372,   352,   352,   481,   354,   533,   349,   359,
-     359,   554,   349,   349,   359,   359,   485,   349,   485,   357,
-     359,   359,   359,   359,   338,   339,   340,   341,   342,   343,
-     344,   345,   346,   347,   358,   484,   356,   359,   354,   529,
-     543,   547,   552,   526,   358,   354,   526,   527,   526,   522,
-     385,   350,   460,   485,   385,   483,   468,   348,   382,   569,
-     570,   350,   358,   350,   356,   350,   356,   350,   356,   356,
-     350,   356,   350,   356,   350,   356,   356,   350,   356,   356,
-     350,   356,   350,   356,   350,   350,   524,   513,   356,   359,
-     354,   468,   468,   468,   470,   470,   471,   471,   472,   472,
-     472,   472,   473,   473,   474,   475,   476,   477,   478,   479,
-     482,   352,   540,   553,   529,   555,   485,   359,   485,   357,
-     483,   483,   526,   354,   356,   354,   352,   352,   356,   352,
-     356,   573,   572,   486,   574,   578,   577,   486,   579,   348,
-     580,   582,   583,   359,   525,   485,   534,   485,   500,   545,
-     393,   528,   541,   556,   350,   350,   354,   526,   348,   382,
-     350,   350,   350,   350,   350,   350,   357,   354,   385,   350,
-     349,   545,   557,   558,   536,   537,   538,   544,   548,   483,
-     358,   530,   535,   539,   485,   359,   350,   397,   532,   530,
-     353,   526,   350,   485,   535,   536,   540,   549,   359,   354
+     482,   483,   351,   359,   353,   354,   359,   393,   394,   395,
+     396,   398,   399,   400,   401,   402,   403,   404,   405,   406,
+     407,   423,   470,   483,   485,   487,   489,   493,   512,   514,
+     530,   531,   532,   533,   534,   542,   543,   544,   545,   548,
+     549,   552,   553,   554,   561,   566,   515,   358,   515,   353,
+     485,   528,   358,   491,   385,   356,   359,   470,   470,   487,
+     329,   330,   351,   355,   350,   350,   356,   392,   485,   349,
+     470,   356,   368,   566,   348,   351,   382,   570,   587,   385,
+     588,   348,   381,   382,   383,   384,   574,   575,   382,   483,
+     488,   576,   382,   381,   382,   383,   384,   579,   580,   382,
+     488,   581,   382,   348,   582,   382,   587,   385,   488,   584,
+     585,   382,   488,   352,   568,   514,   385,   526,   527,   354,
+     525,   524,   488,   507,   385,   364,   365,   366,   361,   363,
+     327,   328,   331,   332,   367,   368,   333,   334,   371,   370,
+     369,   335,   337,   336,   372,   352,   352,   483,   354,   535,
+     349,   359,   359,   556,   349,   349,   359,   359,   487,   349,
+     487,   357,   359,   359,   359,   359,   338,   339,   340,   341,
+     342,   343,   344,   345,   346,   347,   358,   486,   356,   359,
+     354,   531,   545,   549,   554,   528,   358,   354,   528,   529,
+     528,   524,   385,   350,   462,   487,   385,   485,   470,   348,
+     382,   571,   572,   350,   358,   350,   356,   350,   356,   350,
+     356,   356,   350,   356,   350,   356,   350,   356,   356,   350,
+     356,   356,   350,   356,   350,   356,   350,   350,   526,   515,
+     356,   359,   354,   470,   470,   470,   472,   472,   473,   473,
+     474,   474,   474,   474,   475,   475,   476,   477,   478,   479,
+     480,   481,   484,   352,   542,   555,   531,   557,   487,   359,
+     487,   357,   485,   485,   528,   354,   356,   354,   352,   352,
+     356,   352,   356,   575,   574,   488,   576,   580,   579,   488,
+     581,   348,   582,   584,   585,   359,   527,   487,   536,   487,
+     502,   547,   393,   530,   543,   558,   350,   350,   354,   528,
+     348,   382,   350,   350,   350,   350,   350,   350,   357,   354,
+     385,   350,   349,   547,   559,   560,   538,   539,   540,   546,
+     550,   485,   358,   532,   537,   541,   487,   359,   350,   397,
+     534,   532,   353,   528,   350,   487,   537,   538,   542,   551,
+     359,   354
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_int16 yyr1[] =
 {
-       0,   456,   457,   458,   458,   458,   458,   458,   458,   458,
-     458,   458,   458,   458,   458,   458,   458,   458,   459,   459,
-     459,   459,   459,   459,   460,   461,   462,   463,   463,   464,
-     464,   465,   465,   466,   467,   467,   467,   468,   468,   468,
-     468,   469,   469,   469,   469,   470,   470,   470,   470,   471,
-     471,   471,   472,   472,   472,   473,   473,   473,   473,   473,
-     474,   474,   474,   475,   475,   476,   476,   477,   477,   478,
-     478,   479,   479,   480,   480,   481,   482,   481,   483,   483,
-     484,   484,   484,   484,   484,   484,   484,   484,   484,   484,
-     484,   485,   485,   486,   487,   487,   487,   487,   487,   487,
-     487,   487,   487,   487,   487,   489,   488,   490,   490,   491,
-     491,   491,   491,   492,   492,   493,   493,   494,   495,   495,
-     496,   496,   496,   496,   497,   498,   498,   498,   498,   498,
-     499,   499,   499,   499,   499,   500,   500,   501,   502,   502,
-     502,   502,   502,   502,   502,   502,   502,   503,   504,   504,
-     505,   505,   505,   506,   507,   507,   508,   508,   508,   508,
-     508,   508,   508,   508,   508,   508,   508,   509,   509,   509,
-     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
-     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
-     509,   509,   509,   509,   509,   509,   509,   509,   509,   509,
-     509,   509,   510,   511,   511,   512,   512,   513,   513,   513,
-     513,   514,   514,   515,   516,   516,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   517,   517,
-     517,   518,   518,   518,   520,   519,   521,   519,   522,   522,
-     523,   523,   524,   524,   525,   525,   526,   526,   526,   526,
-     527,   527,   528,   529,   529,   530,   530,   530,   530,   530,
-     530,   530,   530,   531,   532,   533,   534,   532,   535,   535,
-     537,   536,   538,   536,   539,   539,   540,   540,   541,   541,
-     542,   542,   543,   544,   544,   545,   545,   546,   546,   548,
-     547,   549,   549,   550,   550,   551,   551,   553,   552,   554,
-     552,   555,   552,   556,   556,   557,   557,   558,   558,   559,
-     559,   559,   559,   559,   559,   559,   559,   560,   560,   561,
-     561,   561,   563,   562,   564,   565,   565,   566,   566,   567,
-     567,   568,   568,   569,   569,   570,   570,   571,   571,   571,
-     571,   571,   571,   572,   572,   573,   573,   573,   573,   573,
-     574,   574,   575,   575,   576,   576,   576,   576,   576,   576,
-     576,   576,   577,   577,   578,   578,   578,   578,   579,   579,
-     580,   580,   581,   581,   581,   581,   582,   582,   583,   584,
-     584,   585,   585,   586,   586
+       0,   458,   459,   460,   460,   460,   460,   460,   460,   460,
+     460,   460,   460,   460,   460,   460,   460,   460,   461,   461,
+     461,   461,   461,   461,   462,   463,   464,   465,   465,   466,
+     466,   467,   467,   468,   469,   469,   469,   470,   470,   470,
+     470,   471,   471,   471,   471,   472,   472,   472,   472,   473,
+     473,   473,   474,   474,   474,   475,   475,   475,   475,   475,
+     476,   476,   476,   477,   477,   478,   478,   479,   479,   480,
+     480,   481,   481,   482,   482,   483,   484,   483,   485,   485,
+     486,   486,   486,   486,   486,   486,   486,   486,   486,   486,
+     486,   487,   487,   488,   489,   489,   489,   489,   489,   489,
+     489,   489,   489,   489,   489,   491,   490,   492,   492,   493,
+     493,   493,   493,   494,   494,   495,   495,   496,   497,   497,
+     498,   498,   498,   498,   499,   500,   500,   500,   500,   500,
+     501,   501,   501,   501,   501,   502,   502,   503,   504,   504,
+     504,   504,   504,   504,   504,   504,   504,   504,   505,   506,
+     506,   507,   507,   507,   508,   509,   509,   510,   510,   510,
+     510,   510,   510,   510,   510,   510,   510,   510,   511,   511,
+     511,   511,   511,   511,   511,   511,   511,   511,   511,   511,
+     511,   511,   511,   511,   511,   511,   511,   511,   511,   511,
+     511,   511,   511,   511,   511,   511,   511,   511,   511,   511,
+     511,   511,   511,   511,   512,   513,   513,   514,   514,   515,
+     515,   515,   515,   516,   516,   517,   518,   518,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   519,   519,   519,   519,   519,   519,   519,
+     519,   519,   519,   520,   520,   520,   522,   521,   523,   521,
+     524,   524,   525,   525,   526,   526,   527,   527,   528,   528,
+     528,   528,   529,   529,   530,   531,   531,   532,   532,   532,
+     532,   532,   532,   532,   532,   533,   534,   535,   536,   534,
+     537,   537,   539,   538,   540,   538,   541,   541,   542,   542,
+     543,   543,   544,   544,   545,   546,   546,   547,   547,   548,
+     548,   550,   549,   551,   551,   552,   552,   553,   553,   555,
+     554,   556,   554,   557,   554,   558,   558,   559,   559,   560,
+     560,   561,   561,   561,   561,   561,   561,   561,   561,   562,
+     562,   563,   563,   563,   565,   564,   566,   567,   567,   568,
+     568,   569,   569,   570,   570,   571,   571,   572,   572,   573,
+     573,   573,   573,   573,   573,   574,   574,   575,   575,   575,
+     575,   575,   576,   576,   577,   577,   578,   578,   578,   578,
+     578,   578,   578,   578,   579,   579,   580,   580,   580,   580,
+     581,   581,   582,   582,   583,   583,   583,   583,   584,   584,
+     585,   586,   586,   587,   587,   588,   588
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -4377,14 +4391,14 @@ static const yytype_int8 yyr2[] =
        3,     3,     4,     1,     1,     2,     3,     3,     2,     3,
        2,     1,     2,     1,     1,     1,     3,     4,     6,     5,
        1,     2,     3,     5,     4,     1,     2,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     4,     1,     3,
-       1,     3,     1,     1,     1,     2,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     4,     1,
+       3,     1,     3,     1,     1,     1,     2,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     4,     1,     1,     3,     2,     3,     2,     3,     3,
-       4,     1,     0,     3,     1,     3,     1,     1,     1,     1,
+       1,     1,     4,     1,     1,     1,     3,     2,     3,     2,
+       3,     3,     4,     1,     0,     3,     1,     3,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -4416,22 +4430,22 @@ static const yytype_int8 yyr2[] =
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     0,     6,     0,     5,     1,     2,
-       3,     4,     1,     3,     1,     2,     1,     3,     4,     2,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     2,     0,     0,     5,     1,     1,
-       0,     2,     0,     2,     2,     3,     1,     2,     1,     2,
-       1,     2,     5,     3,     1,     1,     4,     1,     2,     0,
-       8,     0,     1,     3,     2,     1,     2,     0,     6,     0,
-       8,     0,     7,     1,     1,     1,     0,     2,     3,     2,
-       2,     2,     3,     2,     2,     2,     2,     1,     2,     1,
-       1,     1,     0,     3,     5,     1,     3,     1,     4,     1,
-       3,     5,     5,     1,     3,     1,     3,     4,     6,     6,
-       8,     6,     8,     1,     3,     1,     1,     1,     1,     1,
-       1,     3,     4,     6,     4,     6,     6,     8,     6,     8,
-       6,     8,     1,     3,     1,     1,     1,     1,     1,     3,
-       1,     3,     6,     8,     4,     6,     1,     3,     1,     4,
-       6,     1,     3,     3,     3
+       1,     1,     1,     1,     1,     1,     0,     6,     0,     5,
+       1,     2,     3,     4,     1,     3,     1,     2,     1,     3,
+       4,     2,     1,     3,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     2,     0,     0,     5,
+       1,     1,     0,     2,     0,     2,     2,     3,     1,     2,
+       1,     2,     1,     2,     5,     3,     1,     1,     4,     1,
+       2,     0,     8,     0,     1,     3,     2,     1,     2,     0,
+       6,     0,     8,     0,     7,     1,     1,     1,     0,     2,
+       3,     2,     2,     2,     3,     2,     2,     2,     2,     1,
+       2,     1,     1,     1,     0,     3,     5,     1,     3,     1,
+       4,     1,     3,     5,     5,     1,     3,     1,     3,     4,
+       6,     6,     8,     6,     8,     1,     3,     1,     1,     1,
+       1,     1,     1,     3,     4,     6,     4,     6,     6,     8,
+       6,     8,     6,     8,     1,     3,     1,     1,     1,     1,
+       1,     3,     1,     3,     6,     8,     4,     6,     1,     3,
+       1,     4,     6,     1,     3,     3,     3
 };
 
 
@@ -5181,7 +5195,7 @@ yyreduce:
                  {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 5185 "MachineIndependent/glslang_tab.cpp"
+#line 5199 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 3: /* primary_expression: variable_identifier  */
@@ -5189,7 +5203,7 @@ yyreduce:
                           {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5193 "MachineIndependent/glslang_tab.cpp"
+#line 5207 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN  */
@@ -5199,7 +5213,7 @@ yyreduce:
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 5203 "MachineIndependent/glslang_tab.cpp"
+#line 5217 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 5: /* primary_expression: FLOATCONSTANT  */
@@ -5207,7 +5221,7 @@ yyreduce:
                     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 5211 "MachineIndependent/glslang_tab.cpp"
+#line 5225 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 6: /* primary_expression: INTCONSTANT  */
@@ -5215,7 +5229,7 @@ yyreduce:
                   {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 5219 "MachineIndependent/glslang_tab.cpp"
+#line 5233 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 7: /* primary_expression: UINTCONSTANT  */
@@ -5224,7 +5238,7 @@ yyreduce:
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 5228 "MachineIndependent/glslang_tab.cpp"
+#line 5242 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 8: /* primary_expression: BOOLCONSTANT  */
@@ -5232,7 +5246,7 @@ yyreduce:
                    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 5236 "MachineIndependent/glslang_tab.cpp"
+#line 5250 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 9: /* primary_expression: STRING_LITERAL  */
@@ -5240,7 +5254,7 @@ yyreduce:
                      {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 5244 "MachineIndependent/glslang_tab.cpp"
+#line 5258 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 10: /* primary_expression: INT32CONSTANT  */
@@ -5249,7 +5263,7 @@ yyreduce:
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 5253 "MachineIndependent/glslang_tab.cpp"
+#line 5267 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 11: /* primary_expression: UINT32CONSTANT  */
@@ -5258,7 +5272,7 @@ yyreduce:
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 5262 "MachineIndependent/glslang_tab.cpp"
+#line 5276 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 12: /* primary_expression: INT64CONSTANT  */
@@ -5267,7 +5281,7 @@ yyreduce:
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
     }
-#line 5271 "MachineIndependent/glslang_tab.cpp"
+#line 5285 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 13: /* primary_expression: UINT64CONSTANT  */
@@ -5276,7 +5290,7 @@ yyreduce:
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
     }
-#line 5280 "MachineIndependent/glslang_tab.cpp"
+#line 5294 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 14: /* primary_expression: INT16CONSTANT  */
@@ -5285,7 +5299,7 @@ yyreduce:
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 5289 "MachineIndependent/glslang_tab.cpp"
+#line 5303 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 15: /* primary_expression: UINT16CONSTANT  */
@@ -5294,7 +5308,7 @@ yyreduce:
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 5298 "MachineIndependent/glslang_tab.cpp"
+#line 5312 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 16: /* primary_expression: DOUBLECONSTANT  */
@@ -5305,7 +5319,7 @@ yyreduce:
             parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
     }
-#line 5309 "MachineIndependent/glslang_tab.cpp"
+#line 5323 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 17: /* primary_expression: FLOAT16CONSTANT  */
@@ -5314,7 +5328,7 @@ yyreduce:
         parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
     }
-#line 5318 "MachineIndependent/glslang_tab.cpp"
+#line 5332 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 18: /* postfix_expression: primary_expression  */
@@ -5322,7 +5336,7 @@ yyreduce:
                          {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5326 "MachineIndependent/glslang_tab.cpp"
+#line 5340 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET  */
@@ -5330,7 +5344,7 @@ yyreduce:
                                                                        {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 5334 "MachineIndependent/glslang_tab.cpp"
+#line 5348 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 20: /* postfix_expression: function_call  */
@@ -5338,7 +5352,7 @@ yyreduce:
                     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5342 "MachineIndependent/glslang_tab.cpp"
+#line 5356 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER  */
@@ -5346,7 +5360,7 @@ yyreduce:
                                         {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 5350 "MachineIndependent/glslang_tab.cpp"
+#line 5364 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 22: /* postfix_expression: postfix_expression INC_OP  */
@@ -5356,7 +5370,7 @@ yyreduce:
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 5360 "MachineIndependent/glslang_tab.cpp"
+#line 5374 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 23: /* postfix_expression: postfix_expression DEC_OP  */
@@ -5366,7 +5380,7 @@ yyreduce:
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 5370 "MachineIndependent/glslang_tab.cpp"
+#line 5384 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 24: /* integer_expression: expression  */
@@ -5375,7 +5389,7 @@ yyreduce:
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5379 "MachineIndependent/glslang_tab.cpp"
+#line 5393 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 25: /* function_call: function_call_or_method  */
@@ -5384,7 +5398,7 @@ yyreduce:
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 5388 "MachineIndependent/glslang_tab.cpp"
+#line 5402 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 26: /* function_call_or_method: function_call_generic  */
@@ -5392,7 +5406,7 @@ yyreduce:
                             {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5396 "MachineIndependent/glslang_tab.cpp"
+#line 5410 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN  */
@@ -5401,7 +5415,7 @@ yyreduce:
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5405 "MachineIndependent/glslang_tab.cpp"
+#line 5419 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN  */
@@ -5410,7 +5424,7 @@ yyreduce:
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5414 "MachineIndependent/glslang_tab.cpp"
+#line 5428 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 29: /* function_call_header_no_parameters: function_call_header VOID  */
@@ -5418,7 +5432,7 @@ yyreduce:
                                 {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 5422 "MachineIndependent/glslang_tab.cpp"
+#line 5436 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 30: /* function_call_header_no_parameters: function_call_header  */
@@ -5426,7 +5440,7 @@ yyreduce:
                            {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5430 "MachineIndependent/glslang_tab.cpp"
+#line 5444 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 31: /* function_call_header_with_parameters: function_call_header assignment_expression  */
@@ -5438,7 +5452,7 @@ yyreduce:
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5442 "MachineIndependent/glslang_tab.cpp"
+#line 5456 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression  */
@@ -5450,7 +5464,7 @@ yyreduce:
         (yyval.interm).function = (yyvsp[-2].interm).function;
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
     }
-#line 5454 "MachineIndependent/glslang_tab.cpp"
+#line 5468 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 33: /* function_call_header: function_identifier LEFT_PAREN  */
@@ -5458,7 +5472,7 @@ yyreduce:
                                      {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 5462 "MachineIndependent/glslang_tab.cpp"
+#line 5476 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 34: /* function_identifier: type_specifier  */
@@ -5468,7 +5482,7 @@ yyreduce:
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 5472 "MachineIndependent/glslang_tab.cpp"
+#line 5486 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 35: /* function_identifier: postfix_expression  */
@@ -5500,7 +5514,7 @@ yyreduce:
             (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 5504 "MachineIndependent/glslang_tab.cpp"
+#line 5518 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 36: /* function_identifier: non_uniform_qualifier  */
@@ -5510,7 +5524,7 @@ yyreduce:
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 5514 "MachineIndependent/glslang_tab.cpp"
+#line 5528 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 37: /* unary_expression: postfix_expression  */
@@ -5521,7 +5535,7 @@ yyreduce:
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 5525 "MachineIndependent/glslang_tab.cpp"
+#line 5539 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 38: /* unary_expression: INC_OP unary_expression  */
@@ -5530,7 +5544,7 @@ yyreduce:
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5534 "MachineIndependent/glslang_tab.cpp"
+#line 5548 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 39: /* unary_expression: DEC_OP unary_expression  */
@@ -5539,7 +5553,7 @@ yyreduce:
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5543 "MachineIndependent/glslang_tab.cpp"
+#line 5557 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 40: /* unary_expression: unary_operator unary_expression  */
@@ -5560,38 +5574,38 @@ yyreduce:
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 5564 "MachineIndependent/glslang_tab.cpp"
+#line 5578 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 41: /* unary_operator: PLUS  */
 #line 627 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 5570 "MachineIndependent/glslang_tab.cpp"
+#line 5584 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 42: /* unary_operator: DASH  */
 #line 628 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 5576 "MachineIndependent/glslang_tab.cpp"
+#line 5590 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 43: /* unary_operator: BANG  */
 #line 629 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 5582 "MachineIndependent/glslang_tab.cpp"
+#line 5596 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 44: /* unary_operator: TILDE  */
 #line 630 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
               parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 5589 "MachineIndependent/glslang_tab.cpp"
+#line 5603 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 45: /* multiplicative_expression: unary_expression  */
 #line 636 "MachineIndependent/glslang.y"
                        { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5595 "MachineIndependent/glslang_tab.cpp"
+#line 5609 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression  */
@@ -5601,7 +5615,7 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5605 "MachineIndependent/glslang_tab.cpp"
+#line 5619 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression  */
@@ -5611,7 +5625,7 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5615 "MachineIndependent/glslang_tab.cpp"
+#line 5629 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression  */
@@ -5622,13 +5636,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5626 "MachineIndependent/glslang_tab.cpp"
+#line 5640 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 49: /* additive_expression: multiplicative_expression  */
 #line 656 "MachineIndependent/glslang.y"
                                 { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5632 "MachineIndependent/glslang_tab.cpp"
+#line 5646 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 50: /* additive_expression: additive_expression PLUS multiplicative_expression  */
@@ -5638,7 +5652,7 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5642 "MachineIndependent/glslang_tab.cpp"
+#line 5656 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 51: /* additive_expression: additive_expression DASH multiplicative_expression  */
@@ -5648,13 +5662,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5652 "MachineIndependent/glslang_tab.cpp"
+#line 5666 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 52: /* shift_expression: additive_expression  */
 #line 670 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5658 "MachineIndependent/glslang_tab.cpp"
+#line 5672 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 53: /* shift_expression: shift_expression LEFT_OP additive_expression  */
@@ -5665,7 +5679,7 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5669 "MachineIndependent/glslang_tab.cpp"
+#line 5683 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression  */
@@ -5676,13 +5690,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5680 "MachineIndependent/glslang_tab.cpp"
+#line 5694 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 55: /* relational_expression: shift_expression  */
 #line 686 "MachineIndependent/glslang.y"
                        { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5686 "MachineIndependent/glslang_tab.cpp"
+#line 5700 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression  */
@@ -5692,7 +5706,7 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5696 "MachineIndependent/glslang_tab.cpp"
+#line 5710 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression  */
@@ -5702,7 +5716,7 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5706 "MachineIndependent/glslang_tab.cpp"
+#line 5720 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 58: /* relational_expression: relational_expression LE_OP shift_expression  */
@@ -5712,7 +5726,7 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5716 "MachineIndependent/glslang_tab.cpp"
+#line 5730 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 59: /* relational_expression: relational_expression GE_OP shift_expression  */
@@ -5722,13 +5736,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5726 "MachineIndependent/glslang_tab.cpp"
+#line 5740 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 60: /* equality_expression: relational_expression  */
 #line 710 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5732 "MachineIndependent/glslang_tab.cpp"
+#line 5746 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 61: /* equality_expression: equality_expression EQ_OP relational_expression  */
@@ -5742,7 +5756,7 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5746 "MachineIndependent/glslang_tab.cpp"
+#line 5760 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 62: /* equality_expression: equality_expression NE_OP relational_expression  */
@@ -5756,13 +5770,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5760 "MachineIndependent/glslang_tab.cpp"
+#line 5774 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 63: /* and_expression: equality_expression  */
 #line 732 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5766 "MachineIndependent/glslang_tab.cpp"
+#line 5780 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 64: /* and_expression: and_expression AMPERSAND equality_expression  */
@@ -5773,13 +5787,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5777 "MachineIndependent/glslang_tab.cpp"
+#line 5791 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 65: /* exclusive_or_expression: and_expression  */
 #line 742 "MachineIndependent/glslang.y"
                      { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5783 "MachineIndependent/glslang_tab.cpp"
+#line 5797 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression  */
@@ -5790,13 +5804,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5794 "MachineIndependent/glslang_tab.cpp"
+#line 5808 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 67: /* inclusive_or_expression: exclusive_or_expression  */
 #line 752 "MachineIndependent/glslang.y"
                               { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5800 "MachineIndependent/glslang_tab.cpp"
+#line 5814 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression  */
@@ -5807,13 +5821,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 5811 "MachineIndependent/glslang_tab.cpp"
+#line 5825 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 69: /* logical_and_expression: inclusive_or_expression  */
 #line 762 "MachineIndependent/glslang.y"
                               { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5817 "MachineIndependent/glslang_tab.cpp"
+#line 5831 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression  */
@@ -5823,13 +5837,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5827 "MachineIndependent/glslang_tab.cpp"
+#line 5841 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 71: /* logical_xor_expression: logical_and_expression  */
 #line 771 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5833 "MachineIndependent/glslang_tab.cpp"
+#line 5847 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression  */
@@ -5839,13 +5853,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5843 "MachineIndependent/glslang_tab.cpp"
+#line 5857 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 73: /* logical_or_expression: logical_xor_expression  */
 #line 780 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5849 "MachineIndependent/glslang_tab.cpp"
+#line 5863 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression  */
@@ -5855,13 +5869,13 @@ yyreduce:
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5859 "MachineIndependent/glslang_tab.cpp"
+#line 5873 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 75: /* conditional_expression: logical_or_expression  */
 #line 789 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5865 "MachineIndependent/glslang_tab.cpp"
+#line 5879 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 76: /* $@1: %empty  */
@@ -5869,7 +5883,7 @@ yyreduce:
                                      {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 5873 "MachineIndependent/glslang_tab.cpp"
+#line 5887 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression  */
@@ -5886,13 +5900,13 @@ yyreduce:
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 5890 "MachineIndependent/glslang_tab.cpp"
+#line 5904 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 78: /* assignment_expression: conditional_expression  */
 #line 808 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5896 "MachineIndependent/glslang_tab.cpp"
+#line 5910 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression  */
@@ -5910,7 +5924,7 @@ yyreduce:
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 5914 "MachineIndependent/glslang_tab.cpp"
+#line 5928 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 80: /* assignment_operator: EQUAL  */
@@ -5919,7 +5933,7 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 5923 "MachineIndependent/glslang_tab.cpp"
+#line 5937 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 81: /* assignment_operator: MUL_ASSIGN  */
@@ -5928,7 +5942,7 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 5932 "MachineIndependent/glslang_tab.cpp"
+#line 5946 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 82: /* assignment_operator: DIV_ASSIGN  */
@@ -5937,7 +5951,7 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 5941 "MachineIndependent/glslang_tab.cpp"
+#line 5955 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 83: /* assignment_operator: MOD_ASSIGN  */
@@ -5947,7 +5961,7 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 5951 "MachineIndependent/glslang_tab.cpp"
+#line 5965 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 84: /* assignment_operator: ADD_ASSIGN  */
@@ -5956,7 +5970,7 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 5960 "MachineIndependent/glslang_tab.cpp"
+#line 5974 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 85: /* assignment_operator: SUB_ASSIGN  */
@@ -5965,7 +5979,7 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 5969 "MachineIndependent/glslang_tab.cpp"
+#line 5983 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 86: /* assignment_operator: LEFT_ASSIGN  */
@@ -5974,7 +5988,7 @@ yyreduce:
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 5978 "MachineIndependent/glslang_tab.cpp"
+#line 5992 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 87: /* assignment_operator: RIGHT_ASSIGN  */
@@ -5983,7 +5997,7 @@ yyreduce:
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 5987 "MachineIndependent/glslang_tab.cpp"
+#line 6001 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 88: /* assignment_operator: AND_ASSIGN  */
@@ -5992,7 +6006,7 @@ yyreduce:
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 5996 "MachineIndependent/glslang_tab.cpp"
+#line 6010 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 89: /* assignment_operator: XOR_ASSIGN  */
@@ -6001,7 +6015,7 @@ yyreduce:
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 6005 "MachineIndependent/glslang_tab.cpp"
+#line 6019 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 90: /* assignment_operator: OR_ASSIGN  */
@@ -6010,7 +6024,7 @@ yyreduce:
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 6014 "MachineIndependent/glslang_tab.cpp"
+#line 6028 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 91: /* expression: assignment_expression  */
@@ -6018,7 +6032,7 @@ yyreduce:
                             {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 6022 "MachineIndependent/glslang_tab.cpp"
+#line 6036 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 92: /* expression: expression COMMA assignment_expression  */
@@ -6031,7 +6045,7 @@ yyreduce:
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 6035 "MachineIndependent/glslang_tab.cpp"
+#line 6049 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 93: /* constant_expression: conditional_expression  */
@@ -6040,7 +6054,7 @@ yyreduce:
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 6044 "MachineIndependent/glslang_tab.cpp"
+#line 6058 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 94: /* declaration: function_prototype SEMICOLON  */
@@ -6050,7 +6064,7 @@ yyreduce:
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 6054 "MachineIndependent/glslang_tab.cpp"
+#line 6068 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 95: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON  */
@@ -6062,7 +6076,7 @@ yyreduce:
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 6066 "MachineIndependent/glslang_tab.cpp"
+#line 6080 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 96: /* declaration: spirv_execution_mode_qualifier SEMICOLON  */
@@ -6072,7 +6086,7 @@ yyreduce:
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier");
         (yyval.interm.intermNode) = 0;
     }
-#line 6076 "MachineIndependent/glslang_tab.cpp"
+#line 6090 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 97: /* declaration: init_declarator_list SEMICOLON  */
@@ -6082,7 +6096,7 @@ yyreduce:
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 6086 "MachineIndependent/glslang_tab.cpp"
+#line 6100 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 98: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON  */
@@ -6094,7 +6108,7 @@ yyreduce:
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 6098 "MachineIndependent/glslang_tab.cpp"
+#line 6112 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 99: /* declaration: block_structure SEMICOLON  */
@@ -6103,7 +6117,7 @@ yyreduce:
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 6107 "MachineIndependent/glslang_tab.cpp"
+#line 6121 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 100: /* declaration: block_structure IDENTIFIER SEMICOLON  */
@@ -6112,7 +6126,7 @@ yyreduce:
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 6116 "MachineIndependent/glslang_tab.cpp"
+#line 6130 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 101: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON  */
@@ -6121,7 +6135,7 @@ yyreduce:
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 6125 "MachineIndependent/glslang_tab.cpp"
+#line 6139 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 102: /* declaration: type_qualifier SEMICOLON  */
@@ -6131,7 +6145,7 @@ yyreduce:
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 6135 "MachineIndependent/glslang_tab.cpp"
+#line 6149 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 103: /* declaration: type_qualifier IDENTIFIER SEMICOLON  */
@@ -6141,7 +6155,7 @@ yyreduce:
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 6145 "MachineIndependent/glslang_tab.cpp"
+#line 6159 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 104: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON  */
@@ -6152,13 +6166,13 @@ yyreduce:
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 6156 "MachineIndependent/glslang_tab.cpp"
+#line 6170 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 105: /* $@2: %empty  */
 #line 956 "MachineIndependent/glslang.y"
                                            { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 6162 "MachineIndependent/glslang_tab.cpp"
+#line 6176 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 106: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE  */
@@ -6172,7 +6186,7 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 6176 "MachineIndependent/glslang_tab.cpp"
+#line 6190 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 107: /* identifier_list: COMMA IDENTIFIER  */
@@ -6181,7 +6195,7 @@ yyreduce:
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 6185 "MachineIndependent/glslang_tab.cpp"
+#line 6199 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 108: /* identifier_list: identifier_list COMMA IDENTIFIER  */
@@ -6190,7 +6204,7 @@ yyreduce:
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 6194 "MachineIndependent/glslang_tab.cpp"
+#line 6208 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 109: /* function_prototype: function_declarator RIGHT_PAREN  */
@@ -6199,7 +6213,7 @@ yyreduce:
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 6203 "MachineIndependent/glslang_tab.cpp"
+#line 6217 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute  */
@@ -6210,7 +6224,7 @@ yyreduce:
         parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
     }
-#line 6214 "MachineIndependent/glslang_tab.cpp"
+#line 6228 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN  */
@@ -6221,7 +6235,7 @@ yyreduce:
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
         parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes));
     }
-#line 6225 "MachineIndependent/glslang_tab.cpp"
+#line 6239 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute  */
@@ -6233,7 +6247,7 @@ yyreduce:
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes));
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
     }
-#line 6237 "MachineIndependent/glslang_tab.cpp"
+#line 6251 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 113: /* function_declarator: function_header  */
@@ -6241,7 +6255,7 @@ yyreduce:
                       {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 6245 "MachineIndependent/glslang_tab.cpp"
+#line 6259 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 114: /* function_declarator: function_header_with_parameters  */
@@ -6249,7 +6263,7 @@ yyreduce:
                                       {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 6253 "MachineIndependent/glslang_tab.cpp"
+#line 6267 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 115: /* function_header_with_parameters: function_header parameter_declaration  */
@@ -6262,7 +6276,7 @@ yyreduce:
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 6266 "MachineIndependent/glslang_tab.cpp"
+#line 6280 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 116: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration  */
@@ -6284,7 +6298,7 @@ yyreduce:
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 6288 "MachineIndependent/glslang_tab.cpp"
+#line 6302 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 117: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN  */
@@ -6308,7 +6322,7 @@ yyreduce:
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 6312 "MachineIndependent/glslang_tab.cpp"
+#line 6326 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 118: /* parameter_declarator: type_specifier IDENTIFIER  */
@@ -6328,7 +6342,7 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 6332 "MachineIndependent/glslang_tab.cpp"
+#line 6346 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 119: /* parameter_declarator: type_specifier IDENTIFIER array_specifier  */
@@ -6352,7 +6366,7 @@ yyreduce:
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 6356 "MachineIndependent/glslang_tab.cpp"
+#line 6370 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 120: /* parameter_declaration: type_qualifier parameter_declarator  */
@@ -6368,7 +6382,7 @@ yyreduce:
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 6372 "MachineIndependent/glslang_tab.cpp"
+#line 6386 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 121: /* parameter_declaration: parameter_declarator  */
@@ -6380,7 +6394,7 @@ yyreduce:
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 6384 "MachineIndependent/glslang_tab.cpp"
+#line 6398 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 122: /* parameter_declaration: type_qualifier parameter_type_specifier  */
@@ -6395,7 +6409,7 @@ yyreduce:
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 6399 "MachineIndependent/glslang_tab.cpp"
+#line 6413 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 123: /* parameter_declaration: parameter_type_specifier  */
@@ -6407,7 +6421,7 @@ yyreduce:
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 6411 "MachineIndependent/glslang_tab.cpp"
+#line 6425 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 124: /* parameter_type_specifier: type_specifier  */
@@ -6418,7 +6432,7 @@ yyreduce:
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 6422 "MachineIndependent/glslang_tab.cpp"
+#line 6436 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 125: /* init_declarator_list: single_declaration  */
@@ -6426,7 +6440,7 @@ yyreduce:
                          {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 6430 "MachineIndependent/glslang_tab.cpp"
+#line 6444 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER  */
@@ -6435,7 +6449,7 @@ yyreduce:
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 6439 "MachineIndependent/glslang_tab.cpp"
+#line 6453 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier  */
@@ -6444,7 +6458,7 @@ yyreduce:
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 6448 "MachineIndependent/glslang_tab.cpp"
+#line 6462 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 128: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer  */
@@ -6454,7 +6468,7 @@ yyreduce:
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 6458 "MachineIndependent/glslang_tab.cpp"
+#line 6472 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer  */
@@ -6464,7 +6478,7 @@ yyreduce:
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 6468 "MachineIndependent/glslang_tab.cpp"
+#line 6482 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 130: /* single_declaration: fully_specified_type  */
@@ -6476,7 +6490,7 @@ yyreduce:
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
 
     }
-#line 6480 "MachineIndependent/glslang_tab.cpp"
+#line 6494 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 131: /* single_declaration: fully_specified_type IDENTIFIER  */
@@ -6486,7 +6500,7 @@ yyreduce:
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 6490 "MachineIndependent/glslang_tab.cpp"
+#line 6504 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 132: /* single_declaration: fully_specified_type IDENTIFIER array_specifier  */
@@ -6496,7 +6510,7 @@ yyreduce:
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 6500 "MachineIndependent/glslang_tab.cpp"
+#line 6514 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 133: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer  */
@@ -6506,7 +6520,7 @@ yyreduce:
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 6510 "MachineIndependent/glslang_tab.cpp"
+#line 6524 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 134: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer  */
@@ -6516,7 +6530,7 @@ yyreduce:
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 6520 "MachineIndependent/glslang_tab.cpp"
+#line 6534 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 135: /* fully_specified_type: type_specifier  */
@@ -6531,7 +6545,7 @@ yyreduce:
         }
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 6535 "MachineIndependent/glslang_tab.cpp"
+#line 6549 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 136: /* fully_specified_type: type_qualifier type_specifier  */
@@ -6560,7 +6574,7 @@ yyreduce:
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 6564 "MachineIndependent/glslang_tab.cpp"
+#line 6578 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 137: /* invariant_qualifier: INVARIANT  */
@@ -6571,7 +6585,7 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 6575 "MachineIndependent/glslang_tab.cpp"
+#line 6589 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 138: /* interpolation_qualifier: SMOOTH  */
@@ -6583,7 +6597,7 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 6587 "MachineIndependent/glslang_tab.cpp"
+#line 6601 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 139: /* interpolation_qualifier: FLAT  */
@@ -6595,7 +6609,7 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 6599 "MachineIndependent/glslang_tab.cpp"
+#line 6613 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 140: /* interpolation_qualifier: NOPERSPECTIVE  */
@@ -6607,7 +6621,7 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 6611 "MachineIndependent/glslang_tab.cpp"
+#line 6625 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 141: /* interpolation_qualifier: EXPLICITINTERPAMD  */
@@ -6619,7 +6633,7 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.explicitInterp = true;
     }
-#line 6623 "MachineIndependent/glslang_tab.cpp"
+#line 6637 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 142: /* interpolation_qualifier: PERVERTEXNV  */
@@ -6632,7 +6646,7 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexNV = true;
     }
-#line 6636 "MachineIndependent/glslang_tab.cpp"
+#line 6650 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 143: /* interpolation_qualifier: PERVERTEXEXT  */
@@ -6645,7 +6659,7 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexEXT = true;
     }
-#line 6649 "MachineIndependent/glslang_tab.cpp"
+#line 6663 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 144: /* interpolation_qualifier: PERPRIMITIVENV  */
@@ -6653,115 +6667,130 @@ yyreduce:
                      {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveNV");
         // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
         if (parseContext.language == EShLangFragment)
             parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_NV_mesh_shader, "perprimitiveNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
     }
-#line 6664 "MachineIndependent/glslang_tab.cpp"
+#line 6678 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 145: /* interpolation_qualifier: PERVIEWNV  */
+  case 145: /* interpolation_qualifier: PERPRIMITIVEEXT  */
 #line 1311 "MachineIndependent/glslang.y"
+                      {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshMask), "perprimitiveEXT");
+        // Fragment shader stage doesn't check for extension. So we explicitly add below extension check.
+        if (parseContext.language == EShLangFragment)
+            parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_mesh_shader, "perprimitiveEXT");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.perPrimitiveNV = true;
+    }
+#line 6693 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 146: /* interpolation_qualifier: PERVIEWNV  */
+#line 1321 "MachineIndependent/glslang.y"
                 {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, EShLangMeshNV, "perviewNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, EShLangMesh, "perviewNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perViewNV = true;
     }
-#line 6676 "MachineIndependent/glslang_tab.cpp"
+#line 6705 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 146: /* interpolation_qualifier: PERTASKNV  */
-#line 1318 "MachineIndependent/glslang.y"
+  case 147: /* interpolation_qualifier: PERTASKNV  */
+#line 1328 "MachineIndependent/glslang.y"
                 {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskNV");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perTaskNV = true;
     }
-#line 6688 "MachineIndependent/glslang_tab.cpp"
+#line 6717 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 147: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
-#line 1329 "MachineIndependent/glslang.y"
+  case 148: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
+#line 1339 "MachineIndependent/glslang.y"
                                                              {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 6696 "MachineIndependent/glslang_tab.cpp"
+#line 6725 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 148: /* layout_qualifier_id_list: layout_qualifier_id  */
-#line 1335 "MachineIndependent/glslang.y"
+  case 149: /* layout_qualifier_id_list: layout_qualifier_id  */
+#line 1345 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6704 "MachineIndependent/glslang_tab.cpp"
+#line 6733 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 149: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id  */
-#line 1338 "MachineIndependent/glslang.y"
+  case 150: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id  */
+#line 1348 "MachineIndependent/glslang.y"
                                                          {
         (yyval.interm.type) = (yyvsp[-2].interm.type);
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 6714 "MachineIndependent/glslang_tab.cpp"
+#line 6743 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 150: /* layout_qualifier_id: IDENTIFIER  */
-#line 1345 "MachineIndependent/glslang.y"
+  case 151: /* layout_qualifier_id: IDENTIFIER  */
+#line 1355 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 6723 "MachineIndependent/glslang_tab.cpp"
+#line 6752 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 151: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression  */
-#line 1349 "MachineIndependent/glslang.y"
+  case 152: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression  */
+#line 1359 "MachineIndependent/glslang.y"
                                            {
         (yyval.interm.type).init((yyvsp[-2].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
     }
-#line 6732 "MachineIndependent/glslang_tab.cpp"
+#line 6761 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 152: /* layout_qualifier_id: SHARED  */
-#line 1353 "MachineIndependent/glslang.y"
+  case 153: /* layout_qualifier_id: SHARED  */
+#line 1363 "MachineIndependent/glslang.y"
              { // because "shared" is both an identifier and a keyword
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         TString strShared("shared");
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
     }
-#line 6742 "MachineIndependent/glslang_tab.cpp"
+#line 6771 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 153: /* precise_qualifier: PRECISE  */
-#line 1362 "MachineIndependent/glslang.y"
+  case 154: /* precise_qualifier: PRECISE  */
+#line 1372 "MachineIndependent/glslang.y"
               {
         parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.noContraction = true;
     }
-#line 6753 "MachineIndependent/glslang_tab.cpp"
+#line 6782 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 154: /* type_qualifier: single_type_qualifier  */
-#line 1372 "MachineIndependent/glslang.y"
+  case 155: /* type_qualifier: single_type_qualifier  */
+#line 1382 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6761 "MachineIndependent/glslang_tab.cpp"
+#line 6790 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 155: /* type_qualifier: type_qualifier single_type_qualifier  */
-#line 1375 "MachineIndependent/glslang.y"
+  case 156: /* type_qualifier: type_qualifier single_type_qualifier  */
+#line 1385 "MachineIndependent/glslang.y"
                                            {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -6770,151 +6799,151 @@ yyreduce:
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 6774 "MachineIndependent/glslang_tab.cpp"
+#line 6803 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 156: /* single_type_qualifier: storage_qualifier  */
-#line 1386 "MachineIndependent/glslang.y"
+  case 157: /* single_type_qualifier: storage_qualifier  */
+#line 1396 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6782 "MachineIndependent/glslang_tab.cpp"
+#line 6811 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 157: /* single_type_qualifier: layout_qualifier  */
-#line 1389 "MachineIndependent/glslang.y"
+  case 158: /* single_type_qualifier: layout_qualifier  */
+#line 1399 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6790 "MachineIndependent/glslang_tab.cpp"
+#line 6819 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 158: /* single_type_qualifier: precision_qualifier  */
-#line 1392 "MachineIndependent/glslang.y"
+  case 159: /* single_type_qualifier: precision_qualifier  */
+#line 1402 "MachineIndependent/glslang.y"
                           {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6799 "MachineIndependent/glslang_tab.cpp"
+#line 6828 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 159: /* single_type_qualifier: interpolation_qualifier  */
-#line 1396 "MachineIndependent/glslang.y"
+  case 160: /* single_type_qualifier: interpolation_qualifier  */
+#line 1406 "MachineIndependent/glslang.y"
                               {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6808 "MachineIndependent/glslang_tab.cpp"
+#line 6837 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 160: /* single_type_qualifier: invariant_qualifier  */
-#line 1400 "MachineIndependent/glslang.y"
+  case 161: /* single_type_qualifier: invariant_qualifier  */
+#line 1410 "MachineIndependent/glslang.y"
                           {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6817 "MachineIndependent/glslang_tab.cpp"
+#line 6846 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 161: /* single_type_qualifier: precise_qualifier  */
-#line 1405 "MachineIndependent/glslang.y"
+  case 162: /* single_type_qualifier: precise_qualifier  */
+#line 1415 "MachineIndependent/glslang.y"
                         {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6826 "MachineIndependent/glslang_tab.cpp"
+#line 6855 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 162: /* single_type_qualifier: non_uniform_qualifier  */
-#line 1409 "MachineIndependent/glslang.y"
+  case 163: /* single_type_qualifier: non_uniform_qualifier  */
+#line 1419 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6834 "MachineIndependent/glslang_tab.cpp"
+#line 6863 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 163: /* single_type_qualifier: spirv_storage_class_qualifier  */
-#line 1412 "MachineIndependent/glslang.y"
+  case 164: /* single_type_qualifier: spirv_storage_class_qualifier  */
+#line 1422 "MachineIndependent/glslang.y"
                                     {
         parseContext.globalCheck((yyvsp[0].interm.type).loc, "spirv_storage_class");
         parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V storage class qualifier");
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6844 "MachineIndependent/glslang_tab.cpp"
+#line 6873 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 164: /* single_type_qualifier: spirv_decorate_qualifier  */
-#line 1417 "MachineIndependent/glslang.y"
+  case 165: /* single_type_qualifier: spirv_decorate_qualifier  */
+#line 1427 "MachineIndependent/glslang.y"
                                {
         parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier");
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6853 "MachineIndependent/glslang_tab.cpp"
+#line 6882 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 165: /* single_type_qualifier: SPIRV_BY_REFERENCE  */
-#line 1421 "MachineIndependent/glslang.y"
+  case 166: /* single_type_qualifier: SPIRV_BY_REFERENCE  */
+#line 1431 "MachineIndependent/glslang.y"
                          {
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_reference");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.setSpirvByReference();
     }
-#line 6863 "MachineIndependent/glslang_tab.cpp"
+#line 6892 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 166: /* single_type_qualifier: SPIRV_LITERAL  */
-#line 1426 "MachineIndependent/glslang.y"
+  case 167: /* single_type_qualifier: SPIRV_LITERAL  */
+#line 1436 "MachineIndependent/glslang.y"
                     {
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_literal");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.setSpirvLiteral();
     }
-#line 6873 "MachineIndependent/glslang_tab.cpp"
+#line 6902 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 167: /* storage_qualifier: CONST  */
-#line 1435 "MachineIndependent/glslang.y"
+  case 168: /* storage_qualifier: CONST  */
+#line 1445 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
     }
-#line 6882 "MachineIndependent/glslang_tab.cpp"
+#line 6911 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 168: /* storage_qualifier: INOUT  */
-#line 1439 "MachineIndependent/glslang.y"
+  case 169: /* storage_qualifier: INOUT  */
+#line 1449 "MachineIndependent/glslang.y"
             {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 6892 "MachineIndependent/glslang_tab.cpp"
+#line 6921 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 169: /* storage_qualifier: IN  */
-#line 1444 "MachineIndependent/glslang.y"
+  case 170: /* storage_qualifier: IN  */
+#line 1454 "MachineIndependent/glslang.y"
          {
         parseContext.globalCheck((yyvsp[0].lex).loc, "in");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqIn;
     }
-#line 6903 "MachineIndependent/glslang_tab.cpp"
+#line 6932 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 170: /* storage_qualifier: OUT  */
-#line 1450 "MachineIndependent/glslang.y"
+  case 171: /* storage_qualifier: OUT  */
+#line 1460 "MachineIndependent/glslang.y"
           {
         parseContext.globalCheck((yyvsp[0].lex).loc, "out");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqOut;
     }
-#line 6914 "MachineIndependent/glslang_tab.cpp"
+#line 6943 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 171: /* storage_qualifier: CENTROID  */
-#line 1456 "MachineIndependent/glslang.y"
+  case 172: /* storage_qualifier: CENTROID  */
+#line 1466 "MachineIndependent/glslang.y"
                {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -6922,44 +6951,44 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 6926 "MachineIndependent/glslang_tab.cpp"
+#line 6955 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 172: /* storage_qualifier: UNIFORM  */
-#line 1463 "MachineIndependent/glslang.y"
+  case 173: /* storage_qualifier: UNIFORM  */
+#line 1473 "MachineIndependent/glslang.y"
               {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 6936 "MachineIndependent/glslang_tab.cpp"
+#line 6965 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 173: /* storage_qualifier: SHARED  */
-#line 1468 "MachineIndependent/glslang.y"
+  case 174: /* storage_qualifier: SHARED  */
+#line 1478 "MachineIndependent/glslang.y"
              {
         parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared");
-        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshNVMask | EShLangTaskNVMask), "shared");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangComputeMask | EShLangMeshMask | EShLangTaskMask), "shared");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 6949 "MachineIndependent/glslang_tab.cpp"
+#line 6978 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 174: /* storage_qualifier: BUFFER  */
-#line 1476 "MachineIndependent/glslang.y"
+  case 175: /* storage_qualifier: BUFFER  */
+#line 1486 "MachineIndependent/glslang.y"
              {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 6959 "MachineIndependent/glslang_tab.cpp"
+#line 6988 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 175: /* storage_qualifier: ATTRIBUTE  */
-#line 1482 "MachineIndependent/glslang.y"
+  case 176: /* storage_qualifier: ATTRIBUTE  */
+#line 1492 "MachineIndependent/glslang.y"
                 {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -6972,11 +7001,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 6976 "MachineIndependent/glslang_tab.cpp"
+#line 7005 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 176: /* storage_qualifier: VARYING  */
-#line 1494 "MachineIndependent/glslang.y"
+  case 177: /* storage_qualifier: VARYING  */
+#line 1504 "MachineIndependent/glslang.y"
               {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -6991,32 +7020,32 @@ yyreduce:
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 6995 "MachineIndependent/glslang_tab.cpp"
+#line 7024 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 177: /* storage_qualifier: PATCH  */
-#line 1508 "MachineIndependent/glslang.y"
+  case 178: /* storage_qualifier: PATCH  */
+#line 1518 "MachineIndependent/glslang.y"
             {
         parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 7006 "MachineIndependent/glslang_tab.cpp"
+#line 7035 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 178: /* storage_qualifier: SAMPLE  */
-#line 1514 "MachineIndependent/glslang.y"
+  case 179: /* storage_qualifier: SAMPLE  */
+#line 1524 "MachineIndependent/glslang.y"
              {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 7016 "MachineIndependent/glslang_tab.cpp"
+#line 7045 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 179: /* storage_qualifier: HITATTRNV  */
-#line 1519 "MachineIndependent/glslang.y"
+  case 180: /* storage_qualifier: HITATTRNV  */
+#line 1529 "MachineIndependent/glslang.y"
                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -7025,11 +7054,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 7029 "MachineIndependent/glslang_tab.cpp"
+#line 7058 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 180: /* storage_qualifier: HITATTREXT  */
-#line 1527 "MachineIndependent/glslang.y"
+  case 181: /* storage_qualifier: HITATTREXT  */
+#line 1537 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -7038,11 +7067,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 7042 "MachineIndependent/glslang_tab.cpp"
+#line 7071 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 181: /* storage_qualifier: PAYLOADNV  */
-#line 1535 "MachineIndependent/glslang.y"
+  case 182: /* storage_qualifier: PAYLOADNV  */
+#line 1545 "MachineIndependent/glslang.y"
                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
@@ -7051,11 +7080,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 7055 "MachineIndependent/glslang_tab.cpp"
+#line 7084 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 182: /* storage_qualifier: PAYLOADEXT  */
-#line 1543 "MachineIndependent/glslang.y"
+  case 183: /* storage_qualifier: PAYLOADEXT  */
+#line 1553 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
@@ -7064,11 +7093,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 7068 "MachineIndependent/glslang_tab.cpp"
+#line 7097 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 183: /* storage_qualifier: PAYLOADINNV  */
-#line 1551 "MachineIndependent/glslang.y"
+  case 184: /* storage_qualifier: PAYLOADINNV  */
+#line 1561 "MachineIndependent/glslang.y"
                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
@@ -7077,11 +7106,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 7081 "MachineIndependent/glslang_tab.cpp"
+#line 7110 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 184: /* storage_qualifier: PAYLOADINEXT  */
-#line 1559 "MachineIndependent/glslang.y"
+  case 185: /* storage_qualifier: PAYLOADINEXT  */
+#line 1569 "MachineIndependent/glslang.y"
                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
@@ -7090,11 +7119,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 7094 "MachineIndependent/glslang_tab.cpp"
+#line 7123 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 185: /* storage_qualifier: CALLDATANV  */
-#line 1567 "MachineIndependent/glslang.y"
+  case 186: /* storage_qualifier: CALLDATANV  */
+#line 1577 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
@@ -7103,11 +7132,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 7107 "MachineIndependent/glslang_tab.cpp"
+#line 7136 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 186: /* storage_qualifier: CALLDATAEXT  */
-#line 1575 "MachineIndependent/glslang.y"
+  case 187: /* storage_qualifier: CALLDATAEXT  */
+#line 1585 "MachineIndependent/glslang.y"
                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
@@ -7116,11 +7145,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 7120 "MachineIndependent/glslang_tab.cpp"
+#line 7149 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 187: /* storage_qualifier: CALLDATAINNV  */
-#line 1583 "MachineIndependent/glslang.y"
+  case 188: /* storage_qualifier: CALLDATAINNV  */
+#line 1593 "MachineIndependent/glslang.y"
                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
@@ -7128,11 +7157,11 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 7132 "MachineIndependent/glslang_tab.cpp"
+#line 7161 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 188: /* storage_qualifier: CALLDATAINEXT  */
-#line 1590 "MachineIndependent/glslang.y"
+  case 189: /* storage_qualifier: CALLDATAINEXT  */
+#line 1600 "MachineIndependent/glslang.y"
                     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
@@ -7140,175 +7169,187 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 7144 "MachineIndependent/glslang_tab.cpp"
+#line 7173 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 189: /* storage_qualifier: COHERENT  */
-#line 1597 "MachineIndependent/glslang.y"
+  case 190: /* storage_qualifier: COHERENT  */
+#line 1607 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 7153 "MachineIndependent/glslang_tab.cpp"
+#line 7182 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 190: /* storage_qualifier: DEVICECOHERENT  */
-#line 1601 "MachineIndependent/glslang.y"
+  case 191: /* storage_qualifier: DEVICECOHERENT  */
+#line 1611 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
         (yyval.interm.type).qualifier.devicecoherent = true;
     }
-#line 7163 "MachineIndependent/glslang_tab.cpp"
+#line 7192 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 191: /* storage_qualifier: QUEUEFAMILYCOHERENT  */
-#line 1606 "MachineIndependent/glslang.y"
+  case 192: /* storage_qualifier: QUEUEFAMILYCOHERENT  */
+#line 1616 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
         (yyval.interm.type).qualifier.queuefamilycoherent = true;
     }
-#line 7173 "MachineIndependent/glslang_tab.cpp"
+#line 7202 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 192: /* storage_qualifier: WORKGROUPCOHERENT  */
-#line 1611 "MachineIndependent/glslang.y"
+  case 193: /* storage_qualifier: WORKGROUPCOHERENT  */
+#line 1621 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
         (yyval.interm.type).qualifier.workgroupcoherent = true;
     }
-#line 7183 "MachineIndependent/glslang_tab.cpp"
+#line 7212 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 193: /* storage_qualifier: SUBGROUPCOHERENT  */
-#line 1616 "MachineIndependent/glslang.y"
+  case 194: /* storage_qualifier: SUBGROUPCOHERENT  */
+#line 1626 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
         (yyval.interm.type).qualifier.subgroupcoherent = true;
     }
-#line 7193 "MachineIndependent/glslang_tab.cpp"
+#line 7222 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 194: /* storage_qualifier: NONPRIVATE  */
-#line 1621 "MachineIndependent/glslang.y"
+  case 195: /* storage_qualifier: NONPRIVATE  */
+#line 1631 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
         (yyval.interm.type).qualifier.nonprivate = true;
     }
-#line 7203 "MachineIndependent/glslang_tab.cpp"
+#line 7232 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 195: /* storage_qualifier: SHADERCALLCOHERENT  */
-#line 1626 "MachineIndependent/glslang.y"
+  case 196: /* storage_qualifier: SHADERCALLCOHERENT  */
+#line 1636 "MachineIndependent/glslang.y"
                          {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
         (yyval.interm.type).qualifier.shadercallcoherent = true;
     }
-#line 7213 "MachineIndependent/glslang_tab.cpp"
+#line 7242 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 196: /* storage_qualifier: VOLATILE  */
-#line 1631 "MachineIndependent/glslang.y"
+  case 197: /* storage_qualifier: VOLATILE  */
+#line 1641 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 7222 "MachineIndependent/glslang_tab.cpp"
+#line 7251 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 197: /* storage_qualifier: RESTRICT  */
-#line 1635 "MachineIndependent/glslang.y"
+  case 198: /* storage_qualifier: RESTRICT  */
+#line 1645 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 7231 "MachineIndependent/glslang_tab.cpp"
+#line 7260 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 198: /* storage_qualifier: READONLY  */
-#line 1639 "MachineIndependent/glslang.y"
+  case 199: /* storage_qualifier: READONLY  */
+#line 1649 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 7240 "MachineIndependent/glslang_tab.cpp"
+#line 7269 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 199: /* storage_qualifier: WRITEONLY  */
-#line 1643 "MachineIndependent/glslang.y"
+  case 200: /* storage_qualifier: WRITEONLY  */
+#line 1653 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 7249 "MachineIndependent/glslang_tab.cpp"
+#line 7278 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 200: /* storage_qualifier: SUBROUTINE  */
-#line 1647 "MachineIndependent/glslang.y"
+  case 201: /* storage_qualifier: SUBROUTINE  */
+#line 1657 "MachineIndependent/glslang.y"
                  {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
     }
-#line 7260 "MachineIndependent/glslang_tab.cpp"
+#line 7289 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 201: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN  */
-#line 1653 "MachineIndependent/glslang.y"
+  case 202: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN  */
+#line 1663 "MachineIndependent/glslang.y"
                                                        {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
     }
-#line 7271 "MachineIndependent/glslang_tab.cpp"
+#line 7300 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 203: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT  */
+#line 1669 "MachineIndependent/glslang.y"
+                              {
+        // No need for profile version or extension check. Shader stage already checks both.
+        parseContext.globalCheck((yyvsp[0].lex).loc, "taskPayloadSharedEXT");
+        parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskMask | EShLangMeshMask), "taskPayloadSharedEXT  ");
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.storage = EvqtaskPayloadSharedEXT;
+    }
+#line 7312 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 202: /* non_uniform_qualifier: NONUNIFORM  */
-#line 1664 "MachineIndependent/glslang.y"
+  case 204: /* non_uniform_qualifier: NONUNIFORM  */
+#line 1681 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 7280 "MachineIndependent/glslang_tab.cpp"
+#line 7321 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 203: /* type_name_list: IDENTIFIER  */
-#line 1671 "MachineIndependent/glslang.y"
+  case 205: /* type_name_list: IDENTIFIER  */
+#line 1688 "MachineIndependent/glslang.y"
                  {
         // TODO
     }
-#line 7288 "MachineIndependent/glslang_tab.cpp"
+#line 7329 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 204: /* type_name_list: type_name_list COMMA IDENTIFIER  */
-#line 1674 "MachineIndependent/glslang.y"
+  case 206: /* type_name_list: type_name_list COMMA IDENTIFIER  */
+#line 1691 "MachineIndependent/glslang.y"
                                       {
         // TODO: 4.0 semantics: subroutines
         // 1) make sure each identifier is a type declared earlier with SUBROUTINE
         // 2) save all of the identifiers for future comparison with the declared function
     }
-#line 7298 "MachineIndependent/glslang_tab.cpp"
+#line 7339 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 205: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt  */
-#line 1683 "MachineIndependent/glslang.y"
+  case 207: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt  */
+#line 1700 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
         (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters);
     }
-#line 7308 "MachineIndependent/glslang_tab.cpp"
+#line 7349 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 206: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier  */
-#line 1688 "MachineIndependent/glslang.y"
+  case 208: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier  */
+#line 1705 "MachineIndependent/glslang.y"
                                                                            {
         parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (yyval.interm.type) = (yyvsp[-2].interm.type);
@@ -7316,21 +7357,21 @@ yyreduce:
         (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters);
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 7320 "MachineIndependent/glslang_tab.cpp"
+#line 7361 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 207: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
-#line 1698 "MachineIndependent/glslang.y"
+  case 209: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
+#line 1715 "MachineIndependent/glslang.y"
                                  {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 7330 "MachineIndependent/glslang_tab.cpp"
+#line 7371 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 208: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
-#line 1703 "MachineIndependent/glslang.y"
+  case 210: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
+#line 1720 "MachineIndependent/glslang.y"
                                                         {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -7339,20 +7380,20 @@ yyreduce:
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 7343 "MachineIndependent/glslang_tab.cpp"
+#line 7384 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 209: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
-#line 1711 "MachineIndependent/glslang.y"
+  case 211: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
+#line 1728 "MachineIndependent/glslang.y"
                                                  {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 7352 "MachineIndependent/glslang_tab.cpp"
+#line 7393 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 210: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
-#line 1715 "MachineIndependent/glslang.y"
+  case 212: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
+#line 1732 "MachineIndependent/glslang.y"
                                                                         {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -7360,35 +7401,35 @@ yyreduce:
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 7364 "MachineIndependent/glslang_tab.cpp"
+#line 7405 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 211: /* type_parameter_specifier_opt: type_parameter_specifier  */
-#line 1725 "MachineIndependent/glslang.y"
+  case 213: /* type_parameter_specifier_opt: type_parameter_specifier  */
+#line 1742 "MachineIndependent/glslang.y"
                                {
         (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
     }
-#line 7372 "MachineIndependent/glslang_tab.cpp"
+#line 7413 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 212: /* type_parameter_specifier_opt: %empty  */
-#line 1728 "MachineIndependent/glslang.y"
+  case 214: /* type_parameter_specifier_opt: %empty  */
+#line 1745 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.typeParameters) = 0;
     }
-#line 7380 "MachineIndependent/glslang_tab.cpp"
+#line 7421 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 213: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE  */
-#line 1734 "MachineIndependent/glslang.y"
+  case 215: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE  */
+#line 1751 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
     }
-#line 7388 "MachineIndependent/glslang_tab.cpp"
+#line 7429 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 214: /* type_parameter_specifier_list: unary_expression  */
-#line 1740 "MachineIndependent/glslang.y"
+  case 216: /* type_parameter_specifier_list: unary_expression  */
+#line 1757 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.typeParameters) = new TArraySizes;
 
@@ -7396,11 +7437,11 @@ yyreduce:
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
         (yyval.interm.typeParameters)->addInnerSize(size);
     }
-#line 7400 "MachineIndependent/glslang_tab.cpp"
+#line 7441 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 215: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression  */
-#line 1747 "MachineIndependent/glslang.y"
+  case 217: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression  */
+#line 1764 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
 
@@ -7408,300 +7449,300 @@ yyreduce:
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter");
         (yyval.interm.typeParameters)->addInnerSize(size);
     }
-#line 7412 "MachineIndependent/glslang_tab.cpp"
+#line 7453 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 216: /* type_specifier_nonarray: VOID  */
-#line 1757 "MachineIndependent/glslang.y"
+  case 218: /* type_specifier_nonarray: VOID  */
+#line 1774 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 7421 "MachineIndependent/glslang_tab.cpp"
+#line 7462 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 217: /* type_specifier_nonarray: FLOAT  */
-#line 1761 "MachineIndependent/glslang.y"
+  case 219: /* type_specifier_nonarray: FLOAT  */
+#line 1778 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 7430 "MachineIndependent/glslang_tab.cpp"
+#line 7471 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 218: /* type_specifier_nonarray: INT  */
-#line 1765 "MachineIndependent/glslang.y"
+  case 220: /* type_specifier_nonarray: INT  */
+#line 1782 "MachineIndependent/glslang.y"
           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 7439 "MachineIndependent/glslang_tab.cpp"
+#line 7480 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 219: /* type_specifier_nonarray: UINT  */
-#line 1769 "MachineIndependent/glslang.y"
+  case 221: /* type_specifier_nonarray: UINT  */
+#line 1786 "MachineIndependent/glslang.y"
            {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 7449 "MachineIndependent/glslang_tab.cpp"
+#line 7490 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 220: /* type_specifier_nonarray: BOOL  */
-#line 1774 "MachineIndependent/glslang.y"
+  case 222: /* type_specifier_nonarray: BOOL  */
+#line 1791 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 7458 "MachineIndependent/glslang_tab.cpp"
+#line 7499 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 221: /* type_specifier_nonarray: VEC2  */
-#line 1778 "MachineIndependent/glslang.y"
+  case 223: /* type_specifier_nonarray: VEC2  */
+#line 1795 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 7468 "MachineIndependent/glslang_tab.cpp"
+#line 7509 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 222: /* type_specifier_nonarray: VEC3  */
-#line 1783 "MachineIndependent/glslang.y"
+  case 224: /* type_specifier_nonarray: VEC3  */
+#line 1800 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 7478 "MachineIndependent/glslang_tab.cpp"
+#line 7519 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 223: /* type_specifier_nonarray: VEC4  */
-#line 1788 "MachineIndependent/glslang.y"
+  case 225: /* type_specifier_nonarray: VEC4  */
+#line 1805 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 7488 "MachineIndependent/glslang_tab.cpp"
+#line 7529 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 224: /* type_specifier_nonarray: BVEC2  */
-#line 1793 "MachineIndependent/glslang.y"
+  case 226: /* type_specifier_nonarray: BVEC2  */
+#line 1810 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(2);
     }
-#line 7498 "MachineIndependent/glslang_tab.cpp"
+#line 7539 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 225: /* type_specifier_nonarray: BVEC3  */
-#line 1798 "MachineIndependent/glslang.y"
+  case 227: /* type_specifier_nonarray: BVEC3  */
+#line 1815 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(3);
     }
-#line 7508 "MachineIndependent/glslang_tab.cpp"
+#line 7549 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 226: /* type_specifier_nonarray: BVEC4  */
-#line 1803 "MachineIndependent/glslang.y"
+  case 228: /* type_specifier_nonarray: BVEC4  */
+#line 1820 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(4);
     }
-#line 7518 "MachineIndependent/glslang_tab.cpp"
+#line 7559 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 227: /* type_specifier_nonarray: IVEC2  */
-#line 1808 "MachineIndependent/glslang.y"
+  case 229: /* type_specifier_nonarray: IVEC2  */
+#line 1825 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 7528 "MachineIndependent/glslang_tab.cpp"
+#line 7569 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 228: /* type_specifier_nonarray: IVEC3  */
-#line 1813 "MachineIndependent/glslang.y"
+  case 230: /* type_specifier_nonarray: IVEC3  */
+#line 1830 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 7538 "MachineIndependent/glslang_tab.cpp"
+#line 7579 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 229: /* type_specifier_nonarray: IVEC4  */
-#line 1818 "MachineIndependent/glslang.y"
+  case 231: /* type_specifier_nonarray: IVEC4  */
+#line 1835 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 7548 "MachineIndependent/glslang_tab.cpp"
+#line 7589 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 230: /* type_specifier_nonarray: UVEC2  */
-#line 1823 "MachineIndependent/glslang.y"
+  case 232: /* type_specifier_nonarray: UVEC2  */
+#line 1840 "MachineIndependent/glslang.y"
             {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 7559 "MachineIndependent/glslang_tab.cpp"
+#line 7600 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 231: /* type_specifier_nonarray: UVEC3  */
-#line 1829 "MachineIndependent/glslang.y"
+  case 233: /* type_specifier_nonarray: UVEC3  */
+#line 1846 "MachineIndependent/glslang.y"
             {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 7570 "MachineIndependent/glslang_tab.cpp"
+#line 7611 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 232: /* type_specifier_nonarray: UVEC4  */
-#line 1835 "MachineIndependent/glslang.y"
+  case 234: /* type_specifier_nonarray: UVEC4  */
+#line 1852 "MachineIndependent/glslang.y"
             {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 7581 "MachineIndependent/glslang_tab.cpp"
+#line 7622 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 233: /* type_specifier_nonarray: MAT2  */
-#line 1841 "MachineIndependent/glslang.y"
+  case 235: /* type_specifier_nonarray: MAT2  */
+#line 1858 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7591 "MachineIndependent/glslang_tab.cpp"
+#line 7632 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 234: /* type_specifier_nonarray: MAT3  */
-#line 1846 "MachineIndependent/glslang.y"
+  case 236: /* type_specifier_nonarray: MAT3  */
+#line 1863 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7601 "MachineIndependent/glslang_tab.cpp"
+#line 7642 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 235: /* type_specifier_nonarray: MAT4  */
-#line 1851 "MachineIndependent/glslang.y"
+  case 237: /* type_specifier_nonarray: MAT4  */
+#line 1868 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7611 "MachineIndependent/glslang_tab.cpp"
+#line 7652 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 236: /* type_specifier_nonarray: MAT2X2  */
-#line 1856 "MachineIndependent/glslang.y"
+  case 238: /* type_specifier_nonarray: MAT2X2  */
+#line 1873 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 7621 "MachineIndependent/glslang_tab.cpp"
+#line 7662 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 237: /* type_specifier_nonarray: MAT2X3  */
-#line 1861 "MachineIndependent/glslang.y"
+  case 239: /* type_specifier_nonarray: MAT2X3  */
+#line 1878 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 7631 "MachineIndependent/glslang_tab.cpp"
+#line 7672 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 238: /* type_specifier_nonarray: MAT2X4  */
-#line 1866 "MachineIndependent/glslang.y"
+  case 240: /* type_specifier_nonarray: MAT2X4  */
+#line 1883 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 7641 "MachineIndependent/glslang_tab.cpp"
+#line 7682 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 239: /* type_specifier_nonarray: MAT3X2  */
-#line 1871 "MachineIndependent/glslang.y"
+  case 241: /* type_specifier_nonarray: MAT3X2  */
+#line 1888 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 7651 "MachineIndependent/glslang_tab.cpp"
+#line 7692 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 240: /* type_specifier_nonarray: MAT3X3  */
-#line 1876 "MachineIndependent/glslang.y"
+  case 242: /* type_specifier_nonarray: MAT3X3  */
+#line 1893 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 7661 "MachineIndependent/glslang_tab.cpp"
+#line 7702 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 241: /* type_specifier_nonarray: MAT3X4  */
-#line 1881 "MachineIndependent/glslang.y"
+  case 243: /* type_specifier_nonarray: MAT3X4  */
+#line 1898 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7671 "MachineIndependent/glslang_tab.cpp"
+#line 7712 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 242: /* type_specifier_nonarray: MAT4X2  */
-#line 1886 "MachineIndependent/glslang.y"
+  case 244: /* type_specifier_nonarray: MAT4X2  */
+#line 1903 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7681 "MachineIndependent/glslang_tab.cpp"
+#line 7722 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 243: /* type_specifier_nonarray: MAT4X3  */
-#line 1891 "MachineIndependent/glslang.y"
+  case 245: /* type_specifier_nonarray: MAT4X3  */
+#line 1908 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7691 "MachineIndependent/glslang_tab.cpp"
+#line 7732 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 244: /* type_specifier_nonarray: MAT4X4  */
-#line 1896 "MachineIndependent/glslang.y"
+  case 246: /* type_specifier_nonarray: MAT4X4  */
+#line 1913 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7701 "MachineIndependent/glslang_tab.cpp"
+#line 7742 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 245: /* type_specifier_nonarray: DOUBLE  */
-#line 1902 "MachineIndependent/glslang.y"
+  case 247: /* type_specifier_nonarray: DOUBLE  */
+#line 1919 "MachineIndependent/glslang.y"
              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7709,121 +7750,121 @@ yyreduce:
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 7713 "MachineIndependent/glslang_tab.cpp"
+#line 7754 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 246: /* type_specifier_nonarray: FLOAT16_T  */
-#line 1909 "MachineIndependent/glslang.y"
+  case 248: /* type_specifier_nonarray: FLOAT16_T  */
+#line 1926 "MachineIndependent/glslang.y"
                 {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
     }
-#line 7723 "MachineIndependent/glslang_tab.cpp"
+#line 7764 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 247: /* type_specifier_nonarray: FLOAT32_T  */
-#line 1914 "MachineIndependent/glslang.y"
+  case 249: /* type_specifier_nonarray: FLOAT32_T  */
+#line 1931 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 7733 "MachineIndependent/glslang_tab.cpp"
+#line 7774 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 248: /* type_specifier_nonarray: FLOAT64_T  */
-#line 1919 "MachineIndependent/glslang.y"
+  case 250: /* type_specifier_nonarray: FLOAT64_T  */
+#line 1936 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 7743 "MachineIndependent/glslang_tab.cpp"
+#line 7784 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 249: /* type_specifier_nonarray: INT8_T  */
-#line 1924 "MachineIndependent/glslang.y"
+  case 251: /* type_specifier_nonarray: INT8_T  */
+#line 1941 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
     }
-#line 7753 "MachineIndependent/glslang_tab.cpp"
+#line 7794 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 250: /* type_specifier_nonarray: UINT8_T  */
-#line 1929 "MachineIndependent/glslang.y"
+  case 252: /* type_specifier_nonarray: UINT8_T  */
+#line 1946 "MachineIndependent/glslang.y"
               {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
     }
-#line 7763 "MachineIndependent/glslang_tab.cpp"
+#line 7804 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 251: /* type_specifier_nonarray: INT16_T  */
-#line 1934 "MachineIndependent/glslang.y"
+  case 253: /* type_specifier_nonarray: INT16_T  */
+#line 1951 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
     }
-#line 7773 "MachineIndependent/glslang_tab.cpp"
+#line 7814 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 252: /* type_specifier_nonarray: UINT16_T  */
-#line 1939 "MachineIndependent/glslang.y"
+  case 254: /* type_specifier_nonarray: UINT16_T  */
+#line 1956 "MachineIndependent/glslang.y"
                {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
     }
-#line 7783 "MachineIndependent/glslang_tab.cpp"
+#line 7824 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 253: /* type_specifier_nonarray: INT32_T  */
-#line 1944 "MachineIndependent/glslang.y"
+  case 255: /* type_specifier_nonarray: INT32_T  */
+#line 1961 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 7793 "MachineIndependent/glslang_tab.cpp"
+#line 7834 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 254: /* type_specifier_nonarray: UINT32_T  */
-#line 1949 "MachineIndependent/glslang.y"
+  case 256: /* type_specifier_nonarray: UINT32_T  */
+#line 1966 "MachineIndependent/glslang.y"
                {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 7803 "MachineIndependent/glslang_tab.cpp"
+#line 7844 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 255: /* type_specifier_nonarray: INT64_T  */
-#line 1954 "MachineIndependent/glslang.y"
+  case 257: /* type_specifier_nonarray: INT64_T  */
+#line 1971 "MachineIndependent/glslang.y"
               {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 7813 "MachineIndependent/glslang_tab.cpp"
+#line 7854 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 256: /* type_specifier_nonarray: UINT64_T  */
-#line 1959 "MachineIndependent/glslang.y"
+  case 258: /* type_specifier_nonarray: UINT64_T  */
+#line 1976 "MachineIndependent/glslang.y"
                {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 7823 "MachineIndependent/glslang_tab.cpp"
+#line 7864 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 257: /* type_specifier_nonarray: DVEC2  */
-#line 1964 "MachineIndependent/glslang.y"
+  case 259: /* type_specifier_nonarray: DVEC2  */
+#line 1981 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7832,11 +7873,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 7836 "MachineIndependent/glslang_tab.cpp"
+#line 7877 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 258: /* type_specifier_nonarray: DVEC3  */
-#line 1972 "MachineIndependent/glslang.y"
+  case 260: /* type_specifier_nonarray: DVEC3  */
+#line 1989 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7845,11 +7886,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 7849 "MachineIndependent/glslang_tab.cpp"
+#line 7890 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 259: /* type_specifier_nonarray: DVEC4  */
-#line 1980 "MachineIndependent/glslang.y"
+  case 261: /* type_specifier_nonarray: DVEC4  */
+#line 1997 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7858,374 +7899,374 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 7862 "MachineIndependent/glslang_tab.cpp"
+#line 7903 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 260: /* type_specifier_nonarray: F16VEC2  */
-#line 1988 "MachineIndependent/glslang.y"
+  case 262: /* type_specifier_nonarray: F16VEC2  */
+#line 2005 "MachineIndependent/glslang.y"
               {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(2);
     }
-#line 7873 "MachineIndependent/glslang_tab.cpp"
+#line 7914 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 261: /* type_specifier_nonarray: F16VEC3  */
-#line 1994 "MachineIndependent/glslang.y"
+  case 263: /* type_specifier_nonarray: F16VEC3  */
+#line 2011 "MachineIndependent/glslang.y"
               {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(3);
     }
-#line 7884 "MachineIndependent/glslang_tab.cpp"
+#line 7925 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 262: /* type_specifier_nonarray: F16VEC4  */
-#line 2000 "MachineIndependent/glslang.y"
+  case 264: /* type_specifier_nonarray: F16VEC4  */
+#line 2017 "MachineIndependent/glslang.y"
               {
         parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(4);
     }
-#line 7895 "MachineIndependent/glslang_tab.cpp"
+#line 7936 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 263: /* type_specifier_nonarray: F32VEC2  */
-#line 2006 "MachineIndependent/glslang.y"
+  case 265: /* type_specifier_nonarray: F32VEC2  */
+#line 2023 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 7906 "MachineIndependent/glslang_tab.cpp"
+#line 7947 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 264: /* type_specifier_nonarray: F32VEC3  */
-#line 2012 "MachineIndependent/glslang.y"
+  case 266: /* type_specifier_nonarray: F32VEC3  */
+#line 2029 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 7917 "MachineIndependent/glslang_tab.cpp"
+#line 7958 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 265: /* type_specifier_nonarray: F32VEC4  */
-#line 2018 "MachineIndependent/glslang.y"
+  case 267: /* type_specifier_nonarray: F32VEC4  */
+#line 2035 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
-#line 7928 "MachineIndependent/glslang_tab.cpp"
+#line 7969 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 266: /* type_specifier_nonarray: F64VEC2  */
-#line 2024 "MachineIndependent/glslang.y"
+  case 268: /* type_specifier_nonarray: F64VEC2  */
+#line 2041 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 7939 "MachineIndependent/glslang_tab.cpp"
+#line 7980 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 267: /* type_specifier_nonarray: F64VEC3  */
-#line 2030 "MachineIndependent/glslang.y"
+  case 269: /* type_specifier_nonarray: F64VEC3  */
+#line 2047 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 7950 "MachineIndependent/glslang_tab.cpp"
+#line 7991 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 268: /* type_specifier_nonarray: F64VEC4  */
-#line 2036 "MachineIndependent/glslang.y"
+  case 270: /* type_specifier_nonarray: F64VEC4  */
+#line 2053 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 7961 "MachineIndependent/glslang_tab.cpp"
+#line 8002 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 269: /* type_specifier_nonarray: I8VEC2  */
-#line 2042 "MachineIndependent/glslang.y"
+  case 271: /* type_specifier_nonarray: I8VEC2  */
+#line 2059 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(2);
     }
-#line 7972 "MachineIndependent/glslang_tab.cpp"
+#line 8013 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 270: /* type_specifier_nonarray: I8VEC3  */
-#line 2048 "MachineIndependent/glslang.y"
+  case 272: /* type_specifier_nonarray: I8VEC3  */
+#line 2065 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(3);
     }
-#line 7983 "MachineIndependent/glslang_tab.cpp"
+#line 8024 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 271: /* type_specifier_nonarray: I8VEC4  */
-#line 2054 "MachineIndependent/glslang.y"
+  case 273: /* type_specifier_nonarray: I8VEC4  */
+#line 2071 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(4);
     }
-#line 7994 "MachineIndependent/glslang_tab.cpp"
+#line 8035 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 272: /* type_specifier_nonarray: I16VEC2  */
-#line 2060 "MachineIndependent/glslang.y"
+  case 274: /* type_specifier_nonarray: I16VEC2  */
+#line 2077 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(2);
     }
-#line 8005 "MachineIndependent/glslang_tab.cpp"
+#line 8046 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 273: /* type_specifier_nonarray: I16VEC3  */
-#line 2066 "MachineIndependent/glslang.y"
+  case 275: /* type_specifier_nonarray: I16VEC3  */
+#line 2083 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(3);
     }
-#line 8016 "MachineIndependent/glslang_tab.cpp"
+#line 8057 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 274: /* type_specifier_nonarray: I16VEC4  */
-#line 2072 "MachineIndependent/glslang.y"
+  case 276: /* type_specifier_nonarray: I16VEC4  */
+#line 2089 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
         (yyval.interm.type).setVector(4);
     }
-#line 8027 "MachineIndependent/glslang_tab.cpp"
+#line 8068 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 275: /* type_specifier_nonarray: I32VEC2  */
-#line 2078 "MachineIndependent/glslang.y"
+  case 277: /* type_specifier_nonarray: I32VEC2  */
+#line 2095 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 8038 "MachineIndependent/glslang_tab.cpp"
+#line 8079 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 276: /* type_specifier_nonarray: I32VEC3  */
-#line 2084 "MachineIndependent/glslang.y"
+  case 278: /* type_specifier_nonarray: I32VEC3  */
+#line 2101 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(3);
     }
-#line 8049 "MachineIndependent/glslang_tab.cpp"
+#line 8090 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 277: /* type_specifier_nonarray: I32VEC4  */
-#line 2090 "MachineIndependent/glslang.y"
+  case 279: /* type_specifier_nonarray: I32VEC4  */
+#line 2107 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(4);
     }
-#line 8060 "MachineIndependent/glslang_tab.cpp"
+#line 8101 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 278: /* type_specifier_nonarray: I64VEC2  */
-#line 2096 "MachineIndependent/glslang.y"
+  case 280: /* type_specifier_nonarray: I64VEC2  */
+#line 2113 "MachineIndependent/glslang.y"
               {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(2);
     }
-#line 8071 "MachineIndependent/glslang_tab.cpp"
+#line 8112 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 279: /* type_specifier_nonarray: I64VEC3  */
-#line 2102 "MachineIndependent/glslang.y"
+  case 281: /* type_specifier_nonarray: I64VEC3  */
+#line 2119 "MachineIndependent/glslang.y"
               {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(3);
     }
-#line 8082 "MachineIndependent/glslang_tab.cpp"
+#line 8123 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 280: /* type_specifier_nonarray: I64VEC4  */
-#line 2108 "MachineIndependent/glslang.y"
+  case 282: /* type_specifier_nonarray: I64VEC4  */
+#line 2125 "MachineIndependent/glslang.y"
               {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(4);
     }
-#line 8093 "MachineIndependent/glslang_tab.cpp"
+#line 8134 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 281: /* type_specifier_nonarray: U8VEC2  */
-#line 2114 "MachineIndependent/glslang.y"
+  case 283: /* type_specifier_nonarray: U8VEC2  */
+#line 2131 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(2);
     }
-#line 8104 "MachineIndependent/glslang_tab.cpp"
+#line 8145 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 282: /* type_specifier_nonarray: U8VEC3  */
-#line 2120 "MachineIndependent/glslang.y"
+  case 284: /* type_specifier_nonarray: U8VEC3  */
+#line 2137 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(3);
     }
-#line 8115 "MachineIndependent/glslang_tab.cpp"
+#line 8156 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 283: /* type_specifier_nonarray: U8VEC4  */
-#line 2126 "MachineIndependent/glslang.y"
+  case 285: /* type_specifier_nonarray: U8VEC4  */
+#line 2143 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(4);
     }
-#line 8126 "MachineIndependent/glslang_tab.cpp"
+#line 8167 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 284: /* type_specifier_nonarray: U16VEC2  */
-#line 2132 "MachineIndependent/glslang.y"
+  case 286: /* type_specifier_nonarray: U16VEC2  */
+#line 2149 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(2);
     }
-#line 8137 "MachineIndependent/glslang_tab.cpp"
+#line 8178 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 285: /* type_specifier_nonarray: U16VEC3  */
-#line 2138 "MachineIndependent/glslang.y"
+  case 287: /* type_specifier_nonarray: U16VEC3  */
+#line 2155 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(3);
     }
-#line 8148 "MachineIndependent/glslang_tab.cpp"
+#line 8189 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 286: /* type_specifier_nonarray: U16VEC4  */
-#line 2144 "MachineIndependent/glslang.y"
+  case 288: /* type_specifier_nonarray: U16VEC4  */
+#line 2161 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(4);
     }
-#line 8159 "MachineIndependent/glslang_tab.cpp"
+#line 8200 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 287: /* type_specifier_nonarray: U32VEC2  */
-#line 2150 "MachineIndependent/glslang.y"
+  case 289: /* type_specifier_nonarray: U32VEC2  */
+#line 2167 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 8170 "MachineIndependent/glslang_tab.cpp"
+#line 8211 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 288: /* type_specifier_nonarray: U32VEC3  */
-#line 2156 "MachineIndependent/glslang.y"
+  case 290: /* type_specifier_nonarray: U32VEC3  */
+#line 2173 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 8181 "MachineIndependent/glslang_tab.cpp"
+#line 8222 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 289: /* type_specifier_nonarray: U32VEC4  */
-#line 2162 "MachineIndependent/glslang.y"
+  case 291: /* type_specifier_nonarray: U32VEC4  */
+#line 2179 "MachineIndependent/glslang.y"
               {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 8192 "MachineIndependent/glslang_tab.cpp"
+#line 8233 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 290: /* type_specifier_nonarray: U64VEC2  */
-#line 2168 "MachineIndependent/glslang.y"
+  case 292: /* type_specifier_nonarray: U64VEC2  */
+#line 2185 "MachineIndependent/glslang.y"
               {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(2);
     }
-#line 8203 "MachineIndependent/glslang_tab.cpp"
+#line 8244 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 291: /* type_specifier_nonarray: U64VEC3  */
-#line 2174 "MachineIndependent/glslang.y"
+  case 293: /* type_specifier_nonarray: U64VEC3  */
+#line 2191 "MachineIndependent/glslang.y"
               {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(3);
     }
-#line 8214 "MachineIndependent/glslang_tab.cpp"
+#line 8255 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 292: /* type_specifier_nonarray: U64VEC4  */
-#line 2180 "MachineIndependent/glslang.y"
+  case 294: /* type_specifier_nonarray: U64VEC4  */
+#line 2197 "MachineIndependent/glslang.y"
               {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(4);
     }
-#line 8225 "MachineIndependent/glslang_tab.cpp"
+#line 8266 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 293: /* type_specifier_nonarray: DMAT2  */
-#line 2186 "MachineIndependent/glslang.y"
+  case 295: /* type_specifier_nonarray: DMAT2  */
+#line 2203 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8234,11 +8275,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8238 "MachineIndependent/glslang_tab.cpp"
+#line 8279 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 294: /* type_specifier_nonarray: DMAT3  */
-#line 2194 "MachineIndependent/glslang.y"
+  case 296: /* type_specifier_nonarray: DMAT3  */
+#line 2211 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8247,11 +8288,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8251 "MachineIndependent/glslang_tab.cpp"
+#line 8292 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 295: /* type_specifier_nonarray: DMAT4  */
-#line 2202 "MachineIndependent/glslang.y"
+  case 297: /* type_specifier_nonarray: DMAT4  */
+#line 2219 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8260,11 +8301,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8264 "MachineIndependent/glslang_tab.cpp"
+#line 8305 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 296: /* type_specifier_nonarray: DMAT2X2  */
-#line 2210 "MachineIndependent/glslang.y"
+  case 298: /* type_specifier_nonarray: DMAT2X2  */
+#line 2227 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8273,11 +8314,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8277 "MachineIndependent/glslang_tab.cpp"
+#line 8318 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 297: /* type_specifier_nonarray: DMAT2X3  */
-#line 2218 "MachineIndependent/glslang.y"
+  case 299: /* type_specifier_nonarray: DMAT2X3  */
+#line 2235 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8286,11 +8327,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 8290 "MachineIndependent/glslang_tab.cpp"
+#line 8331 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 298: /* type_specifier_nonarray: DMAT2X4  */
-#line 2226 "MachineIndependent/glslang.y"
+  case 300: /* type_specifier_nonarray: DMAT2X4  */
+#line 2243 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8299,11 +8340,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 8303 "MachineIndependent/glslang_tab.cpp"
+#line 8344 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 299: /* type_specifier_nonarray: DMAT3X2  */
-#line 2234 "MachineIndependent/glslang.y"
+  case 301: /* type_specifier_nonarray: DMAT3X2  */
+#line 2251 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8312,11 +8353,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 8316 "MachineIndependent/glslang_tab.cpp"
+#line 8357 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 300: /* type_specifier_nonarray: DMAT3X3  */
-#line 2242 "MachineIndependent/glslang.y"
+  case 302: /* type_specifier_nonarray: DMAT3X3  */
+#line 2259 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8325,11 +8366,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8329 "MachineIndependent/glslang_tab.cpp"
+#line 8370 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 301: /* type_specifier_nonarray: DMAT3X4  */
-#line 2250 "MachineIndependent/glslang.y"
+  case 303: /* type_specifier_nonarray: DMAT3X4  */
+#line 2267 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8338,11 +8379,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 8342 "MachineIndependent/glslang_tab.cpp"
+#line 8383 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 302: /* type_specifier_nonarray: DMAT4X2  */
-#line 2258 "MachineIndependent/glslang.y"
+  case 304: /* type_specifier_nonarray: DMAT4X2  */
+#line 2275 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8351,11 +8392,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 8355 "MachineIndependent/glslang_tab.cpp"
+#line 8396 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 303: /* type_specifier_nonarray: DMAT4X3  */
-#line 2266 "MachineIndependent/glslang.y"
+  case 305: /* type_specifier_nonarray: DMAT4X3  */
+#line 2283 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8364,11 +8405,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 8368 "MachineIndependent/glslang_tab.cpp"
+#line 8409 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 304: /* type_specifier_nonarray: DMAT4X4  */
-#line 2274 "MachineIndependent/glslang.y"
+  case 306: /* type_specifier_nonarray: DMAT4X4  */
+#line 2291 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8377,2228 +8418,2228 @@ yyreduce:
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8381 "MachineIndependent/glslang_tab.cpp"
+#line 8422 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 305: /* type_specifier_nonarray: F16MAT2  */
-#line 2282 "MachineIndependent/glslang.y"
+  case 307: /* type_specifier_nonarray: F16MAT2  */
+#line 2299 "MachineIndependent/glslang.y"
               {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8392 "MachineIndependent/glslang_tab.cpp"
+#line 8433 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 306: /* type_specifier_nonarray: F16MAT3  */
-#line 2288 "MachineIndependent/glslang.y"
+  case 308: /* type_specifier_nonarray: F16MAT3  */
+#line 2305 "MachineIndependent/glslang.y"
               {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8403 "MachineIndependent/glslang_tab.cpp"
+#line 8444 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 307: /* type_specifier_nonarray: F16MAT4  */
-#line 2294 "MachineIndependent/glslang.y"
+  case 309: /* type_specifier_nonarray: F16MAT4  */
+#line 2311 "MachineIndependent/glslang.y"
               {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8414 "MachineIndependent/glslang_tab.cpp"
+#line 8455 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 308: /* type_specifier_nonarray: F16MAT2X2  */
-#line 2300 "MachineIndependent/glslang.y"
+  case 310: /* type_specifier_nonarray: F16MAT2X2  */
+#line 2317 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8425 "MachineIndependent/glslang_tab.cpp"
+#line 8466 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 309: /* type_specifier_nonarray: F16MAT2X3  */
-#line 2306 "MachineIndependent/glslang.y"
+  case 311: /* type_specifier_nonarray: F16MAT2X3  */
+#line 2323 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 8436 "MachineIndependent/glslang_tab.cpp"
+#line 8477 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 310: /* type_specifier_nonarray: F16MAT2X4  */
-#line 2312 "MachineIndependent/glslang.y"
+  case 312: /* type_specifier_nonarray: F16MAT2X4  */
+#line 2329 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 8447 "MachineIndependent/glslang_tab.cpp"
+#line 8488 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 311: /* type_specifier_nonarray: F16MAT3X2  */
-#line 2318 "MachineIndependent/glslang.y"
+  case 313: /* type_specifier_nonarray: F16MAT3X2  */
+#line 2335 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 8458 "MachineIndependent/glslang_tab.cpp"
+#line 8499 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 312: /* type_specifier_nonarray: F16MAT3X3  */
-#line 2324 "MachineIndependent/glslang.y"
+  case 314: /* type_specifier_nonarray: F16MAT3X3  */
+#line 2341 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8469 "MachineIndependent/glslang_tab.cpp"
+#line 8510 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 313: /* type_specifier_nonarray: F16MAT3X4  */
-#line 2330 "MachineIndependent/glslang.y"
+  case 315: /* type_specifier_nonarray: F16MAT3X4  */
+#line 2347 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 8480 "MachineIndependent/glslang_tab.cpp"
+#line 8521 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 314: /* type_specifier_nonarray: F16MAT4X2  */
-#line 2336 "MachineIndependent/glslang.y"
+  case 316: /* type_specifier_nonarray: F16MAT4X2  */
+#line 2353 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 8491 "MachineIndependent/glslang_tab.cpp"
+#line 8532 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 315: /* type_specifier_nonarray: F16MAT4X3  */
-#line 2342 "MachineIndependent/glslang.y"
+  case 317: /* type_specifier_nonarray: F16MAT4X3  */
+#line 2359 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 8502 "MachineIndependent/glslang_tab.cpp"
+#line 8543 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 316: /* type_specifier_nonarray: F16MAT4X4  */
-#line 2348 "MachineIndependent/glslang.y"
+  case 318: /* type_specifier_nonarray: F16MAT4X4  */
+#line 2365 "MachineIndependent/glslang.y"
                 {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8513 "MachineIndependent/glslang_tab.cpp"
+#line 8554 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 317: /* type_specifier_nonarray: F32MAT2  */
-#line 2354 "MachineIndependent/glslang.y"
+  case 319: /* type_specifier_nonarray: F32MAT2  */
+#line 2371 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8524 "MachineIndependent/glslang_tab.cpp"
+#line 8565 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 318: /* type_specifier_nonarray: F32MAT3  */
-#line 2360 "MachineIndependent/glslang.y"
+  case 320: /* type_specifier_nonarray: F32MAT3  */
+#line 2377 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8535 "MachineIndependent/glslang_tab.cpp"
+#line 8576 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 319: /* type_specifier_nonarray: F32MAT4  */
-#line 2366 "MachineIndependent/glslang.y"
+  case 321: /* type_specifier_nonarray: F32MAT4  */
+#line 2383 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8546 "MachineIndependent/glslang_tab.cpp"
+#line 8587 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 320: /* type_specifier_nonarray: F32MAT2X2  */
-#line 2372 "MachineIndependent/glslang.y"
+  case 322: /* type_specifier_nonarray: F32MAT2X2  */
+#line 2389 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8557 "MachineIndependent/glslang_tab.cpp"
+#line 8598 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 321: /* type_specifier_nonarray: F32MAT2X3  */
-#line 2378 "MachineIndependent/glslang.y"
+  case 323: /* type_specifier_nonarray: F32MAT2X3  */
+#line 2395 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 8568 "MachineIndependent/glslang_tab.cpp"
+#line 8609 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 322: /* type_specifier_nonarray: F32MAT2X4  */
-#line 2384 "MachineIndependent/glslang.y"
+  case 324: /* type_specifier_nonarray: F32MAT2X4  */
+#line 2401 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 8579 "MachineIndependent/glslang_tab.cpp"
+#line 8620 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 323: /* type_specifier_nonarray: F32MAT3X2  */
-#line 2390 "MachineIndependent/glslang.y"
+  case 325: /* type_specifier_nonarray: F32MAT3X2  */
+#line 2407 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 8590 "MachineIndependent/glslang_tab.cpp"
+#line 8631 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 324: /* type_specifier_nonarray: F32MAT3X3  */
-#line 2396 "MachineIndependent/glslang.y"
+  case 326: /* type_specifier_nonarray: F32MAT3X3  */
+#line 2413 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8601 "MachineIndependent/glslang_tab.cpp"
+#line 8642 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 325: /* type_specifier_nonarray: F32MAT3X4  */
-#line 2402 "MachineIndependent/glslang.y"
+  case 327: /* type_specifier_nonarray: F32MAT3X4  */
+#line 2419 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 8612 "MachineIndependent/glslang_tab.cpp"
+#line 8653 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 326: /* type_specifier_nonarray: F32MAT4X2  */
-#line 2408 "MachineIndependent/glslang.y"
+  case 328: /* type_specifier_nonarray: F32MAT4X2  */
+#line 2425 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 8623 "MachineIndependent/glslang_tab.cpp"
+#line 8664 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 327: /* type_specifier_nonarray: F32MAT4X3  */
-#line 2414 "MachineIndependent/glslang.y"
+  case 329: /* type_specifier_nonarray: F32MAT4X3  */
+#line 2431 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 8634 "MachineIndependent/glslang_tab.cpp"
+#line 8675 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 328: /* type_specifier_nonarray: F32MAT4X4  */
-#line 2420 "MachineIndependent/glslang.y"
+  case 330: /* type_specifier_nonarray: F32MAT4X4  */
+#line 2437 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8645 "MachineIndependent/glslang_tab.cpp"
+#line 8686 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 329: /* type_specifier_nonarray: F64MAT2  */
-#line 2426 "MachineIndependent/glslang.y"
+  case 331: /* type_specifier_nonarray: F64MAT2  */
+#line 2443 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8656 "MachineIndependent/glslang_tab.cpp"
+#line 8697 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 330: /* type_specifier_nonarray: F64MAT3  */
-#line 2432 "MachineIndependent/glslang.y"
+  case 332: /* type_specifier_nonarray: F64MAT3  */
+#line 2449 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8667 "MachineIndependent/glslang_tab.cpp"
+#line 8708 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 331: /* type_specifier_nonarray: F64MAT4  */
-#line 2438 "MachineIndependent/glslang.y"
+  case 333: /* type_specifier_nonarray: F64MAT4  */
+#line 2455 "MachineIndependent/glslang.y"
               {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8678 "MachineIndependent/glslang_tab.cpp"
+#line 8719 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 332: /* type_specifier_nonarray: F64MAT2X2  */
-#line 2444 "MachineIndependent/glslang.y"
+  case 334: /* type_specifier_nonarray: F64MAT2X2  */
+#line 2461 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8689 "MachineIndependent/glslang_tab.cpp"
+#line 8730 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 333: /* type_specifier_nonarray: F64MAT2X3  */
-#line 2450 "MachineIndependent/glslang.y"
+  case 335: /* type_specifier_nonarray: F64MAT2X3  */
+#line 2467 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 8700 "MachineIndependent/glslang_tab.cpp"
+#line 8741 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 334: /* type_specifier_nonarray: F64MAT2X4  */
-#line 2456 "MachineIndependent/glslang.y"
+  case 336: /* type_specifier_nonarray: F64MAT2X4  */
+#line 2473 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 8711 "MachineIndependent/glslang_tab.cpp"
+#line 8752 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 335: /* type_specifier_nonarray: F64MAT3X2  */
-#line 2462 "MachineIndependent/glslang.y"
+  case 337: /* type_specifier_nonarray: F64MAT3X2  */
+#line 2479 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 8722 "MachineIndependent/glslang_tab.cpp"
+#line 8763 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 336: /* type_specifier_nonarray: F64MAT3X3  */
-#line 2468 "MachineIndependent/glslang.y"
+  case 338: /* type_specifier_nonarray: F64MAT3X3  */
+#line 2485 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8733 "MachineIndependent/glslang_tab.cpp"
+#line 8774 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 337: /* type_specifier_nonarray: F64MAT3X4  */
-#line 2474 "MachineIndependent/glslang.y"
+  case 339: /* type_specifier_nonarray: F64MAT3X4  */
+#line 2491 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 8744 "MachineIndependent/glslang_tab.cpp"
+#line 8785 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 338: /* type_specifier_nonarray: F64MAT4X2  */
-#line 2480 "MachineIndependent/glslang.y"
+  case 340: /* type_specifier_nonarray: F64MAT4X2  */
+#line 2497 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 8755 "MachineIndependent/glslang_tab.cpp"
+#line 8796 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 339: /* type_specifier_nonarray: F64MAT4X3  */
-#line 2486 "MachineIndependent/glslang.y"
+  case 341: /* type_specifier_nonarray: F64MAT4X3  */
+#line 2503 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 8766 "MachineIndependent/glslang_tab.cpp"
+#line 8807 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 340: /* type_specifier_nonarray: F64MAT4X4  */
-#line 2492 "MachineIndependent/glslang.y"
+  case 342: /* type_specifier_nonarray: F64MAT4X4  */
+#line 2509 "MachineIndependent/glslang.y"
                 {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8777 "MachineIndependent/glslang_tab.cpp"
+#line 8818 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 341: /* type_specifier_nonarray: ACCSTRUCTNV  */
-#line 2498 "MachineIndependent/glslang.y"
+  case 343: /* type_specifier_nonarray: ACCSTRUCTNV  */
+#line 2515 "MachineIndependent/glslang.y"
                   {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 8786 "MachineIndependent/glslang_tab.cpp"
+#line 8827 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 342: /* type_specifier_nonarray: ACCSTRUCTEXT  */
-#line 2502 "MachineIndependent/glslang.y"
+  case 344: /* type_specifier_nonarray: ACCSTRUCTEXT  */
+#line 2519 "MachineIndependent/glslang.y"
                    {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtAccStruct;
     }
-#line 8795 "MachineIndependent/glslang_tab.cpp"
+#line 8836 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 343: /* type_specifier_nonarray: RAYQUERYEXT  */
-#line 2506 "MachineIndependent/glslang.y"
+  case 345: /* type_specifier_nonarray: RAYQUERYEXT  */
+#line 2523 "MachineIndependent/glslang.y"
                   {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtRayQuery;
     }
-#line 8804 "MachineIndependent/glslang_tab.cpp"
+#line 8845 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 344: /* type_specifier_nonarray: ATOMIC_UINT  */
-#line 2510 "MachineIndependent/glslang.y"
+  case 346: /* type_specifier_nonarray: ATOMIC_UINT  */
+#line 2527 "MachineIndependent/glslang.y"
                   {
         parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtAtomicUint;
     }
-#line 8814 "MachineIndependent/glslang_tab.cpp"
+#line 8855 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 345: /* type_specifier_nonarray: SAMPLER1D  */
-#line 2515 "MachineIndependent/glslang.y"
+  case 347: /* type_specifier_nonarray: SAMPLER1D  */
+#line 2532 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 8824 "MachineIndependent/glslang_tab.cpp"
+#line 8865 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 346: /* type_specifier_nonarray: SAMPLER2D  */
-#line 2521 "MachineIndependent/glslang.y"
+  case 348: /* type_specifier_nonarray: SAMPLER2D  */
+#line 2538 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 8834 "MachineIndependent/glslang_tab.cpp"
+#line 8875 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 347: /* type_specifier_nonarray: SAMPLER3D  */
-#line 2526 "MachineIndependent/glslang.y"
+  case 349: /* type_specifier_nonarray: SAMPLER3D  */
+#line 2543 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 8844 "MachineIndependent/glslang_tab.cpp"
+#line 8885 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 348: /* type_specifier_nonarray: SAMPLERCUBE  */
-#line 2531 "MachineIndependent/glslang.y"
+  case 350: /* type_specifier_nonarray: SAMPLERCUBE  */
+#line 2548 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 8854 "MachineIndependent/glslang_tab.cpp"
+#line 8895 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 349: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
-#line 2536 "MachineIndependent/glslang.y"
+  case 351: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
+#line 2553 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 8864 "MachineIndependent/glslang_tab.cpp"
+#line 8905 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 350: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
-#line 2541 "MachineIndependent/glslang.y"
+  case 352: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
+#line 2558 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 8874 "MachineIndependent/glslang_tab.cpp"
+#line 8915 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 351: /* type_specifier_nonarray: SAMPLER2DARRAY  */
-#line 2546 "MachineIndependent/glslang.y"
+  case 353: /* type_specifier_nonarray: SAMPLER2DARRAY  */
+#line 2563 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 8884 "MachineIndependent/glslang_tab.cpp"
+#line 8925 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 352: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
-#line 2551 "MachineIndependent/glslang.y"
+  case 354: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
+#line 2568 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 8894 "MachineIndependent/glslang_tab.cpp"
+#line 8935 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 353: /* type_specifier_nonarray: SAMPLER1DSHADOW  */
-#line 2557 "MachineIndependent/glslang.y"
+  case 355: /* type_specifier_nonarray: SAMPLER1DSHADOW  */
+#line 2574 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
     }
-#line 8904 "MachineIndependent/glslang_tab.cpp"
+#line 8945 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 354: /* type_specifier_nonarray: SAMPLER1DARRAY  */
-#line 2562 "MachineIndependent/glslang.y"
+  case 356: /* type_specifier_nonarray: SAMPLER1DARRAY  */
+#line 2579 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
     }
-#line 8914 "MachineIndependent/glslang_tab.cpp"
+#line 8955 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 355: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW  */
-#line 2567 "MachineIndependent/glslang.y"
+  case 357: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW  */
+#line 2584 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
     }
-#line 8924 "MachineIndependent/glslang_tab.cpp"
+#line 8965 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 356: /* type_specifier_nonarray: SAMPLERCUBEARRAY  */
-#line 2572 "MachineIndependent/glslang.y"
+  case 358: /* type_specifier_nonarray: SAMPLERCUBEARRAY  */
+#line 2589 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 8934 "MachineIndependent/glslang_tab.cpp"
+#line 8975 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 357: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW  */
-#line 2577 "MachineIndependent/glslang.y"
+  case 359: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW  */
+#line 2594 "MachineIndependent/glslang.y"
                              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 8944 "MachineIndependent/glslang_tab.cpp"
+#line 8985 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 358: /* type_specifier_nonarray: F16SAMPLER1D  */
-#line 2582 "MachineIndependent/glslang.y"
+  case 360: /* type_specifier_nonarray: F16SAMPLER1D  */
+#line 2599 "MachineIndependent/glslang.y"
                    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
     }
-#line 8955 "MachineIndependent/glslang_tab.cpp"
+#line 8996 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 359: /* type_specifier_nonarray: F16SAMPLER2D  */
-#line 2588 "MachineIndependent/glslang.y"
+  case 361: /* type_specifier_nonarray: F16SAMPLER2D  */
+#line 2605 "MachineIndependent/glslang.y"
                    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
     }
-#line 8966 "MachineIndependent/glslang_tab.cpp"
+#line 9007 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 360: /* type_specifier_nonarray: F16SAMPLER3D  */
-#line 2594 "MachineIndependent/glslang.y"
+  case 362: /* type_specifier_nonarray: F16SAMPLER3D  */
+#line 2611 "MachineIndependent/glslang.y"
                    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
     }
-#line 8977 "MachineIndependent/glslang_tab.cpp"
+#line 9018 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 361: /* type_specifier_nonarray: F16SAMPLERCUBE  */
-#line 2600 "MachineIndependent/glslang.y"
+  case 363: /* type_specifier_nonarray: F16SAMPLERCUBE  */
+#line 2617 "MachineIndependent/glslang.y"
                      {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
     }
-#line 8988 "MachineIndependent/glslang_tab.cpp"
+#line 9029 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 362: /* type_specifier_nonarray: F16SAMPLER1DSHADOW  */
-#line 2606 "MachineIndependent/glslang.y"
+  case 364: /* type_specifier_nonarray: F16SAMPLER1DSHADOW  */
+#line 2623 "MachineIndependent/glslang.y"
                          {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
     }
-#line 8999 "MachineIndependent/glslang_tab.cpp"
+#line 9040 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 363: /* type_specifier_nonarray: F16SAMPLER2DSHADOW  */
-#line 2612 "MachineIndependent/glslang.y"
+  case 365: /* type_specifier_nonarray: F16SAMPLER2DSHADOW  */
+#line 2629 "MachineIndependent/glslang.y"
                          {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
     }
-#line 9010 "MachineIndependent/glslang_tab.cpp"
+#line 9051 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 364: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW  */
-#line 2618 "MachineIndependent/glslang.y"
+  case 366: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW  */
+#line 2635 "MachineIndependent/glslang.y"
                            {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
     }
-#line 9021 "MachineIndependent/glslang_tab.cpp"
+#line 9062 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 365: /* type_specifier_nonarray: F16SAMPLER1DARRAY  */
-#line 2624 "MachineIndependent/glslang.y"
+  case 367: /* type_specifier_nonarray: F16SAMPLER1DARRAY  */
+#line 2641 "MachineIndependent/glslang.y"
                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
     }
-#line 9032 "MachineIndependent/glslang_tab.cpp"
+#line 9073 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 366: /* type_specifier_nonarray: F16SAMPLER2DARRAY  */
-#line 2630 "MachineIndependent/glslang.y"
+  case 368: /* type_specifier_nonarray: F16SAMPLER2DARRAY  */
+#line 2647 "MachineIndependent/glslang.y"
                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
     }
-#line 9043 "MachineIndependent/glslang_tab.cpp"
+#line 9084 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 367: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW  */
-#line 2636 "MachineIndependent/glslang.y"
+  case 369: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW  */
+#line 2653 "MachineIndependent/glslang.y"
                               {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
     }
-#line 9054 "MachineIndependent/glslang_tab.cpp"
+#line 9095 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 368: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW  */
-#line 2642 "MachineIndependent/glslang.y"
+  case 370: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW  */
+#line 2659 "MachineIndependent/glslang.y"
                               {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
     }
-#line 9065 "MachineIndependent/glslang_tab.cpp"
+#line 9106 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 369: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY  */
-#line 2648 "MachineIndependent/glslang.y"
+  case 371: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY  */
+#line 2665 "MachineIndependent/glslang.y"
                           {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
     }
-#line 9076 "MachineIndependent/glslang_tab.cpp"
+#line 9117 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 370: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW  */
-#line 2654 "MachineIndependent/glslang.y"
+  case 372: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW  */
+#line 2671 "MachineIndependent/glslang.y"
                                 {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
     }
-#line 9087 "MachineIndependent/glslang_tab.cpp"
+#line 9128 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 371: /* type_specifier_nonarray: ISAMPLER1D  */
-#line 2660 "MachineIndependent/glslang.y"
+  case 373: /* type_specifier_nonarray: ISAMPLER1D  */
+#line 2677 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 9097 "MachineIndependent/glslang_tab.cpp"
+#line 9138 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 372: /* type_specifier_nonarray: ISAMPLER2D  */
-#line 2666 "MachineIndependent/glslang.y"
+  case 374: /* type_specifier_nonarray: ISAMPLER2D  */
+#line 2683 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 9107 "MachineIndependent/glslang_tab.cpp"
+#line 9148 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 373: /* type_specifier_nonarray: ISAMPLER3D  */
-#line 2671 "MachineIndependent/glslang.y"
+  case 375: /* type_specifier_nonarray: ISAMPLER3D  */
+#line 2688 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 9117 "MachineIndependent/glslang_tab.cpp"
+#line 9158 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 374: /* type_specifier_nonarray: ISAMPLERCUBE  */
-#line 2676 "MachineIndependent/glslang.y"
+  case 376: /* type_specifier_nonarray: ISAMPLERCUBE  */
+#line 2693 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 9127 "MachineIndependent/glslang_tab.cpp"
+#line 9168 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 375: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
-#line 2681 "MachineIndependent/glslang.y"
+  case 377: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
+#line 2698 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 9137 "MachineIndependent/glslang_tab.cpp"
+#line 9178 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 376: /* type_specifier_nonarray: USAMPLER2D  */
-#line 2686 "MachineIndependent/glslang.y"
+  case 378: /* type_specifier_nonarray: USAMPLER2D  */
+#line 2703 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 9147 "MachineIndependent/glslang_tab.cpp"
+#line 9188 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 377: /* type_specifier_nonarray: USAMPLER3D  */
-#line 2691 "MachineIndependent/glslang.y"
+  case 379: /* type_specifier_nonarray: USAMPLER3D  */
+#line 2708 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 9157 "MachineIndependent/glslang_tab.cpp"
+#line 9198 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 378: /* type_specifier_nonarray: USAMPLERCUBE  */
-#line 2696 "MachineIndependent/glslang.y"
+  case 380: /* type_specifier_nonarray: USAMPLERCUBE  */
+#line 2713 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 9167 "MachineIndependent/glslang_tab.cpp"
+#line 9208 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 379: /* type_specifier_nonarray: ISAMPLER1DARRAY  */
-#line 2702 "MachineIndependent/glslang.y"
+  case 381: /* type_specifier_nonarray: ISAMPLER1DARRAY  */
+#line 2719 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
     }
-#line 9177 "MachineIndependent/glslang_tab.cpp"
+#line 9218 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 380: /* type_specifier_nonarray: ISAMPLERCUBEARRAY  */
-#line 2707 "MachineIndependent/glslang.y"
+  case 382: /* type_specifier_nonarray: ISAMPLERCUBEARRAY  */
+#line 2724 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
     }
-#line 9187 "MachineIndependent/glslang_tab.cpp"
+#line 9228 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 381: /* type_specifier_nonarray: USAMPLER1D  */
-#line 2712 "MachineIndependent/glslang.y"
+  case 383: /* type_specifier_nonarray: USAMPLER1D  */
+#line 2729 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 9197 "MachineIndependent/glslang_tab.cpp"
+#line 9238 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 382: /* type_specifier_nonarray: USAMPLER1DARRAY  */
-#line 2717 "MachineIndependent/glslang.y"
+  case 384: /* type_specifier_nonarray: USAMPLER1DARRAY  */
+#line 2734 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 9207 "MachineIndependent/glslang_tab.cpp"
+#line 9248 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 383: /* type_specifier_nonarray: USAMPLERCUBEARRAY  */
-#line 2722 "MachineIndependent/glslang.y"
+  case 385: /* type_specifier_nonarray: USAMPLERCUBEARRAY  */
+#line 2739 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 9217 "MachineIndependent/glslang_tab.cpp"
+#line 9258 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 384: /* type_specifier_nonarray: TEXTURECUBEARRAY  */
-#line 2727 "MachineIndependent/glslang.y"
+  case 386: /* type_specifier_nonarray: TEXTURECUBEARRAY  */
+#line 2744 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true);
     }
-#line 9227 "MachineIndependent/glslang_tab.cpp"
+#line 9268 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 385: /* type_specifier_nonarray: ITEXTURECUBEARRAY  */
-#line 2732 "MachineIndependent/glslang.y"
+  case 387: /* type_specifier_nonarray: ITEXTURECUBEARRAY  */
+#line 2749 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true);
     }
-#line 9237 "MachineIndependent/glslang_tab.cpp"
+#line 9278 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 386: /* type_specifier_nonarray: UTEXTURECUBEARRAY  */
-#line 2737 "MachineIndependent/glslang.y"
+  case 388: /* type_specifier_nonarray: UTEXTURECUBEARRAY  */
+#line 2754 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true);
     }
-#line 9247 "MachineIndependent/glslang_tab.cpp"
+#line 9288 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 387: /* type_specifier_nonarray: USAMPLER2DARRAY  */
-#line 2743 "MachineIndependent/glslang.y"
+  case 389: /* type_specifier_nonarray: USAMPLER2DARRAY  */
+#line 2760 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
     }
-#line 9257 "MachineIndependent/glslang_tab.cpp"
+#line 9298 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 388: /* type_specifier_nonarray: TEXTURE2D  */
-#line 2748 "MachineIndependent/glslang.y"
+  case 390: /* type_specifier_nonarray: TEXTURE2D  */
+#line 2765 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
     }
-#line 9267 "MachineIndependent/glslang_tab.cpp"
+#line 9308 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 389: /* type_specifier_nonarray: TEXTURE3D  */
-#line 2753 "MachineIndependent/glslang.y"
+  case 391: /* type_specifier_nonarray: TEXTURE3D  */
+#line 2770 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
     }
-#line 9277 "MachineIndependent/glslang_tab.cpp"
+#line 9318 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 390: /* type_specifier_nonarray: TEXTURE2DARRAY  */
-#line 2758 "MachineIndependent/glslang.y"
+  case 392: /* type_specifier_nonarray: TEXTURE2DARRAY  */
+#line 2775 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true);
     }
-#line 9287 "MachineIndependent/glslang_tab.cpp"
+#line 9328 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 391: /* type_specifier_nonarray: TEXTURECUBE  */
-#line 2763 "MachineIndependent/glslang.y"
+  case 393: /* type_specifier_nonarray: TEXTURECUBE  */
+#line 2780 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
     }
-#line 9297 "MachineIndependent/glslang_tab.cpp"
+#line 9338 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 392: /* type_specifier_nonarray: ITEXTURE2D  */
-#line 2768 "MachineIndependent/glslang.y"
+  case 394: /* type_specifier_nonarray: ITEXTURE2D  */
+#line 2785 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
     }
-#line 9307 "MachineIndependent/glslang_tab.cpp"
+#line 9348 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 393: /* type_specifier_nonarray: ITEXTURE3D  */
-#line 2773 "MachineIndependent/glslang.y"
+  case 395: /* type_specifier_nonarray: ITEXTURE3D  */
+#line 2790 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
     }
-#line 9317 "MachineIndependent/glslang_tab.cpp"
+#line 9358 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 394: /* type_specifier_nonarray: ITEXTURECUBE  */
-#line 2778 "MachineIndependent/glslang.y"
+  case 396: /* type_specifier_nonarray: ITEXTURECUBE  */
+#line 2795 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
     }
-#line 9327 "MachineIndependent/glslang_tab.cpp"
+#line 9368 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 395: /* type_specifier_nonarray: ITEXTURE2DARRAY  */
-#line 2783 "MachineIndependent/glslang.y"
+  case 397: /* type_specifier_nonarray: ITEXTURE2DARRAY  */
+#line 2800 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true);
     }
-#line 9337 "MachineIndependent/glslang_tab.cpp"
+#line 9378 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 396: /* type_specifier_nonarray: UTEXTURE2D  */
-#line 2788 "MachineIndependent/glslang.y"
+  case 398: /* type_specifier_nonarray: UTEXTURE2D  */
+#line 2805 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
     }
-#line 9347 "MachineIndependent/glslang_tab.cpp"
+#line 9388 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 397: /* type_specifier_nonarray: UTEXTURE3D  */
-#line 2793 "MachineIndependent/glslang.y"
+  case 399: /* type_specifier_nonarray: UTEXTURE3D  */
+#line 2810 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
     }
-#line 9357 "MachineIndependent/glslang_tab.cpp"
+#line 9398 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 398: /* type_specifier_nonarray: UTEXTURECUBE  */
-#line 2798 "MachineIndependent/glslang.y"
+  case 400: /* type_specifier_nonarray: UTEXTURECUBE  */
+#line 2815 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
     }
-#line 9367 "MachineIndependent/glslang_tab.cpp"
+#line 9408 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 399: /* type_specifier_nonarray: UTEXTURE2DARRAY  */
-#line 2803 "MachineIndependent/glslang.y"
+  case 401: /* type_specifier_nonarray: UTEXTURE2DARRAY  */
+#line 2820 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true);
     }
-#line 9377 "MachineIndependent/glslang_tab.cpp"
+#line 9418 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 400: /* type_specifier_nonarray: SAMPLER  */
-#line 2808 "MachineIndependent/glslang.y"
+  case 402: /* type_specifier_nonarray: SAMPLER  */
+#line 2825 "MachineIndependent/glslang.y"
               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 9387 "MachineIndependent/glslang_tab.cpp"
+#line 9428 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 401: /* type_specifier_nonarray: SAMPLERSHADOW  */
-#line 2813 "MachineIndependent/glslang.y"
+  case 403: /* type_specifier_nonarray: SAMPLERSHADOW  */
+#line 2830 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 9397 "MachineIndependent/glslang_tab.cpp"
+#line 9438 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 402: /* type_specifier_nonarray: SAMPLER2DRECT  */
-#line 2819 "MachineIndependent/glslang.y"
+  case 404: /* type_specifier_nonarray: SAMPLER2DRECT  */
+#line 2836 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 9407 "MachineIndependent/glslang_tab.cpp"
+#line 9448 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 403: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW  */
-#line 2824 "MachineIndependent/glslang.y"
+  case 405: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW  */
+#line 2841 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
     }
-#line 9417 "MachineIndependent/glslang_tab.cpp"
+#line 9458 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 404: /* type_specifier_nonarray: F16SAMPLER2DRECT  */
-#line 2829 "MachineIndependent/glslang.y"
+  case 406: /* type_specifier_nonarray: F16SAMPLER2DRECT  */
+#line 2846 "MachineIndependent/glslang.y"
                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
     }
-#line 9428 "MachineIndependent/glslang_tab.cpp"
+#line 9469 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 405: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW  */
-#line 2835 "MachineIndependent/glslang.y"
+  case 407: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW  */
+#line 2852 "MachineIndependent/glslang.y"
                              {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
     }
-#line 9439 "MachineIndependent/glslang_tab.cpp"
+#line 9480 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 406: /* type_specifier_nonarray: ISAMPLER2DRECT  */
-#line 2841 "MachineIndependent/glslang.y"
+  case 408: /* type_specifier_nonarray: ISAMPLER2DRECT  */
+#line 2858 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdRect);
     }
-#line 9449 "MachineIndependent/glslang_tab.cpp"
+#line 9490 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 407: /* type_specifier_nonarray: USAMPLER2DRECT  */
-#line 2846 "MachineIndependent/glslang.y"
+  case 409: /* type_specifier_nonarray: USAMPLER2DRECT  */
+#line 2863 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdRect);
     }
-#line 9459 "MachineIndependent/glslang_tab.cpp"
+#line 9500 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 408: /* type_specifier_nonarray: SAMPLERBUFFER  */
-#line 2851 "MachineIndependent/glslang.y"
+  case 410: /* type_specifier_nonarray: SAMPLERBUFFER  */
+#line 2868 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
     }
-#line 9469 "MachineIndependent/glslang_tab.cpp"
+#line 9510 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 409: /* type_specifier_nonarray: F16SAMPLERBUFFER  */
-#line 2856 "MachineIndependent/glslang.y"
+  case 411: /* type_specifier_nonarray: F16SAMPLERBUFFER  */
+#line 2873 "MachineIndependent/glslang.y"
                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer);
     }
-#line 9480 "MachineIndependent/glslang_tab.cpp"
+#line 9521 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 410: /* type_specifier_nonarray: ISAMPLERBUFFER  */
-#line 2862 "MachineIndependent/glslang.y"
+  case 412: /* type_specifier_nonarray: ISAMPLERBUFFER  */
+#line 2879 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
     }
-#line 9490 "MachineIndependent/glslang_tab.cpp"
+#line 9531 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 411: /* type_specifier_nonarray: USAMPLERBUFFER  */
-#line 2867 "MachineIndependent/glslang.y"
+  case 413: /* type_specifier_nonarray: USAMPLERBUFFER  */
+#line 2884 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
     }
-#line 9500 "MachineIndependent/glslang_tab.cpp"
+#line 9541 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 412: /* type_specifier_nonarray: SAMPLER2DMS  */
-#line 2872 "MachineIndependent/glslang.y"
+  case 414: /* type_specifier_nonarray: SAMPLER2DMS  */
+#line 2889 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true);
     }
-#line 9510 "MachineIndependent/glslang_tab.cpp"
+#line 9551 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 413: /* type_specifier_nonarray: F16SAMPLER2DMS  */
-#line 2877 "MachineIndependent/glslang.y"
+  case 415: /* type_specifier_nonarray: F16SAMPLER2DMS  */
+#line 2894 "MachineIndependent/glslang.y"
                      {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true);
     }
-#line 9521 "MachineIndependent/glslang_tab.cpp"
+#line 9562 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 414: /* type_specifier_nonarray: ISAMPLER2DMS  */
-#line 2883 "MachineIndependent/glslang.y"
+  case 416: /* type_specifier_nonarray: ISAMPLER2DMS  */
+#line 2900 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true);
     }
-#line 9531 "MachineIndependent/glslang_tab.cpp"
+#line 9572 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 415: /* type_specifier_nonarray: USAMPLER2DMS  */
-#line 2888 "MachineIndependent/glslang.y"
+  case 417: /* type_specifier_nonarray: USAMPLER2DMS  */
+#line 2905 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true);
     }
-#line 9541 "MachineIndependent/glslang_tab.cpp"
+#line 9582 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 416: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
-#line 2893 "MachineIndependent/glslang.y"
+  case 418: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
+#line 2910 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true);
     }
-#line 9551 "MachineIndependent/glslang_tab.cpp"
+#line 9592 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 417: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY  */
-#line 2898 "MachineIndependent/glslang.y"
+  case 419: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY  */
+#line 2915 "MachineIndependent/glslang.y"
                           {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true);
     }
-#line 9562 "MachineIndependent/glslang_tab.cpp"
+#line 9603 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 418: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
-#line 2904 "MachineIndependent/glslang.y"
+  case 420: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
+#line 2921 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true);
     }
-#line 9572 "MachineIndependent/glslang_tab.cpp"
+#line 9613 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 419: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
-#line 2909 "MachineIndependent/glslang.y"
+  case 421: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
+#line 2926 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true);
     }
-#line 9582 "MachineIndependent/glslang_tab.cpp"
+#line 9623 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 420: /* type_specifier_nonarray: TEXTURE1D  */
-#line 2914 "MachineIndependent/glslang.y"
+  case 422: /* type_specifier_nonarray: TEXTURE1D  */
+#line 2931 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 9592 "MachineIndependent/glslang_tab.cpp"
+#line 9633 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 421: /* type_specifier_nonarray: F16TEXTURE1D  */
-#line 2919 "MachineIndependent/glslang.y"
+  case 423: /* type_specifier_nonarray: F16TEXTURE1D  */
+#line 2936 "MachineIndependent/glslang.y"
                    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D);
     }
-#line 9603 "MachineIndependent/glslang_tab.cpp"
+#line 9644 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 422: /* type_specifier_nonarray: F16TEXTURE2D  */
-#line 2925 "MachineIndependent/glslang.y"
+  case 424: /* type_specifier_nonarray: F16TEXTURE2D  */
+#line 2942 "MachineIndependent/glslang.y"
                    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D);
     }
-#line 9614 "MachineIndependent/glslang_tab.cpp"
+#line 9655 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 423: /* type_specifier_nonarray: F16TEXTURE3D  */
-#line 2931 "MachineIndependent/glslang.y"
+  case 425: /* type_specifier_nonarray: F16TEXTURE3D  */
+#line 2948 "MachineIndependent/glslang.y"
                    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D);
     }
-#line 9625 "MachineIndependent/glslang_tab.cpp"
+#line 9666 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 424: /* type_specifier_nonarray: F16TEXTURECUBE  */
-#line 2937 "MachineIndependent/glslang.y"
+  case 426: /* type_specifier_nonarray: F16TEXTURECUBE  */
+#line 2954 "MachineIndependent/glslang.y"
                      {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube);
     }
-#line 9636 "MachineIndependent/glslang_tab.cpp"
+#line 9677 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 425: /* type_specifier_nonarray: TEXTURE1DARRAY  */
-#line 2943 "MachineIndependent/glslang.y"
+  case 427: /* type_specifier_nonarray: TEXTURE1DARRAY  */
+#line 2960 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true);
     }
-#line 9646 "MachineIndependent/glslang_tab.cpp"
+#line 9687 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 426: /* type_specifier_nonarray: F16TEXTURE1DARRAY  */
-#line 2948 "MachineIndependent/glslang.y"
+  case 428: /* type_specifier_nonarray: F16TEXTURE1DARRAY  */
+#line 2965 "MachineIndependent/glslang.y"
                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true);
     }
-#line 9657 "MachineIndependent/glslang_tab.cpp"
+#line 9698 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 427: /* type_specifier_nonarray: F16TEXTURE2DARRAY  */
-#line 2954 "MachineIndependent/glslang.y"
+  case 429: /* type_specifier_nonarray: F16TEXTURE2DARRAY  */
+#line 2971 "MachineIndependent/glslang.y"
                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true);
     }
-#line 9668 "MachineIndependent/glslang_tab.cpp"
+#line 9709 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 428: /* type_specifier_nonarray: F16TEXTURECUBEARRAY  */
-#line 2960 "MachineIndependent/glslang.y"
+  case 430: /* type_specifier_nonarray: F16TEXTURECUBEARRAY  */
+#line 2977 "MachineIndependent/glslang.y"
                           {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true);
     }
-#line 9679 "MachineIndependent/glslang_tab.cpp"
+#line 9720 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 429: /* type_specifier_nonarray: ITEXTURE1D  */
-#line 2966 "MachineIndependent/glslang.y"
+  case 431: /* type_specifier_nonarray: ITEXTURE1D  */
+#line 2983 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
     }
-#line 9689 "MachineIndependent/glslang_tab.cpp"
+#line 9730 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 430: /* type_specifier_nonarray: ITEXTURE1DARRAY  */
-#line 2971 "MachineIndependent/glslang.y"
+  case 432: /* type_specifier_nonarray: ITEXTURE1DARRAY  */
+#line 2988 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true);
     }
-#line 9699 "MachineIndependent/glslang_tab.cpp"
+#line 9740 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 431: /* type_specifier_nonarray: UTEXTURE1D  */
-#line 2976 "MachineIndependent/glslang.y"
+  case 433: /* type_specifier_nonarray: UTEXTURE1D  */
+#line 2993 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
     }
-#line 9709 "MachineIndependent/glslang_tab.cpp"
+#line 9750 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 432: /* type_specifier_nonarray: UTEXTURE1DARRAY  */
-#line 2981 "MachineIndependent/glslang.y"
+  case 434: /* type_specifier_nonarray: UTEXTURE1DARRAY  */
+#line 2998 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true);
     }
-#line 9719 "MachineIndependent/glslang_tab.cpp"
+#line 9760 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 433: /* type_specifier_nonarray: TEXTURE2DRECT  */
-#line 2986 "MachineIndependent/glslang.y"
+  case 435: /* type_specifier_nonarray: TEXTURE2DRECT  */
+#line 3003 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 9729 "MachineIndependent/glslang_tab.cpp"
+#line 9770 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 434: /* type_specifier_nonarray: F16TEXTURE2DRECT  */
-#line 2991 "MachineIndependent/glslang.y"
+  case 436: /* type_specifier_nonarray: F16TEXTURE2DRECT  */
+#line 3008 "MachineIndependent/glslang.y"
                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect);
     }
-#line 9740 "MachineIndependent/glslang_tab.cpp"
+#line 9781 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 435: /* type_specifier_nonarray: ITEXTURE2DRECT  */
-#line 2997 "MachineIndependent/glslang.y"
+  case 437: /* type_specifier_nonarray: ITEXTURE2DRECT  */
+#line 3014 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 9750 "MachineIndependent/glslang_tab.cpp"
+#line 9791 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 436: /* type_specifier_nonarray: UTEXTURE2DRECT  */
-#line 3002 "MachineIndependent/glslang.y"
+  case 438: /* type_specifier_nonarray: UTEXTURE2DRECT  */
+#line 3019 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 9760 "MachineIndependent/glslang_tab.cpp"
+#line 9801 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 437: /* type_specifier_nonarray: TEXTUREBUFFER  */
-#line 3007 "MachineIndependent/glslang.y"
+  case 439: /* type_specifier_nonarray: TEXTUREBUFFER  */
+#line 3024 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 9770 "MachineIndependent/glslang_tab.cpp"
+#line 9811 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 438: /* type_specifier_nonarray: F16TEXTUREBUFFER  */
-#line 3012 "MachineIndependent/glslang.y"
+  case 440: /* type_specifier_nonarray: F16TEXTUREBUFFER  */
+#line 3029 "MachineIndependent/glslang.y"
                        {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer);
     }
-#line 9781 "MachineIndependent/glslang_tab.cpp"
+#line 9822 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 439: /* type_specifier_nonarray: ITEXTUREBUFFER  */
-#line 3018 "MachineIndependent/glslang.y"
+  case 441: /* type_specifier_nonarray: ITEXTUREBUFFER  */
+#line 3035 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 9791 "MachineIndependent/glslang_tab.cpp"
+#line 9832 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 440: /* type_specifier_nonarray: UTEXTUREBUFFER  */
-#line 3023 "MachineIndependent/glslang.y"
+  case 442: /* type_specifier_nonarray: UTEXTUREBUFFER  */
+#line 3040 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 9801 "MachineIndependent/glslang_tab.cpp"
+#line 9842 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 441: /* type_specifier_nonarray: TEXTURE2DMS  */
-#line 3028 "MachineIndependent/glslang.y"
+  case 443: /* type_specifier_nonarray: TEXTURE2DMS  */
+#line 3045 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true);
     }
-#line 9811 "MachineIndependent/glslang_tab.cpp"
+#line 9852 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 442: /* type_specifier_nonarray: F16TEXTURE2DMS  */
-#line 3033 "MachineIndependent/glslang.y"
+  case 444: /* type_specifier_nonarray: F16TEXTURE2DMS  */
+#line 3050 "MachineIndependent/glslang.y"
                      {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true);
     }
-#line 9822 "MachineIndependent/glslang_tab.cpp"
+#line 9863 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 443: /* type_specifier_nonarray: ITEXTURE2DMS  */
-#line 3039 "MachineIndependent/glslang.y"
+  case 445: /* type_specifier_nonarray: ITEXTURE2DMS  */
+#line 3056 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true);
     }
-#line 9832 "MachineIndependent/glslang_tab.cpp"
+#line 9873 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 444: /* type_specifier_nonarray: UTEXTURE2DMS  */
-#line 3044 "MachineIndependent/glslang.y"
+  case 446: /* type_specifier_nonarray: UTEXTURE2DMS  */
+#line 3061 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true);
     }
-#line 9842 "MachineIndependent/glslang_tab.cpp"
+#line 9883 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 445: /* type_specifier_nonarray: TEXTURE2DMSARRAY  */
-#line 3049 "MachineIndependent/glslang.y"
+  case 447: /* type_specifier_nonarray: TEXTURE2DMSARRAY  */
+#line 3066 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true);
     }
-#line 9852 "MachineIndependent/glslang_tab.cpp"
+#line 9893 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 446: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY  */
-#line 3054 "MachineIndependent/glslang.y"
+  case 448: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY  */
+#line 3071 "MachineIndependent/glslang.y"
                           {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true);
     }
-#line 9863 "MachineIndependent/glslang_tab.cpp"
+#line 9904 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 447: /* type_specifier_nonarray: ITEXTURE2DMSARRAY  */
-#line 3060 "MachineIndependent/glslang.y"
+  case 449: /* type_specifier_nonarray: ITEXTURE2DMSARRAY  */
+#line 3077 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true);
     }
-#line 9873 "MachineIndependent/glslang_tab.cpp"
+#line 9914 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 448: /* type_specifier_nonarray: UTEXTURE2DMSARRAY  */
-#line 3065 "MachineIndependent/glslang.y"
+  case 450: /* type_specifier_nonarray: UTEXTURE2DMSARRAY  */
+#line 3082 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true);
     }
-#line 9883 "MachineIndependent/glslang_tab.cpp"
+#line 9924 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 449: /* type_specifier_nonarray: IMAGE1D  */
-#line 3070 "MachineIndependent/glslang.y"
+  case 451: /* type_specifier_nonarray: IMAGE1D  */
+#line 3087 "MachineIndependent/glslang.y"
               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 9893 "MachineIndependent/glslang_tab.cpp"
+#line 9934 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 450: /* type_specifier_nonarray: F16IMAGE1D  */
-#line 3075 "MachineIndependent/glslang.y"
+  case 452: /* type_specifier_nonarray: F16IMAGE1D  */
+#line 3092 "MachineIndependent/glslang.y"
                  {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D);
     }
-#line 9904 "MachineIndependent/glslang_tab.cpp"
+#line 9945 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 451: /* type_specifier_nonarray: IIMAGE1D  */
-#line 3081 "MachineIndependent/glslang.y"
+  case 453: /* type_specifier_nonarray: IIMAGE1D  */
+#line 3098 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 9914 "MachineIndependent/glslang_tab.cpp"
+#line 9955 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 452: /* type_specifier_nonarray: UIMAGE1D  */
-#line 3086 "MachineIndependent/glslang.y"
+  case 454: /* type_specifier_nonarray: UIMAGE1D  */
+#line 3103 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 9924 "MachineIndependent/glslang_tab.cpp"
+#line 9965 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 453: /* type_specifier_nonarray: IMAGE2D  */
-#line 3091 "MachineIndependent/glslang.y"
+  case 455: /* type_specifier_nonarray: IMAGE2D  */
+#line 3108 "MachineIndependent/glslang.y"
               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 9934 "MachineIndependent/glslang_tab.cpp"
+#line 9975 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 454: /* type_specifier_nonarray: F16IMAGE2D  */
-#line 3096 "MachineIndependent/glslang.y"
+  case 456: /* type_specifier_nonarray: F16IMAGE2D  */
+#line 3113 "MachineIndependent/glslang.y"
                  {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D);
     }
-#line 9945 "MachineIndependent/glslang_tab.cpp"
+#line 9986 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 455: /* type_specifier_nonarray: IIMAGE2D  */
-#line 3102 "MachineIndependent/glslang.y"
+  case 457: /* type_specifier_nonarray: IIMAGE2D  */
+#line 3119 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 9955 "MachineIndependent/glslang_tab.cpp"
+#line 9996 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 456: /* type_specifier_nonarray: UIMAGE2D  */
-#line 3107 "MachineIndependent/glslang.y"
+  case 458: /* type_specifier_nonarray: UIMAGE2D  */
+#line 3124 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 9965 "MachineIndependent/glslang_tab.cpp"
+#line 10006 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 457: /* type_specifier_nonarray: IMAGE3D  */
-#line 3112 "MachineIndependent/glslang.y"
+  case 459: /* type_specifier_nonarray: IMAGE3D  */
+#line 3129 "MachineIndependent/glslang.y"
               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 9975 "MachineIndependent/glslang_tab.cpp"
+#line 10016 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 458: /* type_specifier_nonarray: F16IMAGE3D  */
-#line 3117 "MachineIndependent/glslang.y"
+  case 460: /* type_specifier_nonarray: F16IMAGE3D  */
+#line 3134 "MachineIndependent/glslang.y"
                  {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D);
     }
-#line 9986 "MachineIndependent/glslang_tab.cpp"
+#line 10027 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 459: /* type_specifier_nonarray: IIMAGE3D  */
-#line 3123 "MachineIndependent/glslang.y"
+  case 461: /* type_specifier_nonarray: IIMAGE3D  */
+#line 3140 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 9996 "MachineIndependent/glslang_tab.cpp"
+#line 10037 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 460: /* type_specifier_nonarray: UIMAGE3D  */
-#line 3128 "MachineIndependent/glslang.y"
+  case 462: /* type_specifier_nonarray: UIMAGE3D  */
+#line 3145 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 10006 "MachineIndependent/glslang_tab.cpp"
+#line 10047 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 461: /* type_specifier_nonarray: IMAGE2DRECT  */
-#line 3133 "MachineIndependent/glslang.y"
+  case 463: /* type_specifier_nonarray: IMAGE2DRECT  */
+#line 3150 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 10016 "MachineIndependent/glslang_tab.cpp"
+#line 10057 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 462: /* type_specifier_nonarray: F16IMAGE2DRECT  */
-#line 3138 "MachineIndependent/glslang.y"
+  case 464: /* type_specifier_nonarray: F16IMAGE2DRECT  */
+#line 3155 "MachineIndependent/glslang.y"
                      {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect);
     }
-#line 10027 "MachineIndependent/glslang_tab.cpp"
+#line 10068 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 463: /* type_specifier_nonarray: IIMAGE2DRECT  */
-#line 3144 "MachineIndependent/glslang.y"
+  case 465: /* type_specifier_nonarray: IIMAGE2DRECT  */
+#line 3161 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 10037 "MachineIndependent/glslang_tab.cpp"
+#line 10078 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 464: /* type_specifier_nonarray: UIMAGE2DRECT  */
-#line 3149 "MachineIndependent/glslang.y"
+  case 466: /* type_specifier_nonarray: UIMAGE2DRECT  */
+#line 3166 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 10047 "MachineIndependent/glslang_tab.cpp"
+#line 10088 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 465: /* type_specifier_nonarray: IMAGECUBE  */
-#line 3154 "MachineIndependent/glslang.y"
+  case 467: /* type_specifier_nonarray: IMAGECUBE  */
+#line 3171 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 10057 "MachineIndependent/glslang_tab.cpp"
+#line 10098 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 466: /* type_specifier_nonarray: F16IMAGECUBE  */
-#line 3159 "MachineIndependent/glslang.y"
+  case 468: /* type_specifier_nonarray: F16IMAGECUBE  */
+#line 3176 "MachineIndependent/glslang.y"
                    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube);
     }
-#line 10068 "MachineIndependent/glslang_tab.cpp"
+#line 10109 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 467: /* type_specifier_nonarray: IIMAGECUBE  */
-#line 3165 "MachineIndependent/glslang.y"
+  case 469: /* type_specifier_nonarray: IIMAGECUBE  */
+#line 3182 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 10078 "MachineIndependent/glslang_tab.cpp"
+#line 10119 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 468: /* type_specifier_nonarray: UIMAGECUBE  */
-#line 3170 "MachineIndependent/glslang.y"
+  case 470: /* type_specifier_nonarray: UIMAGECUBE  */
+#line 3187 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 10088 "MachineIndependent/glslang_tab.cpp"
+#line 10129 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 469: /* type_specifier_nonarray: IMAGEBUFFER  */
-#line 3175 "MachineIndependent/glslang.y"
+  case 471: /* type_specifier_nonarray: IMAGEBUFFER  */
+#line 3192 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 10098 "MachineIndependent/glslang_tab.cpp"
+#line 10139 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 470: /* type_specifier_nonarray: F16IMAGEBUFFER  */
-#line 3180 "MachineIndependent/glslang.y"
+  case 472: /* type_specifier_nonarray: F16IMAGEBUFFER  */
+#line 3197 "MachineIndependent/glslang.y"
                      {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer);
     }
-#line 10109 "MachineIndependent/glslang_tab.cpp"
+#line 10150 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 471: /* type_specifier_nonarray: IIMAGEBUFFER  */
-#line 3186 "MachineIndependent/glslang.y"
+  case 473: /* type_specifier_nonarray: IIMAGEBUFFER  */
+#line 3203 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 10119 "MachineIndependent/glslang_tab.cpp"
+#line 10160 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 472: /* type_specifier_nonarray: UIMAGEBUFFER  */
-#line 3191 "MachineIndependent/glslang.y"
+  case 474: /* type_specifier_nonarray: UIMAGEBUFFER  */
+#line 3208 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 10129 "MachineIndependent/glslang_tab.cpp"
+#line 10170 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 473: /* type_specifier_nonarray: IMAGE1DARRAY  */
-#line 3196 "MachineIndependent/glslang.y"
+  case 475: /* type_specifier_nonarray: IMAGE1DARRAY  */
+#line 3213 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true);
     }
-#line 10139 "MachineIndependent/glslang_tab.cpp"
+#line 10180 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 474: /* type_specifier_nonarray: F16IMAGE1DARRAY  */
-#line 3201 "MachineIndependent/glslang.y"
+  case 476: /* type_specifier_nonarray: F16IMAGE1DARRAY  */
+#line 3218 "MachineIndependent/glslang.y"
                       {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true);
     }
-#line 10150 "MachineIndependent/glslang_tab.cpp"
+#line 10191 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 475: /* type_specifier_nonarray: IIMAGE1DARRAY  */
-#line 3207 "MachineIndependent/glslang.y"
+  case 477: /* type_specifier_nonarray: IIMAGE1DARRAY  */
+#line 3224 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true);
     }
-#line 10160 "MachineIndependent/glslang_tab.cpp"
+#line 10201 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 476: /* type_specifier_nonarray: UIMAGE1DARRAY  */
-#line 3212 "MachineIndependent/glslang.y"
+  case 478: /* type_specifier_nonarray: UIMAGE1DARRAY  */
+#line 3229 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true);
     }
-#line 10170 "MachineIndependent/glslang_tab.cpp"
+#line 10211 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 477: /* type_specifier_nonarray: IMAGE2DARRAY  */
-#line 3217 "MachineIndependent/glslang.y"
+  case 479: /* type_specifier_nonarray: IMAGE2DARRAY  */
+#line 3234 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true);
     }
-#line 10180 "MachineIndependent/glslang_tab.cpp"
+#line 10221 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 478: /* type_specifier_nonarray: F16IMAGE2DARRAY  */
-#line 3222 "MachineIndependent/glslang.y"
+  case 480: /* type_specifier_nonarray: F16IMAGE2DARRAY  */
+#line 3239 "MachineIndependent/glslang.y"
                       {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true);
     }
-#line 10191 "MachineIndependent/glslang_tab.cpp"
+#line 10232 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 479: /* type_specifier_nonarray: IIMAGE2DARRAY  */
-#line 3228 "MachineIndependent/glslang.y"
+  case 481: /* type_specifier_nonarray: IIMAGE2DARRAY  */
+#line 3245 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true);
     }
-#line 10201 "MachineIndependent/glslang_tab.cpp"
+#line 10242 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 480: /* type_specifier_nonarray: UIMAGE2DARRAY  */
-#line 3233 "MachineIndependent/glslang.y"
+  case 482: /* type_specifier_nonarray: UIMAGE2DARRAY  */
+#line 3250 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true);
     }
-#line 10211 "MachineIndependent/glslang_tab.cpp"
+#line 10252 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 481: /* type_specifier_nonarray: IMAGECUBEARRAY  */
-#line 3238 "MachineIndependent/glslang.y"
+  case 483: /* type_specifier_nonarray: IMAGECUBEARRAY  */
+#line 3255 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true);
     }
-#line 10221 "MachineIndependent/glslang_tab.cpp"
+#line 10262 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 482: /* type_specifier_nonarray: F16IMAGECUBEARRAY  */
-#line 3243 "MachineIndependent/glslang.y"
+  case 484: /* type_specifier_nonarray: F16IMAGECUBEARRAY  */
+#line 3260 "MachineIndependent/glslang.y"
                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true);
     }
-#line 10232 "MachineIndependent/glslang_tab.cpp"
+#line 10273 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 483: /* type_specifier_nonarray: IIMAGECUBEARRAY  */
-#line 3249 "MachineIndependent/glslang.y"
+  case 485: /* type_specifier_nonarray: IIMAGECUBEARRAY  */
+#line 3266 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true);
     }
-#line 10242 "MachineIndependent/glslang_tab.cpp"
+#line 10283 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 484: /* type_specifier_nonarray: UIMAGECUBEARRAY  */
-#line 3254 "MachineIndependent/glslang.y"
+  case 486: /* type_specifier_nonarray: UIMAGECUBEARRAY  */
+#line 3271 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true);
     }
-#line 10252 "MachineIndependent/glslang_tab.cpp"
+#line 10293 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 485: /* type_specifier_nonarray: IMAGE2DMS  */
-#line 3259 "MachineIndependent/glslang.y"
+  case 487: /* type_specifier_nonarray: IMAGE2DMS  */
+#line 3276 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true);
     }
-#line 10262 "MachineIndependent/glslang_tab.cpp"
+#line 10303 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 486: /* type_specifier_nonarray: F16IMAGE2DMS  */
-#line 3264 "MachineIndependent/glslang.y"
+  case 488: /* type_specifier_nonarray: F16IMAGE2DMS  */
+#line 3281 "MachineIndependent/glslang.y"
                    {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true);
     }
-#line 10273 "MachineIndependent/glslang_tab.cpp"
+#line 10314 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 487: /* type_specifier_nonarray: IIMAGE2DMS  */
-#line 3270 "MachineIndependent/glslang.y"
+  case 489: /* type_specifier_nonarray: IIMAGE2DMS  */
+#line 3287 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true);
     }
-#line 10283 "MachineIndependent/glslang_tab.cpp"
+#line 10324 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 488: /* type_specifier_nonarray: UIMAGE2DMS  */
-#line 3275 "MachineIndependent/glslang.y"
+  case 490: /* type_specifier_nonarray: UIMAGE2DMS  */
+#line 3292 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true);
     }
-#line 10293 "MachineIndependent/glslang_tab.cpp"
+#line 10334 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 489: /* type_specifier_nonarray: IMAGE2DMSARRAY  */
-#line 3280 "MachineIndependent/glslang.y"
+  case 491: /* type_specifier_nonarray: IMAGE2DMSARRAY  */
+#line 3297 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true);
     }
-#line 10303 "MachineIndependent/glslang_tab.cpp"
+#line 10344 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 490: /* type_specifier_nonarray: F16IMAGE2DMSARRAY  */
-#line 3285 "MachineIndependent/glslang.y"
+  case 492: /* type_specifier_nonarray: F16IMAGE2DMSARRAY  */
+#line 3302 "MachineIndependent/glslang.y"
                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true);
     }
-#line 10314 "MachineIndependent/glslang_tab.cpp"
+#line 10355 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 491: /* type_specifier_nonarray: IIMAGE2DMSARRAY  */
-#line 3291 "MachineIndependent/glslang.y"
+  case 493: /* type_specifier_nonarray: IIMAGE2DMSARRAY  */
+#line 3308 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true);
     }
-#line 10324 "MachineIndependent/glslang_tab.cpp"
+#line 10365 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 492: /* type_specifier_nonarray: UIMAGE2DMSARRAY  */
-#line 3296 "MachineIndependent/glslang.y"
+  case 494: /* type_specifier_nonarray: UIMAGE2DMSARRAY  */
+#line 3313 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true);
     }
-#line 10334 "MachineIndependent/glslang_tab.cpp"
+#line 10375 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 493: /* type_specifier_nonarray: I64IMAGE1D  */
-#line 3301 "MachineIndependent/glslang.y"
+  case 495: /* type_specifier_nonarray: I64IMAGE1D  */
+#line 3318 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D);
     }
-#line 10344 "MachineIndependent/glslang_tab.cpp"
+#line 10385 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 494: /* type_specifier_nonarray: U64IMAGE1D  */
-#line 3306 "MachineIndependent/glslang.y"
+  case 496: /* type_specifier_nonarray: U64IMAGE1D  */
+#line 3323 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D);
     }
-#line 10354 "MachineIndependent/glslang_tab.cpp"
+#line 10395 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 495: /* type_specifier_nonarray: I64IMAGE2D  */
-#line 3311 "MachineIndependent/glslang.y"
+  case 497: /* type_specifier_nonarray: I64IMAGE2D  */
+#line 3328 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D);
     }
-#line 10364 "MachineIndependent/glslang_tab.cpp"
+#line 10405 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 496: /* type_specifier_nonarray: U64IMAGE2D  */
-#line 3316 "MachineIndependent/glslang.y"
+  case 498: /* type_specifier_nonarray: U64IMAGE2D  */
+#line 3333 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D);
     }
-#line 10374 "MachineIndependent/glslang_tab.cpp"
+#line 10415 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 497: /* type_specifier_nonarray: I64IMAGE3D  */
-#line 3321 "MachineIndependent/glslang.y"
+  case 499: /* type_specifier_nonarray: I64IMAGE3D  */
+#line 3338 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D);
     }
-#line 10384 "MachineIndependent/glslang_tab.cpp"
+#line 10425 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 498: /* type_specifier_nonarray: U64IMAGE3D  */
-#line 3326 "MachineIndependent/glslang.y"
+  case 500: /* type_specifier_nonarray: U64IMAGE3D  */
+#line 3343 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D);
     }
-#line 10394 "MachineIndependent/glslang_tab.cpp"
+#line 10435 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 499: /* type_specifier_nonarray: I64IMAGE2DRECT  */
-#line 3331 "MachineIndependent/glslang.y"
+  case 501: /* type_specifier_nonarray: I64IMAGE2DRECT  */
+#line 3348 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect);
     }
-#line 10404 "MachineIndependent/glslang_tab.cpp"
+#line 10445 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 500: /* type_specifier_nonarray: U64IMAGE2DRECT  */
-#line 3336 "MachineIndependent/glslang.y"
+  case 502: /* type_specifier_nonarray: U64IMAGE2DRECT  */
+#line 3353 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect);
     }
-#line 10414 "MachineIndependent/glslang_tab.cpp"
+#line 10455 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 501: /* type_specifier_nonarray: I64IMAGECUBE  */
-#line 3341 "MachineIndependent/glslang.y"
+  case 503: /* type_specifier_nonarray: I64IMAGECUBE  */
+#line 3358 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube);
     }
-#line 10424 "MachineIndependent/glslang_tab.cpp"
+#line 10465 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 502: /* type_specifier_nonarray: U64IMAGECUBE  */
-#line 3346 "MachineIndependent/glslang.y"
+  case 504: /* type_specifier_nonarray: U64IMAGECUBE  */
+#line 3363 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube);
     }
-#line 10434 "MachineIndependent/glslang_tab.cpp"
+#line 10475 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 503: /* type_specifier_nonarray: I64IMAGEBUFFER  */
-#line 3351 "MachineIndependent/glslang.y"
+  case 505: /* type_specifier_nonarray: I64IMAGEBUFFER  */
+#line 3368 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer);
     }
-#line 10444 "MachineIndependent/glslang_tab.cpp"
+#line 10485 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 504: /* type_specifier_nonarray: U64IMAGEBUFFER  */
-#line 3356 "MachineIndependent/glslang.y"
+  case 506: /* type_specifier_nonarray: U64IMAGEBUFFER  */
+#line 3373 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer);
     }
-#line 10454 "MachineIndependent/glslang_tab.cpp"
+#line 10495 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 505: /* type_specifier_nonarray: I64IMAGE1DARRAY  */
-#line 3361 "MachineIndependent/glslang.y"
+  case 507: /* type_specifier_nonarray: I64IMAGE1DARRAY  */
+#line 3378 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true);
     }
-#line 10464 "MachineIndependent/glslang_tab.cpp"
+#line 10505 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 506: /* type_specifier_nonarray: U64IMAGE1DARRAY  */
-#line 3366 "MachineIndependent/glslang.y"
+  case 508: /* type_specifier_nonarray: U64IMAGE1DARRAY  */
+#line 3383 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true);
     }
-#line 10474 "MachineIndependent/glslang_tab.cpp"
+#line 10515 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 507: /* type_specifier_nonarray: I64IMAGE2DARRAY  */
-#line 3371 "MachineIndependent/glslang.y"
+  case 509: /* type_specifier_nonarray: I64IMAGE2DARRAY  */
+#line 3388 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true);
     }
-#line 10484 "MachineIndependent/glslang_tab.cpp"
+#line 10525 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 508: /* type_specifier_nonarray: U64IMAGE2DARRAY  */
-#line 3376 "MachineIndependent/glslang.y"
+  case 510: /* type_specifier_nonarray: U64IMAGE2DARRAY  */
+#line 3393 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true);
     }
-#line 10494 "MachineIndependent/glslang_tab.cpp"
+#line 10535 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 509: /* type_specifier_nonarray: I64IMAGECUBEARRAY  */
-#line 3381 "MachineIndependent/glslang.y"
+  case 511: /* type_specifier_nonarray: I64IMAGECUBEARRAY  */
+#line 3398 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true);
     }
-#line 10504 "MachineIndependent/glslang_tab.cpp"
+#line 10545 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 510: /* type_specifier_nonarray: U64IMAGECUBEARRAY  */
-#line 3386 "MachineIndependent/glslang.y"
+  case 512: /* type_specifier_nonarray: U64IMAGECUBEARRAY  */
+#line 3403 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true);
     }
-#line 10514 "MachineIndependent/glslang_tab.cpp"
+#line 10555 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 511: /* type_specifier_nonarray: I64IMAGE2DMS  */
-#line 3391 "MachineIndependent/glslang.y"
+  case 513: /* type_specifier_nonarray: I64IMAGE2DMS  */
+#line 3408 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true);
     }
-#line 10524 "MachineIndependent/glslang_tab.cpp"
+#line 10565 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 512: /* type_specifier_nonarray: U64IMAGE2DMS  */
-#line 3396 "MachineIndependent/glslang.y"
+  case 514: /* type_specifier_nonarray: U64IMAGE2DMS  */
+#line 3413 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true);
     }
-#line 10534 "MachineIndependent/glslang_tab.cpp"
+#line 10575 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 513: /* type_specifier_nonarray: I64IMAGE2DMSARRAY  */
-#line 3401 "MachineIndependent/glslang.y"
+  case 515: /* type_specifier_nonarray: I64IMAGE2DMSARRAY  */
+#line 3418 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true);
     }
-#line 10544 "MachineIndependent/glslang_tab.cpp"
+#line 10585 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 514: /* type_specifier_nonarray: U64IMAGE2DMSARRAY  */
-#line 3406 "MachineIndependent/glslang.y"
+  case 516: /* type_specifier_nonarray: U64IMAGE2DMSARRAY  */
+#line 3423 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true);
     }
-#line 10554 "MachineIndependent/glslang_tab.cpp"
+#line 10595 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 515: /* type_specifier_nonarray: SAMPLEREXTERNALOES  */
-#line 3411 "MachineIndependent/glslang.y"
+  case 517: /* type_specifier_nonarray: SAMPLEREXTERNALOES  */
+#line 3428 "MachineIndependent/glslang.y"
                          {  // GL_OES_EGL_image_external
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.external = true;
     }
-#line 10565 "MachineIndependent/glslang_tab.cpp"
+#line 10606 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 516: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
-#line 3417 "MachineIndependent/glslang.y"
+  case 518: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
+#line 3434 "MachineIndependent/glslang.y"
                               { // GL_EXT_YUV_target
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
         (yyval.interm.type).sampler.yuv = true;
     }
-#line 10576 "MachineIndependent/glslang_tab.cpp"
+#line 10617 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 517: /* type_specifier_nonarray: SUBPASSINPUT  */
-#line 3423 "MachineIndependent/glslang.y"
+  case 519: /* type_specifier_nonarray: SUBPASSINPUT  */
+#line 3440 "MachineIndependent/glslang.y"
                    {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat);
     }
-#line 10587 "MachineIndependent/glslang_tab.cpp"
+#line 10628 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 518: /* type_specifier_nonarray: SUBPASSINPUTMS  */
-#line 3429 "MachineIndependent/glslang.y"
+  case 520: /* type_specifier_nonarray: SUBPASSINPUTMS  */
+#line 3446 "MachineIndependent/glslang.y"
                      {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat, true);
     }
-#line 10598 "MachineIndependent/glslang_tab.cpp"
+#line 10639 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 519: /* type_specifier_nonarray: F16SUBPASSINPUT  */
-#line 3435 "MachineIndependent/glslang.y"
+  case 521: /* type_specifier_nonarray: F16SUBPASSINPUT  */
+#line 3452 "MachineIndependent/glslang.y"
                       {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
@@ -10606,11 +10647,11 @@ yyreduce:
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
     }
-#line 10610 "MachineIndependent/glslang_tab.cpp"
+#line 10651 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 520: /* type_specifier_nonarray: F16SUBPASSINPUTMS  */
-#line 3442 "MachineIndependent/glslang.y"
+  case 522: /* type_specifier_nonarray: F16SUBPASSINPUTMS  */
+#line 3459 "MachineIndependent/glslang.y"
                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
@@ -10618,107 +10659,107 @@ yyreduce:
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
     }
-#line 10622 "MachineIndependent/glslang_tab.cpp"
+#line 10663 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 521: /* type_specifier_nonarray: ISUBPASSINPUT  */
-#line 3449 "MachineIndependent/glslang.y"
+  case 523: /* type_specifier_nonarray: ISUBPASSINPUT  */
+#line 3466 "MachineIndependent/glslang.y"
                     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt);
     }
-#line 10633 "MachineIndependent/glslang_tab.cpp"
+#line 10674 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 522: /* type_specifier_nonarray: ISUBPASSINPUTMS  */
-#line 3455 "MachineIndependent/glslang.y"
+  case 524: /* type_specifier_nonarray: ISUBPASSINPUTMS  */
+#line 3472 "MachineIndependent/glslang.y"
                       {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtInt, true);
     }
-#line 10644 "MachineIndependent/glslang_tab.cpp"
+#line 10685 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 523: /* type_specifier_nonarray: USUBPASSINPUT  */
-#line 3461 "MachineIndependent/glslang.y"
+  case 525: /* type_specifier_nonarray: USUBPASSINPUT  */
+#line 3478 "MachineIndependent/glslang.y"
                     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint);
     }
-#line 10655 "MachineIndependent/glslang_tab.cpp"
+#line 10696 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 524: /* type_specifier_nonarray: USUBPASSINPUTMS  */
-#line 3467 "MachineIndependent/glslang.y"
+  case 526: /* type_specifier_nonarray: USUBPASSINPUTMS  */
+#line 3484 "MachineIndependent/glslang.y"
                       {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtUint, true);
     }
-#line 10666 "MachineIndependent/glslang_tab.cpp"
+#line 10707 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 525: /* type_specifier_nonarray: FCOOPMATNV  */
-#line 3473 "MachineIndependent/glslang.y"
+  case 527: /* type_specifier_nonarray: FCOOPMATNV  */
+#line 3490 "MachineIndependent/glslang.y"
                  {
         parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).coopmat = true;
     }
-#line 10677 "MachineIndependent/glslang_tab.cpp"
+#line 10718 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 526: /* type_specifier_nonarray: ICOOPMATNV  */
-#line 3479 "MachineIndependent/glslang.y"
+  case 528: /* type_specifier_nonarray: ICOOPMATNV  */
+#line 3496 "MachineIndependent/glslang.y"
                  {
         parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).coopmat = true;
     }
-#line 10688 "MachineIndependent/glslang_tab.cpp"
+#line 10729 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 527: /* type_specifier_nonarray: UCOOPMATNV  */
-#line 3485 "MachineIndependent/glslang.y"
+  case 529: /* type_specifier_nonarray: UCOOPMATNV  */
+#line 3502 "MachineIndependent/glslang.y"
                  {
         parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).coopmat = true;
     }
-#line 10699 "MachineIndependent/glslang_tab.cpp"
+#line 10740 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 528: /* type_specifier_nonarray: spirv_type_specifier  */
-#line 3491 "MachineIndependent/glslang.y"
+  case 530: /* type_specifier_nonarray: spirv_type_specifier  */
+#line 3508 "MachineIndependent/glslang.y"
                            {
         parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier");
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 10708 "MachineIndependent/glslang_tab.cpp"
+#line 10749 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 529: /* type_specifier_nonarray: struct_specifier  */
-#line 3496 "MachineIndependent/glslang.y"
+  case 531: /* type_specifier_nonarray: struct_specifier  */
+#line 3513 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type));
     }
-#line 10718 "MachineIndependent/glslang_tab.cpp"
+#line 10759 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 530: /* type_specifier_nonarray: TYPE_NAME  */
-#line 3501 "MachineIndependent/glslang.y"
+  case 532: /* type_specifier_nonarray: TYPE_NAME  */
+#line 3518 "MachineIndependent/glslang.y"
                 {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -10732,47 +10773,47 @@ yyreduce:
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 10736 "MachineIndependent/glslang_tab.cpp"
+#line 10777 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 531: /* precision_qualifier: HIGH_PRECISION  */
-#line 3517 "MachineIndependent/glslang.y"
+  case 533: /* precision_qualifier: HIGH_PRECISION  */
+#line 3534 "MachineIndependent/glslang.y"
                      {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh);
     }
-#line 10746 "MachineIndependent/glslang_tab.cpp"
+#line 10787 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 532: /* precision_qualifier: MEDIUM_PRECISION  */
-#line 3522 "MachineIndependent/glslang.y"
+  case 534: /* precision_qualifier: MEDIUM_PRECISION  */
+#line 3539 "MachineIndependent/glslang.y"
                        {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium);
     }
-#line 10756 "MachineIndependent/glslang_tab.cpp"
+#line 10797 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 533: /* precision_qualifier: LOW_PRECISION  */
-#line 3527 "MachineIndependent/glslang.y"
+  case 535: /* precision_qualifier: LOW_PRECISION  */
+#line 3544 "MachineIndependent/glslang.y"
                     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow);
     }
-#line 10766 "MachineIndependent/glslang_tab.cpp"
+#line 10807 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 534: /* $@3: %empty  */
-#line 3535 "MachineIndependent/glslang.y"
+  case 536: /* $@3: %empty  */
+#line 3552 "MachineIndependent/glslang.y"
                                    { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 10772 "MachineIndependent/glslang_tab.cpp"
+#line 10813 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 535: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
-#line 3535 "MachineIndependent/glslang.y"
+  case 537: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
+#line 3552 "MachineIndependent/glslang.y"
                                                                                                                    {
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
@@ -10784,17 +10825,17 @@ yyreduce:
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 10788 "MachineIndependent/glslang_tab.cpp"
+#line 10829 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 536: /* $@4: %empty  */
-#line 3546 "MachineIndependent/glslang.y"
+  case 538: /* $@4: %empty  */
+#line 3563 "MachineIndependent/glslang.y"
                         { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 10794 "MachineIndependent/glslang_tab.cpp"
+#line 10835 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 537: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
-#line 3546 "MachineIndependent/glslang.y"
+  case 539: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
+#line 3563 "MachineIndependent/glslang.y"
                                                                                                         {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -10802,19 +10843,19 @@ yyreduce:
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 10806 "MachineIndependent/glslang_tab.cpp"
+#line 10847 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 538: /* struct_declaration_list: struct_declaration  */
-#line 3556 "MachineIndependent/glslang.y"
+  case 540: /* struct_declaration_list: struct_declaration  */
+#line 3573 "MachineIndependent/glslang.y"
                          {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 10814 "MachineIndependent/glslang_tab.cpp"
+#line 10855 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 539: /* struct_declaration_list: struct_declaration_list struct_declaration  */
-#line 3559 "MachineIndependent/glslang.y"
+  case 541: /* struct_declaration_list: struct_declaration_list struct_declaration  */
+#line 3576 "MachineIndependent/glslang.y"
                                                  {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -10825,11 +10866,11 @@ yyreduce:
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 10829 "MachineIndependent/glslang_tab.cpp"
+#line 10870 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 540: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
-#line 3572 "MachineIndependent/glslang.y"
+  case 542: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
+#line 3589 "MachineIndependent/glslang.y"
                                                       {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -10852,11 +10893,11 @@ yyreduce:
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 10856 "MachineIndependent/glslang_tab.cpp"
+#line 10897 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 541: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
-#line 3594 "MachineIndependent/glslang.y"
+  case 543: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
+#line 3611 "MachineIndependent/glslang.y"
                                                                      {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -10881,38 +10922,38 @@ yyreduce:
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 10885 "MachineIndependent/glslang_tab.cpp"
+#line 10926 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 542: /* struct_declarator_list: struct_declarator  */
-#line 3621 "MachineIndependent/glslang.y"
+  case 544: /* struct_declarator_list: struct_declarator  */
+#line 3638 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 10894 "MachineIndependent/glslang_tab.cpp"
+#line 10935 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 543: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
-#line 3625 "MachineIndependent/glslang.y"
+  case 545: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
+#line 3642 "MachineIndependent/glslang.y"
                                                      {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 10902 "MachineIndependent/glslang_tab.cpp"
+#line 10943 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 544: /* struct_declarator: IDENTIFIER  */
-#line 3631 "MachineIndependent/glslang.y"
+  case 546: /* struct_declarator: IDENTIFIER  */
+#line 3648 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.typeLine).type = new TType(EbtVoid);
         (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc;
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string);
     }
-#line 10912 "MachineIndependent/glslang_tab.cpp"
+#line 10953 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 545: /* struct_declarator: IDENTIFIER array_specifier  */
-#line 3636 "MachineIndependent/glslang.y"
+  case 547: /* struct_declarator: IDENTIFIER array_specifier  */
+#line 3653 "MachineIndependent/glslang.y"
                                  {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
@@ -10921,246 +10962,246 @@ yyreduce:
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 10925 "MachineIndependent/glslang_tab.cpp"
+#line 10966 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 546: /* initializer: assignment_expression  */
-#line 3647 "MachineIndependent/glslang.y"
+  case 548: /* initializer: assignment_expression  */
+#line 3664 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 10933 "MachineIndependent/glslang_tab.cpp"
+#line 10974 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 547: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
-#line 3651 "MachineIndependent/glslang.y"
+  case 549: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
+#line 3668 "MachineIndependent/glslang.y"
                                               {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
     }
-#line 10944 "MachineIndependent/glslang_tab.cpp"
+#line 10985 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 548: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
-#line 3657 "MachineIndependent/glslang.y"
+  case 550: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
+#line 3674 "MachineIndependent/glslang.y"
                                                     {
         const char* initFeature = "{ } style initializers";
         parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature);
         parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature);
         (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 10955 "MachineIndependent/glslang_tab.cpp"
+#line 10996 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 549: /* initializer: LEFT_BRACE RIGHT_BRACE  */
-#line 3663 "MachineIndependent/glslang.y"
+  case 551: /* initializer: LEFT_BRACE RIGHT_BRACE  */
+#line 3680 "MachineIndependent/glslang.y"
                              {
         const char* initFeature = "empty { } initializer";
         parseContext.profileRequires((yyvsp[-1].lex).loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature);
         parseContext.profileRequires((yyvsp[-1].lex).loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature);
         (yyval.interm.intermTypedNode) = parseContext.intermediate.makeAggregate((yyvsp[-1].lex).loc);
     }
-#line 10966 "MachineIndependent/glslang_tab.cpp"
+#line 11007 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 550: /* initializer_list: initializer  */
-#line 3674 "MachineIndependent/glslang.y"
+  case 552: /* initializer_list: initializer  */
+#line 3691 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 10974 "MachineIndependent/glslang_tab.cpp"
+#line 11015 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 551: /* initializer_list: initializer_list COMMA initializer  */
-#line 3677 "MachineIndependent/glslang.y"
+  case 553: /* initializer_list: initializer_list COMMA initializer  */
+#line 3694 "MachineIndependent/glslang.y"
                                          {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 10982 "MachineIndependent/glslang_tab.cpp"
+#line 11023 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 552: /* declaration_statement: declaration  */
-#line 3684 "MachineIndependent/glslang.y"
+  case 554: /* declaration_statement: declaration  */
+#line 3701 "MachineIndependent/glslang.y"
                   { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 10988 "MachineIndependent/glslang_tab.cpp"
+#line 11029 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 553: /* statement: compound_statement  */
-#line 3688 "MachineIndependent/glslang.y"
+  case 555: /* statement: compound_statement  */
+#line 3705 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 10994 "MachineIndependent/glslang_tab.cpp"
+#line 11035 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 554: /* statement: simple_statement  */
-#line 3689 "MachineIndependent/glslang.y"
+  case 556: /* statement: simple_statement  */
+#line 3706 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11000 "MachineIndependent/glslang_tab.cpp"
+#line 11041 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 555: /* simple_statement: declaration_statement  */
-#line 3695 "MachineIndependent/glslang.y"
+  case 557: /* simple_statement: declaration_statement  */
+#line 3712 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11006 "MachineIndependent/glslang_tab.cpp"
+#line 11047 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 556: /* simple_statement: expression_statement  */
-#line 3696 "MachineIndependent/glslang.y"
+  case 558: /* simple_statement: expression_statement  */
+#line 3713 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11012 "MachineIndependent/glslang_tab.cpp"
+#line 11053 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 557: /* simple_statement: selection_statement  */
-#line 3697 "MachineIndependent/glslang.y"
+  case 559: /* simple_statement: selection_statement  */
+#line 3714 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11018 "MachineIndependent/glslang_tab.cpp"
+#line 11059 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 558: /* simple_statement: switch_statement  */
-#line 3698 "MachineIndependent/glslang.y"
+  case 560: /* simple_statement: switch_statement  */
+#line 3715 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11024 "MachineIndependent/glslang_tab.cpp"
+#line 11065 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 559: /* simple_statement: case_label  */
-#line 3699 "MachineIndependent/glslang.y"
+  case 561: /* simple_statement: case_label  */
+#line 3716 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11030 "MachineIndependent/glslang_tab.cpp"
+#line 11071 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 560: /* simple_statement: iteration_statement  */
-#line 3700 "MachineIndependent/glslang.y"
+  case 562: /* simple_statement: iteration_statement  */
+#line 3717 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11036 "MachineIndependent/glslang_tab.cpp"
+#line 11077 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 561: /* simple_statement: jump_statement  */
-#line 3701 "MachineIndependent/glslang.y"
+  case 563: /* simple_statement: jump_statement  */
+#line 3718 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11042 "MachineIndependent/glslang_tab.cpp"
+#line 11083 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 562: /* simple_statement: demote_statement  */
-#line 3703 "MachineIndependent/glslang.y"
+  case 564: /* simple_statement: demote_statement  */
+#line 3720 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11048 "MachineIndependent/glslang_tab.cpp"
+#line 11089 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 563: /* demote_statement: DEMOTE SEMICOLON  */
-#line 3709 "MachineIndependent/glslang.y"
+  case 565: /* demote_statement: DEMOTE SEMICOLON  */
+#line 3726 "MachineIndependent/glslang.y"
                        {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "demote");
         parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDemote, (yyvsp[-1].lex).loc);
     }
-#line 11058 "MachineIndependent/glslang_tab.cpp"
+#line 11099 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 564: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
-#line 3718 "MachineIndependent/glslang.y"
+  case 566: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
+#line 3735 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermNode) = 0; }
-#line 11064 "MachineIndependent/glslang_tab.cpp"
+#line 11105 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 565: /* $@5: %empty  */
-#line 3719 "MachineIndependent/glslang.y"
+  case 567: /* $@5: %empty  */
+#line 3736 "MachineIndependent/glslang.y"
                  {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 11073 "MachineIndependent/glslang_tab.cpp"
+#line 11114 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 566: /* $@6: %empty  */
-#line 3723 "MachineIndependent/glslang.y"
+  case 568: /* $@6: %empty  */
+#line 3740 "MachineIndependent/glslang.y"
                      {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 11082 "MachineIndependent/glslang_tab.cpp"
+#line 11123 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 567: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE  */
-#line 3727 "MachineIndependent/glslang.y"
+  case 569: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE  */
+#line 3744 "MachineIndependent/glslang.y"
                   {
         if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 11092 "MachineIndependent/glslang_tab.cpp"
+#line 11133 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 568: /* statement_no_new_scope: compound_statement_no_new_scope  */
-#line 3735 "MachineIndependent/glslang.y"
+  case 570: /* statement_no_new_scope: compound_statement_no_new_scope  */
+#line 3752 "MachineIndependent/glslang.y"
                                       { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11098 "MachineIndependent/glslang_tab.cpp"
+#line 11139 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 569: /* statement_no_new_scope: simple_statement  */
-#line 3736 "MachineIndependent/glslang.y"
+  case 571: /* statement_no_new_scope: simple_statement  */
+#line 3753 "MachineIndependent/glslang.y"
                                       { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11104 "MachineIndependent/glslang_tab.cpp"
+#line 11145 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 570: /* $@7: %empty  */
-#line 3740 "MachineIndependent/glslang.y"
+  case 572: /* $@7: %empty  */
+#line 3757 "MachineIndependent/glslang.y"
       {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11112 "MachineIndependent/glslang_tab.cpp"
+#line 11153 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 571: /* statement_scoped: $@7 compound_statement  */
-#line 3743 "MachineIndependent/glslang.y"
+  case 573: /* statement_scoped: $@7 compound_statement  */
+#line 3760 "MachineIndependent/glslang.y"
                           {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11121 "MachineIndependent/glslang_tab.cpp"
+#line 11162 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 572: /* $@8: %empty  */
-#line 3747 "MachineIndependent/glslang.y"
+  case 574: /* $@8: %empty  */
+#line 3764 "MachineIndependent/glslang.y"
       {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11131 "MachineIndependent/glslang_tab.cpp"
+#line 11172 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 573: /* statement_scoped: $@8 simple_statement  */
-#line 3752 "MachineIndependent/glslang.y"
+  case 575: /* statement_scoped: $@8 simple_statement  */
+#line 3769 "MachineIndependent/glslang.y"
                        {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11142 "MachineIndependent/glslang_tab.cpp"
+#line 11183 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 574: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
-#line 3761 "MachineIndependent/glslang.y"
+  case 576: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
+#line 3778 "MachineIndependent/glslang.y"
                              {
         (yyval.interm.intermNode) = 0;
     }
-#line 11150 "MachineIndependent/glslang_tab.cpp"
+#line 11191 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 575: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
-#line 3764 "MachineIndependent/glslang.y"
+  case 577: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
+#line 3781 "MachineIndependent/glslang.y"
                                             {
         if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
             (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
     }
-#line 11160 "MachineIndependent/glslang_tab.cpp"
+#line 11201 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 576: /* statement_list: statement  */
-#line 3772 "MachineIndependent/glslang.y"
+  case 578: /* statement_list: statement  */
+#line 3789 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
@@ -11169,11 +11210,11 @@ yyreduce:
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 11173 "MachineIndependent/glslang_tab.cpp"
+#line 11214 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 577: /* statement_list: statement_list statement  */
-#line 3780 "MachineIndependent/glslang.y"
+  case 579: /* statement_list: statement_list statement  */
+#line 3797 "MachineIndependent/glslang.y"
                                {
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -11182,77 +11223,77 @@ yyreduce:
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 11186 "MachineIndependent/glslang_tab.cpp"
+#line 11227 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 578: /* expression_statement: SEMICOLON  */
-#line 3791 "MachineIndependent/glslang.y"
+  case 580: /* expression_statement: SEMICOLON  */
+#line 3808 "MachineIndependent/glslang.y"
                  { (yyval.interm.intermNode) = 0; }
-#line 11192 "MachineIndependent/glslang_tab.cpp"
+#line 11233 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 579: /* expression_statement: expression SEMICOLON  */
-#line 3792 "MachineIndependent/glslang.y"
+  case 581: /* expression_statement: expression SEMICOLON  */
+#line 3809 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 11198 "MachineIndependent/glslang_tab.cpp"
+#line 11239 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 580: /* selection_statement: selection_statement_nonattributed  */
-#line 3796 "MachineIndependent/glslang.y"
+  case 582: /* selection_statement: selection_statement_nonattributed  */
+#line 3813 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11206 "MachineIndependent/glslang_tab.cpp"
+#line 11247 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 581: /* selection_statement: attribute selection_statement_nonattributed  */
-#line 3800 "MachineIndependent/glslang.y"
+  case 583: /* selection_statement: attribute selection_statement_nonattributed  */
+#line 3817 "MachineIndependent/glslang.y"
                                                   {
         parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11216 "MachineIndependent/glslang_tab.cpp"
+#line 11257 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 582: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
-#line 3808 "MachineIndependent/glslang.y"
+  case 584: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
+#line 3825 "MachineIndependent/glslang.y"
                                                                     {
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-2].interm.intermTypedNode));
         (yyval.interm.intermNode) = parseContext.intermediate.addSelection((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.nodePair), (yyvsp[-4].lex).loc);
     }
-#line 11225 "MachineIndependent/glslang_tab.cpp"
+#line 11266 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 583: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
-#line 3815 "MachineIndependent/glslang.y"
+  case 585: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
+#line 3832 "MachineIndependent/glslang.y"
                                              {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 11234 "MachineIndependent/glslang_tab.cpp"
+#line 11275 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 584: /* selection_rest_statement: statement_scoped  */
-#line 3819 "MachineIndependent/glslang.y"
+  case 586: /* selection_rest_statement: statement_scoped  */
+#line 3836 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 11243 "MachineIndependent/glslang_tab.cpp"
+#line 11284 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 585: /* condition: expression  */
-#line 3827 "MachineIndependent/glslang.y"
+  case 587: /* condition: expression  */
+#line 3844 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 11252 "MachineIndependent/glslang_tab.cpp"
+#line 11293 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 586: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
-#line 3831 "MachineIndependent/glslang.y"
+  case 588: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
+#line 3848 "MachineIndependent/glslang.y"
                                                         {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -11263,29 +11304,29 @@ yyreduce:
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 11267 "MachineIndependent/glslang_tab.cpp"
+#line 11308 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 587: /* switch_statement: switch_statement_nonattributed  */
-#line 3844 "MachineIndependent/glslang.y"
+  case 589: /* switch_statement: switch_statement_nonattributed  */
+#line 3861 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11275 "MachineIndependent/glslang_tab.cpp"
+#line 11316 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 588: /* switch_statement: attribute switch_statement_nonattributed  */
-#line 3848 "MachineIndependent/glslang.y"
+  case 590: /* switch_statement: attribute switch_statement_nonattributed  */
+#line 3865 "MachineIndependent/glslang.y"
                                                {
         parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11285 "MachineIndependent/glslang_tab.cpp"
+#line 11326 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 589: /* $@9: %empty  */
-#line 3856 "MachineIndependent/glslang.y"
+  case 591: /* $@9: %empty  */
+#line 3873 "MachineIndependent/glslang.y"
                                                {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -11294,11 +11335,11 @@ yyreduce:
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 11298 "MachineIndependent/glslang_tab.cpp"
+#line 11339 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 590: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
-#line 3864 "MachineIndependent/glslang.y"
+  case 592: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
+#line 3881 "MachineIndependent/glslang.y"
                                                  {
         (yyval.interm.intermNode) = parseContext.addSwitch((yyvsp[-7].lex).loc, (yyvsp[-5].interm.intermTypedNode), (yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0);
         delete parseContext.switchSequenceStack.back();
@@ -11308,27 +11349,27 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11312 "MachineIndependent/glslang_tab.cpp"
+#line 11353 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 591: /* switch_statement_list: %empty  */
-#line 3876 "MachineIndependent/glslang.y"
+  case 593: /* switch_statement_list: %empty  */
+#line 3893 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = 0;
     }
-#line 11320 "MachineIndependent/glslang_tab.cpp"
+#line 11361 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 592: /* switch_statement_list: statement_list  */
-#line 3879 "MachineIndependent/glslang.y"
+  case 594: /* switch_statement_list: statement_list  */
+#line 3896 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11328 "MachineIndependent/glslang_tab.cpp"
+#line 11369 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 593: /* case_label: CASE expression COLON  */
-#line 3885 "MachineIndependent/glslang.y"
+  case 595: /* case_label: CASE expression COLON  */
+#line 3902 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -11341,11 +11382,11 @@ yyreduce:
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 11345 "MachineIndependent/glslang_tab.cpp"
+#line 11386 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 594: /* case_label: DEFAULT COLON  */
-#line 3897 "MachineIndependent/glslang.y"
+  case 596: /* case_label: DEFAULT COLON  */
+#line 3914 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -11355,29 +11396,29 @@ yyreduce:
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 11359 "MachineIndependent/glslang_tab.cpp"
+#line 11400 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 595: /* iteration_statement: iteration_statement_nonattributed  */
-#line 3909 "MachineIndependent/glslang.y"
+  case 597: /* iteration_statement: iteration_statement_nonattributed  */
+#line 3926 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11367 "MachineIndependent/glslang_tab.cpp"
+#line 11408 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 596: /* iteration_statement: attribute iteration_statement_nonattributed  */
-#line 3913 "MachineIndependent/glslang.y"
+  case 598: /* iteration_statement: attribute iteration_statement_nonattributed  */
+#line 3930 "MachineIndependent/glslang.y"
                                                   {
         parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11377 "MachineIndependent/glslang_tab.cpp"
+#line 11418 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 597: /* $@10: %empty  */
-#line 3921 "MachineIndependent/glslang.y"
+  case 599: /* $@10: %empty  */
+#line 3938 "MachineIndependent/glslang.y"
                        {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -11386,11 +11427,11 @@ yyreduce:
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11390 "MachineIndependent/glslang_tab.cpp"
+#line 11431 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 598: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope  */
-#line 3929 "MachineIndependent/glslang.y"
+  case 600: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope  */
+#line 3946 "MachineIndependent/glslang.y"
                                                    {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc);
@@ -11398,22 +11439,22 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11402 "MachineIndependent/glslang_tab.cpp"
+#line 11443 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 599: /* $@11: %empty  */
-#line 3936 "MachineIndependent/glslang.y"
+  case 601: /* $@11: %empty  */
+#line 3953 "MachineIndependent/glslang.y"
          {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11413 "MachineIndependent/glslang_tab.cpp"
+#line 11454 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 600: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
-#line 3942 "MachineIndependent/glslang.y"
+  case 602: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
+#line 3959 "MachineIndependent/glslang.y"
                                                                   {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -11426,22 +11467,22 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11430 "MachineIndependent/glslang_tab.cpp"
+#line 11471 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 601: /* $@12: %empty  */
-#line 3954 "MachineIndependent/glslang.y"
+  case 603: /* $@12: %empty  */
+#line 3971 "MachineIndependent/glslang.y"
                      {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11441 "MachineIndependent/glslang_tab.cpp"
+#line 11482 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 602: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope  */
-#line 3960 "MachineIndependent/glslang.y"
+  case 604: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope  */
+#line 3977 "MachineIndependent/glslang.y"
                                                                                {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -11454,81 +11495,81 @@ yyreduce:
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11458 "MachineIndependent/glslang_tab.cpp"
+#line 11499 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 603: /* for_init_statement: expression_statement  */
-#line 3975 "MachineIndependent/glslang.y"
+  case 605: /* for_init_statement: expression_statement  */
+#line 3992 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11466 "MachineIndependent/glslang_tab.cpp"
+#line 11507 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 604: /* for_init_statement: declaration_statement  */
-#line 3978 "MachineIndependent/glslang.y"
+  case 606: /* for_init_statement: declaration_statement  */
+#line 3995 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11474 "MachineIndependent/glslang_tab.cpp"
+#line 11515 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 605: /* conditionopt: condition  */
-#line 3984 "MachineIndependent/glslang.y"
+  case 607: /* conditionopt: condition  */
+#line 4001 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 11482 "MachineIndependent/glslang_tab.cpp"
+#line 11523 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 606: /* conditionopt: %empty  */
-#line 3987 "MachineIndependent/glslang.y"
+  case 608: /* conditionopt: %empty  */
+#line 4004 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 11490 "MachineIndependent/glslang_tab.cpp"
+#line 11531 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 607: /* for_rest_statement: conditionopt SEMICOLON  */
-#line 3993 "MachineIndependent/glslang.y"
+  case 609: /* for_rest_statement: conditionopt SEMICOLON  */
+#line 4010 "MachineIndependent/glslang.y"
                              {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 11499 "MachineIndependent/glslang_tab.cpp"
+#line 11540 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 608: /* for_rest_statement: conditionopt SEMICOLON expression  */
-#line 3997 "MachineIndependent/glslang.y"
+  case 610: /* for_rest_statement: conditionopt SEMICOLON expression  */
+#line 4014 "MachineIndependent/glslang.y"
                                          {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 11508 "MachineIndependent/glslang_tab.cpp"
+#line 11549 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 609: /* jump_statement: CONTINUE SEMICOLON  */
-#line 4004 "MachineIndependent/glslang.y"
+  case 611: /* jump_statement: CONTINUE SEMICOLON  */
+#line 4021 "MachineIndependent/glslang.y"
                          {
         if (parseContext.loopNestingLevel <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
     }
-#line 11518 "MachineIndependent/glslang_tab.cpp"
+#line 11559 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 610: /* jump_statement: BREAK SEMICOLON  */
-#line 4009 "MachineIndependent/glslang.y"
+  case 612: /* jump_statement: BREAK SEMICOLON  */
+#line 4026 "MachineIndependent/glslang.y"
                       {
         if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
             parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
     }
-#line 11528 "MachineIndependent/glslang_tab.cpp"
+#line 11569 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 611: /* jump_statement: RETURN SEMICOLON  */
-#line 4014 "MachineIndependent/glslang.y"
+  case 613: /* jump_statement: RETURN SEMICOLON  */
+#line 4031 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -11536,101 +11577,101 @@ yyreduce:
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 11540 "MachineIndependent/glslang_tab.cpp"
+#line 11581 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 612: /* jump_statement: RETURN expression SEMICOLON  */
-#line 4021 "MachineIndependent/glslang.y"
+  case 614: /* jump_statement: RETURN expression SEMICOLON  */
+#line 4038 "MachineIndependent/glslang.y"
                                   {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 11548 "MachineIndependent/glslang_tab.cpp"
+#line 11589 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 613: /* jump_statement: DISCARD SEMICOLON  */
-#line 4024 "MachineIndependent/glslang.y"
+  case 615: /* jump_statement: DISCARD SEMICOLON  */
+#line 4041 "MachineIndependent/glslang.y"
                         {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 11557 "MachineIndependent/glslang_tab.cpp"
+#line 11598 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 614: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
-#line 4028 "MachineIndependent/glslang.y"
+  case 616: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
+#line 4045 "MachineIndependent/glslang.y"
                                      {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc);
     }
-#line 11566 "MachineIndependent/glslang_tab.cpp"
+#line 11607 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 615: /* jump_statement: TERMINATE_RAY SEMICOLON  */
-#line 4033 "MachineIndependent/glslang.y"
+  case 617: /* jump_statement: TERMINATE_RAY SEMICOLON  */
+#line 4050 "MachineIndependent/glslang.y"
                               {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc);
     }
-#line 11575 "MachineIndependent/glslang_tab.cpp"
+#line 11616 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 616: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
-#line 4037 "MachineIndependent/glslang.y"
+  case 618: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
+#line 4054 "MachineIndependent/glslang.y"
                                     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc);
     }
-#line 11584 "MachineIndependent/glslang_tab.cpp"
+#line 11625 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 617: /* translation_unit: external_declaration  */
-#line 4047 "MachineIndependent/glslang.y"
+  case 619: /* translation_unit: external_declaration  */
+#line 4064 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 11593 "MachineIndependent/glslang_tab.cpp"
+#line 11634 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 618: /* translation_unit: translation_unit external_declaration  */
-#line 4051 "MachineIndependent/glslang.y"
+  case 620: /* translation_unit: translation_unit external_declaration  */
+#line 4068 "MachineIndependent/glslang.y"
                                             {
         if ((yyvsp[0].interm.intermNode) != nullptr) {
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
             parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
         }
     }
-#line 11604 "MachineIndependent/glslang_tab.cpp"
+#line 11645 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 619: /* external_declaration: function_definition  */
-#line 4060 "MachineIndependent/glslang.y"
+  case 621: /* external_declaration: function_definition  */
+#line 4077 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11612 "MachineIndependent/glslang_tab.cpp"
+#line 11653 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 620: /* external_declaration: declaration  */
-#line 4063 "MachineIndependent/glslang.y"
+  case 622: /* external_declaration: declaration  */
+#line 4080 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11620 "MachineIndependent/glslang_tab.cpp"
+#line 11661 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 621: /* external_declaration: SEMICOLON  */
-#line 4067 "MachineIndependent/glslang.y"
+  case 623: /* external_declaration: SEMICOLON  */
+#line 4084 "MachineIndependent/glslang.y"
                 {
         parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
         parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
         (yyval.interm.intermNode) = nullptr;
     }
-#line 11630 "MachineIndependent/glslang_tab.cpp"
+#line 11671 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 622: /* $@13: %empty  */
-#line 4076 "MachineIndependent/glslang.y"
+  case 624: /* $@13: %empty  */
+#line 4093 "MachineIndependent/glslang.y"
                          {
         (yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
         (yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
@@ -11643,11 +11684,11 @@ yyreduce:
             ++parseContext.statementNestingLevel;
         }
     }
-#line 11647 "MachineIndependent/glslang_tab.cpp"
+#line 11688 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 623: /* function_definition: function_prototype $@13 compound_statement_no_new_scope  */
-#line 4088 "MachineIndependent/glslang.y"
+  case 625: /* function_definition: function_prototype $@13 compound_statement_no_new_scope  */
+#line 4105 "MachineIndependent/glslang.y"
                                     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -11674,228 +11715,228 @@ yyreduce:
             --parseContext.statementNestingLevel;
         }
     }
-#line 11678 "MachineIndependent/glslang_tab.cpp"
+#line 11719 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 624: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
-#line 4118 "MachineIndependent/glslang.y"
+  case 626: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
+#line 4135 "MachineIndependent/glslang.y"
                                                                            {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
     }
-#line 11686 "MachineIndependent/glslang_tab.cpp"
+#line 11727 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 625: /* attribute_list: single_attribute  */
-#line 4123 "MachineIndependent/glslang.y"
+  case 627: /* attribute_list: single_attribute  */
+#line 4140 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 11694 "MachineIndependent/glslang_tab.cpp"
+#line 11735 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 626: /* attribute_list: attribute_list COMMA single_attribute  */
-#line 4126 "MachineIndependent/glslang.y"
+  case 628: /* attribute_list: attribute_list COMMA single_attribute  */
+#line 4143 "MachineIndependent/glslang.y"
                                             {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 11702 "MachineIndependent/glslang_tab.cpp"
+#line 11743 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 627: /* single_attribute: IDENTIFIER  */
-#line 4131 "MachineIndependent/glslang.y"
+  case 629: /* single_attribute: IDENTIFIER  */
+#line 4148 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 11710 "MachineIndependent/glslang_tab.cpp"
+#line 11751 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 628: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
-#line 4134 "MachineIndependent/glslang.y"
+  case 630: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
+#line 4151 "MachineIndependent/glslang.y"
                                                             {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 11718 "MachineIndependent/glslang_tab.cpp"
+#line 11759 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 629: /* spirv_requirements_list: spirv_requirements_parameter  */
-#line 4141 "MachineIndependent/glslang.y"
+  case 631: /* spirv_requirements_list: spirv_requirements_parameter  */
+#line 4158 "MachineIndependent/glslang.y"
                                    {
         (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq);
     }
-#line 11726 "MachineIndependent/glslang_tab.cpp"
+#line 11767 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 630: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter  */
-#line 4144 "MachineIndependent/glslang.y"
+  case 632: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter  */
+#line 4161 "MachineIndependent/glslang.y"
                                                                  {
         (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq));
     }
-#line 11734 "MachineIndependent/glslang_tab.cpp"
+#line 11775 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 631: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET  */
-#line 4149 "MachineIndependent/glslang.y"
+  case 633: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET  */
+#line 4166 "MachineIndependent/glslang.y"
                                                                        {
         (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr);
     }
-#line 11742 "MachineIndependent/glslang_tab.cpp"
+#line 11783 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 632: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET  */
-#line 4152 "MachineIndependent/glslang.y"
+  case 634: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET  */
+#line 4169 "MachineIndependent/glslang.y"
                                                                         {
         (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 11750 "MachineIndependent/glslang_tab.cpp"
+#line 11791 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 633: /* spirv_extension_list: STRING_LITERAL  */
-#line 4157 "MachineIndependent/glslang.y"
+  case 635: /* spirv_extension_list: STRING_LITERAL  */
+#line 4174 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 11758 "MachineIndependent/glslang_tab.cpp"
+#line 11799 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 634: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL  */
-#line 4160 "MachineIndependent/glslang.y"
+  case 636: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL  */
+#line 4177 "MachineIndependent/glslang.y"
                                                 {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 11766 "MachineIndependent/glslang_tab.cpp"
+#line 11807 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 635: /* spirv_capability_list: INTCONSTANT  */
-#line 4165 "MachineIndependent/glslang.y"
+  case 637: /* spirv_capability_list: INTCONSTANT  */
+#line 4182 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
     }
-#line 11774 "MachineIndependent/glslang_tab.cpp"
+#line 11815 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 636: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT  */
-#line 4168 "MachineIndependent/glslang.y"
+  case 638: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT  */
+#line 4185 "MachineIndependent/glslang.y"
                                               {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
     }
-#line 11782 "MachineIndependent/glslang_tab.cpp"
+#line 11823 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 637: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4173 "MachineIndependent/glslang.y"
+  case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4190 "MachineIndependent/glslang.y"
                                                               {
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
         (yyval.interm.intermNode) = 0;
     }
-#line 11791 "MachineIndependent/glslang_tab.cpp"
+#line 11832 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 638: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4177 "MachineIndependent/glslang.y"
+  case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4194 "MachineIndependent/glslang.y"
                                                                                             {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
         (yyval.interm.intermNode) = 0;
     }
-#line 11801 "MachineIndependent/glslang_tab.cpp"
+#line 11842 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
-#line 4182 "MachineIndependent/glslang.y"
+  case 641: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
+#line 4199 "MachineIndependent/glslang.y"
                                                                                                         {
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11810 "MachineIndependent/glslang_tab.cpp"
+#line 11851 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
-#line 4186 "MachineIndependent/glslang.y"
+  case 642: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
+#line 4203 "MachineIndependent/glslang.y"
                                                                                                                                       {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11820 "MachineIndependent/glslang_tab.cpp"
+#line 11861 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 641: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
-#line 4191 "MachineIndependent/glslang.y"
+  case 643: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
+#line 4208 "MachineIndependent/glslang.y"
                                                                                                               {
         parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11829 "MachineIndependent/glslang_tab.cpp"
+#line 11870 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 642: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
-#line 4195 "MachineIndependent/glslang.y"
+  case 644: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
+#line 4212 "MachineIndependent/glslang.y"
                                                                                                                                             {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11839 "MachineIndependent/glslang_tab.cpp"
+#line 11880 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 643: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter  */
-#line 4202 "MachineIndependent/glslang.y"
+  case 645: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter  */
+#line 4219 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
     }
-#line 11847 "MachineIndependent/glslang_tab.cpp"
+#line 11888 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 644: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter  */
-#line 4205 "MachineIndependent/glslang.y"
+  case 646: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter  */
+#line 4222 "MachineIndependent/glslang.y"
                                                                                {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 11855 "MachineIndependent/glslang_tab.cpp"
+#line 11896 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 645: /* spirv_execution_mode_parameter: FLOATCONSTANT  */
-#line 4210 "MachineIndependent/glslang.y"
+  case 647: /* spirv_execution_mode_parameter: FLOATCONSTANT  */
+#line 4227 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 11863 "MachineIndependent/glslang_tab.cpp"
+#line 11904 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 646: /* spirv_execution_mode_parameter: INTCONSTANT  */
-#line 4213 "MachineIndependent/glslang.y"
+  case 648: /* spirv_execution_mode_parameter: INTCONSTANT  */
+#line 4230 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 11871 "MachineIndependent/glslang_tab.cpp"
+#line 11912 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 647: /* spirv_execution_mode_parameter: UINTCONSTANT  */
-#line 4216 "MachineIndependent/glslang.y"
+  case 649: /* spirv_execution_mode_parameter: UINTCONSTANT  */
+#line 4233 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 11879 "MachineIndependent/glslang_tab.cpp"
+#line 11920 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 648: /* spirv_execution_mode_parameter: BOOLCONSTANT  */
-#line 4219 "MachineIndependent/glslang.y"
+  case 650: /* spirv_execution_mode_parameter: BOOLCONSTANT  */
+#line 4236 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 11887 "MachineIndependent/glslang_tab.cpp"
+#line 11928 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 649: /* spirv_execution_mode_parameter: STRING_LITERAL  */
-#line 4222 "MachineIndependent/glslang.y"
+  case 651: /* spirv_execution_mode_parameter: STRING_LITERAL  */
+#line 4239 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 11895 "MachineIndependent/glslang_tab.cpp"
+#line 11936 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 650: /* spirv_execution_mode_id_parameter_list: constant_expression  */
-#line 4227 "MachineIndependent/glslang.y"
+  case 652: /* spirv_execution_mode_id_parameter_list: constant_expression  */
+#line 4244 "MachineIndependent/glslang.y"
                           {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -11905,11 +11946,11 @@ yyreduce:
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode));
     }
-#line 11909 "MachineIndependent/glslang_tab.cpp"
+#line 11950 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 651: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression  */
-#line 4236 "MachineIndependent/glslang.y"
+  case 653: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression  */
+#line 4253 "MachineIndependent/glslang.y"
                                                                        {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -11919,156 +11960,156 @@ yyreduce:
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 11923 "MachineIndependent/glslang_tab.cpp"
+#line 11964 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 652: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4247 "MachineIndependent/glslang.y"
+  case 654: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4264 "MachineIndependent/glslang.y"
                                                              {
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass;
         (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i;
     }
-#line 11933 "MachineIndependent/glslang_tab.cpp"
+#line 11974 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 653: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4252 "MachineIndependent/glslang.y"
+  case 655: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4269 "MachineIndependent/glslang.y"
                                                                                            {
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass;
         (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i;
     }
-#line 11944 "MachineIndependent/glslang_tab.cpp"
+#line 11985 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 654: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4260 "MachineIndependent/glslang.y"
+  case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4277 "MachineIndependent/glslang.y"
                                                        {
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
         (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
     }
-#line 11953 "MachineIndependent/glslang_tab.cpp"
+#line 11994 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 655: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4264 "MachineIndependent/glslang.y"
+  case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4281 "MachineIndependent/glslang.y"
                                                                                      {
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
     }
-#line 11963 "MachineIndependent/glslang_tab.cpp"
+#line 12004 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
-#line 4269 "MachineIndependent/glslang.y"
+  case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
+#line 4286 "MachineIndependent/glslang.y"
                                                                                             {
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 11972 "MachineIndependent/glslang_tab.cpp"
+#line 12013 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
-#line 4273 "MachineIndependent/glslang.y"
+  case 659: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
+#line 4290 "MachineIndependent/glslang.y"
                                                                                                                           {
         (yyval.interm.type).init((yyvsp[-7].lex).loc);
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 11982 "MachineIndependent/glslang_tab.cpp"
+#line 12023 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
-#line 4278 "MachineIndependent/glslang.y"
+  case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
+#line 4295 "MachineIndependent/glslang.y"
                                                                                                   {
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 11991 "MachineIndependent/glslang_tab.cpp"
+#line 12032 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 659: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
-#line 4282 "MachineIndependent/glslang.y"
+  case 661: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
+#line 4299 "MachineIndependent/glslang.y"
                                                                                                                                 {
         (yyval.interm.type).init((yyvsp[-7].lex).loc);
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 12001 "MachineIndependent/glslang_tab.cpp"
+#line 12042 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
-#line 4287 "MachineIndependent/glslang.y"
+  case 662: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
+#line 4304 "MachineIndependent/glslang.y"
                                                                                                           {
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 12010 "MachineIndependent/glslang_tab.cpp"
+#line 12051 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 661: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
-#line 4291 "MachineIndependent/glslang.y"
+  case 663: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
+#line 4308 "MachineIndependent/glslang.y"
                                                                                                                                         {
         (yyval.interm.type).init((yyvsp[-7].lex).loc);
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 12020 "MachineIndependent/glslang_tab.cpp"
+#line 12061 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 662: /* spirv_decorate_parameter_list: spirv_decorate_parameter  */
-#line 4298 "MachineIndependent/glslang.y"
+  case 664: /* spirv_decorate_parameter_list: spirv_decorate_parameter  */
+#line 4315 "MachineIndependent/glslang.y"
                                {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
     }
-#line 12028 "MachineIndependent/glslang_tab.cpp"
+#line 12069 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 663: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter  */
-#line 4301 "MachineIndependent/glslang.y"
+  case 665: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter  */
+#line 4318 "MachineIndependent/glslang.y"
                                                                    {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 12036 "MachineIndependent/glslang_tab.cpp"
+#line 12077 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 664: /* spirv_decorate_parameter: FLOATCONSTANT  */
-#line 4306 "MachineIndependent/glslang.y"
+  case 666: /* spirv_decorate_parameter: FLOATCONSTANT  */
+#line 4323 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 12044 "MachineIndependent/glslang_tab.cpp"
+#line 12085 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 665: /* spirv_decorate_parameter: INTCONSTANT  */
-#line 4309 "MachineIndependent/glslang.y"
+  case 667: /* spirv_decorate_parameter: INTCONSTANT  */
+#line 4326 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 12052 "MachineIndependent/glslang_tab.cpp"
+#line 12093 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 666: /* spirv_decorate_parameter: UINTCONSTANT  */
-#line 4312 "MachineIndependent/glslang.y"
+  case 668: /* spirv_decorate_parameter: UINTCONSTANT  */
+#line 4329 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 12060 "MachineIndependent/glslang_tab.cpp"
+#line 12101 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 667: /* spirv_decorate_parameter: BOOLCONSTANT  */
-#line 4315 "MachineIndependent/glslang.y"
+  case 669: /* spirv_decorate_parameter: BOOLCONSTANT  */
+#line 4332 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 12068 "MachineIndependent/glslang_tab.cpp"
+#line 12109 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 668: /* spirv_decorate_id_parameter_list: constant_expression  */
-#line 4320 "MachineIndependent/glslang.y"
+  case 670: /* spirv_decorate_id_parameter_list: constant_expression  */
+#line 4337 "MachineIndependent/glslang.y"
                           {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -12077,11 +12118,11 @@ yyreduce:
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode));
     }
-#line 12081 "MachineIndependent/glslang_tab.cpp"
+#line 12122 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 669: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA constant_expression  */
-#line 4328 "MachineIndependent/glslang.y"
+  case 671: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA constant_expression  */
+#line 4345 "MachineIndependent/glslang.y"
                                                                  {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -12090,139 +12131,139 @@ yyreduce:
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 12094 "MachineIndependent/glslang_tab.cpp"
+#line 12135 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 670: /* spirv_decorate_string_parameter_list: STRING_LITERAL  */
-#line 4338 "MachineIndependent/glslang.y"
+  case 672: /* spirv_decorate_string_parameter_list: STRING_LITERAL  */
+#line 4355 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(
             parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 12103 "MachineIndependent/glslang_tab.cpp"
+#line 12144 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 671: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL  */
-#line 4342 "MachineIndependent/glslang.y"
+  case 673: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL  */
+#line 4359 "MachineIndependent/glslang.y"
                                                                 {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 12111 "MachineIndependent/glslang_tab.cpp"
+#line 12152 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 672: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
-#line 4347 "MachineIndependent/glslang.y"
+  case 674: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
+#line 4364 "MachineIndependent/glslang.y"
                                                                                                          {
         (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams));
     }
-#line 12120 "MachineIndependent/glslang_tab.cpp"
+#line 12161 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 673: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
-#line 4351 "MachineIndependent/glslang.y"
+  case 675: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
+#line 4368 "MachineIndependent/glslang.y"
                                                                                                                                        {
         (yyval.interm.type).init((yyvsp[-7].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams));
     }
-#line 12130 "MachineIndependent/glslang_tab.cpp"
+#line 12171 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 674: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4356 "MachineIndependent/glslang.y"
+  case 676: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4373 "MachineIndependent/glslang.y"
                                                                          {
         (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
     }
-#line 12139 "MachineIndependent/glslang_tab.cpp"
+#line 12180 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 675: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4360 "MachineIndependent/glslang.y"
+  case 677: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4377 "MachineIndependent/glslang.y"
                                                                                                        {
         (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
     }
-#line 12149 "MachineIndependent/glslang_tab.cpp"
+#line 12190 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 676: /* spirv_type_parameter_list: spirv_type_parameter  */
-#line 4367 "MachineIndependent/glslang.y"
+  case 678: /* spirv_type_parameter_list: spirv_type_parameter  */
+#line 4384 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams);
     }
-#line 12157 "MachineIndependent/glslang_tab.cpp"
+#line 12198 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 677: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter  */
-#line 4370 "MachineIndependent/glslang.y"
+  case 679: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter  */
+#line 4387 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams));
     }
-#line 12165 "MachineIndependent/glslang_tab.cpp"
+#line 12206 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 678: /* spirv_type_parameter: constant_expression  */
-#line 4375 "MachineIndependent/glslang.y"
+  case 680: /* spirv_type_parameter: constant_expression  */
+#line 4392 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion());
     }
-#line 12173 "MachineIndependent/glslang_tab.cpp"
+#line 12214 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4380 "MachineIndependent/glslang.y"
+  case 681: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4397 "MachineIndependent/glslang.y"
                                                                                 {
         (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
     }
-#line 12181 "MachineIndependent/glslang_tab.cpp"
+#line 12222 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 680: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4383 "MachineIndependent/glslang.y"
+  case 682: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4400 "MachineIndependent/glslang.y"
                                                                                                               {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
     }
-#line 12190 "MachineIndependent/glslang_tab.cpp"
+#line 12231 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
-#line 4389 "MachineIndependent/glslang.y"
+  case 683: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
+#line 4406 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst);
     }
-#line 12198 "MachineIndependent/glslang_tab.cpp"
+#line 12239 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 682: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
-#line 4392 "MachineIndependent/glslang.y"
+  case 684: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
+#line 4409 "MachineIndependent/glslang.y"
                                                                             {
         (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst));
     }
-#line 12206 "MachineIndependent/glslang_tab.cpp"
+#line 12247 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
-#line 4397 "MachineIndependent/glslang.y"
+  case 685: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
+#line 4414 "MachineIndependent/glslang.y"
                                       {
         (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string);
     }
-#line 12214 "MachineIndependent/glslang_tab.cpp"
+#line 12255 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 684: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
-#line 4400 "MachineIndependent/glslang.y"
+  case 686: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
+#line 4417 "MachineIndependent/glslang.y"
                                    {
         (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i);
     }
-#line 12222 "MachineIndependent/glslang_tab.cpp"
+#line 12263 "MachineIndependent/glslang_tab.cpp"
     break;
 
 
-#line 12226 "MachineIndependent/glslang_tab.cpp"
+#line 12267 "MachineIndependent/glslang_tab.cpp"
 
       default: break;
     }
@@ -12447,5 +12488,5 @@ yyreturn:
   return yyresult;
 }
 
-#line 4405 "MachineIndependent/glslang.y"
+#line 4422 "MachineIndependent/glslang.y"
 
index a6871b3..18cef46 100644 (file)
@@ -506,7 +506,9 @@ extern int yydebug;
     PERPRIMITIVENV = 707,          /* PERPRIMITIVENV  */
     PERVIEWNV = 708,               /* PERVIEWNV  */
     PERTASKNV = 709,               /* PERTASKNV  */
-    PRECISE = 710                  /* PRECISE  */
+    PERPRIMITIVEEXT = 710,         /* PERPRIMITIVEEXT  */
+    TASKPAYLOADWORKGROUPEXT = 711, /* TASKPAYLOADWORKGROUPEXT  */
+    PRECISE = 712                  /* PRECISE  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -554,7 +556,7 @@ union YYSTYPE
         glslang::TArraySizes* typeParameters;
     } interm;
 
-#line 558 "MachineIndependent/glslang_tab.cpp.h"
+#line 560 "MachineIndependent/glslang_tab.cpp.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
index d8a3aab..173a012 100644 (file)
@@ -1068,6 +1068,8 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
     case EOpExecuteCallableNV:                out.debug << "executeCallableNV"; break;
     case EOpExecuteCallableKHR:               out.debug << "executeCallableKHR"; break;
     case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break;
+    case EOpEmitMeshTasksEXT:                 out.debug << "EmitMeshTasksEXT"; break;
+    case EOpSetMeshOutputsEXT:                out.debug << "SetMeshOutputsEXT"; break;
 
     case EOpRayQueryInitialize:                                            out.debug << "rayQueryInitializeEXT"; break;
     case EOpRayQueryTerminate:                                             out.debug << "rayQueryTerminateEXT"; break;
@@ -1522,12 +1524,12 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree)
             infoSink.debug << "interlock ordering = " << TQualifier::getInterlockOrderingString(interlockOrdering) << "\n";
         break;
 
-    case EShLangMeshNV:
+    case EShLangMesh:
         infoSink.debug << "max_vertices = " << vertices << "\n";
         infoSink.debug << "max_primitives = " << primitives << "\n";
         infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n";
         // Fall through
-    case EShLangTaskNV:
+    case EShLangTask:
         // Fall through
     case EShLangCompute:
         infoSink.debug << "local_size = (" << localSize[0] << ", " << localSize[1] << ", " << localSize[2] << ")\n";
index 6e60155..fdb2dfd 100644 (file)
@@ -120,7 +120,7 @@ void TIntermediate::mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit
 }
 
 //
-// do error checking on the shader boundary in / out vars 
+// do error checking on the shader boundary in / out vars
 //
 void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit) {
     if (unit.treeRoot == nullptr || treeRoot == nullptr)
@@ -212,7 +212,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
     if (vertices == TQualifier::layoutNotSet)
         vertices = unit.vertices;
     else if (unit.vertices != TQualifier::layoutNotSet && vertices != unit.vertices) {
-        if (language == EShLangGeometry || language == EShLangMeshNV)
+        if (language == EShLangGeometry || language == EShLangMesh)
             error(infoSink, "Contradictory layout max_vertices values");
         else if (language == EShLangTessControl)
             error(infoSink, "Contradictory layout vertices values");
@@ -222,7 +222,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
     if (primitives == TQualifier::layoutNotSet)
         primitives = unit.primitives;
     else if (primitives != unit.primitives) {
-        if (language == EShLangMeshNV)
+        if (language == EShLangMesh)
             error(infoSink, "Contradictory layout max_primitives values");
         else
             assert(0);
@@ -692,7 +692,7 @@ void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* bl
     TMergeBlockTraverser finalLinkTraverser(block);
     getTreeRoot()->traverse(&finalLinkTraverser);
 
-    // The 'unit' intermediate needs the block structures update, but also structure entry indices 
+    // The 'unit' intermediate needs the block structures update, but also structure entry indices
     // may have changed from the old block to the new one that it was merged into, so update those
     // in 'visitBinary'
     TType unitType;
@@ -1012,7 +1012,7 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy
     }
 
     // Auxiliary and interpolation...
-    // "interpolation qualification (e.g., flat) and auxiliary qualification (e.g. centroid) may differ.  
+    // "interpolation qualification (e.g., flat) and auxiliary qualification (e.g. centroid) may differ.
     //  These mismatches are allowed between any pair of stages ...
     //  those provided in the fragment shader supersede those provided in previous stages."
     if (!crossStage &&
@@ -1294,8 +1294,8 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
             error(infoSink, "At least one shader must specify a layout(max_vertices = value)");
         break;
     case EShLangFragment:
-        // for GL_ARB_post_depth_coverage, EarlyFragmentTest is set automatically in 
-        // ParseHelper.cpp. So if we reach here, this must be GL_EXT_post_depth_coverage 
+        // for GL_ARB_post_depth_coverage, EarlyFragmentTest is set automatically in
+        // ParseHelper.cpp. So if we reach here, this must be GL_EXT_post_depth_coverage
         // requiring explicit early_fragment_tests
         if (getPostDepthCoverage() && !getEarlyFragmentTests())
             error(infoSink, "post_depth_coverage requires early_fragment_tests");
@@ -1312,7 +1312,7 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
         if (numShaderRecordBlocks > 1)
             error(infoSink, "Only one shaderRecordNV buffer block is allowed per stage");
         break;
-    case EShLangMeshNV:
+    case EShLangMesh:
         // NV_mesh_shader doesn't allow use of both single-view and per-view builtins.
         if (inIoAccessed("gl_Position") && inIoAccessed("gl_PositionPerViewNV"))
             error(infoSink, "Can only use one of gl_Position or gl_PositionPerViewNV");
@@ -1331,9 +1331,11 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled)
         if (primitives == TQualifier::layoutNotSet)
             error(infoSink, "At least one shader must specify a layout(max_primitives = value)");
         // fall through
-    case EShLangTaskNV:
+    case EShLangTask:
         if (numTaskNVBlocks > 1)
             error(infoSink, "Only one taskNV interface block is allowed per shader");
+        if (numTaskEXTPayloads > 1)
+            error(infoSink, "Only single variable of type taskPayloadSharedEXT is allowed per shader");
         sharedBlockCheck(infoSink);
         break;
     default:
@@ -2226,7 +2228,7 @@ int TIntermediate::getScalarAlignment(const TType& type, int& size, int& stride,
 
     if (type.isVector()) {
         int scalarAlign = getBaseAlignmentScalar(type, size);
-        
+
         size *= type.getVectorSize();
         return scalarAlign;
     }
@@ -2247,7 +2249,7 @@ int TIntermediate::getScalarAlignment(const TType& type, int& size, int& stride,
 
     assert(0);  // all cases should be covered above
     size = 1;
-    return 1;    
+    return 1;
 }
 
 int TIntermediate::getMemberAlignment(const TType& type, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor)
@@ -2338,7 +2340,7 @@ bool TIntermediate::isIoResizeArray(const TType& type, EShLanguage language) {
             (language == EShLangTessEvaluation && type.getQualifier().storage == EvqVaryingIn) ||
             (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&
              (type.getQualifier().pervertexNV || type.getQualifier().pervertexEXT)) ||
-            (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut &&
+            (language == EShLangMesh && type.getQualifier().storage == EvqVaryingOut &&
                 !type.getQualifier().perTaskNV));
 }
 #endif // not GLSLANG_WEB
index ddeaa35..0d4945c 100644 (file)
@@ -322,6 +322,7 @@ public:
         primitives(TQualifier::layoutNotSet),
         numTaskNVBlocks(0),
         layoutPrimitiveCulling(false),
+        numTaskEXTPayloads(0),
         autoMapBindings(false),
         autoMapLocations(false),
         flattenUniformArrays(false),
@@ -639,6 +640,7 @@ public:
     int getNumPushConstants() const { return 0; }
     void addShaderRecordCount() { }
     void addTaskNVCount() { }
+    void addTaskPayloadEXTCount() { }
     void setUseVulkanMemoryModel() { }
     bool usingVulkanMemoryModel() const { return false; }
     bool usingPhysicalStorageBuffer() const { return false; }
@@ -756,6 +758,7 @@ public:
     int getNumPushConstants() const { return numPushConstants; }
     void addShaderRecordCount() { ++numShaderRecordBlocks; }
     void addTaskNVCount() { ++numTaskNVBlocks; }
+    void addTaskPayloadEXTCount() { ++numTaskEXTPayloads; }
 
     bool setInvocations(int i)
     {
@@ -1160,6 +1163,7 @@ protected:
     int primitives;
     int numTaskNVBlocks;
     bool layoutPrimitiveCulling;
+    int numTaskEXTPayloads;
 
     // Base shift values
     std::array<unsigned int, EResCount> shiftBinding;
index e44339d..992db21 100644 (file)
@@ -108,8 +108,10 @@ typedef enum {
     EShLangMissNV = EShLangMiss,
     EShLangCallable,
     EShLangCallableNV = EShLangCallable,
-    EShLangTaskNV,
-    EShLangMeshNV,
+    EShLangTask,
+    EShLangTaskNV = EShLangTask,
+    EShLangMesh,
+    EShLangMeshNV = EShLangMesh,
     LAST_ELEMENT_MARKER(EShLangCount),
 } EShLanguage;         // would be better as stage, but this is ancient now
 
@@ -132,8 +134,10 @@ typedef enum : unsigned {
     EShLangMissNVMask         = EShLangMissMask,
     EShLangCallableMask       = (1 << EShLangCallable),
     EShLangCallableNVMask     = EShLangCallableMask,
-    EShLangTaskNVMask         = (1 << EShLangTaskNV),
-    EShLangMeshNVMask         = (1 << EShLangMeshNV),
+    EShLangTaskMask           = (1 << EShLangTask),
+    EShLangTaskNVMask         = EShLangTaskMask,
+    EShLangMeshMask           = (1 << EShLangMesh),
+    EShLangMeshNVMask         = EShLangMeshMask,
     LAST_ELEMENT_MARKER(EShLanguageMaskCount),
 } EShLanguageMask;
 
index 5d60ccd..0f3cd0c 100644 (file)
@@ -630,6 +630,17 @@ INSTANTIATE_TEST_SUITE_P(
         "spv.WorkgroupMemoryExplicitLayout.std140.comp",
         "spv.WorkgroupMemoryExplicitLayout.std430.comp",
         "spv.WorkgroupMemoryExplicitLayout.scalar.comp",
+
+        // SPV_EXT_mesh_shader
+        "spv.ext.meshShaderBuiltins.mesh",
+        "spv.ext.meshShaderRedeclBuiltins.mesh",
+        "spv.ext.meshShaderTaskMem.mesh",
+        "spv.ext.meshShaderUserDefined.mesh",
+        "spv.ext.meshTaskShader.task",
+        "spv.atomiAddEXT.error.mesh",
+        "spv.atomiAddEXT.task",
+        "spv.460.subgroupEXT.task",
+        "spv.460.subgroupEXT.mesh",
     })),
     FileNameAsCustomTestSuffix
 );
index ced6fcc..4c935f8 100644 (file)
@@ -73,9 +73,9 @@ EShLanguage GetShaderStage(const std::string& stage)
     } else if (stage == "rcall") {
         return EShLangCallable;
     } else if (stage == "task") {
-        return EShLangTaskNV;
+        return EShLangTask;
     } else if (stage == "mesh") {
-        return EShLangMeshNV;
+        return EShLangMesh;
     } else {
         assert(0 && "Unknown shader stage");
         return EShLangCount;
index 1a3202d..2f96575 100644 (file)
@@ -5,14 +5,14 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "5e61ea2098220059e89523f1f47b0bcd8c33b89a"
+      "commit" : "4c456f7da67c5437a6fb7d4d20d78e2a5ae2acf2"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "b2a156e1c0434bc8c99aaebba1c7be98be7ac580"
+      "commit" : "87d5b782bec60822aa878941e6b13c0a9a954c9b"
     }
   ]
 }