diff --git a/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h b/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h index bed1f0704..0a96a3e57 100644 --- a/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h +++ b/3rdparty/glslang/SPIRV/GLSL.ext.EXT.h @@ -45,5 +45,8 @@ static const char* const E_SPV_EXT_float8 = "SPV_EXT_float8"; static const char* const E_SPV_EXT_shader_64bit_indexing = "SPV_EXT_shader_64bit_indexing"; static const char* const E_SPV_EXT_shader_invocation_reorder = "SPV_EXT_shader_invocation_reorder"; static const char* const E_SPV_EXT_long_vector = "SPV_EXT_long_vector"; +static const char* const E_SPV_EXT_cooperative_matrix_maintenance1 = "SPV_EXT_cooperative_matrix_maintenance1"; +static const char* const E_SPV_EXT_ocp_microscaling_types = "SPV_EXT_ocp_microscaling_types"; +static const char* const E_SPV_EXT_split_barrier = "SPV_EXT_split_barrier"; #endif // #ifndef GLSLextEXT_H diff --git a/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h b/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h index 91412c25d..1c67b4904 100644 --- a/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h +++ b/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h @@ -60,6 +60,7 @@ static const char* const E_SPV_AMD_shader_early_and_late_fragment_tests = "SPV_A static const char* const E_SPV_KHR_ray_tracing_position_fetch = "SPV_KHR_ray_tracing_position_fetch"; static const char* const E_SPV_KHR_cooperative_matrix = "SPV_KHR_cooperative_matrix"; static const char* const E_SPV_KHR_maximal_reconvergence = "SPV_KHR_maximal_reconvergence"; +static const char* const E_SPV_KHR_opacity_micromap = "SPV_KHR_opacity_micromap"; static const char* const E_SPV_KHR_subgroup_rotate = "SPV_KHR_subgroup_rotate"; static const char* const E_SPV_KHR_expect_assume = "SPV_KHR_expect_assume"; static const char* const E_SPV_EXT_replicated_composites = "SPV_EXT_replicated_composites"; diff --git a/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h b/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h index 7633d4079..c85521b18 100644 --- a/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h +++ b/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h @@ -39,6 +39,8 @@ static const int GLSLextQCOMRevision = 1; const char* const E_SPV_QCOM_image_processing = "SPV_QCOM_image_processing"; //SPV_QCOM_image_processing2 const char* const E_SPV_QCOM_image_processing2 = "SPV_QCOM_image_processing2"; +//SPV_QCOM_image_processing3 +const char* const E_SPV_QCOM_image_processing3 = "SPV_QCOM_image_processing3"; //SPV_QCOM_cooperative_matrix_conversion const char* const E_SPV_QCOM_cooperative_matrix_conversion = "SPV_QCOM_cooperative_matrix_conversion"; diff --git a/3rdparty/glslang/SPIRV/GlslangToSpv.cpp b/3rdparty/glslang/SPIRV/GlslangToSpv.cpp index 7c5525dd1..2b1508852 100644 --- a/3rdparty/glslang/SPIRV/GlslangToSpv.cpp +++ b/3rdparty/glslang/SPIRV/GlslangToSpv.cpp @@ -142,6 +142,53 @@ void addDerivativeGroupExecutionMode(spv::Builder& builder, const glslang::TInte } // namespace +class TGlslangToSpvTraverser; + +class DescHeapLayoutEmitter { +public: + explicit DescHeapLayoutEmitter(TGlslangToSpvTraverser& traverser); + + bool isDescriptorPayload(const glslang::TType& type) const; + bool containsDescriptorPayload(const glslang::TType& type) const; + + spv::Id getOrCreateValueSize(const glslang::TType& type); + spv::Id getOrCreateValueAlignment(const glslang::TType& type); + + // Runtime arrays return spv::NoResult for total array size. + spv::Id getOrCreateArraySize(const glslang::TType& arrayType); + spv::Id getOrCreateArrayAlignment(const glslang::TType& arrayType); + std::vector getOrCreateArrayStrides(const glslang::TType& arrayType); + + // Returns OffsetIdEXT operands relative to the struct start. + std::vector getOrCreateStructMemberOffsets(const glslang::TType& structType); + +private: + // compute* does not write TType* caches; it is safe for temporary array element types. + spv::Id computeValueSize(const glslang::TType& type); + spv::Id computeValueAlignment(const glslang::TType& type); + spv::Id getOrCreateStructSize(const glslang::TType& structType); + spv::Id getOrCreateStructAlignment(const glslang::TType& structType); + + spv::Id makeUint(unsigned value); + spv::Id makeSpecOp(spv::Op op, const std::vector& operands); + spv::Id getMemberSize(const glslang::TType& memberType); + spv::Id getMemberAlignment(const glslang::TType& memberType); + + void getInnermostArrayElementType(const glslang::TType& arrayType, glslang::TType& elementType) const; + + TGlslangToSpvTraverser& traverser; + + // TType* caches are only for stable AST/member/symbol types. + std::unordered_map valueSizeCache; + std::unordered_map valueAlignmentCache; + std::unordered_map arraySizeCache; + std::unordered_map arrayAlignmentCache; + std::unordered_map> arrayStridesCache; + std::unordered_map structSizeCache; + std::unordered_map structAlignmentCache; + std::unordered_map> structMemberOffsetsCache; +}; + // // The main holder of information for translating glslang to SPIR-V. // @@ -168,6 +215,8 @@ public: void dumpSpv(std::vector& out); protected: + friend class DescHeapLayoutEmitter; + TGlslangToSpvTraverser(TGlslangToSpvTraverser&); TGlslangToSpvTraverser& operator=(TGlslangToSpvTraverser&); @@ -184,6 +233,7 @@ protected: spv::SelectionControlMask TranslateSelectionControl(const glslang::TIntermSelection&) const; spv::SelectionControlMask TranslateSwitchControl(const glslang::TIntermSwitch&) const; spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, std::vector& operands) const; + spv::FunctionControlMask TranslateFunctionControl(unsigned int) const; spv::StorageClass TranslateStorageClass(const glslang::TType&); void TranslateLiterals(const glslang::TVector&, std::vector&) const; void addIndirectionIndexCapabilities(const glslang::TType& baseType, const glslang::TType& indexType); @@ -200,11 +250,14 @@ protected: spv::Id convertGlslangStructToSpvType(const glslang::TType&, const glslang::TTypeList* glslangStruct, glslang::TLayoutPacking, const glslang::TQualifier&); spv::LinkageType convertGlslangLinkageToSpv(glslang::TLinkType glslangLinkType); - spv::Id decorateDescHeapType(const glslang::TType& type, spv::Id& memberBaseOffset, spv::Id& alignment, - int& maxPlainDataAlignment); + bool isDescHeapDescriptorType(const glslang::TType& type) const; + bool containsDescHeapDescriptorType(const glslang::TType& type) const; + spv::Id makeDescHeapImageArrayWrapperType(const glslang::TIntermSymbol& symbol, spv::Id arrayType); + void decorateStructType(const glslang::TType&, const glslang::TTypeList* glslangStruct, glslang::TLayoutPacking, const glslang::TQualifier&, spv::Id, const std::vector& spvMembers); spv::Id makeArraySizeId(const glslang::TArraySizes&, int dim, bool allowZero = false, bool boolType = false); + spv::Id makeHeapOffsetId(const glslang::TType& type); spv::Id accessChainLoad(const glslang::TType& type); void accessChainStore(const glslang::TType& type, spv::Id rvalue); void multiTypeStore(const glslang::TType&, spv::Id rValue); @@ -239,7 +292,12 @@ protected: spv::Id createUnaryMatrixOperation(spv::Op op, OpDecorations&, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy); spv::Id createConversion(glslang::TOperator op, OpDecorations&, spv::Id destTypeId, spv::Id operand, - glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType); + glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType, + bool sameCoopMatUse = true); + spv::Id createCoopMatConversion(spv::Id destType, spv::Id operand, + glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType, + bool sameUse, bool transpose); + spv::Id createIntWidthConversion(spv::Id operand, int vectorSize, spv::Id destType, glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType); spv::Id makeSmearedConstant(spv::Id constant, int vectorSize); @@ -273,6 +331,7 @@ protected: spv::Id createCompositeConstruct(spv::Id typeId, std::vector constituents); void recordDescHeapAccessChainInfo(glslang::TIntermBinary* node); void createAbortEXT(const glslang::TIntermSequence &glslangOperands); + void enableCoopMatConversions(); glslang::SpvOptions& options; spv::Function* shaderEntry; @@ -280,6 +339,11 @@ protected: spv::Instruction* entryPoint; int sequenceDepth; + // GL_EXT_opacity_micromap_ray_query_mode: the spec constant emitted for gl_EnableOpacityMicromapEXT, + // if it was materialized during traversal; spv::NoResult otherwise. finishSpv() references it (or + // synthesizes one) for the OpacityMicromapIdKHR execution mode. + spv::Id opacityMicromapEnableConstId; + spv::SpvBuildLogger* logger; // There is a 1:1 mapping between a spv builder and a module; this is thread safe @@ -301,10 +365,9 @@ protected: // rather than a pointer std::unordered_map functionMap; std::unordered_map structMap[glslang::ElpCount][glslang::ElmCount]; - // for mapping glslang block indices to spv indices (e.g., due to hidden members): - std::unordered_map> memberRemapper; - // for mapping glslang symbol struct to symbol Id - std::unordered_map glslangTypeToIdMap; + // for mapping glslang block indices to spv indices (e.g., due to hidden members), + // keyed by the block's member list so distinct block types never share a slot: + std::unordered_map> memberRemapper; std::stack breakForLoop; // false means break for switch std::unordered_map counterOriginator; // Map pointee types for EbtReference to their forward pointers @@ -318,15 +381,14 @@ protected: // Used later for generating OpTraceKHR/OpExecuteCallableKHR/OpHitObjectRecordHit*/OpHitObjectGetShaderBindingTableData std::unordered_map locationToSymbol[4]; std::unordered_map > idToQCOMDecorations; - // For nested or inner resource heap structure's alignment and offset records. - typedef struct heapMetaData { - spv::Id typeStride; - spv::Id maxRsrcTypeAlignment; - int maxPlainDataAlignment; - } HeapMetaData; - std::unordered_map heapStructureTypeMetaData; - std::unordered_map heapStructureTypeSize; - std::vector heapStructureMemberOffsets; + + // Descriptor heap root types used as OpUntypedAccessChainKHR base type operands. + std::unordered_map heapDescHeapBaseType; + // Descriptor heap block payload types. Opaque descriptor types are already deduplicated by SpvBuilder. + std::unordered_map heapDescHeapBlockDescriptorTypes; + + DescHeapLayoutEmitter descHeapLayout; + }; // @@ -1373,6 +1435,18 @@ spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSwitchControl(const g return spv::SelectionControlMask::MaskNone; } +spv::FunctionControlMask TGlslangToSpvTraverser::TranslateFunctionControl(unsigned int functionControl) const +{ + spv::FunctionControlMask control = spv::FunctionControlMask::MaskNone; + + if (functionControl & glslang::EfcInline) + control = control | spv::FunctionControlMask::Inline; + if (functionControl & glslang::EfcDontInline) + control = control | spv::FunctionControlMask::DontInline; + + return control; +} + // return a non-0 dependency if the dependency argument must be set spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang::TIntermLoop& loopNode, std::vector& operands) const @@ -1411,6 +1485,10 @@ spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang: operands.push_back(loopNode.getPartialCount()); } } + if (loopNode.getMultipleWaitQueuesQCOM() != loopNode.noMultipleQaitQueues) { + control = control | spv::LoopControlMask::MultipleWaitQueuesQCOM; + operands.push_back(loopNode.getMultipleWaitQueuesQCOM()); + } return control; } @@ -1695,13 +1773,16 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, TIntermTraverser(true, false, true), options(options), shaderEntry(nullptr), currentFunction(nullptr), - sequenceDepth(0), logger(buildLogger), + sequenceDepth(0), + opacityMicromapEnableConstId(spv::NoResult), + logger(buildLogger), builder(spvVersion, (glslang::GetKhronosToolId() << 16) | glslang::GetSpirvGeneratorVersion(), logger), inEntryPoint(false), entryPointTerminated(false), linkageOnly(false), glslangIntermediate(glslangIntermediate), nanMinMaxClamp(glslangIntermediate->getNanMinMaxClamp()), nonSemanticDebugPrintf(0), - taskPayloadID(0) + taskPayloadID(0), + descHeapLayout(*this) { bool isMeshShaderExt = (glslangIntermediate->getRequestedExtensions().find(glslang::E_GL_EXT_mesh_shader) != glslangIntermediate->getRequestedExtensions().end()); @@ -1806,6 +1887,15 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addCapability(spv::Capability::RayTraversalPrimitiveCullingKHR); } + // gl_RayFlagsForceOpacityMicromap2StateEXT was referenced. The SPIR-V RayFlags + // bit ForceOpacityMicromap2StateKHR requires the RayTracingOpacityMicromapEXT + // capability. Emit it here so it applies uniformly to ray-tracing-pipeline + // stages and any stage running ray queries. + if (glslangIntermediate->getUsesOpacityMicromap2StateFlag()) { + builder.addCapability(spv::Capability::RayTracingOpacityMicromapEXT); + builder.addExtension("SPV_EXT_opacity_micromap"); + } + if (glslangIntermediate->getSubgroupUniformControlFlow()) { builder.addExtension(spv::E_SPV_KHR_subgroup_uniform_control_flow); builder.addExecutionMode(shaderEntry, spv::ExecutionMode::SubgroupUniformControlFlowKHR); @@ -1959,7 +2049,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, break; } } - if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6 && needSizeId) { + if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_2 && needSizeId) { std::vector dimConstId; for (int dim = 0; dim < 3; ++dim) { bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); @@ -1967,7 +2057,6 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, if (specConst) { builder.addDecoration(dimConstId.back(), spv::Decoration::SpecId, glslangIntermediate->getLocalSizeSpecId(dim)); - needSizeId = true; } } builder.addExecutionModeId(shaderEntry, spv::ExecutionMode::LocalSizeId, dimConstId); @@ -2074,10 +2163,6 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, case EShLangCallable: { auto& extensions = glslangIntermediate->getRequestedExtensions(); - if (extensions.find("GL_EXT_opacity_micromap") != extensions.end()) { - builder.addCapability(spv::Capability::RayTracingOpacityMicromapEXT); - builder.addExtension("SPV_EXT_opacity_micromap"); - } if (extensions.find("GL_NV_ray_tracing") == extensions.end()) { builder.addCapability(spv::Capability::RayTracingKHR); builder.addExtension("SPV_KHR_ray_tracing"); @@ -2099,7 +2184,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, break; } case EShLangTask: - case EShLangMesh: + case EShLangMesh: { if(isMeshShaderExt) { builder.addCapability(spv::Capability::MeshShadingEXT); builder.addExtension(spv::E_SPV_EXT_mesh_shader); @@ -2107,7 +2192,14 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addCapability(spv::Capability::MeshShadingNV); builder.addExtension(spv::E_SPV_NV_mesh_shader); } - if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { + bool needSizeId = false; + for (int dim = 0; dim < 3; ++dim) { + if ((glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet)) { + needSizeId = true; + break; + } + } + if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_2 && needSizeId) { std::vector dimConstId; for (int dim = 0; dim < 3; ++dim) { bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); @@ -2140,7 +2232,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); } break; - + } default: break; } @@ -2206,6 +2298,30 @@ void TGlslangToSpvTraverser::finishSpv(bool compileOnly) entryPoint->reserveOperands(iOSet.size()); for (auto id : iOSet) entryPoint->addIdOperand(id); + + // GL_EXT_opacity_micromap_ray_query_mode: the OpacityMicromapIdKHR execution mode is emitted + // whenever the extension is enabled (enabling the extension is the declaration), referencing the + // of gl_EnableOpacityMicromapEXT. The operand constant depends on how the built-in was + // (re)declared: a constant_id redeclaration -> OpSpecConstantFalse (decorated with the SpecId); + // 'const bool = true' -> OpConstantTrue; otherwise (default or '= false') -> OpConstantFalse. If + // the built-in was read in the shader its spec constant is reused (opacityMicromapEnableConstId) + // so only one SpecId is emitted. This path targets SPV_KHR_opacity_micromap; the + // ForceOpacityMicromap2State ray flag keeps using SPV_EXT_opacity_micromap for compatibility. + if (glslangIntermediate->IsRequestedExtension(glslang::E_GL_EXT_opacity_micromap_ray_query_mode)) { + spv::Id enableId = opacityMicromapEnableConstId; + if (enableId == spv::NoResult) { + int specId = glslangIntermediate->getEnableOpacityMicromapSpecId(); + if (specId != glslang::TQualifier::layoutNotSet) { + enableId = builder.makeBoolConstant(false, true); + builder.addDecoration(enableId, spv::Decoration::SpecId, specId); + } else { + enableId = builder.makeBoolConstant(glslangIntermediate->getEnableOpacityMicromapDefault(), false); + } + } + builder.addCapability(spv::Capability::RayTracingOpacityMicromapExecutionModeKHR); + builder.addExtension(spv::E_SPV_KHR_opacity_micromap); + builder.addExecutionModeId(shaderEntry, spv::ExecutionMode::OpacityMicromapIdKHR, { enableId }); + } } // Add capabilities, extensions, remove unneeded decorations, etc., @@ -2249,8 +2365,6 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) } SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); - if (symbol->getType().isStruct()) - glslangTypeToIdMap[symbol->getType().getStruct()] = symbol->getId(); if (symbol->getType().getQualifier().isSpecConstant()) spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); @@ -2316,6 +2430,35 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) builder.setAccessChainRValue(id); else builder.setAccessChainLValue(id); + + if (qualifier.builtIn == glslang::EbvResourceHeapEXT || + qualifier.builtIn == glslang::EbvSamplerHeapEXT) { + const glslang::TType& symbolType = symbol->getType(); + // Direct descriptor-heap image arrays have no variable or member to + // carry NonReadable/NonWritable, so wrap them in a one-member block. + const bool wrapDescHeapImageArray = + symbolType.getQualifier().layoutDescriptorHeap && + symbolType.isArray() && + symbolType.isImage() && + (symbolType.getQualifier().isReadOnly() || symbolType.getQualifier().isWriteOnly()); + + if (builder.getAccessChainDescHeapBaseType() == spv::NoResult) { + const long long symbolId = symbol->getId(); + auto cachedBaseType = heapDescHeapBaseType.find(symbolId); + if (cachedBaseType == heapDescHeapBaseType.end()) { + spv::Id baseType = convertGlslangToSpvType(symbolType); + if (wrapDescHeapImageArray) + baseType = makeDescHeapImageArrayWrapperType(*symbol, baseType); + cachedBaseType = heapDescHeapBaseType.emplace(symbolId, baseType).first; + } + builder.setAccessChainDescHeapBaseType(cachedBaseType->second); + } + if (wrapDescHeapImageArray) + builder.accessChainPushDescHeapIndex(builder.makeIntConstant(0)); + spv::Id heapOffset = makeHeapOffsetId(symbolType); + if (heapOffset != spv::NoResult) + builder.setAccessChainDescHeapBaseOffset(heapOffset); + } } #ifdef ENABLE_HLSL @@ -2353,37 +2496,80 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) #endif } +// Create a one-member heap block so image memory qualifiers can be expressed as +// legal member decorations instead of decorating an OpLoad result. +spv::Id TGlslangToSpvTraverser::makeDescHeapImageArrayWrapperType(const glslang::TIntermSymbol& symbol, + spv::Id arrayType) +{ + const glslang::TQualifier& qualifier = symbol.getType().getQualifier(); + spv::Id memberOffset = builder.makeUintConstant(0); + const std::vector members = { arrayType }; + const std::string wrapperName = std::string(symbol.getName().c_str()) + "_heap"; + spv::Id wrapperType = builder.makeStructType(members, {}, wrapperName.c_str(), false); + + builder.addMemberName(wrapperType, 0, symbol.getName().c_str()); + builder.addDecoration(wrapperType, spv::Decoration::Block); + builder.addMemberDecorationIdEXT(wrapperType, 0, spv::Decoration::OffsetIdEXT, {memberOffset}); + + if (qualifier.isReadOnly()) + builder.addMemberDecoration(wrapperType, 0, spv::Decoration::NonWritable); + if (qualifier.isWriteOnly()) + builder.addMemberDecoration(wrapperType, 0, spv::Decoration::NonReadable); + + return wrapperType; +} + // Create new untyped access chain instruction to descriptor heap, based on EXT_descriptor_heap extension. void TGlslangToSpvTraverser::recordDescHeapAccessChainInfo(glslang::TIntermBinary* node) { - // EXT_descriptor_heap - glslang::TType* nodeTy = node->getWritableType().clone(); - // For buffer/structure type, using its basic structure type: - // data ptr will be first loaded into a BufferPointerType before finally gets chained accessed. - if (node->getLeft()->getQualifier().isUniformOrBuffer()) - nodeTy = node->getLeft()->getType().clone(); - if (nodeTy->isArray()) - nodeTy->clearArraySizes(); - spv::BuiltIn bt = spv::BuiltIn::Max; - unsigned int firstArrIndex = 0; - auto rsrcOffsetIdx = builder.isStructureHeapMember(builder.getTypeId(builder.getAccessChain().base), - builder.getAccessChain().indexChain, 0, &bt, &firstArrIndex); - spv::Id remappedBuiltin = bt == spv::BuiltIn::Max ? 0 : builtInVariableIds[unsigned(bt)]; - nodeTy->getQualifier().layoutDescriptorInnerBlock = false; - // Extra dimension is not needed when translate storage and type. Real loading type is based on orignal AST nodes. - builder.setAccessChainDescHeapInfo(TranslateStorageClass(*nodeTy), convertGlslangToSpvType(*nodeTy), - nodeTy->getQualifier().layoutDescriptorStride, rsrcOffsetIdx, remappedBuiltin, firstArrIndex); + // Descriptor heap indexing is represented separately from the normal access chain. + // Move the just-pushed heap index out of indexChain and into descHeapIndexChain. + if (node->getQualifier().layoutDescriptorHeap) { + if (builder.hasAccessChainIndex()) + builder.moveAccessChainIndexToDescHeapIndexChain(); + } + + // Descriptor leaf nodes need the real resource type for later untyped loads. + // Block payload types need explicit caching because SpvBuilder intentionally + // does not deduplicate general OpTypeStruct declarations. + if (node->getQualifier().descriptorHeapDescriptorNode) { + glslang::TType nodeTy; + nodeTy.shallowCopy(node->getType()); + + const bool useLeftDescriptorType = + node->getLeft()->getType().isArray() && + node->getLeft()->getQualifier().isUniformOrBuffer(); + + if (useLeftDescriptorType) + nodeTy.shallowCopy(node->getLeft()->getType()); + + if (nodeTy.isArray()) + nodeTy.clearArraySizes(); + nodeTy.getQualifier().layoutDescriptorHeap = false; + + spv::Id descType = spv::NoResult; + if (nodeTy.isStruct()) { + const glslang::TTypeList* descStruct = nodeTy.getStruct(); + auto cachedDescType = heapDescHeapBlockDescriptorTypes.find(descStruct); + if (cachedDescType == heapDescHeapBlockDescriptorTypes.end()) + cachedDescType = heapDescHeapBlockDescriptorTypes.emplace(descStruct, convertGlslangToSpvType(nodeTy)).first; + descType = cachedDescType->second; + } else { + descType = convertGlslangToSpvType(nodeTy); + } + + spv::StorageClass storageClass = TranslateStorageClass(nodeTy); + if (nodeTy.getBasicType() == glslang::EbtAccStruct) + storageClass = spv::StorageClass::UniformConstant; + + builder.setAccessChainDescHeapDescriptorType(descType, storageClass, nodeTy.getQualifier().isReadOnly(), + nodeTy.getQualifier().isWriteOnly()); + } } bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node) { builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); - if (node->getLeft()->getAsSymbolNode() != nullptr && node->getLeft()->getType().isStruct()) { - glslangTypeToIdMap[node->getLeft()->getType().getStruct()] = node->getLeft()->getAsSymbolNode()->getId(); - } - if (node->getRight()->getAsSymbolNode() != nullptr && node->getRight()->getType().isStruct()) { - glslangTypeToIdMap[node->getRight()->getType().getStruct()] = node->getRight()->getAsSymbolNode()->getId(); - } SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); if (node->getType().getQualifier().isSpecConstant()) @@ -2497,9 +2683,9 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T { // This may be, e.g., an anonymous block-member selection, which generally need // index remapping due to hidden members in anonymous blocks. - long long glslangId = glslangTypeToIdMap[node->getLeft()->getType().getStruct()]; - if (memberRemapper.find(glslangId) != memberRemapper.end()) { - std::vector& remapper = memberRemapper[glslangId]; + const glslang::TTypeList* glslangMembers = node->getLeft()->getType().getStruct(); + if (memberRemapper.find(glslangMembers) != memberRemapper.end()) { + std::vector& remapper = memberRemapper[glslangMembers]; assert(remapper.size() > 0); spvIndex = remapper[glslangIndex]; } @@ -2532,9 +2718,7 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T // EXT_descriptor_heap // Record untyped descriptor heap access info. - if (node->getLeft()->getType().isBuiltIn() && - (node->getLeft()->getQualifier().builtIn == glslang::EbvResourceHeapEXT || - node->getLeft()->getQualifier().builtIn == glslang::EbvSamplerHeapEXT)) { + if (node->getQualifier().layoutDescriptorHeap) { recordDescHeapAccessChainInfo(node); } } @@ -2597,9 +2781,7 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T // EXT_descriptor_heap // Record untyped descriptor heap access info. - if (node->getLeft()->getType().isBuiltIn() && - (node->getLeft()->getQualifier().builtIn == glslang::EbvResourceHeapEXT || - node->getLeft()->getQualifier().builtIn == glslang::EbvSamplerHeapEXT)) { + if (node->getQualifier().layoutDescriptorHeap) { recordDescHeapAccessChainInfo(node); } } @@ -2995,16 +3177,10 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI // it could be a conversion if (! result) { + bool sameUse = !node->getType().isCoopMatKHR() || !node->getOperand()->getAsTyped()->getType().isCoopMatKHR() || + node->getAsTyped()->getType().sameCoopMatUse(node->getOperand()->getAsTyped()->getType()); result = createConversion(node->getOp(), decorations, resultType(), operand, - node->getType().getBasicType(), node->getOperand()->getBasicType()); - if (result) { - if (node->getType().isCoopMatKHR() && node->getOperand()->getAsTyped()->getType().isCoopMatKHR() && - !node->getAsTyped()->getType().sameCoopMatUse(node->getOperand()->getAsTyped()->getType())) { - // Conversions that change use need CapabilityCooperativeMatrixConversionsNV - builder.addCapability(spv::Capability::CooperativeMatrixConversionsNV); - builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); - } - } + node->getType().getBasicType(), node->getOperand()->getBasicType(), sameUse); } // if not, then possibly an operation @@ -3075,6 +3251,16 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI one = builder.makeFloatE5M2Constant(1.0F); else if (node->getBasicType() == glslang::EbtFloatE4M3) one = builder.makeFloatE4M3Constant(1.0F); + else if (node->getBasicType() == glslang::EbtFloatE2M1) + one = builder.makeFloatE2M1Constant(1.0F); + else if (node->getBasicType() == glslang::EbtFloatE3M2) + one = builder.makeFloatE3M2Constant(1.0F); + else if (node->getBasicType() == glslang::EbtFloatE2M3) + one = builder.makeFloatE2M3Constant(1.0F); + else if (node->getBasicType() == glslang::EbtFloatUE8M0) + one = builder.makeFloatUE8M0Constant(1.0F); + else if (node->getBasicType() == glslang::EbtFloatMXINT8) + one = builder.makeFloatMXINT8Constant(1.0F); else if (node->getBasicType() == glslang::EbtInt8 || node->getBasicType() == glslang::EbtUint8) one = builder.makeInt8Constant(1); else if (node->getBasicType() == glslang::EbtInt16 || node->getBasicType() == glslang::EbtUint16) @@ -3272,6 +3458,47 @@ void TGlslangToSpvTraverser::createAbortEXT(const glslang::TIntermSequence &glsl builder.makeStatementTerminator(spv::Op::OpAbortKHR, {structLoadType, messageVar}, "post-abort"); } +spv::Id TGlslangToSpvTraverser::createCoopMatConversion(spv::Id destType, spv::Id operand, glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType, bool sameUse, bool transpose) +{ + spv::Id result; + if (isTypeInt(operandBasicType) && isTypeInt(resultBasicType) && + isTypeUnsignedInt(operandBasicType) != isTypeUnsignedInt(resultBasicType) && + GetNumBits(operandBasicType) != GetNumBits(resultBasicType)) { + + // OpSConvert/OpUConvert + OpBitCast + operand = createIntWidthConversion(operand, 0, destType, resultBasicType, operandBasicType); + operandBasicType = resultBasicType; + if (transpose) { + builder.addDecoration(operand, spv::Decoration::CooperativeMatrixTransposeEXT); + } + return builder.createUnaryOp(spv::Op::OpBitcast, destType, operand); + } + if (isTypeFloat(operandBasicType) && isTypeFloat(resultBasicType) && + operandBasicType != resultBasicType) { + result = builder.createUnaryOp(spv::Op::OpFConvert, destType, operand); + } else if (isTypeSignedInt(operandBasicType) && isTypeFloat(resultBasicType)) { + result = builder.createUnaryOp(spv::Op::OpConvertSToF, destType, operand); + } else if (isTypeUnsignedInt(operandBasicType) && isTypeFloat(resultBasicType)) { + result = builder.createUnaryOp(spv::Op::OpConvertUToF, destType, operand); + } else if (isTypeFloat(operandBasicType) && isTypeSignedInt(resultBasicType)) { + result = builder.createUnaryOp(spv::Op::OpConvertFToS, destType, operand); + } else if (isTypeFloat(operandBasicType) && isTypeUnsignedInt(resultBasicType)) { + result = builder.createUnaryOp(spv::Op::OpConvertFToU, destType, operand); + } else if (isTypeSignedInt(resultBasicType) && GetNumBits(operandBasicType) != GetNumBits(resultBasicType)) { + result = builder.createUnaryOp(spv::Op::OpSConvert, destType, operand); + } else if (isTypeUnsignedInt(resultBasicType) && GetNumBits(operandBasicType) != GetNumBits(resultBasicType)) { + result = builder.createUnaryOp(spv::Op::OpUConvert, destType, operand); + } else if (!sameUse) { + result = builder.createUnaryOp(spv::Op::OpCooperativeMatrixConvertUseEXT, destType, operand); + } else { + result = builder.createUnaryOp(spv::Op::OpBitcast, destType, operand); + } + if (transpose) { + builder.addDecoration(result, spv::Decoration::CooperativeMatrixTransposeEXT); + } + return result; +} + bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TIntermAggregate* node) { SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); @@ -3522,6 +3749,26 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpConstructFloatE4M3Vec2: case glslang::EOpConstructFloatE4M3Vec3: case glslang::EOpConstructFloatE4M3Vec4: + case glslang::EOpConstructFloatE2M1: + case glslang::EOpConstructFloatE2M1Vec2: + case glslang::EOpConstructFloatE2M1Vec3: + case glslang::EOpConstructFloatE2M1Vec4: + case glslang::EOpConstructFloatE3M2: + case glslang::EOpConstructFloatE3M2Vec2: + case glslang::EOpConstructFloatE3M2Vec3: + case glslang::EOpConstructFloatE3M2Vec4: + case glslang::EOpConstructFloatE2M3: + case glslang::EOpConstructFloatE2M3Vec2: + case glslang::EOpConstructFloatE2M3Vec3: + case glslang::EOpConstructFloatE2M3Vec4: + case glslang::EOpConstructFloatUE8M0: + case glslang::EOpConstructFloatUE8M0Vec2: + case glslang::EOpConstructFloatUE8M0Vec3: + case glslang::EOpConstructFloatUE8M0Vec4: + case glslang::EOpConstructFloatMXINT8: + case glslang::EOpConstructFloatMXINT8Vec2: + case glslang::EOpConstructFloatMXINT8Vec3: + case glslang::EOpConstructFloatMXINT8Vec4: case glslang::EOpConstructBool: case glslang::EOpConstructBVec2: case glslang::EOpConstructBVec3: @@ -3583,8 +3830,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt } else if (node->getOp() == glslang::EOpConstructCooperativeMatrixKHR && node->getType().isCoopMatKHR() && node->getSequence()[0]->getAsTyped()->getType().isCoopMatKHR() && !node->getAsTyped()->getType().sameCoopMatUse(node->getSequence()[0]->getAsTyped()->getType())) { - builder.addCapability(spv::Capability::CooperativeMatrixConversionsNV); - builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); + enableCoopMatConversions(); constructed = builder.createCooperativeMatrixConversion(resultType(), arguments[0]); } else if (node->getType().isCoopVecOrLongVector() && arguments.size() == 1 && @@ -3608,8 +3854,13 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt TranslateNoContractionDecoration(node->getType().getQualifier()), TranslateNonUniformDecoration(lvalueCoherentFlags) }; + auto operand = node->getSequence()[1]->getAsTyped(); + + bool sameUse = !node->getType().isCoopMatKHR() || !operand->getType().isCoopMatKHR() || + node->getAsTyped()->getType().sameCoopMatUse(operand->getType()); + constructed = createConversion(node->getOp(), decorations, resultType(), arguments[1], - node->getType().getBasicType(), node->getSequence()[1]->getAsTyped()->getBasicType()); + node->getType().getBasicType(), operand->getBasicType(), sameUse); builder.addDecoration(constructed, spv::Decoration::SaturatedToLargestFloat8NormalConversionEXT); builder.createStore(constructed, arguments[0]); } @@ -3677,6 +3928,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpEmitVertex: case glslang::EOpEndPrimitive: case glslang::EOpBarrier: + case glslang::EOpControlBarrierArriveEXT: + case glslang::EOpControlBarrierWaitEXT: case glslang::EOpMemoryBarrier: case glslang::EOpMemoryBarrierAtomicCounter: case glslang::EOpMemoryBarrierBuffer: @@ -3971,6 +4224,11 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt builder.addCapability(spv::Capability::RayTracingClusterAccelerationStructureNV); break; + case glslang::EOpCooperativeMatrixGetCoordinateEXT: + builder.addExtension(spv::E_SPV_EXT_cooperative_matrix_maintenance1); + builder.addCapability(spv::Capability::CooperativeMatrixGetCoordinateEXT); + break; + case glslang::EOpDebugPrintf: noReturnValue = true; break; @@ -4367,6 +4625,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt const int set = glslangOp == glslang::EOpExecuteCallableKHR ? 1 : 0; const int location = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getUConst(); auto itNode = locationToSymbol[set].find(location); + if (itNode == locationToSymbol[set].end()) { + logger->missingFunctionality("ray tracing location with no matching payload/callable data declaration"); + break; + } visitSymbol(itNode->second); spv::Id symId = getSymbolId(itNode->second); operands.push_back(symId); @@ -4380,6 +4642,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt const int location = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getUConst(); const int set = 2; auto itNode = locationToSymbol[set].find(location); + if (itNode == locationToSymbol[set].end()) { + logger->missingFunctionality("ray tracing location with no matching hit object attribute declaration"); + break; + } visitSymbol(itNode->second); spv::Id symId = getSymbolId(itNode->second); operands.push_back(symId); @@ -4647,8 +4913,13 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt result = builder.createOp(spv::Op::OpCooperativeMatrixMulAddKHR, resultType(), idImmOps); } else if (node->getOp() == glslang::EOpCooperativeMatrixReduceNV) { - builder.addCapability(spv::Capability::CooperativeMatrixReductionsNV); - builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); + if (glslangIntermediate->usingCoopMatMaint1()) { + builder.addCapability(spv::Capability::CooperativeMatrixReductionsEXT); + builder.addExtension(spv::E_SPV_EXT_cooperative_matrix_maintenance1); + } else { + builder.addCapability(spv::Capability::CooperativeMatrixReductionsNV); + builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); + } spv::Op opcode = spv::Op::OpCooperativeMatrixReduceNV; unsigned mask = glslangOperands[2]->getAsConstantUnion()->getConstArray()[0].getUConst(); @@ -4661,8 +4932,13 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt builder.createStore(result, operands[0]); result = 0; } else if (node->getOp() == glslang::EOpCooperativeMatrixPerElementOpNV) { - builder.addCapability(spv::Capability::CooperativeMatrixPerElementOperationsNV); - builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); + if (glslangIntermediate->usingCoopMatMaint1()) { + builder.addCapability(spv::Capability::CooperativeMatrixPerElementOperationsEXT); + builder.addExtension(spv::E_SPV_EXT_cooperative_matrix_maintenance1); + } else { + builder.addCapability(spv::Capability::CooperativeMatrixPerElementOperationsNV); + builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); + } spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0])); assert(builder.isCooperativeMatrixType(typeId)); @@ -4672,14 +4948,20 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt builder.createStore(result, operands[0]); result = 0; } else if (node->getOp() == glslang::EOpCooperativeMatrixTransposeNV) { - - builder.addCapability(spv::Capability::CooperativeMatrixConversionsNV); - builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); + enableCoopMatConversions(); spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0])); assert(builder.isCooperativeMatrixType(typeId)); - result = builder.createUnaryOp(spv::Op::OpCooperativeMatrixTransposeNV, typeId, operands[1]); + if (glslangIntermediate->usingCoopMatMaint1()) { + auto resultBasicType = glslangOperands[0]->getAsTyped()->getBasicType(); + auto operandBasicType = glslangOperands[1]->getAsTyped()->getBasicType(); + bool sameUse = glslangOperands[0]->getAsTyped()->getType().sameCoopMatUse(glslangOperands[1]->getAsTyped()->getType()); + + result = createCoopMatConversion(typeId, operands[1], resultBasicType, operandBasicType, sameUse, true); + } else { + result = builder.createUnaryOp(spv::Op::OpCooperativeMatrixTransposeNV, typeId, operands[1]); + } // store the result to the pointer builder.createStore(result, operands[0]); result = 0; @@ -5278,8 +5560,12 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T switch (node->getFlowOp()) { case glslang::EOpKill: if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { - builder.addCapability(spv::Capability::DemoteToHelperInvocation); - builder.createNoResultOp(spv::Op::OpDemoteToHelperInvocationEXT); + if (glslangIntermediate->getDiscardIsTerminate() && glslangIntermediate->getSource() == glslang::EShSourceGlsl) { + builder.makeStatementTerminator(spv::Op::OpTerminateInvocation, "post-terminate-invocation"); + } else { + builder.addCapability(spv::Capability::DemoteToHelperInvocation); + builder.createNoResultOp(spv::Op::OpDemoteToHelperInvocationEXT); + } } else { builder.makeStatementTerminator(spv::Op::OpKill, "post-discard"); } @@ -5584,6 +5870,21 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty case glslang::EbtFloatE4M3: spvType = builder.makeFloatE4M3Type(); break; + case glslang::EbtFloatE2M1: + spvType = builder.makeFloatE2M1Type(); + break; + case glslang::EbtFloatE3M2: + spvType = builder.makeFloatE3M2Type(); + break; + case glslang::EbtFloatE2M3: + spvType = builder.makeFloatE2M3Type(); + break; + case glslang::EbtFloatUE8M0: + spvType = builder.makeFloatUE8M0Type(); + break; + case glslang::EbtFloatMXINT8: + spvType = builder.makeFloatMXINT8Type(); + break; case glslang::EbtInt8: spvType = builder.makeIntType(8); break; @@ -5711,8 +6012,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty { // If it's an inner declared heap buffer or uniform block, using OpTypeBufferEXT // to convert it to an untyped type. - if (type.getQualifier().isUniformOrBuffer() && - type.getQualifier().layoutDescriptorHeap && type.getQualifier().layoutDescriptorInnerBlock) { + if (type.getQualifier().layoutDescriptorHeap && type.getQualifier().descriptorHeapDescriptorNode) { spvType = builder.makeUntypedPointer(TranslateStorageClass(type), true); break; } @@ -5729,7 +6029,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty // else, we haven't seen it... if (type.getBasicType() == glslang::EbtBlock) - memberRemapper[glslangTypeToIdMap[glslangMembers]].resize(glslangMembers->size()); + memberRemapper[glslangMembers].resize(glslangMembers->size()); spvType = convertGlslangStructToSpvType(type, glslangMembers, explicitLayout, qualifier); } break; @@ -5935,7 +6235,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty } if (type.isLongVector()) { - // SPIR-V LongVectorEXT not needed when component count is literal 2–4. + // SPIR-V LongVectorEXT not needed when component count is literal 2-4. const bool needLongVectorCap = type.hasSpecConstantVectorComponents() || (type.getTypeParameters()->arraySizes->getDimSize(0) < 2 || type.getTypeParameters()->arraySizes->getDimSize(0) > 4); @@ -5959,58 +6259,72 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty } if (type.isArray()) { - int stride = 0; // keep this 0 unless doing an explicit layout; 0 will mean no decoration, no stride + if (type.getQualifier().layoutDescriptorHeap && containsDescHeapDescriptorType(type)) { + std::vector arrayStrides = descHeapLayout.getOrCreateArrayStrides(type); + assert((int)arrayStrides.size() == type.getArraySizes()->getNumDims()); + int strideIndex = 0; - // Do all but the outer dimension - if (type.getArraySizes()->getNumDims() > 1) { - // We need to decorate array strides for types needing explicit layout, except blocks. - if (explicitLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock) { - // Use a dummy glslang type for querying internal strides of - // arrays of arrays, but using just a one-dimensional array. - glslang::TType simpleArrayType(type, 0); // deference type of the array - while (simpleArrayType.getArraySizes()->getNumDims() > 1) - simpleArrayType.getArraySizes()->dereference(); - - // Will compute the higher-order strides here, rather than making a whole - // pile of types and doing repetitive recursion on their contents. - stride = getArrayStride(simpleArrayType, explicitLayout, qualifier.layoutMatrix); - } - - // make the arrays for (int dim = type.getArraySizes()->getNumDims() - 1; dim > 0; --dim) { - spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), dim), stride); - if (stride > 0) - builder.addDecoration(spvType, spv::Decoration::ArrayStride, stride); - stride *= type.getArraySizes()->getDimSize(dim); + spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), dim), 1); + builder.addDecorationId(spvType, spv::Decoration::ArrayStrideIdEXT, arrayStrides[strideIndex++]); } + + if (type.isSizedArray() && !type.isImplicitlySizedArray()) + spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), 1); + else + spvType = builder.makeRuntimeArray(spvType); + builder.addDecorationId(spvType, spv::Decoration::ArrayStrideIdEXT, arrayStrides[strideIndex]); } else { - // single-dimensional array, and don't yet have stride + glslang::TLayoutPacking arrayLayout = type.getQualifier().layoutDescriptorHeap ? glslang::ElpScalar : explicitLayout; + int stride = 0; // keep this 0 unless doing an explicit layout; 0 will mean no decoration, no stride - // We need to decorate array strides for types needing explicit layout, except blocks. - if (explicitLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock) - stride = getArrayStride(type, explicitLayout, qualifier.layoutMatrix); - } + // Do all but the outer dimension + if (type.getArraySizes()->getNumDims() > 1) { + // We need to decorate array strides for types needing explicit layout, except blocks. + if (arrayLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock) { + // Use a dummy glslang type for querying internal strides of + // arrays of arrays, but using just a one-dimensional array. + glslang::TType simpleArrayType(type, 0); // deference type of the array + while (simpleArrayType.getArraySizes()->getNumDims() > 1) + simpleArrayType.getArraySizes()->dereference(); - if (type.getQualifier().storage == glslang::EvqResourceHeap || - type.getQualifier().storage == glslang::EvqSamplerHeap) { - auto structSize = heapStructureTypeSize[spvType]; - spvType = builder.makeRuntimeArray(spvType); - builder.addDecorationId(spvType, spv::Decoration::ArrayStrideIdEXT, structSize); - } - // Do the outer dimension, which might not be known for a runtime-sized array. - // (Unsized arrays that survive through linking will be runtime-sized arrays) - else if (type.isSizedArray()) - spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), stride); - else { - // If we see an runtime array in a buffer_reference, it is not a descriptor - if (!lastBufferBlockMember && type.getBasicType() != glslang::EbtReference) { - builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); - builder.addCapability(spv::Capability::RuntimeDescriptorArrayEXT); + // Will compute the higher-order strides here, rather than making a whole + // pile of types and doing repetitive recursion on their contents. + stride = getArrayStride(simpleArrayType, arrayLayout, qualifier.layoutMatrix); + } + + // make the arrays + for (int dim = type.getArraySizes()->getNumDims() - 1; dim > 0; --dim) { + spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), dim), stride); + if (stride > 0) + builder.addDecoration(spvType, spv::Decoration::ArrayStride, stride); + stride *= type.getArraySizes()->getDimSize(dim); + } + } else { + // single-dimensional array, and don't yet have stride + // We need to decorate array strides for types needing explicit layout, except blocks. + if (arrayLayout != glslang::ElpNone && type.getBasicType() != glslang::EbtBlock) + stride = getArrayStride(type, arrayLayout, qualifier.layoutMatrix); } - spvType = builder.makeRuntimeArray(spvType); + + // Do the outer dimension, which might not be known for a runtime-sized array. + // (Unsized arrays that survive through linking will be runtime-sized arrays) + const bool useRuntimeDescHeapArray = + type.getQualifier().layoutDescriptorHeap && type.isImplicitlySizedArray(); + if (type.isSizedArray() && !useRuntimeDescHeapArray) + spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), stride); + else { + // If we see an runtime array in a buffer_reference, it is not a descriptor + if (!lastBufferBlockMember && type.getBasicType() != glslang::EbtReference && + !type.getQualifier().layoutDescriptorHeap) { + builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); + builder.addCapability(spv::Capability::RuntimeDescriptorArrayEXT); + } + spvType = builder.makeRuntimeArray(spvType); + } + if (stride > 0) + builder.addDecoration(spvType, spv::Decoration::ArrayStride, stride); } - if (stride > 0) - builder.addDecoration(spvType, spv::Decoration::ArrayStride, stride); } return spvType; @@ -6129,15 +6443,15 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy if (glslangMember.type->hiddenMember()) { ++memberDelta; if (type.getBasicType() == glslang::EbtBlock) - memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = -1; + memberRemapper[glslangMembers][i] = -1; } else { if (type.getBasicType() == glslang::EbtBlock) { if (filterMember(*glslangMember.type)) { memberDelta++; - memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = -1; + memberRemapper[glslangMembers][i] = -1; continue; } - memberRemapper[glslangTypeToIdMap[glslangMembers]][i] = i - memberDelta; + memberRemapper[glslangMembers][i] = i - memberDelta; } // modify just this child's view of the qualifier glslang::TQualifier memberQualifier = glslangMember.type->getQualifier(); @@ -6218,43 +6532,60 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy } } - // For those whose storage is ResourceHeap or SamplerHeap, we needs to recursively add - // member decorator for inner structure member declaration with spec Constant. - spv::Id heapStructSize = 0; - if (qualifier.storage == glslang::EvqResourceHeap || qualifier.storage == glslang::EvqSamplerHeap || - qualifier.layoutDescriptorInnerBlock) { - auto memberBaseOffset = builder.makeUintConstant(0); - int maxPlainDataTypeAlignment = 0; - spv::Id descTypeMaxAlignment = 0; - auto structLastMemberSize = - decorateDescHeapType(type, memberBaseOffset, descTypeMaxAlignment, maxPlainDataTypeAlignment); - auto structureUnaligned = builder.createSpecConstantOp( - spv::Op::OpIAdd, builder.makeUintType(32), {memberBaseOffset, structLastMemberSize}, {}); - auto structurePadding = builder.createSpecConstantOp( - spv::Op::OpUMod, builder.makeUintType(32), {descTypeMaxAlignment, structureUnaligned}, {}); - heapStructSize = builder.createSpecConstantOp( - spv::Op::OpIAdd, builder.makeUintType(32), {structureUnaligned, structurePadding}, {}); - HeapMetaData meta = {heapStructSize, descTypeMaxAlignment, maxPlainDataTypeAlignment}; - heapStructureTypeMetaData[&type] = meta; - } + // OffsetIdEXT must only be applied to members of structs where the struct + // contains at least one <> type. + const bool useDescHeapIdDecorations = qualifier.layoutDescriptorHeap && + !type.getQualifier().descriptorHeapDescriptorNode && containsDescHeapDescriptorType(type); + + // Prepare the layout ids for the descriptor heap struct. + std::vector descHeapMemberOffsets; + if (useDescHeapIdDecorations) + descHeapMemberOffsets = descHeapLayout.getOrCreateStructMemberOffsets(type); // Make the SPIR-V type spv::Id spvType = builder.makeStructType(spvMembers, memberDebugInfo, type.getTypeName().c_str(), false); if (! HasNonLayoutQualifiers(type, qualifier)) structMap[explicitLayout][qualifier.layoutMatrix][glslangMembers] = spvType; - // Keep decoration data order after spv structure type. - if (qualifier.storage == glslang::EvqResourceHeap || qualifier.storage == glslang::EvqSamplerHeap || - qualifier.layoutDescriptorInnerBlock) { - heapStructureTypeSize[spvType] = heapStructSize; - for (unsigned int i = 0; i < spvMembers.size(); i++) { - builder.addMemberDecorationIdEXT(spvType, i, spv::Decoration::OffsetIdEXT, {heapStructureMemberOffsets[i]}); - } - heapStructureMemberOffsets.clear(); - } - // Decorate it - decorateStructType(type, glslangMembers, explicitLayout, qualifier, spvType, spvMembers); + if (useDescHeapIdDecorations) { + // Only the top-level heap layout struct represents a resourceheap/samplerheap block. + // If its last member is a runtime array, Vulkan still requires the struct type to + // carry Block/BufferBlock; nested heap member structs should not get this decoration. + const bool isTopLevelHeapStruct = + qualifier.storage == glslang::EvqResourceHeap || + qualifier.storage == glslang::EvqSamplerHeap; + if (isTopLevelHeapStruct && glslangIntermediate->getSpv().vulkan > 0 && !spvMembers.empty() && + builder.getOpCode(spvMembers.back()) == spv::Op::OpTypeRuntimeArray) { + builder.addDecoration(spvType, TranslateBlockDecoration(qualifier.storage, + glslangIntermediate->usingStorageBuffer())); + } + + assert(descHeapMemberOffsets.size() == glslangMembers->size()); + for (int member = 0; member < (int)glslangMembers->size() && member < (int)spvMembers.size(); ++member) { + glslang::TType& glslangMember = *(*glslangMembers)[member].type; + + // Decorate offset. + builder.addMemberDecorationIdEXT(spvType, member, spv::Decoration::OffsetIdEXT, + {descHeapMemberOffsets[member]}); + + // Decorate matrix layout. + glslang::TQualifier memberQualifier = glslangMember.getQualifier(); + InheritQualifiers(memberQualifier, qualifier); + if (!glslangMember.isMatrix() || memberQualifier.layoutMatrix == glslang::ElmNone) + continue; + + builder.addMemberDecoration(spvType, member, + TranslateLayoutDecoration(glslangMember, memberQualifier.layoutMatrix)); + builder.addMemberDecoration(spvType, member, spv::Decoration::MatrixStride, + getMatrixStride(glslangMember, glslang::ElpScalar, memberQualifier.layoutMatrix)); + } + } else if (qualifier.layoutDescriptorHeap) { + if (!type.getQualifier().descriptorHeapDescriptorNode) + decorateStructType(type, glslangMembers, glslang::ElpScalar, qualifier, spvType, spvMembers); + } else { + decorateStructType(type, glslangMembers, explicitLayout, qualifier, spvType, spvMembers); + } for (int i = 0; i < (int)deferredForwardPointers.size(); ++i) { auto it = deferredForwardPointers[i]; @@ -6264,124 +6595,376 @@ spv::Id TGlslangToSpvTraverser::convertGlslangStructToSpvType(const glslang::TTy return spvType; } -// Return not aligned size of current type. -spv::Id TGlslangToSpvTraverser::decorateDescHeapType( - const glslang::TType& type, - spv::Id &memberBaseOffset, - spv::Id &descTypeAlignment, - int& maxPlainDataAlignment) +// Keep access to the traverser state needed to emit layout ids. +DescHeapLayoutEmitter::DescHeapLayoutEmitter(TGlslangToSpvTraverser& traverser) + : traverser(traverser) { - glslang::TLayoutPacking explicitLayout = glslang::ElpScalar; - auto selectMaxRsrcTyAlign = [&](spv::Id typeSize) { - if (descTypeAlignment != 0) { - auto compareInst = builder.createSpecConstantOp(spv::Op::OpUGreaterThan, builder.makeBoolType(), - {descTypeAlignment, typeSize}, {}); - auto selectMaxAlign = builder.createSpecConstantOp(spv::Op::OpSelect, builder.makeUintType(32), - {compareInst, descTypeAlignment, typeSize}, {}); - descTypeAlignment = selectMaxAlign; - } else - descTypeAlignment = typeSize; - }; +} - // Get or calculate following info ordered. - // Member Type | Type size | Type alignment within current structure | Type offset. - // PS. resource blocks declared within a structure will not be processed as a normal declaration before, - // and its' size is dependent on constantSizeOfEXT op, so we won't trigger it as a normal structure here. - bool isArray = type.isArray(); - if (type.isStruct() && !type.getQualifier().layoutDescriptorInnerBlock) { - // 1. Structure type is processed from inner to higher level. - // If member is a sturcture, it will be processed earlier, - // parent structure could just load early results. - if (heapStructureTypeMetaData.find(&type) != heapStructureTypeMetaData.end()) { - auto metadata = heapStructureTypeMetaData[&type]; - selectMaxRsrcTyAlign(metadata.maxRsrcTypeAlignment); - maxPlainDataAlignment = std::max(metadata.maxPlainDataAlignment, maxPlainDataAlignment); - return metadata.typeStride; - } - // For other nested structure, it would be declared before its parent, - // so it should be directly returned a result in above check. +// Return true when this type is a descriptor payload in a descriptor heap. +bool DescHeapLayoutEmitter::isDescriptorPayload(const glslang::TType& type) const +{ + if (type.isArray()) { + glslang::TType elementTy(type, 0); + return isDescriptorPayload(elementTy); + } + + return type.getQualifier().descriptorHeapDescriptorNode; +} + +// Return true when this type or a nested member contains a descriptor payload. +bool DescHeapLayoutEmitter::containsDescriptorPayload(const glslang::TType& type) const +{ + if (isDescriptorPayload(type)) + return true; + + if (type.isArray()) { + // The element can be a struct containing descriptor payload members. + glslang::TType elementTy(type, 0); + return containsDescriptorPayload(elementTy); + } + + if (type.isStruct()) { const glslang::TTypeList* structTyList = type.getStruct(); - spv::Id previousTypeSize = 0; - auto currentOffset = memberBaseOffset; - for (int i = 0; i < (int)structTyList->size(); i++) { - // Get offset : - // OffsetsBase = default ? 0 : OffsetInLayout; - // OffsetsBase = OffsetsBase + previousOffset + previousPadding. - const glslang::TType& memberTy = *(*structTyList)[i].type; - spv::Id typeSize = decorateDescHeapType(memberTy, currentOffset, descTypeAlignment, maxPlainDataAlignment); - // 2. Get each member's unaligned offset, padding and aligned offset. - // As this function is processed recursively, from bottom to upper, so in here, - // non-structure member's alignment should have been known. - if (i != 0) { - auto offsetNotAligned = builder.createSpecConstantOp(spv::Op::OpIAdd, builder.makeUintType(32), - {currentOffset, previousTypeSize}, {}); - auto offsetPadding = builder.createSpecConstantOp(spv::Op::OpUMod, builder.makeUintType(32), - {typeSize, offsetNotAligned}, {}); - currentOffset = builder.createSpecConstantOp(spv::Op::OpIAdd, builder.makeUintType(32), - {offsetNotAligned, offsetPadding}, {}); - } - heapStructureMemberOffsets.push_back(currentOffset); - previousTypeSize = typeSize; + for (const auto& member : *structTyList) { + if (containsDescriptorPayload(*member.type)) + return true; } - // 3. Structure level, get max resource type's alignment, max plain data alignment and final - // structure inner alignment. - // Get compared result for alignment within whole structure. - spv::Id maxPlainAlignmentSize = builder.makeIntConstant(maxPlainDataAlignment); - - // Select biggest alignemnt size between desc types and plain old types. - selectMaxRsrcTyAlign(maxPlainAlignmentSize); - memberBaseOffset = currentOffset; - - // Now, return generates size of the MaterialData type - // Get structure level unaligned offset, padding and final offset outside. - return previousTypeSize; } - // Following are normal types, structures/blocks have been processed in above part. - // Normal type or member type within a structure. - bool useConstantSizeOf = - ((type.getQualifier().isUniformOrBuffer() && type.getQualifier().layoutDescriptorHeap) || - type.isImage() || type.isTexture() || type.isTensorARM() || type.getBasicType() == glslang::EbtAccStruct); + return false; +} - // Get single type and layout info. - int elemCurrentOffset, elemAlignedSize; - int memberSize, dummyStride, typeAlignment; - spv::Id spvType = 0; - if (isArray) { - glslang::TType elemTy(type, 0); - elemTy.clearArraySizes(); - if (!useConstantSizeOf) { - typeAlignment = glslangIntermediate->getMemberAlignment( - elemTy, memberSize, dummyStride, glslang::ElpScalar, elemTy.getQualifier().layoutMatrix == glslang::ElmRowMajor); - updateMemberOffset(elemTy, elemTy, elemCurrentOffset, elemAlignedSize, explicitLayout, elemTy.getQualifier().layoutMatrix); - elemAlignedSize *= type.getCumulativeArraySize(); - } - spvType = convertGlslangToSpvType(elemTy); +// Return the heap size id for one non-array value. +spv::Id DescHeapLayoutEmitter::getOrCreateValueSize(const glslang::TType& type) +{ + assert(!type.isArray()); + if (type.isStruct() && !isDescriptorPayload(type) && containsDescriptorPayload(type)) + return getOrCreateStructSize(type); + + auto cachedSize = valueSizeCache.find(&type); + if (cachedSize != valueSizeCache.end()) + return cachedSize->second; + + spv::Id size = computeValueSize(type); + return valueSizeCache.emplace(&type, size).first->second; +} + +// Return the placement alignment id for one non-array value. +spv::Id DescHeapLayoutEmitter::getOrCreateValueAlignment(const glslang::TType& type) +{ + assert(!type.isArray()); + if (type.isStruct() && !isDescriptorPayload(type) && containsDescriptorPayload(type)) + return getOrCreateStructAlignment(type); + + auto cachedAlignment = valueAlignmentCache.find(&type); + if (cachedAlignment != valueAlignmentCache.end()) + return cachedAlignment->second; + + spv::Id alignment = computeValueAlignment(type); + return valueAlignmentCache.emplace(&type, alignment).first->second; +} + +// Return the total heap size id for a sized array. +spv::Id DescHeapLayoutEmitter::getOrCreateArraySize(const glslang::TType& arrayType) +{ + assert(arrayType.isArray()); + auto cachedSize = arraySizeCache.find(&arrayType); + if (cachedSize != arraySizeCache.end()) + return cachedSize->second; + + spv::Id size = spv::NoResult; + if (!containsDescriptorPayload(arrayType)) { + int scalarSize; + int stride; + traverser.glslangIntermediate->getMemberAlignment( + arrayType, scalarSize, stride, glslang::ElpScalar, + arrayType.getQualifier().layoutMatrix == glslang::ElmRowMajor); + size = makeUint(scalarSize); + } else if (!arrayType.isImplicitlySizedArray()) { + std::vector strides = getOrCreateArrayStrides(arrayType); + assert(!strides.empty()); + size = makeSpecOp(spv::Op::OpIMul, + {strides.back(), traverser.makeArraySizeId(*arrayType.getArraySizes(), 0)}); + } + // Runtime arrays do not have a finite total size. + + return arraySizeCache.emplace(&arrayType, size).first->second; +} + +// Return the placement alignment id for an array member. +spv::Id DescHeapLayoutEmitter::getOrCreateArrayAlignment(const glslang::TType& arrayType) +{ + assert(arrayType.isArray()); + auto cachedAlignment = arrayAlignmentCache.find(&arrayType); + if (cachedAlignment != arrayAlignmentCache.end()) + return cachedAlignment->second; + + spv::Id alignment = spv::NoResult; + if (!containsDescriptorPayload(arrayType)) { + int size; + int stride; + int scalarAlignment = traverser.glslangIntermediate->getMemberAlignment( + arrayType, size, stride, glslang::ElpScalar, + arrayType.getQualifier().layoutMatrix == glslang::ElmRowMajor); + alignment = makeUint(scalarAlignment); } else { - if (!useConstantSizeOf) { - typeAlignment = glslangIntermediate->getMemberAlignment( - type, memberSize, dummyStride, glslang::ElpScalar, type.getQualifier().layoutMatrix == glslang::ElmRowMajor); - updateMemberOffset(type, type, elemCurrentOffset, elemAlignedSize, explicitLayout, type.getQualifier().layoutMatrix); - } - spvType = convertGlslangToSpvType(type); + glslang::TType elementTy; + getInnermostArrayElementType(arrayType, elementTy); + alignment = computeValueAlignment(elementTy); } - // Get alignment and type size. - spv::Id typeSize = 0; - if (useConstantSizeOf) { - typeSize = builder.createConstantSizeOfEXT(spvType); - // For resource type, needs to check current's largest alignment to select. - // New parent structure's alignment is equal to: - // maxInnerAlignment = currentAlignment > maxInnerAlignment - // ? currentAlignment - // : maxInnerAlignment; - selectMaxRsrcTyAlign(typeSize); + return arrayAlignmentCache.emplace(&arrayType, alignment).first->second; +} + +// Return ArrayStrideIdEXT operand ids from inner dimension to outer dimension. +std::vector DescHeapLayoutEmitter::getOrCreateArrayStrides( + const glslang::TType& arrayType) +{ + assert(arrayType.isArray()); + auto cachedStrides = arrayStridesCache.find(&arrayType); + if (cachedStrides != arrayStridesCache.end()) + return cachedStrides->second; + + std::vector strides; + if (!containsDescriptorPayload(arrayType)) { + int size; + int stride; + traverser.glslangIntermediate->getMemberAlignment( + arrayType, size, stride, glslang::ElpScalar, + arrayType.getQualifier().layoutMatrix == glslang::ElmRowMajor); + if (stride > 0) + strides.push_back(makeUint(stride)); } else { - typeSize = builder.makeIntConstant(elemAlignedSize); - maxPlainDataAlignment = std::max(typeAlignment, maxPlainDataAlignment); + glslang::TType elementTy; + getInnermostArrayElementType(arrayType, elementTy); + spv::Id stride = spv::NoResult; + if (isDescriptorPayload(arrayType) && + arrayType.getQualifier().layoutDescriptorStride != glslang::TQualifier::layoutDescriptorStrideEnd) + stride = makeUint(arrayType.getQualifier().layoutDescriptorStride); + else if (isDescriptorPayload(arrayType) && + arrayType.getQualifier().layoutDescriptorSize != glslang::TQualifier::layoutDescriptorSizeEnd) + stride = makeUint(arrayType.getQualifier().layoutDescriptorSize); + else + stride = computeValueSize(elementTy); + const glslang::TArraySizes* arraySizes = arrayType.getArraySizes(); + for (int dim = arraySizes->getNumDims() - 1; dim >= 0; --dim) { + strides.push_back(stride); + if (dim > 0) + stride = makeSpecOp(spv::Op::OpIMul, {stride, traverser.makeArraySizeId(*arraySizes, dim)}); + } } - return typeSize; + return arrayStridesCache.emplace(&arrayType, strides).first->second; +} + +// Create a 32-bit unsigned constant id. +spv::Id DescHeapLayoutEmitter::makeUint(unsigned value) +{ + return traverser.builder.makeUintConstant(value); +} + +// Create a 32-bit unsigned OpSpecConstantOp id. +spv::Id DescHeapLayoutEmitter::makeSpecOp(spv::Op op, + const std::vector& operands) +{ + return traverser.builder.createSpecConstantOp(op, traverser.builder.makeUintType(32), operands, {}); +} + +// Return the byte footprint id for a struct member. +spv::Id DescHeapLayoutEmitter::getMemberSize(const glslang::TType& memberType) +{ + if (!memberType.isArray()) + return getOrCreateValueSize(memberType); + + spv::Id arraySize = getOrCreateArraySize(memberType); + if (arraySize != spv::NoResult) + return arraySize; + + // Runtime arrays have no finite footprint. The stride fallback is only + // valid for the legal last-member case. + assert(memberType.isImplicitlySizedArray()); + std::vector strides = getOrCreateArrayStrides(memberType); + assert(!strides.empty()); + return strides.back(); +} + +// Return the placement alignment id for a struct member. +spv::Id DescHeapLayoutEmitter::getMemberAlignment(const glslang::TType& memberType) +{ + return memberType.isArray() ? getOrCreateArrayAlignment(memberType) : + getOrCreateValueAlignment(memberType); +} + +// Return member offset ids relative to the start of this struct. +std::vector DescHeapLayoutEmitter::getOrCreateStructMemberOffsets( + const glslang::TType& structType) +{ + assert(structType.isStruct()); + + const glslang::TTypeList* structTyList = structType.getStruct(); + auto cachedOffsets = structMemberOffsetsCache.find(structTyList); + if (cachedOffsets != structMemberOffsetsCache.end()) + return cachedOffsets->second; + + std::vector memberOffsets; + memberOffsets.reserve(structTyList->size()); + + const glslang::TType* previousMemberTy = nullptr; + spv::Id currentOffset = makeUint(0); + for (int i = 0; i < (int)structTyList->size(); ++i) { + const glslang::TType& memberTy = *(*structTyList)[i].type; + + if (memberTy.getQualifier().hasOffset()) { + currentOffset = makeUint(memberTy.getQualifier().layoutOffset); + } else if (previousMemberTy != nullptr) { + spv::Id offsetNotAligned = makeSpecOp(spv::Op::OpIAdd, {currentOffset, getMemberSize(*previousMemberTy)}); + currentOffset = traverser.builder.createSpecConstantAlignTo(offsetNotAligned, getMemberAlignment(memberTy)); + } + + memberOffsets.push_back(currentOffset); + + previousMemberTy = &memberTy; + } + + return structMemberOffsetsCache.emplace(structTyList, memberOffsets).first->second; +} + +// Return the max member alignment id for a descriptor-containing struct. +spv::Id DescHeapLayoutEmitter::getOrCreateStructAlignment( + const glslang::TType& structType) +{ + assert(structType.isStruct()); + + const glslang::TTypeList* structTyList = structType.getStruct(); + auto cachedAlignment = structAlignmentCache.find(structTyList); + if (cachedAlignment != structAlignmentCache.end()) + return cachedAlignment->second; + + spv::Id alignment = spv::NoResult; + for (int i = 0; i < (int)structTyList->size(); ++i) { + spv::Id memberAlignment = getMemberAlignment(*(*structTyList)[i].type); + alignment = alignment == spv::NoResult ? memberAlignment : + traverser.builder.createSpecConstantSelectMax(alignment, memberAlignment); + } + + if (alignment == spv::NoResult) + alignment = makeUint(1); + + return structAlignmentCache.emplace(structTyList, alignment).first->second; +} + +// Return the padded heap size id for a descriptor-containing struct. +spv::Id DescHeapLayoutEmitter::getOrCreateStructSize(const glslang::TType& structType) +{ + assert(structType.isStruct()); + + const glslang::TTypeList* structTyList = structType.getStruct(); + auto cachedSize = structSizeCache.find(structTyList); + if (cachedSize != structSizeCache.end()) + return cachedSize->second; + + spv::Id size = spv::NoResult; + if (structTyList->empty()) { + size = makeUint(0); + } else { + std::vector memberOffsets = getOrCreateStructMemberOffsets(structType); + const glslang::TType& lastMemberTy = *structTyList->back().type; + spv::Id rawSize = makeSpecOp(spv::Op::OpIAdd, {memberOffsets.back(), getMemberSize(lastMemberTy)}); + size = traverser.builder.createSpecConstantAlignTo(rawSize, getOrCreateStructAlignment(structType)); + } + + return structSizeCache.emplace(structTyList, size).first->second; +} + +// Compute the heap size id without writing the TType* value-size cache. +spv::Id DescHeapLayoutEmitter::computeValueSize(const glslang::TType& type) +{ + assert(!type.isArray()); + + if (isDescriptorPayload(type)) { + if (type.getQualifier().layoutDescriptorSize != glslang::TQualifier::layoutDescriptorSizeEnd) + return makeUint(type.getQualifier().layoutDescriptorSize); + return traverser.builder.createConstantSizeOfEXT(traverser.convertGlslangToSpvType(type)); + } + + if (type.isStruct() && containsDescriptorPayload(type)) + return getOrCreateStructSize(type); + + int size; + int stride; + int alignment = traverser.glslangIntermediate->getMemberAlignment( + type, size, stride, glslang::ElpScalar, + type.getQualifier().layoutMatrix == glslang::ElmRowMajor); + glslang::RoundToPow2(size, alignment); + return makeUint(size); +} + +// Compute the alignment id without writing the TType* value-alignment cache. +spv::Id DescHeapLayoutEmitter::computeValueAlignment(const glslang::TType& type) +{ + assert(!type.isArray()); + + if (isDescriptorPayload(type)) + return computeValueSize(type); + + if (type.isStruct() && containsDescriptorPayload(type)) + return getOrCreateStructAlignment(type); + + int size; + int stride; + int alignment = traverser.glslangIntermediate->getMemberAlignment( + type, size, stride, glslang::ElpScalar, + type.getQualifier().layoutMatrix == glslang::ElmRowMajor); + return makeUint(alignment); +} + +// Fill a local non-array element type for an array type. +void DescHeapLayoutEmitter::getInnermostArrayElementType(const glslang::TType& arrayType, + glslang::TType& elementType) const +{ + assert(arrayType.isArray()); + + // Peel array dimensions on this local copy only. + glslang::TType arrayElementTy(arrayType, 0); + elementType.shallowCopy(arrayElementTy); + if (elementType.isArray()) + elementType.clearArraySizes(); +} + +// Return true only when the type itself is a descriptor heap payload. Arrays are +// unwrapped so descriptor arrays are treated as descriptor payloads too. +bool TGlslangToSpvTraverser::isDescHeapDescriptorType(const glslang::TType& type) const +{ + if (type.isArray()) { + glslang::TType elementTy(type, 0); + return isDescHeapDescriptorType(elementTy); + } + + return type.getQualifier().descriptorHeapDescriptorNode; +} + +// Return true when this type or any nested array/struct member contains a +// descriptor heap payload. This decides whether heap Id decorations are needed. +bool TGlslangToSpvTraverser::containsDescHeapDescriptorType(const glslang::TType& type) const +{ + if (isDescHeapDescriptorType(type)) + return true; + + if (type.isArray()) { + glslang::TType elementTy(type, 0); + return containsDescHeapDescriptorType(elementTy); + } + + if (type.isStruct()) { + const glslang::TTypeList* structTyList = type.getStruct(); + for (const auto& member : *structTyList) { + if (containsDescHeapDescriptorType(*member.type)) + return true; + } + } + + return false; } void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, @@ -6399,7 +6982,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, glslang::TType& glslangMember = *(*glslangMembers)[i].type; int member = i; if (type.getBasicType() == glslang::EbtBlock) { - member = memberRemapper[glslangTypeToIdMap[glslangMembers]][i]; + member = memberRemapper[glslangMembers][i]; if (filterMember(glslangMember)) continue; } @@ -6516,7 +7099,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, builder.addDecoration(spvType, TranslateLayoutDecoration(type, qualifier.layoutMatrix)); const auto basicType = type.getBasicType(); const auto typeStorageQualifier = type.getQualifier().storage; - if (basicType == glslang::EbtBlock) { + if (basicType == glslang::EbtBlock || qualifier.isBufferType()) { builder.addDecoration(spvType, TranslateBlockDecoration(typeStorageQualifier, glslangIntermediate->usingStorageBuffer())); } else if (basicType == glslang::EbtStruct && glslangIntermediate->getSpv().vulkan > 0) { const auto hasRuntimeArray = !spvMembers.empty() && builder.getOpCode(spvMembers.back()) == spv::Op::OpTypeRuntimeArray; @@ -6567,6 +7150,27 @@ spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arra } } +// Turn a structured descriptor heap_offset into an id used to shift the heap base. +spv::Id TGlslangToSpvTraverser::makeHeapOffsetId(const glslang::TType& type) +{ + const glslang::TQualifier& qualifier = type.getQualifier(); + if (qualifier.layoutHeapOffsetNode != nullptr) { + spv::Builder::AccessChain savedAccessChain = builder.getAccessChain(); + builder.clearAccessChain(); + + qualifier.layoutHeapOffsetNode->traverse(this); + spv::Id heapOffset = accessChainLoad(qualifier.layoutHeapOffsetNode->getType()); + + builder.setAccessChain(savedAccessChain); + return heapOffset; + } + + if (qualifier.layoutHeapOffset != 0) + return builder.makeUintConstant(qualifier.layoutHeapOffset); + + return spv::NoResult; +} + // Wrap the builder's accessChainLoad to: // - localize handling of RelaxedPrecision // - use the SPIR-V inferred type instead of another conversion of the glslang type @@ -6753,8 +7357,10 @@ void TGlslangToSpvTraverser::multiTypeStore(const glslang::TType& type, spv::Id // whether std140 or std430 rules should be applied. glslang::TLayoutPacking TGlslangToSpvTraverser::getExplicitLayout(const glslang::TType& type) const { - // has to be a block - if (type.getBasicType() != glslang::EbtBlock) + // Has to be a block. buffer_type is represented as a struct use in the AST, + // but its payload still follows uniform/buffer block layout rules. + if (type.getBasicType() != glslang::EbtBlock && + !type.getQualifier().isBufferType()) return glslang::ElpNone; // has to be a uniform or buffer block or task in/out blocks @@ -6986,6 +7592,7 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF builder.setDebugSourceLocation(glslFunction->getLoc().line, glslFunction->getLoc().getFilename()); if (isShaderEntryPoint(glslFunction)) { + shaderEntry->setFunctionControl(TranslateFunctionControl(glslFunction->getFunctionControl())); // For HLSL, the entry function is actually a compiler generated function to resolve the difference of // entry function signature between HLSL and SPIR-V. So we don't emit debug information for that. if (glslangIntermediate->getSource() != glslang::EShSourceHlsl) { @@ -7044,6 +7651,7 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF TranslatePrecisionDecoration(glslFunction->getType()), convertGlslangToSpvType(glslFunction->getType()), glslFunction->getName().c_str(), convertGlslangLinkageToSpv(glslFunction->getLinkType()), paramTypes, paramDecorations, &functionBlock); + function->setFunctionControl(TranslateFunctionControl(glslFunction->getFunctionControl())); builder.setupFunctionDebugInfo(function, glslFunction->getName().c_str(), paramTypes, paramNames); if (implicitThis) function->setImplicitThis(); @@ -7270,7 +7878,8 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& glslangArguments[i]->getAsSymbolNode() && glslangArguments[i-1]->getAsSymbolNode() && glslangArguments[i]->getAsSymbolNode()->getId() == glslangArguments[i-1]->getAsSymbolNode()->getId()) { // Reuse the id if possible - arguments.push_back(arguments[i-1]); + spv::Id id = arguments[i-1]; + arguments.push_back(id); } else { arguments.push_back(accessChainLoad(glslangArguments[i]->getAsTyped()->getType())); } @@ -7863,6 +8472,40 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO } } + if (cracked.gather) { + spv::GatherModes mode = spv::GatherModes::Max; + switch (node->getOp()) { + case glslang::EOpTextureGather4x1QCOM: + case glslang::EOpTextureGather4x1OffsetQCOM: + mode = spv::GatherModes::Gather4x1QCOM; + break; + case glslang::EOpTextureGatherDQCOM: + case glslang::EOpTextureGatherDOffsetQCOM: + mode = spv::GatherModes::GatherDQCOM; + break; + case glslang::EOpTextureGatherH2QCOM: + case glslang::EOpTextureGatherH2OffsetQCOM: + mode = spv::GatherModes::GatherH2QCOM; + break; + case glslang::EOpTextureGatherV2QCOM: + case glslang::EOpTextureGatherV2OffsetQCOM: + mode = spv::GatherModes::GatherV2QCOM; + break; + default: + break; + } + + if (mode != spv::GatherModes::Max) { + if (mode == spv::GatherModes::Gather4x1QCOM) { + builder.addCapability(spv::Capability::ImageGatherLinearQCOM); + } else { + builder.addCapability(spv::Capability::ImageGatherExtendedModesQCOM); + } + builder.addExtension(spv::E_SPV_QCOM_image_processing3); + params.gatherMode = builder.makeIntConstant(unsigned(mode)); + } + } + // nonprivate if (imageType.getQualifier().nonprivate) { params.nonprivate = true; @@ -8591,6 +9234,27 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe case glslang::EOpUnpackUint4x16: case glslang::EOpPackFloat2x16: case glslang::EOpUnpackFloat2x16: + case glslang::EOpUnpackFloat2xE2M1: + case glslang::EOpUnpackFloat4xE2M1: + case glslang::EOpUnpackFloat8xE2M1: + case glslang::EOpUnpackFloat16xE2M1: + case glslang::EOpPackFloat2xE2M1: + case glslang::EOpPackFloat4xE2M1: + case glslang::EOpPackFloat8xE2M1: + case glslang::EOpPackFloat16xE2M1: + case glslang::EOpUnpackFloat4xE3M2: + case glslang::EOpUnpackFloat8xE3M2: + case glslang::EOpUnpackFloat16xE3M2: + case glslang::EOpPackFloat4xE3M2: + case glslang::EOpPackFloat8xE3M2: + case glslang::EOpPackFloat16xE3M2: + case glslang::EOpUnpackFloat4xE2M3: + case glslang::EOpUnpackFloat8xE2M3: + case glslang::EOpUnpackFloat16xE2M3: + case glslang::EOpPackFloat4xE2M3: + case glslang::EOpPackFloat8xE2M3: + case glslang::EOpPackFloat16xE2M3: + unaryOp = spv::Op::OpBitcast; break; @@ -9122,7 +9786,8 @@ spv::Id TGlslangToSpvTraverser::createIntWidthConversion(spv::Id operand, int ve } spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecorations& decorations, spv::Id destType, - spv::Id operand, glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType) + spv::Id operand, glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType, + bool sameCoopMatUse) { spv::Op convOp = spv::Op::OpNop; spv::Id zero = 0; @@ -9131,6 +9796,14 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora int vectorSize = builder.isVectorType(destType) ? builder.getNumTypeComponents(destType) : 0; if (IsOpNumericConv(op) || op == glslang::EOpConstructSaturated) { + if (builder.isCooperativeMatrixType(destType)) { + if (!sameCoopMatUse) { + enableCoopMatConversions(); + } + auto result = createCoopMatConversion(destType, operand, resultBasicType, operandBasicType, sameCoopMatUse, false); + return result; + } + if (isTypeSignedInt(operandBasicType) && isTypeFloat(resultBasicType)) { convOp = spv::Op::OpConvertSToF; } @@ -10310,6 +10983,26 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: return 0; } break; + case glslang::EOpControlBarrierArriveEXT: + case glslang::EOpControlBarrierWaitEXT: + { + builder.addExtension(spv::E_SPV_EXT_split_barrier); + builder.addCapability(spv::Capability::SplitBarrierEXT); + // This is for the extended controlBarrierArrive/Wait functions, with four operands. + // The unextended controlBarrierArrive/controlBarrierWait() go through createNoArgOperation. + assert(operands.size() == 4); + auto const executionScope = (spv::Scope)builder.getConstantScalar(operands[0]); + auto const memoryScope = (spv::Scope)builder.getConstantScalar(operands[1]); + auto const semantics = (spv::MemorySemanticsMask)(builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3])); + builder.createSplitControlBarrier((op == glslang::EOpControlBarrierArriveEXT ? spv::Op::OpControlBarrierArriveEXT + : spv::Op::OpControlBarrierWaitEXT), + executionScope, memoryScope, semantics); + if (anySet(semantics, spv::MemorySemanticsMask::OutputMemoryKHR)) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); + } + return 0; + } + break; case glslang::EOpMemoryBarrier: { // This is for the extended memoryBarrier function, with three operands. @@ -11005,6 +11698,25 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: case glslang::EOpTensorViewSetClipNV: opCode = spv::Op::OpTensorViewSetClipNV; break; + case glslang::EOpCooperativeMatrixGetCoordinateEXT: + opCode = spv::Op::OpCooperativeMatrixGetCoordinateEXT; + break; + case glslang::EOpBitcastExtractE2M1: + case glslang::EOpBitcastExtractE3M2: + case glslang::EOpBitcastExtractE2M3: + { + spv::Id scalarTypeId = op == glslang::EOpBitcastExtractE2M1 ? builder.makeFloatE2M1Type() : + op == glslang::EOpBitcastExtractE3M2 ? builder.makeFloatE3M2Type() : builder.makeFloatE2M3Type(); + opCode = spv::Op::OpBitcastExtractEXT; + typeId = scalarTypeId; + if (builder.isVectorType(builder.getTypeId(operands[0]))) { + int vecSize = builder.getNumTypeComponents(builder.getTypeId(operands[0])); + typeId = builder.makeVectorType(typeId, vecSize); + } + builder.addExtension(spv::E_SPV_EXT_ocp_microscaling_types); + builder.addCapability(spv::Capability::BitcastExtractEXT); + break; + } default: return 0; } @@ -11112,6 +11824,26 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: spv::MemorySemanticsMask::AcquireRelease); } return 0; + case glslang::EOpControlBarrierArriveEXT: + builder.addExtension(spv::E_SPV_EXT_split_barrier); + builder.addCapability(spv::Capability::SplitBarrierEXT); + if (glslangIntermediate->usingVulkanMemoryModel()) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); + } + builder.createSplitControlBarrier(spv::Op::OpControlBarrierArriveEXT, spv::Scope::Workgroup, spv::Scope::Workgroup, + spv::MemorySemanticsMask::WorkgroupMemory | + spv::MemorySemanticsMask::Release); + return 0; + case glslang::EOpControlBarrierWaitEXT: + builder.addExtension(spv::E_SPV_EXT_split_barrier); + builder.addCapability(spv::Capability::SplitBarrierEXT); + if (glslangIntermediate->usingVulkanMemoryModel()) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); + } + builder.createSplitControlBarrier(spv::Op::OpControlBarrierWaitEXT, spv::Scope::Workgroup, spv::Scope::Workgroup, + spv::MemorySemanticsMask::WorkgroupMemory | + spv::MemorySemanticsMask::Acquire); + return 0; case glslang::EOpMemoryBarrier: builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAllMemory | spv::MemorySemanticsMask::AcquireRelease); @@ -11338,8 +12070,15 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, spv::Decoration::Component, symbol->getQualifier().layoutComponent); if (symbol->getQualifier().hasIndex()) builder.addDecoration(id, spv::Decoration::Index, symbol->getQualifier().layoutIndex); - if (symbol->getType().getQualifier().hasSpecConstantId()) + if (symbol->getType().getQualifier().hasSpecConstantId()) { builder.addDecoration(id, spv::Decoration::SpecId, symbol->getType().getQualifier().layoutSpecConstantId); + // GL_EXT_opacity_micromap_ray_query_mode: if gl_EnableOpacityMicromapEXT is materialized (i.e. + // it is read somewhere), remember its spec constant so finishSpv() references this same one for + // the OpacityMicromapIdKHR execution mode rather than synthesizing a duplicate SpecId. + if (glslangIntermediate->getEnableOpacityMicromapSpecId() != glslang::TQualifier::layoutNotSet && + symbol->getName() == "gl_EnableOpacityMicromapEXT") + opacityMicromapEnableConstId = id; + } // atomic counters use this: if (symbol->getQualifier().hasOffset()) builder.addDecoration(id, spv::Decoration::Offset, symbol->getQualifier().layoutOffset); @@ -11765,6 +12504,21 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla case glslang::EbtFloatE4M3: spvConsts.push_back(builder.makeFloatE4M3Constant(zero ? 0.0F : (float)consts[nextConst].getDConst())); break; + case glslang::EbtFloatE2M1: + spvConsts.push_back(builder.makeFloatE2M1Constant(zero ? 0.0F : (float)consts[nextConst].getDConst())); + break; + case glslang::EbtFloatE3M2: + spvConsts.push_back(builder.makeFloatE3M2Constant(zero ? 0.0F : (float)consts[nextConst].getDConst())); + break; + case glslang::EbtFloatE2M3: + spvConsts.push_back(builder.makeFloatE2M3Constant(zero ? 0.0F : (float)consts[nextConst].getDConst())); + break; + case glslang::EbtFloatUE8M0: + spvConsts.push_back(builder.makeFloatUE8M0Constant(zero ? 0.0F : (float)consts[nextConst].getDConst())); + break; + case glslang::EbtFloatMXINT8: + spvConsts.push_back(builder.makeFloatMXINT8Constant(zero ? 0.0F : (float)consts[nextConst].getDConst())); + break; default: assert(0); break; @@ -11826,6 +12580,21 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla case glslang::EbtFloatE4M3: scalar = builder.makeFloatE4M3Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant); break; + case glslang::EbtFloatE2M1: + scalar = builder.makeFloatE2M1Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant); + break; + case glslang::EbtFloatE3M2: + scalar = builder.makeFloatE3M2Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant); + break; + case glslang::EbtFloatE2M3: + scalar = builder.makeFloatE2M3Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant); + break; + case glslang::EbtFloatUE8M0: + scalar = builder.makeFloatUE8M0Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant); + break; + case glslang::EbtFloatMXINT8: + scalar = builder.makeFloatMXINT8Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant); + break; case glslang::EbtReference: scalar = builder.makeUint64Constant(zero ? 0 : consts[nextConst].getU64Const(), specConstant); scalar = builder.createUnaryOp(spv::Op::OpBitcast, typeId, scalar); @@ -11992,6 +12761,17 @@ spv::Id TGlslangToSpvTraverser::getExtBuiltins(const char* name) } } +void TGlslangToSpvTraverser::enableCoopMatConversions() +{ + if (glslangIntermediate->usingCoopMatMaint1()) { + builder.addCapability(spv::Capability::CooperativeMatrixConversionsEXT); + builder.addExtension(spv::E_SPV_EXT_cooperative_matrix_maintenance1); + } else { + builder.addCapability(spv::Capability::CooperativeMatrixConversionsNV); + builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); + } +} + } // end anonymous namespace namespace glslang { @@ -12109,8 +12889,8 @@ void GlslangToSpv(const TIntermediate& intermediate, std::vector& // If from HLSL, run spirv-opt to "legalize" the SPIR-V for Vulkan // eg. forward and remove memory writes of opaque types. bool prelegalization = intermediate.getSource() == EShSourceHlsl; - if ((prelegalization || options->optimizeSize) && !options->disableOptimizer) { - SpirvToolsTransform(intermediate, spirv, logger, options); + if ((prelegalization || options->optimizeSize || options->optimizePerformance) && !options->disableOptimizer) { + SpirvToolsTransform(intermediate, spirv, logger, options, prelegalization); prelegalization = false; } else if (options->stripDebugInfo) { diff --git a/3rdparty/glslang/SPIRV/GlslangToSpv.h b/3rdparty/glslang/SPIRV/GlslangToSpv.h index 9fb4f3fff..1abf5a22b 100644 --- a/3rdparty/glslang/SPIRV/GlslangToSpv.h +++ b/3rdparty/glslang/SPIRV/GlslangToSpv.h @@ -49,6 +49,7 @@ struct SpvOptions { bool stripDebugInfo {false}; bool disableOptimizer {true}; bool optimizeSize {false}; + bool optimizePerformance {false}; bool disassemble {false}; bool validate {false}; bool emitNonSemanticShaderDebugInfo {false}; diff --git a/3rdparty/glslang/SPIRV/SpvBuilder.cpp b/3rdparty/glslang/SPIRV/SpvBuilder.cpp index fdc37b02c..8707009e3 100644 --- a/3rdparty/glslang/SPIRV/SpvBuilder.cpp +++ b/3rdparty/glslang/SPIRV/SpvBuilder.cpp @@ -66,6 +66,7 @@ Builder::Builder(unsigned int spvVersion, unsigned int magicNumber, SpvBuildLogg uniqueId(0), entryPointFunction(nullptr), generatingOpCodeForSpecConst(false), + descHeapByteArrayType(NoResult), logger(buildLogger) { clearAccessChain(); @@ -424,6 +425,65 @@ Id Builder::makeFloatE4M3Type() return type->getResultId(); } +Id Builder::makeFloatOcpMicroscalingType(uint32_t width, FPEncoding encoding, Capability cap) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeFloat)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeFloat)][t]; + if (type->getNumOperands() != 2) { + continue; + } + if (type->getImmediateOperand(0) == (unsigned)width && + type->getImmediateOperand(1) == encoding) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, Op::OpTypeFloat); + type->addImmediateOperand(width); + type->addImmediateOperand(encoding); + groupedTypes[enumCast(Op::OpTypeFloat)].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + addExtension(spv::E_SPV_EXT_ocp_microscaling_types); + addCapability(cap); + + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = makeFloatDebugType(width, makeUintConstant((unsigned)encoding)); + debugTypeIdLookup[type->getResultId()] = debugResultId; + } + + return type->getResultId(); +} + +Id Builder::makeFloatE2M1Type() +{ + return makeFloatOcpMicroscalingType(4, FPEncoding::Float4E2M1EXT, Capability::Float4EXT); +} + +Id Builder::makeFloatE3M2Type() +{ + return makeFloatOcpMicroscalingType(6, FPEncoding::Float6E3M2EXT, Capability::Float6EXT); +} + +Id Builder::makeFloatE2M3Type() +{ + return makeFloatOcpMicroscalingType(6, FPEncoding::Float6E2M3EXT, Capability::Float6EXT); +} + +Id Builder::makeFloatUE8M0Type() +{ + return makeFloatOcpMicroscalingType(8, FPEncoding::Float8UnsignedE8M0EXT, Capability::Float8UnsignedE8M0EXT); +} + +Id Builder::makeFloatMXINT8Type() +{ + return makeFloatOcpMicroscalingType(8, FPEncoding::MXInt8EXT, Capability::MXInt8EXT); +} + // Make a struct without checking for duplication. // See makeStructResultType() for non-decorated structs // needed as the result of some instructions, which does @@ -1041,6 +1101,16 @@ Id Builder::makeFloatDebugType(int const width, Id const fpEncoding) typeName = "floate4m3_t"; else if (fpEncoding == makeUintConstant((unsigned)FPEncoding::Float8E5M2EXT)) typeName = "floate5m2_t"; + else if (fpEncoding == makeUintConstant((unsigned)FPEncoding::Float4E2M1EXT)) + typeName = "floate2m1_t"; + else if (fpEncoding == makeUintConstant((unsigned)FPEncoding::Float6E3M2EXT)) + typeName = "floate3m2_t"; + else if (fpEncoding == makeUintConstant((unsigned)FPEncoding::Float6E2M3EXT)) + typeName = "floate2m3_t"; + else if (fpEncoding == makeUintConstant((unsigned)FPEncoding::Float8UnsignedE8M0EXT)) + typeName = "floatue8m0_t"; + else if (fpEncoding == makeUintConstant((unsigned)FPEncoding::MXInt8EXT)) + typeName = "floatmxint8_t"; else typeName = "float"; } else { @@ -2108,16 +2178,16 @@ Id Builder::makeBFloat16Constant(float bf16, bool specConstant) return resultId; } -Id Builder::makeFloatE5M2Constant(float fe5m2, bool specConstant) +template +Id Builder::makeFloatConstantHelper(float f, Id typeId, bool specConstant) { Op opcode = specConstant ? Op::OpSpecConstant : Op::OpConstant; - Id typeId = makeFloatE5M2Type(); - spvutils::HexFloat> fVal(fe5m2); - spvutils::HexFloat> fe5m2Val(0); - fVal.castTo(fe5m2Val, spvutils::kRoundToZero); + spvutils::HexFloat> fVal(f); + spvutils::HexFloat> smallFloatVal(0); + fVal.castTo(smallFloatVal, spvutils::kRoundToZero); - unsigned value = fe5m2Val.value().getAsFloat().get_value(); + unsigned value = smallFloatVal.value().getAsFloat().get_value(); // See if we already made it. Applies only to regular constants, because specialization constants // must remain distinct for the purpose of applying a SpecId decoration. @@ -2140,16 +2210,44 @@ Id Builder::makeFloatE5M2Constant(float fe5m2, bool specConstant) return resultId; } +Id Builder::makeFloatE5M2Constant(float fe5m2, bool specConstant) +{ + return makeFloatConstantHelper(fe5m2, makeFloatE5M2Type(), specConstant); +} + Id Builder::makeFloatE4M3Constant(float fe4m3, bool specConstant) +{ + return makeFloatConstantHelper(fe4m3, makeFloatE4M3Type(), specConstant); +} + +Id Builder::makeFloatE2M1Constant(float fe2m1, bool specConstant) +{ + return makeFloatConstantHelper(fe2m1, makeFloatE2M1Type(), specConstant); +} + +Id Builder::makeFloatE3M2Constant(float fe3m2, bool specConstant) +{ + return makeFloatConstantHelper(fe3m2, makeFloatE3M2Type(), specConstant); +} + +Id Builder::makeFloatE2M3Constant(float fe2m3, bool specConstant) +{ + return makeFloatConstantHelper(fe2m3, makeFloatE2M3Type(), specConstant); +} + +Id Builder::makeFloatUE8M0Constant(float fue8m0, bool specConstant) { Op opcode = specConstant ? Op::OpSpecConstant : Op::OpConstant; - Id typeId = makeFloatE4M3Type(); + Id typeId = makeFloatUE8M0Type(); - spvutils::HexFloat> fVal(fe4m3); - spvutils::HexFloat> fe4m3Val(0); - fVal.castTo(fe4m3Val, spvutils::kRoundToZero); - - unsigned value = fe4m3Val.value().getAsFloat().get_value(); + fue8m0 = std::max(fue8m0, 0.f); + union { + float f; + uint32_t u; + } un; + un.f = fue8m0; + // extract the exponent, this effectively rounds to zero. + uint32_t value = un.u >> 23; // See if we already made it. Applies only to regular constants, because specialization constants // must remain distinct for the purpose of applying a SpecId decoration. @@ -2166,7 +2264,40 @@ Id Builder::makeFloatE4M3Constant(float fe4m3, bool specConstant) Id resultId = c->getResultId(); if (!specConstant) { - ScalarConstantKey key{enumCast(Op::OpTypeFloat), enumCast(opcode), typeId, value, 0}; + ScalarConstantKey key{ enumCast(Op::OpTypeFloat), enumCast(opcode), typeId, value, 0 }; + groupedScalarConstantResultIDs[key] = resultId; + } + return resultId; +} + +Id Builder::makeFloatMXINT8Constant(float mxint8, bool specConstant) +{ + Op opcode = specConstant ? Op::OpSpecConstant : Op::OpConstant; + Id typeId = makeFloatMXINT8Type(); + + // clamp and convert to fixed point. + mxint8 = std::min(mxint8, 127.f/64.f); + mxint8 = std::max(mxint8, -127.f/64.f); + mxint8 *= 64; + mxint8 = roundf(mxint8); + uint32_t value = ((int32_t)mxint8) & 0xFF; + + // See if we already made it. Applies only to regular constants, because specialization constants + // must remain distinct for the purpose of applying a SpecId decoration. + if (!specConstant) { + Id existing = findScalarConstant(Op::OpTypeFloat, opcode, typeId, value); + if (existing) + return existing; + } + + Instruction* c = new Instruction(getUniqueId(), typeId, opcode); + c->addImmediateOperand(value); + constantsTypesGlobals.push_back(std::unique_ptr(c)); + module.mapInstruction(c); + + Id resultId = c->getResultId(); + if (!specConstant) { + ScalarConstantKey key{ enumCast(Op::OpTypeFloat), enumCast(opcode), typeId, value, 0 }; groupedScalarConstantResultIDs[key] = resultId; } return resultId; @@ -2231,60 +2362,23 @@ void Builder::requireNonSemanticShaderDebugInfoVersion(unsigned version) Id Builder::findCompositeConstant(Op typeClass, Op opcode, Id typeId, const std::vector& comps, size_t numMembers) { - Instruction* constant = nullptr; - bool found = false; - for (int i = 0; i < (int)groupedCompositeConstants[enumCast(typeClass)].size(); ++i) { - constant = groupedCompositeConstants[enumCast(typeClass)][i]; - - if (constant->getTypeId() != typeId) - continue; - - if (constant->getOpCode() != opcode) { - continue; - } - - if (constant->getNumOperands() != (int)numMembers) - continue; - - // same contents? - bool mismatch = false; - for (int op = 0; op < constant->getNumOperands(); ++op) { - if (constant->getIdOperand(op) != comps[op]) { - mismatch = true; - break; - } - } - if (! mismatch) { - found = true; - break; - } + auto it = groupedCompositeConstants.find( + CompositeConstantKey(typeClass, opcode, typeId, comps, numMembers)); + if (it != groupedCompositeConstants.end()) { + const Instruction* constant = (*it).getInstruction(); + return constant->getResultId(); } - - return found ? constant->getResultId() : NoResult; + return NoResult; } -Id Builder::findStructConstant(Id typeId, const std::vector& comps) +Id Builder::findStructConstant(Id typeId, const std::vector& comps, size_t numMembers) { - Instruction* constant = nullptr; - bool found = false; - for (int i = 0; i < (int)groupedStructConstants[typeId].size(); ++i) { - constant = groupedStructConstants[typeId][i]; - - // same contents? - bool mismatch = false; - for (int op = 0; op < constant->getNumOperands(); ++op) { - if (constant->getIdOperand(op) != comps[op]) { - mismatch = true; - break; - } - } - if (! mismatch) { - found = true; - break; - } + auto it = groupedStructConstants.find(StructConstantKey(typeId, comps, numMembers)); + if (it != groupedStructConstants.end()) { + const Instruction* constant = (*it).getInstruction(); + return constant->getResultId(); } - - return found ? constant->getResultId() : NoResult; + return NoResult; } // Comments in header @@ -2326,7 +2420,7 @@ Id Builder::makeCompositeConstant(Id typeId, const std::vector& members, boo break; case Op::OpTypeStruct: if (! specConstant) { - Id existing = findStructConstant(typeId, members); + Id existing = findStructConstant(typeId, members, numMembers); if (existing) return existing; } @@ -2342,9 +2436,9 @@ Id Builder::makeCompositeConstant(Id typeId, const std::vector& members, boo c->addIdOperand(members[op]); constantsTypesGlobals.push_back(std::unique_ptr(c)); if (typeClass == Op::OpTypeStruct) - groupedStructConstants[typeId].push_back(c); + groupedStructConstants.insert(StructConstantKey(c)); else - groupedCompositeConstants[enumCast(typeClass)].push_back(c); + groupedCompositeConstants.insert(CompositeConstantKey(typeClass, c)); module.mapInstruction(c); return c->getResultId(); @@ -3136,7 +3230,7 @@ Instruction* Builder::createDescHeapLoadStoreBaseRemap(Id baseId, Op op) // base type (from run time array) spv::Id resultTy = getIdOperand(baseId, 0); // Descriptor heap using run time array. - if (accessChain.descHeapInfo.descHeapStorageClass != StorageClass::Max) + if (accessChain.descHeapInfo.descStorageClass != StorageClass::Max) resultTy = getIdOperand(resultTy, 0); if (instOp != Op::OpUntypedAccessChainKHR) { assert(false && "Not a untyped load type"); @@ -3153,110 +3247,64 @@ Instruction* Builder::createDescHeapLoadStoreBaseRemap(Id baseId, Op op) return inst; } -uint32_t Builder::isStructureHeapMember(Id id, std::vector indexChain, - unsigned int idx, spv::BuiltIn* bt, uint32_t* firstArrIndex) +spv::Id Builder::getOrCreateDescHeapByteArrayType() { - unsigned currentIdx = idx; - // Process types, only array types could contain no constant id operands. - Id baseId = id; - if (baseId == NoType) - return 0; - if (isPointerType(baseId)) - baseId = getContainedTypeId(baseId); - auto baseInst = module.getInstruction(baseId); - if (baseInst->getOpCode() == spv::Op::OpTypeArray || - baseInst->getOpCode() == spv::Op::OpTypeRuntimeArray) { - if (firstArrIndex) - *firstArrIndex = currentIdx; - baseId = getContainedTypeId(baseId); - baseInst = module.getInstruction(baseId); - currentIdx++; - } - if (currentIdx >= indexChain.size()) - return 0; - // Process index op. - auto indexInst = module.getInstruction(indexChain[currentIdx]); - if (indexInst->getOpCode() != spv::Op::OpConstant) - return 0; - auto index = indexInst->getImmediateOperand(0); - for (auto dec = decorations.begin(); dec != decorations.end(); dec++) { - if (dec->get()->getOpCode() == spv::Op::OpMemberDecorate && dec->get()->getIdOperand(0) == baseId && - dec->get()->getImmediateOperand(1) == index && - dec->get()->getImmediateOperand(2) == spv::Decoration::BuiltIn && - (dec->get()->getImmediateOperand(3) == (unsigned)spv::BuiltIn::ResourceHeapEXT || - dec->get()->getImmediateOperand(3) == (unsigned)spv::BuiltIn::SamplerHeapEXT)) { - if (bt) - *bt = (spv::BuiltIn)dec->get()->getImmediateOperand(3); - return currentIdx; - } - } - // New base. - if (baseInst->getOpCode() == spv::Op::OpTypeStruct) { - if (!baseInst->isIdOperand(index) || idx == indexChain.size() - 1) - return 0; - return isStructureHeapMember(baseInst->getIdOperand(index), indexChain, currentIdx + 1, bt, firstArrIndex); - } + if (descHeapByteArrayType != NoResult) + return descHeapByteArrayType; - return 0; + addCapability(Capability::Int8); + descHeapByteArrayType = makeRuntimeArray(makeUintType(8)); + addDecoration(descHeapByteArrayType, Decoration::ArrayStride, 1); + return descHeapByteArrayType; } // Comments in header Id Builder::createDescHeapAccessChain() { - uint32_t rsrcOffsetIdx = accessChain.descHeapInfo.structRsrcTyOffsetCount; - if (rsrcOffsetIdx != 0) - accessChain.base = accessChain.descHeapInfo.structRemappedBase; - Id base = accessChain.base; - Id baseTy = accessChain.descHeapInfo.descHeapBaseTy; - uint32_t explicitArrayStride = accessChain.descHeapInfo.descHeapBaseArrayStride; - std::vector& offsets = accessChain.indexChain; - uint32_t firstArrIndex = accessChain.descHeapInfo.structRsrcTyFirstArrIndex; - // both typeBufferEXT and UntypedPointer only contains storage class info. - StorageClass storageClass = (StorageClass)accessChain.descHeapInfo.descHeapStorageClass; - // Make the untyped access chain instruction - Instruction* chain = new Instruction(getUniqueId(), makeUntypedPointer(getStorageClass(base)), Op::OpUntypedAccessChainKHR); + std::vector& heapOffsets = accessChain.descHeapInfo.descHeapIndexChain; + assert(heapOffsets.size() != 0); + Id heapBase = accessChain.base; + Id heapBaseTy = accessChain.descHeapInfo.descHeapBaseTy; + Id heapBaseOffset = accessChain.descHeapInfo.descHeapBaseOffset; + StorageClass storageClass = (StorageClass)accessChain.descHeapInfo.descStorageClass; + + if (heapBaseOffset != NoResult) { + const std::pair cacheKey(heapBase, heapBaseOffset); + auto cachedShiftedBase = descHeapShiftedBaseCache.find(cacheKey); + if (cachedShiftedBase != descHeapShiftedBaseCache.end()) { + heapBase = cachedShiftedBase->second; + } else { + Id shiftedBaseId = getUniqueId(); + const std::vector shiftedBaseOffsets(1, heapBaseOffset); + heapBase = createUntypedAccessChain(getOrCreateDescHeapByteArrayType(), heapBase, + shiftedBaseOffsets, shiftedBaseId); + descHeapShiftedBaseCache.insert(std::make_pair(cacheKey, heapBase)); + } + } + + // First descriptor heap access chain + Id chain = createUntypedAccessChain(heapBaseTy, heapBase, heapOffsets); + + // Create OpBufferPointer for loading target buffer descriptor if (storageClass == spv::StorageClass::Uniform || storageClass == spv::StorageClass::StorageBuffer) { - // For buffer and uniform heap, split first index as heap array index - // Insert BufferPointer op and construct another access chain with following indexes. - Id bufferTy = makeUntypedPointer(storageClass, true); - Id strideId = NoResult; - if (explicitArrayStride == 0) { - strideId = createConstantSizeOfEXT(bufferTy); - } else { - strideId = makeUintConstant(explicitArrayStride); - } - Id runtimeArrTy = makeRuntimeArray(bufferTy); - addDecorationId(runtimeArrTy, spv::Decoration::ArrayStrideIdEXT, strideId); - chain->addIdOperand(runtimeArrTy); - chain->addIdOperand(base); - // We would only re-target current member resource directly to resource/sampler heap base. - // So the previous access chain index towards final resource type is not needed? - // In current draft, only keep the first 'array index' into last access chain index. - // As those resource can't be declared as an array, in current first draft, array index will - // be the second index. This will be refined later. - chain->addIdOperand(offsets[firstArrIndex]); - if (rsrcOffsetIdx != 0) { - for (uint32_t i = 0; i < rsrcOffsetIdx + 1; i++) { - if (rsrcOffsetIdx + i + 1 < offsets.size()) - offsets[i] = offsets[i + rsrcOffsetIdx + 1]; - } - } else { - for (uint32_t i = 0; i < offsets.size() - 1; i++) { - offsets[i] = offsets[i + 1]; - } - } - for (uint32_t i = 0; i < rsrcOffsetIdx + 1; i++) - offsets.pop_back(); - addInstruction(std::unique_ptr(chain)); - // Create OpBufferPointer for loading target buffer descriptor. - Id bufferPtrTy = makePointer(storageClass, baseTy); + // Create OpBufferPointer for the descriptor, then use a typed access chain for buffer data. + Id descriptorTy = accessChain.descHeapInfo.descTy; + Id bufferPtrTy = makePointer(storageClass, descriptorTy); Instruction* bufferDataPtr = new Instruction(getUniqueId(), bufferPtrTy, Op::OpBufferPointerEXT); - bufferDataPtr->addIdOperand(chain->getResultId()); + bufferDataPtr->addIdOperand(chain); addInstruction(std::unique_ptr(bufferDataPtr)); + if (accessChain.descHeapInfo.descWriteonly) + addDecoration(bufferDataPtr->getResultId(), Decoration::NonReadable); + if (accessChain.descHeapInfo.descReadonly && storageClass == StorageClass::StorageBuffer) + addDecoration(bufferDataPtr->getResultId(), Decoration::NonWritable); + + std::vector& offsets = accessChain.indexChain; + if (offsets.empty()) + return bufferDataPtr->getResultId(); // Form a second, typed access chain for accessing buffer data. - Id resultTy = baseTy; + Id resultTy = descriptorTy; for (int i = 0; i < (int)offsets.size(); ++i) { if (isStructType(resultTy)) { assert(isConstantScalar(offsets[i])); @@ -3273,23 +3321,9 @@ Id Builder::createDescHeapAccessChain() bufferChain->addIdOperand(offsets[i]); addInstruction(std::unique_ptr(bufferChain)); return bufferChain->getResultId(); - } else { - // image/sampler heap - Id strideId = NoResult; - if (explicitArrayStride == 0) { - strideId = createConstantSizeOfEXT(baseTy); - } else { - strideId = makeUintConstant(explicitArrayStride); - } - Id runtimeArrTy = makeRuntimeArray(baseTy); - addDecorationId(runtimeArrTy, spv::Decoration::ArrayStrideIdEXT, strideId); - chain->addIdOperand(runtimeArrTy); - chain->addIdOperand(base); - for (int i = 0; i < (int)offsets.size(); ++i) - chain->addIdOperand(offsets[i]); - addInstruction(std::unique_ptr(chain)); - return chain->getResultId(); } + + return chain; } // Comments in header @@ -3310,6 +3344,24 @@ Id Builder::createAccessChain(StorageClass storageClass, Id base, const std::vec return chain->getResultId(); } +// Comments in header +Id Builder::createUntypedAccessChain(Id resultType, Id base, const std::vector& offsets, Id resultId) +{ + if (resultId == NoResult) + resultId = getUniqueId(); + + Instruction* chain = new Instruction(resultId, makeUntypedPointer(getStorageClass(base)), + Op::OpUntypedAccessChainKHR); + chain->reserveOperands(offsets.size() + 2); + chain->addIdOperand(resultType); + chain->addIdOperand(base); + for (int i = 0; i < (int)offsets.size(); ++i) + chain->addIdOperand(offsets[i]); + addInstruction(std::unique_ptr(chain)); + + return chain->getResultId(); +} + Id Builder::createArrayLength(Id base, unsigned int member, unsigned int bits) { spv::Id intType = makeUintType(bits); @@ -3488,6 +3540,16 @@ void Builder::createControlBarrier(Scope execution, Scope memory, MemorySemantic addInstruction(std::unique_ptr(op)); } +void Builder::createSplitControlBarrier(Op opcode, Scope execution, Scope memory, MemorySemanticsMask semantics) +{ + Instruction* op = new Instruction(opcode); + op->reserveOperands(3); + op->addIdOperand(makeUintConstant(execution)); + op->addIdOperand(makeUintConstant(memory)); + op->addIdOperand(makeUintConstant(semantics)); + addInstruction(std::unique_ptr(op)); +} + void Builder::createMemoryBarrier(Scope executionScope, MemorySemanticsMask memorySemantics) { Instruction* op = new Instruction(Op::OpMemoryBarrier); @@ -3614,6 +3676,20 @@ Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector& op return op->getResultId(); } +Id Builder::createSpecConstantAlignTo(Id value, Id alignment) +{ + Id valueModAlignment = createSpecConstantOp(Op::OpUMod, makeUintType(32), {value, alignment}, {}); + Id paddingToAlignment = createSpecConstantOp(Op::OpISub, makeUintType(32), {alignment, valueModAlignment}, {}); + Id padding = createSpecConstantOp(Op::OpUMod, makeUintType(32), {paddingToAlignment, alignment}, {}); + return createSpecConstantOp(Op::OpIAdd, makeUintType(32), {value, padding}, {}); +} + +Id Builder::createSpecConstantSelectMax(Id lhs, Id rhs) +{ + Id lhsGreater = createSpecConstantOp(Op::OpUGreaterThan, makeBoolType(), {lhs, rhs}, {}); + return createSpecConstantOp(Op::OpSelect, makeUintType(32), {lhsGreater, lhs, rhs}, {}); +} + Id Builder::createFunctionCall(spv::Function* function, const std::vector& args) { Instruction* op = new Instruction(getUniqueId(), function->getReturnType(), Op::OpFunctionCall); @@ -3782,6 +3858,8 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, texArgs.push_back(parameters.Dref); if (parameters.component != NoResult) texArgs.push_back(parameters.component); + if (gather && parameters.gatherMode != NoResult) + texArgs.push_back(parameters.gatherMode); if (parameters.granularity != NoResult) texArgs.push_back(parameters.granularity); @@ -3856,6 +3934,8 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, if (mask != ImageOperandsMask::MaskNone) texArgs.insert(texArgs.begin() + optArgNum, (Id)mask); + bool isTextureGatherExtended = (gather && parameters.gatherMode != NoResult); + // // Set up the instruction // @@ -3876,6 +3956,8 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, else if (sparse) opCode = Op::OpImageSparseGather; + else if (isTextureGatherExtended) + opCode = Op::OpImageGatherQCOM; else opCode = Op::OpImageGather; } else if (explicitLod) { @@ -4611,12 +4693,13 @@ void Builder::clearAccessChain() accessChain.coherentFlags.clear(); accessChain.alignment = 0; accessChain.descHeapInfo.descHeapBaseTy = NoResult; - accessChain.descHeapInfo.descHeapStorageClass = StorageClass::Max; + accessChain.descHeapInfo.descHeapBaseOffset = NoResult; + accessChain.descHeapInfo.descHeapIndexChain.clear(); + accessChain.descHeapInfo.descTy = NoResult; + accessChain.descHeapInfo.descStorageClass = StorageClass::Max; + accessChain.descHeapInfo.descReadonly = false; + accessChain.descHeapInfo.descWriteonly = false; accessChain.descHeapInfo.descHeapInstId.clear(); - accessChain.descHeapInfo.descHeapBaseArrayStride = NoResult; - accessChain.descHeapInfo.structRemappedBase = NoResult; - accessChain.descHeapInfo.structRsrcTyOffsetCount = 0; - accessChain.descHeapInfo.structRsrcTyFirstArrIndex = 0; } // Comments in header @@ -4693,19 +4776,22 @@ void Builder::accessChainStore(Id rvalue, Decoration nonUniform, spv::MemoryAcce // dynamic component should be gone assert(accessChain.component == NoResult); - // If swizzle still exists, it may be out-of-order, we must load the target vector, - // extract and insert elements to perform writeMask and/or swizzle. - if (accessChain.swizzle.size() > 0) { - Id tempBaseId = createLoad(base, spv::NoPrecision); - source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, source, accessChain.swizzle); - } - // take LSB of alignment alignment = alignment & ~(alignment & (alignment-1)); if (getStorageClass(base) == StorageClass::PhysicalStorageBufferEXT) { memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessMask::Aligned); } + // If swizzle still exists, it may be out-of-order, we must load the target vector, + // extract and insert elements to perform writeMask and/or swizzle. + if (accessChain.swizzle.size() > 0) { + // The read-modify-write load hits the same pointer as the store, so it needs the + // same memory operands. In particular a PhysicalStorageBuffer access must carry + // Aligned, and postProcess() expects the operand to be present to fix up. + Id tempBaseId = createLoad(base, spv::NoPrecision, memoryAccess, scope, alignment); + source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, source, accessChain.swizzle); + } + createStore(source, base, memoryAccess, scope, alignment); } } @@ -4831,7 +4917,7 @@ Id Builder::accessChainGetInferredType() // for descriptor heap, its base data type will be determined later, // according to load/store results' types. if (accessChain.base == NoResult || isUntypedPointer(accessChain.base) || - isStructureHeapMember(getTypeId(accessChain.base), accessChain.indexChain, 0) != 0) + !accessChain.descHeapInfo.descHeapIndexChain.empty()) return NoType; Id type = getTypeId(accessChain.base); // do initial dereference @@ -4946,14 +5032,13 @@ Id Builder::collapseAccessChain() // note that non-trivial swizzling is left pending // do we have an access chain? - if (accessChain.indexChain.size() == 0) + if (accessChain.indexChain.size() == 0 && accessChain.descHeapInfo.descHeapIndexChain.empty()) return accessChain.base; // emit the access chain StorageClass storageClass = (StorageClass)module.getStorageClass(getTypeId(accessChain.base)); // when descHeap info is set, use another access chain process. - if ((isUntypedPointer(accessChain.base) || accessChain.descHeapInfo.structRsrcTyOffsetCount!= 0) && - accessChain.descHeapInfo.descHeapStorageClass != StorageClass::Max) { + if (isUntypedPointer(accessChain.base) || !accessChain.descHeapInfo.descHeapIndexChain.empty()) { accessChain.instr = createDescHeapAccessChain(); } else { accessChain.instr = createAccessChain(storageClass, accessChain.base, accessChain.indexChain); @@ -5069,10 +5154,16 @@ void Builder::createBranch(bool implicit, Block* block) // Create OpConstantSizeOfEXT Id Builder::createConstantSizeOfEXT(Id typeId) { - Instruction* inst = new Instruction(getUniqueId(), makeIntType(32), Op::OpConstantSizeOfEXT); + auto constantSize = constantSizeOfEXTIds.find(typeId); + if (constantSize != constantSizeOfEXTIds.end()) + return constantSize->second; + + Id resultType = makeUintType(32); + Instruction* inst = new Instruction(getUniqueId(), resultType, Op::OpConstantSizeOfEXT); inst->addIdOperand(typeId); constantsTypesGlobals.push_back(std::unique_ptr(inst)); module.mapInstruction(inst); + constantSizeOfEXTIds[typeId] = inst->getResultId(); return inst->getResultId(); } diff --git a/3rdparty/glslang/SPIRV/SpvBuilder.h b/3rdparty/glslang/SPIRV/SpvBuilder.h index 2a8e760ee..4eb701bbd 100644 --- a/3rdparty/glslang/SPIRV/SpvBuilder.h +++ b/3rdparty/glslang/SPIRV/SpvBuilder.h @@ -91,6 +91,230 @@ struct StructMemberDebugInfo { }; class Builder { + class CompositeConstantKey { + public: + enum Kind { + Key_Instruction, + Key_CompositeConstant, + }; + + CompositeConstantKey( + Op typeClass, Instruction* instruction) + : kind(Key_Instruction) + , instruction(instruction) + , typeClass(typeClass) + , opcode(Op::OpNop) + , typeId(NoType) + , numMembers(0) + , comps() + {} + + CompositeConstantKey( + Op typeClass, Op opcode, Id typeId, const std::vector& comps, size_t numMembers) + : kind(Key_CompositeConstant) + , instruction(nullptr) + , typeClass(typeClass) + , opcode(opcode) + , typeId(typeId) + , numMembers(numMembers) + , comps(comps) + {} + + Instruction* getInstruction() const { + return instruction; + } + + // Functor to hash an instruction key. + struct Hash { + size_t operator()(CompositeConstantKey const &key) const { + switch (key.kind) { + case Key_Instruction: + { + Instruction* constant = key.instruction; + size_t num_operands = constant->getNumOperands(); + size_t hash = std::hash()(key.typeClass) * 7 ^ + std::hash()(constant->getOpCode()) * 11 ^ + std::hash()(constant->getTypeId()) * 13 ^ + std::hash()(num_operands) * 17; + for (size_t i = 0; i < num_operands; ++i) { + hash = hash * 19 ^ std::hash()(constant->getIdOperand(i)); + } + return hash; + } + case Key_CompositeConstant: + { + size_t hash = std::hash()(key.typeClass) * 7 ^ + std::hash()(key.opcode) * 11 ^ + std::hash()(key.typeId) * 13 ^ + std::hash()(key.numMembers) * 17; + for (size_t i = 0; i < key.numMembers; ++i) { + hash = hash * 19 ^ std::hash()(key.comps[i]); + } + return hash; + } + } + return 0; + } + }; + + // Functor to compare two instruction keys. + struct Equal { + bool operator() (CompositeConstantKey const &a, CompositeConstantKey const &b) const + { + if (a.typeClass != b.typeClass) + return false; + + if (a.kind == b.kind) { + // we need only the Instruction case, as the other keys only used for searching + return + a.kind == Key_Instruction && + a.instruction == b.instruction; + } + const CompositeConstantKey* s = &a; + const CompositeConstantKey* o = &b; + + if (s->kind == Key_CompositeConstant && o->kind == Key_Instruction) { + s = o; + o = &a; + } + + // compare a composite constant with an instruction + if (s->kind == Key_Instruction && o->kind == Key_CompositeConstant) { + Instruction* constant = s->instruction; + if (constant->getTypeId() != o->typeId) + return false; + + if (constant->getOpCode() != o->opcode) { + return false; + } + + if (constant->getNumOperands() != (int)o->numMembers) + return false; + + // same contents? + for (int op = 0; op < constant->getNumOperands(); ++op) { + if (constant->getIdOperand(op) != o->comps[op]) { + return false; + } + } + return true; + } + return false; + } + }; + + private: + Kind kind; + Instruction* instruction; + Op typeClass; + Op opcode; + Id typeId; + size_t numMembers; + std::vector comps; + }; + + class StructConstantKey { + public: + enum Kind { + Key_Instruction, + Key_StructConstant, + }; + + StructConstantKey( + Instruction* instruction) + : kind(Key_Instruction) + , instruction(instruction) + , typeId(NoType) + , numMembers(0) + , comps() + {} + + StructConstantKey( + Id typeId, const std::vector& comps, size_t numMembers) + : kind(Key_StructConstant) + , instruction(nullptr) + , typeId(typeId) + , numMembers(numMembers) + , comps(comps) + {} + + Instruction* getInstruction() const { + return instruction; + } + + // Functor to hash an instruction key. + struct Hash { + size_t operator()(StructConstantKey const &key) const { + switch (key.kind) { + case Key_Instruction: + { + Instruction* constant = key.instruction; + size_t hash = std::hash()(constant->getTypeId()) * 13; + for (size_t i = 0, n = constant->getNumOperands(); i < n; ++i) { + hash = hash * 19 ^ std::hash()(constant->getIdOperand(i)); + } + return hash; + } + case Key_StructConstant: + { + size_t hash = std::hash()(key.typeId) * 13; + for (size_t i = 0; i < key.numMembers; ++i) { + hash = hash * 19 ^ std::hash()(key.comps[i]); + } + return hash; + } + } + return 0; + } + }; + + // Functor to compare two instruction keys. + struct Equal { + bool operator() (StructConstantKey const &a, StructConstantKey const &b) const + { + if (a.kind == b.kind) { + // we need only the Instruction case, as the other keys only used for searching + return + a.kind == Key_Instruction && + a.instruction == b.instruction; + } + const StructConstantKey* s = &a; + const StructConstantKey* o = &b; + + if (s->kind == Key_StructConstant && o->kind == Key_Instruction) { + s = o; + o = &a; + } + + // compare a composite constant with an instruction + if (s->kind == Key_Instruction && o->kind == Key_StructConstant) { + Instruction* constant = s->instruction; + if (constant->getTypeId() != o->typeId) + return false; + + if (constant->getNumOperands() != (int)o->numMembers) + return false; + + // same contents? + for (int op = 0; op < constant->getNumOperands(); ++op) { + if (constant->getIdOperand(op) != o->comps[op]) { + return false; + } + } + return true; + } + return false; + } + }; + + private: + Kind kind; + Instruction* instruction; + Id typeId; + size_t numMembers; + std::vector comps; + }; + public: Builder(unsigned int spvVersion, unsigned int userNumber, SpvBuildLogger* logger); virtual ~Builder(); @@ -238,6 +462,12 @@ public: Id makeBFloat16Type(); Id makeFloatE5M2Type(); Id makeFloatE4M3Type(); + Id makeFloatE2M1Type(); + Id makeFloatE3M2Type(); + Id makeFloatE2M3Type(); + Id makeFloatUE8M0Type(); + Id makeFloatMXINT8Type(); + Id makeFloatOcpMicroscalingType(uint32_t width, FPEncoding encoding, Capability cap); Id makeStructType(const std::vector& members, const std::vector& memberDebugInfo, const char* name, bool const compilerGenerated = true); Id makeStructResultType(Id type0, Id type1); @@ -456,6 +686,11 @@ public: Id makeBFloat16Constant(float bf16, bool specConstant = false); Id makeFloatE5M2Constant(float fe5m2, bool specConstant = false); Id makeFloatE4M3Constant(float fe4m3, bool specConstant = false); + Id makeFloatE2M1Constant(float fe2m1, bool specConstant = false); + Id makeFloatE3M2Constant(float fe3m2, bool specConstant = false); + Id makeFloatE2M3Constant(float fe2m3, bool specConstant = false); + Id makeFloatUE8M0Constant(float fue8m0, bool specConstant = false); + Id makeFloatMXINT8Constant(float mxint8, bool specConstant = false); Id makeFpConstant(Id type, double d, bool specConstant = false); Id importNonSemanticShaderDebugInfoInstructions(); @@ -492,6 +727,7 @@ public: // Also reset current last DebugScope and current source line to unknown void setBuildPoint(Block* bp) { buildPoint = bp; + descHeapShiftedBaseCache.clear(); dirtyLineTracker = true; dirtyScopeTracker = true; } @@ -571,6 +807,9 @@ public: // Create an OpAccessChain instruction Id createAccessChain(StorageClass, Id base, const std::vector& offsets); + // Create an OpUntypedAccessChainKHR instruction + Id createUntypedAccessChain(Id resultType, Id base, const std::vector& offsets, Id resultId = NoResult); + // Create an OpArrayLength instruction Id createArrayLength(Id base, unsigned int member, unsigned int bits); @@ -593,6 +832,7 @@ public: void createNoResultOp(Op, const std::vector& operands); void createNoResultOp(Op, const std::vector& operands); void createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask); + void createSplitControlBarrier(Op op, Scope execution, Scope memory, MemorySemanticsMask memorySem); void createMemoryBarrier(Scope executionScope, MemorySemanticsMask memorySemantics); Id createUnaryOp(Op, Id typeId, Id operand); Id createBinOp(Op, Id typeId, Id operand1, Id operand2); @@ -602,6 +842,8 @@ public: Id createConstData(Op opCode, Id typeId, const std::vector operands); Id createFunctionCall(spv::Function*, const std::vector&); Id createSpecConstantOp(Op, Id typeId, const std::vector& operands, const std::vector& literals); + Id createSpecConstantAlignTo(Id value, Id alignment); + Id createSpecConstantSelectMax(Id lhs, Id rhs); // Take an rvalue (source) and a set of channels to extract from it to // make a new rvalue, which is returned. @@ -663,6 +905,7 @@ public: Id lodClamp; Id granularity; Id coarse; + Id gatherMode; bool nonprivate; bool volatil; bool nontemporal; @@ -818,13 +1061,14 @@ public: struct DescHeapInfo { Id descHeapBaseTy; // for descriptor heap, record its base data type. - StorageClass descHeapStorageClass; // for descriptor heap, record its basic storage class. - uint32_t descHeapBaseArrayStride; // for descriptor heap, record its explicit array stride. + Id descHeapBaseOffset; // byte offset applied to the heap base before descriptor lookup. + std::vector descHeapIndexChain; + Id descTy; // for target resource type + StorageClass descStorageClass; // for descriptor heap, record its basic storage class. + bool descReadonly; // for decorating OpBufferPointerEXT results. + bool descWriteonly; // for decorating OpBufferPointerEXT results. std::vector descHeapInstId; // for descriptor heap, record its data type for loading/store results. - uint32_t structRsrcTyOffsetCount; - uint32_t structRsrcTyFirstArrIndex; - Id structRemappedBase; }; DescHeapInfo descHeapInfo; @@ -891,13 +1135,32 @@ public: AccessChain getAccessChain() { return accessChain; } void setAccessChain(AccessChain newChain) { accessChain = newChain; } + // for EXT_descriptor_heap and EXT_structured_descriptor_heap + Id getAccessChainDescHeapBaseType() const { return accessChain.descHeapInfo.descHeapBaseTy; } + void setAccessChainDescHeapBaseType(Id baseType) { accessChain.descHeapInfo.descHeapBaseTy = baseType; } + void setAccessChainDescHeapBaseOffset(Id baseOffset) { accessChain.descHeapInfo.descHeapBaseOffset = baseOffset; } + const std::vector& getAccessChainDescHeapIndexChain() const { return accessChain.descHeapInfo.descHeapIndexChain; } + void accessChainPushDescHeapIndex(Id index) { accessChain.descHeapInfo.descHeapIndexChain.push_back(index); } + bool hasAccessChainIndex() const { return !accessChain.indexChain.empty(); } + void moveAccessChainIndexToDescHeapIndexChain() + { + assert(accessChain.indexChain.size() == 1); + accessChainPushDescHeapIndex(accessChain.indexChain.back()); + accessChain.indexChain.pop_back(); + } + void setAccessChainDescHeapDescriptorType(Id descTy, StorageClass storageClass, bool readonly, bool writeonly) + { + accessChain.descHeapInfo.descTy = descTy; + accessChain.descHeapInfo.descStorageClass = storageClass; + accessChain.descHeapInfo.descReadonly = readonly; + accessChain.descHeapInfo.descWriteonly = writeonly; + } + // clear accessChain void clearAccessChain(); Id createDescHeapAccessChain(); Id createConstantSizeOfEXT(Id typeId); - uint32_t isStructureHeapMember(Id id, std::vector indexChain, unsigned int idx, spv::BuiltIn* bt = nullptr, - uint32_t* firstArrIndex = nullptr); // set new base as an l-value base void setAccessChainLValue(Id lValue) @@ -913,25 +1176,6 @@ public: accessChain.base = rValue; } - // set access chain info for untyped descriptor heap variable - void setAccessChainDescHeapInfo(StorageClass storageClass = StorageClass::Max, Id baseTy = NoResult, - uint32_t explicitArrayStride = NoResult, uint32_t structRsrcTyOffsetCount = 0, - spv::Id structRemappedBase = NoResult, uint32_t firstArrIndex = NoResult) - { - if (accessChain.descHeapInfo.descHeapStorageClass == StorageClass::Max) - accessChain.descHeapInfo.descHeapStorageClass = storageClass; - if (accessChain.descHeapInfo.descHeapBaseTy == NoResult) - accessChain.descHeapInfo.descHeapBaseTy = baseTy; - if (accessChain.descHeapInfo.descHeapBaseArrayStride == NoResult) - accessChain.descHeapInfo.descHeapBaseArrayStride = explicitArrayStride; - if (accessChain.descHeapInfo.structRemappedBase == NoResult) - accessChain.descHeapInfo.structRemappedBase = structRemappedBase; - if (accessChain.descHeapInfo.structRsrcTyOffsetCount == 0) - accessChain.descHeapInfo.structRsrcTyOffsetCount = structRsrcTyOffsetCount; - if (accessChain.descHeapInfo.structRsrcTyFirstArrIndex == 0) - accessChain.descHeapInfo.structRsrcTyFirstArrIndex = firstArrIndex; - } - // push offset onto the end of the chain void accessChainPush(Id offset, AccessChain::CoherentFlags coherentFlags, unsigned int alignment) { @@ -1022,8 +1266,9 @@ protected: Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value); Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2); Id findCompositeConstant(Op typeClass, Op opcode, Id typeId, const std::vector& comps, size_t numMembers); - Id findStructConstant(Id typeId, const std::vector& comps); + Id findStructConstant(Id typeId, const std::vector& comps, size_t numMembers); Id collapseAccessChain(); + Id getOrCreateDescHeapByteArrayType(); void remapDynamicSwizzle(); void transferAccessChainSwizzle(bool dynamic); void simplifyAccessChainSwizzle(); @@ -1038,6 +1283,8 @@ protected: struct DecorationInstructionLessThan { bool operator()(const std::unique_ptr& lhs, const std::unique_ptr& rhs) const; }; + template + Id makeFloatConstantHelper(float f, Id typeId, bool specConstant); unsigned int spvVersion; // the version of SPIR-V to emit in the header SourceLanguage sourceLang; @@ -1159,10 +1406,20 @@ protected: } }; + typedef std::unordered_set< + CompositeConstantKey, + CompositeConstantKey::Hash, + CompositeConstantKey::Equal> CompositeConstantCache; + + typedef std::unordered_set< + StructConstantKey, + StructConstantKey::Hash, + StructConstantKey::Equal> StructConstantCache; + // map type opcodes to constant inst. - std::unordered_map> groupedCompositeConstants; + CompositeConstantCache groupedCompositeConstants; // map struct-id to constant instructions - std::unordered_map> groupedStructConstants; + StructConstantCache groupedStructConstants; // map type opcodes to type instructions std::unordered_map> groupedTypes; // map type opcodes to debug type instructions @@ -1171,6 +1428,14 @@ protected: std::vector nullConstants; // map scalar constants to result IDs std::unordered_map groupedScalarConstantResultIDs; + // map type ids to OpConstantSizeOfEXT result IDs + std::unordered_map constantSizeOfEXTIds; + + // Descriptor heap shifted base cache. + std::map, Id> descHeapShiftedBaseCache; + + // Descriptor heap byte array type. + Id descHeapByteArrayType; // Track which types have explicit layouts, to avoid reusing in storage classes without layout. // Currently only tracks array types. diff --git a/3rdparty/glslang/SPIRV/SpvPostProcess.cpp b/3rdparty/glslang/SPIRV/SpvPostProcess.cpp index ec449965d..1bf79fee8 100644 --- a/3rdparty/glslang/SPIRV/SpvPostProcess.cpp +++ b/3rdparty/glslang/SPIRV/SpvPostProcess.cpp @@ -554,8 +554,9 @@ void Builder::postProcessFeatures() { } // Add Aliased decoration if there's more than one Workgroup Block variable. - if (capabilities.find(spv::Capability::WorkgroupMemoryExplicitLayoutKHR) != capabilities.end()) { - assert(entryPoints.size() == 1); + // Compile-only mode emits no entry point, so there is no interface to scan. + if (capabilities.find(spv::Capability::WorkgroupMemoryExplicitLayoutKHR) != capabilities.end() && + !entryPoints.empty()) { auto &ep = entryPoints[0]; std::vector workgroup_variables; diff --git a/3rdparty/glslang/SPIRV/SpvTools.cpp b/3rdparty/glslang/SPIRV/SpvTools.cpp index bf8269282..6c64fdd65 100644 --- a/3rdparty/glslang/SPIRV/SpvTools.cpp +++ b/3rdparty/glslang/SPIRV/SpvTools.cpp @@ -183,7 +183,7 @@ void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector< // Apply the SPIRV-Tools optimizer to generated SPIR-V. HLSL SPIR-V is legalized in the process. void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger* logger, const SpvOptions* options) + spv::SpvBuildLogger* logger, const SpvOptions* options, bool prelegalization) { spv_target_env target_env = MapToSpirvToolsEnv(intermediate.getSpv(), logger); @@ -197,35 +197,13 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector if (options->stripDebugInfo) { optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass()); } - optimizer.RegisterPass(spvtools::CreateWrapOpKillPass()); - optimizer.RegisterPass(spvtools::CreateDeadBranchElimPass()); - optimizer.RegisterPass(spvtools::CreateMergeReturnPass()); - optimizer.RegisterPass(spvtools::CreateInlineExhaustivePass()); - optimizer.RegisterPass(spvtools::CreateEliminateDeadFunctionsPass()); - optimizer.RegisterPass(spvtools::CreateScalarReplacementPass()); - optimizer.RegisterPass(spvtools::CreateLocalAccessChainConvertPass()); - optimizer.RegisterPass(spvtools::CreateLocalSingleBlockLoadStoreElimPass()); - optimizer.RegisterPass(spvtools::CreateLocalSingleStoreElimPass()); - optimizer.RegisterPass(spvtools::CreateSimplificationPass()); - optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); - optimizer.RegisterPass(spvtools::CreateVectorDCEPass()); - optimizer.RegisterPass(spvtools::CreateDeadInsertElimPass()); - optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); - optimizer.RegisterPass(spvtools::CreateDeadBranchElimPass()); - optimizer.RegisterPass(spvtools::CreateBlockMergePass()); - optimizer.RegisterPass(spvtools::CreateLocalMultiStoreElimPass()); - optimizer.RegisterPass(spvtools::CreateIfConversionPass()); - optimizer.RegisterPass(spvtools::CreateSimplificationPass()); - optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); - optimizer.RegisterPass(spvtools::CreateVectorDCEPass()); - optimizer.RegisterPass(spvtools::CreateDeadInsertElimPass()); - optimizer.RegisterPass(spvtools::CreateInterpolateFixupPass()); - if (options->optimizeSize) { - optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass()); - optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsSafePass()); - } - optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); - optimizer.RegisterPass(spvtools::CreateCFGCleanupPass()); + + if (prelegalization) + optimizer.RegisterLegalizationPasses(); + if (options->optimizePerformance) + optimizer.RegisterPerformancePasses(); + if (options->optimizeSize) + optimizer.RegisterSizePasses(); spvtools::OptimizerOptions spvOptOptions; if (options->optimizerAllowExpandedIDBound) diff --git a/3rdparty/glslang/SPIRV/SpvTools.h b/3rdparty/glslang/SPIRV/SpvTools.h index 455857235..6d72beb06 100644 --- a/3rdparty/glslang/SPIRV/SpvTools.h +++ b/3rdparty/glslang/SPIRV/SpvTools.h @@ -76,7 +76,7 @@ GLSLANG_EXPORT void SpirvToolsValidate(const glslang::TIntermediate& intermediat // Apply the SPIRV-Tools optimizer to generated SPIR-V. HLSL SPIR-V is legalized in the process. GLSLANG_EXPORT void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector& spirv, - spv::SpvBuildLogger*, const SpvOptions*); + spv::SpvBuildLogger*, const SpvOptions*, bool prelegalization); // Apply the SPIRV-Tools EliminateDeadInputComponents pass to generated SPIR-V. Put result in |spirv|. GLSLANG_EXPORT void SpirvToolsEliminateDeadInputComponents(spv_target_env target_env, std::vector& spirv, diff --git a/3rdparty/glslang/SPIRV/disassemble.cpp b/3rdparty/glslang/SPIRV/disassemble.cpp index 8045e50d6..f61a3ae9f 100644 --- a/3rdparty/glslang/SPIRV/disassemble.cpp +++ b/3rdparty/glslang/SPIRV/disassemble.cpp @@ -199,6 +199,9 @@ void SpirvStream::processInstructions() resultId = stream[word++]; --numOperands; + if (resultId >= bound) + Kill(out, "Bad "); + // save instruction for future reference idInstruction[resultId] = instructionStart; } @@ -382,6 +385,8 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, break; case Op::OpTypeFloat: switch (stream[word]) { + case 4: + case 6: case 8: case 16: if (numOperands > 1) { @@ -397,6 +402,21 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, case (int)spv::FPEncoding::Float8E5M2EXT: idDescriptor[resultId] = "floate5m2_t"; break; + case (int)spv::FPEncoding::Float4E2M1EXT: + idDescriptor[resultId] = "floate2m1_t"; + break; + case (int)spv::FPEncoding::Float6E3M2EXT: + idDescriptor[resultId] = "floate3m2_t"; + break; + case (int)spv::FPEncoding::Float6E2M3EXT: + idDescriptor[resultId] = "floate2m3_t"; + break; + case (int)spv::FPEncoding::Float8UnsignedE8M0EXT: + idDescriptor[resultId] = "floatue8m0_t"; + break; + case (int)spv::FPEncoding::MXInt8EXT: + idDescriptor[resultId] = "floatmxint8_t"; + break; } } else { idDescriptor[resultId] = "float16_t"; @@ -418,6 +438,8 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, idDescriptor[resultId] = "ptr"; break; case Op::OpTypeVector: + if (stream[word] >= bound) + Kill(out, "Bad "); if (idDescriptor[stream[word]].size() > 0) { if (idDescriptor[stream[word]].substr(0,2) == "bf") { idDescriptor[resultId].append(idDescriptor[stream[word]].begin(), idDescriptor[stream[word]].begin() + 2); diff --git a/3rdparty/glslang/SPIRV/doc.cpp b/3rdparty/glslang/SPIRV/doc.cpp index 4a9e77d72..dce9dbca1 100644 --- a/3rdparty/glslang/SPIRV/doc.cpp +++ b/3rdparty/glslang/SPIRV/doc.cpp @@ -236,6 +236,8 @@ const char* ExecutionModeString(int mode) case (int)ExecutionMode::Shader64BitIndexingEXT: return "Shader64BitIndexingEXT"; + case (int)ExecutionMode::OpacityMicromapIdKHR: return "OpacityMicromapIdKHR"; + case ExecutionModeCeiling: default: return "Bad"; } @@ -357,9 +359,11 @@ const char* DecorationString(int decoration) case (int)Decoration::BankNV: return "BankNV"; case (int)Decoration::MemberOffsetNV: return "MemberOffsetNV"; - case (int)Decoration::ArrayStrideIdEXT: return "DecorationArrayStrideIdEXT"; - case (int)Decoration::OffsetIdEXT: return "DecorationOffsetIdEXT"; + case (int)Decoration::ArrayStrideIdEXT: return "ArrayStrideIdEXT"; + case (int)Decoration::OffsetIdEXT: return "OffsetIdEXT"; case (int)Decoration::UTFEncodedKHR: return "UTFEncodedKHR"; + + case (int)Decoration::CooperativeMatrixTransposeEXT: return "DecorationCooperativeMatrixTransposeEXT"; } } @@ -782,6 +786,7 @@ const char* LoopControlString(int cont) case (int)LoopControlShift::IterationMultiple: return "IterationMultiple"; case (int)LoopControlShift::PeelCount: return "PeelCount"; case (int)LoopControlShift::PartialCount: return "PartialCount"; + case (int)LoopControlShift::MultipleWaitQueuesQCOM: return "MultipeWaitQueuesQCOM"; case LoopControlCeiling: default: return "Bad"; @@ -1040,6 +1045,7 @@ const char* CapabilityString(int info) case (int)Capability::RayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR"; case (int)Capability::DisplacementMicromapNV: return "DisplacementMicromapNV"; case (int)Capability::RayTracingOpacityMicromapEXT: return "RayTracingOpacityMicromapEXT"; + case (int)Capability::RayTracingOpacityMicromapExecutionModeKHR: return "RayTracingOpacityMicromapExecutionModeKHR"; case (int)Capability::RayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV"; case (int)Capability::RayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR"; // ComputeDerivativeGroupQuadsKHR is an alias of ComputeDerivativeGroupQuadsNV @@ -1085,6 +1091,8 @@ const char* CapabilityString(int info) case (int)Capability::CooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV"; case (int)Capability::CooperativeMatrixDecodeVectorNV: return "CooperativeMatrixDecodeVectorNV"; case (int)Capability::TensorAddressingNV: return "TensorAddressingNV"; + case (int)Capability::CooperativeMatrixConversionsEXT: return "CooperativeMatrixConversionsEXT"; + case (int)Capability::CooperativeMatrixGetCoordinateEXT: return "CooperativeMatrixGetCoordinateEXT"; case (int)Capability::ShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV"; @@ -1140,6 +1148,8 @@ const char* CapabilityString(int info) case (int)Capability::TextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; case (int)Capability::CooperativeMatrixConversionQCOM: return "CooperativeMatrixConversionQCOM"; + case (int)Capability::ImageGatherLinearQCOM: return "ImageGatherLinearQCOM"; + case (int)Capability::ImageGatherExtendedModesQCOM: return "ImageGatherExtendedModesQCOM"; case (int)Capability::ReplicatedCompositesEXT: return "ReplicatedCompositesEXT"; @@ -1164,6 +1174,13 @@ const char* CapabilityString(int info) case (int)Capability::Shader64BitIndexingEXT: return "CapabilityShader64BitIndexingEXT"; case (int)Capability::LongVectorEXT: return "LongVectorEXT"; + case (int)Capability::SplitBarrierEXT: return "SplitBarrierEXT"; + + case (int)Capability::Float4EXT: return "Float4EXT"; + case (int)Capability::Float6EXT: return "Float6EXT"; + case (int)Capability::Float8UnsignedE8M0EXT: return "Float8UnsignedE8M0EXT"; + case (int)Capability::MXInt8EXT: return "MXInt8EXT"; + case (int)Capability::BitcastExtractEXT: return "BitcastExtractEXT"; default: return "Bad"; } @@ -1670,6 +1687,7 @@ const char* OpcodeString(int op) case (int)Op::OpTensorViewSetDimensionNV: return "OpTensorViewSetDimensionNV"; case (int)Op::OpTensorViewSetStrideNV: return "OpTensorViewSetStrideNV"; case (int)Op::OpTensorViewSetClipNV: return "OpTensorViewSetClipNV"; + case (int)Op::OpCooperativeMatrixGetCoordinateEXT: return "OpCooperativeMatrixGetCoordinateEXT"; case (int)Op::OpTypeTensorARM: return "OpTypeTensorARM"; case (int)Op::OpTensorReadARM: return "OpTensorReadARM"; @@ -1743,6 +1761,7 @@ const char* OpcodeString(int op) case (int)Op::OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM"; case (int)Op::OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM"; case (int)Op::OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM"; + case (int)Op::OpImageGatherQCOM: return "OpImageGatherQCOM"; case (int)Op::OpBitCastArrayQCOM: return "OpBitCastArrayQCOM"; case (int)Op::OpCompositeConstructCoopMatQCOM: return "OpCompositeConstructCoopMatQCOM"; @@ -1797,6 +1816,10 @@ const char* OpcodeString(int op) case (int)Op::OpHitObjectRecordFromQueryEXT: return "OpHitObjectRecordFromQueryEXT"; case (int)Op::OpHitObjectGetIntersectionTriangleVertexPositionsEXT: return "OpHitObjectGetIntersectionTriangleVertexPositionsEXT"; + case (int)Op::OpBitcastExtractEXT: return "OpBitcastExtractEXT"; + case (int)Op::OpControlBarrierArriveEXT: return "OpControlBarrierArriveEXT"; + case (int)Op::OpControlBarrierWaitEXT: return "OpControlBarrierWaitEXT"; + default: return "Bad"; } @@ -1885,6 +1908,8 @@ void Parameterize() InstructionDesc[enumCast(Op::OpEmitStreamVertex)].setResultAndType(false, false); InstructionDesc[enumCast(Op::OpEndStreamPrimitive)].setResultAndType(false, false); InstructionDesc[enumCast(Op::OpControlBarrier)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpControlBarrierArriveEXT)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpControlBarrierWaitEXT)].setResultAndType(false, false); InstructionDesc[enumCast(Op::OpMemoryBarrier)].setResultAndType(false, false); InstructionDesc[enumCast(Op::OpAtomicStore)].setResultAndType(false, false); InstructionDesc[enumCast(Op::OpLoopMerge)].setResultAndType(false, false); @@ -3783,66 +3808,74 @@ void Parameterize() InstructionDesc[enumCast(Op::OpStencilAttachmentReadEXT)].operands.push(OperandId, "'Sample'", true); InstructionDesc[enumCast(Op::OpDepthAttachmentReadEXT)].operands.push(OperandId, "'Sample'", true); - InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandId, "'source texture'"); - InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandId, "'texture coordinates'"); - InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandId, "'weights texture'"); + InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandId, "'Source Texture'"); + InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandId, "'Texture Coordinates'"); + InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandId, "'Weights Texture'"); InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].operands.push(OperandImageOperands, "", true); InstructionDesc[enumCast(Op::OpImageSampleWeightedQCOM)].setResultAndType(true, true); - InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandId, "'source texture'"); - InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandId, "'texture coordinates'"); - InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandId, "'box size'"); + InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandId, "'Source Texture'"); + InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandId, "'Texture Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandId, "'Box Size'"); InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].operands.push(OperandImageOperands, "", true); InstructionDesc[enumCast(Op::OpImageBoxFilterQCOM)].setResultAndType(true, true); - InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'target texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'reference texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'block size'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'Target Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'Target Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'Reference Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'Reference Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandId, "'Block Size'"); InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].operands.push(OperandImageOperands, "", true); InstructionDesc[enumCast(Op::OpImageBlockMatchSADQCOM)].setResultAndType(true, true); - InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'target texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'reference texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'block size'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'Target Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'Target Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'Reference Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'Reference Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandId, "'Block Size'"); InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].operands.push(OperandImageOperands, "", true); InstructionDesc[enumCast(Op::OpImageBlockMatchSSDQCOM)].setResultAndType(true, true); - InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'target texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'reference texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'block size'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'Target Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'Target Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'Reference Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'Reference Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandId, "'Block Size'"); InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].operands.push(OperandImageOperands, "", true); InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSSDQCOM)].setResultAndType(true, true); - InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'target texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'reference texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'block size'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'Target Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'Target Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'Reference Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'Reference Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandId, "'Block Size'"); InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].operands.push(OperandImageOperands, "", true); InstructionDesc[enumCast(Op::OpImageBlockMatchWindowSADQCOM)].setResultAndType(true, true); - InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'target texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'reference texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'block size'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'Target Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'Target Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'Reference Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'Reference Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandId, "'Block Size'"); InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].operands.push(OperandImageOperands, "", true); InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSSDQCOM)].setResultAndType(true, true); - InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'target texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'reference texture'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'block size'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'Target Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'Target Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'Reference Texture'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'Reference Coordinates'"); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandId, "'Block Size'"); InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].operands.push(OperandImageOperands, "", true); InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].setResultAndType(true, true); + InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandId, "'Component'"); + InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandId, "'Mode'"); + InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageGatherQCOM)].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpImageGatherQCOM)].setResultAndType(true, true); + InstructionDesc[enumCast(Op::OpBitCastArrayQCOM)].operands.push(OperandId, "'source array'"); InstructionDesc[enumCast(Op::OpBitCastArrayQCOM)].setResultAndType(true, true); @@ -3872,6 +3905,9 @@ void Parameterize() InstructionDesc[enumCast(Op::OpCooperativeMatrixPerElementOpNV)].operands.push(OperandId, "'Operation'"); InstructionDesc[enumCast(Op::OpCooperativeMatrixPerElementOpNV)].operands.push(OperandVariableIds, "'Operands'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixGetCoordinateEXT)].operands.push(OperandId, "'Matrix'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixGetCoordinateEXT)].operands.push(OperandId, "'Index'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandId, "'Pointer'"); InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandId, "'Object'"); InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandId, "'TensorLayout'"); @@ -4151,6 +4187,16 @@ void Parameterize() InstructionDesc[enumCast(Op::OpHitObjectGetIntersectionTriangleVertexPositionsEXT)].operands.push(OperandId, "'HitObject'"); InstructionDesc[enumCast(Op::OpHitObjectGetIntersectionTriangleVertexPositionsEXT)].setResultAndType(true, true); + InstructionDesc[enumCast(Op::OpBitcastExtractEXT)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpBitcastExtractEXT)].operands.push(OperandId, "'Offset'"); + + InstructionDesc[enumCast(Op::OpControlBarrierArriveEXT)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpControlBarrierArriveEXT)].operands.push(OperandScope, "'Memory'"); + InstructionDesc[enumCast(Op::OpControlBarrierArriveEXT)].operands.push(OperandMemorySemantics, "'Semantics'"); + + InstructionDesc[enumCast(Op::OpControlBarrierWaitEXT)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpControlBarrierWaitEXT)].operands.push(OperandScope, "'Memory'"); + InstructionDesc[enumCast(Op::OpControlBarrierWaitEXT)].operands.push(OperandMemorySemantics, "'Semantics'"); }); } diff --git a/3rdparty/glslang/SPIRV/hex_float.h b/3rdparty/glslang/SPIRV/hex_float.h index c2259e3f4..cc40fe619 100644 --- a/3rdparty/glslang/SPIRV/hex_float.h +++ b/3rdparty/glslang/SPIRV/hex_float.h @@ -96,6 +96,81 @@ class FloatE4M3 { uint8_t val; }; +class FloatE2M1 { + public: + FloatE2M1(uint8_t v) : val(v) {} + FloatE2M1() {} + static bool isNan(const FloatE2M1& val) { + static_cast(val); + return false; + } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(const FloatE2M1& val) { + static_cast(val); + return false; + } + FloatE2M1(const FloatE2M1& other) { val = other.val; } + uint8_t get_value() const { return val; } + + // Returns the maximum normal value. + static FloatE2M1 max() { return FloatE2M1(0x7); } + // Returns the lowest normal value. + static FloatE2M1 lowest() { return FloatE2M1(0xF); } + + private: + uint8_t val; +}; + +class FloatE3M2 { + public: + FloatE3M2(uint8_t v) : val(v) {} + FloatE3M2() {} + static bool isNan(const FloatE3M2& val) { + static_cast(val); + return false; + } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(const FloatE3M2& val) { + static_cast(val); + return false; + } + FloatE3M2(const FloatE3M2& other) { val = other.val; } + uint8_t get_value() const { return val; } + + // Returns the maximum normal value. + static FloatE3M2 max() { return FloatE3M2(0x1F); } + // Returns the lowest normal value. + static FloatE3M2 lowest() { return FloatE3M2(0x3F); } + + private: + uint8_t val; +}; + +class FloatE2M3 { + public: + FloatE2M3(uint8_t v) : val(v) {} + FloatE2M3() {} + static bool isNan(const FloatE2M3& val) { + static_cast(val); + return false; + } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(const FloatE2M3& val) { + static_cast(val); + return false; + } + FloatE2M3(const FloatE2M3& other) { val = other.val; } + uint8_t get_value() const { return val; } + + // Returns the maximum normal value. + static FloatE2M3 max() { return FloatE2M3(0x1F); } + // Returns the lowest normal value. + static FloatE2M3 lowest() { return FloatE2M3(0x3F); } + + private: + uint8_t val; +}; + // To specialize this type, you must override uint_type to define // an unsigned integer that can fit your floating point type. // You must also add a isNan function that returns true if @@ -165,6 +240,42 @@ struct FloatProxyTraits { static FloatE4M3 lowest() { return FloatE4M3::lowest(); } }; +template <> +struct FloatProxyTraits { + typedef uint8_t uint_type; + static bool isNan(FloatE2M1 f) { return FloatE2M1::isNan(f); } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(FloatE2M1 f) { return FloatE2M1::isInfinity(f); } + // Returns the maximum normal value. + static FloatE2M1 max() { return FloatE2M1::max(); } + // Returns the lowest normal value. + static FloatE2M1 lowest() { return FloatE2M1::lowest(); } +}; + +template <> +struct FloatProxyTraits { + typedef uint8_t uint_type; + static bool isNan(FloatE3M2 f) { return FloatE3M2::isNan(f); } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(FloatE3M2 f) { return FloatE3M2::isInfinity(f); } + // Returns the maximum normal value. + static FloatE3M2 max() { return FloatE3M2::max(); } + // Returns the lowest normal value. + static FloatE3M2 lowest() { return FloatE3M2::lowest(); } +}; + +template <> +struct FloatProxyTraits { + typedef uint8_t uint_type; + static bool isNan(FloatE2M3 f) { return FloatE2M3::isNan(f); } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(FloatE2M3 f) { return FloatE2M3::isInfinity(f); } + // Returns the maximum normal value. + static FloatE2M3 max() { return FloatE2M3::max(); } + // Returns the lowest normal value. + static FloatE2M3 lowest() { return FloatE2M3::lowest(); } +}; + // Since copying a floating point number (especially if it is NaN) // does not guarantee that bits are preserved, this class lets us // store the type and use it as a float when necessary. @@ -186,10 +297,7 @@ class FloatProxy { FloatProxy(uint_type val) { data_ = val; } // This is helpful to have and is guaranteed not to stomp bits. - FloatProxy operator-() const { - return static_cast(data_ ^ - (uint_type(0x1) << (sizeof(T) * 8 - 1))); - } + FloatProxy operator-() const; // Returns the data as a floating point value. T getAsFloat() const { return BitwiseCast(data_); } @@ -326,6 +434,45 @@ struct HexFloatTraits> { static bool supportsInfinity() { return false; } }; +template <> +struct HexFloatTraits> { + typedef uint8_t uint_type; + typedef int8_t int_type; + typedef uint8_t underlying_type; + typedef uint8_t native_type; + static const uint_type num_used_bits = 4; + static const uint_type num_exponent_bits = 2; + static const uint_type num_fraction_bits = 1; + static const uint_type exponent_bias = 1; + static bool supportsInfinity() { return false; } +}; + +template <> +struct HexFloatTraits> { + typedef uint8_t uint_type; + typedef int8_t int_type; + typedef uint8_t underlying_type; + typedef uint8_t native_type; + static const uint_type num_used_bits = 6; + static const uint_type num_exponent_bits = 3; + static const uint_type num_fraction_bits = 2; + static const uint_type exponent_bias = 3; + static bool supportsInfinity() { return false; } +}; + +template <> +struct HexFloatTraits> { + typedef uint8_t uint_type; + typedef int8_t int_type; + typedef uint8_t underlying_type; + typedef uint8_t native_type; + static const uint_type num_used_bits = 6; + static const uint_type num_exponent_bits = 2; + static const uint_type num_fraction_bits = 3; + static const uint_type exponent_bias = 1; + static bool supportsInfinity() { return false; } +}; + enum round_direction { kRoundToZero, kRoundToNearestEven, @@ -333,6 +480,13 @@ enum round_direction { kRoundToNegativeInfinity }; +// This is helpful to have and is guaranteed not to stomp bits. +template +FloatProxy FloatProxy::operator-() const { + return static_cast(data_ ^ + (uint_type(0x1) << (HexFloatTraits>::num_used_bits - 1))); +} + // Template class that houses a floating pointer number. // It exposes a number of constants based on the provided traits to // assist in interpreting the bits of the value. @@ -392,6 +546,11 @@ class HexFloat { // The bit that is used as a sign. static const uint_type sign_mask = uint_type(1) << top_bit_left_shift; + // The set of all used bits + static const uint_type used_bits_mask = + (uint_type(1) << (num_used_bits - 1)) | + ((uint_type(1) << (num_used_bits - 1)) - 1); + // The bits that represent the exponent. static const uint_type exponent_mask = spvutils::SetBits::get; @@ -699,7 +858,7 @@ class HexFloat { } else { // encode as +/-nan other.set_value(BitwiseCast( - static_cast(negate ? ~0 : ~other_T::sign_mask))); + static_cast(other_T::used_bits_mask & (negate ? ~0 : ~other_T::sign_mask)))); } return; } diff --git a/3rdparty/glslang/SPIRV/spirv.hpp11 b/3rdparty/glslang/SPIRV/spirv.hpp11 index 393ecd4f2..613f740f6 100644 --- a/3rdparty/glslang/SPIRV/spirv.hpp11 +++ b/3rdparty/glslang/SPIRV/spirv.hpp11 @@ -1,32 +1,16 @@ -// Copyright (c) 2014-2024 The Khronos Group Inc. +// Copyright: 2014-2024 The Khronos Group Inc. +// License: MIT // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +// KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +// SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +// https://www.khronos.org/registry/ // This header is automatically generated by the same tool that creates // the Binary Section of the SPIR-V specification. // Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python, C#, D, Beef +// C, C++, C++11, JSON, Lua, Python, C#, Java, D, Beef // // - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL // - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL @@ -35,6 +19,8 @@ // - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] // - C# will use enum classes in the Specification class located in the "Spv" namespace, // e.g.: Spv.Specification.SourceLanguage.GLSL +// - Java will use enum classes in the Spv class in the org.khronos.spv package, +// e.g.: Spv.SourceLanguage.GLSL // - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL // - Beef will use enum classes in the Specification class located in the "Spv" namespace, // e.g.: Spv.Specification.SourceLanguage.GLSL @@ -75,6 +61,8 @@ enum class SourceLanguage : unsigned { Slang = 11, Zig = 12, Rust = 13, + Pred = 14, + ApilaJai = 15, Max = 0x7fffffff, }; @@ -191,6 +179,7 @@ enum class ExecutionMode : unsigned { QuadDerivativesKHR = 5088, RequireFullQuadsKHR = 5089, SharesInputWithAMDX = 5102, + ArithmeticPoisonKHR = 5157, OutputLinesEXT = 5269, OutputLinesNV = 5269, OutputPrimitivesEXT = 5270, @@ -220,6 +209,7 @@ enum class ExecutionMode : unsigned { SchedulerTargetFmaxMhzINTEL = 5903, MaximallyReconvergesKHR = 6023, FPFastMathDefault = 6028, + OpacityMicromapIdKHR = 6031, StreamingInterfaceINTEL = 6154, RegisterMapInterfaceINTEL = 6160, NamedBarrierCountINTEL = 6417, @@ -264,7 +254,9 @@ enum class StorageClass : unsigned { TaskPayloadWorkgroupEXT = 5402, HitObjectAttributeEXT = 5411, CodeSectionINTEL = 5605, + DeviceOnlyALTERA = 5936, DeviceOnlyINTEL = 5936, + HostOnlyALTERA = 5937, HostOnlyINTEL = 5937, Max = 0x7fffffff, }; @@ -384,9 +376,15 @@ enum class ImageChannelDataType : unsigned { Float = 14, UnormInt24 = 15, UnormInt101010_2 = 16, + UnormInt10X6EXT = 17, UnsignedIntRaw10EXT = 19, UnsignedIntRaw12EXT = 20, UnormInt2_101010EXT = 21, + UnsignedInt10X6EXT = 22, + UnsignedInt12X4EXT = 23, + UnsignedInt14X2EXT = 24, + UnormInt12X4EXT = 25, + UnormInt14X2EXT = 26, Max = 0x7fffffff, }; @@ -478,6 +476,7 @@ enum class LinkageType : unsigned { Export = 0, Import = 1, LinkOnceODR = 2, + WeakAMD = 3, Max = 0x7fffffff, }; @@ -497,6 +496,7 @@ enum class FunctionParameterAttribute : unsigned { NoCapture = 5, NoWrite = 6, NoReadWrite = 7, + RuntimeAlignedALTERA = 5940, RuntimeAlignedINTEL = 5940, Max = 0x7fffffff, }; @@ -591,6 +591,7 @@ enum class Decoration : unsigned { BindlessImageNV = 5399, BoundSamplerNV = 5400, BoundImageNV = 5401, + CooperativeMatrixTransposeEXT = 5440, SIMTCallINTEL = 5599, ReferencedIndirectlyINTEL = 5602, ClobberINTEL = 5607, @@ -607,57 +608,100 @@ enum class Decoration : unsigned { UserTypeGOOGLE = 5636, FunctionRoundingModeINTEL = 5822, FunctionDenormModeINTEL = 5823, + RegisterALTERA = 5825, RegisterINTEL = 5825, + MemoryALTERA = 5826, MemoryINTEL = 5826, + NumbanksALTERA = 5827, NumbanksINTEL = 5827, + BankwidthALTERA = 5828, BankwidthINTEL = 5828, + MaxPrivateCopiesALTERA = 5829, MaxPrivateCopiesINTEL = 5829, + SinglepumpALTERA = 5830, SinglepumpINTEL = 5830, + DoublepumpALTERA = 5831, DoublepumpINTEL = 5831, + MaxReplicatesALTERA = 5832, MaxReplicatesINTEL = 5832, + SimpleDualPortALTERA = 5833, SimpleDualPortINTEL = 5833, + MergeALTERA = 5834, MergeINTEL = 5834, + BankBitsALTERA = 5835, BankBitsINTEL = 5835, + ForcePow2DepthALTERA = 5836, ForcePow2DepthINTEL = 5836, + StridesizeALTERA = 5883, StridesizeINTEL = 5883, + WordsizeALTERA = 5884, WordsizeINTEL = 5884, + TrueDualPortALTERA = 5885, TrueDualPortINTEL = 5885, + BurstCoalesceALTERA = 5899, BurstCoalesceINTEL = 5899, + CacheSizeALTERA = 5900, CacheSizeINTEL = 5900, + DontStaticallyCoalesceALTERA = 5901, DontStaticallyCoalesceINTEL = 5901, + PrefetchALTERA = 5902, PrefetchINTEL = 5902, + StallEnableALTERA = 5905, StallEnableINTEL = 5905, + FuseLoopsInFunctionALTERA = 5907, FuseLoopsInFunctionINTEL = 5907, + MathOpDSPModeALTERA = 5909, MathOpDSPModeINTEL = 5909, AliasScopeINTEL = 5914, NoAliasINTEL = 5915, + InitiationIntervalALTERA = 5917, InitiationIntervalINTEL = 5917, + MaxConcurrencyALTERA = 5918, MaxConcurrencyINTEL = 5918, + PipelineEnableALTERA = 5919, PipelineEnableINTEL = 5919, + BufferLocationALTERA = 5921, BufferLocationINTEL = 5921, + IOPipeStorageALTERA = 5944, IOPipeStorageINTEL = 5944, FunctionFloatingPointModeINTEL = 6080, SingleElementVectorINTEL = 6085, VectorComputeCallableFunctionINTEL = 6087, MediaBlockIOINTEL = 6140, + StallFreeALTERA = 6151, StallFreeINTEL = 6151, FPMaxErrorDecorationINTEL = 6170, + LatencyControlLabelALTERA = 6172, LatencyControlLabelINTEL = 6172, + LatencyControlConstraintALTERA = 6173, LatencyControlConstraintINTEL = 6173, + ConduitKernelArgumentALTERA = 6175, ConduitKernelArgumentINTEL = 6175, + RegisterMapKernelArgumentALTERA = 6176, RegisterMapKernelArgumentINTEL = 6176, + MMHostInterfaceAddressWidthALTERA = 6177, MMHostInterfaceAddressWidthINTEL = 6177, + MMHostInterfaceDataWidthALTERA = 6178, MMHostInterfaceDataWidthINTEL = 6178, + MMHostInterfaceLatencyALTERA = 6179, MMHostInterfaceLatencyINTEL = 6179, + MMHostInterfaceReadWriteModeALTERA = 6180, MMHostInterfaceReadWriteModeINTEL = 6180, + MMHostInterfaceMaxBurstALTERA = 6181, MMHostInterfaceMaxBurstINTEL = 6181, + MMHostInterfaceWaitRequestALTERA = 6182, MMHostInterfaceWaitRequestINTEL = 6182, + StableKernelArgumentALTERA = 6183, StableKernelArgumentINTEL = 6183, HostAccessINTEL = 6188, + InitModeALTERA = 6190, InitModeINTEL = 6190, + ImplementInRegisterMapALTERA = 6191, ImplementInRegisterMapINTEL = 6191, + ConditionalINTEL = 6247, CacheControlLoadINTEL = 6442, CacheControlStoreINTEL = 6443, + IntrinsicSAMSUNG = 7040, Max = 0x7fffffff, }; @@ -837,16 +881,27 @@ enum class LoopControlShift : unsigned { IterationMultiple = 6, PeelCount = 7, PartialCount = 8, + InitiationIntervalALTERA = 16, InitiationIntervalINTEL = 16, + MaxConcurrencyALTERA = 17, MaxConcurrencyINTEL = 17, + DependencyArrayALTERA = 18, DependencyArrayINTEL = 18, + PipelineEnableALTERA = 19, PipelineEnableINTEL = 19, + LoopCoalesceALTERA = 20, LoopCoalesceINTEL = 20, + MaxInterleavingALTERA = 21, MaxInterleavingINTEL = 21, + SpeculatedIterationsALTERA = 22, SpeculatedIterationsINTEL = 22, + NoFusionALTERA = 23, NoFusionINTEL = 23, + LoopCountALTERA = 24, LoopCountINTEL = 24, + MaxReinvocationDelayALTERA = 25, MaxReinvocationDelayINTEL = 25, + MultipleWaitQueuesQCOM = 28, Max = 0x7fffffff, }; @@ -861,16 +916,27 @@ enum class LoopControlMask : unsigned { IterationMultiple = 0x00000040, PeelCount = 0x00000080, PartialCount = 0x00000100, + InitiationIntervalALTERA = 0x00010000, InitiationIntervalINTEL = 0x00010000, + MaxConcurrencyALTERA = 0x00020000, MaxConcurrencyINTEL = 0x00020000, + DependencyArrayALTERA = 0x00040000, DependencyArrayINTEL = 0x00040000, + PipelineEnableALTERA = 0x00080000, PipelineEnableINTEL = 0x00080000, + LoopCoalesceALTERA = 0x00100000, LoopCoalesceINTEL = 0x00100000, + MaxInterleavingALTERA = 0x00200000, MaxInterleavingINTEL = 0x00200000, + SpeculatedIterationsALTERA = 0x00400000, SpeculatedIterationsINTEL = 0x00400000, + NoFusionALTERA = 0x00800000, NoFusionINTEL = 0x00800000, + LoopCountALTERA = 0x01000000, LoopCountINTEL = 0x01000000, + MaxReinvocationDelayALTERA = 0x02000000, MaxReinvocationDelayINTEL = 0x02000000, + MultipleWaitQueuesQCOM = 0x10000000, }; enum class FunctionControlShift : unsigned { @@ -982,8 +1048,11 @@ enum class GroupOperation : unsigned { InclusiveScan = 1, ExclusiveScan = 2, ClusteredReduce = 3, + PartitionedReduceEXT = 6, PartitionedReduceNV = 6, + PartitionedInclusiveScanEXT = 7, PartitionedInclusiveScanNV = 7, + PartitionedExclusiveScanEXT = 8, PartitionedExclusiveScanNV = 8, Max = 0x7fffffff, }; @@ -1081,9 +1150,17 @@ enum class Capability : unsigned { TileImageDepthReadAccessEXT = 4167, TileImageStencilReadAccessEXT = 4168, TensorsARM = 4174, + StorageTensorArrayDynamicIndexingARM = 4175, + StorageTensorArrayNonUniformIndexingARM = 4176, + GraphARM = 4191, CooperativeMatrixLayoutsARM = 4201, Float8EXT = 4212, Float8CooperativeMatrixEXT = 4213, + Float6EXT = 4228, + Float4EXT = 4229, + Float8UnsignedE8M0EXT = 4230, + MXInt8EXT = 4231, + BitcastExtractEXT = 4232, FragmentShadingRateKHR = 4422, SubgroupBallotKHR = 4423, DrawParameters = 4427, @@ -1122,6 +1199,9 @@ enum class Capability : unsigned { TileShadingQCOM = 4495, CooperativeMatrixConversionQCOM = 4496, TextureBlockMatch2QCOM = 4498, + MultipleWaitQueuesQCOM = 4539, + ImageGatherLinearQCOM = 4543, + ImageGatherExtendedModesQCOM = 4544, Float16ImageAMD = 5008, ImageGatherBiasLodAMD = 5009, FragmentMaskAMD = 5010, @@ -1131,12 +1211,16 @@ enum class Capability : unsigned { ShaderClockKHR = 5055, ShaderEnqueueAMDX = 5067, QuadControlKHR = 5087, + Int4TypeINTEL = 5112, + Int4CooperativeMatrixINTEL = 5114, BFloat16TypeKHR = 5116, BFloat16DotProductKHR = 5117, BFloat16CooperativeMatrixKHR = 5118, AbortKHR = 5120, DescriptorHeapEXT = 5128, ConstantDataKHR = 5146, + PoisonFreezeKHR = 5156, + WeakLinkageAMD = 5181, SampleMaskOverrideCoverageNV = 5249, GeometryShaderPassthroughNV = 5251, ShaderViewportIndexLayerEXT = 5254, @@ -1154,6 +1238,7 @@ enum class Capability : unsigned { ComputeDerivativeGroupQuadsNV = 5288, FragmentDensityEXT = 5291, ShadingRateNV = 5291, + GroupNonUniformPartitionedEXT = 5297, GroupNonUniformPartitionedNV = 5297, ShaderNonUniform = 5301, ShaderNonUniformEXT = 5301, @@ -1200,6 +1285,7 @@ enum class Capability : unsigned { DemoteToHelperInvocationEXT = 5379, DisplacementMicromapNV = 5380, RayTracingOpacityMicromapEXT = 5381, + RayTracingOpacityMicromapKHR = 5381, ShaderInvocationReorderNV = 5383, ShaderInvocationReorderEXT = 5388, BindlessTextureNV = 5390, @@ -1213,15 +1299,19 @@ enum class Capability : unsigned { PushConstantBanksNV = 5423, LongVectorEXT = 5425, Shader64BitIndexingEXT = 5426, + CooperativeMatrixConversionsEXT = 5429, + CooperativeMatrixReductionsEXT = 5430, CooperativeMatrixReductionsNV = 5430, CooperativeMatrixConversionsNV = 5431, + CooperativeMatrixPerElementOperationsEXT = 5432, CooperativeMatrixPerElementOperationsNV = 5432, CooperativeMatrixTensorAddressingNV = 5433, CooperativeMatrixBlockLoadsNV = 5434, CooperativeVectorTrainingNV = 5435, RayTracingClusterAccelerationStructureNV = 5437, + CooperativeMatrixGetCoordinateEXT = 5438, TensorAddressingNV = 5439, - CooperativeMatrixDecodeVectorNV = 5447, + CooperativeMatrixDecodeVectorNV = 5447, SubgroupShuffleINTEL = 5568, SubgroupBufferBlockIOINTEL = 5569, SubgroupImageBlockIOINTEL = 5570, @@ -1243,26 +1333,42 @@ enum class Capability : unsigned { SubgroupAvcMotionEstimationChromaINTEL = 5698, VariableLengthArrayINTEL = 5817, FunctionFloatControlINTEL = 5821, + FPGAMemoryAttributesALTERA = 5824, FPGAMemoryAttributesINTEL = 5824, FPFastMathModeINTEL = 5837, + ArbitraryPrecisionIntegersALTERA = 5844, ArbitraryPrecisionIntegersINTEL = 5844, + ArbitraryPrecisionFloatingPointALTERA = 5845, ArbitraryPrecisionFloatingPointINTEL = 5845, UnstructuredLoopControlsINTEL = 5886, + FPGALoopControlsALTERA = 5888, FPGALoopControlsINTEL = 5888, KernelAttributesINTEL = 5892, FPGAKernelAttributesINTEL = 5897, + FPGAMemoryAccessesALTERA = 5898, FPGAMemoryAccessesINTEL = 5898, + FPGAClusterAttributesALTERA = 5904, FPGAClusterAttributesINTEL = 5904, + LoopFuseALTERA = 5906, LoopFuseINTEL = 5906, + FPGADSPControlALTERA = 5908, FPGADSPControlINTEL = 5908, MemoryAccessAliasingINTEL = 5910, + FPGAInvocationPipeliningAttributesALTERA = 5916, FPGAInvocationPipeliningAttributesINTEL = 5916, + FPGABufferLocationALTERA = 5920, FPGABufferLocationINTEL = 5920, + ArbitraryPrecisionFixedPointALTERA = 5922, ArbitraryPrecisionFixedPointINTEL = 5922, + USMStorageClassesALTERA = 5935, USMStorageClassesINTEL = 5935, + RuntimeAlignedAttributeALTERA = 5939, RuntimeAlignedAttributeINTEL = 5939, + IOPipesALTERA = 5943, IOPipesINTEL = 5943, + BlockingPipesALTERA = 5945, BlockingPipesINTEL = 5945, + FPGARegALTERA = 5948, FPGARegINTEL = 5948, DotProductInputAll = 6016, DotProductInputAllKHR = 6016, @@ -1278,6 +1384,8 @@ enum class Capability : unsigned { BitInstructions = 6025, GroupNonUniformRotateKHR = 6026, FloatControls2 = 6029, + FMAKHR = 6030, + RayTracingOpacityMicromapExecutionModeKHR = 6032, AtomicFloat32AddEXT = 6033, AtomicFloat64AddEXT = 6034, LongCompositesINTEL = 6089, @@ -1286,24 +1394,44 @@ enum class Capability : unsigned { AtomicFloat16AddEXT = 6095, DebugInfoModuleINTEL = 6114, BFloat16ConversionINTEL = 6115, + SplitBarrierEXT = 6141, SplitBarrierINTEL = 6141, ArithmeticFenceEXT = 6144, + FPGAClusterAttributesV2ALTERA = 6150, FPGAClusterAttributesV2INTEL = 6150, FPGAKernelAttributesv2INTEL = 6161, + TaskSequenceALTERA = 6162, + TaskSequenceINTEL = 6162, FPMaxErrorINTEL = 6169, + FPGALatencyControlALTERA = 6171, FPGALatencyControlINTEL = 6171, + FPGAArgumentInterfacesALTERA = 6174, FPGAArgumentInterfacesINTEL = 6174, GlobalVariableHostAccessINTEL = 6187, + GlobalVariableFPGADecorationsALTERA = 6189, GlobalVariableFPGADecorationsINTEL = 6189, SubgroupBufferPrefetchINTEL = 6220, Subgroup2DBlockIOINTEL = 6228, Subgroup2DBlockTransformINTEL = 6229, Subgroup2DBlockTransposeINTEL = 6230, SubgroupMatrixMultiplyAccumulateINTEL = 6236, + TernaryBitwiseFunctionINTEL = 6241, + UntypedVariableLengthArrayINTEL = 6243, + SpecConditionalINTEL = 6245, + FunctionVariantsINTEL = 6246, + PredicatedIOINTEL = 6257, + RoundedDivideSqrtINTEL = 6265, GroupUniformArithmeticKHR = 6400, + TensorFloat32RoundingINTEL = 6425, MaskedGatherScatterINTEL = 6427, CacheControlsINTEL = 6441, RegisterLimitsINTEL = 6460, + BindlessImagesINTEL = 6528, + DotProductFloat16AccFloat32VALVE = 6912, + DotProductFloat16AccFloat16VALVE = 6913, + DotProductBFloat16AccVALVE = 6914, + DotProductFloat8AccFloat32VALVE = 6915, + IntrinsicSAMSUNG = 7041, Max = 0x7fffffff, }; @@ -1320,6 +1448,7 @@ enum class RayFlagsShift : unsigned { SkipTrianglesKHR = 8, SkipAABBsKHR = 9, ForceOpacityMicromap2StateEXT = 10, + ForceOpacityMicromap2StateKHR = 10, Max = 0x7fffffff, }; @@ -1337,6 +1466,7 @@ enum class RayFlagsMask : unsigned { SkipTrianglesKHR = 0x00000100, SkipAABBsKHR = 0x00000200, ForceOpacityMicromap2StateEXT = 0x00000400, + ForceOpacityMicromap2StateKHR = 0x00000400, }; enum class RayQueryIntersection : unsigned { @@ -1485,6 +1615,9 @@ enum class TensorAddressingOperandsMask : unsigned { enum class TensorOperandsShift : unsigned { NontemporalARM = 0, OutOfBoundsValueARM = 1, + MakeElementAvailableARM = 2, + MakeElementVisibleARM = 3, + NonPrivateElementARM = 4, Max = 0x7fffffff, }; @@ -1492,10 +1625,15 @@ enum class TensorOperandsMask : unsigned { MaskNone = 0, NontemporalARM = 0x00000001, OutOfBoundsValueARM = 0x00000002, + MakeElementAvailableARM = 0x00000004, + MakeElementVisibleARM = 0x00000008, + NonPrivateElementARM = 0x00000010, }; enum class InitializationModeQualifier : unsigned { + InitOnDeviceReprogramALTERA = 0, InitOnDeviceReprogramINTEL = 0, + InitOnDeviceResetALTERA = 1, InitOnDeviceResetINTEL = 1, Max = 0x7fffffff, }; @@ -1582,6 +1720,11 @@ enum class FPEncoding : unsigned { BFloat16KHR = 0, Float8E4M3EXT = 4214, Float8E5M2EXT = 4215, + Float6E2M3EXT = 4223, + Float6E3M2EXT = 4224, + Float4E2M1EXT = 4225, + Float8UnsignedE8M0EXT = 4226, + MXInt8EXT = 4227, Max = 0x7fffffff, }; @@ -1612,6 +1755,14 @@ enum class ComponentType : unsigned { Max = 0x7fffffff, }; +enum class GatherModes : unsigned { + Gather4x1QCOM = 0, + GatherDQCOM = 1, + GatherH2QCOM = 2, + GatherV2QCOM = 3, + Max = 0x7fffffff, +}; + enum class Op : unsigned { OpNop = 0, OpUndef = 1, @@ -1964,6 +2115,14 @@ enum class Op : unsigned { OpTensorReadARM = 4164, OpTensorWriteARM = 4165, OpTensorQuerySizeARM = 4166, + OpGraphConstantARM = 4181, + OpGraphEntryPointARM = 4182, + OpGraphARM = 4183, + OpGraphInputARM = 4184, + OpGraphSetOutputARM = 4185, + OpGraphEndARM = 4186, + OpTypeGraphARM = 4190, + OpBitcastExtractEXT = 4195, OpTerminateInvocation = 4416, OpTypeUntypedPointerKHR = 4417, OpUntypedVariableKHR = 4418, @@ -1975,12 +2134,14 @@ enum class Op : unsigned { OpUntypedInBoundsPtrAccessChainKHR = 4424, OpUntypedArrayLengthKHR = 4425, OpUntypedPrefetchKHR = 4426, + OpFmaKHR = 4427, OpSubgroupAllKHR = 4428, OpSubgroupAnyKHR = 4429, OpSubgroupAllEqualKHR = 4430, OpGroupNonUniformRotateKHR = 4431, OpSubgroupReadInvocationKHR = 4432, OpExtInstWithForwardRefsKHR = 4433, + OpUntypedGroupAsyncCopyKHR = 4434, OpTraceRayKHR = 4445, OpExecuteCallableKHR = 4446, OpConvertUToAccelerationStructureKHR = 4447, @@ -2025,6 +2186,7 @@ enum class Op : unsigned { OpCompositeConstructCoopMatQCOM = 4540, OpCompositeExtractCoopMatQCOM = 4541, OpExtractSubArrayQCOM = 4542, + OpImageGatherQCOM = 4545, OpGroupIAddNonUniformAMD = 5000, OpGroupFAddNonUniformAMD = 5001, OpGroupFMinNonUniformAMD = 5002, @@ -2054,6 +2216,8 @@ enum class Op : unsigned { OpConstantSizeOfEXT = 5129, OpConstantDataKHR = 5147, OpSpecConstantDataKHR = 5148, + OpPoisonKHR = 5158, + OpFreezeKHR = 5159, OpHitObjectRecordHitMotionNV = 5249, OpHitObjectRecordHitWithIndexMotionNV = 5250, OpHitObjectRecordMissMotionNV = 5251, @@ -2095,8 +2259,10 @@ enum class Op : unsigned { OpCooperativeVectorReduceSumAccumulateNV = 5291, OpCooperativeVectorMatrixMulAddNV = 5292, OpCooperativeMatrixConvertNV = 5293, + OpCooperativeMatrixConvertUseEXT = 5293, OpEmitMeshTasksEXT = 5294, OpSetMeshOutputsEXT = 5295, + OpGroupNonUniformPartitionEXT = 5296, OpGroupNonUniformPartitionNV = 5296, OpWritePackedPrimitiveIndices4x8NV = 5299, OpFetchMicroTriangleVertexPositionNV = 5300, @@ -2145,6 +2311,7 @@ enum class Op : unsigned { OpTypeAccelerationStructureNV = 5341, OpExecuteCallableNV = 5344, OpRayQueryGetClusterIdNV = 5345, + OpRayQueryGetIntersectionClusterIdNV = 5345, OpHitObjectGetClusterIdNV = 5346, OpHitObjectGetRayTMinEXT = 5347, OpHitObjectGetShaderBindingTableRecordIndexEXT = 5348, @@ -2157,11 +2324,14 @@ enum class Op : unsigned { OpCooperativeMatrixStoreNV = 5360, OpCooperativeMatrixMulAddNV = 5361, OpCooperativeMatrixLengthNV = 5362, + OpCooperativeMatrixGetCoordinateEXT = 5363, OpBeginInvocationInterlockEXT = 5364, OpEndInvocationInterlockEXT = 5365, + OpCooperativeMatrixReduceEXT = 5366, OpCooperativeMatrixReduceNV = 5366, OpCooperativeMatrixLoadTensorNV = 5367, OpCooperativeMatrixStoreTensorNV = 5368, + OpCooperativeMatrixPerElementOpEXT = 5369, OpCooperativeMatrixPerElementOpNV = 5369, OpTypeTensorLayoutNV = 5370, OpTypeTensorViewNV = 5371, @@ -2358,23 +2528,41 @@ enum class Op : unsigned { OpVariableLengthArrayINTEL = 5818, OpSaveMemoryINTEL = 5819, OpRestoreMemoryINTEL = 5820, + OpArbitraryFloatSinCosPiALTERA = 5840, OpArbitraryFloatSinCosPiINTEL = 5840, + OpArbitraryFloatCastALTERA = 5841, OpArbitraryFloatCastINTEL = 5841, + OpArbitraryFloatCastFromIntALTERA = 5842, OpArbitraryFloatCastFromIntINTEL = 5842, + OpArbitraryFloatCastToIntALTERA = 5843, OpArbitraryFloatCastToIntINTEL = 5843, + OpArbitraryFloatAddALTERA = 5846, OpArbitraryFloatAddINTEL = 5846, + OpArbitraryFloatSubALTERA = 5847, OpArbitraryFloatSubINTEL = 5847, + OpArbitraryFloatMulALTERA = 5848, OpArbitraryFloatMulINTEL = 5848, + OpArbitraryFloatDivALTERA = 5849, OpArbitraryFloatDivINTEL = 5849, + OpArbitraryFloatGTALTERA = 5850, OpArbitraryFloatGTINTEL = 5850, + OpArbitraryFloatGEALTERA = 5851, OpArbitraryFloatGEINTEL = 5851, + OpArbitraryFloatLTALTERA = 5852, OpArbitraryFloatLTINTEL = 5852, + OpArbitraryFloatLEALTERA = 5853, OpArbitraryFloatLEINTEL = 5853, + OpArbitraryFloatEQALTERA = 5854, OpArbitraryFloatEQINTEL = 5854, + OpArbitraryFloatRecipALTERA = 5855, OpArbitraryFloatRecipINTEL = 5855, + OpArbitraryFloatRSqrtALTERA = 5856, OpArbitraryFloatRSqrtINTEL = 5856, + OpArbitraryFloatCbrtALTERA = 5857, OpArbitraryFloatCbrtINTEL = 5857, + OpArbitraryFloatHypotALTERA = 5858, OpArbitraryFloatHypotINTEL = 5858, + OpArbitraryFloatSqrtALTERA = 5859, OpArbitraryFloatSqrtINTEL = 5859, OpArbitraryFloatLogINTEL = 5860, OpArbitraryFloatLog2INTEL = 5861, @@ -2403,21 +2591,37 @@ enum class Op : unsigned { OpAliasDomainDeclINTEL = 5911, OpAliasScopeDeclINTEL = 5912, OpAliasScopeListDeclINTEL = 5913, + OpFixedSqrtALTERA = 5923, OpFixedSqrtINTEL = 5923, + OpFixedRecipALTERA = 5924, OpFixedRecipINTEL = 5924, + OpFixedRsqrtALTERA = 5925, OpFixedRsqrtINTEL = 5925, + OpFixedSinALTERA = 5926, OpFixedSinINTEL = 5926, + OpFixedCosALTERA = 5927, OpFixedCosINTEL = 5927, + OpFixedSinCosALTERA = 5928, OpFixedSinCosINTEL = 5928, + OpFixedSinPiALTERA = 5929, OpFixedSinPiINTEL = 5929, + OpFixedCosPiALTERA = 5930, OpFixedCosPiINTEL = 5930, + OpFixedSinCosPiALTERA = 5931, OpFixedSinCosPiINTEL = 5931, + OpFixedLogALTERA = 5932, OpFixedLogINTEL = 5932, + OpFixedExpALTERA = 5933, OpFixedExpINTEL = 5933, + OpPtrCastToCrossWorkgroupALTERA = 5934, OpPtrCastToCrossWorkgroupINTEL = 5934, + OpCrossWorkgroupCastToPtrALTERA = 5938, OpCrossWorkgroupCastToPtrINTEL = 5938, + OpReadPipeBlockingALTERA = 5946, OpReadPipeBlockingINTEL = 5946, + OpWritePipeBlockingALTERA = 5947, OpWritePipeBlockingINTEL = 5947, + OpFPGARegALTERA = 5949, OpFPGARegINTEL = 5949, OpRayQueryGetRayTMinKHR = 6016, OpRayQueryGetRayFlagsKHR = 6017, @@ -2444,9 +2648,21 @@ enum class Op : unsigned { OpCompositeConstructContinuedINTEL = 6096, OpConvertFToBF16INTEL = 6116, OpConvertBF16ToFINTEL = 6117, + OpControlBarrierArriveEXT = 6142, OpControlBarrierArriveINTEL = 6142, + OpControlBarrierWaitEXT = 6143, OpControlBarrierWaitINTEL = 6143, OpArithmeticFenceEXT = 6145, + OpTaskSequenceCreateALTERA = 6163, + OpTaskSequenceCreateINTEL = 6163, + OpTaskSequenceAsyncALTERA = 6164, + OpTaskSequenceAsyncINTEL = 6164, + OpTaskSequenceGetALTERA = 6165, + OpTaskSequenceGetINTEL = 6165, + OpTaskSequenceReleaseALTERA = 6166, + OpTaskSequenceReleaseINTEL = 6166, + OpTypeTaskSequenceALTERA = 6199, + OpTypeTaskSequenceINTEL = 6199, OpSubgroupBlockPrefetchINTEL = 6221, OpSubgroup2DBlockLoadINTEL = 6231, OpSubgroup2DBlockLoadTransformINTEL = 6232, @@ -2454,6 +2670,17 @@ enum class Op : unsigned { OpSubgroup2DBlockPrefetchINTEL = 6234, OpSubgroup2DBlockStoreINTEL = 6235, OpSubgroupMatrixMultiplyAccumulateINTEL = 6237, + OpBitwiseFunctionINTEL = 6242, + OpUntypedVariableLengthArrayINTEL = 6244, + OpConditionalExtensionINTEL = 6248, + OpConditionalEntryPointINTEL = 6249, + OpConditionalCapabilityINTEL = 6250, + OpSpecConstantTargetINTEL = 6251, + OpSpecConstantArchitectureINTEL = 6252, + OpSpecConstantCapabilitiesINTEL = 6253, + OpConditionalCopyObjectINTEL = 6254, + OpPredicatedLoadINTEL = 6258, + OpPredicatedStoreINTEL = 6259, OpGroupIMulKHR = 6401, OpGroupFMulKHR = 6402, OpGroupBitwiseAndKHR = 6403, @@ -2462,8 +2689,15 @@ enum class Op : unsigned { OpGroupLogicalAndKHR = 6406, OpGroupLogicalOrKHR = 6407, OpGroupLogicalXorKHR = 6408, + OpRoundFToTF32INTEL = 6426, OpMaskedGatherINTEL = 6428, OpMaskedScatterINTEL = 6429, + OpConvertHandleToImageINTEL = 6529, + OpConvertHandleToSamplerINTEL = 6530, + OpConvertHandleToSampledImageINTEL = 6531, + OpFDot2MixAcc32VALVE = 6916, + OpFDot2MixAcc16VALVE = 6917, + OpFDot4MixAcc32VALVE = 6918, Max = 0x7fffffff, }; @@ -2826,6 +3060,14 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpTensorReadARM: *hasResult = true; *hasResultType = true; break; case Op::OpTensorWriteARM: *hasResult = false; *hasResultType = false; break; case Op::OpTensorQuerySizeARM: *hasResult = true; *hasResultType = true; break; + case Op::OpGraphConstantARM: *hasResult = true; *hasResultType = true; break; + case Op::OpGraphEntryPointARM: *hasResult = false; *hasResultType = false; break; + case Op::OpGraphARM: *hasResult = true; *hasResultType = true; break; + case Op::OpGraphInputARM: *hasResult = true; *hasResultType = true; break; + case Op::OpGraphSetOutputARM: *hasResult = false; *hasResultType = false; break; + case Op::OpGraphEndARM: *hasResult = false; *hasResultType = false; break; + case Op::OpTypeGraphARM: *hasResult = true; *hasResultType = false; break; + case Op::OpBitcastExtractEXT: *hasResult = true; *hasResultType = true; break; case Op::OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; case Op::OpTypeUntypedPointerKHR: *hasResult = true; *hasResultType = false; break; case Op::OpUntypedVariableKHR: *hasResult = true; *hasResultType = true; break; @@ -2837,17 +3079,14 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpUntypedInBoundsPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break; case Op::OpUntypedArrayLengthKHR: *hasResult = true; *hasResultType = true; break; case Op::OpUntypedPrefetchKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpFmaKHR: *hasResult = true; *hasResultType = true; break; case Op::OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; case Op::OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; case Op::OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpBufferPointerEXT: *hasResult = true; *hasResultType = true; break; - case Op::OpUntypedImageTexelPointerEXT: *hasResult = true; *hasResultType = true; break; - case Op::OpMemberDecorateIdEXT: *hasResult = false; *hasResultType = false; break; - case Op::OpConstantSizeOfEXT: *hasResult = true; *hasResultType = true; break; - case Op::OpTypeBufferEXT: *hasResult = true; *hasResultType = false; break; case Op::OpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break; case Op::OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; case Op::OpExtInstWithForwardRefsKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpUntypedGroupAsyncCopyKHR: *hasResult = true; *hasResultType = true; break; case Op::OpTraceRayKHR: *hasResult = false; *hasResultType = false; break; case Op::OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; case Op::OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; @@ -2886,6 +3125,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpCompositeConstructCoopMatQCOM: *hasResult = true; *hasResultType = true; break; case Op::OpCompositeExtractCoopMatQCOM: *hasResult = true; *hasResultType = true; break; case Op::OpExtractSubArrayQCOM: *hasResult = true; *hasResultType = true; break; + case Op::OpImageGatherQCOM: *hasResult = true; *hasResultType = true; break; case Op::OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; case Op::OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; case Op::OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; @@ -2907,9 +3147,16 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpSpecConstantStringAMDX: *hasResult = true; *hasResultType = false; break; case Op::OpGroupNonUniformQuadAllKHR: *hasResult = true; *hasResultType = true; break; case Op::OpGroupNonUniformQuadAnyKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpTypeBufferEXT: *hasResult = true; *hasResultType = false; break; + case Op::OpBufferPointerEXT: *hasResult = true; *hasResultType = true; break; case Op::OpAbortKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpUntypedImageTexelPointerEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpMemberDecorateIdEXT: *hasResult = false; *hasResultType = false; break; + case Op::OpConstantSizeOfEXT: *hasResult = true; *hasResultType = true; break; case Op::OpConstantDataKHR: *hasResult = true; *hasResultType = true; break; - case Op::OpSpecConstantDataKHR : *hasResult = true; *hasResultType = true; break; + case Op::OpSpecConstantDataKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpPoisonKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpFreezeKHR: *hasResult = true; *hasResultType = true; break; case Op::OpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break; case Op::OpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break; case Op::OpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break; @@ -2944,15 +3191,15 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break; case Op::OpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break; case Op::OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; - case Op::OpTypeCooperativeVectorNV: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeVectorIdEXT: *hasResult = true; *hasResultType = false; break; case Op::OpCooperativeVectorMatrixMulNV: *hasResult = true; *hasResultType = true; break; case Op::OpCooperativeVectorOuterProductAccumulateNV: *hasResult = false; *hasResultType = false; break; case Op::OpCooperativeVectorReduceSumAccumulateNV: *hasResult = false; *hasResultType = false; break; case Op::OpCooperativeVectorMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; - case Op::OpCooperativeMatrixConvertNV: *hasResult = true; *hasResultType = true; break; + case Op::OpCooperativeMatrixConvertUseEXT: *hasResult = true; *hasResultType = true; break; case Op::OpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break; case Op::OpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break; - case Op::OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformPartitionEXT: *hasResult = true; *hasResultType = true; break; case Op::OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; case Op::OpFetchMicroTriangleVertexPositionNV: *hasResult = true; *hasResultType = true; break; case Op::OpFetchMicroTriangleVertexBarycentricNV: *hasResult = true; *hasResultType = true; break; @@ -2997,7 +3244,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break; case Op::OpTypeAccelerationStructureKHR: *hasResult = true; *hasResultType = false; break; case Op::OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; - case Op::OpRayQueryGetClusterIdNV: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionClusterIdNV: *hasResult = true; *hasResultType = true; break; case Op::OpHitObjectGetClusterIdNV: *hasResult = true; *hasResultType = true; break; case Op::OpHitObjectGetRayTMinEXT: *hasResult = true; *hasResultType = true; break; case Op::OpHitObjectGetShaderBindingTableRecordIndexEXT: *hasResult = true; *hasResultType = true; break; @@ -3010,12 +3257,13 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; case Op::OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; case Op::OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; + case Op::OpCooperativeMatrixGetCoordinateEXT: *hasResult = true; *hasResultType = true; break; case Op::OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; case Op::OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case Op::OpCooperativeMatrixReduceNV: *hasResult = true; *hasResultType = true; break; + case Op::OpCooperativeMatrixReduceEXT: *hasResult = true; *hasResultType = true; break; case Op::OpCooperativeMatrixLoadTensorNV: *hasResult = true; *hasResultType = true; break; case Op::OpCooperativeMatrixStoreTensorNV: *hasResult = false; *hasResultType = false; break; - case Op::OpCooperativeMatrixPerElementOpNV: *hasResult = true; *hasResultType = true; break; + case Op::OpCooperativeMatrixPerElementOpEXT: *hasResult = true; *hasResultType = true; break; case Op::OpTypeTensorLayoutNV: *hasResult = true; *hasResultType = false; break; case Op::OpTypeTensorViewNV: *hasResult = true; *hasResultType = false; break; case Op::OpCreateTensorLayoutNV: *hasResult = true; *hasResultType = true; break; @@ -3208,24 +3456,24 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; case Op::OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; case Op::OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatSinCosPiALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatCastALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatCastFromIntALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatCastToIntALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatAddALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatSubALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatMulALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatDivALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatGTALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatGEALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatLTALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatLEALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatEQALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatRecipALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatRSqrtALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatCbrtALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatHypotALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatSqrtALTERA: *hasResult = true; *hasResultType = true; break; case Op::OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; case Op::OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; case Op::OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; @@ -3253,22 +3501,22 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break; case Op::OpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break; case Op::OpAliasScopeListDeclINTEL: *hasResult = true; *hasResultType = false; break; - case Op::OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedSqrtALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedRecipALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedRsqrtALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedSinALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedCosALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedSinCosALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedSinPiALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedCosPiALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedSinCosPiALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedLogALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpFixedExpALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpPtrCastToCrossWorkgroupALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpCrossWorkgroupCastToPtrALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpReadPipeBlockingALTERA: *hasResult = false; *hasResultType = false; break; + case Op::OpWritePipeBlockingALTERA: *hasResult = false; *hasResultType = false; break; + case Op::OpFPGARegALTERA: *hasResult = true; *hasResultType = true; break; case Op::OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; case Op::OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; case Op::OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; @@ -3291,12 +3539,17 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; case Op::OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; case Op::OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpCompositeConstructContinuedINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpCompositeConstructContinuedINTEL: *hasResult = false; *hasResultType = false; break; case Op::OpConvertFToBF16INTEL: *hasResult = true; *hasResultType = true; break; case Op::OpConvertBF16ToFINTEL: *hasResult = true; *hasResultType = true; break; - case Op::OpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break; - case Op::OpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpControlBarrierArriveEXT: *hasResult = false; *hasResultType = false; break; + case Op::OpControlBarrierWaitEXT: *hasResult = false; *hasResultType = false; break; case Op::OpArithmeticFenceEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpTaskSequenceCreateALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpTaskSequenceAsyncALTERA: *hasResult = false; *hasResultType = false; break; + case Op::OpTaskSequenceGetALTERA: *hasResult = true; *hasResultType = true; break; + case Op::OpTaskSequenceReleaseALTERA: *hasResult = false; *hasResultType = false; break; + case Op::OpTypeTaskSequenceALTERA: *hasResult = true; *hasResultType = false; break; case Op::OpSubgroupBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break; case Op::OpSubgroup2DBlockLoadINTEL: *hasResult = false; *hasResultType = false; break; case Op::OpSubgroup2DBlockLoadTransformINTEL: *hasResult = false; *hasResultType = false; break; @@ -3304,6 +3557,17 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpSubgroup2DBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break; case Op::OpSubgroup2DBlockStoreINTEL: *hasResult = false; *hasResultType = false; break; case Op::OpSubgroupMatrixMultiplyAccumulateINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpBitwiseFunctionINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpUntypedVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpConditionalExtensionINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpConditionalEntryPointINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpConditionalCapabilityINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpSpecConstantTargetINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSpecConstantArchitectureINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSpecConstantCapabilitiesINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpConditionalCopyObjectINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpPredicatedLoadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpPredicatedStoreINTEL: *hasResult = false; *hasResultType = false; break; case Op::OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; case Op::OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; case Op::OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; @@ -3312,8 +3576,15 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; case Op::OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; case Op::OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRoundFToTF32INTEL: *hasResult = true; *hasResultType = true; break; case Op::OpMaskedGatherINTEL: *hasResult = true; *hasResultType = true; break; case Op::OpMaskedScatterINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpConvertHandleToImageINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertHandleToSamplerINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertHandleToSampledImageINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpFDot2MixAcc32VALVE: *hasResult = true; *hasResultType = true; break; + case Op::OpFDot2MixAcc16VALVE: *hasResult = true; *hasResultType = true; break; + case Op::OpFDot4MixAcc32VALVE: *hasResult = true; *hasResultType = true; break; } } inline const char* SourceLanguageToString(SourceLanguage value) { @@ -3332,6 +3603,8 @@ inline const char* SourceLanguageToString(SourceLanguage value) { case SourceLanguage::Slang: return "Slang"; case SourceLanguage::Zig: return "Zig"; case SourceLanguage::Rust: return "Rust"; + case SourceLanguage::Pred: return "Pred"; + case SourceLanguage::ApilaJai: return "ApilaJai"; default: return "Unknown"; } } @@ -3448,6 +3721,7 @@ inline const char* ExecutionModeToString(ExecutionMode value) { case ExecutionMode::QuadDerivativesKHR: return "QuadDerivativesKHR"; case ExecutionMode::RequireFullQuadsKHR: return "RequireFullQuadsKHR"; case ExecutionMode::SharesInputWithAMDX: return "SharesInputWithAMDX"; + case ExecutionMode::ArithmeticPoisonKHR: return "ArithmeticPoisonKHR"; case ExecutionMode::OutputLinesEXT: return "OutputLinesEXT"; case ExecutionMode::OutputPrimitivesEXT: return "OutputPrimitivesEXT"; case ExecutionMode::DerivativeGroupQuadsKHR: return "DerivativeGroupQuadsKHR"; @@ -3472,6 +3746,7 @@ inline const char* ExecutionModeToString(ExecutionMode value) { case ExecutionMode::SchedulerTargetFmaxMhzINTEL: return "SchedulerTargetFmaxMhzINTEL"; case ExecutionMode::MaximallyReconvergesKHR: return "MaximallyReconvergesKHR"; case ExecutionMode::FPFastMathDefault: return "FPFastMathDefault"; + case ExecutionMode::OpacityMicromapIdKHR: return "OpacityMicromapIdKHR"; case ExecutionMode::StreamingInterfaceINTEL: return "StreamingInterfaceINTEL"; case ExecutionMode::RegisterMapInterfaceINTEL: return "RegisterMapInterfaceINTEL"; case ExecutionMode::NamedBarrierCountINTEL: return "NamedBarrierCountINTEL"; @@ -3511,8 +3786,8 @@ inline const char* StorageClassToString(StorageClass value) { case StorageClass::TaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT"; case StorageClass::HitObjectAttributeEXT: return "HitObjectAttributeEXT"; case StorageClass::CodeSectionINTEL: return "CodeSectionINTEL"; - case StorageClass::DeviceOnlyINTEL: return "DeviceOnlyINTEL"; - case StorageClass::HostOnlyINTEL: return "HostOnlyINTEL"; + case StorageClass::DeviceOnlyALTERA: return "DeviceOnlyALTERA"; + case StorageClass::HostOnlyALTERA: return "HostOnlyALTERA"; default: return "Unknown"; } } @@ -3643,9 +3918,15 @@ inline const char* ImageChannelDataTypeToString(ImageChannelDataType value) { case ImageChannelDataType::Float: return "Float"; case ImageChannelDataType::UnormInt24: return "UnormInt24"; case ImageChannelDataType::UnormInt101010_2: return "UnormInt101010_2"; + case ImageChannelDataType::UnormInt10X6EXT: return "UnormInt10X6EXT"; case ImageChannelDataType::UnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT"; case ImageChannelDataType::UnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT"; case ImageChannelDataType::UnormInt2_101010EXT: return "UnormInt2_101010EXT"; + case ImageChannelDataType::UnsignedInt10X6EXT: return "UnsignedInt10X6EXT"; + case ImageChannelDataType::UnsignedInt12X4EXT: return "UnsignedInt12X4EXT"; + case ImageChannelDataType::UnsignedInt14X2EXT: return "UnsignedInt14X2EXT"; + case ImageChannelDataType::UnormInt12X4EXT: return "UnormInt12X4EXT"; + case ImageChannelDataType::UnormInt14X2EXT: return "UnormInt14X2EXT"; default: return "Unknown"; } } @@ -3665,6 +3946,7 @@ inline const char* LinkageTypeToString(LinkageType value) { case LinkageType::Export: return "Export"; case LinkageType::Import: return "Import"; case LinkageType::LinkOnceODR: return "LinkOnceODR"; + case LinkageType::WeakAMD: return "WeakAMD"; default: return "Unknown"; } } @@ -3688,7 +3970,7 @@ inline const char* FunctionParameterAttributeToString(FunctionParameterAttribute case FunctionParameterAttribute::NoCapture: return "NoCapture"; case FunctionParameterAttribute::NoWrite: return "NoWrite"; case FunctionParameterAttribute::NoReadWrite: return "NoReadWrite"; - case FunctionParameterAttribute::RuntimeAlignedINTEL: return "RuntimeAlignedINTEL"; + case FunctionParameterAttribute::RuntimeAlignedALTERA: return "RuntimeAlignedALTERA"; default: return "Unknown"; } } @@ -3757,6 +4039,8 @@ inline const char* DecorationToString(Decoration value) { case Decoration::PayloadNodeSparseArrayAMDX: return "PayloadNodeSparseArrayAMDX"; case Decoration::PayloadNodeArraySizeAMDX: return "PayloadNodeArraySizeAMDX"; case Decoration::PayloadDispatchIndirectAMDX: return "PayloadDispatchIndirectAMDX"; + case Decoration::ArrayStrideIdEXT: return "ArrayStrideIdEXT"; + case Decoration::OffsetIdEXT: return "OffsetIdEXT"; case Decoration::UTFEncodedKHR: return "UTFEncodedKHR"; case Decoration::OverrideCoverageNV: return "OverrideCoverageNV"; case Decoration::PassthroughNV: return "PassthroughNV"; @@ -3771,12 +4055,13 @@ inline const char* DecorationToString(Decoration value) { case Decoration::AliasedPointer: return "AliasedPointer"; case Decoration::MemberOffsetNV: return "MemberOffsetNV"; case Decoration::HitObjectShaderRecordBufferNV: return "HitObjectShaderRecordBufferNV"; - case Decoration::BankNV: return "BankNV"; case Decoration::HitObjectShaderRecordBufferEXT: return "HitObjectShaderRecordBufferEXT"; + case Decoration::BankNV: return "BankNV"; case Decoration::BindlessSamplerNV: return "BindlessSamplerNV"; case Decoration::BindlessImageNV: return "BindlessImageNV"; case Decoration::BoundSamplerNV: return "BoundSamplerNV"; case Decoration::BoundImageNV: return "BoundImageNV"; + case Decoration::CooperativeMatrixTransposeEXT: return "CooperativeMatrixTransposeEXT"; case Decoration::SIMTCallINTEL: return "SIMTCallINTEL"; case Decoration::ReferencedIndirectlyINTEL: return "ReferencedIndirectlyINTEL"; case Decoration::ClobberINTEL: return "ClobberINTEL"; @@ -3791,57 +4076,59 @@ inline const char* DecorationToString(Decoration value) { case Decoration::UserTypeGOOGLE: return "UserTypeGOOGLE"; case Decoration::FunctionRoundingModeINTEL: return "FunctionRoundingModeINTEL"; case Decoration::FunctionDenormModeINTEL: return "FunctionDenormModeINTEL"; - case Decoration::RegisterINTEL: return "RegisterINTEL"; - case Decoration::MemoryINTEL: return "MemoryINTEL"; - case Decoration::NumbanksINTEL: return "NumbanksINTEL"; - case Decoration::BankwidthINTEL: return "BankwidthINTEL"; - case Decoration::MaxPrivateCopiesINTEL: return "MaxPrivateCopiesINTEL"; - case Decoration::SinglepumpINTEL: return "SinglepumpINTEL"; - case Decoration::DoublepumpINTEL: return "DoublepumpINTEL"; - case Decoration::MaxReplicatesINTEL: return "MaxReplicatesINTEL"; - case Decoration::SimpleDualPortINTEL: return "SimpleDualPortINTEL"; - case Decoration::MergeINTEL: return "MergeINTEL"; - case Decoration::BankBitsINTEL: return "BankBitsINTEL"; - case Decoration::ForcePow2DepthINTEL: return "ForcePow2DepthINTEL"; - case Decoration::StridesizeINTEL: return "StridesizeINTEL"; - case Decoration::WordsizeINTEL: return "WordsizeINTEL"; - case Decoration::TrueDualPortINTEL: return "TrueDualPortINTEL"; - case Decoration::BurstCoalesceINTEL: return "BurstCoalesceINTEL"; - case Decoration::CacheSizeINTEL: return "CacheSizeINTEL"; - case Decoration::DontStaticallyCoalesceINTEL: return "DontStaticallyCoalesceINTEL"; - case Decoration::PrefetchINTEL: return "PrefetchINTEL"; - case Decoration::StallEnableINTEL: return "StallEnableINTEL"; - case Decoration::FuseLoopsInFunctionINTEL: return "FuseLoopsInFunctionINTEL"; - case Decoration::MathOpDSPModeINTEL: return "MathOpDSPModeINTEL"; + case Decoration::RegisterALTERA: return "RegisterALTERA"; + case Decoration::MemoryALTERA: return "MemoryALTERA"; + case Decoration::NumbanksALTERA: return "NumbanksALTERA"; + case Decoration::BankwidthALTERA: return "BankwidthALTERA"; + case Decoration::MaxPrivateCopiesALTERA: return "MaxPrivateCopiesALTERA"; + case Decoration::SinglepumpALTERA: return "SinglepumpALTERA"; + case Decoration::DoublepumpALTERA: return "DoublepumpALTERA"; + case Decoration::MaxReplicatesALTERA: return "MaxReplicatesALTERA"; + case Decoration::SimpleDualPortALTERA: return "SimpleDualPortALTERA"; + case Decoration::MergeALTERA: return "MergeALTERA"; + case Decoration::BankBitsALTERA: return "BankBitsALTERA"; + case Decoration::ForcePow2DepthALTERA: return "ForcePow2DepthALTERA"; + case Decoration::StridesizeALTERA: return "StridesizeALTERA"; + case Decoration::WordsizeALTERA: return "WordsizeALTERA"; + case Decoration::TrueDualPortALTERA: return "TrueDualPortALTERA"; + case Decoration::BurstCoalesceALTERA: return "BurstCoalesceALTERA"; + case Decoration::CacheSizeALTERA: return "CacheSizeALTERA"; + case Decoration::DontStaticallyCoalesceALTERA: return "DontStaticallyCoalesceALTERA"; + case Decoration::PrefetchALTERA: return "PrefetchALTERA"; + case Decoration::StallEnableALTERA: return "StallEnableALTERA"; + case Decoration::FuseLoopsInFunctionALTERA: return "FuseLoopsInFunctionALTERA"; + case Decoration::MathOpDSPModeALTERA: return "MathOpDSPModeALTERA"; case Decoration::AliasScopeINTEL: return "AliasScopeINTEL"; case Decoration::NoAliasINTEL: return "NoAliasINTEL"; - case Decoration::InitiationIntervalINTEL: return "InitiationIntervalINTEL"; - case Decoration::MaxConcurrencyINTEL: return "MaxConcurrencyINTEL"; - case Decoration::PipelineEnableINTEL: return "PipelineEnableINTEL"; - case Decoration::BufferLocationINTEL: return "BufferLocationINTEL"; - case Decoration::IOPipeStorageINTEL: return "IOPipeStorageINTEL"; + case Decoration::InitiationIntervalALTERA: return "InitiationIntervalALTERA"; + case Decoration::MaxConcurrencyALTERA: return "MaxConcurrencyALTERA"; + case Decoration::PipelineEnableALTERA: return "PipelineEnableALTERA"; + case Decoration::BufferLocationALTERA: return "BufferLocationALTERA"; + case Decoration::IOPipeStorageALTERA: return "IOPipeStorageALTERA"; case Decoration::FunctionFloatingPointModeINTEL: return "FunctionFloatingPointModeINTEL"; case Decoration::SingleElementVectorINTEL: return "SingleElementVectorINTEL"; case Decoration::VectorComputeCallableFunctionINTEL: return "VectorComputeCallableFunctionINTEL"; case Decoration::MediaBlockIOINTEL: return "MediaBlockIOINTEL"; - case Decoration::StallFreeINTEL: return "StallFreeINTEL"; + case Decoration::StallFreeALTERA: return "StallFreeALTERA"; case Decoration::FPMaxErrorDecorationINTEL: return "FPMaxErrorDecorationINTEL"; - case Decoration::LatencyControlLabelINTEL: return "LatencyControlLabelINTEL"; - case Decoration::LatencyControlConstraintINTEL: return "LatencyControlConstraintINTEL"; - case Decoration::ConduitKernelArgumentINTEL: return "ConduitKernelArgumentINTEL"; - case Decoration::RegisterMapKernelArgumentINTEL: return "RegisterMapKernelArgumentINTEL"; - case Decoration::MMHostInterfaceAddressWidthINTEL: return "MMHostInterfaceAddressWidthINTEL"; - case Decoration::MMHostInterfaceDataWidthINTEL: return "MMHostInterfaceDataWidthINTEL"; - case Decoration::MMHostInterfaceLatencyINTEL: return "MMHostInterfaceLatencyINTEL"; - case Decoration::MMHostInterfaceReadWriteModeINTEL: return "MMHostInterfaceReadWriteModeINTEL"; - case Decoration::MMHostInterfaceMaxBurstINTEL: return "MMHostInterfaceMaxBurstINTEL"; - case Decoration::MMHostInterfaceWaitRequestINTEL: return "MMHostInterfaceWaitRequestINTEL"; - case Decoration::StableKernelArgumentINTEL: return "StableKernelArgumentINTEL"; + case Decoration::LatencyControlLabelALTERA: return "LatencyControlLabelALTERA"; + case Decoration::LatencyControlConstraintALTERA: return "LatencyControlConstraintALTERA"; + case Decoration::ConduitKernelArgumentALTERA: return "ConduitKernelArgumentALTERA"; + case Decoration::RegisterMapKernelArgumentALTERA: return "RegisterMapKernelArgumentALTERA"; + case Decoration::MMHostInterfaceAddressWidthALTERA: return "MMHostInterfaceAddressWidthALTERA"; + case Decoration::MMHostInterfaceDataWidthALTERA: return "MMHostInterfaceDataWidthALTERA"; + case Decoration::MMHostInterfaceLatencyALTERA: return "MMHostInterfaceLatencyALTERA"; + case Decoration::MMHostInterfaceReadWriteModeALTERA: return "MMHostInterfaceReadWriteModeALTERA"; + case Decoration::MMHostInterfaceMaxBurstALTERA: return "MMHostInterfaceMaxBurstALTERA"; + case Decoration::MMHostInterfaceWaitRequestALTERA: return "MMHostInterfaceWaitRequestALTERA"; + case Decoration::StableKernelArgumentALTERA: return "StableKernelArgumentALTERA"; case Decoration::HostAccessINTEL: return "HostAccessINTEL"; - case Decoration::InitModeINTEL: return "InitModeINTEL"; - case Decoration::ImplementInRegisterMapINTEL: return "ImplementInRegisterMapINTEL"; + case Decoration::InitModeALTERA: return "InitModeALTERA"; + case Decoration::ImplementInRegisterMapALTERA: return "ImplementInRegisterMapALTERA"; + case Decoration::ConditionalINTEL: return "ConditionalINTEL"; case Decoration::CacheControlLoadINTEL: return "CacheControlLoadINTEL"; case Decoration::CacheControlStoreINTEL: return "CacheControlStoreINTEL"; + case Decoration::IntrinsicSAMSUNG: return "IntrinsicSAMSUNG"; default: return "Unknown"; } } @@ -3919,6 +4206,8 @@ inline const char* BuiltInToString(BuiltIn value) { case BuiltIn::FragStencilRefEXT: return "FragStencilRefEXT"; case BuiltIn::RemainingRecursionLevelsAMDX: return "RemainingRecursionLevelsAMDX"; case BuiltIn::ShaderIndexAMDX: return "ShaderIndexAMDX"; + case BuiltIn::SamplerHeapEXT: return "SamplerHeapEXT"; + case BuiltIn::ResourceHeapEXT: return "ResourceHeapEXT"; case BuiltIn::ViewportMaskNV: return "ViewportMaskNV"; case BuiltIn::SecondaryPositionNV: return "SecondaryPositionNV"; case BuiltIn::SecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; @@ -3997,9 +4286,9 @@ inline const char* GroupOperationToString(GroupOperation value) { case GroupOperation::InclusiveScan: return "InclusiveScan"; case GroupOperation::ExclusiveScan: return "ExclusiveScan"; case GroupOperation::ClusteredReduce: return "ClusteredReduce"; - case GroupOperation::PartitionedReduceNV: return "PartitionedReduceNV"; - case GroupOperation::PartitionedInclusiveScanNV: return "PartitionedInclusiveScanNV"; - case GroupOperation::PartitionedExclusiveScanNV: return "PartitionedExclusiveScanNV"; + case GroupOperation::PartitionedReduceEXT: return "PartitionedReduceEXT"; + case GroupOperation::PartitionedInclusiveScanEXT: return "PartitionedInclusiveScanEXT"; + case GroupOperation::PartitionedExclusiveScanEXT: return "PartitionedExclusiveScanEXT"; default: return "Unknown"; } } @@ -4090,9 +4379,17 @@ inline const char* CapabilityToString(Capability value) { case Capability::TileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; case Capability::TileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; case Capability::TensorsARM: return "TensorsARM"; + case Capability::StorageTensorArrayDynamicIndexingARM: return "StorageTensorArrayDynamicIndexingARM"; + case Capability::StorageTensorArrayNonUniformIndexingARM: return "StorageTensorArrayNonUniformIndexingARM"; + case Capability::GraphARM: return "GraphARM"; case Capability::CooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; case Capability::Float8EXT: return "Float8EXT"; case Capability::Float8CooperativeMatrixEXT: return "Float8CooperativeMatrixEXT"; + case Capability::Float6EXT: return "Float6EXT"; + case Capability::Float4EXT: return "Float4EXT"; + case Capability::Float8UnsignedE8M0EXT: return "Float8UnsignedE8M0EXT"; + case Capability::MXInt8EXT: return "MXInt8EXT"; + case Capability::BitcastExtractEXT: return "BitcastExtractEXT"; case Capability::FragmentShadingRateKHR: return "FragmentShadingRateKHR"; case Capability::SubgroupBallotKHR: return "SubgroupBallotKHR"; case Capability::DrawParameters: return "DrawParameters"; @@ -4129,6 +4426,9 @@ inline const char* CapabilityToString(Capability value) { case Capability::TileShadingQCOM: return "TileShadingQCOM"; case Capability::CooperativeMatrixConversionQCOM: return "CooperativeMatrixConversionQCOM"; case Capability::TextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; + case Capability::MultipleWaitQueuesQCOM: return "MultipleWaitQueuesQCOM"; + case Capability::ImageGatherLinearQCOM: return "ImageGatherLinearQCOM"; + case Capability::ImageGatherExtendedModesQCOM: return "ImageGatherExtendedModesQCOM"; case Capability::Float16ImageAMD: return "Float16ImageAMD"; case Capability::ImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD"; case Capability::FragmentMaskAMD: return "FragmentMaskAMD"; @@ -4138,11 +4438,16 @@ inline const char* CapabilityToString(Capability value) { case Capability::ShaderClockKHR: return "ShaderClockKHR"; case Capability::ShaderEnqueueAMDX: return "ShaderEnqueueAMDX"; case Capability::QuadControlKHR: return "QuadControlKHR"; + case Capability::Int4TypeINTEL: return "Int4TypeINTEL"; + case Capability::Int4CooperativeMatrixINTEL: return "Int4CooperativeMatrixINTEL"; case Capability::BFloat16TypeKHR: return "BFloat16TypeKHR"; case Capability::BFloat16DotProductKHR: return "BFloat16DotProductKHR"; case Capability::BFloat16CooperativeMatrixKHR: return "BFloat16CooperativeMatrixKHR"; case Capability::AbortKHR: return "AbortKHR"; + case Capability::DescriptorHeapEXT: return "DescriptorHeapEXT"; case Capability::ConstantDataKHR: return "ConstantDataKHR"; + case Capability::PoisonFreezeKHR: return "PoisonFreezeKHR"; + case Capability::WeakLinkageAMD: return "WeakLinkageAMD"; case Capability::SampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV"; case Capability::GeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; case Capability::ShaderViewportIndexLayerEXT: return "ShaderViewportIndexLayerEXT"; @@ -4156,7 +4461,7 @@ inline const char* CapabilityToString(Capability value) { case Capability::FragmentBarycentricKHR: return "FragmentBarycentricKHR"; case Capability::ComputeDerivativeGroupQuadsKHR: return "ComputeDerivativeGroupQuadsKHR"; case Capability::FragmentDensityEXT: return "FragmentDensityEXT"; - case Capability::GroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV"; + case Capability::GroupNonUniformPartitionedEXT: return "GroupNonUniformPartitionedEXT"; case Capability::ShaderNonUniform: return "ShaderNonUniform"; case Capability::RuntimeDescriptorArray: return "RuntimeDescriptorArray"; case Capability::InputAttachmentArrayDynamicIndexing: return "InputAttachmentArrayDynamicIndexing"; @@ -4198,15 +4503,17 @@ inline const char* CapabilityToString(Capability value) { case Capability::PushConstantBanksNV: return "PushConstantBanksNV"; case Capability::LongVectorEXT: return "LongVectorEXT"; case Capability::Shader64BitIndexingEXT: return "Shader64BitIndexingEXT"; - case Capability::CooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV"; + case Capability::CooperativeMatrixConversionsEXT: return "CooperativeMatrixConversionsEXT"; + case Capability::CooperativeMatrixReductionsEXT: return "CooperativeMatrixReductionsEXT"; case Capability::CooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV"; - case Capability::CooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV"; + case Capability::CooperativeMatrixPerElementOperationsEXT: return "CooperativeMatrixPerElementOperationsEXT"; case Capability::CooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV"; case Capability::CooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV"; - case Capability::CooperativeMatrixDecodeVectorNV: return "CooperativeMatrixDecodeVectorNV"; case Capability::CooperativeVectorTrainingNV: return "CooperativeVectorTrainingNV"; case Capability::RayTracingClusterAccelerationStructureNV: return "RayTracingClusterAccelerationStructureNV"; + case Capability::CooperativeMatrixGetCoordinateEXT: return "CooperativeMatrixGetCoordinateEXT"; case Capability::TensorAddressingNV: return "TensorAddressingNV"; + case Capability::CooperativeMatrixDecodeVectorNV: return "CooperativeMatrixDecodeVectorNV"; case Capability::SubgroupShuffleINTEL: return "SubgroupShuffleINTEL"; case Capability::SubgroupBufferBlockIOINTEL: return "SubgroupBufferBlockIOINTEL"; case Capability::SubgroupImageBlockIOINTEL: return "SubgroupImageBlockIOINTEL"; @@ -4228,27 +4535,27 @@ inline const char* CapabilityToString(Capability value) { case Capability::SubgroupAvcMotionEstimationChromaINTEL: return "SubgroupAvcMotionEstimationChromaINTEL"; case Capability::VariableLengthArrayINTEL: return "VariableLengthArrayINTEL"; case Capability::FunctionFloatControlINTEL: return "FunctionFloatControlINTEL"; - case Capability::FPGAMemoryAttributesINTEL: return "FPGAMemoryAttributesINTEL"; + case Capability::FPGAMemoryAttributesALTERA: return "FPGAMemoryAttributesALTERA"; case Capability::FPFastMathModeINTEL: return "FPFastMathModeINTEL"; - case Capability::ArbitraryPrecisionIntegersINTEL: return "ArbitraryPrecisionIntegersINTEL"; - case Capability::ArbitraryPrecisionFloatingPointINTEL: return "ArbitraryPrecisionFloatingPointINTEL"; + case Capability::ArbitraryPrecisionIntegersALTERA: return "ArbitraryPrecisionIntegersALTERA"; + case Capability::ArbitraryPrecisionFloatingPointALTERA: return "ArbitraryPrecisionFloatingPointALTERA"; case Capability::UnstructuredLoopControlsINTEL: return "UnstructuredLoopControlsINTEL"; - case Capability::FPGALoopControlsINTEL: return "FPGALoopControlsINTEL"; + case Capability::FPGALoopControlsALTERA: return "FPGALoopControlsALTERA"; case Capability::KernelAttributesINTEL: return "KernelAttributesINTEL"; case Capability::FPGAKernelAttributesINTEL: return "FPGAKernelAttributesINTEL"; - case Capability::FPGAMemoryAccessesINTEL: return "FPGAMemoryAccessesINTEL"; - case Capability::FPGAClusterAttributesINTEL: return "FPGAClusterAttributesINTEL"; - case Capability::LoopFuseINTEL: return "LoopFuseINTEL"; - case Capability::FPGADSPControlINTEL: return "FPGADSPControlINTEL"; + case Capability::FPGAMemoryAccessesALTERA: return "FPGAMemoryAccessesALTERA"; + case Capability::FPGAClusterAttributesALTERA: return "FPGAClusterAttributesALTERA"; + case Capability::LoopFuseALTERA: return "LoopFuseALTERA"; + case Capability::FPGADSPControlALTERA: return "FPGADSPControlALTERA"; case Capability::MemoryAccessAliasingINTEL: return "MemoryAccessAliasingINTEL"; - case Capability::FPGAInvocationPipeliningAttributesINTEL: return "FPGAInvocationPipeliningAttributesINTEL"; - case Capability::FPGABufferLocationINTEL: return "FPGABufferLocationINTEL"; - case Capability::ArbitraryPrecisionFixedPointINTEL: return "ArbitraryPrecisionFixedPointINTEL"; - case Capability::USMStorageClassesINTEL: return "USMStorageClassesINTEL"; - case Capability::RuntimeAlignedAttributeINTEL: return "RuntimeAlignedAttributeINTEL"; - case Capability::IOPipesINTEL: return "IOPipesINTEL"; - case Capability::BlockingPipesINTEL: return "BlockingPipesINTEL"; - case Capability::FPGARegINTEL: return "FPGARegINTEL"; + case Capability::FPGAInvocationPipeliningAttributesALTERA: return "FPGAInvocationPipeliningAttributesALTERA"; + case Capability::FPGABufferLocationALTERA: return "FPGABufferLocationALTERA"; + case Capability::ArbitraryPrecisionFixedPointALTERA: return "ArbitraryPrecisionFixedPointALTERA"; + case Capability::USMStorageClassesALTERA: return "USMStorageClassesALTERA"; + case Capability::RuntimeAlignedAttributeALTERA: return "RuntimeAlignedAttributeALTERA"; + case Capability::IOPipesALTERA: return "IOPipesALTERA"; + case Capability::BlockingPipesALTERA: return "BlockingPipesALTERA"; + case Capability::FPGARegALTERA: return "FPGARegALTERA"; case Capability::DotProductInputAll: return "DotProductInputAll"; case Capability::DotProductInput4x8Bit: return "DotProductInput4x8Bit"; case Capability::DotProductInput4x8BitPacked: return "DotProductInput4x8BitPacked"; @@ -4259,6 +4566,8 @@ inline const char* CapabilityToString(Capability value) { case Capability::BitInstructions: return "BitInstructions"; case Capability::GroupNonUniformRotateKHR: return "GroupNonUniformRotateKHR"; case Capability::FloatControls2: return "FloatControls2"; + case Capability::FMAKHR: return "FMAKHR"; + case Capability::RayTracingOpacityMicromapExecutionModeKHR: return "RayTracingOpacityMicromapExecutionModeKHR"; case Capability::AtomicFloat32AddEXT: return "AtomicFloat32AddEXT"; case Capability::AtomicFloat64AddEXT: return "AtomicFloat64AddEXT"; case Capability::LongCompositesINTEL: return "LongCompositesINTEL"; @@ -4266,24 +4575,38 @@ inline const char* CapabilityToString(Capability value) { case Capability::AtomicFloat16AddEXT: return "AtomicFloat16AddEXT"; case Capability::DebugInfoModuleINTEL: return "DebugInfoModuleINTEL"; case Capability::BFloat16ConversionINTEL: return "BFloat16ConversionINTEL"; - case Capability::SplitBarrierINTEL: return "SplitBarrierINTEL"; + case Capability::SplitBarrierEXT: return "SplitBarrierEXT"; case Capability::ArithmeticFenceEXT: return "ArithmeticFenceEXT"; - case Capability::FPGAClusterAttributesV2INTEL: return "FPGAClusterAttributesV2INTEL"; + case Capability::FPGAClusterAttributesV2ALTERA: return "FPGAClusterAttributesV2ALTERA"; case Capability::FPGAKernelAttributesv2INTEL: return "FPGAKernelAttributesv2INTEL"; + case Capability::TaskSequenceALTERA: return "TaskSequenceALTERA"; case Capability::FPMaxErrorINTEL: return "FPMaxErrorINTEL"; - case Capability::FPGALatencyControlINTEL: return "FPGALatencyControlINTEL"; - case Capability::FPGAArgumentInterfacesINTEL: return "FPGAArgumentInterfacesINTEL"; + case Capability::FPGALatencyControlALTERA: return "FPGALatencyControlALTERA"; + case Capability::FPGAArgumentInterfacesALTERA: return "FPGAArgumentInterfacesALTERA"; case Capability::GlobalVariableHostAccessINTEL: return "GlobalVariableHostAccessINTEL"; - case Capability::GlobalVariableFPGADecorationsINTEL: return "GlobalVariableFPGADecorationsINTEL"; + case Capability::GlobalVariableFPGADecorationsALTERA: return "GlobalVariableFPGADecorationsALTERA"; case Capability::SubgroupBufferPrefetchINTEL: return "SubgroupBufferPrefetchINTEL"; case Capability::Subgroup2DBlockIOINTEL: return "Subgroup2DBlockIOINTEL"; case Capability::Subgroup2DBlockTransformINTEL: return "Subgroup2DBlockTransformINTEL"; case Capability::Subgroup2DBlockTransposeINTEL: return "Subgroup2DBlockTransposeINTEL"; case Capability::SubgroupMatrixMultiplyAccumulateINTEL: return "SubgroupMatrixMultiplyAccumulateINTEL"; + case Capability::TernaryBitwiseFunctionINTEL: return "TernaryBitwiseFunctionINTEL"; + case Capability::UntypedVariableLengthArrayINTEL: return "UntypedVariableLengthArrayINTEL"; + case Capability::SpecConditionalINTEL: return "SpecConditionalINTEL"; + case Capability::FunctionVariantsINTEL: return "FunctionVariantsINTEL"; + case Capability::PredicatedIOINTEL: return "PredicatedIOINTEL"; + case Capability::RoundedDivideSqrtINTEL: return "RoundedDivideSqrtINTEL"; case Capability::GroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR"; + case Capability::TensorFloat32RoundingINTEL: return "TensorFloat32RoundingINTEL"; case Capability::MaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL"; case Capability::CacheControlsINTEL: return "CacheControlsINTEL"; case Capability::RegisterLimitsINTEL: return "RegisterLimitsINTEL"; + case Capability::BindlessImagesINTEL: return "BindlessImagesINTEL"; + case Capability::DotProductFloat16AccFloat32VALVE: return "DotProductFloat16AccFloat32VALVE"; + case Capability::DotProductFloat16AccFloat16VALVE: return "DotProductFloat16AccFloat16VALVE"; + case Capability::DotProductBFloat16AccVALVE: return "DotProductBFloat16AccVALVE"; + case Capability::DotProductFloat8AccFloat32VALVE: return "DotProductFloat8AccFloat32VALVE"; + case Capability::IntrinsicSAMSUNG: return "IntrinsicSAMSUNG"; default: return "Unknown"; } } @@ -4392,8 +4715,8 @@ inline const char* TensorClampModeToString(TensorClampMode value) { inline const char* InitializationModeQualifierToString(InitializationModeQualifier value) { switch (value) { - case InitializationModeQualifier::InitOnDeviceReprogramINTEL: return "InitOnDeviceReprogramINTEL"; - case InitializationModeQualifier::InitOnDeviceResetINTEL: return "InitOnDeviceResetINTEL"; + case InitializationModeQualifier::InitOnDeviceReprogramALTERA: return "InitOnDeviceReprogramALTERA"; + case InitializationModeQualifier::InitOnDeviceResetALTERA: return "InitOnDeviceResetALTERA"; default: return "Unknown"; } } @@ -4441,6 +4764,11 @@ inline const char* FPEncodingToString(FPEncoding value) { case FPEncoding::BFloat16KHR: return "BFloat16KHR"; case FPEncoding::Float8E4M3EXT: return "Float8E4M3EXT"; case FPEncoding::Float8E5M2EXT: return "Float8E5M2EXT"; + case FPEncoding::Float6E2M3EXT: return "Float6E2M3EXT"; + case FPEncoding::Float6E3M2EXT: return "Float6E3M2EXT"; + case FPEncoding::Float4E2M1EXT: return "Float4E2M1EXT"; + case FPEncoding::Float8UnsignedE8M0EXT: return "Float8UnsignedE8M0EXT"; + case FPEncoding::MXInt8EXT: return "MXInt8EXT"; default: return "Unknown"; } } @@ -4476,6 +4804,16 @@ inline const char* ComponentTypeToString(ComponentType value) { } } +inline const char* GatherModesToString(GatherModes value) { + switch (value) { + case GatherModes::Gather4x1QCOM: return "Gather4x1QCOM"; + case GatherModes::GatherDQCOM: return "GatherDQCOM"; + case GatherModes::GatherH2QCOM: return "GatherH2QCOM"; + case GatherModes::GatherV2QCOM: return "GatherV2QCOM"; + default: return "Unknown"; + } +} + inline const char* OpToString(Op value) { switch (value) { case Op::OpNop: return "OpNop"; @@ -4829,6 +5167,14 @@ inline const char* OpToString(Op value) { case Op::OpTensorReadARM: return "OpTensorReadARM"; case Op::OpTensorWriteARM: return "OpTensorWriteARM"; case Op::OpTensorQuerySizeARM: return "OpTensorQuerySizeARM"; + case Op::OpGraphConstantARM: return "OpGraphConstantARM"; + case Op::OpGraphEntryPointARM: return "OpGraphEntryPointARM"; + case Op::OpGraphARM: return "OpGraphARM"; + case Op::OpGraphInputARM: return "OpGraphInputARM"; + case Op::OpGraphSetOutputARM: return "OpGraphSetOutputARM"; + case Op::OpGraphEndARM: return "OpGraphEndARM"; + case Op::OpTypeGraphARM: return "OpTypeGraphARM"; + case Op::OpBitcastExtractEXT: return "OpBitcastExtractEXT"; case Op::OpTerminateInvocation: return "OpTerminateInvocation"; case Op::OpTypeUntypedPointerKHR: return "OpTypeUntypedPointerKHR"; case Op::OpUntypedVariableKHR: return "OpUntypedVariableKHR"; @@ -4840,17 +5186,14 @@ inline const char* OpToString(Op value) { case Op::OpUntypedInBoundsPtrAccessChainKHR: return "OpUntypedInBoundsPtrAccessChainKHR"; case Op::OpUntypedArrayLengthKHR: return "OpUntypedArrayLengthKHR"; case Op::OpUntypedPrefetchKHR: return "OpUntypedPrefetchKHR"; + case Op::OpFmaKHR: return "OpFmaKHR"; case Op::OpSubgroupAllKHR: return "OpSubgroupAllKHR"; case Op::OpSubgroupAnyKHR: return "OpSubgroupAnyKHR"; case Op::OpSubgroupAllEqualKHR: return "OpSubgroupAllEqualKHR"; - case Op::OpBufferPointerEXT: return "OpBufferPointerEXT"; - case Op::OpUntypedImageTexelPointerEXT: return "OpUntypedImageTexelPointerEXT"; - case Op::OpMemberDecorateIdEXT: return "OpMemberDecorateIdEXT"; - case Op::OpConstantSizeOfEXT: return "OpConstantSizeOfEXT"; - case Op::OpTypeBufferEXT: return "OpTypeBufferEXT"; case Op::OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR"; case Op::OpSubgroupReadInvocationKHR: return "OpSubgroupReadInvocationKHR"; case Op::OpExtInstWithForwardRefsKHR: return "OpExtInstWithForwardRefsKHR"; + case Op::OpUntypedGroupAsyncCopyKHR: return "OpUntypedGroupAsyncCopyKHR"; case Op::OpTraceRayKHR: return "OpTraceRayKHR"; case Op::OpExecuteCallableKHR: return "OpExecuteCallableKHR"; case Op::OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR"; @@ -4889,6 +5232,7 @@ inline const char* OpToString(Op value) { case Op::OpCompositeConstructCoopMatQCOM: return "OpCompositeConstructCoopMatQCOM"; case Op::OpCompositeExtractCoopMatQCOM: return "OpCompositeExtractCoopMatQCOM"; case Op::OpExtractSubArrayQCOM: return "OpExtractSubArrayQCOM"; + case Op::OpImageGatherQCOM: return "OpImageGatherQCOM"; case Op::OpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD"; case Op::OpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD"; case Op::OpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD"; @@ -4910,9 +5254,16 @@ inline const char* OpToString(Op value) { case Op::OpSpecConstantStringAMDX: return "OpSpecConstantStringAMDX"; case Op::OpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR"; case Op::OpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR"; + case Op::OpTypeBufferEXT: return "OpTypeBufferEXT"; + case Op::OpBufferPointerEXT: return "OpBufferPointerEXT"; case Op::OpAbortKHR: return "OpAbortKHR"; + case Op::OpUntypedImageTexelPointerEXT: return "OpUntypedImageTexelPointerEXT"; + case Op::OpMemberDecorateIdEXT: return "OpMemberDecorateIdEXT"; + case Op::OpConstantSizeOfEXT: return "OpConstantSizeOfEXT"; case Op::OpConstantDataKHR: return "OpConstantDataKHR"; case Op::OpSpecConstantDataKHR: return "OpSpecConstantDataKHR"; + case Op::OpPoisonKHR: return "OpPoisonKHR"; + case Op::OpFreezeKHR: return "OpFreezeKHR"; case Op::OpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV"; case Op::OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV"; case Op::OpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV"; @@ -4955,7 +5306,7 @@ inline const char* OpToString(Op value) { case Op::OpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV"; case Op::OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT"; case Op::OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT"; - case Op::OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV"; + case Op::OpGroupNonUniformPartitionEXT: return "OpGroupNonUniformPartitionEXT"; case Op::OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; case Op::OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV"; case Op::OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV"; @@ -5013,12 +5364,13 @@ inline const char* OpToString(Op value) { case Op::OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV"; case Op::OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV"; case Op::OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV"; + case Op::OpCooperativeMatrixGetCoordinateEXT: return "OpCooperativeMatrixGetCoordinateEXT"; case Op::OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT"; case Op::OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT"; - case Op::OpCooperativeMatrixReduceNV: return "OpCooperativeMatrixReduceNV"; + case Op::OpCooperativeMatrixReduceEXT: return "OpCooperativeMatrixReduceEXT"; case Op::OpCooperativeMatrixLoadTensorNV: return "OpCooperativeMatrixLoadTensorNV"; case Op::OpCooperativeMatrixStoreTensorNV: return "OpCooperativeMatrixStoreTensorNV"; - case Op::OpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV"; + case Op::OpCooperativeMatrixPerElementOpEXT: return "OpCooperativeMatrixPerElementOpEXT"; case Op::OpTypeTensorLayoutNV: return "OpTypeTensorLayoutNV"; case Op::OpTypeTensorViewNV: return "OpTypeTensorViewNV"; case Op::OpCreateTensorLayoutNV: return "OpCreateTensorLayoutNV"; @@ -5211,24 +5563,24 @@ inline const char* OpToString(Op value) { case Op::OpVariableLengthArrayINTEL: return "OpVariableLengthArrayINTEL"; case Op::OpSaveMemoryINTEL: return "OpSaveMemoryINTEL"; case Op::OpRestoreMemoryINTEL: return "OpRestoreMemoryINTEL"; - case Op::OpArbitraryFloatSinCosPiINTEL: return "OpArbitraryFloatSinCosPiINTEL"; - case Op::OpArbitraryFloatCastINTEL: return "OpArbitraryFloatCastINTEL"; - case Op::OpArbitraryFloatCastFromIntINTEL: return "OpArbitraryFloatCastFromIntINTEL"; - case Op::OpArbitraryFloatCastToIntINTEL: return "OpArbitraryFloatCastToIntINTEL"; - case Op::OpArbitraryFloatAddINTEL: return "OpArbitraryFloatAddINTEL"; - case Op::OpArbitraryFloatSubINTEL: return "OpArbitraryFloatSubINTEL"; - case Op::OpArbitraryFloatMulINTEL: return "OpArbitraryFloatMulINTEL"; - case Op::OpArbitraryFloatDivINTEL: return "OpArbitraryFloatDivINTEL"; - case Op::OpArbitraryFloatGTINTEL: return "OpArbitraryFloatGTINTEL"; - case Op::OpArbitraryFloatGEINTEL: return "OpArbitraryFloatGEINTEL"; - case Op::OpArbitraryFloatLTINTEL: return "OpArbitraryFloatLTINTEL"; - case Op::OpArbitraryFloatLEINTEL: return "OpArbitraryFloatLEINTEL"; - case Op::OpArbitraryFloatEQINTEL: return "OpArbitraryFloatEQINTEL"; - case Op::OpArbitraryFloatRecipINTEL: return "OpArbitraryFloatRecipINTEL"; - case Op::OpArbitraryFloatRSqrtINTEL: return "OpArbitraryFloatRSqrtINTEL"; - case Op::OpArbitraryFloatCbrtINTEL: return "OpArbitraryFloatCbrtINTEL"; - case Op::OpArbitraryFloatHypotINTEL: return "OpArbitraryFloatHypotINTEL"; - case Op::OpArbitraryFloatSqrtINTEL: return "OpArbitraryFloatSqrtINTEL"; + case Op::OpArbitraryFloatSinCosPiALTERA: return "OpArbitraryFloatSinCosPiALTERA"; + case Op::OpArbitraryFloatCastALTERA: return "OpArbitraryFloatCastALTERA"; + case Op::OpArbitraryFloatCastFromIntALTERA: return "OpArbitraryFloatCastFromIntALTERA"; + case Op::OpArbitraryFloatCastToIntALTERA: return "OpArbitraryFloatCastToIntALTERA"; + case Op::OpArbitraryFloatAddALTERA: return "OpArbitraryFloatAddALTERA"; + case Op::OpArbitraryFloatSubALTERA: return "OpArbitraryFloatSubALTERA"; + case Op::OpArbitraryFloatMulALTERA: return "OpArbitraryFloatMulALTERA"; + case Op::OpArbitraryFloatDivALTERA: return "OpArbitraryFloatDivALTERA"; + case Op::OpArbitraryFloatGTALTERA: return "OpArbitraryFloatGTALTERA"; + case Op::OpArbitraryFloatGEALTERA: return "OpArbitraryFloatGEALTERA"; + case Op::OpArbitraryFloatLTALTERA: return "OpArbitraryFloatLTALTERA"; + case Op::OpArbitraryFloatLEALTERA: return "OpArbitraryFloatLEALTERA"; + case Op::OpArbitraryFloatEQALTERA: return "OpArbitraryFloatEQALTERA"; + case Op::OpArbitraryFloatRecipALTERA: return "OpArbitraryFloatRecipALTERA"; + case Op::OpArbitraryFloatRSqrtALTERA: return "OpArbitraryFloatRSqrtALTERA"; + case Op::OpArbitraryFloatCbrtALTERA: return "OpArbitraryFloatCbrtALTERA"; + case Op::OpArbitraryFloatHypotALTERA: return "OpArbitraryFloatHypotALTERA"; + case Op::OpArbitraryFloatSqrtALTERA: return "OpArbitraryFloatSqrtALTERA"; case Op::OpArbitraryFloatLogINTEL: return "OpArbitraryFloatLogINTEL"; case Op::OpArbitraryFloatLog2INTEL: return "OpArbitraryFloatLog2INTEL"; case Op::OpArbitraryFloatLog10INTEL: return "OpArbitraryFloatLog10INTEL"; @@ -5256,22 +5608,22 @@ inline const char* OpToString(Op value) { case Op::OpAliasDomainDeclINTEL: return "OpAliasDomainDeclINTEL"; case Op::OpAliasScopeDeclINTEL: return "OpAliasScopeDeclINTEL"; case Op::OpAliasScopeListDeclINTEL: return "OpAliasScopeListDeclINTEL"; - case Op::OpFixedSqrtINTEL: return "OpFixedSqrtINTEL"; - case Op::OpFixedRecipINTEL: return "OpFixedRecipINTEL"; - case Op::OpFixedRsqrtINTEL: return "OpFixedRsqrtINTEL"; - case Op::OpFixedSinINTEL: return "OpFixedSinINTEL"; - case Op::OpFixedCosINTEL: return "OpFixedCosINTEL"; - case Op::OpFixedSinCosINTEL: return "OpFixedSinCosINTEL"; - case Op::OpFixedSinPiINTEL: return "OpFixedSinPiINTEL"; - case Op::OpFixedCosPiINTEL: return "OpFixedCosPiINTEL"; - case Op::OpFixedSinCosPiINTEL: return "OpFixedSinCosPiINTEL"; - case Op::OpFixedLogINTEL: return "OpFixedLogINTEL"; - case Op::OpFixedExpINTEL: return "OpFixedExpINTEL"; - case Op::OpPtrCastToCrossWorkgroupINTEL: return "OpPtrCastToCrossWorkgroupINTEL"; - case Op::OpCrossWorkgroupCastToPtrINTEL: return "OpCrossWorkgroupCastToPtrINTEL"; - case Op::OpReadPipeBlockingINTEL: return "OpReadPipeBlockingINTEL"; - case Op::OpWritePipeBlockingINTEL: return "OpWritePipeBlockingINTEL"; - case Op::OpFPGARegINTEL: return "OpFPGARegINTEL"; + case Op::OpFixedSqrtALTERA: return "OpFixedSqrtALTERA"; + case Op::OpFixedRecipALTERA: return "OpFixedRecipALTERA"; + case Op::OpFixedRsqrtALTERA: return "OpFixedRsqrtALTERA"; + case Op::OpFixedSinALTERA: return "OpFixedSinALTERA"; + case Op::OpFixedCosALTERA: return "OpFixedCosALTERA"; + case Op::OpFixedSinCosALTERA: return "OpFixedSinCosALTERA"; + case Op::OpFixedSinPiALTERA: return "OpFixedSinPiALTERA"; + case Op::OpFixedCosPiALTERA: return "OpFixedCosPiALTERA"; + case Op::OpFixedSinCosPiALTERA: return "OpFixedSinCosPiALTERA"; + case Op::OpFixedLogALTERA: return "OpFixedLogALTERA"; + case Op::OpFixedExpALTERA: return "OpFixedExpALTERA"; + case Op::OpPtrCastToCrossWorkgroupALTERA: return "OpPtrCastToCrossWorkgroupALTERA"; + case Op::OpCrossWorkgroupCastToPtrALTERA: return "OpCrossWorkgroupCastToPtrALTERA"; + case Op::OpReadPipeBlockingALTERA: return "OpReadPipeBlockingALTERA"; + case Op::OpWritePipeBlockingALTERA: return "OpWritePipeBlockingALTERA"; + case Op::OpFPGARegALTERA: return "OpFPGARegALTERA"; case Op::OpRayQueryGetRayTMinKHR: return "OpRayQueryGetRayTMinKHR"; case Op::OpRayQueryGetRayFlagsKHR: return "OpRayQueryGetRayFlagsKHR"; case Op::OpRayQueryGetIntersectionTKHR: return "OpRayQueryGetIntersectionTKHR"; @@ -5297,9 +5649,14 @@ inline const char* OpToString(Op value) { case Op::OpCompositeConstructContinuedINTEL: return "OpCompositeConstructContinuedINTEL"; case Op::OpConvertFToBF16INTEL: return "OpConvertFToBF16INTEL"; case Op::OpConvertBF16ToFINTEL: return "OpConvertBF16ToFINTEL"; - case Op::OpControlBarrierArriveINTEL: return "OpControlBarrierArriveINTEL"; - case Op::OpControlBarrierWaitINTEL: return "OpControlBarrierWaitINTEL"; + case Op::OpControlBarrierArriveEXT: return "OpControlBarrierArriveEXT"; + case Op::OpControlBarrierWaitEXT: return "OpControlBarrierWaitEXT"; case Op::OpArithmeticFenceEXT: return "OpArithmeticFenceEXT"; + case Op::OpTaskSequenceCreateALTERA: return "OpTaskSequenceCreateALTERA"; + case Op::OpTaskSequenceAsyncALTERA: return "OpTaskSequenceAsyncALTERA"; + case Op::OpTaskSequenceGetALTERA: return "OpTaskSequenceGetALTERA"; + case Op::OpTaskSequenceReleaseALTERA: return "OpTaskSequenceReleaseALTERA"; + case Op::OpTypeTaskSequenceALTERA: return "OpTypeTaskSequenceALTERA"; case Op::OpSubgroupBlockPrefetchINTEL: return "OpSubgroupBlockPrefetchINTEL"; case Op::OpSubgroup2DBlockLoadINTEL: return "OpSubgroup2DBlockLoadINTEL"; case Op::OpSubgroup2DBlockLoadTransformINTEL: return "OpSubgroup2DBlockLoadTransformINTEL"; @@ -5307,6 +5664,17 @@ inline const char* OpToString(Op value) { case Op::OpSubgroup2DBlockPrefetchINTEL: return "OpSubgroup2DBlockPrefetchINTEL"; case Op::OpSubgroup2DBlockStoreINTEL: return "OpSubgroup2DBlockStoreINTEL"; case Op::OpSubgroupMatrixMultiplyAccumulateINTEL: return "OpSubgroupMatrixMultiplyAccumulateINTEL"; + case Op::OpBitwiseFunctionINTEL: return "OpBitwiseFunctionINTEL"; + case Op::OpUntypedVariableLengthArrayINTEL: return "OpUntypedVariableLengthArrayINTEL"; + case Op::OpConditionalExtensionINTEL: return "OpConditionalExtensionINTEL"; + case Op::OpConditionalEntryPointINTEL: return "OpConditionalEntryPointINTEL"; + case Op::OpConditionalCapabilityINTEL: return "OpConditionalCapabilityINTEL"; + case Op::OpSpecConstantTargetINTEL: return "OpSpecConstantTargetINTEL"; + case Op::OpSpecConstantArchitectureINTEL: return "OpSpecConstantArchitectureINTEL"; + case Op::OpSpecConstantCapabilitiesINTEL: return "OpSpecConstantCapabilitiesINTEL"; + case Op::OpConditionalCopyObjectINTEL: return "OpConditionalCopyObjectINTEL"; + case Op::OpPredicatedLoadINTEL: return "OpPredicatedLoadINTEL"; + case Op::OpPredicatedStoreINTEL: return "OpPredicatedStoreINTEL"; case Op::OpGroupIMulKHR: return "OpGroupIMulKHR"; case Op::OpGroupFMulKHR: return "OpGroupFMulKHR"; case Op::OpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR"; @@ -5315,8 +5683,15 @@ inline const char* OpToString(Op value) { case Op::OpGroupLogicalAndKHR: return "OpGroupLogicalAndKHR"; case Op::OpGroupLogicalOrKHR: return "OpGroupLogicalOrKHR"; case Op::OpGroupLogicalXorKHR: return "OpGroupLogicalXorKHR"; + case Op::OpRoundFToTF32INTEL: return "OpRoundFToTF32INTEL"; case Op::OpMaskedGatherINTEL: return "OpMaskedGatherINTEL"; case Op::OpMaskedScatterINTEL: return "OpMaskedScatterINTEL"; + case Op::OpConvertHandleToImageINTEL: return "OpConvertHandleToImageINTEL"; + case Op::OpConvertHandleToSamplerINTEL: return "OpConvertHandleToSamplerINTEL"; + case Op::OpConvertHandleToSampledImageINTEL: return "OpConvertHandleToSampledImageINTEL"; + case Op::OpFDot2MixAcc32VALVE: return "OpFDot2MixAcc32VALVE"; + case Op::OpFDot2MixAcc16VALVE: return "OpFDot2MixAcc16VALVE"; + case Op::OpFDot4MixAcc32VALVE: return "OpFDot4MixAcc32VALVE"; default: return "Unknown"; } } diff --git a/3rdparty/glslang/SPIRV/spvIR.h b/3rdparty/glslang/SPIRV/spvIR.h index 9eebd9c70..c07e6a44a 100644 --- a/3rdparty/glslang/SPIRV/spvIR.h +++ b/3rdparty/glslang/SPIRV/spvIR.h @@ -481,6 +481,10 @@ public: Id getReturnType() const { return functionInstruction.getTypeId(); } Id getFuncId() const { return functionInstruction.getResultId(); } Id getFuncTypeId() const { return functionInstruction.getIdOperand(1); } + void setFunctionControl(FunctionControlMask functionControl) + { + functionInstruction.setImmediateOperand(0, static_cast(functionControl)); + } void setReturnPrecision(Decoration precision) { if (precision == Decoration::RelaxedPrecision) diff --git a/3rdparty/glslang/StandAlone/StandAlone.cpp b/3rdparty/glslang/StandAlone/StandAlone.cpp index b954dbabd..5b42ffe0a 100644 --- a/3rdparty/glslang/StandAlone/StandAlone.cpp +++ b/3rdparty/glslang/StandAlone/StandAlone.cpp @@ -114,6 +114,9 @@ enum TOptions : uint64_t { EOptionLinkTimeOptimization = (1ull << 34), EOptionValidateCrossStageIO = (1ull << 35), EOptionBindingsPerResourceType = (1ull << 36), + EOptionRelaxSetBindingLimits = (1ull << 37), + EOptionDiscardIsTerminate = (1ull << 38), + EOptionOptimizePerformance = (1ull << 39), }; bool targetHlslFunctionality1 = false; bool SpvToolsDisassembler = false; @@ -638,6 +641,8 @@ void ProcessArguments(std::vector>& workItem lowerword == "auto-map-binding" || lowerword == "amb") { Options |= EOptionAutoMapBindings; + } else if (lowerword == "relax-set-binding-limits") { + Options |= EOptionRelaxSetBindingLimits; } else if (lowerword == "auto-map-locations" || // synonyms lowerword == "aml") { Options |= EOptionAutoMapLocations; @@ -736,6 +741,8 @@ void ProcessArguments(std::vector>& workItem AbsolutePath = true; } else if (lowerword == "auto-sampled-textures") { autoSampledTextures = true; + } else if (lowerword == "discard-is-terminate") { + Options |= EOptionDiscardIsTerminate; } else if (lowerword == "invert-y" || // synonyms lowerword == "iy") { Options |= EOptionInvertY; @@ -970,6 +977,12 @@ void ProcessArguments(std::vector>& workItem Options |= EOptionOptimizeSize; #else Error("-Os not available; optimizer not linked"); +#endif + else if (argv[0][2] == '\0') +#if ENABLE_OPT + Options |= EOptionOptimizePerformance; +#else + Error("-O not available; optimizer not linked"); #endif else Error("unknown -O option"); @@ -1205,6 +1218,8 @@ void SetMessageOptions(EShMessages& messages) messages = (EShMessages)(messages | EShMsgLinkTimeOptimization); if (Options & EOptionValidateCrossStageIO) messages = (EShMessages)(messages | EShMsgValidateCrossStageIO); + if (Options & EOptionRelaxSetBindingLimits) + messages = (EShMessages)(messages | EShMsgRelaxSetBindingLimits); } // @@ -1471,6 +1486,9 @@ void CompileAndLinkShaderUnits(std::vector compUnits) if (Options & EOptionBindingsPerResourceType) shader->setBindingsPerResourceType(); + if (Options & EOptionDiscardIsTerminate) + shader->setDiscardIsTerminate(true); + // Set up the environment, some subsettings take precedence over earlier // ways of setting things. if (Options & EOptionSpv) { @@ -1512,9 +1530,9 @@ void CompileAndLinkShaderUnits(std::vector compUnits) if (! (Options & EOptionSuppressInfolog) && ! (Options & EOptionMemoryLeakMode)) { if (!beQuiet) - PutsIfNonEmpty(compUnit.fileName[0].c_str()); - PutsIfNonEmpty(shader->getInfoLog()); - PutsIfNonEmpty(shader->getInfoDebugLog()); + StderrIfNonEmpty(compUnit.fileName[0].c_str()); + StderrIfNonEmpty(shader->getInfoLog()); + StderrIfNonEmpty(shader->getInfoDebugLog()); } } @@ -1535,8 +1553,8 @@ void CompileAndLinkShaderUnits(std::vector compUnits) // Report if (!(Options & EOptionSuppressInfolog) && !(Options & EOptionMemoryLeakMode)) { - PutsIfNonEmpty(program.getInfoLog()); - PutsIfNonEmpty(program.getInfoDebugLog()); + StderrIfNonEmpty(program.getInfoLog()); + StderrIfNonEmpty(program.getInfoDebugLog()); } // Reflect @@ -1586,6 +1604,7 @@ void CompileAndLinkShaderUnits(std::vector compUnits) spvOptions.stripDebugInfo = true; spvOptions.disableOptimizer = (Options & EOptionOptimizeDisable) != 0; spvOptions.optimizeSize = (Options & EOptionOptimizeSize) != 0; + spvOptions.optimizePerformance = (Options & EOptionOptimizePerformance) != 0; spvOptions.disassemble = SpvToolsDisassembler; spvOptions.validate = SpvToolsValidate; spvOptions.compileOnly = compileOnly; @@ -2005,8 +2024,9 @@ void usage() " -H print human readable form of SPIR-V; turns on -V\n" " -I add to the include search path; includer's directory is\n" " searched first, followed by left-to-right order of -I\n" - " -Od disables optimization; may cause illegal SPIR-V for HLSL\n" + " -O optimizes SPIR-V for performance\n" " -Os optimizes SPIR-V to minimize size\n" + " -Od disables optimization; may cause illegal SPIR-V for HLSL\n" " -P | --P | --preamble-text \n" " inject custom preamble text which is treated as if it appeared\n" " immediately after the version declaration (if any)\n" @@ -2054,6 +2074,8 @@ void usage() " suppress GLSL warnings, except as required by '#extension : warn'\n" " -x save binary output as text-based 32-bit hexadecimal numbers\n" " --absolute-path prints absolute path for messages\n" + " --relax-set-binding-limits allow larger layout(set) and\n" + " layout(binding) values\n" " --auto-map-binding | --auto-map-bindings | --amb\n" " automatically bind uniform variables without\n" " explicit bindings\n" @@ -2064,6 +2086,8 @@ void usage() " --client {vulkan | opengl}\n" " see -V and -G\n" " --depfile writes depfile for build systems\n" + " --discard-is-terminate map GLSL discard to OpTerminateInvocation\n" + " instead of OpDemoteToHelperInvocation\n" " --dump-builtin-symbols prints builtin symbol table prior each\n" " compile\n" " -dumpfullversion | -dumpversion print bare major.minor.patchlevel\n" diff --git a/3rdparty/glslang/build_info.h b/3rdparty/glslang/build_info.h index 85a2f4181..376fb07bd 100644 --- a/3rdparty/glslang/build_info.h +++ b/3rdparty/glslang/build_info.h @@ -35,7 +35,7 @@ #define GLSLANG_BUILD_INFO #define GLSLANG_VERSION_MAJOR 16 -#define GLSLANG_VERSION_MINOR 3 +#define GLSLANG_VERSION_MINOR 5 #define GLSLANG_VERSION_PATCH 0 #define GLSLANG_VERSION_FLAVOR "" diff --git a/3rdparty/glslang/glslang/CInterface/glslang_c_interface.cpp b/3rdparty/glslang/glslang/CInterface/glslang_c_interface.cpp index 1038eec3f..a8392ec21 100644 --- a/3rdparty/glslang/glslang/CInterface/glslang_c_interface.cpp +++ b/3rdparty/glslang/glslang/CInterface/glslang_c_interface.cpp @@ -219,6 +219,7 @@ static int c_shader_messages(glslang_messages_t messages) CONVERT_MSG(GLSLANG_MSG_ENHANCED, EShMsgEnhanced); CONVERT_MSG(GLSLANG_MSG_ABSOLUTE_PATH, EShMsgAbsolutePath); CONVERT_MSG(GLSLANG_MSG_DISPLAY_ERROR_COLUMN, EShMsgDisplayErrorColumn); + CONVERT_MSG(GLSLANG_MSG_RELAX_SET_BINDING_LIMITS_BIT, EShMsgRelaxSetBindingLimits); return res; #undef CONVERT_MSG } @@ -351,6 +352,10 @@ GLSLANG_EXPORT void glslang_shader_set_preamble(glslang_shader_t* shader, const shader->shader->setPreamble(s); } +GLSLANG_EXPORT void glslang_shader_set_source_entry_point(glslang_shader_t* shader, const char* s) { + shader->shader->setSourceEntryPoint(s); +} + GLSLANG_EXPORT void glslang_shader_set_entry_point(glslang_shader_t* shader, const char* s) { shader->shader->setEntryPoint(s); } diff --git a/3rdparty/glslang/glslang/HLSL/hlslGrammar.cpp b/3rdparty/glslang/glslang/HLSL/hlslGrammar.cpp index edd1cc5fd..1b68295c1 100644 --- a/3rdparty/glslang/glslang/HLSL/hlslGrammar.cpp +++ b/3rdparty/glslang/glslang/HLSL/hlslGrammar.cpp @@ -1211,7 +1211,8 @@ bool HlslGrammar::acceptSubpassInputType(TType& type) } } - const TBasicType subpassBasicType = subpassType.isStruct() ? (*subpassType.getStruct())[0].type->getBasicType() + const TBasicType subpassBasicType = (subpassType.isStruct() && !subpassType.getStruct()->empty()) + ? (*subpassType.getStruct())[0].type->getBasicType() : subpassType.getBasicType(); TSampler sampler; @@ -1436,7 +1437,8 @@ bool HlslGrammar::acceptTextureType(TType& type) if (image || dim == EsdBuffer) format = parseContext.getLayoutFromTxType(token.loc, txType); - const TBasicType txBasicType = txType.isStruct() ? (*txType.getStruct())[0].type->getBasicType() + const TBasicType txBasicType = (txType.isStruct() && !txType.getStruct()->empty()) + ? (*txType.getStruct())[0].type->getBasicType() : txType.getBasicType(); // Non-image Buffers are combined diff --git a/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp b/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp index f510e208a..4b1f47365 100644 --- a/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp +++ b/3rdparty/glslang/glslang/HLSL/hlslParseHelper.cpp @@ -51,6 +51,16 @@ namespace glslang { +static bool isLayoutSetOutOfRange(int value, bool relaxSetBindingLimits) +{ + return value < 0 || (!relaxSetBindingLimits && value >= static_cast(TQualifier::layoutSetEnd)); +} + +static bool isLayoutBindingOutOfRange(int value, bool relaxSetBindingLimits) +{ + return value < 0 || (!relaxSetBindingLimits && value >= static_cast(TQualifier::layoutBindingEnd)); +} + HlslParseContext::HlslParseContext(TSymbolTable& symbolTable, TIntermediate& interm, bool parsingBuiltins, int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, @@ -581,8 +591,8 @@ bool HlslParseContext::parseMatrixSwizzleSelector(const TSourceLoc& loc, const T error(loc, "matrix component swizzle has too many components", compString.c_str(), ""); return false; } - if (c > compString.size() - 3 || - ((compString[c+1] == 'm' || compString[c+1] == 'M') && c > compString.size() - 4)) { + if (c + 3 > compString.size() || + ((compString[c+1] == 'm' || compString[c+1] == 'M') && c + 4 > compString.size())) { error(loc, "matrix component swizzle missing", compString.c_str(), ""); return false; } @@ -1253,7 +1263,7 @@ int HlslParseContext::addFlattenedMember(const TVariable& variable, const TType& TVariable* memberVariable = makeInternalVariable(memberName, type); mergeQualifiers(memberVariable->getWritableType().getQualifier(), variable.getType().getQualifier()); - if (flattenData.nextBinding != TQualifier::layoutBindingEnd) + if (flattenData.nextBinding != TQualifier::layoutNotSet) memberVariable->getWritableType().getQualifier().layoutBinding = flattenData.nextBinding++; if (memberVariable->getType().isBuiltIn()) { @@ -1755,6 +1765,12 @@ void HlslParseContext::handleEntryPointAttributes(const TSourceLoc& loc, const T case EatNumThreads: { const TIntermSequence& sequence = it->args->getSequence(); + // numthreads has three dimensions (x, y, z); localSize is sized to match, + // so reject extra arguments rather than indexing past it. + if (sequence.size() > 3) { + error(loc, "expected at most three arguments", "numthreads", ""); + break; + } for (int lid = 0; lid < int(sequence.size()); ++lid) intermediate.setLocalSize(lid, sequence[lid]->getAsConstantUnion()->getConstArray()[0].getIConst()); break; @@ -3518,6 +3534,45 @@ void HlslParseContext::decomposeStructBufferMethods(const TSourceLoc& loc, TInte if (argArray == nullptr) return; // It might not be a struct buffer method. + // These builtins resolve by name against a zero-parameter prototype, so normal + // overload resolution never checks the argument count. Validate it here before + // indexing the argument sequence, otherwise a call with too few arguments reads + // past the end of the aggregate (or dereferences a null aggregate for a bare + // buffer object with no arguments). + const int argCount = argAggregate ? (int)argAggregate->getSequence().size() : 1; + int minArgCount = 1; // the buffer object at index 0 + switch (op) { + case EOpMethodLoad: + case EOpMethodLoad2: + case EOpMethodLoad3: + case EOpMethodLoad4: + case EOpMethodGetDimensions: + case EOpMethodAppend: + case EOpInterlockedAdd: + case EOpInterlockedAnd: + case EOpInterlockedExchange: + case EOpInterlockedMax: + case EOpInterlockedMin: + case EOpInterlockedOr: + case EOpInterlockedXor: + case EOpInterlockedCompareExchange: + case EOpInterlockedCompareStore: + minArgCount = 2; + break; + case EOpMethodStore: + case EOpMethodStore2: + case EOpMethodStore3: + case EOpMethodStore4: + minArgCount = 3; + break; + default: + break; + } + if (argCount < minArgCount) { + error(loc, "too few arguments to buffer method", "", ""); + return; + } + switch (op) { case EOpMethodLoad: { @@ -7317,14 +7372,14 @@ void HlslParseContext::setLayoutQualifier(const TSourceLoc& loc, TQualifier& qua qualifier.layoutLocation = value; return; } else if (id == "set") { - if ((unsigned int)value >= TQualifier::layoutSetEnd) - error(loc, "set is too large", id.c_str(), ""); + if (isLayoutSetOutOfRange(value, relaxSetBindingLimits())) + error(loc, "set is out of range", id.c_str(), ""); else qualifier.layoutSet = value; return; } else if (id == "binding") { - if ((unsigned int)value >= TQualifier::layoutBindingEnd) - error(loc, "binding is too large", id.c_str(), ""); + if (isLayoutBindingOutOfRange(value, relaxSetBindingLimits())) + error(loc, "binding is out of range", id.c_str(), ""); else qualifier.layoutBinding = value; return; @@ -7535,7 +7590,7 @@ void HlslParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQuali if (src.hasSet()) dst.layoutSet = src.layoutSet; - if (src.layoutBinding != TQualifier::layoutBindingEnd) + if (src.hasBinding()) dst.layoutBinding = src.layoutBinding; if (src.hasXfbStride()) diff --git a/3rdparty/glslang/glslang/HLSL/hlslParseHelper.h b/3rdparty/glslang/glslang/HLSL/hlslParseHelper.h index 9211fc7cc..3adc27c9f 100644 --- a/3rdparty/glslang/glslang/HLSL/hlslParseHelper.h +++ b/3rdparty/glslang/glslang/HLSL/hlslParseHelper.h @@ -225,13 +225,13 @@ public: protected: struct TFlattenData { - TFlattenData() : nextBinding(TQualifier::layoutBindingEnd), + TFlattenData() : nextBinding(TQualifier::layoutNotSet), nextLocation(TQualifier::layoutLocationEnd) { } TFlattenData(int nb, int nl) : nextBinding(nb), nextLocation(nl) { } TVector members; // individual flattened variables TVector offsets; // offset to next tree level - unsigned int nextBinding; // next binding to use. + int nextBinding; // next binding to use. unsigned int nextLocation; // next location to use }; diff --git a/3rdparty/glslang/glslang/Include/BaseTypes.h b/3rdparty/glslang/glslang/Include/BaseTypes.h index e681ca0dc..4ff7372ac 100644 --- a/3rdparty/glslang/glslang/Include/BaseTypes.h +++ b/3rdparty/glslang/glslang/Include/BaseTypes.h @@ -52,6 +52,11 @@ enum TBasicType { EbtBFloat16, EbtFloatE5M2, EbtFloatE4M3, + EbtFloatE2M1, + EbtFloatE3M2, + EbtFloatE2M3, + EbtFloatUE8M0, + EbtFloatMXINT8, EbtInt8, EbtUint8, EbtInt16, @@ -641,6 +646,25 @@ __inline bool isTypeFloat(TBasicType type) case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: + return true; + default: + return false; + } +} + +__inline bool isTypeOcpMicroscalingFloat(TBasicType type) +{ + switch (type) { + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: return true; default: return false; @@ -650,6 +674,13 @@ __inline bool isTypeFloat(TBasicType type) __inline uint32_t GetNumBits(TBasicType type) { switch (type) { + case EbtFloatE2M1: + return 4; + case EbtFloatE3M2: + case EbtFloatE2M3: + return 6; + case EbtFloatUE8M0: + case EbtFloatMXINT8: case EbtInt8: case EbtUint8: case EbtFloatE5M2: diff --git a/3rdparty/glslang/glslang/Include/InfoSink.h b/3rdparty/glslang/glslang/Include/InfoSink.h index 262933941..8c9b42bb6 100644 --- a/3rdparty/glslang/glslang/Include/InfoSink.h +++ b/3rdparty/glslang/glslang/Include/InfoSink.h @@ -36,7 +36,9 @@ #define _INFOSINK_INCLUDED_ #include "../Include/Common.h" +#if __has_include() #include +#endif #include namespace glslang { @@ -105,11 +107,19 @@ public: } if(loc.getFilename() == nullptr && shaderFileName != nullptr && absolute) { + #if defined(__cpp_lib_filesystem) append(std::filesystem::absolute(shaderFileName).string()); + #else + append(shaderFileName); + #endif } else { std::string location = loc.getStringNameOrNum(false); if (absolute) { + #if defined(__cpp_lib_filesystem) append(std::filesystem::absolute(location).string()); + #else + append(location); + #endif } else { append(location); } diff --git a/3rdparty/glslang/glslang/Include/Types.h b/3rdparty/glslang/glslang/Include/Types.h index e2a75201e..6b836525e 100644 --- a/3rdparty/glslang/glslang/Include/Types.h +++ b/3rdparty/glslang/glslang/Include/Types.h @@ -52,6 +52,7 @@ namespace glslang { class TIntermAggregate; +class TIntermTyped; const int GlslangMaxTypeLength = 200; // TODO: need to print block/struct one member per line, so this can stay bounded @@ -262,6 +263,11 @@ struct TSampler { // misnomer now; includes images, textures without sampler, case EbtBFloat16: s.append("bf16"); break; case EbtFloatE5M2: s.append("fe5m2"); break; case EbtFloatE4M3: s.append("fe4m3"); break; + case EbtFloatE2M1: s.append("fe2m1"); break; + case EbtFloatE3M2: s.append("fe3m2"); break; + case EbtFloatE2M3: s.append("fe2m3"); break; + case EbtFloatUE8M0: s.append("fue8m0"); break; + case EbtFloatMXINT8: s.append("fmxint8"); break; case EbtInt8: s.append("i8"); break; case EbtUint16: s.append("u8"); break; case EbtInt16: s.append("i16"); break; @@ -810,8 +816,8 @@ public: break; case EbsPushConstant : storage = EvqUniform; - layoutSet = TQualifier::layoutSetEnd; - layoutBinding = TQualifier::layoutBindingEnd; + layoutSet = TQualifier::layoutNotSet; + layoutBinding = TQualifier::layoutNotSet; break; default: break; @@ -862,6 +868,7 @@ public: layoutPushConstant = false; layoutBufferReference = false; + layoutDescriptorBufferType = false; layoutPassthrough = false; layoutViewportRelative = false; // -2048 as the default value indicating layoutSecondaryViewportRelative is not set @@ -884,8 +891,10 @@ public: layoutBank = layoutBankEnd; layoutDescriptorHeap = false; layoutDescriptorStride = layoutDescriptorStrideEnd; + layoutDescriptorSize = layoutDescriptorSizeEnd; layoutHeapOffset = 0; - layoutDescriptorInnerBlock = false; + layoutHeapOffsetNode = nullptr; + descriptorHeapDescriptorNode = false; } void clearInterstageLayout() { @@ -915,6 +924,7 @@ public: hasFormat() || isShaderRecord() || isPushConstant() || + isBufferType() || hasBufferReference(); } bool hasLayout() const @@ -935,10 +945,10 @@ public: unsigned int layoutComponent : 3; static const unsigned int layoutComponentEnd = 4; - unsigned int layoutSet : 7; + int layoutSet; static const unsigned int layoutSetEnd = 0x3F; - unsigned int layoutBinding : 16; + int layoutBinding; static const unsigned int layoutBindingEnd = 0xFFFF; unsigned int layoutIndex : 8; @@ -956,8 +966,8 @@ public: unsigned int layoutXfbOffset : 13; static const unsigned int layoutXfbOffsetEnd = 0x1FFF; - unsigned int layoutAttachment : 8; // for input_attachment_index - static const unsigned int layoutAttachmentEnd = 0XFF; + unsigned int layoutAttachment; // for input_attachment_index + static const unsigned int layoutAttachmentEnd = INT_MAX; unsigned int layoutSpecConstantId; static const unsigned int layoutSpecConstantIdEnd = UINT_MAX; @@ -968,6 +978,9 @@ public: unsigned int layoutDescriptorStride; static const unsigned int layoutDescriptorStrideEnd = 0x0; + unsigned int layoutDescriptorSize; + static const unsigned int layoutDescriptorSizeEnd = 0x0; + // stored as log2 of the actual alignment value unsigned int layoutBufferReferenceAlign : 6; static const unsigned int layoutBufferReferenceAlignEnd = 0x3F; @@ -976,6 +989,7 @@ public: bool layoutPushConstant; bool layoutBufferReference; + bool layoutDescriptorBufferType; bool layoutPassthrough; bool layoutViewportRelative; int layoutSecondaryViewportRelativeOffset; @@ -985,8 +999,9 @@ public: bool layoutHitObjectShaderRecordNV; bool layoutHitObjectShaderRecordEXT; bool layoutDescriptorHeap; - bool layoutDescriptorInnerBlock; + bool descriptorHeapDescriptorNode; int layoutHeapOffset; + TIntermTyped* layoutHeapOffsetNode; // GL_EXT_spirv_intrinsics int spirvStorageClass; @@ -1014,8 +1029,8 @@ public: layoutAlign = layoutNotSet; layoutMemberOffset = layoutNotSet; - layoutSet = layoutSetEnd; - layoutBinding = layoutBindingEnd; + layoutSet = layoutNotSet; + layoutBinding = layoutNotSet; layoutAttachment = layoutAttachmentEnd; } @@ -1043,11 +1058,11 @@ public: } bool hasSet() const { - return layoutSet != layoutSetEnd; + return layoutSet != layoutNotSet; } bool hasBinding() const { - return layoutBinding != layoutBindingEnd; + return layoutBinding != layoutNotSet; } bool hasOffset() const { @@ -1096,6 +1111,7 @@ public: TLayoutFormat getFormat() const { return layoutFormat; } bool isPushConstant() const { return layoutPushConstant; } bool isShaderRecord() const { return layoutShaderRecord; } + bool isBufferType() const { return layoutDescriptorBufferType; } bool isFullQuads() const { return layoutFullQuads; } bool isQuadDeriv() const { return layoutQuadDeriv; } bool hasHitObjectShaderRecordNV() const { return layoutHitObjectShaderRecordNV; } @@ -1970,8 +1986,7 @@ public: virtual void updateImplicitArraySize(int size) { assert(isArray()); arraySizes->updateImplicitSize(size); } virtual void setImplicitlySized(bool isImplicitSized) { arraySizes->setImplicitlySized(isImplicitSized); } virtual bool isStruct() const { return basicType == EbtStruct || basicType == EbtBlock; } - virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16 || - basicType == EbtBFloat16 || basicType == EbtFloatE5M2 || basicType == EbtFloatE4M3; } + virtual bool isFloatingDomain() const { return isTypeFloat(basicType); } virtual bool isIntegerDomain() const { switch (basicType) { @@ -2109,6 +2124,11 @@ public: case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: case EbtInt8: case EbtUint8: case EbtInt16: @@ -2149,6 +2169,20 @@ public: { return containsBasicType(EbtFloatE5M2) || containsBasicType(EbtFloatE4M3); } + bool containsOcpMicroscalingFloat() const + { + return containsBasicType(EbtFloatE2M1) || + containsBasicType(EbtFloatE3M2) || + containsBasicType(EbtFloatE2M3) || + containsBasicType(EbtFloatUE8M0) || + containsBasicType(EbtFloatMXINT8); + } + bool containsOcpMicroscalingNonByteFloat() const + { + return containsBasicType(EbtFloatE2M1) || + containsBasicType(EbtFloatE3M2) || + containsBasicType(EbtFloatE2M3); + } bool contains64BitInt() const { return containsBasicType(EbtInt64) || containsBasicType(EbtUint64); @@ -2277,6 +2311,11 @@ public: case EbtBFloat16: return "bfloat16_t"; case EbtFloatE5M2: return "floate5m2_t"; case EbtFloatE4M3: return "floate4m3_t"; + case EbtFloatE2M1: return "floate2m1_t"; + case EbtFloatE3M2: return "floate3m2_t"; + case EbtFloatE2M3: return "floate2m3_t"; + case EbtFloatUE8M0: return "floatue8m0_t"; + case EbtFloatMXINT8: return "floatmxint8_t"; case EbtInt8: return "int8_t"; case EbtUint8: return "uint8_t"; case EbtInt16: return "int16_t"; @@ -2390,6 +2429,8 @@ public: appendStr(" push_constant"); if (qualifier.layoutBufferReference) appendStr(" buffer_reference"); + if (qualifier.layoutDescriptorBufferType) + appendStr(" buffer_type"); if (qualifier.hasBufferReferenceAlign()) { appendStr(" buffer_reference_align="); appendUint(1u << qualifier.layoutBufferReferenceAlign); @@ -2435,8 +2476,17 @@ public: appendStr(" descriptor_stride="); appendInt(qualifier.layoutDescriptorStride); } - if (qualifier.layoutHeapOffset) + if (qualifier.layoutDescriptorSize != TQualifier::layoutDescriptorSizeEnd) { + appendStr(" descriptor_size="); + appendInt(qualifier.layoutDescriptorSize); + } + if (qualifier.layoutHeapOffset || qualifier.layoutHeapOffsetNode) { appendStr(" heap_offset="); + if (qualifier.layoutHeapOffsetNode) + appendStr(""); + else + appendInt(qualifier.layoutHeapOffset); + } appendStr(")"); } diff --git a/3rdparty/glslang/glslang/Include/arrays.h b/3rdparty/glslang/glslang/Include/arrays.h index 261af6837..d47622661 100644 --- a/3rdparty/glslang/glslang/Include/arrays.h +++ b/3rdparty/glslang/glslang/Include/arrays.h @@ -205,6 +205,12 @@ struct TSmallArrayVector { return (*sizes)[index]; } + bool elementEqual(const TSmallArrayVector& rhs, uint32_t thisIdx, uint32_t rhsIdx) const + { + return sizes && rhs.sizes && thisIdx < sizes->size() && rhsIdx < rhs.sizes->size() && + (*sizes)[thisIdx] == (*rhs.sizes)[rhsIdx]; + } + protected: TSmallArrayVector(const TSmallArrayVector&); @@ -354,6 +360,11 @@ struct TArraySizes { bool operator==(const TArraySizes& rhs) const { return sizes == rhs.sizes; } bool operator!=(const TArraySizes& rhs) const { return sizes != rhs.sizes; } + bool elementEqual(const TArraySizes& rhs, uint32_t thisIdx, uint32_t rhsIdx) const + { + return sizes.elementEqual(rhs.sizes, thisIdx, rhsIdx); + } + protected: TSmallArrayVector sizes; diff --git a/3rdparty/glslang/glslang/Include/glslang_c_interface.h b/3rdparty/glslang/glslang/Include/glslang_c_interface.h index 4eec55b58..324755588 100644 --- a/3rdparty/glslang/glslang/Include/glslang_c_interface.h +++ b/3rdparty/glslang/glslang/Include/glslang_c_interface.h @@ -233,6 +233,7 @@ typedef struct glslang_spv_options_s { bool strip_debug_info; bool disable_optimizer; bool optimize_size; + bool optimize_performance; bool disassemble; bool validate; bool emit_nonsemantic_shader_debug_info; @@ -253,6 +254,9 @@ GLSLANG_EXPORT void glslang_finalize_process(void); GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input); GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader); GLSLANG_EXPORT void glslang_shader_set_preamble(glslang_shader_t* shader, const char* s); +// Set a different entry point than main in GLSL that will be renamed to value set by glslang_shader_set_entry_point (SPIRV only). +GLSLANG_EXPORT void glslang_shader_set_source_entry_point(glslang_shader_t* shader, const char* s); +// Set a different entry point than main in output target (SPIRV only). GLSLANG_EXPORT void glslang_shader_set_entry_point(glslang_shader_t* shader, const char* s); GLSLANG_EXPORT void glslang_shader_set_invert_y(glslang_shader_t* shader, bool y); GLSLANG_EXPORT void glslang_shader_shift_binding(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base); diff --git a/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h b/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h index 1b70645fe..ab91648b6 100644 --- a/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h +++ b/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h @@ -179,6 +179,7 @@ typedef enum { GLSLANG_MSG_DISPLAY_ERROR_COLUMN = (1 << 17), GLSLANG_MSG_LINK_TIME_OPTIMIZATION_BIT = (1 << 18), GLSLANG_MSG_VALIDATE_CROSS_STAGE_IO_BIT = (1 << 19), + GLSLANG_MSG_RELAX_SET_BINDING_LIMITS_BIT = (1 << 20), LAST_ELEMENT_MARKER(GLSLANG_MSG_COUNT), } glslang_messages_t; diff --git a/3rdparty/glslang/glslang/Include/intermediate.h b/3rdparty/glslang/glslang/Include/intermediate.h index 3c98309c6..2728befa2 100644 --- a/3rdparty/glslang/glslang/Include/intermediate.h +++ b/3rdparty/glslang/glslang/Include/intermediate.h @@ -236,6 +236,29 @@ enum TOperator { EOpUnpackInt4x16, EOpPackUint4x16, EOpUnpackUint4x16, + EOpUnpackFloat2xE2M1, + EOpUnpackFloat4xE2M1, + EOpUnpackFloat8xE2M1, + EOpUnpackFloat16xE2M1, + EOpPackFloat2xE2M1, + EOpPackFloat4xE2M1, + EOpPackFloat8xE2M1, + EOpPackFloat16xE2M1, + EOpUnpackFloat4xE3M2, + EOpUnpackFloat8xE3M2, + EOpUnpackFloat16xE3M2, + EOpPackFloat4xE3M2, + EOpPackFloat8xE3M2, + EOpPackFloat16xE3M2, + EOpUnpackFloat4xE2M3, + EOpUnpackFloat8xE2M3, + EOpUnpackFloat16xE2M3, + EOpPackFloat4xE2M3, + EOpPackFloat8xE2M3, + EOpPackFloat16xE2M3, + EOpBitcastExtractE2M1, + EOpBitcastExtractE3M2, + EOpBitcastExtractE2M3, EOpPack16, EOpPack32, EOpPack64, @@ -287,6 +310,8 @@ enum TOperator { EOpEndStreamPrimitive, // geometry only EOpBarrier, + EOpControlBarrierArriveEXT, + EOpControlBarrierWaitEXT, EOpMemoryBarrier, EOpMemoryBarrierAtomicCounter, EOpMemoryBarrierBuffer, @@ -459,6 +484,7 @@ enum TOperator { EOpCooperativeMatrixReduceNV, EOpCooperativeMatrixPerElementOpNV, EOpCooperativeMatrixTransposeNV, + EOpCooperativeMatrixGetCoordinateEXT, EOpCreateTensorLayoutNV, EOpTensorLayoutSetBlockSizeNV, @@ -627,6 +653,26 @@ enum TOperator { EOpConstructFloatE4M3Vec2, EOpConstructFloatE4M3Vec3, EOpConstructFloatE4M3Vec4, + EOpConstructFloatE2M1, + EOpConstructFloatE2M1Vec2, + EOpConstructFloatE2M1Vec3, + EOpConstructFloatE2M1Vec4, + EOpConstructFloatE3M2, + EOpConstructFloatE3M2Vec2, + EOpConstructFloatE3M2Vec3, + EOpConstructFloatE3M2Vec4, + EOpConstructFloatE2M3, + EOpConstructFloatE2M3Vec2, + EOpConstructFloatE2M3Vec3, + EOpConstructFloatE2M3Vec4, + EOpConstructFloatUE8M0, + EOpConstructFloatUE8M0Vec2, + EOpConstructFloatUE8M0Vec3, + EOpConstructFloatUE8M0Vec4, + EOpConstructFloatMXINT8, + EOpConstructFloatMXINT8Vec2, + EOpConstructFloatMXINT8Vec3, + EOpConstructFloatMXINT8Vec4, EOpConstructStruct, EOpConstructTextureSampler, EOpConstructNonuniform, // expected to be transformed away, not present in final AST @@ -739,6 +785,18 @@ enum TOperator { EOpFragmentMaskFetch, EOpFragmentFetch, + // QCOM Image processing3 + EOpTextureGatherExtendedGuardBegin, + EOpTextureGather4x1QCOM, + EOpTextureGatherV2QCOM, + EOpTextureGatherH2QCOM, + EOpTextureGatherDQCOM, + EOpTextureGather4x1OffsetQCOM, + EOpTextureGatherV2OffsetQCOM, + EOpTextureGatherH2OffsetQCOM, + EOpTextureGatherDOffsetQCOM, + EOpTextureGatherExtendedGuardEnd, + EOpSparseTextureGuardBegin, EOpSparseTexture, @@ -1061,6 +1119,12 @@ enum TLinkType { ELinkExport, }; +enum TFunctionControl { + EfcNone = 0, + EfcInline = 0x1, + EfcDontInline = 0x2, +}; + class TIntermTraverser; class TIntermVariableDecl; class TIntermOperator; @@ -1223,7 +1287,8 @@ public: maxIterations(iterationsInfinite), iterationMultiple(1), peelCount(0), - partialCount(0) + partialCount(0), + multipleWaitQueuesQCOM(noMultipleQaitQueues) { } virtual TIntermLoop* getAsLoopNode() { return this; } @@ -1275,6 +1340,12 @@ public: } unsigned int getPartialCount() const { return partialCount; } + static const unsigned int noMultipleQaitQueues = 0xFFFFFFFF; + void setMultipleWaitQueuesQCOM(unsigned int numQ) { + multipleWaitQueuesQCOM = numQ; + } + unsigned int getMultipleWaitQueuesQCOM() const { return multipleWaitQueuesQCOM; } + protected: TIntermNode* body; // code to loop over TIntermNode* test; // exit condition associated with loop, could be 0 for 'for' loops @@ -1288,6 +1359,7 @@ protected: unsigned int iterationMultiple; // as per the SPIR-V specification unsigned int peelCount; // as per the SPIR-V specification unsigned int partialCount; // as per the SPIR-V specification + unsigned int multipleWaitQueuesQCOM; }; // @@ -1432,7 +1504,10 @@ public: bool isImageFootprint() const { return op > EOpImageFootprintGuardBegin && op < EOpImageFootprintGuardEnd; } bool isSparseImage() const { return op == EOpSparseImageLoad; } bool isSubgroup() const { return op > EOpSubgroupGuardStart && op < EOpSubgroupGuardStop; } - + bool isTextureGatherExtended() const + { + return op > EOpTextureGatherExtendedGuardBegin && op < EOpTextureGatherExtendedGuardEnd; + } void setOperationPrecision(TPrecisionQualifier p) { operationPrecision = p; } TPrecisionQualifier getOperationPrecision() const { return operationPrecision != EpqNone ? operationPrecision : @@ -1559,6 +1634,17 @@ public: break; case EOpTextureGather: case EOpSparseTextureGather: + case EOpTextureGather4x1QCOM: + case EOpTextureGatherV2QCOM: + case EOpTextureGatherH2QCOM: + case EOpTextureGatherDQCOM: + cracked.gather = true; + break; + case EOpTextureGather4x1OffsetQCOM: + case EOpTextureGatherV2OffsetQCOM: + case EOpTextureGatherH2OffsetQCOM: + case EOpTextureGatherDOffsetQCOM: + cracked.offset = true; cracked.gather = true; break; case EOpTextureGatherOffset: @@ -1687,7 +1773,7 @@ typedef TVector TQualifierList; // class TIntermAggregate : public TIntermOperator { public: - TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(nullptr) { + TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(nullptr) { endLoc.init(); } TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(nullptr) { @@ -1721,6 +1807,8 @@ public: void setLinkType(TLinkType l) { linkType = l; } TLinkType getLinkType() const { return linkType; } + void setFunctionControl(unsigned int fc) { functionControl = fc; } + unsigned int getFunctionControl() const { return functionControl; } protected: TIntermAggregate(const TIntermAggregate&); // disallow copy constructor TIntermAggregate& operator=(const TIntermAggregate&); // disallow assignment operator @@ -1733,6 +1821,7 @@ protected: TPragmaTable* pragmaTable; TSpirvInstruction spirvInst; TLinkType linkType = ELinkNone; + unsigned int functionControl = EfcNone; // Marking the end source location of the aggregate. // This is currently only set for a compound statement or a function body, pointing to '}'. diff --git a/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp b/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp index dc73271d1..f402233aa 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp @@ -41,6 +41,7 @@ #include #include #include +#include namespace { @@ -48,6 +49,18 @@ using namespace glslang; constexpr double pi = 3.1415926535897932384626433832795; +// Reinterpret the bits of 'from' as a 'To', for the *BitsTo* built-ins. +// This matches how the SPIR-V back end emits these constants, so folding +// them here cannot change the result. +template +To bitCast(From from) +{ + static_assert(sizeof(To) == sizeof(From), "bitCast requires equally sized types"); + To to; + memcpy(&to, &from, sizeof(to)); + return to; +} + } // end anonymous namespace @@ -154,6 +167,11 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: if (rightUnionArray[i].getDConst() != 0.0) newConstArray[i].setDConst(leftUnionArray[i].getDConst() / rightUnionArray[i].getDConst()); else if (leftUnionArray[i].getDConst() > 0.0) @@ -509,6 +527,11 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: case EbtFloat: valf = unionArray[i].getDConst(); srcType = CONV_FLOAT; @@ -560,6 +583,11 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: case EbtFloat: dstType = CONV_FLOAT; break; @@ -633,6 +661,11 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: case EbtFloat: newConstArray[i].setDConst(valf); break; case EbtInt8: @@ -667,6 +700,11 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break; // Note: avoid UBSAN error regarding negating 0x80000000 case EbtInt: newConstArray[i].setIConst( @@ -724,6 +762,24 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpAtan: newConstArray[i].setDConst(atan(unionArray[i].getDConst())); break; + case EOpSinh: + newConstArray[i].setDConst(sinh(unionArray[i].getDConst())); + break; + case EOpCosh: + newConstArray[i].setDConst(cosh(unionArray[i].getDConst())); + break; + case EOpTanh: + newConstArray[i].setDConst(tanh(unionArray[i].getDConst())); + break; + case EOpAsinh: + newConstArray[i].setDConst(asinh(unionArray[i].getDConst())); + break; + case EOpAcosh: + newConstArray[i].setDConst(acosh(unionArray[i].getDConst())); + break; + case EOpAtanh: + newConstArray[i].setDConst(atanh(unionArray[i].getDConst())); + break; case EOpDPdx: case EOpDPdy: @@ -818,23 +874,35 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpConstructReference: newConstArray[i].setU64Const(unionArray[i].getU64Const()); break; + // The constant is held as a double, so narrow it back to the declared + // width before reinterpreting its bits. + case EOpFloatBitsToInt: + newConstArray[i].setIConst(bitCast(static_cast(unionArray[i].getDConst()))); + break; + case EOpFloatBitsToUint: + newConstArray[i].setUConst(bitCast(static_cast(unionArray[i].getDConst()))); + break; + case EOpIntBitsToFloat: + newConstArray[i].setDConst(bitCast(unionArray[i].getIConst())); + break; + case EOpUintBitsToFloat: + newConstArray[i].setDConst(bitCast(unionArray[i].getUConst())); + break; + case EOpDoubleBitsToInt64: + newConstArray[i].setI64Const(bitCast(unionArray[i].getDConst())); + break; + case EOpDoubleBitsToUint64: + newConstArray[i].setU64Const(bitCast(unionArray[i].getDConst())); + break; + case EOpInt64BitsToDouble: + newConstArray[i].setDConst(bitCast(unionArray[i].getI64Const())); + break; + case EOpUint64BitsToDouble: + newConstArray[i].setDConst(bitCast(unionArray[i].getU64Const())); + break; + // TODO: 3.0 Functionality: unary constant folding: the rest of the ops have to be fleshed out - case EOpSinh: - case EOpCosh: - case EOpTanh: - case EOpAsinh: - case EOpAcosh: - case EOpAtanh: - - case EOpFloatBitsToInt: - case EOpFloatBitsToUint: - case EOpIntBitsToFloat: - case EOpUintBitsToFloat: - case EOpDoubleBitsToInt64: - case EOpDoubleBitsToUint64: - case EOpInt64BitsToDouble: - case EOpUint64BitsToDouble: case EOpFloat16BitsToInt16: case EOpFloat16BitsToUint16: case EOpInt16BitsToFloat16: @@ -906,13 +974,13 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) break; case EOpStep: componentwise = true; - objectSize = std::max(children[0]->getAsTyped()->getType().getVectorSize(), - children[1]->getAsTyped()->getType().getVectorSize()); + objectSize = std::max(children[0]->getAsTyped()->getType().computeNumComponents(), + children[1]->getAsTyped()->getType().computeNumComponents()); break; case EOpSmoothStep: componentwise = true; - objectSize = std::max(children[0]->getAsTyped()->getType().getVectorSize(), - children[2]->getAsTyped()->getType().getVectorSize()); + objectSize = std::max(children[0]->getAsTyped()->getType().computeNumComponents(), + children[2]->getAsTyped()->getType().computeNumComponents()); break; case EOpMul: { @@ -933,13 +1001,13 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) for (int comp = 0; comp < objectSize; comp++) { // some arguments are scalars instead of matching vectors; simulate a smear - int arg0comp = std::min(comp, children[0]->getAsTyped()->getType().getVectorSize() - 1); + int arg0comp = std::min(comp, children[0]->getAsTyped()->getType().computeNumComponents() - 1); int arg1comp = 0; if (children.size() > 1) - arg1comp = std::min(comp, children[1]->getAsTyped()->getType().getVectorSize() - 1); + arg1comp = std::min(comp, children[1]->getAsTyped()->getType().computeNumComponents() - 1); int arg2comp = 0; if (children.size() > 2) - arg2comp = std::min(comp, children[2]->getAsTyped()->getType().getVectorSize() - 1); + arg2comp = std::min(comp, children[2]->getAsTyped()->getType().computeNumComponents() - 1); switch (aggrNode->getOp()) { case EOpAtan: @@ -962,6 +1030,11 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: case EbtFloat: case EbtDouble: newConstArray[comp].setDConst(std::min(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst())); @@ -999,6 +1072,11 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: case EbtFloat: case EbtDouble: newConstArray[comp].setDConst(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst())); @@ -1036,6 +1114,11 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: case EbtFloat: case EbtDouble: newConstArray[comp].setDConst(std::min(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()), @@ -1272,6 +1355,7 @@ TIntermTyped* TIntermediate::foldDereference(TIntermTyped* node, int index, cons start += (*node->getType().getStruct())[i].type->computeNumComponents(); } + size = std::min(size, node->getAsConstantUnion()->getConstArray().size()); result = addConstantUnion(TConstUnionArray(node->getAsConstantUnion()->getConstArray(), start, size), node->getType(), loc); if (result == nullptr) diff --git a/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp b/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp index 240230ce8..ada3480ba 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp @@ -4166,6 +4166,88 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "fe4m3vec4 uintBitsToFloate4m3EXT(u8vec4 value);" "void saturatedConvertEXT();" + + "int8_t floatue8m0BitsToIntEXT(floatue8m0_t value);" + "i8vec2 floatue8m0BitsToIntEXT(fue8m0vec2 value);" + "i8vec3 floatue8m0BitsToIntEXT(fue8m0vec3 value);" + "i8vec4 floatue8m0BitsToIntEXT(fue8m0vec4 value);" + + "uint8_t floatue8m0BitsToUintEXT(floatue8m0_t value);" + "u8vec2 floatue8m0BitsToUintEXT(fue8m0vec2 value);" + "u8vec3 floatue8m0BitsToUintEXT(fue8m0vec3 value);" + "u8vec4 floatue8m0BitsToUintEXT(fue8m0vec4 value);" + + "floatue8m0_t intBitsToFloatue8m0EXT(int8_t value);" + "fue8m0vec2 intBitsToFloatue8m0EXT(i8vec2 value);" + "fue8m0vec3 intBitsToFloatue8m0EXT(i8vec3 value);" + "fue8m0vec4 intBitsToFloatue8m0EXT(i8vec4 value);" + + "floatue8m0_t uintBitsToFloatue8m0EXT(uint8_t value);" + "fue8m0vec2 uintBitsToFloatue8m0EXT(u8vec2 value);" + "fue8m0vec3 uintBitsToFloatue8m0EXT(u8vec3 value);" + "fue8m0vec4 uintBitsToFloatue8m0EXT(u8vec4 value);" + + "int8_t floatmxint8BitsToIntEXT(floatmxint8_t value);" + "i8vec2 floatmxint8BitsToIntEXT(fmxint8vec2 value);" + "i8vec3 floatmxint8BitsToIntEXT(fmxint8vec3 value);" + "i8vec4 floatmxint8BitsToIntEXT(fmxint8vec4 value);" + + "uint8_t floatmxint8BitsToUintEXT(floatmxint8_t value);" + "u8vec2 floatmxint8BitsToUintEXT(fmxint8vec2 value);" + "u8vec3 floatmxint8BitsToUintEXT(fmxint8vec3 value);" + "u8vec4 floatmxint8BitsToUintEXT(fmxint8vec4 value);" + + "floatmxint8_t intBitsToFloatmxint8EXT(int8_t value);" + "fmxint8vec2 intBitsToFloatmxint8EXT(i8vec2 value);" + "fmxint8vec3 intBitsToFloatmxint8EXT(i8vec3 value);" + "fmxint8vec4 intBitsToFloatmxint8EXT(i8vec4 value);" + + "floatmxint8_t uintBitsToFloatmxint8EXT(uint8_t value);" + "fmxint8vec2 uintBitsToFloatmxint8EXT(u8vec2 value);" + "fmxint8vec3 uintBitsToFloatmxint8EXT(u8vec3 value);" + "fmxint8vec4 uintBitsToFloatmxint8EXT(u8vec4 value);" + + "fe2m1vec2 unpackFloat2xfe2m1EXT(uint8_t value);" + "fe2m1vec4 unpackFloat4xfe2m1EXT(uint16_t value);" + "vector unpackFloat8xfe2m1EXT(uint32_t value);" + "vector unpackFloat16xfe2m1EXT(u32vec2 value);" + + "uint8_t packFloat2xfe2m1EXT(fe2m1vec2 value);" + "uint16_t packFloat4xfe2m1EXT(fe2m1vec4 value);" + "uint32_t packFloat8xfe2m1EXT(vector value);" + "u32vec2 packFloat16xfe2m1EXT(vector value);" + + "fe3m2vec4 unpackFloat4xfe3m2EXT(u8vec3 value);" + "vector unpackFloat8xfe3m2EXT(u16vec3 value);" + "vector unpackFloat16xfe3m2EXT(u32vec3 value);" + + "u8vec3 packFloat4xfe3m2EXT(fe3m2vec4 value);" + "u16vec3 packFloat8xfe3m2EXT(vector value);" + "u32vec3 packFloat16xfe3m2EXT(vector value);" + + "fe2m3vec4 unpackFloat4xfe2m3EXT(u8vec3 value);" + "vector unpackFloat8xfe2m3EXT(u16vec3 value);" + "vector unpackFloat16xfe2m3EXT(u32vec3 value);" + + "u8vec3 packFloat4xfe2m3EXT(fe2m3vec4 value);" + "u16vec3 packFloat8xfe2m3EXT(vector value);" + "u32vec3 packFloat16xfe2m3EXT(vector value);" + + "floate2m1_t bitcastExtractfe2m1EXT(uint8_t, uint);" + "fe2m1vec2 bitcastExtractfe2m1EXT(u8vec2, uint);" + "fe2m1vec3 bitcastExtractfe2m1EXT(u8vec3, uint);" + "fe2m1vec4 bitcastExtractfe2m1EXT(u8vec4, uint);" + + "floate3m2_t bitcastExtractfe3m2EXT(uint8_t, uint);" + "fe3m2vec2 bitcastExtractfe3m2EXT(u8vec2, uint);" + "fe3m2vec3 bitcastExtractfe3m2EXT(u8vec3, uint);" + "fe3m2vec4 bitcastExtractfe3m2EXT(u8vec4, uint);" + + "floate2m3_t bitcastExtractfe2m3EXT(uint8_t, uint);" + "fe2m3vec2 bitcastExtractfe2m3EXT(u8vec2, uint);" + "fe2m3vec3 bitcastExtractfe2m3EXT(u8vec3, uint);" + "fe2m3vec4 bitcastExtractfe2m3EXT(u8vec4, uint);" + "\n"); } @@ -4814,6 +4896,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void barrier();" ); } + if ((profile != EEsProfile && version >= 420) || esBarrier) + stageBuiltins[EShLangCompute].append( + "void controlBarrierArrive();" + "void controlBarrierWait();" + ); if ((profile != EEsProfile && version >= 130) || esBarrier) commonBuiltins.append( "void memoryBarrier();" @@ -4847,6 +4934,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV commonBuiltins.append("void controlBarrier(int, int, int, int);\n" "void memoryBarrier(int, int, int);\n"); + commonBuiltins.append("void controlBarrierArrive(int, int, int, int);\n" + "void controlBarrierWait(int, int, int, int);\n"); + commonBuiltins.append("void debugPrintfEXT();\n"); commonBuiltins.append("void abortEXT();\n"); @@ -4993,11 +5083,23 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void coopMatPerElementNV();" ); + commonBuiltins.append( + "void coopMatTransposeEXT(out coopmat, coopmat);" + "void coopMatReduceEXT(out coopmat, coopmat, int, __function);" + "void coopMatPerElementEXT();" + "uvec2 coopMatGetCoordinateEXT(coopmat, uint index);" + ); + commonBuiltins.append( "const int gl_CooperativeMatrixReduceRowNV = 0x1;\n" "const int gl_CooperativeMatrixReduceColumnNV = 0x2;\n" "const int gl_CooperativeMatrixReduceRowAndColumnNV = 0x3;\n" "const int gl_CooperativeMatrixReduce2x2NV = 0x4;\n" + + "const int gl_CooperativeMatrixReduceRowEXT = 0x1;\n" + "const int gl_CooperativeMatrixReduceColumnEXT = 0x2;\n" + "const int gl_CooperativeMatrixReduceRowAndColumnEXT = 0x3;\n" + "const int gl_CooperativeMatrixReduce2x2EXT = 0x4;\n" "\n" ); @@ -5226,6 +5328,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "vector intBitsToFloate4m3EXT(vector);" "vector uintBitsToFloate4m3EXT(vector);" + "vector floatue8m0BitsToIntEXT(vector);" + "vector floatue8m0BitsToUintEXT(vector);" + "vector intBitsToFloatue8m0EXT(vector);" + "vector uintBitsToFloatue8m0EXT(vector);" + "vector floatmxint8BitsToIntEXT(vector);" + "vector floatmxint8BitsToUintEXT(vector);" + "vector intBitsToFloatmxint8EXT(vector);" + "vector uintBitsToFloatmxint8EXT(vector);" + "vector uaddCarry(highp vector, highp vector, out lowp vector carry);" "vector usubBorrow(highp vector, highp vector, out lowp vector borrow);" "void umulExtended(highp vector, highp vector, out highp vector, out highp vector);" @@ -5287,6 +5398,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "vector mix(vector, vector, int8_t);" "vector expectEXT(vector, vector);" + + "vector bitcastExtractfe2m1EXT(vector, uint);" + "vector bitcastExtractfe3m2EXT(vector, uint);" + "vector bitcastExtractfe2m3EXT(vector, uint);" ; std::string longVectorDerivativeFuncs = @@ -6951,6 +7066,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 130)) { + addGatherFunctionsQCOM(); + } + // GL_ARB_shader_ballot if (profile != EEsProfile && version >= 450) { const char* ballotDecls = @@ -7112,6 +7232,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "const uint gl_RayFlagsSkipBuiltinPrimitivesNV = 256U;" "const uint gl_RayFlagsSkipAABBEXT = 512U;" "const uint gl_RayFlagsForceOpacityMicromap2StateEXT = 1024U;" + "const bool gl_EnableOpacityMicromapEXT = false;" "const uint gl_HitKindFrontFacingTriangleEXT = 254U;" "const uint gl_HitKindBackFacingTriangleEXT = 255U;" "in uint gl_HitKindFrontFacingMicroTriangleNV;" @@ -8361,6 +8482,57 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, in } } +void TBuiltIns::addGatherFunctionsQCOM() +{ + const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint }; + const TSamplerDim sDims[] = { Esd2D }; + const TString modes[] = { "4x1", "V2", "H2", "D" }; + for (size_t arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not + for (size_t dimIdx = 0; dimIdx < std::size(sDims); ++dimIdx) { + int dim = sDims[dimIdx]; + // Loop over the bTypes + for (size_t bType = 0; bType < std::size(bTypes); ++bType) { + for (size_t mode = 0; mode < std::size(modes); ++mode) { + // loop over two forms of offset in the call name: none, and Offset + for (int offset = 0; offset < 2; ++offset) { + for (int comp = 0; comp < 2; ++comp) { + // + // Now, make all the function prototypes for the type we just built... + // + TSampler sampler; + sampler.set(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false, false, false); + TString typeName = sampler.getString().c_str(); + + TString s; + s.append(prefixes[sampler.type]); + s.append("vec4 textureGather"); + s.append(modes[mode]); + + if (offset == 1) + s.append("Offset"); + + s.append("QCOM("); + s.append(typeName); + s.append(", vec"); + int totalDims = dimMap[sampler.dim] + (sampler.arrayed ? 1 : 0); + s.append(postfixes[totalDims]); + + // offset argument + if (offset == 1) + s.append(", ivec2"); + + if (comp) + s.append(", int"); + s.append(");\n"); + commonBuiltins.append(s); + } + } + } + } + } + } +} + // // Add context-dependent built-in functions and variables that are present // for the given version and profile. All the results are put into just the @@ -9458,6 +9630,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_RayFlagsSkipAABBEXT", 1, &E_GL_EXT_ray_flags_primitive_culling); symbolTable.setVariableExtensions("gl_RayFlagsSkipTrianglesEXT", 1, &E_GL_EXT_ray_flags_primitive_culling); symbolTable.setVariableExtensions("gl_RayFlagsForceOpacityMicromap2StateEXT", 1, &E_GL_EXT_opacity_micromap); + symbolTable.setVariableExtensions("gl_EnableOpacityMicromapEXT", 1, &E_GL_EXT_opacity_micromap_ray_query_mode); } if ((profile != EEsProfile && version >= 130) || @@ -10037,6 +10210,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_TileDimensionQCOM", 1, &E_GL_QCOM_tile_shading); symbolTable.setVariableExtensions("gl_TileApronSizeQCOM", 1, &E_GL_QCOM_tile_shading); } + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 130)) { + symbolTable.setFunctionExtensions("textureGather4x1QCOM", 1, &E_GL_QCOM_image_processing3); + symbolTable.setFunctionExtensions("textureGatherV2QCOM", 1, &E_GL_QCOM_image_processing3); + symbolTable.setFunctionExtensions("textureGatherH2QCOM", 1, &E_GL_QCOM_image_processing3); + symbolTable.setFunctionExtensions("textureGatherDQCOM", 1, &E_GL_QCOM_image_processing3); + symbolTable.setFunctionExtensions("textureGather4x1OffsetQCOM", 1, &E_GL_QCOM_image_processing3); + symbolTable.setFunctionExtensions("textureGatherV2OffsetQCOM", 1, &E_GL_QCOM_image_processing3); + symbolTable.setFunctionExtensions("textureGatherH2OffsetQCOM", 1, &E_GL_QCOM_image_processing3); + symbolTable.setFunctionExtensions("textureGatherDOffsetQCOM", 1, &E_GL_QCOM_image_processing3); + } + break; case EShLangCompute: @@ -10079,10 +10265,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("groupMemoryBarrier", 1, &E_GL_ARB_compute_shader); } - symbolTable.setFunctionExtensions("controlBarrier", 1, &E_GL_KHR_memory_scope_semantics); symbolTable.setFunctionExtensions("debugPrintfEXT", 1, &E_GL_EXT_debug_printf); symbolTable.setFunctionExtensions("abortEXT", 1, &E_GL_EXT_abort); + symbolTable.setFunctionExtensions("controlBarrierArrive", 1, &E_GL_EXT_split_barrier); + symbolTable.setFunctionExtensions("controlBarrierWait", 1, &E_GL_EXT_split_barrier); // GL_ARB_shader_ballot if (profile != EEsProfile) { @@ -10217,6 +10404,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("setTensorViewClipNV", 1, &E_GL_NV_cooperative_matrix2); } + { + symbolTable.setFunctionExtensions("coopMatReduceEXT", 1, &E_GL_EXT_cooperative_matrix_maintenance1); + symbolTable.setFunctionExtensions("coopMatPerElementEXT", 1, &E_GL_EXT_cooperative_matrix_maintenance1); + symbolTable.setFunctionExtensions("coopMatTransposeEXT", 1, &E_GL_EXT_cooperative_matrix_maintenance1); + symbolTable.setFunctionExtensions("coopMatGetCoordinateEXT", 1, &E_GL_EXT_cooperative_matrix_maintenance1); + } + { symbolTable.setFunctionExtensions("tensorReadARM", 1, &E_GL_ARM_tensors); symbolTable.setFunctionExtensions("tensorWriteARM", 1, &E_GL_ARM_tensors); @@ -10313,6 +10507,43 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion const char *float8exts[] = {E_GL_EXT_float_e5m2, E_GL_EXT_float_e4m3}; symbolTable.setFunctionExtensions("saturatedConvertEXT", 2, float8exts); + + symbolTable.setFunctionExtensions("floatue8m0BitsToIntEXT", 1, &E_GL_EXT_float_ue8m0); + symbolTable.setFunctionExtensions("floatue8m0BitsToUintEXT", 1, &E_GL_EXT_float_ue8m0); + symbolTable.setFunctionExtensions("intBitsToFloatue8m0EXT", 1, &E_GL_EXT_float_ue8m0); + symbolTable.setFunctionExtensions("uintBitsToFloatue8m0EXT", 1, &E_GL_EXT_float_ue8m0); + + symbolTable.setFunctionExtensions("floatmxint8BitsToIntEXT", 1, &E_GL_EXT_float_mxint8); + symbolTable.setFunctionExtensions("floatmxint8BitsToUintEXT", 1, &E_GL_EXT_float_mxint8); + symbolTable.setFunctionExtensions("intBitsToFloatmxint8EXT", 1, &E_GL_EXT_float_mxint8); + symbolTable.setFunctionExtensions("uintBitsToFloatmxint8EXT", 1, &E_GL_EXT_float_mxint8); + + symbolTable.setFunctionExtensions("unpackFloat2xfe2m1EXT", 1, &E_GL_EXT_float_e2m1); + symbolTable.setFunctionExtensions("unpackFloat4xfe2m1EXT", 1, &E_GL_EXT_float_e2m1); + symbolTable.setFunctionExtensions("unpackFloat8xfe2m1EXT", 1, &E_GL_EXT_float_e2m1); + symbolTable.setFunctionExtensions("unpackFloat16xfe2m1EXT", 1, &E_GL_EXT_float_e2m1); + symbolTable.setFunctionExtensions("packFloat2xfe2m1EXT", 1, &E_GL_EXT_float_e2m1); + symbolTable.setFunctionExtensions("packFloat4xfe2m1EXT", 1, &E_GL_EXT_float_e2m1); + symbolTable.setFunctionExtensions("packFloat8xfe2m1EXT", 1, &E_GL_EXT_float_e2m1); + symbolTable.setFunctionExtensions("packFloat16xfe2m1EXT", 1, &E_GL_EXT_float_e2m1); + + symbolTable.setFunctionExtensions("unpackFloat4xfe3m2EXT", 1, &E_GL_EXT_float_e3m2); + symbolTable.setFunctionExtensions("unpackFloat8xfe3m2EXT", 1, &E_GL_EXT_float_e3m2); + symbolTable.setFunctionExtensions("unpackFloat16xfe3m2EXT", 1, &E_GL_EXT_float_e3m2); + symbolTable.setFunctionExtensions("packFloat4xfe3m2EXT", 1, &E_GL_EXT_float_e3m2); + symbolTable.setFunctionExtensions("packFloat8xfe3m2EXT", 1, &E_GL_EXT_float_e3m2); + symbolTable.setFunctionExtensions("packFloat16xfe3m2EXT", 1, &E_GL_EXT_float_e3m2); + + symbolTable.setFunctionExtensions("unpackFloat4xfe2m3EXT", 1, &E_GL_EXT_float_e2m3); + symbolTable.setFunctionExtensions("unpackFloat8xfe2m3EXT", 1, &E_GL_EXT_float_e2m3); + symbolTable.setFunctionExtensions("unpackFloat16xfe2m3EXT", 1, &E_GL_EXT_float_e2m3); + symbolTable.setFunctionExtensions("packFloat4xfe2m3EXT", 1, &E_GL_EXT_float_e2m3); + symbolTable.setFunctionExtensions("packFloat8xfe2m3EXT", 1, &E_GL_EXT_float_e2m3); + symbolTable.setFunctionExtensions("packFloat16xfe2m3EXT", 1, &E_GL_EXT_float_e2m3); + + symbolTable.setFunctionExtensions("bitcastExtractfe2m1EXT", 1, &E_GL_EXT_float_e2m1); + symbolTable.setFunctionExtensions("bitcastExtractfe3m2EXT", 1, &E_GL_EXT_float_e3m2); + symbolTable.setFunctionExtensions("bitcastExtractfe2m3EXT", 1, &E_GL_EXT_float_e2m3); } // E_SPV_QCOM_tile_shading @@ -11038,6 +11269,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierAtomicCounter); symbolTable.relateToOperator("memoryBarrierImage", EOpMemoryBarrierImage); + symbolTable.relateToOperator("controlBarrierArrive", EOpControlBarrierArriveEXT); + symbolTable.relateToOperator("controlBarrierWait", EOpControlBarrierWaitEXT); + if (spvVersion.vulkanRelaxed) { // // functions signature have been replaced to take uint operations on buffer variables @@ -11358,6 +11592,43 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("uintBitsToFloate4m3EXT", EOpUintBitsToFloat); symbolTable.relateToOperator("saturatedConvertEXT", EOpConstructSaturated); + + symbolTable.relateToOperator("floatue8m0BitsToIntEXT", EOpFloatBitsToInt); + symbolTable.relateToOperator("floatue8m0BitsToUintEXT", EOpFloatBitsToUint); + symbolTable.relateToOperator("intBitsToFloatue8m0EXT", EOpIntBitsToFloat); + symbolTable.relateToOperator("uintBitsToFloatue8m0EXT", EOpUintBitsToFloat); + + symbolTable.relateToOperator("floatmxint8BitsToIntEXT", EOpFloatBitsToInt); + symbolTable.relateToOperator("floatmxint8BitsToUintEXT", EOpFloatBitsToUint); + symbolTable.relateToOperator("intBitsToFloatmxint8EXT", EOpIntBitsToFloat); + symbolTable.relateToOperator("uintBitsToFloatmxint8EXT", EOpUintBitsToFloat); + + symbolTable.relateToOperator("unpackFloat2xfe2m1EXT", EOpUnpackFloat2xE2M1); + symbolTable.relateToOperator("unpackFloat4xfe2m1EXT", EOpUnpackFloat4xE2M1); + symbolTable.relateToOperator("unpackFloat8xfe2m1EXT", EOpUnpackFloat8xE2M1); + symbolTable.relateToOperator("unpackFloat16xfe2m1EXT", EOpUnpackFloat16xE2M1); + symbolTable.relateToOperator("packFloat2xfe2m1EXT", EOpPackFloat2xE2M1); + symbolTable.relateToOperator("packFloat4xfe2m1EXT", EOpPackFloat4xE2M1); + symbolTable.relateToOperator("packFloat8xfe2m1EXT", EOpPackFloat8xE2M1); + symbolTable.relateToOperator("packFloat16xfe2m1EXT", EOpPackFloat16xE2M1); + + symbolTable.relateToOperator("unpackFloat4xfe3m2EXT", EOpUnpackFloat4xE3M2); + symbolTable.relateToOperator("unpackFloat8xfe3m2EXT", EOpUnpackFloat8xE3M2); + symbolTable.relateToOperator("unpackFloat16xfe3m2EXT", EOpUnpackFloat16xE3M2); + symbolTable.relateToOperator("packFloat4xfe3m2EXT", EOpPackFloat4xE3M2); + symbolTable.relateToOperator("packFloat8xfe3m2EXT", EOpPackFloat8xE3M2); + symbolTable.relateToOperator("packFloat16xfe3m2EXT", EOpPackFloat16xE3M2); + + symbolTable.relateToOperator("unpackFloat4xfe2m3EXT", EOpUnpackFloat4xE2M3); + symbolTable.relateToOperator("unpackFloat8xfe2m3EXT", EOpUnpackFloat8xE2M3); + symbolTable.relateToOperator("unpackFloat16xfe2m3EXT", EOpUnpackFloat16xE2M3); + symbolTable.relateToOperator("packFloat4xfe2m3EXT", EOpPackFloat4xE2M3); + symbolTable.relateToOperator("packFloat8xfe2m3EXT", EOpPackFloat8xE2M3); + symbolTable.relateToOperator("packFloat16xfe2m3EXT", EOpPackFloat16xE2M3); + + symbolTable.relateToOperator("bitcastExtractfe2m1EXT", EOpBitcastExtractE2M1); + symbolTable.relateToOperator("bitcastExtractfe3m2EXT", EOpBitcastExtractE3M2); + symbolTable.relateToOperator("bitcastExtractfe2m3EXT", EOpBitcastExtractE2M3); } // GL_KHR_shader_subgroup @@ -11469,6 +11740,18 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("textureBlockMatchGatherSADQCOM", EOpImageBlockMatchGatherSADQCOM); } + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 130)) { + symbolTable.relateToOperator("textureGather4x1QCOM", EOpTextureGather4x1QCOM); + symbolTable.relateToOperator("textureGatherV2QCOM", EOpTextureGatherV2QCOM); + symbolTable.relateToOperator("textureGatherH2QCOM", EOpTextureGatherH2QCOM); + symbolTable.relateToOperator("textureGatherDQCOM", EOpTextureGatherDQCOM); + symbolTable.relateToOperator("textureGather4x1OffsetQCOM", EOpTextureGather4x1OffsetQCOM); + symbolTable.relateToOperator("textureGatherV2OffsetQCOM", EOpTextureGatherV2OffsetQCOM); + symbolTable.relateToOperator("textureGatherH2OffsetQCOM", EOpTextureGatherH2OffsetQCOM); + symbolTable.relateToOperator("textureGatherDOffsetQCOM", EOpTextureGatherDOffsetQCOM); + } + if (profile != EEsProfile && spvVersion.spv == 0) { symbolTable.relateToOperator("texture1DArray", EOpTexture); symbolTable.relateToOperator("texture2DArray", EOpTexture); @@ -11593,6 +11876,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("coopMatPerElementNV", EOpCooperativeMatrixPerElementOpNV); symbolTable.relateToOperator("coopMatTransposeNV", EOpCooperativeMatrixTransposeNV); + symbolTable.relateToOperator("coopMatReduceEXT", EOpCooperativeMatrixReduceNV); + symbolTable.relateToOperator("coopMatPerElementEXT", EOpCooperativeMatrixPerElementOpNV); + symbolTable.relateToOperator("coopMatTransposeEXT", EOpCooperativeMatrixTransposeNV); + symbolTable.relateToOperator("coopMatGetCoordinateEXT", EOpCooperativeMatrixGetCoordinateEXT); + symbolTable.relateToOperator("createTensorLayoutNV", EOpCreateTensorLayoutNV); symbolTable.relateToOperator("setTensorLayoutBlockSizeNV", EOpTensorLayoutSetBlockSizeNV); symbolTable.relateToOperator("setTensorLayoutDimensionNV", EOpTensorLayoutSetDimensionNV); @@ -12032,6 +12320,10 @@ bool IsSupportedLongVectorBuiltin(const TFunction* fnCandidate, TType* resultTyp checkBitCast(EbtFloatE5M2, EbtInt8); } else if (fnCandidate->getName() == "floate4m3BitsToIntEXT") { checkBitCast(EbtFloatE4M3, EbtInt8); + } else if (fnCandidate->getName() == "floatue8m0BitsToIntEXT") { + checkBitCast(EbtFloatUE8M0, EbtInt8); + } else if (fnCandidate->getName() == "floatmxint8BitsToIntEXT") { + checkBitCast(EbtFloatMXINT8, EbtInt8); } else { checkBitCast(EbtFloat, EbtInt); } @@ -12043,6 +12335,10 @@ bool IsSupportedLongVectorBuiltin(const TFunction* fnCandidate, TType* resultTyp checkBitCast(EbtFloatE5M2, EbtUint8); } else if (fnCandidate->getName() == "floate4m3BitsToUintEXT") { checkBitCast(EbtFloatE4M3, EbtUint8); + } else if (fnCandidate->getName() == "floatue8m0BitsToUintEXT") { + checkBitCast(EbtFloatUE8M0, EbtUint8); + } else if (fnCandidate->getName() == "floatmxint8BitsToUintEXT") { + checkBitCast(EbtFloatMXINT8, EbtUint8); } else { checkBitCast(EbtFloat, EbtUint); } @@ -12054,6 +12350,10 @@ bool IsSupportedLongVectorBuiltin(const TFunction* fnCandidate, TType* resultTyp checkBitCast(EbtInt8, EbtFloatE5M2); } else if (fnCandidate->getName() == "intBitsToFloate4m3EXT") { checkBitCast(EbtInt8, EbtFloatE4M3); + } else if (fnCandidate->getName() == "intBitsToFloatue8m0EXT") { + checkBitCast(EbtInt8, EbtFloatUE8M0); + } else if (fnCandidate->getName() == "intBitsToFloatmxint8EXT") { + checkBitCast(EbtInt8, EbtFloatMXINT8); } else { checkBitCast(EbtInt, EbtFloat); } @@ -12065,6 +12365,10 @@ bool IsSupportedLongVectorBuiltin(const TFunction* fnCandidate, TType* resultTyp checkBitCast(EbtUint8, EbtFloatE5M2); } else if (fnCandidate->getName() == "uintBitsToFloate4m3EXT") { checkBitCast(EbtUint8, EbtFloatE4M3); + } else if (fnCandidate->getName() == "uintBitsToFloatue8m0EXT") { + checkBitCast(EbtUint8, EbtFloatUE8M0); + } else if (fnCandidate->getName() == "uintBitsToFloatmxint8EXT") { + checkBitCast(EbtUint8, EbtFloatMXINT8); } else { checkBitCast(EbtUint, EbtFloat); } @@ -12242,6 +12546,29 @@ bool IsSupportedLongVectorBuiltin(const TFunction* fnCandidate, TType* resultTyp resultType->deepCopy(getArg(0)->getType()); } return valid; + case EOpPackFloat8xE2M1: + resultType->deepCopy(TType(EbtUint)); + return valid; + case EOpPackFloat16xE2M1: + resultType->deepCopy(TType(EbtUint, EvqTemporary, 2)); + return valid; + case EOpPackFloat8xE3M2: + case EOpPackFloat8xE2M3: + resultType->deepCopy(TType(EbtUint16, EvqTemporary, 3)); + return valid; + case EOpPackFloat16xE3M2: + case EOpPackFloat16xE2M3: + resultType->deepCopy(TType(EbtUint, EvqTemporary, 3)); + return valid; + case EOpBitcastExtractE2M1: + checkBitCast(EbtUint8, EbtFloatE2M1); + return valid; + case EOpBitcastExtractE3M2: + checkBitCast(EbtUint8, EbtFloatE3M2); + return valid; + case EOpBitcastExtractE2M3: + checkBitCast(EbtUint8, EbtFloatE2M3); + return valid; default: break; } diff --git a/3rdparty/glslang/glslang/MachineIndependent/Initialize.h b/3rdparty/glslang/glslang/MachineIndependent/Initialize.h index 849399af3..62e9dcae5 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Initialize.h +++ b/3rdparty/glslang/glslang/MachineIndependent/Initialize.h @@ -99,6 +99,7 @@ protected: void addImageFunctions(TSampler, const TString& typeName, int version, EProfile profile); void addSamplingFunctions(TSampler, const TString& typeName, int version, EProfile profile); void addGatherFunctions(TSampler, const TString& typeName, int version, EProfile profile); + void addGatherFunctionsQCOM(); // Helpers for making textual representations of the permutations // of texturing/imaging functions. diff --git a/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp b/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp index 1c300c45a..6df98afea 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp @@ -403,6 +403,11 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, case EOpConstructBFloat16: newType = EbtBFloat16; break; case EOpConstructFloatE4M3: newType = EbtFloatE4M3; break; case EOpConstructFloatE5M2: newType = EbtFloatE5M2; break; + case EOpConstructFloatE2M1: newType = EbtFloatE2M1; break; + case EOpConstructFloatE3M2: newType = EbtFloatE3M2; break; + case EOpConstructFloatE2M3: newType = EbtFloatE2M3; break; + case EOpConstructFloatUE8M0: newType = EbtFloatUE8M0; break; + case EOpConstructFloatMXINT8: newType = EbtFloatMXINT8; break; default: break; // some compilers want this } @@ -439,7 +444,12 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, case EOpConstructFloat16: case EOpConstructBFloat16: case EOpConstructFloatE5M2: - case EOpConstructFloatE4M3: { + case EOpConstructFloatE4M3: + case EOpConstructFloatE2M1: + case EOpConstructFloatE3M2: + case EOpConstructFloatE2M3: + case EOpConstructFloatUE8M0: + case EOpConstructFloatMXINT8: { TIntermUnary* unary_node = child->getAsUnaryNode(); if (unary_node != nullptr) unary_node->updatePrecision(); @@ -581,8 +591,13 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& newOp) const { // (bfloat16_t,fp8) <-> bool not supported - if (((src == EbtBFloat16 || src == EbtFloatE5M2 || src == EbtFloatE4M3) && dst == EbtBool) || - ((dst == EbtBFloat16 || dst == EbtFloatE5M2 || dst == EbtFloatE4M3) && src == EbtBool)) { + if (((src == EbtBFloat16 || src == EbtFloatE5M2 || src == EbtFloatE4M3 || isTypeOcpMicroscalingFloat(src)) && dst == EbtBool) || + ((dst == EbtBFloat16 || dst == EbtFloatE5M2 || dst == EbtFloatE4M3 || isTypeOcpMicroscalingFloat(dst)) && src == EbtBool)) { + return false; + } + + // no type conversions to microscaling types + if (isTypeOcpMicroscalingFloat(dst) && src != dst) { return false; } @@ -621,7 +636,8 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped node->getBasicType() == EbtFloat || node->getBasicType() == EbtDouble || node->getBasicType() == EbtFloatE5M2 || - node->getBasicType() == EbtFloatE4M3); + node->getBasicType() == EbtFloatE4M3 || + isTypeOcpMicroscalingFloat(node->getBasicType())); if (((convertTo == EbtInt8 || convertTo == EbtUint8) && ! convertFromIntTypes) || ((node->getBasicType() == EbtInt8 || node->getBasicType() == EbtUint8) && ! convertToIntTypes)) { @@ -879,6 +895,11 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt case EOpConstructBFloat16: case EOpConstructFloatE5M2: case EOpConstructFloatE4M3: + case EOpConstructFloatE2M1: + case EOpConstructFloatE3M2: + case EOpConstructFloatE2M3: + case EOpConstructFloatUE8M0: + case EOpConstructFloatMXINT8: case EOpConstructInt8: case EOpConstructUint8: case EOpConstructInt16: @@ -989,6 +1010,11 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt case EOpConstructBFloat16: case EOpConstructFloatE5M2: case EOpConstructFloatE4M3: + case EOpConstructFloatE2M1: + case EOpConstructFloatE3M2: + case EOpConstructFloatE2M3: + case EOpConstructFloatUE8M0: + case EOpConstructFloatMXINT8: canPromoteConstant = true; break; case EOpConstructFloat16: @@ -1296,6 +1322,10 @@ bool TIntermediate::isFPPromotion(TBasicType from, TBasicType to) const case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatMXINT8: case EbtFloat16: case EbtFloat: return true; @@ -1388,7 +1418,8 @@ bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const bool TIntermediate::isFPConversion(TBasicType from, TBasicType to) const { - if (to == EbtFloat && (from == EbtFloat16 || from == EbtBFloat16 || from == EbtFloatE5M2 || from == EbtFloatE4M3)) { + if (to == EbtFloat && (from == EbtFloat16 || from == EbtBFloat16 || from == EbtFloatE5M2 || from == EbtFloatE4M3 || + from == EbtFloatE2M1 || from == EbtFloatE3M2 || from == EbtFloatE2M3 || from == EbtFloatMXINT8)) { return true; } else { return false; @@ -1545,6 +1576,10 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatMXINT8: return true; case EbtInt8: case EbtUint8: @@ -1570,6 +1605,10 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatMXINT8: return true; case EbtInt8: case EbtUint8: @@ -1642,6 +1681,10 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatMXINT8: return true; default: break; @@ -1651,6 +1694,19 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat switch (from) { case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatMXINT8: + return true; + default: + break; + } + return false; + case EbtFloatE4M3: + case EbtFloatE5M2: + switch (from) { + case EbtFloatE2M1: return true; default: break; @@ -2137,6 +2193,51 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const default: break; // some compilers want this } break; + case EbtFloatE2M1: + switch (type.getVectorSize()) { + case 1: op = EOpConstructFloatE2M1; break; + case 2: op = EOpConstructFloatE2M1Vec2; break; + case 3: op = EOpConstructFloatE2M1Vec3; break; + case 4: op = EOpConstructFloatE2M1Vec4; break; + default: break; // some compilers want this + } + break; + case EbtFloatE3M2: + switch (type.getVectorSize()) { + case 1: op = EOpConstructFloatE3M2; break; + case 2: op = EOpConstructFloatE3M2Vec2; break; + case 3: op = EOpConstructFloatE3M2Vec3; break; + case 4: op = EOpConstructFloatE3M2Vec4; break; + default: break; // some compilers want this + } + break; + case EbtFloatE2M3: + switch (type.getVectorSize()) { + case 1: op = EOpConstructFloatE2M3; break; + case 2: op = EOpConstructFloatE2M3Vec2; break; + case 3: op = EOpConstructFloatE2M3Vec3; break; + case 4: op = EOpConstructFloatE2M3Vec4; break; + default: break; // some compilers want this + } + break; + case EbtFloatUE8M0: + switch (type.getVectorSize()) { + case 1: op = EOpConstructFloatUE8M0; break; + case 2: op = EOpConstructFloatUE8M0Vec2; break; + case 3: op = EOpConstructFloatUE8M0Vec3; break; + case 4: op = EOpConstructFloatUE8M0Vec4; break; + default: break; // some compilers want this + } + break; + case EbtFloatMXINT8: + switch (type.getVectorSize()) { + case 1: op = EOpConstructFloatMXINT8; break; + case 2: op = EOpConstructFloatMXINT8Vec2; break; + case 3: op = EOpConstructFloatMXINT8Vec3; break; + case 4: op = EOpConstructFloatMXINT8Vec4; break; + default: break; // some compilers want this + } + break; case EbtInt8: switch(type.getVectorSize()) { case 1: op = EOpConstructInt8; break; @@ -2547,7 +2648,7 @@ TIntermConstantUnion* TIntermediate::addConstantUnion(bool b, const TSourceLoc& TIntermConstantUnion* TIntermediate::addConstantUnion(double d, TBasicType baseType, const TSourceLoc& loc, bool literal) const { - assert(baseType == EbtFloat || baseType == EbtDouble || baseType == EbtFloat16 || baseType == EbtBFloat16 || baseType == EbtFloatE5M2 || baseType == EbtFloatE4M3); + assert(isTypeFloat(baseType)); if (isEsProfile() && (baseType == EbtFloat || baseType == EbtFloat16)) { int exponent = 0; @@ -3909,6 +4010,11 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC case EbtBFloat16: PROMOTE(setDConst, double, Get); break; \ case EbtFloatE5M2: PROMOTE(setDConst, double, Get); break; \ case EbtFloatE4M3: PROMOTE(setDConst, double, Get); break; \ + case EbtFloatE2M1: PROMOTE(setDConst, double, Get); break; \ + case EbtFloatE3M2: PROMOTE(setDConst, double, Get); break; \ + case EbtFloatE2M3: PROMOTE(setDConst, double, Get); break; \ + case EbtFloatUE8M0: PROMOTE(setDConst, double, Get); break; \ + case EbtFloatMXINT8: PROMOTE(setDConst, double, Get); break; \ case EbtFloat16: PROMOTE(setDConst, double, Get); break; \ case EbtFloat: PROMOTE(setDConst, double, Get); break; \ case EbtDouble: PROMOTE(setDConst, double, Get); break; \ @@ -3933,6 +4039,11 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC case EbtBFloat16: TO_ALL(getDConst); break; case EbtFloatE5M2: TO_ALL(getDConst); break; case EbtFloatE4M3: TO_ALL(getDConst); break; + case EbtFloatE2M1: TO_ALL(getDConst); break; + case EbtFloatE3M2: TO_ALL(getDConst); break; + case EbtFloatE2M3: TO_ALL(getDConst); break; + case EbtFloatUE8M0: TO_ALL(getDConst); break; + case EbtFloatMXINT8: TO_ALL(getDConst); break; case EbtDouble: TO_ALL(getDConst); break; case EbtInt8: TO_ALL(getI8Const); break; case EbtInt16: TO_ALL(getI16Const); break; diff --git a/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp b/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp index 45ada17db..e5c9d8656 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp @@ -313,6 +313,11 @@ void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int error(loc, "", "[", "cooperative vector index out of range '%d'", index); index = type.computeNumComponents() - 1; } + } else if (type.isLongVector()) { + if (!type.hasSpecConstantVectorComponents() && index >= type.computeNumComponents()) { + error(loc, "", "[", "vector index out of range '%d'", index); + index = type.computeNumComponents() - 1; + } } } @@ -537,6 +542,7 @@ void TParseContextBase::parseSwizzleSelector(const TSourceLoc& loc, const TStrin exyzw, ergba, estpq, + ebadswizzle, } fieldSet[MaxSwizzleSelectors]; // Decode the swizzle string. @@ -596,13 +602,19 @@ void TParseContextBase::parseSwizzleSelector(const TSourceLoc& loc, const TStrin break; default: - error(loc, "unknown swizzle selection", compString.c_str(), ""); + fieldSet[i] = ebadswizzle; break; } } // Additional error checking. for (int i = 0; i < selector.size(); ++i) { + if (fieldSet[i] == ebadswizzle) { + error(loc, "unknown swizzle selection", compString.c_str(), ""); + selector.resize(i); + break; + } + if (selector[i] >= vecSize) { error(loc, "vector swizzle selection out of range", compString.c_str(), ""); selector.resize(i); @@ -694,7 +706,7 @@ void TParseContextBase::growAtomicCounterBlock(int binding, const TSourceLoc& lo blockQualifier.storage = EvqBuffer; char charBuffer[512]; - if (binding != TQualifier::layoutBindingEnd) { + if (binding != TQualifier::layoutNotSet) { snprintf(charBuffer, 512, "%s_%d", getAtomicCounterBlockName(), binding); } else { snprintf(charBuffer, 512, "%s_0", getAtomicCounterBlockName()); diff --git a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp index 698bb8b61..9ccd91f1a 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp @@ -5,6 +5,7 @@ // Copyright (C) 2017, 2019 ARM Limited. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // Modifications Copyright (C) 2024 Ravi Prakash Singh. +// Modifications Copyright (C) 2026 Valve Corporation. // // All rights reserved. // @@ -418,30 +419,47 @@ void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& warn(loc, "not implemented", "#pragma once", ""); } else if (tokens[0].compare("glslang_binary_double_output") == 0) { intermediate.setBinaryDoubleOutput(); - } else if (spvVersion.spv > 0 && tokens[0].compare("STDGL") == 0 && - tokens[1].compare("invariant") == 0 && tokens[3].compare("all") == 0) { - intermediate.setInvariantAll(); - // Set all builtin out variables invariant if declared - setInvariant(loc, "gl_Position"); - setInvariant(loc, "gl_PointSize"); - setInvariant(loc, "gl_ClipDistance"); - setInvariant(loc, "gl_CullDistance"); - setInvariant(loc, "gl_TessLevelOuter"); - setInvariant(loc, "gl_TessLevelInner"); - setInvariant(loc, "gl_PrimitiveID"); - setInvariant(loc, "gl_Layer"); - setInvariant(loc, "gl_ViewportIndex"); - setInvariant(loc, "gl_FragDepth"); - setInvariant(loc, "gl_SampleMask"); - setInvariant(loc, "gl_ClipVertex"); - setInvariant(loc, "gl_FrontColor"); - setInvariant(loc, "gl_BackColor"); - setInvariant(loc, "gl_FrontSecondaryColor"); - setInvariant(loc, "gl_BackSecondaryColor"); - setInvariant(loc, "gl_TexCoord"); - setInvariant(loc, "gl_FogFragCoord"); - setInvariant(loc, "gl_FragColor"); - setInvariant(loc, "gl_FragData"); + } else if (spvVersion.spv > 0 && tokens[0].compare("STDGL") == 0) { + // The only valid STDGL pragma is #pragma STDGL invariant(all) + if (tokens.size() > 5) + error(loc, "extra tokens", "#pragma", ""); + + if (tokens.size() < 5) { + error(loc, "truncated STDGL declaration", "#pragma", ""); + return; + } + if (tokens[2].compare("(") != 0 + && tokens[4].compare(")") != 0) + error(loc, "Invalid STDGL declaration", "#pragma", ""); + if (tokens[1].compare("invariant") == 0) { + if(tokens[3].compare("all") != 0) + error(loc, "Invalid STDGL invariant declaration:", "#pragma", "'%s' (expected 'all')", tokens[3].c_str()); + + intermediate.setInvariantAll(); + // Set all builtin out variables invariant if declared + setInvariant(loc, "gl_Position"); + setInvariant(loc, "gl_PointSize"); + setInvariant(loc, "gl_ClipDistance"); + setInvariant(loc, "gl_CullDistance"); + setInvariant(loc, "gl_TessLevelOuter"); + setInvariant(loc, "gl_TessLevelInner"); + setInvariant(loc, "gl_PrimitiveID"); + setInvariant(loc, "gl_Layer"); + setInvariant(loc, "gl_ViewportIndex"); + setInvariant(loc, "gl_FragDepth"); + setInvariant(loc, "gl_SampleMask"); + setInvariant(loc, "gl_ClipVertex"); + setInvariant(loc, "gl_FrontColor"); + setInvariant(loc, "gl_BackColor"); + setInvariant(loc, "gl_FrontSecondaryColor"); + setInvariant(loc, "gl_BackSecondaryColor"); + setInvariant(loc, "gl_TexCoord"); + setInvariant(loc, "gl_FogFragCoord"); + setInvariant(loc, "gl_FragColor"); + setInvariant(loc, "gl_FragData"); + } else { + error(loc, "Unknown STDGL declaration:", "#pragma", "%s", tokens[1].c_str()); + } } } @@ -530,6 +548,14 @@ TIntermTyped* TParseContext::handleVariable(const TSourceLoc& loc, TSymbol* symb } } + // Track use of gl_RayFlagsForceOpacityMicromap2StateEXT before the front-end + // constant fold loses the name. Referencing this built-in is the GLSL-level + // signal that the SPIR-V RayFlags bit ForceOpacityMicromap2StateKHR (0x400) + // will reach a trace / ray-query call, which requires the + // RayTracingOpacityMicromapEXT capability. + if (variable->getName() == "gl_RayFlagsForceOpacityMicromap2StateEXT") + intermediate.setUsesOpacityMicromap2StateFlag(); + if (variable->getType().getQualifier().isFrontEndConstant()) node = intermediate.addConstantUnion(variable->getConstArray(), variable->getType(), loc); else @@ -930,7 +956,8 @@ TIntermTyped* TParseContext::handleBinaryMath(const TSourceLoc& loc, const char* ((left->getType().contains16BitInt() || right->getType().contains16BitInt()) && !int16Arithmetic()) || ((left->getType().contains8BitInt() || right->getType().contains8BitInt()) && !int8Arithmetic()) || (left->getType().containsBFloat16() || right->getType().containsBFloat16()) || - (left->getType().contains8BitFloat() || right->getType().contains8BitFloat())) { + (left->getType().contains8BitFloat() || right->getType().contains8BitFloat()) || + (left->getType().containsOcpMicroscalingFloat() || right->getType().containsOcpMicroscalingFloat())) { allowed = false; } @@ -959,7 +986,8 @@ TIntermTyped* TParseContext::handleUnaryMath(const TSourceLoc& loc, const char* (childNode->getType().contains16BitInt() && !int16Arithmetic()) || (childNode->getType().contains8BitInt() && !int8Arithmetic()) || (childNode->getType().containsBFloat16()) || - (childNode->getType().contains8BitFloat())) { + (childNode->getType().contains8BitFloat()) || + (childNode->getType().containsOcpMicroscalingFloat())) { allowed = false; } @@ -1248,6 +1276,13 @@ TFunction* TParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFunct } if (!parameterTypesDiffer && prevDec->getType() != function.getType()) error(loc, "overloaded functions must have the same return type", function.getName().c_str(), ""); + + function.addFunctionControl(prevDec->getFunctionControl()); + unsigned functionControl = function.getFunctionControl(); + if (function.hasIncompatibleFunctionControl()) + error(loc, "function attributes are incompatible", function.getName().c_str(), ""); + if (!builtIn) + symbol->getAsFunction()->setFunctionControl(functionControl); } arrayObjectCheck(loc, function.getType(), "array in function return type"); @@ -1630,6 +1665,71 @@ void TParseContext::handleCoopMat2FunctionCall(const TSourceLoc& loc, const TFun { if (arguments && arguments->getAsAggregate()) { auto &sequence = arguments->getAsAggregate()->getSequence(); + + if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV && sequence.size() == 4) { + static constexpr int CM_UseAcc = 2; // == gl_MatrixUseAccumulator + static constexpr int CM_ReduceRow = 1; + static constexpr int CM_ReduceColumn = 2; + static constexpr int CM_ReduceRowAndColumn = 3; + static constexpr int CM_Reduce2x2 = 4; + + const TType& resultType = sequence[0]->getAsTyped()->getType(); + const TType& matrixType = sequence[1]->getAsTyped()->getType(); + + if (resultType.getBasicType() != matrixType.getBasicType()) { + error(loc, "input and result component types must match", fnCandidate->getName().c_str(), ""); + } + if (resultType.getCoopMatKHRuse() != CM_UseAcc || matrixType.getCoopMatKHRuse() != CM_UseAcc) { + error(loc, "input and result Use must be Accumulator", fnCandidate->getName().c_str(), ""); + } + + const TTypeParameters* resultParameters = resultType.getTypeParameters(); + const TTypeParameters* matrixParameters = matrixType.getTypeParameters(); + const TArraySizes* resultSizes = resultParameters ? resultParameters->arraySizes : nullptr; + const TArraySizes* matrixSizes = matrixParameters ? matrixParameters->arraySizes : nullptr; + const bool completeTypes = resultSizes && resultSizes->getNumDims() == 4 && + matrixSizes && matrixSizes->getNumDims() == 4; + const auto knownDimensionMismatch = [](const TArraySizes& result, int resultIndex, + const TArraySizes& matrix, int matrixIndex) { + return !result.elementEqual(matrix, resultIndex, matrixIndex) && + result.getDimNode(resultIndex) == nullptr && matrix.getDimNode(matrixIndex) == nullptr; + }; + if (!completeTypes) { + error(loc, "incomplete cooperative matrix type parameters", fnCandidate->getName().c_str(), ""); + } else if (knownDimensionMismatch(*resultSizes, 0, *matrixSizes, 0)) { + error(loc, "input and result scopes must match", fnCandidate->getName().c_str(), ""); + } + + const TIntermConstantUnion* maskConstant = sequence[2]->getAsConstantUnion(); + if (maskConstant == nullptr) { + error(loc, "reduceMask must be a constant expression", fnCandidate->getName().c_str(), ""); + } else { + const int mask = maskConstant->getConstArray()[0].getIConst(); + if (mask != CM_ReduceRow && mask != CM_ReduceColumn && + mask != CM_ReduceRowAndColumn && mask != CM_Reduce2x2) { + error(loc, "reduceMask must be a valid cooperative matrix reduction value", + fnCandidate->getName().c_str(), ""); + } else if (completeTypes) { + if (mask == CM_ReduceRow && knownDimensionMismatch(*resultSizes, 1, *matrixSizes, 1)) { + error(loc, "result rows must match input rows for a row reduction", + fnCandidate->getName().c_str(), ""); + } else if (mask == CM_ReduceColumn && knownDimensionMismatch(*resultSizes, 2, *matrixSizes, 2)) { + error(loc, "result columns must match input columns for a column reduction", + fnCandidate->getName().c_str(), ""); + } else if (mask == CM_Reduce2x2 && + resultSizes->getDimNode(1) == nullptr && resultSizes->getDimNode(2) == nullptr && + matrixSizes->getDimNode(1) == nullptr && matrixSizes->getDimNode(2) == nullptr && + (static_cast(resultSizes->getDimSize(1)) * 2 != + static_cast(matrixSizes->getDimSize(1)) || + static_cast(resultSizes->getDimSize(2)) * 2 != + static_cast(matrixSizes->getDimSize(2)))) { + error(loc, "result rows and columns must be half the input rows and columns for a 2x2 reduction", + fnCandidate->getName().c_str(), ""); + } + } + } + } + for (uint32_t i = 0; i < sequence.size(); ++i) { auto param = sequence[i]; if (param->getAsTyped()->getBasicType() == EbtFunction) { @@ -1654,6 +1754,10 @@ void TParseContext::handleCoopMat2FunctionCall(const TSourceLoc& loc, const TFun // error checking reduce function has matching parameters if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV) { const TFunction* combineOp = symbolTable.find(param->getAsSymbolNode()->getMangledName())->getAsFunction(); + const TType& matrixType = sequence[1]->getAsTyped()->getType(); + const auto isMatrixComponentType = [&matrixType](const TType& type) { + return type.getBasicType() == matrixType.getBasicType() && type.isScalar() && !type.isCoopMat(); + }; if (combineOp->getParamCount() != 2) { error(loc, "must have two parameters", param->getAsSymbolNode()->getMangledName().c_str(), ""); @@ -1661,11 +1765,11 @@ void TParseContext::handleCoopMat2FunctionCall(const TSourceLoc& loc, const TFun for (int i = 0; i < combineOp->getParamCount(); ++i) { const TParameter& arg = (*combineOp)[i]; - if (sequence[1]->getAsTyped()->getType().getBasicType() != arg.type->getBasicType()) { + if (!isMatrixComponentType(*arg.type)) { error(loc, "parameter types must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), ""); } } - if (sequence[1]->getAsTyped()->getType().getBasicType() != combineOp->getType().getBasicType()) { + if (!isMatrixComponentType(combineOp->getType())) { error(loc, "return type must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), ""); } } @@ -1673,32 +1777,49 @@ void TParseContext::handleCoopMat2FunctionCall(const TSourceLoc& loc, const TFun // error checking perelement op has correct parameters if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV) { const TFunction* elemOp = symbolTable.find(param->getAsSymbolNode()->getMangledName())->getAsFunction(); + const TType& matrixType = sequence[1]->getAsTyped()->getType(); + const auto isMatrixComponentType = [&matrixType](const TType& type) { + return type.getBasicType() == matrixType.getBasicType() && type.isScalar() && !type.isCoopMat(); + }; - if (sequence[1]->getAsTyped()->getType() != sequence[0]->getAsTyped()->getType()) { + if (matrixType != sequence[0]->getAsTyped()->getType()) { error(loc, "cooperative matrix input and result types must match", "", ""); } if (elemOp->getParamCount() < 3) { error(loc, "not enough parameters", param->getAsSymbolNode()->getMangledName().c_str(), ""); } else if (elemOp->getParamCount() != (int)sequence.size()) { - error(loc, "number of parameters must match call to coopMatPerElementNV", param->getAsSymbolNode()->getMangledName().c_str(), ""); + error(loc, "number of parameters must match call to cooperative matrix per-element operation", param->getAsSymbolNode()->getMangledName().c_str(), ""); } else { - if ((*elemOp)[0].type->getBasicType() != EbtUint || (*elemOp)[1].type->getBasicType() != EbtUint) { + if ((*elemOp)[0].type->getBasicType() != EbtUint || !(*elemOp)[0].type->isScalar() || + (*elemOp)[0].type->isCoopMat() || + (*elemOp)[1].type->getBasicType() != EbtUint || !(*elemOp)[1].type->isScalar() || + (*elemOp)[1].type->isCoopMat()) { error(loc, "row/column parameters must be uint32_t", param->getAsSymbolNode()->getMangledName().c_str(), ""); } const TParameter& matArg = (*elemOp)[2]; - if (sequence[1]->getAsTyped()->getType().getBasicType() != matArg.type->getBasicType()) { + if (!isMatrixComponentType(*matArg.type)) { error(loc, "third parameter must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), ""); } for (int i = 3; i < elemOp->getParamCount(); ++i) { const TParameter& arg = (*elemOp)[i]; - if (sequence[i]->getAsTyped()->getType().getBasicType() != arg.type->getBasicType()) { + const TType& operandType = sequence[i]->getAsTyped()->getType(); + if (operandType.isCoopMat()) { + if (operandType != matrixType) { + error(loc, "optional cooperative matrix types must match the input matrix type", + param->getAsSymbolNode()->getMangledName().c_str(), ""); + } + if (!isMatrixComponentType(*arg.type)) { + error(loc, "parameters corresponding to cooperative matrices must match the matrix component type", + param->getAsSymbolNode()->getMangledName().c_str(), ""); + } + } else if (operandType != *arg.type) { error(loc, "parameter types must match or be cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), ""); } } - if (sequence[1]->getAsTyped()->getType().getBasicType() != elemOp->getType().getBasicType()) { + if (!isMatrixComponentType(elemOp->getType())) { error(loc, "return type must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), ""); } } @@ -1800,6 +1921,7 @@ void TParseContext::handleCoopMat2FunctionCall(const TSourceLoc& loc, const TFun fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV || fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV || fnCandidate->getBuiltInOp() == EOpCooperativeMatrixTransposeNV || + fnCandidate->getBuiltInOp() == EOpCooperativeMatrixGetCoordinateEXT || fnCandidate->getBuiltInOp() == EOpCreateTensorLayoutNV || fnCandidate->getBuiltInOp() == EOpTensorLayoutSetDimensionNV || fnCandidate->getBuiltInOp() == EOpTensorLayoutSetBlockSizeNV || @@ -1894,6 +2016,7 @@ void TParseContext::handleCoopMat2FunctionCall(const TSourceLoc& loc, const TFun } else if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV || fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV || fnCandidate->getBuiltInOp() == EOpCooperativeMatrixTransposeNV || + fnCandidate->getBuiltInOp() == EOpCooperativeMatrixGetCoordinateEXT || fnCandidate->getBuiltInOp() == EOpTensorLayoutSetDimensionNV || fnCandidate->getBuiltInOp() == EOpTensorLayoutSetBlockSizeNV || fnCandidate->getBuiltInOp() == EOpTensorLayoutSetStrideNV || @@ -2815,6 +2938,8 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& break; case EOpBarrier: + case EOpControlBarrierArriveEXT: + case EOpControlBarrierWaitEXT: storageClassSemantics = (*argp)[2]->getAsConstantUnion()->getConstArray()[0].getIConst(); semantics = (*argp)[3]->getAsConstantUnion()->getConstArray()[0].getIConst(); break; @@ -2866,6 +2991,23 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& fnCandidate.getName().c_str(), ""); } + if (storageClassSemantics) { + if (callNode.getOp() == EOpControlBarrierArriveEXT && + (semantics & ~gl_SemanticsMakeAvailable) != gl_SemanticsRelease) { + error(loc, + "Semantics must be gl_SemanticsRelease (optionally with gl_SemanticsMakeAvailable) when used " + "with non-zero storage class semantics", + fnCandidate.getName().c_str(), ""); + } + if (callNode.getOp() == EOpControlBarrierWaitEXT && + (semantics & ~gl_SemanticsMakeVisible) != gl_SemanticsAcquire) { + error(loc, + "Semantics must be gl_SemanticsAcquire (optionally with gl_SemanticsMakeVisible) when used " + "with non-zero storage class semantics", + fnCandidate.getName().c_str(), ""); + } + } + if (((semantics & gl_SemanticsMakeAvailable) && !(semantics & (gl_SemanticsRelease | gl_SemanticsAcquireRelease))) || ((semantics2 & gl_SemanticsMakeAvailable) && @@ -2912,6 +3054,16 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& fnCandidate.getName().c_str(), ""); } + if ((callNode.getOp() == EOpControlBarrierArriveEXT) && ((semantics & gl_SemanticsVolatile) != 0)) { + error(loc, "gl_SemanticsVolatile must not be used with controlBarrierArrive", + fnCandidate.getName().c_str(), ""); + } + + if ((callNode.getOp() == EOpControlBarrierWaitEXT) && ((semantics & gl_SemanticsVolatile) != 0)) { + error(loc, "gl_SemanticsVolatile must not be used with controlBarrierWait", + fnCandidate.getName().c_str(), ""); + } + if (callNode.getOp() == EOpAtomicCompSwap || callNode.getOp() == EOpImageAtomicCompSwap) { if (semantics2 & (gl_SemanticsRelease | gl_SemanticsAcquireRelease)) { error(loc, "semUnequal must not be gl_SemanticsRelease or gl_SemanticsAcquireRelease", @@ -2946,18 +3098,37 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& // // Assumes there has been a semantically correct match to a built-in function prototype. // -void TParseContext::requireDerivativeLayout(const TSourceLoc& loc, const char* featureDesc) +void TParseContext::requireDerivativeLayout(const TSourceLoc& loc, const char* featureDesc, bool isDerivativeOp) { if (language != EShLangCompute && language != EShLangTask && language != EShLangMesh) return; - if (language == EShLangCompute) { - const char* const derivativeExts[] = { E_GL_NV_compute_shader_derivatives, E_GL_KHR_compute_shader_derivatives }; - requireExtensions(loc, 2, derivativeExts, featureDesc); - } else { - requireExtensions(loc, 1, &E_GL_KHR_compute_shader_derivatives, featureDesc); + // Prior to the compute shader derivatives extensions: + // - texture operations using implicit derivatives could be treated as if + // the base level of detail was zero. If neither of the compute shader + // derivative extensions are enabled, we preserve that behavior to + // avoid breaking existing shaders that may rely on that + // - derivative operations (such as dFdx()) were only allowed in fragment + // shaders, and can only be used in other stages if one of the + // extensions are enabled. + + if (isDerivativeOp) { + // GL_NV_compute_shader_derivative added support for derivative operations + // in compute shaders (only). + // GL_KHR_compute_shader_derivatives extended this to + // task and mesh shaders. + + if (language == EShLangCompute) { + const char* const derivativeExts[] = {E_GL_NV_compute_shader_derivatives, + E_GL_KHR_compute_shader_derivatives}; + requireExtensions(loc, 2, derivativeExts, featureDesc); + } else { + requireExtensions(loc, 1, &E_GL_KHR_compute_shader_derivatives, featureDesc); + } } + // GL_KHR_compute_shader_derivatives requires a derivative group mode to + // be specified. GL_NV_compute_shader_derivative does not. if (extensionTurnedOn(E_GL_KHR_compute_shader_derivatives) && !intermediate.hasLayoutDerivativeModeNone()) error(loc, "requires a derivative_group_quads* or derivative_group_linear* layout qualifier", featureDesc, ""); @@ -3006,7 +3177,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan case EOpFwidth: case EOpFwidthFine: case EOpFwidthCoarse: - requireDerivativeLayout(loc, fnCandidate.getName().c_str()); + requireDerivativeLayout(loc, fnCandidate.getName().c_str(), true); break; case EOpTextureGather: @@ -3088,11 +3259,63 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan break; } + case EOpTextureGather4x1QCOM: + case EOpTextureGatherV2QCOM: + case EOpTextureGatherH2QCOM: + case EOpTextureGatherDQCOM: + case EOpTextureGather4x1OffsetQCOM: + case EOpTextureGatherV2OffsetQCOM: + case EOpTextureGatherH2OffsetQCOM: + case EOpTextureGatherDOffsetQCOM: + { + featureString = fnCandidate.getName(); + featureString += "(...)"; + feature = featureString.c_str(); + profileRequires(loc, EEsProfile, 310, nullptr, feature); + int compArg = -1; // track which argument, if any, is the constant component argument + const int numTexGatherExts = 1; + const char* texGatherExts[numTexGatherExts] = { E_GL_QCOM_image_processing3 }; + switch (callNode.getOp()) { + case EOpTextureGather4x1QCOM: + case EOpTextureGatherV2QCOM: + case EOpTextureGatherH2QCOM: + case EOpTextureGatherDQCOM: + profileRequires(loc, ~EEsProfile, 460, numTexGatherExts, texGatherExts, feature); + // More than two arguments needs gpu_shader5, and rectangular or shadow needs gpu_shader5, + // otherwise, need GL_ARB_texture_gather. + if (fnCandidate.getParamCount() > 2) { + compArg = 2; + } + break; + case EOpTextureGather4x1OffsetQCOM: + case EOpTextureGatherV2OffsetQCOM: + case EOpTextureGatherH2OffsetQCOM: + case EOpTextureGatherDOffsetQCOM: + profileRequires(loc, ~EEsProfile, 460, numTexGatherExts, texGatherExts, feature); + if (fnCandidate.getParamCount() > 3) { + compArg = 3; + } + break; + default: + break; + } + + if (compArg > 0 && compArg < fnCandidate.getParamCount()) { + if ((*argp)[compArg]->getAsConstantUnion()) { + int value = (*argp)[compArg]->getAsConstantUnion()->getConstArray()[0].getIConst(); + if (value < 0 || value > 3) + error(loc, "must be 0, 1, 2, or 3:", feature, "component argument"); + } else + error(loc, "must be a compile-time constant:", feature, "component argument"); + } + break; + } + case EOpTexture: case EOpTextureLod: { if (callNode.getOp() == EOpTexture && fnCandidate.getParamCount() > 2) - requireDerivativeLayout(loc, (fnCandidate.getName() + " with bias argument").c_str()); + requireDerivativeLayout(loc, (fnCandidate.getName() + " with bias argument").c_str(), false); if ((fnCandidate.getParamCount() > 2) && ((*argp)[1]->getAsTyped()->getType().getBasicType() == EbtFloat) && ((*argp)[1]->getAsTyped()->getType().getVectorSize() == 4) && fnCandidate[0].type->getSampler().shadow) { @@ -3124,7 +3347,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan case EOpTextureProj: case EOpSparseTexture: case EOpTextureQueryLod: - requireDerivativeLayout(loc, fnCandidate.getName().c_str()); + requireDerivativeLayout(loc, fnCandidate.getName().c_str(), false); break; case EOpSparseTextureGather: @@ -3210,7 +3433,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan { if (callNode.getOp() == EOpTextureOffset || callNode.getOp() == EOpTextureProjOffset || callNode.getOp() == EOpSparseTextureOffset) - requireDerivativeLayout(loc, fnCandidate.getName().c_str()); + requireDerivativeLayout(loc, fnCandidate.getName().c_str(), false); // Handle texture-offset limits checking // Pick which argument has to hold constant offsets @@ -3315,7 +3538,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan checkConstantArgWithLocation(10, "payload number", nullptr, -1); break; case EOpTraceRayMotionNV: - checkConstantArgWithLocation(11, "payload number", nullptr, -1); + checkConstantArgWithLocation(11, "payload number", "no rayPayloadEXT/rayPayloadInEXT declared", 0); break; case EOpTraceKHR: checkConstantArgWithLocation(10, "payload number", "no rayPayloadEXT/rayPayloadInEXT declared", 0); @@ -3616,6 +3839,8 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan break; case EOpBarrier: + case EOpControlBarrierArriveEXT: + case EOpControlBarrierWaitEXT: case EOpMemoryBarrier: if (argp->size() > 0) { requireExtensions(loc, 1, &E_GL_KHR_memory_scope_semantics, fnCandidate.getName().c_str()); @@ -3724,6 +3949,49 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } } break; + case EOpCooperativeMatrixTransposeNV: + { + static constexpr int CM_UseB = 1; // == gl_MatrixUseB + static constexpr int CM_UseAcc = 2; // == gl_MatrixUseAccumulator + + auto &dstType = (*argp)[0]->getAsTyped()->getType(); + auto &srcType = (*argp)[1]->getAsTyped()->getType(); + int dstUse = dstType.getCoopMatKHRuse(); + int srcUse = srcType.getCoopMatKHRuse(); + + const TTypeParameters* dstTypeParameters = dstType.getTypeParameters(); + const TTypeParameters* srcTypeParameters = srcType.getTypeParameters(); + if (dstTypeParameters->arraySizes == nullptr || dstTypeParameters->arraySizes->getNumDims() != 4 || + srcTypeParameters->arraySizes == nullptr || srcTypeParameters->arraySizes->getNumDims() != 4) { + error(loc, "incomplete type parameters", fnCandidate.getName().c_str(), ""); + } else { + const auto knownDimensionMismatch = [](const TArraySizes& dst, int dstIndex, + const TArraySizes& src, int srcIndex) { + return !dst.elementEqual(src, dstIndex, srcIndex) && dst.getDimNode(dstIndex) == nullptr && + src.getDimNode(srcIndex) == nullptr; + }; + if (knownDimensionMismatch(*dstTypeParameters->arraySizes, 0, *srcTypeParameters->arraySizes, 0)) { + error(loc, "scope must match", fnCandidate.getName().c_str(), ""); + } + if (knownDimensionMismatch(*dstTypeParameters->arraySizes, 1, *srcTypeParameters->arraySizes, 2) || + knownDimensionMismatch(*dstTypeParameters->arraySizes, 2, *srcTypeParameters->arraySizes, 1)) { + error(loc, "rows/columns must be swapped", fnCandidate.getName().c_str(), ""); + } + } + if (srcUse != CM_UseAcc) { + error(loc, "Cooperative matrix source Use must be Accumulator", fnCandidate.getName().c_str(), ""); + } + if (extensionTurnedOn(E_GL_EXT_cooperative_matrix_maintenance1)) { + if (dstUse == CM_UseAcc) { + error(loc, "Cooperative matrix result Use must not be Accumulator", fnCandidate.getName().c_str(), ""); + } + } else { + if (dstUse != CM_UseB) { + error(loc, "Cooperative matrix result Use must be B", fnCandidate.getName().c_str(), ""); + } + } + } + break; default: break; @@ -4553,6 +4821,10 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T } arrayArg = true; } + if (function[arg].type->getBasicType() == EbtString) { + error(loc, "cannot convert a string", constructorString.c_str(), ""); + return true; + } if (constructingMatrix && function[arg].type->isMatrix()) matrixInMatrix = true; @@ -4627,6 +4899,36 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T if (type.isVector() && function.getParamCount() != 1) requireInt8Arithmetic(loc, constructorString.c_str(), "8-bit vectors only take vector types"); break; + case EOpConstructFloatE2M1: + case EOpConstructFloatE2M1Vec2: + case EOpConstructFloatE2M1Vec3: + case EOpConstructFloatE2M1Vec4: + case EOpConstructFloatE3M2: + case EOpConstructFloatE3M2Vec2: + case EOpConstructFloatE3M2Vec3: + case EOpConstructFloatE3M2Vec4: + case EOpConstructFloatE2M3: + case EOpConstructFloatE2M3Vec2: + case EOpConstructFloatE2M3Vec3: + case EOpConstructFloatE2M3Vec4: + case EOpConstructFloatUE8M0: + case EOpConstructFloatUE8M0Vec2: + case EOpConstructFloatUE8M0Vec3: + case EOpConstructFloatUE8M0Vec4: + case EOpConstructFloatMXINT8: + case EOpConstructFloatMXINT8Vec2: + case EOpConstructFloatMXINT8Vec3: + case EOpConstructFloatMXINT8Vec4: + if (!constType || specConstType) { + for (int i = 0; i < function.getParamCount(); ++i) { + TIntermNode* arg = function.getParamCount() == 1 ? node : node->getAsAggregate()->getSequence()[i]; + if (arg->getAsTyped()->getBasicType() != type.getBasicType()) { + error(loc, "constructor argument must be a non-spec constant", constructorString.c_str(), ""); + return true; + } + } + } + break; default: break; } @@ -4800,17 +5102,42 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T } TIntermTyped* typed = node->getAsTyped(); - if (type.isCoopMat() && typed->getType().isCoopMat() && - ((extensionTurnedOn(E_GL_NV_cooperative_matrix2) && !type.sameCoopMatShape(typed->getType())) || - (!extensionTurnedOn(E_GL_NV_cooperative_matrix2) && !type.sameCoopMatShapeAndUse(typed->getType())))) { - error(loc, "Cooperative matrix type parameters mismatch", constructorString.c_str(), ""); - return true; - } - if (typed == nullptr) { error(loc, "constructor argument does not have a type", constructorString.c_str(), ""); return true; } + + if (type.isCoopMat() && typed->getType().isCoopMat()) { + static constexpr int CM_UseA = 0; // == gl_MatrixUseA + static constexpr int CM_UseB = 1; // == gl_MatrixUseB + static constexpr int CM_UseAcc = 2; // == gl_MatrixUseAccumulator + + int dstUse = type.getCoopMatKHRuse(); + int srcUse = typed->getType().getCoopMatKHRuse(); + + if (extensionTurnedOn(E_GL_EXT_cooperative_matrix_maintenance1)) { + bool allowedConversion = srcUse == dstUse || + (srcUse == CM_UseAcc && (dstUse == CM_UseA || dstUse == CM_UseB)) || + (dstUse == CM_UseAcc && (srcUse == CM_UseA || srcUse == CM_UseB)); + if (!type.sameCoopMatShape(typed->getType()) || !allowedConversion) { + error(loc, "Cooperative matrix type parameters mismatch", constructorString.c_str(), ""); + return true; + } + } else if (extensionTurnedOn(E_GL_NV_cooperative_matrix2)) { + bool allowedConversion = srcUse == dstUse || + (srcUse == CM_UseAcc && (dstUse == CM_UseA || dstUse == CM_UseB)); + if (!type.sameCoopMatShape(typed->getType()) || !allowedConversion) { + error(loc, "Cooperative matrix type parameters mismatch", constructorString.c_str(), ""); + return true; + } + } else { + if (!type.sameCoopMatShapeAndUse(typed->getType())) { + error(loc, "Cooperative matrix type parameters mismatch", constructorString.c_str(), ""); + return true; + } + } + } + if (op != EOpConstructStruct && op != EOpConstructNonuniform && typed->getBasicType() == EbtSampler) { if (op == EOpConstructUVec2 && extensionTurnedOn(E_GL_ARB_bindless_texture)) { intermediate.setBindlessTextureMode(currentCaller, AstRefTypeFunc); @@ -5169,7 +5496,8 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali if (qualifier.storage == EvqBuffer && publicType.basicType != EbtBlock && - !qualifier.hasBufferReference()) + !qualifier.hasBufferReference() && + !qualifier.isBufferType()) error(loc, "buffers can be declared only as blocks", "buffer", ""); if (qualifier.storage != EvqVaryingIn && publicType.basicType == EbtDouble && @@ -6036,6 +6364,7 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS (identifier == "gl_FragStencilRefARB" && (nonEsRedecls && version >= 140) && language == EShLangFragment) || identifier == "gl_SampleMask" || + identifier == "gl_EnableOpacityMicromapEXT" || identifier == "gl_Layer" || identifier == "gl_PrimitiveIndicesNV" || identifier == "gl_PrimitivePointIndicesEXT" || @@ -6156,6 +6485,25 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS symbolQualifier.layoutViewportRelative = qualifier.layoutViewportRelative; symbolQualifier.layoutSecondaryViewportRelativeOffset = qualifier.layoutSecondaryViewportRelativeOffset; } + else if (identifier == "gl_EnableOpacityMicromapEXT") { + // GL_EXT_opacity_micromap_ray_query_mode. This branch handles the full-redeclaration form + // const bool gl_EnableOpacityMicromapEXT = ; + // which sets the built-in's value (emitted as OpConstantTrue/OpConstantFalse). The + // specialization-constant form is the bare "layout(constant_id = N) gl_EnableOpacityMicromapEXT;" + // (handled in addQualifierToExisting); per the extension it is not valid to restate the type + // or specify a value together with constant_id. + requireExtensions(loc, 1, &E_GL_EXT_opacity_micromap_ray_query_mode, "gl_EnableOpacityMicromapEXT redeclaration"); + if (qualifier.hasSpecConstantId()) + error(loc, "cannot restate the type or specify a value with constant_id; use " + "'layout(constant_id = N) gl_EnableOpacityMicromapEXT;'", "redeclaration", + symbol->getName().c_str()); + else if (qualifier.storage != EvqConst) + error(loc, "can only be redeclared as 'const bool gl_EnableOpacityMicromapEXT = ;' " + "or 'layout(constant_id = N) gl_EnableOpacityMicromapEXT;'", "redeclaration", + symbol->getName().c_str()); + // For the valid 'const bool = ;' form the value is captured from the initializer + // after it is processed (see declareVariable); nothing else to do to the symbol's qualifier here. + } // TODO: semantics quality: separate smooth from nothing declared, then use IsInterpolation for several tests above @@ -6460,9 +6808,12 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali void TParseContext::nestedBlockCheck(const TSourceLoc& loc, const bool allowedInnerStruct) { - if ((!allowedInnerStruct && structNestingLevel > 0) || - (allowedInnerStruct && structNestingLevel <= 0) || - blockNestingLevel > 0) + if (allowedInnerStruct) { + if ((structNestingLevel <= 0 && blockNestingLevel <= 0) || + (structNestingLevel > 0 && blockNestingLevel > 0) || + blockNestingLevel > 1) + error(loc, "cannot nest a block definition inside a structure or block", "", ""); + } else if (structNestingLevel > 0 || blockNestingLevel > 0) error(loc, "cannot nest a block definition inside a structure or block", "", ""); ++blockNestingLevel; } @@ -6545,11 +6896,11 @@ void TParseContext::structTypeCheck(const TSourceLoc& /*loc*/, TPublicType& publ if (memberQualifier.isAuxiliary() || memberQualifier.isInterpolation() || (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal && - !memberQualifier.layoutDescriptorHeap && !memberQualifier.layoutDescriptorInnerBlock)) + !memberQualifier.layoutDescriptorHeap && !memberQualifier.isBufferType())) error(memberLoc, "cannot use storage or interpolation qualifiers on structure members", typeList[member].type->getFieldName().c_str(), ""); if (memberQualifier.isMemory()) error(memberLoc, "cannot use memory qualifiers on structure members", typeList[member].type->getFieldName().c_str(), ""); - if (memberQualifier.hasLayout()) { + if (memberQualifier.hasLayout() && !memberQualifier.isBufferType()) { error(memberLoc, "cannot use layout qualifiers on structure members", typeList[member].type->getFieldName().c_str(), ""); memberQualifier.clearLayout(); } @@ -6878,6 +7229,12 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi intermediate.setUsePhysicalStorageBuffer(); return; } + if (id == "buffer_type") { + requireVulkan(loc, "buffer_type"); + requireExtensions(loc, 1, &E_GL_EXT_structured_descriptor_heap, "buffer_type"); + publicType.qualifier.layoutDescriptorBufferType = true; + return; + } if (id == "bindless_sampler") { requireExtensions(loc, 1, &E_GL_ARB_bindless_texture, "bindless_sampler"); publicType.qualifier.layoutBindlessSampler = true; @@ -7202,6 +7559,9 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi const char* feature = "layout-id value"; const char* nonLiteralFeature = "non-literal layout-id value"; + if (id != "heap_offset" && !node->getQualifier().isConstant()) + error(loc, "constant expression required", "", ""); + integerCheck(node, feature); const TIntermConstantUnion* constUnion = node->getAsConstantUnion(); int value; @@ -7268,7 +7628,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi error(loc, "needs a literal integer", "location", ""); return; } else if (id == "set") { - if ((unsigned int)value >= TQualifier::layoutSetEnd) + if (!relaxSetBindingLimits() && value >= static_cast(TQualifier::layoutSetEnd)) error(loc, "set is too large", id.c_str(), ""); else publicType.qualifier.layoutSet = value; @@ -7280,7 +7640,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi } else if (id == "binding") { profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, "binding"); profileRequires(loc, EEsProfile, 310, nullptr, "binding"); - if ((unsigned int)value >= TQualifier::layoutBindingEnd) + if (!relaxSetBindingLimits() && value >= static_cast(TQualifier::layoutBindingEnd)) error(loc, "binding is too large", id.c_str(), ""); else publicType.qualifier.layoutBinding = value; @@ -7431,11 +7791,31 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi return; } + if (id == "descriptor_size") { + requireExtensions(loc, 1, &E_GL_EXT_descriptor_heap, "descriptor_size"); + requireExtensions(loc, 1, &E_GL_EXT_structured_descriptor_heap, "descriptor_size"); + requireVulkan(loc, "descriptor_size"); + if (nonLiteral) + error(loc, "needs a literal integer", "descriptor_size", ""); + else + publicType.qualifier.layoutDescriptorSize = uint32_t(value); + return; + } + if (id == "heap_offset") { requireExtensions(loc, 1, &E_GL_EXT_descriptor_heap, "heap_offset"); requireExtensions(loc, 1, &E_GL_EXT_structured_descriptor_heap, "heap_offset"); requireVulkan(loc, "heap_offset"); - publicType.qualifier.layoutHeapOffset = uint32_t(value); + if (nonLiteral) { + if (!node->getQualifier().isConstant() && !node->getQualifier().isUniform() && + !node->getQualifier().isReadOnly()) { + error(loc, "must be a literal or read-only variable value", "heap_offset", ""); + return; + } + publicType.qualifier.layoutHeapOffsetNode = const_cast(node); + } else { + publicType.qualifier.layoutHeapOffset = uint32_t(value); + } return; } @@ -7568,17 +7948,21 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi return; } if (spvVersion.spv != 0) { - if (id == "local_size_x_id") { - publicType.shaderQualifiers.localSizeSpecId[0] = value; - return; - } - if (id == "local_size_y_id") { - publicType.shaderQualifiers.localSizeSpecId[1] = value; - return; - } - if (id == "local_size_z_id") { - publicType.shaderQualifiers.localSizeSpecId[2] = value; - return; + static const char * const specIds[] = { + "local_size_x_id", + "local_size_y_id", + "local_size_z_id", + }; + + for (std::size_t i = 0; i < std::size(specIds); i++) { + if (id == specIds[i]) { + if (spvVersion.spv >= glslang::EShTargetSpv_1_2) + publicType.shaderQualifiers.localSizeSpecId[i] = value; + else + error(loc, "requires SPIR-V 1.2", id.c_str(), ""); + + return; + } } } } @@ -7663,7 +8047,7 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie dst.layoutOffset = src.layoutOffset; if (src.hasSet()) dst.layoutSet = src.layoutSet; - if (src.layoutBinding != TQualifier::layoutBindingEnd) + if (src.hasBinding()) dst.layoutBinding = src.layoutBinding; if (src.hasSpecConstantId()) @@ -7681,17 +8065,23 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie dst.layoutAttachment = src.layoutAttachment; if (src.layoutDescriptorHeap) dst.layoutDescriptorHeap = true; - if (src.layoutDescriptorInnerBlock) - dst.layoutDescriptorInnerBlock = true; + if (src.descriptorHeapDescriptorNode) + dst.descriptorHeapDescriptorNode = true; if (src.layoutDescriptorStride != TQualifier::layoutDescriptorStrideEnd) dst.layoutDescriptorStride = src.layoutDescriptorStride; + if (src.layoutDescriptorSize != TQualifier::layoutDescriptorSizeEnd) + dst.layoutDescriptorSize = src.layoutDescriptorSize; if (src.layoutHeapOffset != 0) dst.layoutHeapOffset = src.layoutHeapOffset; + if (src.layoutHeapOffsetNode != nullptr) + dst.layoutHeapOffsetNode = src.layoutHeapOffsetNode; if (src.layoutPushConstant) dst.layoutPushConstant = true; if (src.layoutBufferReference) dst.layoutBufferReference = true; + if (src.layoutDescriptorBufferType) + dst.layoutDescriptorBufferType = true; if (src.layoutPassthrough) dst.layoutPassthrough = true; @@ -7759,7 +8149,8 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb case EvqVaryingOut: if (!type.getQualifier().isTaskMemory() && !type.getQualifier().hasSpirvDecorate() && (type.getBasicType() != EbtBlock || - (!(*type.getStruct())[0].type->getQualifier().hasLocation() && + (type.getStruct()->size() > 0 && + !(*type.getStruct())[0].type->getQualifier().hasLocation() && (*type.getStruct())[0].type->getQualifier().builtIn == EbvNone))) error(loc, "SPIR-V requires location for user input/output", "location", ""); break; @@ -7963,7 +8354,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : ""); } if (type.isAtomic() && !spvVersion.vulkanRelaxed) { - if (qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) { + if (qualifier.layoutBinding >= resources.maxAtomicCounterBindings) { error(loc, "atomic_uint binding is too large; see gl_MaxAtomicCounterBindings", "binding", ""); return; } @@ -8057,7 +8448,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) if (extensionTurnedOn(E_GL_EXT_shader_tile_image)) error(loc, "cannot be used with GL_EXT_shader_tile_image enabled", type.getSampler().getString().c_str(), ""); - if (! qualifier.hasAttachment()) + if (!qualifier.hasAttachment() && (type.isArray() || !extensionTurnedOn(E_GL_EXT_optional_input_attachment_index))) error(loc, "requires an input_attachment_index layout qualifier", "subpass", ""); } else { if (qualifier.hasAttachment()) @@ -8087,6 +8478,11 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: break; default: error(loc, "cannot be applied to this type", "constant_id", ""); @@ -8218,6 +8614,10 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier if (qualifier.storage != EvqBuffer) error(loc, "can only be used with buffer", "buffer_reference", ""); } + if (qualifier.isBufferType()) { + if (qualifier.storage != EvqUniform && qualifier.storage != EvqBuffer) + error(loc, "can only be used with uniform or buffer", "buffer_type", ""); + } if (qualifier.isShaderRecord()) { if (qualifier.storage != EvqBuffer) error(loc, "can only be used with a buffer", "shaderRecordNV", ""); @@ -8250,7 +8650,7 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier if (qualifier.layoutDescriptorStride != TQualifier::layoutDescriptorStrideEnd && !qualifier.layoutDescriptorHeap) error(loc, "must specify 'descriptor_heap' to use 'descriptor_stride'", "descriptor_stride", ""); - if (qualifier.layoutHeapOffset != 0 && !qualifier.layoutDescriptorHeap && + if ((qualifier.layoutHeapOffset != 0 || qualifier.layoutHeapOffsetNode != nullptr) && !qualifier.layoutDescriptorHeap && qualifier.storage != EvqSamplerHeap && qualifier.storage != EvqResourceHeap) error(loc, "must specify 'descriptor_heap' to use 'heap_offset'", "heap_offset", ""); } @@ -8393,7 +8793,11 @@ const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunct if (symbol) return symbol->getAsFunction(); } - + if (call.getName() == "coopMatPerElementEXT") { + TSymbol* symbol = symbolTable.find("coopMatPerElementEXT(", &builtIn); + if (symbol) + return symbol->getAsFunction(); + } if (call.getName() == "saturatedConvertEXT") { TSymbol* symbol = symbolTable.find("saturatedConvertEXT(", &builtIn); if (symbol) @@ -8842,7 +9246,7 @@ TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, T void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType) { if (publicType.basicType == EbtAtomicUint && publicType.qualifier.hasBinding()) { - if (publicType.qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) { + if (publicType.qualifier.layoutBinding >= resources.maxAtomicCounterBindings) { error(loc, "atomic_uint binding is too large", "binding", ""); return; } @@ -8986,7 +9390,7 @@ bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString // do some checking on the type as it was declared layoutTypeCheck(loc, type); - int bufferBinding = TQualifier::layoutBindingEnd; + int bufferBinding = TQualifier::layoutNotSet; TVariable* updatedBlock = nullptr; // Convert atomic_uint into members of a buffer block @@ -8999,7 +9403,7 @@ bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString // xxTODO: use logic from fixOffset() to apply explicit member offset bufferBinding = type.getQualifier().layoutBinding; - type.getQualifier().layoutBinding = TQualifier::layoutBindingEnd; + type.getQualifier().layoutBinding = TQualifier::layoutNotSet; type.getQualifier().explicitOffset = false; growAtomicCounterBlock(bufferBinding, loc, type, identifier, nullptr); updatedBlock = atomicCounterBuffers[bufferBinding]; @@ -9474,6 +9878,14 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut)) error(loc, "qualifier", "fp8 types not allowed as input/output", ""); + if (type.containsOcpMicroscalingFloat() && + (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut)) + error(loc, "qualifier", "microscaling types not allowed as input/output", ""); + + if (type.containsOcpMicroscalingNonByteFloat() && + (type.getQualifier().storage == EvqUniform || type.getQualifier().storage == EvqBuffer || type.getQualifier().storage == EvqShared)) + error(loc, "qualifier", "sub-byte sized types not allowed in storage class", ""); + if (type.getQualifier().storage == EvqtaskPayloadSharedEXT) intermediate.addTaskPayloadEXTCount(); if (type.getQualifier().storage == EvqShared && type.containsCoopMat()) @@ -9549,6 +9961,16 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden return nullptr; } initNode = executeInitializer(loc, initializer, variable); + + // GL_EXT_opacity_micromap_ray_query_mode: capture the value of a + // 'const bool gl_EnableOpacityMicromapEXT = ;' redeclaration so the back end can emit + // the OpacityMicromapIdKHR execution mode operand as OpConstantTrue/OpConstantFalse. The + // specialization-constant form goes through addQualifierToExisting instead. + if (identifier == "gl_EnableOpacityMicromapEXT" && !variable->getType().getQualifier().hasSpecConstantId()) { + const TConstUnionArray& constArray = variable->getConstArray(); + if (constArray.size() > 0) + intermediate.setEnableOpacityMicromapDefault(constArray[0].getBConst()); + } } // EXT_descriptor_heap @@ -9832,6 +10254,13 @@ TIntermTyped* TParseContext::convertInitializerList(const TSourceLoc& loc, const arrayType.shallowCopy(type); // sharing struct stuff is fine arrayType.copyArraySizes(*type.getArraySizes()); // but get a fresh copy of the array information, to edit below + // a nested empty initializer list ({}) has no elements to size the array or + // derive its element type from, so reject it before the getSequence()[0] read below + if (initList->getSequence().empty()) { + error(loc, "array initializer must be non-empty", "initializer list", ""); + return nullptr; + } + // edit array sizes to fill in unsized dimensions arrayType.changeOuterArraySize((int)initList->getSequence().size()); TIntermTyped* firstInit = initList->getSequence()[0]->getAsTyped(); @@ -10184,6 +10613,41 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T basicOp = EOpConstructFloatE4M3; break; + case EOpConstructFloatE2M1Vec2: + case EOpConstructFloatE2M1Vec3: + case EOpConstructFloatE2M1Vec4: + case EOpConstructFloatE2M1: + basicOp = EOpConstructFloatE2M1; + break; + + case EOpConstructFloatE3M2Vec2: + case EOpConstructFloatE3M2Vec3: + case EOpConstructFloatE3M2Vec4: + case EOpConstructFloatE3M2: + basicOp = EOpConstructFloatE3M2; + break; + + case EOpConstructFloatE2M3Vec2: + case EOpConstructFloatE2M3Vec3: + case EOpConstructFloatE2M3Vec4: + case EOpConstructFloatE2M3: + basicOp = EOpConstructFloatE2M3; + break; + + case EOpConstructFloatUE8M0Vec2: + case EOpConstructFloatUE8M0Vec3: + case EOpConstructFloatUE8M0Vec4: + case EOpConstructFloatUE8M0: + basicOp = EOpConstructFloatUE8M0; + break; + + case EOpConstructFloatMXINT8Vec2: + case EOpConstructFloatMXINT8Vec3: + case EOpConstructFloatMXINT8Vec4: + case EOpConstructFloatMXINT8: + basicOp = EOpConstructFloatMXINT8; + break; + case EOpConstructI8Vec2: case EOpConstructI8Vec3: case EOpConstructI8Vec4: @@ -10497,28 +10961,53 @@ void TParseContext::updateBindlessQualifier(TType& memberType) } } -void TParseContext::descHeapBuiltinRemap(TType* type, bool isInnerBlock) +static TBuiltInVariable getDescriptorHeapBuiltIn(const TType& type) { - if (type->isStruct()) { - TTypeList* types = type->getWritableStruct(); - for (auto typeLoc : *types) { - descHeapBuiltinRemap(typeLoc.type, isInnerBlock); - } + const TQualifier& qualifier = type.getQualifier(); + + if (qualifier.storage == EvqSamplerHeap) + return EbvSamplerHeapEXT; + + if (qualifier.storage == EvqResourceHeap) + return EbvResourceHeapEXT; + + if (type.getBasicType() == EbtSampler) { + if (type.isImage() || type.isTexture()) + return EbvResourceHeapEXT; + return EbvSamplerHeapEXT; } + if (qualifier.isUniformOrBuffer() || type.getBasicType() == EbtAccStruct) + return EbvResourceHeapEXT; + + return EbvNone; +} + +void TParseContext::descHeapBuiltinRemap(TType* type, bool rootNode) +{ auto* qualifier = &type->getQualifier(); - if (type->getBasicType() == EbtSampler) { - if (type->isImage() || type->isTexture()) - qualifier->builtIn = EbvResourceHeapEXT; - else - qualifier->builtIn = EbvSamplerHeapEXT; - qualifier->layoutDescriptorHeap = true; - } else if (qualifier->isUniformOrBuffer() || type->getBasicType() == EbtAccStruct) { - qualifier->builtIn = EbvResourceHeapEXT; - qualifier->layoutDescriptorHeap = true; - qualifier->layoutDescriptorInnerBlock = isInnerBlock; + qualifier->layoutDescriptorHeap = true; + const TBuiltInVariable heapBuiltIn = getDescriptorHeapBuiltIn(*type); + + if (rootNode) + qualifier->builtIn = heapBuiltIn; + + if (type->isStruct() && !qualifier->isUniformOrBuffer()) { + TTypeList* types = type->getWritableStruct(); + for (auto typeLoc : *types) { + descHeapBuiltinRemap(typeLoc.type, false); + } + + return; } - } + + // Only actual descriptor payload leaves get descriptorHeapDescriptorNode; + // POD heap leaves remain layoutDescriptorHeap-only. + if (type->getBasicType() == EbtSampler || + qualifier->isUniformOrBuffer() || + type->getBasicType() == EbtAccStruct) + qualifier->descriptorHeapDescriptorNode = true; +} bool TParseContext::untypedHeapCheck(TSymbol* symbol, const TType& type, const TSourceLoc& loc, const char* name) { @@ -10540,17 +11029,33 @@ bool TParseContext::untypedHeapCheck(TSymbol* symbol, const TType& type, const T "declared with a run-time sized array type.", name, ""); return false; } - if (!type.containsHeapArray()) { + if (type.getBasicType() == EbtSampler && type.getSampler().isCombined()) { + error(loc, "layout(descriptor_heap) cannot be used with combined image samplers.", + name, ""); + return false; + } + if (!type.containsHeapArray() && !isHeapStruct) { error(loc, "layout(descriptor_heap) decorated variable could only be declared as an array.", name, ""); return false; } - descHeapBuiltinRemap(&symbol->getWritableType(), isHeapStruct); + + if (isHeapStruct && type.isArray()) { + error(loc, "resourceheap / samplerheap block cannot itself be an array.", name, ""); + return false; + } + + descHeapBuiltinRemap(&symbol->getWritableType(), true); } } return true; } +static bool isResourceHeapBufferTypeMember(const TQualifier& blockQualifier, const TQualifier& memberQualifier) +{ + return blockQualifier.storage == EvqResourceHeap && memberQualifier.isBufferType(); +} + // // Do everything needed to add an interface block. Returns the declarator node if there's an instance declaration. // @@ -10573,9 +11078,17 @@ TIntermNode* TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeL TType& memberType = *typeList[member].type; TQualifier& memberQualifier = memberType.getQualifier(); const TSourceLoc& memberLoc = typeList[member].loc; - if (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal && memberQualifier.storage != currentBlockQualifier.storage) + const bool heapBufferTypeMember = + isResourceHeapBufferTypeMember(currentBlockQualifier, memberQualifier); + const bool heapBlockMember = + currentBlockQualifier.storage == EvqResourceHeap || currentBlockQualifier.storage == EvqSamplerHeap; + if (memberQualifier.layoutDescriptorHeap && !heapBlockMember) + error(memberLoc, "can only be used on resourceheap or samplerheap block members", "descriptor heap member", ""); + if (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal && + memberQualifier.storage != currentBlockQualifier.storage && !heapBufferTypeMember) error(memberLoc, "member storage qualifier cannot contradict block storage qualifier", memberType.getFieldName().c_str(), ""); - memberQualifier.storage = currentBlockQualifier.storage; + if (!heapBufferTypeMember) + memberQualifier.storage = currentBlockQualifier.storage; globalQualifierFixCheck(memberLoc, memberQualifier); inheritMemoryQualifiers(currentBlockQualifier, memberQualifier); if (currentBlockQualifier.perPrimitiveNV) @@ -10601,6 +11114,9 @@ TIntermNode* TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeL } } + if (memberQualifier.layoutDescriptorSize != TQualifier::layoutDescriptorSizeEnd && !heapBlockMember) + error(memberLoc, "can only be used on resourceheap or samplerheap block members", "descriptor_size", ""); + // For bindless texture, sampler can be declared as uniform/storage block member, if (memberType.containsOpaque() && !extensionTurnedOn(E_GL_EXT_structured_descriptor_heap)) { if (memberType.containsSampler() && extensionTurnedOn(E_GL_ARB_bindless_texture)) @@ -10614,6 +11130,9 @@ TIntermNode* TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeL if (memberType.containsCoopVec()) error(memberLoc, "member of block cannot be or contain a cooperative vector type", typeList[member].type->getFieldName().c_str(), ""); + + if (memberType.containsOcpMicroscalingNonByteFloat()) + error(memberLoc, "member of block cannot be or contain a sub-byte type", typeList[member].type->getFieldName().c_str(), ""); } // This might be a redeclaration of a built-in block. If so, redeclareBuiltinBlock() will @@ -10672,6 +11191,8 @@ TIntermNode* TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeL for (unsigned int member = 0; member < typeList.size(); ++member) { TQualifier& memberQualifier = typeList[member].type->getQualifier(); const TSourceLoc& memberLoc = typeList[member].loc; + const bool heapBufferTypeMember = + isResourceHeapBufferTypeMember(currentBlockQualifier, memberQualifier); if (memberQualifier.hasStream()) { if (defaultQualification.layoutStream != memberQualifier.layoutStream) error(memberLoc, "member cannot contradict block", "stream", ""); @@ -10686,7 +11207,7 @@ TIntermNode* TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeL error(memberLoc, "member cannot contradict block (or what block inherited from global)", "xfb_buffer", ""); } - if (memberQualifier.hasPacking()) + if (memberQualifier.hasPacking() && !heapBufferTypeMember) error(memberLoc, "member of block cannot have a packing layout qualifier", typeList[member].type->getFieldName().c_str(), ""); if (memberQualifier.hasLocation()) { const char* feature = "location on block member"; @@ -10788,6 +11309,15 @@ TIntermNode* TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeL if (!instanceName) { return nullptr; } + } else if (currentBlockQualifier.isBufferType()) { + // buffer_type creates an opaque type named by the block, not a global block instance. + TVariable* blockNameVar = new TVariable(blockName, blockType, true); + if (! symbolTable.insert(*blockNameVar)) { + error(loc, "block name cannot be redefined", blockName->c_str(), ""); + return nullptr; + } + if (!instanceName) + return nullptr; } else { // // Don't make a user-defined type out of block name; that will cause an error @@ -10968,7 +11498,7 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q } // Do all block-declaration checking regarding its qualifiers. -void TParseContext::blockQualifierCheck(const TSourceLoc& loc, const TQualifier& qualifier, bool /*instanceName*/) +void TParseContext::blockQualifierCheck(const TSourceLoc& loc, const TQualifier& qualifier, bool instanceName) { // The 4.5 specification says: // @@ -11001,6 +11531,16 @@ void TParseContext::blockQualifierCheck(const TSourceLoc& loc, const TQualifier& intermediate.addShaderRecordCount(); if (qualifier.isTaskMemory()) intermediate.addTaskNVCount(); + if (qualifier.isBufferType()) { + if (qualifier.storage != EvqUniform && qualifier.storage != EvqBuffer) + error(loc, "can only be used with uniform or buffer", "buffer_type", ""); + if (instanceName) + error(loc, "cannot have an instance name", "buffer_type", ""); + if (qualifier.hasSet()) + error(loc, "cannot be used with buffer_type", "set", ""); + if (qualifier.hasBinding()) + error(loc, "cannot be used with buffer_type", "binding", ""); + } } // @@ -11313,6 +11853,15 @@ void TParseContext::addQualifierToExisting(const TSourceLoc& loc, TQualifier qua symbol->getWritableType().getQualifier().makeSpecConstant(); if (qualifier.hasSpecConstantId()) symbol->getWritableType().getQualifier().layoutSpecConstantId = qualifier.layoutSpecConstantId; + // GL_EXT_opacity_micromap_ray_query_mode: gl_EnableOpacityMicromapEXT may be turned into a + // specialization constant with the bare form "layout(constant_id = N) gl_EnableOpacityMicromapEXT;". + // Record the SpecId so the back end emits the OpacityMicromapIdKHR execution mode. + if (identifier == "gl_EnableOpacityMicromapEXT" && qualifier.hasSpecConstantId()) { + requireExtensions(loc, 1, &E_GL_EXT_opacity_micromap_ray_query_mode, "gl_EnableOpacityMicromapEXT"); + // Bare "layout(constant_id = N) gl_EnableOpacityMicromapEXT;": the default value of false is + // retained (OpSpecConstantFalse); the API may override it. Record the SpecId for the back end. + intermediate.setEnableOpacityMicromapSpecId(qualifier.layoutSpecConstantId); + } } else warn(loc, "unknown requalification", "", ""); } @@ -11698,6 +12247,8 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con error(loc, "cannot declare a default, can only be used on a block", "push_constant", ""); if (qualifier.hasBufferReference()) error(loc, "cannot declare a default, can only be used on a block", "buffer_reference", ""); + if (qualifier.isBufferType()) + error(loc, "cannot declare a default, can only be used on a block", "buffer_type", ""); if (qualifier.hasSpecConstantId()) error(loc, "cannot declare a default, can only be used on a scalar", "constant_id", ""); if (qualifier.isShaderRecord()) diff --git a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h index 57f7ff390..f508694cc 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h +++ b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h @@ -91,9 +91,9 @@ public: parsingBuiltins(parsingBuiltins), scanContext(nullptr), ppContext(nullptr), limits(resources.limits), globalUniformBlock(nullptr), - globalUniformBinding(TQualifier::layoutBindingEnd), - globalUniformSet(TQualifier::layoutSetEnd), - atomicCounterBlockSet(TQualifier::layoutSetEnd) + globalUniformBinding(TQualifier::layoutNotSet), + globalUniformSet(TQualifier::layoutNotSet), + atomicCounterBlockSet(TQualifier::layoutNotSet) { // use storage buffer on SPIR-V 1.3 and up if (spvVersion.spv >= EShTargetSpv_1_3) @@ -230,8 +230,8 @@ protected: // Manage the global uniform block (default uniforms in GLSL, $Global in HLSL) TVariable* globalUniformBlock; // the actual block, inserted into the symbol table - unsigned int globalUniformBinding; // the block's binding number - unsigned int globalUniformSet; // the block's set number + int globalUniformBinding; // the block's binding number + int globalUniformSet; // the block's set number int firstNewMember; // the index of the first member not yet inserted into the symbol table // override this to set the language-specific name virtual const char* getGlobalUniformBlockName() const { return ""; } @@ -240,7 +240,7 @@ protected: // Manage the atomic counter block (used for atomic_uints with Vulkan-Relaxed) TMap atomicCounterBuffers; - unsigned int atomicCounterBlockSet; + int atomicCounterBlockSet; TMap atomicCounterBlockFirstNewMember; // override this to set the language-specific name virtual const char* getAtomicCounterBlockName() const { return ""; } @@ -358,7 +358,7 @@ public: TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&) const; TIntermTyped* addAssign(const TSourceLoc&, TOperator op, TIntermTyped* left, TIntermTyped* right); void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&); - void requireDerivativeLayout(const TSourceLoc&, const char* featureDesc); + void requireDerivativeLayout(const TSourceLoc&, const char* featureDesc, bool isDerivativeOp); void nonOpBuiltInCheck(const TSourceLoc&, const TFunction&, TIntermAggregate&); void userFunctionCallCheck(const TSourceLoc&, TIntermAggregate&); void samplerConstructorLocationCheck(const TSourceLoc&, const char* token, TIntermNode*); @@ -458,7 +458,7 @@ public: TParameter getParamWithDefault(const TPublicType& ty, TString* identifier, TIntermTyped* initializer, const TSourceLoc& loc); void inheritMemoryQualifiers(const TQualifier& from, TQualifier& to); - void descHeapBuiltinRemap(TType* type, bool isInnerBlock); + void descHeapBuiltinRemap(TType* type, bool rootNode); bool untypedHeapCheck(TSymbol* symbol, const TType& type, const TSourceLoc& loc, const char* name); TIntermNode* declareBlock(const TSourceLoc&, TTypeList& typeList, const TString* instanceName = nullptr, TArraySizes* arraySizes = nullptr); void blockStorageRemap(const TSourceLoc&, const TString*, TQualifier&); @@ -490,7 +490,7 @@ public: // Determine loop control from attributes void handleLoopAttributes(const TAttributes& attributes, TIntermNode*); // Function attributes - void handleFunctionAttributes(const TSourceLoc&, const TAttributes&); + void handleFunctionAttributes(const TSourceLoc&, TFunction&, const TAttributes&); // GL_EXT_spirv_intrinsics TSpirvRequirement* makeSpirvRequirement(const TSourceLoc& loc, const TString& name, diff --git a/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp b/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp index 665a92e66..4cf0b69d8 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp @@ -48,6 +48,7 @@ #include "../Include/Types.h" #include "SymbolTable.h" #include "ParseHelper.h" +#include "Versions.h" #include "attribute.h" #include "glslang_tab.cpp.h" #include "ScanContext.h" @@ -552,6 +553,31 @@ const std::unordered_map KeywordMap { {"fe4m3vec3",FE4M3VEC3}, {"fe4m3vec4",FE4M3VEC4}, + {"floate2m1_t",FLOATE2M1_T}, + {"fe2m1vec2",FE2M1VEC2}, + {"fe2m1vec3",FE2M1VEC3}, + {"fe2m1vec4",FE2M1VEC4}, + + {"floate3m2_t",FLOATE3M2_T}, + {"fe3m2vec2",FE3M2VEC2}, + {"fe3m2vec3",FE3M2VEC3}, + {"fe3m2vec4",FE3M2VEC4}, + + {"floate2m3_t",FLOATE2M3_T}, + {"fe2m3vec2",FE2M3VEC2}, + {"fe2m3vec3",FE2M3VEC3}, + {"fe2m3vec4",FE2M3VEC4}, + + {"floatue8m0_t",FLOATUE8M0_T}, + {"fue8m0vec2",FUE8M0VEC2}, + {"fue8m0vec3",FUE8M0VEC3}, + {"fue8m0vec4",FUE8M0VEC4}, + + {"floatmxint8_t",FLOATMXINT8_T}, + {"fmxint8vec2",FMXINT8VEC2}, + {"fmxint8vec3",FMXINT8VEC3}, + {"fmxint8vec4",FMXINT8VEC4}, + {"float32_t",FLOAT32_T}, {"f32vec2",F32VEC2}, {"f32vec3",F32VEC3}, @@ -782,6 +808,8 @@ const std::unordered_map KeywordMap { {"vector",VECTOR}, {"resourceheap",RESOURCEHEAP}, {"samplerheap",SAMPLERHEAP}, + {"inline", INLINE}, + {"noinline", NOINLINE}, }; const std::unordered_set ReservedSet { "common", @@ -795,8 +823,6 @@ const std::unordered_set ReservedSet { "template", "this", "goto", - "inline", - "noinline", "public", "static", "extern", @@ -921,6 +947,11 @@ int TScanContext::tokenize(TPpContext* pp, TParserToken& token) case PpAtomConstUint64: parserToken->sType.lex.i64 = ppToken.i64val; return UINT64CONSTANT; case PpAtomConstDouble: parserToken->sType.lex.d = ppToken.dval; return DOUBLECONSTANT; case PpAtomConstFloat16: parserToken->sType.lex.d = ppToken.dval; return FLOAT16CONSTANT; + case PpAtomConstFloatE2M1: parserToken->sType.lex.d = ppToken.dval; return FLOATE2M1CONSTANT; + case PpAtomConstFloatE3M2: parserToken->sType.lex.d = ppToken.dval; return FLOATE3M2CONSTANT; + case PpAtomConstFloatE2M3: parserToken->sType.lex.d = ppToken.dval; return FLOATE2M3CONSTANT; + case PpAtomConstFloatUE8M0: parserToken->sType.lex.d = ppToken.dval; return FLOATUE8M0CONSTANT; + case PpAtomConstFloatMXINT8: parserToken->sType.lex.d = ppToken.dval; return FLOATMXINT8CONSTANT; case PpAtomIdentifier: { int token = tokenizeIdentifier(); @@ -1556,6 +1587,66 @@ int TScanContext::tokenizeIdentifier() return identifierOrType(); + case FLOATE2M1_T: + case FE2M1VEC2: + case FE2M1VEC3: + case FE2M1VEC4: + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_float_e2m1)) { + afterType = true; + return keyword; + } + + return identifierOrType(); + + case FLOATE3M2_T: + case FE3M2VEC2: + case FE3M2VEC3: + case FE3M2VEC4: + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_float_e3m2)) { + afterType = true; + return keyword; + } + + return identifierOrType(); + + case FLOATE2M3_T: + case FE2M3VEC2: + case FE2M3VEC3: + case FE2M3VEC4: + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_float_e2m3)) { + afterType = true; + return keyword; + } + + return identifierOrType(); + + case FLOATUE8M0_T: + case FUE8M0VEC2: + case FUE8M0VEC3: + case FUE8M0VEC4: + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_float_ue8m0)) { + afterType = true; + return keyword; + } + + return identifierOrType(); + + case FLOATMXINT8_T: + case FMXINT8VEC2: + case FMXINT8VEC3: + case FMXINT8VEC4: + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_float_mxint8)) { + afterType = true; + return keyword; + } + + return identifierOrType(); + case SAMPLERCUBEARRAY: case SAMPLERCUBEARRAYSHADOW: case ISAMPLERCUBEARRAY: @@ -1987,6 +2078,12 @@ int TScanContext::tokenizeIdentifier() return keyword; return identifierOrType(); + case INLINE: + case NOINLINE: + if (!parseContext.extensionTurnedOn(E_GL_EXT_function_control_attributes)) + return reservedWord(); + return keyword; + default: parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc); return 0; diff --git a/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp b/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp index 7a0433c11..8567b3d88 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp @@ -777,6 +777,8 @@ void RecordProcesses(TIntermediate& intermediate, EShMessages messages, const st intermediate.addProcess("suppress-warnings"); if ((messages & EShMsgKeepUncalled) != 0) intermediate.addProcess("keep-uncalled"); + if ((messages & EShMsgRelaxSetBindingLimits) != 0) + intermediate.setRelaxSetBindingLimits(true); if (sourceEntryPointName.size() > 0) { intermediate.addProcess("source-entrypoint"); intermediate.addProcessArgument(sourceEntryPointName); @@ -1076,6 +1078,28 @@ private: int lastLine; }; +// Re-escape characters that would otherwise be emitted literally +// so the preprocessed output remains valid GLSL source. +static void appendEscapedString(std::string& output, const char* string) { + + for (const char* p = string; *p != '\0'; ++p) { + switch (*p) { + case '"': output += "\\\""; break; + case '\\': output += "\\\\"; break; + case '\a': output += "\\a"; break; + case '\b': output += "\\b"; break; + case '\f': output += "\\f"; break; + case '\n': output += "\\n"; break; + case '\r': output += "\\r"; break; + case '\t': output += "\\t"; break; + case '\v': output += "\\v"; break; + default: + output += *p; + break; + } + } +} + // DoPreprocessing is a valid ProcessingContext template argument, // which only performs the preprocessing step of compilation. // It places the result in the "string" argument to its constructor. @@ -1176,7 +1200,8 @@ struct DoPreprocessing { // Don't emit whitespace onto empty lines. // Copy any whitespace characters at the start of a line // from the input to the output. - outputBuffer += std::string(ppToken.loc.column - 1, ' '); + if (ppToken.loc.column > 0) + outputBuffer += std::string(ppToken.loc.column - 1, ' '); } // Output a space in between tokens, but not at the start of a line, @@ -1200,11 +1225,13 @@ struct DoPreprocessing { if (token == PpAtomIdentifier) lastTokenName = ppToken.name; lastToken = token; - if (token == PpAtomConstString) + if (token == PpAtomConstString) { outputBuffer += "\""; - outputBuffer += ppToken.name; - if (token == PpAtomConstString) + appendEscapedString(outputBuffer, ppToken.name); outputBuffer += "\""; + } else { + outputBuffer += ppToken.name; + } } while (true); outputBuffer += '\n'; *outputString = std::move(outputBuffer); @@ -1816,6 +1843,7 @@ void TShader::setInvertY(bool invert) { intermediate->setInver void TShader::setDxPositionW(bool invert) { intermediate->setDxPositionW(invert); } void TShader::setEnhancedMsgs() { intermediate->setEnhancedMsgs(); } void TShader::setNanMinMaxClamp(bool useNonNan) { intermediate->setNanMinMaxClamp(useNonNan); } +void TShader::setDiscardIsTerminate(bool discardIsTerminate) { intermediate->setDiscardIsTerminate(discardIsTerminate); } // Set binding base for given resource type void TShader::setShiftBinding(TResourceType res, unsigned int base) { diff --git a/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp b/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp index fd8a690f2..333d76dff 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp @@ -75,6 +75,11 @@ void TType::buildMangledName(TString& mangledName) const case EbtBFloat16: mangledName += "bf16"; break; case EbtFloatE5M2: mangledName += "fe5m2"; break; case EbtFloatE4M3: mangledName += "fe4m3"; break; + case EbtFloatE2M1: mangledName += "fe2m1"; break; + case EbtFloatE3M2: mangledName += "fe3m2"; break; + case EbtFloatE2M3: mangledName += "fe2m3"; break; + case EbtFloatUE8M0: mangledName += "fue8m0"; break; + case EbtFloatMXINT8: mangledName += "fmxint8";break; case EbtInt8: mangledName += "i8"; break; case EbtUint8: mangledName += "u8"; break; case EbtInt16: mangledName += "i16"; break; @@ -448,6 +453,7 @@ TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf) illegalImplicitThis = copyOf.illegalImplicitThis; defaultParamCount = copyOf.defaultParamCount; spirvInst = copyOf.spirvInst; + functionControl = copyOf.functionControl; } TFunction* TFunction::clone() const diff --git a/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h b/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h index 916192749..35fb64aed 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h +++ b/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.h @@ -255,13 +255,14 @@ public: explicit TFunction(TOperator o) : TSymbol(nullptr), op(o), - defined(false), prototyped(false), implicitThis(false), illegalImplicitThis(false), variadic(false), defaultParamCount(0) { } + defined(false), prototyped(false), implicitThis(false), illegalImplicitThis(false), variadic(false), defaultParamCount(0), + functionControl(EfcNone) { } TFunction(const TString *name, const TType& retType, TOperator tOp = EOpNull) : TSymbol(name), mangledName(*name + '('), op(tOp), defined(false), prototyped(false), implicitThis(false), illegalImplicitThis(false), variadic(false), defaultParamCount(0), - linkType(ELinkNone) + functionControl(EfcNone), linkType(ELinkNone) { returnType.shallowCopy(retType); declaredBuiltIn = retType.getQualifier().builtIn; @@ -351,6 +352,13 @@ public: void setExport() { linkType = ELinkExport; } TLinkType getLinkType() const { return linkType; } + void addFunctionControl(unsigned int fc) { functionControl |= fc; } + void setFunctionControl(unsigned int fc) { functionControl = fc; } + unsigned int getFunctionControl() const { return functionControl; } + bool hasIncompatibleFunctionControl() const + { + return (functionControl & EfcInline) != 0 && (functionControl & EfcDontInline) != 0; + } protected: explicit TFunction(const TFunction&); @@ -374,6 +382,7 @@ protected: int defaultParamCount; TSpirvInstruction spirvInst; // SPIR-V instruction qualifiers + unsigned int functionControl; TLinkType linkType; }; diff --git a/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp b/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp index 05f91a091..82c30759b 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp @@ -4,6 +4,7 @@ // Copyright (C) 2017, 2022-2024 Arm Limited. // Copyright (C) 2015-2020 Google, Inc. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. +// Modifications Copyright (C) 2026 Valve Corporation. // // All rights reserved. // @@ -149,6 +150,8 @@ #include "parseVersions.h" #include "localintermediate.h" +#include + namespace glslang { // @@ -167,7 +170,8 @@ void TParseVersions::initializeExtensionBehavior() {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4}, {E_GL_EXT_mesh_shader, EShTargetSpv_1_4}, {E_GL_NV_cooperative_matrix2, EShTargetSpv_1_6}, - {E_GL_NV_cooperative_matrix_decode_vector, EShTargetSpv_1_6} + {E_GL_NV_cooperative_matrix_decode_vector, EShTargetSpv_1_6}, + {E_GL_EXT_cooperative_matrix_maintenance1, EShTargetSpv_1_3}, }; for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) { @@ -269,8 +273,10 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_expect_assume] = EBhDisable; extensionBehavior[E_GL_EXT_control_flow_attributes2] = EBhDisable; + extensionBehavior[E_GL_EXT_function_control_attributes] = EBhDisable; extensionBehavior[E_GL_EXT_spec_constant_composites] = EBhDisable; extensionBehavior[E_GL_EXT_abort] = EBhDisable; + extensionBehavior[E_GL_EXT_split_barrier] = EBhDisable; extensionBehavior[E_GL_KHR_cooperative_matrix] = EBhDisable; extensionBehavior[E_GL_NV_cooperative_vector] = EBhDisable; @@ -335,8 +341,10 @@ void TParseVersions::initializeExtensionBehavior() // QCOM extensionBehavior[E_GL_QCOM_image_processing] = EBhDisable; extensionBehavior[E_GL_QCOM_image_processing2] = EBhDisable; + extensionBehavior[E_GL_QCOM_image_processing3] = EBhDisable; extensionBehavior[E_GL_QCOM_tile_shading] = EBhDisable; extensionBehavior[E_GL_QCOM_cooperative_matrix_conversion] = EBhDisable; + extensionBehavior[E_GL_QCOM_multiple_wait_queues] = EBhDisable; // AEP extensionBehavior[E_GL_ANDROID_extension_pack_es31a] = EBhDisable; @@ -356,6 +364,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_texture_cube_map_array] = EBhDisable; extensionBehavior[E_GL_EXT_null_initializer] = EBhDisable; extensionBehavior[E_GL_EXT_descriptor_heap] = EBhDisable; + extensionBehavior[E_GL_EXT_structured_descriptor_heap] = EBhDisable; // OES matching AEP extensionBehavior[E_GL_OES_geometry_shader] = EBhDisable; @@ -386,6 +395,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_spirv_intrinsics] = EBhDisable; extensionBehavior[E_GL_EXT_mesh_shader] = EBhDisable; extensionBehavior[E_GL_EXT_opacity_micromap] = EBhDisable; + extensionBehavior[E_GL_EXT_opacity_micromap_ray_query_mode] = EBhDisable; extensionBehavior[E_GL_EXT_shader_quad_control] = EBhDisable; extensionBehavior[E_GL_EXT_ray_tracing_position_fetch] = EBhDisable; extensionBehavior[E_GL_EXT_shader_tile_image] = EBhDisable; @@ -401,6 +411,13 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_shader_64bit_indexing] = EBhDisable; extensionBehavior[E_GL_EXT_conservative_depth] = EBhDisable; extensionBehavior[E_GL_EXT_long_vector] = EBhDisable; + extensionBehavior[E_GL_EXT_float_e2m1] = EBhDisable; + extensionBehavior[E_GL_EXT_float_e3m2] = EBhDisable; + extensionBehavior[E_GL_EXT_float_e2m3] = EBhDisable; + extensionBehavior[E_GL_EXT_float_ue8m0] = EBhDisable; + extensionBehavior[E_GL_EXT_float_mxint8] = EBhDisable; + extensionBehavior[E_GL_EXT_optional_input_attachment_index] = EBhDisable; + extensionBehavior[E_GL_EXT_cooperative_matrix_maintenance1] = EBhDisable; // OVR extensions extensionBehavior[E_GL_OVR_multiview] = EBhDisable; @@ -470,6 +487,8 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_shader_integer_mix 1\n" "#define GL_EXT_blend_func_extended 1\n" "#define GL_EXT_descriptor_heap 1\n" + "#define GL_EXT_structured_descriptor_heap 1\n" + "#define GL_EXT_split_barrier 1\n" // OES matching AEP "#define GL_OES_geometry_shader 1\n" @@ -485,8 +504,10 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_QCOM_image_processing 1\n" "#define GL_QCOM_image_processing2 1\n" + "#define GL_QCOM_image_processing3 1\n" "#define GL_QCOM_tile_shading 1\n" "#define GL_QCOM_cooperative_matrix_conversion 1\n" + "#define GL_QCOM_multiple_wait_queues 1\n" ; if (version >= 300) { @@ -562,6 +583,8 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_shader_integer_mix 1\n" "#define GL_EXT_spec_constant_composites 1\n" "#define GL_EXT_abort 1\n" + "#define GL_EXT_split_barrier 1\n" + "#define GL_EXT_cooperative_matrix_maintenance1 1\n" // GL_KHR_shader_subgroup "#define GL_KHR_shader_subgroup_basic 1\n" @@ -623,8 +646,10 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_QCOM_image_processing 1\n" "#define GL_QCOM_image_processing2 1\n" + "#define GL_QCOM_image_processing3 1\n" "#define GL_QCOM_tile_shading 1\n" "#define GL_QCOM_cooperative_matrix_conversion 1\n" + "#define GL_QCOM_multiple_wait_queues 1\n" "#define GL_EXT_shader_explicit_arithmetic_types 1\n" "#define GL_EXT_shader_explicit_arithmetic_types_int8 1\n" @@ -648,6 +673,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_texture_array 1\n" "#define GL_EXT_control_flow_attributes2 1\n" + "#define GL_EXT_function_control_attributes 1\n" "#define GL_EXT_integer_dot_product 1\n" "#define GL_EXT_bfloat16 1\n" @@ -655,9 +681,15 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_float_e4m3 1\n" "#define GL_EXT_uniform_buffer_unsized_array 1\n" "#define GL_EXT_shader_64bit_indexing 1\n" + "#define GL_EXT_float_e2m1 1\n" + "#define GL_EXT_float_e3m2 1\n" + "#define GL_EXT_float_e2m3 1\n" + "#define GL_EXT_float_ue8m0 1\n" + "#define GL_EXT_float_mxint8 1\n" "#define GL_EXT_shader_invocation_reorder 1\n" "#define GL_EXT_descriptor_heap 1\n" + "#define GL_EXT_structured_descriptor_heap 1\n" ; if (spvVersion.spv == 0) { @@ -716,6 +748,11 @@ void TParseVersions::getPreamble(std::string& preamble) ; } + if ((!isEsProfile() && version >= 140) || + (isEsProfile() && version >= 300)) { + preamble += "#define GL_EXT_optional_input_attachment_index 1\n"; + } + // #line and #include preamble += "#define GL_GOOGLE_cpp_style_line_directive 1\n" @@ -1256,7 +1293,7 @@ void TParseVersions::float16Check(const TSourceLoc& loc, const char* op, bool bu E_GL_AMD_gpu_shader_half_float, E_GL_EXT_shader_explicit_arithmetic_types, E_GL_EXT_shader_explicit_arithmetic_types_float16}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1267,7 +1304,7 @@ bool TParseVersions::float16Arithmetic() E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_float16}; - return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions); + return extensionsTurnedOn(std::size(extensions), extensions); } bool TParseVersions::int16Arithmetic() @@ -1277,7 +1314,7 @@ bool TParseVersions::int16Arithmetic() E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int16}; - return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions); + return extensionsTurnedOn(std::size(extensions), extensions); } bool TParseVersions::int8Arithmetic() @@ -1286,7 +1323,7 @@ bool TParseVersions::int8Arithmetic() E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int8}; - return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions); + return extensionsTurnedOn(std::size(extensions), extensions); } void TParseVersions::requireFloat16Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) @@ -1301,7 +1338,7 @@ void TParseVersions::requireFloat16Arithmetic(const TSourceLoc& loc, const char* E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_float16}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str()); + requireExtensions(loc, std::size(extensions), extensions, combined.c_str()); } void TParseVersions::requireInt16Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) @@ -1316,7 +1353,7 @@ void TParseVersions::requireInt16Arithmetic(const TSourceLoc& loc, const char* o E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int16}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str()); + requireExtensions(loc, std::size(extensions), extensions, combined.c_str()); } void TParseVersions::requireInt8Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc) @@ -1330,7 +1367,7 @@ void TParseVersions::requireInt8Arithmetic(const TSourceLoc& loc, const char* op E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int8}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str()); + requireExtensions(loc, std::size(extensions), extensions, combined.c_str()); } void TParseVersions::float16ScalarVectorCheck(const TSourceLoc& loc, const char* op, bool builtIn) @@ -1342,7 +1379,7 @@ void TParseVersions::float16ScalarVectorCheck(const TSourceLoc& loc, const char* E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_float16}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1352,7 +1389,7 @@ void TParseVersions::bfloat16ScalarVectorCheck(const TSourceLoc& loc, const char const char* const extensions[] = { E_GL_EXT_bfloat16, }; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1362,7 +1399,7 @@ void TParseVersions::floate5m2ScalarVectorCheck(const TSourceLoc& loc, const cha const char* const extensions[] = { E_GL_EXT_float_e5m2, }; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1372,7 +1409,57 @@ void TParseVersions::floate4m3ScalarVectorCheck(const TSourceLoc& loc, const cha const char* const extensions[] = { E_GL_EXT_float_e4m3, }; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); + } +} + +void TParseVersions::floate2m1ScalarVectorCheck(const TSourceLoc& loc, const char* op, bool builtIn) +{ + if (!builtIn) { + const char* const extensions[] = { + E_GL_EXT_float_e2m1, + }; + requireExtensions(loc, std::size(extensions), extensions, op); + } +} + +void TParseVersions::floate3m2ScalarVectorCheck(const TSourceLoc& loc, const char* op, bool builtIn) +{ + if (!builtIn) { + const char* const extensions[] = { + E_GL_EXT_float_e3m2, + }; + requireExtensions(loc, std::size(extensions), extensions, op); + } +} + +void TParseVersions::floate2m3ScalarVectorCheck(const TSourceLoc& loc, const char* op, bool builtIn) +{ + if (!builtIn) { + const char* const extensions[] = { + E_GL_EXT_float_e2m3, + }; + requireExtensions(loc, std::size(extensions), extensions, op); + } +} + +void TParseVersions::floatue8m0ScalarVectorCheck(const TSourceLoc& loc, const char* op, bool builtIn) +{ + if (!builtIn) { + const char* const extensions[] = { + E_GL_EXT_float_ue8m0, + }; + requireExtensions(loc, std::size(extensions), extensions, op); + } +} + +void TParseVersions::floatmxint8ScalarVectorCheck(const TSourceLoc& loc, const char* op, bool builtIn) +{ + if (!builtIn) { + const char* const extensions[] = { + E_GL_EXT_float_mxint8, + }; + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1383,7 +1470,7 @@ void TParseVersions::explicitFloat32Check(const TSourceLoc& loc, const char* op, const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_float32}; - requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1394,7 +1481,7 @@ void TParseVersions::explicitFloat64Check(const TSourceLoc& loc, const char* op, const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_float64}; - requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); requireProfile(loc, ECoreProfile | ECompatibilityProfile, op); if(extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) && extensionTurnedOn(E_GL_NV_gpu_shader5)) profileRequires(loc, ECoreProfile | ECompatibilityProfile, 150, nullptr, op); @@ -1431,7 +1518,7 @@ void TParseVersions::explicitInt16Check(const TSourceLoc& loc, const char* op, b E_GL_AMD_gpu_shader_int16, E_GL_EXT_shader_explicit_arithmetic_types, E_GL_EXT_shader_explicit_arithmetic_types_int16}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1444,7 +1531,7 @@ void TParseVersions::int16ScalarVectorCheck(const TSourceLoc& loc, const char* o E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int16}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1456,7 +1543,7 @@ void TParseVersions::int8ScalarVectorCheck(const TSourceLoc& loc, const char* op E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int8}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1467,7 +1554,7 @@ void TParseVersions::explicitInt32Check(const TSourceLoc& loc, const char* op, b const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int32}; - requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1479,7 +1566,7 @@ void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool buil E_GL_EXT_shader_explicit_arithmetic_types, E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int64}; - requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); requireProfile(loc, ECoreProfile | ECompatibilityProfile, op); if (extensionTurnedOn(E_GL_NV_gpu_shader5)) profileRequires(loc, ECoreProfile | ECompatibilityProfile, 150, nullptr, op); @@ -1492,7 +1579,7 @@ void TParseVersions::fcoopmatCheckNV(const TSourceLoc& loc, const char* op, bool { if (!builtIn) { const char* const extensions[] = {E_GL_NV_cooperative_matrix}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1500,7 +1587,7 @@ void TParseVersions::intcoopmatCheckNV(const TSourceLoc& loc, const char* op, bo { if (!builtIn) { const char* const extensions[] = {E_GL_NV_integer_cooperative_matrix}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1508,7 +1595,7 @@ void TParseVersions::coopmatCheck(const TSourceLoc& loc, const char* op, bool bu { if (!builtIn) { const char* const extensions[] = {E_GL_KHR_cooperative_matrix}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1516,7 +1603,7 @@ void TParseVersions::coopmatConverisonCheckQCOM(const TSourceLoc& loc, const cha { if (!builtIn) { const char* const extensions[] = {E_GL_KHR_cooperative_matrix}; - requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1524,7 +1611,7 @@ void TParseVersions::tensorLayoutViewCheck(const TSourceLoc& loc, const char* op { if (!builtIn) { const char* const extensions[] = {E_GL_NV_cooperative_matrix2}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1532,7 +1619,7 @@ void TParseVersions::coopvecCheck(const TSourceLoc& loc, const char* op, bool bu { if (!builtIn) { const char* const extensions[] = {E_GL_NV_cooperative_vector}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1540,7 +1627,7 @@ void TParseVersions::intattachmentCheck(const TSourceLoc& loc, const char* op, b { if (!builtIn) { const char* const extensions[] = {E_GL_QCOM_tile_shading}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1548,7 +1635,7 @@ void TParseVersions::tensorCheckARM(const TSourceLoc& loc, const char* op, bool { if (!builtIn) { const char* const extensions[] = {E_GL_ARM_tensors}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } @@ -1556,7 +1643,7 @@ void TParseVersions::longVectorCheck(const TSourceLoc& loc, const char* op, bool { if (!builtIn) { const char* const extensions[] = {E_GL_EXT_long_vector}; - requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + requireExtensions(loc, std::size(extensions), extensions, op); } } diff --git a/3rdparty/glslang/glslang/MachineIndependent/Versions.h b/3rdparty/glslang/glslang/MachineIndependent/Versions.h index 72f8696af..ed028b39d 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Versions.h +++ b/3rdparty/glslang/glslang/MachineIndependent/Versions.h @@ -4,7 +4,7 @@ // Copyright (C) 2017, 2022-2024 Arm Limited. // Copyright (C) 2015-2018 Google, Inc. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. -// Modifications Copyright (C) 2024 Valve Corporation. +// Modifications Copyright (C) 2024, 2026 Valve Corporation. // // All rights reserved. // @@ -219,12 +219,14 @@ const char* const E_GL_EXT_spirv_intrinsics = "GL_EXT_spirv_intr 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"; const char* const E_GL_EXT_opacity_micromap = "GL_EXT_opacity_micromap"; +const char* const E_GL_EXT_opacity_micromap_ray_query_mode = "GL_EXT_opacity_micromap_ray_query_mode"; const char* const E_GL_EXT_shader_quad_control = "GL_EXT_shader_quad_control"; const char* const E_GL_EXT_draw_instanced = "GL_EXT_draw_instanced"; const char* const E_GL_EXT_texture_array = "GL_EXT_texture_array"; const char* const E_GL_EXT_maximal_reconvergence = "GL_EXT_maximal_reconvergence"; const char* const E_GL_EXT_expect_assume = "GL_EXT_expect_assume"; const char* const E_GL_EXT_control_flow_attributes2 = "GL_EXT_control_flow_attributes2"; +const char* const E_GL_EXT_function_control_attributes = "GL_EXT_function_control_attributes"; const char* const E_GL_EXT_spec_constant_composites = "GL_EXT_spec_constant_composites"; const char* const E_GL_EXT_texture_offset_non_const = "GL_EXT_texture_offset_non_const"; const char* const E_GL_EXT_nontemporal_keyword = "GL_EXT_nontemporal_keyword"; @@ -232,6 +234,8 @@ const char* const E_GL_EXT_uniform_buffer_unsized_array = "GL_EXT_uniform_bu const char* const E_GL_EXT_conservative_depth = "GL_EXT_conservative_depth"; const char* const E_GL_EXT_descriptor_heap = "GL_EXT_descriptor_heap"; const char* const E_GL_EXT_structured_descriptor_heap = "GL_EXT_structured_descriptor_heap"; +const char* const E_GL_EXT_split_barrier = "GL_EXT_split_barrier"; +const char* const E_GL_EXT_optional_input_attachment_index = "GL_EXT_optional_input_attachment_index"; // Arrays of extensions for the above viewportEXTs duplications @@ -317,8 +321,10 @@ const int Num_viewportEXTs = sizeof(viewportEXTs) / sizeof(viewportEXTs[0]); const char* const E_GL_QCOM_image_processing = "GL_QCOM_image_processing"; const char* const E_GL_QCOM_image_processing2 = "GL_QCOM_image_processing2"; +const char* const E_GL_QCOM_image_processing3 = "GL_QCOM_image_processing3"; const char* const E_GL_QCOM_tile_shading = "GL_QCOM_tile_shading"; const char* const E_GL_QCOM_cooperative_matrix_conversion = "GL_QCOM_cooperative_matrix_conversion"; +const char* const E_GL_QCOM_multiple_wait_queues = "GL_QCOM_multiple_wait_queues"; // AEP const char* const E_GL_ANDROID_extension_pack_es31a = "GL_ANDROID_extension_pack_es31a"; @@ -377,12 +383,19 @@ const char* const E_GL_EXT_integer_dot_product = "GL_EXT_inte const char* const E_GL_EXT_bfloat16 = "GL_EXT_bfloat16"; const char* const E_GL_EXT_float_e5m2 = "GL_EXT_float_e5m2"; const char* const E_GL_EXT_float_e4m3 = "GL_EXT_float_e4m3"; +const char* const E_GL_EXT_float_e2m1 = "GL_EXT_float_e2m1"; +const char* const E_GL_EXT_float_e3m2 = "GL_EXT_float_e3m2"; +const char* const E_GL_EXT_float_e2m3 = "GL_EXT_float_e2m3"; +const char* const E_GL_EXT_float_ue8m0 = "GL_EXT_float_ue8m0"; +const char* const E_GL_EXT_float_mxint8 = "GL_EXT_float_mxint8"; const char* const E_GL_EXT_long_vector = "GL_EXT_long_vector"; const char* const E_GL_EXT_shader_64bit_indexing = "GL_EXT_shader_64bit_indexing"; const char* const E_GL_EXT_shader_invocation_reorder = "GL_EXT_shader_invocation_reorder"; +const char* const E_GL_EXT_cooperative_matrix_maintenance1 = "GL_EXT_cooperative_matrix_maintenance1"; + // Arrays of extensions for the above AEP duplications const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader }; diff --git a/3rdparty/glslang/glslang/MachineIndependent/attribute.cpp b/3rdparty/glslang/glslang/MachineIndependent/attribute.cpp index 19e8faac3..b6c1846e1 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/attribute.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/attribute.cpp @@ -127,6 +127,12 @@ TAttributeType TParseContext::attributeFromName(const TString& name) const return EatExport; else if (name == "maximally_reconverges") return EatMaximallyReconverges; + else if (name == "inline") + return EatInline; + else if (name == "noinline") + return EatNoInline; + else if (name == "multiple_wait_queuesQCOM") + return EatMultipleWaitQueuesQCOM; else return EatNone; } @@ -338,6 +344,14 @@ void TParseContext::handleLoopAttributes(const TAttributes& attributes, TIntermN if (unsignedArgument("partial_count", uiValue)) loop->setPartialCount(uiValue); break; + case EatMultipleWaitQueuesQCOM: + value = -1; + if (it->size() == 0) + loop->setMultipleWaitQueuesQCOM(0); + else + if (positiveSignedArgument("multiple_wait_queuesQCOM", value)) + loop->setMultipleWaitQueuesQCOM(value); + break; default: warn(node->getLoc(), "attribute does not apply to a loop", "", ""); break; @@ -349,7 +363,7 @@ void TParseContext::handleLoopAttributes(const TAttributes& attributes, TIntermN // // Function attributes // -void TParseContext::handleFunctionAttributes(const TSourceLoc& loc, const TAttributes& attributes) +void TParseContext::handleFunctionAttributes(const TSourceLoc& loc, TFunction& function, const TAttributes& attributes) { for (auto it = attributes.begin(); it != attributes.end(); ++it) { if (it->size() > 0) { @@ -366,11 +380,22 @@ void TParseContext::handleFunctionAttributes(const TSourceLoc& loc, const TAttri requireExtensions(loc, 1, &E_GL_EXT_maximal_reconvergence, "attribute"); intermediate.setMaximallyReconverges(); break; + case EatInline: + requireExtensions(loc, 1, &E_GL_EXT_function_control_attributes, "attribute"); + function.addFunctionControl(EfcInline); + break; + case EatNoInline: + requireExtensions(loc, 1, &E_GL_EXT_function_control_attributes, "attribute"); + function.addFunctionControl(EfcDontInline); + break; default: warn(loc, "attribute does not apply to a function", "", ""); break; } } + + if (function.hasIncompatibleFunctionControl()) + error(loc, "function attributes are incompatible", function.getName().c_str(), ""); } } // end namespace glslang diff --git a/3rdparty/glslang/glslang/MachineIndependent/attribute.h b/3rdparty/glslang/glslang/MachineIndependent/attribute.h index 3b480c6f0..b049fa898 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/attribute.h +++ b/3rdparty/glslang/glslang/MachineIndependent/attribute.h @@ -122,6 +122,9 @@ namespace glslang { EatSubgroupUniformControlFlow, EatExport, EatMaximallyReconverges, + EatInline, + EatNoInline, + EatMultipleWaitQueuesQCOM, }; class TIntermAggregate; diff --git a/3rdparty/glslang/glslang/MachineIndependent/glslang.y b/3rdparty/glslang/glslang/MachineIndependent/glslang.y index dc06aaca5..8f2259e87 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/glslang.y +++ b/3rdparty/glslang/glslang/MachineIndependent/glslang.y @@ -119,7 +119,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %parse-param {glslang::TParseContext* pParseContext} %lex-param {parseContext} -%pure-parser // enable thread safety +%define api.pure // enable thread safety %expect 1 // One shift reduce conflict because of if | else %token CONST BOOL INT UINT FLOAT @@ -146,7 +146,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token UTEXTURE2D UTEXTURE3D UTEXTURECUBE UTEXTURE2DARRAY %token ATTRIBUTE VARYING -%token FLOATE5M2_T FLOATE4M3_T BFLOAT16_T FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T +%token FLOATE5M2_T FLOATE4M3_T BFLOAT16_T FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T FLOATE2M1_T FLOATE3M2_T FLOATE2M3_T FLOATUE8M0_T FLOATMXINT8_T %token INT64_T UINT64_T INT32_T UINT32_T INT16_T UINT16_T INT8_T UINT8_T %token I64VEC2 I64VEC3 I64VEC4 %token U64VEC2 U64VEC3 U64VEC4 @@ -160,6 +160,11 @@ extern int yylex(YYSTYPE*, TParseContext&); %token BF16VEC2 BF16VEC3 BF16VEC4 %token FE5M2VEC2 FE5M2VEC3 FE5M2VEC4 %token FE4M3VEC2 FE4M3VEC3 FE4M3VEC4 +%token FE2M1VEC2 FE2M1VEC3 FE2M1VEC4 +%token FE3M2VEC2 FE3M2VEC3 FE3M2VEC4 +%token FE2M3VEC2 FE2M3VEC3 FE2M3VEC4 +%token FUE8M0VEC2 FUE8M0VEC3 FUE8M0VEC4 +%token FMXINT8VEC2 FMXINT8VEC3 FMXINT8VEC4 %token F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4 %token F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4 %token F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4 @@ -269,6 +274,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token INVARIANT %token HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION %token PACKED RESOURCE SUPERP +%token INLINE NOINLINE %token FLOATCONSTANT INTCONSTANT UINTCONSTANT BOOLCONSTANT %token IDENTIFIER TYPE_NAME @@ -280,7 +286,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token UNIFORM SHARED BUFFER TILEIMAGEEXT %token FLAT SMOOTH LAYOUT -%token DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT +%token DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT FLOATE2M1CONSTANT FLOATE3M2CONSTANT FLOATE2M3CONSTANT FLOATUE8M0CONSTANT FLOATMXINT8CONSTANT %token INT64CONSTANT UINT64CONSTANT %token SUBROUTINE DEMOTE FUNCTION %token PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV @@ -330,7 +336,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %type block_heap_inner_structure %type struct_declarator %type struct_declarator_list struct_declaration struct_declaration_list -%type struct_declaration_with_heap struct_declaration_without_heap +%type struct_declaration_no_inline_block struct_declaration_no_inline_block_list %type block_structure %type function_header function_declarator %type function_header_with_parameters @@ -426,6 +432,26 @@ primary_expression parseContext.float16Check($1.loc, "half float literal"); $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat16, $1.loc, true); } + | FLOATE2M1CONSTANT { + parseContext.floate2m1ScalarVectorCheck($1.loc, "fe2m1 literal"); + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloatE2M1, $1.loc, true); + } + | FLOATE3M2CONSTANT { + parseContext.floate3m2ScalarVectorCheck($1.loc, "fe3m2 literal"); + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloatE3M2, $1.loc, true); + } + | FLOATE2M3CONSTANT { + parseContext.floate2m3ScalarVectorCheck($1.loc, "fe2m3 literal"); + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloatE2M3, $1.loc, true); + } + | FLOATUE8M0CONSTANT { + parseContext.floatue8m0ScalarVectorCheck($1.loc, "fue8m0 literal"); + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloatUE8M0, $1.loc, true); + } + | FLOATMXINT8CONSTANT { + parseContext.floatmxint8ScalarVectorCheck($1.loc, "fmxint8 literal"); + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloatMXINT8, $1.loc, true); + } ; postfix_expression @@ -940,7 +966,7 @@ declaration ; block_structure - : type_qualifier IDENTIFIER LEFT_BRACE { parseContext.nestedBlockCheck($1.loc); } struct_declaration_without_heap RIGHT_BRACE { + : type_qualifier IDENTIFIER LEFT_BRACE { parseContext.nestedBlockCheck($1.loc); } struct_declaration_list RIGHT_BRACE { --parseContext.blockNestingLevel; parseContext.blockName = $2.string; parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); @@ -972,26 +998,26 @@ function_prototype $$.function = $1; if (parseContext.compileOnly) $$.function->setExport(); $$.loc = $2.loc; - const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; - parseContext.requireExtensions($2.loc, 2, extensions, "attribute"); - parseContext.handleFunctionAttributes($2.loc, *$3); + const char * extensions[3] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence, E_GL_EXT_function_control_attributes }; + parseContext.requireExtensions($2.loc, 3, extensions, "attribute"); + parseContext.handleFunctionAttributes($2.loc, *$$.function, *$3); } | attribute function_declarator RIGHT_PAREN { $$.function = $2; if (parseContext.compileOnly) $$.function->setExport(); $$.loc = $3.loc; - const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; - parseContext.requireExtensions($3.loc, 2, extensions, "attribute"); - parseContext.handleFunctionAttributes($3.loc, *$1); + const char * extensions[3] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence, E_GL_EXT_function_control_attributes }; + parseContext.requireExtensions($3.loc, 3, extensions, "attribute"); + parseContext.handleFunctionAttributes($3.loc, *$$.function, *$1); } | attribute function_declarator RIGHT_PAREN attribute { $$.function = $2; if (parseContext.compileOnly) $$.function->setExport(); $$.loc = $3.loc; - const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; - parseContext.requireExtensions($3.loc, 2, extensions, "attribute"); - parseContext.handleFunctionAttributes($3.loc, *$1); - parseContext.handleFunctionAttributes($3.loc, *$4); + const char * extensions[3] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence, E_GL_EXT_function_control_attributes }; + parseContext.requireExtensions($3.loc, 3, extensions, "attribute"); + parseContext.handleFunctionAttributes($3.loc, *$$.function, *$1); + parseContext.handleFunctionAttributes($3.loc, *$$.function, *$4); } ; @@ -1367,7 +1393,7 @@ layout_qualifier_id $$.init($1.loc); parseContext.setLayoutQualifier($1.loc, $$, *$1.string); } - | IDENTIFIER EQUAL constant_expression { + | IDENTIFIER EQUAL assignment_expression { $$.init($1.loc); parseContext.setLayoutQualifier($1.loc, $$, *$1.string, $3); } @@ -1985,6 +2011,31 @@ type_specifier_nonarray $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtFloatE4M3; } + | FLOATE2M1_T { + parseContext.floate2m1ScalarVectorCheck($1.loc, "floate2m1_t", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE2M1; + } + | FLOATE3M2_T { + parseContext.floate3m2ScalarVectorCheck($1.loc, "floate3m2_t", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE3M2; + } + | FLOATE2M3_T { + parseContext.floate2m3ScalarVectorCheck($1.loc, "floate2m3_t", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE2M3; + } + | FLOATUE8M0_T { + parseContext.floatue8m0ScalarVectorCheck($1.loc, "floatue8m0_t", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatUE8M0; + } + | FLOATMXINT8_T { + parseContext.floatmxint8ScalarVectorCheck($1.loc, "floatmxint8_t", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatMXINT8; + } | FLOAT16_T { parseContext.float16ScalarVectorCheck($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); @@ -2118,6 +2169,96 @@ type_specifier_nonarray $$.basicType = EbtFloatE4M3; $$.setVector(4); } + | FE2M1VEC2 { + parseContext.floate2m1ScalarVectorCheck($1.loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE2M1; + $$.setVector(2); + } + | FE2M1VEC3 { + parseContext.floate2m1ScalarVectorCheck($1.loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE2M1; + $$.setVector(3); + } + | FE2M1VEC4 { + parseContext.floate2m1ScalarVectorCheck($1.loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE2M1; + $$.setVector(4); + } + | FE3M2VEC2 { + parseContext.floate3m2ScalarVectorCheck($1.loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE3M2; + $$.setVector(2); + } + | FE3M2VEC3 { + parseContext.floate3m2ScalarVectorCheck($1.loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE3M2; + $$.setVector(3); + } + | FE3M2VEC4 { + parseContext.floate3m2ScalarVectorCheck($1.loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE3M2; + $$.setVector(4); + } + | FE2M3VEC2 { + parseContext.floate2m3ScalarVectorCheck($1.loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE2M3; + $$.setVector(2); + } + | FE2M3VEC3 { + parseContext.floate2m3ScalarVectorCheck($1.loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE2M3; + $$.setVector(3); + } + | FE2M3VEC4 { + parseContext.floate2m3ScalarVectorCheck($1.loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatE2M3; + $$.setVector(4); + } + | FUE8M0VEC2 { + parseContext.floatue8m0ScalarVectorCheck($1.loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatUE8M0; + $$.setVector(2); + } + | FUE8M0VEC3 { + parseContext.floatue8m0ScalarVectorCheck($1.loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatUE8M0; + $$.setVector(3); + } + | FUE8M0VEC4 { + parseContext.floatue8m0ScalarVectorCheck($1.loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatUE8M0; + $$.setVector(4); + } + | FMXINT8VEC2 { + parseContext.floatmxint8ScalarVectorCheck($1.loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatMXINT8; + $$.setVector(2); + } + | FMXINT8VEC3 { + parseContext.floatmxint8ScalarVectorCheck($1.loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatMXINT8; + $$.setVector(3); + } + | FMXINT8VEC4 { + parseContext.floatmxint8ScalarVectorCheck($1.loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtFloatMXINT8; + $$.setVector(4); + } | F16VEC2 { parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); @@ -3702,6 +3843,8 @@ type_specifier_nonarray $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtStruct; $$.userDef = &structure; + if (structure.getQualifier().isBufferType()) + $$.qualifier = structure.getQualifier(); } else parseContext.error($1.loc, "expected type name", $1.string->c_str(), ""); } @@ -3752,23 +3895,10 @@ struct_specifier ; struct_declaration_list - : struct_declaration_without_heap { + : struct_declaration { $$ = $1; } - | struct_declaration_with_heap { - $$ = $1; - } - | struct_declaration_with_heap struct_declaration_without_heap { - $$ = $1; - for (unsigned int i = 0; i < $2->size(); ++i) { - for (unsigned int j = 0; j < $$->size(); ++j) { - if ((*$$)[j].type->getFieldName() == (*$2)[i].type->getFieldName()) - parseContext.error((*$2)[i].loc, "duplicate member name:", "", (*$2)[i].type->getFieldName().c_str()); - } - $$->push_back((*$2)[i]); - } - } - | struct_declaration_without_heap struct_declaration_with_heap { + | struct_declaration_list struct_declaration { $$ = $1; for (unsigned int i = 0; i < $2->size(); ++i) { for (unsigned int j = 0; j < $$->size(); ++j) { @@ -3780,8 +3910,11 @@ struct_declaration_list } ; -struct_declaration_with_heap - : block_heap_inner_structure struct_declarator_list SEMICOLON { +struct_declaration + : struct_declaration_no_inline_block { + $$ = $1; + } + | block_heap_inner_structure struct_declarator_list SEMICOLON { $$ = $2; parseContext.voidErrorCheck($1.loc, (*$2)[0].type->getFieldName(), $1.basicType); parseContext.precisionQualifierCheck($1.loc, $1.basicType, $1.qualifier, $1.hasTypeParameter()); @@ -3798,25 +3931,26 @@ struct_declaration_with_heap ; block_heap_inner_structure - : type_qualifier LEFT_BRACE { parseContext.nestedBlockCheck($1.loc, true); } struct_declaration_without_heap RIGHT_BRACE { + : type_qualifier LEFT_BRACE { parseContext.nestedBlockCheck($1.loc, true); } struct_declaration_no_inline_block_list RIGHT_BRACE { --parseContext.blockNestingLevel; parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); $$.init($1.loc); - TType* innerStructure = new TType($4, TString("")); - $$.basicType = EbtBlock; - $$.userDef = innerStructure; - $$.qualifier = $1.qualifier; + TType* innerStructure = new TType($4, TString(""), $1.qualifier); + if (! $1.qualifier.hasBufferReference()) + parseContext.error($1.loc, "only buffer_reference blocks can be declared inline inside a heap block", "", ""); + TType* referenceType = new TType(EbtReference, *innerStructure, TString("")); + $$.basicType = EbtReference; + $$.userDef = referenceType; $$.qualifier.layoutDescriptorHeap = true; - $$.qualifier.layoutDescriptorInnerBlock = true; } ; -struct_declaration_without_heap - : struct_declaration { +struct_declaration_no_inline_block_list + : struct_declaration_no_inline_block { $$ = $1; } - | struct_declaration_without_heap struct_declaration { + | struct_declaration_no_inline_block_list struct_declaration_no_inline_block { $$ = $1; for (unsigned int i = 0; i < $2->size(); ++i) { for (unsigned int j = 0; j < $$->size(); ++j) { @@ -3828,7 +3962,7 @@ struct_declaration_without_heap } ; -struct_declaration +struct_declaration_no_inline_block : type_specifier struct_declarator_list SEMICOLON { if ($1.arraySizes) { parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -4158,8 +4292,8 @@ iteration_statement $$ = $1; } | attribute iteration_statement_nonattributed { - const char * extensions[2] = { E_GL_EXT_control_flow_attributes, E_GL_EXT_control_flow_attributes2 }; - parseContext.requireExtensions($2->getLoc(), 2, extensions, "attribute"); + const char * extensions[3] = { E_GL_EXT_control_flow_attributes, E_GL_EXT_control_flow_attributes2, E_GL_QCOM_multiple_wait_queues }; + parseContext.requireExtensions($2->getLoc(), 3, extensions, "attribute"); parseContext.handleLoopAttributes(*$1, $2); $$ = $2; } @@ -4343,6 +4477,7 @@ function_definition parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); $$ = parseContext.intermediate.growAggregate($1.intermNode, $3); $$->getAsAggregate()->setLinkType($1.function->getLinkType()); + $$->getAsAggregate()->setFunctionControl($1.function->getFunctionControl()); parseContext.intermediate.setAggregateOperator($$, EOpFunction, $1.function->getType(), $1.loc); $$->getAsAggregate()->setName($1.function->getMangledName().c_str()); @@ -4385,6 +4520,12 @@ single_attribute | IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN { $$ = parseContext.makeAttributes(*$1.string, $3); } + | INLINE { + $$ = parseContext.makeAttributes(TString("inline")); + } + | NOINLINE { + $$ = parseContext.makeAttributes(TString("noinline")); + } spirv_requirements_list : spirv_requirements_parameter { diff --git a/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp b/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp index 8b56f4d01..ebde28d7c 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp @@ -191,560 +191,587 @@ enum yysymbol_kind_t YYSYMBOL_FLOAT32_T = 67, /* FLOAT32_T */ YYSYMBOL_DOUBLE = 68, /* DOUBLE */ YYSYMBOL_FLOAT64_T = 69, /* FLOAT64_T */ - YYSYMBOL_INT64_T = 70, /* INT64_T */ - YYSYMBOL_UINT64_T = 71, /* UINT64_T */ - YYSYMBOL_INT32_T = 72, /* INT32_T */ - YYSYMBOL_UINT32_T = 73, /* UINT32_T */ - YYSYMBOL_INT16_T = 74, /* INT16_T */ - YYSYMBOL_UINT16_T = 75, /* UINT16_T */ - YYSYMBOL_INT8_T = 76, /* INT8_T */ - YYSYMBOL_UINT8_T = 77, /* UINT8_T */ - YYSYMBOL_I64VEC2 = 78, /* I64VEC2 */ - YYSYMBOL_I64VEC3 = 79, /* I64VEC3 */ - YYSYMBOL_I64VEC4 = 80, /* I64VEC4 */ - YYSYMBOL_U64VEC2 = 81, /* U64VEC2 */ - YYSYMBOL_U64VEC3 = 82, /* U64VEC3 */ - YYSYMBOL_U64VEC4 = 83, /* U64VEC4 */ - YYSYMBOL_I32VEC2 = 84, /* I32VEC2 */ - YYSYMBOL_I32VEC3 = 85, /* I32VEC3 */ - YYSYMBOL_I32VEC4 = 86, /* I32VEC4 */ - YYSYMBOL_U32VEC2 = 87, /* U32VEC2 */ - YYSYMBOL_U32VEC3 = 88, /* U32VEC3 */ - YYSYMBOL_U32VEC4 = 89, /* U32VEC4 */ - YYSYMBOL_I16VEC2 = 90, /* I16VEC2 */ - YYSYMBOL_I16VEC3 = 91, /* I16VEC3 */ - YYSYMBOL_I16VEC4 = 92, /* I16VEC4 */ - YYSYMBOL_U16VEC2 = 93, /* U16VEC2 */ - YYSYMBOL_U16VEC3 = 94, /* U16VEC3 */ - YYSYMBOL_U16VEC4 = 95, /* U16VEC4 */ - YYSYMBOL_I8VEC2 = 96, /* I8VEC2 */ - YYSYMBOL_I8VEC3 = 97, /* I8VEC3 */ - YYSYMBOL_I8VEC4 = 98, /* I8VEC4 */ - YYSYMBOL_U8VEC2 = 99, /* U8VEC2 */ - YYSYMBOL_U8VEC3 = 100, /* U8VEC3 */ - YYSYMBOL_U8VEC4 = 101, /* U8VEC4 */ - YYSYMBOL_DVEC2 = 102, /* DVEC2 */ - YYSYMBOL_DVEC3 = 103, /* DVEC3 */ - YYSYMBOL_DVEC4 = 104, /* DVEC4 */ - YYSYMBOL_DMAT2 = 105, /* DMAT2 */ - YYSYMBOL_DMAT3 = 106, /* DMAT3 */ - YYSYMBOL_DMAT4 = 107, /* DMAT4 */ - YYSYMBOL_BF16VEC2 = 108, /* BF16VEC2 */ - YYSYMBOL_BF16VEC3 = 109, /* BF16VEC3 */ - YYSYMBOL_BF16VEC4 = 110, /* BF16VEC4 */ - YYSYMBOL_FE5M2VEC2 = 111, /* FE5M2VEC2 */ - YYSYMBOL_FE5M2VEC3 = 112, /* FE5M2VEC3 */ - YYSYMBOL_FE5M2VEC4 = 113, /* FE5M2VEC4 */ - YYSYMBOL_FE4M3VEC2 = 114, /* FE4M3VEC2 */ - YYSYMBOL_FE4M3VEC3 = 115, /* FE4M3VEC3 */ - YYSYMBOL_FE4M3VEC4 = 116, /* FE4M3VEC4 */ - YYSYMBOL_F16VEC2 = 117, /* F16VEC2 */ - YYSYMBOL_F16VEC3 = 118, /* F16VEC3 */ - YYSYMBOL_F16VEC4 = 119, /* F16VEC4 */ - YYSYMBOL_F16MAT2 = 120, /* F16MAT2 */ - YYSYMBOL_F16MAT3 = 121, /* F16MAT3 */ - YYSYMBOL_F16MAT4 = 122, /* F16MAT4 */ - YYSYMBOL_F32VEC2 = 123, /* F32VEC2 */ - YYSYMBOL_F32VEC3 = 124, /* F32VEC3 */ - YYSYMBOL_F32VEC4 = 125, /* F32VEC4 */ - YYSYMBOL_F32MAT2 = 126, /* F32MAT2 */ - YYSYMBOL_F32MAT3 = 127, /* F32MAT3 */ - YYSYMBOL_F32MAT4 = 128, /* F32MAT4 */ - YYSYMBOL_F64VEC2 = 129, /* F64VEC2 */ - YYSYMBOL_F64VEC3 = 130, /* F64VEC3 */ - YYSYMBOL_F64VEC4 = 131, /* F64VEC4 */ - YYSYMBOL_F64MAT2 = 132, /* F64MAT2 */ - YYSYMBOL_F64MAT3 = 133, /* F64MAT3 */ - YYSYMBOL_F64MAT4 = 134, /* F64MAT4 */ - YYSYMBOL_DMAT2X2 = 135, /* DMAT2X2 */ - YYSYMBOL_DMAT2X3 = 136, /* DMAT2X3 */ - YYSYMBOL_DMAT2X4 = 137, /* DMAT2X4 */ - YYSYMBOL_DMAT3X2 = 138, /* DMAT3X2 */ - YYSYMBOL_DMAT3X3 = 139, /* DMAT3X3 */ - YYSYMBOL_DMAT3X4 = 140, /* DMAT3X4 */ - YYSYMBOL_DMAT4X2 = 141, /* DMAT4X2 */ - YYSYMBOL_DMAT4X3 = 142, /* DMAT4X3 */ - YYSYMBOL_DMAT4X4 = 143, /* DMAT4X4 */ - YYSYMBOL_F16MAT2X2 = 144, /* F16MAT2X2 */ - YYSYMBOL_F16MAT2X3 = 145, /* F16MAT2X3 */ - YYSYMBOL_F16MAT2X4 = 146, /* F16MAT2X4 */ - YYSYMBOL_F16MAT3X2 = 147, /* F16MAT3X2 */ - YYSYMBOL_F16MAT3X3 = 148, /* F16MAT3X3 */ - YYSYMBOL_F16MAT3X4 = 149, /* F16MAT3X4 */ - YYSYMBOL_F16MAT4X2 = 150, /* F16MAT4X2 */ - YYSYMBOL_F16MAT4X3 = 151, /* F16MAT4X3 */ - YYSYMBOL_F16MAT4X4 = 152, /* F16MAT4X4 */ - YYSYMBOL_F32MAT2X2 = 153, /* F32MAT2X2 */ - YYSYMBOL_F32MAT2X3 = 154, /* F32MAT2X3 */ - YYSYMBOL_F32MAT2X4 = 155, /* F32MAT2X4 */ - YYSYMBOL_F32MAT3X2 = 156, /* F32MAT3X2 */ - YYSYMBOL_F32MAT3X3 = 157, /* F32MAT3X3 */ - YYSYMBOL_F32MAT3X4 = 158, /* F32MAT3X4 */ - YYSYMBOL_F32MAT4X2 = 159, /* F32MAT4X2 */ - YYSYMBOL_F32MAT4X3 = 160, /* F32MAT4X3 */ - YYSYMBOL_F32MAT4X4 = 161, /* F32MAT4X4 */ - YYSYMBOL_F64MAT2X2 = 162, /* F64MAT2X2 */ - YYSYMBOL_F64MAT2X3 = 163, /* F64MAT2X3 */ - YYSYMBOL_F64MAT2X4 = 164, /* F64MAT2X4 */ - YYSYMBOL_F64MAT3X2 = 165, /* F64MAT3X2 */ - YYSYMBOL_F64MAT3X3 = 166, /* F64MAT3X3 */ - YYSYMBOL_F64MAT3X4 = 167, /* F64MAT3X4 */ - YYSYMBOL_F64MAT4X2 = 168, /* F64MAT4X2 */ - YYSYMBOL_F64MAT4X3 = 169, /* F64MAT4X3 */ - YYSYMBOL_F64MAT4X4 = 170, /* F64MAT4X4 */ - YYSYMBOL_ATOMIC_UINT = 171, /* ATOMIC_UINT */ - YYSYMBOL_ACCSTRUCTNV = 172, /* ACCSTRUCTNV */ - YYSYMBOL_ACCSTRUCTEXT = 173, /* ACCSTRUCTEXT */ - YYSYMBOL_RAYQUERYEXT = 174, /* RAYQUERYEXT */ - YYSYMBOL_FCOOPMATNV = 175, /* FCOOPMATNV */ - YYSYMBOL_ICOOPMATNV = 176, /* ICOOPMATNV */ - YYSYMBOL_UCOOPMATNV = 177, /* UCOOPMATNV */ - YYSYMBOL_COOPMAT = 178, /* COOPMAT */ - YYSYMBOL_COOPVECNV = 179, /* COOPVECNV */ - YYSYMBOL_VECTOR = 180, /* VECTOR */ - YYSYMBOL_HITOBJECTNV = 181, /* HITOBJECTNV */ - YYSYMBOL_HITOBJECTATTRNV = 182, /* HITOBJECTATTRNV */ - YYSYMBOL_HITOBJECTEXT = 183, /* HITOBJECTEXT */ - YYSYMBOL_HITOBJECTATTREXT = 184, /* HITOBJECTATTREXT */ - YYSYMBOL_TENSORLAYOUTNV = 185, /* TENSORLAYOUTNV */ - YYSYMBOL_TENSORVIEWNV = 186, /* TENSORVIEWNV */ - YYSYMBOL_TENSORARM = 187, /* TENSORARM */ - YYSYMBOL_SAMPLERCUBEARRAY = 188, /* SAMPLERCUBEARRAY */ - YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 189, /* SAMPLERCUBEARRAYSHADOW */ - YYSYMBOL_ISAMPLERCUBEARRAY = 190, /* ISAMPLERCUBEARRAY */ - YYSYMBOL_USAMPLERCUBEARRAY = 191, /* USAMPLERCUBEARRAY */ - YYSYMBOL_SAMPLER1D = 192, /* SAMPLER1D */ - YYSYMBOL_SAMPLER1DARRAY = 193, /* SAMPLER1DARRAY */ - YYSYMBOL_SAMPLER1DARRAYSHADOW = 194, /* SAMPLER1DARRAYSHADOW */ - YYSYMBOL_ISAMPLER1D = 195, /* ISAMPLER1D */ - YYSYMBOL_SAMPLER1DSHADOW = 196, /* SAMPLER1DSHADOW */ - YYSYMBOL_SAMPLER2DRECT = 197, /* SAMPLER2DRECT */ - YYSYMBOL_SAMPLER2DRECTSHADOW = 198, /* SAMPLER2DRECTSHADOW */ - YYSYMBOL_ISAMPLER2DRECT = 199, /* ISAMPLER2DRECT */ - YYSYMBOL_USAMPLER2DRECT = 200, /* USAMPLER2DRECT */ - YYSYMBOL_SAMPLERBUFFER = 201, /* SAMPLERBUFFER */ - YYSYMBOL_ISAMPLERBUFFER = 202, /* ISAMPLERBUFFER */ - YYSYMBOL_USAMPLERBUFFER = 203, /* USAMPLERBUFFER */ - YYSYMBOL_SAMPLER2DMS = 204, /* SAMPLER2DMS */ - YYSYMBOL_ISAMPLER2DMS = 205, /* ISAMPLER2DMS */ - YYSYMBOL_USAMPLER2DMS = 206, /* USAMPLER2DMS */ - YYSYMBOL_SAMPLER2DMSARRAY = 207, /* SAMPLER2DMSARRAY */ - YYSYMBOL_ISAMPLER2DMSARRAY = 208, /* ISAMPLER2DMSARRAY */ - YYSYMBOL_USAMPLER2DMSARRAY = 209, /* USAMPLER2DMSARRAY */ - YYSYMBOL_SAMPLEREXTERNALOES = 210, /* SAMPLEREXTERNALOES */ - YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 211, /* SAMPLEREXTERNAL2DY2YEXT */ - YYSYMBOL_ISAMPLER1DARRAY = 212, /* ISAMPLER1DARRAY */ - YYSYMBOL_USAMPLER1D = 213, /* USAMPLER1D */ - YYSYMBOL_USAMPLER1DARRAY = 214, /* USAMPLER1DARRAY */ - YYSYMBOL_F16SAMPLER1D = 215, /* F16SAMPLER1D */ - YYSYMBOL_F16SAMPLER2D = 216, /* F16SAMPLER2D */ - YYSYMBOL_F16SAMPLER3D = 217, /* F16SAMPLER3D */ - YYSYMBOL_F16SAMPLER2DRECT = 218, /* F16SAMPLER2DRECT */ - YYSYMBOL_F16SAMPLERCUBE = 219, /* F16SAMPLERCUBE */ - YYSYMBOL_F16SAMPLER1DARRAY = 220, /* F16SAMPLER1DARRAY */ - YYSYMBOL_F16SAMPLER2DARRAY = 221, /* F16SAMPLER2DARRAY */ - YYSYMBOL_F16SAMPLERCUBEARRAY = 222, /* F16SAMPLERCUBEARRAY */ - YYSYMBOL_F16SAMPLERBUFFER = 223, /* F16SAMPLERBUFFER */ - YYSYMBOL_F16SAMPLER2DMS = 224, /* F16SAMPLER2DMS */ - YYSYMBOL_F16SAMPLER2DMSARRAY = 225, /* F16SAMPLER2DMSARRAY */ - YYSYMBOL_F16SAMPLER1DSHADOW = 226, /* F16SAMPLER1DSHADOW */ - YYSYMBOL_F16SAMPLER2DSHADOW = 227, /* F16SAMPLER2DSHADOW */ - YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 228, /* F16SAMPLER1DARRAYSHADOW */ - YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 229, /* F16SAMPLER2DARRAYSHADOW */ - YYSYMBOL_F16SAMPLER2DRECTSHADOW = 230, /* F16SAMPLER2DRECTSHADOW */ - YYSYMBOL_F16SAMPLERCUBESHADOW = 231, /* F16SAMPLERCUBESHADOW */ - YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 232, /* F16SAMPLERCUBEARRAYSHADOW */ - YYSYMBOL_IMAGE1D = 233, /* IMAGE1D */ - YYSYMBOL_IIMAGE1D = 234, /* IIMAGE1D */ - YYSYMBOL_UIMAGE1D = 235, /* UIMAGE1D */ - YYSYMBOL_IMAGE2D = 236, /* IMAGE2D */ - YYSYMBOL_IIMAGE2D = 237, /* IIMAGE2D */ - YYSYMBOL_UIMAGE2D = 238, /* UIMAGE2D */ - YYSYMBOL_IMAGE3D = 239, /* IMAGE3D */ - YYSYMBOL_IIMAGE3D = 240, /* IIMAGE3D */ - YYSYMBOL_UIMAGE3D = 241, /* UIMAGE3D */ - YYSYMBOL_IMAGE2DRECT = 242, /* IMAGE2DRECT */ - YYSYMBOL_IIMAGE2DRECT = 243, /* IIMAGE2DRECT */ - YYSYMBOL_UIMAGE2DRECT = 244, /* UIMAGE2DRECT */ - YYSYMBOL_IMAGECUBE = 245, /* IMAGECUBE */ - YYSYMBOL_IIMAGECUBE = 246, /* IIMAGECUBE */ - YYSYMBOL_UIMAGECUBE = 247, /* UIMAGECUBE */ - YYSYMBOL_IMAGEBUFFER = 248, /* IMAGEBUFFER */ - YYSYMBOL_IIMAGEBUFFER = 249, /* IIMAGEBUFFER */ - YYSYMBOL_UIMAGEBUFFER = 250, /* UIMAGEBUFFER */ - YYSYMBOL_IMAGE1DARRAY = 251, /* IMAGE1DARRAY */ - YYSYMBOL_IIMAGE1DARRAY = 252, /* IIMAGE1DARRAY */ - YYSYMBOL_UIMAGE1DARRAY = 253, /* UIMAGE1DARRAY */ - YYSYMBOL_IMAGE2DARRAY = 254, /* IMAGE2DARRAY */ - YYSYMBOL_IIMAGE2DARRAY = 255, /* IIMAGE2DARRAY */ - YYSYMBOL_UIMAGE2DARRAY = 256, /* UIMAGE2DARRAY */ - YYSYMBOL_IMAGECUBEARRAY = 257, /* IMAGECUBEARRAY */ - YYSYMBOL_IIMAGECUBEARRAY = 258, /* IIMAGECUBEARRAY */ - YYSYMBOL_UIMAGECUBEARRAY = 259, /* UIMAGECUBEARRAY */ - YYSYMBOL_IMAGE2DMS = 260, /* IMAGE2DMS */ - YYSYMBOL_IIMAGE2DMS = 261, /* IIMAGE2DMS */ - YYSYMBOL_UIMAGE2DMS = 262, /* UIMAGE2DMS */ - YYSYMBOL_IMAGE2DMSARRAY = 263, /* IMAGE2DMSARRAY */ - YYSYMBOL_IIMAGE2DMSARRAY = 264, /* IIMAGE2DMSARRAY */ - YYSYMBOL_UIMAGE2DMSARRAY = 265, /* UIMAGE2DMSARRAY */ - YYSYMBOL_F16IMAGE1D = 266, /* F16IMAGE1D */ - YYSYMBOL_F16IMAGE2D = 267, /* F16IMAGE2D */ - YYSYMBOL_F16IMAGE3D = 268, /* F16IMAGE3D */ - YYSYMBOL_F16IMAGE2DRECT = 269, /* F16IMAGE2DRECT */ - YYSYMBOL_F16IMAGECUBE = 270, /* F16IMAGECUBE */ - YYSYMBOL_F16IMAGE1DARRAY = 271, /* F16IMAGE1DARRAY */ - YYSYMBOL_F16IMAGE2DARRAY = 272, /* F16IMAGE2DARRAY */ - YYSYMBOL_F16IMAGECUBEARRAY = 273, /* F16IMAGECUBEARRAY */ - YYSYMBOL_F16IMAGEBUFFER = 274, /* F16IMAGEBUFFER */ - YYSYMBOL_F16IMAGE2DMS = 275, /* F16IMAGE2DMS */ - YYSYMBOL_F16IMAGE2DMSARRAY = 276, /* F16IMAGE2DMSARRAY */ - YYSYMBOL_I64IMAGE1D = 277, /* I64IMAGE1D */ - YYSYMBOL_U64IMAGE1D = 278, /* U64IMAGE1D */ - YYSYMBOL_I64IMAGE2D = 279, /* I64IMAGE2D */ - YYSYMBOL_U64IMAGE2D = 280, /* U64IMAGE2D */ - YYSYMBOL_I64IMAGE3D = 281, /* I64IMAGE3D */ - YYSYMBOL_U64IMAGE3D = 282, /* U64IMAGE3D */ - YYSYMBOL_I64IMAGE2DRECT = 283, /* I64IMAGE2DRECT */ - YYSYMBOL_U64IMAGE2DRECT = 284, /* U64IMAGE2DRECT */ - YYSYMBOL_I64IMAGECUBE = 285, /* I64IMAGECUBE */ - YYSYMBOL_U64IMAGECUBE = 286, /* U64IMAGECUBE */ - YYSYMBOL_I64IMAGEBUFFER = 287, /* I64IMAGEBUFFER */ - YYSYMBOL_U64IMAGEBUFFER = 288, /* U64IMAGEBUFFER */ - YYSYMBOL_I64IMAGE1DARRAY = 289, /* I64IMAGE1DARRAY */ - YYSYMBOL_U64IMAGE1DARRAY = 290, /* U64IMAGE1DARRAY */ - YYSYMBOL_I64IMAGE2DARRAY = 291, /* I64IMAGE2DARRAY */ - YYSYMBOL_U64IMAGE2DARRAY = 292, /* U64IMAGE2DARRAY */ - YYSYMBOL_I64IMAGECUBEARRAY = 293, /* I64IMAGECUBEARRAY */ - YYSYMBOL_U64IMAGECUBEARRAY = 294, /* U64IMAGECUBEARRAY */ - YYSYMBOL_I64IMAGE2DMS = 295, /* I64IMAGE2DMS */ - YYSYMBOL_U64IMAGE2DMS = 296, /* U64IMAGE2DMS */ - YYSYMBOL_I64IMAGE2DMSARRAY = 297, /* I64IMAGE2DMSARRAY */ - YYSYMBOL_U64IMAGE2DMSARRAY = 298, /* U64IMAGE2DMSARRAY */ - YYSYMBOL_TEXTURECUBEARRAY = 299, /* TEXTURECUBEARRAY */ - YYSYMBOL_ITEXTURECUBEARRAY = 300, /* ITEXTURECUBEARRAY */ - YYSYMBOL_UTEXTURECUBEARRAY = 301, /* UTEXTURECUBEARRAY */ - YYSYMBOL_TEXTURE1D = 302, /* TEXTURE1D */ - YYSYMBOL_ITEXTURE1D = 303, /* ITEXTURE1D */ - YYSYMBOL_UTEXTURE1D = 304, /* UTEXTURE1D */ - YYSYMBOL_TEXTURE1DARRAY = 305, /* TEXTURE1DARRAY */ - YYSYMBOL_ITEXTURE1DARRAY = 306, /* ITEXTURE1DARRAY */ - YYSYMBOL_UTEXTURE1DARRAY = 307, /* UTEXTURE1DARRAY */ - YYSYMBOL_TEXTURE2DRECT = 308, /* TEXTURE2DRECT */ - YYSYMBOL_ITEXTURE2DRECT = 309, /* ITEXTURE2DRECT */ - YYSYMBOL_UTEXTURE2DRECT = 310, /* UTEXTURE2DRECT */ - YYSYMBOL_TEXTUREBUFFER = 311, /* TEXTUREBUFFER */ - YYSYMBOL_ITEXTUREBUFFER = 312, /* ITEXTUREBUFFER */ - YYSYMBOL_UTEXTUREBUFFER = 313, /* UTEXTUREBUFFER */ - YYSYMBOL_TEXTURE2DMS = 314, /* TEXTURE2DMS */ - YYSYMBOL_ITEXTURE2DMS = 315, /* ITEXTURE2DMS */ - YYSYMBOL_UTEXTURE2DMS = 316, /* UTEXTURE2DMS */ - YYSYMBOL_TEXTURE2DMSARRAY = 317, /* TEXTURE2DMSARRAY */ - YYSYMBOL_ITEXTURE2DMSARRAY = 318, /* ITEXTURE2DMSARRAY */ - YYSYMBOL_UTEXTURE2DMSARRAY = 319, /* UTEXTURE2DMSARRAY */ - YYSYMBOL_F16TEXTURE1D = 320, /* F16TEXTURE1D */ - YYSYMBOL_F16TEXTURE2D = 321, /* F16TEXTURE2D */ - YYSYMBOL_F16TEXTURE3D = 322, /* F16TEXTURE3D */ - YYSYMBOL_F16TEXTURE2DRECT = 323, /* F16TEXTURE2DRECT */ - YYSYMBOL_F16TEXTURECUBE = 324, /* F16TEXTURECUBE */ - YYSYMBOL_F16TEXTURE1DARRAY = 325, /* F16TEXTURE1DARRAY */ - YYSYMBOL_F16TEXTURE2DARRAY = 326, /* F16TEXTURE2DARRAY */ - YYSYMBOL_F16TEXTURECUBEARRAY = 327, /* F16TEXTURECUBEARRAY */ - YYSYMBOL_F16TEXTUREBUFFER = 328, /* F16TEXTUREBUFFER */ - YYSYMBOL_F16TEXTURE2DMS = 329, /* F16TEXTURE2DMS */ - YYSYMBOL_F16TEXTURE2DMSARRAY = 330, /* F16TEXTURE2DMSARRAY */ - YYSYMBOL_SUBPASSINPUT = 331, /* SUBPASSINPUT */ - YYSYMBOL_SUBPASSINPUTMS = 332, /* SUBPASSINPUTMS */ - YYSYMBOL_ISUBPASSINPUT = 333, /* ISUBPASSINPUT */ - YYSYMBOL_ISUBPASSINPUTMS = 334, /* ISUBPASSINPUTMS */ - YYSYMBOL_USUBPASSINPUT = 335, /* USUBPASSINPUT */ - YYSYMBOL_USUBPASSINPUTMS = 336, /* USUBPASSINPUTMS */ - YYSYMBOL_F16SUBPASSINPUT = 337, /* F16SUBPASSINPUT */ - YYSYMBOL_F16SUBPASSINPUTMS = 338, /* F16SUBPASSINPUTMS */ - YYSYMBOL_SPIRV_INSTRUCTION = 339, /* SPIRV_INSTRUCTION */ - YYSYMBOL_SPIRV_EXECUTION_MODE = 340, /* SPIRV_EXECUTION_MODE */ - YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 341, /* SPIRV_EXECUTION_MODE_ID */ - YYSYMBOL_SPIRV_DECORATE = 342, /* SPIRV_DECORATE */ - YYSYMBOL_SPIRV_DECORATE_ID = 343, /* SPIRV_DECORATE_ID */ - YYSYMBOL_SPIRV_DECORATE_STRING = 344, /* SPIRV_DECORATE_STRING */ - YYSYMBOL_SPIRV_TYPE = 345, /* SPIRV_TYPE */ - YYSYMBOL_SPIRV_STORAGE_CLASS = 346, /* SPIRV_STORAGE_CLASS */ - YYSYMBOL_SPIRV_BY_REFERENCE = 347, /* SPIRV_BY_REFERENCE */ - YYSYMBOL_SPIRV_LITERAL = 348, /* SPIRV_LITERAL */ - YYSYMBOL_ATTACHMENTEXT = 349, /* ATTACHMENTEXT */ - YYSYMBOL_IATTACHMENTEXT = 350, /* IATTACHMENTEXT */ - YYSYMBOL_UATTACHMENTEXT = 351, /* UATTACHMENTEXT */ - YYSYMBOL_LEFT_OP = 352, /* LEFT_OP */ - YYSYMBOL_RIGHT_OP = 353, /* RIGHT_OP */ - YYSYMBOL_INC_OP = 354, /* INC_OP */ - YYSYMBOL_DEC_OP = 355, /* DEC_OP */ - YYSYMBOL_LE_OP = 356, /* LE_OP */ - YYSYMBOL_GE_OP = 357, /* GE_OP */ - YYSYMBOL_EQ_OP = 358, /* EQ_OP */ - YYSYMBOL_NE_OP = 359, /* NE_OP */ - YYSYMBOL_AND_OP = 360, /* AND_OP */ - YYSYMBOL_OR_OP = 361, /* OR_OP */ - YYSYMBOL_XOR_OP = 362, /* XOR_OP */ - YYSYMBOL_MUL_ASSIGN = 363, /* MUL_ASSIGN */ - YYSYMBOL_DIV_ASSIGN = 364, /* DIV_ASSIGN */ - YYSYMBOL_ADD_ASSIGN = 365, /* ADD_ASSIGN */ - YYSYMBOL_MOD_ASSIGN = 366, /* MOD_ASSIGN */ - YYSYMBOL_LEFT_ASSIGN = 367, /* LEFT_ASSIGN */ - YYSYMBOL_RIGHT_ASSIGN = 368, /* RIGHT_ASSIGN */ - YYSYMBOL_AND_ASSIGN = 369, /* AND_ASSIGN */ - YYSYMBOL_XOR_ASSIGN = 370, /* XOR_ASSIGN */ - YYSYMBOL_OR_ASSIGN = 371, /* OR_ASSIGN */ - YYSYMBOL_SUB_ASSIGN = 372, /* SUB_ASSIGN */ - YYSYMBOL_STRING_LITERAL = 373, /* STRING_LITERAL */ - YYSYMBOL_LEFT_PAREN = 374, /* LEFT_PAREN */ - YYSYMBOL_RIGHT_PAREN = 375, /* RIGHT_PAREN */ - YYSYMBOL_LEFT_BRACKET = 376, /* LEFT_BRACKET */ - YYSYMBOL_RIGHT_BRACKET = 377, /* RIGHT_BRACKET */ - YYSYMBOL_LEFT_BRACE = 378, /* LEFT_BRACE */ - YYSYMBOL_RIGHT_BRACE = 379, /* RIGHT_BRACE */ - YYSYMBOL_DOT = 380, /* DOT */ - YYSYMBOL_COMMA = 381, /* COMMA */ - YYSYMBOL_COLON = 382, /* COLON */ - YYSYMBOL_EQUAL = 383, /* EQUAL */ - YYSYMBOL_SEMICOLON = 384, /* SEMICOLON */ - YYSYMBOL_BANG = 385, /* BANG */ - YYSYMBOL_DASH = 386, /* DASH */ - YYSYMBOL_TILDE = 387, /* TILDE */ - YYSYMBOL_PLUS = 388, /* PLUS */ - YYSYMBOL_STAR = 389, /* STAR */ - YYSYMBOL_SLASH = 390, /* SLASH */ - YYSYMBOL_PERCENT = 391, /* PERCENT */ - YYSYMBOL_LEFT_ANGLE = 392, /* LEFT_ANGLE */ - YYSYMBOL_RIGHT_ANGLE = 393, /* RIGHT_ANGLE */ - YYSYMBOL_VERTICAL_BAR = 394, /* VERTICAL_BAR */ - YYSYMBOL_CARET = 395, /* CARET */ - YYSYMBOL_AMPERSAND = 396, /* AMPERSAND */ - YYSYMBOL_QUESTION = 397, /* QUESTION */ - YYSYMBOL_INVARIANT = 398, /* INVARIANT */ - YYSYMBOL_HIGH_PRECISION = 399, /* HIGH_PRECISION */ - YYSYMBOL_MEDIUM_PRECISION = 400, /* MEDIUM_PRECISION */ - YYSYMBOL_LOW_PRECISION = 401, /* LOW_PRECISION */ - YYSYMBOL_PRECISION = 402, /* PRECISION */ - YYSYMBOL_PACKED = 403, /* PACKED */ - YYSYMBOL_RESOURCE = 404, /* RESOURCE */ - YYSYMBOL_SUPERP = 405, /* SUPERP */ - YYSYMBOL_FLOATCONSTANT = 406, /* FLOATCONSTANT */ - YYSYMBOL_INTCONSTANT = 407, /* INTCONSTANT */ - YYSYMBOL_UINTCONSTANT = 408, /* UINTCONSTANT */ - YYSYMBOL_BOOLCONSTANT = 409, /* BOOLCONSTANT */ - YYSYMBOL_IDENTIFIER = 410, /* IDENTIFIER */ - YYSYMBOL_TYPE_NAME = 411, /* TYPE_NAME */ - YYSYMBOL_CENTROID = 412, /* CENTROID */ - YYSYMBOL_IN = 413, /* IN */ - YYSYMBOL_OUT = 414, /* OUT */ - YYSYMBOL_INOUT = 415, /* INOUT */ - YYSYMBOL_STRUCT = 416, /* STRUCT */ - YYSYMBOL_VOID = 417, /* VOID */ - YYSYMBOL_WHILE = 418, /* WHILE */ - YYSYMBOL_BREAK = 419, /* BREAK */ - YYSYMBOL_CONTINUE = 420, /* CONTINUE */ - YYSYMBOL_DO = 421, /* DO */ - YYSYMBOL_ELSE = 422, /* ELSE */ - YYSYMBOL_FOR = 423, /* FOR */ - YYSYMBOL_IF = 424, /* IF */ - YYSYMBOL_DISCARD = 425, /* DISCARD */ - YYSYMBOL_RETURN = 426, /* RETURN */ - YYSYMBOL_SWITCH = 427, /* SWITCH */ - YYSYMBOL_CASE = 428, /* CASE */ - YYSYMBOL_DEFAULT = 429, /* DEFAULT */ - YYSYMBOL_TERMINATE_INVOCATION = 430, /* TERMINATE_INVOCATION */ - YYSYMBOL_TERMINATE_RAY = 431, /* TERMINATE_RAY */ - YYSYMBOL_IGNORE_INTERSECTION = 432, /* IGNORE_INTERSECTION */ - YYSYMBOL_UNIFORM = 433, /* UNIFORM */ - YYSYMBOL_SHARED = 434, /* SHARED */ - YYSYMBOL_BUFFER = 435, /* BUFFER */ - YYSYMBOL_TILEIMAGEEXT = 436, /* TILEIMAGEEXT */ - YYSYMBOL_FLAT = 437, /* FLAT */ - YYSYMBOL_SMOOTH = 438, /* SMOOTH */ - YYSYMBOL_LAYOUT = 439, /* LAYOUT */ - YYSYMBOL_DOUBLECONSTANT = 440, /* DOUBLECONSTANT */ - YYSYMBOL_INT16CONSTANT = 441, /* INT16CONSTANT */ - YYSYMBOL_UINT16CONSTANT = 442, /* UINT16CONSTANT */ - YYSYMBOL_FLOAT16CONSTANT = 443, /* FLOAT16CONSTANT */ - YYSYMBOL_INT32CONSTANT = 444, /* INT32CONSTANT */ - YYSYMBOL_UINT32CONSTANT = 445, /* UINT32CONSTANT */ - YYSYMBOL_INT64CONSTANT = 446, /* INT64CONSTANT */ - YYSYMBOL_UINT64CONSTANT = 447, /* UINT64CONSTANT */ - YYSYMBOL_SUBROUTINE = 448, /* SUBROUTINE */ - YYSYMBOL_DEMOTE = 449, /* DEMOTE */ - YYSYMBOL_FUNCTION = 450, /* FUNCTION */ - YYSYMBOL_PAYLOADNV = 451, /* PAYLOADNV */ - YYSYMBOL_PAYLOADINNV = 452, /* PAYLOADINNV */ - YYSYMBOL_HITATTRNV = 453, /* HITATTRNV */ - YYSYMBOL_CALLDATANV = 454, /* CALLDATANV */ - YYSYMBOL_CALLDATAINNV = 455, /* CALLDATAINNV */ - YYSYMBOL_PAYLOADEXT = 456, /* PAYLOADEXT */ - YYSYMBOL_PAYLOADINEXT = 457, /* PAYLOADINEXT */ - YYSYMBOL_HITATTREXT = 458, /* HITATTREXT */ - YYSYMBOL_CALLDATAEXT = 459, /* CALLDATAEXT */ - YYSYMBOL_CALLDATAINEXT = 460, /* CALLDATAINEXT */ - YYSYMBOL_PATCH = 461, /* PATCH */ - YYSYMBOL_SAMPLE = 462, /* SAMPLE */ - YYSYMBOL_NONUNIFORM = 463, /* NONUNIFORM */ - YYSYMBOL_RESOURCEHEAP = 464, /* RESOURCEHEAP */ - YYSYMBOL_SAMPLERHEAP = 465, /* SAMPLERHEAP */ - YYSYMBOL_COHERENT = 466, /* COHERENT */ - YYSYMBOL_VOLATILE = 467, /* VOLATILE */ - YYSYMBOL_RESTRICT = 468, /* RESTRICT */ - YYSYMBOL_READONLY = 469, /* READONLY */ - YYSYMBOL_WRITEONLY = 470, /* WRITEONLY */ - YYSYMBOL_NONTEMPORAL = 471, /* NONTEMPORAL */ - YYSYMBOL_DEVICECOHERENT = 472, /* DEVICECOHERENT */ - YYSYMBOL_QUEUEFAMILYCOHERENT = 473, /* QUEUEFAMILYCOHERENT */ - YYSYMBOL_WORKGROUPCOHERENT = 474, /* WORKGROUPCOHERENT */ - YYSYMBOL_SUBGROUPCOHERENT = 475, /* SUBGROUPCOHERENT */ - YYSYMBOL_NONPRIVATE = 476, /* NONPRIVATE */ - YYSYMBOL_SHADERCALLCOHERENT = 477, /* SHADERCALLCOHERENT */ - YYSYMBOL_NOPERSPECTIVE = 478, /* NOPERSPECTIVE */ - YYSYMBOL_EXPLICITINTERPAMD = 479, /* EXPLICITINTERPAMD */ - YYSYMBOL_PERVERTEXEXT = 480, /* PERVERTEXEXT */ - YYSYMBOL_PERVERTEXNV = 481, /* PERVERTEXNV */ - YYSYMBOL_PERPRIMITIVENV = 482, /* PERPRIMITIVENV */ - YYSYMBOL_PERVIEWNV = 483, /* PERVIEWNV */ - YYSYMBOL_PERTASKNV = 484, /* PERTASKNV */ - YYSYMBOL_PERPRIMITIVEEXT = 485, /* PERPRIMITIVEEXT */ - YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 486, /* TASKPAYLOADWORKGROUPEXT */ - YYSYMBOL_PRECISE = 487, /* PRECISE */ - YYSYMBOL_YYACCEPT = 488, /* $accept */ - YYSYMBOL_variable_identifier = 489, /* variable_identifier */ - YYSYMBOL_primary_expression = 490, /* primary_expression */ - YYSYMBOL_postfix_expression = 491, /* postfix_expression */ - YYSYMBOL_integer_expression = 492, /* integer_expression */ - YYSYMBOL_function_call = 493, /* function_call */ - YYSYMBOL_function_call_or_method = 494, /* function_call_or_method */ - YYSYMBOL_function_call_generic = 495, /* function_call_generic */ - YYSYMBOL_function_call_header_no_parameters = 496, /* function_call_header_no_parameters */ - YYSYMBOL_function_call_header_with_parameters = 497, /* function_call_header_with_parameters */ - YYSYMBOL_function_call_header = 498, /* function_call_header */ - YYSYMBOL_function_identifier = 499, /* function_identifier */ - YYSYMBOL_unary_expression = 500, /* unary_expression */ - YYSYMBOL_unary_operator = 501, /* unary_operator */ - YYSYMBOL_multiplicative_expression = 502, /* multiplicative_expression */ - YYSYMBOL_additive_expression = 503, /* additive_expression */ - YYSYMBOL_shift_expression = 504, /* shift_expression */ - YYSYMBOL_relational_expression = 505, /* relational_expression */ - YYSYMBOL_equality_expression = 506, /* equality_expression */ - YYSYMBOL_and_expression = 507, /* and_expression */ - YYSYMBOL_exclusive_or_expression = 508, /* exclusive_or_expression */ - YYSYMBOL_inclusive_or_expression = 509, /* inclusive_or_expression */ - YYSYMBOL_logical_and_expression = 510, /* logical_and_expression */ - YYSYMBOL_logical_xor_expression = 511, /* logical_xor_expression */ - YYSYMBOL_logical_or_expression = 512, /* logical_or_expression */ - YYSYMBOL_conditional_expression = 513, /* conditional_expression */ - YYSYMBOL_514_1 = 514, /* $@1 */ - YYSYMBOL_assignment_expression = 515, /* assignment_expression */ - YYSYMBOL_assignment_operator = 516, /* assignment_operator */ - YYSYMBOL_expression = 517, /* expression */ - YYSYMBOL_constant_expression = 518, /* constant_expression */ - YYSYMBOL_declaration = 519, /* declaration */ - YYSYMBOL_block_structure = 520, /* block_structure */ - YYSYMBOL_521_2 = 521, /* $@2 */ - YYSYMBOL_identifier_list = 522, /* identifier_list */ - YYSYMBOL_function_prototype = 523, /* function_prototype */ - YYSYMBOL_function_declarator = 524, /* function_declarator */ - YYSYMBOL_function_header_with_parameters = 525, /* function_header_with_parameters */ - YYSYMBOL_function_header = 526, /* function_header */ - YYSYMBOL_parameter_declarator = 527, /* parameter_declarator */ - YYSYMBOL_parameter_declaration = 528, /* parameter_declaration */ - YYSYMBOL_parameter_type_specifier = 529, /* parameter_type_specifier */ - YYSYMBOL_init_declarator_list = 530, /* init_declarator_list */ - YYSYMBOL_single_declaration = 531, /* single_declaration */ - YYSYMBOL_fully_specified_type = 532, /* fully_specified_type */ - YYSYMBOL_invariant_qualifier = 533, /* invariant_qualifier */ - YYSYMBOL_interpolation_qualifier = 534, /* interpolation_qualifier */ - YYSYMBOL_layout_qualifier = 535, /* layout_qualifier */ - YYSYMBOL_layout_qualifier_id_list = 536, /* layout_qualifier_id_list */ - YYSYMBOL_layout_qualifier_id = 537, /* layout_qualifier_id */ - YYSYMBOL_precise_qualifier = 538, /* precise_qualifier */ - YYSYMBOL_type_qualifier = 539, /* type_qualifier */ - YYSYMBOL_single_type_qualifier = 540, /* single_type_qualifier */ - YYSYMBOL_storage_qualifier = 541, /* storage_qualifier */ - YYSYMBOL_non_uniform_qualifier = 542, /* non_uniform_qualifier */ - YYSYMBOL_type_name_list = 543, /* type_name_list */ - YYSYMBOL_type_specifier = 544, /* type_specifier */ - YYSYMBOL_array_specifier = 545, /* array_specifier */ - YYSYMBOL_type_parameter_specifier_opt = 546, /* type_parameter_specifier_opt */ - YYSYMBOL_type_parameter_specifier = 547, /* type_parameter_specifier */ - YYSYMBOL_type_parameter_specifier_list = 548, /* type_parameter_specifier_list */ - YYSYMBOL_type_specifier_nonarray = 549, /* type_specifier_nonarray */ - YYSYMBOL_precision_qualifier = 550, /* precision_qualifier */ - YYSYMBOL_struct_specifier = 551, /* struct_specifier */ - YYSYMBOL_552_3 = 552, /* $@3 */ - YYSYMBOL_553_4 = 553, /* $@4 */ - YYSYMBOL_struct_declaration_list = 554, /* struct_declaration_list */ - YYSYMBOL_struct_declaration_with_heap = 555, /* struct_declaration_with_heap */ - YYSYMBOL_block_heap_inner_structure = 556, /* block_heap_inner_structure */ - YYSYMBOL_557_5 = 557, /* $@5 */ - YYSYMBOL_struct_declaration_without_heap = 558, /* struct_declaration_without_heap */ - YYSYMBOL_struct_declaration = 559, /* struct_declaration */ - YYSYMBOL_struct_declarator_list = 560, /* struct_declarator_list */ - YYSYMBOL_struct_declarator = 561, /* struct_declarator */ - YYSYMBOL_initializer = 562, /* initializer */ - YYSYMBOL_initializer_list = 563, /* initializer_list */ - YYSYMBOL_declaration_statement = 564, /* declaration_statement */ - YYSYMBOL_statement = 565, /* statement */ - YYSYMBOL_simple_statement = 566, /* simple_statement */ - YYSYMBOL_demote_statement = 567, /* demote_statement */ - YYSYMBOL_compound_statement = 568, /* compound_statement */ - YYSYMBOL_569_6 = 569, /* $@6 */ - YYSYMBOL_570_7 = 570, /* $@7 */ - YYSYMBOL_statement_no_new_scope = 571, /* statement_no_new_scope */ - YYSYMBOL_statement_scoped = 572, /* statement_scoped */ - YYSYMBOL_573_8 = 573, /* $@8 */ - YYSYMBOL_574_9 = 574, /* $@9 */ - YYSYMBOL_compound_statement_no_new_scope = 575, /* compound_statement_no_new_scope */ - YYSYMBOL_statement_list = 576, /* statement_list */ - YYSYMBOL_expression_statement = 577, /* expression_statement */ - YYSYMBOL_selection_statement = 578, /* selection_statement */ - YYSYMBOL_selection_statement_nonattributed = 579, /* selection_statement_nonattributed */ - YYSYMBOL_selection_rest_statement = 580, /* selection_rest_statement */ - YYSYMBOL_condition = 581, /* condition */ - YYSYMBOL_switch_statement = 582, /* switch_statement */ - YYSYMBOL_switch_statement_nonattributed = 583, /* switch_statement_nonattributed */ - YYSYMBOL_584_10 = 584, /* $@10 */ - YYSYMBOL_switch_statement_list = 585, /* switch_statement_list */ - YYSYMBOL_case_label = 586, /* case_label */ - YYSYMBOL_iteration_statement = 587, /* iteration_statement */ - YYSYMBOL_iteration_statement_nonattributed = 588, /* iteration_statement_nonattributed */ - YYSYMBOL_589_11 = 589, /* $@11 */ - YYSYMBOL_590_12 = 590, /* $@12 */ - YYSYMBOL_591_13 = 591, /* $@13 */ - YYSYMBOL_for_init_statement = 592, /* for_init_statement */ - YYSYMBOL_conditionopt = 593, /* conditionopt */ - YYSYMBOL_for_rest_statement = 594, /* for_rest_statement */ - YYSYMBOL_jump_statement = 595, /* jump_statement */ - YYSYMBOL_translation_unit = 596, /* translation_unit */ - YYSYMBOL_external_declaration = 597, /* external_declaration */ - YYSYMBOL_function_definition = 598, /* function_definition */ - YYSYMBOL_599_14 = 599, /* $@14 */ - YYSYMBOL_attribute = 600, /* attribute */ - YYSYMBOL_attribute_list = 601, /* attribute_list */ - YYSYMBOL_single_attribute = 602, /* single_attribute */ - YYSYMBOL_spirv_requirements_list = 603, /* spirv_requirements_list */ - YYSYMBOL_spirv_requirements_parameter = 604, /* spirv_requirements_parameter */ - YYSYMBOL_spirv_extension_list = 605, /* spirv_extension_list */ - YYSYMBOL_spirv_capability_list = 606, /* spirv_capability_list */ - YYSYMBOL_spirv_execution_mode_qualifier = 607, /* spirv_execution_mode_qualifier */ - YYSYMBOL_spirv_execution_mode_parameter_list = 608, /* spirv_execution_mode_parameter_list */ - YYSYMBOL_spirv_execution_mode_parameter = 609, /* spirv_execution_mode_parameter */ - YYSYMBOL_spirv_execution_mode_id_parameter_list = 610, /* spirv_execution_mode_id_parameter_list */ - YYSYMBOL_spirv_storage_class_qualifier = 611, /* spirv_storage_class_qualifier */ - YYSYMBOL_spirv_decorate_qualifier = 612, /* spirv_decorate_qualifier */ - YYSYMBOL_spirv_decorate_parameter_list = 613, /* spirv_decorate_parameter_list */ - YYSYMBOL_spirv_decorate_parameter = 614, /* spirv_decorate_parameter */ - YYSYMBOL_spirv_decorate_id_parameter_list = 615, /* spirv_decorate_id_parameter_list */ - YYSYMBOL_spirv_decorate_id_parameter = 616, /* spirv_decorate_id_parameter */ - YYSYMBOL_spirv_decorate_string_parameter_list = 617, /* spirv_decorate_string_parameter_list */ - YYSYMBOL_spirv_type_specifier = 618, /* spirv_type_specifier */ - YYSYMBOL_spirv_type_parameter_list = 619, /* spirv_type_parameter_list */ - YYSYMBOL_spirv_type_parameter = 620, /* spirv_type_parameter */ - YYSYMBOL_spirv_instruction_qualifier = 621, /* spirv_instruction_qualifier */ - YYSYMBOL_spirv_instruction_qualifier_list = 622, /* spirv_instruction_qualifier_list */ - YYSYMBOL_spirv_instruction_qualifier_id = 623 /* spirv_instruction_qualifier_id */ + YYSYMBOL_FLOATE2M1_T = 70, /* FLOATE2M1_T */ + YYSYMBOL_FLOATE3M2_T = 71, /* FLOATE3M2_T */ + YYSYMBOL_FLOATE2M3_T = 72, /* FLOATE2M3_T */ + YYSYMBOL_FLOATUE8M0_T = 73, /* FLOATUE8M0_T */ + YYSYMBOL_FLOATMXINT8_T = 74, /* FLOATMXINT8_T */ + YYSYMBOL_INT64_T = 75, /* INT64_T */ + YYSYMBOL_UINT64_T = 76, /* UINT64_T */ + YYSYMBOL_INT32_T = 77, /* INT32_T */ + YYSYMBOL_UINT32_T = 78, /* UINT32_T */ + YYSYMBOL_INT16_T = 79, /* INT16_T */ + YYSYMBOL_UINT16_T = 80, /* UINT16_T */ + YYSYMBOL_INT8_T = 81, /* INT8_T */ + YYSYMBOL_UINT8_T = 82, /* UINT8_T */ + YYSYMBOL_I64VEC2 = 83, /* I64VEC2 */ + YYSYMBOL_I64VEC3 = 84, /* I64VEC3 */ + YYSYMBOL_I64VEC4 = 85, /* I64VEC4 */ + YYSYMBOL_U64VEC2 = 86, /* U64VEC2 */ + YYSYMBOL_U64VEC3 = 87, /* U64VEC3 */ + YYSYMBOL_U64VEC4 = 88, /* U64VEC4 */ + YYSYMBOL_I32VEC2 = 89, /* I32VEC2 */ + YYSYMBOL_I32VEC3 = 90, /* I32VEC3 */ + YYSYMBOL_I32VEC4 = 91, /* I32VEC4 */ + YYSYMBOL_U32VEC2 = 92, /* U32VEC2 */ + YYSYMBOL_U32VEC3 = 93, /* U32VEC3 */ + YYSYMBOL_U32VEC4 = 94, /* U32VEC4 */ + YYSYMBOL_I16VEC2 = 95, /* I16VEC2 */ + YYSYMBOL_I16VEC3 = 96, /* I16VEC3 */ + YYSYMBOL_I16VEC4 = 97, /* I16VEC4 */ + YYSYMBOL_U16VEC2 = 98, /* U16VEC2 */ + YYSYMBOL_U16VEC3 = 99, /* U16VEC3 */ + YYSYMBOL_U16VEC4 = 100, /* U16VEC4 */ + YYSYMBOL_I8VEC2 = 101, /* I8VEC2 */ + YYSYMBOL_I8VEC3 = 102, /* I8VEC3 */ + YYSYMBOL_I8VEC4 = 103, /* I8VEC4 */ + YYSYMBOL_U8VEC2 = 104, /* U8VEC2 */ + YYSYMBOL_U8VEC3 = 105, /* U8VEC3 */ + YYSYMBOL_U8VEC4 = 106, /* U8VEC4 */ + YYSYMBOL_DVEC2 = 107, /* DVEC2 */ + YYSYMBOL_DVEC3 = 108, /* DVEC3 */ + YYSYMBOL_DVEC4 = 109, /* DVEC4 */ + YYSYMBOL_DMAT2 = 110, /* DMAT2 */ + YYSYMBOL_DMAT3 = 111, /* DMAT3 */ + YYSYMBOL_DMAT4 = 112, /* DMAT4 */ + YYSYMBOL_BF16VEC2 = 113, /* BF16VEC2 */ + YYSYMBOL_BF16VEC3 = 114, /* BF16VEC3 */ + YYSYMBOL_BF16VEC4 = 115, /* BF16VEC4 */ + YYSYMBOL_FE5M2VEC2 = 116, /* FE5M2VEC2 */ + YYSYMBOL_FE5M2VEC3 = 117, /* FE5M2VEC3 */ + YYSYMBOL_FE5M2VEC4 = 118, /* FE5M2VEC4 */ + YYSYMBOL_FE4M3VEC2 = 119, /* FE4M3VEC2 */ + YYSYMBOL_FE4M3VEC3 = 120, /* FE4M3VEC3 */ + YYSYMBOL_FE4M3VEC4 = 121, /* FE4M3VEC4 */ + YYSYMBOL_FE2M1VEC2 = 122, /* FE2M1VEC2 */ + YYSYMBOL_FE2M1VEC3 = 123, /* FE2M1VEC3 */ + YYSYMBOL_FE2M1VEC4 = 124, /* FE2M1VEC4 */ + YYSYMBOL_FE3M2VEC2 = 125, /* FE3M2VEC2 */ + YYSYMBOL_FE3M2VEC3 = 126, /* FE3M2VEC3 */ + YYSYMBOL_FE3M2VEC4 = 127, /* FE3M2VEC4 */ + YYSYMBOL_FE2M3VEC2 = 128, /* FE2M3VEC2 */ + YYSYMBOL_FE2M3VEC3 = 129, /* FE2M3VEC3 */ + YYSYMBOL_FE2M3VEC4 = 130, /* FE2M3VEC4 */ + YYSYMBOL_FUE8M0VEC2 = 131, /* FUE8M0VEC2 */ + YYSYMBOL_FUE8M0VEC3 = 132, /* FUE8M0VEC3 */ + YYSYMBOL_FUE8M0VEC4 = 133, /* FUE8M0VEC4 */ + YYSYMBOL_FMXINT8VEC2 = 134, /* FMXINT8VEC2 */ + YYSYMBOL_FMXINT8VEC3 = 135, /* FMXINT8VEC3 */ + YYSYMBOL_FMXINT8VEC4 = 136, /* FMXINT8VEC4 */ + YYSYMBOL_F16VEC2 = 137, /* F16VEC2 */ + YYSYMBOL_F16VEC3 = 138, /* F16VEC3 */ + YYSYMBOL_F16VEC4 = 139, /* F16VEC4 */ + YYSYMBOL_F16MAT2 = 140, /* F16MAT2 */ + YYSYMBOL_F16MAT3 = 141, /* F16MAT3 */ + YYSYMBOL_F16MAT4 = 142, /* F16MAT4 */ + YYSYMBOL_F32VEC2 = 143, /* F32VEC2 */ + YYSYMBOL_F32VEC3 = 144, /* F32VEC3 */ + YYSYMBOL_F32VEC4 = 145, /* F32VEC4 */ + YYSYMBOL_F32MAT2 = 146, /* F32MAT2 */ + YYSYMBOL_F32MAT3 = 147, /* F32MAT3 */ + YYSYMBOL_F32MAT4 = 148, /* F32MAT4 */ + YYSYMBOL_F64VEC2 = 149, /* F64VEC2 */ + YYSYMBOL_F64VEC3 = 150, /* F64VEC3 */ + YYSYMBOL_F64VEC4 = 151, /* F64VEC4 */ + YYSYMBOL_F64MAT2 = 152, /* F64MAT2 */ + YYSYMBOL_F64MAT3 = 153, /* F64MAT3 */ + YYSYMBOL_F64MAT4 = 154, /* F64MAT4 */ + YYSYMBOL_DMAT2X2 = 155, /* DMAT2X2 */ + YYSYMBOL_DMAT2X3 = 156, /* DMAT2X3 */ + YYSYMBOL_DMAT2X4 = 157, /* DMAT2X4 */ + YYSYMBOL_DMAT3X2 = 158, /* DMAT3X2 */ + YYSYMBOL_DMAT3X3 = 159, /* DMAT3X3 */ + YYSYMBOL_DMAT3X4 = 160, /* DMAT3X4 */ + YYSYMBOL_DMAT4X2 = 161, /* DMAT4X2 */ + YYSYMBOL_DMAT4X3 = 162, /* DMAT4X3 */ + YYSYMBOL_DMAT4X4 = 163, /* DMAT4X4 */ + YYSYMBOL_F16MAT2X2 = 164, /* F16MAT2X2 */ + YYSYMBOL_F16MAT2X3 = 165, /* F16MAT2X3 */ + YYSYMBOL_F16MAT2X4 = 166, /* F16MAT2X4 */ + YYSYMBOL_F16MAT3X2 = 167, /* F16MAT3X2 */ + YYSYMBOL_F16MAT3X3 = 168, /* F16MAT3X3 */ + YYSYMBOL_F16MAT3X4 = 169, /* F16MAT3X4 */ + YYSYMBOL_F16MAT4X2 = 170, /* F16MAT4X2 */ + YYSYMBOL_F16MAT4X3 = 171, /* F16MAT4X3 */ + YYSYMBOL_F16MAT4X4 = 172, /* F16MAT4X4 */ + YYSYMBOL_F32MAT2X2 = 173, /* F32MAT2X2 */ + YYSYMBOL_F32MAT2X3 = 174, /* F32MAT2X3 */ + YYSYMBOL_F32MAT2X4 = 175, /* F32MAT2X4 */ + YYSYMBOL_F32MAT3X2 = 176, /* F32MAT3X2 */ + YYSYMBOL_F32MAT3X3 = 177, /* F32MAT3X3 */ + YYSYMBOL_F32MAT3X4 = 178, /* F32MAT3X4 */ + YYSYMBOL_F32MAT4X2 = 179, /* F32MAT4X2 */ + YYSYMBOL_F32MAT4X3 = 180, /* F32MAT4X3 */ + YYSYMBOL_F32MAT4X4 = 181, /* F32MAT4X4 */ + YYSYMBOL_F64MAT2X2 = 182, /* F64MAT2X2 */ + YYSYMBOL_F64MAT2X3 = 183, /* F64MAT2X3 */ + YYSYMBOL_F64MAT2X4 = 184, /* F64MAT2X4 */ + YYSYMBOL_F64MAT3X2 = 185, /* F64MAT3X2 */ + YYSYMBOL_F64MAT3X3 = 186, /* F64MAT3X3 */ + YYSYMBOL_F64MAT3X4 = 187, /* F64MAT3X4 */ + YYSYMBOL_F64MAT4X2 = 188, /* F64MAT4X2 */ + YYSYMBOL_F64MAT4X3 = 189, /* F64MAT4X3 */ + YYSYMBOL_F64MAT4X4 = 190, /* F64MAT4X4 */ + YYSYMBOL_ATOMIC_UINT = 191, /* ATOMIC_UINT */ + YYSYMBOL_ACCSTRUCTNV = 192, /* ACCSTRUCTNV */ + YYSYMBOL_ACCSTRUCTEXT = 193, /* ACCSTRUCTEXT */ + YYSYMBOL_RAYQUERYEXT = 194, /* RAYQUERYEXT */ + YYSYMBOL_FCOOPMATNV = 195, /* FCOOPMATNV */ + YYSYMBOL_ICOOPMATNV = 196, /* ICOOPMATNV */ + YYSYMBOL_UCOOPMATNV = 197, /* UCOOPMATNV */ + YYSYMBOL_COOPMAT = 198, /* COOPMAT */ + YYSYMBOL_COOPVECNV = 199, /* COOPVECNV */ + YYSYMBOL_VECTOR = 200, /* VECTOR */ + YYSYMBOL_HITOBJECTNV = 201, /* HITOBJECTNV */ + YYSYMBOL_HITOBJECTATTRNV = 202, /* HITOBJECTATTRNV */ + YYSYMBOL_HITOBJECTEXT = 203, /* HITOBJECTEXT */ + YYSYMBOL_HITOBJECTATTREXT = 204, /* HITOBJECTATTREXT */ + YYSYMBOL_TENSORLAYOUTNV = 205, /* TENSORLAYOUTNV */ + YYSYMBOL_TENSORVIEWNV = 206, /* TENSORVIEWNV */ + YYSYMBOL_TENSORARM = 207, /* TENSORARM */ + YYSYMBOL_SAMPLERCUBEARRAY = 208, /* SAMPLERCUBEARRAY */ + YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 209, /* SAMPLERCUBEARRAYSHADOW */ + YYSYMBOL_ISAMPLERCUBEARRAY = 210, /* ISAMPLERCUBEARRAY */ + YYSYMBOL_USAMPLERCUBEARRAY = 211, /* USAMPLERCUBEARRAY */ + YYSYMBOL_SAMPLER1D = 212, /* SAMPLER1D */ + YYSYMBOL_SAMPLER1DARRAY = 213, /* SAMPLER1DARRAY */ + YYSYMBOL_SAMPLER1DARRAYSHADOW = 214, /* SAMPLER1DARRAYSHADOW */ + YYSYMBOL_ISAMPLER1D = 215, /* ISAMPLER1D */ + YYSYMBOL_SAMPLER1DSHADOW = 216, /* SAMPLER1DSHADOW */ + YYSYMBOL_SAMPLER2DRECT = 217, /* SAMPLER2DRECT */ + YYSYMBOL_SAMPLER2DRECTSHADOW = 218, /* SAMPLER2DRECTSHADOW */ + YYSYMBOL_ISAMPLER2DRECT = 219, /* ISAMPLER2DRECT */ + YYSYMBOL_USAMPLER2DRECT = 220, /* USAMPLER2DRECT */ + YYSYMBOL_SAMPLERBUFFER = 221, /* SAMPLERBUFFER */ + YYSYMBOL_ISAMPLERBUFFER = 222, /* ISAMPLERBUFFER */ + YYSYMBOL_USAMPLERBUFFER = 223, /* USAMPLERBUFFER */ + YYSYMBOL_SAMPLER2DMS = 224, /* SAMPLER2DMS */ + YYSYMBOL_ISAMPLER2DMS = 225, /* ISAMPLER2DMS */ + YYSYMBOL_USAMPLER2DMS = 226, /* USAMPLER2DMS */ + YYSYMBOL_SAMPLER2DMSARRAY = 227, /* SAMPLER2DMSARRAY */ + YYSYMBOL_ISAMPLER2DMSARRAY = 228, /* ISAMPLER2DMSARRAY */ + YYSYMBOL_USAMPLER2DMSARRAY = 229, /* USAMPLER2DMSARRAY */ + YYSYMBOL_SAMPLEREXTERNALOES = 230, /* SAMPLEREXTERNALOES */ + YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 231, /* SAMPLEREXTERNAL2DY2YEXT */ + YYSYMBOL_ISAMPLER1DARRAY = 232, /* ISAMPLER1DARRAY */ + YYSYMBOL_USAMPLER1D = 233, /* USAMPLER1D */ + YYSYMBOL_USAMPLER1DARRAY = 234, /* USAMPLER1DARRAY */ + YYSYMBOL_F16SAMPLER1D = 235, /* F16SAMPLER1D */ + YYSYMBOL_F16SAMPLER2D = 236, /* F16SAMPLER2D */ + YYSYMBOL_F16SAMPLER3D = 237, /* F16SAMPLER3D */ + YYSYMBOL_F16SAMPLER2DRECT = 238, /* F16SAMPLER2DRECT */ + YYSYMBOL_F16SAMPLERCUBE = 239, /* F16SAMPLERCUBE */ + YYSYMBOL_F16SAMPLER1DARRAY = 240, /* F16SAMPLER1DARRAY */ + YYSYMBOL_F16SAMPLER2DARRAY = 241, /* F16SAMPLER2DARRAY */ + YYSYMBOL_F16SAMPLERCUBEARRAY = 242, /* F16SAMPLERCUBEARRAY */ + YYSYMBOL_F16SAMPLERBUFFER = 243, /* F16SAMPLERBUFFER */ + YYSYMBOL_F16SAMPLER2DMS = 244, /* F16SAMPLER2DMS */ + YYSYMBOL_F16SAMPLER2DMSARRAY = 245, /* F16SAMPLER2DMSARRAY */ + YYSYMBOL_F16SAMPLER1DSHADOW = 246, /* F16SAMPLER1DSHADOW */ + YYSYMBOL_F16SAMPLER2DSHADOW = 247, /* F16SAMPLER2DSHADOW */ + YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 248, /* F16SAMPLER1DARRAYSHADOW */ + YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 249, /* F16SAMPLER2DARRAYSHADOW */ + YYSYMBOL_F16SAMPLER2DRECTSHADOW = 250, /* F16SAMPLER2DRECTSHADOW */ + YYSYMBOL_F16SAMPLERCUBESHADOW = 251, /* F16SAMPLERCUBESHADOW */ + YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 252, /* F16SAMPLERCUBEARRAYSHADOW */ + YYSYMBOL_IMAGE1D = 253, /* IMAGE1D */ + YYSYMBOL_IIMAGE1D = 254, /* IIMAGE1D */ + YYSYMBOL_UIMAGE1D = 255, /* UIMAGE1D */ + YYSYMBOL_IMAGE2D = 256, /* IMAGE2D */ + YYSYMBOL_IIMAGE2D = 257, /* IIMAGE2D */ + YYSYMBOL_UIMAGE2D = 258, /* UIMAGE2D */ + YYSYMBOL_IMAGE3D = 259, /* IMAGE3D */ + YYSYMBOL_IIMAGE3D = 260, /* IIMAGE3D */ + YYSYMBOL_UIMAGE3D = 261, /* UIMAGE3D */ + YYSYMBOL_IMAGE2DRECT = 262, /* IMAGE2DRECT */ + YYSYMBOL_IIMAGE2DRECT = 263, /* IIMAGE2DRECT */ + YYSYMBOL_UIMAGE2DRECT = 264, /* UIMAGE2DRECT */ + YYSYMBOL_IMAGECUBE = 265, /* IMAGECUBE */ + YYSYMBOL_IIMAGECUBE = 266, /* IIMAGECUBE */ + YYSYMBOL_UIMAGECUBE = 267, /* UIMAGECUBE */ + YYSYMBOL_IMAGEBUFFER = 268, /* IMAGEBUFFER */ + YYSYMBOL_IIMAGEBUFFER = 269, /* IIMAGEBUFFER */ + YYSYMBOL_UIMAGEBUFFER = 270, /* UIMAGEBUFFER */ + YYSYMBOL_IMAGE1DARRAY = 271, /* IMAGE1DARRAY */ + YYSYMBOL_IIMAGE1DARRAY = 272, /* IIMAGE1DARRAY */ + YYSYMBOL_UIMAGE1DARRAY = 273, /* UIMAGE1DARRAY */ + YYSYMBOL_IMAGE2DARRAY = 274, /* IMAGE2DARRAY */ + YYSYMBOL_IIMAGE2DARRAY = 275, /* IIMAGE2DARRAY */ + YYSYMBOL_UIMAGE2DARRAY = 276, /* UIMAGE2DARRAY */ + YYSYMBOL_IMAGECUBEARRAY = 277, /* IMAGECUBEARRAY */ + YYSYMBOL_IIMAGECUBEARRAY = 278, /* IIMAGECUBEARRAY */ + YYSYMBOL_UIMAGECUBEARRAY = 279, /* UIMAGECUBEARRAY */ + YYSYMBOL_IMAGE2DMS = 280, /* IMAGE2DMS */ + YYSYMBOL_IIMAGE2DMS = 281, /* IIMAGE2DMS */ + YYSYMBOL_UIMAGE2DMS = 282, /* UIMAGE2DMS */ + YYSYMBOL_IMAGE2DMSARRAY = 283, /* IMAGE2DMSARRAY */ + YYSYMBOL_IIMAGE2DMSARRAY = 284, /* IIMAGE2DMSARRAY */ + YYSYMBOL_UIMAGE2DMSARRAY = 285, /* UIMAGE2DMSARRAY */ + YYSYMBOL_F16IMAGE1D = 286, /* F16IMAGE1D */ + YYSYMBOL_F16IMAGE2D = 287, /* F16IMAGE2D */ + YYSYMBOL_F16IMAGE3D = 288, /* F16IMAGE3D */ + YYSYMBOL_F16IMAGE2DRECT = 289, /* F16IMAGE2DRECT */ + YYSYMBOL_F16IMAGECUBE = 290, /* F16IMAGECUBE */ + YYSYMBOL_F16IMAGE1DARRAY = 291, /* F16IMAGE1DARRAY */ + YYSYMBOL_F16IMAGE2DARRAY = 292, /* F16IMAGE2DARRAY */ + YYSYMBOL_F16IMAGECUBEARRAY = 293, /* F16IMAGECUBEARRAY */ + YYSYMBOL_F16IMAGEBUFFER = 294, /* F16IMAGEBUFFER */ + YYSYMBOL_F16IMAGE2DMS = 295, /* F16IMAGE2DMS */ + YYSYMBOL_F16IMAGE2DMSARRAY = 296, /* F16IMAGE2DMSARRAY */ + YYSYMBOL_I64IMAGE1D = 297, /* I64IMAGE1D */ + YYSYMBOL_U64IMAGE1D = 298, /* U64IMAGE1D */ + YYSYMBOL_I64IMAGE2D = 299, /* I64IMAGE2D */ + YYSYMBOL_U64IMAGE2D = 300, /* U64IMAGE2D */ + YYSYMBOL_I64IMAGE3D = 301, /* I64IMAGE3D */ + YYSYMBOL_U64IMAGE3D = 302, /* U64IMAGE3D */ + YYSYMBOL_I64IMAGE2DRECT = 303, /* I64IMAGE2DRECT */ + YYSYMBOL_U64IMAGE2DRECT = 304, /* U64IMAGE2DRECT */ + YYSYMBOL_I64IMAGECUBE = 305, /* I64IMAGECUBE */ + YYSYMBOL_U64IMAGECUBE = 306, /* U64IMAGECUBE */ + YYSYMBOL_I64IMAGEBUFFER = 307, /* I64IMAGEBUFFER */ + YYSYMBOL_U64IMAGEBUFFER = 308, /* U64IMAGEBUFFER */ + YYSYMBOL_I64IMAGE1DARRAY = 309, /* I64IMAGE1DARRAY */ + YYSYMBOL_U64IMAGE1DARRAY = 310, /* U64IMAGE1DARRAY */ + YYSYMBOL_I64IMAGE2DARRAY = 311, /* I64IMAGE2DARRAY */ + YYSYMBOL_U64IMAGE2DARRAY = 312, /* U64IMAGE2DARRAY */ + YYSYMBOL_I64IMAGECUBEARRAY = 313, /* I64IMAGECUBEARRAY */ + YYSYMBOL_U64IMAGECUBEARRAY = 314, /* U64IMAGECUBEARRAY */ + YYSYMBOL_I64IMAGE2DMS = 315, /* I64IMAGE2DMS */ + YYSYMBOL_U64IMAGE2DMS = 316, /* U64IMAGE2DMS */ + YYSYMBOL_I64IMAGE2DMSARRAY = 317, /* I64IMAGE2DMSARRAY */ + YYSYMBOL_U64IMAGE2DMSARRAY = 318, /* U64IMAGE2DMSARRAY */ + YYSYMBOL_TEXTURECUBEARRAY = 319, /* TEXTURECUBEARRAY */ + YYSYMBOL_ITEXTURECUBEARRAY = 320, /* ITEXTURECUBEARRAY */ + YYSYMBOL_UTEXTURECUBEARRAY = 321, /* UTEXTURECUBEARRAY */ + YYSYMBOL_TEXTURE1D = 322, /* TEXTURE1D */ + YYSYMBOL_ITEXTURE1D = 323, /* ITEXTURE1D */ + YYSYMBOL_UTEXTURE1D = 324, /* UTEXTURE1D */ + YYSYMBOL_TEXTURE1DARRAY = 325, /* TEXTURE1DARRAY */ + YYSYMBOL_ITEXTURE1DARRAY = 326, /* ITEXTURE1DARRAY */ + YYSYMBOL_UTEXTURE1DARRAY = 327, /* UTEXTURE1DARRAY */ + YYSYMBOL_TEXTURE2DRECT = 328, /* TEXTURE2DRECT */ + YYSYMBOL_ITEXTURE2DRECT = 329, /* ITEXTURE2DRECT */ + YYSYMBOL_UTEXTURE2DRECT = 330, /* UTEXTURE2DRECT */ + YYSYMBOL_TEXTUREBUFFER = 331, /* TEXTUREBUFFER */ + YYSYMBOL_ITEXTUREBUFFER = 332, /* ITEXTUREBUFFER */ + YYSYMBOL_UTEXTUREBUFFER = 333, /* UTEXTUREBUFFER */ + YYSYMBOL_TEXTURE2DMS = 334, /* TEXTURE2DMS */ + YYSYMBOL_ITEXTURE2DMS = 335, /* ITEXTURE2DMS */ + YYSYMBOL_UTEXTURE2DMS = 336, /* UTEXTURE2DMS */ + YYSYMBOL_TEXTURE2DMSARRAY = 337, /* TEXTURE2DMSARRAY */ + YYSYMBOL_ITEXTURE2DMSARRAY = 338, /* ITEXTURE2DMSARRAY */ + YYSYMBOL_UTEXTURE2DMSARRAY = 339, /* UTEXTURE2DMSARRAY */ + YYSYMBOL_F16TEXTURE1D = 340, /* F16TEXTURE1D */ + YYSYMBOL_F16TEXTURE2D = 341, /* F16TEXTURE2D */ + YYSYMBOL_F16TEXTURE3D = 342, /* F16TEXTURE3D */ + YYSYMBOL_F16TEXTURE2DRECT = 343, /* F16TEXTURE2DRECT */ + YYSYMBOL_F16TEXTURECUBE = 344, /* F16TEXTURECUBE */ + YYSYMBOL_F16TEXTURE1DARRAY = 345, /* F16TEXTURE1DARRAY */ + YYSYMBOL_F16TEXTURE2DARRAY = 346, /* F16TEXTURE2DARRAY */ + YYSYMBOL_F16TEXTURECUBEARRAY = 347, /* F16TEXTURECUBEARRAY */ + YYSYMBOL_F16TEXTUREBUFFER = 348, /* F16TEXTUREBUFFER */ + YYSYMBOL_F16TEXTURE2DMS = 349, /* F16TEXTURE2DMS */ + YYSYMBOL_F16TEXTURE2DMSARRAY = 350, /* F16TEXTURE2DMSARRAY */ + YYSYMBOL_SUBPASSINPUT = 351, /* SUBPASSINPUT */ + YYSYMBOL_SUBPASSINPUTMS = 352, /* SUBPASSINPUTMS */ + YYSYMBOL_ISUBPASSINPUT = 353, /* ISUBPASSINPUT */ + YYSYMBOL_ISUBPASSINPUTMS = 354, /* ISUBPASSINPUTMS */ + YYSYMBOL_USUBPASSINPUT = 355, /* USUBPASSINPUT */ + YYSYMBOL_USUBPASSINPUTMS = 356, /* USUBPASSINPUTMS */ + YYSYMBOL_F16SUBPASSINPUT = 357, /* F16SUBPASSINPUT */ + YYSYMBOL_F16SUBPASSINPUTMS = 358, /* F16SUBPASSINPUTMS */ + YYSYMBOL_SPIRV_INSTRUCTION = 359, /* SPIRV_INSTRUCTION */ + YYSYMBOL_SPIRV_EXECUTION_MODE = 360, /* SPIRV_EXECUTION_MODE */ + YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 361, /* SPIRV_EXECUTION_MODE_ID */ + YYSYMBOL_SPIRV_DECORATE = 362, /* SPIRV_DECORATE */ + YYSYMBOL_SPIRV_DECORATE_ID = 363, /* SPIRV_DECORATE_ID */ + YYSYMBOL_SPIRV_DECORATE_STRING = 364, /* SPIRV_DECORATE_STRING */ + YYSYMBOL_SPIRV_TYPE = 365, /* SPIRV_TYPE */ + YYSYMBOL_SPIRV_STORAGE_CLASS = 366, /* SPIRV_STORAGE_CLASS */ + YYSYMBOL_SPIRV_BY_REFERENCE = 367, /* SPIRV_BY_REFERENCE */ + YYSYMBOL_SPIRV_LITERAL = 368, /* SPIRV_LITERAL */ + YYSYMBOL_ATTACHMENTEXT = 369, /* ATTACHMENTEXT */ + YYSYMBOL_IATTACHMENTEXT = 370, /* IATTACHMENTEXT */ + YYSYMBOL_UATTACHMENTEXT = 371, /* UATTACHMENTEXT */ + YYSYMBOL_LEFT_OP = 372, /* LEFT_OP */ + YYSYMBOL_RIGHT_OP = 373, /* RIGHT_OP */ + YYSYMBOL_INC_OP = 374, /* INC_OP */ + YYSYMBOL_DEC_OP = 375, /* DEC_OP */ + YYSYMBOL_LE_OP = 376, /* LE_OP */ + YYSYMBOL_GE_OP = 377, /* GE_OP */ + YYSYMBOL_EQ_OP = 378, /* EQ_OP */ + YYSYMBOL_NE_OP = 379, /* NE_OP */ + YYSYMBOL_AND_OP = 380, /* AND_OP */ + YYSYMBOL_OR_OP = 381, /* OR_OP */ + YYSYMBOL_XOR_OP = 382, /* XOR_OP */ + YYSYMBOL_MUL_ASSIGN = 383, /* MUL_ASSIGN */ + YYSYMBOL_DIV_ASSIGN = 384, /* DIV_ASSIGN */ + YYSYMBOL_ADD_ASSIGN = 385, /* ADD_ASSIGN */ + YYSYMBOL_MOD_ASSIGN = 386, /* MOD_ASSIGN */ + YYSYMBOL_LEFT_ASSIGN = 387, /* LEFT_ASSIGN */ + YYSYMBOL_RIGHT_ASSIGN = 388, /* RIGHT_ASSIGN */ + YYSYMBOL_AND_ASSIGN = 389, /* AND_ASSIGN */ + YYSYMBOL_XOR_ASSIGN = 390, /* XOR_ASSIGN */ + YYSYMBOL_OR_ASSIGN = 391, /* OR_ASSIGN */ + YYSYMBOL_SUB_ASSIGN = 392, /* SUB_ASSIGN */ + YYSYMBOL_STRING_LITERAL = 393, /* STRING_LITERAL */ + YYSYMBOL_LEFT_PAREN = 394, /* LEFT_PAREN */ + YYSYMBOL_RIGHT_PAREN = 395, /* RIGHT_PAREN */ + YYSYMBOL_LEFT_BRACKET = 396, /* LEFT_BRACKET */ + YYSYMBOL_RIGHT_BRACKET = 397, /* RIGHT_BRACKET */ + YYSYMBOL_LEFT_BRACE = 398, /* LEFT_BRACE */ + YYSYMBOL_RIGHT_BRACE = 399, /* RIGHT_BRACE */ + YYSYMBOL_DOT = 400, /* DOT */ + YYSYMBOL_COMMA = 401, /* COMMA */ + YYSYMBOL_COLON = 402, /* COLON */ + YYSYMBOL_EQUAL = 403, /* EQUAL */ + YYSYMBOL_SEMICOLON = 404, /* SEMICOLON */ + YYSYMBOL_BANG = 405, /* BANG */ + YYSYMBOL_DASH = 406, /* DASH */ + YYSYMBOL_TILDE = 407, /* TILDE */ + YYSYMBOL_PLUS = 408, /* PLUS */ + YYSYMBOL_STAR = 409, /* STAR */ + YYSYMBOL_SLASH = 410, /* SLASH */ + YYSYMBOL_PERCENT = 411, /* PERCENT */ + YYSYMBOL_LEFT_ANGLE = 412, /* LEFT_ANGLE */ + YYSYMBOL_RIGHT_ANGLE = 413, /* RIGHT_ANGLE */ + YYSYMBOL_VERTICAL_BAR = 414, /* VERTICAL_BAR */ + YYSYMBOL_CARET = 415, /* CARET */ + YYSYMBOL_AMPERSAND = 416, /* AMPERSAND */ + YYSYMBOL_QUESTION = 417, /* QUESTION */ + YYSYMBOL_INVARIANT = 418, /* INVARIANT */ + YYSYMBOL_HIGH_PRECISION = 419, /* HIGH_PRECISION */ + YYSYMBOL_MEDIUM_PRECISION = 420, /* MEDIUM_PRECISION */ + YYSYMBOL_LOW_PRECISION = 421, /* LOW_PRECISION */ + YYSYMBOL_PRECISION = 422, /* PRECISION */ + YYSYMBOL_PACKED = 423, /* PACKED */ + YYSYMBOL_RESOURCE = 424, /* RESOURCE */ + YYSYMBOL_SUPERP = 425, /* SUPERP */ + YYSYMBOL_INLINE = 426, /* INLINE */ + YYSYMBOL_NOINLINE = 427, /* NOINLINE */ + YYSYMBOL_FLOATCONSTANT = 428, /* FLOATCONSTANT */ + YYSYMBOL_INTCONSTANT = 429, /* INTCONSTANT */ + YYSYMBOL_UINTCONSTANT = 430, /* UINTCONSTANT */ + YYSYMBOL_BOOLCONSTANT = 431, /* BOOLCONSTANT */ + YYSYMBOL_IDENTIFIER = 432, /* IDENTIFIER */ + YYSYMBOL_TYPE_NAME = 433, /* TYPE_NAME */ + YYSYMBOL_CENTROID = 434, /* CENTROID */ + YYSYMBOL_IN = 435, /* IN */ + YYSYMBOL_OUT = 436, /* OUT */ + YYSYMBOL_INOUT = 437, /* INOUT */ + YYSYMBOL_STRUCT = 438, /* STRUCT */ + YYSYMBOL_VOID = 439, /* VOID */ + YYSYMBOL_WHILE = 440, /* WHILE */ + YYSYMBOL_BREAK = 441, /* BREAK */ + YYSYMBOL_CONTINUE = 442, /* CONTINUE */ + YYSYMBOL_DO = 443, /* DO */ + YYSYMBOL_ELSE = 444, /* ELSE */ + YYSYMBOL_FOR = 445, /* FOR */ + YYSYMBOL_IF = 446, /* IF */ + YYSYMBOL_DISCARD = 447, /* DISCARD */ + YYSYMBOL_RETURN = 448, /* RETURN */ + YYSYMBOL_SWITCH = 449, /* SWITCH */ + YYSYMBOL_CASE = 450, /* CASE */ + YYSYMBOL_DEFAULT = 451, /* DEFAULT */ + YYSYMBOL_TERMINATE_INVOCATION = 452, /* TERMINATE_INVOCATION */ + YYSYMBOL_TERMINATE_RAY = 453, /* TERMINATE_RAY */ + YYSYMBOL_IGNORE_INTERSECTION = 454, /* IGNORE_INTERSECTION */ + YYSYMBOL_UNIFORM = 455, /* UNIFORM */ + YYSYMBOL_SHARED = 456, /* SHARED */ + YYSYMBOL_BUFFER = 457, /* BUFFER */ + YYSYMBOL_TILEIMAGEEXT = 458, /* TILEIMAGEEXT */ + YYSYMBOL_FLAT = 459, /* FLAT */ + YYSYMBOL_SMOOTH = 460, /* SMOOTH */ + YYSYMBOL_LAYOUT = 461, /* LAYOUT */ + YYSYMBOL_DOUBLECONSTANT = 462, /* DOUBLECONSTANT */ + YYSYMBOL_INT16CONSTANT = 463, /* INT16CONSTANT */ + YYSYMBOL_UINT16CONSTANT = 464, /* UINT16CONSTANT */ + YYSYMBOL_FLOAT16CONSTANT = 465, /* FLOAT16CONSTANT */ + YYSYMBOL_INT32CONSTANT = 466, /* INT32CONSTANT */ + YYSYMBOL_UINT32CONSTANT = 467, /* UINT32CONSTANT */ + YYSYMBOL_FLOATE2M1CONSTANT = 468, /* FLOATE2M1CONSTANT */ + YYSYMBOL_FLOATE3M2CONSTANT = 469, /* FLOATE3M2CONSTANT */ + YYSYMBOL_FLOATE2M3CONSTANT = 470, /* FLOATE2M3CONSTANT */ + YYSYMBOL_FLOATUE8M0CONSTANT = 471, /* FLOATUE8M0CONSTANT */ + YYSYMBOL_FLOATMXINT8CONSTANT = 472, /* FLOATMXINT8CONSTANT */ + YYSYMBOL_INT64CONSTANT = 473, /* INT64CONSTANT */ + YYSYMBOL_UINT64CONSTANT = 474, /* UINT64CONSTANT */ + YYSYMBOL_SUBROUTINE = 475, /* SUBROUTINE */ + YYSYMBOL_DEMOTE = 476, /* DEMOTE */ + YYSYMBOL_FUNCTION = 477, /* FUNCTION */ + YYSYMBOL_PAYLOADNV = 478, /* PAYLOADNV */ + YYSYMBOL_PAYLOADINNV = 479, /* PAYLOADINNV */ + YYSYMBOL_HITATTRNV = 480, /* HITATTRNV */ + YYSYMBOL_CALLDATANV = 481, /* CALLDATANV */ + YYSYMBOL_CALLDATAINNV = 482, /* CALLDATAINNV */ + YYSYMBOL_PAYLOADEXT = 483, /* PAYLOADEXT */ + YYSYMBOL_PAYLOADINEXT = 484, /* PAYLOADINEXT */ + YYSYMBOL_HITATTREXT = 485, /* HITATTREXT */ + YYSYMBOL_CALLDATAEXT = 486, /* CALLDATAEXT */ + YYSYMBOL_CALLDATAINEXT = 487, /* CALLDATAINEXT */ + YYSYMBOL_PATCH = 488, /* PATCH */ + YYSYMBOL_SAMPLE = 489, /* SAMPLE */ + YYSYMBOL_NONUNIFORM = 490, /* NONUNIFORM */ + YYSYMBOL_RESOURCEHEAP = 491, /* RESOURCEHEAP */ + YYSYMBOL_SAMPLERHEAP = 492, /* SAMPLERHEAP */ + YYSYMBOL_COHERENT = 493, /* COHERENT */ + YYSYMBOL_VOLATILE = 494, /* VOLATILE */ + YYSYMBOL_RESTRICT = 495, /* RESTRICT */ + YYSYMBOL_READONLY = 496, /* READONLY */ + YYSYMBOL_WRITEONLY = 497, /* WRITEONLY */ + YYSYMBOL_NONTEMPORAL = 498, /* NONTEMPORAL */ + YYSYMBOL_DEVICECOHERENT = 499, /* DEVICECOHERENT */ + YYSYMBOL_QUEUEFAMILYCOHERENT = 500, /* QUEUEFAMILYCOHERENT */ + YYSYMBOL_WORKGROUPCOHERENT = 501, /* WORKGROUPCOHERENT */ + YYSYMBOL_SUBGROUPCOHERENT = 502, /* SUBGROUPCOHERENT */ + YYSYMBOL_NONPRIVATE = 503, /* NONPRIVATE */ + YYSYMBOL_SHADERCALLCOHERENT = 504, /* SHADERCALLCOHERENT */ + YYSYMBOL_NOPERSPECTIVE = 505, /* NOPERSPECTIVE */ + YYSYMBOL_EXPLICITINTERPAMD = 506, /* EXPLICITINTERPAMD */ + YYSYMBOL_PERVERTEXEXT = 507, /* PERVERTEXEXT */ + YYSYMBOL_PERVERTEXNV = 508, /* PERVERTEXNV */ + YYSYMBOL_PERPRIMITIVENV = 509, /* PERPRIMITIVENV */ + YYSYMBOL_PERVIEWNV = 510, /* PERVIEWNV */ + YYSYMBOL_PERTASKNV = 511, /* PERTASKNV */ + YYSYMBOL_PERPRIMITIVEEXT = 512, /* PERPRIMITIVEEXT */ + YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 513, /* TASKPAYLOADWORKGROUPEXT */ + YYSYMBOL_PRECISE = 514, /* PRECISE */ + YYSYMBOL_YYACCEPT = 515, /* $accept */ + YYSYMBOL_variable_identifier = 516, /* variable_identifier */ + YYSYMBOL_primary_expression = 517, /* primary_expression */ + YYSYMBOL_postfix_expression = 518, /* postfix_expression */ + YYSYMBOL_integer_expression = 519, /* integer_expression */ + YYSYMBOL_function_call = 520, /* function_call */ + YYSYMBOL_function_call_or_method = 521, /* function_call_or_method */ + YYSYMBOL_function_call_generic = 522, /* function_call_generic */ + YYSYMBOL_function_call_header_no_parameters = 523, /* function_call_header_no_parameters */ + YYSYMBOL_function_call_header_with_parameters = 524, /* function_call_header_with_parameters */ + YYSYMBOL_function_call_header = 525, /* function_call_header */ + YYSYMBOL_function_identifier = 526, /* function_identifier */ + YYSYMBOL_unary_expression = 527, /* unary_expression */ + YYSYMBOL_unary_operator = 528, /* unary_operator */ + YYSYMBOL_multiplicative_expression = 529, /* multiplicative_expression */ + YYSYMBOL_additive_expression = 530, /* additive_expression */ + YYSYMBOL_shift_expression = 531, /* shift_expression */ + YYSYMBOL_relational_expression = 532, /* relational_expression */ + YYSYMBOL_equality_expression = 533, /* equality_expression */ + YYSYMBOL_and_expression = 534, /* and_expression */ + YYSYMBOL_exclusive_or_expression = 535, /* exclusive_or_expression */ + YYSYMBOL_inclusive_or_expression = 536, /* inclusive_or_expression */ + YYSYMBOL_logical_and_expression = 537, /* logical_and_expression */ + YYSYMBOL_logical_xor_expression = 538, /* logical_xor_expression */ + YYSYMBOL_logical_or_expression = 539, /* logical_or_expression */ + YYSYMBOL_conditional_expression = 540, /* conditional_expression */ + YYSYMBOL_541_1 = 541, /* $@1 */ + YYSYMBOL_assignment_expression = 542, /* assignment_expression */ + YYSYMBOL_assignment_operator = 543, /* assignment_operator */ + YYSYMBOL_expression = 544, /* expression */ + YYSYMBOL_constant_expression = 545, /* constant_expression */ + YYSYMBOL_declaration = 546, /* declaration */ + YYSYMBOL_block_structure = 547, /* block_structure */ + YYSYMBOL_548_2 = 548, /* $@2 */ + YYSYMBOL_identifier_list = 549, /* identifier_list */ + YYSYMBOL_function_prototype = 550, /* function_prototype */ + YYSYMBOL_function_declarator = 551, /* function_declarator */ + YYSYMBOL_function_header_with_parameters = 552, /* function_header_with_parameters */ + YYSYMBOL_function_header = 553, /* function_header */ + YYSYMBOL_parameter_declarator = 554, /* parameter_declarator */ + YYSYMBOL_parameter_declaration = 555, /* parameter_declaration */ + YYSYMBOL_parameter_type_specifier = 556, /* parameter_type_specifier */ + YYSYMBOL_init_declarator_list = 557, /* init_declarator_list */ + YYSYMBOL_single_declaration = 558, /* single_declaration */ + YYSYMBOL_fully_specified_type = 559, /* fully_specified_type */ + YYSYMBOL_invariant_qualifier = 560, /* invariant_qualifier */ + YYSYMBOL_interpolation_qualifier = 561, /* interpolation_qualifier */ + YYSYMBOL_layout_qualifier = 562, /* layout_qualifier */ + YYSYMBOL_layout_qualifier_id_list = 563, /* layout_qualifier_id_list */ + YYSYMBOL_layout_qualifier_id = 564, /* layout_qualifier_id */ + YYSYMBOL_precise_qualifier = 565, /* precise_qualifier */ + YYSYMBOL_type_qualifier = 566, /* type_qualifier */ + YYSYMBOL_single_type_qualifier = 567, /* single_type_qualifier */ + YYSYMBOL_storage_qualifier = 568, /* storage_qualifier */ + YYSYMBOL_non_uniform_qualifier = 569, /* non_uniform_qualifier */ + YYSYMBOL_type_name_list = 570, /* type_name_list */ + YYSYMBOL_type_specifier = 571, /* type_specifier */ + YYSYMBOL_array_specifier = 572, /* array_specifier */ + YYSYMBOL_type_parameter_specifier_opt = 573, /* type_parameter_specifier_opt */ + YYSYMBOL_type_parameter_specifier = 574, /* type_parameter_specifier */ + YYSYMBOL_type_parameter_specifier_list = 575, /* type_parameter_specifier_list */ + YYSYMBOL_type_specifier_nonarray = 576, /* type_specifier_nonarray */ + YYSYMBOL_precision_qualifier = 577, /* precision_qualifier */ + YYSYMBOL_struct_specifier = 578, /* struct_specifier */ + YYSYMBOL_579_3 = 579, /* $@3 */ + YYSYMBOL_580_4 = 580, /* $@4 */ + YYSYMBOL_struct_declaration_list = 581, /* struct_declaration_list */ + YYSYMBOL_struct_declaration = 582, /* struct_declaration */ + YYSYMBOL_block_heap_inner_structure = 583, /* block_heap_inner_structure */ + YYSYMBOL_584_5 = 584, /* $@5 */ + YYSYMBOL_struct_declaration_no_inline_block_list = 585, /* struct_declaration_no_inline_block_list */ + YYSYMBOL_struct_declaration_no_inline_block = 586, /* struct_declaration_no_inline_block */ + YYSYMBOL_struct_declarator_list = 587, /* struct_declarator_list */ + YYSYMBOL_struct_declarator = 588, /* struct_declarator */ + YYSYMBOL_initializer = 589, /* initializer */ + YYSYMBOL_initializer_list = 590, /* initializer_list */ + YYSYMBOL_declaration_statement = 591, /* declaration_statement */ + YYSYMBOL_statement = 592, /* statement */ + YYSYMBOL_simple_statement = 593, /* simple_statement */ + YYSYMBOL_demote_statement = 594, /* demote_statement */ + YYSYMBOL_compound_statement = 595, /* compound_statement */ + YYSYMBOL_596_6 = 596, /* $@6 */ + YYSYMBOL_597_7 = 597, /* $@7 */ + YYSYMBOL_statement_no_new_scope = 598, /* statement_no_new_scope */ + YYSYMBOL_statement_scoped = 599, /* statement_scoped */ + YYSYMBOL_600_8 = 600, /* $@8 */ + YYSYMBOL_601_9 = 601, /* $@9 */ + YYSYMBOL_compound_statement_no_new_scope = 602, /* compound_statement_no_new_scope */ + YYSYMBOL_statement_list = 603, /* statement_list */ + YYSYMBOL_expression_statement = 604, /* expression_statement */ + YYSYMBOL_selection_statement = 605, /* selection_statement */ + YYSYMBOL_selection_statement_nonattributed = 606, /* selection_statement_nonattributed */ + YYSYMBOL_selection_rest_statement = 607, /* selection_rest_statement */ + YYSYMBOL_condition = 608, /* condition */ + YYSYMBOL_switch_statement = 609, /* switch_statement */ + YYSYMBOL_switch_statement_nonattributed = 610, /* switch_statement_nonattributed */ + YYSYMBOL_611_10 = 611, /* $@10 */ + YYSYMBOL_switch_statement_list = 612, /* switch_statement_list */ + YYSYMBOL_case_label = 613, /* case_label */ + YYSYMBOL_iteration_statement = 614, /* iteration_statement */ + YYSYMBOL_iteration_statement_nonattributed = 615, /* iteration_statement_nonattributed */ + YYSYMBOL_616_11 = 616, /* $@11 */ + YYSYMBOL_617_12 = 617, /* $@12 */ + YYSYMBOL_618_13 = 618, /* $@13 */ + YYSYMBOL_for_init_statement = 619, /* for_init_statement */ + YYSYMBOL_conditionopt = 620, /* conditionopt */ + YYSYMBOL_for_rest_statement = 621, /* for_rest_statement */ + YYSYMBOL_jump_statement = 622, /* jump_statement */ + YYSYMBOL_translation_unit = 623, /* translation_unit */ + YYSYMBOL_external_declaration = 624, /* external_declaration */ + YYSYMBOL_function_definition = 625, /* function_definition */ + YYSYMBOL_626_14 = 626, /* $@14 */ + YYSYMBOL_attribute = 627, /* attribute */ + YYSYMBOL_attribute_list = 628, /* attribute_list */ + YYSYMBOL_single_attribute = 629, /* single_attribute */ + YYSYMBOL_spirv_requirements_list = 630, /* spirv_requirements_list */ + YYSYMBOL_spirv_requirements_parameter = 631, /* spirv_requirements_parameter */ + YYSYMBOL_spirv_extension_list = 632, /* spirv_extension_list */ + YYSYMBOL_spirv_capability_list = 633, /* spirv_capability_list */ + YYSYMBOL_spirv_execution_mode_qualifier = 634, /* spirv_execution_mode_qualifier */ + YYSYMBOL_spirv_execution_mode_parameter_list = 635, /* spirv_execution_mode_parameter_list */ + YYSYMBOL_spirv_execution_mode_parameter = 636, /* spirv_execution_mode_parameter */ + YYSYMBOL_spirv_execution_mode_id_parameter_list = 637, /* spirv_execution_mode_id_parameter_list */ + YYSYMBOL_spirv_storage_class_qualifier = 638, /* spirv_storage_class_qualifier */ + YYSYMBOL_spirv_decorate_qualifier = 639, /* spirv_decorate_qualifier */ + YYSYMBOL_spirv_decorate_parameter_list = 640, /* spirv_decorate_parameter_list */ + YYSYMBOL_spirv_decorate_parameter = 641, /* spirv_decorate_parameter */ + YYSYMBOL_spirv_decorate_id_parameter_list = 642, /* spirv_decorate_id_parameter_list */ + YYSYMBOL_spirv_decorate_id_parameter = 643, /* spirv_decorate_id_parameter */ + YYSYMBOL_spirv_decorate_string_parameter_list = 644, /* spirv_decorate_string_parameter_list */ + YYSYMBOL_spirv_type_specifier = 645, /* spirv_type_specifier */ + YYSYMBOL_spirv_type_parameter_list = 646, /* spirv_type_parameter_list */ + YYSYMBOL_spirv_type_parameter = 647, /* spirv_type_parameter */ + YYSYMBOL_spirv_instruction_qualifier = 648, /* spirv_instruction_qualifier */ + YYSYMBOL_spirv_instruction_qualifier_list = 649, /* spirv_instruction_qualifier_list */ + YYSYMBOL_spirv_instruction_qualifier_id = 650 /* spirv_instruction_qualifier_id */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -759,7 +786,7 @@ typedef enum yysymbol_kind_t yysymbol_kind_t; extern int yylex(YYSTYPE*, TParseContext&); -#line 763 "MachineIndependent/glslang_tab.cpp" +#line 790 "MachineIndependent/glslang_tab.cpp" #ifdef short @@ -1081,21 +1108,21 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 476 +#define YYFINAL 496 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 13823 +#define YYLAST 15602 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 488 +#define YYNTOKENS 515 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 136 /* YYNRULES -- Number of rules. */ -#define YYNRULES 732 +#define YYNRULES 758 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 986 +#define YYNSTATES 1012 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 742 +#define YYMAXUTOK 769 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1183,87 +1210,91 @@ static const yytype_int16 yytranslate[] = 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487 + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 365, 365, 371, 374, 379, 382, 385, 389, 392, - 395, 399, 403, 407, 411, 415, 419, 425, 432, 435, - 438, 441, 444, 449, 457, 464, 471, 477, 481, 488, - 491, 497, 515, 540, 548, 553, 580, 588, 594, 598, - 602, 618, 625, 626, 627, 628, 634, 635, 640, 645, - 654, 655, 660, 668, 669, 675, 684, 685, 690, 695, - 700, 708, 709, 718, 730, 731, 740, 741, 750, 751, - 760, 761, 769, 770, 778, 779, 787, 788, 788, 806, - 807, 823, 827, 831, 835, 840, 844, 848, 852, 856, - 860, 864, 871, 874, 885, 892, 897, 904, 909, 914, - 921, 924, 927, 930, 935, 943, 943, 955, 959, 966, - 971, 979, 987, 999, 1002, 1009, 1022, 1042, 1049, 1072, - 1087, 1106, 1117, 1128, 1138, 1148, 1158, 1167, 1170, 1175, - 1180, 1185, 1193, 1198, 1204, 1209, 1214, 1223, 1233, 1260, - 1269, 1276, 1283, 1290, 1297, 1305, 1313, 1323, 1333, 1340, - 1350, 1356, 1359, 1366, 1370, 1374, 1382, 1391, 1394, 1405, - 1408, 1411, 1415, 1419, 1423, 1427, 1430, 1435, 1439, 1444, - 1452, 1456, 1461, 1467, 1473, 1480, 1485, 1490, 1498, 1503, - 1515, 1529, 1535, 1540, 1545, 1550, 1558, 1566, 1574, 1582, - 1590, 1598, 1606, 1614, 1622, 1630, 1637, 1644, 1648, 1653, - 1658, 1663, 1668, 1673, 1678, 1682, 1686, 1690, 1694, 1698, - 1704, 1710, 1720, 1727, 1730, 1738, 1745, 1756, 1761, 1769, - 1773, 1783, 1786, 1792, 1798, 1804, 1812, 1822, 1826, 1830, - 1834, 1839, 1843, 1848, 1853, 1858, 1863, 1868, 1873, 1878, - 1883, 1888, 1894, 1900, 1906, 1911, 1916, 1921, 1926, 1931, - 1936, 1941, 1946, 1951, 1956, 1961, 1966, 1973, 1978, 1983, - 1988, 1993, 1998, 2003, 2008, 2013, 2018, 2023, 2028, 2033, - 2038, 2043, 2051, 2059, 2067, 2073, 2079, 2085, 2091, 2097, - 2103, 2109, 2115, 2121, 2127, 2133, 2139, 2145, 2151, 2157, - 2163, 2169, 2175, 2181, 2187, 2193, 2199, 2205, 2211, 2217, - 2223, 2229, 2235, 2241, 2247, 2253, 2259, 2265, 2271, 2277, - 2283, 2289, 2295, 2301, 2307, 2313, 2319, 2327, 2335, 2343, - 2351, 2359, 2367, 2375, 2383, 2391, 2399, 2407, 2415, 2421, - 2427, 2433, 2439, 2445, 2451, 2457, 2463, 2469, 2475, 2481, - 2487, 2493, 2499, 2505, 2511, 2517, 2523, 2529, 2535, 2541, - 2547, 2553, 2559, 2565, 2571, 2577, 2583, 2589, 2595, 2601, - 2607, 2613, 2619, 2625, 2631, 2635, 2639, 2643, 2648, 2653, - 2658, 2663, 2668, 2673, 2678, 2683, 2688, 2693, 2698, 2703, - 2708, 2713, 2719, 2725, 2731, 2737, 2743, 2749, 2755, 2761, - 2767, 2773, 2779, 2785, 2791, 2796, 2801, 2806, 2811, 2816, - 2821, 2826, 2831, 2836, 2841, 2846, 2851, 2856, 2861, 2866, - 2871, 2876, 2881, 2886, 2891, 2896, 2901, 2906, 2911, 2916, - 2921, 2926, 2931, 2936, 2941, 2946, 2951, 2956, 2962, 2968, - 2973, 2978, 2983, 2989, 2994, 2999, 3004, 3010, 3015, 3020, - 3025, 3031, 3036, 3041, 3046, 3052, 3058, 3064, 3070, 3075, - 3081, 3087, 3093, 3098, 3103, 3108, 3113, 3118, 3124, 3129, - 3134, 3139, 3145, 3150, 3155, 3160, 3166, 3171, 3176, 3181, - 3187, 3192, 3197, 3202, 3208, 3213, 3218, 3223, 3229, 3234, - 3239, 3244, 3250, 3255, 3260, 3265, 3271, 3276, 3281, 3286, - 3292, 3297, 3302, 3307, 3313, 3318, 3323, 3328, 3334, 3339, - 3344, 3349, 3355, 3360, 3365, 3370, 3376, 3381, 3386, 3391, - 3397, 3402, 3407, 3412, 3418, 3423, 3428, 3433, 3438, 3443, - 3448, 3453, 3458, 3463, 3468, 3473, 3478, 3483, 3488, 3493, - 3498, 3503, 3508, 3513, 3518, 3523, 3528, 3533, 3538, 3544, - 3550, 3556, 3562, 3568, 3574, 3580, 3587, 3594, 3600, 3606, - 3612, 3618, 3625, 3632, 3639, 3646, 3651, 3656, 3660, 3666, - 3672, 3678, 3682, 3686, 3690, 3695, 3711, 3716, 3721, 3729, - 3729, 3745, 3745, 3755, 3758, 3761, 3771, 3784, 3801, 3801, - 3816, 3819, 3832, 3854, 3881, 3885, 3891, 3896, 3907, 3910, - 3916, 3922, 3931, 3934, 3940, 3944, 3945, 3951, 3952, 3953, - 3954, 3955, 3956, 3957, 3958, 3962, 3970, 3971, 3975, 3971, - 3989, 3990, 3994, 3994, 4001, 4001, 4015, 4018, 4028, 4036, - 4047, 4048, 4052, 4055, 4062, 4069, 4073, 4081, 4085, 4094, - 4097, 4104, 4104, 4124, 4127, 4133, 4145, 4157, 4160, 4168, - 4168, 4187, 4187, 4209, 4209, 4230, 4233, 4239, 4242, 4248, - 4252, 4259, 4264, 4269, 4276, 4279, 4283, 4287, 4291, 4300, - 4304, 4313, 4316, 4319, 4327, 4327, 4369, 4374, 4377, 4382, - 4385, 4390, 4393, 4398, 4401, 4406, 4409, 4414, 4417, 4422, - 4426, 4431, 4435, 4440, 4444, 4451, 4454, 4459, 4462, 4465, - 4468, 4471, 4476, 4485, 4496, 4501, 4509, 4513, 4518, 4522, - 4527, 4531, 4536, 4540, 4547, 4550, 4555, 4558, 4561, 4564, - 4569, 4572, 4577, 4583, 4586, 4589, 4592, 4597, 4601, 4606, - 4610, 4615, 4619, 4626, 4629, 4634, 4637, 4642, 4645, 4651, - 4654, 4659, 4662 + 0, 371, 371, 377, 380, 385, 388, 391, 395, 398, + 401, 405, 409, 413, 417, 421, 425, 431, 435, 439, + 443, 447, 451, 458, 461, 464, 467, 470, 475, 483, + 490, 497, 503, 507, 514, 517, 523, 541, 566, 574, + 579, 606, 614, 620, 624, 628, 644, 651, 652, 653, + 654, 660, 661, 666, 671, 680, 681, 686, 694, 695, + 701, 710, 711, 716, 721, 726, 734, 735, 744, 756, + 757, 766, 767, 776, 777, 786, 787, 795, 796, 804, + 805, 813, 814, 814, 832, 833, 849, 853, 857, 861, + 866, 870, 874, 878, 882, 886, 890, 897, 900, 911, + 918, 923, 930, 935, 940, 947, 950, 953, 956, 961, + 969, 969, 981, 985, 992, 997, 1005, 1013, 1025, 1028, + 1035, 1048, 1068, 1075, 1098, 1113, 1132, 1143, 1154, 1164, + 1174, 1184, 1193, 1196, 1201, 1206, 1211, 1219, 1224, 1230, + 1235, 1240, 1249, 1259, 1286, 1295, 1302, 1309, 1316, 1323, + 1331, 1339, 1349, 1359, 1366, 1376, 1382, 1385, 1392, 1396, + 1400, 1408, 1417, 1420, 1431, 1434, 1437, 1441, 1445, 1449, + 1453, 1456, 1461, 1465, 1470, 1478, 1482, 1487, 1493, 1499, + 1506, 1511, 1516, 1524, 1529, 1541, 1555, 1561, 1566, 1571, + 1576, 1584, 1592, 1600, 1608, 1616, 1624, 1632, 1640, 1648, + 1656, 1663, 1670, 1674, 1679, 1684, 1689, 1694, 1699, 1704, + 1708, 1712, 1716, 1720, 1724, 1730, 1736, 1746, 1753, 1756, + 1764, 1771, 1782, 1787, 1795, 1799, 1809, 1812, 1818, 1824, + 1830, 1838, 1848, 1852, 1856, 1860, 1865, 1869, 1874, 1879, + 1884, 1889, 1894, 1899, 1904, 1909, 1914, 1920, 1926, 1932, + 1937, 1942, 1947, 1952, 1957, 1962, 1967, 1972, 1977, 1982, + 1987, 1992, 1999, 2004, 2009, 2014, 2019, 2024, 2029, 2034, + 2039, 2044, 2049, 2054, 2059, 2064, 2069, 2074, 2079, 2084, + 2089, 2094, 2102, 2110, 2118, 2124, 2130, 2136, 2142, 2148, + 2154, 2160, 2166, 2172, 2178, 2184, 2190, 2196, 2202, 2208, + 2214, 2220, 2226, 2232, 2238, 2244, 2250, 2256, 2262, 2268, + 2274, 2280, 2286, 2292, 2298, 2304, 2310, 2316, 2322, 2328, + 2334, 2340, 2346, 2352, 2358, 2364, 2370, 2376, 2382, 2388, + 2394, 2400, 2406, 2412, 2418, 2424, 2430, 2436, 2442, 2448, + 2454, 2460, 2468, 2476, 2484, 2492, 2500, 2508, 2516, 2524, + 2532, 2540, 2548, 2556, 2562, 2568, 2574, 2580, 2586, 2592, + 2598, 2604, 2610, 2616, 2622, 2628, 2634, 2640, 2646, 2652, + 2658, 2664, 2670, 2676, 2682, 2688, 2694, 2700, 2706, 2712, + 2718, 2724, 2730, 2736, 2742, 2748, 2754, 2760, 2766, 2772, + 2776, 2780, 2784, 2789, 2794, 2799, 2804, 2809, 2814, 2819, + 2824, 2829, 2834, 2839, 2844, 2849, 2854, 2860, 2866, 2872, + 2878, 2884, 2890, 2896, 2902, 2908, 2914, 2920, 2926, 2932, + 2937, 2942, 2947, 2952, 2957, 2962, 2967, 2972, 2977, 2982, + 2987, 2992, 2997, 3002, 3007, 3012, 3017, 3022, 3027, 3032, + 3037, 3042, 3047, 3052, 3057, 3062, 3067, 3072, 3077, 3082, + 3087, 3092, 3097, 3103, 3109, 3114, 3119, 3124, 3130, 3135, + 3140, 3145, 3151, 3156, 3161, 3166, 3172, 3177, 3182, 3187, + 3193, 3199, 3205, 3211, 3216, 3222, 3228, 3234, 3239, 3244, + 3249, 3254, 3259, 3265, 3270, 3275, 3280, 3286, 3291, 3296, + 3301, 3307, 3312, 3317, 3322, 3328, 3333, 3338, 3343, 3349, + 3354, 3359, 3364, 3370, 3375, 3380, 3385, 3391, 3396, 3401, + 3406, 3412, 3417, 3422, 3427, 3433, 3438, 3443, 3448, 3454, + 3459, 3464, 3469, 3475, 3480, 3485, 3490, 3496, 3501, 3506, + 3511, 3517, 3522, 3527, 3532, 3538, 3543, 3548, 3553, 3559, + 3564, 3569, 3574, 3579, 3584, 3589, 3594, 3599, 3604, 3609, + 3614, 3619, 3624, 3629, 3634, 3639, 3644, 3649, 3654, 3659, + 3664, 3669, 3674, 3679, 3685, 3691, 3697, 3703, 3709, 3715, + 3721, 3728, 3735, 3741, 3747, 3753, 3759, 3766, 3773, 3780, + 3787, 3792, 3797, 3801, 3807, 3813, 3819, 3823, 3827, 3831, + 3836, 3854, 3859, 3864, 3872, 3872, 3888, 3888, 3898, 3901, + 3914, 3917, 3934, 3934, 3950, 3953, 3966, 3988, 4015, 4019, + 4025, 4030, 4041, 4044, 4050, 4056, 4065, 4068, 4074, 4078, + 4079, 4085, 4086, 4087, 4088, 4089, 4090, 4091, 4092, 4096, + 4104, 4105, 4109, 4105, 4123, 4124, 4128, 4128, 4135, 4135, + 4149, 4152, 4162, 4170, 4181, 4182, 4186, 4189, 4196, 4203, + 4207, 4215, 4219, 4228, 4231, 4238, 4238, 4258, 4261, 4267, + 4279, 4291, 4294, 4302, 4302, 4321, 4321, 4343, 4343, 4364, + 4367, 4373, 4376, 4382, 4386, 4393, 4398, 4403, 4410, 4413, + 4417, 4421, 4425, 4434, 4438, 4447, 4450, 4453, 4461, 4461, + 4504, 4509, 4512, 4517, 4520, 4523, 4526, 4531, 4534, 4539, + 4542, 4547, 4550, 4555, 4558, 4563, 4567, 4572, 4576, 4581, + 4585, 4592, 4595, 4600, 4603, 4606, 4609, 4612, 4617, 4626, + 4637, 4642, 4650, 4654, 4659, 4663, 4668, 4672, 4677, 4681, + 4688, 4691, 4696, 4699, 4702, 4705, 4710, 4713, 4718, 4724, + 4727, 4730, 4733, 4738, 4742, 4747, 4751, 4756, 4760, 4767, + 4770, 4775, 4778, 4783, 4786, 4792, 4795, 4800, 4803 }; #endif @@ -1292,19 +1323,23 @@ static const char *const yytname[] = "ITEXTURECUBE", "ITEXTURE2DARRAY", "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE", "UTEXTURE2DARRAY", "ATTRIBUTE", "VARYING", "FLOATE5M2_T", "FLOATE4M3_T", "BFLOAT16_T", "FLOAT16_T", "FLOAT32_T", "DOUBLE", - "FLOAT64_T", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T", "INT16_T", + "FLOAT64_T", "FLOATE2M1_T", "FLOATE3M2_T", "FLOATE2M3_T", "FLOATUE8M0_T", + "FLOATMXINT8_T", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T", "INT16_T", "UINT16_T", "INT8_T", "UINT8_T", "I64VEC2", "I64VEC3", "I64VEC4", "U64VEC2", "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3", "I32VEC4", "U32VEC2", "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3", "I16VEC4", "U16VEC2", "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3", "U8VEC4", "DVEC2", "DVEC3", "DVEC4", "DMAT2", "DMAT3", "DMAT4", "BF16VEC2", "BF16VEC3", "BF16VEC4", "FE5M2VEC2", "FE5M2VEC3", - "FE5M2VEC4", "FE4M3VEC2", "FE4M3VEC3", "FE4M3VEC4", "F16VEC2", "F16VEC3", - "F16VEC4", "F16MAT2", "F16MAT3", "F16MAT4", "F32VEC2", "F32VEC3", - "F32VEC4", "F32MAT2", "F32MAT3", "F32MAT4", "F64VEC2", "F64VEC3", - "F64VEC4", "F64MAT2", "F64MAT3", "F64MAT4", "DMAT2X2", "DMAT2X3", - "DMAT2X4", "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3", - "DMAT4X4", "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2", + "FE5M2VEC4", "FE4M3VEC2", "FE4M3VEC3", "FE4M3VEC4", "FE2M1VEC2", + "FE2M1VEC3", "FE2M1VEC4", "FE3M2VEC2", "FE3M2VEC3", "FE3M2VEC4", + "FE2M3VEC2", "FE2M3VEC3", "FE2M3VEC4", "FUE8M0VEC2", "FUE8M0VEC3", + "FUE8M0VEC4", "FMXINT8VEC2", "FMXINT8VEC3", "FMXINT8VEC4", "F16VEC2", + "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3", "F16MAT4", "F32VEC2", + "F32VEC3", "F32VEC4", "F32MAT2", "F32MAT3", "F32MAT4", "F64VEC2", + "F64VEC3", "F64VEC4", "F64MAT2", "F64MAT3", "F64MAT4", "DMAT2X2", + "DMAT2X3", "DMAT2X4", "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", + "DMAT4X3", "DMAT4X4", "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", "F32MAT2X3", "F32MAT2X4", "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2", "F32MAT4X3", "F32MAT4X4", "F64MAT2X2", @@ -1367,25 +1402,27 @@ static const char *const yytname[] = "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND", "QUESTION", "INVARIANT", "HIGH_PRECISION", "MEDIUM_PRECISION", - "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP", - "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT", - "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", "INOUT", "STRUCT", - "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF", - "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "TERMINATE_INVOCATION", - "TERMINATE_RAY", "IGNORE_INTERSECTION", "UNIFORM", "SHARED", "BUFFER", - "TILEIMAGEEXT", "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", - "INT16CONSTANT", "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", - "UINT32CONSTANT", "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", - "DEMOTE", "FUNCTION", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", - "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT", "PAYLOADINEXT", "HITATTREXT", - "CALLDATAEXT", "CALLDATAINEXT", "PATCH", "SAMPLE", "NONUNIFORM", - "RESOURCEHEAP", "SAMPLERHEAP", "COHERENT", "VOLATILE", "RESTRICT", - "READONLY", "WRITEONLY", "NONTEMPORAL", "DEVICECOHERENT", - "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", - "NONPRIVATE", "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD", - "PERVERTEXEXT", "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", - "PERTASKNV", "PERPRIMITIVEEXT", "TASKPAYLOADWORKGROUPEXT", "PRECISE", - "$accept", "variable_identifier", "primary_expression", + "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP", "INLINE", + "NOINLINE", "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", + "BOOLCONSTANT", "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", + "INOUT", "STRUCT", "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", + "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", + "TERMINATE_INVOCATION", "TERMINATE_RAY", "IGNORE_INTERSECTION", + "UNIFORM", "SHARED", "BUFFER", "TILEIMAGEEXT", "FLAT", "SMOOTH", + "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT", "UINT16CONSTANT", + "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT", + "FLOATE2M1CONSTANT", "FLOATE3M2CONSTANT", "FLOATE2M3CONSTANT", + "FLOATUE8M0CONSTANT", "FLOATMXINT8CONSTANT", "INT64CONSTANT", + "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "FUNCTION", "PAYLOADNV", + "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT", + "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT", "PATCH", + "SAMPLE", "NONUNIFORM", "RESOURCEHEAP", "SAMPLERHEAP", "COHERENT", + "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "NONTEMPORAL", + "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT", + "SUBGROUPCOHERENT", "NONPRIVATE", "SHADERCALLCOHERENT", "NOPERSPECTIVE", + "EXPLICITINTERPAMD", "PERVERTEXEXT", "PERVERTEXNV", "PERPRIMITIVENV", + "PERVIEWNV", "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", @@ -1409,12 +1446,14 @@ static const char *const yytname[] = "type_specifier", "array_specifier", "type_parameter_specifier_opt", "type_parameter_specifier", "type_parameter_specifier_list", "type_specifier_nonarray", "precision_qualifier", "struct_specifier", - "$@3", "$@4", "struct_declaration_list", "struct_declaration_with_heap", - "block_heap_inner_structure", "$@5", "struct_declaration_without_heap", - "struct_declaration", "struct_declarator_list", "struct_declarator", - "initializer", "initializer_list", "declaration_statement", "statement", - "simple_statement", "demote_statement", "compound_statement", "$@6", - "$@7", "statement_no_new_scope", "statement_scoped", "$@8", "$@9", + "$@3", "$@4", "struct_declaration_list", "struct_declaration", + "block_heap_inner_structure", "$@5", + "struct_declaration_no_inline_block_list", + "struct_declaration_no_inline_block", "struct_declarator_list", + "struct_declarator", "initializer", "initializer_list", + "declaration_statement", "statement", "simple_statement", + "demote_statement", "compound_statement", "$@6", "$@7", + "statement_no_new_scope", "statement_scoped", "$@8", "$@9", "compound_statement_no_new_scope", "statement_list", "expression_statement", "selection_statement", "selection_statement_nonattributed", "selection_rest_statement", @@ -1445,12 +1484,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-849) +#define YYPACT_NINF (-901) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-727) +#define YYTABLE_NINF (-753) #define yytable_value_is_error(Yyn) \ 0 @@ -1459,105 +1498,108 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 4869, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -289, -249, -213, - -142, -94, -76, -72, -44, -849, -849, -849, -849, -849, - -327, -849, -849, -849, -849, -849, -193, -849, -849, -849, - -849, -849, -352, -849, -849, -849, -849, -849, -849, -849, - -37, -30, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -345, -202, -139, -122, 8749, -310, -849, -117, -849, - -849, -849, -849, 5839, -849, -849, -849, -849, -127, -849, - -849, 989, -849, -849, 8749, -33, -849, -849, -849, 6324, - -63, -294, -244, -168, -150, -140, -63, -138, -51, 13373, - -849, -17, -378, -48, -849, -330, -849, -15, -12, 6809, - -849, -849, -849, 8749, -43, -40, -849, -282, -849, -13, - -144, -849, -849, 11993, -10, -849, -849, -849, -7, -39, - 8749, -849, -11, -14, -5, -849, -324, -849, -239, -9, - -4, -2, -1, -238, 1, 3, 4, 5, 8, 10, - -236, 12, 11, 14, -237, -849, -3, 8749, -849, 15, - -849, -224, -849, -849, -221, 10153, -849, -329, 1474, -849, - -849, 13, -849, -849, -849, -266, -261, -849, 10613, -257, - -849, -20, -849, 11993, 11993, -849, 11993, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, -849, -849, -268, -849, -849, -849, - 19, -217, 12453, 23, -849, 11993, -849, 25, -303, 24, - -12, 27, -849, -332, -63, -849, -8, -849, -325, 28, - -134, 11993, -133, -849, -145, -129, -162, -128, 30, -121, - -63, -849, 12913, -849, -115, 11993, 29, -51, -849, 7294, - 16, 26, 8749, 16, 8749, -849, 8749, 11993, -849, -378, - -849, 17, -849, -849, -41, -45, -254, -326, -109, 18, - 34, 31, 47, 49, -334, 32, -849, 11073, -849, 33, - -849, -849, 39, 35, 36, -849, 44, 48, 37, 11533, - 56, 11993, 54, 60, 62, 63, 67, -169, -849, -849, - -87, -849, -202, 78, 25, -849, -849, -849, -849, -849, - 1959, -849, -849, -849, -849, -849, -849, -849, -849, -849, - 5354, 74, 10613, 24, 10613, -255, 9233, -849, -849, 10613, - 8749, -849, -849, -849, -216, -323, -849, -849, 11993, 45, - -849, -849, 11993, 81, -849, -849, -849, 11993, -849, -849, - -849, -339, -849, -849, -205, 75, -849, -849, -849, -849, - -849, -849, -204, -849, -201, -849, -849, -200, 76, -849, - -849, -849, -849, -197, -849, -192, -849, -849, -849, -849, - -849, -190, -849, 80, -849, -188, 83, -171, 75, -849, - -322, -170, -849, 87, 90, -849, -849, -849, 16, -10, - -81, -849, -849, 8749, 8749, -53, -849, -849, 91, -849, - -849, -849, 11993, 11993, 11993, 11993, 11993, 11993, 11993, 11993, - 11993, 11993, 11993, 11993, 11993, 11993, 11993, 11993, 11993, 11993, - 11993, -849, -849, -849, 89, -849, 2444, -849, -849, -849, - 2444, -849, 11993, -849, -849, -52, 11993, -97, -849, -849, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -849, -849, 11993, 11993, -849, -849, -849, -849, - -849, -849, -849, -849, -849, 10613, -849, -849, -232, -849, - 7779, -849, 11993, 92, 93, -849, -849, -849, -849, -849, - -148, -146, -849, -331, -849, -325, -849, -325, -849, 11993, - 11993, -849, -145, -849, -145, -849, -162, -162, -849, 98, - 30, -849, 12913, -849, 11993, -849, -849, 8749, -42, 24, - 16, -849, -849, -849, -849, -849, -849, -41, -41, -45, - -45, -254, -254, -254, -254, -326, -326, -109, 18, 34, - 31, 47, 49, 11993, -849, 2444, 4384, 57, 3899, -166, - -849, -163, -849, -849, -849, -849, -849, 9693, -849, -849, - -849, -849, 103, -849, 70, -849, -159, -849, -158, -849, - -156, -849, -155, -849, -154, -151, -849, 8264, -849, -849, - -75, 99, 93, 69, 106, 109, -849, -849, 4384, 107, - -849, -849, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, 11993, -849, 101, 2929, 11993, -849, 102, 112, - 66, 113, 3414, -849, 114, -849, 10613, -849, -849, -849, - -147, 11993, 2929, 107, -849, -849, 2444, -849, 110, 93, - -849, -849, 2444, 111, -849, -849 + 5111, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -335, -307, -276, + -256, -252, -237, -232, -220, -901, -901, -901, -901, -901, + -274, -901, -901, -901, -901, -901, -75, -901, -901, -901, + -901, -901, -370, -901, -901, -901, -901, -901, -901, -901, + -210, -143, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -372, -95, -112, -70, 10231, -264, -901, -79, -901, + -901, -901, -901, 6135, -901, -901, -901, -901, -76, -901, + -901, 1015, -901, -901, 10231, -66, -901, -901, -901, 6647, + -78, -378, -246, -195, -191, -161, -78, -157, -279, 15125, + -901, -42, -399, -72, -901, -341, -901, -37, -34, 7159, + -901, -901, -901, 10231, -69, -68, -901, -338, -901, -33, + -128, -901, -901, 13664, -29, -901, -901, -901, -27, -62, + 10231, -901, -32, -30, -26, -901, -250, -901, -245, -25, + -24, -22, -21, -243, -20, -18, -17, -16, -15, -14, + -235, -19, -13, -901, -901, -23, -281, -901, -12, 10231, + -901, -9, -901, -228, -901, -901, -223, 11716, -901, -302, + 1527, -901, -901, -11, -901, -901, -901, -293, -282, -901, + 12203, -262, -901, -58, -901, 13664, 13664, -901, 13664, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -289, -901, -901, -901, -5, -219, 14151, + -3, -901, 13664, -901, 1, -360, 6, -34, 3, -901, + -350, -78, -901, -36, -901, -362, 7, -152, 13664, -145, + -901, -183, -141, -176, -140, 8, -139, -78, -901, 14638, + -901, -135, 13664, 10, -279, -901, 7671, -28, 8183, -901, + -28, -901, 10231, 13664, -901, -399, -901, -10, -901, -901, + -59, -73, -323, -340, -121, -8, -6, -4, 18, 23, + -347, 14, -901, 12690, -901, 16, -901, -901, 12, 13, + 15, -901, 22, 24, 19, 13177, 26, 13664, 25, 20, + 21, 27, 29, -259, -901, -901, -106, -901, -95, 32, + 1, -901, -901, -901, -901, -901, 2039, -901, -901, -901, + -901, -901, -901, -901, -901, -901, 5623, 28, 12203, 6, + 12203, -260, 10742, -901, -901, 12203, 10231, -901, -901, -901, + -216, -300, -901, -901, 13664, -2, -901, -901, 13664, 34, + -901, -901, -901, 13664, -901, -901, -901, -354, -901, -901, + -198, 31, -901, -901, -901, -901, -901, -901, -197, -901, + -196, -901, -901, -194, 35, -901, -901, -901, -901, -193, + -901, -189, -901, -901, -901, -901, -901, -186, -901, 36, + -901, -185, 37, -182, 31, -901, -321, -181, -901, 44, + 45, -901, -901, -901, -28, -29, -102, -901, -901, -901, + -98, 8695, -901, -901, -901, 13664, 13664, 13664, 13664, 13664, + 13664, 13664, 13664, 13664, 13664, 13664, 13664, 13664, 13664, 13664, + 13664, 13664, 13664, 13664, -901, -901, -901, 48, -901, 2551, + -901, -901, -901, 2551, -901, 13664, -901, -901, -96, 13664, + -123, -901, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, 13664, 13664, -901, + -901, -901, -901, -901, -901, -901, -901, -901, 12203, -901, + -901, -159, -901, 9207, -901, 13664, 49, 41, -901, -901, + -901, -901, -901, -242, -226, -901, -345, -901, -362, -901, + -362, -901, 13664, 13664, -901, -183, -901, -183, -901, -176, + -176, -901, 55, 8, -901, 14638, -901, 13664, -901, -901, + 10231, -94, 6, -28, -901, -901, -901, -901, -901, -901, + -59, -59, -73, -73, -323, -323, -323, -323, -340, -340, + -121, -8, -6, -4, 18, 23, 13664, -901, 2551, 4599, + 17, 4087, -178, -901, -177, -901, -901, -901, -901, -901, + 11229, -901, -901, -901, -901, 56, -901, 38, -901, -174, + -901, -173, -901, -170, -901, -169, -901, -166, -165, -901, + 10231, 9719, -901, -901, -901, -61, 51, 41, 33, 75, + 77, -901, -901, 4599, 74, -901, -901, -901, -901, -901, + -901, -901, -901, -901, -901, -901, -901, -901, 13664, -901, + 70, 3063, 13664, -901, 71, 79, 40, 78, 3575, -901, + 80, -901, 12203, -901, -901, -901, -162, 13664, 3063, 74, + -901, -901, 2551, -901, 73, 41, -901, -901, 2551, 82, + -901, -901 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1565,143 +1607,146 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 0, 170, 231, 229, 230, 228, 235, 236, 237, 238, - 239, 240, 241, 242, 243, 232, 233, 234, 244, 245, - 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, - 369, 370, 371, 372, 373, 374, 375, 395, 396, 397, - 398, 399, 400, 401, 410, 423, 424, 411, 412, 414, - 413, 415, 416, 417, 418, 419, 420, 421, 422, 179, - 180, 258, 259, 257, 260, 261, 256, 262, 269, 270, - 267, 268, 265, 266, 263, 264, 301, 302, 303, 313, - 314, 315, 298, 299, 300, 310, 311, 312, 295, 296, - 297, 307, 308, 309, 292, 293, 294, 304, 305, 306, - 271, 272, 273, 316, 317, 318, 274, 275, 276, 277, - 278, 279, 280, 281, 282, 283, 284, 285, 328, 329, - 330, 286, 287, 288, 340, 341, 342, 289, 290, 291, - 352, 353, 354, 319, 320, 321, 322, 323, 324, 325, - 326, 327, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 367, - 364, 365, 366, 551, 552, 553, 554, 558, 560, 562, - 186, 563, 187, 555, 556, 559, 379, 380, 403, 406, - 368, 377, 378, 394, 376, 425, 426, 429, 430, 431, - 433, 434, 435, 437, 438, 439, 441, 442, 538, 539, - 402, 404, 405, 381, 382, 383, 427, 384, 388, 389, - 392, 432, 436, 440, 385, 386, 390, 391, 428, 387, - 393, 472, 474, 475, 476, 478, 479, 480, 482, 483, - 484, 486, 487, 488, 490, 491, 492, 494, 495, 496, - 498, 499, 500, 502, 503, 504, 506, 507, 508, 510, - 511, 512, 514, 515, 473, 477, 481, 485, 489, 497, - 501, 505, 493, 509, 513, 516, 517, 518, 519, 520, - 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, - 531, 532, 533, 534, 535, 536, 537, 407, 408, 409, - 443, 452, 454, 448, 453, 455, 456, 458, 459, 460, - 462, 463, 464, 466, 467, 468, 470, 471, 444, 445, - 446, 457, 447, 449, 450, 451, 461, 465, 469, 543, - 544, 547, 548, 549, 550, 545, 546, 0, 0, 0, - 0, 0, 0, 0, 0, 168, 169, 540, 541, 542, - 0, 663, 139, 566, 567, 568, 0, 565, 174, 172, - 173, 171, 0, 227, 175, 177, 178, 176, 141, 140, - 0, 209, 557, 189, 191, 185, 193, 195, 190, 192, - 188, 194, 196, 181, 182, 212, 183, 184, 197, 204, - 205, 206, 207, 208, 198, 199, 200, 201, 202, 203, - 142, 143, 145, 144, 146, 148, 149, 147, 211, 156, - 662, 0, 664, 0, 114, 113, 0, 127, 132, 163, - 162, 160, 164, 0, 157, 159, 165, 137, 222, 161, - 564, 0, 659, 661, 0, 0, 166, 167, 561, 0, + 0, 175, 236, 234, 235, 233, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 237, 238, 239, 249, 250, + 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, + 394, 395, 396, 397, 398, 399, 400, 420, 421, 422, + 423, 424, 425, 426, 435, 448, 449, 436, 437, 439, + 438, 440, 441, 442, 443, 444, 445, 446, 447, 184, + 185, 263, 264, 262, 270, 271, 261, 272, 265, 266, + 267, 268, 269, 279, 280, 277, 278, 275, 276, 273, + 274, 326, 327, 328, 338, 339, 340, 323, 324, 325, + 335, 336, 337, 320, 321, 322, 332, 333, 334, 317, + 318, 319, 329, 330, 331, 281, 282, 283, 341, 342, + 343, 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, 353, 354, + 355, 311, 312, 313, 365, 366, 367, 314, 315, 316, + 377, 378, 379, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 392, + 389, 390, 391, 576, 577, 578, 579, 583, 585, 587, + 191, 588, 192, 580, 581, 584, 404, 405, 428, 431, + 393, 402, 403, 419, 401, 450, 451, 454, 455, 456, + 458, 459, 460, 462, 463, 464, 466, 467, 563, 564, + 427, 429, 430, 406, 407, 408, 452, 409, 413, 414, + 417, 457, 461, 465, 410, 411, 415, 416, 453, 412, + 418, 497, 499, 500, 501, 503, 504, 505, 507, 508, + 509, 511, 512, 513, 515, 516, 517, 519, 520, 521, + 523, 524, 525, 527, 528, 529, 531, 532, 533, 535, + 536, 537, 539, 540, 498, 502, 506, 510, 514, 522, + 526, 530, 518, 534, 538, 541, 542, 543, 544, 545, + 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, + 556, 557, 558, 559, 560, 561, 562, 432, 433, 434, + 468, 477, 479, 473, 478, 480, 481, 483, 484, 485, + 487, 488, 489, 491, 492, 493, 495, 496, 469, 470, + 471, 482, 472, 474, 475, 476, 486, 490, 494, 568, + 569, 572, 573, 574, 575, 570, 571, 0, 0, 0, + 0, 0, 0, 0, 0, 173, 174, 565, 566, 567, + 0, 687, 144, 591, 592, 593, 0, 590, 179, 177, + 178, 176, 0, 232, 180, 182, 183, 181, 146, 145, + 0, 214, 582, 194, 196, 190, 198, 200, 195, 197, + 193, 199, 201, 186, 187, 217, 188, 189, 202, 209, + 210, 211, 212, 213, 203, 204, 205, 206, 207, 208, + 147, 148, 150, 149, 151, 153, 154, 152, 216, 161, + 686, 0, 688, 0, 119, 118, 0, 132, 137, 168, + 167, 165, 169, 0, 162, 164, 170, 142, 227, 166, + 589, 0, 683, 685, 0, 0, 171, 172, 586, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 571, 0, 0, 0, 100, 0, 95, 0, 109, 0, - 123, 115, 125, 0, 126, 0, 98, 133, 103, 107, - 0, 158, 138, 0, 215, 221, 1, 660, 0, 0, - 0, 97, 0, 0, 0, 671, 0, 729, 0, 0, + 596, 0, 0, 0, 105, 0, 100, 0, 114, 0, + 128, 120, 130, 0, 131, 0, 103, 138, 108, 112, + 0, 163, 143, 0, 220, 226, 1, 684, 0, 0, + 0, 102, 0, 0, 0, 697, 0, 755, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 669, 0, 667, 0, 0, 569, 153, - 155, 0, 151, 213, 0, 0, 101, 0, 0, 665, - 110, 0, 116, 122, 124, 119, 128, 118, 0, 134, - 105, 0, 104, 0, 0, 9, 0, 44, 43, 45, - 42, 5, 6, 7, 8, 2, 16, 14, 15, 17, - 10, 11, 12, 13, 3, 18, 37, 20, 25, 26, - 0, 0, 30, 0, 225, 0, 36, 224, 0, 216, - 111, 0, 96, 0, 0, 727, 0, 679, 0, 0, - 0, 0, 0, 696, 0, 0, 0, 0, 0, 0, - 0, 721, 0, 694, 0, 0, 0, 0, 99, 0, - 0, 0, 574, 0, 573, 580, 0, 0, 150, 0, - 210, 0, 217, 46, 50, 53, 56, 61, 64, 66, - 68, 70, 72, 74, 76, 0, 34, 0, 102, 607, - 616, 620, 0, 0, 0, 641, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 46, 79, 92, - 0, 594, 0, 165, 137, 597, 618, 596, 604, 595, - 0, 598, 599, 622, 600, 629, 601, 602, 637, 603, - 0, 0, 0, 120, 0, 129, 0, 588, 136, 0, - 0, 108, 38, 39, 0, 222, 22, 23, 0, 0, - 28, 27, 0, 227, 31, 33, 40, 0, 223, 112, - 731, 0, 732, 672, 0, 0, 730, 691, 687, 688, - 689, 690, 0, 685, 0, 94, 692, 0, 0, 706, - 707, 708, 709, 0, 704, 0, 713, 714, 715, 716, - 712, 0, 710, 0, 717, 0, 0, 0, 2, 725, - 222, 0, 723, 0, 0, 666, 668, 578, 0, 586, - 0, 584, 572, 0, 575, 0, 576, 581, 0, 154, - 152, 214, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 695, 696, 693, 0, 691, 0, 0, + 594, 158, 160, 0, 156, 218, 0, 0, 106, 0, + 0, 689, 115, 0, 121, 127, 129, 124, 133, 123, + 0, 139, 110, 0, 109, 0, 0, 9, 0, 49, + 48, 50, 47, 5, 6, 7, 8, 2, 16, 14, + 15, 17, 10, 11, 18, 19, 20, 21, 22, 12, + 13, 3, 23, 42, 25, 30, 31, 0, 0, 35, + 0, 230, 0, 41, 229, 0, 221, 116, 0, 101, + 0, 0, 753, 0, 705, 0, 0, 0, 0, 0, + 722, 0, 0, 0, 0, 0, 0, 0, 747, 0, + 720, 0, 0, 0, 0, 104, 0, 0, 0, 598, + 0, 600, 0, 0, 155, 0, 215, 0, 222, 51, + 55, 58, 61, 66, 69, 71, 73, 75, 77, 79, + 81, 0, 39, 0, 107, 631, 640, 644, 0, 0, + 0, 665, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 51, 84, 97, 0, 618, 0, 170, + 142, 621, 642, 620, 628, 619, 0, 622, 623, 646, + 624, 653, 625, 626, 661, 627, 0, 0, 0, 125, + 0, 134, 0, 612, 141, 0, 0, 113, 43, 44, + 0, 227, 27, 28, 0, 0, 33, 32, 0, 232, + 36, 38, 45, 0, 228, 117, 757, 0, 758, 698, + 0, 0, 756, 717, 713, 714, 715, 716, 0, 711, + 0, 99, 718, 0, 0, 732, 733, 734, 735, 0, + 730, 0, 739, 740, 741, 742, 738, 0, 736, 0, + 743, 0, 0, 0, 2, 751, 227, 0, 749, 0, + 0, 690, 692, 602, 0, 610, 0, 608, 597, 599, + 0, 0, 159, 157, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 77, 218, 219, 0, 606, 0, 639, 652, 651, - 0, 643, 0, 655, 653, 0, 0, 0, 636, 656, - 657, 658, 605, 82, 83, 85, 84, 87, 88, 89, - 90, 91, 86, 81, 0, 0, 621, 617, 619, 623, - 630, 638, 117, 121, 131, 0, 591, 592, 0, 135, - 0, 4, 0, 0, 24, 21, 32, 226, 675, 677, - 0, 0, 728, 0, 681, 0, 680, 0, 683, 0, - 0, 698, 0, 697, 0, 700, 0, 0, 702, 0, - 0, 722, 0, 719, 0, 695, 670, 0, 0, 587, - 0, 582, 577, 570, 47, 48, 49, 52, 51, 54, - 55, 59, 60, 57, 58, 62, 63, 65, 67, 69, - 71, 73, 75, 0, 220, 608, 0, 0, 0, 0, - 654, 0, 635, 80, 93, 130, 589, 0, 106, 41, - 19, 673, 0, 674, 0, 686, 0, 693, 0, 705, - 0, 711, 0, 718, 0, 0, 724, 0, 583, 585, - 0, 0, 627, 0, 0, 0, 646, 645, 648, 614, - 631, 590, 593, 676, 678, 682, 684, 699, 701, 703, - 720, 579, 0, 609, 0, 0, 0, 647, 0, 0, - 626, 0, 0, 624, 0, 78, 0, 611, 640, 610, - 0, 649, 0, 614, 613, 615, 633, 628, 0, 650, - 644, 625, 634, 0, 642, 632 + 0, 0, 0, 0, 82, 223, 224, 0, 630, 0, + 663, 676, 675, 0, 667, 0, 679, 677, 0, 0, + 0, 660, 680, 681, 682, 629, 87, 88, 90, 89, + 92, 93, 94, 95, 96, 91, 86, 0, 0, 645, + 641, 643, 647, 654, 662, 122, 126, 136, 0, 615, + 616, 0, 140, 0, 4, 0, 0, 29, 26, 37, + 231, 701, 703, 0, 0, 754, 0, 707, 0, 706, + 0, 709, 0, 0, 724, 0, 723, 0, 726, 0, + 0, 728, 0, 0, 748, 0, 745, 0, 721, 694, + 0, 0, 611, 0, 606, 601, 595, 52, 53, 54, + 57, 56, 59, 60, 64, 65, 62, 63, 67, 68, + 70, 72, 74, 76, 78, 80, 0, 225, 632, 0, + 0, 0, 0, 678, 0, 659, 85, 98, 135, 613, + 0, 111, 46, 24, 699, 0, 700, 0, 712, 0, + 719, 0, 731, 0, 737, 0, 744, 0, 0, 750, + 0, 0, 604, 607, 609, 0, 0, 651, 0, 0, + 0, 670, 669, 672, 638, 655, 614, 617, 702, 704, + 708, 710, 725, 727, 729, 746, 603, 605, 0, 633, + 0, 0, 0, 671, 0, 0, 650, 0, 0, 648, + 0, 83, 0, 635, 664, 634, 0, 673, 0, 638, + 637, 639, 657, 652, 0, 674, 668, 649, 658, 0, + 666, 656 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -849, -569, -849, -849, -849, -849, -849, -849, -849, -849, - -849, -849, -454, -849, -413, -411, -517, -419, -280, -283, - -281, -279, -278, -277, -849, -504, -849, -524, -849, -521, - -545, 7, -849, -849, -849, 6, -412, -849, -849, 41, - 38, 42, -849, -849, -429, -849, -849, -849, -849, -111, - -849, -414, -420, -849, 9, -849, 0, -453, -849, -849, - -849, -528, 144, -849, -849, -849, -104, -98, -849, -849, - -584, -592, -579, -362, -639, -849, -388, -644, -848, -849, - -450, -849, -849, -460, -459, -849, -849, 58, -763, -381, - -849, -149, -849, -416, -849, -141, -849, -849, -849, -849, - -137, -849, -849, -849, -849, -849, -849, -849, -849, 88, - -849, -849, 2, -849, -77, -312, -485, -849, -849, -849, - -321, -320, -319, -849, -849, -318, -317, -316, -333, -328, - -849, -315, -336, -849, -418, -563 + -901, -598, -901, -901, -901, -901, -901, -901, -901, -901, + -901, -901, -473, -901, -522, -443, -532, -438, -316, -314, + -311, -315, -312, -309, -901, -530, -901, -537, -901, -550, + -587, 11, -901, -901, -901, 5, -437, -901, -901, 30, + 39, 42, -901, -901, -453, -901, -901, -901, -901, -144, + -901, -432, -439, -901, 9, -901, 0, -471, -901, -901, + -901, -548, 119, -901, -901, -901, -606, -604, -901, -901, + -901, -861, -605, -397, -660, -901, -424, -674, -900, -901, + -489, -901, -901, -499, -498, -901, -901, 43, -791, -419, + -901, -192, -901, -460, -901, -190, -901, -901, -901, -901, + -188, -901, -901, -901, -901, -901, -901, -901, -901, 54, + -901, -901, 2, -901, -117, -272, -508, -901, -901, -901, + -358, -353, -359, -901, -901, -361, -352, -363, -357, -356, + -901, -364, -355, -901, -447, -589 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 554, 555, 556, 833, 557, 558, 559, 560, 561, - 562, 563, 647, 565, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 648, 893, 649, 814, 650, - 739, 651, 411, 680, 470, 652, 413, 414, 415, 460, - 461, 462, 416, 417, 418, 419, 420, 421, 511, 512, - 422, 423, 424, 425, 566, 514, 626, 517, 474, 475, - 568, 428, 429, 430, 606, 507, 601, 602, 603, 867, - 604, 605, 750, 751, 678, 828, 655, 656, 657, 658, - 659, 786, 931, 968, 960, 961, 962, 969, 660, 661, - 662, 663, 963, 934, 664, 665, 964, 983, 666, 667, - 668, 896, 790, 898, 938, 958, 959, 669, 431, 432, - 433, 457, 670, 504, 505, 484, 485, 840, 841, 435, - 712, 713, 717, 436, 437, 723, 724, 731, 732, 735, - 438, 741, 742, 439, 486, 487 + 0, 581, 582, 583, 856, 584, 585, 586, 587, 588, + 589, 590, 673, 592, 640, 641, 642, 643, 644, 645, + 646, 647, 648, 649, 650, 674, 916, 675, 837, 676, + 765, 677, 431, 706, 490, 678, 433, 434, 435, 480, + 481, 482, 436, 437, 438, 439, 440, 441, 533, 534, + 442, 443, 444, 445, 593, 536, 652, 539, 494, 495, + 595, 448, 449, 450, 632, 529, 628, 629, 630, 890, + 951, 631, 776, 777, 704, 851, 681, 682, 683, 684, + 685, 809, 956, 994, 986, 987, 988, 995, 686, 687, + 688, 689, 989, 959, 690, 691, 990, 1009, 692, 693, + 694, 919, 813, 921, 963, 984, 985, 695, 451, 452, + 453, 477, 696, 526, 527, 504, 505, 863, 864, 455, + 738, 739, 743, 456, 457, 749, 750, 757, 758, 761, + 458, 767, 768, 459, 506, 507 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1709,106 +1754,211 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 427, 463, 434, 471, 677, 479, 412, 410, 685, 426, - 479, 625, 757, 706, 529, 684, 818, 730, 754, 564, - 480, 569, 478, 895, 755, 480, 450, 780, 500, 706, - 769, 770, 509, 823, 838, 824, 716, 827, 694, 454, - 829, 700, 700, 471, 701, 463, 515, 627, 707, 448, - 744, 575, 832, -726, 516, 628, 510, 576, 451, -726, - 471, 613, 759, 781, 740, 455, 771, 772, 839, 473, - 473, 465, 673, 675, 466, 702, 702, 715, 697, 682, - 683, 708, 709, 710, 711, 440, 686, 687, 715, 703, - 698, 715, 527, 599, 515, 703, 830, 703, 767, 768, - 703, 528, 703, 715, 703, 703, -35, 967, 688, 703, - 515, 696, 689, 488, 975, 515, 489, 672, 795, 627, - 797, 627, 674, 784, 967, 441, 679, 613, 825, 490, - 492, 494, 496, 498, 499, 502, 577, 583, 613, 591, - 596, 613, 578, 584, 597, 592, 897, 906, 677, 907, - 677, 608, 677, 613, 610, 677, 704, 609, 691, 831, - 611, 442, 757, 491, 692, 815, 489, 834, 836, 868, - 842, 844, 737, 613, 846, 848, 576, 845, 851, 471, - 847, 849, 456, 853, 852, 855, 905, 858, 753, 854, - 599, 856, 599, 859, 803, 804, 805, 806, 807, 808, - 809, 810, 811, 812, 861, 863, 353, 354, 355, 939, - 862, 864, 940, 982, 813, 815, 945, 946, 815, 947, - 948, 949, 845, 849, 950, 852, 856, 859, 978, 911, - 864, 913, 443, 912, 815, 914, 458, 531, 757, 493, - 532, 479, 489, 837, 726, 727, 728, 729, 545, 773, - 774, 818, 881, 882, 883, 884, 480, 495, 478, 459, - 489, 719, 720, 721, 722, 473, 753, 497, 942, 501, - 489, 899, 489, 714, 718, 901, 489, 489, 725, 733, - 444, 489, 489, 927, 815, 902, 736, 730, 730, 489, - 903, 904, 743, 467, 815, 489, 869, 816, 445, 706, - 870, 677, 446, 871, 917, 716, 815, 952, 874, 875, - 876, 613, 613, 613, 613, 613, 613, 613, 613, 613, - 613, 613, 613, 613, 613, 613, 613, 977, 870, 815, - 447, 872, 900, 471, 740, 757, 740, 452, 818, 870, - 753, 765, 928, 766, 453, 715, 715, 483, 762, 763, - 764, 481, 877, 878, 885, 886, 879, 880, 715, 503, - 715, 508, 513, 518, 350, 530, 515, 525, 570, 573, - 526, 571, 930, 572, 579, 932, 574, 580, 909, 581, - 582, 598, 585, 677, 586, 587, 588, 593, 595, 589, - 681, 590, 594, 671, 690, 613, 613, 695, 607, -34, - 627, 527, 705, 734, 701, 752, 745, 778, 613, 782, - 613, 779, 785, 787, 775, 464, 753, 932, 791, 788, - 789, 793, 792, 472, 426, 777, 749, 761, 965, 776, - 796, 427, 426, 434, 427, 970, 798, 412, 410, 427, - 426, 434, 677, 426, 799, 482, 800, 801, 426, 506, - 979, 802, -36, 753, 822, 835, -29, 850, 843, 464, - 520, 857, 865, 464, 860, 866, 894, 933, 426, 910, - 873, 923, 426, 567, 815, 935, 943, 944, 953, 954, - 472, 955, 480, 956, 966, -612, 971, 972, 973, 426, - 985, 629, 976, 888, 984, 887, 889, 522, 760, 890, - 449, 891, 758, 892, 523, 524, 756, 600, 929, 933, - 936, 974, 980, 753, 981, 519, 426, 937, 654, 477, - 746, 819, 957, 921, 480, 915, 916, 653, 926, 820, - 0, 918, 924, 821, 0, 919, 920, 0, 0, 0, - 0, 922, 0, 0, 0, 0, 0, 925, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 699, 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, 748, - 0, 0, 600, 0, 600, 0, 600, 0, 426, 0, - 0, 426, 0, 426, 0, 426, 0, 0, 0, 0, + 447, 499, 454, 483, 491, 432, 499, 651, 710, 446, + 711, 430, 841, 703, 732, 756, 551, 498, 918, 520, + 591, 742, 500, 596, 779, 780, 781, 500, 470, 952, + 732, 733, 474, 531, 803, 770, 792, 793, 846, 861, + 847, 723, 850, 726, 491, 852, 727, 483, 726, 790, + 791, 508, 720, 724, 509, 537, 549, 532, 537, 460, + 475, 491, 471, 538, 639, 550, 734, 735, 736, 737, + 804, 766, 794, 795, -752, 862, 699, 701, 741, 728, + -752, 993, 708, 709, 728, 712, 713, 461, 1001, 741, + 977, 493, 741, 729, 653, 855, 782, 626, 993, 729, + 853, 729, 654, 537, 729, -40, 729, 714, 729, 729, + 698, 715, 493, 729, 537, 818, 623, 820, 462, 722, + 624, 700, 468, 807, 826, 827, 828, 829, 830, 831, + 832, 833, 834, 835, 653, 639, 653, 485, 463, 920, + 486, 705, 464, 848, 836, 602, 639, 523, 524, 639, + 604, 603, 610, 525, 730, 934, 605, 465, 611, 935, + 618, 703, 466, 703, 857, 703, 619, 634, 703, 891, + 763, 936, 636, 635, 467, 937, 717, 779, 637, 854, + 639, 859, 718, 511, 472, 838, 509, 491, 928, 510, + 512, 514, 516, 518, 519, 522, 626, 865, 867, 869, + 626, 871, 874, 603, 868, 870, 876, 872, 875, 878, + 881, 1008, 877, 884, 886, 879, 882, 964, 965, 885, + 887, 970, 971, 838, 838, 972, 973, 868, 872, 974, + 975, 875, 879, 1004, 513, 882, 887, 509, 515, 838, + 929, 509, 930, 499, 841, 745, 746, 747, 748, 779, + 860, 473, 752, 753, 754, 755, 567, 796, 797, 498, + 904, 905, 906, 907, 500, 922, 900, 901, 517, 924, + 967, 509, 521, 553, 626, 509, 554, 740, 838, 925, + 509, 756, 756, 478, 744, 940, 742, 509, 751, 759, + 762, 509, 509, 509, 769, 838, 732, 509, 839, 893, + 926, 927, 894, 893, 892, 838, 895, 893, 923, 476, + 953, 703, 897, 898, 899, 639, 639, 639, 639, 639, + 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, + 639, 479, 1003, 788, 841, 789, 493, 766, 501, 766, + 838, 978, 741, 741, 373, 374, 375, 902, 903, 626, + 785, 786, 787, 487, 503, 741, 530, 741, 908, 909, + 535, 540, 370, 547, 548, 552, 955, 537, 597, 957, + 598, 622, 599, 600, 707, 601, 620, 607, 606, 608, + 609, 612, 932, 613, 614, 615, 616, 617, 621, 697, + 716, 721, 625, 703, 633, -39, 731, 549, 801, 639, + 639, 760, 653, 727, 775, 802, 810, 771, 798, 799, + 800, 805, 639, 957, 639, 808, 814, 811, 815, 812, + 819, 626, 784, 816, 822, 823, -41, 821, 845, -34, + 858, 824, 996, 825, 866, 484, 873, 880, 883, 888, + 889, 991, 838, 492, 446, 917, 933, 1005, 946, 968, + 979, 447, 446, 454, 447, 703, 432, 960, 950, 447, + 446, 454, 430, 446, 502, 980, 958, 969, 446, 528, + 981, 982, -636, 992, 998, 997, 655, 1010, 1002, 484, + 542, 1011, 910, 484, 999, 911, 913, 500, 446, 912, + 914, 783, 446, 594, 915, 469, 954, 961, 1000, 1006, + 492, 1007, 962, 983, 842, 497, 843, 772, 844, 446, + 958, 491, 939, 545, 941, 938, 943, 945, 544, 950, + 541, 948, 944, 942, 0, 546, 0, 947, 0, 627, + 0, 500, 949, 0, 0, 0, 0, 0, 446, 0, + 680, 0, 0, 0, 0, 0, 0, 0, 0, 679, 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, - 654, 0, 0, 0, 0, 0, 0, 0, 0, 653, - 427, 0, 0, 0, 0, 0, 0, 0, 0, 426, - 600, 0, 0, 0, 0, 0, 0, 0, 0, 426, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 725, + 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, 774, 0, 627, 0, + 0, 0, 627, 0, 0, 446, 0, 446, 0, 0, + 0, 446, 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, 680, 0, 0, 0, + 0, 0, 0, 0, 0, 679, 447, 0, 0, 0, + 0, 0, 0, 0, 0, 446, 627, 0, 0, 0, + 0, 0, 0, 0, 0, 446, 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, 0, 0, - 0, 0, 0, 748, 600, 0, 0, 0, 0, 0, - 0, 0, 426, 426, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, - 654, 0, 0, 0, 0, 653, 0, 0, 0, 653, + 0, 627, 0, 0, 0, 0, 0, 0, 0, 0, + 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 680, + 0, 0, 0, 680, 0, 0, 0, 0, 679, 0, + 0, 0, 679, 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, - 600, 0, 0, 0, 0, 0, 0, 0, 0, 426, + 0, 0, 0, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 446, 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, 600, 0, 0, - 0, 0, 0, 0, 0, 0, 426, 0, 0, 0, + 627, 0, 0, 0, 0, 0, 0, 0, 0, 446, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 654, 654, 0, 654, 0, - 434, 0, 0, 0, 653, 653, 0, 653, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 680, 680, + 0, 680, 0, 454, 0, 0, 0, 679, 679, 0, + 679, 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, 600, 0, 0, - 0, 0, 0, 0, 0, 0, 426, 0, 654, 0, - 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, - 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, - 0, 0, 654, 0, 653, 0, 0, 0, 0, 0, - 0, 653, 654, 0, 0, 0, 654, 0, 0, 0, - 0, 653, 654, 0, 0, 653, 0, 0, 0, 476, - 0, 653, 1, 2, 3, 4, 5, 6, 7, 8, + 774, 627, 0, 0, 0, 0, 0, 0, 0, 446, + 446, 0, 0, 680, 0, 0, 0, 0, 0, 0, + 0, 0, 679, 0, 0, 0, 0, 0, 0, 0, + 0, 680, 0, 0, 0, 0, 0, 0, 680, 0, + 679, 0, 0, 0, 0, 0, 0, 679, 680, 0, + 0, 0, 680, 0, 0, 0, 0, 679, 680, 0, + 0, 679, 0, 0, 0, 496, 0, 679, 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, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 370, 0, 0, 0, 0, 0, 0, 0, 371, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 372, 373, 374, 375, 376, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 377, 378, + 379, 380, 381, 382, 383, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 391, 0, 392, 393, 394, 395, 396, 397, 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, + 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, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 0, + 0, 555, 556, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 557, 558, 0, 370, 0, 655, 656, 0, 0, 0, + 0, 657, 559, 560, 561, 562, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 372, 373, 374, 375, 376, + 0, 0, 0, 0, 0, 563, 564, 565, 566, 567, + 377, 378, 379, 380, 381, 382, 383, 658, 659, 660, + 661, 0, 662, 663, 664, 665, 666, 667, 668, 669, + 670, 671, 384, 385, 386, 387, 388, 389, 390, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, + 579, 580, 391, 672, 392, 393, 394, 395, 396, 397, + 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, 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, @@ -1843,26 +1993,1140 @@ static const yytype_int16 yytable[] = 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 0, 0, 555, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, - 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 353, 354, - 355, 356, 0, 0, 0, 0, 0, 0, 0, 0, - 357, 358, 359, 360, 361, 362, 363, 0, 0, 0, + 0, 0, 557, 558, 0, 370, 0, 655, 840, 0, + 0, 0, 0, 657, 559, 560, 561, 562, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 372, 373, 374, + 375, 376, 0, 0, 0, 0, 0, 563, 564, 565, + 566, 567, 377, 378, 379, 380, 381, 382, 383, 658, + 659, 660, 661, 0, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 384, 385, 386, 387, 388, 389, + 390, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 391, 672, 392, 393, 394, 395, + 396, 397, 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, 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, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 0, 0, 555, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 364, 365, 366, 367, 368, 369, 370, 0, - 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 1, 2, 3, + 0, 0, 0, 0, 557, 558, 0, 370, 0, 655, + 0, 0, 0, 0, 0, 657, 559, 560, 561, 562, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, + 373, 374, 375, 376, 0, 0, 0, 0, 0, 563, + 564, 565, 566, 567, 377, 378, 379, 380, 381, 382, + 383, 658, 659, 660, 661, 0, 662, 663, 664, 665, + 666, 667, 668, 669, 670, 671, 384, 385, 386, 387, + 388, 389, 390, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 391, 672, 392, 393, + 394, 395, 396, 397, 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, 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, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 0, 0, 555, 556, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 557, 558, 0, 370, + 0, 540, 0, 0, 0, 0, 0, 657, 559, 560, + 561, 562, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 372, 373, 374, 375, 376, 0, 0, 0, 0, + 0, 563, 564, 565, 566, 567, 377, 378, 379, 380, + 381, 382, 383, 658, 659, 660, 661, 0, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 384, 385, + 386, 387, 388, 389, 390, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 391, 672, + 392, 393, 394, 395, 396, 397, 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, 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, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 0, 0, 555, + 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 557, 558, + 0, 370, 0, 0, 0, 0, 0, 0, 0, 657, + 559, 560, 561, 562, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 372, 373, 374, 375, 376, 0, 0, + 0, 0, 0, 563, 564, 565, 566, 567, 377, 378, + 379, 380, 381, 382, 383, 658, 659, 660, 661, 0, + 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, + 384, 385, 386, 387, 388, 389, 390, 568, 569, 570, + 571, 572, 573, 574, 575, 576, 577, 578, 579, 580, + 391, 672, 392, 393, 394, 395, 396, 397, 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, + 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, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 0, + 0, 555, 556, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 557, 558, 0, 370, 0, 0, 0, 0, 0, 0, + 0, 657, 559, 560, 561, 562, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 372, 373, 374, 375, 376, + 0, 0, 0, 0, 0, 563, 564, 565, 566, 567, + 377, 378, 379, 380, 381, 382, 383, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 384, 385, 386, 387, 388, 389, 390, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, + 579, 580, 391, 0, 392, 393, 394, 395, 396, 397, + 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, 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, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 0, 0, + 0, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 0, 0, 555, 556, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 557, 558, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 559, 560, 561, 562, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 372, 373, 374, + 375, 0, 0, 0, 0, 0, 0, 563, 564, 565, + 566, 567, 377, 378, 379, 380, 381, 382, 383, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 384, 385, 386, 387, 388, 389, + 390, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 391, 0, 392, 393, 394, 395, + 396, 397, 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, 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, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, + 0, 0, 0, 0, 0, 371, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, + 373, 374, 375, 376, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 377, 378, 379, 380, 381, 382, + 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 384, 385, 386, 387, + 388, 389, 390, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 391, 0, 392, 393, + 394, 395, 396, 397, 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, 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, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 0, 0, 0, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 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, 372, 373, 374, 375, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 377, 378, 379, 380, + 381, 382, 383, 658, 0, 0, 661, 0, 662, 663, + 0, 0, 666, 0, 0, 0, 0, 0, 384, 385, + 386, 387, 388, 389, 390, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, + 392, 393, 394, 395, 396, 397, 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, 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, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 0, 0, 0, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 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, 488, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 372, 373, 374, 375, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 489, 377, 378, + 379, 380, 381, 382, 383, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 391, 0, 392, 393, 394, 395, 396, 397, 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, + 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, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 0, 0, 0, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 372, 373, 374, 375, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 377, 378, 379, 380, 381, 382, 383, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 384, 385, 386, 387, 388, 389, 390, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 391, 0, 392, 393, 394, 395, 396, 397, + 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, 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, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 0, 0, + 0, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 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, 543, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 372, 373, 374, + 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 377, 378, 379, 380, 381, 382, 383, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 384, 385, 386, 387, 388, 389, + 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 391, 0, 392, 393, 394, 395, + 396, 397, 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, 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, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 0, 0, 0, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 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, 773, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 372, + 373, 374, 375, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 377, 378, 379, 380, 381, 382, + 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 384, 385, 386, 387, + 388, 389, 390, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 391, 0, 392, 393, + 394, 395, 396, 397, 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, 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, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 0, 0, 0, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 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, 778, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 372, 373, 374, 375, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 377, 378, 379, 380, + 381, 382, 383, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 384, 385, + 386, 387, 388, 389, 390, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 391, 0, + 392, 393, 394, 395, 396, 397, 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, 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, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 0, 0, 0, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 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, 896, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 372, 373, 374, 375, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 377, 378, + 379, 380, 381, 382, 383, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 384, 385, 386, 387, 388, 389, 390, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 391, 0, 392, 393, 394, 395, 396, 397, 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, + 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, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 0, 0, 0, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 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, 931, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 372, 373, 374, 375, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 377, 378, 379, 380, 381, 382, 383, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 384, 385, 386, 387, 388, 389, 390, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 391, 0, 392, 393, 394, 395, 396, 397, + 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, 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, 325, 326, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 0, 0, + 0, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 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, 976, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 372, 373, 374, + 375, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 377, 378, 379, 380, 381, 382, 383, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 384, 385, 386, 387, 388, 389, + 390, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 391, 0, 392, 393, 394, 395, + 396, 397, 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, 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, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 0, 0, 0, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 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, 372, + 373, 374, 375, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 377, 378, 379, 380, 381, 382, + 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 384, 385, 386, 387, + 388, 389, 390, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 391, 0, 392, 393, + 394, 395, 396, 397, 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, 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, 0, 201, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 0, 0, 0, 0, 0, 0, 363, 0, 0, + 0, 367, 368, 369, 0, 0, 555, 556, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 557, 558, 0, 0, 0, + 702, 849, 0, 0, 0, 0, 0, 559, 560, 561, + 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 563, 564, 565, 566, 567, 377, 0, 0, 0, 0, + 382, 383, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 568, 569, 570, 571, 572, 573, + 574, 575, 576, 577, 578, 579, 580, 0, 0, 392, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 405, 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, 0, 201, 0, 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, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 0, 0, + 0, 0, 0, 0, 363, 0, 0, 0, 367, 368, + 369, 0, 0, 555, 556, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 557, 558, 0, 0, 0, 702, 966, 0, + 0, 0, 0, 0, 559, 560, 561, 562, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 563, 564, 565, + 566, 567, 377, 0, 0, 0, 0, 382, 383, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 568, 569, 570, 571, 572, 573, 574, 575, 576, + 577, 578, 579, 580, 0, 0, 392, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 405, + 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, 0, 201, + 0, 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, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 0, 0, 0, 0, 0, + 0, 363, 0, 0, 0, 367, 368, 369, 0, 0, + 555, 556, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 557, + 558, 0, 0, 638, 0, 0, 0, 0, 0, 0, + 0, 559, 560, 561, 562, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 563, 564, 565, 566, 567, 377, + 0, 0, 0, 0, 382, 383, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 568, 569, + 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, + 580, 0, 0, 392, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 405, 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, 0, 201, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 0, 0, 0, 0, 0, 0, 363, 0, + 0, 0, 367, 368, 369, 0, 0, 555, 556, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 557, 558, 0, 0, + 0, 702, 0, 0, 0, 0, 0, 0, 559, 560, + 561, 562, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 563, 564, 565, 566, 567, 377, 0, 0, 0, + 0, 382, 383, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 568, 569, 570, 571, 572, + 573, 574, 575, 576, 577, 578, 579, 580, 0, 0, + 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 405, 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, 0, 201, 0, 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, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 0, + 0, 0, 0, 0, 0, 363, 0, 0, 0, 367, + 368, 369, 0, 0, 555, 556, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 557, 558, 0, 0, 806, 0, 0, + 0, 0, 0, 0, 0, 559, 560, 561, 562, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 563, 564, + 565, 566, 567, 377, 0, 0, 0, 0, 382, 383, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 568, 569, 570, 571, 572, 573, 574, 575, + 576, 577, 578, 579, 580, 0, 0, 392, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 405, 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, 0, + 201, 0, 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, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 0, 0, 0, 0, + 0, 0, 363, 0, 0, 0, 367, 368, 369, 0, + 0, 555, 556, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 557, 558, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 817, 559, 560, 561, 562, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 563, 564, 565, 566, 567, + 377, 0, 0, 0, 0, 382, 383, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 568, + 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, + 579, 580, 0, 0, 392, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 405, 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, + 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, @@ -1876,7 +3140,7 @@ static const yytype_int16 yytable[] = 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, + 194, 195, 196, 197, 198, 199, 0, 201, 0, 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, @@ -1891,1311 +3155,375 @@ static const yytype_int16 yytable[] = 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 0, 0, 533, 534, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 0, 0, 0, 0, 0, 0, 363, + 0, 0, 0, 367, 368, 369, 0, 0, 555, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 535, 536, 0, - 350, 0, 629, 630, 0, 0, 0, 0, 631, 537, - 538, 539, 540, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 353, 354, 355, 356, 0, 0, 0, - 541, 542, 543, 544, 545, 357, 358, 359, 360, 361, - 362, 363, 632, 633, 634, 635, 0, 636, 637, 638, - 639, 640, 641, 642, 643, 644, 645, 364, 365, 366, - 367, 368, 369, 370, 546, 547, 548, 549, 550, 551, - 552, 553, 371, 646, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 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, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 0, 0, 533, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 557, 558, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 559, + 560, 561, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 535, 536, 0, 350, 0, 629, 817, 0, - 0, 0, 0, 631, 537, 538, 539, 540, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 353, 354, - 355, 356, 0, 0, 0, 541, 542, 543, 544, 545, - 357, 358, 359, 360, 361, 362, 363, 632, 633, 634, - 635, 0, 636, 637, 638, 639, 640, 641, 642, 643, - 644, 645, 364, 365, 366, 367, 368, 369, 370, 546, - 547, 548, 549, 550, 551, 552, 553, 371, 646, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 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, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 0, 0, 533, 534, + 0, 0, 563, 564, 565, 566, 567, 377, 0, 0, + 0, 0, 382, 383, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 535, 536, 0, - 350, 0, 629, 0, 0, 0, 0, 0, 631, 537, - 538, 539, 540, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 353, 354, 355, 356, 0, 0, 0, - 541, 542, 543, 544, 545, 357, 358, 359, 360, 361, - 362, 363, 632, 633, 634, 635, 0, 636, 637, 638, - 639, 640, 641, 642, 643, 644, 645, 364, 365, 366, - 367, 368, 369, 370, 546, 547, 548, 549, 550, 551, - 552, 553, 371, 646, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 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, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 0, 0, 533, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 568, 569, 570, 571, + 572, 573, 574, 575, 576, 577, 578, 579, 580, 0, + 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 405, 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, 0, 201, 0, 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, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, + 367, 368, 369, 0, 0, 555, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 535, 536, 0, 350, 0, 518, 0, 0, - 0, 0, 0, 631, 537, 538, 539, 540, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 353, 354, - 355, 356, 0, 0, 0, 541, 542, 543, 544, 545, - 357, 358, 359, 360, 361, 362, 363, 632, 633, 634, - 635, 0, 636, 637, 638, 639, 640, 641, 642, 643, - 644, 645, 364, 365, 366, 367, 368, 369, 370, 546, - 547, 548, 549, 550, 551, 552, 553, 371, 646, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 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, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 0, 0, 533, 534, + 0, 0, 0, 0, 557, 558, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 559, 560, 561, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 535, 536, 0, - 350, 0, 0, 0, 0, 0, 0, 0, 631, 537, - 538, 539, 540, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 353, 354, 355, 356, 0, 0, 0, - 541, 542, 543, 544, 545, 357, 358, 359, 360, 361, - 362, 363, 632, 633, 634, 635, 0, 636, 637, 638, - 639, 640, 641, 642, 643, 644, 645, 364, 365, 366, - 367, 368, 369, 370, 546, 547, 548, 549, 550, 551, - 552, 553, 371, 646, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 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, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 0, 0, 533, 534, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 563, + 564, 565, 566, 567, 377, 0, 0, 0, 0, 382, + 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 535, 536, 0, 350, 0, 0, 0, 0, - 0, 0, 0, 631, 537, 538, 539, 540, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 353, 354, - 355, 356, 0, 0, 0, 541, 542, 543, 544, 545, - 357, 358, 359, 360, 361, 362, 363, 0, 0, 0, + 0, 0, 0, 568, 569, 570, 571, 572, 573, 574, + 575, 576, 577, 578, 579, 580, 0, 0, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 364, 365, 366, 367, 368, 369, 370, 546, - 547, 548, 549, 550, 551, 552, 553, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 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, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 0, 0, 0, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 0, 0, 533, 534, + 0, 405, 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, + 0, 201, 0, 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, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 0, 0, 0, + 0, 0, 0, 363, 0, 0, 0, 367, 368, 369, + 0, 0, 555, 556, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 535, 536, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 537, - 538, 539, 540, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 353, 354, 355, 0, 0, 0, 0, - 541, 542, 543, 544, 545, 357, 358, 359, 360, 361, - 362, 363, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 364, 365, 366, - 367, 368, 369, 370, 546, 547, 548, 549, 550, 551, - 552, 553, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 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, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 557, 558, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 559, 560, 561, 562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 350, 0, 0, 0, 0, - 0, 0, 0, 351, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 353, 354, - 355, 356, 0, 0, 0, 0, 0, 0, 0, 0, - 357, 358, 359, 360, 361, 362, 363, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 364, 365, 366, 367, 368, 369, 370, 0, - 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 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, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 0, 0, 0, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 563, 564, 565, 566, + 764, 377, 0, 0, 0, 0, 382, 383, 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, 352, 353, 354, 355, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 357, 358, 359, 360, 361, - 362, 363, 632, 0, 0, 635, 0, 636, 637, 0, - 0, 640, 0, 0, 0, 0, 0, 364, 365, 366, - 367, 368, 369, 370, 0, 0, 0, 0, 0, 0, - 0, 0, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 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, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 0, 0, - 0, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 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, 468, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 353, 354, - 355, 0, 0, 0, 0, 0, 0, 0, 0, 469, - 357, 358, 359, 360, 361, 362, 363, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 364, 365, 366, 367, 368, 369, 370, 0, - 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 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, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 0, 0, 0, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 353, 354, 355, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 357, 358, 359, 360, 361, - 362, 363, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 364, 365, 366, - 367, 368, 369, 370, 0, 0, 0, 0, 0, 0, - 0, 0, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 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, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 0, 0, - 0, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 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, 521, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 353, 354, - 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 357, 358, 359, 360, 361, 362, 363, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 364, 365, 366, 367, 368, 369, 370, 0, - 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 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, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 0, 0, 0, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 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, 747, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 353, 354, 355, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 357, 358, 359, 360, 361, - 362, 363, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 364, 365, 366, - 367, 368, 369, 370, 0, 0, 0, 0, 0, 0, - 0, 0, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 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, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 0, 0, - 0, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 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, 908, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 353, 354, - 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 357, 358, 359, 360, 361, 362, 363, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 364, 365, 366, 367, 368, 369, 370, 0, - 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 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, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, 336, 0, 0, 0, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 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, 951, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 353, 354, 355, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 357, 358, 359, 360, 361, - 362, 363, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 364, 365, 366, - 367, 368, 369, 370, 0, 0, 0, 0, 0, 0, - 0, 0, 371, 0, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 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, 325, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 0, 0, - 0, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 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, 352, 353, 354, - 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 357, 358, 359, 360, 361, 362, 363, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 364, 365, 366, 367, 368, 369, 370, 0, - 0, 0, 0, 0, 0, 0, 0, 371, 0, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 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, 0, 181, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 347, 348, 349, 0, 0, 533, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, - 0, 676, 826, 0, 0, 0, 0, 0, 537, 538, - 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 542, 543, 544, 545, 357, 0, 0, 0, 0, 362, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 0, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 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, 0, 181, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 347, 348, 349, 0, 0, 533, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, - 0, 676, 941, 0, 0, 0, 0, 0, 537, 538, - 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 542, 543, 544, 545, 357, 0, 0, 0, 0, 362, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 0, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 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, 0, 181, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 347, 348, 349, 0, 0, 533, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, - 612, 0, 0, 0, 0, 0, 0, 0, 537, 538, - 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 542, 543, 544, 545, 357, 0, 0, 0, 0, 362, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 0, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 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, 0, 181, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 347, 348, 349, 0, 0, 533, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, - 0, 676, 0, 0, 0, 0, 0, 0, 537, 538, - 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 542, 543, 544, 545, 357, 0, 0, 0, 0, 362, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 0, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 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, 0, 181, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 347, 348, 349, 0, 0, 533, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, - 783, 0, 0, 0, 0, 0, 0, 0, 537, 538, - 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 542, 543, 544, 545, 357, 0, 0, 0, 0, 362, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 0, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 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, 0, 181, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 347, 348, 349, 0, 0, 533, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 794, 537, 538, - 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 542, 543, 544, 545, 357, 0, 0, 0, 0, 362, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 0, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 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, 0, 181, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 347, 348, 349, 0, 0, 533, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 537, 538, - 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 542, 543, 544, 545, 357, 0, 0, 0, 0, 362, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 0, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 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, 0, 181, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 347, 348, 349, 0, 0, 533, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 537, 538, - 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 542, 543, 544, 545, 357, 0, 0, 0, 0, 362, - 693, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 0, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 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, 0, 181, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 347, 348, 349, 0, 0, 533, 534, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 535, 536, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 537, 538, - 539, 540, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 541, - 542, 543, 544, 738, 357, 0, 0, 0, 0, 362, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 546, 547, 548, 549, 550, 551, 552, - 553, 0, 0, 372, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 385, 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, 0, 181, 0, 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, 327, 328, 329, 330, 331, 332, 333, 334, - 335, 336, 0, 0, 0, 0, 0, 0, 343, 0, - 0, 0, 347, 348, 349, 0, 0, 0, 0, 0, + 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, + 578, 579, 580, 0, 0, 392, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 405, 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, 0, 201, 0, + 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, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 0, 0, 0, 0, 0, 0, + 363, 0, 0, 0, 367, 368, 369, 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, 357, 0, 0, 0, 0, 362, - 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 377, 0, + 0, 0, 0, 382, 383, 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, 372 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 392 }; static const yytype_int16 yycheck[] = { - 0, 415, 0, 423, 528, 434, 0, 0, 536, 0, - 439, 515, 604, 576, 467, 536, 660, 586, 602, 473, - 434, 474, 434, 786, 603, 439, 378, 361, 446, 592, - 356, 357, 410, 672, 373, 674, 581, 676, 562, 384, - 679, 373, 373, 463, 376, 459, 376, 376, 373, 376, - 595, 375, 375, 375, 384, 384, 434, 381, 410, 381, - 480, 515, 607, 397, 592, 410, 392, 393, 407, 392, - 392, 381, 525, 526, 384, 407, 407, 581, 381, 533, - 534, 406, 407, 408, 409, 374, 354, 355, 592, 574, - 393, 595, 374, 507, 376, 580, 680, 582, 352, 353, - 585, 383, 587, 607, 589, 590, 374, 955, 376, 594, - 376, 565, 380, 407, 962, 376, 410, 383, 639, 376, - 641, 376, 383, 627, 972, 374, 383, 581, 383, 441, - 442, 443, 444, 445, 446, 447, 375, 375, 592, 375, - 377, 595, 381, 381, 381, 381, 790, 379, 672, 381, - 674, 375, 676, 607, 375, 679, 574, 381, 375, 375, - 381, 374, 754, 407, 381, 381, 410, 688, 692, 748, - 375, 375, 590, 627, 375, 375, 381, 381, 375, 599, - 381, 381, 384, 375, 381, 375, 825, 375, 602, 381, - 604, 381, 606, 381, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 375, 375, 399, 400, 401, 375, - 381, 381, 375, 976, 383, 381, 375, 375, 381, 375, - 375, 375, 381, 381, 375, 381, 381, 381, 375, 377, - 381, 377, 374, 381, 381, 381, 375, 381, 830, 407, - 384, 670, 410, 697, 406, 407, 408, 409, 410, 358, - 359, 895, 769, 770, 771, 772, 670, 407, 670, 381, - 410, 406, 407, 408, 409, 392, 680, 407, 907, 407, - 410, 792, 410, 407, 407, 796, 410, 410, 407, 407, - 374, 410, 410, 867, 381, 382, 407, 856, 857, 410, - 814, 815, 407, 410, 381, 410, 749, 384, 374, 862, - 381, 825, 374, 384, 849, 850, 381, 382, 762, 763, - 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, - 774, 775, 776, 777, 778, 779, 780, 966, 381, 381, - 374, 384, 384, 753, 862, 927, 864, 374, 982, 381, - 754, 386, 384, 388, 374, 849, 850, 410, 389, 390, - 391, 384, 765, 766, 773, 774, 767, 768, 862, 410, - 864, 378, 410, 378, 376, 378, 376, 410, 375, 383, - 410, 410, 893, 384, 383, 896, 381, 381, 832, 381, - 381, 384, 381, 907, 381, 381, 381, 375, 374, 381, - 410, 381, 381, 380, 375, 849, 850, 374, 383, 374, - 376, 374, 410, 373, 376, 379, 377, 360, 862, 377, - 864, 362, 379, 374, 396, 415, 830, 938, 374, 384, - 384, 384, 374, 423, 415, 394, 410, 410, 952, 395, - 374, 431, 423, 431, 434, 956, 382, 431, 431, 439, - 431, 439, 966, 434, 384, 439, 384, 384, 439, 449, - 971, 384, 374, 867, 380, 410, 375, 381, 383, 459, - 458, 381, 375, 463, 381, 375, 377, 896, 459, 377, - 379, 373, 463, 473, 381, 418, 373, 407, 379, 410, - 480, 375, 896, 374, 383, 378, 384, 375, 422, 480, - 379, 378, 378, 776, 384, 775, 777, 459, 609, 778, - 356, 779, 606, 780, 463, 463, 604, 507, 870, 938, - 898, 961, 972, 927, 973, 457, 507, 898, 518, 431, - 597, 670, 938, 856, 938, 845, 847, 518, 864, 670, - -1, 850, 860, 670, -1, 852, 854, -1, -1, -1, - -1, 857, -1, -1, -1, -1, -1, 862, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 570, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 599, - -1, -1, 602, -1, 604, -1, 606, -1, 599, -1, - -1, 602, -1, 604, -1, 606, -1, -1, -1, -1, + 0, 454, 0, 435, 443, 0, 459, 537, 558, 0, + 558, 0, 686, 550, 603, 613, 487, 454, 809, 466, + 493, 608, 454, 494, 628, 630, 632, 459, 398, 890, + 619, 393, 404, 432, 381, 622, 376, 377, 698, 393, + 700, 401, 702, 393, 483, 705, 396, 479, 393, 372, + 373, 429, 589, 413, 432, 396, 394, 456, 396, 394, + 432, 500, 432, 404, 537, 403, 428, 429, 430, 431, + 417, 619, 412, 413, 395, 429, 547, 548, 608, 429, + 401, 981, 555, 556, 429, 374, 375, 394, 988, 619, + 951, 412, 622, 601, 396, 395, 633, 529, 998, 607, + 706, 609, 404, 396, 612, 394, 614, 396, 616, 617, + 403, 400, 412, 621, 396, 665, 397, 667, 394, 592, + 401, 403, 396, 653, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 396, 608, 396, 401, 394, 813, + 404, 403, 394, 403, 403, 395, 619, 426, 427, 622, + 395, 401, 395, 432, 601, 397, 401, 394, 401, 401, + 395, 698, 394, 700, 714, 702, 401, 395, 705, 774, + 617, 397, 395, 401, 394, 401, 395, 781, 401, 395, + 653, 718, 401, 429, 394, 401, 432, 626, 848, 461, + 462, 463, 464, 465, 466, 467, 628, 395, 395, 395, + 632, 395, 395, 401, 401, 401, 395, 401, 401, 395, + 395, 1002, 401, 395, 395, 401, 401, 395, 395, 401, + 401, 395, 395, 401, 401, 395, 395, 401, 401, 395, + 395, 401, 401, 395, 429, 401, 401, 432, 429, 401, + 399, 432, 401, 696, 918, 428, 429, 430, 431, 853, + 723, 394, 428, 429, 430, 431, 432, 378, 379, 696, + 792, 793, 794, 795, 696, 815, 788, 789, 429, 819, + 930, 432, 429, 401, 706, 432, 404, 429, 401, 402, + 432, 879, 880, 395, 429, 872, 873, 432, 429, 429, + 429, 432, 432, 432, 429, 401, 885, 432, 404, 401, + 837, 838, 404, 401, 775, 401, 404, 401, 404, 404, + 404, 848, 785, 786, 787, 788, 789, 790, 791, 792, + 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, + 803, 401, 992, 406, 1008, 408, 412, 885, 404, 887, + 401, 402, 872, 873, 419, 420, 421, 790, 791, 781, + 409, 410, 411, 432, 432, 885, 398, 887, 796, 797, + 432, 398, 396, 432, 432, 398, 916, 396, 395, 919, + 432, 394, 404, 403, 432, 401, 395, 401, 403, 401, + 401, 401, 855, 401, 401, 401, 401, 401, 401, 400, + 395, 394, 404, 930, 403, 394, 432, 394, 380, 872, + 873, 393, 396, 396, 432, 382, 394, 397, 416, 415, + 414, 397, 885, 963, 887, 399, 394, 404, 394, 404, + 394, 853, 432, 404, 404, 404, 394, 402, 400, 395, + 432, 404, 982, 404, 403, 435, 401, 401, 401, 395, + 395, 978, 401, 443, 435, 397, 397, 997, 393, 393, + 399, 451, 443, 451, 454, 992, 451, 440, 890, 459, + 451, 459, 451, 454, 459, 432, 919, 429, 459, 469, + 395, 394, 398, 403, 395, 404, 398, 404, 398, 479, + 478, 399, 798, 483, 444, 799, 801, 919, 479, 800, + 802, 635, 483, 493, 803, 376, 893, 921, 987, 998, + 500, 999, 921, 963, 696, 451, 696, 624, 696, 500, + 963, 950, 870, 483, 873, 868, 877, 880, 479, 951, + 477, 885, 879, 875, -1, 483, -1, 883, -1, 529, + -1, 963, 887, -1, -1, -1, -1, -1, 529, -1, + 540, -1, -1, -1, -1, -1, -1, -1, -1, 540, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 660, -1, -1, -1, -1, -1, -1, -1, -1, 660, - 670, -1, -1, -1, -1, -1, -1, -1, -1, 670, - 680, -1, -1, -1, -1, -1, -1, -1, -1, 680, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 597, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 626, -1, 628, -1, + -1, -1, 632, -1, -1, 626, -1, 628, -1, -1, + -1, 632, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 686, -1, -1, -1, + -1, -1, -1, -1, -1, 686, 696, -1, -1, -1, + -1, -1, -1, -1, -1, 696, 706, -1, -1, -1, + -1, -1, -1, -1, -1, 706, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 753, 754, -1, -1, -1, -1, -1, - -1, -1, 753, 754, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 786, -1, -1, -1, - 790, -1, -1, -1, -1, 786, -1, -1, -1, 790, + -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, 809, + -1, -1, -1, 813, -1, -1, -1, -1, 809, -1, + -1, -1, 813, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 830, -1, -1, -1, -1, -1, -1, -1, -1, 830, + -1, -1, -1, 853, -1, -1, -1, -1, -1, -1, + -1, -1, 853, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 867, -1, -1, - -1, -1, -1, -1, -1, -1, 867, -1, -1, -1, + 890, -1, -1, -1, -1, -1, -1, -1, -1, 890, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 895, 896, -1, 898, -1, - 898, -1, -1, -1, 895, 896, -1, 898, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 918, 919, + -1, 921, -1, 921, -1, -1, -1, 918, 919, -1, + 921, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 927, -1, -1, - -1, -1, -1, -1, -1, -1, 927, -1, 938, -1, - -1, -1, -1, -1, -1, -1, -1, 938, -1, -1, - -1, -1, -1, -1, -1, 955, -1, -1, -1, -1, - -1, -1, 962, -1, 955, -1, -1, -1, -1, -1, - -1, 962, 972, -1, -1, -1, 976, -1, -1, -1, - -1, 972, 982, -1, -1, 976, -1, -1, -1, 0, - -1, 982, 3, 4, 5, 6, 7, 8, 9, 10, + 950, 951, -1, -1, -1, -1, -1, -1, -1, 950, + 951, -1, -1, 963, -1, -1, -1, -1, -1, -1, + -1, -1, 963, -1, -1, -1, -1, -1, -1, -1, + -1, 981, -1, -1, -1, -1, -1, -1, 988, -1, + 981, -1, -1, -1, -1, -1, -1, 988, 998, -1, + -1, -1, 1002, -1, -1, -1, -1, 998, 1008, -1, + -1, 1002, -1, -1, -1, 0, -1, 1008, 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, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 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, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 396, -1, -1, -1, -1, -1, -1, -1, 404, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 418, 419, 420, 421, 422, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 433, 434, + 435, 436, 437, 438, 439, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 455, 456, 457, 458, 459, 460, 461, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 475, -1, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 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, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 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, -1, + -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 393, 394, -1, 396, -1, 398, 399, -1, -1, -1, + -1, 404, 405, 406, 407, 408, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 418, 419, 420, 421, 422, + -1, -1, -1, -1, -1, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, -1, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 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, @@ -3230,123 +3558,1140 @@ static const yytype_int16 yycheck[] = 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, -1, -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 376, -1, -1, -1, -1, - -1, -1, -1, 384, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, 402, -1, -1, -1, -1, -1, -1, -1, -1, - 411, 412, 413, 414, 415, 416, 417, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 433, 434, 435, 436, 437, 438, 439, -1, - -1, -1, -1, -1, -1, -1, -1, 448, -1, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 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, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, -1, -1, 354, 355, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 373, 374, -1, - 376, -1, 378, 379, -1, -1, -1, -1, 384, 385, - 386, 387, 388, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 398, 399, 400, 401, 402, -1, -1, -1, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, -1, 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, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 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, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, -1, -1, 354, 355, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 373, 374, -1, 376, -1, 378, 379, -1, - -1, -1, -1, 384, 385, 386, 387, 388, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, 402, -1, -1, -1, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, -1, 423, 424, 425, 426, 427, 428, 429, 430, + -1, -1, 393, 394, -1, 396, -1, 398, 399, -1, + -1, -1, -1, 404, 405, 406, 407, 408, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 418, 419, 420, + 421, 422, -1, -1, -1, -1, -1, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 441, 442, 443, -1, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 3, 4, 5, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 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, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 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, -1, -1, 374, 375, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 393, 394, -1, 396, -1, 398, + -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 418, + 419, 420, 421, 422, -1, -1, -1, -1, -1, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, -1, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 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, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 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, -1, -1, 374, 375, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 393, 394, -1, 396, + -1, 398, -1, -1, -1, -1, -1, 404, 405, 406, + 407, 408, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 418, 419, 420, 421, 422, -1, -1, -1, -1, + -1, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, -1, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 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, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 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, -1, -1, 374, + 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 393, 394, + -1, 396, -1, -1, -1, -1, -1, -1, -1, 404, + 405, 406, 407, 408, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 418, 419, 420, 421, 422, -1, -1, + -1, -1, -1, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, -1, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, + 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 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, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 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, -1, + -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 393, 394, -1, 396, -1, -1, -1, -1, -1, -1, + -1, 404, 405, 406, 407, 408, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 418, 419, 420, 421, 422, + -1, -1, -1, -1, -1, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 455, 456, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, 475, -1, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 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, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, -1, -1, + -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, -1, -1, 374, 375, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 393, 394, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 405, 406, 407, 408, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 418, 419, 420, + 421, -1, -1, -1, -1, -1, -1, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, -1, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 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, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 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, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 396, -1, -1, + -1, -1, -1, -1, -1, 404, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 418, + 419, 420, 421, 422, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 433, 434, 435, 436, 437, 438, + 439, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 455, 456, 457, 458, + 459, 460, 461, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 475, -1, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 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, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, -1, -1, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 418, 419, 420, 421, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 433, 434, 435, 436, + 437, 438, 439, 440, -1, -1, 443, -1, 445, 446, + -1, -1, 449, -1, -1, -1, -1, -1, 455, 456, + 457, 458, 459, 460, 461, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 475, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 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, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, -1, -1, -1, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 404, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 418, 419, 420, 421, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 432, 433, 434, + 435, 436, 437, 438, 439, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 455, 456, 457, 458, 459, 460, 461, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 475, -1, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 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, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, -1, -1, -1, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 396, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 418, 419, 420, 421, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 433, 434, 435, 436, 437, 438, 439, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 455, 456, 457, 458, 459, 460, 461, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 475, -1, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 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, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, -1, -1, + -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 400, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 418, 419, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 433, 434, 435, 436, 437, 438, 439, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 455, 456, 457, 458, 459, 460, + 461, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 475, -1, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 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, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + -1, -1, -1, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 398, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 418, + 419, 420, 421, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 433, 434, 435, 436, 437, 438, + 439, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 455, 456, 457, 458, + 459, 460, 461, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 475, -1, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 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, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, -1, -1, -1, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 399, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 418, 419, 420, 421, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 433, 434, 435, 436, + 437, 438, 439, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 455, 456, + 457, 458, 459, 460, 461, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 475, -1, + 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, + 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, + 507, 508, 509, 510, 511, 512, 513, 514, 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, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, -1, -1, -1, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 399, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 418, 419, 420, 421, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 433, 434, + 435, 436, 437, 438, 439, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 455, 456, 457, 458, 459, 460, 461, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 475, -1, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 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, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, -1, -1, -1, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 399, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 418, 419, 420, 421, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 433, 434, 435, 436, 437, 438, 439, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 455, 456, 457, 458, 459, 460, 461, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 475, -1, 477, 478, 479, 480, 481, 482, + 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 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, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, -1, -1, + -1, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 399, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 418, 419, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 433, 434, 435, 436, 437, 438, 439, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 455, 456, 457, 458, 459, 460, + 461, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 475, -1, 477, 478, 479, 480, + 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, + 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, + 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, + 511, 512, 513, 514, 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, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + -1, -1, -1, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 418, + 419, 420, 421, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 433, 434, 435, 436, 437, 438, + 439, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 455, 456, 457, 458, + 459, 460, 461, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 475, -1, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 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, -1, 203, -1, 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, 327, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, -1, -1, -1, -1, -1, -1, 365, -1, -1, + -1, 369, 370, 371, -1, -1, 374, 375, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 393, 394, -1, -1, -1, + 398, 399, -1, -1, -1, -1, -1, 405, 406, 407, + 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 428, 429, 430, 431, 432, 433, -1, -1, -1, -1, + 438, 439, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 471, 472, 473, 474, -1, -1, 477, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 490, 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, -1, 203, -1, 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, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, -1, -1, + -1, -1, -1, -1, 365, -1, -1, -1, 369, 370, + 371, -1, -1, 374, 375, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 393, 394, -1, -1, -1, 398, 399, -1, + -1, -1, -1, -1, 405, 406, 407, 408, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 428, 429, 430, + 431, 432, 433, -1, -1, -1, -1, 438, 439, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, -1, -1, 477, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 490, + 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, -1, 203, + -1, 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, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, -1, -1, -1, -1, -1, + -1, 365, -1, -1, -1, 369, 370, 371, -1, -1, + 374, 375, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 393, + 394, -1, -1, 397, -1, -1, -1, -1, -1, -1, + -1, 405, 406, 407, 408, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 428, 429, 430, 431, 432, 433, + -1, -1, -1, -1, 438, 439, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, -1, -1, 477, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 490, 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, -1, 203, -1, 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, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, -1, -1, -1, -1, -1, -1, 365, -1, + -1, -1, 369, 370, 371, -1, -1, 374, 375, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 393, 394, -1, -1, + -1, 398, -1, -1, -1, -1, -1, -1, 405, 406, + 407, 408, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 428, 429, 430, 431, 432, 433, -1, -1, -1, + -1, 438, 439, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 474, -1, -1, + 477, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 490, 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, -1, 203, -1, 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, 327, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, -1, + -1, -1, -1, -1, -1, 365, -1, -1, -1, 369, + 370, 371, -1, -1, 374, 375, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 393, 394, -1, -1, 397, -1, -1, + -1, -1, -1, -1, -1, 405, 406, 407, 408, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 428, 429, + 430, 431, 432, 433, -1, -1, -1, -1, 438, 439, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 471, 472, 473, 474, -1, -1, 477, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 490, 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, -1, + 203, -1, 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, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, -1, -1, -1, -1, + -1, -1, 365, -1, -1, -1, 369, 370, 371, -1, + -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 393, 394, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 404, 405, 406, 407, 408, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 428, 429, 430, 431, 432, + 433, -1, -1, -1, -1, 438, 439, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 462, + 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, + 473, 474, -1, -1, 477, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 490, 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, + 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, @@ -3360,7 +4705,7 @@ static const yytype_int16 yycheck[] = 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, + 196, 197, 198, 199, 200, 201, -1, 203, -1, 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, @@ -3375,1110 +4720,166 @@ static const yytype_int16 yycheck[] = 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, -1, -1, 354, 355, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, -1, -1, -1, -1, -1, -1, 365, + -1, -1, -1, 369, 370, 371, -1, -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 373, 374, -1, - 376, -1, 378, -1, -1, -1, -1, -1, 384, 385, - 386, 387, 388, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 398, 399, 400, 401, 402, -1, -1, -1, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, -1, 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, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 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, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, -1, -1, 354, 355, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 393, 394, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 405, + 406, 407, 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 373, 374, -1, 376, -1, 378, -1, -1, - -1, -1, -1, 384, 385, 386, 387, 388, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, 402, -1, -1, -1, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, -1, 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, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 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, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, -1, -1, 354, 355, + -1, -1, 428, 429, 430, 431, 432, 433, -1, -1, + -1, -1, 438, 439, -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, -1, - 376, -1, -1, -1, -1, -1, -1, -1, 384, 385, - 386, 387, 388, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 398, 399, 400, 401, 402, -1, -1, -1, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, -1, 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, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 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, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, -1, -1, 354, 355, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 462, 463, 464, 465, + 466, 467, 468, 469, 470, 471, 472, 473, 474, -1, + -1, 477, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 490, 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, -1, 203, -1, 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, 327, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + -1, -1, -1, -1, -1, -1, 365, -1, -1, -1, + 369, 370, 371, -1, -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 373, 374, -1, 376, -1, -1, -1, -1, - -1, -1, -1, 384, 385, 386, 387, 388, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, 402, -1, -1, -1, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, -1, -1, -1, + -1, -1, -1, -1, 393, 394, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 405, 406, 407, 408, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, -1, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 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, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, -1, -1, -1, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, -1, -1, 354, 355, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 428, + 429, 430, 431, 432, 433, -1, -1, -1, -1, 438, + 439, -1, -1, -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, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 385, - 386, 387, 388, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 398, 399, 400, 401, -1, -1, -1, -1, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, -1, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 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, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, -1, -1, 477, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 376, -1, -1, -1, -1, - -1, -1, -1, 384, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, 402, -1, -1, -1, -1, -1, -1, -1, -1, - 411, 412, 413, 414, 415, 416, 417, -1, -1, -1, + -1, 490, 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, + -1, 203, -1, 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, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, -1, -1, -1, + -1, -1, -1, 365, -1, -1, -1, 369, 370, 371, + -1, -1, 374, 375, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 433, 434, 435, 436, 437, 438, 439, -1, - -1, -1, -1, -1, -1, -1, -1, 448, -1, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 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, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, -1, -1, -1, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, -1, -1, -1, -1, + -1, 393, 394, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 405, 406, 407, 408, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 428, 429, 430, 431, + 432, 433, -1, -1, -1, -1, 438, 439, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 398, 399, 400, 401, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 411, 412, 413, 414, 415, - 416, 417, 418, -1, -1, 421, -1, 423, 424, -1, - -1, 427, -1, -1, -1, -1, -1, 433, 434, 435, - 436, 437, 438, 439, -1, -1, -1, -1, -1, -1, - -1, -1, 448, -1, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 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, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, -1, -1, - -1, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 384, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, -1, -1, -1, -1, -1, -1, -1, -1, 410, - 411, 412, 413, 414, 415, 416, 417, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 433, 434, 435, 436, 437, 438, 439, -1, - -1, -1, -1, -1, -1, -1, -1, 448, -1, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 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, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, -1, -1, -1, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 398, 399, 400, 401, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 411, 412, 413, 414, 415, - 416, 417, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 433, 434, 435, - 436, 437, 438, 439, -1, -1, -1, -1, -1, -1, - -1, -1, 448, -1, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 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, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, -1, -1, - -1, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 380, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 411, 412, 413, 414, 415, 416, 417, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 433, 434, 435, 436, 437, 438, 439, -1, - -1, -1, -1, -1, -1, -1, -1, 448, -1, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 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, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, -1, -1, -1, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 378, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 398, 399, 400, 401, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 411, 412, 413, 414, 415, - 416, 417, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 433, 434, 435, - 436, 437, 438, 439, -1, -1, -1, -1, -1, -1, - -1, -1, 448, -1, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 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, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, -1, -1, - -1, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 379, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 411, 412, 413, 414, 415, 416, 417, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 433, 434, 435, 436, 437, 438, 439, -1, - -1, -1, -1, -1, -1, -1, -1, 448, -1, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 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, 327, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 338, -1, -1, -1, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 379, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 398, 399, 400, 401, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 411, 412, 413, 414, 415, - 416, 417, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 433, 434, 435, - 436, 437, 438, 439, -1, -1, -1, -1, -1, -1, - -1, -1, 448, -1, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, - 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, - 486, 487, 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, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 338, -1, -1, - -1, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 411, 412, 413, 414, 415, 416, 417, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 433, 434, 435, 436, 437, 438, 439, -1, - -1, -1, -1, -1, -1, -1, -1, 448, -1, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 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, -1, 183, -1, 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, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, -1, -1, -1, -1, -1, 345, -1, - -1, -1, 349, 350, 351, -1, -1, 354, 355, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, - -1, 378, 379, -1, -1, -1, -1, -1, 385, 386, - 387, 388, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, - 407, 408, 409, 410, 411, -1, -1, -1, -1, 416, - 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 440, 441, 442, 443, 444, 445, 446, - 447, -1, -1, 450, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 463, 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, -1, 183, -1, 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, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, -1, -1, -1, -1, -1, 345, -1, - -1, -1, 349, 350, 351, -1, -1, 354, 355, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, - -1, 378, 379, -1, -1, -1, -1, -1, 385, 386, - 387, 388, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, - 407, 408, 409, 410, 411, -1, -1, -1, -1, 416, - 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 440, 441, 442, 443, 444, 445, 446, - 447, -1, -1, 450, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 463, 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, -1, 183, -1, 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, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, -1, -1, -1, -1, -1, 345, -1, - -1, -1, 349, 350, 351, -1, -1, 354, 355, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, - 377, -1, -1, -1, -1, -1, -1, -1, 385, 386, - 387, 388, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, - 407, 408, 409, 410, 411, -1, -1, -1, -1, 416, - 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 440, 441, 442, 443, 444, 445, 446, - 447, -1, -1, 450, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 463, 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, -1, 183, -1, 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, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, -1, -1, -1, -1, -1, 345, -1, - -1, -1, 349, 350, 351, -1, -1, 354, 355, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, - -1, 378, -1, -1, -1, -1, -1, -1, 385, 386, - 387, 388, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, - 407, 408, 409, 410, 411, -1, -1, -1, -1, 416, - 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 440, 441, 442, 443, 444, 445, 446, - 447, -1, -1, 450, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 463, 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, -1, 183, -1, 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, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, -1, -1, -1, -1, -1, 345, -1, - -1, -1, 349, 350, 351, -1, -1, 354, 355, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, - 377, -1, -1, -1, -1, -1, -1, -1, 385, 386, - 387, 388, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, - 407, 408, 409, 410, 411, -1, -1, -1, -1, 416, - 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 440, 441, 442, 443, 444, 445, 446, - 447, -1, -1, 450, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 463, 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, -1, 183, -1, 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, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, -1, -1, -1, -1, -1, 345, -1, - -1, -1, 349, 350, 351, -1, -1, 354, 355, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 384, 385, 386, - 387, 388, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, - 407, 408, 409, 410, 411, -1, -1, -1, -1, 416, - 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 440, 441, 442, 443, 444, 445, 446, - 447, -1, -1, 450, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 463, 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, -1, 183, -1, 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, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, -1, -1, -1, -1, -1, 345, -1, - -1, -1, 349, 350, 351, -1, -1, 354, 355, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 385, 386, - 387, 388, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, - 407, 408, 409, 410, 411, -1, -1, -1, -1, 416, - 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 440, 441, 442, 443, 444, 445, 446, - 447, -1, -1, 450, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 463, 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, -1, 183, -1, 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, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, -1, -1, -1, -1, -1, 345, -1, - -1, -1, 349, 350, 351, -1, -1, 354, 355, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 385, 386, - 387, 388, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, - 407, 408, 409, 410, 411, -1, -1, -1, -1, 416, - 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 440, 441, 442, 443, 444, 445, 446, - 447, -1, -1, 450, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 463, 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, -1, 183, -1, 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, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, -1, -1, -1, -1, -1, 345, -1, - -1, -1, 349, 350, 351, -1, -1, 354, 355, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 385, 386, - 387, 388, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 406, - 407, 408, 409, 410, 411, -1, -1, -1, -1, 416, - 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 440, 441, 442, 443, 444, 445, 446, - 447, -1, -1, 450, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 463, 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, -1, 183, -1, 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, - 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 338, -1, -1, -1, -1, -1, -1, 345, -1, - -1, -1, 349, 350, 351, -1, -1, -1, -1, -1, + 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, + 472, 473, 474, -1, -1, 477, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 490, 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, -1, 203, -1, + 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, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, -1, -1, -1, -1, -1, -1, + 365, -1, -1, -1, 369, 370, 371, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 411, -1, -1, -1, -1, 416, - 417, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 433, -1, + -1, -1, -1, 438, 439, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 450 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 477 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -4520,177 +4921,183 @@ static const yytype_int16 yystos[] = 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 376, 384, 398, 399, 400, 401, 402, 411, 412, 413, - 414, 415, 416, 417, 433, 434, 435, 436, 437, 438, - 439, 448, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, - 519, 520, 523, 524, 525, 526, 530, 531, 532, 533, - 534, 535, 538, 539, 540, 541, 542, 544, 549, 550, - 551, 596, 597, 598, 600, 607, 611, 612, 618, 621, - 374, 374, 374, 374, 374, 374, 374, 374, 376, 550, - 378, 410, 374, 374, 384, 410, 384, 599, 375, 381, - 527, 528, 529, 539, 544, 381, 384, 410, 384, 410, - 522, 540, 544, 392, 546, 547, 0, 597, 524, 532, - 539, 384, 523, 410, 603, 604, 622, 623, 407, 410, - 603, 407, 603, 407, 603, 407, 603, 407, 603, 603, - 622, 407, 603, 410, 601, 602, 544, 553, 378, 410, - 434, 536, 537, 410, 543, 376, 384, 545, 378, 575, - 600, 380, 528, 527, 529, 410, 410, 374, 383, 545, - 378, 381, 384, 354, 355, 373, 374, 385, 386, 387, - 388, 406, 407, 408, 409, 410, 440, 441, 442, 443, - 444, 445, 446, 447, 489, 490, 491, 493, 494, 495, - 496, 497, 498, 499, 500, 501, 542, 544, 548, 545, - 375, 410, 384, 383, 381, 375, 381, 375, 381, 383, - 381, 381, 381, 375, 381, 381, 381, 381, 381, 381, - 381, 375, 381, 375, 381, 374, 377, 381, 384, 539, - 544, 554, 555, 556, 558, 559, 552, 383, 375, 381, - 375, 381, 377, 500, 502, 503, 504, 505, 506, 507, - 508, 509, 510, 511, 512, 513, 544, 376, 384, 378, - 379, 384, 418, 419, 420, 421, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 449, 500, 513, 515, - 517, 519, 523, 542, 544, 564, 565, 566, 567, 568, - 576, 577, 578, 579, 582, 583, 586, 587, 588, 595, - 600, 380, 383, 545, 383, 545, 378, 515, 562, 383, - 521, 410, 500, 500, 517, 549, 354, 355, 376, 380, - 375, 375, 381, 417, 515, 374, 500, 381, 393, 600, - 373, 376, 407, 604, 622, 410, 623, 373, 406, 407, - 408, 409, 608, 609, 407, 513, 518, 610, 407, 406, - 407, 408, 409, 613, 614, 407, 406, 407, 408, 409, - 489, 615, 616, 407, 373, 617, 407, 622, 410, 518, - 549, 619, 620, 407, 518, 377, 602, 378, 544, 410, - 560, 561, 379, 539, 558, 560, 555, 559, 554, 518, - 537, 410, 389, 390, 391, 386, 388, 352, 353, 356, - 357, 392, 393, 358, 359, 396, 395, 394, 360, 362, - 361, 397, 377, 377, 513, 379, 569, 374, 384, 384, - 590, 374, 374, 384, 384, 517, 374, 517, 382, 384, - 384, 384, 384, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 383, 516, 381, 384, 379, 565, 579, - 583, 588, 380, 562, 562, 383, 379, 562, 563, 562, - 558, 375, 375, 492, 517, 410, 515, 500, 373, 407, - 605, 606, 375, 383, 375, 381, 375, 381, 375, 381, - 381, 375, 381, 375, 381, 375, 381, 381, 375, 381, - 381, 375, 381, 375, 381, 375, 375, 557, 560, 545, - 381, 384, 384, 379, 500, 500, 500, 502, 502, 503, - 503, 504, 504, 504, 504, 505, 505, 506, 507, 508, - 509, 510, 511, 514, 377, 576, 589, 565, 591, 517, - 384, 517, 382, 515, 515, 562, 379, 381, 379, 500, - 377, 377, 381, 377, 381, 609, 608, 518, 610, 614, - 613, 616, 615, 373, 617, 619, 620, 558, 384, 561, - 517, 570, 517, 532, 581, 418, 564, 577, 592, 375, - 375, 379, 562, 373, 407, 375, 375, 375, 375, 375, - 375, 379, 382, 379, 410, 375, 374, 581, 593, 594, - 572, 573, 574, 580, 584, 515, 383, 566, 571, 575, - 517, 384, 375, 422, 568, 566, 378, 562, 375, 517, - 571, 572, 576, 585, 384, 379 + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 396, 404, 418, 419, 420, 421, 422, 433, 434, 435, + 436, 437, 438, 439, 455, 456, 457, 458, 459, 460, + 461, 475, 477, 478, 479, 480, 481, 482, 483, 484, + 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, + 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, + 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, + 546, 547, 550, 551, 552, 553, 557, 558, 559, 560, + 561, 562, 565, 566, 567, 568, 569, 571, 576, 577, + 578, 623, 624, 625, 627, 634, 638, 639, 645, 648, + 394, 394, 394, 394, 394, 394, 394, 394, 396, 577, + 398, 432, 394, 394, 404, 432, 404, 626, 395, 401, + 554, 555, 556, 566, 571, 401, 404, 432, 404, 432, + 549, 567, 571, 412, 573, 574, 0, 624, 551, 559, + 566, 404, 550, 432, 630, 631, 649, 650, 429, 432, + 630, 429, 630, 429, 630, 429, 630, 429, 630, 630, + 649, 429, 630, 426, 427, 432, 628, 629, 571, 580, + 398, 432, 456, 563, 564, 432, 570, 396, 404, 572, + 398, 602, 627, 400, 555, 554, 556, 432, 432, 394, + 403, 572, 398, 401, 404, 374, 375, 393, 394, 405, + 406, 407, 408, 428, 429, 430, 431, 432, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 474, 516, 517, 518, 520, 521, 522, 523, 524, 525, + 526, 527, 528, 569, 571, 575, 572, 395, 432, 404, + 403, 401, 395, 401, 395, 401, 403, 401, 401, 401, + 395, 401, 401, 401, 401, 401, 401, 401, 395, 401, + 395, 401, 394, 397, 401, 404, 566, 571, 581, 582, + 583, 586, 579, 403, 395, 401, 395, 401, 397, 527, + 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 540, 571, 396, 404, 398, 399, 404, 440, 441, + 442, 443, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 476, 527, 540, 542, 544, 546, 550, 569, + 571, 591, 592, 593, 594, 595, 603, 604, 605, 606, + 609, 610, 613, 614, 615, 622, 627, 400, 403, 572, + 403, 572, 398, 542, 589, 403, 548, 432, 527, 527, + 544, 576, 374, 375, 396, 400, 395, 395, 401, 439, + 542, 394, 527, 401, 413, 627, 393, 396, 429, 631, + 649, 432, 650, 393, 428, 429, 430, 431, 635, 636, + 429, 540, 545, 637, 429, 428, 429, 430, 431, 640, + 641, 429, 428, 429, 430, 431, 516, 642, 643, 429, + 393, 644, 429, 649, 432, 545, 576, 646, 647, 429, + 545, 397, 629, 398, 571, 432, 587, 588, 399, 582, + 587, 581, 542, 564, 432, 409, 410, 411, 406, 408, + 372, 373, 376, 377, 412, 413, 378, 379, 416, 415, + 414, 380, 382, 381, 417, 397, 397, 540, 399, 596, + 394, 404, 404, 617, 394, 394, 404, 404, 544, 394, + 544, 402, 404, 404, 404, 404, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 403, 543, 401, 404, + 399, 592, 606, 610, 615, 400, 589, 589, 403, 399, + 589, 590, 589, 581, 395, 395, 519, 544, 432, 542, + 527, 393, 429, 632, 633, 395, 403, 395, 401, 395, + 401, 395, 401, 401, 395, 401, 395, 401, 395, 401, + 401, 395, 401, 401, 395, 401, 395, 401, 395, 395, + 584, 587, 572, 401, 404, 404, 399, 527, 527, 527, + 529, 529, 530, 530, 531, 531, 531, 531, 532, 532, + 533, 534, 535, 536, 537, 538, 541, 397, 603, 616, + 592, 618, 544, 404, 544, 402, 542, 542, 589, 399, + 401, 399, 527, 397, 397, 401, 397, 401, 636, 635, + 545, 637, 641, 640, 643, 642, 393, 644, 646, 647, + 566, 585, 586, 404, 588, 544, 597, 544, 559, 608, + 440, 591, 604, 619, 395, 395, 399, 589, 393, 429, + 395, 395, 395, 395, 395, 395, 399, 586, 402, 399, + 432, 395, 394, 608, 620, 621, 599, 600, 601, 607, + 611, 542, 403, 593, 598, 602, 544, 404, 395, 444, + 595, 593, 398, 589, 395, 544, 598, 599, 603, 612, + 404, 399 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int16 yyr1[] = { - 0, 488, 489, 490, 490, 490, 490, 490, 490, 490, - 490, 490, 490, 490, 490, 490, 490, 490, 491, 491, - 491, 491, 491, 491, 492, 493, 494, 495, 495, 496, - 496, 497, 497, 498, 499, 499, 499, 500, 500, 500, - 500, 500, 501, 501, 501, 501, 502, 502, 502, 502, - 503, 503, 503, 504, 504, 504, 505, 505, 505, 505, - 505, 506, 506, 506, 507, 507, 508, 508, 509, 509, - 510, 510, 511, 511, 512, 512, 513, 514, 513, 515, - 515, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 517, 517, 518, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 521, 520, 522, 522, 523, - 523, 523, 523, 524, 524, 525, 525, 525, 526, 527, - 527, 527, 528, 528, 528, 528, 529, 530, 530, 530, - 530, 530, 531, 531, 531, 531, 531, 532, 532, 533, - 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, - 535, 536, 536, 537, 537, 537, 538, 539, 539, 540, - 540, 540, 540, 540, 540, 540, 540, 540, 540, 540, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 542, 543, 543, 544, 544, 545, 545, 545, - 545, 546, 546, 547, 548, 548, 548, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 549, 549, 550, 550, 550, 552, - 551, 553, 551, 554, 554, 554, 554, 555, 557, 556, - 558, 558, 559, 559, 560, 560, 561, 561, 562, 562, - 562, 562, 563, 563, 564, 565, 565, 566, 566, 566, - 566, 566, 566, 566, 566, 567, 568, 569, 570, 568, - 571, 571, 573, 572, 574, 572, 575, 575, 576, 576, - 577, 577, 578, 578, 579, 580, 580, 581, 581, 582, - 582, 584, 583, 585, 585, 586, 586, 587, 587, 589, - 588, 590, 588, 591, 588, 592, 592, 593, 593, 594, - 594, 595, 595, 595, 595, 595, 595, 595, 595, 596, - 596, 597, 597, 597, 599, 598, 600, 601, 601, 602, - 602, 603, 603, 604, 604, 605, 605, 606, 606, 607, - 607, 607, 607, 607, 607, 608, 608, 609, 609, 609, - 609, 609, 610, 610, 611, 611, 612, 612, 612, 612, - 612, 612, 612, 612, 613, 613, 614, 614, 614, 614, - 615, 615, 616, 616, 616, 616, 616, 617, 617, 618, - 618, 618, 618, 619, 619, 620, 620, 621, 621, 622, - 622, 623, 623 + 0, 515, 516, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 518, 518, 518, 518, 518, 518, 519, + 520, 521, 522, 522, 523, 523, 524, 524, 525, 526, + 526, 526, 527, 527, 527, 527, 527, 528, 528, 528, + 528, 529, 529, 529, 529, 530, 530, 530, 531, 531, + 531, 532, 532, 532, 532, 532, 533, 533, 533, 534, + 534, 535, 535, 536, 536, 537, 537, 538, 538, 539, + 539, 540, 541, 540, 542, 542, 543, 543, 543, 543, + 543, 543, 543, 543, 543, 543, 543, 544, 544, 545, + 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, + 548, 547, 549, 549, 550, 550, 550, 550, 551, 551, + 552, 552, 552, 553, 554, 554, 554, 555, 555, 555, + 555, 556, 557, 557, 557, 557, 557, 558, 558, 558, + 558, 558, 559, 559, 560, 561, 561, 561, 561, 561, + 561, 561, 561, 561, 561, 562, 563, 563, 564, 564, + 564, 565, 566, 566, 567, 567, 567, 567, 567, 567, + 567, 567, 567, 567, 567, 568, 568, 568, 568, 568, + 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, + 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, + 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, + 568, 568, 568, 568, 568, 568, 568, 569, 570, 570, + 571, 571, 572, 572, 572, 572, 573, 573, 574, 575, + 575, 575, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 577, 577, 577, 579, 578, 580, 578, 581, 581, + 582, 582, 584, 583, 585, 585, 586, 586, 587, 587, + 588, 588, 589, 589, 589, 589, 590, 590, 591, 592, + 592, 593, 593, 593, 593, 593, 593, 593, 593, 594, + 595, 596, 597, 595, 598, 598, 600, 599, 601, 599, + 602, 602, 603, 603, 604, 604, 605, 605, 606, 607, + 607, 608, 608, 609, 609, 611, 610, 612, 612, 613, + 613, 614, 614, 616, 615, 617, 615, 618, 615, 619, + 619, 620, 620, 621, 621, 622, 622, 622, 622, 622, + 622, 622, 622, 623, 623, 624, 624, 624, 626, 625, + 627, 628, 628, 629, 629, 629, 629, 630, 630, 631, + 631, 632, 632, 633, 633, 634, 634, 634, 634, 634, + 634, 635, 635, 636, 636, 636, 636, 636, 637, 637, + 638, 638, 639, 639, 639, 639, 639, 639, 639, 639, + 640, 640, 641, 641, 641, 641, 642, 642, 643, 643, + 643, 643, 643, 644, 644, 645, 645, 645, 645, 646, + 646, 647, 647, 648, 648, 649, 649, 650, 650 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 3, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, - 1, 3, 2, 2, 1, 1, 1, 2, 2, 2, - 1, 2, 3, 2, 1, 1, 1, 1, 2, 2, - 2, 4, 1, 1, 1, 1, 1, 3, 3, 3, - 1, 3, 3, 1, 3, 3, 1, 3, 3, 3, - 3, 1, 3, 3, 1, 3, 1, 3, 1, 3, - 1, 3, 1, 3, 1, 3, 1, 0, 6, 1, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 1, 2, 3, 2, 2, 4, - 2, 3, 4, 2, 3, 0, 6, 1, 3, 2, - 3, 3, 4, 1, 1, 2, 3, 5, 3, 2, - 3, 4, 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, 1, - 4, 1, 3, 1, 3, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 4, 1, 3, 2, 2, 1, + 1, 1, 2, 2, 2, 1, 2, 3, 2, 1, + 1, 1, 1, 2, 2, 2, 4, 1, 1, 1, + 1, 1, 3, 3, 3, 1, 3, 3, 1, 3, + 3, 1, 3, 3, 3, 3, 1, 3, 3, 1, + 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, + 3, 1, 0, 6, 1, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, + 2, 3, 2, 2, 4, 2, 3, 4, 2, 3, + 0, 6, 1, 3, 2, 3, 3, 4, 1, 1, + 2, 3, 5, 3, 2, 3, 4, 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, 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, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 4, 1, 1, 1, 3, 2, 3, 2, 3, 3, - 4, 1, 0, 3, 1, 1, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 4, 1, 1, 1, 3, + 2, 3, 2, 3, 3, 4, 1, 0, 3, 1, + 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, 1, 1, 1, 1, 1, 1, @@ -4724,24 +5131,25 @@ 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, 1, 1, 1, 1, 1, 0, - 6, 0, 5, 1, 1, 2, 2, 3, 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, 1, 1, 1, 1, 1, 3, 6, - 8, 4, 6, 1, 3, 1, 1, 4, 6, 1, - 3, 3, 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, 0, 6, 0, 5, 1, 2, + 1, 3, 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, 1, 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, 1, + 1, 1, 1, 1, 3, 6, 8, 4, 6, 1, + 3, 1, 1, 4, 6, 1, 3, 3, 3 }; @@ -5483,260 +5891,305 @@ yyreduce: switch (yyn) { case 2: /* variable_identifier: IDENTIFIER */ -#line 365 "MachineIndependent/glslang.y" +#line 371 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 5491 "MachineIndependent/glslang_tab.cpp" +#line 5899 "MachineIndependent/glslang_tab.cpp" break; case 3: /* primary_expression: variable_identifier */ -#line 371 "MachineIndependent/glslang.y" +#line 377 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5499 "MachineIndependent/glslang_tab.cpp" +#line 5907 "MachineIndependent/glslang_tab.cpp" break; case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */ -#line 374 "MachineIndependent/glslang.y" +#line 380 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 5509 "MachineIndependent/glslang_tab.cpp" +#line 5917 "MachineIndependent/glslang_tab.cpp" break; case 5: /* primary_expression: FLOATCONSTANT */ -#line 379 "MachineIndependent/glslang.y" +#line 385 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 5517 "MachineIndependent/glslang_tab.cpp" +#line 5925 "MachineIndependent/glslang_tab.cpp" break; case 6: /* primary_expression: INTCONSTANT */ -#line 382 "MachineIndependent/glslang.y" +#line 388 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 5525 "MachineIndependent/glslang_tab.cpp" +#line 5933 "MachineIndependent/glslang_tab.cpp" break; case 7: /* primary_expression: UINTCONSTANT */ -#line 385 "MachineIndependent/glslang.y" +#line 391 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 5534 "MachineIndependent/glslang_tab.cpp" +#line 5942 "MachineIndependent/glslang_tab.cpp" break; case 8: /* primary_expression: BOOLCONSTANT */ -#line 389 "MachineIndependent/glslang.y" +#line 395 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 5542 "MachineIndependent/glslang_tab.cpp" +#line 5950 "MachineIndependent/glslang_tab.cpp" break; case 9: /* primary_expression: STRING_LITERAL */ -#line 392 "MachineIndependent/glslang.y" +#line 398 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 5550 "MachineIndependent/glslang_tab.cpp" +#line 5958 "MachineIndependent/glslang_tab.cpp" break; case 10: /* primary_expression: INT32CONSTANT */ -#line 395 "MachineIndependent/glslang.y" +#line 401 "MachineIndependent/glslang.y" { 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 5559 "MachineIndependent/glslang_tab.cpp" +#line 5967 "MachineIndependent/glslang_tab.cpp" break; case 11: /* primary_expression: UINT32CONSTANT */ -#line 399 "MachineIndependent/glslang.y" +#line 405 "MachineIndependent/glslang.y" { 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 5568 "MachineIndependent/glslang_tab.cpp" +#line 5976 "MachineIndependent/glslang_tab.cpp" break; case 12: /* primary_expression: INT64CONSTANT */ -#line 403 "MachineIndependent/glslang.y" +#line 409 "MachineIndependent/glslang.y" { 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 5577 "MachineIndependent/glslang_tab.cpp" +#line 5985 "MachineIndependent/glslang_tab.cpp" break; case 13: /* primary_expression: UINT64CONSTANT */ -#line 407 "MachineIndependent/glslang.y" +#line 413 "MachineIndependent/glslang.y" { 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 5586 "MachineIndependent/glslang_tab.cpp" +#line 5994 "MachineIndependent/glslang_tab.cpp" break; case 14: /* primary_expression: INT16CONSTANT */ -#line 411 "MachineIndependent/glslang.y" +#line 417 "MachineIndependent/glslang.y" { 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 5595 "MachineIndependent/glslang_tab.cpp" +#line 6003 "MachineIndependent/glslang_tab.cpp" break; case 15: /* primary_expression: UINT16CONSTANT */ -#line 415 "MachineIndependent/glslang.y" +#line 421 "MachineIndependent/glslang.y" { 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 5604 "MachineIndependent/glslang_tab.cpp" +#line 6012 "MachineIndependent/glslang_tab.cpp" break; case 16: /* primary_expression: DOUBLECONSTANT */ -#line 419 "MachineIndependent/glslang.y" +#line 425 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal"); if (! parseContext.symbolTable.atBuiltInLevel()) 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 5615 "MachineIndependent/glslang_tab.cpp" +#line 6023 "MachineIndependent/glslang_tab.cpp" break; case 17: /* primary_expression: FLOAT16CONSTANT */ -#line 425 "MachineIndependent/glslang.y" +#line 431 "MachineIndependent/glslang.y" { 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 5624 "MachineIndependent/glslang_tab.cpp" +#line 6032 "MachineIndependent/glslang_tab.cpp" break; - case 18: /* postfix_expression: primary_expression */ -#line 432 "MachineIndependent/glslang.y" + case 18: /* primary_expression: FLOATE2M1CONSTANT */ +#line 435 "MachineIndependent/glslang.y" + { + parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 literal"); + (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloatE2M1, (yyvsp[0].lex).loc, true); + } +#line 6041 "MachineIndependent/glslang_tab.cpp" + break; + + case 19: /* primary_expression: FLOATE3M2CONSTANT */ +#line 439 "MachineIndependent/glslang.y" + { + parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 literal"); + (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloatE3M2, (yyvsp[0].lex).loc, true); + } +#line 6050 "MachineIndependent/glslang_tab.cpp" + break; + + case 20: /* primary_expression: FLOATE2M3CONSTANT */ +#line 443 "MachineIndependent/glslang.y" + { + parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 literal"); + (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloatE2M3, (yyvsp[0].lex).loc, true); + } +#line 6059 "MachineIndependent/glslang_tab.cpp" + break; + + case 21: /* primary_expression: FLOATUE8M0CONSTANT */ +#line 447 "MachineIndependent/glslang.y" + { + parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 literal"); + (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloatUE8M0, (yyvsp[0].lex).loc, true); + } +#line 6068 "MachineIndependent/glslang_tab.cpp" + break; + + case 22: /* primary_expression: FLOATMXINT8CONSTANT */ +#line 451 "MachineIndependent/glslang.y" + { + parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 literal"); + (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloatMXINT8, (yyvsp[0].lex).loc, true); + } +#line 6077 "MachineIndependent/glslang_tab.cpp" + break; + + case 23: /* postfix_expression: primary_expression */ +#line 458 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5632 "MachineIndependent/glslang_tab.cpp" +#line 6085 "MachineIndependent/glslang_tab.cpp" break; - case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ -#line 435 "MachineIndependent/glslang.y" + case 24: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ +#line 461 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 5640 "MachineIndependent/glslang_tab.cpp" +#line 6093 "MachineIndependent/glslang_tab.cpp" break; - case 20: /* postfix_expression: function_call */ -#line 438 "MachineIndependent/glslang.y" + case 25: /* postfix_expression: function_call */ +#line 464 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5648 "MachineIndependent/glslang_tab.cpp" +#line 6101 "MachineIndependent/glslang_tab.cpp" break; - case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER */ -#line 441 "MachineIndependent/glslang.y" + case 26: /* postfix_expression: postfix_expression DOT IDENTIFIER */ +#line 467 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 5656 "MachineIndependent/glslang_tab.cpp" +#line 6109 "MachineIndependent/glslang_tab.cpp" break; - case 22: /* postfix_expression: postfix_expression INC_OP */ -#line 444 "MachineIndependent/glslang.y" + case 27: /* postfix_expression: postfix_expression INC_OP */ +#line 470 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 5666 "MachineIndependent/glslang_tab.cpp" +#line 6119 "MachineIndependent/glslang_tab.cpp" break; - case 23: /* postfix_expression: postfix_expression DEC_OP */ -#line 449 "MachineIndependent/glslang.y" + case 28: /* postfix_expression: postfix_expression DEC_OP */ +#line 475 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 5676 "MachineIndependent/glslang_tab.cpp" +#line 6129 "MachineIndependent/glslang_tab.cpp" break; - case 24: /* integer_expression: expression */ -#line 457 "MachineIndependent/glslang.y" + case 29: /* integer_expression: expression */ +#line 483 "MachineIndependent/glslang.y" { parseContext.arrayIndexCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5685 "MachineIndependent/glslang_tab.cpp" +#line 6138 "MachineIndependent/glslang_tab.cpp" break; - case 25: /* function_call: function_call_or_method */ -#line 464 "MachineIndependent/glslang.y" + case 30: /* function_call: function_call_or_method */ +#line 490 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 5694 "MachineIndependent/glslang_tab.cpp" +#line 6147 "MachineIndependent/glslang_tab.cpp" break; - case 26: /* function_call_or_method: function_call_generic */ -#line 471 "MachineIndependent/glslang.y" + case 31: /* function_call_or_method: function_call_generic */ +#line 497 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5702 "MachineIndependent/glslang_tab.cpp" +#line 6155 "MachineIndependent/glslang_tab.cpp" break; - case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ -#line 477 "MachineIndependent/glslang.y" + case 32: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ +#line 503 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5711 "MachineIndependent/glslang_tab.cpp" +#line 6164 "MachineIndependent/glslang_tab.cpp" break; - case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ -#line 481 "MachineIndependent/glslang.y" + case 33: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ +#line 507 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5720 "MachineIndependent/glslang_tab.cpp" +#line 6173 "MachineIndependent/glslang_tab.cpp" break; - case 29: /* function_call_header_no_parameters: function_call_header VOID */ -#line 488 "MachineIndependent/glslang.y" + case 34: /* function_call_header_no_parameters: function_call_header VOID */ +#line 514 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 5728 "MachineIndependent/glslang_tab.cpp" +#line 6181 "MachineIndependent/glslang_tab.cpp" break; - case 30: /* function_call_header_no_parameters: function_call_header */ -#line 491 "MachineIndependent/glslang.y" + case 35: /* function_call_header_no_parameters: function_call_header */ +#line 517 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5736 "MachineIndependent/glslang_tab.cpp" +#line 6189 "MachineIndependent/glslang_tab.cpp" break; - case 31: /* function_call_header_with_parameters: function_call_header assignment_expression */ -#line 497 "MachineIndependent/glslang.y" + case 36: /* function_call_header_with_parameters: function_call_header assignment_expression */ +#line 523 "MachineIndependent/glslang.y" { if (parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed @@ -5755,11 +6208,11 @@ yyreduce: (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } } -#line 5759 "MachineIndependent/glslang_tab.cpp" +#line 6212 "MachineIndependent/glslang_tab.cpp" break; - case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression */ -#line 515 "MachineIndependent/glslang.y" + case 37: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression */ +#line 541 "MachineIndependent/glslang.y" { if (parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed @@ -5782,29 +6235,29 @@ yyreduce: (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); } } -#line 5786 "MachineIndependent/glslang_tab.cpp" +#line 6239 "MachineIndependent/glslang_tab.cpp" break; - case 33: /* function_call_header: function_identifier LEFT_PAREN */ -#line 540 "MachineIndependent/glslang.y" + case 38: /* function_call_header: function_identifier LEFT_PAREN */ +#line 566 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 5794 "MachineIndependent/glslang_tab.cpp" +#line 6247 "MachineIndependent/glslang_tab.cpp" break; - case 34: /* function_identifier: type_specifier */ -#line 548 "MachineIndependent/glslang.y" + case 39: /* function_identifier: type_specifier */ +#line 574 "MachineIndependent/glslang.y" { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5804 "MachineIndependent/glslang_tab.cpp" +#line 6257 "MachineIndependent/glslang_tab.cpp" break; - case 35: /* function_identifier: postfix_expression */ -#line 553 "MachineIndependent/glslang.y" + case 40: /* function_identifier: postfix_expression */ +#line 579 "MachineIndependent/glslang.y" { // // Should be a method or subroutine call, but we haven't recognized the arguments yet. @@ -5832,50 +6285,50 @@ yyreduce: (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 5836 "MachineIndependent/glslang_tab.cpp" +#line 6289 "MachineIndependent/glslang_tab.cpp" break; - case 36: /* function_identifier: non_uniform_qualifier */ -#line 580 "MachineIndependent/glslang.y" + case 41: /* function_identifier: non_uniform_qualifier */ +#line 606 "MachineIndependent/glslang.y" { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5846 "MachineIndependent/glslang_tab.cpp" +#line 6299 "MachineIndependent/glslang_tab.cpp" break; - case 37: /* unary_expression: postfix_expression */ -#line 588 "MachineIndependent/glslang.y" + case 42: /* unary_expression: postfix_expression */ +#line 614 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 5857 "MachineIndependent/glslang_tab.cpp" +#line 6310 "MachineIndependent/glslang_tab.cpp" break; - case 38: /* unary_expression: INC_OP unary_expression */ -#line 594 "MachineIndependent/glslang.y" + case 43: /* unary_expression: INC_OP unary_expression */ +#line 620 "MachineIndependent/glslang.y" { 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 5866 "MachineIndependent/glslang_tab.cpp" +#line 6319 "MachineIndependent/glslang_tab.cpp" break; - case 39: /* unary_expression: DEC_OP unary_expression */ -#line 598 "MachineIndependent/glslang.y" + case 44: /* unary_expression: DEC_OP unary_expression */ +#line 624 "MachineIndependent/glslang.y" { 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 5875 "MachineIndependent/glslang_tab.cpp" +#line 6328 "MachineIndependent/glslang_tab.cpp" break; - case 40: /* unary_expression: unary_operator unary_expression */ -#line 602 "MachineIndependent/glslang.y" + case 45: /* unary_expression: unary_operator unary_expression */ +#line 628 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm).op != EOpNull) { char errorOp[2] = {0, 0}; @@ -5892,187 +6345,187 @@ yyreduce: (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 5896 "MachineIndependent/glslang_tab.cpp" +#line 6349 "MachineIndependent/glslang_tab.cpp" break; - case 41: /* unary_expression: LEFT_PAREN type_specifier_nonarray RIGHT_PAREN unary_expression */ -#line 618 "MachineIndependent/glslang.y" + case 46: /* unary_expression: LEFT_PAREN type_specifier_nonarray RIGHT_PAREN unary_expression */ +#line 644 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleTypeCast((yyvsp[-3].lex).loc, new TType((yyvsp[-2].interm.type)), (yyvsp[0].interm.intermTypedNode)); } -#line 5904 "MachineIndependent/glslang_tab.cpp" +#line 6357 "MachineIndependent/glslang_tab.cpp" break; - case 42: /* unary_operator: PLUS */ -#line 625 "MachineIndependent/glslang.y" + case 47: /* unary_operator: PLUS */ +#line 651 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 5910 "MachineIndependent/glslang_tab.cpp" +#line 6363 "MachineIndependent/glslang_tab.cpp" break; - case 43: /* unary_operator: DASH */ -#line 626 "MachineIndependent/glslang.y" + case 48: /* unary_operator: DASH */ +#line 652 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 5916 "MachineIndependent/glslang_tab.cpp" +#line 6369 "MachineIndependent/glslang_tab.cpp" break; - case 44: /* unary_operator: BANG */ -#line 627 "MachineIndependent/glslang.y" + case 49: /* unary_operator: BANG */ +#line 653 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 5922 "MachineIndependent/glslang_tab.cpp" +#line 6375 "MachineIndependent/glslang_tab.cpp" break; - case 45: /* unary_operator: TILDE */ -#line 628 "MachineIndependent/glslang.y" + case 50: /* unary_operator: TILDE */ +#line 654 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); } -#line 5929 "MachineIndependent/glslang_tab.cpp" +#line 6382 "MachineIndependent/glslang_tab.cpp" break; - case 46: /* multiplicative_expression: unary_expression */ -#line 634 "MachineIndependent/glslang.y" + case 51: /* multiplicative_expression: unary_expression */ +#line 660 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5935 "MachineIndependent/glslang_tab.cpp" +#line 6388 "MachineIndependent/glslang_tab.cpp" break; - case 47: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ -#line 635 "MachineIndependent/glslang.y" + case 52: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ +#line 661 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5945 "MachineIndependent/glslang_tab.cpp" +#line 6398 "MachineIndependent/glslang_tab.cpp" break; - case 48: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ -#line 640 "MachineIndependent/glslang.y" + case 53: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ +#line 666 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5955 "MachineIndependent/glslang_tab.cpp" +#line 6408 "MachineIndependent/glslang_tab.cpp" break; - case 49: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ -#line 645 "MachineIndependent/glslang.y" + case 54: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ +#line 671 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5966 "MachineIndependent/glslang_tab.cpp" +#line 6419 "MachineIndependent/glslang_tab.cpp" break; - case 50: /* additive_expression: multiplicative_expression */ -#line 654 "MachineIndependent/glslang.y" + case 55: /* additive_expression: multiplicative_expression */ +#line 680 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5972 "MachineIndependent/glslang_tab.cpp" +#line 6425 "MachineIndependent/glslang_tab.cpp" break; - case 51: /* additive_expression: additive_expression PLUS multiplicative_expression */ -#line 655 "MachineIndependent/glslang.y" + case 56: /* additive_expression: additive_expression PLUS multiplicative_expression */ +#line 681 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5982 "MachineIndependent/glslang_tab.cpp" +#line 6435 "MachineIndependent/glslang_tab.cpp" break; - case 52: /* additive_expression: additive_expression DASH multiplicative_expression */ -#line 660 "MachineIndependent/glslang.y" + case 57: /* additive_expression: additive_expression DASH multiplicative_expression */ +#line 686 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5992 "MachineIndependent/glslang_tab.cpp" +#line 6445 "MachineIndependent/glslang_tab.cpp" break; - case 53: /* shift_expression: additive_expression */ -#line 668 "MachineIndependent/glslang.y" + case 58: /* shift_expression: additive_expression */ +#line 694 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5998 "MachineIndependent/glslang_tab.cpp" +#line 6451 "MachineIndependent/glslang_tab.cpp" break; - case 54: /* shift_expression: shift_expression LEFT_OP additive_expression */ -#line 669 "MachineIndependent/glslang.y" + case 59: /* shift_expression: shift_expression LEFT_OP additive_expression */ +#line 695 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 6009 "MachineIndependent/glslang_tab.cpp" +#line 6462 "MachineIndependent/glslang_tab.cpp" break; - case 55: /* shift_expression: shift_expression RIGHT_OP additive_expression */ -#line 675 "MachineIndependent/glslang.y" + case 60: /* shift_expression: shift_expression RIGHT_OP additive_expression */ +#line 701 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 6020 "MachineIndependent/glslang_tab.cpp" +#line 6473 "MachineIndependent/glslang_tab.cpp" break; - case 56: /* relational_expression: shift_expression */ -#line 684 "MachineIndependent/glslang.y" + case 61: /* relational_expression: shift_expression */ +#line 710 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6026 "MachineIndependent/glslang_tab.cpp" +#line 6479 "MachineIndependent/glslang_tab.cpp" break; - case 57: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ -#line 685 "MachineIndependent/glslang.y" + case 62: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ +#line 711 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 6036 "MachineIndependent/glslang_tab.cpp" +#line 6489 "MachineIndependent/glslang_tab.cpp" break; - case 58: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ -#line 690 "MachineIndependent/glslang.y" + case 63: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ +#line 716 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 6046 "MachineIndependent/glslang_tab.cpp" +#line 6499 "MachineIndependent/glslang_tab.cpp" break; - case 59: /* relational_expression: relational_expression LE_OP shift_expression */ -#line 695 "MachineIndependent/glslang.y" + case 64: /* relational_expression: relational_expression LE_OP shift_expression */ +#line 721 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 6056 "MachineIndependent/glslang_tab.cpp" +#line 6509 "MachineIndependent/glslang_tab.cpp" break; - case 60: /* relational_expression: relational_expression GE_OP shift_expression */ -#line 700 "MachineIndependent/glslang.y" + case 65: /* relational_expression: relational_expression GE_OP shift_expression */ +#line 726 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 6066 "MachineIndependent/glslang_tab.cpp" +#line 6519 "MachineIndependent/glslang_tab.cpp" break; - case 61: /* equality_expression: relational_expression */ -#line 708 "MachineIndependent/glslang.y" + case 66: /* equality_expression: relational_expression */ +#line 734 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6072 "MachineIndependent/glslang_tab.cpp" +#line 6525 "MachineIndependent/glslang_tab.cpp" break; - case 62: /* equality_expression: equality_expression EQ_OP relational_expression */ -#line 709 "MachineIndependent/glslang.y" + case 67: /* equality_expression: equality_expression EQ_OP relational_expression */ +#line 735 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=="); @@ -6082,11 +6535,11 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 6086 "MachineIndependent/glslang_tab.cpp" +#line 6539 "MachineIndependent/glslang_tab.cpp" break; - case 63: /* equality_expression: equality_expression NE_OP relational_expression */ -#line 718 "MachineIndependent/glslang.y" + case 68: /* equality_expression: equality_expression NE_OP relational_expression */ +#line 744 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!="); @@ -6096,124 +6549,124 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 6100 "MachineIndependent/glslang_tab.cpp" +#line 6553 "MachineIndependent/glslang_tab.cpp" break; - case 64: /* and_expression: equality_expression */ -#line 730 "MachineIndependent/glslang.y" + case 69: /* and_expression: equality_expression */ +#line 756 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6106 "MachineIndependent/glslang_tab.cpp" +#line 6559 "MachineIndependent/glslang_tab.cpp" break; - case 65: /* and_expression: and_expression AMPERSAND equality_expression */ -#line 731 "MachineIndependent/glslang.y" + case 70: /* and_expression: and_expression AMPERSAND equality_expression */ +#line 757 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 6117 "MachineIndependent/glslang_tab.cpp" +#line 6570 "MachineIndependent/glslang_tab.cpp" break; - case 66: /* exclusive_or_expression: and_expression */ -#line 740 "MachineIndependent/glslang.y" + case 71: /* exclusive_or_expression: and_expression */ +#line 766 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6123 "MachineIndependent/glslang_tab.cpp" +#line 6576 "MachineIndependent/glslang_tab.cpp" break; - case 67: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ -#line 741 "MachineIndependent/glslang.y" + case 72: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ +#line 767 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 6134 "MachineIndependent/glslang_tab.cpp" +#line 6587 "MachineIndependent/glslang_tab.cpp" break; - case 68: /* inclusive_or_expression: exclusive_or_expression */ -#line 750 "MachineIndependent/glslang.y" + case 73: /* inclusive_or_expression: exclusive_or_expression */ +#line 776 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6140 "MachineIndependent/glslang_tab.cpp" +#line 6593 "MachineIndependent/glslang_tab.cpp" break; - case 69: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression */ -#line 751 "MachineIndependent/glslang.y" + case 74: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression */ +#line 777 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 6151 "MachineIndependent/glslang_tab.cpp" +#line 6604 "MachineIndependent/glslang_tab.cpp" break; - case 70: /* logical_and_expression: inclusive_or_expression */ -#line 760 "MachineIndependent/glslang.y" + case 75: /* logical_and_expression: inclusive_or_expression */ +#line 786 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6157 "MachineIndependent/glslang_tab.cpp" +#line 6610 "MachineIndependent/glslang_tab.cpp" break; - case 71: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ -#line 761 "MachineIndependent/glslang.y" + case 76: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ +#line 787 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 6167 "MachineIndependent/glslang_tab.cpp" +#line 6620 "MachineIndependent/glslang_tab.cpp" break; - case 72: /* logical_xor_expression: logical_and_expression */ -#line 769 "MachineIndependent/glslang.y" + case 77: /* logical_xor_expression: logical_and_expression */ +#line 795 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6173 "MachineIndependent/glslang_tab.cpp" +#line 6626 "MachineIndependent/glslang_tab.cpp" break; - case 73: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ -#line 770 "MachineIndependent/glslang.y" + case 78: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ +#line 796 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 6183 "MachineIndependent/glslang_tab.cpp" +#line 6636 "MachineIndependent/glslang_tab.cpp" break; - case 74: /* logical_or_expression: logical_xor_expression */ -#line 778 "MachineIndependent/glslang.y" + case 79: /* logical_or_expression: logical_xor_expression */ +#line 804 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6189 "MachineIndependent/glslang_tab.cpp" +#line 6642 "MachineIndependent/glslang_tab.cpp" break; - case 75: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ -#line 779 "MachineIndependent/glslang.y" + case 80: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ +#line 805 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 6199 "MachineIndependent/glslang_tab.cpp" +#line 6652 "MachineIndependent/glslang_tab.cpp" break; - case 76: /* conditional_expression: logical_or_expression */ -#line 787 "MachineIndependent/glslang.y" + case 81: /* conditional_expression: logical_or_expression */ +#line 813 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6205 "MachineIndependent/glslang_tab.cpp" +#line 6658 "MachineIndependent/glslang_tab.cpp" break; - case 77: /* $@1: %empty */ -#line 788 "MachineIndependent/glslang.y" + case 82: /* $@1: %empty */ +#line 814 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 6213 "MachineIndependent/glslang_tab.cpp" +#line 6666 "MachineIndependent/glslang_tab.cpp" break; - case 78: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression */ -#line 791 "MachineIndependent/glslang.y" + case 83: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression */ +#line 817 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode)); @@ -6226,17 +6679,17 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 6230 "MachineIndependent/glslang_tab.cpp" +#line 6683 "MachineIndependent/glslang_tab.cpp" break; - case 79: /* assignment_expression: conditional_expression */ -#line 806 "MachineIndependent/glslang.y" + case 84: /* assignment_expression: conditional_expression */ +#line 832 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6236 "MachineIndependent/glslang_tab.cpp" +#line 6689 "MachineIndependent/glslang_tab.cpp" break; - case 80: /* assignment_expression: unary_expression assignment_operator assignment_expression */ -#line 807 "MachineIndependent/glslang.y" + case 85: /* assignment_expression: unary_expression assignment_operator assignment_expression */ +#line 833 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment"); parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "="); @@ -6250,119 +6703,119 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 6254 "MachineIndependent/glslang_tab.cpp" +#line 6707 "MachineIndependent/glslang_tab.cpp" break; - case 81: /* assignment_operator: EQUAL */ -#line 823 "MachineIndependent/glslang.y" + case 86: /* assignment_operator: EQUAL */ +#line 849 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 6263 "MachineIndependent/glslang_tab.cpp" +#line 6716 "MachineIndependent/glslang_tab.cpp" break; - case 82: /* assignment_operator: MUL_ASSIGN */ -#line 827 "MachineIndependent/glslang.y" + case 87: /* assignment_operator: MUL_ASSIGN */ +#line 853 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 6272 "MachineIndependent/glslang_tab.cpp" +#line 6725 "MachineIndependent/glslang_tab.cpp" break; - case 83: /* assignment_operator: DIV_ASSIGN */ -#line 831 "MachineIndependent/glslang.y" + case 88: /* assignment_operator: DIV_ASSIGN */ +#line 857 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 6281 "MachineIndependent/glslang_tab.cpp" +#line 6734 "MachineIndependent/glslang_tab.cpp" break; - case 84: /* assignment_operator: MOD_ASSIGN */ -#line 835 "MachineIndependent/glslang.y" + case 89: /* assignment_operator: MOD_ASSIGN */ +#line 861 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%="); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 6291 "MachineIndependent/glslang_tab.cpp" +#line 6744 "MachineIndependent/glslang_tab.cpp" break; - case 85: /* assignment_operator: ADD_ASSIGN */ -#line 840 "MachineIndependent/glslang.y" + case 90: /* assignment_operator: ADD_ASSIGN */ +#line 866 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 6300 "MachineIndependent/glslang_tab.cpp" +#line 6753 "MachineIndependent/glslang_tab.cpp" break; - case 86: /* assignment_operator: SUB_ASSIGN */ -#line 844 "MachineIndependent/glslang.y" + case 91: /* assignment_operator: SUB_ASSIGN */ +#line 870 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 6309 "MachineIndependent/glslang_tab.cpp" +#line 6762 "MachineIndependent/glslang_tab.cpp" break; - case 87: /* assignment_operator: LEFT_ASSIGN */ -#line 848 "MachineIndependent/glslang.y" + case 92: /* assignment_operator: LEFT_ASSIGN */ +#line 874 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 6318 "MachineIndependent/glslang_tab.cpp" +#line 6771 "MachineIndependent/glslang_tab.cpp" break; - case 88: /* assignment_operator: RIGHT_ASSIGN */ -#line 852 "MachineIndependent/glslang.y" + case 93: /* assignment_operator: RIGHT_ASSIGN */ +#line 878 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 6327 "MachineIndependent/glslang_tab.cpp" +#line 6780 "MachineIndependent/glslang_tab.cpp" break; - case 89: /* assignment_operator: AND_ASSIGN */ -#line 856 "MachineIndependent/glslang.y" + case 94: /* assignment_operator: AND_ASSIGN */ +#line 882 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 6336 "MachineIndependent/glslang_tab.cpp" +#line 6789 "MachineIndependent/glslang_tab.cpp" break; - case 90: /* assignment_operator: XOR_ASSIGN */ -#line 860 "MachineIndependent/glslang.y" + case 95: /* assignment_operator: XOR_ASSIGN */ +#line 886 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 6345 "MachineIndependent/glslang_tab.cpp" +#line 6798 "MachineIndependent/glslang_tab.cpp" break; - case 91: /* assignment_operator: OR_ASSIGN */ -#line 864 "MachineIndependent/glslang.y" + case 96: /* assignment_operator: OR_ASSIGN */ +#line 890 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 6354 "MachineIndependent/glslang_tab.cpp" +#line 6807 "MachineIndependent/glslang_tab.cpp" break; - case 92: /* expression: assignment_expression */ -#line 871 "MachineIndependent/glslang.y" + case 97: /* expression: assignment_expression */ +#line 897 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6362 "MachineIndependent/glslang_tab.cpp" +#line 6815 "MachineIndependent/glslang_tab.cpp" break; - case 93: /* expression: expression COMMA assignment_expression */ -#line 874 "MachineIndependent/glslang.y" + case 98: /* expression: expression COMMA assignment_expression */ +#line 900 "MachineIndependent/glslang.y" { parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); @@ -6371,30 +6824,30 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 6375 "MachineIndependent/glslang_tab.cpp" +#line 6828 "MachineIndependent/glslang_tab.cpp" break; - case 94: /* constant_expression: conditional_expression */ -#line 885 "MachineIndependent/glslang.y" + case 99: /* constant_expression: conditional_expression */ +#line 911 "MachineIndependent/glslang.y" { parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6384 "MachineIndependent/glslang_tab.cpp" +#line 6837 "MachineIndependent/glslang_tab.cpp" break; - case 95: /* declaration: function_prototype SEMICOLON */ -#line 892 "MachineIndependent/glslang.y" + case 100: /* declaration: function_prototype SEMICOLON */ +#line 918 "MachineIndependent/glslang.y" { parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 6394 "MachineIndependent/glslang_tab.cpp" +#line 6847 "MachineIndependent/glslang_tab.cpp" break; - case 96: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON */ -#line 897 "MachineIndependent/glslang.y" + case 101: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON */ +#line 923 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[-1].interm).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier"); (yyvsp[-1].interm).function->setSpirvInstruction(*(yyvsp[-2].interm.spirvInst)); // Attach SPIR-V intruction qualifier @@ -6402,31 +6855,31 @@ yyreduce: (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 6406 "MachineIndependent/glslang_tab.cpp" +#line 6859 "MachineIndependent/glslang_tab.cpp" break; - case 97: /* declaration: spirv_execution_mode_qualifier SEMICOLON */ -#line 904 "MachineIndependent/glslang.y" + case 102: /* declaration: spirv_execution_mode_qualifier SEMICOLON */ +#line 930 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "SPIR-V execution mode qualifier"); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier"); (yyval.interm.intermNode) = 0; } -#line 6416 "MachineIndependent/glslang_tab.cpp" +#line 6869 "MachineIndependent/glslang_tab.cpp" break; - case 98: /* declaration: init_declarator_list SEMICOLON */ -#line 909 "MachineIndependent/glslang.y" + case 103: /* declaration: init_declarator_list SEMICOLON */ +#line 935 "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 6426 "MachineIndependent/glslang_tab.cpp" +#line 6879 "MachineIndependent/glslang_tab.cpp" break; - case 99: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ -#line 914 "MachineIndependent/glslang.y" + case 104: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ +#line 940 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement"); // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope @@ -6434,62 +6887,62 @@ yyreduce: parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 6438 "MachineIndependent/glslang_tab.cpp" +#line 6891 "MachineIndependent/glslang_tab.cpp" break; - case 100: /* declaration: block_structure SEMICOLON */ -#line 921 "MachineIndependent/glslang.y" + case 105: /* declaration: block_structure SEMICOLON */ +#line 947 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); } -#line 6446 "MachineIndependent/glslang_tab.cpp" +#line 6899 "MachineIndependent/glslang_tab.cpp" break; - case 101: /* declaration: block_structure IDENTIFIER SEMICOLON */ -#line 924 "MachineIndependent/glslang.y" + case 106: /* declaration: block_structure IDENTIFIER SEMICOLON */ +#line 950 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); } -#line 6454 "MachineIndependent/glslang_tab.cpp" +#line 6907 "MachineIndependent/glslang_tab.cpp" break; - case 102: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ -#line 927 "MachineIndependent/glslang.y" + case 107: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ +#line 953 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); } -#line 6462 "MachineIndependent/glslang_tab.cpp" +#line 6915 "MachineIndependent/glslang_tab.cpp" break; - case 103: /* declaration: type_qualifier SEMICOLON */ -#line 930 "MachineIndependent/glslang.y" + case 108: /* declaration: type_qualifier SEMICOLON */ +#line 956 "MachineIndependent/glslang.y" { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 6472 "MachineIndependent/glslang_tab.cpp" +#line 6925 "MachineIndependent/glslang_tab.cpp" break; - case 104: /* declaration: type_qualifier identifier_list SEMICOLON */ -#line 935 "MachineIndependent/glslang.y" + case 109: /* declaration: type_qualifier identifier_list SEMICOLON */ +#line 961 "MachineIndependent/glslang.y" { parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers); parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 6482 "MachineIndependent/glslang_tab.cpp" +#line 6935 "MachineIndependent/glslang_tab.cpp" break; - case 105: /* $@2: %empty */ -#line 943 "MachineIndependent/glslang.y" + case 110: /* $@2: %empty */ +#line 969 "MachineIndependent/glslang.y" { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 6488 "MachineIndependent/glslang_tab.cpp" +#line 6941 "MachineIndependent/glslang_tab.cpp" break; - case 106: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_without_heap RIGHT_BRACE */ -#line 943 "MachineIndependent/glslang.y" - { + case 111: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */ +#line 969 "MachineIndependent/glslang.y" + { --parseContext.blockNestingLevel; parseContext.blockName = (yyvsp[-4].lex).string; parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier); @@ -6498,95 +6951,95 @@ yyreduce: (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 6502 "MachineIndependent/glslang_tab.cpp" +#line 6955 "MachineIndependent/glslang_tab.cpp" break; - case 107: /* identifier_list: IDENTIFIER */ -#line 955 "MachineIndependent/glslang.y" + case 112: /* identifier_list: IDENTIFIER */ +#line 981 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 6511 "MachineIndependent/glslang_tab.cpp" +#line 6964 "MachineIndependent/glslang_tab.cpp" break; - case 108: /* identifier_list: identifier_list COMMA IDENTIFIER */ -#line 959 "MachineIndependent/glslang.y" + case 113: /* identifier_list: identifier_list COMMA IDENTIFIER */ +#line 985 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 6520 "MachineIndependent/glslang_tab.cpp" +#line 6973 "MachineIndependent/glslang_tab.cpp" break; - case 109: /* function_prototype: function_declarator RIGHT_PAREN */ -#line 966 "MachineIndependent/glslang.y" + case 114: /* function_prototype: function_declarator RIGHT_PAREN */ +#line 992 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-1].interm.function); if (parseContext.compileOnly) (yyval.interm).function->setExport(); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 6530 "MachineIndependent/glslang_tab.cpp" +#line 6983 "MachineIndependent/glslang_tab.cpp" break; - case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute */ -#line 971 "MachineIndependent/glslang.y" + case 115: /* function_prototype: function_declarator RIGHT_PAREN attribute */ +#line 997 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-2].interm.function); if (parseContext.compileOnly) (yyval.interm).function->setExport(); (yyval.interm).loc = (yyvsp[-1].lex).loc; - const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; - parseContext.requireExtensions((yyvsp[-1].lex).loc, 2, extensions, "attribute"); - parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); + const char * extensions[3] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence, E_GL_EXT_function_control_attributes }; + parseContext.requireExtensions((yyvsp[-1].lex).loc, 3, extensions, "attribute"); + parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyval.interm).function, *(yyvsp[0].interm.attributes)); } -#line 6543 "MachineIndependent/glslang_tab.cpp" +#line 6996 "MachineIndependent/glslang_tab.cpp" break; - case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN */ -#line 979 "MachineIndependent/glslang.y" + case 116: /* function_prototype: attribute function_declarator RIGHT_PAREN */ +#line 1005 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-1].interm.function); if (parseContext.compileOnly) (yyval.interm).function->setExport(); (yyval.interm).loc = (yyvsp[0].lex).loc; - const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; - parseContext.requireExtensions((yyvsp[0].lex).loc, 2, extensions, "attribute"); - parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes)); + const char * extensions[3] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence, E_GL_EXT_function_control_attributes }; + parseContext.requireExtensions((yyvsp[0].lex).loc, 3, extensions, "attribute"); + parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyval.interm).function, *(yyvsp[-2].interm.attributes)); } -#line 6556 "MachineIndependent/glslang_tab.cpp" +#line 7009 "MachineIndependent/glslang_tab.cpp" break; - case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute */ -#line 987 "MachineIndependent/glslang.y" + case 117: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute */ +#line 1013 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-2].interm.function); if (parseContext.compileOnly) (yyval.interm).function->setExport(); (yyval.interm).loc = (yyvsp[-1].lex).loc; - const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence }; - parseContext.requireExtensions((yyvsp[-1].lex).loc, 2, extensions, "attribute"); - parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes)); - parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); + const char * extensions[3] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence, E_GL_EXT_function_control_attributes }; + parseContext.requireExtensions((yyvsp[-1].lex).loc, 3, extensions, "attribute"); + parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyval.interm).function, *(yyvsp[-3].interm.attributes)); + parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyval.interm).function, *(yyvsp[0].interm.attributes)); } -#line 6570 "MachineIndependent/glslang_tab.cpp" +#line 7023 "MachineIndependent/glslang_tab.cpp" break; - case 113: /* function_declarator: function_header */ -#line 999 "MachineIndependent/glslang.y" + case 118: /* function_declarator: function_header */ +#line 1025 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 6578 "MachineIndependent/glslang_tab.cpp" +#line 7031 "MachineIndependent/glslang_tab.cpp" break; - case 114: /* function_declarator: function_header_with_parameters */ -#line 1002 "MachineIndependent/glslang.y" + case 119: /* function_declarator: function_header_with_parameters */ +#line 1028 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 6586 "MachineIndependent/glslang_tab.cpp" +#line 7039 "MachineIndependent/glslang_tab.cpp" break; - case 115: /* function_header_with_parameters: function_header parameter_declaration */ -#line 1009 "MachineIndependent/glslang.y" + case 120: /* function_header_with_parameters: function_header parameter_declaration */ +#line 1035 "MachineIndependent/glslang.y" { // Add the parameter (yyval.interm.function) = (yyvsp[-1].interm.function); @@ -6600,11 +7053,11 @@ yyreduce: else delete (yyvsp[0].interm).param.type; } -#line 6604 "MachineIndependent/glslang_tab.cpp" +#line 7057 "MachineIndependent/glslang_tab.cpp" break; - case 116: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ -#line 1022 "MachineIndependent/glslang.y" + case 121: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ +#line 1048 "MachineIndependent/glslang.y" { // // Only first parameter of one-parameter functions can be void @@ -6625,20 +7078,20 @@ yyreduce: parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-2].interm.function), (yyvsp[0].interm).param); } } -#line 6629 "MachineIndependent/glslang_tab.cpp" +#line 7082 "MachineIndependent/glslang_tab.cpp" break; - case 117: /* function_header_with_parameters: function_header_with_parameters COMMA DOT DOT DOT */ -#line 1042 "MachineIndependent/glslang.y" + case 122: /* function_header_with_parameters: function_header_with_parameters COMMA DOT DOT DOT */ +#line 1068 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[-4].interm.function); parseContext.makeVariadic((yyvsp[-4].interm.function), (yyvsp[-2].lex).loc); } -#line 6638 "MachineIndependent/glslang_tab.cpp" +#line 7091 "MachineIndependent/glslang_tab.cpp" break; - case 118: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ -#line 1049 "MachineIndependent/glslang.y" + case 123: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ +#line 1075 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) { parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return", @@ -6658,11 +7111,11 @@ yyreduce: function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 6662 "MachineIndependent/glslang_tab.cpp" +#line 7115 "MachineIndependent/glslang_tab.cpp" break; - case 119: /* parameter_declarator: type_specifier IDENTIFIER */ -#line 1072 "MachineIndependent/glslang.y" + case 124: /* parameter_declarator: type_specifier IDENTIFIER */ +#line 1098 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -6678,11 +7131,11 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 6682 "MachineIndependent/glslang_tab.cpp" +#line 7135 "MachineIndependent/glslang_tab.cpp" break; - case 120: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ -#line 1087 "MachineIndependent/glslang.y" + case 125: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ +#line 1113 "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"); @@ -6702,21 +7155,21 @@ yyreduce: (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 6706 "MachineIndependent/glslang_tab.cpp" +#line 7159 "MachineIndependent/glslang_tab.cpp" break; - case 121: /* parameter_declarator: type_specifier IDENTIFIER EQUAL initializer */ -#line 1106 "MachineIndependent/glslang.y" + case 126: /* parameter_declarator: type_specifier IDENTIFIER EQUAL initializer */ +#line 1132 "MachineIndependent/glslang.y" { TParameter param = parseContext.getParamWithDefault((yyvsp[-3].interm.type), (yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).param = param; } -#line 6716 "MachineIndependent/glslang_tab.cpp" +#line 7169 "MachineIndependent/glslang_tab.cpp" break; - case 122: /* parameter_declaration: type_qualifier parameter_declarator */ -#line 1117 "MachineIndependent/glslang.y" + case 127: /* parameter_declaration: type_qualifier parameter_declarator */ +#line 1143 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -6728,11 +7181,11 @@ yyreduce: parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 6732 "MachineIndependent/glslang_tab.cpp" +#line 7185 "MachineIndependent/glslang_tab.cpp" break; - case 123: /* parameter_declaration: parameter_declarator */ -#line 1128 "MachineIndependent/glslang.y" + case 128: /* parameter_declaration: parameter_declarator */ +#line 1154 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); @@ -6740,11 +7193,11 @@ 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(), (yyval.interm).param.type->hasTypeParameter()); } -#line 6744 "MachineIndependent/glslang_tab.cpp" +#line 7197 "MachineIndependent/glslang_tab.cpp" break; - case 124: /* parameter_declaration: type_qualifier parameter_type_specifier */ -#line 1138 "MachineIndependent/glslang.y" + case 129: /* parameter_declaration: type_qualifier parameter_type_specifier */ +#line 1164 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -6755,11 +7208,11 @@ 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 6759 "MachineIndependent/glslang_tab.cpp" +#line 7212 "MachineIndependent/glslang_tab.cpp" break; - case 125: /* parameter_declaration: parameter_type_specifier */ -#line 1148 "MachineIndependent/glslang.y" + case 130: /* parameter_declaration: parameter_type_specifier */ +#line 1174 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); @@ -6767,121 +7220,121 @@ 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(), (yyval.interm).param.type->hasTypeParameter()); } -#line 6771 "MachineIndependent/glslang_tab.cpp" +#line 7224 "MachineIndependent/glslang_tab.cpp" break; - case 126: /* parameter_type_specifier: type_specifier */ -#line 1158 "MachineIndependent/glslang.y" + case 131: /* parameter_type_specifier: type_specifier */ +#line 1184 "MachineIndependent/glslang.y" { TParameter param = { 0, new TType((yyvsp[0].interm.type)), {} }; (yyval.interm).param = param; if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 6782 "MachineIndependent/glslang_tab.cpp" +#line 7235 "MachineIndependent/glslang_tab.cpp" break; - case 127: /* init_declarator_list: single_declaration */ -#line 1167 "MachineIndependent/glslang.y" + case 132: /* init_declarator_list: single_declaration */ +#line 1193 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 6790 "MachineIndependent/glslang_tab.cpp" +#line 7243 "MachineIndependent/glslang_tab.cpp" break; - case 128: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ -#line 1170 "MachineIndependent/glslang.y" + case 133: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ +#line 1196 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); TIntermNode* declNode = parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, declNode, (yyvsp[0].lex).loc); } -#line 6800 "MachineIndependent/glslang_tab.cpp" +#line 7253 "MachineIndependent/glslang_tab.cpp" break; - case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ -#line 1175 "MachineIndependent/glslang.y" + case 134: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ +#line 1201 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); TIntermNode* declNode = parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-3].interm).intermNode, declNode, (yyvsp[-1].lex).loc); } -#line 6810 "MachineIndependent/glslang_tab.cpp" +#line 7263 "MachineIndependent/glslang_tab.cpp" break; - case 130: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ -#line 1180 "MachineIndependent/glslang.y" + case 135: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ +#line 1206 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-5].interm).type; TIntermNode* declNode = 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, declNode, (yyvsp[-1].lex).loc); } -#line 6820 "MachineIndependent/glslang_tab.cpp" +#line 7273 "MachineIndependent/glslang_tab.cpp" break; - case 131: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ -#line 1185 "MachineIndependent/glslang.y" + case 136: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ +#line 1211 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm).type; TIntermNode* declNode = 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, declNode, (yyvsp[-1].lex).loc); } -#line 6830 "MachineIndependent/glslang_tab.cpp" +#line 7283 "MachineIndependent/glslang_tab.cpp" break; - case 132: /* single_declaration: fully_specified_type */ -#line 1193 "MachineIndependent/glslang.y" + case 137: /* single_declaration: fully_specified_type */ +#line 1219 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[0].interm.type); (yyval.interm).intermNode = 0; parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 6840 "MachineIndependent/glslang_tab.cpp" +#line 7293 "MachineIndependent/glslang_tab.cpp" break; - case 133: /* single_declaration: fully_specified_type IDENTIFIER */ -#line 1198 "MachineIndependent/glslang.y" + case 138: /* single_declaration: fully_specified_type IDENTIFIER */ +#line 1224 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-1].interm.type); TIntermNode* declNode = parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate(nullptr, declNode, (yyvsp[0].lex).loc); } -#line 6851 "MachineIndependent/glslang_tab.cpp" +#line 7304 "MachineIndependent/glslang_tab.cpp" break; - case 134: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ -#line 1204 "MachineIndependent/glslang.y" + case 139: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ +#line 1230 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-2].interm.type); TIntermNode* declNode = parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); (yyval.interm).intermNode = parseContext.intermediate.growAggregate(nullptr, declNode, (yyvsp[-1].lex).loc); } -#line 6861 "MachineIndependent/glslang_tab.cpp" +#line 7314 "MachineIndependent/glslang_tab.cpp" break; - case 135: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ -#line 1209 "MachineIndependent/glslang.y" + case 140: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ +#line 1235 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm.type); TIntermNode* declNode = 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(nullptr, declNode, (yyvsp[-3].lex).loc); } -#line 6871 "MachineIndependent/glslang_tab.cpp" +#line 7324 "MachineIndependent/glslang_tab.cpp" break; - case 136: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 1214 "MachineIndependent/glslang.y" + case 141: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 1240 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-3].interm.type); TIntermNode* declNode = 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(nullptr, declNode, (yyvsp[-2].lex).loc); } -#line 6881 "MachineIndependent/glslang_tab.cpp" +#line 7334 "MachineIndependent/glslang_tab.cpp" break; - case 137: /* fully_specified_type: type_specifier */ -#line 1223 "MachineIndependent/glslang.y" + case 142: /* fully_specified_type: type_specifier */ +#line 1249 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); @@ -6892,11 +7345,11 @@ yyreduce: } parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier, (yyval.interm.type).hasTypeParameter()); } -#line 6896 "MachineIndependent/glslang_tab.cpp" +#line 7349 "MachineIndependent/glslang_tab.cpp" break; - case 138: /* fully_specified_type: type_qualifier type_specifier */ -#line 1233 "MachineIndependent/glslang.y" + case 143: /* fully_specified_type: type_qualifier type_specifier */ +#line 1259 "MachineIndependent/glslang.y" { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, false, &(yyvsp[0].interm.type)); parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type)); @@ -6921,22 +7374,22 @@ yyreduce: (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 6925 "MachineIndependent/glslang_tab.cpp" +#line 7378 "MachineIndependent/glslang_tab.cpp" break; - case 139: /* invariant_qualifier: INVARIANT */ -#line 1260 "MachineIndependent/glslang.y" + case 144: /* invariant_qualifier: INVARIANT */ +#line 1286 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "invariant"); parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 6936 "MachineIndependent/glslang_tab.cpp" +#line 7389 "MachineIndependent/glslang_tab.cpp" break; - case 140: /* interpolation_qualifier: SMOOTH */ -#line 1269 "MachineIndependent/glslang.y" + case 145: /* interpolation_qualifier: SMOOTH */ +#line 1295 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "smooth"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth"); @@ -6944,11 +7397,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 6948 "MachineIndependent/glslang_tab.cpp" +#line 7401 "MachineIndependent/glslang_tab.cpp" break; - case 141: /* interpolation_qualifier: FLAT */ -#line 1276 "MachineIndependent/glslang.y" + case 146: /* interpolation_qualifier: FLAT */ +#line 1302 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "flat"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat"); @@ -6956,11 +7409,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 6960 "MachineIndependent/glslang_tab.cpp" +#line 7413 "MachineIndependent/glslang_tab.cpp" break; - case 142: /* interpolation_qualifier: NOPERSPECTIVE */ -#line 1283 "MachineIndependent/glslang.y" + case 147: /* interpolation_qualifier: NOPERSPECTIVE */ +#line 1309 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); @@ -6968,11 +7421,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 6972 "MachineIndependent/glslang_tab.cpp" +#line 7425 "MachineIndependent/glslang_tab.cpp" break; - case 143: /* interpolation_qualifier: EXPLICITINTERPAMD */ -#line 1290 "MachineIndependent/glslang.y" + case 148: /* interpolation_qualifier: EXPLICITINTERPAMD */ +#line 1316 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); @@ -6980,11 +7433,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 6984 "MachineIndependent/glslang_tab.cpp" +#line 7437 "MachineIndependent/glslang_tab.cpp" break; - case 144: /* interpolation_qualifier: PERVERTEXNV */ -#line 1297 "MachineIndependent/glslang.y" + case 149: /* interpolation_qualifier: PERVERTEXNV */ +#line 1323 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); @@ -6993,11 +7446,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 6997 "MachineIndependent/glslang_tab.cpp" +#line 7450 "MachineIndependent/glslang_tab.cpp" break; - case 145: /* interpolation_qualifier: PERVERTEXEXT */ -#line 1305 "MachineIndependent/glslang.y" + case 150: /* interpolation_qualifier: PERVERTEXEXT */ +#line 1331 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexEXT"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); @@ -7006,11 +7459,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexEXT = true; } -#line 7010 "MachineIndependent/glslang_tab.cpp" +#line 7463 "MachineIndependent/glslang_tab.cpp" break; - case 146: /* interpolation_qualifier: PERPRIMITIVENV */ -#line 1313 "MachineIndependent/glslang.y" + case 151: /* interpolation_qualifier: PERPRIMITIVENV */ +#line 1339 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV"); @@ -7021,11 +7474,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 7025 "MachineIndependent/glslang_tab.cpp" +#line 7478 "MachineIndependent/glslang_tab.cpp" break; - case 147: /* interpolation_qualifier: PERPRIMITIVEEXT */ -#line 1323 "MachineIndependent/glslang.y" + case 152: /* interpolation_qualifier: PERPRIMITIVEEXT */ +#line 1349 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveEXT"); @@ -7036,11 +7489,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 7040 "MachineIndependent/glslang_tab.cpp" +#line 7493 "MachineIndependent/glslang_tab.cpp" break; - case 148: /* interpolation_qualifier: PERVIEWNV */ -#line 1333 "MachineIndependent/glslang.y" + case 153: /* interpolation_qualifier: PERVIEWNV */ +#line 1359 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV"); @@ -7048,11 +7501,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 7052 "MachineIndependent/glslang_tab.cpp" +#line 7505 "MachineIndependent/glslang_tab.cpp" break; - case 149: /* interpolation_qualifier: PERTASKNV */ -#line 1340 "MachineIndependent/glslang.y" + case 154: /* interpolation_qualifier: PERTASKNV */ +#line 1366 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV"); @@ -7060,84 +7513,84 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 7064 "MachineIndependent/glslang_tab.cpp" +#line 7517 "MachineIndependent/glslang_tab.cpp" break; - case 150: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ -#line 1350 "MachineIndependent/glslang.y" + case 155: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ +#line 1376 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 7072 "MachineIndependent/glslang_tab.cpp" +#line 7525 "MachineIndependent/glslang_tab.cpp" break; - case 151: /* layout_qualifier_id_list: layout_qualifier_id */ -#line 1356 "MachineIndependent/glslang.y" + case 156: /* layout_qualifier_id_list: layout_qualifier_id */ +#line 1382 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 7080 "MachineIndependent/glslang_tab.cpp" +#line 7533 "MachineIndependent/glslang_tab.cpp" break; - case 152: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ -#line 1359 "MachineIndependent/glslang.y" + case 157: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ +#line 1385 "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 7090 "MachineIndependent/glslang_tab.cpp" +#line 7543 "MachineIndependent/glslang_tab.cpp" break; - case 153: /* layout_qualifier_id: IDENTIFIER */ -#line 1366 "MachineIndependent/glslang.y" + case 158: /* layout_qualifier_id: IDENTIFIER */ +#line 1392 "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 7099 "MachineIndependent/glslang_tab.cpp" +#line 7552 "MachineIndependent/glslang_tab.cpp" break; - case 154: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ -#line 1370 "MachineIndependent/glslang.y" - { + case 159: /* layout_qualifier_id: IDENTIFIER EQUAL assignment_expression */ +#line 1396 "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 7108 "MachineIndependent/glslang_tab.cpp" +#line 7561 "MachineIndependent/glslang_tab.cpp" break; - case 155: /* layout_qualifier_id: SHARED */ -#line 1374 "MachineIndependent/glslang.y" + case 160: /* layout_qualifier_id: SHARED */ +#line 1400 "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 7118 "MachineIndependent/glslang_tab.cpp" +#line 7571 "MachineIndependent/glslang_tab.cpp" break; - case 156: /* precise_qualifier: PRECISE */ -#line 1382 "MachineIndependent/glslang.y" + case 161: /* precise_qualifier: PRECISE */ +#line 1408 "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 7129 "MachineIndependent/glslang_tab.cpp" +#line 7582 "MachineIndependent/glslang_tab.cpp" break; - case 157: /* type_qualifier: single_type_qualifier */ -#line 1391 "MachineIndependent/glslang.y" + case 162: /* type_qualifier: single_type_qualifier */ +#line 1417 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 7137 "MachineIndependent/glslang_tab.cpp" +#line 7590 "MachineIndependent/glslang_tab.cpp" break; - case 158: /* type_qualifier: type_qualifier single_type_qualifier */ -#line 1394 "MachineIndependent/glslang.y" + case 163: /* type_qualifier: type_qualifier single_type_qualifier */ +#line 1420 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -7146,151 +7599,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 7150 "MachineIndependent/glslang_tab.cpp" +#line 7603 "MachineIndependent/glslang_tab.cpp" break; - case 159: /* single_type_qualifier: storage_qualifier */ -#line 1405 "MachineIndependent/glslang.y" + case 164: /* single_type_qualifier: storage_qualifier */ +#line 1431 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 7158 "MachineIndependent/glslang_tab.cpp" +#line 7611 "MachineIndependent/glslang_tab.cpp" break; - case 160: /* single_type_qualifier: layout_qualifier */ -#line 1408 "MachineIndependent/glslang.y" + case 165: /* single_type_qualifier: layout_qualifier */ +#line 1434 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 7166 "MachineIndependent/glslang_tab.cpp" +#line 7619 "MachineIndependent/glslang_tab.cpp" break; - case 161: /* single_type_qualifier: precision_qualifier */ -#line 1411 "MachineIndependent/glslang.y" + case 166: /* single_type_qualifier: precision_qualifier */ +#line 1437 "MachineIndependent/glslang.y" { parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 7175 "MachineIndependent/glslang_tab.cpp" +#line 7628 "MachineIndependent/glslang_tab.cpp" break; - case 162: /* single_type_qualifier: interpolation_qualifier */ -#line 1415 "MachineIndependent/glslang.y" + case 167: /* single_type_qualifier: interpolation_qualifier */ +#line 1441 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 7184 "MachineIndependent/glslang_tab.cpp" +#line 7637 "MachineIndependent/glslang_tab.cpp" break; - case 163: /* single_type_qualifier: invariant_qualifier */ -#line 1419 "MachineIndependent/glslang.y" + case 168: /* single_type_qualifier: invariant_qualifier */ +#line 1445 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 7193 "MachineIndependent/glslang_tab.cpp" +#line 7646 "MachineIndependent/glslang_tab.cpp" break; - case 164: /* single_type_qualifier: precise_qualifier */ -#line 1423 "MachineIndependent/glslang.y" + case 169: /* single_type_qualifier: precise_qualifier */ +#line 1449 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 7202 "MachineIndependent/glslang_tab.cpp" +#line 7655 "MachineIndependent/glslang_tab.cpp" break; - case 165: /* single_type_qualifier: non_uniform_qualifier */ -#line 1427 "MachineIndependent/glslang.y" + case 170: /* single_type_qualifier: non_uniform_qualifier */ +#line 1453 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 7210 "MachineIndependent/glslang_tab.cpp" +#line 7663 "MachineIndependent/glslang_tab.cpp" break; - case 166: /* single_type_qualifier: spirv_storage_class_qualifier */ -#line 1430 "MachineIndependent/glslang.y" + case 171: /* single_type_qualifier: spirv_storage_class_qualifier */ +#line 1456 "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 7220 "MachineIndependent/glslang_tab.cpp" +#line 7673 "MachineIndependent/glslang_tab.cpp" break; - case 167: /* single_type_qualifier: spirv_decorate_qualifier */ -#line 1435 "MachineIndependent/glslang.y" + case 172: /* single_type_qualifier: spirv_decorate_qualifier */ +#line 1461 "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 7229 "MachineIndependent/glslang_tab.cpp" +#line 7682 "MachineIndependent/glslang_tab.cpp" break; - case 168: /* single_type_qualifier: SPIRV_BY_REFERENCE */ -#line 1439 "MachineIndependent/glslang.y" + case 173: /* single_type_qualifier: SPIRV_BY_REFERENCE */ +#line 1465 "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 7239 "MachineIndependent/glslang_tab.cpp" +#line 7692 "MachineIndependent/glslang_tab.cpp" break; - case 169: /* single_type_qualifier: SPIRV_LITERAL */ -#line 1444 "MachineIndependent/glslang.y" + case 174: /* single_type_qualifier: SPIRV_LITERAL */ +#line 1470 "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 7249 "MachineIndependent/glslang_tab.cpp" +#line 7702 "MachineIndependent/glslang_tab.cpp" break; - case 170: /* storage_qualifier: CONST */ -#line 1452 "MachineIndependent/glslang.y" + case 175: /* storage_qualifier: CONST */ +#line 1478 "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 7258 "MachineIndependent/glslang_tab.cpp" +#line 7711 "MachineIndependent/glslang_tab.cpp" break; - case 171: /* storage_qualifier: INOUT */ -#line 1456 "MachineIndependent/glslang.y" + case 176: /* storage_qualifier: INOUT */ +#line 1482 "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 7268 "MachineIndependent/glslang_tab.cpp" +#line 7721 "MachineIndependent/glslang_tab.cpp" break; - case 172: /* storage_qualifier: IN */ -#line 1461 "MachineIndependent/glslang.y" + case 177: /* storage_qualifier: IN */ +#line 1487 "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 7279 "MachineIndependent/glslang_tab.cpp" +#line 7732 "MachineIndependent/glslang_tab.cpp" break; - case 173: /* storage_qualifier: OUT */ -#line 1467 "MachineIndependent/glslang.y" + case 178: /* storage_qualifier: OUT */ +#line 1493 "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 7290 "MachineIndependent/glslang_tab.cpp" +#line 7743 "MachineIndependent/glslang_tab.cpp" break; - case 174: /* storage_qualifier: CENTROID */ -#line 1473 "MachineIndependent/glslang.y" + case 179: /* storage_qualifier: CENTROID */ +#line 1499 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); @@ -7298,31 +7751,31 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 7302 "MachineIndependent/glslang_tab.cpp" +#line 7755 "MachineIndependent/glslang_tab.cpp" break; - case 175: /* storage_qualifier: UNIFORM */ -#line 1480 "MachineIndependent/glslang.y" + case 180: /* storage_qualifier: UNIFORM */ +#line 1506 "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 7312 "MachineIndependent/glslang_tab.cpp" +#line 7765 "MachineIndependent/glslang_tab.cpp" break; - case 176: /* storage_qualifier: TILEIMAGEEXT */ -#line 1485 "MachineIndependent/glslang.y" + case 181: /* storage_qualifier: TILEIMAGEEXT */ +#line 1511 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "tileImageEXT"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqTileImageEXT; } -#line 7322 "MachineIndependent/glslang_tab.cpp" +#line 7775 "MachineIndependent/glslang_tab.cpp" break; - case 177: /* storage_qualifier: SHARED */ -#line 1490 "MachineIndependent/glslang.y" + case 182: /* storage_qualifier: SHARED */ +#line 1516 "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"); @@ -7331,21 +7784,21 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 7335 "MachineIndependent/glslang_tab.cpp" +#line 7788 "MachineIndependent/glslang_tab.cpp" break; - case 178: /* storage_qualifier: BUFFER */ -#line 1498 "MachineIndependent/glslang.y" + case 183: /* storage_qualifier: BUFFER */ +#line 1524 "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 7345 "MachineIndependent/glslang_tab.cpp" +#line 7798 "MachineIndependent/glslang_tab.cpp" break; - case 179: /* storage_qualifier: ATTRIBUTE */ -#line 1503 "MachineIndependent/glslang.y" + case 184: /* storage_qualifier: ATTRIBUTE */ +#line 1529 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); @@ -7358,11 +7811,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 7362 "MachineIndependent/glslang_tab.cpp" +#line 7815 "MachineIndependent/glslang_tab.cpp" break; - case 180: /* storage_qualifier: VARYING */ -#line 1515 "MachineIndependent/glslang.y" + case 185: /* storage_qualifier: VARYING */ +#line 1541 "MachineIndependent/glslang.y" { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); @@ -7377,52 +7830,52 @@ yyreduce: else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 7381 "MachineIndependent/glslang_tab.cpp" +#line 7834 "MachineIndependent/glslang_tab.cpp" break; - case 181: /* storage_qualifier: PATCH */ -#line 1529 "MachineIndependent/glslang.y" + case 186: /* storage_qualifier: PATCH */ +#line 1555 "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 7392 "MachineIndependent/glslang_tab.cpp" +#line 7845 "MachineIndependent/glslang_tab.cpp" break; - case 182: /* storage_qualifier: SAMPLE */ -#line 1535 "MachineIndependent/glslang.y" + case 187: /* storage_qualifier: SAMPLE */ +#line 1561 "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 7402 "MachineIndependent/glslang_tab.cpp" +#line 7855 "MachineIndependent/glslang_tab.cpp" break; - case 183: /* storage_qualifier: RESOURCEHEAP */ -#line 1540 "MachineIndependent/glslang.y" + case 188: /* storage_qualifier: RESOURCEHEAP */ +#line 1566 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "resourceHeap"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqResourceHeap; } -#line 7412 "MachineIndependent/glslang_tab.cpp" +#line 7865 "MachineIndependent/glslang_tab.cpp" break; - case 184: /* storage_qualifier: SAMPLERHEAP */ -#line 1545 "MachineIndependent/glslang.y" + case 189: /* storage_qualifier: SAMPLERHEAP */ +#line 1571 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "samplerHeap"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqSamplerHeap; } -#line 7422 "MachineIndependent/glslang_tab.cpp" +#line 7875 "MachineIndependent/glslang_tab.cpp" break; - case 185: /* storage_qualifier: HITATTRNV */ -#line 1550 "MachineIndependent/glslang.y" + case 190: /* storage_qualifier: HITATTRNV */ +#line 1576 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -7431,11 +7884,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 7435 "MachineIndependent/glslang_tab.cpp" +#line 7888 "MachineIndependent/glslang_tab.cpp" break; - case 186: /* storage_qualifier: HITOBJECTATTRNV */ -#line 1558 "MachineIndependent/glslang.y" + case 191: /* storage_qualifier: HITOBJECTATTRNV */ +#line 1584 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask @@ -7444,11 +7897,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitObjectAttrNV; } -#line 7448 "MachineIndependent/glslang_tab.cpp" +#line 7901 "MachineIndependent/glslang_tab.cpp" break; - case 187: /* storage_qualifier: HITOBJECTATTREXT */ -#line 1566 "MachineIndependent/glslang.y" + case 192: /* storage_qualifier: HITOBJECTATTREXT */ +#line 1592 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask @@ -7457,11 +7910,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitObjectAttrEXT; } -#line 7461 "MachineIndependent/glslang_tab.cpp" +#line 7914 "MachineIndependent/glslang_tab.cpp" break; - case 188: /* storage_qualifier: HITATTREXT */ -#line 1574 "MachineIndependent/glslang.y" + case 193: /* storage_qualifier: HITATTREXT */ +#line 1600 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -7470,11 +7923,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 7474 "MachineIndependent/glslang_tab.cpp" +#line 7927 "MachineIndependent/glslang_tab.cpp" break; - case 189: /* storage_qualifier: PAYLOADNV */ -#line 1582 "MachineIndependent/glslang.y" + case 194: /* storage_qualifier: PAYLOADNV */ +#line 1608 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -7483,11 +7936,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 7487 "MachineIndependent/glslang_tab.cpp" +#line 7940 "MachineIndependent/glslang_tab.cpp" break; - case 190: /* storage_qualifier: PAYLOADEXT */ -#line 1590 "MachineIndependent/glslang.y" + case 195: /* storage_qualifier: PAYLOADEXT */ +#line 1616 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -7496,11 +7949,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 7500 "MachineIndependent/glslang_tab.cpp" +#line 7953 "MachineIndependent/glslang_tab.cpp" break; - case 191: /* storage_qualifier: PAYLOADINNV */ -#line 1598 "MachineIndependent/glslang.y" + case 196: /* storage_qualifier: PAYLOADINNV */ +#line 1624 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -7509,11 +7962,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 7513 "MachineIndependent/glslang_tab.cpp" +#line 7966 "MachineIndependent/glslang_tab.cpp" break; - case 192: /* storage_qualifier: PAYLOADINEXT */ -#line 1606 "MachineIndependent/glslang.y" + case 197: /* storage_qualifier: PAYLOADINEXT */ +#line 1632 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -7522,11 +7975,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 7526 "MachineIndependent/glslang_tab.cpp" +#line 7979 "MachineIndependent/glslang_tab.cpp" break; - case 193: /* storage_qualifier: CALLDATANV */ -#line 1614 "MachineIndependent/glslang.y" + case 198: /* storage_qualifier: CALLDATANV */ +#line 1640 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -7535,11 +7988,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 7539 "MachineIndependent/glslang_tab.cpp" +#line 7992 "MachineIndependent/glslang_tab.cpp" break; - case 194: /* storage_qualifier: CALLDATAEXT */ -#line 1622 "MachineIndependent/glslang.y" + case 199: /* storage_qualifier: CALLDATAEXT */ +#line 1648 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -7548,11 +8001,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 7552 "MachineIndependent/glslang_tab.cpp" +#line 8005 "MachineIndependent/glslang_tab.cpp" break; - case 195: /* storage_qualifier: CALLDATAINNV */ -#line 1630 "MachineIndependent/glslang.y" + case 200: /* storage_qualifier: CALLDATAINNV */ +#line 1656 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); @@ -7560,11 +8013,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 7564 "MachineIndependent/glslang_tab.cpp" +#line 8017 "MachineIndependent/glslang_tab.cpp" break; - case 196: /* storage_qualifier: CALLDATAINEXT */ -#line 1637 "MachineIndependent/glslang.y" + case 201: /* storage_qualifier: CALLDATAINEXT */ +#line 1663 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); @@ -7572,147 +8025,147 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 7576 "MachineIndependent/glslang_tab.cpp" +#line 8029 "MachineIndependent/glslang_tab.cpp" break; - case 197: /* storage_qualifier: COHERENT */ -#line 1644 "MachineIndependent/glslang.y" + case 202: /* storage_qualifier: COHERENT */ +#line 1670 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 7585 "MachineIndependent/glslang_tab.cpp" +#line 8038 "MachineIndependent/glslang_tab.cpp" break; - case 198: /* storage_qualifier: DEVICECOHERENT */ -#line 1648 "MachineIndependent/glslang.y" + case 203: /* storage_qualifier: DEVICECOHERENT */ +#line 1674 "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 7595 "MachineIndependent/glslang_tab.cpp" +#line 8048 "MachineIndependent/glslang_tab.cpp" break; - case 199: /* storage_qualifier: QUEUEFAMILYCOHERENT */ -#line 1653 "MachineIndependent/glslang.y" + case 204: /* storage_qualifier: QUEUEFAMILYCOHERENT */ +#line 1679 "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 7605 "MachineIndependent/glslang_tab.cpp" +#line 8058 "MachineIndependent/glslang_tab.cpp" break; - case 200: /* storage_qualifier: WORKGROUPCOHERENT */ -#line 1658 "MachineIndependent/glslang.y" + case 205: /* storage_qualifier: WORKGROUPCOHERENT */ +#line 1684 "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 7615 "MachineIndependent/glslang_tab.cpp" +#line 8068 "MachineIndependent/glslang_tab.cpp" break; - case 201: /* storage_qualifier: SUBGROUPCOHERENT */ -#line 1663 "MachineIndependent/glslang.y" + case 206: /* storage_qualifier: SUBGROUPCOHERENT */ +#line 1689 "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 7625 "MachineIndependent/glslang_tab.cpp" +#line 8078 "MachineIndependent/glslang_tab.cpp" break; - case 202: /* storage_qualifier: NONPRIVATE */ -#line 1668 "MachineIndependent/glslang.y" + case 207: /* storage_qualifier: NONPRIVATE */ +#line 1694 "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 7635 "MachineIndependent/glslang_tab.cpp" +#line 8088 "MachineIndependent/glslang_tab.cpp" break; - case 203: /* storage_qualifier: SHADERCALLCOHERENT */ -#line 1673 "MachineIndependent/glslang.y" + case 208: /* storage_qualifier: SHADERCALLCOHERENT */ +#line 1699 "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 7645 "MachineIndependent/glslang_tab.cpp" +#line 8098 "MachineIndependent/glslang_tab.cpp" break; - case 204: /* storage_qualifier: VOLATILE */ -#line 1678 "MachineIndependent/glslang.y" + case 209: /* storage_qualifier: VOLATILE */ +#line 1704 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 7654 "MachineIndependent/glslang_tab.cpp" +#line 8107 "MachineIndependent/glslang_tab.cpp" break; - case 205: /* storage_qualifier: RESTRICT */ -#line 1682 "MachineIndependent/glslang.y" + case 210: /* storage_qualifier: RESTRICT */ +#line 1708 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 7663 "MachineIndependent/glslang_tab.cpp" +#line 8116 "MachineIndependent/glslang_tab.cpp" break; - case 206: /* storage_qualifier: READONLY */ -#line 1686 "MachineIndependent/glslang.y" + case 211: /* storage_qualifier: READONLY */ +#line 1712 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 7672 "MachineIndependent/glslang_tab.cpp" +#line 8125 "MachineIndependent/glslang_tab.cpp" break; - case 207: /* storage_qualifier: WRITEONLY */ -#line 1690 "MachineIndependent/glslang.y" + case 212: /* storage_qualifier: WRITEONLY */ +#line 1716 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 7681 "MachineIndependent/glslang_tab.cpp" +#line 8134 "MachineIndependent/glslang_tab.cpp" break; - case 208: /* storage_qualifier: NONTEMPORAL */ -#line 1694 "MachineIndependent/glslang.y" + case 213: /* storage_qualifier: NONTEMPORAL */ +#line 1720 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nontemporal = true; } -#line 7690 "MachineIndependent/glslang_tab.cpp" +#line 8143 "MachineIndependent/glslang_tab.cpp" break; - case 209: /* storage_qualifier: SUBROUTINE */ -#line 1698 "MachineIndependent/glslang.y" + case 214: /* storage_qualifier: SUBROUTINE */ +#line 1724 "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 7701 "MachineIndependent/glslang_tab.cpp" +#line 8154 "MachineIndependent/glslang_tab.cpp" break; - case 210: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ -#line 1704 "MachineIndependent/glslang.y" + case 215: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ +#line 1730 "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 7712 "MachineIndependent/glslang_tab.cpp" +#line 8165 "MachineIndependent/glslang_tab.cpp" break; - case 211: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT */ -#line 1710 "MachineIndependent/glslang.y" + case 216: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT */ +#line 1736 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskPayloadSharedEXT"); @@ -7720,38 +8173,38 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqtaskPayloadSharedEXT; } -#line 7724 "MachineIndependent/glslang_tab.cpp" +#line 8177 "MachineIndependent/glslang_tab.cpp" break; - case 212: /* non_uniform_qualifier: NONUNIFORM */ -#line 1720 "MachineIndependent/glslang.y" + case 217: /* non_uniform_qualifier: NONUNIFORM */ +#line 1746 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 7733 "MachineIndependent/glslang_tab.cpp" +#line 8186 "MachineIndependent/glslang_tab.cpp" break; - case 213: /* type_name_list: IDENTIFIER */ -#line 1727 "MachineIndependent/glslang.y" + case 218: /* type_name_list: IDENTIFIER */ +#line 1753 "MachineIndependent/glslang.y" { // TODO } -#line 7741 "MachineIndependent/glslang_tab.cpp" +#line 8194 "MachineIndependent/glslang_tab.cpp" break; - case 214: /* type_name_list: type_name_list COMMA IDENTIFIER */ -#line 1730 "MachineIndependent/glslang.y" + case 219: /* type_name_list: type_name_list COMMA IDENTIFIER */ +#line 1756 "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 7751 "MachineIndependent/glslang_tab.cpp" +#line 8204 "MachineIndependent/glslang_tab.cpp" break; - case 215: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ -#line 1738 "MachineIndependent/glslang.y" + case 220: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ +#line 1764 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); @@ -7759,11 +8212,11 @@ yyreduce: parseContext.typeParametersCheck((yyvsp[-1].interm.type).loc, (yyval.interm.type)); } -#line 7763 "MachineIndependent/glslang_tab.cpp" +#line 8216 "MachineIndependent/glslang_tab.cpp" break; - case 216: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ -#line 1745 "MachineIndependent/glslang.y" + case 221: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ +#line 1771 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); @@ -7772,21 +8225,21 @@ yyreduce: (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; parseContext.typeParametersCheck((yyvsp[-2].interm.type).loc, (yyval.interm.type)); } -#line 7776 "MachineIndependent/glslang_tab.cpp" +#line 8229 "MachineIndependent/glslang_tab.cpp" break; - case 217: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ -#line 1756 "MachineIndependent/glslang.y" + case 222: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ +#line 1782 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 7786 "MachineIndependent/glslang_tab.cpp" +#line 8239 "MachineIndependent/glslang_tab.cpp" break; - case 218: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1761 "MachineIndependent/glslang.y" + case 223: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1787 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -7795,20 +8248,20 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 7799 "MachineIndependent/glslang_tab.cpp" +#line 8252 "MachineIndependent/glslang_tab.cpp" break; - case 219: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ -#line 1769 "MachineIndependent/glslang.y" + case 224: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ +#line 1795 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 7808 "MachineIndependent/glslang_tab.cpp" +#line 8261 "MachineIndependent/glslang_tab.cpp" break; - case 220: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1773 "MachineIndependent/glslang.y" + case 225: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1799 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); @@ -7816,46 +8269,46 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 7820 "MachineIndependent/glslang_tab.cpp" +#line 8273 "MachineIndependent/glslang_tab.cpp" break; - case 221: /* type_parameter_specifier_opt: type_parameter_specifier */ -#line 1783 "MachineIndependent/glslang.y" + case 226: /* type_parameter_specifier_opt: type_parameter_specifier */ +#line 1809 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 7828 "MachineIndependent/glslang_tab.cpp" +#line 8281 "MachineIndependent/glslang_tab.cpp" break; - case 222: /* type_parameter_specifier_opt: %empty */ -#line 1786 "MachineIndependent/glslang.y" + case 227: /* type_parameter_specifier_opt: %empty */ +#line 1812 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = 0; } -#line 7836 "MachineIndependent/glslang_tab.cpp" +#line 8289 "MachineIndependent/glslang_tab.cpp" break; - case 223: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ -#line 1792 "MachineIndependent/glslang.y" + case 228: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ +#line 1818 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 7844 "MachineIndependent/glslang_tab.cpp" +#line 8297 "MachineIndependent/glslang_tab.cpp" break; - case 224: /* type_parameter_specifier_list: type_specifier */ -#line 1798 "MachineIndependent/glslang.y" + case 229: /* type_parameter_specifier_list: type_specifier */ +#line 1824 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = new TTypeParameters; (yyval.interm.typeParameters)->arraySizes = new TArraySizes; (yyval.interm.typeParameters)->spirvType = (yyvsp[0].interm.type).spirvType; (yyval.interm.typeParameters)->basicType = (yyvsp[0].interm.type).basicType; } -#line 7855 "MachineIndependent/glslang_tab.cpp" +#line 8308 "MachineIndependent/glslang_tab.cpp" break; - case 225: /* type_parameter_specifier_list: unary_expression */ -#line 1804 "MachineIndependent/glslang.y" + case 230: /* type_parameter_specifier_list: unary_expression */ +#line 1830 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = new TTypeParameters; (yyval.interm.typeParameters)->arraySizes = new TArraySizes; @@ -7864,11 +8317,11 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true); (yyval.interm.typeParameters)->arraySizes->addInnerSize(size); } -#line 7868 "MachineIndependent/glslang_tab.cpp" +#line 8321 "MachineIndependent/glslang_tab.cpp" break; - case 226: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ -#line 1812 "MachineIndependent/glslang.y" + case 231: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ +#line 1838 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); @@ -7876,300 +8329,300 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true); (yyval.interm.typeParameters)->arraySizes->addInnerSize(size); } -#line 7880 "MachineIndependent/glslang_tab.cpp" +#line 8333 "MachineIndependent/glslang_tab.cpp" break; - case 227: /* type_specifier_nonarray: VOID */ -#line 1822 "MachineIndependent/glslang.y" + case 232: /* type_specifier_nonarray: VOID */ +#line 1848 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 7889 "MachineIndependent/glslang_tab.cpp" +#line 8342 "MachineIndependent/glslang_tab.cpp" break; - case 228: /* type_specifier_nonarray: FLOAT */ -#line 1826 "MachineIndependent/glslang.y" + case 233: /* type_specifier_nonarray: FLOAT */ +#line 1852 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7898 "MachineIndependent/glslang_tab.cpp" +#line 8351 "MachineIndependent/glslang_tab.cpp" break; - case 229: /* type_specifier_nonarray: INT */ -#line 1830 "MachineIndependent/glslang.y" + case 234: /* type_specifier_nonarray: INT */ +#line 1856 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7907 "MachineIndependent/glslang_tab.cpp" +#line 8360 "MachineIndependent/glslang_tab.cpp" break; - case 230: /* type_specifier_nonarray: UINT */ -#line 1834 "MachineIndependent/glslang.y" + case 235: /* type_specifier_nonarray: UINT */ +#line 1860 "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 7917 "MachineIndependent/glslang_tab.cpp" +#line 8370 "MachineIndependent/glslang_tab.cpp" break; - case 231: /* type_specifier_nonarray: BOOL */ -#line 1839 "MachineIndependent/glslang.y" + case 236: /* type_specifier_nonarray: BOOL */ +#line 1865 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 7926 "MachineIndependent/glslang_tab.cpp" +#line 8379 "MachineIndependent/glslang_tab.cpp" break; - case 232: /* type_specifier_nonarray: VEC2 */ -#line 1843 "MachineIndependent/glslang.y" + case 237: /* type_specifier_nonarray: VEC2 */ +#line 1869 "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 7936 "MachineIndependent/glslang_tab.cpp" +#line 8389 "MachineIndependent/glslang_tab.cpp" break; - case 233: /* type_specifier_nonarray: VEC3 */ -#line 1848 "MachineIndependent/glslang.y" + case 238: /* type_specifier_nonarray: VEC3 */ +#line 1874 "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 7946 "MachineIndependent/glslang_tab.cpp" +#line 8399 "MachineIndependent/glslang_tab.cpp" break; - case 234: /* type_specifier_nonarray: VEC4 */ -#line 1853 "MachineIndependent/glslang.y" + case 239: /* type_specifier_nonarray: VEC4 */ +#line 1879 "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 7956 "MachineIndependent/glslang_tab.cpp" +#line 8409 "MachineIndependent/glslang_tab.cpp" break; - case 235: /* type_specifier_nonarray: BVEC2 */ -#line 1858 "MachineIndependent/glslang.y" + case 240: /* type_specifier_nonarray: BVEC2 */ +#line 1884 "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 7966 "MachineIndependent/glslang_tab.cpp" +#line 8419 "MachineIndependent/glslang_tab.cpp" break; - case 236: /* type_specifier_nonarray: BVEC3 */ -#line 1863 "MachineIndependent/glslang.y" + case 241: /* type_specifier_nonarray: BVEC3 */ +#line 1889 "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 7976 "MachineIndependent/glslang_tab.cpp" +#line 8429 "MachineIndependent/glslang_tab.cpp" break; - case 237: /* type_specifier_nonarray: BVEC4 */ -#line 1868 "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 7986 "MachineIndependent/glslang_tab.cpp" - break; - - case 238: /* type_specifier_nonarray: IVEC2 */ -#line 1873 "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 7996 "MachineIndependent/glslang_tab.cpp" - break; - - case 239: /* type_specifier_nonarray: IVEC3 */ -#line 1878 "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 8006 "MachineIndependent/glslang_tab.cpp" - break; - - case 240: /* type_specifier_nonarray: IVEC4 */ -#line 1883 "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 8016 "MachineIndependent/glslang_tab.cpp" - break; - - case 241: /* type_specifier_nonarray: UVEC2 */ -#line 1888 "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 8027 "MachineIndependent/glslang_tab.cpp" - break; - - case 242: /* type_specifier_nonarray: UVEC3 */ + case 242: /* type_specifier_nonarray: BVEC4 */ #line 1894 "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 8439 "MachineIndependent/glslang_tab.cpp" + break; + + case 243: /* type_specifier_nonarray: IVEC2 */ +#line 1899 "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 8449 "MachineIndependent/glslang_tab.cpp" + break; + + case 244: /* type_specifier_nonarray: IVEC3 */ +#line 1904 "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 8459 "MachineIndependent/glslang_tab.cpp" + break; + + case 245: /* type_specifier_nonarray: IVEC4 */ +#line 1909 "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 8469 "MachineIndependent/glslang_tab.cpp" + break; + + case 246: /* type_specifier_nonarray: UVEC2 */ +#line 1914 "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 8480 "MachineIndependent/glslang_tab.cpp" + break; + + case 247: /* type_specifier_nonarray: UVEC3 */ +#line 1920 "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 8038 "MachineIndependent/glslang_tab.cpp" +#line 8491 "MachineIndependent/glslang_tab.cpp" break; - case 243: /* type_specifier_nonarray: UVEC4 */ -#line 1900 "MachineIndependent/glslang.y" + case 248: /* type_specifier_nonarray: UVEC4 */ +#line 1926 "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 8049 "MachineIndependent/glslang_tab.cpp" +#line 8502 "MachineIndependent/glslang_tab.cpp" break; - case 244: /* type_specifier_nonarray: MAT2 */ -#line 1906 "MachineIndependent/glslang.y" + case 249: /* type_specifier_nonarray: MAT2 */ +#line 1932 "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 8059 "MachineIndependent/glslang_tab.cpp" +#line 8512 "MachineIndependent/glslang_tab.cpp" break; - case 245: /* type_specifier_nonarray: MAT3 */ -#line 1911 "MachineIndependent/glslang.y" + case 250: /* type_specifier_nonarray: MAT3 */ +#line 1937 "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 8069 "MachineIndependent/glslang_tab.cpp" +#line 8522 "MachineIndependent/glslang_tab.cpp" break; - case 246: /* type_specifier_nonarray: MAT4 */ -#line 1916 "MachineIndependent/glslang.y" + case 251: /* type_specifier_nonarray: MAT4 */ +#line 1942 "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 8079 "MachineIndependent/glslang_tab.cpp" +#line 8532 "MachineIndependent/glslang_tab.cpp" break; - case 247: /* type_specifier_nonarray: MAT2X2 */ -#line 1921 "MachineIndependent/glslang.y" + case 252: /* type_specifier_nonarray: MAT2X2 */ +#line 1947 "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 8089 "MachineIndependent/glslang_tab.cpp" +#line 8542 "MachineIndependent/glslang_tab.cpp" break; - case 248: /* type_specifier_nonarray: MAT2X3 */ -#line 1926 "MachineIndependent/glslang.y" + case 253: /* type_specifier_nonarray: MAT2X3 */ +#line 1952 "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 8099 "MachineIndependent/glslang_tab.cpp" +#line 8552 "MachineIndependent/glslang_tab.cpp" break; - case 249: /* type_specifier_nonarray: MAT2X4 */ -#line 1931 "MachineIndependent/glslang.y" + case 254: /* type_specifier_nonarray: MAT2X4 */ +#line 1957 "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 8109 "MachineIndependent/glslang_tab.cpp" +#line 8562 "MachineIndependent/glslang_tab.cpp" break; - case 250: /* type_specifier_nonarray: MAT3X2 */ -#line 1936 "MachineIndependent/glslang.y" + case 255: /* type_specifier_nonarray: MAT3X2 */ +#line 1962 "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 8119 "MachineIndependent/glslang_tab.cpp" +#line 8572 "MachineIndependent/glslang_tab.cpp" break; - case 251: /* type_specifier_nonarray: MAT3X3 */ -#line 1941 "MachineIndependent/glslang.y" + case 256: /* type_specifier_nonarray: MAT3X3 */ +#line 1967 "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 8129 "MachineIndependent/glslang_tab.cpp" +#line 8582 "MachineIndependent/glslang_tab.cpp" break; - case 252: /* type_specifier_nonarray: MAT3X4 */ -#line 1946 "MachineIndependent/glslang.y" + case 257: /* type_specifier_nonarray: MAT3X4 */ +#line 1972 "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 8139 "MachineIndependent/glslang_tab.cpp" +#line 8592 "MachineIndependent/glslang_tab.cpp" break; - case 253: /* type_specifier_nonarray: MAT4X2 */ -#line 1951 "MachineIndependent/glslang.y" + case 258: /* type_specifier_nonarray: MAT4X2 */ +#line 1977 "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 8149 "MachineIndependent/glslang_tab.cpp" +#line 8602 "MachineIndependent/glslang_tab.cpp" break; - case 254: /* type_specifier_nonarray: MAT4X3 */ -#line 1956 "MachineIndependent/glslang.y" + case 259: /* type_specifier_nonarray: MAT4X3 */ +#line 1982 "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 8159 "MachineIndependent/glslang_tab.cpp" +#line 8612 "MachineIndependent/glslang_tab.cpp" break; - case 255: /* type_specifier_nonarray: MAT4X4 */ -#line 1961 "MachineIndependent/glslang.y" + case 260: /* type_specifier_nonarray: MAT4X4 */ +#line 1987 "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 8169 "MachineIndependent/glslang_tab.cpp" +#line 8622 "MachineIndependent/glslang_tab.cpp" break; - case 256: /* type_specifier_nonarray: DOUBLE */ -#line 1966 "MachineIndependent/glslang.y" + case 261: /* type_specifier_nonarray: DOUBLE */ +#line 1992 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8177,151 +8630,201 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 8181 "MachineIndependent/glslang_tab.cpp" +#line 8634 "MachineIndependent/glslang_tab.cpp" break; - case 257: /* type_specifier_nonarray: BFLOAT16_T */ -#line 1973 "MachineIndependent/glslang.y" + case 262: /* type_specifier_nonarray: BFLOAT16_T */ +#line 1999 "MachineIndependent/glslang.y" { parseContext.bfloat16ScalarVectorCheck((yyvsp[0].lex).loc, "bfloat16_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBFloat16; } -#line 8191 "MachineIndependent/glslang_tab.cpp" +#line 8644 "MachineIndependent/glslang_tab.cpp" break; - case 258: /* type_specifier_nonarray: FLOATE5M2_T */ -#line 1978 "MachineIndependent/glslang.y" + case 263: /* type_specifier_nonarray: FLOATE5M2_T */ +#line 2004 "MachineIndependent/glslang.y" { parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "floate5m2_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloatE5M2; } -#line 8201 "MachineIndependent/glslang_tab.cpp" +#line 8654 "MachineIndependent/glslang_tab.cpp" break; - case 259: /* type_specifier_nonarray: FLOATE4M3_T */ -#line 1983 "MachineIndependent/glslang.y" + case 264: /* type_specifier_nonarray: FLOATE4M3_T */ +#line 2009 "MachineIndependent/glslang.y" { parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "floate4m3_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloatE4M3; } -#line 8211 "MachineIndependent/glslang_tab.cpp" +#line 8664 "MachineIndependent/glslang_tab.cpp" break; - case 260: /* type_specifier_nonarray: FLOAT16_T */ -#line 1988 "MachineIndependent/glslang.y" + case 265: /* type_specifier_nonarray: FLOATE2M1_T */ +#line 2014 "MachineIndependent/glslang.y" + { + parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "floate2m1_t", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE2M1; + } +#line 8674 "MachineIndependent/glslang_tab.cpp" + break; + + case 266: /* type_specifier_nonarray: FLOATE3M2_T */ +#line 2019 "MachineIndependent/glslang.y" + { + parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "floate3m2_t", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE3M2; + } +#line 8684 "MachineIndependent/glslang_tab.cpp" + break; + + case 267: /* type_specifier_nonarray: FLOATE2M3_T */ +#line 2024 "MachineIndependent/glslang.y" + { + parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "floate2m3_t", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE2M3; + } +#line 8694 "MachineIndependent/glslang_tab.cpp" + break; + + case 268: /* type_specifier_nonarray: FLOATUE8M0_T */ +#line 2029 "MachineIndependent/glslang.y" + { + parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "floatue8m0_t", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatUE8M0; + } +#line 8704 "MachineIndependent/glslang_tab.cpp" + break; + + case 269: /* type_specifier_nonarray: FLOATMXINT8_T */ +#line 2034 "MachineIndependent/glslang.y" + { + parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "floatmxint8_t", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatMXINT8; + } +#line 8714 "MachineIndependent/glslang_tab.cpp" + break; + + case 270: /* type_specifier_nonarray: FLOAT16_T */ +#line 2039 "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 8221 "MachineIndependent/glslang_tab.cpp" +#line 8724 "MachineIndependent/glslang_tab.cpp" break; - case 261: /* type_specifier_nonarray: FLOAT32_T */ -#line 1993 "MachineIndependent/glslang.y" + case 271: /* type_specifier_nonarray: FLOAT32_T */ +#line 2044 "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 8231 "MachineIndependent/glslang_tab.cpp" +#line 8734 "MachineIndependent/glslang_tab.cpp" break; - case 262: /* type_specifier_nonarray: FLOAT64_T */ -#line 1998 "MachineIndependent/glslang.y" + case 272: /* type_specifier_nonarray: FLOAT64_T */ +#line 2049 "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 8241 "MachineIndependent/glslang_tab.cpp" +#line 8744 "MachineIndependent/glslang_tab.cpp" break; - case 263: /* type_specifier_nonarray: INT8_T */ -#line 2003 "MachineIndependent/glslang.y" + case 273: /* type_specifier_nonarray: INT8_T */ +#line 2054 "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 8251 "MachineIndependent/glslang_tab.cpp" +#line 8754 "MachineIndependent/glslang_tab.cpp" break; - case 264: /* type_specifier_nonarray: UINT8_T */ -#line 2008 "MachineIndependent/glslang.y" + case 274: /* type_specifier_nonarray: UINT8_T */ +#line 2059 "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 8261 "MachineIndependent/glslang_tab.cpp" +#line 8764 "MachineIndependent/glslang_tab.cpp" break; - case 265: /* type_specifier_nonarray: INT16_T */ -#line 2013 "MachineIndependent/glslang.y" + case 275: /* type_specifier_nonarray: INT16_T */ +#line 2064 "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 8271 "MachineIndependent/glslang_tab.cpp" +#line 8774 "MachineIndependent/glslang_tab.cpp" break; - case 266: /* type_specifier_nonarray: UINT16_T */ -#line 2018 "MachineIndependent/glslang.y" + case 276: /* type_specifier_nonarray: UINT16_T */ +#line 2069 "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 8281 "MachineIndependent/glslang_tab.cpp" +#line 8784 "MachineIndependent/glslang_tab.cpp" break; - case 267: /* type_specifier_nonarray: INT32_T */ -#line 2023 "MachineIndependent/glslang.y" + case 277: /* type_specifier_nonarray: INT32_T */ +#line 2074 "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 8291 "MachineIndependent/glslang_tab.cpp" +#line 8794 "MachineIndependent/glslang_tab.cpp" break; - case 268: /* type_specifier_nonarray: UINT32_T */ -#line 2028 "MachineIndependent/glslang.y" + case 278: /* type_specifier_nonarray: UINT32_T */ +#line 2079 "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 8301 "MachineIndependent/glslang_tab.cpp" +#line 8804 "MachineIndependent/glslang_tab.cpp" break; - case 269: /* type_specifier_nonarray: INT64_T */ -#line 2033 "MachineIndependent/glslang.y" + case 279: /* type_specifier_nonarray: INT64_T */ +#line 2084 "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 8311 "MachineIndependent/glslang_tab.cpp" +#line 8814 "MachineIndependent/glslang_tab.cpp" break; - case 270: /* type_specifier_nonarray: UINT64_T */ -#line 2038 "MachineIndependent/glslang.y" + case 280: /* type_specifier_nonarray: UINT64_T */ +#line 2089 "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 8321 "MachineIndependent/glslang_tab.cpp" +#line 8824 "MachineIndependent/glslang_tab.cpp" break; - case 271: /* type_specifier_nonarray: DVEC2 */ -#line 2043 "MachineIndependent/glslang.y" + case 281: /* type_specifier_nonarray: DVEC2 */ +#line 2094 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8330,11 +8833,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 8334 "MachineIndependent/glslang_tab.cpp" +#line 8837 "MachineIndependent/glslang_tab.cpp" break; - case 272: /* type_specifier_nonarray: DVEC3 */ -#line 2051 "MachineIndependent/glslang.y" + case 282: /* type_specifier_nonarray: DVEC3 */ +#line 2102 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8343,11 +8846,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 8347 "MachineIndependent/glslang_tab.cpp" +#line 8850 "MachineIndependent/glslang_tab.cpp" break; - case 273: /* type_specifier_nonarray: DVEC4 */ -#line 2059 "MachineIndependent/glslang.y" + case 283: /* type_specifier_nonarray: DVEC4 */ +#line 2110 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8356,525 +8859,690 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 8360 "MachineIndependent/glslang_tab.cpp" +#line 8863 "MachineIndependent/glslang_tab.cpp" break; - case 274: /* type_specifier_nonarray: BF16VEC2 */ -#line 2067 "MachineIndependent/glslang.y" + case 284: /* type_specifier_nonarray: BF16VEC2 */ +#line 2118 "MachineIndependent/glslang.y" { parseContext.bfloat16ScalarVectorCheck((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 = EbtBFloat16; (yyval.interm.type).setVector(2); } -#line 8371 "MachineIndependent/glslang_tab.cpp" - break; - - case 275: /* type_specifier_nonarray: BF16VEC3 */ -#line 2073 "MachineIndependent/glslang.y" - { - parseContext.bfloat16ScalarVectorCheck((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 = EbtBFloat16; - (yyval.interm.type).setVector(3); - } -#line 8382 "MachineIndependent/glslang_tab.cpp" - break; - - case 276: /* type_specifier_nonarray: BF16VEC4 */ -#line 2079 "MachineIndependent/glslang.y" - { - parseContext.bfloat16ScalarVectorCheck((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 = EbtBFloat16; - (yyval.interm.type).setVector(4); - } -#line 8393 "MachineIndependent/glslang_tab.cpp" - break; - - case 277: /* type_specifier_nonarray: FE5M2VEC2 */ -#line 2085 "MachineIndependent/glslang.y" - { - parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel()); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtFloatE5M2; - (yyval.interm.type).setVector(2); - } -#line 8404 "MachineIndependent/glslang_tab.cpp" - break; - - case 278: /* type_specifier_nonarray: FE5M2VEC3 */ -#line 2091 "MachineIndependent/glslang.y" - { - parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel()); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtFloatE5M2; - (yyval.interm.type).setVector(3); - } -#line 8415 "MachineIndependent/glslang_tab.cpp" - break; - - case 279: /* type_specifier_nonarray: FE5M2VEC4 */ -#line 2097 "MachineIndependent/glslang.y" - { - parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel()); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtFloatE5M2; - (yyval.interm.type).setVector(4); - } -#line 8426 "MachineIndependent/glslang_tab.cpp" - break; - - case 280: /* type_specifier_nonarray: FE4M3VEC2 */ -#line 2103 "MachineIndependent/glslang.y" - { - parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel()); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtFloatE4M3; - (yyval.interm.type).setVector(2); - } -#line 8437 "MachineIndependent/glslang_tab.cpp" - break; - - case 281: /* type_specifier_nonarray: FE4M3VEC3 */ -#line 2109 "MachineIndependent/glslang.y" - { - parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel()); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtFloatE4M3; - (yyval.interm.type).setVector(3); - } -#line 8448 "MachineIndependent/glslang_tab.cpp" - break; - - case 282: /* type_specifier_nonarray: FE4M3VEC4 */ -#line 2115 "MachineIndependent/glslang.y" - { - parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel()); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtFloatE4M3; - (yyval.interm.type).setVector(4); - } -#line 8459 "MachineIndependent/glslang_tab.cpp" - break; - - case 283: /* type_specifier_nonarray: F16VEC2 */ -#line 2121 "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 8470 "MachineIndependent/glslang_tab.cpp" - break; - - case 284: /* type_specifier_nonarray: F16VEC3 */ -#line 2127 "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 8481 "MachineIndependent/glslang_tab.cpp" - break; - - case 285: /* type_specifier_nonarray: F16VEC4 */ -#line 2133 "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 8492 "MachineIndependent/glslang_tab.cpp" - break; - - case 286: /* type_specifier_nonarray: F32VEC2 */ -#line 2139 "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 8503 "MachineIndependent/glslang_tab.cpp" - break; - - case 287: /* type_specifier_nonarray: F32VEC3 */ -#line 2145 "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 8514 "MachineIndependent/glslang_tab.cpp" - break; - - case 288: /* type_specifier_nonarray: F32VEC4 */ -#line 2151 "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 8525 "MachineIndependent/glslang_tab.cpp" - break; - - case 289: /* type_specifier_nonarray: F64VEC2 */ -#line 2157 "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 8536 "MachineIndependent/glslang_tab.cpp" - break; - - case 290: /* type_specifier_nonarray: F64VEC3 */ -#line 2163 "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 8547 "MachineIndependent/glslang_tab.cpp" - break; - - case 291: /* type_specifier_nonarray: F64VEC4 */ -#line 2169 "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 8558 "MachineIndependent/glslang_tab.cpp" - break; - - case 292: /* type_specifier_nonarray: I8VEC2 */ -#line 2175 "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 8569 "MachineIndependent/glslang_tab.cpp" - break; - - case 293: /* type_specifier_nonarray: I8VEC3 */ -#line 2181 "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 8580 "MachineIndependent/glslang_tab.cpp" - break; - - case 294: /* type_specifier_nonarray: I8VEC4 */ -#line 2187 "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 8591 "MachineIndependent/glslang_tab.cpp" - break; - - case 295: /* type_specifier_nonarray: I16VEC2 */ -#line 2193 "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 8602 "MachineIndependent/glslang_tab.cpp" - break; - - case 296: /* type_specifier_nonarray: I16VEC3 */ -#line 2199 "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 8613 "MachineIndependent/glslang_tab.cpp" - break; - - case 297: /* type_specifier_nonarray: I16VEC4 */ -#line 2205 "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 8624 "MachineIndependent/glslang_tab.cpp" - break; - - case 298: /* type_specifier_nonarray: I32VEC2 */ -#line 2211 "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 8635 "MachineIndependent/glslang_tab.cpp" - break; - - case 299: /* type_specifier_nonarray: I32VEC3 */ -#line 2217 "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 8646 "MachineIndependent/glslang_tab.cpp" - break; - - case 300: /* type_specifier_nonarray: I32VEC4 */ -#line 2223 "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 8657 "MachineIndependent/glslang_tab.cpp" - break; - - case 301: /* type_specifier_nonarray: I64VEC2 */ -#line 2229 "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 8668 "MachineIndependent/glslang_tab.cpp" - break; - - case 302: /* type_specifier_nonarray: I64VEC3 */ -#line 2235 "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 8679 "MachineIndependent/glslang_tab.cpp" - break; - - case 303: /* type_specifier_nonarray: I64VEC4 */ -#line 2241 "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 8690 "MachineIndependent/glslang_tab.cpp" - break; - - case 304: /* type_specifier_nonarray: U8VEC2 */ -#line 2247 "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 8701 "MachineIndependent/glslang_tab.cpp" - break; - - case 305: /* type_specifier_nonarray: U8VEC3 */ -#line 2253 "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 8712 "MachineIndependent/glslang_tab.cpp" - break; - - case 306: /* type_specifier_nonarray: U8VEC4 */ -#line 2259 "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 8723 "MachineIndependent/glslang_tab.cpp" - break; - - case 307: /* type_specifier_nonarray: U16VEC2 */ -#line 2265 "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 8734 "MachineIndependent/glslang_tab.cpp" - break; - - case 308: /* type_specifier_nonarray: U16VEC3 */ -#line 2271 "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 8745 "MachineIndependent/glslang_tab.cpp" - break; - - case 309: /* type_specifier_nonarray: U16VEC4 */ -#line 2277 "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 8756 "MachineIndependent/glslang_tab.cpp" - break; - - case 310: /* type_specifier_nonarray: U32VEC2 */ -#line 2283 "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 8767 "MachineIndependent/glslang_tab.cpp" - break; - - case 311: /* type_specifier_nonarray: U32VEC3 */ -#line 2289 "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 8778 "MachineIndependent/glslang_tab.cpp" - break; - - case 312: /* type_specifier_nonarray: U32VEC4 */ -#line 2295 "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 8789 "MachineIndependent/glslang_tab.cpp" - break; - - case 313: /* type_specifier_nonarray: U64VEC2 */ -#line 2301 "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 8800 "MachineIndependent/glslang_tab.cpp" - break; - - case 314: /* type_specifier_nonarray: U64VEC3 */ -#line 2307 "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 8811 "MachineIndependent/glslang_tab.cpp" - break; - - case 315: /* type_specifier_nonarray: U64VEC4 */ -#line 2313 "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 8822 "MachineIndependent/glslang_tab.cpp" - break; - - case 316: /* type_specifier_nonarray: DMAT2 */ -#line 2319 "MachineIndependent/glslang.y" - { - parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtDouble; - (yyval.interm.type).setMatrix(2, 2); - } -#line 8835 "MachineIndependent/glslang_tab.cpp" - break; - - case 317: /* type_specifier_nonarray: DMAT3 */ -#line 2327 "MachineIndependent/glslang.y" - { - parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtDouble; - (yyval.interm.type).setMatrix(3, 3); - } -#line 8848 "MachineIndependent/glslang_tab.cpp" - break; - - case 318: /* type_specifier_nonarray: DMAT4 */ -#line 2335 "MachineIndependent/glslang.y" - { - parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtDouble; - (yyval.interm.type).setMatrix(4, 4); - } -#line 8861 "MachineIndependent/glslang_tab.cpp" - break; - - case 319: /* type_specifier_nonarray: DMAT2X2 */ -#line 2343 "MachineIndependent/glslang.y" - { - parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtDouble; - (yyval.interm.type).setMatrix(2, 2); - } #line 8874 "MachineIndependent/glslang_tab.cpp" break; - case 320: /* type_specifier_nonarray: DMAT2X3 */ -#line 2351 "MachineIndependent/glslang.y" + case 285: /* type_specifier_nonarray: BF16VEC3 */ +#line 2124 "MachineIndependent/glslang.y" + { + parseContext.bfloat16ScalarVectorCheck((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 = EbtBFloat16; + (yyval.interm.type).setVector(3); + } +#line 8885 "MachineIndependent/glslang_tab.cpp" + break; + + case 286: /* type_specifier_nonarray: BF16VEC4 */ +#line 2130 "MachineIndependent/glslang.y" + { + parseContext.bfloat16ScalarVectorCheck((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 = EbtBFloat16; + (yyval.interm.type).setVector(4); + } +#line 8896 "MachineIndependent/glslang_tab.cpp" + break; + + case 287: /* type_specifier_nonarray: FE5M2VEC2 */ +#line 2136 "MachineIndependent/glslang.y" + { + parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE5M2; + (yyval.interm.type).setVector(2); + } +#line 8907 "MachineIndependent/glslang_tab.cpp" + break; + + case 288: /* type_specifier_nonarray: FE5M2VEC3 */ +#line 2142 "MachineIndependent/glslang.y" + { + parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE5M2; + (yyval.interm.type).setVector(3); + } +#line 8918 "MachineIndependent/glslang_tab.cpp" + break; + + case 289: /* type_specifier_nonarray: FE5M2VEC4 */ +#line 2148 "MachineIndependent/glslang.y" + { + parseContext.floate5m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe5m2 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE5M2; + (yyval.interm.type).setVector(4); + } +#line 8929 "MachineIndependent/glslang_tab.cpp" + break; + + case 290: /* type_specifier_nonarray: FE4M3VEC2 */ +#line 2154 "MachineIndependent/glslang.y" + { + parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE4M3; + (yyval.interm.type).setVector(2); + } +#line 8940 "MachineIndependent/glslang_tab.cpp" + break; + + case 291: /* type_specifier_nonarray: FE4M3VEC3 */ +#line 2160 "MachineIndependent/glslang.y" + { + parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE4M3; + (yyval.interm.type).setVector(3); + } +#line 8951 "MachineIndependent/glslang_tab.cpp" + break; + + case 292: /* type_specifier_nonarray: FE4M3VEC4 */ +#line 2166 "MachineIndependent/glslang.y" + { + parseContext.floate4m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe4m3 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE4M3; + (yyval.interm.type).setVector(4); + } +#line 8962 "MachineIndependent/glslang_tab.cpp" + break; + + case 293: /* type_specifier_nonarray: FE2M1VEC2 */ +#line 2172 "MachineIndependent/glslang.y" + { + parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE2M1; + (yyval.interm.type).setVector(2); + } +#line 8973 "MachineIndependent/glslang_tab.cpp" + break; + + case 294: /* type_specifier_nonarray: FE2M1VEC3 */ +#line 2178 "MachineIndependent/glslang.y" + { + parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE2M1; + (yyval.interm.type).setVector(3); + } +#line 8984 "MachineIndependent/glslang_tab.cpp" + break; + + case 295: /* type_specifier_nonarray: FE2M1VEC4 */ +#line 2184 "MachineIndependent/glslang.y" + { + parseContext.floate2m1ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m1 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE2M1; + (yyval.interm.type).setVector(4); + } +#line 8995 "MachineIndependent/glslang_tab.cpp" + break; + + case 296: /* type_specifier_nonarray: FE3M2VEC2 */ +#line 2190 "MachineIndependent/glslang.y" + { + parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE3M2; + (yyval.interm.type).setVector(2); + } +#line 9006 "MachineIndependent/glslang_tab.cpp" + break; + + case 297: /* type_specifier_nonarray: FE3M2VEC3 */ +#line 2196 "MachineIndependent/glslang.y" + { + parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE3M2; + (yyval.interm.type).setVector(3); + } +#line 9017 "MachineIndependent/glslang_tab.cpp" + break; + + case 298: /* type_specifier_nonarray: FE3M2VEC4 */ +#line 2202 "MachineIndependent/glslang.y" + { + parseContext.floate3m2ScalarVectorCheck((yyvsp[0].lex).loc, "fe3m2 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE3M2; + (yyval.interm.type).setVector(4); + } +#line 9028 "MachineIndependent/glslang_tab.cpp" + break; + + case 299: /* type_specifier_nonarray: FE2M3VEC2 */ +#line 2208 "MachineIndependent/glslang.y" + { + parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE2M3; + (yyval.interm.type).setVector(2); + } +#line 9039 "MachineIndependent/glslang_tab.cpp" + break; + + case 300: /* type_specifier_nonarray: FE2M3VEC3 */ +#line 2214 "MachineIndependent/glslang.y" + { + parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE2M3; + (yyval.interm.type).setVector(3); + } +#line 9050 "MachineIndependent/glslang_tab.cpp" + break; + + case 301: /* type_specifier_nonarray: FE2M3VEC4 */ +#line 2220 "MachineIndependent/glslang.y" + { + parseContext.floate2m3ScalarVectorCheck((yyvsp[0].lex).loc, "fe2m3 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatE2M3; + (yyval.interm.type).setVector(4); + } +#line 9061 "MachineIndependent/glslang_tab.cpp" + break; + + case 302: /* type_specifier_nonarray: FUE8M0VEC2 */ +#line 2226 "MachineIndependent/glslang.y" + { + parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatUE8M0; + (yyval.interm.type).setVector(2); + } +#line 9072 "MachineIndependent/glslang_tab.cpp" + break; + + case 303: /* type_specifier_nonarray: FUE8M0VEC3 */ +#line 2232 "MachineIndependent/glslang.y" + { + parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatUE8M0; + (yyval.interm.type).setVector(3); + } +#line 9083 "MachineIndependent/glslang_tab.cpp" + break; + + case 304: /* type_specifier_nonarray: FUE8M0VEC4 */ +#line 2238 "MachineIndependent/glslang.y" + { + parseContext.floatue8m0ScalarVectorCheck((yyvsp[0].lex).loc, "fue8m0 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatUE8M0; + (yyval.interm.type).setVector(4); + } +#line 9094 "MachineIndependent/glslang_tab.cpp" + break; + + case 305: /* type_specifier_nonarray: FMXINT8VEC2 */ +#line 2244 "MachineIndependent/glslang.y" + { + parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatMXINT8; + (yyval.interm.type).setVector(2); + } +#line 9105 "MachineIndependent/glslang_tab.cpp" + break; + + case 306: /* type_specifier_nonarray: FMXINT8VEC3 */ +#line 2250 "MachineIndependent/glslang.y" + { + parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatMXINT8; + (yyval.interm.type).setVector(3); + } +#line 9116 "MachineIndependent/glslang_tab.cpp" + break; + + case 307: /* type_specifier_nonarray: FMXINT8VEC4 */ +#line 2256 "MachineIndependent/glslang.y" + { + parseContext.floatmxint8ScalarVectorCheck((yyvsp[0].lex).loc, "fmxint8 vector", parseContext.symbolTable.atBuiltInLevel()); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtFloatMXINT8; + (yyval.interm.type).setVector(4); + } +#line 9127 "MachineIndependent/glslang_tab.cpp" + break; + + case 308: /* type_specifier_nonarray: F16VEC2 */ +#line 2262 "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 9138 "MachineIndependent/glslang_tab.cpp" + break; + + case 309: /* type_specifier_nonarray: F16VEC3 */ +#line 2268 "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 9149 "MachineIndependent/glslang_tab.cpp" + break; + + case 310: /* type_specifier_nonarray: F16VEC4 */ +#line 2274 "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 9160 "MachineIndependent/glslang_tab.cpp" + break; + + case 311: /* type_specifier_nonarray: F32VEC2 */ +#line 2280 "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 9171 "MachineIndependent/glslang_tab.cpp" + break; + + case 312: /* type_specifier_nonarray: F32VEC3 */ +#line 2286 "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 9182 "MachineIndependent/glslang_tab.cpp" + break; + + case 313: /* type_specifier_nonarray: F32VEC4 */ +#line 2292 "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 9193 "MachineIndependent/glslang_tab.cpp" + break; + + case 314: /* type_specifier_nonarray: F64VEC2 */ +#line 2298 "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 9204 "MachineIndependent/glslang_tab.cpp" + break; + + case 315: /* type_specifier_nonarray: F64VEC3 */ +#line 2304 "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 9215 "MachineIndependent/glslang_tab.cpp" + break; + + case 316: /* type_specifier_nonarray: F64VEC4 */ +#line 2310 "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 9226 "MachineIndependent/glslang_tab.cpp" + break; + + case 317: /* type_specifier_nonarray: I8VEC2 */ +#line 2316 "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 9237 "MachineIndependent/glslang_tab.cpp" + break; + + case 318: /* type_specifier_nonarray: I8VEC3 */ +#line 2322 "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 9248 "MachineIndependent/glslang_tab.cpp" + break; + + case 319: /* type_specifier_nonarray: I8VEC4 */ +#line 2328 "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 9259 "MachineIndependent/glslang_tab.cpp" + break; + + case 320: /* type_specifier_nonarray: I16VEC2 */ +#line 2334 "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 9270 "MachineIndependent/glslang_tab.cpp" + break; + + case 321: /* type_specifier_nonarray: I16VEC3 */ +#line 2340 "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 9281 "MachineIndependent/glslang_tab.cpp" + break; + + case 322: /* type_specifier_nonarray: I16VEC4 */ +#line 2346 "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 9292 "MachineIndependent/glslang_tab.cpp" + break; + + case 323: /* type_specifier_nonarray: I32VEC2 */ +#line 2352 "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 9303 "MachineIndependent/glslang_tab.cpp" + break; + + case 324: /* type_specifier_nonarray: I32VEC3 */ +#line 2358 "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 9314 "MachineIndependent/glslang_tab.cpp" + break; + + case 325: /* type_specifier_nonarray: I32VEC4 */ +#line 2364 "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 9325 "MachineIndependent/glslang_tab.cpp" + break; + + case 326: /* type_specifier_nonarray: I64VEC2 */ +#line 2370 "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 9336 "MachineIndependent/glslang_tab.cpp" + break; + + case 327: /* type_specifier_nonarray: I64VEC3 */ +#line 2376 "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 9347 "MachineIndependent/glslang_tab.cpp" + break; + + case 328: /* type_specifier_nonarray: I64VEC4 */ +#line 2382 "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 9358 "MachineIndependent/glslang_tab.cpp" + break; + + case 329: /* type_specifier_nonarray: U8VEC2 */ +#line 2388 "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 9369 "MachineIndependent/glslang_tab.cpp" + break; + + case 330: /* type_specifier_nonarray: U8VEC3 */ +#line 2394 "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 9380 "MachineIndependent/glslang_tab.cpp" + break; + + case 331: /* type_specifier_nonarray: U8VEC4 */ +#line 2400 "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 9391 "MachineIndependent/glslang_tab.cpp" + break; + + case 332: /* type_specifier_nonarray: U16VEC2 */ +#line 2406 "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 9402 "MachineIndependent/glslang_tab.cpp" + break; + + case 333: /* type_specifier_nonarray: U16VEC3 */ +#line 2412 "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 9413 "MachineIndependent/glslang_tab.cpp" + break; + + case 334: /* type_specifier_nonarray: U16VEC4 */ +#line 2418 "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 9424 "MachineIndependent/glslang_tab.cpp" + break; + + case 335: /* type_specifier_nonarray: U32VEC2 */ +#line 2424 "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 9435 "MachineIndependent/glslang_tab.cpp" + break; + + case 336: /* type_specifier_nonarray: U32VEC3 */ +#line 2430 "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 9446 "MachineIndependent/glslang_tab.cpp" + break; + + case 337: /* type_specifier_nonarray: U32VEC4 */ +#line 2436 "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 9457 "MachineIndependent/glslang_tab.cpp" + break; + + case 338: /* type_specifier_nonarray: U64VEC2 */ +#line 2442 "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 9468 "MachineIndependent/glslang_tab.cpp" + break; + + case 339: /* type_specifier_nonarray: U64VEC3 */ +#line 2448 "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 9479 "MachineIndependent/glslang_tab.cpp" + break; + + case 340: /* type_specifier_nonarray: U64VEC4 */ +#line 2454 "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 9490 "MachineIndependent/glslang_tab.cpp" + break; + + case 341: /* type_specifier_nonarray: DMAT2 */ +#line 2460 "MachineIndependent/glslang.y" + { + parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); + if (! parseContext.symbolTable.atBuiltInLevel()) + parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(2, 2); + } +#line 9503 "MachineIndependent/glslang_tab.cpp" + break; + + case 342: /* type_specifier_nonarray: DMAT3 */ +#line 2468 "MachineIndependent/glslang.y" + { + parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); + if (! parseContext.symbolTable.atBuiltInLevel()) + parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(3, 3); + } +#line 9516 "MachineIndependent/glslang_tab.cpp" + break; + + case 343: /* type_specifier_nonarray: DMAT4 */ +#line 2476 "MachineIndependent/glslang.y" + { + parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); + if (! parseContext.symbolTable.atBuiltInLevel()) + parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(4, 4); + } +#line 9529 "MachineIndependent/glslang_tab.cpp" + break; + + case 344: /* type_specifier_nonarray: DMAT2X2 */ +#line 2484 "MachineIndependent/glslang.y" + { + parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); + if (! parseContext.symbolTable.atBuiltInLevel()) + parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setMatrix(2, 2); + } +#line 9542 "MachineIndependent/glslang_tab.cpp" + break; + + case 345: /* type_specifier_nonarray: DMAT2X3 */ +#line 2492 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8883,11 +9551,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 8887 "MachineIndependent/glslang_tab.cpp" +#line 9555 "MachineIndependent/glslang_tab.cpp" break; - case 321: /* type_specifier_nonarray: DMAT2X4 */ -#line 2359 "MachineIndependent/glslang.y" + case 346: /* type_specifier_nonarray: DMAT2X4 */ +#line 2500 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8896,11 +9564,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 8900 "MachineIndependent/glslang_tab.cpp" +#line 9568 "MachineIndependent/glslang_tab.cpp" break; - case 322: /* type_specifier_nonarray: DMAT3X2 */ -#line 2367 "MachineIndependent/glslang.y" + case 347: /* type_specifier_nonarray: DMAT3X2 */ +#line 2508 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8909,11 +9577,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 8913 "MachineIndependent/glslang_tab.cpp" +#line 9581 "MachineIndependent/glslang_tab.cpp" break; - case 323: /* type_specifier_nonarray: DMAT3X3 */ -#line 2375 "MachineIndependent/glslang.y" + case 348: /* type_specifier_nonarray: DMAT3X3 */ +#line 2516 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8922,11 +9590,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8926 "MachineIndependent/glslang_tab.cpp" +#line 9594 "MachineIndependent/glslang_tab.cpp" break; - case 324: /* type_specifier_nonarray: DMAT3X4 */ -#line 2383 "MachineIndependent/glslang.y" + case 349: /* type_specifier_nonarray: DMAT3X4 */ +#line 2524 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8935,11 +9603,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 8939 "MachineIndependent/glslang_tab.cpp" +#line 9607 "MachineIndependent/glslang_tab.cpp" break; - case 325: /* type_specifier_nonarray: DMAT4X2 */ -#line 2391 "MachineIndependent/glslang.y" + case 350: /* type_specifier_nonarray: DMAT4X2 */ +#line 2532 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8948,11 +9616,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 8952 "MachineIndependent/glslang_tab.cpp" +#line 9620 "MachineIndependent/glslang_tab.cpp" break; - case 326: /* type_specifier_nonarray: DMAT4X3 */ -#line 2399 "MachineIndependent/glslang.y" + case 351: /* type_specifier_nonarray: DMAT4X3 */ +#line 2540 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8961,11 +9629,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 8965 "MachineIndependent/glslang_tab.cpp" +#line 9633 "MachineIndependent/glslang_tab.cpp" break; - case 327: /* type_specifier_nonarray: DMAT4X4 */ -#line 2407 "MachineIndependent/glslang.y" + case 352: /* type_specifier_nonarray: DMAT4X4 */ +#line 2548 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8974,2261 +9642,2261 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8978 "MachineIndependent/glslang_tab.cpp" +#line 9646 "MachineIndependent/glslang_tab.cpp" break; - case 328: /* type_specifier_nonarray: F16MAT2 */ -#line 2415 "MachineIndependent/glslang.y" + case 353: /* type_specifier_nonarray: F16MAT2 */ +#line 2556 "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 8989 "MachineIndependent/glslang_tab.cpp" +#line 9657 "MachineIndependent/glslang_tab.cpp" break; - case 329: /* type_specifier_nonarray: F16MAT3 */ -#line 2421 "MachineIndependent/glslang.y" + case 354: /* type_specifier_nonarray: F16MAT3 */ +#line 2562 "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 9000 "MachineIndependent/glslang_tab.cpp" +#line 9668 "MachineIndependent/glslang_tab.cpp" break; - case 330: /* type_specifier_nonarray: F16MAT4 */ -#line 2427 "MachineIndependent/glslang.y" + case 355: /* type_specifier_nonarray: F16MAT4 */ +#line 2568 "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 9011 "MachineIndependent/glslang_tab.cpp" +#line 9679 "MachineIndependent/glslang_tab.cpp" break; - case 331: /* type_specifier_nonarray: F16MAT2X2 */ -#line 2433 "MachineIndependent/glslang.y" + case 356: /* type_specifier_nonarray: F16MAT2X2 */ +#line 2574 "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 9022 "MachineIndependent/glslang_tab.cpp" +#line 9690 "MachineIndependent/glslang_tab.cpp" break; - case 332: /* type_specifier_nonarray: F16MAT2X3 */ -#line 2439 "MachineIndependent/glslang.y" + case 357: /* type_specifier_nonarray: F16MAT2X3 */ +#line 2580 "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 9033 "MachineIndependent/glslang_tab.cpp" +#line 9701 "MachineIndependent/glslang_tab.cpp" break; - case 333: /* type_specifier_nonarray: F16MAT2X4 */ -#line 2445 "MachineIndependent/glslang.y" + case 358: /* type_specifier_nonarray: F16MAT2X4 */ +#line 2586 "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 9044 "MachineIndependent/glslang_tab.cpp" +#line 9712 "MachineIndependent/glslang_tab.cpp" break; - case 334: /* type_specifier_nonarray: F16MAT3X2 */ -#line 2451 "MachineIndependent/glslang.y" + case 359: /* type_specifier_nonarray: F16MAT3X2 */ +#line 2592 "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 9055 "MachineIndependent/glslang_tab.cpp" +#line 9723 "MachineIndependent/glslang_tab.cpp" break; - case 335: /* type_specifier_nonarray: F16MAT3X3 */ -#line 2457 "MachineIndependent/glslang.y" + case 360: /* type_specifier_nonarray: F16MAT3X3 */ +#line 2598 "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 9066 "MachineIndependent/glslang_tab.cpp" +#line 9734 "MachineIndependent/glslang_tab.cpp" break; - case 336: /* type_specifier_nonarray: F16MAT3X4 */ -#line 2463 "MachineIndependent/glslang.y" + case 361: /* type_specifier_nonarray: F16MAT3X4 */ +#line 2604 "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 9077 "MachineIndependent/glslang_tab.cpp" +#line 9745 "MachineIndependent/glslang_tab.cpp" break; - case 337: /* type_specifier_nonarray: F16MAT4X2 */ -#line 2469 "MachineIndependent/glslang.y" + case 362: /* type_specifier_nonarray: F16MAT4X2 */ +#line 2610 "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 9088 "MachineIndependent/glslang_tab.cpp" +#line 9756 "MachineIndependent/glslang_tab.cpp" break; - case 338: /* type_specifier_nonarray: F16MAT4X3 */ -#line 2475 "MachineIndependent/glslang.y" + case 363: /* type_specifier_nonarray: F16MAT4X3 */ +#line 2616 "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 9099 "MachineIndependent/glslang_tab.cpp" +#line 9767 "MachineIndependent/glslang_tab.cpp" break; - case 339: /* type_specifier_nonarray: F16MAT4X4 */ -#line 2481 "MachineIndependent/glslang.y" + case 364: /* type_specifier_nonarray: F16MAT4X4 */ +#line 2622 "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 9110 "MachineIndependent/glslang_tab.cpp" +#line 9778 "MachineIndependent/glslang_tab.cpp" break; - case 340: /* type_specifier_nonarray: F32MAT2 */ -#line 2487 "MachineIndependent/glslang.y" + case 365: /* type_specifier_nonarray: F32MAT2 */ +#line 2628 "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 9121 "MachineIndependent/glslang_tab.cpp" +#line 9789 "MachineIndependent/glslang_tab.cpp" break; - case 341: /* type_specifier_nonarray: F32MAT3 */ -#line 2493 "MachineIndependent/glslang.y" + case 366: /* type_specifier_nonarray: F32MAT3 */ +#line 2634 "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 9132 "MachineIndependent/glslang_tab.cpp" +#line 9800 "MachineIndependent/glslang_tab.cpp" break; - case 342: /* type_specifier_nonarray: F32MAT4 */ -#line 2499 "MachineIndependent/glslang.y" + case 367: /* type_specifier_nonarray: F32MAT4 */ +#line 2640 "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 9143 "MachineIndependent/glslang_tab.cpp" +#line 9811 "MachineIndependent/glslang_tab.cpp" break; - case 343: /* type_specifier_nonarray: F32MAT2X2 */ -#line 2505 "MachineIndependent/glslang.y" + case 368: /* type_specifier_nonarray: F32MAT2X2 */ +#line 2646 "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 9154 "MachineIndependent/glslang_tab.cpp" +#line 9822 "MachineIndependent/glslang_tab.cpp" break; - case 344: /* type_specifier_nonarray: F32MAT2X3 */ -#line 2511 "MachineIndependent/glslang.y" + case 369: /* type_specifier_nonarray: F32MAT2X3 */ +#line 2652 "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 9165 "MachineIndependent/glslang_tab.cpp" +#line 9833 "MachineIndependent/glslang_tab.cpp" break; - case 345: /* type_specifier_nonarray: F32MAT2X4 */ -#line 2517 "MachineIndependent/glslang.y" + case 370: /* type_specifier_nonarray: F32MAT2X4 */ +#line 2658 "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 9176 "MachineIndependent/glslang_tab.cpp" +#line 9844 "MachineIndependent/glslang_tab.cpp" break; - case 346: /* type_specifier_nonarray: F32MAT3X2 */ -#line 2523 "MachineIndependent/glslang.y" + case 371: /* type_specifier_nonarray: F32MAT3X2 */ +#line 2664 "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 9187 "MachineIndependent/glslang_tab.cpp" +#line 9855 "MachineIndependent/glslang_tab.cpp" break; - case 347: /* type_specifier_nonarray: F32MAT3X3 */ -#line 2529 "MachineIndependent/glslang.y" + case 372: /* type_specifier_nonarray: F32MAT3X3 */ +#line 2670 "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 9198 "MachineIndependent/glslang_tab.cpp" +#line 9866 "MachineIndependent/glslang_tab.cpp" break; - case 348: /* type_specifier_nonarray: F32MAT3X4 */ -#line 2535 "MachineIndependent/glslang.y" + case 373: /* type_specifier_nonarray: F32MAT3X4 */ +#line 2676 "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 9209 "MachineIndependent/glslang_tab.cpp" +#line 9877 "MachineIndependent/glslang_tab.cpp" break; - case 349: /* type_specifier_nonarray: F32MAT4X2 */ -#line 2541 "MachineIndependent/glslang.y" + case 374: /* type_specifier_nonarray: F32MAT4X2 */ +#line 2682 "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 9220 "MachineIndependent/glslang_tab.cpp" +#line 9888 "MachineIndependent/glslang_tab.cpp" break; - case 350: /* type_specifier_nonarray: F32MAT4X3 */ -#line 2547 "MachineIndependent/glslang.y" + case 375: /* type_specifier_nonarray: F32MAT4X3 */ +#line 2688 "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 9231 "MachineIndependent/glslang_tab.cpp" +#line 9899 "MachineIndependent/glslang_tab.cpp" break; - case 351: /* type_specifier_nonarray: F32MAT4X4 */ -#line 2553 "MachineIndependent/glslang.y" + case 376: /* type_specifier_nonarray: F32MAT4X4 */ +#line 2694 "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 9242 "MachineIndependent/glslang_tab.cpp" +#line 9910 "MachineIndependent/glslang_tab.cpp" break; - case 352: /* type_specifier_nonarray: F64MAT2 */ -#line 2559 "MachineIndependent/glslang.y" + case 377: /* type_specifier_nonarray: F64MAT2 */ +#line 2700 "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 9253 "MachineIndependent/glslang_tab.cpp" +#line 9921 "MachineIndependent/glslang_tab.cpp" break; - case 353: /* type_specifier_nonarray: F64MAT3 */ -#line 2565 "MachineIndependent/glslang.y" + case 378: /* type_specifier_nonarray: F64MAT3 */ +#line 2706 "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 9264 "MachineIndependent/glslang_tab.cpp" +#line 9932 "MachineIndependent/glslang_tab.cpp" break; - case 354: /* type_specifier_nonarray: F64MAT4 */ -#line 2571 "MachineIndependent/glslang.y" + case 379: /* type_specifier_nonarray: F64MAT4 */ +#line 2712 "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 9275 "MachineIndependent/glslang_tab.cpp" +#line 9943 "MachineIndependent/glslang_tab.cpp" break; - case 355: /* type_specifier_nonarray: F64MAT2X2 */ -#line 2577 "MachineIndependent/glslang.y" + case 380: /* type_specifier_nonarray: F64MAT2X2 */ +#line 2718 "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 9286 "MachineIndependent/glslang_tab.cpp" +#line 9954 "MachineIndependent/glslang_tab.cpp" break; - case 356: /* type_specifier_nonarray: F64MAT2X3 */ -#line 2583 "MachineIndependent/glslang.y" + case 381: /* type_specifier_nonarray: F64MAT2X3 */ +#line 2724 "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 9297 "MachineIndependent/glslang_tab.cpp" +#line 9965 "MachineIndependent/glslang_tab.cpp" break; - case 357: /* type_specifier_nonarray: F64MAT2X4 */ -#line 2589 "MachineIndependent/glslang.y" + case 382: /* type_specifier_nonarray: F64MAT2X4 */ +#line 2730 "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 9308 "MachineIndependent/glslang_tab.cpp" +#line 9976 "MachineIndependent/glslang_tab.cpp" break; - case 358: /* type_specifier_nonarray: F64MAT3X2 */ -#line 2595 "MachineIndependent/glslang.y" + case 383: /* type_specifier_nonarray: F64MAT3X2 */ +#line 2736 "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 9319 "MachineIndependent/glslang_tab.cpp" +#line 9987 "MachineIndependent/glslang_tab.cpp" break; - case 359: /* type_specifier_nonarray: F64MAT3X3 */ -#line 2601 "MachineIndependent/glslang.y" + case 384: /* type_specifier_nonarray: F64MAT3X3 */ +#line 2742 "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 9330 "MachineIndependent/glslang_tab.cpp" +#line 9998 "MachineIndependent/glslang_tab.cpp" break; - case 360: /* type_specifier_nonarray: F64MAT3X4 */ -#line 2607 "MachineIndependent/glslang.y" + case 385: /* type_specifier_nonarray: F64MAT3X4 */ +#line 2748 "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 9341 "MachineIndependent/glslang_tab.cpp" +#line 10009 "MachineIndependent/glslang_tab.cpp" break; - case 361: /* type_specifier_nonarray: F64MAT4X2 */ -#line 2613 "MachineIndependent/glslang.y" + case 386: /* type_specifier_nonarray: F64MAT4X2 */ +#line 2754 "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 9352 "MachineIndependent/glslang_tab.cpp" +#line 10020 "MachineIndependent/glslang_tab.cpp" break; - case 362: /* type_specifier_nonarray: F64MAT4X3 */ -#line 2619 "MachineIndependent/glslang.y" + case 387: /* type_specifier_nonarray: F64MAT4X3 */ +#line 2760 "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 9363 "MachineIndependent/glslang_tab.cpp" +#line 10031 "MachineIndependent/glslang_tab.cpp" break; - case 363: /* type_specifier_nonarray: F64MAT4X4 */ -#line 2625 "MachineIndependent/glslang.y" + case 388: /* type_specifier_nonarray: F64MAT4X4 */ +#line 2766 "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 9374 "MachineIndependent/glslang_tab.cpp" +#line 10042 "MachineIndependent/glslang_tab.cpp" break; - case 364: /* type_specifier_nonarray: ACCSTRUCTNV */ -#line 2631 "MachineIndependent/glslang.y" + case 389: /* type_specifier_nonarray: ACCSTRUCTNV */ +#line 2772 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 9383 "MachineIndependent/glslang_tab.cpp" +#line 10051 "MachineIndependent/glslang_tab.cpp" break; - case 365: /* type_specifier_nonarray: ACCSTRUCTEXT */ -#line 2635 "MachineIndependent/glslang.y" + case 390: /* type_specifier_nonarray: ACCSTRUCTEXT */ +#line 2776 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 9392 "MachineIndependent/glslang_tab.cpp" +#line 10060 "MachineIndependent/glslang_tab.cpp" break; - case 366: /* type_specifier_nonarray: RAYQUERYEXT */ -#line 2639 "MachineIndependent/glslang.y" + case 391: /* type_specifier_nonarray: RAYQUERYEXT */ +#line 2780 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 9401 "MachineIndependent/glslang_tab.cpp" +#line 10069 "MachineIndependent/glslang_tab.cpp" break; - case 367: /* type_specifier_nonarray: ATOMIC_UINT */ -#line 2643 "MachineIndependent/glslang.y" + case 392: /* type_specifier_nonarray: ATOMIC_UINT */ +#line 2784 "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 9411 "MachineIndependent/glslang_tab.cpp" +#line 10079 "MachineIndependent/glslang_tab.cpp" break; - case 368: /* type_specifier_nonarray: SAMPLER1D */ -#line 2648 "MachineIndependent/glslang.y" + case 393: /* type_specifier_nonarray: SAMPLER1D */ +#line 2789 "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 9421 "MachineIndependent/glslang_tab.cpp" +#line 10089 "MachineIndependent/glslang_tab.cpp" break; - case 369: /* type_specifier_nonarray: SAMPLER2D */ -#line 2653 "MachineIndependent/glslang.y" + case 394: /* type_specifier_nonarray: SAMPLER2D */ +#line 2794 "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 9431 "MachineIndependent/glslang_tab.cpp" +#line 10099 "MachineIndependent/glslang_tab.cpp" break; - case 370: /* type_specifier_nonarray: SAMPLER3D */ -#line 2658 "MachineIndependent/glslang.y" + case 395: /* type_specifier_nonarray: SAMPLER3D */ +#line 2799 "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 9441 "MachineIndependent/glslang_tab.cpp" +#line 10109 "MachineIndependent/glslang_tab.cpp" break; - case 371: /* type_specifier_nonarray: SAMPLERCUBE */ -#line 2663 "MachineIndependent/glslang.y" + case 396: /* type_specifier_nonarray: SAMPLERCUBE */ +#line 2804 "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 9451 "MachineIndependent/glslang_tab.cpp" +#line 10119 "MachineIndependent/glslang_tab.cpp" break; - case 372: /* type_specifier_nonarray: SAMPLER2DSHADOW */ -#line 2668 "MachineIndependent/glslang.y" + case 397: /* type_specifier_nonarray: SAMPLER2DSHADOW */ +#line 2809 "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 9461 "MachineIndependent/glslang_tab.cpp" +#line 10129 "MachineIndependent/glslang_tab.cpp" break; - case 373: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ -#line 2673 "MachineIndependent/glslang.y" + case 398: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ +#line 2814 "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 9471 "MachineIndependent/glslang_tab.cpp" +#line 10139 "MachineIndependent/glslang_tab.cpp" break; - case 374: /* type_specifier_nonarray: SAMPLER2DARRAY */ -#line 2678 "MachineIndependent/glslang.y" + case 399: /* type_specifier_nonarray: SAMPLER2DARRAY */ +#line 2819 "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 9481 "MachineIndependent/glslang_tab.cpp" +#line 10149 "MachineIndependent/glslang_tab.cpp" break; - case 375: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ -#line 2683 "MachineIndependent/glslang.y" + case 400: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ +#line 2824 "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 9491 "MachineIndependent/glslang_tab.cpp" +#line 10159 "MachineIndependent/glslang_tab.cpp" break; - case 376: /* type_specifier_nonarray: SAMPLER1DSHADOW */ -#line 2688 "MachineIndependent/glslang.y" + case 401: /* type_specifier_nonarray: SAMPLER1DSHADOW */ +#line 2829 "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 9501 "MachineIndependent/glslang_tab.cpp" +#line 10169 "MachineIndependent/glslang_tab.cpp" break; - case 377: /* type_specifier_nonarray: SAMPLER1DARRAY */ -#line 2693 "MachineIndependent/glslang.y" + case 402: /* type_specifier_nonarray: SAMPLER1DARRAY */ +#line 2834 "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 9511 "MachineIndependent/glslang_tab.cpp" +#line 10179 "MachineIndependent/glslang_tab.cpp" break; - case 378: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ -#line 2698 "MachineIndependent/glslang.y" + case 403: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ +#line 2839 "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 9521 "MachineIndependent/glslang_tab.cpp" +#line 10189 "MachineIndependent/glslang_tab.cpp" break; - case 379: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ -#line 2703 "MachineIndependent/glslang.y" + case 404: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ +#line 2844 "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 9531 "MachineIndependent/glslang_tab.cpp" +#line 10199 "MachineIndependent/glslang_tab.cpp" break; - case 380: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ -#line 2708 "MachineIndependent/glslang.y" + case 405: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ +#line 2849 "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 9541 "MachineIndependent/glslang_tab.cpp" +#line 10209 "MachineIndependent/glslang_tab.cpp" break; - case 381: /* type_specifier_nonarray: F16SAMPLER1D */ -#line 2713 "MachineIndependent/glslang.y" + case 406: /* type_specifier_nonarray: F16SAMPLER1D */ +#line 2854 "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 9552 "MachineIndependent/glslang_tab.cpp" +#line 10220 "MachineIndependent/glslang_tab.cpp" break; - case 382: /* type_specifier_nonarray: F16SAMPLER2D */ -#line 2719 "MachineIndependent/glslang.y" + case 407: /* type_specifier_nonarray: F16SAMPLER2D */ +#line 2860 "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 9563 "MachineIndependent/glslang_tab.cpp" +#line 10231 "MachineIndependent/glslang_tab.cpp" break; - case 383: /* type_specifier_nonarray: F16SAMPLER3D */ -#line 2725 "MachineIndependent/glslang.y" + case 408: /* type_specifier_nonarray: F16SAMPLER3D */ +#line 2866 "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 9574 "MachineIndependent/glslang_tab.cpp" +#line 10242 "MachineIndependent/glslang_tab.cpp" break; - case 384: /* type_specifier_nonarray: F16SAMPLERCUBE */ -#line 2731 "MachineIndependent/glslang.y" + case 409: /* type_specifier_nonarray: F16SAMPLERCUBE */ +#line 2872 "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 9585 "MachineIndependent/glslang_tab.cpp" +#line 10253 "MachineIndependent/glslang_tab.cpp" break; - case 385: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ -#line 2737 "MachineIndependent/glslang.y" + case 410: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ +#line 2878 "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 9596 "MachineIndependent/glslang_tab.cpp" +#line 10264 "MachineIndependent/glslang_tab.cpp" break; - case 386: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ -#line 2743 "MachineIndependent/glslang.y" + case 411: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ +#line 2884 "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 9607 "MachineIndependent/glslang_tab.cpp" +#line 10275 "MachineIndependent/glslang_tab.cpp" break; - case 387: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ -#line 2749 "MachineIndependent/glslang.y" + case 412: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ +#line 2890 "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 9618 "MachineIndependent/glslang_tab.cpp" +#line 10286 "MachineIndependent/glslang_tab.cpp" break; - case 388: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ -#line 2755 "MachineIndependent/glslang.y" + case 413: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ +#line 2896 "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 9629 "MachineIndependent/glslang_tab.cpp" +#line 10297 "MachineIndependent/glslang_tab.cpp" break; - case 389: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ -#line 2761 "MachineIndependent/glslang.y" + case 414: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ +#line 2902 "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 9640 "MachineIndependent/glslang_tab.cpp" +#line 10308 "MachineIndependent/glslang_tab.cpp" break; - case 390: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ -#line 2767 "MachineIndependent/glslang.y" + case 415: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ +#line 2908 "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 9651 "MachineIndependent/glslang_tab.cpp" +#line 10319 "MachineIndependent/glslang_tab.cpp" break; - case 391: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ -#line 2773 "MachineIndependent/glslang.y" + case 416: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ +#line 2914 "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 9662 "MachineIndependent/glslang_tab.cpp" +#line 10330 "MachineIndependent/glslang_tab.cpp" break; - case 392: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ -#line 2779 "MachineIndependent/glslang.y" + case 417: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ +#line 2920 "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 9673 "MachineIndependent/glslang_tab.cpp" +#line 10341 "MachineIndependent/glslang_tab.cpp" break; - case 393: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ -#line 2785 "MachineIndependent/glslang.y" + case 418: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ +#line 2926 "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 9684 "MachineIndependent/glslang_tab.cpp" +#line 10352 "MachineIndependent/glslang_tab.cpp" break; - case 394: /* type_specifier_nonarray: ISAMPLER1D */ -#line 2791 "MachineIndependent/glslang.y" + case 419: /* type_specifier_nonarray: ISAMPLER1D */ +#line 2932 "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 9694 "MachineIndependent/glslang_tab.cpp" +#line 10362 "MachineIndependent/glslang_tab.cpp" break; - case 395: /* type_specifier_nonarray: ISAMPLER2D */ -#line 2796 "MachineIndependent/glslang.y" + case 420: /* type_specifier_nonarray: ISAMPLER2D */ +#line 2937 "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 9704 "MachineIndependent/glslang_tab.cpp" +#line 10372 "MachineIndependent/glslang_tab.cpp" break; - case 396: /* type_specifier_nonarray: ISAMPLER3D */ -#line 2801 "MachineIndependent/glslang.y" + case 421: /* type_specifier_nonarray: ISAMPLER3D */ +#line 2942 "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 9714 "MachineIndependent/glslang_tab.cpp" +#line 10382 "MachineIndependent/glslang_tab.cpp" break; - case 397: /* type_specifier_nonarray: ISAMPLERCUBE */ -#line 2806 "MachineIndependent/glslang.y" + case 422: /* type_specifier_nonarray: ISAMPLERCUBE */ +#line 2947 "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 9724 "MachineIndependent/glslang_tab.cpp" +#line 10392 "MachineIndependent/glslang_tab.cpp" break; - case 398: /* type_specifier_nonarray: ISAMPLER2DARRAY */ -#line 2811 "MachineIndependent/glslang.y" + case 423: /* type_specifier_nonarray: ISAMPLER2DARRAY */ +#line 2952 "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 9734 "MachineIndependent/glslang_tab.cpp" +#line 10402 "MachineIndependent/glslang_tab.cpp" break; - case 399: /* type_specifier_nonarray: USAMPLER2D */ -#line 2816 "MachineIndependent/glslang.y" + case 424: /* type_specifier_nonarray: USAMPLER2D */ +#line 2957 "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 9744 "MachineIndependent/glslang_tab.cpp" +#line 10412 "MachineIndependent/glslang_tab.cpp" break; - case 400: /* type_specifier_nonarray: USAMPLER3D */ -#line 2821 "MachineIndependent/glslang.y" + case 425: /* type_specifier_nonarray: USAMPLER3D */ +#line 2962 "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 9754 "MachineIndependent/glslang_tab.cpp" +#line 10422 "MachineIndependent/glslang_tab.cpp" break; - case 401: /* type_specifier_nonarray: USAMPLERCUBE */ -#line 2826 "MachineIndependent/glslang.y" + case 426: /* type_specifier_nonarray: USAMPLERCUBE */ +#line 2967 "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 9764 "MachineIndependent/glslang_tab.cpp" +#line 10432 "MachineIndependent/glslang_tab.cpp" break; - case 402: /* type_specifier_nonarray: ISAMPLER1DARRAY */ -#line 2831 "MachineIndependent/glslang.y" + case 427: /* type_specifier_nonarray: ISAMPLER1DARRAY */ +#line 2972 "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 9774 "MachineIndependent/glslang_tab.cpp" +#line 10442 "MachineIndependent/glslang_tab.cpp" break; - case 403: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ -#line 2836 "MachineIndependent/glslang.y" + case 428: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ +#line 2977 "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 9784 "MachineIndependent/glslang_tab.cpp" +#line 10452 "MachineIndependent/glslang_tab.cpp" break; - case 404: /* type_specifier_nonarray: USAMPLER1D */ -#line 2841 "MachineIndependent/glslang.y" + case 429: /* type_specifier_nonarray: USAMPLER1D */ +#line 2982 "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 9794 "MachineIndependent/glslang_tab.cpp" +#line 10462 "MachineIndependent/glslang_tab.cpp" break; - case 405: /* type_specifier_nonarray: USAMPLER1DARRAY */ -#line 2846 "MachineIndependent/glslang.y" + case 430: /* type_specifier_nonarray: USAMPLER1DARRAY */ +#line 2987 "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 9804 "MachineIndependent/glslang_tab.cpp" +#line 10472 "MachineIndependent/glslang_tab.cpp" break; - case 406: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ -#line 2851 "MachineIndependent/glslang.y" + case 431: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ +#line 2992 "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 9814 "MachineIndependent/glslang_tab.cpp" +#line 10482 "MachineIndependent/glslang_tab.cpp" break; - case 407: /* type_specifier_nonarray: TEXTURECUBEARRAY */ -#line 2856 "MachineIndependent/glslang.y" + case 432: /* type_specifier_nonarray: TEXTURECUBEARRAY */ +#line 2997 "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 9824 "MachineIndependent/glslang_tab.cpp" +#line 10492 "MachineIndependent/glslang_tab.cpp" break; - case 408: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ -#line 2861 "MachineIndependent/glslang.y" + case 433: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ +#line 3002 "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 9834 "MachineIndependent/glslang_tab.cpp" +#line 10502 "MachineIndependent/glslang_tab.cpp" break; - case 409: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ -#line 2866 "MachineIndependent/glslang.y" + case 434: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ +#line 3007 "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 9844 "MachineIndependent/glslang_tab.cpp" +#line 10512 "MachineIndependent/glslang_tab.cpp" break; - case 410: /* type_specifier_nonarray: USAMPLER2DARRAY */ -#line 2871 "MachineIndependent/glslang.y" + case 435: /* type_specifier_nonarray: USAMPLER2DARRAY */ +#line 3012 "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 9854 "MachineIndependent/glslang_tab.cpp" +#line 10522 "MachineIndependent/glslang_tab.cpp" break; - case 411: /* type_specifier_nonarray: TEXTURE2D */ -#line 2876 "MachineIndependent/glslang.y" + case 436: /* type_specifier_nonarray: TEXTURE2D */ +#line 3017 "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 9864 "MachineIndependent/glslang_tab.cpp" +#line 10532 "MachineIndependent/glslang_tab.cpp" break; - case 412: /* type_specifier_nonarray: TEXTURE3D */ -#line 2881 "MachineIndependent/glslang.y" + case 437: /* type_specifier_nonarray: TEXTURE3D */ +#line 3022 "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 9874 "MachineIndependent/glslang_tab.cpp" +#line 10542 "MachineIndependent/glslang_tab.cpp" break; - case 413: /* type_specifier_nonarray: TEXTURE2DARRAY */ -#line 2886 "MachineIndependent/glslang.y" + case 438: /* type_specifier_nonarray: TEXTURE2DARRAY */ +#line 3027 "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 9884 "MachineIndependent/glslang_tab.cpp" +#line 10552 "MachineIndependent/glslang_tab.cpp" break; - case 414: /* type_specifier_nonarray: TEXTURECUBE */ -#line 2891 "MachineIndependent/glslang.y" + case 439: /* type_specifier_nonarray: TEXTURECUBE */ +#line 3032 "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 9894 "MachineIndependent/glslang_tab.cpp" +#line 10562 "MachineIndependent/glslang_tab.cpp" break; - case 415: /* type_specifier_nonarray: ITEXTURE2D */ -#line 2896 "MachineIndependent/glslang.y" + case 440: /* type_specifier_nonarray: ITEXTURE2D */ +#line 3037 "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 9904 "MachineIndependent/glslang_tab.cpp" +#line 10572 "MachineIndependent/glslang_tab.cpp" break; - case 416: /* type_specifier_nonarray: ITEXTURE3D */ -#line 2901 "MachineIndependent/glslang.y" + case 441: /* type_specifier_nonarray: ITEXTURE3D */ +#line 3042 "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 9914 "MachineIndependent/glslang_tab.cpp" +#line 10582 "MachineIndependent/glslang_tab.cpp" break; - case 417: /* type_specifier_nonarray: ITEXTURECUBE */ -#line 2906 "MachineIndependent/glslang.y" + case 442: /* type_specifier_nonarray: ITEXTURECUBE */ +#line 3047 "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 9924 "MachineIndependent/glslang_tab.cpp" +#line 10592 "MachineIndependent/glslang_tab.cpp" break; - case 418: /* type_specifier_nonarray: ITEXTURE2DARRAY */ -#line 2911 "MachineIndependent/glslang.y" + case 443: /* type_specifier_nonarray: ITEXTURE2DARRAY */ +#line 3052 "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 9934 "MachineIndependent/glslang_tab.cpp" +#line 10602 "MachineIndependent/glslang_tab.cpp" break; - case 419: /* type_specifier_nonarray: UTEXTURE2D */ -#line 2916 "MachineIndependent/glslang.y" + case 444: /* type_specifier_nonarray: UTEXTURE2D */ +#line 3057 "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 9944 "MachineIndependent/glslang_tab.cpp" +#line 10612 "MachineIndependent/glslang_tab.cpp" break; - case 420: /* type_specifier_nonarray: UTEXTURE3D */ -#line 2921 "MachineIndependent/glslang.y" + case 445: /* type_specifier_nonarray: UTEXTURE3D */ +#line 3062 "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 9954 "MachineIndependent/glslang_tab.cpp" +#line 10622 "MachineIndependent/glslang_tab.cpp" break; - case 421: /* type_specifier_nonarray: UTEXTURECUBE */ -#line 2926 "MachineIndependent/glslang.y" + case 446: /* type_specifier_nonarray: UTEXTURECUBE */ +#line 3067 "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 9964 "MachineIndependent/glslang_tab.cpp" +#line 10632 "MachineIndependent/glslang_tab.cpp" break; - case 422: /* type_specifier_nonarray: UTEXTURE2DARRAY */ -#line 2931 "MachineIndependent/glslang.y" + case 447: /* type_specifier_nonarray: UTEXTURE2DARRAY */ +#line 3072 "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 9974 "MachineIndependent/glslang_tab.cpp" +#line 10642 "MachineIndependent/glslang_tab.cpp" break; - case 423: /* type_specifier_nonarray: SAMPLER */ -#line 2936 "MachineIndependent/glslang.y" + case 448: /* type_specifier_nonarray: SAMPLER */ +#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.setPureSampler(false); } -#line 9984 "MachineIndependent/glslang_tab.cpp" +#line 10652 "MachineIndependent/glslang_tab.cpp" break; - case 424: /* type_specifier_nonarray: SAMPLERSHADOW */ -#line 2941 "MachineIndependent/glslang.y" + case 449: /* type_specifier_nonarray: SAMPLERSHADOW */ +#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.setPureSampler(true); } -#line 9994 "MachineIndependent/glslang_tab.cpp" +#line 10662 "MachineIndependent/glslang_tab.cpp" break; - case 425: /* type_specifier_nonarray: SAMPLER2DRECT */ -#line 2946 "MachineIndependent/glslang.y" + case 450: /* type_specifier_nonarray: SAMPLER2DRECT */ +#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.set(EbtFloat, EsdRect); } -#line 10004 "MachineIndependent/glslang_tab.cpp" +#line 10672 "MachineIndependent/glslang_tab.cpp" break; - case 426: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ -#line 2951 "MachineIndependent/glslang.y" + case 451: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ +#line 3092 "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 10014 "MachineIndependent/glslang_tab.cpp" +#line 10682 "MachineIndependent/glslang_tab.cpp" break; - case 427: /* type_specifier_nonarray: F16SAMPLER2DRECT */ -#line 2956 "MachineIndependent/glslang.y" + case 452: /* type_specifier_nonarray: F16SAMPLER2DRECT */ +#line 3097 "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 10025 "MachineIndependent/glslang_tab.cpp" +#line 10693 "MachineIndependent/glslang_tab.cpp" break; - case 428: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ -#line 2962 "MachineIndependent/glslang.y" + case 453: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ +#line 3103 "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 10036 "MachineIndependent/glslang_tab.cpp" +#line 10704 "MachineIndependent/glslang_tab.cpp" break; - case 429: /* type_specifier_nonarray: ISAMPLER2DRECT */ -#line 2968 "MachineIndependent/glslang.y" + case 454: /* type_specifier_nonarray: ISAMPLER2DRECT */ +#line 3109 "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 10046 "MachineIndependent/glslang_tab.cpp" +#line 10714 "MachineIndependent/glslang_tab.cpp" break; - case 430: /* type_specifier_nonarray: USAMPLER2DRECT */ -#line 2973 "MachineIndependent/glslang.y" + case 455: /* type_specifier_nonarray: USAMPLER2DRECT */ +#line 3114 "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 10056 "MachineIndependent/glslang_tab.cpp" +#line 10724 "MachineIndependent/glslang_tab.cpp" break; - case 431: /* type_specifier_nonarray: SAMPLERBUFFER */ -#line 2978 "MachineIndependent/glslang.y" + case 456: /* type_specifier_nonarray: SAMPLERBUFFER */ +#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.set(EbtFloat, EsdBuffer); } -#line 10066 "MachineIndependent/glslang_tab.cpp" +#line 10734 "MachineIndependent/glslang_tab.cpp" break; - case 432: /* type_specifier_nonarray: F16SAMPLERBUFFER */ -#line 2983 "MachineIndependent/glslang.y" + case 457: /* type_specifier_nonarray: F16SAMPLERBUFFER */ +#line 3124 "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 10077 "MachineIndependent/glslang_tab.cpp" +#line 10745 "MachineIndependent/glslang_tab.cpp" break; - case 433: /* type_specifier_nonarray: ISAMPLERBUFFER */ -#line 2989 "MachineIndependent/glslang.y" + case 458: /* type_specifier_nonarray: ISAMPLERBUFFER */ +#line 3130 "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 10087 "MachineIndependent/glslang_tab.cpp" +#line 10755 "MachineIndependent/glslang_tab.cpp" break; - case 434: /* type_specifier_nonarray: USAMPLERBUFFER */ -#line 2994 "MachineIndependent/glslang.y" + case 459: /* type_specifier_nonarray: USAMPLERBUFFER */ +#line 3135 "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 10097 "MachineIndependent/glslang_tab.cpp" +#line 10765 "MachineIndependent/glslang_tab.cpp" break; - case 435: /* type_specifier_nonarray: SAMPLER2DMS */ -#line 2999 "MachineIndependent/glslang.y" + case 460: /* type_specifier_nonarray: SAMPLER2DMS */ +#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.set(EbtFloat, Esd2D, false, false, true); } -#line 10107 "MachineIndependent/glslang_tab.cpp" +#line 10775 "MachineIndependent/glslang_tab.cpp" break; - case 436: /* type_specifier_nonarray: F16SAMPLER2DMS */ -#line 3004 "MachineIndependent/glslang.y" + case 461: /* type_specifier_nonarray: F16SAMPLER2DMS */ +#line 3145 "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 10118 "MachineIndependent/glslang_tab.cpp" +#line 10786 "MachineIndependent/glslang_tab.cpp" break; - case 437: /* type_specifier_nonarray: ISAMPLER2DMS */ -#line 3010 "MachineIndependent/glslang.y" + case 462: /* type_specifier_nonarray: ISAMPLER2DMS */ +#line 3151 "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 10128 "MachineIndependent/glslang_tab.cpp" +#line 10796 "MachineIndependent/glslang_tab.cpp" break; - case 438: /* type_specifier_nonarray: USAMPLER2DMS */ -#line 3015 "MachineIndependent/glslang.y" + case 463: /* type_specifier_nonarray: USAMPLER2DMS */ +#line 3156 "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 10138 "MachineIndependent/glslang_tab.cpp" +#line 10806 "MachineIndependent/glslang_tab.cpp" break; - case 439: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ -#line 3020 "MachineIndependent/glslang.y" + case 464: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ +#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.set(EbtFloat, Esd2D, true, false, true); } -#line 10148 "MachineIndependent/glslang_tab.cpp" +#line 10816 "MachineIndependent/glslang_tab.cpp" break; - case 440: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ -#line 3025 "MachineIndependent/glslang.y" + case 465: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ +#line 3166 "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 10159 "MachineIndependent/glslang_tab.cpp" +#line 10827 "MachineIndependent/glslang_tab.cpp" break; - case 441: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ -#line 3031 "MachineIndependent/glslang.y" + case 466: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ +#line 3172 "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 10169 "MachineIndependent/glslang_tab.cpp" +#line 10837 "MachineIndependent/glslang_tab.cpp" break; - case 442: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ -#line 3036 "MachineIndependent/glslang.y" + case 467: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ +#line 3177 "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 10179 "MachineIndependent/glslang_tab.cpp" +#line 10847 "MachineIndependent/glslang_tab.cpp" break; - case 443: /* type_specifier_nonarray: TEXTURE1D */ -#line 3041 "MachineIndependent/glslang.y" + case 468: /* type_specifier_nonarray: TEXTURE1D */ +#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.setTexture(EbtFloat, Esd1D); } -#line 10189 "MachineIndependent/glslang_tab.cpp" +#line 10857 "MachineIndependent/glslang_tab.cpp" break; - case 444: /* type_specifier_nonarray: F16TEXTURE1D */ -#line 3046 "MachineIndependent/glslang.y" + case 469: /* type_specifier_nonarray: F16TEXTURE1D */ +#line 3187 "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 10200 "MachineIndependent/glslang_tab.cpp" +#line 10868 "MachineIndependent/glslang_tab.cpp" break; - case 445: /* type_specifier_nonarray: F16TEXTURE2D */ -#line 3052 "MachineIndependent/glslang.y" + case 470: /* type_specifier_nonarray: F16TEXTURE2D */ +#line 3193 "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 10211 "MachineIndependent/glslang_tab.cpp" +#line 10879 "MachineIndependent/glslang_tab.cpp" break; - case 446: /* type_specifier_nonarray: F16TEXTURE3D */ -#line 3058 "MachineIndependent/glslang.y" + case 471: /* type_specifier_nonarray: F16TEXTURE3D */ +#line 3199 "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 10222 "MachineIndependent/glslang_tab.cpp" +#line 10890 "MachineIndependent/glslang_tab.cpp" break; - case 447: /* type_specifier_nonarray: F16TEXTURECUBE */ -#line 3064 "MachineIndependent/glslang.y" + case 472: /* type_specifier_nonarray: F16TEXTURECUBE */ +#line 3205 "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 10233 "MachineIndependent/glslang_tab.cpp" +#line 10901 "MachineIndependent/glslang_tab.cpp" break; - case 448: /* type_specifier_nonarray: TEXTURE1DARRAY */ -#line 3070 "MachineIndependent/glslang.y" + case 473: /* type_specifier_nonarray: TEXTURE1DARRAY */ +#line 3211 "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 10243 "MachineIndependent/glslang_tab.cpp" +#line 10911 "MachineIndependent/glslang_tab.cpp" break; - case 449: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ -#line 3075 "MachineIndependent/glslang.y" + case 474: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ +#line 3216 "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 10254 "MachineIndependent/glslang_tab.cpp" +#line 10922 "MachineIndependent/glslang_tab.cpp" break; - case 450: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ -#line 3081 "MachineIndependent/glslang.y" + case 475: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ +#line 3222 "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 10265 "MachineIndependent/glslang_tab.cpp" +#line 10933 "MachineIndependent/glslang_tab.cpp" break; - case 451: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ -#line 3087 "MachineIndependent/glslang.y" + case 476: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ +#line 3228 "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 10276 "MachineIndependent/glslang_tab.cpp" +#line 10944 "MachineIndependent/glslang_tab.cpp" break; - case 452: /* type_specifier_nonarray: ITEXTURE1D */ -#line 3093 "MachineIndependent/glslang.y" + case 477: /* type_specifier_nonarray: ITEXTURE1D */ +#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.setTexture(EbtInt, Esd1D); } -#line 10286 "MachineIndependent/glslang_tab.cpp" +#line 10954 "MachineIndependent/glslang_tab.cpp" break; - case 453: /* type_specifier_nonarray: ITEXTURE1DARRAY */ -#line 3098 "MachineIndependent/glslang.y" + case 478: /* type_specifier_nonarray: ITEXTURE1DARRAY */ +#line 3239 "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 10296 "MachineIndependent/glslang_tab.cpp" +#line 10964 "MachineIndependent/glslang_tab.cpp" break; - case 454: /* type_specifier_nonarray: UTEXTURE1D */ -#line 3103 "MachineIndependent/glslang.y" + case 479: /* type_specifier_nonarray: UTEXTURE1D */ +#line 3244 "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 10306 "MachineIndependent/glslang_tab.cpp" +#line 10974 "MachineIndependent/glslang_tab.cpp" break; - case 455: /* type_specifier_nonarray: UTEXTURE1DARRAY */ -#line 3108 "MachineIndependent/glslang.y" + case 480: /* type_specifier_nonarray: UTEXTURE1DARRAY */ +#line 3249 "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 10316 "MachineIndependent/glslang_tab.cpp" +#line 10984 "MachineIndependent/glslang_tab.cpp" break; - case 456: /* type_specifier_nonarray: TEXTURE2DRECT */ -#line 3113 "MachineIndependent/glslang.y" + case 481: /* type_specifier_nonarray: TEXTURE2DRECT */ +#line 3254 "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 10326 "MachineIndependent/glslang_tab.cpp" +#line 10994 "MachineIndependent/glslang_tab.cpp" break; - case 457: /* type_specifier_nonarray: F16TEXTURE2DRECT */ -#line 3118 "MachineIndependent/glslang.y" + case 482: /* type_specifier_nonarray: F16TEXTURE2DRECT */ +#line 3259 "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 10337 "MachineIndependent/glslang_tab.cpp" +#line 11005 "MachineIndependent/glslang_tab.cpp" break; - case 458: /* type_specifier_nonarray: ITEXTURE2DRECT */ -#line 3124 "MachineIndependent/glslang.y" + case 483: /* type_specifier_nonarray: ITEXTURE2DRECT */ +#line 3265 "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 10347 "MachineIndependent/glslang_tab.cpp" +#line 11015 "MachineIndependent/glslang_tab.cpp" break; - case 459: /* type_specifier_nonarray: UTEXTURE2DRECT */ -#line 3129 "MachineIndependent/glslang.y" + case 484: /* type_specifier_nonarray: UTEXTURE2DRECT */ +#line 3270 "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 10357 "MachineIndependent/glslang_tab.cpp" +#line 11025 "MachineIndependent/glslang_tab.cpp" break; - case 460: /* type_specifier_nonarray: TEXTUREBUFFER */ -#line 3134 "MachineIndependent/glslang.y" + case 485: /* type_specifier_nonarray: TEXTUREBUFFER */ +#line 3275 "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 10367 "MachineIndependent/glslang_tab.cpp" +#line 11035 "MachineIndependent/glslang_tab.cpp" break; - case 461: /* type_specifier_nonarray: F16TEXTUREBUFFER */ -#line 3139 "MachineIndependent/glslang.y" + case 486: /* type_specifier_nonarray: F16TEXTUREBUFFER */ +#line 3280 "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 10378 "MachineIndependent/glslang_tab.cpp" +#line 11046 "MachineIndependent/glslang_tab.cpp" break; - case 462: /* type_specifier_nonarray: ITEXTUREBUFFER */ -#line 3145 "MachineIndependent/glslang.y" + case 487: /* type_specifier_nonarray: ITEXTUREBUFFER */ +#line 3286 "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 10388 "MachineIndependent/glslang_tab.cpp" +#line 11056 "MachineIndependent/glslang_tab.cpp" break; - case 463: /* type_specifier_nonarray: UTEXTUREBUFFER */ -#line 3150 "MachineIndependent/glslang.y" + case 488: /* type_specifier_nonarray: UTEXTUREBUFFER */ +#line 3291 "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 10398 "MachineIndependent/glslang_tab.cpp" +#line 11066 "MachineIndependent/glslang_tab.cpp" break; - case 464: /* type_specifier_nonarray: TEXTURE2DMS */ -#line 3155 "MachineIndependent/glslang.y" + case 489: /* type_specifier_nonarray: TEXTURE2DMS */ +#line 3296 "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 10408 "MachineIndependent/glslang_tab.cpp" +#line 11076 "MachineIndependent/glslang_tab.cpp" break; - case 465: /* type_specifier_nonarray: F16TEXTURE2DMS */ -#line 3160 "MachineIndependent/glslang.y" + case 490: /* type_specifier_nonarray: F16TEXTURE2DMS */ +#line 3301 "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 10419 "MachineIndependent/glslang_tab.cpp" +#line 11087 "MachineIndependent/glslang_tab.cpp" break; - case 466: /* type_specifier_nonarray: ITEXTURE2DMS */ -#line 3166 "MachineIndependent/glslang.y" + case 491: /* type_specifier_nonarray: ITEXTURE2DMS */ +#line 3307 "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 10429 "MachineIndependent/glslang_tab.cpp" +#line 11097 "MachineIndependent/glslang_tab.cpp" break; - case 467: /* type_specifier_nonarray: UTEXTURE2DMS */ -#line 3171 "MachineIndependent/glslang.y" + case 492: /* type_specifier_nonarray: UTEXTURE2DMS */ +#line 3312 "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 10439 "MachineIndependent/glslang_tab.cpp" +#line 11107 "MachineIndependent/glslang_tab.cpp" break; - case 468: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ -#line 3176 "MachineIndependent/glslang.y" + case 493: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ +#line 3317 "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 10449 "MachineIndependent/glslang_tab.cpp" +#line 11117 "MachineIndependent/glslang_tab.cpp" break; - case 469: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ -#line 3181 "MachineIndependent/glslang.y" + case 494: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ +#line 3322 "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 10460 "MachineIndependent/glslang_tab.cpp" +#line 11128 "MachineIndependent/glslang_tab.cpp" break; - case 470: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ -#line 3187 "MachineIndependent/glslang.y" + case 495: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ +#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.setTexture(EbtInt, Esd2D, true, false, true); } -#line 10470 "MachineIndependent/glslang_tab.cpp" +#line 11138 "MachineIndependent/glslang_tab.cpp" break; - case 471: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ -#line 3192 "MachineIndependent/glslang.y" + case 496: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ +#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.setTexture(EbtUint, Esd2D, true, false, true); } -#line 10480 "MachineIndependent/glslang_tab.cpp" +#line 11148 "MachineIndependent/glslang_tab.cpp" break; - case 472: /* type_specifier_nonarray: IMAGE1D */ -#line 3197 "MachineIndependent/glslang.y" + case 497: /* type_specifier_nonarray: IMAGE1D */ +#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(EbtFloat, Esd1D); } -#line 10490 "MachineIndependent/glslang_tab.cpp" +#line 11158 "MachineIndependent/glslang_tab.cpp" break; - case 473: /* type_specifier_nonarray: F16IMAGE1D */ -#line 3202 "MachineIndependent/glslang.y" + case 498: /* type_specifier_nonarray: F16IMAGE1D */ +#line 3343 "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 10501 "MachineIndependent/glslang_tab.cpp" +#line 11169 "MachineIndependent/glslang_tab.cpp" break; - case 474: /* type_specifier_nonarray: IIMAGE1D */ -#line 3208 "MachineIndependent/glslang.y" + case 499: /* type_specifier_nonarray: IIMAGE1D */ +#line 3349 "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 10511 "MachineIndependent/glslang_tab.cpp" +#line 11179 "MachineIndependent/glslang_tab.cpp" break; - case 475: /* type_specifier_nonarray: UIMAGE1D */ -#line 3213 "MachineIndependent/glslang.y" + case 500: /* type_specifier_nonarray: UIMAGE1D */ +#line 3354 "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 10521 "MachineIndependent/glslang_tab.cpp" +#line 11189 "MachineIndependent/glslang_tab.cpp" break; - case 476: /* type_specifier_nonarray: IMAGE2D */ -#line 3218 "MachineIndependent/glslang.y" + case 501: /* type_specifier_nonarray: IMAGE2D */ +#line 3359 "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 10531 "MachineIndependent/glslang_tab.cpp" +#line 11199 "MachineIndependent/glslang_tab.cpp" break; - case 477: /* type_specifier_nonarray: F16IMAGE2D */ -#line 3223 "MachineIndependent/glslang.y" + case 502: /* type_specifier_nonarray: F16IMAGE2D */ +#line 3364 "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 10542 "MachineIndependent/glslang_tab.cpp" +#line 11210 "MachineIndependent/glslang_tab.cpp" break; - case 478: /* type_specifier_nonarray: IIMAGE2D */ -#line 3229 "MachineIndependent/glslang.y" + case 503: /* type_specifier_nonarray: IIMAGE2D */ +#line 3370 "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 10552 "MachineIndependent/glslang_tab.cpp" +#line 11220 "MachineIndependent/glslang_tab.cpp" break; - case 479: /* type_specifier_nonarray: UIMAGE2D */ -#line 3234 "MachineIndependent/glslang.y" + case 504: /* type_specifier_nonarray: UIMAGE2D */ +#line 3375 "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 10562 "MachineIndependent/glslang_tab.cpp" +#line 11230 "MachineIndependent/glslang_tab.cpp" break; - case 480: /* type_specifier_nonarray: IMAGE3D */ -#line 3239 "MachineIndependent/glslang.y" + case 505: /* type_specifier_nonarray: IMAGE3D */ +#line 3380 "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 10572 "MachineIndependent/glslang_tab.cpp" +#line 11240 "MachineIndependent/glslang_tab.cpp" break; - case 481: /* type_specifier_nonarray: F16IMAGE3D */ -#line 3244 "MachineIndependent/glslang.y" + case 506: /* type_specifier_nonarray: F16IMAGE3D */ +#line 3385 "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 10583 "MachineIndependent/glslang_tab.cpp" +#line 11251 "MachineIndependent/glslang_tab.cpp" break; - case 482: /* type_specifier_nonarray: IIMAGE3D */ -#line 3250 "MachineIndependent/glslang.y" + case 507: /* type_specifier_nonarray: IIMAGE3D */ +#line 3391 "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 10593 "MachineIndependent/glslang_tab.cpp" +#line 11261 "MachineIndependent/glslang_tab.cpp" break; - case 483: /* type_specifier_nonarray: UIMAGE3D */ -#line 3255 "MachineIndependent/glslang.y" + case 508: /* type_specifier_nonarray: UIMAGE3D */ +#line 3396 "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 10603 "MachineIndependent/glslang_tab.cpp" +#line 11271 "MachineIndependent/glslang_tab.cpp" break; - case 484: /* type_specifier_nonarray: IMAGE2DRECT */ -#line 3260 "MachineIndependent/glslang.y" + case 509: /* type_specifier_nonarray: IMAGE2DRECT */ +#line 3401 "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 10613 "MachineIndependent/glslang_tab.cpp" +#line 11281 "MachineIndependent/glslang_tab.cpp" break; - case 485: /* type_specifier_nonarray: F16IMAGE2DRECT */ -#line 3265 "MachineIndependent/glslang.y" + case 510: /* type_specifier_nonarray: F16IMAGE2DRECT */ +#line 3406 "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 10624 "MachineIndependent/glslang_tab.cpp" +#line 11292 "MachineIndependent/glslang_tab.cpp" break; - case 486: /* type_specifier_nonarray: IIMAGE2DRECT */ -#line 3271 "MachineIndependent/glslang.y" + case 511: /* type_specifier_nonarray: IIMAGE2DRECT */ +#line 3412 "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 10634 "MachineIndependent/glslang_tab.cpp" +#line 11302 "MachineIndependent/glslang_tab.cpp" break; - case 487: /* type_specifier_nonarray: UIMAGE2DRECT */ -#line 3276 "MachineIndependent/glslang.y" + case 512: /* type_specifier_nonarray: UIMAGE2DRECT */ +#line 3417 "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 10644 "MachineIndependent/glslang_tab.cpp" +#line 11312 "MachineIndependent/glslang_tab.cpp" break; - case 488: /* type_specifier_nonarray: IMAGECUBE */ -#line 3281 "MachineIndependent/glslang.y" + case 513: /* type_specifier_nonarray: IMAGECUBE */ +#line 3422 "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 10654 "MachineIndependent/glslang_tab.cpp" +#line 11322 "MachineIndependent/glslang_tab.cpp" break; - case 489: /* type_specifier_nonarray: F16IMAGECUBE */ -#line 3286 "MachineIndependent/glslang.y" + case 514: /* type_specifier_nonarray: F16IMAGECUBE */ +#line 3427 "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 10665 "MachineIndependent/glslang_tab.cpp" +#line 11333 "MachineIndependent/glslang_tab.cpp" break; - case 490: /* type_specifier_nonarray: IIMAGECUBE */ -#line 3292 "MachineIndependent/glslang.y" + case 515: /* type_specifier_nonarray: IIMAGECUBE */ +#line 3433 "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 10675 "MachineIndependent/glslang_tab.cpp" +#line 11343 "MachineIndependent/glslang_tab.cpp" break; - case 491: /* type_specifier_nonarray: UIMAGECUBE */ -#line 3297 "MachineIndependent/glslang.y" + case 516: /* type_specifier_nonarray: UIMAGECUBE */ +#line 3438 "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 10685 "MachineIndependent/glslang_tab.cpp" +#line 11353 "MachineIndependent/glslang_tab.cpp" break; - case 492: /* type_specifier_nonarray: IMAGEBUFFER */ -#line 3302 "MachineIndependent/glslang.y" + case 517: /* type_specifier_nonarray: IMAGEBUFFER */ +#line 3443 "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 10695 "MachineIndependent/glslang_tab.cpp" +#line 11363 "MachineIndependent/glslang_tab.cpp" break; - case 493: /* type_specifier_nonarray: F16IMAGEBUFFER */ -#line 3307 "MachineIndependent/glslang.y" + case 518: /* type_specifier_nonarray: F16IMAGEBUFFER */ +#line 3448 "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 10706 "MachineIndependent/glslang_tab.cpp" +#line 11374 "MachineIndependent/glslang_tab.cpp" break; - case 494: /* type_specifier_nonarray: IIMAGEBUFFER */ -#line 3313 "MachineIndependent/glslang.y" + case 519: /* type_specifier_nonarray: IIMAGEBUFFER */ +#line 3454 "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 10716 "MachineIndependent/glslang_tab.cpp" +#line 11384 "MachineIndependent/glslang_tab.cpp" break; - case 495: /* type_specifier_nonarray: UIMAGEBUFFER */ -#line 3318 "MachineIndependent/glslang.y" + case 520: /* type_specifier_nonarray: UIMAGEBUFFER */ +#line 3459 "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 10726 "MachineIndependent/glslang_tab.cpp" +#line 11394 "MachineIndependent/glslang_tab.cpp" break; - case 496: /* type_specifier_nonarray: IMAGE1DARRAY */ -#line 3323 "MachineIndependent/glslang.y" + case 521: /* type_specifier_nonarray: IMAGE1DARRAY */ +#line 3464 "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 10736 "MachineIndependent/glslang_tab.cpp" +#line 11404 "MachineIndependent/glslang_tab.cpp" break; - case 497: /* type_specifier_nonarray: F16IMAGE1DARRAY */ -#line 3328 "MachineIndependent/glslang.y" + case 522: /* type_specifier_nonarray: F16IMAGE1DARRAY */ +#line 3469 "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 10747 "MachineIndependent/glslang_tab.cpp" +#line 11415 "MachineIndependent/glslang_tab.cpp" break; - case 498: /* type_specifier_nonarray: IIMAGE1DARRAY */ -#line 3334 "MachineIndependent/glslang.y" + case 523: /* type_specifier_nonarray: IIMAGE1DARRAY */ +#line 3475 "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 10757 "MachineIndependent/glslang_tab.cpp" +#line 11425 "MachineIndependent/glslang_tab.cpp" break; - case 499: /* type_specifier_nonarray: UIMAGE1DARRAY */ -#line 3339 "MachineIndependent/glslang.y" + case 524: /* type_specifier_nonarray: UIMAGE1DARRAY */ +#line 3480 "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 10767 "MachineIndependent/glslang_tab.cpp" +#line 11435 "MachineIndependent/glslang_tab.cpp" break; - case 500: /* type_specifier_nonarray: IMAGE2DARRAY */ -#line 3344 "MachineIndependent/glslang.y" + case 525: /* type_specifier_nonarray: IMAGE2DARRAY */ +#line 3485 "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 10777 "MachineIndependent/glslang_tab.cpp" +#line 11445 "MachineIndependent/glslang_tab.cpp" break; - case 501: /* type_specifier_nonarray: F16IMAGE2DARRAY */ -#line 3349 "MachineIndependent/glslang.y" + case 526: /* type_specifier_nonarray: F16IMAGE2DARRAY */ +#line 3490 "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 10788 "MachineIndependent/glslang_tab.cpp" +#line 11456 "MachineIndependent/glslang_tab.cpp" break; - case 502: /* type_specifier_nonarray: IIMAGE2DARRAY */ -#line 3355 "MachineIndependent/glslang.y" + case 527: /* type_specifier_nonarray: IIMAGE2DARRAY */ +#line 3496 "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 10798 "MachineIndependent/glslang_tab.cpp" +#line 11466 "MachineIndependent/glslang_tab.cpp" break; - case 503: /* type_specifier_nonarray: UIMAGE2DARRAY */ -#line 3360 "MachineIndependent/glslang.y" + case 528: /* type_specifier_nonarray: UIMAGE2DARRAY */ +#line 3501 "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 10808 "MachineIndependent/glslang_tab.cpp" +#line 11476 "MachineIndependent/glslang_tab.cpp" break; - case 504: /* type_specifier_nonarray: IMAGECUBEARRAY */ -#line 3365 "MachineIndependent/glslang.y" + case 529: /* type_specifier_nonarray: IMAGECUBEARRAY */ +#line 3506 "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 10818 "MachineIndependent/glslang_tab.cpp" +#line 11486 "MachineIndependent/glslang_tab.cpp" break; - case 505: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ -#line 3370 "MachineIndependent/glslang.y" + case 530: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ +#line 3511 "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 10829 "MachineIndependent/glslang_tab.cpp" +#line 11497 "MachineIndependent/glslang_tab.cpp" break; - case 506: /* type_specifier_nonarray: IIMAGECUBEARRAY */ -#line 3376 "MachineIndependent/glslang.y" + case 531: /* type_specifier_nonarray: IIMAGECUBEARRAY */ +#line 3517 "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 10839 "MachineIndependent/glslang_tab.cpp" +#line 11507 "MachineIndependent/glslang_tab.cpp" break; - case 507: /* type_specifier_nonarray: UIMAGECUBEARRAY */ -#line 3381 "MachineIndependent/glslang.y" + case 532: /* type_specifier_nonarray: UIMAGECUBEARRAY */ +#line 3522 "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 10849 "MachineIndependent/glslang_tab.cpp" +#line 11517 "MachineIndependent/glslang_tab.cpp" break; - case 508: /* type_specifier_nonarray: IMAGE2DMS */ -#line 3386 "MachineIndependent/glslang.y" + case 533: /* type_specifier_nonarray: IMAGE2DMS */ +#line 3527 "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 10859 "MachineIndependent/glslang_tab.cpp" +#line 11527 "MachineIndependent/glslang_tab.cpp" break; - case 509: /* type_specifier_nonarray: F16IMAGE2DMS */ -#line 3391 "MachineIndependent/glslang.y" + case 534: /* type_specifier_nonarray: F16IMAGE2DMS */ +#line 3532 "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 10870 "MachineIndependent/glslang_tab.cpp" +#line 11538 "MachineIndependent/glslang_tab.cpp" break; - case 510: /* type_specifier_nonarray: IIMAGE2DMS */ -#line 3397 "MachineIndependent/glslang.y" + case 535: /* type_specifier_nonarray: IIMAGE2DMS */ +#line 3538 "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 10880 "MachineIndependent/glslang_tab.cpp" +#line 11548 "MachineIndependent/glslang_tab.cpp" break; - case 511: /* type_specifier_nonarray: UIMAGE2DMS */ -#line 3402 "MachineIndependent/glslang.y" + case 536: /* type_specifier_nonarray: UIMAGE2DMS */ +#line 3543 "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 10890 "MachineIndependent/glslang_tab.cpp" +#line 11558 "MachineIndependent/glslang_tab.cpp" break; - case 512: /* type_specifier_nonarray: IMAGE2DMSARRAY */ -#line 3407 "MachineIndependent/glslang.y" + case 537: /* type_specifier_nonarray: IMAGE2DMSARRAY */ +#line 3548 "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 10900 "MachineIndependent/glslang_tab.cpp" +#line 11568 "MachineIndependent/glslang_tab.cpp" break; - case 513: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ -#line 3412 "MachineIndependent/glslang.y" + case 538: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ +#line 3553 "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 10911 "MachineIndependent/glslang_tab.cpp" +#line 11579 "MachineIndependent/glslang_tab.cpp" break; - case 514: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ -#line 3418 "MachineIndependent/glslang.y" + case 539: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ +#line 3559 "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 10921 "MachineIndependent/glslang_tab.cpp" +#line 11589 "MachineIndependent/glslang_tab.cpp" break; - case 515: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ -#line 3423 "MachineIndependent/glslang.y" + case 540: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ +#line 3564 "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 10931 "MachineIndependent/glslang_tab.cpp" +#line 11599 "MachineIndependent/glslang_tab.cpp" break; - case 516: /* type_specifier_nonarray: I64IMAGE1D */ -#line 3428 "MachineIndependent/glslang.y" + case 541: /* type_specifier_nonarray: I64IMAGE1D */ +#line 3569 "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 10941 "MachineIndependent/glslang_tab.cpp" +#line 11609 "MachineIndependent/glslang_tab.cpp" break; - case 517: /* type_specifier_nonarray: U64IMAGE1D */ -#line 3433 "MachineIndependent/glslang.y" + case 542: /* type_specifier_nonarray: U64IMAGE1D */ +#line 3574 "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 10951 "MachineIndependent/glslang_tab.cpp" +#line 11619 "MachineIndependent/glslang_tab.cpp" break; - case 518: /* type_specifier_nonarray: I64IMAGE2D */ -#line 3438 "MachineIndependent/glslang.y" + case 543: /* type_specifier_nonarray: I64IMAGE2D */ +#line 3579 "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 10961 "MachineIndependent/glslang_tab.cpp" +#line 11629 "MachineIndependent/glslang_tab.cpp" break; - case 519: /* type_specifier_nonarray: U64IMAGE2D */ -#line 3443 "MachineIndependent/glslang.y" + case 544: /* type_specifier_nonarray: U64IMAGE2D */ +#line 3584 "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 10971 "MachineIndependent/glslang_tab.cpp" +#line 11639 "MachineIndependent/glslang_tab.cpp" break; - case 520: /* type_specifier_nonarray: I64IMAGE3D */ -#line 3448 "MachineIndependent/glslang.y" + case 545: /* type_specifier_nonarray: I64IMAGE3D */ +#line 3589 "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 10981 "MachineIndependent/glslang_tab.cpp" +#line 11649 "MachineIndependent/glslang_tab.cpp" break; - case 521: /* type_specifier_nonarray: U64IMAGE3D */ -#line 3453 "MachineIndependent/glslang.y" + case 546: /* type_specifier_nonarray: U64IMAGE3D */ +#line 3594 "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 10991 "MachineIndependent/glslang_tab.cpp" +#line 11659 "MachineIndependent/glslang_tab.cpp" break; - case 522: /* type_specifier_nonarray: I64IMAGE2DRECT */ -#line 3458 "MachineIndependent/glslang.y" + case 547: /* type_specifier_nonarray: I64IMAGE2DRECT */ +#line 3599 "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 11001 "MachineIndependent/glslang_tab.cpp" +#line 11669 "MachineIndependent/glslang_tab.cpp" break; - case 523: /* type_specifier_nonarray: U64IMAGE2DRECT */ -#line 3463 "MachineIndependent/glslang.y" + case 548: /* type_specifier_nonarray: U64IMAGE2DRECT */ +#line 3604 "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 11011 "MachineIndependent/glslang_tab.cpp" +#line 11679 "MachineIndependent/glslang_tab.cpp" break; - case 524: /* type_specifier_nonarray: I64IMAGECUBE */ -#line 3468 "MachineIndependent/glslang.y" + case 549: /* type_specifier_nonarray: I64IMAGECUBE */ +#line 3609 "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 11021 "MachineIndependent/glslang_tab.cpp" +#line 11689 "MachineIndependent/glslang_tab.cpp" break; - case 525: /* type_specifier_nonarray: U64IMAGECUBE */ -#line 3473 "MachineIndependent/glslang.y" + case 550: /* type_specifier_nonarray: U64IMAGECUBE */ +#line 3614 "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 11031 "MachineIndependent/glslang_tab.cpp" +#line 11699 "MachineIndependent/glslang_tab.cpp" break; - case 526: /* type_specifier_nonarray: I64IMAGEBUFFER */ -#line 3478 "MachineIndependent/glslang.y" + case 551: /* type_specifier_nonarray: I64IMAGEBUFFER */ +#line 3619 "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 11041 "MachineIndependent/glslang_tab.cpp" +#line 11709 "MachineIndependent/glslang_tab.cpp" break; - case 527: /* type_specifier_nonarray: U64IMAGEBUFFER */ -#line 3483 "MachineIndependent/glslang.y" + case 552: /* type_specifier_nonarray: U64IMAGEBUFFER */ +#line 3624 "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 11051 "MachineIndependent/glslang_tab.cpp" +#line 11719 "MachineIndependent/glslang_tab.cpp" break; - case 528: /* type_specifier_nonarray: I64IMAGE1DARRAY */ -#line 3488 "MachineIndependent/glslang.y" + case 553: /* type_specifier_nonarray: I64IMAGE1DARRAY */ +#line 3629 "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 11061 "MachineIndependent/glslang_tab.cpp" +#line 11729 "MachineIndependent/glslang_tab.cpp" break; - case 529: /* type_specifier_nonarray: U64IMAGE1DARRAY */ -#line 3493 "MachineIndependent/glslang.y" + case 554: /* type_specifier_nonarray: U64IMAGE1DARRAY */ +#line 3634 "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 11071 "MachineIndependent/glslang_tab.cpp" +#line 11739 "MachineIndependent/glslang_tab.cpp" break; - case 530: /* type_specifier_nonarray: I64IMAGE2DARRAY */ -#line 3498 "MachineIndependent/glslang.y" + case 555: /* type_specifier_nonarray: I64IMAGE2DARRAY */ +#line 3639 "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 11081 "MachineIndependent/glslang_tab.cpp" +#line 11749 "MachineIndependent/glslang_tab.cpp" break; - case 531: /* type_specifier_nonarray: U64IMAGE2DARRAY */ -#line 3503 "MachineIndependent/glslang.y" + case 556: /* type_specifier_nonarray: U64IMAGE2DARRAY */ +#line 3644 "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 11091 "MachineIndependent/glslang_tab.cpp" +#line 11759 "MachineIndependent/glslang_tab.cpp" break; - case 532: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ -#line 3508 "MachineIndependent/glslang.y" + case 557: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ +#line 3649 "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 11101 "MachineIndependent/glslang_tab.cpp" +#line 11769 "MachineIndependent/glslang_tab.cpp" break; - case 533: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ -#line 3513 "MachineIndependent/glslang.y" + case 558: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ +#line 3654 "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 11111 "MachineIndependent/glslang_tab.cpp" +#line 11779 "MachineIndependent/glslang_tab.cpp" break; - case 534: /* type_specifier_nonarray: I64IMAGE2DMS */ -#line 3518 "MachineIndependent/glslang.y" + case 559: /* type_specifier_nonarray: I64IMAGE2DMS */ +#line 3659 "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 11121 "MachineIndependent/glslang_tab.cpp" +#line 11789 "MachineIndependent/glslang_tab.cpp" break; - case 535: /* type_specifier_nonarray: U64IMAGE2DMS */ -#line 3523 "MachineIndependent/glslang.y" + case 560: /* type_specifier_nonarray: U64IMAGE2DMS */ +#line 3664 "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 11131 "MachineIndependent/glslang_tab.cpp" +#line 11799 "MachineIndependent/glslang_tab.cpp" break; - case 536: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ -#line 3528 "MachineIndependent/glslang.y" + case 561: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ +#line 3669 "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 11141 "MachineIndependent/glslang_tab.cpp" +#line 11809 "MachineIndependent/glslang_tab.cpp" break; - case 537: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ -#line 3533 "MachineIndependent/glslang.y" + case 562: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ +#line 3674 "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 11151 "MachineIndependent/glslang_tab.cpp" +#line 11819 "MachineIndependent/glslang_tab.cpp" break; - case 538: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ -#line 3538 "MachineIndependent/glslang.y" + case 563: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ +#line 3679 "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 11162 "MachineIndependent/glslang_tab.cpp" +#line 11830 "MachineIndependent/glslang_tab.cpp" break; - case 539: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ -#line 3544 "MachineIndependent/glslang.y" + case 564: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ +#line 3685 "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 11173 "MachineIndependent/glslang_tab.cpp" +#line 11841 "MachineIndependent/glslang_tab.cpp" break; - case 540: /* type_specifier_nonarray: ATTACHMENTEXT */ -#line 3550 "MachineIndependent/glslang.y" + case 565: /* type_specifier_nonarray: ATTACHMENTEXT */ +#line 3691 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setAttachmentEXT(EbtFloat); } -#line 11184 "MachineIndependent/glslang_tab.cpp" +#line 11852 "MachineIndependent/glslang_tab.cpp" break; - case 541: /* type_specifier_nonarray: IATTACHMENTEXT */ -#line 3556 "MachineIndependent/glslang.y" + case 566: /* type_specifier_nonarray: IATTACHMENTEXT */ +#line 3697 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setAttachmentEXT(EbtInt); } -#line 11195 "MachineIndependent/glslang_tab.cpp" +#line 11863 "MachineIndependent/glslang_tab.cpp" break; - case 542: /* type_specifier_nonarray: UATTACHMENTEXT */ -#line 3562 "MachineIndependent/glslang.y" + case 567: /* type_specifier_nonarray: UATTACHMENTEXT */ +#line 3703 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setAttachmentEXT(EbtUint); } -#line 11206 "MachineIndependent/glslang_tab.cpp" +#line 11874 "MachineIndependent/glslang_tab.cpp" break; - case 543: /* type_specifier_nonarray: SUBPASSINPUT */ -#line 3568 "MachineIndependent/glslang.y" + case 568: /* type_specifier_nonarray: SUBPASSINPUT */ +#line 3709 "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 11217 "MachineIndependent/glslang_tab.cpp" +#line 11885 "MachineIndependent/glslang_tab.cpp" break; - case 544: /* type_specifier_nonarray: SUBPASSINPUTMS */ -#line 3574 "MachineIndependent/glslang.y" + case 569: /* type_specifier_nonarray: SUBPASSINPUTMS */ +#line 3715 "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 11228 "MachineIndependent/glslang_tab.cpp" +#line 11896 "MachineIndependent/glslang_tab.cpp" break; - case 545: /* type_specifier_nonarray: F16SUBPASSINPUT */ -#line 3580 "MachineIndependent/glslang.y" + case 570: /* type_specifier_nonarray: F16SUBPASSINPUT */ +#line 3721 "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"); @@ -11236,11 +11904,11 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 11240 "MachineIndependent/glslang_tab.cpp" +#line 11908 "MachineIndependent/glslang_tab.cpp" break; - case 546: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ -#line 3587 "MachineIndependent/glslang.y" + case 571: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ +#line 3728 "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"); @@ -11248,55 +11916,55 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 11252 "MachineIndependent/glslang_tab.cpp" +#line 11920 "MachineIndependent/glslang_tab.cpp" break; - case 547: /* type_specifier_nonarray: ISUBPASSINPUT */ -#line 3594 "MachineIndependent/glslang.y" + case 572: /* type_specifier_nonarray: ISUBPASSINPUT */ +#line 3735 "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 11263 "MachineIndependent/glslang_tab.cpp" +#line 11931 "MachineIndependent/glslang_tab.cpp" break; - case 548: /* type_specifier_nonarray: ISUBPASSINPUTMS */ -#line 3600 "MachineIndependent/glslang.y" + case 573: /* type_specifier_nonarray: ISUBPASSINPUTMS */ +#line 3741 "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 11274 "MachineIndependent/glslang_tab.cpp" +#line 11942 "MachineIndependent/glslang_tab.cpp" break; - case 549: /* type_specifier_nonarray: USUBPASSINPUT */ -#line 3606 "MachineIndependent/glslang.y" + case 574: /* type_specifier_nonarray: USUBPASSINPUT */ +#line 3747 "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 11285 "MachineIndependent/glslang_tab.cpp" +#line 11953 "MachineIndependent/glslang_tab.cpp" break; - case 550: /* type_specifier_nonarray: USUBPASSINPUTMS */ -#line 3612 "MachineIndependent/glslang.y" + case 575: /* type_specifier_nonarray: USUBPASSINPUTMS */ +#line 3753 "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 11296 "MachineIndependent/glslang_tab.cpp" +#line 11964 "MachineIndependent/glslang_tab.cpp" break; - case 551: /* type_specifier_nonarray: FCOOPMATNV */ -#line 3618 "MachineIndependent/glslang.y" + case 576: /* type_specifier_nonarray: FCOOPMATNV */ +#line 3759 "MachineIndependent/glslang.y" { parseContext.fcoopmatCheckNV((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); @@ -11304,11 +11972,11 @@ yyreduce: (yyval.interm.type).coopmatNV = true; (yyval.interm.type).coopmatKHR = false; } -#line 11308 "MachineIndependent/glslang_tab.cpp" +#line 11976 "MachineIndependent/glslang_tab.cpp" break; - case 552: /* type_specifier_nonarray: ICOOPMATNV */ -#line 3625 "MachineIndependent/glslang.y" + case 577: /* type_specifier_nonarray: ICOOPMATNV */ +#line 3766 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); @@ -11316,11 +11984,11 @@ yyreduce: (yyval.interm.type).coopmatNV = true; (yyval.interm.type).coopmatKHR = false; } -#line 11320 "MachineIndependent/glslang_tab.cpp" +#line 11988 "MachineIndependent/glslang_tab.cpp" break; - case 553: /* type_specifier_nonarray: UCOOPMATNV */ -#line 3632 "MachineIndependent/glslang.y" + case 578: /* type_specifier_nonarray: UCOOPMATNV */ +#line 3773 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); @@ -11328,11 +11996,11 @@ yyreduce: (yyval.interm.type).coopmatNV = true; (yyval.interm.type).coopmatKHR = false; } -#line 11332 "MachineIndependent/glslang_tab.cpp" +#line 12000 "MachineIndependent/glslang_tab.cpp" break; - case 554: /* type_specifier_nonarray: COOPMAT */ -#line 3639 "MachineIndependent/glslang.y" + case 579: /* type_specifier_nonarray: COOPMAT */ +#line 3780 "MachineIndependent/glslang.y" { parseContext.coopmatCheck((yyvsp[0].lex).loc, "coopmat", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); @@ -11340,110 +12008,110 @@ yyreduce: (yyval.interm.type).coopmatNV = false; (yyval.interm.type).coopmatKHR = true; } -#line 11344 "MachineIndependent/glslang_tab.cpp" +#line 12012 "MachineIndependent/glslang_tab.cpp" break; - case 555: /* type_specifier_nonarray: TENSORLAYOUTNV */ -#line 3646 "MachineIndependent/glslang.y" + case 580: /* type_specifier_nonarray: TENSORLAYOUTNV */ +#line 3787 "MachineIndependent/glslang.y" { parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorLayoutNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtTensorLayoutNV; } -#line 11354 "MachineIndependent/glslang_tab.cpp" +#line 12022 "MachineIndependent/glslang_tab.cpp" break; - case 556: /* type_specifier_nonarray: TENSORVIEWNV */ -#line 3651 "MachineIndependent/glslang.y" + case 581: /* type_specifier_nonarray: TENSORVIEWNV */ +#line 3792 "MachineIndependent/glslang.y" { parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorViewNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtTensorViewNV; } -#line 11364 "MachineIndependent/glslang_tab.cpp" +#line 12032 "MachineIndependent/glslang_tab.cpp" break; - case 557: /* type_specifier_nonarray: FUNCTION */ -#line 3656 "MachineIndependent/glslang.y" + case 582: /* type_specifier_nonarray: FUNCTION */ +#line 3797 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).basicType = EbtFunction; } -#line 11373 "MachineIndependent/glslang_tab.cpp" +#line 12041 "MachineIndependent/glslang_tab.cpp" break; - case 558: /* type_specifier_nonarray: COOPVECNV */ -#line 3660 "MachineIndependent/glslang.y" + case 583: /* type_specifier_nonarray: COOPVECNV */ +#line 3801 "MachineIndependent/glslang.y" { parseContext.coopvecCheck((yyvsp[0].lex).loc, "coopvecNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtCoopvecNV; (yyval.interm.type).coopvecNV = true; } -#line 11384 "MachineIndependent/glslang_tab.cpp" +#line 12052 "MachineIndependent/glslang_tab.cpp" break; - case 559: /* type_specifier_nonarray: TENSORARM */ -#line 3666 "MachineIndependent/glslang.y" + case 584: /* type_specifier_nonarray: TENSORARM */ +#line 3807 "MachineIndependent/glslang.y" { parseContext.tensorCheckARM((yyvsp[0].lex).loc, "tensorARM", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).tensorRankARM = 1; // placeholder value (yyval.interm.type).basicType = EbtTensorARM; } -#line 11395 "MachineIndependent/glslang_tab.cpp" +#line 12063 "MachineIndependent/glslang_tab.cpp" break; - case 560: /* type_specifier_nonarray: VECTOR */ -#line 3672 "MachineIndependent/glslang.y" + case 585: /* type_specifier_nonarray: VECTOR */ +#line 3813 "MachineIndependent/glslang.y" { parseContext.longVectorCheck((yyvsp[0].lex).loc, "vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtLongVector; (yyval.interm.type).longVector = true; } -#line 11406 "MachineIndependent/glslang_tab.cpp" +#line 12074 "MachineIndependent/glslang_tab.cpp" break; - case 561: /* type_specifier_nonarray: spirv_type_specifier */ -#line 3678 "MachineIndependent/glslang.y" + case 586: /* type_specifier_nonarray: spirv_type_specifier */ +#line 3819 "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 11415 "MachineIndependent/glslang_tab.cpp" +#line 12083 "MachineIndependent/glslang_tab.cpp" break; - case 562: /* type_specifier_nonarray: HITOBJECTNV */ -#line 3682 "MachineIndependent/glslang.y" + case 587: /* type_specifier_nonarray: HITOBJECTNV */ +#line 3823 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtHitObjectNV; } -#line 11424 "MachineIndependent/glslang_tab.cpp" +#line 12092 "MachineIndependent/glslang_tab.cpp" break; - case 563: /* type_specifier_nonarray: HITOBJECTEXT */ -#line 3686 "MachineIndependent/glslang.y" + case 588: /* type_specifier_nonarray: HITOBJECTEXT */ +#line 3827 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtHitObjectEXT; } -#line 11433 "MachineIndependent/glslang_tab.cpp" +#line 12101 "MachineIndependent/glslang_tab.cpp" break; - case 564: /* type_specifier_nonarray: struct_specifier */ -#line 3690 "MachineIndependent/glslang.y" + case 589: /* type_specifier_nonarray: struct_specifier */ +#line 3831 "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 11443 "MachineIndependent/glslang_tab.cpp" +#line 12111 "MachineIndependent/glslang_tab.cpp" break; - case 565: /* type_specifier_nonarray: TYPE_NAME */ -#line 3695 "MachineIndependent/glslang.y" + case 590: /* type_specifier_nonarray: TYPE_NAME */ +#line 3836 "MachineIndependent/glslang.y" { // // This is for user defined type names. The lexical phase looked up the @@ -11454,50 +12122,52 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtStruct; (yyval.interm.type).userDef = &structure; + if (structure.getQualifier().isBufferType()) + (yyval.interm.type).qualifier = structure.getQualifier(); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 11461 "MachineIndependent/glslang_tab.cpp" +#line 12131 "MachineIndependent/glslang_tab.cpp" break; - case 566: /* precision_qualifier: HIGH_PRECISION */ -#line 3711 "MachineIndependent/glslang.y" + case 591: /* precision_qualifier: HIGH_PRECISION */ +#line 3854 "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 11471 "MachineIndependent/glslang_tab.cpp" +#line 12141 "MachineIndependent/glslang_tab.cpp" break; - case 567: /* precision_qualifier: MEDIUM_PRECISION */ -#line 3716 "MachineIndependent/glslang.y" + case 592: /* precision_qualifier: MEDIUM_PRECISION */ +#line 3859 "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 11481 "MachineIndependent/glslang_tab.cpp" +#line 12151 "MachineIndependent/glslang_tab.cpp" break; - case 568: /* precision_qualifier: LOW_PRECISION */ -#line 3721 "MachineIndependent/glslang.y" + case 593: /* precision_qualifier: LOW_PRECISION */ +#line 3864 "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 11491 "MachineIndependent/glslang_tab.cpp" +#line 12161 "MachineIndependent/glslang_tab.cpp" break; - case 569: /* $@3: %empty */ -#line 3729 "MachineIndependent/glslang.y" + case 594: /* $@3: %empty */ +#line 3872 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 11497 "MachineIndependent/glslang_tab.cpp" +#line 12167 "MachineIndependent/glslang_tab.cpp" break; - case 570: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ -#line 3729 "MachineIndependent/glslang.y" + case 595: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ +#line 3872 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure); @@ -11514,17 +12184,17 @@ yyreduce: (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 11518 "MachineIndependent/glslang_tab.cpp" +#line 12188 "MachineIndependent/glslang_tab.cpp" break; - case 571: /* $@4: %empty */ -#line 3745 "MachineIndependent/glslang.y" + case 596: /* $@4: %empty */ +#line 3888 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 11524 "MachineIndependent/glslang_tab.cpp" +#line 12194 "MachineIndependent/glslang_tab.cpp" break; - case 572: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ -#line 3745 "MachineIndependent/glslang.y" + case 597: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ +#line 3888 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); @@ -11532,28 +12202,20 @@ yyreduce: (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 11536 "MachineIndependent/glslang_tab.cpp" +#line 12206 "MachineIndependent/glslang_tab.cpp" break; - case 573: /* struct_declaration_list: struct_declaration_without_heap */ -#line 3755 "MachineIndependent/glslang.y" - { + case 598: /* struct_declaration_list: struct_declaration */ +#line 3898 "MachineIndependent/glslang.y" + { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 11544 "MachineIndependent/glslang_tab.cpp" +#line 12214 "MachineIndependent/glslang_tab.cpp" break; - case 574: /* struct_declaration_list: struct_declaration_with_heap */ -#line 3758 "MachineIndependent/glslang.y" - { - (yyval.interm.typeList) = (yyvsp[0].interm.typeList); - } -#line 11552 "MachineIndependent/glslang_tab.cpp" - break; - - case 575: /* struct_declaration_list: struct_declaration_with_heap struct_declaration_without_heap */ -#line 3761 "MachineIndependent/glslang.y" - { + case 599: /* struct_declaration_list: struct_declaration_list struct_declaration */ +#line 3901 "MachineIndependent/glslang.y" + { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) { @@ -11563,26 +12225,19 @@ yyreduce: (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 11567 "MachineIndependent/glslang_tab.cpp" +#line 12229 "MachineIndependent/glslang_tab.cpp" break; - case 576: /* struct_declaration_list: struct_declaration_without_heap struct_declaration_with_heap */ -#line 3771 "MachineIndependent/glslang.y" - { - (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); - for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { - for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) { - if ((*(yyval.interm.typeList))[j].type->getFieldName() == (*(yyvsp[0].interm.typeList))[i].type->getFieldName()) - parseContext.error((*(yyvsp[0].interm.typeList))[i].loc, "duplicate member name:", "", (*(yyvsp[0].interm.typeList))[i].type->getFieldName().c_str()); - } - (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); - } + case 600: /* struct_declaration: struct_declaration_no_inline_block */ +#line 3914 "MachineIndependent/glslang.y" + { + (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 11582 "MachineIndependent/glslang_tab.cpp" +#line 12237 "MachineIndependent/glslang_tab.cpp" break; - case 577: /* struct_declaration_with_heap: block_heap_inner_structure struct_declarator_list SEMICOLON */ -#line 3784 "MachineIndependent/glslang.y" + case 601: /* struct_declaration: block_heap_inner_structure struct_declarator_list SEMICOLON */ +#line 3917 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType); @@ -11597,43 +12252,44 @@ yyreduce: (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 11601 "MachineIndependent/glslang_tab.cpp" +#line 12256 "MachineIndependent/glslang_tab.cpp" break; - case 578: /* $@5: %empty */ -#line 3801 "MachineIndependent/glslang.y" + case 602: /* $@5: %empty */ +#line 3934 "MachineIndependent/glslang.y" { parseContext.nestedBlockCheck((yyvsp[-1].interm.type).loc, true); } -#line 11607 "MachineIndependent/glslang_tab.cpp" +#line 12262 "MachineIndependent/glslang_tab.cpp" break; - case 579: /* block_heap_inner_structure: type_qualifier LEFT_BRACE $@5 struct_declaration_without_heap RIGHT_BRACE */ -#line 3801 "MachineIndependent/glslang.y" - { + case 603: /* block_heap_inner_structure: type_qualifier LEFT_BRACE $@5 struct_declaration_no_inline_block_list RIGHT_BRACE */ +#line 3934 "MachineIndependent/glslang.y" + { --parseContext.blockNestingLevel; parseContext.globalQualifierFixCheck((yyvsp[-4].interm.type).loc, (yyvsp[-4].interm.type).qualifier); parseContext.checkNoShaderLayouts((yyvsp[-4].interm.type).loc, (yyvsp[-4].interm.type).shaderQualifiers); (yyval.interm.type).init((yyvsp[-4].interm.type).loc); - TType* innerStructure = new TType((yyvsp[-1].interm.typeList), TString("")); - (yyval.interm.type).basicType = EbtBlock; - (yyval.interm.type).userDef = innerStructure; - (yyval.interm.type).qualifier = (yyvsp[-4].interm.type).qualifier; + TType* innerStructure = new TType((yyvsp[-1].interm.typeList), TString(""), (yyvsp[-4].interm.type).qualifier); + if (! (yyvsp[-4].interm.type).qualifier.hasBufferReference()) + parseContext.error((yyvsp[-4].interm.type).loc, "only buffer_reference blocks can be declared inline inside a heap block", "", ""); + TType* referenceType = new TType(EbtReference, *innerStructure, TString("")); + (yyval.interm.type).basicType = EbtReference; + (yyval.interm.type).userDef = referenceType; (yyval.interm.type).qualifier.layoutDescriptorHeap = true; - (yyval.interm.type).qualifier.layoutDescriptorInnerBlock = true; } -#line 11624 "MachineIndependent/glslang_tab.cpp" +#line 12280 "MachineIndependent/glslang_tab.cpp" break; - case 580: /* struct_declaration_without_heap: struct_declaration */ -#line 3816 "MachineIndependent/glslang.y" - { + case 604: /* struct_declaration_no_inline_block_list: struct_declaration_no_inline_block */ +#line 3950 "MachineIndependent/glslang.y" + { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 11632 "MachineIndependent/glslang_tab.cpp" +#line 12288 "MachineIndependent/glslang_tab.cpp" break; - case 581: /* struct_declaration_without_heap: struct_declaration_without_heap struct_declaration */ -#line 3819 "MachineIndependent/glslang.y" - { + case 605: /* struct_declaration_no_inline_block_list: struct_declaration_no_inline_block_list struct_declaration_no_inline_block */ +#line 3953 "MachineIndependent/glslang.y" + { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) { @@ -11643,11 +12299,11 @@ yyreduce: (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 11647 "MachineIndependent/glslang_tab.cpp" +#line 12303 "MachineIndependent/glslang_tab.cpp" break; - case 582: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ -#line 3832 "MachineIndependent/glslang.y" + case 606: /* struct_declaration_no_inline_block: type_specifier struct_declarator_list SEMICOLON */ +#line 3966 "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"); @@ -11670,11 +12326,11 @@ yyreduce: (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 11674 "MachineIndependent/glslang_tab.cpp" +#line 12330 "MachineIndependent/glslang_tab.cpp" break; - case 583: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ -#line 3854 "MachineIndependent/glslang.y" + case 607: /* struct_declaration_no_inline_block: type_qualifier type_specifier struct_declarator_list SEMICOLON */ +#line 3988 "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"); @@ -11699,38 +12355,38 @@ yyreduce: (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 11703 "MachineIndependent/glslang_tab.cpp" +#line 12359 "MachineIndependent/glslang_tab.cpp" break; - case 584: /* struct_declarator_list: struct_declarator */ -#line 3881 "MachineIndependent/glslang.y" + case 608: /* struct_declarator_list: struct_declarator */ +#line 4015 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 11712 "MachineIndependent/glslang_tab.cpp" +#line 12368 "MachineIndependent/glslang_tab.cpp" break; - case 585: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ -#line 3885 "MachineIndependent/glslang.y" + case 609: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ +#line 4019 "MachineIndependent/glslang.y" { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 11720 "MachineIndependent/glslang_tab.cpp" +#line 12376 "MachineIndependent/glslang_tab.cpp" break; - case 586: /* struct_declarator: IDENTIFIER */ -#line 3891 "MachineIndependent/glslang.y" + case 610: /* struct_declarator: IDENTIFIER */ +#line 4025 "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 11730 "MachineIndependent/glslang_tab.cpp" +#line 12386 "MachineIndependent/glslang_tab.cpp" break; - case 587: /* struct_declarator: IDENTIFIER array_specifier */ -#line 3896 "MachineIndependent/glslang.y" + case 611: /* struct_declarator: IDENTIFIER array_specifier */ +#line 4030 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes); @@ -11739,168 +12395,168 @@ yyreduce: (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 11743 "MachineIndependent/glslang_tab.cpp" +#line 12399 "MachineIndependent/glslang_tab.cpp" break; - case 588: /* initializer: assignment_expression */ -#line 3907 "MachineIndependent/glslang.y" + case 612: /* initializer: assignment_expression */ +#line 4041 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 11751 "MachineIndependent/glslang_tab.cpp" +#line 12407 "MachineIndependent/glslang_tab.cpp" break; - case 589: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ -#line 3910 "MachineIndependent/glslang.y" + case 613: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ +#line 4044 "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 11762 "MachineIndependent/glslang_tab.cpp" +#line 12418 "MachineIndependent/glslang_tab.cpp" break; - case 590: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ -#line 3916 "MachineIndependent/glslang.y" + case 614: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ +#line 4050 "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 11773 "MachineIndependent/glslang_tab.cpp" +#line 12429 "MachineIndependent/glslang_tab.cpp" break; - case 591: /* initializer: LEFT_BRACE RIGHT_BRACE */ -#line 3922 "MachineIndependent/glslang.y" + case 615: /* initializer: LEFT_BRACE RIGHT_BRACE */ +#line 4056 "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 11784 "MachineIndependent/glslang_tab.cpp" +#line 12440 "MachineIndependent/glslang_tab.cpp" break; - case 592: /* initializer_list: initializer */ -#line 3931 "MachineIndependent/glslang.y" + case 616: /* initializer_list: initializer */ +#line 4065 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 11792 "MachineIndependent/glslang_tab.cpp" +#line 12448 "MachineIndependent/glslang_tab.cpp" break; - case 593: /* initializer_list: initializer_list COMMA initializer */ -#line 3934 "MachineIndependent/glslang.y" + case 617: /* initializer_list: initializer_list COMMA initializer */ +#line 4068 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 11800 "MachineIndependent/glslang_tab.cpp" +#line 12456 "MachineIndependent/glslang_tab.cpp" break; - case 594: /* declaration_statement: declaration */ -#line 3940 "MachineIndependent/glslang.y" + case 618: /* declaration_statement: declaration */ +#line 4074 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11806 "MachineIndependent/glslang_tab.cpp" +#line 12462 "MachineIndependent/glslang_tab.cpp" break; - case 595: /* statement: compound_statement */ -#line 3944 "MachineIndependent/glslang.y" + case 619: /* statement: compound_statement */ +#line 4078 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11812 "MachineIndependent/glslang_tab.cpp" +#line 12468 "MachineIndependent/glslang_tab.cpp" break; - case 596: /* statement: simple_statement */ -#line 3945 "MachineIndependent/glslang.y" + case 620: /* statement: simple_statement */ +#line 4079 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11818 "MachineIndependent/glslang_tab.cpp" +#line 12474 "MachineIndependent/glslang_tab.cpp" break; - case 597: /* simple_statement: declaration_statement */ -#line 3951 "MachineIndependent/glslang.y" + case 621: /* simple_statement: declaration_statement */ +#line 4085 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11824 "MachineIndependent/glslang_tab.cpp" +#line 12480 "MachineIndependent/glslang_tab.cpp" break; - case 598: /* simple_statement: expression_statement */ -#line 3952 "MachineIndependent/glslang.y" + case 622: /* simple_statement: expression_statement */ +#line 4086 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11830 "MachineIndependent/glslang_tab.cpp" +#line 12486 "MachineIndependent/glslang_tab.cpp" break; - case 599: /* simple_statement: selection_statement */ -#line 3953 "MachineIndependent/glslang.y" + case 623: /* simple_statement: selection_statement */ +#line 4087 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11836 "MachineIndependent/glslang_tab.cpp" +#line 12492 "MachineIndependent/glslang_tab.cpp" break; - case 600: /* simple_statement: switch_statement */ -#line 3954 "MachineIndependent/glslang.y" + case 624: /* simple_statement: switch_statement */ +#line 4088 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11842 "MachineIndependent/glslang_tab.cpp" +#line 12498 "MachineIndependent/glslang_tab.cpp" break; - case 601: /* simple_statement: case_label */ -#line 3955 "MachineIndependent/glslang.y" + case 625: /* simple_statement: case_label */ +#line 4089 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11848 "MachineIndependent/glslang_tab.cpp" +#line 12504 "MachineIndependent/glslang_tab.cpp" break; - case 602: /* simple_statement: iteration_statement */ -#line 3956 "MachineIndependent/glslang.y" + case 626: /* simple_statement: iteration_statement */ +#line 4090 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11854 "MachineIndependent/glslang_tab.cpp" +#line 12510 "MachineIndependent/glslang_tab.cpp" break; - case 603: /* simple_statement: jump_statement */ -#line 3957 "MachineIndependent/glslang.y" + case 627: /* simple_statement: jump_statement */ +#line 4091 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11860 "MachineIndependent/glslang_tab.cpp" +#line 12516 "MachineIndependent/glslang_tab.cpp" break; - case 604: /* simple_statement: demote_statement */ -#line 3958 "MachineIndependent/glslang.y" + case 628: /* simple_statement: demote_statement */ +#line 4092 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11866 "MachineIndependent/glslang_tab.cpp" +#line 12522 "MachineIndependent/glslang_tab.cpp" break; - case 605: /* demote_statement: DEMOTE SEMICOLON */ -#line 3962 "MachineIndependent/glslang.y" + case 629: /* demote_statement: DEMOTE SEMICOLON */ +#line 4096 "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 11876 "MachineIndependent/glslang_tab.cpp" +#line 12532 "MachineIndependent/glslang_tab.cpp" break; - case 606: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ -#line 3970 "MachineIndependent/glslang.y" + case 630: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ +#line 4104 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11882 "MachineIndependent/glslang_tab.cpp" +#line 12538 "MachineIndependent/glslang_tab.cpp" break; - case 607: /* $@6: %empty */ -#line 3971 "MachineIndependent/glslang.y" + case 631: /* $@6: %empty */ +#line 4105 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 11891 "MachineIndependent/glslang_tab.cpp" +#line 12547 "MachineIndependent/glslang_tab.cpp" break; - case 608: /* $@7: %empty */ -#line 3975 "MachineIndependent/glslang.y" + case 632: /* $@7: %empty */ +#line 4109 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 11900 "MachineIndependent/glslang_tab.cpp" +#line 12556 "MachineIndependent/glslang_tab.cpp" break; - case 609: /* compound_statement: LEFT_BRACE $@6 statement_list $@7 RIGHT_BRACE */ -#line 3979 "MachineIndependent/glslang.y" + case 633: /* compound_statement: LEFT_BRACE $@6 statement_list $@7 RIGHT_BRACE */ +#line 4113 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate()) { (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence); @@ -11908,69 +12564,69 @@ yyreduce: } (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode); } -#line 11912 "MachineIndependent/glslang_tab.cpp" +#line 12568 "MachineIndependent/glslang_tab.cpp" break; - case 610: /* statement_no_new_scope: compound_statement_no_new_scope */ -#line 3989 "MachineIndependent/glslang.y" + case 634: /* statement_no_new_scope: compound_statement_no_new_scope */ +#line 4123 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11918 "MachineIndependent/glslang_tab.cpp" +#line 12574 "MachineIndependent/glslang_tab.cpp" break; - case 611: /* statement_no_new_scope: simple_statement */ -#line 3990 "MachineIndependent/glslang.y" + case 635: /* statement_no_new_scope: simple_statement */ +#line 4124 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11924 "MachineIndependent/glslang_tab.cpp" +#line 12580 "MachineIndependent/glslang_tab.cpp" break; - case 612: /* $@8: %empty */ -#line 3994 "MachineIndependent/glslang.y" + case 636: /* $@8: %empty */ +#line 4128 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 11932 "MachineIndependent/glslang_tab.cpp" +#line 12588 "MachineIndependent/glslang_tab.cpp" break; - case 613: /* statement_scoped: $@8 compound_statement */ -#line 3997 "MachineIndependent/glslang.y" + case 637: /* statement_scoped: $@8 compound_statement */ +#line 4131 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11941 "MachineIndependent/glslang_tab.cpp" +#line 12597 "MachineIndependent/glslang_tab.cpp" break; - case 614: /* $@9: %empty */ -#line 4001 "MachineIndependent/glslang.y" + case 638: /* $@9: %empty */ +#line 4135 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11951 "MachineIndependent/glslang_tab.cpp" +#line 12607 "MachineIndependent/glslang_tab.cpp" break; - case 615: /* statement_scoped: $@9 simple_statement */ -#line 4006 "MachineIndependent/glslang.y" + case 639: /* statement_scoped: $@9 simple_statement */ +#line 4140 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11962 "MachineIndependent/glslang_tab.cpp" +#line 12618 "MachineIndependent/glslang_tab.cpp" break; - case 616: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ -#line 4015 "MachineIndependent/glslang.y" + case 640: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ +#line 4149 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11970 "MachineIndependent/glslang_tab.cpp" +#line 12626 "MachineIndependent/glslang_tab.cpp" break; - case 617: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ -#line 4018 "MachineIndependent/glslang.y" + case 641: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ +#line 4152 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate()) { (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence); @@ -11978,11 +12634,11 @@ yyreduce: } (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode); } -#line 11982 "MachineIndependent/glslang_tab.cpp" +#line 12638 "MachineIndependent/glslang_tab.cpp" break; - case 618: /* statement_list: statement */ -#line 4028 "MachineIndependent/glslang.y" + case 642: /* statement_list: statement */ +#line 4162 "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 || @@ -11991,11 +12647,11 @@ yyreduce: (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 11995 "MachineIndependent/glslang_tab.cpp" +#line 12651 "MachineIndependent/glslang_tab.cpp" break; - case 619: /* statement_list: statement_list statement */ -#line 4036 "MachineIndependent/glslang.y" + case 643: /* statement_list: statement_list statement */ +#line 4170 "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)) { @@ -12004,106 +12660,106 @@ yyreduce: } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 12008 "MachineIndependent/glslang_tab.cpp" +#line 12664 "MachineIndependent/glslang_tab.cpp" break; - case 620: /* expression_statement: SEMICOLON */ -#line 4047 "MachineIndependent/glslang.y" + case 644: /* expression_statement: SEMICOLON */ +#line 4181 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 12014 "MachineIndependent/glslang_tab.cpp" +#line 12670 "MachineIndependent/glslang_tab.cpp" break; - case 621: /* expression_statement: expression SEMICOLON */ -#line 4048 "MachineIndependent/glslang.y" + case 645: /* expression_statement: expression SEMICOLON */ +#line 4182 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 12020 "MachineIndependent/glslang_tab.cpp" +#line 12676 "MachineIndependent/glslang_tab.cpp" break; - case 622: /* selection_statement: selection_statement_nonattributed */ -#line 4052 "MachineIndependent/glslang.y" + case 646: /* selection_statement: selection_statement_nonattributed */ +#line 4186 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 12028 "MachineIndependent/glslang_tab.cpp" +#line 12684 "MachineIndependent/glslang_tab.cpp" break; - case 623: /* selection_statement: attribute selection_statement_nonattributed */ -#line 4055 "MachineIndependent/glslang.y" + case 647: /* selection_statement: attribute selection_statement_nonattributed */ +#line 4189 "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 12038 "MachineIndependent/glslang_tab.cpp" +#line 12694 "MachineIndependent/glslang_tab.cpp" break; - case 624: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ -#line 4062 "MachineIndependent/glslang.y" + case 648: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ +#line 4196 "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 12047 "MachineIndependent/glslang_tab.cpp" +#line 12703 "MachineIndependent/glslang_tab.cpp" break; - case 625: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ -#line 4069 "MachineIndependent/glslang.y" + case 649: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ +#line 4203 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 12056 "MachineIndependent/glslang_tab.cpp" +#line 12712 "MachineIndependent/glslang_tab.cpp" break; - case 626: /* selection_rest_statement: statement_scoped */ -#line 4073 "MachineIndependent/glslang.y" + case 650: /* selection_rest_statement: statement_scoped */ +#line 4207 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 12065 "MachineIndependent/glslang_tab.cpp" +#line 12721 "MachineIndependent/glslang_tab.cpp" break; - case 627: /* condition: expression */ -#line 4081 "MachineIndependent/glslang.y" + case 651: /* condition: expression */ +#line 4215 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode); parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)); } -#line 12074 "MachineIndependent/glslang_tab.cpp" +#line 12730 "MachineIndependent/glslang_tab.cpp" break; - case 628: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 4085 "MachineIndependent/glslang.y" + case 652: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 4219 "MachineIndependent/glslang.y" { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); TType type((yyvsp[-3].interm.type)); (yyval.interm.intermNode) = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode)); } -#line 12085 "MachineIndependent/glslang_tab.cpp" +#line 12741 "MachineIndependent/glslang_tab.cpp" break; - case 629: /* switch_statement: switch_statement_nonattributed */ -#line 4094 "MachineIndependent/glslang.y" + case 653: /* switch_statement: switch_statement_nonattributed */ +#line 4228 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 12093 "MachineIndependent/glslang_tab.cpp" +#line 12749 "MachineIndependent/glslang_tab.cpp" break; - case 630: /* switch_statement: attribute switch_statement_nonattributed */ -#line 4097 "MachineIndependent/glslang.y" + case 654: /* switch_statement: attribute switch_statement_nonattributed */ +#line 4231 "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 12103 "MachineIndependent/glslang_tab.cpp" +#line 12759 "MachineIndependent/glslang_tab.cpp" break; - case 631: /* $@10: %empty */ -#line 4104 "MachineIndependent/glslang.y" + case 655: /* $@10: %empty */ +#line 4238 "MachineIndependent/glslang.y" { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -12112,11 +12768,11 @@ yyreduce: parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 12116 "MachineIndependent/glslang_tab.cpp" +#line 12772 "MachineIndependent/glslang_tab.cpp" break; - case 632: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@10 LEFT_BRACE switch_statement_list RIGHT_BRACE */ -#line 4112 "MachineIndependent/glslang.y" + case 656: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@10 LEFT_BRACE switch_statement_list RIGHT_BRACE */ +#line 4246 "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(); @@ -12126,27 +12782,27 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 12130 "MachineIndependent/glslang_tab.cpp" +#line 12786 "MachineIndependent/glslang_tab.cpp" break; - case 633: /* switch_statement_list: %empty */ -#line 4124 "MachineIndependent/glslang.y" + case 657: /* switch_statement_list: %empty */ +#line 4258 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 12138 "MachineIndependent/glslang_tab.cpp" +#line 12794 "MachineIndependent/glslang_tab.cpp" break; - case 634: /* switch_statement_list: statement_list */ -#line 4127 "MachineIndependent/glslang.y" + case 658: /* switch_statement_list: statement_list */ +#line 4261 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 12146 "MachineIndependent/glslang_tab.cpp" +#line 12802 "MachineIndependent/glslang_tab.cpp" break; - case 635: /* case_label: CASE expression COLON */ -#line 4133 "MachineIndependent/glslang.y" + case 659: /* case_label: CASE expression COLON */ +#line 4267 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -12159,11 +12815,11 @@ yyreduce: (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 12163 "MachineIndependent/glslang_tab.cpp" +#line 12819 "MachineIndependent/glslang_tab.cpp" break; - case 636: /* case_label: DEFAULT COLON */ -#line 4145 "MachineIndependent/glslang.y" + case 660: /* case_label: DEFAULT COLON */ +#line 4279 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -12173,30 +12829,30 @@ yyreduce: else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 12177 "MachineIndependent/glslang_tab.cpp" +#line 12833 "MachineIndependent/glslang_tab.cpp" break; - case 637: /* iteration_statement: iteration_statement_nonattributed */ -#line 4157 "MachineIndependent/glslang.y" + case 661: /* iteration_statement: iteration_statement_nonattributed */ +#line 4291 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 12185 "MachineIndependent/glslang_tab.cpp" +#line 12841 "MachineIndependent/glslang_tab.cpp" break; - case 638: /* iteration_statement: attribute iteration_statement_nonattributed */ -#line 4160 "MachineIndependent/glslang.y" + case 662: /* iteration_statement: attribute iteration_statement_nonattributed */ +#line 4294 "MachineIndependent/glslang.y" { - const char * extensions[2] = { E_GL_EXT_control_flow_attributes, E_GL_EXT_control_flow_attributes2 }; - parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 2, extensions, "attribute"); + const char * extensions[3] = { E_GL_EXT_control_flow_attributes, E_GL_EXT_control_flow_attributes2, E_GL_QCOM_multiple_wait_queues }; + parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 3, extensions, "attribute"); parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 12196 "MachineIndependent/glslang_tab.cpp" +#line 12852 "MachineIndependent/glslang_tab.cpp" break; - case 639: /* $@11: %empty */ -#line 4168 "MachineIndependent/glslang.y" + case 663: /* $@11: %empty */ +#line 4302 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -12205,11 +12861,11 @@ yyreduce: ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 12209 "MachineIndependent/glslang_tab.cpp" +#line 12865 "MachineIndependent/glslang_tab.cpp" break; - case 640: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@11 condition RIGHT_PAREN statement_no_new_scope */ -#line 4176 "MachineIndependent/glslang.y" + case 664: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@11 condition RIGHT_PAREN statement_no_new_scope */ +#line 4310 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermNode), 0, true, (yyvsp[-5].lex).loc); @@ -12221,22 +12877,22 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 12225 "MachineIndependent/glslang_tab.cpp" +#line 12881 "MachineIndependent/glslang_tab.cpp" break; - case 641: /* $@12: %empty */ -#line 4187 "MachineIndependent/glslang.y" + case 665: /* $@12: %empty */ +#line 4321 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 12236 "MachineIndependent/glslang_tab.cpp" +#line 12892 "MachineIndependent/glslang_tab.cpp" break; - case 642: /* iteration_statement_nonattributed: DO $@12 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ -#line 4193 "MachineIndependent/glslang.y" + case 666: /* iteration_statement_nonattributed: DO $@12 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ +#line 4327 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -12253,22 +12909,22 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 12257 "MachineIndependent/glslang_tab.cpp" +#line 12913 "MachineIndependent/glslang_tab.cpp" break; - case 643: /* $@13: %empty */ -#line 4209 "MachineIndependent/glslang.y" + case 667: /* $@13: %empty */ +#line 4343 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 12268 "MachineIndependent/glslang_tab.cpp" +#line 12924 "MachineIndependent/glslang_tab.cpp" break; - case 644: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@13 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ -#line 4215 "MachineIndependent/glslang.y" + case 668: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@13 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ +#line 4349 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); @@ -12281,81 +12937,81 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 12285 "MachineIndependent/glslang_tab.cpp" +#line 12941 "MachineIndependent/glslang_tab.cpp" break; - case 645: /* for_init_statement: expression_statement */ -#line 4230 "MachineIndependent/glslang.y" + case 669: /* for_init_statement: expression_statement */ +#line 4364 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 12293 "MachineIndependent/glslang_tab.cpp" +#line 12949 "MachineIndependent/glslang_tab.cpp" break; - case 646: /* for_init_statement: declaration_statement */ -#line 4233 "MachineIndependent/glslang.y" + case 670: /* for_init_statement: declaration_statement */ +#line 4367 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 12301 "MachineIndependent/glslang_tab.cpp" +#line 12957 "MachineIndependent/glslang_tab.cpp" break; - case 647: /* conditionopt: condition */ -#line 4239 "MachineIndependent/glslang.y" + case 671: /* conditionopt: condition */ +#line 4373 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 12309 "MachineIndependent/glslang_tab.cpp" +#line 12965 "MachineIndependent/glslang_tab.cpp" break; - case 648: /* conditionopt: %empty */ -#line 4242 "MachineIndependent/glslang.y" + case 672: /* conditionopt: %empty */ +#line 4376 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 12317 "MachineIndependent/glslang_tab.cpp" +#line 12973 "MachineIndependent/glslang_tab.cpp" break; - case 649: /* for_rest_statement: conditionopt SEMICOLON */ -#line 4248 "MachineIndependent/glslang.y" + case 673: /* for_rest_statement: conditionopt SEMICOLON */ +#line 4382 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 12326 "MachineIndependent/glslang_tab.cpp" +#line 12982 "MachineIndependent/glslang_tab.cpp" break; - case 650: /* for_rest_statement: conditionopt SEMICOLON expression */ -#line 4252 "MachineIndependent/glslang.y" + case 674: /* for_rest_statement: conditionopt SEMICOLON expression */ +#line 4386 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 12335 "MachineIndependent/glslang_tab.cpp" +#line 12991 "MachineIndependent/glslang_tab.cpp" break; - case 651: /* jump_statement: CONTINUE SEMICOLON */ -#line 4259 "MachineIndependent/glslang.y" + case 675: /* jump_statement: CONTINUE SEMICOLON */ +#line 4393 "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 12345 "MachineIndependent/glslang_tab.cpp" +#line 13001 "MachineIndependent/glslang_tab.cpp" break; - case 652: /* jump_statement: BREAK SEMICOLON */ -#line 4264 "MachineIndependent/glslang.y" + case 676: /* jump_statement: BREAK SEMICOLON */ +#line 4398 "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 12355 "MachineIndependent/glslang_tab.cpp" +#line 13011 "MachineIndependent/glslang_tab.cpp" break; - case 653: /* jump_statement: RETURN SEMICOLON */ -#line 4269 "MachineIndependent/glslang.y" + case 677: /* jump_statement: RETURN SEMICOLON */ +#line 4403 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -12363,101 +13019,101 @@ yyreduce: if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 12367 "MachineIndependent/glslang_tab.cpp" +#line 13023 "MachineIndependent/glslang_tab.cpp" break; - case 654: /* jump_statement: RETURN expression SEMICOLON */ -#line 4276 "MachineIndependent/glslang.y" + case 678: /* jump_statement: RETURN expression SEMICOLON */ +#line 4410 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 12375 "MachineIndependent/glslang_tab.cpp" +#line 13031 "MachineIndependent/glslang_tab.cpp" break; - case 655: /* jump_statement: DISCARD SEMICOLON */ -#line 4279 "MachineIndependent/glslang.y" + case 679: /* jump_statement: DISCARD SEMICOLON */ +#line 4413 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 12384 "MachineIndependent/glslang_tab.cpp" +#line 13040 "MachineIndependent/glslang_tab.cpp" break; - case 656: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ -#line 4283 "MachineIndependent/glslang.y" + case 680: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ +#line 4417 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc); } -#line 12393 "MachineIndependent/glslang_tab.cpp" +#line 13049 "MachineIndependent/glslang_tab.cpp" break; - case 657: /* jump_statement: TERMINATE_RAY SEMICOLON */ -#line 4287 "MachineIndependent/glslang.y" + case 681: /* jump_statement: TERMINATE_RAY SEMICOLON */ +#line 4421 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc); } -#line 12402 "MachineIndependent/glslang_tab.cpp" +#line 13058 "MachineIndependent/glslang_tab.cpp" break; - case 658: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ -#line 4291 "MachineIndependent/glslang.y" + case 682: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ +#line 4425 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc); } -#line 12411 "MachineIndependent/glslang_tab.cpp" +#line 13067 "MachineIndependent/glslang_tab.cpp" break; - case 659: /* translation_unit: external_declaration */ -#line 4300 "MachineIndependent/glslang.y" + case 683: /* translation_unit: external_declaration */ +#line 4434 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 12420 "MachineIndependent/glslang_tab.cpp" +#line 13076 "MachineIndependent/glslang_tab.cpp" break; - case 660: /* translation_unit: translation_unit external_declaration */ -#line 4304 "MachineIndependent/glslang.y" + case 684: /* translation_unit: translation_unit external_declaration */ +#line 4438 "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 12431 "MachineIndependent/glslang_tab.cpp" +#line 13087 "MachineIndependent/glslang_tab.cpp" break; - case 661: /* external_declaration: function_definition */ -#line 4313 "MachineIndependent/glslang.y" + case 685: /* external_declaration: function_definition */ +#line 4447 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 12439 "MachineIndependent/glslang_tab.cpp" +#line 13095 "MachineIndependent/glslang_tab.cpp" break; - case 662: /* external_declaration: declaration */ -#line 4316 "MachineIndependent/glslang.y" + case 686: /* external_declaration: declaration */ +#line 4450 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 12447 "MachineIndependent/glslang_tab.cpp" +#line 13103 "MachineIndependent/glslang_tab.cpp" break; - case 663: /* external_declaration: SEMICOLON */ -#line 4319 "MachineIndependent/glslang.y" + case 687: /* external_declaration: SEMICOLON */ +#line 4453 "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 12457 "MachineIndependent/glslang_tab.cpp" +#line 13113 "MachineIndependent/glslang_tab.cpp" break; - case 664: /* $@14: %empty */ -#line 4327 "MachineIndependent/glslang.y" + case 688: /* $@14: %empty */ +#line 4461 "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); @@ -12470,11 +13126,11 @@ yyreduce: ++parseContext.statementNestingLevel; } } -#line 12474 "MachineIndependent/glslang_tab.cpp" +#line 13130 "MachineIndependent/glslang_tab.cpp" break; - case 665: /* function_definition: function_prototype $@14 compound_statement_no_new_scope */ -#line 4339 "MachineIndependent/glslang.y" + case 689: /* function_definition: function_prototype $@14 compound_statement_no_new_scope */ +#line 4473 "MachineIndependent/glslang.y" { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -12482,6 +13138,7 @@ yyreduce: parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode)->getAsAggregate()->setLinkType((yyvsp[-2].interm).function->getLinkType()); + (yyval.interm.intermNode)->getAsAggregate()->setFunctionControl((yyvsp[-2].interm).function->getFunctionControl()); parseContext.intermediate.setAggregateOperator((yyval.interm.intermNode), EOpFunction, (yyvsp[-2].interm).function->getType(), (yyvsp[-2].interm).loc); (yyval.interm.intermNode)->getAsAggregate()->setName((yyvsp[-2].interm).function->getMangledName().c_str()); @@ -12502,228 +13159,244 @@ yyreduce: --parseContext.statementNestingLevel; } } -#line 12506 "MachineIndependent/glslang_tab.cpp" +#line 13163 "MachineIndependent/glslang_tab.cpp" break; - case 666: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ -#line 4369 "MachineIndependent/glslang.y" + case 690: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ +#line 4504 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); } -#line 12514 "MachineIndependent/glslang_tab.cpp" +#line 13171 "MachineIndependent/glslang_tab.cpp" break; - case 667: /* attribute_list: single_attribute */ -#line 4374 "MachineIndependent/glslang.y" + case 691: /* attribute_list: single_attribute */ +#line 4509 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 12522 "MachineIndependent/glslang_tab.cpp" +#line 13179 "MachineIndependent/glslang_tab.cpp" break; - case 668: /* attribute_list: attribute_list COMMA single_attribute */ -#line 4377 "MachineIndependent/glslang.y" + case 692: /* attribute_list: attribute_list COMMA single_attribute */ +#line 4512 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 12530 "MachineIndependent/glslang_tab.cpp" +#line 13187 "MachineIndependent/glslang_tab.cpp" break; - case 669: /* single_attribute: IDENTIFIER */ -#line 4382 "MachineIndependent/glslang.y" + case 693: /* single_attribute: IDENTIFIER */ +#line 4517 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 12538 "MachineIndependent/glslang_tab.cpp" +#line 13195 "MachineIndependent/glslang_tab.cpp" break; - case 670: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ -#line 4385 "MachineIndependent/glslang.y" + case 694: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ +#line 4520 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 12546 "MachineIndependent/glslang_tab.cpp" +#line 13203 "MachineIndependent/glslang_tab.cpp" break; - case 671: /* spirv_requirements_list: spirv_requirements_parameter */ -#line 4390 "MachineIndependent/glslang.y" + case 695: /* single_attribute: INLINE */ +#line 4523 "MachineIndependent/glslang.y" + { + (yyval.interm.attributes) = parseContext.makeAttributes(TString("inline")); + } +#line 13211 "MachineIndependent/glslang_tab.cpp" + break; + + case 696: /* single_attribute: NOINLINE */ +#line 4526 "MachineIndependent/glslang.y" + { + (yyval.interm.attributes) = parseContext.makeAttributes(TString("noinline")); + } +#line 13219 "MachineIndependent/glslang_tab.cpp" + break; + + case 697: /* spirv_requirements_list: spirv_requirements_parameter */ +#line 4531 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq); } -#line 12554 "MachineIndependent/glslang_tab.cpp" +#line 13227 "MachineIndependent/glslang_tab.cpp" break; - case 672: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ -#line 4393 "MachineIndependent/glslang.y" + case 698: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ +#line 4534 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq)); } -#line 12562 "MachineIndependent/glslang_tab.cpp" +#line 13235 "MachineIndependent/glslang_tab.cpp" break; - case 673: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ -#line 4398 "MachineIndependent/glslang.y" + case 699: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ +#line 4539 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr); } -#line 12570 "MachineIndependent/glslang_tab.cpp" +#line 13243 "MachineIndependent/glslang_tab.cpp" break; - case 674: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ -#line 4401 "MachineIndependent/glslang.y" + case 700: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ +#line 4542 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 12578 "MachineIndependent/glslang_tab.cpp" +#line 13251 "MachineIndependent/glslang_tab.cpp" break; - case 675: /* spirv_extension_list: STRING_LITERAL */ -#line 4406 "MachineIndependent/glslang.y" + case 701: /* spirv_extension_list: STRING_LITERAL */ +#line 4547 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 12586 "MachineIndependent/glslang_tab.cpp" +#line 13259 "MachineIndependent/glslang_tab.cpp" break; - case 676: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ -#line 4409 "MachineIndependent/glslang.y" + case 702: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ +#line 4550 "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 12594 "MachineIndependent/glslang_tab.cpp" +#line 13267 "MachineIndependent/glslang_tab.cpp" break; - case 677: /* spirv_capability_list: INTCONSTANT */ -#line 4414 "MachineIndependent/glslang.y" + case 703: /* spirv_capability_list: INTCONSTANT */ +#line 4555 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true)); } -#line 12602 "MachineIndependent/glslang_tab.cpp" +#line 13275 "MachineIndependent/glslang_tab.cpp" break; - case 678: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ -#line 4417 "MachineIndependent/glslang.y" + case 704: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ +#line 4558 "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 12610 "MachineIndependent/glslang_tab.cpp" +#line 13283 "MachineIndependent/glslang_tab.cpp" break; - case 679: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4422 "MachineIndependent/glslang.y" + case 705: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4563 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); (yyval.interm.intermNode) = 0; } -#line 12619 "MachineIndependent/glslang_tab.cpp" +#line 13292 "MachineIndependent/glslang_tab.cpp" break; - case 680: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4426 "MachineIndependent/glslang.y" + case 706: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4567 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); (yyval.interm.intermNode) = 0; } -#line 12629 "MachineIndependent/glslang_tab.cpp" +#line 13302 "MachineIndependent/glslang_tab.cpp" break; - case 681: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4431 "MachineIndependent/glslang.y" + case 707: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ +#line 4572 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 12638 "MachineIndependent/glslang_tab.cpp" +#line 13311 "MachineIndependent/glslang_tab.cpp" break; - case 682: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4435 "MachineIndependent/glslang.y" + case 708: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ +#line 4576 "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 12648 "MachineIndependent/glslang_tab.cpp" +#line 13321 "MachineIndependent/glslang_tab.cpp" break; - case 683: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ -#line 4440 "MachineIndependent/glslang.y" + case 709: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ +#line 4581 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 12657 "MachineIndependent/glslang_tab.cpp" +#line 13330 "MachineIndependent/glslang_tab.cpp" break; - case 684: /* 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 4444 "MachineIndependent/glslang.y" + case 710: /* 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 4585 "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 12667 "MachineIndependent/glslang_tab.cpp" +#line 13340 "MachineIndependent/glslang_tab.cpp" break; - case 685: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ -#line 4451 "MachineIndependent/glslang.y" + case 711: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ +#line 4592 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 12675 "MachineIndependent/glslang_tab.cpp" +#line 13348 "MachineIndependent/glslang_tab.cpp" break; - case 686: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ -#line 4454 "MachineIndependent/glslang.y" + case 712: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ +#line 4595 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 12683 "MachineIndependent/glslang_tab.cpp" +#line 13356 "MachineIndependent/glslang_tab.cpp" break; - case 687: /* spirv_execution_mode_parameter: FLOATCONSTANT */ -#line 4459 "MachineIndependent/glslang.y" + case 713: /* spirv_execution_mode_parameter: FLOATCONSTANT */ +#line 4600 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 12691 "MachineIndependent/glslang_tab.cpp" +#line 13364 "MachineIndependent/glslang_tab.cpp" break; - case 688: /* spirv_execution_mode_parameter: INTCONSTANT */ -#line 4462 "MachineIndependent/glslang.y" + case 714: /* spirv_execution_mode_parameter: INTCONSTANT */ +#line 4603 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 12699 "MachineIndependent/glslang_tab.cpp" +#line 13372 "MachineIndependent/glslang_tab.cpp" break; - case 689: /* spirv_execution_mode_parameter: UINTCONSTANT */ -#line 4465 "MachineIndependent/glslang.y" + case 715: /* spirv_execution_mode_parameter: UINTCONSTANT */ +#line 4606 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 12707 "MachineIndependent/glslang_tab.cpp" +#line 13380 "MachineIndependent/glslang_tab.cpp" break; - case 690: /* spirv_execution_mode_parameter: BOOLCONSTANT */ -#line 4468 "MachineIndependent/glslang.y" + case 716: /* spirv_execution_mode_parameter: BOOLCONSTANT */ +#line 4609 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 12715 "MachineIndependent/glslang_tab.cpp" +#line 13388 "MachineIndependent/glslang_tab.cpp" break; - case 691: /* spirv_execution_mode_parameter: STRING_LITERAL */ -#line 4471 "MachineIndependent/glslang.y" + case 717: /* spirv_execution_mode_parameter: STRING_LITERAL */ +#line 4612 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 12723 "MachineIndependent/glslang_tab.cpp" +#line 13396 "MachineIndependent/glslang_tab.cpp" break; - case 692: /* spirv_execution_mode_id_parameter_list: constant_expression */ -#line 4476 "MachineIndependent/glslang.y" + case 718: /* spirv_execution_mode_id_parameter_list: constant_expression */ +#line 4617 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -12733,11 +13406,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 12737 "MachineIndependent/glslang_tab.cpp" +#line 13410 "MachineIndependent/glslang_tab.cpp" break; - case 693: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ -#line 4485 "MachineIndependent/glslang.y" + case 719: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ +#line 4626 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -12747,351 +13420,351 @@ 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 12751 "MachineIndependent/glslang_tab.cpp" +#line 13424 "MachineIndependent/glslang_tab.cpp" break; - case 694: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4496 "MachineIndependent/glslang.y" + case 720: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4637 "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 12761 "MachineIndependent/glslang_tab.cpp" +#line 13434 "MachineIndependent/glslang_tab.cpp" break; - case 695: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4501 "MachineIndependent/glslang.y" + case 721: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4642 "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 12772 "MachineIndependent/glslang_tab.cpp" +#line 13445 "MachineIndependent/glslang_tab.cpp" break; - case 696: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4509 "MachineIndependent/glslang.y" + case 722: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4650 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i); } -#line 12781 "MachineIndependent/glslang_tab.cpp" +#line 13454 "MachineIndependent/glslang_tab.cpp" break; - case 697: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4513 "MachineIndependent/glslang.y" + case 723: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4654 "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 12791 "MachineIndependent/glslang_tab.cpp" +#line 13464 "MachineIndependent/glslang_tab.cpp" break; - case 698: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4518 "MachineIndependent/glslang.y" + case 724: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ +#line 4659 "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 12800 "MachineIndependent/glslang_tab.cpp" +#line 13473 "MachineIndependent/glslang_tab.cpp" break; - case 699: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4522 "MachineIndependent/glslang.y" + case 725: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ +#line 4663 "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 12810 "MachineIndependent/glslang_tab.cpp" +#line 13483 "MachineIndependent/glslang_tab.cpp" break; - case 700: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4527 "MachineIndependent/glslang.y" + case 726: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ +#line 4668 "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 12819 "MachineIndependent/glslang_tab.cpp" +#line 13492 "MachineIndependent/glslang_tab.cpp" break; - case 701: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4531 "MachineIndependent/glslang.y" + case 727: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ +#line 4672 "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 12829 "MachineIndependent/glslang_tab.cpp" +#line 13502 "MachineIndependent/glslang_tab.cpp" break; - case 702: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4536 "MachineIndependent/glslang.y" + case 728: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ +#line 4677 "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 12838 "MachineIndependent/glslang_tab.cpp" +#line 13511 "MachineIndependent/glslang_tab.cpp" break; - case 703: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4540 "MachineIndependent/glslang.y" + case 729: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ +#line 4681 "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 12848 "MachineIndependent/glslang_tab.cpp" +#line 13521 "MachineIndependent/glslang_tab.cpp" break; - case 704: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ -#line 4547 "MachineIndependent/glslang.y" + case 730: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ +#line 4688 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 12856 "MachineIndependent/glslang_tab.cpp" +#line 13529 "MachineIndependent/glslang_tab.cpp" break; - case 705: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ -#line 4550 "MachineIndependent/glslang.y" + case 731: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ +#line 4691 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 12864 "MachineIndependent/glslang_tab.cpp" +#line 13537 "MachineIndependent/glslang_tab.cpp" break; - case 706: /* spirv_decorate_parameter: FLOATCONSTANT */ -#line 4555 "MachineIndependent/glslang.y" + case 732: /* spirv_decorate_parameter: FLOATCONSTANT */ +#line 4696 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 12872 "MachineIndependent/glslang_tab.cpp" +#line 13545 "MachineIndependent/glslang_tab.cpp" break; - case 707: /* spirv_decorate_parameter: INTCONSTANT */ -#line 4558 "MachineIndependent/glslang.y" + case 733: /* spirv_decorate_parameter: INTCONSTANT */ +#line 4699 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 12880 "MachineIndependent/glslang_tab.cpp" +#line 13553 "MachineIndependent/glslang_tab.cpp" break; - case 708: /* spirv_decorate_parameter: UINTCONSTANT */ -#line 4561 "MachineIndependent/glslang.y" + case 734: /* spirv_decorate_parameter: UINTCONSTANT */ +#line 4702 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 12888 "MachineIndependent/glslang_tab.cpp" +#line 13561 "MachineIndependent/glslang_tab.cpp" break; - case 709: /* spirv_decorate_parameter: BOOLCONSTANT */ -#line 4564 "MachineIndependent/glslang.y" + case 735: /* spirv_decorate_parameter: BOOLCONSTANT */ +#line 4705 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 12896 "MachineIndependent/glslang_tab.cpp" +#line 13569 "MachineIndependent/glslang_tab.cpp" break; - case 710: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter */ -#line 4569 "MachineIndependent/glslang.y" + case 736: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter */ +#line 4710 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 12904 "MachineIndependent/glslang_tab.cpp" +#line 13577 "MachineIndependent/glslang_tab.cpp" break; - case 711: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter */ -#line 4572 "MachineIndependent/glslang.y" + case 737: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter */ +#line 4713 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 12912 "MachineIndependent/glslang_tab.cpp" +#line 13585 "MachineIndependent/glslang_tab.cpp" break; - case 712: /* spirv_decorate_id_parameter: variable_identifier */ -#line 4577 "MachineIndependent/glslang.y" + case 738: /* spirv_decorate_id_parameter: variable_identifier */ +#line 4718 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getAsConstantUnion() || (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode()) (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode); else parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "only allow constants or variables which are not elements of a composite", "", ""); } -#line 12923 "MachineIndependent/glslang_tab.cpp" +#line 13596 "MachineIndependent/glslang_tab.cpp" break; - case 713: /* spirv_decorate_id_parameter: FLOATCONSTANT */ -#line 4583 "MachineIndependent/glslang.y" + case 739: /* spirv_decorate_id_parameter: FLOATCONSTANT */ +#line 4724 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 12931 "MachineIndependent/glslang_tab.cpp" +#line 13604 "MachineIndependent/glslang_tab.cpp" break; - case 714: /* spirv_decorate_id_parameter: INTCONSTANT */ -#line 4586 "MachineIndependent/glslang.y" + case 740: /* spirv_decorate_id_parameter: INTCONSTANT */ +#line 4727 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 12939 "MachineIndependent/glslang_tab.cpp" +#line 13612 "MachineIndependent/glslang_tab.cpp" break; - case 715: /* spirv_decorate_id_parameter: UINTCONSTANT */ -#line 4589 "MachineIndependent/glslang.y" + case 741: /* spirv_decorate_id_parameter: UINTCONSTANT */ +#line 4730 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 12947 "MachineIndependent/glslang_tab.cpp" +#line 13620 "MachineIndependent/glslang_tab.cpp" break; - case 716: /* spirv_decorate_id_parameter: BOOLCONSTANT */ -#line 4592 "MachineIndependent/glslang.y" + case 742: /* spirv_decorate_id_parameter: BOOLCONSTANT */ +#line 4733 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 12955 "MachineIndependent/glslang_tab.cpp" +#line 13628 "MachineIndependent/glslang_tab.cpp" break; - case 717: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ -#line 4597 "MachineIndependent/glslang.y" + case 743: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ +#line 4738 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate( parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 12964 "MachineIndependent/glslang_tab.cpp" +#line 13637 "MachineIndependent/glslang_tab.cpp" break; - case 718: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ -#line 4601 "MachineIndependent/glslang.y" + case 744: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ +#line 4742 "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 12972 "MachineIndependent/glslang_tab.cpp" +#line 13645 "MachineIndependent/glslang_tab.cpp" break; - case 719: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4606 "MachineIndependent/glslang.y" + case 745: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ +#line 4747 "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 12981 "MachineIndependent/glslang_tab.cpp" +#line 13654 "MachineIndependent/glslang_tab.cpp" break; - case 720: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4610 "MachineIndependent/glslang.y" + case 746: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ +#line 4751 "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 12991 "MachineIndependent/glslang_tab.cpp" +#line 13664 "MachineIndependent/glslang_tab.cpp" break; - case 721: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4615 "MachineIndependent/glslang.y" + case 747: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4756 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst)); } -#line 13000 "MachineIndependent/glslang_tab.cpp" +#line 13673 "MachineIndependent/glslang_tab.cpp" break; - case 722: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4619 "MachineIndependent/glslang.y" + case 748: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4760 "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 13010 "MachineIndependent/glslang_tab.cpp" +#line 13683 "MachineIndependent/glslang_tab.cpp" break; - case 723: /* spirv_type_parameter_list: spirv_type_parameter */ -#line 4626 "MachineIndependent/glslang.y" + case 749: /* spirv_type_parameter_list: spirv_type_parameter */ +#line 4767 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams); } -#line 13018 "MachineIndependent/glslang_tab.cpp" +#line 13691 "MachineIndependent/glslang_tab.cpp" break; - case 724: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ -#line 4629 "MachineIndependent/glslang.y" + case 750: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ +#line 4770 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams)); } -#line 13026 "MachineIndependent/glslang_tab.cpp" +#line 13699 "MachineIndependent/glslang_tab.cpp" break; - case 725: /* spirv_type_parameter: constant_expression */ -#line 4634 "MachineIndependent/glslang.y" + case 751: /* spirv_type_parameter: constant_expression */ +#line 4775 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion()); } -#line 13034 "MachineIndependent/glslang_tab.cpp" +#line 13707 "MachineIndependent/glslang_tab.cpp" break; - case 726: /* spirv_type_parameter: type_specifier_nonarray */ -#line 4637 "MachineIndependent/glslang.y" + case 752: /* spirv_type_parameter: type_specifier_nonarray */ +#line 4778 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 13042 "MachineIndependent/glslang_tab.cpp" +#line 13715 "MachineIndependent/glslang_tab.cpp" break; - case 727: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4642 "MachineIndependent/glslang.y" + case 753: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4783 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 13050 "MachineIndependent/glslang_tab.cpp" +#line 13723 "MachineIndependent/glslang_tab.cpp" break; - case 728: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4645 "MachineIndependent/glslang.y" + case 754: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4786 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 13059 "MachineIndependent/glslang_tab.cpp" +#line 13732 "MachineIndependent/glslang_tab.cpp" break; - case 729: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ -#line 4651 "MachineIndependent/glslang.y" + case 755: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ +#line 4792 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst); } -#line 13067 "MachineIndependent/glslang_tab.cpp" +#line 13740 "MachineIndependent/glslang_tab.cpp" break; - case 730: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ -#line 4654 "MachineIndependent/glslang.y" + case 756: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ +#line 4795 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst)); } -#line 13075 "MachineIndependent/glslang_tab.cpp" +#line 13748 "MachineIndependent/glslang_tab.cpp" break; - case 731: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ -#line 4659 "MachineIndependent/glslang.y" + case 757: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ +#line 4800 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string); } -#line 13083 "MachineIndependent/glslang_tab.cpp" +#line 13756 "MachineIndependent/glslang_tab.cpp" break; - case 732: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ -#line 4662 "MachineIndependent/glslang.y" + case 758: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ +#line 4803 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i); } -#line 13091 "MachineIndependent/glslang_tab.cpp" +#line 13764 "MachineIndependent/glslang_tab.cpp" break; -#line 13095 "MachineIndependent/glslang_tab.cpp" +#line 13768 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -13315,5 +13988,5 @@ yyreturnlab: return yyresult; } -#line 4666 "MachineIndependent/glslang.y" +#line 4807 "MachineIndependent/glslang.y" diff --git a/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h b/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h index 11932ead0..43e2b1f57 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h @@ -121,424 +121,451 @@ extern int yydebug; FLOAT32_T = 322, /* FLOAT32_T */ DOUBLE = 323, /* DOUBLE */ FLOAT64_T = 324, /* FLOAT64_T */ - INT64_T = 325, /* INT64_T */ - UINT64_T = 326, /* UINT64_T */ - INT32_T = 327, /* INT32_T */ - UINT32_T = 328, /* UINT32_T */ - INT16_T = 329, /* INT16_T */ - UINT16_T = 330, /* UINT16_T */ - INT8_T = 331, /* INT8_T */ - UINT8_T = 332, /* UINT8_T */ - I64VEC2 = 333, /* I64VEC2 */ - I64VEC3 = 334, /* I64VEC3 */ - I64VEC4 = 335, /* I64VEC4 */ - U64VEC2 = 336, /* U64VEC2 */ - U64VEC3 = 337, /* U64VEC3 */ - U64VEC4 = 338, /* U64VEC4 */ - I32VEC2 = 339, /* I32VEC2 */ - I32VEC3 = 340, /* I32VEC3 */ - I32VEC4 = 341, /* I32VEC4 */ - U32VEC2 = 342, /* U32VEC2 */ - U32VEC3 = 343, /* U32VEC3 */ - U32VEC4 = 344, /* U32VEC4 */ - I16VEC2 = 345, /* I16VEC2 */ - I16VEC3 = 346, /* I16VEC3 */ - I16VEC4 = 347, /* I16VEC4 */ - U16VEC2 = 348, /* U16VEC2 */ - U16VEC3 = 349, /* U16VEC3 */ - U16VEC4 = 350, /* U16VEC4 */ - I8VEC2 = 351, /* I8VEC2 */ - I8VEC3 = 352, /* I8VEC3 */ - I8VEC4 = 353, /* I8VEC4 */ - U8VEC2 = 354, /* U8VEC2 */ - U8VEC3 = 355, /* U8VEC3 */ - U8VEC4 = 356, /* U8VEC4 */ - DVEC2 = 357, /* DVEC2 */ - DVEC3 = 358, /* DVEC3 */ - DVEC4 = 359, /* DVEC4 */ - DMAT2 = 360, /* DMAT2 */ - DMAT3 = 361, /* DMAT3 */ - DMAT4 = 362, /* DMAT4 */ - BF16VEC2 = 363, /* BF16VEC2 */ - BF16VEC3 = 364, /* BF16VEC3 */ - BF16VEC4 = 365, /* BF16VEC4 */ - FE5M2VEC2 = 366, /* FE5M2VEC2 */ - FE5M2VEC3 = 367, /* FE5M2VEC3 */ - FE5M2VEC4 = 368, /* FE5M2VEC4 */ - FE4M3VEC2 = 369, /* FE4M3VEC2 */ - FE4M3VEC3 = 370, /* FE4M3VEC3 */ - FE4M3VEC4 = 371, /* FE4M3VEC4 */ - F16VEC2 = 372, /* F16VEC2 */ - F16VEC3 = 373, /* F16VEC3 */ - F16VEC4 = 374, /* F16VEC4 */ - F16MAT2 = 375, /* F16MAT2 */ - F16MAT3 = 376, /* F16MAT3 */ - F16MAT4 = 377, /* F16MAT4 */ - F32VEC2 = 378, /* F32VEC2 */ - F32VEC3 = 379, /* F32VEC3 */ - F32VEC4 = 380, /* F32VEC4 */ - F32MAT2 = 381, /* F32MAT2 */ - F32MAT3 = 382, /* F32MAT3 */ - F32MAT4 = 383, /* F32MAT4 */ - F64VEC2 = 384, /* F64VEC2 */ - F64VEC3 = 385, /* F64VEC3 */ - F64VEC4 = 386, /* F64VEC4 */ - F64MAT2 = 387, /* F64MAT2 */ - F64MAT3 = 388, /* F64MAT3 */ - F64MAT4 = 389, /* F64MAT4 */ - DMAT2X2 = 390, /* DMAT2X2 */ - DMAT2X3 = 391, /* DMAT2X3 */ - DMAT2X4 = 392, /* DMAT2X4 */ - DMAT3X2 = 393, /* DMAT3X2 */ - DMAT3X3 = 394, /* DMAT3X3 */ - DMAT3X4 = 395, /* DMAT3X4 */ - DMAT4X2 = 396, /* DMAT4X2 */ - DMAT4X3 = 397, /* DMAT4X3 */ - DMAT4X4 = 398, /* DMAT4X4 */ - F16MAT2X2 = 399, /* F16MAT2X2 */ - F16MAT2X3 = 400, /* F16MAT2X3 */ - F16MAT2X4 = 401, /* F16MAT2X4 */ - F16MAT3X2 = 402, /* F16MAT3X2 */ - F16MAT3X3 = 403, /* F16MAT3X3 */ - F16MAT3X4 = 404, /* F16MAT3X4 */ - F16MAT4X2 = 405, /* F16MAT4X2 */ - F16MAT4X3 = 406, /* F16MAT4X3 */ - F16MAT4X4 = 407, /* F16MAT4X4 */ - F32MAT2X2 = 408, /* F32MAT2X2 */ - F32MAT2X3 = 409, /* F32MAT2X3 */ - F32MAT2X4 = 410, /* F32MAT2X4 */ - F32MAT3X2 = 411, /* F32MAT3X2 */ - F32MAT3X3 = 412, /* F32MAT3X3 */ - F32MAT3X4 = 413, /* F32MAT3X4 */ - F32MAT4X2 = 414, /* F32MAT4X2 */ - F32MAT4X3 = 415, /* F32MAT4X3 */ - F32MAT4X4 = 416, /* F32MAT4X4 */ - F64MAT2X2 = 417, /* F64MAT2X2 */ - F64MAT2X3 = 418, /* F64MAT2X3 */ - F64MAT2X4 = 419, /* F64MAT2X4 */ - F64MAT3X2 = 420, /* F64MAT3X2 */ - F64MAT3X3 = 421, /* F64MAT3X3 */ - F64MAT3X4 = 422, /* F64MAT3X4 */ - F64MAT4X2 = 423, /* F64MAT4X2 */ - F64MAT4X3 = 424, /* F64MAT4X3 */ - F64MAT4X4 = 425, /* F64MAT4X4 */ - ATOMIC_UINT = 426, /* ATOMIC_UINT */ - ACCSTRUCTNV = 427, /* ACCSTRUCTNV */ - ACCSTRUCTEXT = 428, /* ACCSTRUCTEXT */ - RAYQUERYEXT = 429, /* RAYQUERYEXT */ - FCOOPMATNV = 430, /* FCOOPMATNV */ - ICOOPMATNV = 431, /* ICOOPMATNV */ - UCOOPMATNV = 432, /* UCOOPMATNV */ - COOPMAT = 433, /* COOPMAT */ - COOPVECNV = 434, /* COOPVECNV */ - VECTOR = 435, /* VECTOR */ - HITOBJECTNV = 436, /* HITOBJECTNV */ - HITOBJECTATTRNV = 437, /* HITOBJECTATTRNV */ - HITOBJECTEXT = 438, /* HITOBJECTEXT */ - HITOBJECTATTREXT = 439, /* HITOBJECTATTREXT */ - TENSORLAYOUTNV = 440, /* TENSORLAYOUTNV */ - TENSORVIEWNV = 441, /* TENSORVIEWNV */ - TENSORARM = 442, /* TENSORARM */ - SAMPLERCUBEARRAY = 443, /* SAMPLERCUBEARRAY */ - SAMPLERCUBEARRAYSHADOW = 444, /* SAMPLERCUBEARRAYSHADOW */ - ISAMPLERCUBEARRAY = 445, /* ISAMPLERCUBEARRAY */ - USAMPLERCUBEARRAY = 446, /* USAMPLERCUBEARRAY */ - SAMPLER1D = 447, /* SAMPLER1D */ - SAMPLER1DARRAY = 448, /* SAMPLER1DARRAY */ - SAMPLER1DARRAYSHADOW = 449, /* SAMPLER1DARRAYSHADOW */ - ISAMPLER1D = 450, /* ISAMPLER1D */ - SAMPLER1DSHADOW = 451, /* SAMPLER1DSHADOW */ - SAMPLER2DRECT = 452, /* SAMPLER2DRECT */ - SAMPLER2DRECTSHADOW = 453, /* SAMPLER2DRECTSHADOW */ - ISAMPLER2DRECT = 454, /* ISAMPLER2DRECT */ - USAMPLER2DRECT = 455, /* USAMPLER2DRECT */ - SAMPLERBUFFER = 456, /* SAMPLERBUFFER */ - ISAMPLERBUFFER = 457, /* ISAMPLERBUFFER */ - USAMPLERBUFFER = 458, /* USAMPLERBUFFER */ - SAMPLER2DMS = 459, /* SAMPLER2DMS */ - ISAMPLER2DMS = 460, /* ISAMPLER2DMS */ - USAMPLER2DMS = 461, /* USAMPLER2DMS */ - SAMPLER2DMSARRAY = 462, /* SAMPLER2DMSARRAY */ - ISAMPLER2DMSARRAY = 463, /* ISAMPLER2DMSARRAY */ - USAMPLER2DMSARRAY = 464, /* USAMPLER2DMSARRAY */ - SAMPLEREXTERNALOES = 465, /* SAMPLEREXTERNALOES */ - SAMPLEREXTERNAL2DY2YEXT = 466, /* SAMPLEREXTERNAL2DY2YEXT */ - ISAMPLER1DARRAY = 467, /* ISAMPLER1DARRAY */ - USAMPLER1D = 468, /* USAMPLER1D */ - USAMPLER1DARRAY = 469, /* USAMPLER1DARRAY */ - F16SAMPLER1D = 470, /* F16SAMPLER1D */ - F16SAMPLER2D = 471, /* F16SAMPLER2D */ - F16SAMPLER3D = 472, /* F16SAMPLER3D */ - F16SAMPLER2DRECT = 473, /* F16SAMPLER2DRECT */ - F16SAMPLERCUBE = 474, /* F16SAMPLERCUBE */ - F16SAMPLER1DARRAY = 475, /* F16SAMPLER1DARRAY */ - F16SAMPLER2DARRAY = 476, /* F16SAMPLER2DARRAY */ - F16SAMPLERCUBEARRAY = 477, /* F16SAMPLERCUBEARRAY */ - F16SAMPLERBUFFER = 478, /* F16SAMPLERBUFFER */ - F16SAMPLER2DMS = 479, /* F16SAMPLER2DMS */ - F16SAMPLER2DMSARRAY = 480, /* F16SAMPLER2DMSARRAY */ - F16SAMPLER1DSHADOW = 481, /* F16SAMPLER1DSHADOW */ - F16SAMPLER2DSHADOW = 482, /* F16SAMPLER2DSHADOW */ - F16SAMPLER1DARRAYSHADOW = 483, /* F16SAMPLER1DARRAYSHADOW */ - F16SAMPLER2DARRAYSHADOW = 484, /* F16SAMPLER2DARRAYSHADOW */ - F16SAMPLER2DRECTSHADOW = 485, /* F16SAMPLER2DRECTSHADOW */ - F16SAMPLERCUBESHADOW = 486, /* F16SAMPLERCUBESHADOW */ - F16SAMPLERCUBEARRAYSHADOW = 487, /* F16SAMPLERCUBEARRAYSHADOW */ - IMAGE1D = 488, /* IMAGE1D */ - IIMAGE1D = 489, /* IIMAGE1D */ - UIMAGE1D = 490, /* UIMAGE1D */ - IMAGE2D = 491, /* IMAGE2D */ - IIMAGE2D = 492, /* IIMAGE2D */ - UIMAGE2D = 493, /* UIMAGE2D */ - IMAGE3D = 494, /* IMAGE3D */ - IIMAGE3D = 495, /* IIMAGE3D */ - UIMAGE3D = 496, /* UIMAGE3D */ - IMAGE2DRECT = 497, /* IMAGE2DRECT */ - IIMAGE2DRECT = 498, /* IIMAGE2DRECT */ - UIMAGE2DRECT = 499, /* UIMAGE2DRECT */ - IMAGECUBE = 500, /* IMAGECUBE */ - IIMAGECUBE = 501, /* IIMAGECUBE */ - UIMAGECUBE = 502, /* UIMAGECUBE */ - IMAGEBUFFER = 503, /* IMAGEBUFFER */ - IIMAGEBUFFER = 504, /* IIMAGEBUFFER */ - UIMAGEBUFFER = 505, /* UIMAGEBUFFER */ - IMAGE1DARRAY = 506, /* IMAGE1DARRAY */ - IIMAGE1DARRAY = 507, /* IIMAGE1DARRAY */ - UIMAGE1DARRAY = 508, /* UIMAGE1DARRAY */ - IMAGE2DARRAY = 509, /* IMAGE2DARRAY */ - IIMAGE2DARRAY = 510, /* IIMAGE2DARRAY */ - UIMAGE2DARRAY = 511, /* UIMAGE2DARRAY */ - IMAGECUBEARRAY = 512, /* IMAGECUBEARRAY */ - IIMAGECUBEARRAY = 513, /* IIMAGECUBEARRAY */ - UIMAGECUBEARRAY = 514, /* UIMAGECUBEARRAY */ - IMAGE2DMS = 515, /* IMAGE2DMS */ - IIMAGE2DMS = 516, /* IIMAGE2DMS */ - UIMAGE2DMS = 517, /* UIMAGE2DMS */ - IMAGE2DMSARRAY = 518, /* IMAGE2DMSARRAY */ - IIMAGE2DMSARRAY = 519, /* IIMAGE2DMSARRAY */ - UIMAGE2DMSARRAY = 520, /* UIMAGE2DMSARRAY */ - F16IMAGE1D = 521, /* F16IMAGE1D */ - F16IMAGE2D = 522, /* F16IMAGE2D */ - F16IMAGE3D = 523, /* F16IMAGE3D */ - F16IMAGE2DRECT = 524, /* F16IMAGE2DRECT */ - F16IMAGECUBE = 525, /* F16IMAGECUBE */ - F16IMAGE1DARRAY = 526, /* F16IMAGE1DARRAY */ - F16IMAGE2DARRAY = 527, /* F16IMAGE2DARRAY */ - F16IMAGECUBEARRAY = 528, /* F16IMAGECUBEARRAY */ - F16IMAGEBUFFER = 529, /* F16IMAGEBUFFER */ - F16IMAGE2DMS = 530, /* F16IMAGE2DMS */ - F16IMAGE2DMSARRAY = 531, /* F16IMAGE2DMSARRAY */ - I64IMAGE1D = 532, /* I64IMAGE1D */ - U64IMAGE1D = 533, /* U64IMAGE1D */ - I64IMAGE2D = 534, /* I64IMAGE2D */ - U64IMAGE2D = 535, /* U64IMAGE2D */ - I64IMAGE3D = 536, /* I64IMAGE3D */ - U64IMAGE3D = 537, /* U64IMAGE3D */ - I64IMAGE2DRECT = 538, /* I64IMAGE2DRECT */ - U64IMAGE2DRECT = 539, /* U64IMAGE2DRECT */ - I64IMAGECUBE = 540, /* I64IMAGECUBE */ - U64IMAGECUBE = 541, /* U64IMAGECUBE */ - I64IMAGEBUFFER = 542, /* I64IMAGEBUFFER */ - U64IMAGEBUFFER = 543, /* U64IMAGEBUFFER */ - I64IMAGE1DARRAY = 544, /* I64IMAGE1DARRAY */ - U64IMAGE1DARRAY = 545, /* U64IMAGE1DARRAY */ - I64IMAGE2DARRAY = 546, /* I64IMAGE2DARRAY */ - U64IMAGE2DARRAY = 547, /* U64IMAGE2DARRAY */ - I64IMAGECUBEARRAY = 548, /* I64IMAGECUBEARRAY */ - U64IMAGECUBEARRAY = 549, /* U64IMAGECUBEARRAY */ - I64IMAGE2DMS = 550, /* I64IMAGE2DMS */ - U64IMAGE2DMS = 551, /* U64IMAGE2DMS */ - I64IMAGE2DMSARRAY = 552, /* I64IMAGE2DMSARRAY */ - U64IMAGE2DMSARRAY = 553, /* U64IMAGE2DMSARRAY */ - TEXTURECUBEARRAY = 554, /* TEXTURECUBEARRAY */ - ITEXTURECUBEARRAY = 555, /* ITEXTURECUBEARRAY */ - UTEXTURECUBEARRAY = 556, /* UTEXTURECUBEARRAY */ - TEXTURE1D = 557, /* TEXTURE1D */ - ITEXTURE1D = 558, /* ITEXTURE1D */ - UTEXTURE1D = 559, /* UTEXTURE1D */ - TEXTURE1DARRAY = 560, /* TEXTURE1DARRAY */ - ITEXTURE1DARRAY = 561, /* ITEXTURE1DARRAY */ - UTEXTURE1DARRAY = 562, /* UTEXTURE1DARRAY */ - TEXTURE2DRECT = 563, /* TEXTURE2DRECT */ - ITEXTURE2DRECT = 564, /* ITEXTURE2DRECT */ - UTEXTURE2DRECT = 565, /* UTEXTURE2DRECT */ - TEXTUREBUFFER = 566, /* TEXTUREBUFFER */ - ITEXTUREBUFFER = 567, /* ITEXTUREBUFFER */ - UTEXTUREBUFFER = 568, /* UTEXTUREBUFFER */ - TEXTURE2DMS = 569, /* TEXTURE2DMS */ - ITEXTURE2DMS = 570, /* ITEXTURE2DMS */ - UTEXTURE2DMS = 571, /* UTEXTURE2DMS */ - TEXTURE2DMSARRAY = 572, /* TEXTURE2DMSARRAY */ - ITEXTURE2DMSARRAY = 573, /* ITEXTURE2DMSARRAY */ - UTEXTURE2DMSARRAY = 574, /* UTEXTURE2DMSARRAY */ - F16TEXTURE1D = 575, /* F16TEXTURE1D */ - F16TEXTURE2D = 576, /* F16TEXTURE2D */ - F16TEXTURE3D = 577, /* F16TEXTURE3D */ - F16TEXTURE2DRECT = 578, /* F16TEXTURE2DRECT */ - F16TEXTURECUBE = 579, /* F16TEXTURECUBE */ - F16TEXTURE1DARRAY = 580, /* F16TEXTURE1DARRAY */ - F16TEXTURE2DARRAY = 581, /* F16TEXTURE2DARRAY */ - F16TEXTURECUBEARRAY = 582, /* F16TEXTURECUBEARRAY */ - F16TEXTUREBUFFER = 583, /* F16TEXTUREBUFFER */ - F16TEXTURE2DMS = 584, /* F16TEXTURE2DMS */ - F16TEXTURE2DMSARRAY = 585, /* F16TEXTURE2DMSARRAY */ - SUBPASSINPUT = 586, /* SUBPASSINPUT */ - SUBPASSINPUTMS = 587, /* SUBPASSINPUTMS */ - ISUBPASSINPUT = 588, /* ISUBPASSINPUT */ - ISUBPASSINPUTMS = 589, /* ISUBPASSINPUTMS */ - USUBPASSINPUT = 590, /* USUBPASSINPUT */ - USUBPASSINPUTMS = 591, /* USUBPASSINPUTMS */ - F16SUBPASSINPUT = 592, /* F16SUBPASSINPUT */ - F16SUBPASSINPUTMS = 593, /* F16SUBPASSINPUTMS */ - SPIRV_INSTRUCTION = 594, /* SPIRV_INSTRUCTION */ - SPIRV_EXECUTION_MODE = 595, /* SPIRV_EXECUTION_MODE */ - SPIRV_EXECUTION_MODE_ID = 596, /* SPIRV_EXECUTION_MODE_ID */ - SPIRV_DECORATE = 597, /* SPIRV_DECORATE */ - SPIRV_DECORATE_ID = 598, /* SPIRV_DECORATE_ID */ - SPIRV_DECORATE_STRING = 599, /* SPIRV_DECORATE_STRING */ - SPIRV_TYPE = 600, /* SPIRV_TYPE */ - SPIRV_STORAGE_CLASS = 601, /* SPIRV_STORAGE_CLASS */ - SPIRV_BY_REFERENCE = 602, /* SPIRV_BY_REFERENCE */ - SPIRV_LITERAL = 603, /* SPIRV_LITERAL */ - ATTACHMENTEXT = 604, /* ATTACHMENTEXT */ - IATTACHMENTEXT = 605, /* IATTACHMENTEXT */ - UATTACHMENTEXT = 606, /* UATTACHMENTEXT */ - LEFT_OP = 607, /* LEFT_OP */ - RIGHT_OP = 608, /* RIGHT_OP */ - INC_OP = 609, /* INC_OP */ - DEC_OP = 610, /* DEC_OP */ - LE_OP = 611, /* LE_OP */ - GE_OP = 612, /* GE_OP */ - EQ_OP = 613, /* EQ_OP */ - NE_OP = 614, /* NE_OP */ - AND_OP = 615, /* AND_OP */ - OR_OP = 616, /* OR_OP */ - XOR_OP = 617, /* XOR_OP */ - MUL_ASSIGN = 618, /* MUL_ASSIGN */ - DIV_ASSIGN = 619, /* DIV_ASSIGN */ - ADD_ASSIGN = 620, /* ADD_ASSIGN */ - MOD_ASSIGN = 621, /* MOD_ASSIGN */ - LEFT_ASSIGN = 622, /* LEFT_ASSIGN */ - RIGHT_ASSIGN = 623, /* RIGHT_ASSIGN */ - AND_ASSIGN = 624, /* AND_ASSIGN */ - XOR_ASSIGN = 625, /* XOR_ASSIGN */ - OR_ASSIGN = 626, /* OR_ASSIGN */ - SUB_ASSIGN = 627, /* SUB_ASSIGN */ - STRING_LITERAL = 628, /* STRING_LITERAL */ - LEFT_PAREN = 629, /* LEFT_PAREN */ - RIGHT_PAREN = 630, /* RIGHT_PAREN */ - LEFT_BRACKET = 631, /* LEFT_BRACKET */ - RIGHT_BRACKET = 632, /* RIGHT_BRACKET */ - LEFT_BRACE = 633, /* LEFT_BRACE */ - RIGHT_BRACE = 634, /* RIGHT_BRACE */ - DOT = 635, /* DOT */ - COMMA = 636, /* COMMA */ - COLON = 637, /* COLON */ - EQUAL = 638, /* EQUAL */ - SEMICOLON = 639, /* SEMICOLON */ - BANG = 640, /* BANG */ - DASH = 641, /* DASH */ - TILDE = 642, /* TILDE */ - PLUS = 643, /* PLUS */ - STAR = 644, /* STAR */ - SLASH = 645, /* SLASH */ - PERCENT = 646, /* PERCENT */ - LEFT_ANGLE = 647, /* LEFT_ANGLE */ - RIGHT_ANGLE = 648, /* RIGHT_ANGLE */ - VERTICAL_BAR = 649, /* VERTICAL_BAR */ - CARET = 650, /* CARET */ - AMPERSAND = 651, /* AMPERSAND */ - QUESTION = 652, /* QUESTION */ - INVARIANT = 653, /* INVARIANT */ - HIGH_PRECISION = 654, /* HIGH_PRECISION */ - MEDIUM_PRECISION = 655, /* MEDIUM_PRECISION */ - LOW_PRECISION = 656, /* LOW_PRECISION */ - PRECISION = 657, /* PRECISION */ - PACKED = 658, /* PACKED */ - RESOURCE = 659, /* RESOURCE */ - SUPERP = 660, /* SUPERP */ - FLOATCONSTANT = 661, /* FLOATCONSTANT */ - INTCONSTANT = 662, /* INTCONSTANT */ - UINTCONSTANT = 663, /* UINTCONSTANT */ - BOOLCONSTANT = 664, /* BOOLCONSTANT */ - IDENTIFIER = 665, /* IDENTIFIER */ - TYPE_NAME = 666, /* TYPE_NAME */ - CENTROID = 667, /* CENTROID */ - IN = 668, /* IN */ - OUT = 669, /* OUT */ - INOUT = 670, /* INOUT */ - STRUCT = 671, /* STRUCT */ - VOID = 672, /* VOID */ - WHILE = 673, /* WHILE */ - BREAK = 674, /* BREAK */ - CONTINUE = 675, /* CONTINUE */ - DO = 676, /* DO */ - ELSE = 677, /* ELSE */ - FOR = 678, /* FOR */ - IF = 679, /* IF */ - DISCARD = 680, /* DISCARD */ - RETURN = 681, /* RETURN */ - SWITCH = 682, /* SWITCH */ - CASE = 683, /* CASE */ - DEFAULT = 684, /* DEFAULT */ - TERMINATE_INVOCATION = 685, /* TERMINATE_INVOCATION */ - TERMINATE_RAY = 686, /* TERMINATE_RAY */ - IGNORE_INTERSECTION = 687, /* IGNORE_INTERSECTION */ - UNIFORM = 688, /* UNIFORM */ - SHARED = 689, /* SHARED */ - BUFFER = 690, /* BUFFER */ - TILEIMAGEEXT = 691, /* TILEIMAGEEXT */ - FLAT = 692, /* FLAT */ - SMOOTH = 693, /* SMOOTH */ - LAYOUT = 694, /* LAYOUT */ - DOUBLECONSTANT = 695, /* DOUBLECONSTANT */ - INT16CONSTANT = 696, /* INT16CONSTANT */ - UINT16CONSTANT = 697, /* UINT16CONSTANT */ - FLOAT16CONSTANT = 698, /* FLOAT16CONSTANT */ - INT32CONSTANT = 699, /* INT32CONSTANT */ - UINT32CONSTANT = 700, /* UINT32CONSTANT */ - INT64CONSTANT = 701, /* INT64CONSTANT */ - UINT64CONSTANT = 702, /* UINT64CONSTANT */ - SUBROUTINE = 703, /* SUBROUTINE */ - DEMOTE = 704, /* DEMOTE */ - FUNCTION = 705, /* FUNCTION */ - PAYLOADNV = 706, /* PAYLOADNV */ - PAYLOADINNV = 707, /* PAYLOADINNV */ - HITATTRNV = 708, /* HITATTRNV */ - CALLDATANV = 709, /* CALLDATANV */ - CALLDATAINNV = 710, /* CALLDATAINNV */ - PAYLOADEXT = 711, /* PAYLOADEXT */ - PAYLOADINEXT = 712, /* PAYLOADINEXT */ - HITATTREXT = 713, /* HITATTREXT */ - CALLDATAEXT = 714, /* CALLDATAEXT */ - CALLDATAINEXT = 715, /* CALLDATAINEXT */ - PATCH = 716, /* PATCH */ - SAMPLE = 717, /* SAMPLE */ - NONUNIFORM = 718, /* NONUNIFORM */ - RESOURCEHEAP = 719, /* RESOURCEHEAP */ - SAMPLERHEAP = 720, /* SAMPLERHEAP */ - COHERENT = 721, /* COHERENT */ - VOLATILE = 722, /* VOLATILE */ - RESTRICT = 723, /* RESTRICT */ - READONLY = 724, /* READONLY */ - WRITEONLY = 725, /* WRITEONLY */ - NONTEMPORAL = 726, /* NONTEMPORAL */ - DEVICECOHERENT = 727, /* DEVICECOHERENT */ - QUEUEFAMILYCOHERENT = 728, /* QUEUEFAMILYCOHERENT */ - WORKGROUPCOHERENT = 729, /* WORKGROUPCOHERENT */ - SUBGROUPCOHERENT = 730, /* SUBGROUPCOHERENT */ - NONPRIVATE = 731, /* NONPRIVATE */ - SHADERCALLCOHERENT = 732, /* SHADERCALLCOHERENT */ - NOPERSPECTIVE = 733, /* NOPERSPECTIVE */ - EXPLICITINTERPAMD = 734, /* EXPLICITINTERPAMD */ - PERVERTEXEXT = 735, /* PERVERTEXEXT */ - PERVERTEXNV = 736, /* PERVERTEXNV */ - PERPRIMITIVENV = 737, /* PERPRIMITIVENV */ - PERVIEWNV = 738, /* PERVIEWNV */ - PERTASKNV = 739, /* PERTASKNV */ - PERPRIMITIVEEXT = 740, /* PERPRIMITIVEEXT */ - TASKPAYLOADWORKGROUPEXT = 741, /* TASKPAYLOADWORKGROUPEXT */ - PRECISE = 742 /* PRECISE */ + FLOATE2M1_T = 325, /* FLOATE2M1_T */ + FLOATE3M2_T = 326, /* FLOATE3M2_T */ + FLOATE2M3_T = 327, /* FLOATE2M3_T */ + FLOATUE8M0_T = 328, /* FLOATUE8M0_T */ + FLOATMXINT8_T = 329, /* FLOATMXINT8_T */ + INT64_T = 330, /* INT64_T */ + UINT64_T = 331, /* UINT64_T */ + INT32_T = 332, /* INT32_T */ + UINT32_T = 333, /* UINT32_T */ + INT16_T = 334, /* INT16_T */ + UINT16_T = 335, /* UINT16_T */ + INT8_T = 336, /* INT8_T */ + UINT8_T = 337, /* UINT8_T */ + I64VEC2 = 338, /* I64VEC2 */ + I64VEC3 = 339, /* I64VEC3 */ + I64VEC4 = 340, /* I64VEC4 */ + U64VEC2 = 341, /* U64VEC2 */ + U64VEC3 = 342, /* U64VEC3 */ + U64VEC4 = 343, /* U64VEC4 */ + I32VEC2 = 344, /* I32VEC2 */ + I32VEC3 = 345, /* I32VEC3 */ + I32VEC4 = 346, /* I32VEC4 */ + U32VEC2 = 347, /* U32VEC2 */ + U32VEC3 = 348, /* U32VEC3 */ + U32VEC4 = 349, /* U32VEC4 */ + I16VEC2 = 350, /* I16VEC2 */ + I16VEC3 = 351, /* I16VEC3 */ + I16VEC4 = 352, /* I16VEC4 */ + U16VEC2 = 353, /* U16VEC2 */ + U16VEC3 = 354, /* U16VEC3 */ + U16VEC4 = 355, /* U16VEC4 */ + I8VEC2 = 356, /* I8VEC2 */ + I8VEC3 = 357, /* I8VEC3 */ + I8VEC4 = 358, /* I8VEC4 */ + U8VEC2 = 359, /* U8VEC2 */ + U8VEC3 = 360, /* U8VEC3 */ + U8VEC4 = 361, /* U8VEC4 */ + DVEC2 = 362, /* DVEC2 */ + DVEC3 = 363, /* DVEC3 */ + DVEC4 = 364, /* DVEC4 */ + DMAT2 = 365, /* DMAT2 */ + DMAT3 = 366, /* DMAT3 */ + DMAT4 = 367, /* DMAT4 */ + BF16VEC2 = 368, /* BF16VEC2 */ + BF16VEC3 = 369, /* BF16VEC3 */ + BF16VEC4 = 370, /* BF16VEC4 */ + FE5M2VEC2 = 371, /* FE5M2VEC2 */ + FE5M2VEC3 = 372, /* FE5M2VEC3 */ + FE5M2VEC4 = 373, /* FE5M2VEC4 */ + FE4M3VEC2 = 374, /* FE4M3VEC2 */ + FE4M3VEC3 = 375, /* FE4M3VEC3 */ + FE4M3VEC4 = 376, /* FE4M3VEC4 */ + FE2M1VEC2 = 377, /* FE2M1VEC2 */ + FE2M1VEC3 = 378, /* FE2M1VEC3 */ + FE2M1VEC4 = 379, /* FE2M1VEC4 */ + FE3M2VEC2 = 380, /* FE3M2VEC2 */ + FE3M2VEC3 = 381, /* FE3M2VEC3 */ + FE3M2VEC4 = 382, /* FE3M2VEC4 */ + FE2M3VEC2 = 383, /* FE2M3VEC2 */ + FE2M3VEC3 = 384, /* FE2M3VEC3 */ + FE2M3VEC4 = 385, /* FE2M3VEC4 */ + FUE8M0VEC2 = 386, /* FUE8M0VEC2 */ + FUE8M0VEC3 = 387, /* FUE8M0VEC3 */ + FUE8M0VEC4 = 388, /* FUE8M0VEC4 */ + FMXINT8VEC2 = 389, /* FMXINT8VEC2 */ + FMXINT8VEC3 = 390, /* FMXINT8VEC3 */ + FMXINT8VEC4 = 391, /* FMXINT8VEC4 */ + F16VEC2 = 392, /* F16VEC2 */ + F16VEC3 = 393, /* F16VEC3 */ + F16VEC4 = 394, /* F16VEC4 */ + F16MAT2 = 395, /* F16MAT2 */ + F16MAT3 = 396, /* F16MAT3 */ + F16MAT4 = 397, /* F16MAT4 */ + F32VEC2 = 398, /* F32VEC2 */ + F32VEC3 = 399, /* F32VEC3 */ + F32VEC4 = 400, /* F32VEC4 */ + F32MAT2 = 401, /* F32MAT2 */ + F32MAT3 = 402, /* F32MAT3 */ + F32MAT4 = 403, /* F32MAT4 */ + F64VEC2 = 404, /* F64VEC2 */ + F64VEC3 = 405, /* F64VEC3 */ + F64VEC4 = 406, /* F64VEC4 */ + F64MAT2 = 407, /* F64MAT2 */ + F64MAT3 = 408, /* F64MAT3 */ + F64MAT4 = 409, /* F64MAT4 */ + DMAT2X2 = 410, /* DMAT2X2 */ + DMAT2X3 = 411, /* DMAT2X3 */ + DMAT2X4 = 412, /* DMAT2X4 */ + DMAT3X2 = 413, /* DMAT3X2 */ + DMAT3X3 = 414, /* DMAT3X3 */ + DMAT3X4 = 415, /* DMAT3X4 */ + DMAT4X2 = 416, /* DMAT4X2 */ + DMAT4X3 = 417, /* DMAT4X3 */ + DMAT4X4 = 418, /* DMAT4X4 */ + F16MAT2X2 = 419, /* F16MAT2X2 */ + F16MAT2X3 = 420, /* F16MAT2X3 */ + F16MAT2X4 = 421, /* F16MAT2X4 */ + F16MAT3X2 = 422, /* F16MAT3X2 */ + F16MAT3X3 = 423, /* F16MAT3X3 */ + F16MAT3X4 = 424, /* F16MAT3X4 */ + F16MAT4X2 = 425, /* F16MAT4X2 */ + F16MAT4X3 = 426, /* F16MAT4X3 */ + F16MAT4X4 = 427, /* F16MAT4X4 */ + F32MAT2X2 = 428, /* F32MAT2X2 */ + F32MAT2X3 = 429, /* F32MAT2X3 */ + F32MAT2X4 = 430, /* F32MAT2X4 */ + F32MAT3X2 = 431, /* F32MAT3X2 */ + F32MAT3X3 = 432, /* F32MAT3X3 */ + F32MAT3X4 = 433, /* F32MAT3X4 */ + F32MAT4X2 = 434, /* F32MAT4X2 */ + F32MAT4X3 = 435, /* F32MAT4X3 */ + F32MAT4X4 = 436, /* F32MAT4X4 */ + F64MAT2X2 = 437, /* F64MAT2X2 */ + F64MAT2X3 = 438, /* F64MAT2X3 */ + F64MAT2X4 = 439, /* F64MAT2X4 */ + F64MAT3X2 = 440, /* F64MAT3X2 */ + F64MAT3X3 = 441, /* F64MAT3X3 */ + F64MAT3X4 = 442, /* F64MAT3X4 */ + F64MAT4X2 = 443, /* F64MAT4X2 */ + F64MAT4X3 = 444, /* F64MAT4X3 */ + F64MAT4X4 = 445, /* F64MAT4X4 */ + ATOMIC_UINT = 446, /* ATOMIC_UINT */ + ACCSTRUCTNV = 447, /* ACCSTRUCTNV */ + ACCSTRUCTEXT = 448, /* ACCSTRUCTEXT */ + RAYQUERYEXT = 449, /* RAYQUERYEXT */ + FCOOPMATNV = 450, /* FCOOPMATNV */ + ICOOPMATNV = 451, /* ICOOPMATNV */ + UCOOPMATNV = 452, /* UCOOPMATNV */ + COOPMAT = 453, /* COOPMAT */ + COOPVECNV = 454, /* COOPVECNV */ + VECTOR = 455, /* VECTOR */ + HITOBJECTNV = 456, /* HITOBJECTNV */ + HITOBJECTATTRNV = 457, /* HITOBJECTATTRNV */ + HITOBJECTEXT = 458, /* HITOBJECTEXT */ + HITOBJECTATTREXT = 459, /* HITOBJECTATTREXT */ + TENSORLAYOUTNV = 460, /* TENSORLAYOUTNV */ + TENSORVIEWNV = 461, /* TENSORVIEWNV */ + TENSORARM = 462, /* TENSORARM */ + SAMPLERCUBEARRAY = 463, /* SAMPLERCUBEARRAY */ + SAMPLERCUBEARRAYSHADOW = 464, /* SAMPLERCUBEARRAYSHADOW */ + ISAMPLERCUBEARRAY = 465, /* ISAMPLERCUBEARRAY */ + USAMPLERCUBEARRAY = 466, /* USAMPLERCUBEARRAY */ + SAMPLER1D = 467, /* SAMPLER1D */ + SAMPLER1DARRAY = 468, /* SAMPLER1DARRAY */ + SAMPLER1DARRAYSHADOW = 469, /* SAMPLER1DARRAYSHADOW */ + ISAMPLER1D = 470, /* ISAMPLER1D */ + SAMPLER1DSHADOW = 471, /* SAMPLER1DSHADOW */ + SAMPLER2DRECT = 472, /* SAMPLER2DRECT */ + SAMPLER2DRECTSHADOW = 473, /* SAMPLER2DRECTSHADOW */ + ISAMPLER2DRECT = 474, /* ISAMPLER2DRECT */ + USAMPLER2DRECT = 475, /* USAMPLER2DRECT */ + SAMPLERBUFFER = 476, /* SAMPLERBUFFER */ + ISAMPLERBUFFER = 477, /* ISAMPLERBUFFER */ + USAMPLERBUFFER = 478, /* USAMPLERBUFFER */ + SAMPLER2DMS = 479, /* SAMPLER2DMS */ + ISAMPLER2DMS = 480, /* ISAMPLER2DMS */ + USAMPLER2DMS = 481, /* USAMPLER2DMS */ + SAMPLER2DMSARRAY = 482, /* SAMPLER2DMSARRAY */ + ISAMPLER2DMSARRAY = 483, /* ISAMPLER2DMSARRAY */ + USAMPLER2DMSARRAY = 484, /* USAMPLER2DMSARRAY */ + SAMPLEREXTERNALOES = 485, /* SAMPLEREXTERNALOES */ + SAMPLEREXTERNAL2DY2YEXT = 486, /* SAMPLEREXTERNAL2DY2YEXT */ + ISAMPLER1DARRAY = 487, /* ISAMPLER1DARRAY */ + USAMPLER1D = 488, /* USAMPLER1D */ + USAMPLER1DARRAY = 489, /* USAMPLER1DARRAY */ + F16SAMPLER1D = 490, /* F16SAMPLER1D */ + F16SAMPLER2D = 491, /* F16SAMPLER2D */ + F16SAMPLER3D = 492, /* F16SAMPLER3D */ + F16SAMPLER2DRECT = 493, /* F16SAMPLER2DRECT */ + F16SAMPLERCUBE = 494, /* F16SAMPLERCUBE */ + F16SAMPLER1DARRAY = 495, /* F16SAMPLER1DARRAY */ + F16SAMPLER2DARRAY = 496, /* F16SAMPLER2DARRAY */ + F16SAMPLERCUBEARRAY = 497, /* F16SAMPLERCUBEARRAY */ + F16SAMPLERBUFFER = 498, /* F16SAMPLERBUFFER */ + F16SAMPLER2DMS = 499, /* F16SAMPLER2DMS */ + F16SAMPLER2DMSARRAY = 500, /* F16SAMPLER2DMSARRAY */ + F16SAMPLER1DSHADOW = 501, /* F16SAMPLER1DSHADOW */ + F16SAMPLER2DSHADOW = 502, /* F16SAMPLER2DSHADOW */ + F16SAMPLER1DARRAYSHADOW = 503, /* F16SAMPLER1DARRAYSHADOW */ + F16SAMPLER2DARRAYSHADOW = 504, /* F16SAMPLER2DARRAYSHADOW */ + F16SAMPLER2DRECTSHADOW = 505, /* F16SAMPLER2DRECTSHADOW */ + F16SAMPLERCUBESHADOW = 506, /* F16SAMPLERCUBESHADOW */ + F16SAMPLERCUBEARRAYSHADOW = 507, /* F16SAMPLERCUBEARRAYSHADOW */ + IMAGE1D = 508, /* IMAGE1D */ + IIMAGE1D = 509, /* IIMAGE1D */ + UIMAGE1D = 510, /* UIMAGE1D */ + IMAGE2D = 511, /* IMAGE2D */ + IIMAGE2D = 512, /* IIMAGE2D */ + UIMAGE2D = 513, /* UIMAGE2D */ + IMAGE3D = 514, /* IMAGE3D */ + IIMAGE3D = 515, /* IIMAGE3D */ + UIMAGE3D = 516, /* UIMAGE3D */ + IMAGE2DRECT = 517, /* IMAGE2DRECT */ + IIMAGE2DRECT = 518, /* IIMAGE2DRECT */ + UIMAGE2DRECT = 519, /* UIMAGE2DRECT */ + IMAGECUBE = 520, /* IMAGECUBE */ + IIMAGECUBE = 521, /* IIMAGECUBE */ + UIMAGECUBE = 522, /* UIMAGECUBE */ + IMAGEBUFFER = 523, /* IMAGEBUFFER */ + IIMAGEBUFFER = 524, /* IIMAGEBUFFER */ + UIMAGEBUFFER = 525, /* UIMAGEBUFFER */ + IMAGE1DARRAY = 526, /* IMAGE1DARRAY */ + IIMAGE1DARRAY = 527, /* IIMAGE1DARRAY */ + UIMAGE1DARRAY = 528, /* UIMAGE1DARRAY */ + IMAGE2DARRAY = 529, /* IMAGE2DARRAY */ + IIMAGE2DARRAY = 530, /* IIMAGE2DARRAY */ + UIMAGE2DARRAY = 531, /* UIMAGE2DARRAY */ + IMAGECUBEARRAY = 532, /* IMAGECUBEARRAY */ + IIMAGECUBEARRAY = 533, /* IIMAGECUBEARRAY */ + UIMAGECUBEARRAY = 534, /* UIMAGECUBEARRAY */ + IMAGE2DMS = 535, /* IMAGE2DMS */ + IIMAGE2DMS = 536, /* IIMAGE2DMS */ + UIMAGE2DMS = 537, /* UIMAGE2DMS */ + IMAGE2DMSARRAY = 538, /* IMAGE2DMSARRAY */ + IIMAGE2DMSARRAY = 539, /* IIMAGE2DMSARRAY */ + UIMAGE2DMSARRAY = 540, /* UIMAGE2DMSARRAY */ + F16IMAGE1D = 541, /* F16IMAGE1D */ + F16IMAGE2D = 542, /* F16IMAGE2D */ + F16IMAGE3D = 543, /* F16IMAGE3D */ + F16IMAGE2DRECT = 544, /* F16IMAGE2DRECT */ + F16IMAGECUBE = 545, /* F16IMAGECUBE */ + F16IMAGE1DARRAY = 546, /* F16IMAGE1DARRAY */ + F16IMAGE2DARRAY = 547, /* F16IMAGE2DARRAY */ + F16IMAGECUBEARRAY = 548, /* F16IMAGECUBEARRAY */ + F16IMAGEBUFFER = 549, /* F16IMAGEBUFFER */ + F16IMAGE2DMS = 550, /* F16IMAGE2DMS */ + F16IMAGE2DMSARRAY = 551, /* F16IMAGE2DMSARRAY */ + I64IMAGE1D = 552, /* I64IMAGE1D */ + U64IMAGE1D = 553, /* U64IMAGE1D */ + I64IMAGE2D = 554, /* I64IMAGE2D */ + U64IMAGE2D = 555, /* U64IMAGE2D */ + I64IMAGE3D = 556, /* I64IMAGE3D */ + U64IMAGE3D = 557, /* U64IMAGE3D */ + I64IMAGE2DRECT = 558, /* I64IMAGE2DRECT */ + U64IMAGE2DRECT = 559, /* U64IMAGE2DRECT */ + I64IMAGECUBE = 560, /* I64IMAGECUBE */ + U64IMAGECUBE = 561, /* U64IMAGECUBE */ + I64IMAGEBUFFER = 562, /* I64IMAGEBUFFER */ + U64IMAGEBUFFER = 563, /* U64IMAGEBUFFER */ + I64IMAGE1DARRAY = 564, /* I64IMAGE1DARRAY */ + U64IMAGE1DARRAY = 565, /* U64IMAGE1DARRAY */ + I64IMAGE2DARRAY = 566, /* I64IMAGE2DARRAY */ + U64IMAGE2DARRAY = 567, /* U64IMAGE2DARRAY */ + I64IMAGECUBEARRAY = 568, /* I64IMAGECUBEARRAY */ + U64IMAGECUBEARRAY = 569, /* U64IMAGECUBEARRAY */ + I64IMAGE2DMS = 570, /* I64IMAGE2DMS */ + U64IMAGE2DMS = 571, /* U64IMAGE2DMS */ + I64IMAGE2DMSARRAY = 572, /* I64IMAGE2DMSARRAY */ + U64IMAGE2DMSARRAY = 573, /* U64IMAGE2DMSARRAY */ + TEXTURECUBEARRAY = 574, /* TEXTURECUBEARRAY */ + ITEXTURECUBEARRAY = 575, /* ITEXTURECUBEARRAY */ + UTEXTURECUBEARRAY = 576, /* UTEXTURECUBEARRAY */ + TEXTURE1D = 577, /* TEXTURE1D */ + ITEXTURE1D = 578, /* ITEXTURE1D */ + UTEXTURE1D = 579, /* UTEXTURE1D */ + TEXTURE1DARRAY = 580, /* TEXTURE1DARRAY */ + ITEXTURE1DARRAY = 581, /* ITEXTURE1DARRAY */ + UTEXTURE1DARRAY = 582, /* UTEXTURE1DARRAY */ + TEXTURE2DRECT = 583, /* TEXTURE2DRECT */ + ITEXTURE2DRECT = 584, /* ITEXTURE2DRECT */ + UTEXTURE2DRECT = 585, /* UTEXTURE2DRECT */ + TEXTUREBUFFER = 586, /* TEXTUREBUFFER */ + ITEXTUREBUFFER = 587, /* ITEXTUREBUFFER */ + UTEXTUREBUFFER = 588, /* UTEXTUREBUFFER */ + TEXTURE2DMS = 589, /* TEXTURE2DMS */ + ITEXTURE2DMS = 590, /* ITEXTURE2DMS */ + UTEXTURE2DMS = 591, /* UTEXTURE2DMS */ + TEXTURE2DMSARRAY = 592, /* TEXTURE2DMSARRAY */ + ITEXTURE2DMSARRAY = 593, /* ITEXTURE2DMSARRAY */ + UTEXTURE2DMSARRAY = 594, /* UTEXTURE2DMSARRAY */ + F16TEXTURE1D = 595, /* F16TEXTURE1D */ + F16TEXTURE2D = 596, /* F16TEXTURE2D */ + F16TEXTURE3D = 597, /* F16TEXTURE3D */ + F16TEXTURE2DRECT = 598, /* F16TEXTURE2DRECT */ + F16TEXTURECUBE = 599, /* F16TEXTURECUBE */ + F16TEXTURE1DARRAY = 600, /* F16TEXTURE1DARRAY */ + F16TEXTURE2DARRAY = 601, /* F16TEXTURE2DARRAY */ + F16TEXTURECUBEARRAY = 602, /* F16TEXTURECUBEARRAY */ + F16TEXTUREBUFFER = 603, /* F16TEXTUREBUFFER */ + F16TEXTURE2DMS = 604, /* F16TEXTURE2DMS */ + F16TEXTURE2DMSARRAY = 605, /* F16TEXTURE2DMSARRAY */ + SUBPASSINPUT = 606, /* SUBPASSINPUT */ + SUBPASSINPUTMS = 607, /* SUBPASSINPUTMS */ + ISUBPASSINPUT = 608, /* ISUBPASSINPUT */ + ISUBPASSINPUTMS = 609, /* ISUBPASSINPUTMS */ + USUBPASSINPUT = 610, /* USUBPASSINPUT */ + USUBPASSINPUTMS = 611, /* USUBPASSINPUTMS */ + F16SUBPASSINPUT = 612, /* F16SUBPASSINPUT */ + F16SUBPASSINPUTMS = 613, /* F16SUBPASSINPUTMS */ + SPIRV_INSTRUCTION = 614, /* SPIRV_INSTRUCTION */ + SPIRV_EXECUTION_MODE = 615, /* SPIRV_EXECUTION_MODE */ + SPIRV_EXECUTION_MODE_ID = 616, /* SPIRV_EXECUTION_MODE_ID */ + SPIRV_DECORATE = 617, /* SPIRV_DECORATE */ + SPIRV_DECORATE_ID = 618, /* SPIRV_DECORATE_ID */ + SPIRV_DECORATE_STRING = 619, /* SPIRV_DECORATE_STRING */ + SPIRV_TYPE = 620, /* SPIRV_TYPE */ + SPIRV_STORAGE_CLASS = 621, /* SPIRV_STORAGE_CLASS */ + SPIRV_BY_REFERENCE = 622, /* SPIRV_BY_REFERENCE */ + SPIRV_LITERAL = 623, /* SPIRV_LITERAL */ + ATTACHMENTEXT = 624, /* ATTACHMENTEXT */ + IATTACHMENTEXT = 625, /* IATTACHMENTEXT */ + UATTACHMENTEXT = 626, /* UATTACHMENTEXT */ + LEFT_OP = 627, /* LEFT_OP */ + RIGHT_OP = 628, /* RIGHT_OP */ + INC_OP = 629, /* INC_OP */ + DEC_OP = 630, /* DEC_OP */ + LE_OP = 631, /* LE_OP */ + GE_OP = 632, /* GE_OP */ + EQ_OP = 633, /* EQ_OP */ + NE_OP = 634, /* NE_OP */ + AND_OP = 635, /* AND_OP */ + OR_OP = 636, /* OR_OP */ + XOR_OP = 637, /* XOR_OP */ + MUL_ASSIGN = 638, /* MUL_ASSIGN */ + DIV_ASSIGN = 639, /* DIV_ASSIGN */ + ADD_ASSIGN = 640, /* ADD_ASSIGN */ + MOD_ASSIGN = 641, /* MOD_ASSIGN */ + LEFT_ASSIGN = 642, /* LEFT_ASSIGN */ + RIGHT_ASSIGN = 643, /* RIGHT_ASSIGN */ + AND_ASSIGN = 644, /* AND_ASSIGN */ + XOR_ASSIGN = 645, /* XOR_ASSIGN */ + OR_ASSIGN = 646, /* OR_ASSIGN */ + SUB_ASSIGN = 647, /* SUB_ASSIGN */ + STRING_LITERAL = 648, /* STRING_LITERAL */ + LEFT_PAREN = 649, /* LEFT_PAREN */ + RIGHT_PAREN = 650, /* RIGHT_PAREN */ + LEFT_BRACKET = 651, /* LEFT_BRACKET */ + RIGHT_BRACKET = 652, /* RIGHT_BRACKET */ + LEFT_BRACE = 653, /* LEFT_BRACE */ + RIGHT_BRACE = 654, /* RIGHT_BRACE */ + DOT = 655, /* DOT */ + COMMA = 656, /* COMMA */ + COLON = 657, /* COLON */ + EQUAL = 658, /* EQUAL */ + SEMICOLON = 659, /* SEMICOLON */ + BANG = 660, /* BANG */ + DASH = 661, /* DASH */ + TILDE = 662, /* TILDE */ + PLUS = 663, /* PLUS */ + STAR = 664, /* STAR */ + SLASH = 665, /* SLASH */ + PERCENT = 666, /* PERCENT */ + LEFT_ANGLE = 667, /* LEFT_ANGLE */ + RIGHT_ANGLE = 668, /* RIGHT_ANGLE */ + VERTICAL_BAR = 669, /* VERTICAL_BAR */ + CARET = 670, /* CARET */ + AMPERSAND = 671, /* AMPERSAND */ + QUESTION = 672, /* QUESTION */ + INVARIANT = 673, /* INVARIANT */ + HIGH_PRECISION = 674, /* HIGH_PRECISION */ + MEDIUM_PRECISION = 675, /* MEDIUM_PRECISION */ + LOW_PRECISION = 676, /* LOW_PRECISION */ + PRECISION = 677, /* PRECISION */ + PACKED = 678, /* PACKED */ + RESOURCE = 679, /* RESOURCE */ + SUPERP = 680, /* SUPERP */ + INLINE = 681, /* INLINE */ + NOINLINE = 682, /* NOINLINE */ + FLOATCONSTANT = 683, /* FLOATCONSTANT */ + INTCONSTANT = 684, /* INTCONSTANT */ + UINTCONSTANT = 685, /* UINTCONSTANT */ + BOOLCONSTANT = 686, /* BOOLCONSTANT */ + IDENTIFIER = 687, /* IDENTIFIER */ + TYPE_NAME = 688, /* TYPE_NAME */ + CENTROID = 689, /* CENTROID */ + IN = 690, /* IN */ + OUT = 691, /* OUT */ + INOUT = 692, /* INOUT */ + STRUCT = 693, /* STRUCT */ + VOID = 694, /* VOID */ + WHILE = 695, /* WHILE */ + BREAK = 696, /* BREAK */ + CONTINUE = 697, /* CONTINUE */ + DO = 698, /* DO */ + ELSE = 699, /* ELSE */ + FOR = 700, /* FOR */ + IF = 701, /* IF */ + DISCARD = 702, /* DISCARD */ + RETURN = 703, /* RETURN */ + SWITCH = 704, /* SWITCH */ + CASE = 705, /* CASE */ + DEFAULT = 706, /* DEFAULT */ + TERMINATE_INVOCATION = 707, /* TERMINATE_INVOCATION */ + TERMINATE_RAY = 708, /* TERMINATE_RAY */ + IGNORE_INTERSECTION = 709, /* IGNORE_INTERSECTION */ + UNIFORM = 710, /* UNIFORM */ + SHARED = 711, /* SHARED */ + BUFFER = 712, /* BUFFER */ + TILEIMAGEEXT = 713, /* TILEIMAGEEXT */ + FLAT = 714, /* FLAT */ + SMOOTH = 715, /* SMOOTH */ + LAYOUT = 716, /* LAYOUT */ + DOUBLECONSTANT = 717, /* DOUBLECONSTANT */ + INT16CONSTANT = 718, /* INT16CONSTANT */ + UINT16CONSTANT = 719, /* UINT16CONSTANT */ + FLOAT16CONSTANT = 720, /* FLOAT16CONSTANT */ + INT32CONSTANT = 721, /* INT32CONSTANT */ + UINT32CONSTANT = 722, /* UINT32CONSTANT */ + FLOATE2M1CONSTANT = 723, /* FLOATE2M1CONSTANT */ + FLOATE3M2CONSTANT = 724, /* FLOATE3M2CONSTANT */ + FLOATE2M3CONSTANT = 725, /* FLOATE2M3CONSTANT */ + FLOATUE8M0CONSTANT = 726, /* FLOATUE8M0CONSTANT */ + FLOATMXINT8CONSTANT = 727, /* FLOATMXINT8CONSTANT */ + INT64CONSTANT = 728, /* INT64CONSTANT */ + UINT64CONSTANT = 729, /* UINT64CONSTANT */ + SUBROUTINE = 730, /* SUBROUTINE */ + DEMOTE = 731, /* DEMOTE */ + FUNCTION = 732, /* FUNCTION */ + PAYLOADNV = 733, /* PAYLOADNV */ + PAYLOADINNV = 734, /* PAYLOADINNV */ + HITATTRNV = 735, /* HITATTRNV */ + CALLDATANV = 736, /* CALLDATANV */ + CALLDATAINNV = 737, /* CALLDATAINNV */ + PAYLOADEXT = 738, /* PAYLOADEXT */ + PAYLOADINEXT = 739, /* PAYLOADINEXT */ + HITATTREXT = 740, /* HITATTREXT */ + CALLDATAEXT = 741, /* CALLDATAEXT */ + CALLDATAINEXT = 742, /* CALLDATAINEXT */ + PATCH = 743, /* PATCH */ + SAMPLE = 744, /* SAMPLE */ + NONUNIFORM = 745, /* NONUNIFORM */ + RESOURCEHEAP = 746, /* RESOURCEHEAP */ + SAMPLERHEAP = 747, /* SAMPLERHEAP */ + COHERENT = 748, /* COHERENT */ + VOLATILE = 749, /* VOLATILE */ + RESTRICT = 750, /* RESTRICT */ + READONLY = 751, /* READONLY */ + WRITEONLY = 752, /* WRITEONLY */ + NONTEMPORAL = 753, /* NONTEMPORAL */ + DEVICECOHERENT = 754, /* DEVICECOHERENT */ + QUEUEFAMILYCOHERENT = 755, /* QUEUEFAMILYCOHERENT */ + WORKGROUPCOHERENT = 756, /* WORKGROUPCOHERENT */ + SUBGROUPCOHERENT = 757, /* SUBGROUPCOHERENT */ + NONPRIVATE = 758, /* NONPRIVATE */ + SHADERCALLCOHERENT = 759, /* SHADERCALLCOHERENT */ + NOPERSPECTIVE = 760, /* NOPERSPECTIVE */ + EXPLICITINTERPAMD = 761, /* EXPLICITINTERPAMD */ + PERVERTEXEXT = 762, /* PERVERTEXEXT */ + PERVERTEXNV = 763, /* PERVERTEXNV */ + PERPRIMITIVENV = 764, /* PERPRIMITIVENV */ + PERVIEWNV = 765, /* PERVIEWNV */ + PERTASKNV = 766, /* PERTASKNV */ + PERPRIMITIVEEXT = 767, /* PERPRIMITIVEEXT */ + TASKPAYLOADWORKGROUPEXT = 768, /* TASKPAYLOADWORKGROUPEXT */ + PRECISE = 769 /* PRECISE */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -586,7 +613,7 @@ union YYSTYPE glslang::TTypeParameters* typeParameters; } interm; -#line 590 "MachineIndependent/glslang_tab.cpp.h" +#line 617 "MachineIndependent/glslang_tab.cpp.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp b/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp index 7de6066d5..9237de2ea 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp @@ -314,6 +314,30 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node) case EOpPackFloat2x16: out.debug << "packFloat2x16"; break; case EOpUnpackFloat2x16: out.debug << "unpackFloat2x16"; break; + case EOpUnpackFloat2xE2M1: out.debug << "unpackFloat2xfe2m1EXT"; break; + case EOpUnpackFloat4xE2M1: out.debug << "unpackFloat4xfe2m1EXT"; break; + case EOpUnpackFloat8xE2M1: out.debug << "unpackFloat8xfe2m1EXT"; break; + case EOpUnpackFloat16xE2M1: out.debug << "unpackFloat16xfe2m1EXT"; break; + case EOpPackFloat2xE2M1: out.debug << "packFloat2xfe2m1EXT"; break; + case EOpPackFloat4xE2M1: out.debug << "packFloat4xfe2m1EXT"; break; + case EOpPackFloat8xE2M1: out.debug << "packFloat8xfe2m1EXT"; break; + case EOpPackFloat16xE2M1: out.debug << "packFloat16xfe2m1EXT"; break; + case EOpUnpackFloat4xE3M2: out.debug << "unpackFloat4xfe3m2EXT"; break; + case EOpUnpackFloat8xE3M2: out.debug << "unpackFloat8xfe3m2EXT"; break; + case EOpUnpackFloat16xE3M2: out.debug << "unpackFloat16xfe3m2EXT"; break; + case EOpPackFloat4xE3M2: out.debug << "packFloat4xfe3m2EXT"; break; + case EOpPackFloat8xE3M2: out.debug << "packFloat8xfe3m2EXT"; break; + case EOpPackFloat16xE3M2: out.debug << "packFloat16xfe3m2EXT"; break; + case EOpUnpackFloat4xE2M3: out.debug << "unpackFloat4xfe2m3EXT"; break; + case EOpUnpackFloat8xE2M3: out.debug << "unpackFloat8xfe2m3EXT"; break; + case EOpUnpackFloat16xE2M3: out.debug << "unpackFloat16xfe2m3EXT"; break; + case EOpPackFloat4xE2M3: out.debug << "packFloat4xfe2m3EXT"; break; + case EOpPackFloat8xE2M3: out.debug << "packFloat8xfe2m3EXT"; break; + case EOpPackFloat16xE2M3: out.debug << "packFloat16xfe2m3EXT"; break; + case EOpBitcastExtractE2M1: out.debug << "bitcastExtractfe2m1EXT"; break; + case EOpBitcastExtractE3M2: out.debug << "bitcastExtractfe3m2EXT"; break; + case EOpBitcastExtractE2M3: out.debug << "bitcastExtractfe2m3EXT"; break; + case EOpLength: out.debug << "length"; break; case EOpNormalize: out.debug << "normalize"; break; case EOpDPdx: out.debug << "dPdx"; break; @@ -638,6 +662,26 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpConstructFloatE4M3Vec2: out.debug << "Construct fe4m3vec2"; break; case EOpConstructFloatE4M3Vec3: out.debug << "Construct fe4m3vec3"; break; case EOpConstructFloatE4M3Vec4: out.debug << "Construct fe4m3vec4"; break; + case EOpConstructFloatE2M1: out.debug << "Construct floate2m1_t"; break; + case EOpConstructFloatE2M1Vec2: out.debug << "Construct fe2m1vec2"; break; + case EOpConstructFloatE2M1Vec3: out.debug << "Construct fe2m1vec3"; break; + case EOpConstructFloatE2M1Vec4: out.debug << "Construct fe2m1vec4"; break; + case EOpConstructFloatE3M2: out.debug << "Construct floate3m2_t"; break; + case EOpConstructFloatE3M2Vec2: out.debug << "Construct fe3m2vec2"; break; + case EOpConstructFloatE3M2Vec3: out.debug << "Construct fe3m2vec3"; break; + case EOpConstructFloatE3M2Vec4: out.debug << "Construct fe3m2vec4"; break; + case EOpConstructFloatE2M3: out.debug << "Construct floate2m3_t"; break; + case EOpConstructFloatE2M3Vec2: out.debug << "Construct fe2m3vec2"; break; + case EOpConstructFloatE2M3Vec3: out.debug << "Construct fe2m3vec3"; break; + case EOpConstructFloatE2M3Vec4: out.debug << "Construct fe2m3vec4"; break; + case EOpConstructFloatUE8M0: out.debug << "Construct floatue8m0_t"; break; + case EOpConstructFloatUE8M0Vec2: out.debug << "Construct fue8m0vec2"; break; + case EOpConstructFloatUE8M0Vec3: out.debug << "Construct fue8m0vec3"; break; + case EOpConstructFloatUE8M0Vec4: out.debug << "Construct fue8m0vec4"; break; + case EOpConstructFloatMXINT8: out.debug << "Construct floatmxint8_t"; break; + case EOpConstructFloatMXINT8Vec2: out.debug << "Construct fmxint8vec2"; break; + case EOpConstructFloatMXINT8Vec3: out.debug << "Construct fmxint8vec3"; break; + case EOpConstructFloatMXINT8Vec4: out.debug << "Construct fmxint8vec4"; break; case EOpConstructFloat16: out.debug << "Construct float16_t"; break; case EOpConstructF16Vec2: out.debug << "Construct f16vec2"; break; case EOpConstructF16Vec3: out.debug << "Construct f16vec3"; break; @@ -806,6 +850,14 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpSparseTextureGatherLodOffset: out.debug << "sparseTextureGatherLodOffset"; break; case EOpSparseTextureGatherLodOffsets: out.debug << "sparseTextureGatherLodOffsets"; break; case EOpSparseImageLoadLod: out.debug << "sparseImageLoadLod"; break; + case EOpTextureGather4x1QCOM: out.debug << "textureGather4x1QCOM"; break; + case EOpTextureGatherV2QCOM: out.debug << "textureGatherV2QCOM"; break; + case EOpTextureGatherH2QCOM: out.debug << "textureGatherH2QCOM"; break; + case EOpTextureGatherDQCOM: out.debug << "textureGatherDQCOM"; break; + case EOpTextureGather4x1OffsetQCOM: out.debug << "textureGather4x1OffsetQCOM"; break; + case EOpTextureGatherV2OffsetQCOM: out.debug << "textureGatherV2OffsetQCOM"; break; + case EOpTextureGatherH2OffsetQCOM: out.debug << "textureGatherH2OffsetQCOM"; break; + case EOpTextureGatherDOffsetQCOM: out.debug << "textureGatherDOffsetQCOM"; break; case EOpImageSampleFootprintNV: out.debug << "imageSampleFootprintNV"; break; case EOpImageSampleFootprintClampNV: out.debug << "imageSampleFootprintClampNV"; break; case EOpImageSampleFootprintLodNV: out.debug << "imageSampleFootprintLodNV"; break; @@ -981,6 +1033,7 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpCooperativeMatrixReduceNV: out.debug << "Reduce cooperative matrices"; break; case EOpCooperativeMatrixPerElementOpNV: out.debug << "cooperative matrix per element op"; break; case EOpCooperativeMatrixTransposeNV: out.debug << "Transpose cooperative matrix"; break; + case EOpCooperativeMatrixGetCoordinateEXT: out.debug << "Cooperative matrix get coordinate"; break; case EOpCooperativeVectorMatMulNV: out.debug << "Cooperative vector matrix multiply NV"; break; case EOpCooperativeVectorMatMulAddNV: out.debug << "Cooperative vector matrix multiply add NV"; break; @@ -1185,6 +1238,11 @@ static void OutputConstantUnion(TInfoSink& out, const TIntermTyped* node, const case EbtBFloat16: case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatE2M1: + case EbtFloatE3M2: + case EbtFloatE2M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: OutputDouble(out, constUnion[i].getDConst(), extra); out.debug << "\n"; break; diff --git a/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp b/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp index f7ab245dd..f38ef56c7 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/iomapper.cpp @@ -61,83 +61,53 @@ namespace glslang { -struct TVarEntryInfo { - long long id; - TIntermSymbol* symbol; - bool live; - TLayoutPacking upgradedToPushConstantPacking; // ElpNone means it hasn't been upgraded - int newBinding; - int newSet; - int newLocation; - int newComponent; - int newIndex; - EShLanguage stage; +static int getLayoutSetLimit(bool relaxSetBindingLimits) +{ + return relaxSetBindingLimits ? INT_MAX : int(TQualifier::layoutSetEnd); +} - void clearNewAssignments() { - upgradedToPushConstantPacking = ElpNone; - newBinding = -1; - newSet = -1; - newLocation = -1; - newComponent = -1; - newIndex = -1; - } +static int getLayoutBindingLimit(bool relaxSetBindingLimits) +{ + return relaxSetBindingLimits ? INT_MAX : int(TQualifier::layoutBindingEnd); +} - struct TOrderById { - inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { return l.id < r.id; } - }; +bool TVarEntryInfo::TOrderByPriority::operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) +{ + const TQualifier& lq = l.symbol->getQualifier(); + const TQualifier& rq = r.symbol->getQualifier(); - struct TOrderByPriority { - // ordering: - // 1) has both binding and set - // 2) has binding but no set - // 3) has no binding but set - // 4) has no binding and no set - inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { - const TQualifier& lq = l.symbol->getQualifier(); - const TQualifier& rq = r.symbol->getQualifier(); + // simple rules: + // has binding gives 2 points + // has set gives 1 point + // who has the most points is more important. + int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); + int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); - // simple rules: - // has binding gives 2 points - // has set gives 1 point - // who has the most points is more important. - int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); - int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); + if (lPoints == rPoints) + return l.id < r.id; + return lPoints > rPoints; +} - if (lPoints == rPoints) - return l.id < r.id; - return lPoints > rPoints; - } - }; +bool TVarEntryInfo::TOrderByPriorityAndLive::operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) +{ + const TQualifier& lq = l.symbol->getQualifier(); + const TQualifier& rq = r.symbol->getQualifier(); - struct TOrderByPriorityAndLive { - // ordering: - // 1) do live variables first - // 2) has both binding and set - // 3) has binding but no set - // 4) has no binding but set - // 5) has no binding and no set - inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { + // simple rules: + // has binding gives 2 points + // has set gives 1 point + // who has the most points is more important. + int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); + int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); - const TQualifier& lq = l.symbol->getQualifier(); - const TQualifier& rq = r.symbol->getQualifier(); + if (l.live != r.live) + return l.live > r.live; - // simple rules: - // has binding gives 2 points - // has set gives 1 point - // who has the most points is more important. - int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); - int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); + if (lPoints != rPoints) + return lPoints > rPoints; - if (l.live != r.live) - return l.live > r.live; - - if (lPoints != rPoints) - return lPoints > rPoints; - - return l.id < r.id; - } - }; -}; + return l.id < r.id; +} // override function "operator=", if a vector being sort, // when use vc++, the sort function will call : @@ -298,11 +268,13 @@ private: }; struct TResolverUniformAdaptor { - TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TVarLiveMap* uniform[EShLangCount], TInfoSink& i, bool& e) + TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TVarLiveMap* uniform[EShLangCount], TInfoSink& i, + bool& e, bool relaxSetBindingLimits) : stage(s) , resolver(r) , infoSink(i) , error(e) + , relaxSetBindingLimits(relaxSetBindingLimits) { memcpy(uniformVarMap, uniform, EShLangCount * (sizeof(TVarLiveMap*))); } @@ -317,7 +289,7 @@ struct TResolverUniformAdaptor { resolver.resolveUniformLocation(ent.stage, ent); if (ent.newBinding != -1) { - if (ent.newBinding >= int(TQualifier::layoutBindingEnd)) { + if (ent.newBinding < 0 || ent.newBinding >= getLayoutBindingLimit(relaxSetBindingLimits)) { TString err = "mapped binding out of range: " + entKey.first; infoSink.info.message(EPrefixInternalError, err.c_str()); @@ -336,7 +308,7 @@ struct TResolverUniformAdaptor { } } if (ent.newSet != -1) { - if (ent.newSet >= int(TQualifier::layoutSetEnd)) { + if (ent.newSet < 0 || ent.newSet >= getLayoutSetLimit(relaxSetBindingLimits)) { TString err = "mapped set out of range: " + entKey.first; infoSink.info.message(EPrefixInternalError, err.c_str()); @@ -366,6 +338,7 @@ struct TResolverUniformAdaptor { TIoMapResolver& resolver; TInfoSink& infoSink; bool& error; + bool relaxSetBindingLimits; TVarLiveMap* uniformVarMap[EShLangCount]; private: TResolverUniformAdaptor& operator=(TResolverUniformAdaptor&) = delete; @@ -674,7 +647,7 @@ struct TSymbolValidater } else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant()) { // validate uniform type; for (int i = 0; i < EShLangCount; i++) { - if (i != currentStage && outVarMaps[i] != nullptr) { + if (i != currentStage && uniformVarMap[i] != nullptr) { auto ent2 = uniformVarMap[i]->find(name); if (ent2 != uniformVarMap[i]->end()) { ent2->second.symbol->getType().appendMangledName(mangleName2); @@ -1349,6 +1322,12 @@ void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& const TType& type = ent.symbol->getType(); const TString& name = ent.symbol->getAccessName(); TResourceType resource = getResourceType(type); + // getResourceType() returns EResCount for types that are not a binding-based + // resource (e.g. atomic_uint). Those don't own a resourceSlotMap/slots row, so + // indexing by EResCount would run off the end of those arrays. resolveBinding() + // guards the same way. + if (resource >= EResCount) + return; int set = referenceIntermediate.getSpv().openGl != 0 ? 0 : resolveSet(ent.stage, ent); int resourceKey = referenceIntermediate.getSpv().openGl != 0 || referenceIntermediate.getBindingsPerResourceType() ? resource : 0; @@ -1594,7 +1573,8 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi TVarLiveMap* dummyUniformVarMap[EShLangCount] = {}; TNotifyInOutAdaptor inOutNotify(stage, *resolver); TNotifyUniformAdaptor uniformNotify(stage, *resolver); - TResolverUniformAdaptor uniformResolve(stage, *resolver, dummyUniformVarMap, infoSink, hadError); + TResolverUniformAdaptor uniformResolve(stage, *resolver, dummyUniformVarMap, infoSink, hadError, + intermediate.getRelaxSetBindingLimits()); TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError); resolver->beginNotifications(stage); std::for_each(inVector.begin(), inVector.end(), inOutNotify); @@ -1670,6 +1650,7 @@ bool TGlslIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TIn // Profile and version are use for symbol validate. profile = intermediate.getProfile(); version = intermediate.getVersion(); + relaxSetBindingLimits |= intermediate.getRelaxSetBindingLimits(); // Restrict the stricter condition to further check 'somethingToDo' only if 'somethingToDo' has not been set, reduce // unnecessary or insignificant for-loop operation after 'somethingToDo' have been true. @@ -1741,7 +1722,8 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { resolver->endResolve(EShLangCount); if (!hadError) { //Resolve uniform location, ubo/ssbo/opaque bindings across stages - TResolverUniformAdaptor uniformResolve(EShLangCount, *resolver, uniformVarMap, infoSink, hadError); + TResolverUniformAdaptor uniformResolve(EShLangCount, *resolver, uniformVarMap, infoSink, hadError, + relaxSetBindingLimits); TResolverInOutAdaptor inOutResolve(EShLangCount, *resolver, infoSink, hadError); TSymbolValidater symbolValidater(*resolver, infoSink, inVarMaps, outVarMaps, uniformVarMap, hadError, profile, version); @@ -1824,7 +1806,7 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { qualifier.setBlockStorage(EbsPushConstant); qualifier.layoutPacking = autoPushConstantBlockPacking; // Push constants don't have set/binding etc. decorations, remove those. - qualifier.layoutSet = TQualifier::layoutSetEnd; + qualifier.layoutSet = TQualifier::layoutNotSet; at->second.clearNewAssignments(); upgraded = true; @@ -1839,7 +1821,7 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { [this](TVarLivePair& p) { if (p.first == autoPushConstantBlockName) { p.second.upgradedToPushConstantPacking = autoPushConstantBlockPacking; - p.second.newSet = TQualifier::layoutSetEnd; + p.second.newSet = TQualifier::layoutNotSet; } }); } diff --git a/3rdparty/glslang/glslang/MachineIndependent/iomapper.h b/3rdparty/glslang/glslang/MachineIndependent/iomapper.h index d8c290733..72ec58c2a 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/iomapper.h +++ b/3rdparty/glslang/glslang/MachineIndependent/iomapper.h @@ -85,9 +85,9 @@ public: int resolveInOutComponent(EShLanguage /*stage*/, TVarEntryInfo& ent) override; int resolveInOutIndex(EShLanguage /*stage*/, TVarEntryInfo& ent) override; void addStage(EShLanguage stage, TIntermediate& stageIntermediate) override { - if (stage < EShLangCount) { - stageMask[stage] = true; - stageIntermediates[stage] = &stageIntermediate; + if ((unsigned)stage < EShLangCount) { + stageMask[(unsigned)stage] = true; + stageIntermediates[(unsigned)stage] = &stageIntermediate; } } uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage); @@ -228,6 +228,7 @@ public: bool doMap(TIoMapResolver*, TInfoSink&) override; TIntermediate* intermediates[EShLangCount]; bool hadError = false; + bool relaxSetBindingLimits = false; EProfile profile; int version; diff --git a/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp b/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp index 0879fa79a..b4cfe4dd3 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp @@ -2419,6 +2419,8 @@ int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size) case EbtBFloat16: size = 2; return 2; case EbtFloatE5M2: case EbtFloatE4M3: + case EbtFloatUE8M0: + case EbtFloatMXINT8: case EbtInt8: case EbtUint8: size = 1; return 1; case EbtInt16: @@ -2752,6 +2754,8 @@ int TIntermediate::getBlockSize(const TType& blockType) { const TTypeList& memberList = *blockType.getStruct(); int lastIndex = (int)memberList.size() - 1; + if (lastIndex < 0) + return 0; int lastOffset = getOffset(blockType, lastIndex); int lastMemberSize; diff --git a/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h b/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h index a001df5f8..46c8a1908 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h +++ b/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h @@ -313,14 +313,15 @@ public: useStorageBuffer(false), invariantAll(false), nanMinMaxClamp(false), + discardIsTerminate(false), depthReplacing(false), stencilReplacing(false), uniqueId(0), globalUniformBlockName(""), atomicCounterBlockName(""), - globalUniformBlockSet(TQualifier::layoutSetEnd), - globalUniformBlockBinding(TQualifier::layoutBindingEnd), - atomicCounterBlockSet(TQualifier::layoutSetEnd), + globalUniformBlockSet(TQualifier::layoutNotSet), + globalUniformBlockBinding(TQualifier::layoutNotSet), + atomicCounterBlockSet(TQualifier::layoutNotSet), implicitThisName("@this"), implicitCounterName("@count"), source(EShSourceNone), useVulkanMemoryModel(false), @@ -344,10 +345,14 @@ public: primitives(TQualifier::layoutNotSet), numTaskNVBlocks(0), layoutPrimitiveCulling(false), + usesOpacityMicromap2StateFlag(false), + enableOpacityMicromapSpecId(TQualifier::layoutNotSet), + enableOpacityMicromapDefault(false), numTaskEXTPayloads(0), nonCoherentTileAttachmentReadQCOM(false), autoMapBindings(false), autoMapLocations(false), + relaxSetBindingLimits(false), flattenUniformArrays(false), useUnknownFormat(false), hlslOffsets(false), @@ -519,6 +524,14 @@ public: } bool getEnhancedMsgs() const { return enhancedMsgs && getSource() == EShSourceGlsl; } + void setDiscardIsTerminate(bool discardIsTerminateP) + { + discardIsTerminate = discardIsTerminateP; + if (discardIsTerminate) + processes.addProcess("discard-is-terminate"); + } + bool getDiscardIsTerminate() const { return discardIsTerminate; } + #ifdef ENABLE_HLSL void setSource(EShSource s) { source = s; } EShSource getSource() const { return source; } @@ -610,15 +623,15 @@ public: void setGlobalUniformBlockName(const char* name) { globalUniformBlockName = std::string(name); } const char* getGlobalUniformBlockName() const { return globalUniformBlockName.c_str(); } - void setGlobalUniformSet(unsigned int set) { globalUniformBlockSet = set; } - unsigned int getGlobalUniformSet() const { return globalUniformBlockSet; } - void setGlobalUniformBinding(unsigned int binding) { globalUniformBlockBinding = binding; } - unsigned int getGlobalUniformBinding() const { return globalUniformBlockBinding; } + void setGlobalUniformSet(unsigned int set) { globalUniformBlockSet = static_cast(set); } + int getGlobalUniformSet() const { return globalUniformBlockSet; } + void setGlobalUniformBinding(unsigned int binding) { globalUniformBlockBinding = static_cast(binding); } + int getGlobalUniformBinding() const { return globalUniformBlockBinding; } void setAtomicCounterBlockName(const char* name) { atomicCounterBlockName = std::string(name); } const char* getAtomicCounterBlockName() const { return atomicCounterBlockName.c_str(); } - void setAtomicCounterBlockSet(unsigned int set) { atomicCounterBlockSet = set; } - unsigned int getAtomicCounterBlockSet() const { return atomicCounterBlockSet; } + void setAtomicCounterBlockSet(unsigned int set) { atomicCounterBlockSet = static_cast(set); } + int getAtomicCounterBlockSet() const { return atomicCounterBlockSet; } void setUseStorageBuffer() { useStorageBuffer = true; } @@ -734,6 +747,13 @@ public: processes.addProcess("auto-map-locations"); } bool getAutoMapLocations() const { return autoMapLocations; } + void setRelaxSetBindingLimits(bool relax) + { + relaxSetBindingLimits = relax; + if (relaxSetBindingLimits) + processes.addProcess("relax-set-binding-limits"); + } + bool getRelaxSetBindingLimits() const { return relaxSetBindingLimits; } #ifdef ENABLE_HLSL void setFlattenUniformArrays(bool flatten) @@ -996,6 +1016,18 @@ public: TDerivativeGroupExtension getLayoutDerivativeExtension() const { return computeDerivativeExtension; } void setLayoutPrimitiveCulling() { layoutPrimitiveCulling = true; } bool getLayoutPrimitiveCulling() const { return layoutPrimitiveCulling; } + void setUsesOpacityMicromap2StateFlag() { usesOpacityMicromap2StateFlag = true; } + bool getUsesOpacityMicromap2StateFlag() const { return usesOpacityMicromap2StateFlag; } + // GL_EXT_opacity_micromap_ray_query_mode: state for the gl_EnableOpacityMicromapEXT built-in. When + // the extension is enabled the SPIR-V generator emits the OpacityMicromapIdKHR execution mode; the + // operand id depends on how the built-in was (re)declared: + // - redeclared with a constant_id -> OpSpecConstantFalse decorated with that SpecId + // - redeclared 'const bool = true' -> OpConstantTrue (enableOpacityMicromapDefault == true) + // - otherwise (default or '= false') -> OpConstantFalse + void setEnableOpacityMicromapSpecId(int id) { enableOpacityMicromapSpecId = id; } + int getEnableOpacityMicromapSpecId() const { return enableOpacityMicromapSpecId; } + void setEnableOpacityMicromapDefault(bool v) { enableOpacityMicromapDefault = v; } + bool getEnableOpacityMicromapDefault() const { return enableOpacityMicromapDefault; } bool setPrimitives(int m) { if (primitives != TQualifier::layoutNotSet) @@ -1093,6 +1125,10 @@ public: return IsRequestedExtension(E_GL_EXT_texture_offset_non_const); } + bool usingCoopMatMaint1() const { + return IsRequestedExtension(E_GL_EXT_cooperative_matrix_maintenance1); + } + bool IsRequestedExtension(const char* extension) const { return (requestedExtensions.find(extension) != requestedExtensions.end()); @@ -1247,6 +1283,7 @@ protected: bool useStorageBuffer; bool invariantAll; bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN + bool discardIsTerminate; // true if discard should be emitted as OpTerminateInvocation instead of OpDemoteToHelperInvocation bool depthReplacing; bool stencilReplacing; int localSize[3]; @@ -1256,9 +1293,9 @@ protected: std::string globalUniformBlockName; std::string atomicCounterBlockName; - unsigned int globalUniformBlockSet; - unsigned int globalUniformBlockBinding; - unsigned int atomicCounterBlockSet; + int globalUniformBlockSet; + int globalUniformBlockBinding; + int atomicCounterBlockSet; public: const char* const implicitThisName; @@ -1298,6 +1335,9 @@ protected: int primitives; int numTaskNVBlocks; bool layoutPrimitiveCulling; + bool usesOpacityMicromap2StateFlag; + int enableOpacityMicromapSpecId; + bool enableOpacityMicromapDefault; int numTaskEXTPayloads; bool nonCoherentTileAttachmentReadQCOM; @@ -1313,6 +1353,7 @@ protected: std::vector resourceSetBinding; bool autoMapBindings; bool autoMapLocations; + bool relaxSetBindingLimits; bool flattenUniformArrays; bool useUnknownFormat; bool hlslOffsets; diff --git a/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h b/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h index df1fa5701..01fefde5c 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h +++ b/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h @@ -106,6 +106,11 @@ public: virtual void bfloat16ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false); virtual void floate5m2ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false); virtual void floate4m3ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false); + virtual void floate2m1ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false); + virtual void floate3m2ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false); + virtual void floate2m3ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false); + virtual void floatue8m0ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false); + virtual void floatmxint8ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false); virtual bool float16Arithmetic(); virtual void requireFloat16Arithmetic(const TSourceLoc& loc, const char* op, const char* featureDesc); virtual void int16ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false); @@ -132,6 +137,7 @@ public: virtual void tensorCheckARM(const TSourceLoc&, const char *op, bool builtIn = false); bool relaxedErrors() const { return (messages & EShMsgRelaxedErrors) != 0; } bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; } + bool relaxSetBindingLimits() const { return (messages & EShMsgRelaxSetBindingLimits) != 0; } bool isForwardCompatible() const { return forwardCompatible; } virtual void spvRemoved(const TSourceLoc&, const char* op); diff --git a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp index 2f4a79bab..a99df79c6 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp @@ -316,7 +316,8 @@ int TPpContext::CPPelse(int matchelse, TPpToken* ppToken) } } else if (nextAtom == PpAtomEndif) { token = extraTokenCheck(nextAtom, ppToken, scanToken(ppToken)); - elseSeen[elsetracker] = false; + if (elsetracker >= 0) + elseSeen[elsetracker] = false; --elsetracker; if (depth == 0) { // found the #endif we are looking for @@ -325,7 +326,8 @@ int TPpContext::CPPelse(int matchelse, TPpToken* ppToken) break; } --depth; - --ifdepth; + if (ifdepth > 0) + --ifdepth; } else if (matchelse && depth == 0) { if (nextAtom == PpAtomElse) { elseSeen[elsetracker] = true; @@ -412,11 +414,15 @@ namespace { int op_le(int a, int b) { return a <= b; } int op_gt(int a, int b) { return a > b; } int op_lt(int a, int b) { return a < b; } - int op_shl(int a, int b) { return a << b; } - int op_shr(int a, int b) { return a >> b; } - int op_add(int a, int b) { return a + b; } - int op_sub(int a, int b) { return a - b; } - int op_mul(int a, int b) { return a * b; } + // #if expressions are evaluated in 32-bit signed integers, so a shift count + // coming from the source can be out of range, and +, - and * can overflow. + // Both are undefined in C++, so give them a defined result here. + const int intBits = (int)(sizeof(int) * CHAR_BIT); + int op_shl(int a, int b) { return b < 0 || b >= intBits ? 0 : (int)((unsigned)a << b); } + int op_shr(int a, int b) { return b < 0 || b >= intBits ? (a < 0 ? -1 : 0) : a >> b; } + int op_add(int a, int b) { return (int)((unsigned)a + (unsigned)b); } + int op_sub(int a, int b) { return (int)((unsigned)a - (unsigned)b); } + int op_mul(int a, int b) { return (int)((unsigned)a * (unsigned)b); } int op_div(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a / b; } int op_mod(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a % b; } int op_pos(int a) { return a; } @@ -634,7 +640,7 @@ int TPpContext::CPPif(TPpToken* ppToken) int TPpContext::CPPifdef(int defined, TPpToken* ppToken) { int token = scanToken(ppToken); - if (ifdepth > maxIfNesting || elsetracker > maxIfNesting) { + if (ifdepth >= maxIfNesting || elsetracker >= maxIfNesting) { parseContext.ppError(ppToken->loc, "maximum nesting depth exceeded", "#ifdef", ""); return EndOfInput; } else { @@ -821,6 +827,11 @@ int TPpContext::CPPerror(TPpToken* ppToken) token == PpAtomConstInt || token == PpAtomConstUint || token == PpAtomConstInt64 || token == PpAtomConstUint64 || token == PpAtomConstFloat16 || + token == PpAtomConstFloatE2M1 || + token == PpAtomConstFloatE3M2 || + token == PpAtomConstFloatE2M3 || + token == PpAtomConstFloatUE8M0 || + token == PpAtomConstFloatMXINT8 || token == PpAtomConstFloat || token == PpAtomConstDouble) { message.append(ppToken->name); } else if (token == PpAtomIdentifier || token == PpAtomConstString) { @@ -858,6 +869,11 @@ int TPpContext::CPPpragma(TPpToken* ppToken) case PpAtomConstFloat: case PpAtomConstDouble: case PpAtomConstFloat16: + case PpAtomConstFloatE2M1: + case PpAtomConstFloatE3M2: + case PpAtomConstFloatE2M3: + case PpAtomConstFloatUE8M0: + case PpAtomConstFloatMXINT8: tokens.push_back(ppToken->name); break; default: @@ -998,7 +1014,8 @@ int TPpContext::readCPPline(TPpToken* ppToken) if (ifdepth == 0) parseContext.ppError(ppToken->loc, "mismatched statements", "#endif", ""); else { - elseSeen[elsetracker] = false; + if (elsetracker >= 0) + elseSeen[elsetracker] = false; --elsetracker; --ifdepth; } @@ -1224,6 +1241,20 @@ MacroExpandResult TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, b { ppToken->space = false; int macroAtom = atomStrings.getAtom(ppToken->name); + + // Bound total MacroExpand nesting depth to prevent stack overflow + // via unbounded MacroExpand <-> PrescanMacroArg mutual recursion. + if (macroExpandDepth >= maxMacroExpandDepth) { + parseContext.ppError(ppToken->loc, "macro expansion depth limit exceeded", + "macro expansion", ppToken->name); + return MacroExpandNotStarted; + } + struct DepthGuard { + int& d; + explicit DepthGuard(int& d_) : d(d_) { ++d; } + ~DepthGuard() { --d; } + } guard(macroExpandDepth); + if (ppToken->fullyExpanded) return MacroExpandNotStarted; diff --git a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp index f27204bc4..12ab9c297 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp @@ -92,7 +92,7 @@ TPpContext::TPpContext(TParseContextBase& pc, const std::string& rootFileName, T inElseSkip(false) { ifdepth = 0; - for (elsetracker = 0; elsetracker < maxIfNesting; elsetracker++) + for (elsetracker = 0; elsetracker <= maxIfNesting; elsetracker++) elseSeen[elsetracker] = false; elsetracker = 0; diff --git a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h index 582d119f4..eef9048de 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h +++ b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpContext.h @@ -298,6 +298,11 @@ public: case PpAtomConstFloat: case PpAtomConstDouble: case PpAtomConstFloat16: + case PpAtomConstFloatE2M1: + case PpAtomConstFloatE3M2: + case PpAtomConstFloatE2M3: + case PpAtomConstFloatUE8M0: + case PpAtomConstFloatMXINT8: case PpAtomConstString: case PpAtomIdentifier: return true; @@ -393,9 +398,9 @@ protected: static const int maxIfNesting = 65; - int ifdepth; // current #if-#else-#endif nesting in the cpp.c file (pre-processor) - bool elseSeen[maxIfNesting]; // Keep a track of whether an else has been seen at a particular depth - int elsetracker; // #if-#else and #endif constructs...Counter. + int ifdepth; // current #if-#else-#endif nesting in the cpp.c file (pre-processor) + bool elseSeen[maxIfNesting + 1]; // Keep a track of whether an else has been seen at a particular depth + int elsetracker; // #if-#else and #endif constructs...Counter. class tMacroInput : public tInput { public: @@ -441,36 +446,13 @@ protected: static const int marker = -3; }; - class tStringifyLevelInput : public tInput { - int what; - tStringifyLevelInput(TPpContext* pp) : tInput(pp) { } - public: - static tStringifyLevelInput popMarker(TPpContext* pp) - { - tStringifyLevelInput sl(pp); - sl.what = POP; - return sl; - } - - static tStringifyLevelInput pushMarker(TPpContext* pp) - { - tStringifyLevelInput sl(pp); - sl.what = PUSH; - return sl; - } - - int scan(TPpToken*) override - { - if (done) - return EndOfInput; - done = true; - - return what; - } - virtual int getch() override { assert(0); return EndOfInput; } - virtual void ungetch() override { assert(0); } - static const int PUSH = -4; - static const int POP = -5; + struct tStringifyLevelInput { + // PUSH is a token atom indicating a new stringizing (#) level + // during macro body expansion. + static constexpr int PUSH = -4; + // PUSH is a token atom indicating the end of a stringizing level + // during macro body expansion. + static constexpr int POP = -5; }; class tZeroInput : public tInput { @@ -484,6 +466,10 @@ protected: std::vector inputStack; bool errorOnVersion; bool versionSeen; + // Current nesting depth of MacroExpand() calls; bounded to prevent + // stack overflow via unbounded MacroExpand <-> PrescanMacroArg recursion. + int macroExpandDepth = 0; + static const int maxMacroExpandDepth = 200; // // from Pp.cpp diff --git a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp index 61b75b745..c160e287a 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -261,6 +261,11 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) // Suffix: bool isDouble = false; bool isFloat16 = false; + bool isFE2M1 = false; + bool isFE3M2 = false; + bool isFE2M3 = false; + bool isFUE8M0 = false; + bool isFMXINT8 = false; if (ch == 'l' || ch == 'L') { if (ifdepth == 0 && parseContext.intermediate.getSource() == EShSourceGlsl) parseContext.doubleCheck(ppToken->loc, "double floating-point suffix"); @@ -308,6 +313,44 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) if (ifdepth == 0 && !hasDecimalOrExponent) parseContext.ppError(ppToken->loc, "float literal needs a decimal point or exponent", "", ""); saveName(ch); + + auto const &try_str = [&](const char *str, size_t numChar) { + size_t counter = 0; + for (size_t i = 0; i < numChar; ++i) { + if (getChar() != str[i]) { + break; + } + counter++; + } + if (counter == numChar) { + for (size_t i = 0; i < numChar; ++i) { + saveName(str[i]); + } + return true; + } else { + // called getChar one more than counter times + counter++; + while (counter) { + ungetChar(); + counter--; + } + return false; + } + }; + + if (ch == 'f') { + if (try_str("e2m1", 4)) { + isFE2M1 = true; + } else if (try_str("e3m2", 4)) { + isFE3M2 = true; + } else if (try_str("e2m3", 4)) { + isFE2M3 = true; + } else if (try_str("ue8m0", 5)) { + isFUE8M0 = true; + } else if (try_str("mxint8", 6)) { + isFMXINT8 = true; + } + } } else ungetChar(); @@ -364,6 +407,16 @@ int TPpContext::lFloatConst(int len, int ch, TPpToken* ppToken) return PpAtomConstDouble; else if (isFloat16) return PpAtomConstFloat16; + else if (isFE2M1) + return PpAtomConstFloatE2M1; + else if (isFE3M2) + return PpAtomConstFloatE3M2; + else if (isFE2M3) + return PpAtomConstFloatE2M3; + else if (isFUE8M0) + return PpAtomConstFloatUE8M0; + else if (isFMXINT8) + return PpAtomConstFloatMXINT8; else return PpAtomConstFloat; } @@ -1308,6 +1361,11 @@ int TPpContext::tokenize(TPpToken& ppToken) case PpAtomConstUint16: case PpAtomConstDouble: case PpAtomConstFloat16: + case PpAtomConstFloatE2M1: + case PpAtomConstFloatE3M2: + case PpAtomConstFloatE2M3: + case PpAtomConstFloatUE8M0: + case PpAtomConstFloatMXINT8: if (ppToken.name[0] == '\0') continue; break; diff --git a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h index 7b0f81550..486f69afc 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h +++ b/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h @@ -132,6 +132,11 @@ enum EFixedAtoms { PpAtomConstFloat, PpAtomConstDouble, PpAtomConstFloat16, + PpAtomConstFloatE2M1, + PpAtomConstFloatE3M2, + PpAtomConstFloatE2M3, + PpAtomConstFloatUE8M0, + PpAtomConstFloatMXINT8, PpAtomConstString, // Identifiers diff --git a/3rdparty/glslang/glslang/Public/ShaderLang.h b/3rdparty/glslang/glslang/Public/ShaderLang.h index 0f68d7a81..dc682855b 100644 --- a/3rdparty/glslang/glslang/Public/ShaderLang.h +++ b/3rdparty/glslang/glslang/Public/ShaderLang.h @@ -274,6 +274,7 @@ enum EShMessages : unsigned { EShMsgDisplayErrorColumn = (1 << 17), // Display error message column aswell as line EShMsgLinkTimeOptimization = (1 << 18), // perform cross-stage optimizations during linking EShMsgValidateCrossStageIO = (1 << 19), // validate shader inputs have matching outputs in previous stage + EShMsgRelaxSetBindingLimits = (1 << 20), // relax layout(set/binding) limits LAST_ELEMENT_MARKER(EShMsgCount), }; @@ -508,6 +509,7 @@ public: #endif void setNoStorageFormat(bool useUnknownFormat); void setNanMinMaxClamp(bool nanMinMaxClamp); + void setDiscardIsTerminate(bool discardIsTerminate); void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode); void addBlockStorageOverride(const char* nameStr, glslang::TBlockStorageClass backing); @@ -781,9 +783,55 @@ protected: const TType* type; }; -class TReflection; -class TIoMapper; -struct TVarEntryInfo; +class TReflection; +class TIoMapper; +class TIntermSymbol; + +struct GLSLANG_EXPORT TVarEntryInfo { + long long id; + TIntermSymbol* symbol; + bool live; + TLayoutPacking upgradedToPushConstantPacking; // ElpNone means it hasn't been upgraded + int newBinding; + int newSet; + int newLocation; + int newComponent; + int newIndex; + EShLanguage stage; + + void clearNewAssignments() { + upgradedToPushConstantPacking = ElpNone; + newBinding = -1; + newSet = -1; + newLocation = -1; + newComponent = -1; + newIndex = -1; + } + + struct TOrderById { + inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { return l.id < r.id; } + }; + + struct TOrderByPriority { + // ordering: + // 1) has both binding and set + // 2) has binding but no set + // 3) has no binding but set + // 4) has no binding and no set + bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r); + }; + + struct TOrderByPriorityAndLive { + // ordering: + // 1) do live variables first + // 2) has both binding and set + // 3) has binding but no set + // 4) has no binding but set + // 5) has no binding and no set + bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r); + }; +}; + // Allows to customize the binding layout after linking. // All used uniform variables will invoke at least validateBinding.