diff --git a/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h b/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h index fb73f25f8..25dd88ff2 100644 --- a/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h +++ b/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h @@ -65,5 +65,6 @@ static const char* const E_SPV_EXT_replicated_composites = "SPV_EXT_repli static const char* const E_SPV_KHR_relaxed_extended_instruction = "SPV_KHR_relaxed_extended_instruction"; static const char* const E_SPV_KHR_integer_dot_product = "SPV_KHR_integer_dot_product"; static const char* const E_SPV_NV_cooperative_vector = "SPV_NV_cooperative_vector"; +static const char* const E_SPV_KHR_bfloat16 = "SPV_KHR_bfloat16"; #endif // #ifndef GLSLextKHR_H diff --git a/3rdparty/glslang/SPIRV/GLSL.ext.NV.h b/3rdparty/glslang/SPIRV/GLSL.ext.NV.h index d4a97b31f..4516d2d54 100644 --- a/3rdparty/glslang/SPIRV/GLSL.ext.NV.h +++ b/3rdparty/glslang/SPIRV/GLSL.ext.NV.h @@ -27,10 +27,10 @@ #ifndef GLSLextNV_H #define GLSLextNV_H -enum BuiltIn; -enum Decoration; -enum Op; -enum Capability; +enum class BuiltIn : unsigned; +enum class Decoration : unsigned; +enum class Op : unsigned; +enum class Capability : unsigned; static const int GLSLextNVVersion = 100; static const int GLSLextNVRevision = 11; diff --git a/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h b/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h index b52990f02..34d6c943c 100644 --- a/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h +++ b/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h @@ -27,10 +27,10 @@ #ifndef GLSLextQCOM_H #define GLSLextQCOM_H -enum BuiltIn; -enum Decoration; -enum Op; -enum Capability; +enum class BuiltIn : unsigned; +enum class Decoration : unsigned; +enum class Op : unsigned; +enum class Capability : unsigned; static const int GLSLextQCOMVersion = 100; static const int GLSLextQCOMRevision = 1; diff --git a/3rdparty/glslang/SPIRV/GlslangToSpv.cpp b/3rdparty/glslang/SPIRV/GlslangToSpv.cpp index 1e0ff3305..1139b915f 100644 --- a/3rdparty/glslang/SPIRV/GlslangToSpv.cpp +++ b/3rdparty/glslang/SPIRV/GlslangToSpv.cpp @@ -40,10 +40,12 @@ // translate them to SPIR-V. // -#include "spirv.hpp" +#include "spirv.hpp11" #include "GlslangToSpv.h" #include "SpvBuilder.h" #include "SpvTools.h" +#include "spvUtil.h" + namespace spv { #include "GLSL.std.450.h" #include "GLSL.ext.KHR.h" @@ -301,16 +303,16 @@ spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile case ENoProfile: case ECoreProfile: case ECompatibilityProfile: - return spv::SourceLanguageGLSL; + return spv::SourceLanguage::GLSL; case EEsProfile: - return spv::SourceLanguageESSL; + return spv::SourceLanguage::ESSL; default: - return spv::SourceLanguageUnknown; + return spv::SourceLanguage::Unknown; } case glslang::EShSourceHlsl: - return spv::SourceLanguageHLSL; + return spv::SourceLanguage::HLSL; default: - return spv::SourceLanguageUnknown; + return spv::SourceLanguage::Unknown; } } @@ -318,23 +320,23 @@ spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile spv::ExecutionModel TranslateExecutionModel(EShLanguage stage, bool isMeshShaderEXT = false) { switch (stage) { - case EShLangVertex: return spv::ExecutionModelVertex; - case EShLangFragment: return spv::ExecutionModelFragment; - case EShLangCompute: return spv::ExecutionModelGLCompute; - case EShLangTessControl: return spv::ExecutionModelTessellationControl; - case EShLangTessEvaluation: return spv::ExecutionModelTessellationEvaluation; - case EShLangGeometry: return spv::ExecutionModelGeometry; - case EShLangRayGen: return spv::ExecutionModelRayGenerationKHR; - case EShLangIntersect: return spv::ExecutionModelIntersectionKHR; - case EShLangAnyHit: return spv::ExecutionModelAnyHitKHR; - case EShLangClosestHit: return spv::ExecutionModelClosestHitKHR; - case EShLangMiss: return spv::ExecutionModelMissKHR; - case EShLangCallable: return spv::ExecutionModelCallableKHR; - case EShLangTask: return (isMeshShaderEXT)? spv::ExecutionModelTaskEXT : spv::ExecutionModelTaskNV; - case EShLangMesh: return (isMeshShaderEXT)? spv::ExecutionModelMeshEXT: spv::ExecutionModelMeshNV; + case EShLangVertex: return spv::ExecutionModel::Vertex; + case EShLangFragment: return spv::ExecutionModel::Fragment; + case EShLangCompute: return spv::ExecutionModel::GLCompute; + case EShLangTessControl: return spv::ExecutionModel::TessellationControl; + case EShLangTessEvaluation: return spv::ExecutionModel::TessellationEvaluation; + case EShLangGeometry: return spv::ExecutionModel::Geometry; + case EShLangRayGen: return spv::ExecutionModel::RayGenerationKHR; + case EShLangIntersect: return spv::ExecutionModel::IntersectionKHR; + case EShLangAnyHit: return spv::ExecutionModel::AnyHitKHR; + case EShLangClosestHit: return spv::ExecutionModel::ClosestHitKHR; + case EShLangMiss: return spv::ExecutionModel::MissKHR; + case EShLangCallable: return spv::ExecutionModel::CallableKHR; + case EShLangTask: return (isMeshShaderEXT)? spv::ExecutionModel::TaskEXT : spv::ExecutionModel::TaskNV; + case EShLangMesh: return (isMeshShaderEXT)? spv::ExecutionModel::MeshEXT : spv::ExecutionModel::MeshNV; default: assert(0); - return spv::ExecutionModelFragment; + return spv::ExecutionModel::Fragment; } } @@ -342,17 +344,17 @@ spv::ExecutionModel TranslateExecutionModel(EShLanguage stage, bool isMeshShader spv::Dim TranslateDimensionality(const glslang::TSampler& sampler) { switch (sampler.dim) { - case glslang::Esd1D: return spv::Dim1D; - case glslang::Esd2D: return spv::Dim2D; - case glslang::Esd3D: return spv::Dim3D; - case glslang::EsdCube: return spv::DimCube; - case glslang::EsdRect: return spv::DimRect; - case glslang::EsdBuffer: return spv::DimBuffer; - case glslang::EsdSubpass: return spv::DimSubpassData; - case glslang::EsdAttachmentEXT: return spv::DimTileImageDataEXT; + case glslang::Esd1D: return spv::Dim::Dim1D; + case glslang::Esd2D: return spv::Dim::Dim2D; + case glslang::Esd3D: return spv::Dim::Dim3D; + case glslang::EsdCube: return spv::Dim::Cube; + case glslang::EsdRect: return spv::Dim::Rect; + case glslang::EsdBuffer: return spv::Dim::Buffer; + case glslang::EsdSubpass: return spv::Dim::SubpassData; + case glslang::EsdAttachmentEXT: return spv::Dim::TileImageDataEXT; default: assert(0); - return spv::Dim2D; + return spv::Dim::Dim2D; } } @@ -360,8 +362,8 @@ spv::Dim TranslateDimensionality(const glslang::TSampler& sampler) spv::Decoration TranslatePrecisionDecoration(glslang::TPrecisionQualifier glslangPrecision) { switch (glslangPrecision) { - case glslang::EpqLow: return spv::DecorationRelaxedPrecision; - case glslang::EpqMedium: return spv::DecorationRelaxedPrecision; + case glslang::EpqLow: return spv::Decoration::RelaxedPrecision; + case glslang::EpqMedium: return spv::Decoration::RelaxedPrecision; default: return spv::NoPrecision; } @@ -377,23 +379,23 @@ spv::Decoration TranslatePrecisionDecoration(const glslang::TType& type) spv::Decoration TranslateBlockDecoration(const glslang::TStorageQualifier storage, bool useStorageBuffer) { switch (storage) { - case glslang::EvqUniform: return spv::DecorationBlock; - case glslang::EvqBuffer: return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock; - case glslang::EvqVaryingIn: return spv::DecorationBlock; - case glslang::EvqVaryingOut: return spv::DecorationBlock; - case glslang::EvqShared: return spv::DecorationBlock; - case glslang::EvqPayload: return spv::DecorationBlock; - case glslang::EvqPayloadIn: return spv::DecorationBlock; - case glslang::EvqHitAttr: return spv::DecorationBlock; - case glslang::EvqCallableData: return spv::DecorationBlock; - case glslang::EvqCallableDataIn: return spv::DecorationBlock; - case glslang::EvqHitObjectAttrNV: return spv::DecorationBlock; + case glslang::EvqUniform: return spv::Decoration::Block; + case glslang::EvqBuffer: return useStorageBuffer ? spv::Decoration::Block : spv::Decoration::BufferBlock; + case glslang::EvqVaryingIn: return spv::Decoration::Block; + case glslang::EvqVaryingOut: return spv::Decoration::Block; + case glslang::EvqShared: return spv::Decoration::Block; + case glslang::EvqPayload: return spv::Decoration::Block; + case glslang::EvqPayloadIn: return spv::Decoration::Block; + case glslang::EvqHitAttr: return spv::Decoration::Block; + case glslang::EvqCallableData: return spv::Decoration::Block; + case glslang::EvqCallableDataIn: return spv::Decoration::Block; + case glslang::EvqHitObjectAttrNV: return spv::Decoration::Block; default: assert(0); break; } - return spv::DecorationMax; + return spv::Decoration::Max; } // Translate glslang type to SPIR-V memory decorations. @@ -402,18 +404,18 @@ void TranslateMemoryDecoration(const glslang::TQualifier& qualifier, std::vector { if (!useVulkanMemoryModel) { if (qualifier.isVolatile()) { - memory.push_back(spv::DecorationVolatile); - memory.push_back(spv::DecorationCoherent); + memory.push_back(spv::Decoration::Volatile); + memory.push_back(spv::Decoration::Coherent); } else if (qualifier.isCoherent()) { - memory.push_back(spv::DecorationCoherent); + memory.push_back(spv::Decoration::Coherent); } } if (qualifier.isRestrict()) - memory.push_back(spv::DecorationRestrict); + memory.push_back(spv::Decoration::Restrict); if (qualifier.isReadOnly()) - memory.push_back(spv::DecorationNonWritable); + memory.push_back(spv::Decoration::NonWritable); if (qualifier.isWriteOnly()) - memory.push_back(spv::DecorationNonReadable); + memory.push_back(spv::Decoration::NonReadable); } // Translate glslang type to SPIR-V layout decorations. @@ -422,17 +424,17 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T if (type.isMatrix()) { switch (matrixLayout) { case glslang::ElmRowMajor: - return spv::DecorationRowMajor; + return spv::Decoration::RowMajor; case glslang::ElmColumnMajor: - return spv::DecorationColMajor; + return spv::Decoration::ColMajor; default: // opaque layouts don't need a majorness - return spv::DecorationMax; + return spv::Decoration::Max; } } else { switch (type.getBasicType()) { default: - return spv::DecorationMax; + return spv::Decoration::Max; break; case glslang::EbtBlock: switch (type.getQualifier().storage) { @@ -440,91 +442,91 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T case glslang::EvqUniform: case glslang::EvqBuffer: switch (type.getQualifier().layoutPacking) { - case glslang::ElpShared: return spv::DecorationGLSLShared; - case glslang::ElpPacked: return spv::DecorationGLSLPacked; + case glslang::ElpShared: return spv::Decoration::GLSLShared; + case glslang::ElpPacked: return spv::Decoration::GLSLPacked; default: - return spv::DecorationMax; + return spv::Decoration::Max; } case glslang::EvqVaryingIn: case glslang::EvqVaryingOut: if (type.getQualifier().isTaskMemory()) { switch (type.getQualifier().layoutPacking) { - case glslang::ElpShared: return spv::DecorationGLSLShared; - case glslang::ElpPacked: return spv::DecorationGLSLPacked; + case glslang::ElpShared: return spv::Decoration::GLSLShared; + case glslang::ElpPacked: return spv::Decoration::GLSLPacked; default: break; } } else { assert(type.getQualifier().layoutPacking == glslang::ElpNone); } - return spv::DecorationMax; + return spv::Decoration::Max; case glslang::EvqPayload: case glslang::EvqPayloadIn: case glslang::EvqHitAttr: case glslang::EvqCallableData: case glslang::EvqCallableDataIn: case glslang::EvqHitObjectAttrNV: - return spv::DecorationMax; + return spv::Decoration::Max; default: assert(0); - return spv::DecorationMax; + return spv::Decoration::Max; } } } } // Translate glslang type to SPIR-V interpolation decorations. -// Returns spv::DecorationMax when no decoration +// Returns spv::Decoration::Max when no decoration // should be applied. spv::Decoration TGlslangToSpvTraverser::TranslateInterpolationDecoration(const glslang::TQualifier& qualifier) { if (qualifier.smooth) // Smooth decoration doesn't exist in SPIR-V 1.0 - return spv::DecorationMax; + return spv::Decoration::Max; else if (qualifier.isNonPerspective()) - return spv::DecorationNoPerspective; + return spv::Decoration::NoPerspective; else if (qualifier.flat) - return spv::DecorationFlat; + return spv::Decoration::Flat; else if (qualifier.isExplicitInterpolation()) { builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); - return spv::DecorationExplicitInterpAMD; + return spv::Decoration::ExplicitInterpAMD; } else - return spv::DecorationMax; + return spv::Decoration::Max; } // Translate glslang type to SPIR-V auxiliary storage decorations. -// Returns spv::DecorationMax when no decoration +// Returns spv::Decoration::Max when no decoration // should be applied. spv::Decoration TGlslangToSpvTraverser::TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier) { if (qualifier.centroid) - return spv::DecorationCentroid; + return spv::Decoration::Centroid; else if (qualifier.patch) - return spv::DecorationPatch; + return spv::Decoration::Patch; else if (qualifier.sample) { - builder.addCapability(spv::CapabilitySampleRateShading); - return spv::DecorationSample; + builder.addCapability(spv::Capability::SampleRateShading); + return spv::Decoration::Sample; } - return spv::DecorationMax; + return spv::Decoration::Max; } // If glslang type is invariant, return SPIR-V invariant decoration. spv::Decoration TranslateInvariantDecoration(const glslang::TQualifier& qualifier) { if (qualifier.invariant) - return spv::DecorationInvariant; + return spv::Decoration::Invariant; else - return spv::DecorationMax; + return spv::Decoration::Max; } // If glslang type is noContraction, return SPIR-V NoContraction decoration. spv::Decoration TranslateNoContractionDecoration(const glslang::TQualifier& qualifier) { if (qualifier.isNoContraction()) - return spv::DecorationNoContraction; + return spv::Decoration::NoContraction; else - return spv::DecorationMax; + return spv::Decoration::Max; } // If glslang type is nonUniform, return SPIR-V NonUniform decoration. @@ -532,10 +534,10 @@ spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glsl { if (qualifier.isNonUniform()) { builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); - builder.addCapability(spv::CapabilityShaderNonUniformEXT); - return spv::DecorationNonUniformEXT; + builder.addCapability(spv::Capability::ShaderNonUniformEXT); + return spv::Decoration::NonUniformEXT; } else - return spv::DecorationMax; + return spv::Decoration::Max; } // If lvalue flags contains nonUniform, return SPIR-V NonUniform decoration. @@ -544,36 +546,36 @@ spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration( { if (coherentFlags.isNonUniform()) { builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); - builder.addCapability(spv::CapabilityShaderNonUniformEXT); - return spv::DecorationNonUniformEXT; + builder.addCapability(spv::Capability::ShaderNonUniformEXT); + return spv::Decoration::NonUniformEXT; } else - return spv::DecorationMax; + return spv::Decoration::Max; } spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess( const spv::Builder::AccessChain::CoherentFlags &coherentFlags) { - spv::MemoryAccessMask mask = spv::MemoryAccessMaskNone; + spv::MemoryAccessMask mask = spv::MemoryAccessMask::MaskNone; if (!glslangIntermediate->usingVulkanMemoryModel() || coherentFlags.isImage) return mask; if (coherentFlags.isVolatile() || coherentFlags.anyCoherent()) { - mask = mask | spv::MemoryAccessMakePointerAvailableKHRMask | - spv::MemoryAccessMakePointerVisibleKHRMask; + mask = mask | spv::MemoryAccessMask::MakePointerAvailableKHR | + spv::MemoryAccessMask::MakePointerVisibleKHR; } if (coherentFlags.nonprivate) { - mask = mask | spv::MemoryAccessNonPrivatePointerKHRMask; + mask = mask | spv::MemoryAccessMask::NonPrivatePointerKHR; } if (coherentFlags.volatil) { - mask = mask | spv::MemoryAccessVolatileMask; + mask = mask | spv::MemoryAccessMask::Volatile; } if (coherentFlags.nontemporal) { - mask = mask | spv::MemoryAccessNontemporalMask; + mask = mask | spv::MemoryAccessMask::Nontemporal; } - if (mask != spv::MemoryAccessMaskNone) { - builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + if (mask != spv::MemoryAccessMask::MaskNone) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); } return mask; @@ -582,27 +584,27 @@ spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess( spv::ImageOperandsMask TGlslangToSpvTraverser::TranslateImageOperands( const spv::Builder::AccessChain::CoherentFlags &coherentFlags) { - spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone; + spv::ImageOperandsMask mask = spv::ImageOperandsMask::MaskNone; if (!glslangIntermediate->usingVulkanMemoryModel()) return mask; if (coherentFlags.volatil || coherentFlags.anyCoherent()) { - mask = mask | spv::ImageOperandsMakeTexelAvailableKHRMask | - spv::ImageOperandsMakeTexelVisibleKHRMask; + mask = mask | spv::ImageOperandsMask::MakeTexelAvailableKHR | + spv::ImageOperandsMask::MakeTexelVisibleKHR; } if (coherentFlags.nonprivate) { - mask = mask | spv::ImageOperandsNonPrivateTexelKHRMask; + mask = mask | spv::ImageOperandsMask::NonPrivateTexelKHR; } if (coherentFlags.volatil) { - mask = mask | spv::ImageOperandsVolatileTexelKHRMask; + mask = mask | spv::ImageOperandsMask::VolatileTexelKHR; } if (coherentFlags.nontemporal && builder.getSpvVersion() >= spv::Spv_1_6) { - mask = mask | spv::ImageOperandsNontemporalMask; + mask = mask | spv::ImageOperandsMask::Nontemporal; } - if (mask != spv::ImageOperandsMaskNone) { - builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + if (mask != spv::ImageOperandsMask::MaskNone) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); } return mask; @@ -633,24 +635,24 @@ spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCohere spv::Scope TGlslangToSpvTraverser::TranslateMemoryScope( const spv::Builder::AccessChain::CoherentFlags &coherentFlags) { - spv::Scope scope = spv::ScopeMax; + spv::Scope scope = spv::Scope::Max; if (coherentFlags.volatil || coherentFlags.coherent) { // coherent defaults to Device scope in the old model, QueueFamilyKHR scope in the new model - scope = glslangIntermediate->usingVulkanMemoryModel() ? spv::ScopeQueueFamilyKHR : spv::ScopeDevice; + scope = glslangIntermediate->usingVulkanMemoryModel() ? spv::Scope::QueueFamilyKHR : spv::Scope::Device; } else if (coherentFlags.devicecoherent) { - scope = spv::ScopeDevice; + scope = spv::Scope::Device; } else if (coherentFlags.queuefamilycoherent) { - scope = spv::ScopeQueueFamilyKHR; + scope = spv::Scope::QueueFamilyKHR; } else if (coherentFlags.workgroupcoherent) { - scope = spv::ScopeWorkgroup; + scope = spv::Scope::Workgroup; } else if (coherentFlags.subgroupcoherent) { - scope = spv::ScopeSubgroup; + scope = spv::Scope::Subgroup; } else if (coherentFlags.shadercallcoherent) { - scope = spv::ScopeShaderCallKHR; + scope = spv::Scope::ShaderCallKHR; } - if (glslangIntermediate->usingVulkanMemoryModel() && scope == spv::ScopeDevice) { - builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR); + if (glslangIntermediate->usingVulkanMemoryModel() && scope == spv::Scope::Device) { + builder.addCapability(spv::Capability::VulkanMemoryModelDeviceScopeKHR); } return scope; @@ -670,35 +672,35 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI if (! memberDeclaration) { switch (glslangIntermediate->getStage()) { case EShLangGeometry: - builder.addCapability(spv::CapabilityGeometryPointSize); + builder.addCapability(spv::Capability::GeometryPointSize); break; case EShLangTessControl: case EShLangTessEvaluation: - builder.addCapability(spv::CapabilityTessellationPointSize); + builder.addCapability(spv::Capability::TessellationPointSize); break; default: break; } } - return spv::BuiltInPointSize; + return spv::BuiltIn::PointSize; - case glslang::EbvPosition: return spv::BuiltInPosition; - case glslang::EbvVertexId: return spv::BuiltInVertexId; - case glslang::EbvInstanceId: return spv::BuiltInInstanceId; - case glslang::EbvVertexIndex: return spv::BuiltInVertexIndex; - case glslang::EbvInstanceIndex: return spv::BuiltInInstanceIndex; + case glslang::EbvPosition: return spv::BuiltIn::Position; + case glslang::EbvVertexId: return spv::BuiltIn::VertexId; + case glslang::EbvInstanceId: return spv::BuiltIn::InstanceId; + case glslang::EbvVertexIndex: return spv::BuiltIn::VertexIndex; + case glslang::EbvInstanceIndex: return spv::BuiltIn::InstanceIndex; - case glslang::EbvFragCoord: return spv::BuiltInFragCoord; - case glslang::EbvPointCoord: return spv::BuiltInPointCoord; - case glslang::EbvFace: return spv::BuiltInFrontFacing; - case glslang::EbvFragDepth: return spv::BuiltInFragDepth; + case glslang::EbvFragCoord: return spv::BuiltIn::FragCoord; + case glslang::EbvPointCoord: return spv::BuiltIn::PointCoord; + case glslang::EbvFace: return spv::BuiltIn::FrontFacing; + case glslang::EbvFragDepth: return spv::BuiltIn::FragDepth; - case glslang::EbvNumWorkGroups: return spv::BuiltInNumWorkgroups; - case glslang::EbvWorkGroupSize: return spv::BuiltInWorkgroupSize; - case glslang::EbvWorkGroupId: return spv::BuiltInWorkgroupId; - case glslang::EbvLocalInvocationId: return spv::BuiltInLocalInvocationId; - case glslang::EbvLocalInvocationIndex: return spv::BuiltInLocalInvocationIndex; - case glslang::EbvGlobalInvocationId: return spv::BuiltInGlobalInvocationId; + case glslang::EbvNumWorkGroups: return spv::BuiltIn::NumWorkgroups; + case glslang::EbvWorkGroupSize: return spv::BuiltIn::WorkgroupSize; + case glslang::EbvWorkGroupId: return spv::BuiltIn::WorkgroupId; + case glslang::EbvLocalInvocationId: return spv::BuiltIn::LocalInvocationId; + case glslang::EbvLocalInvocationIndex: return spv::BuiltIn::LocalInvocationIndex; + case glslang::EbvGlobalInvocationId: return spv::BuiltIn::GlobalInvocationId; // These *Distance capabilities logically belong here, but if the member is declared and // then never used, consumers of SPIR-V prefer the capability not be declared. @@ -708,18 +710,18 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI // case glslang::EbvClipDistance: if (!memberDeclaration) - builder.addCapability(spv::CapabilityClipDistance); - return spv::BuiltInClipDistance; + builder.addCapability(spv::Capability::ClipDistance); + return spv::BuiltIn::ClipDistance; case glslang::EbvCullDistance: if (!memberDeclaration) - builder.addCapability(spv::CapabilityCullDistance); - return spv::BuiltInCullDistance; + builder.addCapability(spv::Capability::CullDistance); + return spv::BuiltIn::CullDistance; case glslang::EbvViewportIndex: if (glslangIntermediate->getStage() == EShLangGeometry || glslangIntermediate->getStage() == EShLangFragment) { - builder.addCapability(spv::CapabilityMultiViewport); + builder.addCapability(spv::Capability::MultiViewport); } if (glslangIntermediate->getStage() == EShLangVertex || glslangIntermediate->getStage() == EShLangTessControl || @@ -727,31 +729,31 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI if (builder.getSpvVersion() < spv::Spv_1_5) { builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5); - builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT); + builder.addCapability(spv::Capability::ShaderViewportIndexLayerEXT); } else - builder.addCapability(spv::CapabilityShaderViewportIndex); + builder.addCapability(spv::Capability::ShaderViewportIndex); } - return spv::BuiltInViewportIndex; + return spv::BuiltIn::ViewportIndex; case glslang::EbvSampleId: - builder.addCapability(spv::CapabilitySampleRateShading); - return spv::BuiltInSampleId; + builder.addCapability(spv::Capability::SampleRateShading); + return spv::BuiltIn::SampleId; case glslang::EbvSamplePosition: - builder.addCapability(spv::CapabilitySampleRateShading); - return spv::BuiltInSamplePosition; + builder.addCapability(spv::Capability::SampleRateShading); + return spv::BuiltIn::SamplePosition; case glslang::EbvSampleMask: - return spv::BuiltInSampleMask; + return spv::BuiltIn::SampleMask; case glslang::EbvLayer: if (glslangIntermediate->getStage() == EShLangMesh) { - return spv::BuiltInLayer; + return spv::BuiltIn::Layer; } if (glslangIntermediate->getStage() == EShLangGeometry || glslangIntermediate->getStage() == EShLangFragment) { - builder.addCapability(spv::CapabilityGeometry); + builder.addCapability(spv::Capability::Geometry); } if (glslangIntermediate->getStage() == EShLangVertex || glslangIntermediate->getStage() == EShLangTessControl || @@ -759,394 +761,394 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI if (builder.getSpvVersion() < spv::Spv_1_5) { builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5); - builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT); + builder.addCapability(spv::Capability::ShaderViewportIndexLayerEXT); } else - builder.addCapability(spv::CapabilityShaderLayer); + builder.addCapability(spv::Capability::ShaderLayer); } - return spv::BuiltInLayer; + return spv::BuiltIn::Layer; case glslang::EbvBaseVertex: builder.addIncorporatedExtension(spv::E_SPV_KHR_shader_draw_parameters, spv::Spv_1_3); - builder.addCapability(spv::CapabilityDrawParameters); - return spv::BuiltInBaseVertex; + builder.addCapability(spv::Capability::DrawParameters); + return spv::BuiltIn::BaseVertex; case glslang::EbvBaseInstance: builder.addIncorporatedExtension(spv::E_SPV_KHR_shader_draw_parameters, spv::Spv_1_3); - builder.addCapability(spv::CapabilityDrawParameters); - return spv::BuiltInBaseInstance; + builder.addCapability(spv::Capability::DrawParameters); + return spv::BuiltIn::BaseInstance; case glslang::EbvDrawId: builder.addIncorporatedExtension(spv::E_SPV_KHR_shader_draw_parameters, spv::Spv_1_3); - builder.addCapability(spv::CapabilityDrawParameters); - return spv::BuiltInDrawIndex; + builder.addCapability(spv::Capability::DrawParameters); + return spv::BuiltIn::DrawIndex; case glslang::EbvPrimitiveId: if (glslangIntermediate->getStage() == EShLangFragment) - builder.addCapability(spv::CapabilityGeometry); - return spv::BuiltInPrimitiveId; + builder.addCapability(spv::Capability::Geometry); + return spv::BuiltIn::PrimitiveId; case glslang::EbvFragStencilRef: builder.addExtension(spv::E_SPV_EXT_shader_stencil_export); - builder.addCapability(spv::CapabilityStencilExportEXT); - return spv::BuiltInFragStencilRefEXT; + builder.addCapability(spv::Capability::StencilExportEXT); + return spv::BuiltIn::FragStencilRefEXT; case glslang::EbvShadingRateKHR: builder.addExtension(spv::E_SPV_KHR_fragment_shading_rate); - builder.addCapability(spv::CapabilityFragmentShadingRateKHR); - return spv::BuiltInShadingRateKHR; + builder.addCapability(spv::Capability::FragmentShadingRateKHR); + return spv::BuiltIn::ShadingRateKHR; case glslang::EbvPrimitiveShadingRateKHR: builder.addExtension(spv::E_SPV_KHR_fragment_shading_rate); - builder.addCapability(spv::CapabilityFragmentShadingRateKHR); - return spv::BuiltInPrimitiveShadingRateKHR; + builder.addCapability(spv::Capability::FragmentShadingRateKHR); + return spv::BuiltIn::PrimitiveShadingRateKHR; - case glslang::EbvInvocationId: return spv::BuiltInInvocationId; - case glslang::EbvTessLevelInner: return spv::BuiltInTessLevelInner; - case glslang::EbvTessLevelOuter: return spv::BuiltInTessLevelOuter; - case glslang::EbvTessCoord: return spv::BuiltInTessCoord; - case glslang::EbvPatchVertices: return spv::BuiltInPatchVertices; - case glslang::EbvHelperInvocation: return spv::BuiltInHelperInvocation; + case glslang::EbvInvocationId: return spv::BuiltIn::InvocationId; + case glslang::EbvTessLevelInner: return spv::BuiltIn::TessLevelInner; + case glslang::EbvTessLevelOuter: return spv::BuiltIn::TessLevelOuter; + case glslang::EbvTessCoord: return spv::BuiltIn::TessCoord; + case glslang::EbvPatchVertices: return spv::BuiltIn::PatchVertices; + case glslang::EbvHelperInvocation: return spv::BuiltIn::HelperInvocation; case glslang::EbvSubGroupSize: builder.addExtension(spv::E_SPV_KHR_shader_ballot); - builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupSize; + builder.addCapability(spv::Capability::SubgroupBallotKHR); + return spv::BuiltIn::SubgroupSize; case glslang::EbvSubGroupInvocation: builder.addExtension(spv::E_SPV_KHR_shader_ballot); - builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupLocalInvocationId; + builder.addCapability(spv::Capability::SubgroupBallotKHR); + return spv::BuiltIn::SubgroupLocalInvocationId; case glslang::EbvSubGroupEqMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); - builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupEqMask; + builder.addCapability(spv::Capability::SubgroupBallotKHR); + return spv::BuiltIn::SubgroupEqMask; case glslang::EbvSubGroupGeMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); - builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupGeMask; + builder.addCapability(spv::Capability::SubgroupBallotKHR); + return spv::BuiltIn::SubgroupGeMask; case glslang::EbvSubGroupGtMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); - builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupGtMask; + builder.addCapability(spv::Capability::SubgroupBallotKHR); + return spv::BuiltIn::SubgroupGtMask; case glslang::EbvSubGroupLeMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); - builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupLeMask; + builder.addCapability(spv::Capability::SubgroupBallotKHR); + return spv::BuiltIn::SubgroupLeMask; case glslang::EbvSubGroupLtMask: builder.addExtension(spv::E_SPV_KHR_shader_ballot); - builder.addCapability(spv::CapabilitySubgroupBallotKHR); - return spv::BuiltInSubgroupLtMask; + builder.addCapability(spv::Capability::SubgroupBallotKHR); + return spv::BuiltIn::SubgroupLtMask; case glslang::EbvNumSubgroups: - builder.addCapability(spv::CapabilityGroupNonUniform); - return spv::BuiltInNumSubgroups; + builder.addCapability(spv::Capability::GroupNonUniform); + return spv::BuiltIn::NumSubgroups; case glslang::EbvSubgroupID: - builder.addCapability(spv::CapabilityGroupNonUniform); - return spv::BuiltInSubgroupId; + builder.addCapability(spv::Capability::GroupNonUniform); + return spv::BuiltIn::SubgroupId; case glslang::EbvSubgroupSize2: - builder.addCapability(spv::CapabilityGroupNonUniform); - return spv::BuiltInSubgroupSize; + builder.addCapability(spv::Capability::GroupNonUniform); + return spv::BuiltIn::SubgroupSize; case glslang::EbvSubgroupInvocation2: - builder.addCapability(spv::CapabilityGroupNonUniform); - return spv::BuiltInSubgroupLocalInvocationId; + builder.addCapability(spv::Capability::GroupNonUniform); + return spv::BuiltIn::SubgroupLocalInvocationId; case glslang::EbvSubgroupEqMask2: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformBallot); - return spv::BuiltInSubgroupEqMask; + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformBallot); + return spv::BuiltIn::SubgroupEqMask; case glslang::EbvSubgroupGeMask2: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformBallot); - return spv::BuiltInSubgroupGeMask; + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformBallot); + return spv::BuiltIn::SubgroupGeMask; case glslang::EbvSubgroupGtMask2: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformBallot); - return spv::BuiltInSubgroupGtMask; + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformBallot); + return spv::BuiltIn::SubgroupGtMask; case glslang::EbvSubgroupLeMask2: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformBallot); - return spv::BuiltInSubgroupLeMask; + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformBallot); + return spv::BuiltIn::SubgroupLeMask; case glslang::EbvSubgroupLtMask2: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformBallot); - return spv::BuiltInSubgroupLtMask; + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformBallot); + return spv::BuiltIn::SubgroupLtMask; case glslang::EbvBaryCoordNoPersp: builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); - return spv::BuiltInBaryCoordNoPerspAMD; + return spv::BuiltIn::BaryCoordNoPerspAMD; case glslang::EbvBaryCoordNoPerspCentroid: builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); - return spv::BuiltInBaryCoordNoPerspCentroidAMD; + return spv::BuiltIn::BaryCoordNoPerspCentroidAMD; case glslang::EbvBaryCoordNoPerspSample: builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); - return spv::BuiltInBaryCoordNoPerspSampleAMD; + return spv::BuiltIn::BaryCoordNoPerspSampleAMD; case glslang::EbvBaryCoordSmooth: builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); - return spv::BuiltInBaryCoordSmoothAMD; + return spv::BuiltIn::BaryCoordSmoothAMD; case glslang::EbvBaryCoordSmoothCentroid: builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); - return spv::BuiltInBaryCoordSmoothCentroidAMD; + return spv::BuiltIn::BaryCoordSmoothCentroidAMD; case glslang::EbvBaryCoordSmoothSample: builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); - return spv::BuiltInBaryCoordSmoothSampleAMD; + return spv::BuiltIn::BaryCoordSmoothSampleAMD; case glslang::EbvBaryCoordPullModel: builder.addExtension(spv::E_SPV_AMD_shader_explicit_vertex_parameter); - return spv::BuiltInBaryCoordPullModelAMD; + return spv::BuiltIn::BaryCoordPullModelAMD; case glslang::EbvDeviceIndex: builder.addIncorporatedExtension(spv::E_SPV_KHR_device_group, spv::Spv_1_3); - builder.addCapability(spv::CapabilityDeviceGroup); - return spv::BuiltInDeviceIndex; + builder.addCapability(spv::Capability::DeviceGroup); + return spv::BuiltIn::DeviceIndex; case glslang::EbvViewIndex: builder.addIncorporatedExtension(spv::E_SPV_KHR_multiview, spv::Spv_1_3); - builder.addCapability(spv::CapabilityMultiView); - return spv::BuiltInViewIndex; + builder.addCapability(spv::Capability::MultiView); + return spv::BuiltIn::ViewIndex; case glslang::EbvFragSizeEXT: builder.addExtension(spv::E_SPV_EXT_fragment_invocation_density); - builder.addCapability(spv::CapabilityFragmentDensityEXT); - return spv::BuiltInFragSizeEXT; + builder.addCapability(spv::Capability::FragmentDensityEXT); + return spv::BuiltIn::FragSizeEXT; case glslang::EbvFragInvocationCountEXT: builder.addExtension(spv::E_SPV_EXT_fragment_invocation_density); - builder.addCapability(spv::CapabilityFragmentDensityEXT); - return spv::BuiltInFragInvocationCountEXT; + builder.addCapability(spv::Capability::FragmentDensityEXT); + return spv::BuiltIn::FragInvocationCountEXT; case glslang::EbvViewportMaskNV: if (!memberDeclaration) { builder.addExtension(spv::E_SPV_NV_viewport_array2); - builder.addCapability(spv::CapabilityShaderViewportMaskNV); + builder.addCapability(spv::Capability::ShaderViewportMaskNV); } - return spv::BuiltInViewportMaskNV; + return spv::BuiltIn::ViewportMaskNV; case glslang::EbvSecondaryPositionNV: if (!memberDeclaration) { builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); - builder.addCapability(spv::CapabilityShaderStereoViewNV); + builder.addCapability(spv::Capability::ShaderStereoViewNV); } - return spv::BuiltInSecondaryPositionNV; + return spv::BuiltIn::SecondaryPositionNV; case glslang::EbvSecondaryViewportMaskNV: if (!memberDeclaration) { builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); - builder.addCapability(spv::CapabilityShaderStereoViewNV); + builder.addCapability(spv::Capability::ShaderStereoViewNV); } - return spv::BuiltInSecondaryViewportMaskNV; + return spv::BuiltIn::SecondaryViewportMaskNV; case glslang::EbvPositionPerViewNV: if (!memberDeclaration) { builder.addExtension(spv::E_SPV_NVX_multiview_per_view_attributes); - builder.addCapability(spv::CapabilityPerViewAttributesNV); + builder.addCapability(spv::Capability::PerViewAttributesNV); } - return spv::BuiltInPositionPerViewNV; + return spv::BuiltIn::PositionPerViewNV; case glslang::EbvViewportMaskPerViewNV: if (!memberDeclaration) { builder.addExtension(spv::E_SPV_NVX_multiview_per_view_attributes); - builder.addCapability(spv::CapabilityPerViewAttributesNV); + builder.addCapability(spv::Capability::PerViewAttributesNV); } - return spv::BuiltInViewportMaskPerViewNV; + return spv::BuiltIn::ViewportMaskPerViewNV; case glslang::EbvFragFullyCoveredNV: builder.addExtension(spv::E_SPV_EXT_fragment_fully_covered); - builder.addCapability(spv::CapabilityFragmentFullyCoveredEXT); - return spv::BuiltInFullyCoveredEXT; + builder.addCapability(spv::Capability::FragmentFullyCoveredEXT); + return spv::BuiltIn::FullyCoveredEXT; case glslang::EbvFragmentSizeNV: builder.addExtension(spv::E_SPV_NV_shading_rate); - builder.addCapability(spv::CapabilityShadingRateNV); - return spv::BuiltInFragmentSizeNV; + builder.addCapability(spv::Capability::ShadingRateNV); + return spv::BuiltIn::FragmentSizeNV; case glslang::EbvInvocationsPerPixelNV: builder.addExtension(spv::E_SPV_NV_shading_rate); - builder.addCapability(spv::CapabilityShadingRateNV); - return spv::BuiltInInvocationsPerPixelNV; + builder.addCapability(spv::Capability::ShadingRateNV); + return spv::BuiltIn::InvocationsPerPixelNV; // ray tracing case glslang::EbvLaunchId: - return spv::BuiltInLaunchIdKHR; + return spv::BuiltIn::LaunchIdKHR; case glslang::EbvLaunchSize: - return spv::BuiltInLaunchSizeKHR; + return spv::BuiltIn::LaunchSizeKHR; case glslang::EbvWorldRayOrigin: - return spv::BuiltInWorldRayOriginKHR; + return spv::BuiltIn::WorldRayOriginKHR; case glslang::EbvWorldRayDirection: - return spv::BuiltInWorldRayDirectionKHR; + return spv::BuiltIn::WorldRayDirectionKHR; case glslang::EbvObjectRayOrigin: - return spv::BuiltInObjectRayOriginKHR; + return spv::BuiltIn::ObjectRayOriginKHR; case glslang::EbvObjectRayDirection: - return spv::BuiltInObjectRayDirectionKHR; + return spv::BuiltIn::ObjectRayDirectionKHR; case glslang::EbvRayTmin: - return spv::BuiltInRayTminKHR; + return spv::BuiltIn::RayTminKHR; case glslang::EbvRayTmax: - return spv::BuiltInRayTmaxKHR; + return spv::BuiltIn::RayTmaxKHR; case glslang::EbvCullMask: - return spv::BuiltInCullMaskKHR; + return spv::BuiltIn::CullMaskKHR; case glslang::EbvPositionFetch: - return spv::BuiltInHitTriangleVertexPositionsKHR; + return spv::BuiltIn::HitTriangleVertexPositionsKHR; case glslang::EbvInstanceCustomIndex: - return spv::BuiltInInstanceCustomIndexKHR; + return spv::BuiltIn::InstanceCustomIndexKHR; case glslang::EbvHitKind: - return spv::BuiltInHitKindKHR; + return spv::BuiltIn::HitKindKHR; case glslang::EbvObjectToWorld: case glslang::EbvObjectToWorld3x4: - return spv::BuiltInObjectToWorldKHR; + return spv::BuiltIn::ObjectToWorldKHR; case glslang::EbvWorldToObject: case glslang::EbvWorldToObject3x4: - return spv::BuiltInWorldToObjectKHR; + return spv::BuiltIn::WorldToObjectKHR; case glslang::EbvIncomingRayFlags: - return spv::BuiltInIncomingRayFlagsKHR; + return spv::BuiltIn::IncomingRayFlagsKHR; case glslang::EbvGeometryIndex: - return spv::BuiltInRayGeometryIndexKHR; + return spv::BuiltIn::RayGeometryIndexKHR; case glslang::EbvCurrentRayTimeNV: builder.addExtension(spv::E_SPV_NV_ray_tracing_motion_blur); - builder.addCapability(spv::CapabilityRayTracingMotionBlurNV); - return spv::BuiltInCurrentRayTimeNV; + builder.addCapability(spv::Capability::RayTracingMotionBlurNV); + return spv::BuiltIn::CurrentRayTimeNV; case glslang::EbvMicroTrianglePositionNV: - builder.addCapability(spv::CapabilityRayTracingDisplacementMicromapNV); + builder.addCapability(spv::Capability::RayTracingDisplacementMicromapNV); builder.addExtension("SPV_NV_displacement_micromap"); - return spv::BuiltInHitMicroTriangleVertexPositionsNV; + return spv::BuiltIn::HitMicroTriangleVertexPositionsNV; case glslang::EbvMicroTriangleBaryNV: - builder.addCapability(spv::CapabilityRayTracingDisplacementMicromapNV); + builder.addCapability(spv::Capability::RayTracingDisplacementMicromapNV); builder.addExtension("SPV_NV_displacement_micromap"); - return spv::BuiltInHitMicroTriangleVertexBarycentricsNV; + return spv::BuiltIn::HitMicroTriangleVertexBarycentricsNV; case glslang::EbvHitKindFrontFacingMicroTriangleNV: - builder.addCapability(spv::CapabilityRayTracingDisplacementMicromapNV); + builder.addCapability(spv::Capability::RayTracingDisplacementMicromapNV); builder.addExtension("SPV_NV_displacement_micromap"); - return spv::BuiltInHitKindFrontFacingMicroTriangleNV; + return spv::BuiltIn::HitKindFrontFacingMicroTriangleNV; case glslang::EbvHitKindBackFacingMicroTriangleNV: - builder.addCapability(spv::CapabilityRayTracingDisplacementMicromapNV); + builder.addCapability(spv::Capability::RayTracingDisplacementMicromapNV); builder.addExtension("SPV_NV_displacement_micromap"); - return spv::BuiltInHitKindBackFacingMicroTriangleNV; + return spv::BuiltIn::HitKindBackFacingMicroTriangleNV; case glslang::EbvClusterIDNV: - builder.addCapability(spv::CapabilityRayTracingClusterAccelerationStructureNV); + builder.addCapability(spv::Capability::RayTracingClusterAccelerationStructureNV); builder.addExtension("SPV_NV_cluster_acceleration_structure"); - return spv::BuiltInClusterIDNV; + return spv::BuiltIn::ClusterIDNV; case glslang::EbvHitIsSphereNV: - builder.addCapability(spv::CapabilityRayTracingSpheresGeometryNV); + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); builder.addExtension("SPV_NV_linear_swept_spheres"); - return spv::BuiltInHitIsSphereNV; + return spv::BuiltIn::HitIsSphereNV; case glslang::EbvHitIsLSSNV: - builder.addCapability(spv::CapabilityRayTracingLinearSweptSpheresGeometryNV); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); builder.addExtension("SPV_NV_linear_swept_spheres"); - return spv::BuiltInHitIsLSSNV; + return spv::BuiltIn::HitIsLSSNV; case glslang::EbvHitSpherePositionNV: - builder.addCapability(spv::CapabilityRayTracingSpheresGeometryNV); + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); builder.addExtension("SPV_NV_linear_swept_spheres"); - return spv::BuiltInHitSpherePositionNV; + return spv::BuiltIn::HitSpherePositionNV; case glslang::EbvHitSphereRadiusNV: - builder.addCapability(spv::CapabilityRayTracingSpheresGeometryNV); + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); builder.addExtension("SPV_NV_linear_swept_spheres"); - return spv::BuiltInHitSphereRadiusNV; + return spv::BuiltIn::HitSphereRadiusNV; case glslang::EbvHitLSSPositionsNV: - builder.addCapability(spv::CapabilityRayTracingLinearSweptSpheresGeometryNV); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); builder.addExtension("SPV_NV_linear_swept_spheres"); - return spv::BuiltInHitLSSPositionsNV; + return spv::BuiltIn::HitLSSPositionsNV; case glslang::EbvHitLSSRadiiNV: - builder.addCapability(spv::CapabilityRayTracingLinearSweptSpheresGeometryNV); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); builder.addExtension("SPV_NV_linear_swept_spheres"); - return spv::BuiltInHitLSSRadiiNV; + return spv::BuiltIn::HitLSSRadiiNV; // barycentrics case glslang::EbvBaryCoordNV: builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric); - builder.addCapability(spv::CapabilityFragmentBarycentricNV); - return spv::BuiltInBaryCoordNV; + builder.addCapability(spv::Capability::FragmentBarycentricNV); + return spv::BuiltIn::BaryCoordNV; case glslang::EbvBaryCoordNoPerspNV: builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric); - builder.addCapability(spv::CapabilityFragmentBarycentricNV); - return spv::BuiltInBaryCoordNoPerspNV; + builder.addCapability(spv::Capability::FragmentBarycentricNV); + return spv::BuiltIn::BaryCoordNoPerspNV; case glslang::EbvBaryCoordEXT: builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric); - builder.addCapability(spv::CapabilityFragmentBarycentricKHR); - return spv::BuiltInBaryCoordKHR; + builder.addCapability(spv::Capability::FragmentBarycentricKHR); + return spv::BuiltIn::BaryCoordKHR; case glslang::EbvBaryCoordNoPerspEXT: builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric); - builder.addCapability(spv::CapabilityFragmentBarycentricKHR); - return spv::BuiltInBaryCoordNoPerspKHR; + builder.addCapability(spv::Capability::FragmentBarycentricKHR); + return spv::BuiltIn::BaryCoordNoPerspKHR; // mesh shaders case glslang::EbvTaskCountNV: - return spv::BuiltInTaskCountNV; + return spv::BuiltIn::TaskCountNV; case glslang::EbvPrimitiveCountNV: - return spv::BuiltInPrimitiveCountNV; + return spv::BuiltIn::PrimitiveCountNV; case glslang::EbvPrimitiveIndicesNV: - return spv::BuiltInPrimitiveIndicesNV; + return spv::BuiltIn::PrimitiveIndicesNV; case glslang::EbvClipDistancePerViewNV: - return spv::BuiltInClipDistancePerViewNV; + return spv::BuiltIn::ClipDistancePerViewNV; case glslang::EbvCullDistancePerViewNV: - return spv::BuiltInCullDistancePerViewNV; + return spv::BuiltIn::CullDistancePerViewNV; case glslang::EbvLayerPerViewNV: - return spv::BuiltInLayerPerViewNV; + return spv::BuiltIn::LayerPerViewNV; case glslang::EbvMeshViewCountNV: - return spv::BuiltInMeshViewCountNV; + return spv::BuiltIn::MeshViewCountNV; case glslang::EbvMeshViewIndicesNV: - return spv::BuiltInMeshViewIndicesNV; + return spv::BuiltIn::MeshViewIndicesNV; // SPV_EXT_mesh_shader case glslang::EbvPrimitivePointIndicesEXT: - return spv::BuiltInPrimitivePointIndicesEXT; + return spv::BuiltIn::PrimitivePointIndicesEXT; case glslang::EbvPrimitiveLineIndicesEXT: - return spv::BuiltInPrimitiveLineIndicesEXT; + return spv::BuiltIn::PrimitiveLineIndicesEXT; case glslang::EbvPrimitiveTriangleIndicesEXT: - return spv::BuiltInPrimitiveTriangleIndicesEXT; + return spv::BuiltIn::PrimitiveTriangleIndicesEXT; case glslang::EbvCullPrimitiveEXT: - return spv::BuiltInCullPrimitiveEXT; + return spv::BuiltIn::CullPrimitiveEXT; // sm builtins case glslang::EbvWarpsPerSM: builder.addExtension(spv::E_SPV_NV_shader_sm_builtins); - builder.addCapability(spv::CapabilityShaderSMBuiltinsNV); - return spv::BuiltInWarpsPerSMNV; + builder.addCapability(spv::Capability::ShaderSMBuiltinsNV); + return spv::BuiltIn::WarpsPerSMNV; case glslang::EbvSMCount: builder.addExtension(spv::E_SPV_NV_shader_sm_builtins); - builder.addCapability(spv::CapabilityShaderSMBuiltinsNV); - return spv::BuiltInSMCountNV; + builder.addCapability(spv::Capability::ShaderSMBuiltinsNV); + return spv::BuiltIn::SMCountNV; case glslang::EbvWarpID: builder.addExtension(spv::E_SPV_NV_shader_sm_builtins); - builder.addCapability(spv::CapabilityShaderSMBuiltinsNV); - return spv::BuiltInWarpIDNV; + builder.addCapability(spv::Capability::ShaderSMBuiltinsNV); + return spv::BuiltIn::WarpIDNV; case glslang::EbvSMID: builder.addExtension(spv::E_SPV_NV_shader_sm_builtins); - builder.addCapability(spv::CapabilityShaderSMBuiltinsNV); - return spv::BuiltInSMIDNV; + builder.addCapability(spv::Capability::ShaderSMBuiltinsNV); + return spv::BuiltIn::SMIDNV; // ARM builtins case glslang::EbvCoreCountARM: builder.addExtension(spv::E_SPV_ARM_core_builtins); - builder.addCapability(spv::CapabilityCoreBuiltinsARM); - return spv::BuiltInCoreCountARM; + builder.addCapability(spv::Capability::CoreBuiltinsARM); + return spv::BuiltIn::CoreCountARM; case glslang::EbvCoreIDARM: builder.addExtension(spv::E_SPV_ARM_core_builtins); - builder.addCapability(spv::CapabilityCoreBuiltinsARM); - return spv::BuiltInCoreIDARM; + builder.addCapability(spv::Capability::CoreBuiltinsARM); + return spv::BuiltIn::CoreIDARM; case glslang::EbvCoreMaxIDARM: builder.addExtension(spv::E_SPV_ARM_core_builtins); - builder.addCapability(spv::CapabilityCoreBuiltinsARM); - return spv::BuiltInCoreMaxIDARM; + builder.addCapability(spv::Capability::CoreBuiltinsARM); + return spv::BuiltIn::CoreMaxIDARM; case glslang::EbvWarpIDARM: builder.addExtension(spv::E_SPV_ARM_core_builtins); - builder.addCapability(spv::CapabilityCoreBuiltinsARM); - return spv::BuiltInWarpIDARM; + builder.addCapability(spv::Capability::CoreBuiltinsARM); + return spv::BuiltIn::WarpIDARM; case glslang::EbvWarpMaxIDARM: builder.addExtension(spv::E_SPV_ARM_core_builtins); - builder.addCapability(spv::CapabilityCoreBuiltinsARM); - return spv::BuiltInWarpMaxIDARM; + builder.addCapability(spv::Capability::CoreBuiltinsARM); + return spv::BuiltIn::WarpMaxIDARM; default: - return spv::BuiltInMax; + return spv::BuiltIn::Max; } } @@ -1185,13 +1187,13 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy case glslang::ElfRg8ui: case glslang::ElfR16ui: case glslang::ElfR8ui: - builder.addCapability(spv::CapabilityStorageImageExtendedFormats); + builder.addCapability(spv::Capability::StorageImageExtendedFormats); break; case glslang::ElfR64ui: case glslang::ElfR64i: builder.addExtension(spv::E_SPV_EXT_shader_image_int64); - builder.addCapability(spv::CapabilityInt64ImageEXT); + builder.addCapability(spv::Capability::Int64ImageEXT); break; default: break; @@ -1199,49 +1201,49 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy // do the translation switch (type.getQualifier().getFormat()) { - case glslang::ElfNone: return spv::ImageFormatUnknown; - case glslang::ElfRgba32f: return spv::ImageFormatRgba32f; - case glslang::ElfRgba16f: return spv::ImageFormatRgba16f; - case glslang::ElfR32f: return spv::ImageFormatR32f; - case glslang::ElfRgba8: return spv::ImageFormatRgba8; - case glslang::ElfRgba8Snorm: return spv::ImageFormatRgba8Snorm; - case glslang::ElfRg32f: return spv::ImageFormatRg32f; - case glslang::ElfRg16f: return spv::ImageFormatRg16f; - case glslang::ElfR11fG11fB10f: return spv::ImageFormatR11fG11fB10f; - case glslang::ElfR16f: return spv::ImageFormatR16f; - case glslang::ElfRgba16: return spv::ImageFormatRgba16; - case glslang::ElfRgb10A2: return spv::ImageFormatRgb10A2; - case glslang::ElfRg16: return spv::ImageFormatRg16; - case glslang::ElfRg8: return spv::ImageFormatRg8; - case glslang::ElfR16: return spv::ImageFormatR16; - case glslang::ElfR8: return spv::ImageFormatR8; - case glslang::ElfRgba16Snorm: return spv::ImageFormatRgba16Snorm; - case glslang::ElfRg16Snorm: return spv::ImageFormatRg16Snorm; - case glslang::ElfRg8Snorm: return spv::ImageFormatRg8Snorm; - case glslang::ElfR16Snorm: return spv::ImageFormatR16Snorm; - case glslang::ElfR8Snorm: return spv::ImageFormatR8Snorm; - case glslang::ElfRgba32i: return spv::ImageFormatRgba32i; - case glslang::ElfRgba16i: return spv::ImageFormatRgba16i; - case glslang::ElfRgba8i: return spv::ImageFormatRgba8i; - case glslang::ElfR32i: return spv::ImageFormatR32i; - case glslang::ElfRg32i: return spv::ImageFormatRg32i; - case glslang::ElfRg16i: return spv::ImageFormatRg16i; - case glslang::ElfRg8i: return spv::ImageFormatRg8i; - case glslang::ElfR16i: return spv::ImageFormatR16i; - case glslang::ElfR8i: return spv::ImageFormatR8i; - case glslang::ElfRgba32ui: return spv::ImageFormatRgba32ui; - case glslang::ElfRgba16ui: return spv::ImageFormatRgba16ui; - case glslang::ElfRgba8ui: return spv::ImageFormatRgba8ui; - case glslang::ElfR32ui: return spv::ImageFormatR32ui; - case glslang::ElfRg32ui: return spv::ImageFormatRg32ui; - case glslang::ElfRg16ui: return spv::ImageFormatRg16ui; - case glslang::ElfRgb10a2ui: return spv::ImageFormatRgb10a2ui; - case glslang::ElfRg8ui: return spv::ImageFormatRg8ui; - case glslang::ElfR16ui: return spv::ImageFormatR16ui; - case glslang::ElfR8ui: return spv::ImageFormatR8ui; - case glslang::ElfR64ui: return spv::ImageFormatR64ui; - case glslang::ElfR64i: return spv::ImageFormatR64i; - default: return spv::ImageFormatMax; + case glslang::ElfNone: return spv::ImageFormat::Unknown; + case glslang::ElfRgba32f: return spv::ImageFormat::Rgba32f; + case glslang::ElfRgba16f: return spv::ImageFormat::Rgba16f; + case glslang::ElfR32f: return spv::ImageFormat::R32f; + case glslang::ElfRgba8: return spv::ImageFormat::Rgba8; + case glslang::ElfRgba8Snorm: return spv::ImageFormat::Rgba8Snorm; + case glslang::ElfRg32f: return spv::ImageFormat::Rg32f; + case glslang::ElfRg16f: return spv::ImageFormat::Rg16f; + case glslang::ElfR11fG11fB10f: return spv::ImageFormat::R11fG11fB10f; + case glslang::ElfR16f: return spv::ImageFormat::R16f; + case glslang::ElfRgba16: return spv::ImageFormat::Rgba16; + case glslang::ElfRgb10A2: return spv::ImageFormat::Rgb10A2; + case glslang::ElfRg16: return spv::ImageFormat::Rg16; + case glslang::ElfRg8: return spv::ImageFormat::Rg8; + case glslang::ElfR16: return spv::ImageFormat::R16; + case glslang::ElfR8: return spv::ImageFormat::R8; + case glslang::ElfRgba16Snorm: return spv::ImageFormat::Rgba16Snorm; + case glslang::ElfRg16Snorm: return spv::ImageFormat::Rg16Snorm; + case glslang::ElfRg8Snorm: return spv::ImageFormat::Rg8Snorm; + case glslang::ElfR16Snorm: return spv::ImageFormat::R16Snorm; + case glslang::ElfR8Snorm: return spv::ImageFormat::R8Snorm; + case glslang::ElfRgba32i: return spv::ImageFormat::Rgba32i; + case glslang::ElfRgba16i: return spv::ImageFormat::Rgba16i; + case glslang::ElfRgba8i: return spv::ImageFormat::Rgba8i; + case glslang::ElfR32i: return spv::ImageFormat::R32i; + case glslang::ElfRg32i: return spv::ImageFormat::Rg32i; + case glslang::ElfRg16i: return spv::ImageFormat::Rg16i; + case glslang::ElfRg8i: return spv::ImageFormat::Rg8i; + case glslang::ElfR16i: return spv::ImageFormat::R16i; + case glslang::ElfR8i: return spv::ImageFormat::R8i; + case glslang::ElfRgba32ui: return spv::ImageFormat::Rgba32ui; + case glslang::ElfRgba16ui: return spv::ImageFormat::Rgba16ui; + case glslang::ElfRgba8ui: return spv::ImageFormat::Rgba8ui; + case glslang::ElfR32ui: return spv::ImageFormat::R32ui; + case glslang::ElfRg32ui: return spv::ImageFormat::Rg32ui; + case glslang::ElfRg16ui: return spv::ImageFormat::Rg16ui; + case glslang::ElfRgb10a2ui: return spv::ImageFormat::Rgb10a2ui; + case glslang::ElfRg8ui: return spv::ImageFormat::Rg8ui; + case glslang::ElfR16ui: return spv::ImageFormat::R16ui; + case glslang::ElfR8ui: return spv::ImageFormat::R8ui; + case glslang::ElfR64ui: return spv::ImageFormat::R64ui; + case glslang::ElfR64i: return spv::ImageFormat::R64i; + default: return spv::ImageFormat::Max; } } @@ -1249,57 +1251,57 @@ spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSelectionControl( const glslang::TIntermSelection& selectionNode) const { if (selectionNode.getFlatten()) - return spv::SelectionControlFlattenMask; + return spv::SelectionControlMask::Flatten; if (selectionNode.getDontFlatten()) - return spv::SelectionControlDontFlattenMask; - return spv::SelectionControlMaskNone; + return spv::SelectionControlMask::DontFlatten; + return spv::SelectionControlMask::MaskNone; } spv::SelectionControlMask TGlslangToSpvTraverser::TranslateSwitchControl(const glslang::TIntermSwitch& switchNode) const { if (switchNode.getFlatten()) - return spv::SelectionControlFlattenMask; + return spv::SelectionControlMask::Flatten; if (switchNode.getDontFlatten()) - return spv::SelectionControlDontFlattenMask; - return spv::SelectionControlMaskNone; + return spv::SelectionControlMask::DontFlatten; + return spv::SelectionControlMask::MaskNone; } // return a non-0 dependency if the dependency argument must be set spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang::TIntermLoop& loopNode, std::vector& operands) const { - spv::LoopControlMask control = spv::LoopControlMaskNone; + spv::LoopControlMask control = spv::LoopControlMask::MaskNone; if (loopNode.getDontUnroll()) - control = control | spv::LoopControlDontUnrollMask; + control = control | spv::LoopControlMask::DontUnroll; if (loopNode.getUnroll()) - control = control | spv::LoopControlUnrollMask; + control = control | spv::LoopControlMask::Unroll; if (unsigned(loopNode.getLoopDependency()) == glslang::TIntermLoop::dependencyInfinite) - control = control | spv::LoopControlDependencyInfiniteMask; + control = control | spv::LoopControlMask::DependencyInfinite; else if (loopNode.getLoopDependency() > 0) { - control = control | spv::LoopControlDependencyLengthMask; + control = control | spv::LoopControlMask::DependencyLength; operands.push_back((unsigned int)loopNode.getLoopDependency()); } if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) { if (loopNode.getMinIterations() > 0) { - control = control | spv::LoopControlMinIterationsMask; + control = control | spv::LoopControlMask::MinIterations; operands.push_back(loopNode.getMinIterations()); } if (loopNode.getMaxIterations() < glslang::TIntermLoop::iterationsInfinite) { - control = control | spv::LoopControlMaxIterationsMask; + control = control | spv::LoopControlMask::MaxIterations; operands.push_back(loopNode.getMaxIterations()); } if (loopNode.getIterationMultiple() > 1) { - control = control | spv::LoopControlIterationMultipleMask; + control = control | spv::LoopControlMask::IterationMultiple; operands.push_back(loopNode.getIterationMultiple()); } if (loopNode.getPeelCount() > 0) { - control = control | spv::LoopControlPeelCountMask; + control = control | spv::LoopControlMask::PeelCount; operands.push_back(loopNode.getPeelCount()); } if (loopNode.getPartialCount() > 0) { - control = control | spv::LoopControlPartialCountMask; + control = control | spv::LoopControlMask::PartialCount; operands.push_back(loopNode.getPartialCount()); } } @@ -1311,72 +1313,72 @@ spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang: spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type) { if (type.getBasicType() == glslang::EbtRayQuery || type.getBasicType() == glslang::EbtHitObjectNV) - return spv::StorageClassPrivate; + return spv::StorageClass::Private; if (type.getQualifier().isSpirvByReference()) { if (type.getQualifier().isParamInput() || type.getQualifier().isParamOutput()) - return spv::StorageClassFunction; + return spv::StorageClass::Function; } if (type.getQualifier().isPipeInput()) - return spv::StorageClassInput; + return spv::StorageClass::Input; if (type.getQualifier().isPipeOutput()) - return spv::StorageClassOutput; + return spv::StorageClass::Output; if (type.getQualifier().storage == glslang::EvqTileImageEXT || type.isAttachmentEXT()) { builder.addExtension(spv::E_SPV_EXT_shader_tile_image); - builder.addCapability(spv::CapabilityTileImageColorReadAccessEXT); - return spv::StorageClassTileImageEXT; + builder.addCapability(spv::Capability::TileImageColorReadAccessEXT); + return spv::StorageClass::TileImageEXT; } if (glslangIntermediate->getSource() != glslang::EShSourceHlsl || type.getQualifier().storage == glslang::EvqUniform) { if (type.isAtomic()) - return spv::StorageClassAtomicCounter; + return spv::StorageClass::AtomicCounter; if (type.containsOpaque() && !glslangIntermediate->getBindlessMode()) - return spv::StorageClassUniformConstant; + return spv::StorageClass::UniformConstant; } if (type.getQualifier().isUniformOrBuffer() && type.getQualifier().isShaderRecord()) { - return spv::StorageClassShaderRecordBufferKHR; + return spv::StorageClass::ShaderRecordBufferKHR; } if (glslangIntermediate->usingStorageBuffer() && type.getQualifier().storage == glslang::EvqBuffer) { builder.addIncorporatedExtension(spv::E_SPV_KHR_storage_buffer_storage_class, spv::Spv_1_3); - return spv::StorageClassStorageBuffer; + return spv::StorageClass::StorageBuffer; } if (type.getQualifier().isUniformOrBuffer()) { if (type.getQualifier().isPushConstant()) - return spv::StorageClassPushConstant; + return spv::StorageClass::PushConstant; if (type.getBasicType() == glslang::EbtBlock) - return spv::StorageClassUniform; - return spv::StorageClassUniformConstant; + return spv::StorageClass::Uniform; + return spv::StorageClass::UniformConstant; } if (type.getQualifier().storage == glslang::EvqShared && type.getBasicType() == glslang::EbtBlock) { builder.addExtension(spv::E_SPV_KHR_workgroup_memory_explicit_layout); - builder.addCapability(spv::CapabilityWorkgroupMemoryExplicitLayoutKHR); - return spv::StorageClassWorkgroup; + builder.addCapability(spv::Capability::WorkgroupMemoryExplicitLayoutKHR); + return spv::StorageClass::Workgroup; } switch (type.getQualifier().storage) { - case glslang::EvqGlobal: return spv::StorageClassPrivate; - case glslang::EvqConstReadOnly: return spv::StorageClassFunction; - case glslang::EvqTemporary: return spv::StorageClassFunction; - case glslang::EvqShared: return spv::StorageClassWorkgroup; - case glslang::EvqPayload: return spv::StorageClassRayPayloadKHR; - case glslang::EvqPayloadIn: return spv::StorageClassIncomingRayPayloadKHR; - case glslang::EvqHitAttr: return spv::StorageClassHitAttributeKHR; - case glslang::EvqCallableData: return spv::StorageClassCallableDataKHR; - case glslang::EvqCallableDataIn: return spv::StorageClassIncomingCallableDataKHR; - case glslang::EvqtaskPayloadSharedEXT : return spv::StorageClassTaskPayloadWorkgroupEXT; - case glslang::EvqHitObjectAttrNV: return spv::StorageClassHitObjectAttributeNV; + case glslang::EvqGlobal: return spv::StorageClass::Private; + case glslang::EvqConstReadOnly: return spv::StorageClass::Function; + case glslang::EvqTemporary: return spv::StorageClass::Function; + case glslang::EvqShared: return spv::StorageClass::Workgroup; + case glslang::EvqPayload: return spv::StorageClass::RayPayloadKHR; + case glslang::EvqPayloadIn: return spv::StorageClass::IncomingRayPayloadKHR; + case glslang::EvqHitAttr: return spv::StorageClass::HitAttributeKHR; + case glslang::EvqCallableData: return spv::StorageClass::CallableDataKHR; + case glslang::EvqCallableDataIn: return spv::StorageClass::IncomingCallableDataKHR; + case glslang::EvqtaskPayloadSharedEXT : return spv::StorageClass::TaskPayloadWorkgroupEXT; + case glslang::EvqHitObjectAttrNV: return spv::StorageClass::HitObjectAttributeNV; case glslang::EvqSpirvStorageClass: return static_cast(type.getQualifier().spirvStorageClass); default: assert(0); break; } - return spv::StorageClassFunction; + return spv::StorageClass::Function; } // Translate glslang constants to SPIR-V literals @@ -1436,33 +1438,33 @@ void TGlslangToSpvTraverser::addIndirectionIndexCapabilities(const glslang::TTyp // SPV_EXT_descriptor_indexing already added in TranslateNonUniformDecoration if (baseType.getBasicType() == glslang::EbtSampler) { if (baseType.getQualifier().hasAttachment()) - builder.addCapability(spv::CapabilityInputAttachmentArrayNonUniformIndexingEXT); + builder.addCapability(spv::Capability::InputAttachmentArrayNonUniformIndexingEXT); else if (baseType.isImage() && baseType.getSampler().isBuffer()) - builder.addCapability(spv::CapabilityStorageTexelBufferArrayNonUniformIndexingEXT); + builder.addCapability(spv::Capability::StorageTexelBufferArrayNonUniformIndexingEXT); else if (baseType.isTexture() && baseType.getSampler().isBuffer()) - builder.addCapability(spv::CapabilityUniformTexelBufferArrayNonUniformIndexingEXT); + builder.addCapability(spv::Capability::UniformTexelBufferArrayNonUniformIndexingEXT); else if (baseType.isImage()) - builder.addCapability(spv::CapabilityStorageImageArrayNonUniformIndexingEXT); + builder.addCapability(spv::Capability::StorageImageArrayNonUniformIndexingEXT); else if (baseType.isTexture()) - builder.addCapability(spv::CapabilitySampledImageArrayNonUniformIndexingEXT); + builder.addCapability(spv::Capability::SampledImageArrayNonUniformIndexingEXT); } else if (baseType.getBasicType() == glslang::EbtBlock) { if (baseType.getQualifier().storage == glslang::EvqBuffer) - builder.addCapability(spv::CapabilityStorageBufferArrayNonUniformIndexingEXT); + builder.addCapability(spv::Capability::StorageBufferArrayNonUniformIndexingEXT); else if (baseType.getQualifier().storage == glslang::EvqUniform) - builder.addCapability(spv::CapabilityUniformBufferArrayNonUniformIndexingEXT); + builder.addCapability(spv::Capability::UniformBufferArrayNonUniformIndexingEXT); } } else { // assume a dynamically uniform index if (baseType.getBasicType() == glslang::EbtSampler) { if (baseType.getQualifier().hasAttachment()) { builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); - builder.addCapability(spv::CapabilityInputAttachmentArrayDynamicIndexingEXT); + builder.addCapability(spv::Capability::InputAttachmentArrayDynamicIndexingEXT); } else if (baseType.isImage() && baseType.getSampler().isBuffer()) { builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); - builder.addCapability(spv::CapabilityStorageTexelBufferArrayDynamicIndexingEXT); + builder.addCapability(spv::Capability::StorageTexelBufferArrayDynamicIndexingEXT); } else if (baseType.isTexture() && baseType.getSampler().isBuffer()) { builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); - builder.addCapability(spv::CapabilityUniformTexelBufferArrayDynamicIndexingEXT); + builder.addCapability(spv::Capability::UniformTexelBufferArrayDynamicIndexingEXT); } } } @@ -1625,23 +1627,23 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, stdBuiltins = builder.import("GLSL.std.450"); - spv::AddressingModel addressingModel = spv::AddressingModelLogical; - spv::MemoryModel memoryModel = spv::MemoryModelGLSL450; + spv::AddressingModel addressingModel = spv::AddressingModel::Logical; + spv::MemoryModel memoryModel = spv::MemoryModel::GLSL450; if (glslangIntermediate->usingPhysicalStorageBuffer()) { - addressingModel = spv::AddressingModelPhysicalStorageBuffer64EXT; + addressingModel = spv::AddressingModel::PhysicalStorageBuffer64EXT; builder.addIncorporatedExtension(spv::E_SPV_KHR_physical_storage_buffer, spv::Spv_1_5); - builder.addCapability(spv::CapabilityPhysicalStorageBufferAddressesEXT); + builder.addCapability(spv::Capability::PhysicalStorageBufferAddressesEXT); } if (glslangIntermediate->usingVulkanMemoryModel()) { - memoryModel = spv::MemoryModelVulkanKHR; - builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + memoryModel = spv::MemoryModel::VulkanKHR; + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); builder.addIncorporatedExtension(spv::E_SPV_KHR_vulkan_memory_model, spv::Spv_1_5); } builder.setMemoryModel(addressingModel, memoryModel); if (glslangIntermediate->usingVariablePointers()) { - builder.addCapability(spv::CapabilityVariablePointers); + builder.addCapability(spv::Capability::VariablePointers); } // If not linking, there is no entry point @@ -1659,147 +1661,147 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, // Add the top-level modes for this shader. if (glslangIntermediate->getXfbMode()) { - builder.addCapability(spv::CapabilityTransformFeedback); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeXfb); + builder.addCapability(spv::Capability::TransformFeedback); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::Xfb); } if (glslangIntermediate->getLayoutPrimitiveCulling()) { - builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingKHR); + builder.addCapability(spv::Capability::RayTraversalPrimitiveCullingKHR); } if (glslangIntermediate->getSubgroupUniformControlFlow()) { builder.addExtension(spv::E_SPV_KHR_subgroup_uniform_control_flow); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeSubgroupUniformControlFlowKHR); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::SubgroupUniformControlFlowKHR); } if (glslangIntermediate->getMaximallyReconverges()) { builder.addExtension(spv::E_SPV_KHR_maximal_reconvergence); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeMaximallyReconvergesKHR); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::MaximallyReconvergesKHR); } if (glslangIntermediate->getQuadDerivMode()) { - builder.addCapability(spv::CapabilityQuadControlKHR); + builder.addCapability(spv::Capability::QuadControlKHR); builder.addExtension(spv::E_SPV_KHR_quad_control); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeQuadDerivativesKHR); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::QuadDerivativesKHR); } if (glslangIntermediate->getReqFullQuadsMode()) { - builder.addCapability(spv::CapabilityQuadControlKHR); + builder.addCapability(spv::Capability::QuadControlKHR); builder.addExtension(spv::E_SPV_KHR_quad_control); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeRequireFullQuadsKHR); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::RequireFullQuadsKHR); } - unsigned int mode; + spv::ExecutionMode mode; switch (glslangIntermediate->getStage()) { case EShLangVertex: - builder.addCapability(spv::CapabilityShader); + builder.addCapability(spv::Capability::Shader); break; case EShLangFragment: - builder.addCapability(spv::CapabilityShader); + builder.addCapability(spv::Capability::Shader); if (glslangIntermediate->getPixelCenterInteger()) - builder.addExecutionMode(shaderEntry, spv::ExecutionModePixelCenterInteger); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::PixelCenterInteger); if (glslangIntermediate->getOriginUpperLeft()) - builder.addExecutionMode(shaderEntry, spv::ExecutionModeOriginUpperLeft); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::OriginUpperLeft); else - builder.addExecutionMode(shaderEntry, spv::ExecutionModeOriginLowerLeft); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::OriginLowerLeft); if (glslangIntermediate->getEarlyFragmentTests()) - builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyFragmentTests); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::EarlyFragmentTests); if (glslangIntermediate->getEarlyAndLateFragmentTestsAMD()) { - builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyAndLateFragmentTestsAMD); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::EarlyAndLateFragmentTestsAMD); builder.addExtension(spv::E_SPV_AMD_shader_early_and_late_fragment_tests); } if (glslangIntermediate->getPostDepthCoverage()) { - builder.addCapability(spv::CapabilitySampleMaskPostDepthCoverage); - builder.addExecutionMode(shaderEntry, spv::ExecutionModePostDepthCoverage); + builder.addCapability(spv::Capability::SampleMaskPostDepthCoverage); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::PostDepthCoverage); builder.addExtension(spv::E_SPV_KHR_post_depth_coverage); } if (glslangIntermediate->getNonCoherentColorAttachmentReadEXT()) { - builder.addCapability(spv::CapabilityTileImageColorReadAccessEXT); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentColorAttachmentReadEXT); + builder.addCapability(spv::Capability::TileImageColorReadAccessEXT); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::NonCoherentColorAttachmentReadEXT); builder.addExtension(spv::E_SPV_EXT_shader_tile_image); } if (glslangIntermediate->getNonCoherentDepthAttachmentReadEXT()) { - builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentDepthAttachmentReadEXT); + builder.addCapability(spv::Capability::TileImageDepthReadAccessEXT); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::NonCoherentDepthAttachmentReadEXT); builder.addExtension(spv::E_SPV_EXT_shader_tile_image); } if (glslangIntermediate->getNonCoherentStencilAttachmentReadEXT()) { - builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeNonCoherentStencilAttachmentReadEXT); + builder.addCapability(spv::Capability::TileImageStencilReadAccessEXT); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::NonCoherentStencilAttachmentReadEXT); builder.addExtension(spv::E_SPV_EXT_shader_tile_image); } if (glslangIntermediate->isDepthReplacing()) - builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::DepthReplacing); if (glslangIntermediate->isStencilReplacing()) - builder.addExecutionMode(shaderEntry, spv::ExecutionModeStencilRefReplacingEXT); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::StencilRefReplacingEXT); switch(glslangIntermediate->getDepth()) { - case glslang::EldGreater: mode = spv::ExecutionModeDepthGreater; break; - case glslang::EldLess: mode = spv::ExecutionModeDepthLess; break; - case glslang::EldUnchanged: mode = spv::ExecutionModeDepthUnchanged; break; - default: mode = spv::ExecutionModeMax; break; + case glslang::EldGreater: mode = spv::ExecutionMode::DepthGreater; break; + case glslang::EldLess: mode = spv::ExecutionMode::DepthLess; break; + case glslang::EldUnchanged: mode = spv::ExecutionMode::DepthUnchanged; break; + default: mode = spv::ExecutionMode::Max; break; } - if (mode != spv::ExecutionModeMax) - builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + if (mode != spv::ExecutionMode::Max) + builder.addExecutionMode(shaderEntry, mode); switch (glslangIntermediate->getStencil()) { - case glslang::ElsRefUnchangedFrontAMD: mode = spv::ExecutionModeStencilRefUnchangedFrontAMD; break; - case glslang::ElsRefGreaterFrontAMD: mode = spv::ExecutionModeStencilRefGreaterFrontAMD; break; - case glslang::ElsRefLessFrontAMD: mode = spv::ExecutionModeStencilRefLessFrontAMD; break; - case glslang::ElsRefUnchangedBackAMD: mode = spv::ExecutionModeStencilRefUnchangedBackAMD; break; - case glslang::ElsRefGreaterBackAMD: mode = spv::ExecutionModeStencilRefGreaterBackAMD; break; - case glslang::ElsRefLessBackAMD: mode = spv::ExecutionModeStencilRefLessBackAMD; break; - default: mode = spv::ExecutionModeMax; break; + case glslang::ElsRefUnchangedFrontAMD: mode = spv::ExecutionMode::StencilRefUnchangedFrontAMD; break; + case glslang::ElsRefGreaterFrontAMD: mode = spv::ExecutionMode::StencilRefGreaterFrontAMD; break; + case glslang::ElsRefLessFrontAMD: mode = spv::ExecutionMode::StencilRefLessFrontAMD; break; + case glslang::ElsRefUnchangedBackAMD: mode = spv::ExecutionMode::StencilRefUnchangedBackAMD; break; + case glslang::ElsRefGreaterBackAMD: mode = spv::ExecutionMode::StencilRefGreaterBackAMD; break; + case glslang::ElsRefLessBackAMD: mode = spv::ExecutionMode::StencilRefLessBackAMD; break; + default: mode = spv::ExecutionMode::Max; break; } - if (mode != spv::ExecutionModeMax) + if (mode != spv::ExecutionMode::Max) builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); switch (glslangIntermediate->getInterlockOrdering()) { - case glslang::EioPixelInterlockOrdered: mode = spv::ExecutionModePixelInterlockOrderedEXT; + case glslang::EioPixelInterlockOrdered: mode = spv::ExecutionMode::PixelInterlockOrderedEXT; break; - case glslang::EioPixelInterlockUnordered: mode = spv::ExecutionModePixelInterlockUnorderedEXT; + case glslang::EioPixelInterlockUnordered: mode = spv::ExecutionMode::PixelInterlockUnorderedEXT; break; - case glslang::EioSampleInterlockOrdered: mode = spv::ExecutionModeSampleInterlockOrderedEXT; + case glslang::EioSampleInterlockOrdered: mode = spv::ExecutionMode::SampleInterlockOrderedEXT; break; - case glslang::EioSampleInterlockUnordered: mode = spv::ExecutionModeSampleInterlockUnorderedEXT; + case glslang::EioSampleInterlockUnordered: mode = spv::ExecutionMode::SampleInterlockUnorderedEXT; break; - case glslang::EioShadingRateInterlockOrdered: mode = spv::ExecutionModeShadingRateInterlockOrderedEXT; + case glslang::EioShadingRateInterlockOrdered: mode = spv::ExecutionMode::ShadingRateInterlockOrderedEXT; break; - case glslang::EioShadingRateInterlockUnordered: mode = spv::ExecutionModeShadingRateInterlockUnorderedEXT; + case glslang::EioShadingRateInterlockUnordered: mode = spv::ExecutionMode::ShadingRateInterlockUnorderedEXT; break; - default: mode = spv::ExecutionModeMax; + default: mode = spv::ExecutionMode::Max; break; } - if (mode != spv::ExecutionModeMax) { + if (mode != spv::ExecutionMode::Max) { builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); - if (mode == spv::ExecutionModeShadingRateInterlockOrderedEXT || - mode == spv::ExecutionModeShadingRateInterlockUnorderedEXT) { - builder.addCapability(spv::CapabilityFragmentShaderShadingRateInterlockEXT); - } else if (mode == spv::ExecutionModePixelInterlockOrderedEXT || - mode == spv::ExecutionModePixelInterlockUnorderedEXT) { - builder.addCapability(spv::CapabilityFragmentShaderPixelInterlockEXT); + if (mode == spv::ExecutionMode::ShadingRateInterlockOrderedEXT || + mode == spv::ExecutionMode::ShadingRateInterlockUnorderedEXT) { + builder.addCapability(spv::Capability::FragmentShaderShadingRateInterlockEXT); + } else if (mode == spv::ExecutionMode::PixelInterlockOrderedEXT || + mode == spv::ExecutionMode::PixelInterlockUnorderedEXT) { + builder.addCapability(spv::Capability::FragmentShaderPixelInterlockEXT); } else { - builder.addCapability(spv::CapabilityFragmentShaderSampleInterlockEXT); + builder.addCapability(spv::Capability::FragmentShaderSampleInterlockEXT); } builder.addExtension(spv::E_SPV_EXT_fragment_shader_interlock); } break; case EShLangCompute: { - builder.addCapability(spv::CapabilityShader); + builder.addCapability(spv::Capability::Shader); bool needSizeId = false; for (int dim = 0; dim < 3; ++dim) { if ((glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet)) { @@ -1813,36 +1815,36 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst)); if (specConst) { - builder.addDecoration(dimConstId.back(), spv::DecorationSpecId, + builder.addDecoration(dimConstId.back(), spv::Decoration::SpecId, glslangIntermediate->getLocalSizeSpecId(dim)); needSizeId = true; } } - builder.addExecutionModeId(shaderEntry, spv::ExecutionModeLocalSizeId, dimConstId); + builder.addExecutionModeId(shaderEntry, spv::ExecutionMode::LocalSizeId, dimConstId); } else { - builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0), + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::LocalSize, glslangIntermediate->getLocalSize(0), glslangIntermediate->getLocalSize(1), glslangIntermediate->getLocalSize(2)); } if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupQuads) { - builder.addCapability(spv::CapabilityComputeDerivativeGroupQuadsNV); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupQuadsNV); + builder.addCapability(spv::Capability::ComputeDerivativeGroupQuadsNV); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::DerivativeGroupQuadsNV); builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives); } else if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupLinear) { - builder.addCapability(spv::CapabilityComputeDerivativeGroupLinearNV); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupLinearNV); + builder.addCapability(spv::Capability::ComputeDerivativeGroupLinearNV); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::DerivativeGroupLinearNV); builder.addExtension(spv::E_SPV_NV_compute_shader_derivatives); } break; } case EShLangTessEvaluation: case EShLangTessControl: - builder.addCapability(spv::CapabilityTessellation); + builder.addCapability(spv::Capability::Tessellation); glslang::TLayoutGeometry primitive; if (glslangIntermediate->getStage() == EShLangTessControl) { - builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::OutputVertices, glslangIntermediate->getVertices()); primitive = glslangIntermediate->getOutputPrimitive(); } else { @@ -1850,59 +1852,59 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, } switch (primitive) { - case glslang::ElgTriangles: mode = spv::ExecutionModeTriangles; break; - case glslang::ElgQuads: mode = spv::ExecutionModeQuads; break; - case glslang::ElgIsolines: mode = spv::ExecutionModeIsolines; break; - default: mode = spv::ExecutionModeMax; break; + case glslang::ElgTriangles: mode = spv::ExecutionMode::Triangles; break; + case glslang::ElgQuads: mode = spv::ExecutionMode::Quads; break; + case glslang::ElgIsolines: mode = spv::ExecutionMode::Isolines; break; + default: mode = spv::ExecutionMode::Max; break; } - if (mode != spv::ExecutionModeMax) - builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + if (mode != spv::ExecutionMode::Max) + builder.addExecutionMode(shaderEntry, mode); switch (glslangIntermediate->getVertexSpacing()) { - case glslang::EvsEqual: mode = spv::ExecutionModeSpacingEqual; break; - case glslang::EvsFractionalEven: mode = spv::ExecutionModeSpacingFractionalEven; break; - case glslang::EvsFractionalOdd: mode = spv::ExecutionModeSpacingFractionalOdd; break; - default: mode = spv::ExecutionModeMax; break; + case glslang::EvsEqual: mode = spv::ExecutionMode::SpacingEqual; break; + case glslang::EvsFractionalEven: mode = spv::ExecutionMode::SpacingFractionalEven; break; + case glslang::EvsFractionalOdd: mode = spv::ExecutionMode::SpacingFractionalOdd; break; + default: mode = spv::ExecutionMode::Max; break; } - if (mode != spv::ExecutionModeMax) - builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + if (mode != spv::ExecutionMode::Max) + builder.addExecutionMode(shaderEntry, mode); switch (glslangIntermediate->getVertexOrder()) { - case glslang::EvoCw: mode = spv::ExecutionModeVertexOrderCw; break; - case glslang::EvoCcw: mode = spv::ExecutionModeVertexOrderCcw; break; - default: mode = spv::ExecutionModeMax; break; + case glslang::EvoCw: mode = spv::ExecutionMode::VertexOrderCw; break; + case glslang::EvoCcw: mode = spv::ExecutionMode::VertexOrderCcw; break; + default: mode = spv::ExecutionMode::Max; break; } - if (mode != spv::ExecutionModeMax) - builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + if (mode != spv::ExecutionMode::Max) + builder.addExecutionMode(shaderEntry, mode); if (glslangIntermediate->getPointMode()) - builder.addExecutionMode(shaderEntry, spv::ExecutionModePointMode); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::PointMode); break; case EShLangGeometry: - builder.addCapability(spv::CapabilityGeometry); + builder.addCapability(spv::Capability::Geometry); switch (glslangIntermediate->getInputPrimitive()) { - case glslang::ElgPoints: mode = spv::ExecutionModeInputPoints; break; - case glslang::ElgLines: mode = spv::ExecutionModeInputLines; break; - case glslang::ElgLinesAdjacency: mode = spv::ExecutionModeInputLinesAdjacency; break; - case glslang::ElgTriangles: mode = spv::ExecutionModeTriangles; break; - case glslang::ElgTrianglesAdjacency: mode = spv::ExecutionModeInputTrianglesAdjacency; break; - default: mode = spv::ExecutionModeMax; break; + case glslang::ElgPoints: mode = spv::ExecutionMode::InputPoints; break; + case glslang::ElgLines: mode = spv::ExecutionMode::InputLines; break; + case glslang::ElgLinesAdjacency: mode = spv::ExecutionMode::InputLinesAdjacency; break; + case glslang::ElgTriangles: mode = spv::ExecutionMode::Triangles; break; + case glslang::ElgTrianglesAdjacency: mode = spv::ExecutionMode::InputTrianglesAdjacency; break; + default: mode = spv::ExecutionMode::Max; break; } - if (mode != spv::ExecutionModeMax) - builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + if (mode != spv::ExecutionMode::Max) + builder.addExecutionMode(shaderEntry, mode); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeInvocations, glslangIntermediate->getInvocations()); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::Invocations, glslangIntermediate->getInvocations()); switch (glslangIntermediate->getOutputPrimitive()) { - case glslang::ElgPoints: mode = spv::ExecutionModeOutputPoints; break; - case glslang::ElgLineStrip: mode = spv::ExecutionModeOutputLineStrip; break; - case glslang::ElgTriangleStrip: mode = spv::ExecutionModeOutputTriangleStrip; break; - default: mode = spv::ExecutionModeMax; break; + case glslang::ElgPoints: mode = spv::ExecutionMode::OutputPoints; break; + case glslang::ElgLineStrip: mode = spv::ExecutionMode::OutputLineStrip; break; + case glslang::ElgTriangleStrip: mode = spv::ExecutionMode::OutputTriangleStrip; break; + default: mode = spv::ExecutionMode::Max; break; } - if (mode != spv::ExecutionModeMax) - builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices()); + if (mode != spv::ExecutionMode::Max) + builder.addExecutionMode(shaderEntry, mode); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::OutputVertices, glslangIntermediate->getVertices()); break; case EShLangRayGen: @@ -1914,24 +1916,24 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, { auto& extensions = glslangIntermediate->getRequestedExtensions(); if (extensions.find("GL_EXT_opacity_micromap") != extensions.end()) { - builder.addCapability(spv::CapabilityRayTracingOpacityMicromapEXT); + builder.addCapability(spv::Capability::RayTracingOpacityMicromapEXT); builder.addExtension("SPV_EXT_opacity_micromap"); } if (extensions.find("GL_NV_ray_tracing") == extensions.end()) { - builder.addCapability(spv::CapabilityRayTracingKHR); + builder.addCapability(spv::Capability::RayTracingKHR); builder.addExtension("SPV_KHR_ray_tracing"); } else { - builder.addCapability(spv::CapabilityRayTracingNV); + builder.addCapability(spv::Capability::RayTracingNV); builder.addExtension("SPV_NV_ray_tracing"); } if (glslangIntermediate->getStage() != EShLangRayGen && glslangIntermediate->getStage() != EShLangCallable) { if (extensions.find("GL_EXT_ray_cull_mask") != extensions.end()) { - builder.addCapability(spv::CapabilityRayCullMaskKHR); + builder.addCapability(spv::Capability::RayCullMaskKHR); builder.addExtension("SPV_KHR_ray_cull_mask"); } if (extensions.find("GL_EXT_ray_tracing_position_fetch") != extensions.end()) { - builder.addCapability(spv::CapabilityRayTracingPositionFetchKHR); + builder.addCapability(spv::Capability::RayTracingPositionFetchKHR); builder.addExtension("SPV_KHR_ray_tracing_position_fetch"); } } @@ -1940,10 +1942,10 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, case EShLangTask: case EShLangMesh: if(isMeshShaderExt) { - builder.addCapability(spv::CapabilityMeshShadingEXT); + builder.addCapability(spv::Capability::MeshShadingEXT); builder.addExtension(spv::E_SPV_EXT_mesh_shader); } else { - builder.addCapability(spv::CapabilityMeshShadingNV); + builder.addCapability(spv::Capability::MeshShadingNV); builder.addExtension(spv::E_SPV_NV_mesh_shader); } if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { @@ -1952,29 +1954,29 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst)); if (specConst) { - builder.addDecoration(dimConstId.back(), spv::DecorationSpecId, + builder.addDecoration(dimConstId.back(), spv::Decoration::SpecId, glslangIntermediate->getLocalSizeSpecId(dim)); } } - builder.addExecutionModeId(shaderEntry, spv::ExecutionModeLocalSizeId, dimConstId); + builder.addExecutionModeId(shaderEntry, spv::ExecutionMode::LocalSizeId, dimConstId); } else { - builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0), + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::LocalSize, glslangIntermediate->getLocalSize(0), glslangIntermediate->getLocalSize(1), glslangIntermediate->getLocalSize(2)); } if (glslangIntermediate->getStage() == EShLangMesh) { - builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::OutputVertices, glslangIntermediate->getVertices()); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputPrimitivesNV, + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::OutputPrimitivesNV, glslangIntermediate->getPrimitives()); switch (glslangIntermediate->getOutputPrimitive()) { - case glslang::ElgPoints: mode = spv::ExecutionModeOutputPoints; break; - case glslang::ElgLines: mode = spv::ExecutionModeOutputLinesNV; break; - case glslang::ElgTriangles: mode = spv::ExecutionModeOutputTrianglesNV; break; - default: mode = spv::ExecutionModeMax; break; + case glslang::ElgPoints: mode = spv::ExecutionMode::OutputPoints; break; + case glslang::ElgLines: mode = spv::ExecutionMode::OutputLinesNV; break; + case glslang::ElgTriangles: mode = spv::ExecutionMode::OutputTrianglesNV; break; + default: mode = spv::ExecutionMode::Max; break; } - if (mode != spv::ExecutionModeMax) + if (mode != spv::ExecutionMode::Max) builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); } break; @@ -2116,7 +2118,7 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) // Before SPIR-V 1.4, we only want to include Input and Output. // Starting with SPIR-V 1.4, we want all globals. if ((glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4 && builder.isGlobalVariable(id)) || - (sc == spv::StorageClassInput || sc == spv::StorageClassOutput)) { + (sc == spv::StorageClass::Input || sc == spv::StorageClass::Output)) { iOSet.insert(id); } } @@ -2180,7 +2182,7 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) spv::Id counterId = getSymbolId(symbol); if (counterId != spv::NoResult) { builder.addExtension("SPV_GOOGLE_hlsl_functionality1"); - builder.addDecorationId(id, spv::DecorationHlslCounterBufferGOOGLE, counterId); + builder.addDecorationId(id, spv::Decoration::HlslCounterBufferGOOGLE, counterId); } } } @@ -2451,13 +2453,13 @@ spv::Id TGlslangToSpvTraverser::convertLoadedBoolInUniformToUint(const glslang:: // Conversion for bool spv::Id boolType = builder.makeBoolType(); if (nominalTypeId != boolType) - return builder.createBinOp(spv::OpINotEqual, boolType, loadedId, builder.makeUintConstant(0)); + return builder.createBinOp(spv::Op::OpINotEqual, boolType, loadedId, builder.makeUintConstant(0)); } else if (builder.isVectorType(nominalTypeId)) { // Conversion for bvec int vecSize = builder.getNumTypeComponents(nominalTypeId); spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize); if (nominalTypeId != bvecType) - loadedId = builder.createBinOp(spv::OpINotEqual, bvecType, loadedId, + loadedId = builder.createBinOp(spv::Op::OpINotEqual, bvecType, loadedId, makeSmearedConstant(builder.makeUintConstant(0), vecSize)); } else if (builder.isArrayType(nominalTypeId)) { // Conversion for bool array @@ -2466,7 +2468,7 @@ spv::Id TGlslangToSpvTraverser::convertLoadedBoolInUniformToUint(const glslang:: { // Use OpCopyLogical from SPIR-V 1.4 if available. if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) - return builder.createUnaryOp(spv::OpCopyLogical, boolArrayTypeId, loadedId); + return builder.createUnaryOp(spv::Op::OpCopyLogical, boolArrayTypeId, loadedId); glslang::TType glslangElementType(type, 0); spv::Id elementNominalTypeId = builder.getContainedTypeId(nominalTypeId); @@ -2543,13 +2545,13 @@ spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object) // handle 32-bit v.xy* -> 64-bit builder.clearAccessChain(); builder.setAccessChainLValue(object); - object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, spv::DecorationMax, objectTypeId); + object = builder.accessChainLoad(spv::NoPrecision, spv::Decoration::Max, spv::Decoration::Max, objectTypeId); std::vector components; components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 0)); components.push_back(builder.createCompositeExtract(object, builder.getContainedTypeId(objectTypeId), 1)); spv::Id vecType = builder.makeVectorType(builder.getContainedTypeId(objectTypeId), 2); - return builder.createUnaryOp(spv::OpBitcast, desiredTypeId, + return builder.createUnaryOp(spv::Op::OpBitcast, desiredTypeId, builder.createCompositeConstruct(vecType, components)); } else { logger->missingFunctionality("forcing 32-bit vector type to non 64-bit scalar"); @@ -2559,8 +2561,8 @@ spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object) // and we insert a transpose after loading the original non-transposed builtins builder.clearAccessChain(); builder.setAccessChainLValue(object); - object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, spv::DecorationMax, objectTypeId); - return builder.createUnaryOp(spv::OpTranspose, desiredTypeId, object); + object = builder.accessChainLoad(spv::NoPrecision, spv::Decoration::Max, spv::Decoration::Max, objectTypeId); + return builder.createUnaryOp(spv::Op::OpTranspose, desiredTypeId, object); } else { logger->missingFunctionality("forcing non 32-bit vector type"); @@ -2629,9 +2631,9 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI // AST expectation of a signed result. if (glslangIntermediate->getSource() == glslang::EShSourceGlsl) { if (builder.isInSpecConstCodeGenMode()) { - length = builder.createBinOp(spv::OpIAdd, builder.makeIntType(32), length, builder.makeIntConstant(0)); + length = builder.createBinOp(spv::Op::OpIAdd, builder.makeIntType(32), length, builder.makeIntConstant(0)); } else { - length = builder.createUnaryOp(spv::OpBitcast, builder.makeIntType(32), length); + length = builder.createUnaryOp(spv::Op::OpBitcast, builder.makeIntType(32), length); } } @@ -2743,7 +2745,7 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI 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::CapabilityCooperativeMatrixConversionsNV); + builder.addCapability(spv::Capability::CooperativeMatrixConversionsNV); builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); } } @@ -2811,6 +2813,8 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI one = builder.makeDoubleConstant(1.0); else if (node->getBasicType() == glslang::EbtFloat16) one = builder.makeFloat16Constant(1.0F); + else if (node->getBasicType() == glslang::EbtBFloat16) + one = builder.makeBFloat16Constant(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) @@ -2846,37 +2850,37 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI return false; case glslang::EOpAssumeEXT: - builder.addCapability(spv::CapabilityExpectAssumeKHR); + builder.addCapability(spv::Capability::ExpectAssumeKHR); builder.addExtension(spv::E_SPV_KHR_expect_assume); - builder.createNoResultOp(spv::OpAssumeTrueKHR, operand); + builder.createNoResultOp(spv::Op::OpAssumeTrueKHR, operand); return false; case glslang::EOpEmitStreamVertex: - builder.createNoResultOp(spv::OpEmitStreamVertex, operand); + builder.createNoResultOp(spv::Op::OpEmitStreamVertex, operand); return false; case glslang::EOpEndStreamPrimitive: - builder.createNoResultOp(spv::OpEndStreamPrimitive, operand); + builder.createNoResultOp(spv::Op::OpEndStreamPrimitive, operand); return false; case glslang::EOpRayQueryTerminate: - builder.createNoResultOp(spv::OpRayQueryTerminateKHR, operand); + builder.createNoResultOp(spv::Op::OpRayQueryTerminateKHR, operand); return false; case glslang::EOpRayQueryConfirmIntersection: - builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR, operand); + builder.createNoResultOp(spv::Op::OpRayQueryConfirmIntersectionKHR, operand); return false; case glslang::EOpReorderThreadNV: - builder.createNoResultOp(spv::OpReorderThreadWithHitObjectNV, operand); + builder.createNoResultOp(spv::Op::OpReorderThreadWithHitObjectNV, operand); return false; case glslang::EOpHitObjectRecordEmptyNV: - builder.createNoResultOp(spv::OpHitObjectRecordEmptyNV, operand); + builder.createNoResultOp(spv::Op::OpHitObjectRecordEmptyNV, operand); return false; case glslang::EOpCreateTensorLayoutNV: - result = builder.createOp(spv::OpCreateTensorLayoutNV, resultType(), std::vector{}); + result = builder.createOp(spv::Op::OpCreateTensorLayoutNV, resultType(), std::vector{}); builder.clearAccessChain(); builder.setAccessChainRValue(result); return false; case glslang::EOpCreateTensorViewNV: - result = builder.createOp(spv::OpCreateTensorViewNV, resultType(), std::vector{}); + result = builder.createOp(spv::Op::OpCreateTensorViewNV, resultType(), std::vector{}); builder.clearAccessChain(); builder.setAccessChainRValue(result); return false; @@ -2896,7 +2900,7 @@ spv::Id TGlslangToSpvTraverser::createCompositeConstruct(spv::Id resultTypeId, s spv::Id rType = builder.getTypeId(constituent); if (lType != rType) { if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) { - constituent = builder.createUnaryOp(spv::OpCopyLogical, lType, constituent); + constituent = builder.createUnaryOp(spv::Op::OpCopyLogical, lType, constituent); } else if (builder.isStructType(rType)) { std::vector rTypeConstituents; int numrTypeConstituents = builder.getNumTypeConstituents(rType); @@ -3150,6 +3154,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpConstructF16Vec2: case glslang::EOpConstructF16Vec3: case glslang::EOpConstructF16Vec4: + case glslang::EOpConstructBFloat16: + case glslang::EOpConstructBF16Vec2: + case glslang::EOpConstructBF16Vec3: + case glslang::EOpConstructBF16Vec4: case glslang::EOpConstructBool: case glslang::EOpConstructBVec2: case glslang::EOpConstructBVec3: @@ -3206,10 +3214,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt // and textureBuffer is the result going forward constructed = arguments[0]; } else - constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments); + constructed = builder.createOp(spv::Op::OpSampledImage, resultType(), arguments); } else if (node->getOp() == glslang::EOpConstructCooperativeMatrixKHR && node->getType().isCoopMatKHR() && node->getSequence()[0]->getAsTyped()->getType().isCoopMatKHR()) { - builder.addCapability(spv::CapabilityCooperativeMatrixConversionsNV); + builder.addCapability(spv::Capability::CooperativeMatrixConversionsNV); builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); constructed = builder.createCooperativeMatrixConversion(resultType(), arguments[0]); } else if (node->getOp() == glslang::EOpConstructCooperativeVectorNV && @@ -3233,7 +3241,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt constructed = builder.createConstructor(precision, arguments, resultType()); if (node->getType().getQualifier().isNonUniform()) { - builder.addDecoration(constructed, spv::DecorationNonUniformEXT); + builder.addDecoration(constructed, spv::Decoration::NonUniformEXT); } builder.clearAccessChain(); @@ -3336,7 +3344,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpAtomicCounterExchange: case glslang::EOpAtomicCounterCompSwap: builder.addExtension("SPV_KHR_shader_atomic_counter_ops"); - builder.addCapability(spv::CapabilityAtomicStorageOps); + builder.addCapability(spv::Capability::AtomicStorageOps); atomic = true; break; @@ -3346,13 +3354,13 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpAverage: case glslang::EOpAverageRounded: case glslang::EOpMul32x16: - builder.addCapability(spv::CapabilityIntegerFunctions2INTEL); + builder.addCapability(spv::Capability::IntegerFunctions2INTEL); builder.addExtension("SPV_INTEL_shader_integer_functions2"); binOp = node->getOp(); break; case glslang::EOpExpectEXT: - builder.addCapability(spv::CapabilityExpectAssumeKHR); + builder.addCapability(spv::Capability::ExpectAssumeKHR); builder.addExtension(spv::E_SPV_KHR_expect_assume); binOp = node->getOp(); break; @@ -3374,7 +3382,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpRayQueryGenerateIntersection: case glslang::EOpRayQueryConfirmIntersection: builder.addExtension("SPV_KHR_ray_query"); - builder.addCapability(spv::CapabilityRayQueryKHR); + builder.addCapability(spv::Capability::RayQueryKHR); noReturnValue = true; break; case glslang::EOpRayQueryProceed: @@ -3397,7 +3405,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpRayQueryGetIntersectionObjectToWorld: case glslang::EOpRayQueryGetIntersectionWorldToObject: builder.addExtension("SPV_KHR_ray_query"); - builder.addCapability(spv::CapabilityRayQueryKHR); + builder.addCapability(spv::Capability::RayQueryKHR); break; case glslang::EOpCooperativeMatrixLoad: case glslang::EOpCooperativeMatrixStore: @@ -3456,14 +3464,14 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV: case glslang::EOpHitObjectGetShaderRecordBufferHandleNV: builder.addExtension(spv::E_SPV_NV_shader_invocation_reorder); - builder.addCapability(spv::CapabilityShaderInvocationReorderNV); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); break; case glslang::EOpHitObjectGetLSSPositionsNV: case glslang::EOpHitObjectGetLSSRadiiNV: builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); - builder.addCapability(spv::CapabilityShaderInvocationReorderNV); - builder.addCapability(spv::CapabilityRayTracingLinearSweptSpheresGeometryNV); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); noReturnValue = true; break; @@ -3471,21 +3479,21 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpHitObjectGetSphereRadiusNV: case glslang::EOpHitObjectIsSphereHitNV: builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); - builder.addCapability(spv::CapabilityShaderInvocationReorderNV); - builder.addCapability(spv::CapabilityRayTracingSpheresGeometryNV); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); break; case glslang::EOpHitObjectIsLSSHitNV: builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); - builder.addCapability(spv::CapabilityShaderInvocationReorderNV); - builder.addCapability(spv::CapabilityRayTracingLinearSweptSpheresGeometryNV); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); break; case glslang::EOpRayQueryGetIntersectionLSSPositionsNV: case glslang::EOpRayQueryGetIntersectionLSSRadiiNV: builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); - builder.addCapability(spv::CapabilityRayQueryKHR); - builder.addCapability(spv::CapabilityRayTracingLinearSweptSpheresGeometryNV); + builder.addCapability(spv::Capability::RayQueryKHR); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); noReturnValue = true; break; @@ -3493,64 +3501,64 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpRayQueryGetIntersectionSphereRadiusNV: case glslang::EOpRayQueryIsSphereHitNV: builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); - builder.addCapability(spv::CapabilityRayQueryKHR); - builder.addCapability(spv::CapabilityRayTracingSpheresGeometryNV); - builder.addCapability(spv::CapabilityRayTracingLinearSweptSpheresGeometryNV); + builder.addCapability(spv::Capability::RayQueryKHR); + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); break; case glslang::EOpRayQueryGetIntersectionLSSHitValueNV: case glslang::EOpRayQueryIsLSSHitNV: builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); - builder.addCapability(spv::CapabilityRayQueryKHR); - builder.addCapability(spv::CapabilityRayTracingLinearSweptSpheresGeometryNV); + builder.addCapability(spv::Capability::RayQueryKHR); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); break; case glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: builder.addExtension(spv::E_SPV_KHR_ray_tracing_position_fetch); - builder.addCapability(spv::CapabilityRayQueryPositionFetchKHR); + builder.addCapability(spv::Capability::RayQueryPositionFetchKHR); noReturnValue = true; break; case glslang::EOpImageSampleWeightedQCOM: - builder.addCapability(spv::CapabilityTextureSampleWeightedQCOM); + builder.addCapability(spv::Capability::TextureSampleWeightedQCOM); builder.addExtension(spv::E_SPV_QCOM_image_processing); break; case glslang::EOpImageBoxFilterQCOM: - builder.addCapability(spv::CapabilityTextureBoxFilterQCOM); + builder.addCapability(spv::Capability::TextureBoxFilterQCOM); builder.addExtension(spv::E_SPV_QCOM_image_processing); break; case glslang::EOpImageBlockMatchSADQCOM: case glslang::EOpImageBlockMatchSSDQCOM: - builder.addCapability(spv::CapabilityTextureBlockMatchQCOM); + builder.addCapability(spv::Capability::TextureBlockMatchQCOM); builder.addExtension(spv::E_SPV_QCOM_image_processing); break; case glslang::EOpImageBlockMatchWindowSSDQCOM: case glslang::EOpImageBlockMatchWindowSADQCOM: - builder.addCapability(spv::CapabilityTextureBlockMatchQCOM); + builder.addCapability(spv::Capability::TextureBlockMatchQCOM); builder.addExtension(spv::E_SPV_QCOM_image_processing); - builder.addCapability(spv::CapabilityTextureBlockMatch2QCOM); + builder.addCapability(spv::Capability::TextureBlockMatch2QCOM); builder.addExtension(spv::E_SPV_QCOM_image_processing2); break; case glslang::EOpImageBlockMatchGatherSSDQCOM: case glslang::EOpImageBlockMatchGatherSADQCOM: - builder.addCapability(spv::CapabilityTextureBlockMatchQCOM); + builder.addCapability(spv::Capability::TextureBlockMatchQCOM); builder.addExtension(spv::E_SPV_QCOM_image_processing); - builder.addCapability(spv::CapabilityTextureBlockMatch2QCOM); + builder.addCapability(spv::Capability::TextureBlockMatch2QCOM); builder.addExtension(spv::E_SPV_QCOM_image_processing2); break; case glslang::EOpFetchMicroTriangleVertexPositionNV: case glslang::EOpFetchMicroTriangleVertexBarycentricNV: builder.addExtension(spv::E_SPV_NV_displacement_micromap); - builder.addCapability(spv::CapabilityDisplacementMicromapNV); + builder.addCapability(spv::Capability::DisplacementMicromapNV); break; case glslang::EOpRayQueryGetIntersectionClusterIdNV: builder.addExtension(spv::E_SPV_NV_cluster_acceleration_structure); - builder.addCapability(spv::CapabilityRayQueryKHR); - builder.addCapability(spv::CapabilityRayTracingClusterAccelerationStructureNV); + builder.addCapability(spv::Capability::RayQueryKHR); + builder.addCapability(spv::Capability::RayTracingClusterAccelerationStructureNV); break; case glslang::EOpDebugPrintf: @@ -3818,30 +3826,30 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt alignment = 16; } - int memoryAccess = TranslateMemoryAccess(coherentFlags); + spv::MemoryAccessMask memoryAccess = TranslateMemoryAccess(coherentFlags); if (node->getOp() == glslang::EOpCooperativeMatrixLoad || node->getOp() == glslang::EOpCooperativeMatrixLoadNV || node->getOp() == glslang::EOpCooperativeMatrixLoadTensorNV || node->getOp() == glslang::EOpCooperativeVectorLoadNV) - memoryAccess &= ~spv::MemoryAccessMakePointerAvailableKHRMask; + memoryAccess = (memoryAccess & ~spv::MemoryAccessMask::MakePointerAvailableKHR); if (node->getOp() == glslang::EOpCooperativeMatrixStore || node->getOp() == glslang::EOpCooperativeMatrixStoreNV || node->getOp() == glslang::EOpCooperativeMatrixStoreTensorNV || node->getOp() == glslang::EOpCooperativeVectorStoreNV) - memoryAccess &= ~spv::MemoryAccessMakePointerVisibleKHRMask; + memoryAccess = (memoryAccess & ~spv::MemoryAccessMask::MakePointerVisibleKHR); if (builder.getStorageClass(builder.getAccessChain().base) == - spv::StorageClassPhysicalStorageBufferEXT) { - memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask); + spv::StorageClass::PhysicalStorageBufferEXT) { + memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessMask::Aligned); } memoryAccessOperands.push_back(spv::IdImmediate(false, memoryAccess)); - if (memoryAccess & spv::MemoryAccessAlignedMask) { + if (anySet(memoryAccess, spv::MemoryAccessMask::Aligned)) { memoryAccessOperands.push_back(spv::IdImmediate(false, alignment)); } - if (memoryAccess & - (spv::MemoryAccessMakePointerAvailableKHRMask | spv::MemoryAccessMakePointerVisibleKHRMask)) { + if (anySet(memoryAccess, + spv::MemoryAccessMask::MakePointerAvailableKHR | spv::MemoryAccessMask::MakePointerVisibleKHR)) { memoryAccessOperands.push_back(spv::IdImmediate(true, builder.makeUintConstant(TranslateMemoryScope(coherentFlags)))); } @@ -3859,7 +3867,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt // l-value. complexLvalues.push_back(builder.getAccessChain()); temporaryLvalues.push_back(builder.createVariable( - spv::NoPrecision, spv::StorageClassFunction, + spv::NoPrecision, spv::StorageClass::Function, builder.accessChainGetInferredType(), "swizzleTemp")); operands.push_back(temporaryLvalues.back()); } else { @@ -3936,7 +3944,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt if (node->getOp() == glslang::EOpCooperativeMatrixLoadTensorNV) { std::vector idImmOps; - builder.addCapability(spv::CapabilityCooperativeMatrixTensorAddressingNV); + builder.addCapability(spv::Capability::CooperativeMatrixTensorAddressingNV); builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); spv::Id object = builder.createLoad(operands[0], spv::NoPrecision); @@ -3953,11 +3961,11 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt for (uint32_t i = 3; i < operands.size(); ++i) { if (builder.isTensorView(operands[i])) { - idImmOps[tensorOpIdx].word |= spv::TensorAddressingOperandsTensorViewMask; + addMask(idImmOps[tensorOpIdx].word, spv::TensorAddressingOperandsMask::TensorView); } else { // must be the decode func - idImmOps[tensorOpIdx].word |= spv::TensorAddressingOperandsDecodeFuncMask; - builder.addCapability(spv::CapabilityCooperativeMatrixBlockLoadsNV); + addMask(idImmOps[tensorOpIdx].word, spv::TensorAddressingOperandsMask::DecodeFunc); + builder.addCapability(spv::Capability::CooperativeMatrixBlockLoadsNV); } idImmOps.push_back(spv::IdImmediate(true, operands[i])); // tensorView or decodeFunc } @@ -3966,7 +3974,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0])); assert(builder.isCooperativeMatrixType(typeId)); // do the op - spv::Id result = builder.createOp(spv::OpCooperativeMatrixLoadTensorNV, typeId, idImmOps); + spv::Id result = builder.createOp(spv::Op::OpCooperativeMatrixLoadTensorNV, typeId, idImmOps); // store the result to the pointer (out param 'm') builder.createStore(result, operands[0]); result = 0; @@ -3977,11 +3985,11 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf if (node->getOp() == glslang::EOpCooperativeMatrixLoad) { idImmOps.push_back(spv::IdImmediate(true, operands[3])); // matrixLayout - auto layout = builder.getConstantScalar(operands[3]); - if (layout == spv::CooperativeMatrixLayoutRowBlockedInterleavedARM || - layout == spv::CooperativeMatrixLayoutColumnBlockedInterleavedARM) { + auto layout = (spv::CooperativeMatrixLayout)builder.getConstantScalar(operands[3]); + if (layout == spv::CooperativeMatrixLayout::RowBlockedInterleavedARM || + layout == spv::CooperativeMatrixLayout::ColumnBlockedInterleavedARM) { builder.addExtension(spv::E_SPV_ARM_cooperative_matrix_layouts); - builder.addCapability(spv::CapabilityCooperativeMatrixLayoutsARM); + builder.addCapability(spv::Capability::CooperativeMatrixLayoutsARM); } idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride } else { @@ -3994,8 +4002,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt assert(builder.isCooperativeMatrixType(typeId)); // do the op spv::Id result = node->getOp() == glslang::EOpCooperativeMatrixLoad - ? builder.createOp(spv::OpCooperativeMatrixLoadKHR, typeId, idImmOps) - : builder.createOp(spv::OpCooperativeMatrixLoadNV, typeId, idImmOps); + ? builder.createOp(spv::Op::OpCooperativeMatrixLoadKHR, typeId, idImmOps) + : builder.createOp(spv::Op::OpCooperativeMatrixLoadNV, typeId, idImmOps); // store the result to the pointer (out param 'm') builder.createStore(result, operands[0]); result = 0; @@ -4005,7 +4013,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf idImmOps.push_back(spv::IdImmediate(true, operands[0])); // object - builder.addCapability(spv::CapabilityCooperativeMatrixTensorAddressingNV); + builder.addCapability(spv::Capability::CooperativeMatrixTensorAddressingNV); builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); idImmOps.push_back(spv::IdImmediate(true, operands[2])); // tensorLayout @@ -4013,13 +4021,13 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end()); // memoryaccess if (operands.size() > 3) { - idImmOps.push_back(spv::IdImmediate(false, spv::TensorAddressingOperandsTensorViewMask)); + idImmOps.push_back(spv::IdImmediate(false, spv::TensorAddressingOperandsMask::TensorView)); idImmOps.push_back(spv::IdImmediate(true, operands[3])); // tensorView } else { idImmOps.push_back(spv::IdImmediate(false, 0)); } - builder.createNoResultOp(spv::OpCooperativeMatrixStoreTensorNV, idImmOps); + builder.createNoResultOp(spv::Op::OpCooperativeMatrixStoreTensorNV, idImmOps); result = 0; } else if (node->getOp() == glslang::EOpCooperativeMatrixStore || node->getOp() == glslang::EOpCooperativeMatrixStoreNV) { @@ -4029,11 +4037,11 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.push_back(spv::IdImmediate(true, operands[0])); // object if (node->getOp() == glslang::EOpCooperativeMatrixStore) { idImmOps.push_back(spv::IdImmediate(true, operands[3])); // matrixLayout - auto layout = builder.getConstantScalar(operands[3]); - if (layout == spv::CooperativeMatrixLayoutRowBlockedInterleavedARM || - layout == spv::CooperativeMatrixLayoutColumnBlockedInterleavedARM) { + auto layout = (spv::CooperativeMatrixLayout)builder.getConstantScalar(operands[3]); + if (layout == spv::CooperativeMatrixLayout::RowBlockedInterleavedARM || + layout == spv::CooperativeMatrixLayout::ColumnBlockedInterleavedARM) { builder.addExtension(spv::E_SPV_ARM_cooperative_matrix_layouts); - builder.addCapability(spv::CapabilityCooperativeMatrixLayoutsARM); + builder.addCapability(spv::Capability::CooperativeMatrixLayoutsARM); } idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride } else { @@ -4043,9 +4051,9 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end()); if (node->getOp() == glslang::EOpCooperativeMatrixStore) - builder.createNoResultOp(spv::OpCooperativeMatrixStoreKHR, idImmOps); + builder.createNoResultOp(spv::Op::OpCooperativeMatrixStoreKHR, idImmOps); else - builder.createNoResultOp(spv::OpCooperativeMatrixStoreNV, idImmOps); + builder.createNoResultOp(spv::Op::OpCooperativeMatrixStoreNV, idImmOps); result = 0; } else if (node->getOp() == glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT) { std::vector idImmOps; @@ -4057,7 +4065,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt builder.makeUintConstant(3), 0); // do the op - spv::Op spvOp = spv::OpRayQueryGetIntersectionTriangleVertexPositionsKHR; + spv::Op spvOp = spv::Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR; spv::Id result = builder.createOp(spvOp, typeId, idImmOps); // store the result to the pointer (out param 'm') @@ -4073,7 +4081,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt builder.makeUintConstant(2), 0); // do the op - spv::Op spvOp = spv::OpRayQueryGetIntersectionLSSPositionsNV; + spv::Op spvOp = spv::Op::OpRayQueryGetIntersectionLSSPositionsNV; spv::Id result = builder.createOp(spvOp, typeId, idImmOps); // store the result to the pointer (out param 'm') @@ -4089,7 +4097,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt builder.makeUintConstant(2), 0); // do the op - spv::Op spvOp = spv::OpRayQueryGetIntersectionLSSRadiiNV; + spv::Op spvOp = spv::Op::OpRayQueryGetIntersectionLSSRadiiNV; spv::Id result = builder.createOp(spvOp, typeId, idImmOps); // store the result to the pointer (out param 'm') @@ -4100,7 +4108,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.push_back(spv::IdImmediate(true, operands[0])); // hitObject - spv::Op spvOp = spv::OpHitObjectGetLSSPositionsNV; + spv::Op spvOp = spv::Op::OpHitObjectGetLSSPositionsNV; spv::Id typeId = builder.makeArrayType(builder.makeVectorType(builder.makeFloatType(32), 3), builder.makeUintConstant(2), 0); @@ -4113,7 +4121,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.push_back(spv::IdImmediate(true, operands[0])); // hitObject - spv::Op spvOp = spv::OpHitObjectGetLSSRadiiNV; + spv::Op spvOp = spv::Op::OpHitObjectGetLSSRadiiNV; spv::Id typeId = builder.makeArrayType(builder.makeFloatType(32), builder.makeUintConstant(2), 0); @@ -4123,36 +4131,36 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt result = 0; } else if (node->getOp() == glslang::EOpCooperativeMatrixMulAdd) { - uint32_t matrixOperands = 0; + auto matrixOperands = spv::CooperativeMatrixOperandsMask::MaskNone; // If the optional operand is present, initialize matrixOperands to that value. if (glslangOperands.size() == 4 && glslangOperands[3]->getAsConstantUnion()) { - matrixOperands = glslangOperands[3]->getAsConstantUnion()->getConstArray()[0].getIConst(); + matrixOperands = (spv::CooperativeMatrixOperandsMask)glslangOperands[3]->getAsConstantUnion()->getConstArray()[0].getIConst(); } // Determine Cooperative Matrix Operands bits from the signedness of the types. if (isTypeSignedInt(glslangOperands[0]->getAsTyped()->getBasicType())) - matrixOperands |= spv::CooperativeMatrixOperandsMatrixASignedComponentsKHRMask; + addMask(matrixOperands, spv::CooperativeMatrixOperandsMask::MatrixASignedComponentsKHR); if (isTypeSignedInt(glslangOperands[1]->getAsTyped()->getBasicType())) - matrixOperands |= spv::CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask; + addMask(matrixOperands, spv::CooperativeMatrixOperandsMask::MatrixBSignedComponentsKHR); if (isTypeSignedInt(glslangOperands[2]->getAsTyped()->getBasicType())) - matrixOperands |= spv::CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask; + addMask(matrixOperands, spv::CooperativeMatrixOperandsMask::MatrixCSignedComponentsKHR); if (isTypeSignedInt(node->getBasicType())) - matrixOperands |= spv::CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask; + addMask(matrixOperands, spv::CooperativeMatrixOperandsMask::MatrixResultSignedComponentsKHR); std::vector idImmOps; idImmOps.push_back(spv::IdImmediate(true, operands[0])); idImmOps.push_back(spv::IdImmediate(true, operands[1])); idImmOps.push_back(spv::IdImmediate(true, operands[2])); - if (matrixOperands != 0) + if (matrixOperands != spv::CooperativeMatrixOperandsMask::MaskNone) idImmOps.push_back(spv::IdImmediate(false, matrixOperands)); - result = builder.createOp(spv::OpCooperativeMatrixMulAddKHR, resultType(), idImmOps); + result = builder.createOp(spv::Op::OpCooperativeMatrixMulAddKHR, resultType(), idImmOps); } else if (node->getOp() == glslang::EOpCooperativeMatrixReduceNV) { - builder.addCapability(spv::CapabilityCooperativeMatrixReductionsNV); + builder.addCapability(spv::Capability::CooperativeMatrixReductionsNV); builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); - spv::Op opcode = spv::OpCooperativeMatrixReduceNV; + spv::Op opcode = spv::Op::OpCooperativeMatrixReduceNV; unsigned mask = glslangOperands[2]->getAsConstantUnion()->getConstArray()[0].getUConst(); spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0])); @@ -4163,7 +4171,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt builder.createStore(result, operands[0]); result = 0; } else if (node->getOp() == glslang::EOpCooperativeMatrixPerElementOpNV) { - builder.addCapability(spv::CapabilityCooperativeMatrixPerElementOperationsNV); + builder.addCapability(spv::Capability::CooperativeMatrixPerElementOperationsNV); builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0])); @@ -4175,28 +4183,28 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt result = 0; } else if (node->getOp() == glslang::EOpCooperativeMatrixTransposeNV) { - builder.addCapability(spv::CapabilityCooperativeMatrixConversionsNV); + builder.addCapability(spv::Capability::CooperativeMatrixConversionsNV); builder.addExtension(spv::E_SPV_NV_cooperative_matrix2); spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0])); assert(builder.isCooperativeMatrixType(typeId)); - result = builder.createUnaryOp(spv::OpCooperativeMatrixTransposeNV, typeId, operands[1]); + result = builder.createUnaryOp(spv::Op::OpCooperativeMatrixTransposeNV, typeId, operands[1]); // store the result to the pointer builder.createStore(result, operands[0]); result = 0; } else if (node->getOp() == glslang::EOpCooperativeVectorMatMulNV || node->getOp() == glslang::EOpCooperativeVectorMatMulAddNV) { - uint32_t matrixOperands = 0; + auto matrixOperands = spv::CooperativeMatrixOperandsMask::MaskNone; bool isMulAdd = node->getOp() == glslang::EOpCooperativeVectorMatMulAddNV; // Determine Cooperative Matrix Operands bits from the signedness of the types. if (isTypeSignedInt(glslangOperands[1]->getAsTyped()->getBasicType())) - matrixOperands |= spv::CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask; + addMask(matrixOperands, spv::CooperativeMatrixOperandsMask::MatrixBSignedComponentsKHR); if (isTypeSignedInt(glslangOperands[0]->getAsTyped()->getBasicType())) - matrixOperands |= spv::CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask; + addMask(matrixOperands, spv::CooperativeMatrixOperandsMask::MatrixResultSignedComponentsKHR); uint32_t opIdx = 1; std::vector idImmOps; @@ -4215,14 +4223,14 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // MemoryLayout idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // Transpose idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // MatrixStride - if (matrixOperands != 0) + if (matrixOperands != spv::CooperativeMatrixOperandsMask::MaskNone) idImmOps.push_back(spv::IdImmediate(false, matrixOperands)); // Cooperative Matrix Operands // get the pointee type spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0])); assert(builder.isCooperativeVectorType(typeId)); // do the op - spv::Id result = builder.createOp(isMulAdd ? spv::OpCooperativeVectorMatrixMulAddNV : spv::OpCooperativeVectorMatrixMulNV, typeId, idImmOps); + spv::Id result = builder.createOp(isMulAdd ? spv::Op::OpCooperativeVectorMatrixMulAddNV : spv::Op::OpCooperativeVectorMatrixMulNV, typeId, idImmOps); // store the result to the pointer (out param 'res') builder.createStore(result, operands[0]); result = 0; @@ -4236,7 +4244,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0])); assert(builder.isCooperativeVectorType(typeId)); // do the op - spv::Id result = builder.createOp(spv::OpCooperativeVectorLoadNV, typeId, idImmOps); + spv::Id result = builder.createOp(spv::Op::OpCooperativeVectorLoadNV, typeId, idImmOps); // store the result to the pointer (out param 'v') builder.createStore(result, operands[0]); result = 0; @@ -4247,10 +4255,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.push_back(spv::IdImmediate(true, operands[2])); // offset idImmOps.push_back(spv::IdImmediate(true, operands[0])); // object idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end()); - builder.createNoResultOp(spv::OpCooperativeVectorStoreNV, idImmOps); + builder.createNoResultOp(spv::Op::OpCooperativeVectorStoreNV, idImmOps); result = 0; } else if (node->getOp() == glslang::EOpCooperativeVectorOuterProductAccumulateNV) { - builder.addCapability(spv::CapabilityCooperativeVectorTrainingNV); + builder.addCapability(spv::Capability::CooperativeVectorTrainingNV); builder.addExtension(spv::E_SPV_NV_cooperative_vector); std::vector idImmOps; @@ -4262,10 +4270,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.push_back(spv::IdImmediate(true, operands[5])); // MemoryLayout idImmOps.push_back(spv::IdImmediate(true, operands[6])); // MatrixInterpretation idImmOps.push_back(spv::IdImmediate(true, operands[4])); // Stride - builder.createNoResultOp(spv::OpCooperativeVectorOuterProductAccumulateNV, idImmOps); + builder.createNoResultOp(spv::Op::OpCooperativeVectorOuterProductAccumulateNV, idImmOps); result = 0; } else if (node->getOp() == glslang::EOpCooperativeVectorReduceSumAccumulateNV) { - builder.addCapability(spv::CapabilityCooperativeVectorTrainingNV); + builder.addCapability(spv::Capability::CooperativeVectorTrainingNV); builder.addExtension(spv::E_SPV_NV_cooperative_vector); std::vector idImmOps; @@ -4273,7 +4281,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt idImmOps.push_back(spv::IdImmediate(true, operands[1])); // Buf idImmOps.push_back(spv::IdImmediate(true, operands[2])); // Offset idImmOps.push_back(spv::IdImmediate(true, operands[0])); // A - builder.createNoResultOp(spv::OpCooperativeVectorReduceSumAccumulateNV, idImmOps); + builder.createNoResultOp(spv::Op::OpCooperativeVectorReduceSumAccumulateNV, idImmOps); result = 0; } else if (atomic) { // Handle all atomics @@ -4453,14 +4461,14 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang // Since isOpSelectable only lets us get here for SPIR-V >= 1.4, we can use OpCopyObject // to get matching types. if (builder.getTypeId(trueValue) != resultType) { - trueValue = builder.createUnaryOp(spv::OpCopyLogical, resultType, trueValue); + trueValue = builder.createUnaryOp(spv::Op::OpCopyLogical, resultType, trueValue); } if (builder.getTypeId(falseValue) != resultType) { - falseValue = builder.createUnaryOp(spv::OpCopyLogical, resultType, falseValue); + falseValue = builder.createUnaryOp(spv::Op::OpCopyLogical, resultType, falseValue); } // OpSelect - result = builder.createTriOp(spv::OpSelect, resultType, condition, trueValue, falseValue); + result = builder.createTriOp(spv::Op::OpSelect, resultType, condition, trueValue, falseValue); builder.clearAccessChain(); builder.setAccessChainRValue(result); @@ -4468,7 +4476,7 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang // We need control flow to select the result. // TODO: Once SPIR-V OpSelect allows arbitrary types, eliminate this path. result = builder.createVariable(TranslatePrecisionDecoration(node->getType()), - spv::StorageClassFunction, resultType); + spv::StorageClass::Function, resultType); // Selection control: const spv::SelectionControlMask control = TranslateSelectionControl(*node); @@ -4499,7 +4507,7 @@ bool TGlslangToSpvTraverser::visitSelection(glslang::TVisit /* visit */, glslang const auto executeOneSide = [&]() { // Always emit control flow. if (node->getBasicType() != glslang::EbtVoid) { - result = builder.createVariable(TranslatePrecisionDecoration(node->getType()), spv::StorageClassFunction, + result = builder.createVariable(TranslatePrecisionDecoration(node->getType()), spv::StorageClass::Function, convertGlslangToSpvType(node->getType())); } @@ -4701,18 +4709,18 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T case glslang::EOpKill: if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { if (glslangIntermediate->getSource() == glslang::EShSourceHlsl) { - builder.addCapability(spv::CapabilityDemoteToHelperInvocation); - builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT); + builder.addCapability(spv::Capability::DemoteToHelperInvocation); + builder.createNoResultOp(spv::Op::OpDemoteToHelperInvocationEXT); } else { - builder.makeStatementTerminator(spv::OpTerminateInvocation, "post-terminate-invocation"); + builder.makeStatementTerminator(spv::Op::OpTerminateInvocation, "post-terminate-invocation"); } } else { - builder.makeStatementTerminator(spv::OpKill, "post-discard"); + builder.makeStatementTerminator(spv::Op::OpKill, "post-discard"); } break; case glslang::EOpTerminateInvocation: builder.addExtension(spv::E_SPV_KHR_terminate_invocation); - builder.makeStatementTerminator(spv::OpTerminateInvocation, "post-terminate-invocation"); + builder.makeStatementTerminator(spv::Op::OpTerminateInvocation, "post-terminate-invocation"); break; case glslang::EOpBreak: if (breakForLoop.top()) @@ -4731,7 +4739,7 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T TranslatePrecisionDecoration(glslangReturnType) != currentFunction->getReturnPrecision()) { builder.clearAccessChain(); spv::Id copyId = builder.createVariable(currentFunction->getReturnPrecision(), - spv::StorageClassFunction, currentFunction->getReturnType()); + spv::StorageClass::Function, currentFunction->getReturnType()); builder.setAccessChainLValue(copyId); multiTypeStore(glslangReturnType, returnId); returnId = builder.createLoad(copyId, currentFunction->getReturnPrecision()); @@ -4744,15 +4752,15 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T break; case glslang::EOpDemote: - builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT); + builder.createNoResultOp(spv::Op::OpDemoteToHelperInvocationEXT); builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation); - builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT); + builder.addCapability(spv::Capability::DemoteToHelperInvocationEXT); break; case glslang::EOpTerminateRayKHR: - builder.makeStatementTerminator(spv::OpTerminateRayKHR, "post-terminateRayKHR"); + builder.makeStatementTerminator(spv::Op::OpTerminateRayKHR, "post-terminateRayKHR"); break; case glslang::EOpIgnoreIntersectionKHR: - builder.makeStatementTerminator(spv::OpIgnoreIntersectionKHR, "post-ignoreIntersectionKHR"); + builder.makeStatementTerminator(spv::Op::OpIgnoreIntersectionKHR, "post-ignoreIntersectionKHR"); break; default: @@ -4783,56 +4791,56 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* node->getType().contains16BitInt(); if (contains16BitType) { switch (storageClass) { - case spv::StorageClassInput: - case spv::StorageClassOutput: + case spv::StorageClass::Input: + case spv::StorageClass::Output: builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3); - builder.addCapability(spv::CapabilityStorageInputOutput16); + builder.addCapability(spv::Capability::StorageInputOutput16); break; - case spv::StorageClassUniform: + case spv::StorageClass::Uniform: builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3); if (node->getType().getQualifier().storage == glslang::EvqBuffer) - builder.addCapability(spv::CapabilityStorageUniformBufferBlock16); + builder.addCapability(spv::Capability::StorageUniformBufferBlock16); else - builder.addCapability(spv::CapabilityStorageUniform16); + builder.addCapability(spv::Capability::StorageUniform16); break; - case spv::StorageClassPushConstant: + case spv::StorageClass::PushConstant: builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3); - builder.addCapability(spv::CapabilityStoragePushConstant16); + builder.addCapability(spv::Capability::StoragePushConstant16); break; - case spv::StorageClassStorageBuffer: - case spv::StorageClassPhysicalStorageBufferEXT: + case spv::StorageClass::StorageBuffer: + case spv::StorageClass::PhysicalStorageBufferEXT: builder.addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3); - builder.addCapability(spv::CapabilityStorageUniformBufferBlock16); + builder.addCapability(spv::Capability::StorageUniformBufferBlock16); break; default: - if (storageClass == spv::StorageClassWorkgroup && + if (storageClass == spv::StorageClass::Workgroup && node->getType().getBasicType() == glslang::EbtBlock) { - builder.addCapability(spv::CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR); + builder.addCapability(spv::Capability::WorkgroupMemoryExplicitLayout16BitAccessKHR); break; } if (node->getType().contains16BitFloat()) - builder.addCapability(spv::CapabilityFloat16); + builder.addCapability(spv::Capability::Float16); if (node->getType().contains16BitInt()) - builder.addCapability(spv::CapabilityInt16); + builder.addCapability(spv::Capability::Int16); break; } } if (node->getType().contains8BitInt()) { - if (storageClass == spv::StorageClassPushConstant) { + if (storageClass == spv::StorageClass::PushConstant) { builder.addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5); - builder.addCapability(spv::CapabilityStoragePushConstant8); - } else if (storageClass == spv::StorageClassUniform) { + builder.addCapability(spv::Capability::StoragePushConstant8); + } else if (storageClass == spv::StorageClass::Uniform) { builder.addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5); - builder.addCapability(spv::CapabilityUniformAndStorageBuffer8BitAccess); - } else if (storageClass == spv::StorageClassStorageBuffer) { + builder.addCapability(spv::Capability::UniformAndStorageBuffer8BitAccess); + } else if (storageClass == spv::StorageClass::StorageBuffer) { builder.addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5); - builder.addCapability(spv::CapabilityStorageBuffer8BitAccess); - } else if (storageClass == spv::StorageClassWorkgroup && + builder.addCapability(spv::Capability::StorageBuffer8BitAccess); + } else if (storageClass == spv::StorageClass::Workgroup && node->getType().getBasicType() == glslang::EbtBlock) { - builder.addCapability(spv::CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR); + builder.addCapability(spv::Capability::WorkgroupMemoryExplicitLayout8BitAccessKHR); } else { - builder.addCapability(spv::CapabilityInt8); + builder.addCapability(spv::Capability::Int8); } } @@ -4871,15 +4879,15 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler) case glslang::EbtFloat: return builder.makeFloatType(32); case glslang::EbtFloat16: builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch); - builder.addCapability(spv::CapabilityFloat16ImageAMD); + builder.addCapability(spv::Capability::Float16ImageAMD); return builder.makeFloatType(16); case glslang::EbtInt64: builder.addExtension(spv::E_SPV_EXT_shader_image_int64); - builder.addCapability(spv::CapabilityInt64ImageEXT); + builder.addCapability(spv::Capability::Int64ImageEXT); return builder.makeIntType(64); case glslang::EbtUint64: builder.addExtension(spv::E_SPV_EXT_shader_image_int64); - builder.addCapability(spv::CapabilityInt64ImageEXT); + builder.addCapability(spv::Capability::Int64ImageEXT); return builder.makeUintType(64); default: assert(0); @@ -4929,9 +4937,9 @@ spv::LinkageType TGlslangToSpvTraverser::convertGlslangLinkageToSpv(glslang::TLi { switch (linkType) { case glslang::ELinkExport: - return spv::LinkageTypeExport; + return spv::LinkageType::Export; default: - return spv::LinkageTypeMax; + return spv::LinkageType::Max; } } @@ -4972,6 +4980,9 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty case glslang::EbtFloat16: spvType = builder.makeFloatType(16); break; + case glslang::EbtBFloat16: + spvType = builder.makeBFloat16Type(); + break; case glslang::EbtInt8: spvType = builder.makeIntType(8); break; @@ -4991,7 +5002,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty spvType = builder.makeUintType(64); break; case glslang::EbtAtomicUint: - builder.addCapability(spv::CapabilityAtomicStorage); + builder.addCapability(spv::Capability::AtomicStorage); spvType = builder.makeUintType(32); break; case glslang::EbtAccStruct: @@ -5009,7 +5020,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty auto& extensions = glslangIntermediate->getRequestedExtensions(); if (extensions.find("GL_EXT_ray_query") != extensions.end()) { builder.addExtension(spv::E_SPV_KHR_ray_query); - builder.addCapability(spv::CapabilityRayQueryKHR); + builder.addCapability(spv::Capability::RayQueryKHR); } } break; @@ -5021,7 +5032,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty auto& extensions = glslangIntermediate->getRequestedExtensions(); if (extensions.find("GL_EXT_ray_query") != extensions.end()) { builder.addExtension(spv::E_SPV_KHR_ray_query); - builder.addCapability(spv::CapabilityRayQueryKHR); + builder.addCapability(spv::Capability::RayQueryKHR); } spvType = builder.makeRayQueryType(); } @@ -5031,13 +5042,13 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty // Make the forward pointer, then recurse to convert the structure type, then // patch up the forward pointer with a real pointer type. if (forwardPointers.find(type.getReferentType()) == forwardPointers.end()) { - spv::Id forwardId = builder.makeForwardPointer(spv::StorageClassPhysicalStorageBufferEXT); + spv::Id forwardId = builder.makeForwardPointer(spv::StorageClass::PhysicalStorageBufferEXT); forwardPointers[type.getReferentType()] = forwardId; } spvType = forwardPointers[type.getReferentType()]; if (!forwardReferenceOnly) { spv::Id referentType = convertGlslangToSpvType(*type.getReferentType()); - builder.makePointerFromForwardPointer(spv::StorageClassPhysicalStorageBufferEXT, + builder.makePointerFromForwardPointer(spv::StorageClass::PhysicalStorageBufferEXT, forwardPointers[type.getReferentType()], referentType); } @@ -5087,7 +5098,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty case glslang::EbtHitObjectNV: { builder.addExtension(spv::E_SPV_NV_shader_invocation_reorder); - builder.addCapability(spv::CapabilityShaderInvocationReorderNV); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); spvType = builder.makeHitObjectNVType(); } break; @@ -5158,19 +5169,19 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty } case glslang::EbtTensorLayoutNV: { - builder.addCapability(spv::CapabilityTensorAddressingNV); + builder.addCapability(spv::Capability::TensorAddressingNV); builder.addExtension(spv::E_SPV_NV_tensor_addressing); std::vector operands; for (uint32_t i = 0; i < 2; ++i) { operands.push_back({true, makeArraySizeId(*type.getTypeParameters()->arraySizes, i, true)}); } - spvType = builder.makeGenericType(spv::OpTypeTensorLayoutNV, operands); + spvType = builder.makeGenericType(spv::Op::OpTypeTensorLayoutNV, operands); break; } case glslang::EbtTensorViewNV: { - builder.addCapability(spv::CapabilityTensorAddressingNV); + builder.addCapability(spv::Capability::TensorAddressingNV); builder.addExtension(spv::E_SPV_NV_tensor_addressing); uint32_t dim = type.getTypeParameters()->arraySizes->getDimSize(0); @@ -5179,7 +5190,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty for (uint32_t i = 0; i < dim + 2; ++i) { operands.push_back({true, makeArraySizeId(*type.getTypeParameters()->arraySizes, i, true, i==1)}); } - spvType = builder.makeGenericType(spv::OpTypeTensorViewNV, operands); + spvType = builder.makeGenericType(spv::Op::OpTypeTensorViewNV, operands); break; } default: @@ -5196,14 +5207,14 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty } if (type.isCoopMatNV()) { - builder.addCapability(spv::CapabilityCooperativeMatrixNV); + builder.addCapability(spv::Capability::CooperativeMatrixNV); builder.addExtension(spv::E_SPV_NV_cooperative_matrix); if (type.getBasicType() == glslang::EbtFloat16) - builder.addCapability(spv::CapabilityFloat16); + builder.addCapability(spv::Capability::Float16); if (type.getBasicType() == glslang::EbtUint8 || type.getBasicType() == glslang::EbtInt8) { - builder.addCapability(spv::CapabilityInt8); + builder.addCapability(spv::Capability::Int8); } spv::Id scope = makeArraySizeId(*type.getTypeParameters()->arraySizes, 1); @@ -5214,13 +5225,18 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty } if (type.isCoopMatKHR()) { - builder.addCapability(spv::CapabilityCooperativeMatrixKHR); + builder.addCapability(spv::Capability::CooperativeMatrixKHR); builder.addExtension(spv::E_SPV_KHR_cooperative_matrix); + if (type.getBasicType() == glslang::EbtBFloat16) { + builder.addExtension(spv::E_SPV_KHR_bfloat16); + builder.addCapability(spv::Capability::BFloat16CooperativeMatrixKHR); + } + if (type.getBasicType() == glslang::EbtFloat16) - builder.addCapability(spv::CapabilityFloat16); + builder.addCapability(spv::Capability::Float16); if (type.getBasicType() == glslang::EbtUint8 || type.getBasicType() == glslang::EbtInt8) { - builder.addCapability(spv::CapabilityInt8); + builder.addCapability(spv::Capability::Int8); } spv::Id scope = makeArraySizeId(*type.getTypeParameters()->arraySizes, 0); @@ -5232,13 +5248,13 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty } if (type.isCoopVecNV()) { - builder.addCapability(spv::CapabilityCooperativeVectorNV); + builder.addCapability(spv::Capability::CooperativeVectorNV); builder.addExtension(spv::E_SPV_NV_cooperative_vector); if (type.getBasicType() == glslang::EbtFloat16) - builder.addCapability(spv::CapabilityFloat16); + builder.addCapability(spv::Capability::Float16); if (type.getBasicType() == glslang::EbtUint8 || type.getBasicType() == glslang::EbtInt8) { - builder.addCapability(spv::CapabilityInt8); + builder.addCapability(spv::Capability::Int8); } spv::Id components = makeArraySizeId(*type.getTypeParameters()->arraySizes, 0); @@ -5268,7 +5284,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty 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::DecorationArrayStride, stride); + builder.addDecoration(spvType, spv::Decoration::ArrayStride, stride); stride *= type.getArraySizes()->getDimSize(dim); } } else { @@ -5286,12 +5302,12 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty else { if (!lastBufferBlockMember) { builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); - builder.addCapability(spv::CapabilityRuntimeDescriptorArrayEXT); + builder.addCapability(spv::Capability::RuntimeDescriptorArrayEXT); } spvType = builder.makeRuntimeArray(spvType); } if (stride > 0) - builder.addDecoration(spvType, spv::DecorationArrayStride, stride); + builder.addDecoration(spvType, spv::Decoration::ArrayStride, stride); } return spvType; @@ -5536,60 +5552,60 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, // Ignore member locations if the container is an array, as that's // ill-specified and decisions have been made to not allow this. if (!memberLocationInvalid && memberQualifier.hasLocation()) - builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation); + builder.addMemberDecoration(spvType, member, spv::Decoration::Location, memberQualifier.layoutLocation); // component, XFB, others if (glslangMember.getQualifier().hasComponent()) - builder.addMemberDecoration(spvType, member, spv::DecorationComponent, + builder.addMemberDecoration(spvType, member, spv::Decoration::Component, glslangMember.getQualifier().layoutComponent); if (glslangMember.getQualifier().hasXfbOffset()) - builder.addMemberDecoration(spvType, member, spv::DecorationOffset, + builder.addMemberDecoration(spvType, member, spv::Decoration::Offset, glslangMember.getQualifier().layoutXfbOffset); else if (explicitLayout != glslang::ElpNone) { // figure out what to do with offset, which is accumulating int nextOffset; updateMemberOffset(type, glslangMember, offset, nextOffset, explicitLayout, memberQualifier.layoutMatrix); if (offset >= 0) - builder.addMemberDecoration(spvType, member, spv::DecorationOffset, offset); + builder.addMemberDecoration(spvType, member, spv::Decoration::Offset, offset); offset = nextOffset; } if (glslangMember.isMatrix() && explicitLayout != glslang::ElpNone) - builder.addMemberDecoration(spvType, member, spv::DecorationMatrixStride, + builder.addMemberDecoration(spvType, member, spv::Decoration::MatrixStride, getMatrixStride(glslangMember, explicitLayout, memberQualifier.layoutMatrix)); // built-in variable decorations spv::BuiltIn builtIn = TranslateBuiltInDecoration(glslangMember.getQualifier().builtIn, true); - if (builtIn != spv::BuiltInMax) - builder.addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn); + if (builtIn != spv::BuiltIn::Max) + builder.addMemberDecoration(spvType, member, spv::Decoration::BuiltIn, (int)builtIn); // nonuniform builder.addMemberDecoration(spvType, member, TranslateNonUniformDecoration(glslangMember.getQualifier())); if (glslangIntermediate->getHlslFunctionality1() && memberQualifier.semanticName != nullptr) { builder.addExtension("SPV_GOOGLE_hlsl_functionality1"); - builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE, + builder.addMemberDecoration(spvType, member, spv::Decoration::HlslSemanticGOOGLE, memberQualifier.semanticName); } - if (builtIn == spv::BuiltInLayer) { + if (builtIn == spv::BuiltIn::Layer) { // SPV_NV_viewport_array2 extension if (glslangMember.getQualifier().layoutViewportRelative){ - builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationViewportRelativeNV); - builder.addCapability(spv::CapabilityShaderViewportMaskNV); + builder.addMemberDecoration(spvType, member, spv::Decoration::ViewportRelativeNV); + builder.addCapability(spv::Capability::ShaderViewportMaskNV); builder.addExtension(spv::E_SPV_NV_viewport_array2); } if (glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset != -2048){ builder.addMemberDecoration(spvType, member, - (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, + spv::Decoration::SecondaryViewportRelativeNV, glslangMember.getQualifier().layoutSecondaryViewportRelativeOffset); - builder.addCapability(spv::CapabilityShaderStereoViewNV); + builder.addCapability(spv::Capability::ShaderStereoViewNV); builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); } } if (glslangMember.getQualifier().layoutPassthrough) { - builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationPassthroughNV); - builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV); + builder.addMemberDecoration(spvType, member, spv::Decoration::PassthroughNV); + builder.addCapability(spv::Capability::GeometryShaderPassthroughNV); builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough); } @@ -5605,14 +5621,14 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, if (basicType == glslang::EbtBlock) { 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::OpTypeRuntimeArray; + const auto hasRuntimeArray = !spvMembers.empty() && builder.getOpCode(spvMembers.back()) == spv::Op::OpTypeRuntimeArray; if (hasRuntimeArray) { builder.addDecoration(spvType, TranslateBlockDecoration(typeStorageQualifier, glslangIntermediate->usingStorageBuffer())); } } if (qualifier.hasHitObjectShaderRecordNV()) - builder.addDecoration(spvType, spv::DecorationHitObjectShaderRecordBufferNV); + builder.addDecoration(spvType, spv::Decoration::HitObjectShaderRecordBufferNV); } // Turn the expression forming the array size into an id. @@ -5656,14 +5672,14 @@ spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type) spv::Builder::AccessChain::CoherentFlags coherentFlags = builder.getAccessChain().coherentFlags; coherentFlags |= TranslateCoherent(type); - spv::MemoryAccessMask accessMask = spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask); + spv::MemoryAccessMask accessMask = spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMask::MakePointerAvailableKHR); // If the value being loaded is HelperInvocation, SPIR-V 1.6 is being generated (so that // SPV_EXT_demote_to_helper_invocation is in core) and the memory model is in use, add // the Volatile MemoryAccess semantic. if (type.getQualifier().builtIn == glslang::EbvHelperInvocation && glslangIntermediate->usingVulkanMemoryModel() && glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { - accessMask = spv::MemoryAccessMask(accessMask | spv::MemoryAccessVolatileMask); + accessMask = spv::MemoryAccessMask(accessMask | spv::MemoryAccessMask::Volatile); } unsigned int alignment = builder.getAccessChain().alignment; @@ -5702,9 +5718,9 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I // keep these outside arguments, for determinant order-of-evaluation spv::Id one = builder.makeUintConstant(1); spv::Id zero = builder.makeUintConstant(0); - rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero); + rvalue = builder.createTriOp(spv::Op::OpSelect, nominalTypeId, rvalue, one, zero); } else if (builder.getTypeId(rvalue) != boolType) - rvalue = builder.createBinOp(spv::OpINotEqual, boolType, rvalue, builder.makeUintConstant(0)); + rvalue = builder.createBinOp(spv::Op::OpINotEqual, boolType, rvalue, builder.makeUintConstant(0)); } else if (builder.isVectorType(nominalTypeId)) { // Conversion for bvec int vecSize = builder.getNumTypeComponents(nominalTypeId); @@ -5713,9 +5729,9 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I // keep these outside arguments, for determinant order-of-evaluation spv::Id one = makeSmearedConstant(builder.makeUintConstant(1), vecSize); spv::Id zero = makeSmearedConstant(builder.makeUintConstant(0), vecSize); - rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero); + rvalue = builder.createTriOp(spv::Op::OpSelect, nominalTypeId, rvalue, one, zero); } else if (builder.getTypeId(rvalue) != bvecType) - rvalue = builder.createBinOp(spv::OpINotEqual, bvecType, rvalue, + rvalue = builder.createBinOp(spv::Op::OpINotEqual, bvecType, rvalue, makeSmearedConstant(builder.makeUintConstant(0), vecSize)); } } @@ -5728,7 +5744,7 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I builder.accessChainStore(rvalue, TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags), spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & - ~spv::MemoryAccessMakePointerVisibleKHRMask), + ~spv::MemoryAccessMask::MakePointerVisibleKHR), TranslateMemoryScope(coherentFlags), alignment); } @@ -5769,10 +5785,10 @@ void TGlslangToSpvTraverser::multiTypeStore(const glslang::TType& type, spv::Id // However, bool in uniform space is changed to int, so // OpCopyLogical does not work for that. // TODO: It would be more robust to do a full recursive verification of the types satisfying SPIR-V rules. - bool rBool = builder.containsType(builder.getTypeId(rValue), spv::OpTypeBool, 0); - bool lBool = builder.containsType(lType, spv::OpTypeBool, 0); + bool rBool = builder.containsType(builder.getTypeId(rValue), spv::Op::OpTypeBool, 0); + bool lBool = builder.containsType(lType, spv::Op::OpTypeBool, 0); if (lBool == rBool) { - spv::Id logicalCopy = builder.createUnaryOp(spv::OpCopyLogical, lType, rValue); + spv::Id logicalCopy = builder.createUnaryOp(spv::Op::OpCopyLogical, lType, rValue); accessChainStore(type, logicalCopy); return; } @@ -6040,11 +6056,11 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF !writableParam(type.getQualifier().storage)) { // TranslateMemoryDecoration added Restrict decoration already. if (!type.getQualifier().isRestrict()) { - decorations.push_back(spv::DecorationAliased); + decorations.push_back(spv::Decoration::Aliased); } } else { - decorations.push_back(type.getQualifier().isRestrict() ? spv::DecorationRestrictPointerEXT : - spv::DecorationAliasedPointerEXT); + decorations.push_back(type.getQualifier().isRestrict() ? spv::Decoration::RestrictPointerEXT : + spv::Decoration::AliasedPointerEXT); } } }; @@ -6099,7 +6115,7 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF if (originalParam(paramType.getQualifier().storage, paramType, implicitThis && p == 0)) typeId = builder.makePointer(TranslateStorageClass(paramType), typeId); else if (writableParam(paramType.getQualifier().storage)) - typeId = builder.makePointer(spv::StorageClassFunction, typeId); + typeId = builder.makePointer(spv::StorageClass::Function, typeId); else rValueParameters.insert(parameters[p]->getAsSymbolNode()->getId()); getParamDecorations(paramDecorations[p], paramType, glslangIntermediate->usingVulkanMemoryModel()); @@ -6130,11 +6146,11 @@ void TGlslangToSpvTraverser::makeFunctions(const glslang::TIntermSequence& glslF const glslang::TType& paramType = parameters[p]->getAsTyped()->getType(); if (paramType.contains8BitInt()) - builder.addCapability(spv::CapabilityInt8); + builder.addCapability(spv::Capability::Int8); if (paramType.contains16BitInt()) - builder.addCapability(spv::CapabilityInt16); + builder.addCapability(spv::Capability::Int16); if (paramType.contains16BitFloat()) - builder.addCapability(spv::CapabilityFloat16); + builder.addCapability(spv::Capability::Float16); } } } @@ -6381,11 +6397,11 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO const auto signExtensionMask = [&]() { if (builder.getSpvVersion() >= spv::Spv_1_4) { if (sampler.type == glslang::EbtUint) - return spv::ImageOperandsZeroExtendMask; + return spv::ImageOperandsMask::ZeroExtend; else if (sampler.type == glslang::EbtInt) - return spv::ImageOperandsSignExtendMask; + return spv::ImageOperandsMask::SignExtend; } - return spv::ImageOperandsMaskNone; + return spv::ImageOperandsMask::MaskNone; }; spv::Builder::AccessChain::CoherentFlags lvalueCoherentFlags; @@ -6407,9 +6423,9 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO if (builder.isSampledImage(params.sampler) && ((cracked.query && node->getOp() != glslang::EOpTextureQueryLod) || cracked.fragMask || cracked.fetch)) { - params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler); + params.sampler = builder.createUnaryOp(spv::Op::OpImage, builder.getImageType(params.sampler), params.sampler); if (imageType.getQualifier().isNonUniform()) { - builder.addDecoration(params.sampler, spv::DecorationNonUniformEXT); + builder.addDecoration(params.sampler, spv::Decoration::NonUniformEXT); } } // Check for queries @@ -6419,19 +6435,19 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO case glslang::EOpTextureQuerySize: if (arguments.size() > 1) { params.lod = arguments[1]; - return builder.createTextureQueryCall(spv::OpImageQuerySizeLod, params, isUnsignedResult); + return builder.createTextureQueryCall(spv::Op::OpImageQuerySizeLod, params, isUnsignedResult); } else - return builder.createTextureQueryCall(spv::OpImageQuerySize, params, isUnsignedResult); + return builder.createTextureQueryCall(spv::Op::OpImageQuerySize, params, isUnsignedResult); case glslang::EOpImageQuerySamples: case glslang::EOpTextureQuerySamples: - return builder.createTextureQueryCall(spv::OpImageQuerySamples, params, isUnsignedResult); + return builder.createTextureQueryCall(spv::Op::OpImageQuerySamples, params, isUnsignedResult); case glslang::EOpTextureQueryLod: params.coords = arguments[1]; - return builder.createTextureQueryCall(spv::OpImageQueryLod, params, isUnsignedResult); + return builder.createTextureQueryCall(spv::Op::OpImageQueryLod, params, isUnsignedResult); case glslang::EOpTextureQueryLevels: - return builder.createTextureQueryCall(spv::OpImageQueryLevels, params, isUnsignedResult); + return builder.createTextureQueryCall(spv::Op::OpImageQueryLevels, params, isUnsignedResult); case glslang::EOpSparseTexelsResident: - return builder.createUnaryOp(spv::OpImageSparseTexelsResident, builder.makeBoolType(), arguments[0]); + return builder.createUnaryOp(spv::Op::OpImageSparseTexelsResident, builder.makeBoolType(), arguments[0]); default: assert(0); break; @@ -6474,19 +6490,19 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO spv::IdImmediate coord = { true, builder.makeCompositeConstant(builder.makeVectorType(builder.makeIntType(32), 2), comps) }; operands.push_back(coord); - spv::IdImmediate imageOperands = { false, spv::ImageOperandsMaskNone }; - imageOperands.word = imageOperands.word | signExtensionMask(); + spv::IdImmediate imageOperands = { false, spv::ImageOperandsMask::MaskNone }; + imageOperands.word = imageOperands.word | (unsigned)signExtensionMask(); if (sampler.isMultiSample()) { - imageOperands.word = imageOperands.word | spv::ImageOperandsSampleMask; + imageOperands.word = imageOperands.word | (unsigned)spv::ImageOperandsMask::Sample; } - if (imageOperands.word != spv::ImageOperandsMaskNone) { + if (imageOperands.word != (unsigned)spv::ImageOperandsMask::MaskNone) { operands.push_back(imageOperands); if (sampler.isMultiSample()) { spv::IdImmediate imageOperand = { true, *(opIt++) }; operands.push_back(imageOperand); } } - spv::Id result = builder.createOp(spv::OpImageRead, resultType(), operands); + spv::Id result = builder.createOp(spv::Op::OpImageRead, resultType(), operands); builder.setPrecision(result, precision); return result; } @@ -6496,7 +6512,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO spv::IdImmediate sample = { true, *opIt }; operands.push_back(sample); } - spv::Id result = builder.createOp(spv::OpColorAttachmentReadEXT, resultType(), operands); + spv::Id result = builder.createOp(spv::Op::OpColorAttachmentReadEXT, resultType(), operands); builder.addExtension(spv::E_SPV_EXT_shader_tile_image); builder.setPrecision(result, precision); return result; @@ -6505,40 +6521,40 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO spv::IdImmediate coord = { true, *(opIt++) }; operands.push_back(coord); if (node->getOp() == glslang::EOpImageLoad || node->getOp() == glslang::EOpImageLoadLod) { - spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone; + spv::ImageOperandsMask mask = spv::ImageOperandsMask::MaskNone; if (sampler.isMultiSample()) { - mask = mask | spv::ImageOperandsSampleMask; + mask = mask | spv::ImageOperandsMask::Sample; } if (cracked.lod) { builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod); - builder.addCapability(spv::CapabilityImageReadWriteLodAMD); - mask = mask | spv::ImageOperandsLodMask; + builder.addCapability(spv::Capability::ImageReadWriteLodAMD); + mask = mask | spv::ImageOperandsMask::Lod; } mask = mask | TranslateImageOperands(TranslateCoherent(imageType)); - mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelAvailableKHRMask); + mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMask::MakeTexelAvailableKHR); mask = mask | signExtensionMask(); - if (mask != spv::ImageOperandsMaskNone) { + if (mask != spv::ImageOperandsMask::MaskNone) { spv::IdImmediate imageOperands = { false, (unsigned int)mask }; operands.push_back(imageOperands); } - if (mask & spv::ImageOperandsSampleMask) { + if (anySet(mask, spv::ImageOperandsMask::Sample)) { spv::IdImmediate imageOperand = { true, *opIt++ }; operands.push_back(imageOperand); } - if (mask & spv::ImageOperandsLodMask) { + if (anySet(mask, spv::ImageOperandsMask::Lod)) { spv::IdImmediate imageOperand = { true, *opIt++ }; operands.push_back(imageOperand); } - if (mask & spv::ImageOperandsMakeTexelVisibleKHRMask) { + if (anySet(mask, spv::ImageOperandsMask::MakeTexelVisibleKHR)) { spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) }; operands.push_back(imageOperand); } - if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormatUnknown) - builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat); + if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormat::Unknown) + builder.addCapability(spv::Capability::StorageImageReadWithoutFormat); - std::vector result(1, builder.createOp(spv::OpImageRead, resultType(), operands)); + std::vector result(1, builder.createOp(spv::Op::OpImageRead, resultType(), operands)); builder.setPrecision(result[0], precision); // If needed, add a conversion constructor to the proper size. @@ -6557,72 +6573,72 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO operands.push_back(texel); } - spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone; + spv::ImageOperandsMask mask = spv::ImageOperandsMask::MaskNone; if (sampler.isMultiSample()) { - mask = mask | spv::ImageOperandsSampleMask; + mask = mask | spv::ImageOperandsMask::Sample; } if (cracked.lod) { builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod); - builder.addCapability(spv::CapabilityImageReadWriteLodAMD); - mask = mask | spv::ImageOperandsLodMask; + builder.addCapability(spv::Capability::ImageReadWriteLodAMD); + mask = mask | spv::ImageOperandsMask::Lod; } mask = mask | TranslateImageOperands(TranslateCoherent(imageType)); - mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelVisibleKHRMask); + mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMask::MakeTexelVisibleKHR); mask = mask | signExtensionMask(); - if (mask != spv::ImageOperandsMaskNone) { + if (mask != spv::ImageOperandsMask::MaskNone) { spv::IdImmediate imageOperands = { false, (unsigned int)mask }; operands.push_back(imageOperands); } - if (mask & spv::ImageOperandsSampleMask) { + if (anySet(mask, spv::ImageOperandsMask::Sample)) { spv::IdImmediate imageOperand = { true, *opIt++ }; operands.push_back(imageOperand); } - if (mask & spv::ImageOperandsLodMask) { + if (anySet(mask, spv::ImageOperandsMask::Lod)) { spv::IdImmediate imageOperand = { true, *opIt++ }; operands.push_back(imageOperand); } - if (mask & spv::ImageOperandsMakeTexelAvailableKHRMask) { + if (anySet(mask, spv::ImageOperandsMask::MakeTexelAvailableKHR)) { spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope(TranslateCoherent(imageType))) }; operands.push_back(imageOperand); } - builder.createNoResultOp(spv::OpImageWrite, operands); - if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormatUnknown) - builder.addCapability(spv::CapabilityStorageImageWriteWithoutFormat); + builder.createNoResultOp(spv::Op::OpImageWrite, operands); + if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormat::Unknown) + builder.addCapability(spv::Capability::StorageImageWriteWithoutFormat); return spv::NoResult; } else if (node->getOp() == glslang::EOpSparseImageLoad || node->getOp() == glslang::EOpSparseImageLoadLod) { - builder.addCapability(spv::CapabilitySparseResidency); - if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormatUnknown) - builder.addCapability(spv::CapabilityStorageImageReadWithoutFormat); + builder.addCapability(spv::Capability::SparseResidency); + if (builder.getImageTypeFormat(builder.getImageType(operands.front().word)) == spv::ImageFormat::Unknown) + builder.addCapability(spv::Capability::StorageImageReadWithoutFormat); - spv::ImageOperandsMask mask = spv::ImageOperandsMaskNone; + spv::ImageOperandsMask mask = spv::ImageOperandsMask::MaskNone; if (sampler.isMultiSample()) { - mask = mask | spv::ImageOperandsSampleMask; + mask = mask | spv::ImageOperandsMask::Sample; } if (cracked.lod) { builder.addExtension(spv::E_SPV_AMD_shader_image_load_store_lod); - builder.addCapability(spv::CapabilityImageReadWriteLodAMD); + builder.addCapability(spv::Capability::ImageReadWriteLodAMD); - mask = mask | spv::ImageOperandsLodMask; + mask = mask | spv::ImageOperandsMask::Lod; } mask = mask | TranslateImageOperands(TranslateCoherent(imageType)); - mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMakeTexelAvailableKHRMask); + mask = (spv::ImageOperandsMask)(mask & ~spv::ImageOperandsMask::MakeTexelAvailableKHR); mask = mask | signExtensionMask(); - if (mask != spv::ImageOperandsMaskNone) { + if (mask != spv::ImageOperandsMask::MaskNone) { spv::IdImmediate imageOperands = { false, (unsigned int)mask }; operands.push_back(imageOperands); } - if (mask & spv::ImageOperandsSampleMask) { + if (anySet(mask, spv::ImageOperandsMask::Sample)) { spv::IdImmediate imageOperand = { true, *opIt++ }; operands.push_back(imageOperand); } - if (mask & spv::ImageOperandsLodMask) { + if (anySet(mask, spv::ImageOperandsMask::Lod)) { spv::IdImmediate imageOperand = { true, *opIt++ }; operands.push_back(imageOperand); } - if (mask & spv::ImageOperandsMakeTexelVisibleKHRMask) { + if (anySet(mask, spv::ImageOperandsMask::MakeTexelVisibleKHR)) { spv::IdImmediate imageOperand = { true, builder.makeUintConstant(TranslateMemoryScope( TranslateCoherent(imageType))) }; operands.push_back(imageOperand); @@ -6634,7 +6650,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO spv::Id typeId1 = builder.getDerefTypeId(texelOut); spv::Id resultTypeId = builder.makeStructResultType(typeId0, typeId1); - spv::Id resultId = builder.createOp(spv::OpImageSparseRead, resultTypeId, operands); + spv::Id resultId = builder.createOp(spv::Op::OpImageSparseRead, resultTypeId, operands); // Decode the return type builder.createStore(builder.createCompositeExtract(resultId, typeId1, 1), texelOut); @@ -6653,14 +6669,14 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO // imageAtomicStore has a void return type so base the pointer type on // the type of the value operand. if (node->getOp() == glslang::EOpImageAtomicStore) { - resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(*opIt)); + resultTypeId = builder.makePointer(spv::StorageClass::Image, builder.getTypeId(*opIt)); typeProxy = node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().getSampler().type; } else { - resultTypeId = builder.makePointer(spv::StorageClassImage, resultType()); + resultTypeId = builder.makePointer(spv::StorageClass::Image, resultType()); } - spv::Id pointer = builder.createOp(spv::OpImageTexelPointer, resultTypeId, operands); + spv::Id pointer = builder.createOp(spv::Op::OpImageTexelPointer, resultTypeId, operands); if (imageType.getQualifier().nonUniform) { - builder.addDecoration(pointer, spv::DecorationNonUniformEXT); + builder.addDecoration(pointer, spv::Decoration::NonUniformEXT); } std::vector operands; @@ -6696,14 +6712,14 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO for (; opIt != arguments.end(); ++opIt) operands.push_back(*opIt); - spv::Op fragMaskOp = spv::OpNop; + spv::Op fragMaskOp = spv::Op::OpNop; if (node->getOp() == glslang::EOpFragmentMaskFetch) - fragMaskOp = spv::OpFragmentMaskFetchAMD; + fragMaskOp = spv::Op::OpFragmentMaskFetchAMD; else if (node->getOp() == glslang::EOpFragmentFetch) - fragMaskOp = spv::OpFragmentFetchAMD; + fragMaskOp = spv::Op::OpFragmentFetchAMD; builder.addExtension(spv::E_SPV_AMD_shader_fragment_mask); - builder.addCapability(spv::CapabilityFragmentMaskAMD); + builder.addCapability(spv::Capability::FragmentMaskAMD); return builder.createOp(fragMaskOp, resultType(), operands); } @@ -6744,7 +6760,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO if (bias || cracked.lod || sourceExtensions.find(glslang::E_GL_AMD_texture_gather_bias_lod) != sourceExtensions.end()) { builder.addExtension(spv::E_SPV_AMD_texture_gather_bias_lod); - builder.addCapability(spv::CapabilityImageGatherBiasLodAMD); + builder.addCapability(spv::Capability::ImageGatherBiasLodAMD); } } @@ -6843,7 +6859,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO if (imageFootprint) { builder.addExtension(spv::E_SPV_NV_shader_image_footprint); - builder.addCapability(spv::CapabilityImageFootprintNV); + builder.addCapability(spv::Capability::ImageFootprintNV); //resultStructType(OpenGL type) contains 5 elements: @@ -7003,7 +7019,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg ++lValueCount; } else if (writableParam(qualifiers[a])) { // need space to hold the copy - arg = builder.createVariable(function->getParamPrecision(a), spv::StorageClassFunction, + arg = builder.createVariable(function->getParamPrecision(a), spv::StorageClass::Function, builder.getContainedTypeId(function->getParamType(a)), "param"); if (qualifiers[a] == glslang::EvqIn || qualifiers[a] == glslang::EvqInOut) { // need to copy the input into output space @@ -7019,7 +7035,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg if (function->getParamType(a) != builder.getTypeId(rValues[rValueCount]) || TranslatePrecisionDecoration(*argTypes[a]) != function->getParamPrecision(a)) { - spv::Id argCopy = builder.createVariable(function->getParamPrecision(a), spv::StorageClassFunction, function->getParamType(a), "arg"); + spv::Id argCopy = builder.createVariable(function->getParamPrecision(a), spv::StorageClass::Function, function->getParamType(a), "arg"); builder.clearAccessChain(); builder.setAccessChainLValue(argCopy); multiTypeStore(*argTypes[a], rValues[rValueCount]); @@ -7064,7 +7080,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD bool isFloat = isTypeFloat(typeProxy); bool isBool = typeProxy == glslang::EbtBool; - spv::Op binOp = spv::OpNop; + spv::Op binOp = spv::Op::OpNop; bool needMatchingVectors = true; // for non-matrix ops, would a scalar need to smear to match a vector? bool comparison = false; @@ -7072,23 +7088,23 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD case glslang::EOpAdd: case glslang::EOpAddAssign: if (isFloat) - binOp = spv::OpFAdd; + binOp = spv::Op::OpFAdd; else - binOp = spv::OpIAdd; + binOp = spv::Op::OpIAdd; break; case glslang::EOpSub: case glslang::EOpSubAssign: if (isFloat) - binOp = spv::OpFSub; + binOp = spv::Op::OpFSub; else - binOp = spv::OpISub; + binOp = spv::Op::OpISub; break; case glslang::EOpMul: case glslang::EOpMulAssign: if (isFloat) - binOp = spv::OpFMul; + binOp = spv::Op::OpFMul; else - binOp = spv::OpIMul; + binOp = spv::Op::OpIMul; break; case glslang::EOpVectorTimesScalar: case glslang::EOpVectorTimesScalarAssign: @@ -7097,120 +7113,120 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD std::swap(left, right); assert(builder.isScalar(right)); needMatchingVectors = false; - binOp = spv::OpVectorTimesScalar; + binOp = spv::Op::OpVectorTimesScalar; } else if (isFloat) { - binOp = spv::OpFMul; + binOp = spv::Op::OpFMul; } else if (builder.isCooperativeVector(left) || builder.isCooperativeVector(right)) { if (builder.isCooperativeVector(right)) std::swap(left, right); assert(builder.isScalar(right)); // Construct a cooperative vector from the scalar right = builder.createCompositeConstruct(builder.getTypeId(left), { right }); - binOp = spv::OpIMul; + binOp = spv::Op::OpIMul; } else { - binOp = spv::OpIMul; + binOp = spv::Op::OpIMul; } break; case glslang::EOpVectorTimesMatrix: case glslang::EOpVectorTimesMatrixAssign: - binOp = spv::OpVectorTimesMatrix; + binOp = spv::Op::OpVectorTimesMatrix; break; case glslang::EOpMatrixTimesVector: - binOp = spv::OpMatrixTimesVector; + binOp = spv::Op::OpMatrixTimesVector; break; case glslang::EOpMatrixTimesScalar: case glslang::EOpMatrixTimesScalarAssign: - binOp = spv::OpMatrixTimesScalar; + binOp = spv::Op::OpMatrixTimesScalar; break; case glslang::EOpMatrixTimesMatrix: case glslang::EOpMatrixTimesMatrixAssign: - binOp = spv::OpMatrixTimesMatrix; + binOp = spv::Op::OpMatrixTimesMatrix; break; case glslang::EOpOuterProduct: - binOp = spv::OpOuterProduct; + binOp = spv::Op::OpOuterProduct; needMatchingVectors = false; break; case glslang::EOpDiv: case glslang::EOpDivAssign: if (isFloat) - binOp = spv::OpFDiv; + binOp = spv::Op::OpFDiv; else if (isUnsigned) - binOp = spv::OpUDiv; + binOp = spv::Op::OpUDiv; else - binOp = spv::OpSDiv; + binOp = spv::Op::OpSDiv; break; case glslang::EOpMod: case glslang::EOpModAssign: if (isFloat) - binOp = spv::OpFMod; + binOp = spv::Op::OpFMod; else if (isUnsigned) - binOp = spv::OpUMod; + binOp = spv::Op::OpUMod; else - binOp = spv::OpSMod; + binOp = spv::Op::OpSMod; break; case glslang::EOpRightShift: case glslang::EOpRightShiftAssign: if (isUnsigned) - binOp = spv::OpShiftRightLogical; + binOp = spv::Op::OpShiftRightLogical; else - binOp = spv::OpShiftRightArithmetic; + binOp = spv::Op::OpShiftRightArithmetic; break; case glslang::EOpLeftShift: case glslang::EOpLeftShiftAssign: - binOp = spv::OpShiftLeftLogical; + binOp = spv::Op::OpShiftLeftLogical; break; case glslang::EOpAnd: case glslang::EOpAndAssign: - binOp = spv::OpBitwiseAnd; + binOp = spv::Op::OpBitwiseAnd; break; case glslang::EOpLogicalAnd: needMatchingVectors = false; - binOp = spv::OpLogicalAnd; + binOp = spv::Op::OpLogicalAnd; break; case glslang::EOpInclusiveOr: case glslang::EOpInclusiveOrAssign: - binOp = spv::OpBitwiseOr; + binOp = spv::Op::OpBitwiseOr; break; case glslang::EOpLogicalOr: needMatchingVectors = false; - binOp = spv::OpLogicalOr; + binOp = spv::Op::OpLogicalOr; break; case glslang::EOpExclusiveOr: case glslang::EOpExclusiveOrAssign: - binOp = spv::OpBitwiseXor; + binOp = spv::Op::OpBitwiseXor; break; case glslang::EOpLogicalXor: needMatchingVectors = false; - binOp = spv::OpLogicalNotEqual; + binOp = spv::Op::OpLogicalNotEqual; break; case glslang::EOpAbsDifference: - binOp = isUnsigned ? spv::OpAbsUSubINTEL : spv::OpAbsISubINTEL; + binOp = isUnsigned ? spv::Op::OpAbsUSubINTEL : spv::Op::OpAbsISubINTEL; break; case glslang::EOpAddSaturate: - binOp = isUnsigned ? spv::OpUAddSatINTEL : spv::OpIAddSatINTEL; + binOp = isUnsigned ? spv::Op::OpUAddSatINTEL : spv::Op::OpIAddSatINTEL; break; case glslang::EOpSubSaturate: - binOp = isUnsigned ? spv::OpUSubSatINTEL : spv::OpISubSatINTEL; + binOp = isUnsigned ? spv::Op::OpUSubSatINTEL : spv::Op::OpISubSatINTEL; break; case glslang::EOpAverage: - binOp = isUnsigned ? spv::OpUAverageINTEL : spv::OpIAverageINTEL; + binOp = isUnsigned ? spv::Op::OpUAverageINTEL : spv::Op::OpIAverageINTEL; break; case glslang::EOpAverageRounded: - binOp = isUnsigned ? spv::OpUAverageRoundedINTEL : spv::OpIAverageRoundedINTEL; + binOp = isUnsigned ? spv::Op::OpUAverageRoundedINTEL : spv::Op::OpIAverageRoundedINTEL; break; case glslang::EOpMul32x16: - binOp = isUnsigned ? spv::OpUMul32x16INTEL : spv::OpIMul32x16INTEL; + binOp = isUnsigned ? spv::Op::OpUMul32x16INTEL : spv::Op::OpIMul32x16INTEL; break; case glslang::EOpExpectEXT: - binOp = spv::OpExpectKHR; + binOp = spv::Op::OpExpectKHR; break; case glslang::EOpLessThan: @@ -7228,7 +7244,7 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD } // handle mapped binary operations (should be non-comparison) - if (binOp != spv::OpNop) { + if (binOp != spv::Op::OpNop) { assert(comparison == false); if (builder.isMatrix(left) || builder.isMatrix(right) || builder.isCooperativeMatrix(left) || builder.isCooperativeMatrix(right)) @@ -7259,59 +7275,59 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, OpD switch (op) { case glslang::EOpLessThan: if (isFloat) - binOp = spv::OpFOrdLessThan; + binOp = spv::Op::OpFOrdLessThan; else if (isUnsigned) - binOp = spv::OpULessThan; + binOp = spv::Op::OpULessThan; else - binOp = spv::OpSLessThan; + binOp = spv::Op::OpSLessThan; break; case glslang::EOpGreaterThan: if (isFloat) - binOp = spv::OpFOrdGreaterThan; + binOp = spv::Op::OpFOrdGreaterThan; else if (isUnsigned) - binOp = spv::OpUGreaterThan; + binOp = spv::Op::OpUGreaterThan; else - binOp = spv::OpSGreaterThan; + binOp = spv::Op::OpSGreaterThan; break; case glslang::EOpLessThanEqual: if (isFloat) - binOp = spv::OpFOrdLessThanEqual; + binOp = spv::Op::OpFOrdLessThanEqual; else if (isUnsigned) - binOp = spv::OpULessThanEqual; + binOp = spv::Op::OpULessThanEqual; else - binOp = spv::OpSLessThanEqual; + binOp = spv::Op::OpSLessThanEqual; break; case glslang::EOpGreaterThanEqual: if (isFloat) - binOp = spv::OpFOrdGreaterThanEqual; + binOp = spv::Op::OpFOrdGreaterThanEqual; else if (isUnsigned) - binOp = spv::OpUGreaterThanEqual; + binOp = spv::Op::OpUGreaterThanEqual; else - binOp = spv::OpSGreaterThanEqual; + binOp = spv::Op::OpSGreaterThanEqual; break; case glslang::EOpEqual: case glslang::EOpVectorEqual: if (isFloat) - binOp = spv::OpFOrdEqual; + binOp = spv::Op::OpFOrdEqual; else if (isBool) - binOp = spv::OpLogicalEqual; + binOp = spv::Op::OpLogicalEqual; else - binOp = spv::OpIEqual; + binOp = spv::Op::OpIEqual; break; case glslang::EOpNotEqual: case glslang::EOpVectorNotEqual: if (isFloat) - binOp = spv::OpFUnordNotEqual; + binOp = spv::Op::OpFUnordNotEqual; else if (isBool) - binOp = spv::OpLogicalNotEqual; + binOp = spv::Op::OpLogicalNotEqual; else - binOp = spv::OpINotEqual; + binOp = spv::Op::OpINotEqual; break; default: break; } - if (binOp != spv::OpNop) { + if (binOp != spv::Op::OpNop) { spv::Id result = builder.createBinOp(binOp, typeId, left, right); decorations.addNoContraction(builder, result); decorations.addNonUniform(builder, result); @@ -7342,29 +7358,29 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, OpDecora // First, handle first-class matrix operations (* and matrix/scalar) switch (op) { - case spv::OpFDiv: + case spv::Op::OpFDiv: if (builder.isMatrix(left) && builder.isScalar(right)) { // turn matrix / scalar into a multiply... spv::Id resultType = builder.getTypeId(right); - right = builder.createBinOp(spv::OpFDiv, resultType, builder.makeFpConstant(resultType, 1.0), right); - op = spv::OpMatrixTimesScalar; + right = builder.createBinOp(spv::Op::OpFDiv, resultType, builder.makeFpConstant(resultType, 1.0), right); + op = spv::Op::OpMatrixTimesScalar; } else firstClass = false; break; - case spv::OpMatrixTimesScalar: + case spv::Op::OpMatrixTimesScalar: if (builder.isMatrix(right) || builder.isCooperativeMatrix(right)) std::swap(left, right); assert(builder.isScalar(right)); break; - case spv::OpVectorTimesMatrix: + case spv::Op::OpVectorTimesMatrix: assert(builder.isVector(left)); assert(builder.isMatrix(right)); break; - case spv::OpMatrixTimesVector: + case spv::Op::OpMatrixTimesVector: assert(builder.isMatrix(left)); assert(builder.isVector(right)); break; - case spv::OpMatrixTimesMatrix: + case spv::Op::OpMatrixTimesMatrix: assert(builder.isMatrix(left)); assert(builder.isMatrix(right)); break; @@ -7391,11 +7407,11 @@ spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, OpDecora // - do vector operations // - make a matrix out the vector results switch (op) { - case spv::OpFAdd: - case spv::OpFSub: - case spv::OpFDiv: - case spv::OpFMod: - case spv::OpFMul: + case spv::Op::OpFAdd: + case spv::Op::OpFSub: + case spv::Op::OpFDiv: + case spv::Op::OpFMod: + case spv::Op::OpFMul: { // one time set up... bool leftMat = builder.isMatrix(left); @@ -7438,7 +7454,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe spv::Id operand, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags, const glslang::TType &opType) { - spv::Op unaryOp = spv::OpNop; + spv::Op unaryOp = spv::Op::OpNop; int extBuiltins = -1; int libCall = -1; bool isUnsigned = isTypeUnsignedInt(typeProxy); @@ -7447,19 +7463,19 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe switch (op) { case glslang::EOpNegative: if (isFloat) { - unaryOp = spv::OpFNegate; + unaryOp = spv::Op::OpFNegate; if (builder.isMatrixType(typeId)) return createUnaryMatrixOperation(unaryOp, decorations, typeId, operand, typeProxy); } else - unaryOp = spv::OpSNegate; + unaryOp = spv::Op::OpSNegate; break; case glslang::EOpLogicalNot: case glslang::EOpVectorLogicalNot: - unaryOp = spv::OpLogicalNot; + unaryOp = spv::Op::OpLogicalNot; break; case glslang::EOpBitwiseNot: - unaryOp = spv::OpNot; + unaryOp = spv::Op::OpNot; break; case glslang::EOpDeterminant: @@ -7469,7 +7485,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe libCall = spv::GLSLstd450MatrixInverse; break; case glslang::EOpTranspose: - unaryOp = spv::OpTranspose; + unaryOp = spv::Op::OpTranspose; break; case glslang::EOpRadians: @@ -7562,13 +7578,13 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe break; case glslang::EOpIsNan: - unaryOp = spv::OpIsNan; + unaryOp = spv::Op::OpIsNan; break; case glslang::EOpIsInf: - unaryOp = spv::OpIsInf; + unaryOp = spv::Op::OpIsInf; break; case glslang::EOpIsFinite: - unaryOp = spv::OpIsFinite; + unaryOp = spv::Op::OpIsFinite; break; case glslang::EOpFloatBitsToInt: @@ -7583,7 +7599,7 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe case glslang::EOpFloat16BitsToUint16: case glslang::EOpInt16BitsToFloat16: case glslang::EOpUint16BitsToFloat16: - unaryOp = spv::OpBitcast; + unaryOp = spv::Op::OpBitcast; break; case glslang::EOpPackSnorm2x16: @@ -7643,24 +7659,24 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe case glslang::EOpUnpackUint4x16: case glslang::EOpPackFloat2x16: case glslang::EOpUnpackFloat2x16: - unaryOp = spv::OpBitcast; + unaryOp = spv::Op::OpBitcast; break; case glslang::EOpDPdx: - unaryOp = spv::OpDPdx; + unaryOp = spv::Op::OpDPdx; break; case glslang::EOpDPdy: - unaryOp = spv::OpDPdy; + unaryOp = spv::Op::OpDPdy; break; case glslang::EOpFwidth: - unaryOp = spv::OpFwidth; + unaryOp = spv::Op::OpFwidth; break; case glslang::EOpAny: - unaryOp = spv::OpAny; + unaryOp = spv::Op::OpAny; break; case glslang::EOpAll: - unaryOp = spv::OpAll; + unaryOp = spv::Op::OpAll; break; case glslang::EOpAbs: @@ -7677,40 +7693,40 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe break; case glslang::EOpDPdxFine: - unaryOp = spv::OpDPdxFine; + unaryOp = spv::Op::OpDPdxFine; break; case glslang::EOpDPdyFine: - unaryOp = spv::OpDPdyFine; + unaryOp = spv::Op::OpDPdyFine; break; case glslang::EOpFwidthFine: - unaryOp = spv::OpFwidthFine; + unaryOp = spv::Op::OpFwidthFine; break; case glslang::EOpDPdxCoarse: - unaryOp = spv::OpDPdxCoarse; + unaryOp = spv::Op::OpDPdxCoarse; break; case glslang::EOpDPdyCoarse: - unaryOp = spv::OpDPdyCoarse; + unaryOp = spv::Op::OpDPdyCoarse; break; case glslang::EOpFwidthCoarse: - unaryOp = spv::OpFwidthCoarse; + unaryOp = spv::Op::OpFwidthCoarse; break; case glslang::EOpRayQueryProceed: - unaryOp = spv::OpRayQueryProceedKHR; + unaryOp = spv::Op::OpRayQueryProceedKHR; break; case glslang::EOpRayQueryGetRayTMin: - unaryOp = spv::OpRayQueryGetRayTMinKHR; + unaryOp = spv::Op::OpRayQueryGetRayTMinKHR; break; case glslang::EOpRayQueryGetRayFlags: - unaryOp = spv::OpRayQueryGetRayFlagsKHR; + unaryOp = spv::Op::OpRayQueryGetRayFlagsKHR; break; case glslang::EOpRayQueryGetWorldRayOrigin: - unaryOp = spv::OpRayQueryGetWorldRayOriginKHR; + unaryOp = spv::Op::OpRayQueryGetWorldRayOriginKHR; break; case glslang::EOpRayQueryGetWorldRayDirection: - unaryOp = spv::OpRayQueryGetWorldRayDirectionKHR; + unaryOp = spv::Op::OpRayQueryGetWorldRayDirectionKHR; break; case glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque: - unaryOp = spv::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR; + unaryOp = spv::Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR; break; case glslang::EOpInterpolateAtCentroid: if (typeProxy == glslang::EbtFloat16) @@ -7728,10 +7744,10 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe } case glslang::EOpBitFieldReverse: - unaryOp = spv::OpBitReverse; + unaryOp = spv::Op::OpBitReverse; break; case glslang::EOpBitCount: - unaryOp = spv::OpBitCount; + unaryOp = spv::Op::OpBitCount; break; case glslang::EOpFindLSB: libCall = spv::GLSLstd450FindILsb; @@ -7744,15 +7760,15 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe break; case glslang::EOpCountLeadingZeros: - builder.addCapability(spv::CapabilityIntegerFunctions2INTEL); + builder.addCapability(spv::Capability::IntegerFunctions2INTEL); builder.addExtension("SPV_INTEL_shader_integer_functions2"); - unaryOp = spv::OpUCountLeadingZerosINTEL; + unaryOp = spv::Op::OpUCountLeadingZerosINTEL; break; case glslang::EOpCountTrailingZeros: - builder.addCapability(spv::CapabilityIntegerFunctions2INTEL); + builder.addCapability(spv::Capability::IntegerFunctions2INTEL); builder.addExtension("SPV_INTEL_shader_integer_functions2"); - unaryOp = spv::OpUCountTrailingZerosINTEL; + unaryOp = spv::Op::OpUCountTrailingZerosINTEL; break; case glslang::EOpBallot: @@ -7839,139 +7855,139 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe libCall = spv::CubeFaceCoordAMD; break; case glslang::EOpSubgroupPartition: - unaryOp = spv::OpGroupNonUniformPartitionNV; + unaryOp = spv::Op::OpGroupNonUniformPartitionNV; break; case glslang::EOpConstructReference: - unaryOp = spv::OpBitcast; + unaryOp = spv::Op::OpBitcast; break; case glslang::EOpConvUint64ToAccStruct: case glslang::EOpConvUvec2ToAccStruct: - unaryOp = spv::OpConvertUToAccelerationStructureKHR; + unaryOp = spv::Op::OpConvertUToAccelerationStructureKHR; break; case glslang::EOpHitObjectIsEmptyNV: - unaryOp = spv::OpHitObjectIsEmptyNV; + unaryOp = spv::Op::OpHitObjectIsEmptyNV; break; case glslang::EOpHitObjectIsMissNV: - unaryOp = spv::OpHitObjectIsMissNV; + unaryOp = spv::Op::OpHitObjectIsMissNV; break; case glslang::EOpHitObjectIsHitNV: - unaryOp = spv::OpHitObjectIsHitNV; + unaryOp = spv::Op::OpHitObjectIsHitNV; break; case glslang::EOpHitObjectGetObjectRayOriginNV: - unaryOp = spv::OpHitObjectGetObjectRayOriginNV; + unaryOp = spv::Op::OpHitObjectGetObjectRayOriginNV; break; case glslang::EOpHitObjectGetObjectRayDirectionNV: - unaryOp = spv::OpHitObjectGetObjectRayDirectionNV; + unaryOp = spv::Op::OpHitObjectGetObjectRayDirectionNV; break; case glslang::EOpHitObjectGetWorldRayOriginNV: - unaryOp = spv::OpHitObjectGetWorldRayOriginNV; + unaryOp = spv::Op::OpHitObjectGetWorldRayOriginNV; break; case glslang::EOpHitObjectGetWorldRayDirectionNV: - unaryOp = spv::OpHitObjectGetWorldRayDirectionNV; + unaryOp = spv::Op::OpHitObjectGetWorldRayDirectionNV; break; case glslang::EOpHitObjectGetObjectToWorldNV: - unaryOp = spv::OpHitObjectGetObjectToWorldNV; + unaryOp = spv::Op::OpHitObjectGetObjectToWorldNV; break; case glslang::EOpHitObjectGetWorldToObjectNV: - unaryOp = spv::OpHitObjectGetWorldToObjectNV; + unaryOp = spv::Op::OpHitObjectGetWorldToObjectNV; break; case glslang::EOpHitObjectGetRayTMinNV: - unaryOp = spv::OpHitObjectGetRayTMinNV; + unaryOp = spv::Op::OpHitObjectGetRayTMinNV; break; case glslang::EOpHitObjectGetRayTMaxNV: - unaryOp = spv::OpHitObjectGetRayTMaxNV; + unaryOp = spv::Op::OpHitObjectGetRayTMaxNV; break; case glslang::EOpHitObjectGetPrimitiveIndexNV: - unaryOp = spv::OpHitObjectGetPrimitiveIndexNV; + unaryOp = spv::Op::OpHitObjectGetPrimitiveIndexNV; break; case glslang::EOpHitObjectGetInstanceIdNV: - unaryOp = spv::OpHitObjectGetInstanceIdNV; + unaryOp = spv::Op::OpHitObjectGetInstanceIdNV; break; case glslang::EOpHitObjectGetInstanceCustomIndexNV: - unaryOp = spv::OpHitObjectGetInstanceCustomIndexNV; + unaryOp = spv::Op::OpHitObjectGetInstanceCustomIndexNV; break; case glslang::EOpHitObjectGetGeometryIndexNV: - unaryOp = spv::OpHitObjectGetGeometryIndexNV; + unaryOp = spv::Op::OpHitObjectGetGeometryIndexNV; break; case glslang::EOpHitObjectGetHitKindNV: - unaryOp = spv::OpHitObjectGetHitKindNV; + unaryOp = spv::Op::OpHitObjectGetHitKindNV; break; case glslang::EOpHitObjectGetCurrentTimeNV: - unaryOp = spv::OpHitObjectGetCurrentTimeNV; + unaryOp = spv::Op::OpHitObjectGetCurrentTimeNV; break; case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV: - unaryOp = spv::OpHitObjectGetShaderBindingTableRecordIndexNV; + unaryOp = spv::Op::OpHitObjectGetShaderBindingTableRecordIndexNV; break; case glslang::EOpHitObjectGetShaderRecordBufferHandleNV: - unaryOp = spv::OpHitObjectGetShaderRecordBufferHandleNV; + unaryOp = spv::Op::OpHitObjectGetShaderRecordBufferHandleNV; break; case glslang::EOpHitObjectGetClusterIdNV: - unaryOp = spv::OpHitObjectGetClusterIdNV; + unaryOp = spv::Op::OpHitObjectGetClusterIdNV; builder.addExtension(spv::E_SPV_NV_cluster_acceleration_structure); - builder.addCapability(spv::CapabilityShaderInvocationReorderNV); - builder.addCapability(spv::CapabilityRayTracingClusterAccelerationStructureNV); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); + builder.addCapability(spv::Capability::RayTracingClusterAccelerationStructureNV); break; case glslang::EOpHitObjectGetSpherePositionNV: - unaryOp = spv::OpHitObjectGetSpherePositionNV; + unaryOp = spv::Op::OpHitObjectGetSpherePositionNV; break; case glslang::EOpHitObjectGetSphereRadiusNV: - unaryOp = spv::OpHitObjectGetSphereRadiusNV; + unaryOp = spv::Op::OpHitObjectGetSphereRadiusNV; break; case glslang::EOpHitObjectIsSphereHitNV: - unaryOp = spv::OpHitObjectIsSphereHitNV; + unaryOp = spv::Op::OpHitObjectIsSphereHitNV; break; case glslang::EOpHitObjectIsLSSHitNV: - unaryOp = spv::OpHitObjectIsLSSHitNV; + unaryOp = spv::Op::OpHitObjectIsLSSHitNV; break; case glslang::EOpFetchMicroTriangleVertexPositionNV: - unaryOp = spv::OpFetchMicroTriangleVertexPositionNV; + unaryOp = spv::Op::OpFetchMicroTriangleVertexPositionNV; break; case glslang::EOpFetchMicroTriangleVertexBarycentricNV: - unaryOp = spv::OpFetchMicroTriangleVertexBarycentricNV; + unaryOp = spv::Op::OpFetchMicroTriangleVertexBarycentricNV; break; case glslang::EOpCopyObject: - unaryOp = spv::OpCopyObject; + unaryOp = spv::Op::OpCopyObject; break; case glslang::EOpDepthAttachmentReadEXT: builder.addExtension(spv::E_SPV_EXT_shader_tile_image); - builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT); - unaryOp = spv::OpDepthAttachmentReadEXT; + builder.addCapability(spv::Capability::TileImageDepthReadAccessEXT); + unaryOp = spv::Op::OpDepthAttachmentReadEXT; decorations.precision = spv::NoPrecision; break; case glslang::EOpStencilAttachmentReadEXT: builder.addExtension(spv::E_SPV_EXT_shader_tile_image); - builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT); - unaryOp = spv::OpStencilAttachmentReadEXT; - decorations.precision = spv::DecorationRelaxedPrecision; + builder.addCapability(spv::Capability::TileImageStencilReadAccessEXT); + unaryOp = spv::Op::OpStencilAttachmentReadEXT; + decorations.precision = spv::Decoration::RelaxedPrecision; break; default: @@ -8041,21 +8057,21 @@ spv::Id TGlslangToSpvTraverser::createIntWidthConversion(spv::Id operand, int ve // Get the conversion operation and result type, // based on the target width, but the source type. spv::Id type = spv::NoType; - spv::Op convOp = spv::OpNop; + spv::Op convOp = spv::Op::OpNop; if (isTypeSignedInt(operandBasicType)) { - convOp = spv::OpSConvert; + convOp = spv::Op::OpSConvert; type = builder.makeIntType(width); } else { - convOp = spv::OpUConvert; + convOp = spv::Op::OpUConvert; type = builder.makeUintType(width); } - if (builder.getOpCode(destType) == spv::OpTypeCooperativeVectorNV) { + if (builder.getOpCode(destType) == spv::Op::OpTypeCooperativeVectorNV) { type = builder.makeCooperativeVectorTypeNV(type, builder.getCooperativeVectorNumComponents(destType)); } else if (vectorSize > 0) type = builder.makeVectorType(type, vectorSize); - else if (builder.getOpCode(destType) == spv::OpTypeCooperativeMatrixKHR || - builder.getOpCode(destType) == spv::OpTypeCooperativeMatrixNV) { + else if (builder.getOpCode(destType) == spv::Op::OpTypeCooperativeMatrixKHR || + builder.getOpCode(destType) == spv::Op::OpTypeCooperativeMatrixNV) { type = builder.makeCooperativeMatrixTypeWithSameShape(type, destType); } @@ -8066,7 +8082,7 @@ 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::Op convOp = spv::OpNop; + spv::Op convOp = spv::Op::OpNop; spv::Id zero = 0; spv::Id one = 0; @@ -8074,25 +8090,25 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora if (IsOpNumericConv(op)) { if (isTypeSignedInt(operandBasicType) && isTypeFloat(resultBasicType)) { - convOp = spv::OpConvertSToF; + convOp = spv::Op::OpConvertSToF; } if (isTypeUnsignedInt(operandBasicType) && isTypeFloat(resultBasicType)) { - convOp = spv::OpConvertUToF; + convOp = spv::Op::OpConvertUToF; } if (isTypeFloat(operandBasicType) && isTypeSignedInt(resultBasicType)) { - convOp = spv::OpConvertFToS; + convOp = spv::Op::OpConvertFToS; } if (isTypeFloat(operandBasicType) && isTypeUnsignedInt(resultBasicType)) { - convOp = spv::OpConvertFToU; + convOp = spv::Op::OpConvertFToU; } if (isTypeSignedInt(operandBasicType) && isTypeSignedInt(resultBasicType)) { - convOp = spv::OpSConvert; + convOp = spv::Op::OpSConvert; } if (isTypeUnsignedInt(operandBasicType) && isTypeUnsignedInt(resultBasicType)) { - convOp = spv::OpUConvert; + convOp = spv::Op::OpUConvert; } if (isTypeFloat(operandBasicType) && isTypeFloat(resultBasicType)) { - convOp = spv::OpFConvert; + convOp = spv::Op::OpFConvert; if (builder.isMatrixType(destType)) return createUnaryMatrixOperation(convOp, decorations, destType, operand, operandBasicType); } @@ -8115,10 +8131,10 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora zero = makeSmearedConstant(zero, vectorSize); // Use OpIAdd, instead of OpBitcast to do the conversion when // generating for OpSpecConstantOp instruction. - return builder.createBinOp(spv::OpIAdd, destType, operand, zero); + return builder.createBinOp(spv::Op::OpIAdd, destType, operand, zero); } // For normal run-time conversion instruction, use OpBitcast. - convOp = spv::OpBitcast; + convOp = spv::Op::OpBitcast; } if (resultBasicType == glslang::EbtBool) { uint32_t bits = GetNumBits(operandBasicType); @@ -8130,7 +8146,7 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora zero = builder.makeIntConstant(zeroType, 0, false); } zero = makeSmearedConstant(zero, vectorSize); - return builder.createBinOp(spv::OpINotEqual, destType, operand, zero); + return builder.createBinOp(spv::Op::OpINotEqual, destType, operand, zero); } else { assert(isTypeFloat(operandBasicType)); if (bits == 64) { @@ -8142,12 +8158,12 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora zero = builder.makeFloat16Constant(0.0); } zero = makeSmearedConstant(zero, vectorSize); - return builder.createBinOp(spv::OpFUnordNotEqual, destType, operand, zero); + return builder.createBinOp(spv::Op::OpFUnordNotEqual, destType, operand, zero); } } if (operandBasicType == glslang::EbtBool) { uint32_t bits = GetNumBits(resultBasicType); - convOp = spv::OpSelect; + convOp = spv::Op::OpSelect; if (isTypeInt(resultBasicType)) { spv::Id zeroType = isTypeSignedInt(resultBasicType) ? builder.makeIntType(bits) : builder.makeUintType(bits); if (bits == 64) { @@ -8174,17 +8190,17 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora } } - if (convOp == spv::OpNop) { + if (convOp == spv::Op::OpNop) { switch (op) { case glslang::EOpConvUint64ToPtr: - convOp = spv::OpConvertUToPtr; + convOp = spv::Op::OpConvertUToPtr; break; case glslang::EOpConvPtrToUint64: - convOp = spv::OpConvertPtrToU; + convOp = spv::Op::OpConvertPtrToU; break; case glslang::EOpConvPtrToUvec2: case glslang::EOpConvUvec2ToPtr: - convOp = spv::OpBitcast; + convOp = spv::Op::OpBitcast; break; default: @@ -8193,10 +8209,10 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora } spv::Id result = 0; - if (convOp == spv::OpNop) + if (convOp == spv::Op::OpNop) return result; - if (convOp == spv::OpSelect) { + if (convOp == spv::Op::OpSelect) { zero = makeSmearedConstant(zero, vectorSize); one = makeSmearedConstant(one, vectorSize); result = builder.createTriOp(convOp, destType, operand, one, zero); @@ -8225,98 +8241,98 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv spv::Id typeId, std::vector& operands, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags, const glslang::TType &opType) { - spv::Op opCode = spv::OpNop; + spv::Op opCode = spv::Op::OpNop; switch (op) { case glslang::EOpAtomicAdd: case glslang::EOpImageAtomicAdd: case glslang::EOpAtomicCounterAdd: - opCode = spv::OpAtomicIAdd; + opCode = spv::Op::OpAtomicIAdd; if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) { - opCode = spv::OpAtomicFAddEXT; + opCode = spv::Op::OpAtomicFAddEXT; if (typeProxy == glslang::EbtFloat16 && (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) { builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector); - builder.addCapability(spv::CapabilityAtomicFloat16VectorNV); + builder.addCapability(spv::Capability::AtomicFloat16VectorNV); } else { builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_add); if (typeProxy == glslang::EbtFloat16) { builder.addExtension(spv::E_SPV_EXT_shader_atomic_float16_add); - builder.addCapability(spv::CapabilityAtomicFloat16AddEXT); + builder.addCapability(spv::Capability::AtomicFloat16AddEXT); } else if (typeProxy == glslang::EbtFloat) { - builder.addCapability(spv::CapabilityAtomicFloat32AddEXT); + builder.addCapability(spv::Capability::AtomicFloat32AddEXT); } else { - builder.addCapability(spv::CapabilityAtomicFloat64AddEXT); + builder.addCapability(spv::Capability::AtomicFloat64AddEXT); } } } break; case glslang::EOpAtomicSubtract: case glslang::EOpAtomicCounterSubtract: - opCode = spv::OpAtomicISub; + opCode = spv::Op::OpAtomicISub; break; case glslang::EOpAtomicMin: case glslang::EOpImageAtomicMin: case glslang::EOpAtomicCounterMin: if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) { - opCode = spv::OpAtomicFMinEXT; + opCode = spv::Op::OpAtomicFMinEXT; if (typeProxy == glslang::EbtFloat16 && (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) { builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector); - builder.addCapability(spv::CapabilityAtomicFloat16VectorNV); + builder.addCapability(spv::Capability::AtomicFloat16VectorNV); } else { builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max); if (typeProxy == glslang::EbtFloat16) - builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT); + builder.addCapability(spv::Capability::AtomicFloat16MinMaxEXT); else if (typeProxy == glslang::EbtFloat) - builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT); + builder.addCapability(spv::Capability::AtomicFloat32MinMaxEXT); else - builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT); + builder.addCapability(spv::Capability::AtomicFloat64MinMaxEXT); } } else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) { - opCode = spv::OpAtomicUMin; + opCode = spv::Op::OpAtomicUMin; } else { - opCode = spv::OpAtomicSMin; + opCode = spv::Op::OpAtomicSMin; } break; case glslang::EOpAtomicMax: case glslang::EOpImageAtomicMax: case glslang::EOpAtomicCounterMax: if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) { - opCode = spv::OpAtomicFMaxEXT; + opCode = spv::Op::OpAtomicFMaxEXT; if (typeProxy == glslang::EbtFloat16 && (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) { builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector); - builder.addCapability(spv::CapabilityAtomicFloat16VectorNV); + builder.addCapability(spv::Capability::AtomicFloat16VectorNV); } else { builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max); if (typeProxy == glslang::EbtFloat16) - builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT); + builder.addCapability(spv::Capability::AtomicFloat16MinMaxEXT); else if (typeProxy == glslang::EbtFloat) - builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT); + builder.addCapability(spv::Capability::AtomicFloat32MinMaxEXT); else - builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT); + builder.addCapability(spv::Capability::AtomicFloat64MinMaxEXT); } } else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) { - opCode = spv::OpAtomicUMax; + opCode = spv::Op::OpAtomicUMax; } else { - opCode = spv::OpAtomicSMax; + opCode = spv::Op::OpAtomicSMax; } break; case glslang::EOpAtomicAnd: case glslang::EOpImageAtomicAnd: case glslang::EOpAtomicCounterAnd: - opCode = spv::OpAtomicAnd; + opCode = spv::Op::OpAtomicAnd; break; case glslang::EOpAtomicOr: case glslang::EOpImageAtomicOr: case glslang::EOpAtomicCounterOr: - opCode = spv::OpAtomicOr; + opCode = spv::Op::OpAtomicOr; break; case glslang::EOpAtomicXor: case glslang::EOpImageAtomicXor: case glslang::EOpAtomicCounterXor: - opCode = spv::OpAtomicXor; + opCode = spv::Op::OpAtomicXor; break; case glslang::EOpAtomicExchange: case glslang::EOpImageAtomicExchange: @@ -8324,30 +8340,30 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv if ((typeProxy == glslang::EbtFloat16) && (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) { builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector); - builder.addCapability(spv::CapabilityAtomicFloat16VectorNV); + builder.addCapability(spv::Capability::AtomicFloat16VectorNV); } - opCode = spv::OpAtomicExchange; + opCode = spv::Op::OpAtomicExchange; break; case glslang::EOpAtomicCompSwap: case glslang::EOpImageAtomicCompSwap: case glslang::EOpAtomicCounterCompSwap: - opCode = spv::OpAtomicCompareExchange; + opCode = spv::Op::OpAtomicCompareExchange; break; case glslang::EOpAtomicCounterIncrement: - opCode = spv::OpAtomicIIncrement; + opCode = spv::Op::OpAtomicIIncrement; break; case glslang::EOpAtomicCounterDecrement: - opCode = spv::OpAtomicIDecrement; + opCode = spv::Op::OpAtomicIDecrement; break; case glslang::EOpAtomicCounter: case glslang::EOpImageAtomicLoad: case glslang::EOpAtomicLoad: - opCode = spv::OpAtomicLoad; + opCode = spv::Op::OpAtomicLoad; break; case glslang::EOpAtomicStore: case glslang::EOpImageAtomicStore: - opCode = spv::OpAtomicStore; + opCode = spv::Op::OpAtomicStore; break; default: assert(0); @@ -8355,7 +8371,7 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv } if (typeProxy == glslang::EbtInt64 || typeProxy == glslang::EbtUint64) - builder.addCapability(spv::CapabilityInt64Atomics); + builder.addCapability(spv::Capability::Int64Atomics); // Sort out the operands // - mapping from glslang -> SPV @@ -8367,21 +8383,21 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv // scope defaults to Device in the old model, QueueFamilyKHR in the new model spv::Id scopeId; if (glslangIntermediate->usingVulkanMemoryModel()) { - scopeId = builder.makeUintConstant(spv::ScopeQueueFamilyKHR); + scopeId = builder.makeUintConstant(spv::Scope::QueueFamilyKHR); } else { - scopeId = builder.makeUintConstant(spv::ScopeDevice); + scopeId = builder.makeUintConstant(spv::Scope::Device); } // semantics default to relaxed spv::Id semanticsId = builder.makeUintConstant(lvalueCoherentFlags.isVolatile() && glslangIntermediate->usingVulkanMemoryModel() ? - spv::MemorySemanticsVolatileMask : - spv::MemorySemanticsMaskNone); + spv::MemorySemanticsMask::Volatile : + spv::MemorySemanticsMask::MaskNone); spv::Id semanticsId2 = semanticsId; pointerId = operands[0]; - if (opCode == spv::OpAtomicIIncrement || opCode == spv::OpAtomicIDecrement) { + if (opCode == spv::Op::OpAtomicIIncrement || opCode == spv::Op::OpAtomicIDecrement) { // no additional operands - } else if (opCode == spv::OpAtomicCompareExchange) { + } else if (opCode == spv::Op::OpAtomicCompareExchange) { compareId = operands[1]; valueId = operands[2]; if (operands.size() > 3) { @@ -8391,7 +8407,7 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv semanticsId2 = builder.makeUintConstant( builder.getConstantScalar(operands[6]) | builder.getConstantScalar(operands[7])); } - } else if (opCode == spv::OpAtomicLoad) { + } else if (opCode == spv::Op::OpAtomicLoad) { if (operands.size() > 1) { scopeId = operands[1]; semanticsId = builder.makeUintConstant( @@ -8408,20 +8424,21 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv } // Check for capabilities - unsigned semanticsImmediate = builder.getConstantScalar(semanticsId) | builder.getConstantScalar(semanticsId2); - if (semanticsImmediate & (spv::MemorySemanticsMakeAvailableKHRMask | - spv::MemorySemanticsMakeVisibleKHRMask | - spv::MemorySemanticsOutputMemoryKHRMask | - spv::MemorySemanticsVolatileMask)) { - builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + auto const semanticsImmediate = (spv::MemorySemanticsMask)(builder.getConstantScalar(semanticsId) | builder.getConstantScalar(semanticsId2)); + if (anySet(semanticsImmediate, spv::MemorySemanticsMask::MakeAvailableKHR | + spv::MemorySemanticsMask::MakeVisibleKHR | + spv::MemorySemanticsMask::OutputMemoryKHR | + spv::MemorySemanticsMask::Volatile)) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); } - if (builder.getConstantScalar(scopeId) == spv::ScopeQueueFamily) { - builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + auto const scope = (spv::Scope)builder.getConstantScalar(scopeId); + if (scope == spv::Scope::QueueFamily) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); } - if (glslangIntermediate->usingVulkanMemoryModel() && builder.getConstantScalar(scopeId) == spv::ScopeDevice) { - builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR); + if (glslangIntermediate->usingVulkanMemoryModel() && scope == spv::Scope::Device) { + builder.addCapability(spv::Capability::VulkanMemoryModelDeviceScopeKHR); } std::vector spvAtomicOperands; // hold the spv operands @@ -8429,15 +8446,15 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv spvAtomicOperands.push_back(pointerId); spvAtomicOperands.push_back(scopeId); spvAtomicOperands.push_back(semanticsId); - if (opCode == spv::OpAtomicCompareExchange) { + if (opCode == spv::Op::OpAtomicCompareExchange) { spvAtomicOperands.push_back(semanticsId2); spvAtomicOperands.push_back(valueId); spvAtomicOperands.push_back(compareId); - } else if (opCode != spv::OpAtomicLoad && opCode != spv::OpAtomicIIncrement && opCode != spv::OpAtomicIDecrement) { + } else if (opCode != spv::Op::OpAtomicLoad && opCode != spv::Op::OpAtomicIIncrement && opCode != spv::Op::OpAtomicIDecrement) { spvAtomicOperands.push_back(valueId); } - if (opCode == spv::OpAtomicStore) { + if (opCode == spv::Op::OpAtomicStore) { builder.createNoResultOp(opCode, spvAtomicOperands); return 0; } else { @@ -8446,7 +8463,7 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv // GLSL and HLSL atomic-counter decrement return post-decrement value, // while SPIR-V returns pre-decrement value. Translate between these semantics. if (op == glslang::EOpAtomicCounterDecrement) - resultId = builder.createBinOp(spv::OpISub, typeId, resultId, builder.makeIntConstant(1)); + resultId = builder.createBinOp(spv::Op::OpISub, typeId, resultId, builder.makeIntConstant(1)); return resultId; } @@ -8459,21 +8476,21 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op bool isUnsigned = isTypeUnsignedInt(typeProxy); bool isFloat = isTypeFloat(typeProxy); - spv::Op opCode = spv::OpNop; + spv::Op opCode = spv::Op::OpNop; std::vector spvGroupOperands; - spv::GroupOperation groupOperation = spv::GroupOperationMax; + spv::GroupOperation groupOperation = spv::GroupOperation::Max; if (op == glslang::EOpBallot || op == glslang::EOpReadFirstInvocation || op == glslang::EOpReadInvocation) { builder.addExtension(spv::E_SPV_KHR_shader_ballot); - builder.addCapability(spv::CapabilitySubgroupBallotKHR); + builder.addCapability(spv::Capability::SubgroupBallotKHR); } else if (op == glslang::EOpAnyInvocation || op == glslang::EOpAllInvocations || op == glslang::EOpAllInvocationsEqual) { builder.addExtension(spv::E_SPV_KHR_subgroup_vote); - builder.addCapability(spv::CapabilitySubgroupVoteKHR); + builder.addCapability(spv::Capability::SubgroupVoteKHR); } else { - builder.addCapability(spv::CapabilityGroups); + builder.addCapability(spv::Capability::Groups); if (op == glslang::EOpMinInvocationsNonUniform || op == glslang::EOpMaxInvocationsNonUniform || op == glslang::EOpAddInvocationsNonUniform || @@ -8492,7 +8509,7 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op case glslang::EOpMinInvocationsNonUniform: case glslang::EOpMaxInvocationsNonUniform: case glslang::EOpAddInvocationsNonUniform: - groupOperation = spv::GroupOperationReduce; + groupOperation = spv::GroupOperation::Reduce; break; case glslang::EOpMinInvocationsInclusiveScan: case glslang::EOpMaxInvocationsInclusiveScan: @@ -8500,7 +8517,7 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op case glslang::EOpMinInvocationsInclusiveScanNonUniform: case glslang::EOpMaxInvocationsInclusiveScanNonUniform: case glslang::EOpAddInvocationsInclusiveScanNonUniform: - groupOperation = spv::GroupOperationInclusiveScan; + groupOperation = spv::GroupOperation::InclusiveScan; break; case glslang::EOpMinInvocationsExclusiveScan: case glslang::EOpMaxInvocationsExclusiveScan: @@ -8508,14 +8525,14 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op case glslang::EOpMinInvocationsExclusiveScanNonUniform: case glslang::EOpMaxInvocationsExclusiveScanNonUniform: case glslang::EOpAddInvocationsExclusiveScanNonUniform: - groupOperation = spv::GroupOperationExclusiveScan; + groupOperation = spv::GroupOperation::ExclusiveScan; break; default: break; } - spv::IdImmediate scope = { true, builder.makeUintConstant(spv::ScopeSubgroup) }; + spv::IdImmediate scope = { true, builder.makeUintConstant(spv::Scope::Subgroup) }; spvGroupOperands.push_back(scope); - if (groupOperation != spv::GroupOperationMax) { + if (groupOperation != spv::GroupOperation::Max) { spv::IdImmediate groupOp = { false, (unsigned)groupOperation }; spvGroupOperands.push_back(groupOp); } @@ -8528,21 +8545,21 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op switch (op) { case glslang::EOpAnyInvocation: - opCode = spv::OpSubgroupAnyKHR; + opCode = spv::Op::OpSubgroupAnyKHR; break; case glslang::EOpAllInvocations: - opCode = spv::OpSubgroupAllKHR; + opCode = spv::Op::OpSubgroupAllKHR; break; case glslang::EOpAllInvocationsEqual: - opCode = spv::OpSubgroupAllEqualKHR; + opCode = spv::Op::OpSubgroupAllEqualKHR; break; case glslang::EOpReadInvocation: - opCode = spv::OpSubgroupReadInvocationKHR; + opCode = spv::Op::OpSubgroupReadInvocationKHR; if (builder.isVectorType(typeId)) return CreateInvocationsVectorOperation(opCode, groupOperation, typeId, operands); break; case glslang::EOpReadFirstInvocation: - opCode = spv::OpSubgroupFirstInvocationKHR; + opCode = spv::Op::OpSubgroupFirstInvocationKHR; if (builder.isVectorType(typeId)) return CreateInvocationsVectorOperation(opCode, groupOperation, typeId, operands); break; @@ -8556,14 +8573,14 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op // spv::Id uintType = builder.makeUintType(32); spv::Id uvec4Type = builder.makeVectorType(uintType, 4); - spv::Id result = builder.createOp(spv::OpSubgroupBallotKHR, uvec4Type, spvGroupOperands); + spv::Id result = builder.createOp(spv::Op::OpSubgroupBallotKHR, uvec4Type, spvGroupOperands); std::vector components; components.push_back(builder.createCompositeExtract(result, uintType, 0)); components.push_back(builder.createCompositeExtract(result, uintType, 1)); spv::Id uvec2Type = builder.makeVectorType(uintType, 2); - return builder.createUnaryOp(spv::OpBitcast, typeId, + return builder.createUnaryOp(spv::Op::OpBitcast, typeId, builder.createCompositeConstruct(uvec2Type, components)); } @@ -8580,29 +8597,29 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op op == glslang::EOpMinInvocationsInclusiveScan || op == glslang::EOpMinInvocationsExclusiveScan) { if (isFloat) - opCode = spv::OpGroupFMin; + opCode = spv::Op::OpGroupFMin; else { if (isUnsigned) - opCode = spv::OpGroupUMin; + opCode = spv::Op::OpGroupUMin; else - opCode = spv::OpGroupSMin; + opCode = spv::Op::OpGroupSMin; } } else if (op == glslang::EOpMaxInvocations || op == glslang::EOpMaxInvocationsInclusiveScan || op == glslang::EOpMaxInvocationsExclusiveScan) { if (isFloat) - opCode = spv::OpGroupFMax; + opCode = spv::Op::OpGroupFMax; else { if (isUnsigned) - opCode = spv::OpGroupUMax; + opCode = spv::Op::OpGroupUMax; else - opCode = spv::OpGroupSMax; + opCode = spv::Op::OpGroupSMax; } } else { if (isFloat) - opCode = spv::OpGroupFAdd; + opCode = spv::Op::OpGroupFAdd; else - opCode = spv::OpGroupIAdd; + opCode = spv::Op::OpGroupIAdd; } if (builder.isVectorType(typeId)) @@ -8622,31 +8639,31 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op op == glslang::EOpMinInvocationsInclusiveScanNonUniform || op == glslang::EOpMinInvocationsExclusiveScanNonUniform) { if (isFloat) - opCode = spv::OpGroupFMinNonUniformAMD; + opCode = spv::Op::OpGroupFMinNonUniformAMD; else { if (isUnsigned) - opCode = spv::OpGroupUMinNonUniformAMD; + opCode = spv::Op::OpGroupUMinNonUniformAMD; else - opCode = spv::OpGroupSMinNonUniformAMD; + opCode = spv::Op::OpGroupSMinNonUniformAMD; } } else if (op == glslang::EOpMaxInvocationsNonUniform || op == glslang::EOpMaxInvocationsInclusiveScanNonUniform || op == glslang::EOpMaxInvocationsExclusiveScanNonUniform) { if (isFloat) - opCode = spv::OpGroupFMaxNonUniformAMD; + opCode = spv::Op::OpGroupFMaxNonUniformAMD; else { if (isUnsigned) - opCode = spv::OpGroupUMaxNonUniformAMD; + opCode = spv::Op::OpGroupUMaxNonUniformAMD; else - opCode = spv::OpGroupSMaxNonUniformAMD; + opCode = spv::Op::OpGroupSMaxNonUniformAMD; } } else { if (isFloat) - opCode = spv::OpGroupFAddNonUniformAMD; + opCode = spv::Op::OpGroupFAddNonUniformAMD; else - opCode = spv::OpGroupIAddNonUniformAMD; + opCode = spv::Op::OpGroupIAddNonUniformAMD; } if (builder.isVectorType(typeId)) @@ -8658,7 +8675,7 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op return spv::NoResult; } - assert(opCode != spv::OpNop); + assert(opCode != spv::Op::OpNop); return builder.createOp(opCode, typeId, spvGroupOperands); } @@ -8666,15 +8683,15 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv::GroupOperation groupOperation, spv::Id typeId, std::vector& operands) { - assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin || - op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax || - op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast || - op == spv::OpSubgroupReadInvocationKHR || op == spv::OpSubgroupFirstInvocationKHR || - op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD || - op == spv::OpGroupSMinNonUniformAMD || - op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD || - op == spv::OpGroupSMaxNonUniformAMD || - op == spv::OpGroupFAddNonUniformAMD || op == spv::OpGroupIAddNonUniformAMD); + assert(op == spv::Op::OpGroupFMin || op == spv::Op::OpGroupUMin || op == spv::Op::OpGroupSMin || + op == spv::Op::OpGroupFMax || op == spv::Op::OpGroupUMax || op == spv::Op::OpGroupSMax || + op == spv::Op::OpGroupFAdd || op == spv::Op::OpGroupIAdd || op == spv::Op::OpGroupBroadcast || + op == spv::Op::OpSubgroupReadInvocationKHR || op == spv::Op::OpSubgroupFirstInvocationKHR || + op == spv::Op::OpGroupFMinNonUniformAMD || op == spv::Op::OpGroupUMinNonUniformAMD || + op == spv::Op::OpGroupSMinNonUniformAMD || + op == spv::Op::OpGroupFMaxNonUniformAMD || op == spv::Op::OpGroupUMaxNonUniformAMD || + op == spv::Op::OpGroupSMaxNonUniformAMD || + op == spv::Op::OpGroupFAddNonUniformAMD || op == spv::Op::OpGroupIAddNonUniformAMD); // Handle group invocation operations scalar by scalar. // The result type is the same type as the original type. @@ -8694,20 +8711,20 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv indexes.push_back(comp); spv::IdImmediate scalar = { true, builder.createCompositeExtract(operands[0], scalarType, indexes) }; std::vector spvGroupOperands; - if (op == spv::OpSubgroupReadInvocationKHR) { + if (op == spv::Op::OpSubgroupReadInvocationKHR) { spvGroupOperands.push_back(scalar); spv::IdImmediate operand = { true, operands[1] }; spvGroupOperands.push_back(operand); - } else if (op == spv::OpSubgroupFirstInvocationKHR) { + } else if (op == spv::Op::OpSubgroupFirstInvocationKHR) { spvGroupOperands.push_back(scalar); - } else if (op == spv::OpGroupBroadcast) { - spv::IdImmediate scope = { true, builder.makeUintConstant(spv::ScopeSubgroup) }; + } else if (op == spv::Op::OpGroupBroadcast) { + spv::IdImmediate scope = { true, builder.makeUintConstant(spv::Scope::Subgroup) }; spvGroupOperands.push_back(scope); spvGroupOperands.push_back(scalar); spv::IdImmediate operand = { true, operands[1] }; spvGroupOperands.push_back(operand); } else { - spv::IdImmediate scope = { true, builder.makeUintConstant(spv::ScopeSubgroup) }; + spv::IdImmediate scope = { true, builder.makeUintConstant(spv::Scope::Subgroup) }; spvGroupOperands.push_back(scope); spv::IdImmediate groupOp = { false, (unsigned)groupOperation }; spvGroupOperands.push_back(groupOp); @@ -8728,18 +8745,18 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s // Add the required capabilities. switch (op) { case glslang::EOpSubgroupElect: - builder.addCapability(spv::CapabilityGroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniform); break; case glslang::EOpSubgroupQuadAll: case glslang::EOpSubgroupQuadAny: builder.addExtension(spv::E_SPV_KHR_quad_control); - builder.addCapability(spv::CapabilityQuadControlKHR); + builder.addCapability(spv::Capability::QuadControlKHR); [[fallthrough]]; case glslang::EOpSubgroupAll: case glslang::EOpSubgroupAny: case glslang::EOpSubgroupAllEqual: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformVote); + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformVote); break; case glslang::EOpSubgroupBroadcast: case glslang::EOpSubgroupBroadcastFirst: @@ -8751,23 +8768,23 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupBallotExclusiveBitCount: case glslang::EOpSubgroupBallotFindLSB: case glslang::EOpSubgroupBallotFindMSB: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformBallot); + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformBallot); break; case glslang::EOpSubgroupRotate: case glslang::EOpSubgroupClusteredRotate: builder.addExtension(spv::E_SPV_KHR_subgroup_rotate); - builder.addCapability(spv::CapabilityGroupNonUniformRotateKHR); + builder.addCapability(spv::Capability::GroupNonUniformRotateKHR); break; case glslang::EOpSubgroupShuffle: case glslang::EOpSubgroupShuffleXor: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformShuffle); + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformShuffle); break; case glslang::EOpSubgroupShuffleUp: case glslang::EOpSubgroupShuffleDown: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformShuffleRelative); + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformShuffleRelative); break; case glslang::EOpSubgroupAdd: case glslang::EOpSubgroupMul: @@ -8790,8 +8807,8 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupExclusiveAnd: case glslang::EOpSubgroupExclusiveOr: case glslang::EOpSubgroupExclusiveXor: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformArithmetic); + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformArithmetic); break; case glslang::EOpSubgroupClusteredAdd: case glslang::EOpSubgroupClusteredMul: @@ -8800,15 +8817,15 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupClusteredAnd: case glslang::EOpSubgroupClusteredOr: case glslang::EOpSubgroupClusteredXor: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformClustered); + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformClustered); break; case glslang::EOpSubgroupQuadBroadcast: case glslang::EOpSubgroupQuadSwapHorizontal: case glslang::EOpSubgroupQuadSwapVertical: case glslang::EOpSubgroupQuadSwapDiagonal: - builder.addCapability(spv::CapabilityGroupNonUniform); - builder.addCapability(spv::CapabilityGroupNonUniformQuad); + builder.addCapability(spv::Capability::GroupNonUniform); + builder.addCapability(spv::Capability::GroupNonUniformQuad); break; case glslang::EOpSubgroupPartitionedAdd: case glslang::EOpSubgroupPartitionedMul: @@ -8832,7 +8849,7 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedExclusiveOr: case glslang::EOpSubgroupPartitionedExclusiveXor: builder.addExtension(spv::E_SPV_NV_shader_subgroup_partitioned); - builder.addCapability(spv::CapabilityGroupNonUniformPartitionedNV); + builder.addCapability(spv::Capability::GroupNonUniformPartitionedNV); break; default: assert(0 && "Unhandled subgroup operation!"); } @@ -8842,32 +8859,32 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s const bool isFloat = isTypeFloat(typeProxy); const bool isBool = typeProxy == glslang::EbtBool; - spv::Op opCode = spv::OpNop; + spv::Op opCode = spv::Op::OpNop; // Figure out which opcode to use. switch (op) { - case glslang::EOpSubgroupElect: opCode = spv::OpGroupNonUniformElect; break; - case glslang::EOpSubgroupQuadAll: opCode = spv::OpGroupNonUniformQuadAllKHR; break; - case glslang::EOpSubgroupAll: opCode = spv::OpGroupNonUniformAll; break; - case glslang::EOpSubgroupQuadAny: opCode = spv::OpGroupNonUniformQuadAnyKHR; break; - case glslang::EOpSubgroupAny: opCode = spv::OpGroupNonUniformAny; break; - case glslang::EOpSubgroupAllEqual: opCode = spv::OpGroupNonUniformAllEqual; break; - case glslang::EOpSubgroupBroadcast: opCode = spv::OpGroupNonUniformBroadcast; break; - case glslang::EOpSubgroupBroadcastFirst: opCode = spv::OpGroupNonUniformBroadcastFirst; break; - case glslang::EOpSubgroupBallot: opCode = spv::OpGroupNonUniformBallot; break; - case glslang::EOpSubgroupInverseBallot: opCode = spv::OpGroupNonUniformInverseBallot; break; - case glslang::EOpSubgroupBallotBitExtract: opCode = spv::OpGroupNonUniformBallotBitExtract; break; + case glslang::EOpSubgroupElect: opCode = spv::Op::OpGroupNonUniformElect; break; + case glslang::EOpSubgroupQuadAll: opCode = spv::Op::OpGroupNonUniformQuadAllKHR; break; + case glslang::EOpSubgroupAll: opCode = spv::Op::OpGroupNonUniformAll; break; + case glslang::EOpSubgroupQuadAny: opCode = spv::Op::OpGroupNonUniformQuadAnyKHR; break; + case glslang::EOpSubgroupAny: opCode = spv::Op::OpGroupNonUniformAny; break; + case glslang::EOpSubgroupAllEqual: opCode = spv::Op::OpGroupNonUniformAllEqual; break; + case glslang::EOpSubgroupBroadcast: opCode = spv::Op::OpGroupNonUniformBroadcast; break; + case glslang::EOpSubgroupBroadcastFirst: opCode = spv::Op::OpGroupNonUniformBroadcastFirst; break; + case glslang::EOpSubgroupBallot: opCode = spv::Op::OpGroupNonUniformBallot; break; + case glslang::EOpSubgroupInverseBallot: opCode = spv::Op::OpGroupNonUniformInverseBallot; break; + case glslang::EOpSubgroupBallotBitExtract: opCode = spv::Op::OpGroupNonUniformBallotBitExtract; break; case glslang::EOpSubgroupBallotBitCount: case glslang::EOpSubgroupBallotInclusiveBitCount: - case glslang::EOpSubgroupBallotExclusiveBitCount: opCode = spv::OpGroupNonUniformBallotBitCount; break; - case glslang::EOpSubgroupBallotFindLSB: opCode = spv::OpGroupNonUniformBallotFindLSB; break; - case glslang::EOpSubgroupBallotFindMSB: opCode = spv::OpGroupNonUniformBallotFindMSB; break; - case glslang::EOpSubgroupShuffle: opCode = spv::OpGroupNonUniformShuffle; break; - case glslang::EOpSubgroupShuffleXor: opCode = spv::OpGroupNonUniformShuffleXor; break; - case glslang::EOpSubgroupShuffleUp: opCode = spv::OpGroupNonUniformShuffleUp; break; - case glslang::EOpSubgroupShuffleDown: opCode = spv::OpGroupNonUniformShuffleDown; break; + case glslang::EOpSubgroupBallotExclusiveBitCount: opCode = spv::Op::OpGroupNonUniformBallotBitCount; break; + case glslang::EOpSubgroupBallotFindLSB: opCode = spv::Op::OpGroupNonUniformBallotFindLSB; break; + case glslang::EOpSubgroupBallotFindMSB: opCode = spv::Op::OpGroupNonUniformBallotFindMSB; break; + case glslang::EOpSubgroupShuffle: opCode = spv::Op::OpGroupNonUniformShuffle; break; + case glslang::EOpSubgroupShuffleXor: opCode = spv::Op::OpGroupNonUniformShuffleXor; break; + case glslang::EOpSubgroupShuffleUp: opCode = spv::Op::OpGroupNonUniformShuffleUp; break; + case glslang::EOpSubgroupShuffleDown: opCode = spv::Op::OpGroupNonUniformShuffleDown; break; case glslang::EOpSubgroupRotate: - case glslang::EOpSubgroupClusteredRotate: opCode = spv::OpGroupNonUniformRotateKHR; break; + case glslang::EOpSubgroupClusteredRotate: opCode = spv::Op::OpGroupNonUniformRotateKHR; break; case glslang::EOpSubgroupAdd: case glslang::EOpSubgroupInclusiveAdd: case glslang::EOpSubgroupExclusiveAdd: @@ -8876,9 +8893,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedInclusiveAdd: case glslang::EOpSubgroupPartitionedExclusiveAdd: if (isFloat) { - opCode = spv::OpGroupNonUniformFAdd; + opCode = spv::Op::OpGroupNonUniformFAdd; } else { - opCode = spv::OpGroupNonUniformIAdd; + opCode = spv::Op::OpGroupNonUniformIAdd; } break; case glslang::EOpSubgroupMul: @@ -8889,9 +8906,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedInclusiveMul: case glslang::EOpSubgroupPartitionedExclusiveMul: if (isFloat) { - opCode = spv::OpGroupNonUniformFMul; + opCode = spv::Op::OpGroupNonUniformFMul; } else { - opCode = spv::OpGroupNonUniformIMul; + opCode = spv::Op::OpGroupNonUniformIMul; } break; case glslang::EOpSubgroupMin: @@ -8902,11 +8919,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedInclusiveMin: case glslang::EOpSubgroupPartitionedExclusiveMin: if (isFloat) { - opCode = spv::OpGroupNonUniformFMin; + opCode = spv::Op::OpGroupNonUniformFMin; } else if (isUnsigned) { - opCode = spv::OpGroupNonUniformUMin; + opCode = spv::Op::OpGroupNonUniformUMin; } else { - opCode = spv::OpGroupNonUniformSMin; + opCode = spv::Op::OpGroupNonUniformSMin; } break; case glslang::EOpSubgroupMax: @@ -8917,11 +8934,11 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedInclusiveMax: case glslang::EOpSubgroupPartitionedExclusiveMax: if (isFloat) { - opCode = spv::OpGroupNonUniformFMax; + opCode = spv::Op::OpGroupNonUniformFMax; } else if (isUnsigned) { - opCode = spv::OpGroupNonUniformUMax; + opCode = spv::Op::OpGroupNonUniformUMax; } else { - opCode = spv::OpGroupNonUniformSMax; + opCode = spv::Op::OpGroupNonUniformSMax; } break; case glslang::EOpSubgroupAnd: @@ -8932,9 +8949,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedInclusiveAnd: case glslang::EOpSubgroupPartitionedExclusiveAnd: if (isBool) { - opCode = spv::OpGroupNonUniformLogicalAnd; + opCode = spv::Op::OpGroupNonUniformLogicalAnd; } else { - opCode = spv::OpGroupNonUniformBitwiseAnd; + opCode = spv::Op::OpGroupNonUniformBitwiseAnd; } break; case glslang::EOpSubgroupOr: @@ -8945,9 +8962,9 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedInclusiveOr: case glslang::EOpSubgroupPartitionedExclusiveOr: if (isBool) { - opCode = spv::OpGroupNonUniformLogicalOr; + opCode = spv::Op::OpGroupNonUniformLogicalOr; } else { - opCode = spv::OpGroupNonUniformBitwiseOr; + opCode = spv::Op::OpGroupNonUniformBitwiseOr; } break; case glslang::EOpSubgroupXor: @@ -8958,20 +8975,20 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedInclusiveXor: case glslang::EOpSubgroupPartitionedExclusiveXor: if (isBool) { - opCode = spv::OpGroupNonUniformLogicalXor; + opCode = spv::Op::OpGroupNonUniformLogicalXor; } else { - opCode = spv::OpGroupNonUniformBitwiseXor; + opCode = spv::Op::OpGroupNonUniformBitwiseXor; } break; - case glslang::EOpSubgroupQuadBroadcast: opCode = spv::OpGroupNonUniformQuadBroadcast; break; + case glslang::EOpSubgroupQuadBroadcast: opCode = spv::Op::OpGroupNonUniformQuadBroadcast; break; case glslang::EOpSubgroupQuadSwapHorizontal: case glslang::EOpSubgroupQuadSwapVertical: - case glslang::EOpSubgroupQuadSwapDiagonal: opCode = spv::OpGroupNonUniformQuadSwap; break; + case glslang::EOpSubgroupQuadSwapDiagonal: opCode = spv::Op::OpGroupNonUniformQuadSwap; break; default: assert(0 && "Unhandled subgroup operation!"); } // get the right Group Operation - spv::GroupOperation groupOperation = spv::GroupOperationMax; + spv::GroupOperation groupOperation = spv::GroupOperation::Max; switch (op) { default: break; @@ -8983,7 +9000,7 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupAnd: case glslang::EOpSubgroupOr: case glslang::EOpSubgroupXor: - groupOperation = spv::GroupOperationReduce; + groupOperation = spv::GroupOperation::Reduce; break; case glslang::EOpSubgroupBallotInclusiveBitCount: case glslang::EOpSubgroupInclusiveAdd: @@ -8993,7 +9010,7 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupInclusiveAnd: case glslang::EOpSubgroupInclusiveOr: case glslang::EOpSubgroupInclusiveXor: - groupOperation = spv::GroupOperationInclusiveScan; + groupOperation = spv::GroupOperation::InclusiveScan; break; case glslang::EOpSubgroupBallotExclusiveBitCount: case glslang::EOpSubgroupExclusiveAdd: @@ -9003,7 +9020,7 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupExclusiveAnd: case glslang::EOpSubgroupExclusiveOr: case glslang::EOpSubgroupExclusiveXor: - groupOperation = spv::GroupOperationExclusiveScan; + groupOperation = spv::GroupOperation::ExclusiveScan; break; case glslang::EOpSubgroupClusteredAdd: case glslang::EOpSubgroupClusteredMul: @@ -9012,7 +9029,7 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupClusteredAnd: case glslang::EOpSubgroupClusteredOr: case glslang::EOpSubgroupClusteredXor: - groupOperation = spv::GroupOperationClusteredReduce; + groupOperation = spv::GroupOperation::ClusteredReduce; break; case glslang::EOpSubgroupPartitionedAdd: case glslang::EOpSubgroupPartitionedMul: @@ -9021,7 +9038,7 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedAnd: case glslang::EOpSubgroupPartitionedOr: case glslang::EOpSubgroupPartitionedXor: - groupOperation = spv::GroupOperationPartitionedReduceNV; + groupOperation = spv::GroupOperation::PartitionedReduceNV; break; case glslang::EOpSubgroupPartitionedInclusiveAdd: case glslang::EOpSubgroupPartitionedInclusiveMul: @@ -9030,7 +9047,7 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedInclusiveAnd: case glslang::EOpSubgroupPartitionedInclusiveOr: case glslang::EOpSubgroupPartitionedInclusiveXor: - groupOperation = spv::GroupOperationPartitionedInclusiveScanNV; + groupOperation = spv::GroupOperation::PartitionedInclusiveScanNV; break; case glslang::EOpSubgroupPartitionedExclusiveAdd: case glslang::EOpSubgroupPartitionedExclusiveMul: @@ -9039,7 +9056,7 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s case glslang::EOpSubgroupPartitionedExclusiveAnd: case glslang::EOpSubgroupPartitionedExclusiveOr: case glslang::EOpSubgroupPartitionedExclusiveXor: - groupOperation = spv::GroupOperationPartitionedExclusiveScanNV; + groupOperation = spv::GroupOperation::PartitionedExclusiveScanNV; break; } @@ -9047,14 +9064,14 @@ spv::Id TGlslangToSpvTraverser::createSubgroupOperation(glslang::TOperator op, s std::vector spvGroupOperands; // Every operation begins with the Execution Scope operand. - spv::IdImmediate executionScope = { true, builder.makeUintConstant(spv::ScopeSubgroup) }; + spv::IdImmediate executionScope = { true, builder.makeUintConstant(spv::Scope::Subgroup) }; // All other ops need the execution scope. Quad Control Ops don't need scope, it's always Quad. - if (opCode != spv::OpGroupNonUniformQuadAllKHR && opCode != spv::OpGroupNonUniformQuadAnyKHR) { + if (opCode != spv::Op::OpGroupNonUniformQuadAllKHR && opCode != spv::Op::OpGroupNonUniformQuadAnyKHR) { spvGroupOperands.push_back(executionScope); } // Next, for all operations that use a Group Operation, push that as an operand. - if (groupOperation != spv::GroupOperationMax) { + if (groupOperation != spv::GroupOperation::Max) { spv::IdImmediate groupOperand = { false, (unsigned)groupOperation }; spvGroupOperands.push_back(groupOperand); } @@ -9087,7 +9104,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: bool isUnsigned = isTypeUnsignedInt(typeProxy); bool isFloat = isTypeFloat(typeProxy); - spv::Op opCode = spv::OpNop; + spv::Op opCode = spv::Op::OpNop; int extBuiltins = -1; int libCall = -1; size_t consumedOperands = operands.size(); @@ -9138,27 +9155,31 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: if (builder.isFloatType(builder.getScalarTypeId(typeId0)) || // HLSL supports dot(int,int) which is just a multiply glslangIntermediate->getSource() == glslang::EShSourceHlsl) { - opCode = spv::OpDot; + if (typeProxy == glslang::EbtBFloat16) { + builder.addExtension(spv::E_SPV_KHR_bfloat16); + builder.addCapability(spv::Capability::BFloat16DotProductKHR); + } + opCode = spv::Op::OpDot; } else { builder.addExtension(spv::E_SPV_KHR_integer_dot_product); - builder.addCapability(spv::CapabilityDotProductKHR); + builder.addCapability(spv::Capability::DotProductKHR); const unsigned int vectorSize = builder.getNumComponents(operands[0]); if (op == glslang::EOpDotPackedEXT || op == glslang::EOpDotPackedAccSatEXT) { - builder.addCapability(spv::CapabilityDotProductInput4x8BitPackedKHR); + builder.addCapability(spv::Capability::DotProductInput4x8BitPackedKHR); } else if (vectorSize == 4 && builder.getScalarTypeWidth(typeId0) == 8) { - builder.addCapability(spv::CapabilityDotProductInput4x8BitKHR); + builder.addCapability(spv::Capability::DotProductInput4x8BitKHR); } else { - builder.addCapability(spv::CapabilityDotProductInputAllKHR); + builder.addCapability(spv::Capability::DotProductInputAllKHR); } const bool type0isSigned = builder.isIntType(builder.getScalarTypeId(typeId0)); const bool type1isSigned = builder.isIntType(builder.getScalarTypeId(typeId1)); const bool accSat = (op == glslang::EOpDotAccSatEXT || op == glslang::EOpDotPackedAccSatEXT); if (!type0isSigned && !type1isSigned) { - opCode = accSat ? spv::OpUDotAccSatKHR : spv::OpUDotKHR; + opCode = accSat ? spv::Op::OpUDotAccSatKHR : spv::Op::OpUDotKHR; } else if (type0isSigned && type1isSigned) { - opCode = accSat ? spv::OpSDotAccSatKHR : spv::OpSDotKHR; + opCode = accSat ? spv::Op::OpSDotAccSatKHR : spv::Op::OpSDotKHR; } else { - opCode = accSat ? spv::OpSUDotAccSatKHR : spv::OpSUDotKHR; + opCode = accSat ? spv::Op::OpSUDotAccSatKHR : spv::Op::OpSUDotKHR; // the spir-v opcode assumes the operands to be "signed, unsigned" in that order, so swap if needed if (type1isSigned) { std::swap(operands[0], operands[1]); @@ -9194,7 +9215,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: assert(isFloat); libCall = spv::GLSLstd450FMix; } else { - opCode = spv::OpSelect; + opCode = spv::Op::OpSelect; std::swap(operands.front(), operands.back()); } builder.promoteScalar(precision, operands.front(), operands.back()); @@ -9229,20 +9250,20 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: // This is for the extended controlBarrier function, with four operands. // The unextended barrier() goes through createNoArgOperation. assert(operands.size() == 4); - unsigned int executionScope = builder.getConstantScalar(operands[0]); - unsigned int memoryScope = builder.getConstantScalar(operands[1]); - unsigned int semantics = builder.getConstantScalar(operands[2]) | builder.getConstantScalar(operands[3]); - builder.createControlBarrier((spv::Scope)executionScope, (spv::Scope)memoryScope, - (spv::MemorySemanticsMask)semantics); - if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | - spv::MemorySemanticsMakeVisibleKHRMask | - spv::MemorySemanticsOutputMemoryKHRMask | - spv::MemorySemanticsVolatileMask)) { - builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + 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.createControlBarrier(executionScope, memoryScope, + semantics); + if (anySet(semantics, spv::MemorySemanticsMask::MakeAvailableKHR | + spv::MemorySemanticsMask::MakeVisibleKHR | + spv::MemorySemanticsMask::OutputMemoryKHR | + spv::MemorySemanticsMask::Volatile)) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); } - if (glslangIntermediate->usingVulkanMemoryModel() && (executionScope == spv::ScopeDevice || - memoryScope == spv::ScopeDevice)) { - builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR); + if (glslangIntermediate->usingVulkanMemoryModel() && (executionScope == spv::Scope::Device || + memoryScope == spv::Scope::Device)) { + builder.addCapability(spv::Capability::VulkanMemoryModelDeviceScopeKHR); } return 0; } @@ -9252,17 +9273,17 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: // This is for the extended memoryBarrier function, with three operands. // The unextended memoryBarrier() goes through createNoArgOperation. assert(operands.size() == 3); - unsigned int memoryScope = builder.getConstantScalar(operands[0]); - unsigned int semantics = builder.getConstantScalar(operands[1]) | builder.getConstantScalar(operands[2]); - builder.createMemoryBarrier((spv::Scope)memoryScope, (spv::MemorySemanticsMask)semantics); - if (semantics & (spv::MemorySemanticsMakeAvailableKHRMask | - spv::MemorySemanticsMakeVisibleKHRMask | - spv::MemorySemanticsOutputMemoryKHRMask | - spv::MemorySemanticsVolatileMask)) { - builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + auto const memoryScope = (spv::Scope)builder.getConstantScalar(operands[0]); + auto const semantics = (spv::MemorySemanticsMask)(builder.getConstantScalar(operands[1]) | builder.getConstantScalar(operands[2])); + builder.createMemoryBarrier(memoryScope, semantics); + if (anySet(semantics, spv::MemorySemanticsMask::MakeAvailableKHR | + spv::MemorySemanticsMask::MakeVisibleKHR | + spv::MemorySemanticsMask::OutputMemoryKHR | + spv::MemorySemanticsMask::Volatile)) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); } - if (glslangIntermediate->usingVulkanMemoryModel() && memoryScope == spv::ScopeDevice) { - builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR); + if (glslangIntermediate->usingVulkanMemoryModel() && memoryScope == spv::Scope::Device) { + builder.addCapability(spv::Capability::VulkanMemoryModelDeviceScopeKHR); } return 0; } @@ -9279,33 +9300,33 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: libCall = spv::GLSLstd450InterpolateAtOffset; break; case glslang::EOpAddCarry: - opCode = spv::OpIAddCarry; + opCode = spv::Op::OpIAddCarry; typeId = builder.makeStructResultType(typeId0, typeId0); consumedOperands = 2; break; case glslang::EOpSubBorrow: - opCode = spv::OpISubBorrow; + opCode = spv::Op::OpISubBorrow; typeId = builder.makeStructResultType(typeId0, typeId0); consumedOperands = 2; break; case glslang::EOpUMulExtended: - opCode = spv::OpUMulExtended; + opCode = spv::Op::OpUMulExtended; typeId = builder.makeStructResultType(typeId0, typeId0); consumedOperands = 2; break; case glslang::EOpIMulExtended: - opCode = spv::OpSMulExtended; + opCode = spv::Op::OpSMulExtended; typeId = builder.makeStructResultType(typeId0, typeId0); consumedOperands = 2; break; case glslang::EOpBitfieldExtract: if (isUnsigned) - opCode = spv::OpBitFieldUExtract; + opCode = spv::Op::OpBitFieldUExtract; else - opCode = spv::OpBitFieldSExtract; + opCode = spv::Op::OpBitFieldSExtract; break; case glslang::EOpBitfieldInsert: - opCode = spv::OpBitFieldInsert; + opCode = spv::Op::OpBitFieldInsert; break; case glslang::EOpFma: @@ -9431,276 +9452,276 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: case glslang::EOpReportIntersection: typeId = builder.makeBoolType(); - opCode = spv::OpReportIntersectionKHR; + opCode = spv::Op::OpReportIntersectionKHR; break; case glslang::EOpTraceNV: - builder.createNoResultOp(spv::OpTraceNV, operands); + builder.createNoResultOp(spv::Op::OpTraceNV, operands); return 0; case glslang::EOpTraceRayMotionNV: builder.addExtension(spv::E_SPV_NV_ray_tracing_motion_blur); - builder.addCapability(spv::CapabilityRayTracingMotionBlurNV); - builder.createNoResultOp(spv::OpTraceRayMotionNV, operands); + builder.addCapability(spv::Capability::RayTracingMotionBlurNV); + builder.createNoResultOp(spv::Op::OpTraceRayMotionNV, operands); return 0; case glslang::EOpTraceKHR: - builder.createNoResultOp(spv::OpTraceRayKHR, operands); + builder.createNoResultOp(spv::Op::OpTraceRayKHR, operands); return 0; case glslang::EOpExecuteCallableNV: - builder.createNoResultOp(spv::OpExecuteCallableNV, operands); + builder.createNoResultOp(spv::Op::OpExecuteCallableNV, operands); return 0; case glslang::EOpExecuteCallableKHR: - builder.createNoResultOp(spv::OpExecuteCallableKHR, operands); + builder.createNoResultOp(spv::Op::OpExecuteCallableKHR, operands); return 0; case glslang::EOpRayQueryInitialize: - builder.createNoResultOp(spv::OpRayQueryInitializeKHR, operands); + builder.createNoResultOp(spv::Op::OpRayQueryInitializeKHR, operands); return 0; case glslang::EOpRayQueryTerminate: - builder.createNoResultOp(spv::OpRayQueryTerminateKHR, operands); + builder.createNoResultOp(spv::Op::OpRayQueryTerminateKHR, operands); return 0; case glslang::EOpRayQueryGenerateIntersection: - builder.createNoResultOp(spv::OpRayQueryGenerateIntersectionKHR, operands); + builder.createNoResultOp(spv::Op::OpRayQueryGenerateIntersectionKHR, operands); return 0; case glslang::EOpRayQueryConfirmIntersection: - builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR, operands); + builder.createNoResultOp(spv::Op::OpRayQueryConfirmIntersectionKHR, operands); return 0; case glslang::EOpRayQueryProceed: typeId = builder.makeBoolType(); - opCode = spv::OpRayQueryProceedKHR; + opCode = spv::Op::OpRayQueryProceedKHR; break; case glslang::EOpRayQueryGetIntersectionType: typeId = builder.makeUintType(32); - opCode = spv::OpRayQueryGetIntersectionTypeKHR; + opCode = spv::Op::OpRayQueryGetIntersectionTypeKHR; break; case glslang::EOpRayQueryGetRayTMin: typeId = builder.makeFloatType(32); - opCode = spv::OpRayQueryGetRayTMinKHR; + opCode = spv::Op::OpRayQueryGetRayTMinKHR; break; case glslang::EOpRayQueryGetRayFlags: typeId = builder.makeIntType(32); - opCode = spv::OpRayQueryGetRayFlagsKHR; + opCode = spv::Op::OpRayQueryGetRayFlagsKHR; break; case glslang::EOpRayQueryGetIntersectionT: typeId = builder.makeFloatType(32); - opCode = spv::OpRayQueryGetIntersectionTKHR; + opCode = spv::Op::OpRayQueryGetIntersectionTKHR; break; case glslang::EOpRayQueryGetIntersectionInstanceCustomIndex: typeId = builder.makeIntType(32); - opCode = spv::OpRayQueryGetIntersectionInstanceCustomIndexKHR; + opCode = spv::Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR; break; case glslang::EOpRayQueryGetIntersectionInstanceId: typeId = builder.makeIntType(32); - opCode = spv::OpRayQueryGetIntersectionInstanceIdKHR; + opCode = spv::Op::OpRayQueryGetIntersectionInstanceIdKHR; break; case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset: typeId = builder.makeUintType(32); - opCode = spv::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR; + opCode = spv::Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR; break; case glslang::EOpRayQueryGetIntersectionGeometryIndex: typeId = builder.makeIntType(32); - opCode = spv::OpRayQueryGetIntersectionGeometryIndexKHR; + opCode = spv::Op::OpRayQueryGetIntersectionGeometryIndexKHR; break; case glslang::EOpRayQueryGetIntersectionPrimitiveIndex: typeId = builder.makeIntType(32); - opCode = spv::OpRayQueryGetIntersectionPrimitiveIndexKHR; + opCode = spv::Op::OpRayQueryGetIntersectionPrimitiveIndexKHR; break; case glslang::EOpRayQueryGetIntersectionBarycentrics: typeId = builder.makeVectorType(builder.makeFloatType(32), 2); - opCode = spv::OpRayQueryGetIntersectionBarycentricsKHR; + opCode = spv::Op::OpRayQueryGetIntersectionBarycentricsKHR; break; case glslang::EOpRayQueryGetIntersectionFrontFace: typeId = builder.makeBoolType(); - opCode = spv::OpRayQueryGetIntersectionFrontFaceKHR; + opCode = spv::Op::OpRayQueryGetIntersectionFrontFaceKHR; break; case glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque: typeId = builder.makeBoolType(); - opCode = spv::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR; + opCode = spv::Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR; break; case glslang::EOpRayQueryGetIntersectionObjectRayDirection: typeId = builder.makeVectorType(builder.makeFloatType(32), 3); - opCode = spv::OpRayQueryGetIntersectionObjectRayDirectionKHR; + opCode = spv::Op::OpRayQueryGetIntersectionObjectRayDirectionKHR; break; case glslang::EOpRayQueryGetIntersectionObjectRayOrigin: typeId = builder.makeVectorType(builder.makeFloatType(32), 3); - opCode = spv::OpRayQueryGetIntersectionObjectRayOriginKHR; + opCode = spv::Op::OpRayQueryGetIntersectionObjectRayOriginKHR; break; case glslang::EOpRayQueryGetWorldRayDirection: typeId = builder.makeVectorType(builder.makeFloatType(32), 3); - opCode = spv::OpRayQueryGetWorldRayDirectionKHR; + opCode = spv::Op::OpRayQueryGetWorldRayDirectionKHR; break; case glslang::EOpRayQueryGetWorldRayOrigin: typeId = builder.makeVectorType(builder.makeFloatType(32), 3); - opCode = spv::OpRayQueryGetWorldRayOriginKHR; + opCode = spv::Op::OpRayQueryGetWorldRayOriginKHR; break; case glslang::EOpRayQueryGetIntersectionObjectToWorld: typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3); - opCode = spv::OpRayQueryGetIntersectionObjectToWorldKHR; + opCode = spv::Op::OpRayQueryGetIntersectionObjectToWorldKHR; break; case glslang::EOpRayQueryGetIntersectionClusterIdNV: typeId = builder.makeIntegerType(32, 1); - opCode = spv::OpRayQueryGetIntersectionClusterIdNV; + opCode = spv::Op::OpRayQueryGetClusterIdNV; break; case glslang::EOpRayQueryGetIntersectionWorldToObject: typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3); - opCode = spv::OpRayQueryGetIntersectionWorldToObjectKHR; + opCode = spv::Op::OpRayQueryGetIntersectionWorldToObjectKHR; break; case glslang::EOpRayQueryGetIntersectionSpherePositionNV: typeId = builder.makeVectorType(builder.makeFloatType(32), 3); - opCode = spv::OpRayQueryGetIntersectionSpherePositionNV; + opCode = spv::Op::OpRayQueryGetIntersectionSpherePositionNV; break; case glslang::EOpRayQueryGetIntersectionSphereRadiusNV: typeId = builder.makeFloatType(32); - opCode = spv::OpRayQueryGetIntersectionSphereRadiusNV; + opCode = spv::Op::OpRayQueryGetIntersectionSphereRadiusNV; break; case glslang::EOpRayQueryGetIntersectionLSSHitValueNV: typeId = builder.makeFloatType(32); - opCode = spv::OpRayQueryGetIntersectionLSSHitValueNV; + opCode = spv::Op::OpRayQueryGetIntersectionLSSHitValueNV; break; case glslang::EOpRayQueryIsSphereHitNV: typeId = builder.makeBoolType(); - opCode = spv::OpRayQueryIsSphereHitNV; + opCode = spv::Op::OpRayQueryIsSphereHitNV; break; case glslang::EOpRayQueryIsLSSHitNV: typeId = builder.makeBoolType(); - opCode = spv::OpRayQueryIsLSSHitNV; + opCode = spv::Op::OpRayQueryIsLSSHitNV; break; case glslang::EOpWritePackedPrimitiveIndices4x8NV: - builder.createNoResultOp(spv::OpWritePackedPrimitiveIndices4x8NV, operands); + builder.createNoResultOp(spv::Op::OpWritePackedPrimitiveIndices4x8NV, operands); return 0; case glslang::EOpEmitMeshTasksEXT: if (taskPayloadID) operands.push_back(taskPayloadID); // As per SPV_EXT_mesh_shader make it a terminating instruction in the current block - builder.makeStatementTerminator(spv::OpEmitMeshTasksEXT, operands, "post-OpEmitMeshTasksEXT"); + builder.makeStatementTerminator(spv::Op::OpEmitMeshTasksEXT, operands, "post-OpEmitMeshTasksEXT"); return 0; case glslang::EOpSetMeshOutputsEXT: - builder.createNoResultOp(spv::OpSetMeshOutputsEXT, operands); + builder.createNoResultOp(spv::Op::OpSetMeshOutputsEXT, operands); return 0; case glslang::EOpCooperativeMatrixMulAddNV: - opCode = spv::OpCooperativeMatrixMulAddNV; + opCode = spv::Op::OpCooperativeMatrixMulAddNV; break; case glslang::EOpHitObjectTraceRayNV: - builder.createNoResultOp(spv::OpHitObjectTraceRayNV, operands); + builder.createNoResultOp(spv::Op::OpHitObjectTraceRayNV, operands); return 0; case glslang::EOpHitObjectTraceRayMotionNV: - builder.createNoResultOp(spv::OpHitObjectTraceRayMotionNV, operands); + builder.createNoResultOp(spv::Op::OpHitObjectTraceRayMotionNV, operands); return 0; case glslang::EOpHitObjectRecordHitNV: - builder.createNoResultOp(spv::OpHitObjectRecordHitNV, operands); + builder.createNoResultOp(spv::Op::OpHitObjectRecordHitNV, operands); return 0; case glslang::EOpHitObjectRecordHitMotionNV: - builder.createNoResultOp(spv::OpHitObjectRecordHitMotionNV, operands); + builder.createNoResultOp(spv::Op::OpHitObjectRecordHitMotionNV, operands); return 0; case glslang::EOpHitObjectRecordHitWithIndexNV: - builder.createNoResultOp(spv::OpHitObjectRecordHitWithIndexNV, operands); + builder.createNoResultOp(spv::Op::OpHitObjectRecordHitWithIndexNV, operands); return 0; case glslang::EOpHitObjectRecordHitWithIndexMotionNV: - builder.createNoResultOp(spv::OpHitObjectRecordHitWithIndexMotionNV, operands); + builder.createNoResultOp(spv::Op::OpHitObjectRecordHitWithIndexMotionNV, operands); return 0; case glslang::EOpHitObjectRecordMissNV: - builder.createNoResultOp(spv::OpHitObjectRecordMissNV, operands); + builder.createNoResultOp(spv::Op::OpHitObjectRecordMissNV, operands); return 0; case glslang::EOpHitObjectRecordMissMotionNV: - builder.createNoResultOp(spv::OpHitObjectRecordMissMotionNV, operands); + builder.createNoResultOp(spv::Op::OpHitObjectRecordMissMotionNV, operands); return 0; case glslang::EOpHitObjectExecuteShaderNV: - builder.createNoResultOp(spv::OpHitObjectExecuteShaderNV, operands); + builder.createNoResultOp(spv::Op::OpHitObjectExecuteShaderNV, operands); return 0; case glslang::EOpHitObjectIsEmptyNV: typeId = builder.makeBoolType(); - opCode = spv::OpHitObjectIsEmptyNV; + opCode = spv::Op::OpHitObjectIsEmptyNV; break; case glslang::EOpHitObjectIsMissNV: typeId = builder.makeBoolType(); - opCode = spv::OpHitObjectIsMissNV; + opCode = spv::Op::OpHitObjectIsMissNV; break; case glslang::EOpHitObjectIsHitNV: typeId = builder.makeBoolType(); - opCode = spv::OpHitObjectIsHitNV; + opCode = spv::Op::OpHitObjectIsHitNV; break; case glslang::EOpHitObjectIsSphereHitNV: typeId = builder.makeBoolType(); - opCode = spv::OpHitObjectIsSphereHitNV; + opCode = spv::Op::OpHitObjectIsSphereHitNV; break; case glslang::EOpHitObjectIsLSSHitNV: typeId = builder.makeBoolType(); - opCode = spv::OpHitObjectIsLSSHitNV; + opCode = spv::Op::OpHitObjectIsLSSHitNV; break; case glslang::EOpHitObjectGetRayTMinNV: typeId = builder.makeFloatType(32); - opCode = spv::OpHitObjectGetRayTMinNV; + opCode = spv::Op::OpHitObjectGetRayTMinNV; break; case glslang::EOpHitObjectGetRayTMaxNV: typeId = builder.makeFloatType(32); - opCode = spv::OpHitObjectGetRayTMaxNV; + opCode = spv::Op::OpHitObjectGetRayTMaxNV; break; case glslang::EOpHitObjectGetObjectRayOriginNV: typeId = builder.makeVectorType(builder.makeFloatType(32), 3); - opCode = spv::OpHitObjectGetObjectRayOriginNV; + opCode = spv::Op::OpHitObjectGetObjectRayOriginNV; break; case glslang::EOpHitObjectGetObjectRayDirectionNV: typeId = builder.makeVectorType(builder.makeFloatType(32), 3); - opCode = spv::OpHitObjectGetObjectRayDirectionNV; + opCode = spv::Op::OpHitObjectGetObjectRayDirectionNV; break; case glslang::EOpHitObjectGetWorldRayOriginNV: typeId = builder.makeVectorType(builder.makeFloatType(32), 3); - opCode = spv::OpHitObjectGetWorldRayOriginNV; + opCode = spv::Op::OpHitObjectGetWorldRayOriginNV; break; case glslang::EOpHitObjectGetWorldRayDirectionNV: typeId = builder.makeVectorType(builder.makeFloatType(32), 3); - opCode = spv::OpHitObjectGetWorldRayDirectionNV; + opCode = spv::Op::OpHitObjectGetWorldRayDirectionNV; break; case glslang::EOpHitObjectGetWorldToObjectNV: typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3); - opCode = spv::OpHitObjectGetWorldToObjectNV; + opCode = spv::Op::OpHitObjectGetWorldToObjectNV; break; case glslang::EOpHitObjectGetObjectToWorldNV: typeId = builder.makeMatrixType(builder.makeFloatType(32), 4, 3); - opCode = spv::OpHitObjectGetObjectToWorldNV; + opCode = spv::Op::OpHitObjectGetObjectToWorldNV; break; case glslang::EOpHitObjectGetInstanceCustomIndexNV: typeId = builder.makeIntegerType(32, 1); - opCode = spv::OpHitObjectGetInstanceCustomIndexNV; + opCode = spv::Op::OpHitObjectGetInstanceCustomIndexNV; break; case glslang::EOpHitObjectGetInstanceIdNV: typeId = builder.makeIntegerType(32, 1); - opCode = spv::OpHitObjectGetInstanceIdNV; + opCode = spv::Op::OpHitObjectGetInstanceIdNV; break; case glslang::EOpHitObjectGetGeometryIndexNV: typeId = builder.makeIntegerType(32, 1); - opCode = spv::OpHitObjectGetGeometryIndexNV; + opCode = spv::Op::OpHitObjectGetGeometryIndexNV; break; case glslang::EOpHitObjectGetPrimitiveIndexNV: typeId = builder.makeIntegerType(32, 1); - opCode = spv::OpHitObjectGetPrimitiveIndexNV; + opCode = spv::Op::OpHitObjectGetPrimitiveIndexNV; break; case glslang::EOpHitObjectGetHitKindNV: typeId = builder.makeIntegerType(32, 0); - opCode = spv::OpHitObjectGetHitKindNV; + opCode = spv::Op::OpHitObjectGetHitKindNV; break; case glslang::EOpHitObjectGetCurrentTimeNV: typeId = builder.makeFloatType(32); - opCode = spv::OpHitObjectGetCurrentTimeNV; + opCode = spv::Op::OpHitObjectGetCurrentTimeNV; break; case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV: typeId = builder.makeIntegerType(32, 0); - opCode = spv::OpHitObjectGetShaderBindingTableRecordIndexNV; + opCode = spv::Op::OpHitObjectGetShaderBindingTableRecordIndexNV; return 0; case glslang::EOpHitObjectGetAttributesNV: - builder.createNoResultOp(spv::OpHitObjectGetAttributesNV, operands); + builder.createNoResultOp(spv::Op::OpHitObjectGetAttributesNV, operands); return 0; case glslang::EOpHitObjectGetShaderRecordBufferHandleNV: typeId = builder.makeVectorType(builder.makeUintType(32), 2); - opCode = spv::OpHitObjectGetShaderRecordBufferHandleNV; + opCode = spv::Op::OpHitObjectGetShaderRecordBufferHandleNV; break; case glslang::EOpHitObjectGetClusterIdNV: typeId = builder.makeIntegerType(32, 1); - opCode = spv::OpHitObjectGetClusterIdNV; + opCode = spv::Op::OpHitObjectGetClusterIdNV; break; case glslang::EOpReorderThreadNV: { if (operands.size() == 2) { - builder.createNoResultOp(spv::OpReorderThreadWithHintNV, operands); + builder.createNoResultOp(spv::Op::OpReorderThreadWithHintNV, operands); } else { - builder.createNoResultOp(spv::OpReorderThreadWithHitObjectNV, operands); + builder.createNoResultOp(spv::Op::OpReorderThreadWithHitObjectNV, operands); } return 0; @@ -9708,87 +9729,87 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: case glslang::EOpImageSampleWeightedQCOM: typeId = builder.makeVectorType(builder.makeFloatType(32), 4); - opCode = spv::OpImageSampleWeightedQCOM; - addImageProcessingQCOMDecoration(operands[2], spv::DecorationWeightTextureQCOM); + opCode = spv::Op::OpImageSampleWeightedQCOM; + addImageProcessingQCOMDecoration(operands[2], spv::Decoration::WeightTextureQCOM); break; case glslang::EOpImageBoxFilterQCOM: typeId = builder.makeVectorType(builder.makeFloatType(32), 4); - opCode = spv::OpImageBoxFilterQCOM; + opCode = spv::Op::OpImageBoxFilterQCOM; break; case glslang::EOpImageBlockMatchSADQCOM: typeId = builder.makeVectorType(builder.makeFloatType(32), 4); - opCode = spv::OpImageBlockMatchSADQCOM; - addImageProcessingQCOMDecoration(operands[0], spv::DecorationBlockMatchTextureQCOM); - addImageProcessingQCOMDecoration(operands[2], spv::DecorationBlockMatchTextureQCOM); + opCode = spv::Op::OpImageBlockMatchSADQCOM; + addImageProcessingQCOMDecoration(operands[0], spv::Decoration::BlockMatchTextureQCOM); + addImageProcessingQCOMDecoration(operands[2], spv::Decoration::BlockMatchTextureQCOM); break; case glslang::EOpImageBlockMatchSSDQCOM: typeId = builder.makeVectorType(builder.makeFloatType(32), 4); - opCode = spv::OpImageBlockMatchSSDQCOM; - addImageProcessingQCOMDecoration(operands[0], spv::DecorationBlockMatchTextureQCOM); - addImageProcessingQCOMDecoration(operands[2], spv::DecorationBlockMatchTextureQCOM); + opCode = spv::Op::OpImageBlockMatchSSDQCOM; + addImageProcessingQCOMDecoration(operands[0], spv::Decoration::BlockMatchTextureQCOM); + addImageProcessingQCOMDecoration(operands[2], spv::Decoration::BlockMatchTextureQCOM); break; case glslang::EOpFetchMicroTriangleVertexBarycentricNV: typeId = builder.makeVectorType(builder.makeFloatType(32), 2); - opCode = spv::OpFetchMicroTriangleVertexBarycentricNV; + opCode = spv::Op::OpFetchMicroTriangleVertexBarycentricNV; break; case glslang::EOpFetchMicroTriangleVertexPositionNV: typeId = builder.makeVectorType(builder.makeFloatType(32), 3); - opCode = spv::OpFetchMicroTriangleVertexPositionNV; + opCode = spv::Op::OpFetchMicroTriangleVertexPositionNV; break; case glslang::EOpImageBlockMatchWindowSSDQCOM: typeId = builder.makeVectorType(builder.makeFloatType(32), 4); - opCode = spv::OpImageBlockMatchWindowSSDQCOM; + opCode = spv::Op::OpImageBlockMatchWindowSSDQCOM; addImageProcessing2QCOMDecoration(operands[0], false); addImageProcessing2QCOMDecoration(operands[2], false); break; case glslang::EOpImageBlockMatchWindowSADQCOM: typeId = builder.makeVectorType(builder.makeFloatType(32), 4); - opCode = spv::OpImageBlockMatchWindowSADQCOM; + opCode = spv::Op::OpImageBlockMatchWindowSADQCOM; addImageProcessing2QCOMDecoration(operands[0], false); addImageProcessing2QCOMDecoration(operands[2], false); break; case glslang::EOpImageBlockMatchGatherSSDQCOM: typeId = builder.makeVectorType(builder.makeFloatType(32), 4); - opCode = spv::OpImageBlockMatchGatherSSDQCOM; + opCode = spv::Op::OpImageBlockMatchGatherSSDQCOM; addImageProcessing2QCOMDecoration(operands[0], true); addImageProcessing2QCOMDecoration(operands[2], true); break; case glslang::EOpImageBlockMatchGatherSADQCOM: typeId = builder.makeVectorType(builder.makeFloatType(32), 4); - opCode = spv::OpImageBlockMatchGatherSADQCOM; + opCode = spv::Op::OpImageBlockMatchGatherSADQCOM; addImageProcessing2QCOMDecoration(operands[0], true); addImageProcessing2QCOMDecoration(operands[2], true); break; case glslang::EOpCreateTensorLayoutNV: - return builder.createOp(spv::OpCreateTensorLayoutNV, typeId, std::vector{}); + return builder.createOp(spv::Op::OpCreateTensorLayoutNV, typeId, std::vector{}); case glslang::EOpCreateTensorViewNV: - return builder.createOp(spv::OpCreateTensorViewNV, typeId, std::vector{}); + return builder.createOp(spv::Op::OpCreateTensorViewNV, typeId, std::vector{}); case glslang::EOpTensorLayoutSetBlockSizeNV: - opCode = spv::OpTensorLayoutSetBlockSizeNV; + opCode = spv::Op::OpTensorLayoutSetBlockSizeNV; break; case glslang::EOpTensorLayoutSetDimensionNV: - opCode = spv::OpTensorLayoutSetDimensionNV; + opCode = spv::Op::OpTensorLayoutSetDimensionNV; break; case glslang::EOpTensorLayoutSetStrideNV: - opCode = spv::OpTensorLayoutSetStrideNV; + opCode = spv::Op::OpTensorLayoutSetStrideNV; break; case glslang::EOpTensorLayoutSliceNV: - opCode = spv::OpTensorLayoutSliceNV; + opCode = spv::Op::OpTensorLayoutSliceNV; break; case glslang::EOpTensorLayoutSetClampValueNV: - opCode = spv::OpTensorLayoutSetClampValueNV; + opCode = spv::Op::OpTensorLayoutSetClampValueNV; break; case glslang::EOpTensorViewSetDimensionNV: - opCode = spv::OpTensorViewSetDimensionNV; + opCode = spv::Op::OpTensorViewSetDimensionNV; break; case glslang::EOpTensorViewSetStrideNV: - opCode = spv::OpTensorViewSetStrideNV; + opCode = spv::Op::OpTensorViewSetStrideNV; break; case glslang::EOpTensorViewSetClipNV: - opCode = spv::OpTensorViewSetClipNV; + opCode = spv::Op::OpTensorViewSetClipNV; break; default: return 0; @@ -9801,16 +9822,16 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: // We might need the remaining arguments, e.g. in the EOpFrexp case. std::vector callArguments(operands.begin(), operands.begin() + consumedOperands); id = builder.createBuiltinCall(typeId, extBuiltins >= 0 ? extBuiltins : stdBuiltins, libCall, callArguments); - } else if (opCode == spv::OpDot && !isFloat) { + } else if (opCode == spv::Op::OpDot && !isFloat) { // int dot(int, int) // NOTE: never called for scalar/vector1, this is turned into simple mul before this can be reached const int componentCount = builder.getNumComponents(operands[0]); - spv::Id mulOp = builder.createBinOp(spv::OpIMul, builder.getTypeId(operands[0]), operands[0], operands[1]); + spv::Id mulOp = builder.createBinOp(spv::Op::OpIMul, builder.getTypeId(operands[0]), operands[0], operands[1]); builder.setPrecision(mulOp, precision); id = builder.createCompositeExtract(mulOp, typeId, 0); for (int i = 1; i < componentCount; ++i) { builder.setPrecision(id, precision); - id = builder.createBinOp(spv::OpIAdd, typeId, id, builder.createCompositeExtract(mulOp, typeId, i)); + id = builder.createBinOp(spv::Op::OpIAdd, typeId, id, builder.createCompositeExtract(mulOp, typeId, i)); } } else { switch (consumedOperands) { @@ -9858,7 +9879,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: if (builder.isFloatType(builder.getScalarTypeId(typeId1))) { // "exp" is floating-point type (from HLSL intrinsic) spv::Id member1 = builder.createCompositeExtract(id, frexpIntType, 1); - member1 = builder.createUnaryOp(spv::OpConvertSToF, typeId1, member1); + member1 = builder.createUnaryOp(spv::Op::OpConvertSToF, typeId1, member1); builder.createStore(member1, operands[1]); } else // "exp" is integer type (from GLSL built-in function) @@ -9878,99 +9899,99 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: { // GLSL memory barriers use queuefamily scope in new model, device scope in old model spv::Scope memoryBarrierScope = glslangIntermediate->usingVulkanMemoryModel() ? - spv::ScopeQueueFamilyKHR : spv::ScopeDevice; + spv::Scope::QueueFamilyKHR : spv::Scope::Device; switch (op) { case glslang::EOpBarrier: if (glslangIntermediate->getStage() == EShLangTessControl) { if (glslangIntermediate->usingVulkanMemoryModel()) { - builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, - spv::MemorySemanticsOutputMemoryKHRMask | - spv::MemorySemanticsAcquireReleaseMask); - builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + builder.createControlBarrier(spv::Scope::Workgroup, spv::Scope::Workgroup, + spv::MemorySemanticsMask::OutputMemoryKHR | + spv::MemorySemanticsMask::AcquireRelease); + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); } else { - builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeInvocation, spv::MemorySemanticsMaskNone); + builder.createControlBarrier(spv::Scope::Workgroup, spv::Scope::Invocation, spv::MemorySemanticsMask::MaskNone); } } else { - builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, - spv::MemorySemanticsWorkgroupMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createControlBarrier(spv::Scope::Workgroup, spv::Scope::Workgroup, + spv::MemorySemanticsMask::WorkgroupMemory | + spv::MemorySemanticsMask::AcquireRelease); } return 0; case glslang::EOpMemoryBarrier: builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAllMemory | - spv::MemorySemanticsAcquireReleaseMask); + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpMemoryBarrierBuffer: - builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsUniformMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsMask::UniformMemory | + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpMemoryBarrierShared: - builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsWorkgroupMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsMask::WorkgroupMemory | + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpGroupMemoryBarrier: - builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsAllMemory | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(spv::Scope::Workgroup, spv::MemorySemanticsAllMemory | + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpMemoryBarrierAtomicCounter: - builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsAtomicCounterMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsMask::AtomicCounterMemory | + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpMemoryBarrierImage: - builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsImageMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(memoryBarrierScope, spv::MemorySemanticsMask::ImageMemory | + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpAllMemoryBarrierWithGroupSync: - builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, + builder.createControlBarrier(spv::Scope::Workgroup, spv::Scope::Device, spv::MemorySemanticsAllMemory | - spv::MemorySemanticsAcquireReleaseMask); + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpDeviceMemoryBarrier: - builder.createMemoryBarrier(spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask | - spv::MemorySemanticsImageMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(spv::Scope::Device, spv::MemorySemanticsMask::UniformMemory | + spv::MemorySemanticsMask::ImageMemory | + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpDeviceMemoryBarrierWithGroupSync: - builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeDevice, spv::MemorySemanticsUniformMemoryMask | - spv::MemorySemanticsImageMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createControlBarrier(spv::Scope::Workgroup, spv::Scope::Device, spv::MemorySemanticsMask::UniformMemory | + spv::MemorySemanticsMask::ImageMemory | + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpWorkgroupMemoryBarrier: - builder.createMemoryBarrier(spv::ScopeWorkgroup, spv::MemorySemanticsWorkgroupMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(spv::Scope::Workgroup, spv::MemorySemanticsMask::WorkgroupMemory | + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpWorkgroupMemoryBarrierWithGroupSync: - builder.createControlBarrier(spv::ScopeWorkgroup, spv::ScopeWorkgroup, - spv::MemorySemanticsWorkgroupMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createControlBarrier(spv::Scope::Workgroup, spv::Scope::Workgroup, + spv::MemorySemanticsMask::WorkgroupMemory | + spv::MemorySemanticsMask::AcquireRelease); return 0; case glslang::EOpSubgroupBarrier: - builder.createControlBarrier(spv::ScopeSubgroup, spv::ScopeSubgroup, spv::MemorySemanticsAllMemory | - spv::MemorySemanticsAcquireReleaseMask); + builder.createControlBarrier(spv::Scope::Subgroup, spv::Scope::Subgroup, spv::MemorySemanticsAllMemory | + spv::MemorySemanticsMask::AcquireRelease); return spv::NoResult; case glslang::EOpSubgroupMemoryBarrier: - builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsAllMemory | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(spv::Scope::Subgroup, spv::MemorySemanticsAllMemory | + spv::MemorySemanticsMask::AcquireRelease); return spv::NoResult; case glslang::EOpSubgroupMemoryBarrierBuffer: - builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsUniformMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(spv::Scope::Subgroup, spv::MemorySemanticsMask::UniformMemory | + spv::MemorySemanticsMask::AcquireRelease); return spv::NoResult; case glslang::EOpSubgroupMemoryBarrierImage: - builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsImageMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(spv::Scope::Subgroup, spv::MemorySemanticsMask::ImageMemory | + spv::MemorySemanticsMask::AcquireRelease); return spv::NoResult; case glslang::EOpSubgroupMemoryBarrierShared: - builder.createMemoryBarrier(spv::ScopeSubgroup, spv::MemorySemanticsWorkgroupMemoryMask | - spv::MemorySemanticsAcquireReleaseMask); + builder.createMemoryBarrier(spv::Scope::Subgroup, spv::MemorySemanticsMask::WorkgroupMemory | + spv::MemorySemanticsMask::AcquireRelease); return spv::NoResult; case glslang::EOpEmitVertex: - builder.createNoResultOp(spv::OpEmitVertex); + builder.createNoResultOp(spv::Op::OpEmitVertex); return 0; case glslang::EOpEndPrimitive: - builder.createNoResultOp(spv::OpEndPrimitive); + builder.createNoResultOp(spv::Op::OpEndPrimitive); return 0; case glslang::EOpSubgroupElect: { @@ -9984,52 +10005,52 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: return builder.setPrecision(id, precision); } case glslang::EOpIgnoreIntersectionNV: - builder.createNoResultOp(spv::OpIgnoreIntersectionNV); + builder.createNoResultOp(spv::Op::OpIgnoreIntersectionNV); return 0; case glslang::EOpTerminateRayNV: - builder.createNoResultOp(spv::OpTerminateRayNV); + builder.createNoResultOp(spv::Op::OpTerminateRayNV); return 0; case glslang::EOpRayQueryInitialize: - builder.createNoResultOp(spv::OpRayQueryInitializeKHR); + builder.createNoResultOp(spv::Op::OpRayQueryInitializeKHR); return 0; case glslang::EOpRayQueryTerminate: - builder.createNoResultOp(spv::OpRayQueryTerminateKHR); + builder.createNoResultOp(spv::Op::OpRayQueryTerminateKHR); return 0; case glslang::EOpRayQueryGenerateIntersection: - builder.createNoResultOp(spv::OpRayQueryGenerateIntersectionKHR); + builder.createNoResultOp(spv::Op::OpRayQueryGenerateIntersectionKHR); return 0; case glslang::EOpRayQueryConfirmIntersection: - builder.createNoResultOp(spv::OpRayQueryConfirmIntersectionKHR); + builder.createNoResultOp(spv::Op::OpRayQueryConfirmIntersectionKHR); return 0; case glslang::EOpBeginInvocationInterlock: - builder.createNoResultOp(spv::OpBeginInvocationInterlockEXT); + builder.createNoResultOp(spv::Op::OpBeginInvocationInterlockEXT); return 0; case glslang::EOpEndInvocationInterlock: - builder.createNoResultOp(spv::OpEndInvocationInterlockEXT); + builder.createNoResultOp(spv::Op::OpEndInvocationInterlockEXT); return 0; case glslang::EOpIsHelperInvocation: { std::vector args; // Dummy arguments builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation); - builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT); - return builder.createOp(spv::OpIsHelperInvocationEXT, typeId, args); + builder.addCapability(spv::Capability::DemoteToHelperInvocationEXT); + return builder.createOp(spv::Op::OpIsHelperInvocationEXT, typeId, args); } case glslang::EOpReadClockSubgroupKHR: { std::vector args; - args.push_back(builder.makeUintConstant(spv::ScopeSubgroup)); + args.push_back(builder.makeUintConstant(spv::Scope::Subgroup)); builder.addExtension(spv::E_SPV_KHR_shader_clock); - builder.addCapability(spv::CapabilityShaderClockKHR); - return builder.createOp(spv::OpReadClockKHR, typeId, args); + builder.addCapability(spv::Capability::ShaderClockKHR); + return builder.createOp(spv::Op::OpReadClockKHR, typeId, args); } case glslang::EOpReadClockDeviceKHR: { std::vector args; - args.push_back(builder.makeUintConstant(spv::ScopeDevice)); + args.push_back(builder.makeUintConstant(spv::Scope::Device)); builder.addExtension(spv::E_SPV_KHR_shader_clock); - builder.addCapability(spv::CapabilityShaderClockKHR); - return builder.createOp(spv::OpReadClockKHR, typeId, args); + builder.addCapability(spv::Capability::ShaderClockKHR); + return builder.createOp(spv::Op::OpReadClockKHR, typeId, args); } case glslang::EOpStencilAttachmentReadEXT: case glslang::EOpDepthAttachmentReadEXT: @@ -10040,15 +10061,15 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: spv::Op spv_op; if (op == glslang::EOpStencilAttachmentReadEXT) { - precision = spv::DecorationRelaxedPrecision; - spv_op = spv::OpStencilAttachmentReadEXT; - builder.addCapability(spv::CapabilityTileImageStencilReadAccessEXT); + precision = spv::Decoration::RelaxedPrecision; + spv_op = spv::Op::OpStencilAttachmentReadEXT; + builder.addCapability(spv::Capability::TileImageStencilReadAccessEXT); } else { precision = spv::NoPrecision; - spv_op = spv::OpDepthAttachmentReadEXT; - builder.addCapability(spv::CapabilityTileImageDepthReadAccessEXT); + spv_op = spv::Op::OpDepthAttachmentReadEXT; + builder.addCapability(spv::Capability::TileImageDepthReadAccessEXT); } std::vector args; // Dummy args @@ -10082,8 +10103,8 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol // and gl_WorldToObject3x4EXT. SPIR-V forbids having two OpVariables // with the same BuiltIn in the same storage class, so we must re-use one. const bool mayNeedToReuseBuiltIn = - builtIn == spv::BuiltInObjectToWorldKHR || - builtIn == spv::BuiltInWorldToObjectKHR; + builtIn == spv::BuiltIn::ObjectToWorldKHR || + builtIn == spv::BuiltIn::WorldToObjectKHR; if (mayNeedToReuseBuiltIn) { auto iter = builtInVariableIds.find(uint32_t(builtIn)); @@ -10116,76 +10137,76 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, TranslateAuxiliaryStorageDecoration(symbol->getType().getQualifier())); addMeshNVDecoration(id, /*member*/ -1, symbol->getType().getQualifier()); if (symbol->getQualifier().hasComponent()) - builder.addDecoration(id, spv::DecorationComponent, symbol->getQualifier().layoutComponent); + builder.addDecoration(id, spv::Decoration::Component, symbol->getQualifier().layoutComponent); if (symbol->getQualifier().hasIndex()) - builder.addDecoration(id, spv::DecorationIndex, symbol->getQualifier().layoutIndex); + builder.addDecoration(id, spv::Decoration::Index, symbol->getQualifier().layoutIndex); if (symbol->getType().getQualifier().hasSpecConstantId()) - builder.addDecoration(id, spv::DecorationSpecId, symbol->getType().getQualifier().layoutSpecConstantId); + builder.addDecoration(id, spv::Decoration::SpecId, symbol->getType().getQualifier().layoutSpecConstantId); // atomic counters use this: if (symbol->getQualifier().hasOffset()) - builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutOffset); + builder.addDecoration(id, spv::Decoration::Offset, symbol->getQualifier().layoutOffset); } if (symbol->getQualifier().hasLocation()) { if (!(glslangIntermediate->isRayTracingStage() && (glslangIntermediate->IsRequestedExtension(glslang::E_GL_EXT_ray_tracing) || glslangIntermediate->IsRequestedExtension(glslang::E_GL_NV_shader_invocation_reorder)) - && (builder.getStorageClass(id) == spv::StorageClassRayPayloadKHR || - builder.getStorageClass(id) == spv::StorageClassIncomingRayPayloadKHR || - builder.getStorageClass(id) == spv::StorageClassCallableDataKHR || - builder.getStorageClass(id) == spv::StorageClassIncomingCallableDataKHR || - builder.getStorageClass(id) == spv::StorageClassHitObjectAttributeNV))) { + && (builder.getStorageClass(id) == spv::StorageClass::RayPayloadKHR || + builder.getStorageClass(id) == spv::StorageClass::IncomingRayPayloadKHR || + builder.getStorageClass(id) == spv::StorageClass::CallableDataKHR || + builder.getStorageClass(id) == spv::StorageClass::IncomingCallableDataKHR || + builder.getStorageClass(id) == spv::StorageClass::HitObjectAttributeNV))) { // Location values are used to link TraceRayKHR/ExecuteCallableKHR/HitObjectGetAttributesNV // to corresponding variables but are not valid in SPIRV since they are supported only // for Input/Output Storage classes. - builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation); + builder.addDecoration(id, spv::Decoration::Location, symbol->getQualifier().layoutLocation); } } builder.addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier())); if (symbol->getQualifier().hasStream() && glslangIntermediate->isMultiStream()) { - builder.addCapability(spv::CapabilityGeometryStreams); - builder.addDecoration(id, spv::DecorationStream, symbol->getQualifier().layoutStream); + builder.addCapability(spv::Capability::GeometryStreams); + builder.addDecoration(id, spv::Decoration::Stream, symbol->getQualifier().layoutStream); } if (symbol->getQualifier().hasSet()) - builder.addDecoration(id, spv::DecorationDescriptorSet, symbol->getQualifier().layoutSet); + builder.addDecoration(id, spv::Decoration::DescriptorSet, symbol->getQualifier().layoutSet); else if (IsDescriptorResource(symbol->getType())) { // default to 0 - builder.addDecoration(id, spv::DecorationDescriptorSet, 0); + builder.addDecoration(id, spv::Decoration::DescriptorSet, 0); } if (symbol->getQualifier().hasBinding()) - builder.addDecoration(id, spv::DecorationBinding, symbol->getQualifier().layoutBinding); + builder.addDecoration(id, spv::Decoration::Binding, symbol->getQualifier().layoutBinding); else if (IsDescriptorResource(symbol->getType())) { // default to 0 - builder.addDecoration(id, spv::DecorationBinding, 0); + builder.addDecoration(id, spv::Decoration::Binding, 0); } if (symbol->getQualifier().hasAttachment()) - builder.addDecoration(id, spv::DecorationInputAttachmentIndex, symbol->getQualifier().layoutAttachment); + builder.addDecoration(id, spv::Decoration::InputAttachmentIndex, symbol->getQualifier().layoutAttachment); if (glslangIntermediate->getXfbMode()) { - builder.addCapability(spv::CapabilityTransformFeedback); + builder.addCapability(spv::Capability::TransformFeedback); if (symbol->getQualifier().hasXfbBuffer()) { - builder.addDecoration(id, spv::DecorationXfbBuffer, symbol->getQualifier().layoutXfbBuffer); + builder.addDecoration(id, spv::Decoration::XfbBuffer, symbol->getQualifier().layoutXfbBuffer); unsigned stride = glslangIntermediate->getXfbStride(symbol->getQualifier().layoutXfbBuffer); if (stride != glslang::TQualifier::layoutXfbStrideEnd) - builder.addDecoration(id, spv::DecorationXfbStride, stride); + builder.addDecoration(id, spv::Decoration::XfbStride, stride); } if (symbol->getQualifier().hasXfbOffset()) - builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutXfbOffset); + builder.addDecoration(id, spv::Decoration::Offset, symbol->getQualifier().layoutXfbOffset); } // add built-in variable decoration - if (builtIn != spv::BuiltInMax) { + if (builtIn != spv::BuiltIn::Max) { // WorkgroupSize deprecated in spirv1.6 if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_6 || - builtIn != spv::BuiltInWorkgroupSize) - builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn); + builtIn != spv::BuiltIn::WorkgroupSize) + builder.addDecoration(id, spv::Decoration::BuiltIn, (int)builtIn); } // Add volatile decoration to HelperInvocation for spirv1.6 and beyond - if (builtIn == spv::BuiltInHelperInvocation && + if (builtIn == spv::BuiltIn::HelperInvocation && !glslangIntermediate->usingVulkanMemoryModel() && glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { - builder.addDecoration(id, spv::DecorationVolatile); + builder.addDecoration(id, spv::Decoration::Volatile); } // Subgroup builtins which have input storage class are volatile for ray tracing stages. @@ -10197,60 +10218,60 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, memory[i]); } - if (builtIn == spv::BuiltInSampleMask) { + if (builtIn == spv::BuiltIn::SampleMask) { spv::Decoration decoration; // GL_NV_sample_mask_override_coverage extension if (glslangIntermediate->getLayoutOverrideCoverage()) - decoration = (spv::Decoration)spv::DecorationOverrideCoverageNV; + decoration = spv::Decoration::OverrideCoverageNV; else - decoration = (spv::Decoration)spv::DecorationMax; + decoration = spv::Decoration::Max; builder.addDecoration(id, decoration); - if (decoration != spv::DecorationMax) { - builder.addCapability(spv::CapabilitySampleMaskOverrideCoverageNV); + if (decoration != spv::Decoration::Max) { + builder.addCapability(spv::Capability::SampleMaskOverrideCoverageNV); builder.addExtension(spv::E_SPV_NV_sample_mask_override_coverage); } } - else if (builtIn == spv::BuiltInLayer) { + else if (builtIn == spv::BuiltIn::Layer) { // SPV_NV_viewport_array2 extension if (symbol->getQualifier().layoutViewportRelative) { - builder.addDecoration(id, (spv::Decoration)spv::DecorationViewportRelativeNV); - builder.addCapability(spv::CapabilityShaderViewportMaskNV); + builder.addDecoration(id, spv::Decoration::ViewportRelativeNV); + builder.addCapability(spv::Capability::ShaderViewportMaskNV); builder.addExtension(spv::E_SPV_NV_viewport_array2); } if (symbol->getQualifier().layoutSecondaryViewportRelativeOffset != -2048) { - builder.addDecoration(id, (spv::Decoration)spv::DecorationSecondaryViewportRelativeNV, + builder.addDecoration(id, spv::Decoration::SecondaryViewportRelativeNV, symbol->getQualifier().layoutSecondaryViewportRelativeOffset); - builder.addCapability(spv::CapabilityShaderStereoViewNV); + builder.addCapability(spv::Capability::ShaderStereoViewNV); builder.addExtension(spv::E_SPV_NV_stereo_view_rendering); } } if (symbol->getQualifier().layoutPassthrough) { - builder.addDecoration(id, spv::DecorationPassthroughNV); - builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV); + builder.addDecoration(id, spv::Decoration::PassthroughNV); + builder.addCapability(spv::Capability::GeometryShaderPassthroughNV); builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough); } if (symbol->getQualifier().pervertexNV) { - builder.addDecoration(id, spv::DecorationPerVertexNV); - builder.addCapability(spv::CapabilityFragmentBarycentricNV); + builder.addDecoration(id, spv::Decoration::PerVertexNV); + builder.addCapability(spv::Capability::FragmentBarycentricNV); builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric); } if (symbol->getQualifier().pervertexEXT) { - builder.addDecoration(id, spv::DecorationPerVertexKHR); - builder.addCapability(spv::CapabilityFragmentBarycentricKHR); + builder.addDecoration(id, spv::Decoration::PerVertexKHR); + builder.addCapability(spv::Capability::FragmentBarycentricKHR); builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric); } if (glslangIntermediate->getHlslFunctionality1() && symbol->getType().getQualifier().semanticName != nullptr) { builder.addExtension("SPV_GOOGLE_hlsl_functionality1"); - builder.addDecoration(id, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE, + builder.addDecoration(id, spv::Decoration::HlslSemanticGOOGLE, symbol->getType().getQualifier().semanticName); } if (symbol->isReference()) { builder.addDecoration(id, symbol->getType().getQualifier().restrict ? - spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT); + spv::Decoration::RestrictPointerEXT : spv::Decoration::AliasedPointerEXT); } // Add SPIR-V decorations (GL_EXT_spirv_intrinsics) @@ -10272,38 +10293,38 @@ void TGlslangToSpvTraverser::addMeshNVDecoration(spv::Id id, int member, const g // Mesh shader already adds this by default. if (glslangIntermediate->getStage() == EShLangFragment) { if(isMeshShaderExt) { - builder.addCapability(spv::CapabilityMeshShadingEXT); + builder.addCapability(spv::Capability::MeshShadingEXT); builder.addExtension(spv::E_SPV_EXT_mesh_shader); } else { - builder.addCapability(spv::CapabilityMeshShadingNV); + builder.addCapability(spv::Capability::MeshShadingNV); builder.addExtension(spv::E_SPV_NV_mesh_shader); } } - builder.addMemberDecoration(id, (unsigned)member, spv::DecorationPerPrimitiveNV); + builder.addMemberDecoration(id, (unsigned)member, spv::Decoration::PerPrimitiveNV); } if (qualifier.perViewNV) - builder.addMemberDecoration(id, (unsigned)member, spv::DecorationPerViewNV); + builder.addMemberDecoration(id, (unsigned)member, spv::Decoration::PerViewNV); if (qualifier.perTaskNV) - builder.addMemberDecoration(id, (unsigned)member, spv::DecorationPerTaskNV); + builder.addMemberDecoration(id, (unsigned)member, spv::Decoration::PerTaskNV); } else { if (qualifier.perPrimitiveNV) { // Need to add capability/extension for fragment shader. // Mesh shader already adds this by default. if (glslangIntermediate->getStage() == EShLangFragment) { if(isMeshShaderExt) { - builder.addCapability(spv::CapabilityMeshShadingEXT); + builder.addCapability(spv::Capability::MeshShadingEXT); builder.addExtension(spv::E_SPV_EXT_mesh_shader); } else { - builder.addCapability(spv::CapabilityMeshShadingNV); + builder.addCapability(spv::Capability::MeshShadingNV); builder.addExtension(spv::E_SPV_NV_mesh_shader); } } - builder.addDecoration(id, spv::DecorationPerPrimitiveNV); + builder.addDecoration(id, spv::Decoration::PerPrimitiveNV); } if (qualifier.perViewNV) - builder.addDecoration(id, spv::DecorationPerViewNV); + builder.addDecoration(id, spv::Decoration::PerViewNV); if (qualifier.perTaskNV) - builder.addDecoration(id, spv::DecorationPerTaskNV); + builder.addDecoration(id, spv::Decoration::PerTaskNV); } } @@ -10320,12 +10341,12 @@ bool TGlslangToSpvTraverser::hasQCOMImageProceessingDecoration(spv::Id id, spv:: void TGlslangToSpvTraverser::addImageProcessingQCOMDecoration(spv::Id id, spv::Decoration decor) { spv::Op opc = builder.getOpCode(id); - if (opc == spv::OpSampledImage) { + if (opc == spv::Op::OpSampledImage) { id = builder.getIdOperand(id, 0); opc = builder.getOpCode(id); } - if (opc == spv::OpLoad) { + if (opc == spv::Op::OpLoad) { spv::Id texid = builder.getIdOperand(id, 0); if (!hasQCOMImageProceessingDecoration(texid, decor)) {// builder.addDecoration(texid, decor); @@ -10337,13 +10358,13 @@ void TGlslangToSpvTraverser::addImageProcessingQCOMDecoration(spv::Id id, spv::D void TGlslangToSpvTraverser::addImageProcessing2QCOMDecoration(spv::Id id, bool isForGather) { if (isForGather) { - return addImageProcessingQCOMDecoration(id, spv::DecorationBlockMatchTextureQCOM); + return addImageProcessingQCOMDecoration(id, spv::Decoration::BlockMatchTextureQCOM); } auto addDecor = [this](spv::Id id, spv::Decoration decor) { - spv::Id tsopc = this->builder.getOpCode(id); - if (tsopc == spv::OpLoad) { + spv::Op tsopc = this->builder.getOpCode(id); + if (tsopc == spv::Op::OpLoad) { spv::Id tsid = this->builder.getIdOperand(id, 0); if (this->glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) { assert(iOSet.count(tsid) > 0); @@ -10355,15 +10376,15 @@ void TGlslangToSpvTraverser::addImageProcessing2QCOMDecoration(spv::Id id, bool } }; - spv::Id opc = builder.getOpCode(id); - bool isInterfaceObject = (opc != spv::OpSampledImage); + spv::Op opc = builder.getOpCode(id); + bool isInterfaceObject = (opc != spv::Op::OpSampledImage); if (!isInterfaceObject) { - addDecor(builder.getIdOperand(id, 0), spv::DecorationBlockMatchTextureQCOM); - addDecor(builder.getIdOperand(id, 1), spv::DecorationBlockMatchSamplerQCOM); + addDecor(builder.getIdOperand(id, 0), spv::Decoration::BlockMatchTextureQCOM); + addDecor(builder.getIdOperand(id, 1), spv::Decoration::BlockMatchSamplerQCOM); } else { - addDecor(id, spv::DecorationBlockMatchTextureQCOM); - addDecor(id, spv::DecorationBlockMatchSamplerQCOM); + addDecor(id, spv::Decoration::BlockMatchTextureQCOM); + addDecor(id, spv::Decoration::BlockMatchSamplerQCOM); } } @@ -10395,15 +10416,15 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n // Extra capabilities may be needed. if (node.getType().contains8BitInt()) - builder.addCapability(spv::CapabilityInt8); + builder.addCapability(spv::Capability::Int8); if (node.getType().contains16BitFloat()) - builder.addCapability(spv::CapabilityFloat16); + builder.addCapability(spv::Capability::Float16); if (node.getType().contains16BitInt()) - builder.addCapability(spv::CapabilityInt16); + builder.addCapability(spv::Capability::Int16); if (node.getType().contains64BitInt()) - builder.addCapability(spv::CapabilityInt64); + builder.addCapability(spv::Capability::Int64); if (node.getType().containsDouble()) - builder.addCapability(spv::CapabilityFloat64); + builder.addCapability(spv::Capability::Float64); // gl_WorkGroupSize is a special case until the front-end handles hierarchical specialization constants, // even then, it's specialization ids are handled by special case syntax in GLSL: layout(local_size_x = ... @@ -10413,7 +10434,7 @@ spv::Id TGlslangToSpvTraverser::createSpvConstant(const glslang::TIntermTyped& n bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst)); if (specConst) { - builder.addDecoration(dimConstId.back(), spv::DecorationSpecId, + builder.addDecoration(dimConstId.back(), spv::Decoration::SpecId, glslangIntermediate->getLocalSizeSpecId(dim)); } } @@ -10495,19 +10516,19 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla spvConsts.push_back(builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst())); break; case glslang::EbtInt8: - builder.addCapability(spv::CapabilityInt8); + builder.addCapability(spv::Capability::Int8); spvConsts.push_back(builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const())); break; case glslang::EbtUint8: - builder.addCapability(spv::CapabilityInt8); + builder.addCapability(spv::Capability::Int8); spvConsts.push_back(builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const())); break; case glslang::EbtInt16: - builder.addCapability(spv::CapabilityInt16); + builder.addCapability(spv::Capability::Int16); spvConsts.push_back(builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const())); break; case glslang::EbtUint16: - builder.addCapability(spv::CapabilityInt16); + builder.addCapability(spv::Capability::Int16); spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const())); break; case glslang::EbtInt64: @@ -10520,9 +10541,12 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla spvConsts.push_back(builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst())); break; case glslang::EbtFloat16: - builder.addCapability(spv::CapabilityFloat16); + builder.addCapability(spv::Capability::Float16); spvConsts.push_back(builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst())); break; + case glslang::EbtBFloat16: + spvConsts.push_back(builder.makeBFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst())); + break; default: assert(0); break; @@ -10547,19 +10571,19 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla scalar = builder.makeBoolConstant(zero ? false : consts[nextConst].getBConst(), specConstant); break; case glslang::EbtInt8: - builder.addCapability(spv::CapabilityInt8); + builder.addCapability(spv::Capability::Int8); scalar = builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const(), specConstant); break; case glslang::EbtUint8: - builder.addCapability(spv::CapabilityInt8); + builder.addCapability(spv::Capability::Int8); scalar = builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const(), specConstant); break; case glslang::EbtInt16: - builder.addCapability(spv::CapabilityInt16); + builder.addCapability(spv::Capability::Int16); scalar = builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const(), specConstant); break; case glslang::EbtUint16: - builder.addCapability(spv::CapabilityInt16); + builder.addCapability(spv::Capability::Int16); scalar = builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const(), specConstant); break; case glslang::EbtInt64: @@ -10572,12 +10596,15 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla scalar = builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst(), specConstant); break; case glslang::EbtFloat16: - builder.addCapability(spv::CapabilityFloat16); + builder.addCapability(spv::Capability::Float16); scalar = builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant); break; + case glslang::EbtBFloat16: + scalar = builder.makeBFloat16Constant(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::OpBitcast, typeId, scalar); + scalar = builder.createUnaryOp(spv::Op::OpBitcast, typeId, scalar); break; case glslang::EbtString: scalar = builder.getStringId(consts[nextConst].getSConst()->c_str()); @@ -10707,10 +10734,10 @@ spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslan // TODO: this runtime "not" for || could be avoided by adding functionality // to 'builder' to have an "else" without an "then" if (op == glslang::EOpLogicalOr) - leftId = builder.createUnaryOp(spv::OpLogicalNot, boolTypeId, leftId); + leftId = builder.createUnaryOp(spv::Op::OpLogicalNot, boolTypeId, leftId); // make an "if" based on the left value - spv::Builder::If ifBuilder(leftId, spv::SelectionControlMaskNone, builder); + spv::Builder::If ifBuilder(leftId, spv::SelectionControlMask::MaskNone, builder); // emit right operand as the "then" part of the "if" builder.clearAccessChain(); @@ -10725,7 +10752,7 @@ spv::Id TGlslangToSpvTraverser::createShortCircuit(glslang::TOperator op, glslan ifBuilder.makeEndIf(); // phi together the two results - return builder.createOp(spv::OpPhi, boolTypeId, phiOperands); + return builder.createOp(spv::Op::OpPhi, boolTypeId, phiOperands); } // Return type Id of the imported set of extended instructions corresponds to the name. diff --git a/3rdparty/glslang/SPIRV/InReadableOrder.cpp b/3rdparty/glslang/SPIRV/InReadableOrder.cpp index 9d9410be9..18e487d87 100644 --- a/3rdparty/glslang/SPIRV/InReadableOrder.cpp +++ b/3rdparty/glslang/SPIRV/InReadableOrder.cpp @@ -85,7 +85,7 @@ public: Id mergeId = mergeInst->getIdOperand(0); mergeBlock = block->getParent().getParent().getInstruction(mergeId)->getBlock(); delayed_.insert(mergeBlock); - if (mergeInst->getOpCode() == spv::OpLoopMerge) { + if (mergeInst->getOpCode() == spv::Op::OpLoopMerge) { Id continueId = mergeInst->getIdOperand(1); continueBlock = block->getParent().getParent().getInstruction(continueId)->getBlock(); diff --git a/3rdparty/glslang/SPIRV/SPVRemapper.cpp b/3rdparty/glslang/SPIRV/SPVRemapper.cpp index fab177319..02ecb3c53 100644 --- a/3rdparty/glslang/SPIRV/SPVRemapper.cpp +++ b/3rdparty/glslang/SPIRV/SPVRemapper.cpp @@ -35,6 +35,7 @@ #include "SPVRemapper.h" #include "doc.h" +#include "spvUtil.h" #include #include @@ -61,13 +62,13 @@ namespace spv { std::uint32_t offset = 0; switch (opCode) { - case spv::OpExtInst: + case spv::Op::OpExtInst: offset += asId(word + 4); break; default: break; } - return opCode * 19 + offset; // 19 = small prime + return ((unsigned)opCode) * 19 + offset; // 19 = small prime } spirvbin_t::range_t spirvbin_t::literalRange(spv::Op opCode) const @@ -75,16 +76,16 @@ namespace spv { static const int maxCount = 1<<30; switch (opCode) { - case spv::OpTypeFloat: // fall through... - case spv::OpTypePointer: return range_t(2, 3); - case spv::OpTypeInt: return range_t(2, 4); + case spv::Op::OpTypeFloat: // fall through... + case spv::Op::OpTypePointer: return range_t(2, 3); + case spv::Op::OpTypeInt: return range_t(2, 4); // TODO: case spv::OpTypeImage: // TODO: case spv::OpTypeSampledImage: - case spv::OpTypeSampler: return range_t(3, 8); - case spv::OpTypeVector: // fall through - case spv::OpTypeMatrix: // ... - case spv::OpTypePipe: return range_t(3, 4); - case spv::OpConstant: return range_t(3, maxCount); + case spv::Op::OpTypeSampler: return range_t(3, 8); + case spv::Op::OpTypeVector: // fall through + case spv::Op::OpTypeMatrix: // ... + case spv::Op::OpTypePipe: return range_t(3, 4); + case spv::Op::OpConstant: return range_t(3, maxCount); default: return range_t(0, 0); } } @@ -97,15 +98,15 @@ namespace spv { return range_t(1, 2); switch (opCode) { - case spv::OpTypeVector: // fall through - case spv::OpTypeMatrix: // ... - case spv::OpTypeSampler: // ... - case spv::OpTypeArray: // ... - case spv::OpTypeRuntimeArray: // ... - case spv::OpTypePipe: return range_t(2, 3); - case spv::OpTypeStruct: // fall through - case spv::OpTypeFunction: return range_t(2, maxCount); - case spv::OpTypePointer: return range_t(3, 4); + case spv::Op::OpTypeVector: // fall through + case spv::Op::OpTypeMatrix: // ... + case spv::Op::OpTypeSampler: // ... + case spv::Op::OpTypeArray: // ... + case spv::Op::OpTypeRuntimeArray: // ... + case spv::Op::OpTypePipe: return range_t(2, 3); + case spv::Op::OpTypeStruct: // fall through + case spv::Op::OpTypeFunction: return range_t(2, maxCount); + case spv::Op::OpTypePointer: return range_t(3, 4); default: return range_t(0, 0); } } @@ -115,9 +116,9 @@ namespace spv { static const int maxCount = 1<<30; switch (opCode) { - case spv::OpTypeArray: // fall through... - case spv::OpTypeRuntimeArray: return range_t(3, 4); - case spv::OpConstantComposite: return range_t(3, maxCount); + case spv::Op::OpTypeArray: // fall through... + case spv::Op::OpTypeRuntimeArray: return range_t(3, 4); + case spv::Op::OpConstantComposite: return range_t(3, maxCount); default: return range_t(0, 0); } } @@ -134,8 +135,8 @@ namespace spv { return 0; switch (opCode) { - case spv::OpTypeInt: // fall through... - case spv::OpTypeFloat: return (spv[typeStart+2]+31)/32; + case spv::Op::OpTypeInt: // fall through... + case spv::Op::OpTypeFloat: return (spv[typeStart + 2] + 31) / 32; default: return 0; } @@ -158,11 +159,11 @@ namespace spv { bool spirvbin_t::isStripOp(spv::Op opCode, unsigned start) const { switch (opCode) { - case spv::OpSource: - case spv::OpSourceExtension: - case spv::OpName: - case spv::OpMemberName: - case spv::OpLine : + case spv::Op::OpSource: + case spv::Op::OpSourceExtension: + case spv::Op::OpName: + case spv::Op::OpMemberName: + case spv::Op::OpLine: { const std::string name = literalString(start + 2); @@ -185,15 +186,15 @@ namespace spv { bool spirvbin_t::isFlowCtrl(spv::Op opCode) const { switch (opCode) { - case spv::OpBranchConditional: - case spv::OpBranch: - case spv::OpSwitch: - case spv::OpLoopMerge: - case spv::OpSelectionMerge: - case spv::OpLabel: - case spv::OpFunction: - case spv::OpFunctionEnd: return true; - default: return false; + case spv::Op::OpBranchConditional: + case spv::Op::OpBranch: + case spv::Op::OpSwitch: + case spv::Op::OpLoopMerge: + case spv::Op::OpSelectionMerge: + case spv::Op::OpLabel: + case spv::Op::OpFunction: + case spv::Op::OpFunctionEnd: return true; + default: return false; } } @@ -201,27 +202,27 @@ namespace spv { bool spirvbin_t::isTypeOp(spv::Op opCode) const { switch (opCode) { - case spv::OpTypeVoid: - case spv::OpTypeBool: - case spv::OpTypeInt: - case spv::OpTypeFloat: - case spv::OpTypeVector: - case spv::OpTypeMatrix: - case spv::OpTypeImage: - case spv::OpTypeSampler: - case spv::OpTypeArray: - case spv::OpTypeRuntimeArray: - case spv::OpTypeStruct: - case spv::OpTypeOpaque: - case spv::OpTypePointer: - case spv::OpTypeFunction: - case spv::OpTypeEvent: - case spv::OpTypeDeviceEvent: - case spv::OpTypeReserveId: - case spv::OpTypeQueue: - case spv::OpTypeSampledImage: - case spv::OpTypePipe: return true; - default: return false; + case spv::Op::OpTypeVoid: + case spv::Op::OpTypeBool: + case spv::Op::OpTypeInt: + case spv::Op::OpTypeFloat: + case spv::Op::OpTypeVector: + case spv::Op::OpTypeMatrix: + case spv::Op::OpTypeImage: + case spv::Op::OpTypeSampler: + case spv::Op::OpTypeArray: + case spv::Op::OpTypeRuntimeArray: + case spv::Op::OpTypeStruct: + case spv::Op::OpTypeOpaque: + case spv::Op::OpTypePointer: + case spv::Op::OpTypeFunction: + case spv::Op::OpTypeEvent: + case spv::Op::OpTypeDeviceEvent: + case spv::Op::OpTypeReserveId: + case spv::Op::OpTypeQueue: + case spv::Op::OpTypeSampledImage: + case spv::Op::OpTypePipe: return true; + default: return false; } } @@ -229,15 +230,15 @@ namespace spv { bool spirvbin_t::isConstOp(spv::Op opCode) const { switch (opCode) { - case spv::OpConstantSampler: + case spv::Op::OpConstantSampler: error("unimplemented constant type"); return true; - case spv::OpConstantNull: - case spv::OpConstantTrue: - case spv::OpConstantFalse: - case spv::OpConstantComposite: - case spv::OpConstant: + case spv::Op::OpConstantNull: + case spv::Op::OpConstantTrue: + case spv::Op::OpConstantFalse: + case spv::Op::OpConstantComposite: + case spv::Op::OpConstant: return true; default: @@ -395,10 +396,10 @@ namespace spv { [&](spv::Op opCode, unsigned start) { // strip opcodes pointing to removed data switch (opCode) { - case spv::OpName: - case spv::OpMemberName: - case spv::OpDecorate: - case spv::OpMemberDecorate: + case spv::Op::OpName: + case spv::Op::OpMemberName: + case spv::Op::OpDecorate: + case spv::Op::OpMemberDecorate: if (idPosR.find(asId(start+1)) == idPosR.end()) stripInst(start); break; @@ -439,11 +440,11 @@ namespace spv { unsigned word = start+1; spv::Id typeId = spv::NoResult; - if (spv::InstructionDesc[opCode].hasType()) + if (spv::InstructionDesc[enumCast(opCode)].hasType()) typeId = asId(word++); // If there's a result ID, remember the size of its type - if (spv::InstructionDesc[opCode].hasResult()) { + if (spv::InstructionDesc[enumCast(opCode)].hasResult()) { const spv::Id resultId = asId(word++); idPosR[resultId] = start; @@ -546,19 +547,19 @@ namespace spv { return nextInst; // Read type and result ID from instruction desc table - if (spv::InstructionDesc[opCode].hasType()) { + if (spv::InstructionDesc[enumCast(opCode)].hasType()) { idFn(asId(word++)); --numOperands; } - if (spv::InstructionDesc[opCode].hasResult()) { + if (spv::InstructionDesc[enumCast(opCode)].hasResult()) { idFn(asId(word++)); --numOperands; } // Extended instructions: currently, assume everything is an ID. // TODO: add whatever data we need for exceptions to that - if (opCode == spv::OpExtInst) { + if (opCode == spv::Op::OpExtInst) { idFn(asId(word)); // Instruction set is an ID that also needs to be mapped @@ -583,14 +584,14 @@ namespace spv { // opcode being processed is the literal opcode value of the SpecConstantOp. See the // SPIRV spec for details. This way we will handle IDs and literals as appropriate for // the embedded op. - if (opCode == spv::OpSpecConstantOp) { + if (opCode == spv::Op::OpSpecConstantOp) { if (op == 0) { opCode = asOpCode(word++); // this is the opcode embedded in the SpecConstantOp. --numOperands; } } - switch (spv::InstructionDesc[opCode].operands.getClass(op)) { + switch (spv::InstructionDesc[enumCast(opCode)].operands.getClass(op)) { case spv::OperandId: case spv::OperandScope: case spv::OperandMemorySemantics: @@ -614,7 +615,7 @@ namespace spv { return nextInst; case spv::OperandVariableLiteralId: { - if (opCode == OpSwitch) { + if (opCode == Op::OpSwitch) { // word-2 is the position of the selector ID. OpSwitch Literals match its type. // In case the IDs are currently being remapped, we get the word[-2] ID from // the circular idBuffer. @@ -653,12 +654,12 @@ namespace spv { case spv::OperandMemoryAccess: { uint32_t mask = spv[word]; - if (mask & uint32_t(spv::MemoryAccessMask::MemoryAccessAlignedMask)) { + if (mask & uint32_t(spv::MemoryAccessMask::Aligned)) { ++word; --numOperands; } - if (mask & uint32_t(spv::MemoryAccessMask::MemoryAccessMakePointerAvailableMask | - spv::MemoryAccessMask::MemoryAccessMakePointerVisibleMask)) { + if (mask & uint32_t(spv::MemoryAccessMask::MakePointerAvailable | + spv::MemoryAccessMask::MakePointerVisible)) { idFn(asId(word+1)); ++word; --numOperands; @@ -670,12 +671,12 @@ namespace spv { case spv::OperandTensorAddressingOperands: { uint32_t mask = spv[word]; - if (mask & uint32_t(spv::TensorAddressingOperandsMask::TensorAddressingOperandsTensorViewMask)) { + if (mask & uint32_t(spv::TensorAddressingOperandsMask::TensorView)) { idFn(asId(word+1)); ++word; --numOperands; } - if (mask & uint32_t(spv::TensorAddressingOperandsMask::TensorAddressingOperandsDecodeFuncMask)) { + if (mask & uint32_t(spv::TensorAddressingOperandsMask::DecodeFunc)) { idFn(asId(word+1)); ++word; --numOperands; @@ -686,6 +687,7 @@ namespace spv { // Single word operands we simply ignore, as they hold no IDs case spv::OperandLiteralNumber: + case spv::OperandOptionalLiteral: case spv::OperandSource: case spv::OperandExecutionModel: case spv::OperandAddressing: @@ -799,26 +801,26 @@ namespace spv { const unsigned start = instPos[entry]; const spv::Op opCode = asOpCode(start); - if (opCode == spv::OpFunction) + if (opCode == spv::Op::OpFunction) fnId = asId(start + 2); - if (opCode == spv::OpFunctionEnd) + if (opCode == spv::Op::OpFunctionEnd) fnId = spv::NoResult; if (fnId != spv::NoResult) { // if inside a function - if (spv::InstructionDesc[opCode].hasResult()) { - const unsigned word = start + (spv::InstructionDesc[opCode].hasType() ? 2 : 1); + if (spv::InstructionDesc[enumCast(opCode)].hasResult()) { + const unsigned word = start + (spv::InstructionDesc[enumCast(opCode)].hasType() ? 2 : 1); const spv::Id resId = asId(word); std::uint32_t hashval = fnId * 17; // small prime for (unsigned i = entry-1; i >= entry-windowSize; --i) { - if (asOpCode(instPos[i]) == spv::OpFunction) + if (asOpCode(instPos[i]) == spv::Op::OpFunction) break; hashval = hashval * 30103 + asOpCodeHash(instPos[i]); // 30103 = semiarbitrary prime } for (unsigned i = entry; i <= entry + windowSize; ++i) { - if (asOpCode(instPos[i]) == spv::OpFunctionEnd) + if (asOpCode(instPos[i]) == spv::Op::OpFunctionEnd) break; hashval = hashval * 30103 + asOpCodeHash(instPos[i]); // 30103 = semiarbitrary prime } @@ -833,7 +835,7 @@ namespace spv { } } - spv::Op thisOpCode(spv::OpNop); + spv::Op thisOpCode(spv::Op::OpNop); std::unordered_map opCounter; int idCounter(0); fnId = spv::NoResult; @@ -841,53 +843,53 @@ namespace spv { process( [&](spv::Op opCode, unsigned start) { switch (opCode) { - case spv::OpFunction: + case spv::Op::OpFunction: // Reset counters at each function idCounter = 0; opCounter.clear(); fnId = asId(start + 2); break; - case spv::OpImageSampleImplicitLod: - case spv::OpImageSampleExplicitLod: - case spv::OpImageSampleDrefImplicitLod: - case spv::OpImageSampleDrefExplicitLod: - case spv::OpImageSampleProjImplicitLod: - case spv::OpImageSampleProjExplicitLod: - case spv::OpImageSampleProjDrefImplicitLod: - case spv::OpImageSampleProjDrefExplicitLod: - case spv::OpDot: - case spv::OpCompositeExtract: - case spv::OpCompositeInsert: - case spv::OpVectorShuffle: - case spv::OpLabel: - case spv::OpVariable: + case spv::Op::OpImageSampleImplicitLod: + case spv::Op::OpImageSampleExplicitLod: + case spv::Op::OpImageSampleDrefImplicitLod: + case spv::Op::OpImageSampleDrefExplicitLod: + case spv::Op::OpImageSampleProjImplicitLod: + case spv::Op::OpImageSampleProjExplicitLod: + case spv::Op::OpImageSampleProjDrefImplicitLod: + case spv::Op::OpImageSampleProjDrefExplicitLod: + case spv::Op::OpDot: + case spv::Op::OpCompositeExtract: + case spv::Op::OpCompositeInsert: + case spv::Op::OpVectorShuffle: + case spv::Op::OpLabel: + case spv::Op::OpVariable: - case spv::OpAccessChain: - case spv::OpLoad: - case spv::OpStore: - case spv::OpCompositeConstruct: - case spv::OpFunctionCall: - ++opCounter[opCode]; + case spv::Op::OpAccessChain: + case spv::Op::OpLoad: + case spv::Op::OpStore: + case spv::Op::OpCompositeConstruct: + case spv::Op::OpFunctionCall: + ++opCounter[enumCast(opCode)]; idCounter = 0; thisOpCode = opCode; break; default: - thisOpCode = spv::OpNop; + thisOpCode = spv::Op::OpNop; } return false; }, [&](spv::Id& id) { - if (thisOpCode != spv::OpNop) { + if (thisOpCode != spv::Op::OpNop) { ++idCounter; const std::uint32_t hashval = // Explicitly cast operands to unsigned int to avoid integer // promotion to signed int followed by integer overflow, // which would result in undefined behavior. - static_cast(opCounter[thisOpCode]) - * thisOpCode + static_cast(opCounter[enumCast(thisOpCode)]) + * enumCast(thisOpCode) * 50047 + idCounter + static_cast(fnId) * 117; @@ -909,16 +911,16 @@ namespace spv { process( [&](spv::Op opCode, unsigned start) { // Add inputs and uniforms to the map - if ((opCode == spv::OpVariable && asWordCount(start) == 4) && - (spv[start+3] == spv::StorageClassUniform || - spv[start+3] == spv::StorageClassUniformConstant || - spv[start+3] == spv::StorageClassInput)) + if ((opCode == spv::Op::OpVariable && asWordCount(start) == 4) && + (spv[start+3] == (unsigned)spv::StorageClass::Uniform || + spv[start+3] == (unsigned)spv::StorageClass::UniformConstant || + spv[start+3] == (unsigned)spv::StorageClass::Input)) fnLocalVars.insert(asId(start+2)); - if (opCode == spv::OpAccessChain && fnLocalVars.count(asId(start+3)) > 0) + if (opCode == spv::Op::OpAccessChain && fnLocalVars.count(asId(start+3)) > 0) fnLocalVars.insert(asId(start+2)); - if (opCode == spv::OpLoad && fnLocalVars.count(asId(start+3)) > 0) { + if (opCode == spv::Op::OpLoad && fnLocalVars.count(asId(start+3)) > 0) { idMap[asId(start+2)] = asId(start+3); stripInst(start); } @@ -939,11 +941,11 @@ namespace spv { process( [&](spv::Op opCode, unsigned start) { // Add inputs and uniforms to the map - if ((opCode == spv::OpVariable && asWordCount(start) == 4) && - (spv[start+3] == spv::StorageClassOutput)) + if ((opCode == spv::Op::OpVariable && asWordCount(start) == 4) && + (spv[start+3] == (int)spv::StorageClass::Output)) fnLocalVars.insert(asId(start+2)); - if (opCode == spv::OpStore && fnLocalVars.count(asId(start+1)) > 0) { + if (opCode == spv::Op::OpStore && fnLocalVars.count(asId(start+1)) > 0) { idMap[asId(start+2)] = asId(start+1); stripInst(start); } @@ -984,19 +986,19 @@ namespace spv { ++blockNum; // Add local variables to the map - if ((opCode == spv::OpVariable && spv[start+3] == spv::StorageClassFunction && asWordCount(start) == 4)) { + if ((opCode == spv::Op::OpVariable && spv[start+3] == (unsigned)spv::StorageClass::Function && asWordCount(start) == 4)) { fnLocalVars.insert(asId(start+2)); return true; } // Ignore process vars referenced via access chain - if ((opCode == spv::OpAccessChain || opCode == spv::OpInBoundsAccessChain) && fnLocalVars.count(asId(start+3)) > 0) { + if ((opCode == spv::Op::OpAccessChain || opCode == spv::Op::OpInBoundsAccessChain) && fnLocalVars.count(asId(start+3)) > 0) { fnLocalVars.erase(asId(start+3)); idMap.erase(asId(start+3)); return true; } - if (opCode == spv::OpLoad && fnLocalVars.count(asId(start+3)) > 0) { + if (opCode == spv::Op::OpLoad && fnLocalVars.count(asId(start + 3)) > 0) { const spv::Id varId = asId(start+3); // Avoid loads before stores @@ -1006,7 +1008,7 @@ namespace spv { } // don't do for volatile references - if (wordCount > 4 && (spv[start+4] & spv::MemoryAccessVolatileMask)) { + if (wordCount > 4 && (spv[start+4] & spv::MemoryAccessMask::Volatile)) { fnLocalVars.erase(varId); idMap.erase(varId); } @@ -1022,7 +1024,7 @@ namespace spv { return true; } - if (opCode == spv::OpStore && fnLocalVars.count(asId(start+1)) > 0) { + if (opCode == spv::Op::OpStore && fnLocalVars.count(asId(start+1)) > 0) { const spv::Id varId = asId(start+1); if (idMap.find(varId) == idMap.end()) { @@ -1034,7 +1036,7 @@ namespace spv { } // don't do for volatile references - if (wordCount > 3 && (spv[start+3] & spv::MemoryAccessVolatileMask)) { + if (wordCount > 3 && (spv[start+3] & spv::MemoryAccessMask::Volatile)) { fnLocalVars.erase(asId(start+3)); idMap.erase(asId(start+3)); } @@ -1067,7 +1069,7 @@ namespace spv { process( [&](spv::Op opCode, unsigned start) { - if (opCode == spv::OpLoad && fnLocalVars.count(asId(start+3)) > 0) + if (opCode == spv::Op::OpLoad && fnLocalVars.count(asId(start+3)) > 0) idMap[asId(start+2)] = idMap[asId(start+3)]; return false; }, @@ -1093,9 +1095,9 @@ namespace spv { // Remove the load/store/variables for the ones we've discovered process( [&](spv::Op opCode, unsigned start) { - if ((opCode == spv::OpLoad && fnLocalVars.count(asId(start+3)) > 0) || - (opCode == spv::OpStore && fnLocalVars.count(asId(start+1)) > 0) || - (opCode == spv::OpVariable && fnLocalVars.count(asId(start+2)) > 0)) { + if ((opCode == spv::Op::OpLoad && fnLocalVars.count(asId(start+3)) > 0) || + (opCode == spv::Op::OpStore && fnLocalVars.count(asId(start+1)) > 0) || + (opCode == spv::Op::OpVariable && fnLocalVars.count(asId(start+2)) > 0)) { stripInst(start); return true; @@ -1174,10 +1176,10 @@ namespace spv { // Count function variable use process( [&](spv::Op opCode, unsigned start) { - if (opCode == spv::OpVariable) { + if (opCode == spv::Op::OpVariable) { ++varUseCount[asId(start+2)]; return true; - } else if (opCode == spv::OpEntryPoint) { + } else if (opCode == spv::Op::OpEntryPoint) { const int wordCount = asWordCount(start); for (int i = 4; i < wordCount; i++) { ++varUseCount[asId(start+i)]; @@ -1197,9 +1199,9 @@ namespace spv { process( [&](spv::Op opCode, unsigned start) { spv::Id id = spv::NoResult; - if (opCode == spv::OpVariable) + if (opCode == spv::Op::OpVariable) id = asId(start+2); - if (opCode == spv::OpDecorate || opCode == spv::OpName) + if (opCode == spv::Op::OpDecorate || opCode == spv::Op::OpName) id = asId(start+1); if (id != spv::NoResult && varUseCount[id] == 1) @@ -1343,30 +1345,30 @@ namespace spv { const spv::Op opCode = asOpCode(typeStart); switch (opCode) { - case spv::OpTypeVoid: return 0; - case spv::OpTypeBool: return 1; - case spv::OpTypeInt: return 3 + (spv[typeStart+3]); - case spv::OpTypeFloat: return 5; - case spv::OpTypeVector: + case spv::Op::OpTypeVoid: return 0; + case spv::Op::OpTypeBool: return 1; + case spv::Op::OpTypeInt: return 3 + (spv[typeStart+3]); + case spv::Op::OpTypeFloat: return 5; + case spv::Op::OpTypeVector: return 6 + hashType(idPos(spv[typeStart+2])) * (spv[typeStart+3] - 1); - case spv::OpTypeMatrix: + case spv::Op::OpTypeMatrix: return 30 + hashType(idPos(spv[typeStart+2])) * (spv[typeStart+3] - 1); - case spv::OpTypeImage: + case spv::Op::OpTypeImage: return 120 + hashType(idPos(spv[typeStart+2])) + spv[typeStart+3] + // dimensionality spv[typeStart+4] * 8 * 16 + // depth spv[typeStart+5] * 4 * 16 + // arrayed spv[typeStart+6] * 2 * 16 + // multisampled spv[typeStart+7] * 1 * 16; // format - case spv::OpTypeSampler: + case spv::Op::OpTypeSampler: return 500; - case spv::OpTypeSampledImage: + case spv::Op::OpTypeSampledImage: return 502; - case spv::OpTypeArray: + case spv::Op::OpTypeArray: return 501 + hashType(idPos(spv[typeStart+2])) * spv[typeStart+3]; - case spv::OpTypeRuntimeArray: + case spv::Op::OpTypeRuntimeArray: return 5000 + hashType(idPos(spv[typeStart+2])); - case spv::OpTypeStruct: + case spv::Op::OpTypeStruct: { std::uint32_t hash = 10000; for (unsigned w=2; w < wordCount; ++w) @@ -1374,9 +1376,9 @@ namespace spv { return hash; } - case spv::OpTypeOpaque: return 6000 + spv[typeStart+2]; - case spv::OpTypePointer: return 100000 + hashType(idPos(spv[typeStart+3])); - case spv::OpTypeFunction: + case spv::Op::OpTypeOpaque: return 6000 + spv[typeStart+2]; + case spv::Op::OpTypePointer: return 100000 + hashType(idPos(spv[typeStart+3])); + case spv::Op::OpTypeFunction: { std::uint32_t hash = 200000; for (unsigned w=2; w < wordCount; ++w) @@ -1384,35 +1386,35 @@ namespace spv { return hash; } - case spv::OpTypeEvent: return 300000; - case spv::OpTypeDeviceEvent: return 300001; - case spv::OpTypeReserveId: return 300002; - case spv::OpTypeQueue: return 300003; - case spv::OpTypePipe: return 300004; - case spv::OpConstantTrue: return 300007; - case spv::OpConstantFalse: return 300008; - case spv::OpTypeRayQueryKHR: return 300009; - case spv::OpTypeAccelerationStructureKHR: return 300010; - case spv::OpConstantComposite: + case spv::Op::OpTypeEvent: return 300000; + case spv::Op::OpTypeDeviceEvent: return 300001; + case spv::Op::OpTypeReserveId: return 300002; + case spv::Op::OpTypeQueue: return 300003; + case spv::Op::OpTypePipe: return 300004; + case spv::Op::OpConstantTrue: return 300007; + case spv::Op::OpConstantFalse: return 300008; + case spv::Op::OpTypeRayQueryKHR: return 300009; + case spv::Op::OpTypeAccelerationStructureKHR: return 300010; + case spv::Op::OpConstantComposite: { std::uint32_t hash = 300011 + hashType(idPos(spv[typeStart+1])); for (unsigned w=3; w < wordCount; ++w) hash += w * hashType(idPos(spv[typeStart+w])); return hash; } - case spv::OpConstant: + case spv::Op::OpConstant: { std::uint32_t hash = 400011 + hashType(idPos(spv[typeStart+1])); for (unsigned w=3; w < wordCount; ++w) hash += w * spv[typeStart+w]; return hash; } - case spv::OpConstantNull: + case spv::Op::OpConstantNull: { std::uint32_t hash = 500009 + hashType(idPos(spv[typeStart+1])); return hash; } - case spv::OpConstantSampler: + case spv::Op::OpConstantSampler: { std::uint32_t hash = 600011 + hashType(idPos(spv[typeStart+1])); for (unsigned w=3; w < wordCount; ++w) diff --git a/3rdparty/glslang/SPIRV/SPVRemapper.h b/3rdparty/glslang/SPIRV/SPVRemapper.h index e60da792f..d4c2295c9 100644 --- a/3rdparty/glslang/SPIRV/SPVRemapper.h +++ b/3rdparty/glslang/SPIRV/SPVRemapper.h @@ -91,7 +91,7 @@ public: #include #include -#include "spirv.hpp" +#include "spirv.hpp11" namespace spv { diff --git a/3rdparty/glslang/SPIRV/SpvBuilder.cpp b/3rdparty/glslang/SPIRV/SpvBuilder.cpp index b4eb71b83..1c2e3874f 100644 --- a/3rdparty/glslang/SPIRV/SpvBuilder.cpp +++ b/3rdparty/glslang/SPIRV/SpvBuilder.cpp @@ -46,6 +46,7 @@ #include #include "SpvBuilder.h" +#include "spvUtil.h" #include "hex_float.h" #ifndef _WIN32 @@ -56,10 +57,10 @@ namespace spv { Builder::Builder(unsigned int spvVersion, unsigned int magicNumber, SpvBuildLogger* buildLogger) : spvVersion(spvVersion), - sourceLang(SourceLanguageUnknown), + sourceLang(SourceLanguage::Unknown), sourceVersion(0), - addressModel(AddressingModelLogical), - memoryModel(MemoryModelGLSL450), + addressModel(AddressingModel::Logical), + memoryModel(MemoryModel::GLSL450), builderNumber(magicNumber), buildPoint(nullptr), uniqueId(0), @@ -76,7 +77,7 @@ Builder::~Builder() Id Builder::import(const char* name) { - Instruction* import = new Instruction(getUniqueId(), NoType, OpExtInstImport); + Instruction* import = new Instruction(getUniqueId(), NoType, Op::OpExtInstImport); import->addStringOperand(name); module.mapInstruction(import); @@ -88,17 +89,17 @@ Id Builder::import(const char* name) Id Builder::makeVoidType() { Instruction* type; - if (groupedTypes[OpTypeVoid].size() == 0) { + if (groupedTypes[enumCast(Op::OpTypeVoid)].size() == 0) { Id typeId = getUniqueId(); - type = new Instruction(typeId, NoType, OpTypeVoid); - groupedTypes[OpTypeVoid].push_back(type); + type = new Instruction(typeId, NoType, Op::OpTypeVoid); + groupedTypes[enumCast(Op::OpTypeVoid)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); // Core OpTypeVoid used for debug void type if (emitNonSemanticShaderDebugInfo) debugId[typeId] = typeId; } else - type = groupedTypes[OpTypeVoid].back(); + type = groupedTypes[enumCast(Op::OpTypeVoid)].back(); return type->getResultId(); } @@ -106,9 +107,9 @@ Id Builder::makeVoidType() Id Builder::makeBoolType() { Instruction* type; - if (groupedTypes[OpTypeBool].size() == 0) { - type = new Instruction(getUniqueId(), NoType, OpTypeBool); - groupedTypes[OpTypeBool].push_back(type); + if (groupedTypes[enumCast(Op::OpTypeBool)].size() == 0) { + type = new Instruction(getUniqueId(), NoType, Op::OpTypeBool); + groupedTypes[enumCast(Op::OpTypeBool)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -118,7 +119,7 @@ Id Builder::makeBoolType() } } else - type = groupedTypes[OpTypeBool].back(); + type = groupedTypes[enumCast(Op::OpTypeBool)].back(); return type->getResultId(); @@ -127,13 +128,13 @@ Id Builder::makeBoolType() Id Builder::makeSamplerType() { Instruction* type; - if (groupedTypes[OpTypeSampler].size() == 0) { - type = new Instruction(getUniqueId(), NoType, OpTypeSampler); - groupedTypes[OpTypeSampler].push_back(type); + if (groupedTypes[enumCast(Op::OpTypeSampler)].size() == 0) { + type = new Instruction(getUniqueId(), NoType, Op::OpTypeSampler); + groupedTypes[enumCast(Op::OpTypeSampler)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); } else - type = groupedTypes[OpTypeSampler].back(); + type = groupedTypes[enumCast(Op::OpTypeSampler)].back(); if (emitNonSemanticShaderDebugInfo) { @@ -148,19 +149,19 @@ Id Builder::makePointer(StorageClass storageClass, Id pointee) { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypePointer].size(); ++t) { - type = groupedTypes[OpTypePointer][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypePointer)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypePointer)][t]; if (type->getImmediateOperand(0) == (unsigned)storageClass && type->getIdOperand(1) == pointee) return type->getResultId(); } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypePointer); + type = new Instruction(getUniqueId(), NoType, Op::OpTypePointer); type->reserveOperands(2); type->addImmediateOperand(storageClass); type->addIdOperand(pointee); - groupedTypes[OpTypePointer].push_back(type); + groupedTypes[enumCast(Op::OpTypePointer)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -177,7 +178,7 @@ Id Builder::makeForwardPointer(StorageClass storageClass) // Caching/uniquifying doesn't work here, because we don't know the // pointee type and there can be multiple forward pointers of the same // storage type. Somebody higher up in the stack must keep track. - Instruction* type = new Instruction(getUniqueId(), NoType, OpTypeForwardPointer); + Instruction* type = new Instruction(getUniqueId(), NoType, Op::OpTypeForwardPointer); type->addImmediateOperand(storageClass); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -193,18 +194,18 @@ Id Builder::makePointerFromForwardPointer(StorageClass storageClass, Id forwardP { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypePointer].size(); ++t) { - type = groupedTypes[OpTypePointer][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypePointer)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypePointer)][t]; if (type->getImmediateOperand(0) == (unsigned)storageClass && type->getIdOperand(1) == pointee) return type->getResultId(); } - type = new Instruction(forwardPointerType, NoType, OpTypePointer); + type = new Instruction(forwardPointerType, NoType, Op::OpTypePointer); type->reserveOperands(2); type->addImmediateOperand(storageClass); type->addIdOperand(pointee); - groupedTypes[OpTypePointer].push_back(type); + groupedTypes[enumCast(Op::OpTypePointer)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -224,19 +225,19 @@ Id Builder::makeIntegerType(int width, bool hasSign) { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeInt].size(); ++t) { - type = groupedTypes[OpTypeInt][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeInt)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeInt)][t]; if (type->getImmediateOperand(0) == (unsigned)width && type->getImmediateOperand(1) == (hasSign ? 1u : 0u)) return type->getResultId(); } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeInt); + type = new Instruction(getUniqueId(), NoType, Op::OpTypeInt); type->reserveOperands(2); type->addImmediateOperand(width); type->addImmediateOperand(hasSign ? 1 : 0); - groupedTypes[OpTypeInt].push_back(type); + groupedTypes[enumCast(Op::OpTypeInt)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -247,7 +248,7 @@ Id Builder::makeIntegerType(int width, bool hasSign) // these are currently handled by storage-type declarations and post processing break; case 64: - addCapability(CapabilityInt64); + addCapability(Capability::Int64); break; default: break; @@ -266,16 +267,19 @@ Id Builder::makeFloatType(int width) { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeFloat].size(); ++t) { - type = groupedTypes[OpTypeFloat][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeFloat)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeFloat)][t]; + if (type->getNumOperands() != 1) { + continue; + } if (type->getImmediateOperand(0) == (unsigned)width) return type->getResultId(); } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeFloat); + type = new Instruction(getUniqueId(), NoType, Op::OpTypeFloat); type->addImmediateOperand(width); - groupedTypes[OpTypeFloat].push_back(type); + groupedTypes[enumCast(Op::OpTypeFloat)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -285,7 +289,7 @@ Id Builder::makeFloatType(int width) // currently handled by storage-type declarations and post processing break; case 64: - addCapability(CapabilityFloat64); + addCapability(Capability::Float64); break; default: break; @@ -300,6 +304,43 @@ Id Builder::makeFloatType(int width) return type->getResultId(); } +Id Builder::makeBFloat16Type() +{ + // 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)16 && + type->getImmediateOperand(1) == FPEncoding::BFloat16KHR) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, Op::OpTypeFloat); + type->addImmediateOperand(16); + type->addImmediateOperand(FPEncoding::BFloat16KHR); + groupedTypes[enumCast(Op::OpTypeFloat)].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + addExtension(spv::E_SPV_KHR_bfloat16); + addCapability(Capability::BFloat16TypeKHR); + +#if 0 + // XXX not supported + if (emitNonSemanticShaderDebugInfo) + { + auto const debugResultId = makeFloatDebugType(width); + debugId[type->getResultId()] = debugResultId; + } +#endif + + return type->getResultId(); +} + // Make a struct without checking for duplication. // See makeStructResultType() for non-decorated structs // needed as the result of some instructions, which does @@ -310,10 +351,10 @@ Id Builder::makeStructType(const std::vector& members, const char* name, boo // structs can be duplicated except for decorations. // not found, make it - Instruction* type = new Instruction(getUniqueId(), NoType, OpTypeStruct); + Instruction* type = new Instruction(getUniqueId(), NoType, Op::OpTypeStruct); for (int op = 0; op < (int)members.size(); ++op) type->addIdOperand(members[op]); - groupedTypes[OpTypeStruct].push_back(type); + groupedTypes[enumCast(Op::OpTypeStruct)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); addName(type->getResultId(), name); @@ -333,8 +374,8 @@ Id Builder::makeStructResultType(Id type0, Id type1) { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeStruct].size(); ++t) { - type = groupedTypes[OpTypeStruct][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeStruct)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeStruct)][t]; if (type->getNumOperands() != 2) continue; if (type->getIdOperand(0) != type0 || @@ -355,19 +396,19 @@ Id Builder::makeVectorType(Id component, int size) { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeVector].size(); ++t) { - type = groupedTypes[OpTypeVector][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeVector)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeVector)][t]; if (type->getIdOperand(0) == component && type->getImmediateOperand(1) == (unsigned)size) return type->getResultId(); } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeVector); + type = new Instruction(getUniqueId(), NoType, Op::OpTypeVector); type->reserveOperands(2); type->addIdOperand(component); type->addImmediateOperand(size); - groupedTypes[OpTypeVector].push_back(type); + groupedTypes[enumCast(Op::OpTypeVector)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -388,19 +429,19 @@ Id Builder::makeMatrixType(Id component, int cols, int rows) // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeMatrix].size(); ++t) { - type = groupedTypes[OpTypeMatrix][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeMatrix)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeMatrix)][t]; if (type->getIdOperand(0) == column && type->getImmediateOperand(1) == (unsigned)cols) return type->getResultId(); } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeMatrix); + type = new Instruction(getUniqueId(), NoType, Op::OpTypeMatrix); type->reserveOperands(2); type->addIdOperand(column); type->addImmediateOperand(cols); - groupedTypes[OpTypeMatrix].push_back(type); + groupedTypes[enumCast(Op::OpTypeMatrix)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -417,8 +458,8 @@ Id Builder::makeCooperativeMatrixTypeKHR(Id component, Id scope, Id rows, Id col { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeMatrixKHR].size(); ++t) { - type = groupedTypes[OpTypeCooperativeMatrixKHR][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeCooperativeMatrixKHR)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeCooperativeMatrixKHR)][t]; if (type->getIdOperand(0) == component && type->getIdOperand(1) == scope && type->getIdOperand(2) == rows && @@ -428,14 +469,14 @@ Id Builder::makeCooperativeMatrixTypeKHR(Id component, Id scope, Id rows, Id col } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeCooperativeMatrixKHR); + type = new Instruction(getUniqueId(), NoType, Op::OpTypeCooperativeMatrixKHR); type->reserveOperands(5); type->addIdOperand(component); type->addIdOperand(scope); type->addIdOperand(rows); type->addIdOperand(cols); type->addIdOperand(use); - groupedTypes[OpTypeCooperativeMatrixKHR].push_back(type); + groupedTypes[enumCast(Op::OpTypeCooperativeMatrixKHR)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -483,21 +524,21 @@ Id Builder::makeCooperativeMatrixTypeNV(Id component, Id scope, Id rows, Id cols { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeMatrixNV].size(); ++t) { - type = groupedTypes[OpTypeCooperativeMatrixNV][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeCooperativeMatrixNV)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeCooperativeMatrixNV)][t]; if (type->getIdOperand(0) == component && type->getIdOperand(1) == scope && type->getIdOperand(2) == rows && type->getIdOperand(3) == cols) return type->getResultId(); } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeCooperativeMatrixNV); + type = new Instruction(getUniqueId(), NoType, Op::OpTypeCooperativeMatrixNV); type->reserveOperands(4); type->addIdOperand(component); type->addIdOperand(scope); type->addIdOperand(rows); type->addIdOperand(cols); - groupedTypes[OpTypeCooperativeMatrixNV].push_back(type); + groupedTypes[enumCast(Op::OpTypeCooperativeMatrixNV)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -507,10 +548,10 @@ Id Builder::makeCooperativeMatrixTypeNV(Id component, Id scope, Id rows, Id cols Id Builder::makeCooperativeMatrixTypeWithSameShape(Id component, Id otherType) { Instruction* instr = module.getInstruction(otherType); - if (instr->getOpCode() == OpTypeCooperativeMatrixNV) { + if (instr->getOpCode() == Op::OpTypeCooperativeMatrixNV) { return makeCooperativeMatrixTypeNV(component, instr->getIdOperand(1), instr->getIdOperand(2), instr->getIdOperand(3)); } else { - assert(instr->getOpCode() == OpTypeCooperativeMatrixKHR); + assert(instr->getOpCode() == Op::OpTypeCooperativeMatrixKHR); return makeCooperativeMatrixTypeKHR(component, instr->getIdOperand(1), instr->getIdOperand(2), instr->getIdOperand(3), instr->getIdOperand(4)); } } @@ -519,18 +560,18 @@ Id Builder::makeCooperativeVectorTypeNV(Id componentType, Id components) { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeCooperativeVectorNV].size(); ++t) { - type = groupedTypes[OpTypeCooperativeVectorNV][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeCooperativeVectorNV)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeCooperativeVectorNV)][t]; if (type->getIdOperand(0) == componentType && type->getIdOperand(1) == components) return type->getResultId(); } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeCooperativeVectorNV); + type = new Instruction(getUniqueId(), NoType, Op::OpTypeCooperativeVectorNV); type->addIdOperand(componentType); type->addIdOperand(components); - groupedTypes[OpTypeCooperativeVectorNV].push_back(type); + groupedTypes[enumCast(Op::OpTypeCooperativeVectorNV)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -541,8 +582,8 @@ Id Builder::makeGenericType(spv::Op opcode, std::vector& opera { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[opcode].size(); ++t) { - type = groupedTypes[opcode][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(opcode)].size(); ++t) { + type = groupedTypes[enumCast(opcode)][t]; if (static_cast(type->getNumOperands()) != operands.size()) continue; // Number mismatch, find next @@ -563,7 +604,7 @@ Id Builder::makeGenericType(spv::Op opcode, std::vector& opera else type->addImmediateOperand(operands[op].word); } - groupedTypes[opcode].push_back(type); + groupedTypes[enumCast(opcode)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -579,23 +620,28 @@ Id Builder::makeArrayType(Id element, Id sizeId, int stride) Instruction* type; if (stride == 0) { // try to find existing type - for (int t = 0; t < (int)groupedTypes[OpTypeArray].size(); ++t) { - type = groupedTypes[OpTypeArray][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeArray)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeArray)][t]; if (type->getIdOperand(0) == element && - type->getIdOperand(1) == sizeId) + type->getIdOperand(1) == sizeId && + explicitlyLaidOut.find(type->getResultId()) == explicitlyLaidOut.end()) return type->getResultId(); } } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeArray); + type = new Instruction(getUniqueId(), NoType, Op::OpTypeArray); type->reserveOperands(2); type->addIdOperand(element); type->addIdOperand(sizeId); - groupedTypes[OpTypeArray].push_back(type); + groupedTypes[enumCast(Op::OpTypeArray)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); + if (stride != 0) { + explicitlyLaidOut.insert(type->getResultId()); + } + if (emitNonSemanticShaderDebugInfo) { auto const debugResultId = makeArrayDebugType(element, sizeId); @@ -607,7 +653,7 @@ Id Builder::makeArrayType(Id element, Id sizeId, int stride) Id Builder::makeRuntimeArray(Id element) { - Instruction* type = new Instruction(getUniqueId(), NoType, OpTypeRuntimeArray); + Instruction* type = new Instruction(getUniqueId(), NoType, Op::OpTypeRuntimeArray); type->addIdOperand(element); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -625,8 +671,8 @@ Id Builder::makeFunctionType(Id returnType, const std::vector& paramTypes) { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeFunction].size(); ++t) { - type = groupedTypes[OpTypeFunction][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeFunction)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeFunction)][t]; if (type->getIdOperand(0) != returnType || (int)paramTypes.size() != type->getNumOperands() - 1) continue; bool mismatch = false; @@ -643,8 +689,8 @@ Id Builder::makeFunctionType(Id returnType, const std::vector& paramTypes) // while creating the HLSL wrapper. Consequently, if we encounter another void(void) function, we need to create // the associated debug function type if it hasn't been created yet. if(emitNonSemanticShaderDebugInfo && debugId[type->getResultId()] == 0) { - assert(sourceLang == spv::SourceLanguageHLSL); - assert(getTypeClass(returnType) == OpTypeVoid && paramTypes.size() == 0); + assert(sourceLang == spv::SourceLanguage::HLSL); + assert(getTypeClass(returnType) == Op::OpTypeVoid && paramTypes.size() == 0); Id debugTypeId = makeDebugFunctionType(returnType, {}); debugId[type->getResultId()] = debugTypeId; @@ -655,12 +701,12 @@ Id Builder::makeFunctionType(Id returnType, const std::vector& paramTypes) // not found, make it Id typeId = getUniqueId(); - type = new Instruction(typeId, NoType, OpTypeFunction); + type = new Instruction(typeId, NoType, Op::OpTypeFunction); type->reserveOperands(paramTypes.size() + 1); type->addIdOperand(returnType); for (int p = 0; p < (int)paramTypes.size(); ++p) type->addIdOperand(paramTypes[p]); - groupedTypes[OpTypeFunction].push_back(type); + groupedTypes[enumCast(Op::OpTypeFunction)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -678,7 +724,7 @@ Id Builder::makeDebugFunctionType(Id returnType, const std::vector& paramTyp assert(debugId[returnType] != 0); Id typeId = getUniqueId(); - auto type = new Instruction(typeId, makeVoidType(), OpExtInst); + auto type = new Instruction(typeId, makeVoidType(), Op::OpExtInst); type->reserveOperands(paramTypes.size() + 4); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeFunction); @@ -704,8 +750,8 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeImage].size(); ++t) { - type = groupedTypes[OpTypeImage][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeImage)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeImage)][t]; if (type->getIdOperand(0) == sampledType && type->getImmediateOperand(1) == (unsigned int)dim && type->getImmediateOperand(2) == ( depth ? 1u : 0u) && @@ -717,7 +763,7 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeImage); + type = new Instruction(getUniqueId(), NoType, Op::OpTypeImage); type->reserveOperands(7); type->addIdOperand(sampledType); type->addImmediateOperand( dim); @@ -727,40 +773,40 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo type->addImmediateOperand(sampled); type->addImmediateOperand((unsigned int)format); - groupedTypes[OpTypeImage].push_back(type); + groupedTypes[enumCast(Op::OpTypeImage)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); // deal with capabilities switch (dim) { - case DimBuffer: + case Dim::Buffer: if (sampled == 1) - addCapability(CapabilitySampledBuffer); + addCapability(Capability::SampledBuffer); else - addCapability(CapabilityImageBuffer); + addCapability(Capability::ImageBuffer); break; - case Dim1D: + case Dim::Dim1D: if (sampled == 1) - addCapability(CapabilitySampled1D); + addCapability(Capability::Sampled1D); else - addCapability(CapabilityImage1D); + addCapability(Capability::Image1D); break; - case DimCube: + case Dim::Cube: if (arrayed) { if (sampled == 1) - addCapability(CapabilitySampledCubeArray); + addCapability(Capability::SampledCubeArray); else - addCapability(CapabilityImageCubeArray); + addCapability(Capability::ImageCubeArray); } break; - case DimRect: + case Dim::Rect: if (sampled == 1) - addCapability(CapabilitySampledRect); + addCapability(Capability::SampledRect); else - addCapability(CapabilityImageRect); + addCapability(Capability::ImageRect); break; - case DimSubpassData: - addCapability(CapabilityInputAttachment); + case Dim::SubpassData: + addCapability(Capability::InputAttachment); break; default: break; @@ -770,10 +816,10 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo if (sampled == 2) { // Images used with subpass data are not storage // images, so don't require the capability for them. - if (dim != Dim::DimSubpassData) - addCapability(CapabilityStorageImageMultisample); + if (dim != Dim::SubpassData) + addCapability(Capability::StorageImageMultisample); if (arrayed) - addCapability(CapabilityImageMSArray); + addCapability(Capability::ImageMSArray); } } @@ -781,10 +827,10 @@ Id Builder::makeImageType(Id sampledType, Dim dim, bool depth, bool arrayed, boo { auto TypeName = [&dim]() -> char const* { switch (dim) { - case Dim1D: return "type.1d.image"; - case Dim2D: return "type.2d.image"; - case Dim3D: return "type.3d.image"; - case DimCube: return "type.cube.image"; + case Dim::Dim1D: return "type.1d.image"; + case Dim::Dim2D: return "type.2d.image"; + case Dim::Dim3D: return "type.3d.image"; + case Dim::Cube: return "type.cube.image"; default: return "type.image"; } }; @@ -800,17 +846,17 @@ Id Builder::makeSampledImageType(Id imageType) { // try to find it Instruction* type; - for (int t = 0; t < (int)groupedTypes[OpTypeSampledImage].size(); ++t) { - type = groupedTypes[OpTypeSampledImage][t]; + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypeSampledImage)].size(); ++t) { + type = groupedTypes[enumCast(Op::OpTypeSampledImage)][t]; if (type->getIdOperand(0) == imageType) return type->getResultId(); } // not found, make it - type = new Instruction(getUniqueId(), NoType, OpTypeSampledImage); + type = new Instruction(getUniqueId(), NoType, Op::OpTypeSampledImage); type->addIdOperand(imageType); - groupedTypes[OpTypeSampledImage].push_back(type); + groupedTypes[enumCast(Op::OpTypeSampledImage)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); @@ -828,7 +874,7 @@ Id Builder::makeDebugInfoNone() if (debugInfoNone != 0) return debugInfoNone; - Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); inst->reserveOperands(2); inst->addIdOperand(nonSemanticShaderDebugInfo); inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugInfoNone); @@ -853,7 +899,7 @@ Id Builder::makeBoolDebugType(int const size) return type->getResultId(); } - type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); type->reserveOperands(6); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic); @@ -891,7 +937,7 @@ Id Builder::makeIntegerDebugType(int const width, bool const hasSign) } // not found, make it - type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); type->reserveOperands(6); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic); @@ -931,7 +977,7 @@ Id Builder::makeFloatDebugType(int const width) } // not found, make it - type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); type->reserveOperands(6); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic); @@ -962,7 +1008,7 @@ Id Builder::makeSequentialDebugType(Id const baseType, Id const componentCount, } // not found, make it - type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); type->reserveOperands(4); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(sequenceType); @@ -998,7 +1044,7 @@ Id Builder::makeMatrixDebugType(Id const vectorType, int const vectorCount, bool } // not found, make it - type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + type = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); type->reserveOperands(5); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeMatrix); @@ -1017,7 +1063,7 @@ Id Builder::makeMemberDebugType(Id const memberType, DebugTypeLoc const& debugTy { assert(debugId[memberType] != 0); - Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + Instruction* type = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); type->reserveOperands(10); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeMember); @@ -1057,7 +1103,7 @@ Id Builder::makeCompositeDebugType(std::vector const& memberTypes, char cons } // Create The structure debug type. - Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + Instruction* type = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); type->reserveOperands(memberDebugTypes.size() + 11); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeComposite); @@ -1102,7 +1148,7 @@ Id Builder::makePointerDebugType(StorageClass storageClass, Id const baseType) } } - Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + Instruction* type = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); type->reserveOperands(5); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypePointer); @@ -1126,7 +1172,7 @@ Id Builder::makeForwardPointerDebugType(StorageClass storageClass) this->addExtension(spv::E_SPV_KHR_relaxed_extended_instruction); - Instruction *type = new Instruction(getUniqueId(), makeVoidType(), OpExtInstWithForwardRefsKHR); + Instruction *type = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInstWithForwardRefsKHR); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypePointer); type->addIdOperand(type->getResultId()); @@ -1144,29 +1190,54 @@ Id Builder::makeDebugSource(const Id fileName) { if (debugSourceId.find(fileName) != debugSourceId.end()) return debugSourceId[fileName]; spv::Id resultId = getUniqueId(); - Instruction* sourceInst = new Instruction(resultId, makeVoidType(), OpExtInst); + Instruction* sourceInst = new Instruction(resultId, makeVoidType(), Op::OpExtInst); sourceInst->reserveOperands(3); sourceInst->addIdOperand(nonSemanticShaderDebugInfo); sourceInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugSource); sourceInst->addIdOperand(fileName); + constantsTypesGlobals.push_back(std::unique_ptr(sourceInst)); + module.mapInstruction(sourceInst); if (emitNonSemanticShaderDebugSource) { - spv::Id sourceId = 0; + const int maxWordCount = 0xFFFF; + const int opSourceWordCount = 4; + const int nonNullBytesPerInstruction = 4 * (maxWordCount - opSourceWordCount) - 1; + auto processDebugSource = [&](std::string source) { + if (source.size() > 0) { + int nextByte = 0; + while ((int)source.size() - nextByte > 0) { + auto subString = source.substr(nextByte, nonNullBytesPerInstruction); + auto sourceId = getStringId(subString); + if (nextByte == 0) { + // DebugSource + sourceInst->addIdOperand(sourceId); + } else { + // DebugSourceContinued + Instruction* sourceContinuedInst = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); + sourceContinuedInst->reserveOperands(2); + sourceContinuedInst->addIdOperand(nonSemanticShaderDebugInfo); + sourceContinuedInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugSourceContinued); + sourceContinuedInst->addIdOperand(sourceId); + constantsTypesGlobals.push_back(std::unique_ptr(sourceContinuedInst)); + module.mapInstruction(sourceContinuedInst); + } + nextByte += nonNullBytesPerInstruction; + } + } else { + auto sourceId = getStringId(source); + sourceInst->addIdOperand(sourceId); + } + }; if (fileName == mainFileId) { - sourceId = getStringId(sourceText); + processDebugSource(sourceText); } else { auto incItr = includeFiles.find(fileName); if (incItr != includeFiles.end()) { - sourceId = getStringId(*incItr->second); + processDebugSource(*incItr->second); + } else { + // We omit the optional source text item if not available in glslang } } - - // We omit the optional source text item if not available in glslang - if (sourceId != 0) { - sourceInst->addIdOperand(sourceId); - } } - constantsTypesGlobals.push_back(std::unique_ptr(sourceInst)); - module.mapInstruction(sourceInst); debugSourceId[fileName] = resultId; return resultId; } @@ -1175,7 +1246,7 @@ Id Builder::makeDebugCompilationUnit() { if (nonSemanticShaderCompilationUnitId != 0) return nonSemanticShaderCompilationUnitId; spv::Id resultId = getUniqueId(); - Instruction* sourceInst = new Instruction(resultId, makeVoidType(), OpExtInst); + Instruction* sourceInst = new Instruction(resultId, makeVoidType(), Op::OpExtInst); sourceInst->reserveOperands(6); sourceInst->addIdOperand(nonSemanticShaderDebugInfo); sourceInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugCompilationUnit); @@ -1199,7 +1270,7 @@ Id Builder::createDebugGlobalVariable(Id const type, char const*const name, Id c { assert(type != 0); - Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); inst->reserveOperands(11); inst->addIdOperand(nonSemanticShaderDebugInfo); inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugGlobalVariable); @@ -1224,7 +1295,7 @@ Id Builder::createDebugLocalVariable(Id type, char const*const name, size_t cons assert(name != nullptr); assert(!currentDebugScopeId.empty()); - Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); inst->reserveOperands(9); inst->addIdOperand(nonSemanticShaderDebugInfo); inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLocalVariable); @@ -1250,7 +1321,7 @@ Id Builder::makeDebugExpression() if (debugExpression != 0) return debugExpression; - Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); inst->reserveOperands(2); inst->addIdOperand(nonSemanticShaderDebugInfo); inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugExpression); @@ -1265,7 +1336,7 @@ Id Builder::makeDebugExpression() Id Builder::makeDebugDeclare(Id const debugLocalVariable, Id const pointer) { - Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); inst->reserveOperands(5); inst->addIdOperand(nonSemanticShaderDebugInfo); inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugDeclare); @@ -1279,7 +1350,7 @@ Id Builder::makeDebugDeclare(Id const debugLocalVariable, Id const pointer) Id Builder::makeDebugValue(Id const debugLocalVariable, Id const value) { - Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst); + Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), Op::OpExtInst); inst->reserveOperands(5); inst->addIdOperand(nonSemanticShaderDebugInfo); inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugValue); @@ -1294,9 +1365,9 @@ Id Builder::makeDebugValue(Id const debugLocalVariable, Id const value) Id Builder::makeAccelerationStructureType() { Instruction *type; - if (groupedTypes[OpTypeAccelerationStructureKHR].size() == 0) { - type = new Instruction(getUniqueId(), NoType, OpTypeAccelerationStructureKHR); - groupedTypes[OpTypeAccelerationStructureKHR].push_back(type); + if (groupedTypes[enumCast(Op::OpTypeAccelerationStructureKHR)].size() == 0) { + type = new Instruction(getUniqueId(), NoType, Op::OpTypeAccelerationStructureKHR); + groupedTypes[enumCast(Op::OpTypeAccelerationStructureKHR)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); if (emitNonSemanticShaderDebugInfo) { @@ -1304,7 +1375,7 @@ Id Builder::makeAccelerationStructureType() debugId[type->getResultId()] = debugType; } } else { - type = groupedTypes[OpTypeAccelerationStructureKHR].back(); + type = groupedTypes[enumCast(Op::OpTypeAccelerationStructureKHR)].back(); } return type->getResultId(); @@ -1313,9 +1384,9 @@ Id Builder::makeAccelerationStructureType() Id Builder::makeRayQueryType() { Instruction *type; - if (groupedTypes[OpTypeRayQueryKHR].size() == 0) { - type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryKHR); - groupedTypes[OpTypeRayQueryKHR].push_back(type); + if (groupedTypes[enumCast(Op::OpTypeRayQueryKHR)].size() == 0) { + type = new Instruction(getUniqueId(), NoType, Op::OpTypeRayQueryKHR); + groupedTypes[enumCast(Op::OpTypeRayQueryKHR)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); if (emitNonSemanticShaderDebugInfo) { @@ -1323,7 +1394,7 @@ Id Builder::makeRayQueryType() debugId[type->getResultId()] = debugType; } } else { - type = groupedTypes[OpTypeRayQueryKHR].back(); + type = groupedTypes[enumCast(Op::OpTypeRayQueryKHR)].back(); } return type->getResultId(); @@ -1332,13 +1403,13 @@ Id Builder::makeRayQueryType() Id Builder::makeHitObjectNVType() { Instruction *type; - if (groupedTypes[OpTypeHitObjectNV].size() == 0) { - type = new Instruction(getUniqueId(), NoType, OpTypeHitObjectNV); - groupedTypes[OpTypeHitObjectNV].push_back(type); + if (groupedTypes[enumCast(Op::OpTypeHitObjectNV)].size() == 0) { + type = new Instruction(getUniqueId(), NoType, Op::OpTypeHitObjectNV); + groupedTypes[enumCast(Op::OpTypeHitObjectNV)].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); } else { - type = groupedTypes[OpTypeHitObjectNV].back(); + type = groupedTypes[enumCast(Op::OpTypeHitObjectNV)].back(); } return type->getResultId(); @@ -1359,12 +1430,12 @@ Op Builder::getMostBasicTypeClass(Id typeId) const Op typeClass = instr->getOpCode(); switch (typeClass) { - case OpTypeVector: - case OpTypeMatrix: - case OpTypeArray: - case OpTypeRuntimeArray: + case Op::OpTypeVector: + case Op::OpTypeMatrix: + case Op::OpTypeArray: + case Op::OpTypeRuntimeArray: return getMostBasicTypeClass(instr->getIdOperand(0)); - case OpTypePointer: + case Op::OpTypePointer: return getMostBasicTypeClass(instr->getIdOperand(1)); default: return typeClass; @@ -1377,24 +1448,24 @@ unsigned int Builder::getNumTypeConstituents(Id typeId) const switch (instr->getOpCode()) { - case OpTypeBool: - case OpTypeInt: - case OpTypeFloat: - case OpTypePointer: + case Op::OpTypeBool: + case Op::OpTypeInt: + case Op::OpTypeFloat: + case Op::OpTypePointer: return 1; - case OpTypeVector: - case OpTypeMatrix: + case Op::OpTypeVector: + case Op::OpTypeMatrix: return instr->getImmediateOperand(1); - case OpTypeCooperativeVectorNV: - case OpTypeArray: + case Op::OpTypeCooperativeVectorNV: + case Op::OpTypeArray: { Id lengthId = instr->getIdOperand(1); return module.getInstruction(lengthId)->getImmediateOperand(0); } - case OpTypeStruct: + case Op::OpTypeStruct: return instr->getNumOperands(); - case OpTypeCooperativeMatrixKHR: - case OpTypeCooperativeMatrixNV: + case Op::OpTypeCooperativeMatrixKHR: + case Op::OpTypeCooperativeMatrixNV: // has only one constituent when used with OpCompositeConstruct. return 1; default: @@ -1413,18 +1484,18 @@ Id Builder::getScalarTypeId(Id typeId) const Op typeClass = instr->getOpCode(); switch (typeClass) { - case OpTypeVoid: - case OpTypeBool: - case OpTypeInt: - case OpTypeFloat: - case OpTypeStruct: + case Op::OpTypeVoid: + case Op::OpTypeBool: + case Op::OpTypeInt: + case Op::OpTypeFloat: + case Op::OpTypeStruct: return instr->getResultId(); - case OpTypeVector: - case OpTypeMatrix: - case OpTypeArray: - case OpTypeRuntimeArray: - case OpTypePointer: - case OpTypeCooperativeVectorNV: + case Op::OpTypeVector: + case Op::OpTypeMatrix: + case Op::OpTypeArray: + case Op::OpTypeRuntimeArray: + case Op::OpTypePointer: + case Op::OpTypeCooperativeVectorNV: return getScalarTypeId(getContainedTypeId(typeId)); default: assert(0); @@ -1440,17 +1511,17 @@ Id Builder::getContainedTypeId(Id typeId, int member) const Op typeClass = instr->getOpCode(); switch (typeClass) { - case OpTypeVector: - case OpTypeMatrix: - case OpTypeArray: - case OpTypeRuntimeArray: - case OpTypeCooperativeMatrixKHR: - case OpTypeCooperativeMatrixNV: - case OpTypeCooperativeVectorNV: + case Op::OpTypeVector: + case Op::OpTypeMatrix: + case Op::OpTypeArray: + case Op::OpTypeRuntimeArray: + case Op::OpTypeCooperativeMatrixKHR: + case Op::OpTypeCooperativeMatrixNV: + case Op::OpTypeCooperativeVectorNV: return instr->getIdOperand(0); - case OpTypePointer: + case Op::OpTypePointer: return instr->getIdOperand(1); - case OpTypeStruct: + case Op::OpTypeStruct: return instr->getIdOperand(member); default: assert(0); @@ -1494,21 +1565,21 @@ bool Builder::containsType(Id typeId, spv::Op typeOp, unsigned int width) const Op typeClass = instr.getOpCode(); switch (typeClass) { - case OpTypeInt: - case OpTypeFloat: + case Op::OpTypeInt: + case Op::OpTypeFloat: return typeClass == typeOp && instr.getImmediateOperand(0) == width; - case OpTypeStruct: + case Op::OpTypeStruct: for (int m = 0; m < instr.getNumOperands(); ++m) { if (containsType(instr.getIdOperand(m), typeOp, width)) return true; } return false; - case OpTypePointer: + case Op::OpTypePointer: return false; - case OpTypeVector: - case OpTypeMatrix: - case OpTypeArray: - case OpTypeRuntimeArray: + case Op::OpTypeVector: + case Op::OpTypeMatrix: + case Op::OpTypeArray: + case Op::OpTypeRuntimeArray: return containsType(getContainedTypeId(typeId), typeOp, width); default: return typeClass == typeOp; @@ -1524,11 +1595,11 @@ bool Builder::containsPhysicalStorageBufferOrArray(Id typeId) const Op typeClass = instr.getOpCode(); switch (typeClass) { - case OpTypePointer: - return getTypeStorageClass(typeId) == StorageClassPhysicalStorageBufferEXT; - case OpTypeArray: + case Op::OpTypePointer: + return getTypeStorageClass(typeId) == StorageClass::PhysicalStorageBufferEXT; + case Op::OpTypeArray: return containsPhysicalStorageBufferOrArray(getContainedTypeId(typeId)); - case OpTypeStruct: + case Op::OpTypeStruct: for (int m = 0; m < instr.getNumOperands(); ++m) { if (containsPhysicalStorageBufferOrArray(instr.getIdOperand(m))) return true; @@ -1544,8 +1615,8 @@ bool Builder::containsPhysicalStorageBufferOrArray(Id typeId) const Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value) { Instruction* constant; - for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) { - constant = groupedConstants[typeClass][i]; + for (int i = 0; i < (int)groupedConstants[enumCast(typeClass)].size(); ++i) { + constant = groupedConstants[enumCast(typeClass)][i]; if (constant->getOpCode() == opcode && constant->getTypeId() == typeId && constant->getImmediateOperand(0) == value) @@ -1559,8 +1630,8 @@ Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned valu Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2) { Instruction* constant; - for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) { - constant = groupedConstants[typeClass][i]; + for (int i = 0; i < (int)groupedConstants[enumCast(typeClass)].size(); ++i) { + constant = groupedConstants[enumCast(typeClass)][i]; if (constant->getOpCode() == opcode && constant->getTypeId() == typeId && constant->getImmediateOperand(0) == v1 && @@ -1577,20 +1648,20 @@ Id Builder::findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, bool Builder::isConstantOpCode(Op opcode) const { switch (opcode) { - case OpUndef: - case OpConstantTrue: - case OpConstantFalse: - case OpConstant: - case OpConstantComposite: - case OpConstantCompositeReplicateEXT: - case OpConstantSampler: - case OpConstantNull: - case OpSpecConstantTrue: - case OpSpecConstantFalse: - case OpSpecConstant: - case OpSpecConstantComposite: - case OpSpecConstantCompositeReplicateEXT: - case OpSpecConstantOp: + case Op::OpUndef: + case Op::OpConstantTrue: + case Op::OpConstantFalse: + case Op::OpConstant: + case Op::OpConstantComposite: + case Op::OpConstantCompositeReplicateEXT: + case Op::OpConstantSampler: + case Op::OpConstantNull: + case Op::OpSpecConstantTrue: + case Op::OpSpecConstantFalse: + case Op::OpSpecConstant: + case Op::OpSpecConstantComposite: + case Op::OpSpecConstantCompositeReplicateEXT: + case Op::OpSpecConstantOp: return true; default: return false; @@ -1601,12 +1672,12 @@ bool Builder::isConstantOpCode(Op opcode) const bool Builder::isSpecConstantOpCode(Op opcode) const { switch (opcode) { - case OpSpecConstantTrue: - case OpSpecConstantFalse: - case OpSpecConstant: - case OpSpecConstantComposite: - case OpSpecConstantOp: - case OpSpecConstantCompositeReplicateEXT: + case Op::OpSpecConstantTrue: + case Op::OpSpecConstantFalse: + case Op::OpSpecConstant: + case Op::OpSpecConstantComposite: + case Op::OpSpecConstantOp: + case Op::OpSpecConstantCompositeReplicateEXT: return true; default: return false; @@ -1629,7 +1700,7 @@ Id Builder::makeNullConstant(Id typeId) return existing; // Make it - Instruction* c = new Instruction(getUniqueId(), typeId, OpConstantNull); + Instruction* c = new Instruction(getUniqueId(), typeId, Op::OpConstantNull); constantsTypesGlobals.push_back(std::unique_ptr(c)); nullConstants.push_back(c); module.mapInstruction(c); @@ -1641,14 +1712,14 @@ Id Builder::makeBoolConstant(bool b, bool specConstant) { Id typeId = makeBoolType(); Instruction* constant; - Op opcode = specConstant ? (b ? OpSpecConstantTrue : OpSpecConstantFalse) : (b ? OpConstantTrue : OpConstantFalse); + Op opcode = specConstant ? (b ? Op::OpSpecConstantTrue : Op::OpSpecConstantFalse) : (b ? Op::OpConstantTrue : Op::OpConstantFalse); // 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 = 0; - for (int i = 0; i < (int)groupedConstants[OpTypeBool].size(); ++i) { - constant = groupedConstants[OpTypeBool][i]; + for (int i = 0; i < (int)groupedConstants[enumCast(Op::OpTypeBool)].size(); ++i) { + constant = groupedConstants[enumCast(Op::OpTypeBool)][i]; if (constant->getTypeId() == typeId && constant->getOpCode() == opcode) existing = constant->getResultId(); } @@ -1660,7 +1731,7 @@ Id Builder::makeBoolConstant(bool b, bool specConstant) // Make it Instruction* c = new Instruction(getUniqueId(), typeId, opcode); constantsTypesGlobals.push_back(std::unique_ptr(c)); - groupedConstants[OpTypeBool].push_back(c); + groupedConstants[enumCast(Op::OpTypeBool)].push_back(c); module.mapInstruction(c); return c->getResultId(); @@ -1668,12 +1739,12 @@ Id Builder::makeBoolConstant(bool b, bool specConstant) Id Builder::makeIntConstant(Id typeId, unsigned value, bool specConstant) { - Op opcode = specConstant ? OpSpecConstant : OpConstant; + Op opcode = specConstant ? Op::OpSpecConstant : Op::OpConstant; // 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(OpTypeInt, opcode, typeId, value); + Id existing = findScalarConstant(Op::OpTypeInt, opcode, typeId, value); if (existing) return existing; } @@ -1681,7 +1752,7 @@ Id Builder::makeIntConstant(Id typeId, unsigned value, bool specConstant) Instruction* c = new Instruction(getUniqueId(), typeId, opcode); c->addImmediateOperand(value); constantsTypesGlobals.push_back(std::unique_ptr(c)); - groupedConstants[OpTypeInt].push_back(c); + groupedConstants[enumCast(Op::OpTypeInt)].push_back(c); module.mapInstruction(c); return c->getResultId(); @@ -1689,7 +1760,7 @@ Id Builder::makeIntConstant(Id typeId, unsigned value, bool specConstant) Id Builder::makeInt64Constant(Id typeId, unsigned long long value, bool specConstant) { - Op opcode = specConstant ? OpSpecConstant : OpConstant; + Op opcode = specConstant ? Op::OpSpecConstant : Op::OpConstant; unsigned op1 = value & 0xFFFFFFFF; unsigned op2 = value >> 32; @@ -1697,7 +1768,7 @@ Id Builder::makeInt64Constant(Id typeId, unsigned long long value, bool specCons // 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(OpTypeInt, opcode, typeId, op1, op2); + Id existing = findScalarConstant(Op::OpTypeInt, opcode, typeId, op1, op2); if (existing) return existing; } @@ -1707,7 +1778,7 @@ Id Builder::makeInt64Constant(Id typeId, unsigned long long value, bool specCons c->addImmediateOperand(op1); c->addImmediateOperand(op2); constantsTypesGlobals.push_back(std::unique_ptr(c)); - groupedConstants[OpTypeInt].push_back(c); + groupedConstants[enumCast(Op::OpTypeInt)].push_back(c); module.mapInstruction(c); return c->getResultId(); @@ -1715,7 +1786,7 @@ Id Builder::makeInt64Constant(Id typeId, unsigned long long value, bool specCons Id Builder::makeFloatConstant(float f, bool specConstant) { - Op opcode = specConstant ? OpSpecConstant : OpConstant; + Op opcode = specConstant ? Op::OpSpecConstant : Op::OpConstant; Id typeId = makeFloatType(32); union { float fl; unsigned int ui; } u; u.fl = f; @@ -1724,7 +1795,7 @@ Id Builder::makeFloatConstant(float f, bool specConstant) // 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(OpTypeFloat, opcode, typeId, value); + Id existing = findScalarConstant(Op::OpTypeFloat, opcode, typeId, value); if (existing) return existing; } @@ -1732,7 +1803,7 @@ Id Builder::makeFloatConstant(float f, bool specConstant) Instruction* c = new Instruction(getUniqueId(), typeId, opcode); c->addImmediateOperand(value); constantsTypesGlobals.push_back(std::unique_ptr(c)); - groupedConstants[OpTypeFloat].push_back(c); + groupedConstants[enumCast(Op::OpTypeFloat)].push_back(c); module.mapInstruction(c); return c->getResultId(); @@ -1740,7 +1811,7 @@ Id Builder::makeFloatConstant(float f, bool specConstant) Id Builder::makeDoubleConstant(double d, bool specConstant) { - Op opcode = specConstant ? OpSpecConstant : OpConstant; + Op opcode = specConstant ? Op::OpSpecConstant : Op::OpConstant; Id typeId = makeFloatType(64); union { double db; unsigned long long ull; } u; u.db = d; @@ -1751,7 +1822,7 @@ Id Builder::makeDoubleConstant(double d, bool specConstant) // 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(OpTypeFloat, opcode, typeId, op1, op2); + Id existing = findScalarConstant(Op::OpTypeFloat, opcode, typeId, op1, op2); if (existing) return existing; } @@ -1761,7 +1832,7 @@ Id Builder::makeDoubleConstant(double d, bool specConstant) c->addImmediateOperand(op1); c->addImmediateOperand(op2); constantsTypesGlobals.push_back(std::unique_ptr(c)); - groupedConstants[OpTypeFloat].push_back(c); + groupedConstants[enumCast(Op::OpTypeFloat)].push_back(c); module.mapInstruction(c); return c->getResultId(); @@ -1769,7 +1840,7 @@ Id Builder::makeDoubleConstant(double d, bool specConstant) Id Builder::makeFloat16Constant(float f16, bool specConstant) { - Op opcode = specConstant ? OpSpecConstant : OpConstant; + Op opcode = specConstant ? Op::OpSpecConstant : Op::OpConstant; Id typeId = makeFloatType(16); spvutils::HexFloat> fVal(f16); @@ -1781,7 +1852,7 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant) // 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(OpTypeFloat, opcode, typeId, value); + Id existing = findScalarConstant(Op::OpTypeFloat, opcode, typeId, value); if (existing) return existing; } @@ -1789,7 +1860,38 @@ Id Builder::makeFloat16Constant(float f16, bool specConstant) Instruction* c = new Instruction(getUniqueId(), typeId, opcode); c->addImmediateOperand(value); constantsTypesGlobals.push_back(std::unique_ptr(c)); - groupedConstants[OpTypeFloat].push_back(c); + groupedConstants[enumCast(Op::OpTypeFloat)].push_back(c); + module.mapInstruction(c); + + return c->getResultId(); +} + +Id Builder::makeBFloat16Constant(float bf16, bool specConstant) +{ + Op opcode = specConstant ? Op::OpSpecConstant : Op::OpConstant; + Id typeId = makeBFloat16Type(); + + union { + float f; + uint32_t u; + } un; + un.f = bf16; + + // take high 16b of fp32 value. This is effectively round-to-zero, other than certain NaNs. + unsigned value = un.u >> 16; + + // 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)); + groupedConstants[enumCast(Op::OpTypeFloat)].push_back(c); module.mapInstruction(c); return c->getResultId(); @@ -1833,8 +1935,8 @@ Id Builder::findCompositeConstant(Op typeClass, Op opcode, Id typeId, const std: { Instruction* constant = nullptr; bool found = false; - for (int i = 0; i < (int)groupedConstants[typeClass].size(); ++i) { - constant = groupedConstants[typeClass][i]; + for (int i = 0; i < (int)groupedConstants[enumCast(typeClass)].size(); ++i) { + constant = groupedConstants[enumCast(typeClass)][i]; if (constant->getTypeId() != typeId) continue; @@ -1895,36 +1997,36 @@ Id Builder::makeCompositeConstant(Id typeId, const std::vector& members, boo bool replicate = false; size_t numMembers = members.size(); - if (useReplicatedComposites || typeClass == OpTypeCooperativeVectorNV) { + if (useReplicatedComposites || typeClass == Op::OpTypeCooperativeVectorNV) { // use replicate if all members are the same replicate = numMembers > 0 && std::equal(members.begin() + 1, members.end(), members.begin()); if (replicate) { numMembers = 1; - addCapability(spv::CapabilityReplicatedCompositesEXT); + addCapability(spv::Capability::ReplicatedCompositesEXT); addExtension(spv::E_SPV_EXT_replicated_composites); } } Op opcode = replicate ? - (specConstant ? OpSpecConstantCompositeReplicateEXT : OpConstantCompositeReplicateEXT) : - (specConstant ? OpSpecConstantComposite : OpConstantComposite); + (specConstant ? Op::OpSpecConstantCompositeReplicateEXT : Op::OpConstantCompositeReplicateEXT) : + (specConstant ? Op::OpSpecConstantComposite : Op::OpConstantComposite); switch (typeClass) { - case OpTypeVector: - case OpTypeArray: - case OpTypeMatrix: - case OpTypeCooperativeMatrixKHR: - case OpTypeCooperativeMatrixNV: - case OpTypeCooperativeVectorNV: + case Op::OpTypeVector: + case Op::OpTypeArray: + case Op::OpTypeMatrix: + case Op::OpTypeCooperativeMatrixKHR: + case Op::OpTypeCooperativeMatrixNV: + case Op::OpTypeCooperativeVectorNV: if (! specConstant) { Id existing = findCompositeConstant(typeClass, opcode, typeId, members, numMembers); if (existing) return existing; } break; - case OpTypeStruct: + case Op::OpTypeStruct: if (! specConstant) { Id existing = findStructConstant(typeId, members); if (existing) @@ -1941,10 +2043,10 @@ Id Builder::makeCompositeConstant(Id typeId, const std::vector& members, boo for (size_t op = 0; op < numMembers; ++op) c->addIdOperand(members[op]); constantsTypesGlobals.push_back(std::unique_ptr(c)); - if (typeClass == OpTypeStruct) + if (typeClass == Op::OpTypeStruct) groupedStructConstants[typeId].push_back(c); else - groupedConstants[typeClass].push_back(c); + groupedConstants[enumCast(typeClass)].push_back(c); module.mapInstruction(c); return c->getResultId(); @@ -1952,7 +2054,7 @@ Id Builder::makeCompositeConstant(Id typeId, const std::vector& members, boo Instruction* Builder::addEntryPoint(ExecutionModel model, Function* function, const char* name) { - Instruction* entryPoint = new Instruction(OpEntryPoint); + Instruction* entryPoint = new Instruction(Op::OpEntryPoint); entryPoint->reserveOperands(3); entryPoint->addImmediateOperand(model); entryPoint->addIdOperand(function->getId()); @@ -1970,7 +2072,7 @@ void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, int val if (!entryPoint) return; - Instruction* instr = new Instruction(OpExecutionMode); + Instruction* instr = new Instruction(Op::OpExecutionMode); instr->reserveOperands(3); instr->addIdOperand(entryPoint->getId()); instr->addImmediateOperand(mode); @@ -1990,7 +2092,7 @@ void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, const s if (!entryPoint) return; - Instruction* instr = new Instruction(OpExecutionMode); + Instruction* instr = new Instruction(Op::OpExecutionMode); instr->reserveOperands(literals.size() + 2); instr->addIdOperand(entryPoint->getId()); instr->addImmediateOperand(mode); @@ -2006,7 +2108,7 @@ void Builder::addExecutionModeId(Function* entryPoint, ExecutionMode mode, const if (!entryPoint) return; - Instruction* instr = new Instruction(OpExecutionModeId); + Instruction* instr = new Instruction(Op::OpExecutionModeId); instr->reserveOperands(operandIds.size() + 2); instr->addIdOperand(entryPoint->getId()); instr->addImmediateOperand(mode); @@ -2018,7 +2120,7 @@ void Builder::addExecutionModeId(Function* entryPoint, ExecutionMode mode, const void Builder::addName(Id id, const char* string) { - Instruction* name = new Instruction(OpName); + Instruction* name = new Instruction(Op::OpName); name->reserveOperands(2); name->addIdOperand(id); name->addStringOperand(string); @@ -2028,7 +2130,7 @@ void Builder::addName(Id id, const char* string) void Builder::addMemberName(Id id, int memberNumber, const char* string) { - Instruction* name = new Instruction(OpMemberName); + Instruction* name = new Instruction(Op::OpMemberName); name->reserveOperands(3); name->addIdOperand(id); name->addImmediateOperand(memberNumber); @@ -2039,10 +2141,10 @@ void Builder::addMemberName(Id id, int memberNumber, const char* string) void Builder::addDecoration(Id id, Decoration decoration, int num) { - if (decoration == spv::DecorationMax) + if (decoration == spv::Decoration::Max) return; - Instruction* dec = new Instruction(OpDecorate); + Instruction* dec = new Instruction(Op::OpDecorate); dec->reserveOperands(2); dec->addIdOperand(id); dec->addImmediateOperand(decoration); @@ -2054,10 +2156,10 @@ void Builder::addDecoration(Id id, Decoration decoration, int num) void Builder::addDecoration(Id id, Decoration decoration, const char* s) { - if (decoration == spv::DecorationMax) + if (decoration == spv::Decoration::Max) return; - Instruction* dec = new Instruction(OpDecorateString); + Instruction* dec = new Instruction(Op::OpDecorateString); dec->reserveOperands(3); dec->addIdOperand(id); dec->addImmediateOperand(decoration); @@ -2068,10 +2170,10 @@ void Builder::addDecoration(Id id, Decoration decoration, const char* s) void Builder::addDecoration(Id id, Decoration decoration, const std::vector& literals) { - if (decoration == spv::DecorationMax) + if (decoration == spv::Decoration::Max) return; - Instruction* dec = new Instruction(OpDecorate); + Instruction* dec = new Instruction(Op::OpDecorate); dec->reserveOperands(literals.size() + 2); dec->addIdOperand(id); dec->addImmediateOperand(decoration); @@ -2083,10 +2185,10 @@ void Builder::addDecoration(Id id, Decoration decoration, const std::vector& strings) { - if (decoration == spv::DecorationMax) + if (decoration == spv::Decoration::Max) return; - Instruction* dec = new Instruction(OpDecorateString); + Instruction* dec = new Instruction(Op::OpDecorateString); dec->reserveOperands(strings.size() + 2); dec->addIdOperand(id); dec->addImmediateOperand(decoration); @@ -2097,10 +2199,10 @@ void Builder::addDecoration(Id id, Decoration decoration, const std::vectorreserveOperands(4); dec->addIdOperand(id); - dec->addImmediateOperand(spv::DecorationLinkageAttributes); + dec->addImmediateOperand(spv::Decoration::LinkageAttributes); dec->addStringOperand(name); dec->addImmediateOperand(linkType); @@ -2109,10 +2211,10 @@ void Builder::addLinkageDecoration(Id id, const char* name, spv::LinkageType lin void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration) { - if (decoration == spv::DecorationMax) + if (decoration == spv::Decoration::Max) return; - Instruction* dec = new Instruction(OpDecorateId); + Instruction* dec = new Instruction(Op::OpDecorateId); dec->reserveOperands(3); dec->addIdOperand(id); dec->addImmediateOperand(decoration); @@ -2123,10 +2225,10 @@ void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration) void Builder::addDecorationId(Id id, Decoration decoration, const std::vector& operandIds) { - if(decoration == spv::DecorationMax) + if(decoration == spv::Decoration::Max) return; - Instruction* dec = new Instruction(OpDecorateId); + Instruction* dec = new Instruction(Op::OpDecorateId); dec->reserveOperands(operandIds.size() + 2); dec->addIdOperand(id); dec->addImmediateOperand(decoration); @@ -2139,10 +2241,10 @@ void Builder::addDecorationId(Id id, Decoration decoration, const std::vectorreserveOperands(3); dec->addIdOperand(id); dec->addImmediateOperand(member); @@ -2155,10 +2257,10 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const char *s) { - if (decoration == spv::DecorationMax) + if (decoration == spv::Decoration::Max) return; - Instruction* dec = new Instruction(OpMemberDecorateStringGOOGLE); + Instruction* dec = new Instruction(Op::OpMemberDecorateStringGOOGLE); dec->reserveOperands(4); dec->addIdOperand(id); dec->addImmediateOperand(member); @@ -2170,10 +2272,10 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const std::vector& literals) { - if (decoration == spv::DecorationMax) + if (decoration == spv::Decoration::Max) return; - Instruction* dec = new Instruction(OpMemberDecorate); + Instruction* dec = new Instruction(Op::OpMemberDecorate); dec->reserveOperands(literals.size() + 3); dec->addIdOperand(id); dec->addImmediateOperand(member); @@ -2186,10 +2288,10 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const std::vector& strings) { - if (decoration == spv::DecorationMax) + if (decoration == spv::Decoration::Max) return; - Instruction* dec = new Instruction(OpMemberDecorateString); + Instruction* dec = new Instruction(Op::OpMemberDecorateString); dec->reserveOperands(strings.size() + 3); dec->addIdOperand(id); dec->addImmediateOperand(member); @@ -2203,14 +2305,14 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat void Builder::addInstruction(std::unique_ptr inst) { // Phis must appear first in their block, don't insert line tracking instructions // in front of them, just add the OpPhi and return. - if (inst->getOpCode() == OpPhi) { + if (inst->getOpCode() == Op::OpPhi) { buildPoint->addInstruction(std::move(inst)); return; } // Optionally insert OpDebugScope if (emitNonSemanticShaderDebugInfo && dirtyScopeTracker) { if (buildPoint->updateDebugScope(currentDebugScopeId.top())) { - auto scopeInst = std::make_unique(getUniqueId(), makeVoidType(), OpExtInst); + auto scopeInst = std::make_unique(getUniqueId(), makeVoidType(), Op::OpExtInst); scopeInst->reserveOperands(3); scopeInst->addIdOperand(nonSemanticShaderDebugInfo); scopeInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugScope); @@ -2225,7 +2327,7 @@ void Builder::addInstruction(std::unique_ptr inst) { if (trackDebugInfo && dirtyLineTracker) { if (buildPoint->updateDebugSourceLocation(currentLine, 0, currentFileId)) { if (emitSpirvDebugInfo) { - auto lineInst = std::make_unique(OpLine); + auto lineInst = std::make_unique(Op::OpLine); lineInst->reserveOperands(3); lineInst->addIdOperand(currentFileId); lineInst->addImmediateOperand(currentLine); @@ -2233,7 +2335,7 @@ void Builder::addInstruction(std::unique_ptr inst) { buildPoint->addInstruction(std::move(lineInst)); } if (emitNonSemanticShaderDebugInfo) { - auto lineInst = std::make_unique(getUniqueId(), makeVoidType(), OpExtInst); + auto lineInst = std::make_unique(getUniqueId(), makeVoidType(), Op::OpExtInst); lineInst->reserveOperands(7); lineInst->addIdOperand(nonSemanticShaderDebugInfo); lineInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLine); @@ -2264,12 +2366,12 @@ Function* Builder::makeEntryPoint(const char* entryPoint) auto const returnType = makeVoidType(); restoreNonSemanticShaderDebugInfo = emitNonSemanticShaderDebugInfo; - if(sourceLang == spv::SourceLanguageHLSL) { + if(sourceLang == spv::SourceLanguage::HLSL) { emitNonSemanticShaderDebugInfo = false; } Block* entry = nullptr; - entryPointFunction = makeFunctionEntry(NoPrecision, returnType, entryPoint, LinkageTypeMax, {}, {}, &entry); + entryPointFunction = makeFunctionEntry(NoPrecision, returnType, entryPoint, LinkageType::Max, {}, {}, &entry); emitNonSemanticShaderDebugInfo = restoreNonSemanticShaderDebugInfo; @@ -2376,7 +2478,7 @@ Id Builder::makeDebugFunction([[maybe_unused]] Function* function, Id nameId, Id assert(debugId[funcTypeId] != 0); Id funcId = getUniqueId(); - auto type = new Instruction(funcId, makeVoidType(), OpExtInst); + auto type = new Instruction(funcId, makeVoidType(), Op::OpExtInst); type->reserveOperands(11); type->addIdOperand(nonSemanticShaderDebugInfo); type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugFunction); @@ -2398,7 +2500,7 @@ Id Builder::makeDebugLexicalBlock(uint32_t line, uint32_t column) { assert(!currentDebugScopeId.empty()); Id lexId = getUniqueId(); - auto lex = new Instruction(lexId, makeVoidType(), OpExtInst); + auto lex = new Instruction(lexId, makeVoidType(), Op::OpExtInst); lex->reserveOperands(6); lex->addIdOperand(nonSemanticShaderDebugInfo); lex->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLexicalBlock); @@ -2426,11 +2528,11 @@ std::string Builder::unmangleFunctionName(std::string const& name) const void Builder::makeReturn(bool implicit, Id retVal) { if (retVal) { - Instruction* inst = new Instruction(NoResult, NoType, OpReturnValue); + Instruction* inst = new Instruction(NoResult, NoType, Op::OpReturnValue); inst->addIdOperand(retVal); addInstruction(std::unique_ptr(inst)); } else - addInstruction(std::unique_ptr(new Instruction(NoResult, NoType, OpReturn))); + addInstruction(std::unique_ptr(new Instruction(NoResult, NoType, Op::OpReturn))); if (! implicit) createAndSetNoPredecessorBlock("post-return"); @@ -2467,7 +2569,7 @@ void Builder::enterFunction(Function const* function) // Save and disable debugInfo for HLSL entry point function. It is a wrapper // function with no user code in it. restoreNonSemanticShaderDebugInfo = emitNonSemanticShaderDebugInfo; - if (sourceLang == spv::SourceLanguageHLSL && function == entryPointFunction) { + if (sourceLang == spv::SourceLanguage::HLSL && function == entryPointFunction) { emitNonSemanticShaderDebugInfo = false; } @@ -2477,7 +2579,7 @@ void Builder::enterFunction(Function const* function) currentDebugScopeId.push(debugId[funcId]); // Create DebugFunctionDefinition spv::Id resultId = getUniqueId(); - Instruction* defInst = new Instruction(resultId, makeVoidType(), OpExtInst); + Instruction* defInst = new Instruction(resultId, makeVoidType(), Op::OpExtInst); defInst->reserveOperands(4); defInst->addIdOperand(nonSemanticShaderDebugInfo); defInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugFunctionDefinition); @@ -2486,9 +2588,9 @@ void Builder::enterFunction(Function const* function) addInstruction(std::unique_ptr(defInst)); } - if (auto linkType = function->getLinkType(); linkType != LinkageTypeMax) { + if (auto linkType = function->getLinkType(); linkType != LinkageType::Max) { Id funcId = function->getFuncId(); - addCapability(CapabilityLinkage); + addCapability(Capability::Linkage); addLinkageDecoration(funcId, function->getExportName(), linkType); } } @@ -2538,13 +2640,13 @@ Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id t bool const compilerGenerated) { Id pointerType = makePointer(storageClass, type); - Instruction* inst = new Instruction(getUniqueId(), pointerType, OpVariable); + Instruction* inst = new Instruction(getUniqueId(), pointerType, Op::OpVariable); inst->addImmediateOperand(storageClass); if (initializer != NoResult) inst->addIdOperand(initializer); switch (storageClass) { - case StorageClassFunction: + case StorageClass::Function: // Validation rules require the declaration in the entry block buildPoint->getParent().addLocalVariable(std::unique_ptr(inst)); @@ -2580,7 +2682,7 @@ Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id t // Comments in header Id Builder::createUndefined(Id type) { - Instruction* inst = new Instruction(getUniqueId(), type, OpUndef); + Instruction* inst = new Instruction(getUniqueId(), type, Op::OpUndef); addInstruction(std::unique_ptr(inst)); return inst->getResultId(); } @@ -2590,16 +2692,16 @@ spv::MemoryAccessMask Builder::sanitizeMemoryAccessForStorageClass(spv::MemoryAc const { switch (sc) { - case spv::StorageClassUniform: - case spv::StorageClassWorkgroup: - case spv::StorageClassStorageBuffer: - case spv::StorageClassPhysicalStorageBufferEXT: + case spv::StorageClass::Uniform: + case spv::StorageClass::Workgroup: + case spv::StorageClass::StorageBuffer: + case spv::StorageClass::PhysicalStorageBufferEXT: break; default: memoryAccess = spv::MemoryAccessMask(memoryAccess & - ~(spv::MemoryAccessMakePointerAvailableKHRMask | - spv::MemoryAccessMakePointerVisibleKHRMask | - spv::MemoryAccessNonPrivatePointerKHRMask)); + ~(spv::MemoryAccessMask::MakePointerAvailableKHR | + spv::MemoryAccessMask::MakePointerVisibleKHR | + spv::MemoryAccessMask::NonPrivatePointerKHR)); break; } return memoryAccess; @@ -2609,19 +2711,19 @@ spv::MemoryAccessMask Builder::sanitizeMemoryAccessForStorageClass(spv::MemoryAc void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment) { - Instruction* store = new Instruction(OpStore); + Instruction* store = new Instruction(Op::OpStore); store->reserveOperands(2); store->addIdOperand(lValue); store->addIdOperand(rValue); memoryAccess = sanitizeMemoryAccessForStorageClass(memoryAccess, getStorageClass(lValue)); - if (memoryAccess != MemoryAccessMaskNone) { + if (memoryAccess != MemoryAccessMask::MaskNone) { store->addImmediateOperand(memoryAccess); - if (memoryAccess & spv::MemoryAccessAlignedMask) { + if (anySet(memoryAccess, spv::MemoryAccessMask::Aligned)) { store->addImmediateOperand(alignment); } - if (memoryAccess & spv::MemoryAccessMakePointerAvailableKHRMask) { + if (anySet(memoryAccess, spv::MemoryAccessMask::MakePointerAvailableKHR)) { store->addIdOperand(makeUintConstant(scope)); } } @@ -2633,17 +2735,17 @@ void Builder::createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAcce Id Builder::createLoad(Id lValue, spv::Decoration precision, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment) { - Instruction* load = new Instruction(getUniqueId(), getDerefTypeId(lValue), OpLoad); + Instruction* load = new Instruction(getUniqueId(), getDerefTypeId(lValue), Op::OpLoad); load->addIdOperand(lValue); memoryAccess = sanitizeMemoryAccessForStorageClass(memoryAccess, getStorageClass(lValue)); - if (memoryAccess != MemoryAccessMaskNone) { + if (memoryAccess != MemoryAccessMask::MaskNone) { load->addImmediateOperand(memoryAccess); - if (memoryAccess & spv::MemoryAccessAlignedMask) { + if (anySet(memoryAccess, spv::MemoryAccessMask::Aligned)) { load->addImmediateOperand(alignment); } - if (memoryAccess & spv::MemoryAccessMakePointerVisibleKHRMask) { + if (anySet(memoryAccess, spv::MemoryAccessMask::MakePointerVisibleKHR)) { load->addIdOperand(makeUintConstant(scope)); } } @@ -2662,7 +2764,7 @@ Id Builder::createAccessChain(StorageClass storageClass, Id base, const std::vec typeId = makePointer(storageClass, typeId); // Make the instruction - Instruction* chain = new Instruction(getUniqueId(), typeId, OpAccessChain); + Instruction* chain = new Instruction(getUniqueId(), typeId, Op::OpAccessChain); chain->reserveOperands(offsets.size() + 1); chain->addIdOperand(base); for (int i = 0; i < (int)offsets.size(); ++i) @@ -2675,7 +2777,7 @@ Id Builder::createAccessChain(StorageClass storageClass, Id base, const std::vec Id Builder::createArrayLength(Id base, unsigned int member) { spv::Id intType = makeUintType(32); - Instruction* length = new Instruction(getUniqueId(), intType, OpArrayLength); + Instruction* length = new Instruction(getUniqueId(), intType, Op::OpArrayLength); length->reserveOperands(2); length->addIdOperand(base); length->addImmediateOperand(member); @@ -2691,10 +2793,10 @@ Id Builder::createCooperativeMatrixLengthKHR(Id type) // Generate code for spec constants if in spec constant operation // generation mode. if (generatingOpCodeForSpecConst) { - return createSpecConstantOp(OpCooperativeMatrixLengthKHR, intType, std::vector(1, type), std::vector()); + return createSpecConstantOp(Op::OpCooperativeMatrixLengthKHR, intType, std::vector(1, type), std::vector()); } - Instruction* length = new Instruction(getUniqueId(), intType, OpCooperativeMatrixLengthKHR); + Instruction* length = new Instruction(getUniqueId(), intType, Op::OpCooperativeMatrixLengthKHR); length->addIdOperand(type); addInstruction(std::unique_ptr(length)); @@ -2708,10 +2810,10 @@ Id Builder::createCooperativeMatrixLengthNV(Id type) // Generate code for spec constants if in spec constant operation // generation mode. if (generatingOpCodeForSpecConst) { - return createSpecConstantOp(OpCooperativeMatrixLengthNV, intType, std::vector(1, type), std::vector()); + return createSpecConstantOp(Op::OpCooperativeMatrixLengthNV, intType, std::vector(1, type), std::vector()); } - Instruction* length = new Instruction(getUniqueId(), intType, OpCooperativeMatrixLengthNV); + Instruction* length = new Instruction(getUniqueId(), intType, Op::OpCooperativeMatrixLengthNV); length->addIdOperand(type); addInstruction(std::unique_ptr(length)); @@ -2723,10 +2825,10 @@ Id Builder::createCompositeExtract(Id composite, Id typeId, unsigned index) // Generate code for spec constants if in spec constant operation // generation mode. if (generatingOpCodeForSpecConst) { - return createSpecConstantOp(OpCompositeExtract, typeId, std::vector(1, composite), + return createSpecConstantOp(Op::OpCompositeExtract, typeId, std::vector(1, composite), std::vector(1, index)); } - Instruction* extract = new Instruction(getUniqueId(), typeId, OpCompositeExtract); + Instruction* extract = new Instruction(getUniqueId(), typeId, Op::OpCompositeExtract); extract->reserveOperands(2); extract->addIdOperand(composite); extract->addImmediateOperand(index); @@ -2740,9 +2842,9 @@ Id Builder::createCompositeExtract(Id composite, Id typeId, const std::vector(1, composite), indexes); + return createSpecConstantOp(Op::OpCompositeExtract, typeId, std::vector(1, composite), indexes); } - Instruction* extract = new Instruction(getUniqueId(), typeId, OpCompositeExtract); + Instruction* extract = new Instruction(getUniqueId(), typeId, Op::OpCompositeExtract); extract->reserveOperands(indexes.size() + 1); extract->addIdOperand(composite); for (int i = 0; i < (int)indexes.size(); ++i) @@ -2754,7 +2856,7 @@ Id Builder::createCompositeExtract(Id composite, Id typeId, const std::vectorreserveOperands(3); insert->addIdOperand(object); insert->addIdOperand(composite); @@ -2766,7 +2868,7 @@ Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, unsigned i Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, const std::vector& indexes) { - Instruction* insert = new Instruction(getUniqueId(), typeId, OpCompositeInsert); + Instruction* insert = new Instruction(getUniqueId(), typeId, Op::OpCompositeInsert); insert->reserveOperands(indexes.size() + 2); insert->addIdOperand(object); insert->addIdOperand(composite); @@ -2779,7 +2881,7 @@ Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, const std: Id Builder::createVectorExtractDynamic(Id vector, Id typeId, Id componentIndex) { - Instruction* extract = new Instruction(getUniqueId(), typeId, OpVectorExtractDynamic); + Instruction* extract = new Instruction(getUniqueId(), typeId, Op::OpVectorExtractDynamic); extract->reserveOperands(2); extract->addIdOperand(vector); extract->addIdOperand(componentIndex); @@ -2790,7 +2892,7 @@ Id Builder::createVectorExtractDynamic(Id vector, Id typeId, Id componentIndex) Id Builder::createVectorInsertDynamic(Id vector, Id typeId, Id component, Id componentIndex) { - Instruction* insert = new Instruction(getUniqueId(), typeId, OpVectorInsertDynamic); + Instruction* insert = new Instruction(getUniqueId(), typeId, Op::OpVectorInsertDynamic); insert->reserveOperands(3); insert->addIdOperand(vector); insert->addIdOperand(component); @@ -2842,7 +2944,7 @@ void Builder::createNoResultOp(Op opCode, const std::vector& operan void Builder::createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask semantics) { - Instruction* op = new Instruction(OpControlBarrier); + Instruction* op = new Instruction(Op::OpControlBarrier); op->reserveOperands(3); op->addIdOperand(makeUintConstant(execution)); op->addIdOperand(makeUintConstant(memory)); @@ -2850,12 +2952,12 @@ void Builder::createControlBarrier(Scope execution, Scope memory, MemorySemantic addInstruction(std::unique_ptr(op)); } -void Builder::createMemoryBarrier(unsigned executionScope, unsigned memorySemantics) +void Builder::createMemoryBarrier(Scope executionScope, MemorySemanticsMask memorySemantics) { - Instruction* op = new Instruction(OpMemoryBarrier); + Instruction* op = new Instruction(Op::OpMemoryBarrier); op->reserveOperands(2); - op->addIdOperand(makeUintConstant(executionScope)); - op->addIdOperand(makeUintConstant(memorySemantics)); + op->addIdOperand(makeUintConstant((unsigned)executionScope)); + op->addIdOperand(makeUintConstant((unsigned)memorySemantics)); addInstruction(std::unique_ptr(op)); } @@ -2943,7 +3045,7 @@ Id Builder::createOp(Op opCode, Id typeId, const std::vector& opera Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector& operands, const std::vector& literals) { - Instruction* op = new Instruction(getUniqueId(), typeId, OpSpecConstantOp); + Instruction* op = new Instruction(getUniqueId(), typeId, Op::OpSpecConstantOp); op->reserveOperands(operands.size() + literals.size() + 1); op->addImmediateOperand((unsigned) opCode); for (auto it = operands.cbegin(); it != operands.cend(); ++it) @@ -2954,19 +3056,19 @@ Id Builder::createSpecConstantOp(Op opCode, Id typeId, const std::vector& op constantsTypesGlobals.push_back(std::unique_ptr(op)); // OpSpecConstantOp's using 8 or 16 bit types require the associated capability - if (containsType(typeId, OpTypeInt, 8)) - addCapability(CapabilityInt8); - if (containsType(typeId, OpTypeInt, 16)) - addCapability(CapabilityInt16); - if (containsType(typeId, OpTypeFloat, 16)) - addCapability(CapabilityFloat16); + if (containsType(typeId, Op::OpTypeInt, 8)) + addCapability(Capability::Int8); + if (containsType(typeId, Op::OpTypeInt, 16)) + addCapability(Capability::Int16); + if (containsType(typeId, Op::OpTypeFloat, 16)) + addCapability(Capability::Float16); return op->getResultId(); } Id Builder::createFunctionCall(spv::Function* function, const std::vector& args) { - Instruction* op = new Instruction(getUniqueId(), function->getReturnType(), OpFunctionCall); + Instruction* op = new Instruction(getUniqueId(), function->getReturnType(), Op::OpFunctionCall); op->reserveOperands(args.size() + 1); op->addIdOperand(function->getId()); for (int a = 0; a < (int)args.size(); ++a) @@ -2985,9 +3087,9 @@ Id Builder::createRvalueSwizzle(Decoration precision, Id typeId, Id source, cons if (generatingOpCodeForSpecConst) { std::vector operands(2); operands[0] = operands[1] = source; - return setPrecision(createSpecConstantOp(OpVectorShuffle, typeId, operands, channels), precision); + return setPrecision(createSpecConstantOp(Op::OpVectorShuffle, typeId, operands, channels), precision); } - Instruction* swizzle = new Instruction(getUniqueId(), typeId, OpVectorShuffle); + Instruction* swizzle = new Instruction(getUniqueId(), typeId, Op::OpVectorShuffle); assert(isVector(source)); swizzle->reserveOperands(channels.size() + 2); swizzle->addIdOperand(source); @@ -3005,7 +3107,7 @@ Id Builder::createLvalueSwizzle(Id typeId, Id target, Id source, const std::vect if (channels.size() == 1 && getNumComponents(source) == 1) return createCompositeInsert(source, target, typeId, channels.front()); - Instruction* swizzle = new Instruction(getUniqueId(), typeId, OpVectorShuffle); + Instruction* swizzle = new Instruction(getUniqueId(), typeId, Op::OpVectorShuffle); assert(isVector(target)); swizzle->reserveOperands(2); @@ -3075,11 +3177,11 @@ Id Builder::smearScalar(Decoration precision, Id scalar, Id vectorType) if (replicate) { numComponents = 1; - addCapability(spv::CapabilityReplicatedCompositesEXT); + addCapability(spv::Capability::ReplicatedCompositesEXT); addExtension(spv::E_SPV_EXT_replicated_composites); } - Op opcode = replicate ? OpCompositeConstructReplicateEXT : OpCompositeConstruct; + Op opcode = replicate ? Op::OpCompositeConstructReplicateEXT : Op::OpCompositeConstruct; smear = new Instruction(getUniqueId(), vectorType, opcode); smear->reserveOperands(numComponents); @@ -3094,7 +3196,7 @@ Id Builder::smearScalar(Decoration precision, Id scalar, Id vectorType) // Comments in header Id Builder::createBuiltinCall(Id resultType, Id builtins, int entryPoint, const std::vector& args) { - Instruction* inst = new Instruction(getUniqueId(), resultType, OpExtInst); + Instruction* inst = new Instruction(getUniqueId(), resultType, Op::OpExtInst); inst->reserveOperands(args.size() + 2); inst->addIdOperand(builtins); inst->addImmediateOperand(entryPoint); @@ -3133,135 +3235,135 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, // Set up the optional arguments // size_t optArgNum = texArgs.size(); // the position of the mask for the optional arguments, if any. - ImageOperandsMask mask = ImageOperandsMaskNone; // the mask operand + ImageOperandsMask mask = ImageOperandsMask::MaskNone; // the mask operand if (parameters.bias) { - mask = (ImageOperandsMask)(mask | ImageOperandsBiasMask); + mask = (ImageOperandsMask)(mask | ImageOperandsMask::Bias); texArgs.push_back(parameters.bias); } if (parameters.lod) { - mask = (ImageOperandsMask)(mask | ImageOperandsLodMask); + mask = (ImageOperandsMask)(mask | ImageOperandsMask::Lod); texArgs.push_back(parameters.lod); explicitLod = true; } else if (parameters.gradX) { - mask = (ImageOperandsMask)(mask | ImageOperandsGradMask); + mask = (ImageOperandsMask)(mask | ImageOperandsMask::Grad); texArgs.push_back(parameters.gradX); texArgs.push_back(parameters.gradY); explicitLod = true; } else if (noImplicitLod && ! fetch && ! gather) { // have to explicitly use lod of 0 if not allowed to have them be implicit, and // we would otherwise be about to issue an implicit instruction - mask = (ImageOperandsMask)(mask | ImageOperandsLodMask); + mask = (ImageOperandsMask)(mask | ImageOperandsMask::Lod); texArgs.push_back(makeFloatConstant(0.0)); explicitLod = true; } if (parameters.offset) { if (isConstant(parameters.offset)) - mask = (ImageOperandsMask)(mask | ImageOperandsConstOffsetMask); + mask = (ImageOperandsMask)(mask | ImageOperandsMask::ConstOffset); else { - addCapability(CapabilityImageGatherExtended); - mask = (ImageOperandsMask)(mask | ImageOperandsOffsetMask); + addCapability(Capability::ImageGatherExtended); + mask = (ImageOperandsMask)(mask | ImageOperandsMask::Offset); } texArgs.push_back(parameters.offset); } if (parameters.offsets) { - addCapability(CapabilityImageGatherExtended); - mask = (ImageOperandsMask)(mask | ImageOperandsConstOffsetsMask); + addCapability(Capability::ImageGatherExtended); + mask = (ImageOperandsMask)(mask | ImageOperandsMask::ConstOffsets); texArgs.push_back(parameters.offsets); } if (parameters.sample) { - mask = (ImageOperandsMask)(mask | ImageOperandsSampleMask); + mask = (ImageOperandsMask)(mask | ImageOperandsMask::Sample); texArgs.push_back(parameters.sample); } if (parameters.lodClamp) { // capability if this bit is used - addCapability(CapabilityMinLod); + addCapability(Capability::MinLod); - mask = (ImageOperandsMask)(mask | ImageOperandsMinLodMask); + mask = (ImageOperandsMask)(mask | ImageOperandsMask::MinLod); texArgs.push_back(parameters.lodClamp); } if (parameters.nonprivate) { - mask = mask | ImageOperandsNonPrivateTexelKHRMask; + mask = mask | ImageOperandsMask::NonPrivateTexelKHR; } if (parameters.volatil) { - mask = mask | ImageOperandsVolatileTexelKHRMask; + mask = mask | ImageOperandsMask::VolatileTexelKHR; } if (parameters.nontemporal) { - mask = mask | ImageOperandsNontemporalMask; + mask = mask | ImageOperandsMask::Nontemporal; } mask = mask | signExtensionMask; // insert the operand for the mask, if any bits were set. - if (mask != ImageOperandsMaskNone) - texArgs.insert(texArgs.begin() + optArgNum, mask); + if (mask != ImageOperandsMask::MaskNone) + texArgs.insert(texArgs.begin() + optArgNum, (Id)mask); // // Set up the instruction // - Op opCode = OpNop; // All paths below need to set this + Op opCode = Op::OpNop; // All paths below need to set this if (fetch) { if (sparse) - opCode = OpImageSparseFetch; + opCode = Op::OpImageSparseFetch; else - opCode = OpImageFetch; + opCode = Op::OpImageFetch; } else if (parameters.granularity && parameters.coarse) { - opCode = OpImageSampleFootprintNV; + opCode = Op::OpImageSampleFootprintNV; } else if (gather) { if (parameters.Dref) if (sparse) - opCode = OpImageSparseDrefGather; + opCode = Op::OpImageSparseDrefGather; else - opCode = OpImageDrefGather; + opCode = Op::OpImageDrefGather; else if (sparse) - opCode = OpImageSparseGather; + opCode = Op::OpImageSparseGather; else - opCode = OpImageGather; + opCode = Op::OpImageGather; } else if (explicitLod) { if (parameters.Dref) { if (proj) if (sparse) - opCode = OpImageSparseSampleProjDrefExplicitLod; + opCode = Op::OpImageSparseSampleProjDrefExplicitLod; else - opCode = OpImageSampleProjDrefExplicitLod; + opCode = Op::OpImageSampleProjDrefExplicitLod; else if (sparse) - opCode = OpImageSparseSampleDrefExplicitLod; + opCode = Op::OpImageSparseSampleDrefExplicitLod; else - opCode = OpImageSampleDrefExplicitLod; + opCode = Op::OpImageSampleDrefExplicitLod; } else { if (proj) if (sparse) - opCode = OpImageSparseSampleProjExplicitLod; + opCode = Op::OpImageSparseSampleProjExplicitLod; else - opCode = OpImageSampleProjExplicitLod; + opCode = Op::OpImageSampleProjExplicitLod; else if (sparse) - opCode = OpImageSparseSampleExplicitLod; + opCode = Op::OpImageSparseSampleExplicitLod; else - opCode = OpImageSampleExplicitLod; + opCode = Op::OpImageSampleExplicitLod; } } else { if (parameters.Dref) { if (proj) if (sparse) - opCode = OpImageSparseSampleProjDrefImplicitLod; + opCode = Op::OpImageSparseSampleProjDrefImplicitLod; else - opCode = OpImageSampleProjDrefImplicitLod; + opCode = Op::OpImageSampleProjDrefImplicitLod; else if (sparse) - opCode = OpImageSparseSampleDrefImplicitLod; + opCode = Op::OpImageSparseSampleDrefImplicitLod; else - opCode = OpImageSampleDrefImplicitLod; + opCode = Op::OpImageSampleDrefImplicitLod; } else { if (proj) if (sparse) - opCode = OpImageSparseSampleProjImplicitLod; + opCode = Op::OpImageSparseSampleProjImplicitLod; else - opCode = OpImageSampleProjImplicitLod; + opCode = Op::OpImageSampleProjImplicitLod; else if (sparse) - opCode = OpImageSparseSampleImplicitLod; + opCode = Op::OpImageSparseSampleImplicitLod; else - opCode = OpImageSampleImplicitLod; + opCode = Op::OpImageSampleImplicitLod; } } @@ -3271,10 +3373,10 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, Id smearedType = resultType; if (! isScalarType(resultType)) { switch (opCode) { - case OpImageSampleDrefImplicitLod: - case OpImageSampleDrefExplicitLod: - case OpImageSampleProjDrefImplicitLod: - case OpImageSampleProjDrefExplicitLod: + case Op::OpImageSampleDrefImplicitLod: + case Op::OpImageSampleDrefExplicitLod: + case Op::OpImageSampleProjDrefImplicitLod: + case Op::OpImageSampleProjDrefExplicitLod: resultType = getScalarTypeId(resultType); break; default: @@ -3307,7 +3409,7 @@ Id Builder::createTextureCall(Decoration precision, Id resultType, bool sparse, if (sparse) { // set capability - addCapability(CapabilitySparseResidency); + addCapability(Capability::SparseResidency); // Decode the return type that was a special structure createStore(createCompositeExtract(resultId, typeId1, 1), parameters.texelOut); @@ -3329,22 +3431,22 @@ Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameter // Figure out the result type Id resultType = 0; switch (opCode) { - case OpImageQuerySize: - case OpImageQuerySizeLod: + case Op::OpImageQuerySize: + case Op::OpImageQuerySizeLod: { int numComponents = 0; switch (getTypeDimensionality(getImageType(parameters.sampler))) { - case Dim1D: - case DimBuffer: + case Dim::Dim1D: + case Dim::Buffer: numComponents = 1; break; - case Dim2D: - case DimCube: - case DimRect: - case DimSubpassData: + case Dim::Dim2D: + case Dim::Cube: + case Dim::Rect: + case Dim::SubpassData: numComponents = 2; break; - case Dim3D: + case Dim::Dim3D: numComponents = 3; break; @@ -3363,11 +3465,11 @@ Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameter break; } - case OpImageQueryLod: + case Op::OpImageQueryLod: resultType = makeVectorType(getScalarTypeId(getTypeId(parameters.coords)), 2); break; - case OpImageQueryLevels: - case OpImageQuerySamples: + case Op::OpImageQueryLevels: + case Op::OpImageQuerySamples: resultType = isUnsignedResult ? makeUintType(32) : makeIntType(32); break; default: @@ -3382,7 +3484,7 @@ Id Builder::createTextureQueryCall(Op opCode, const TextureParameters& parameter if (parameters.lod) query->addIdOperand(parameters.lod); addInstruction(std::unique_ptr(query)); - addCapability(CapabilityImageQuery); + addCapability(Capability::ImageQuery); return query->getResultId(); } @@ -3406,15 +3508,15 @@ Id Builder::createCompositeCompare(Decoration precision, Id value1, Id value2, b // to figure out what it is. Op op; switch (getMostBasicTypeClass(valueType)) { - case OpTypeFloat: - op = equal ? OpFOrdEqual : OpFUnordNotEqual; + case Op::OpTypeFloat: + op = equal ? Op::OpFOrdEqual : Op::OpFUnordNotEqual; break; - case OpTypeInt: + case Op::OpTypeInt: default: - op = equal ? OpIEqual : OpINotEqual; + op = equal ? Op::OpIEqual : Op::OpINotEqual; break; - case OpTypeBool: - op = equal ? OpLogicalEqual : OpLogicalNotEqual; + case Op::OpTypeBool: + op = equal ? Op::OpLogicalEqual : Op::OpLogicalNotEqual; precision = NoPrecision; break; } @@ -3427,7 +3529,7 @@ Id Builder::createCompositeCompare(Decoration precision, Id value1, Id value2, b resultId = createBinOp(op, makeVectorType(boolType, numConstituents), value1, value2); setPrecision(resultId, precision); // reduce vector compares... - resultId = createUnaryOp(equal ? OpAll : OpAny, boolType, resultId); + resultId = createUnaryOp(equal ? Op::OpAll : Op::OpAny, boolType, resultId); } return setPrecision(resultId, precision); @@ -3450,7 +3552,7 @@ Id Builder::createCompositeCompare(Decoration precision, Id value1, Id value2, b if (constituent == 0) resultId = subResultId; else - resultId = setPrecision(createBinOp(equal ? OpLogicalAnd : OpLogicalOr, boolType, resultId, subResultId), + resultId = setPrecision(createBinOp(equal ? Op::OpLogicalAnd : Op::OpLogicalOr, boolType, resultId, subResultId), precision); } @@ -3488,11 +3590,11 @@ Id Builder::createCompositeConstruct(Id typeId, const std::vector& constitue if (replicate) { numConstituents = 1; - addCapability(spv::CapabilityReplicatedCompositesEXT); + addCapability(spv::Capability::ReplicatedCompositesEXT); addExtension(spv::E_SPV_EXT_replicated_composites); } - Op opcode = replicate ? OpCompositeConstructReplicateEXT : OpCompositeConstruct; + Op opcode = replicate ? Op::OpCompositeConstructReplicateEXT : Op::OpCompositeConstruct; Instruction* op = new Instruction(getUniqueId(), typeId, opcode); op->reserveOperands(constituents.size()); @@ -3506,7 +3608,7 @@ Id Builder::createCompositeConstruct(Id typeId, const std::vector& constitue // coopmat conversion Id Builder::createCooperativeMatrixConversion(Id typeId, Id source) { - Instruction* op = new Instruction(getUniqueId(), typeId, OpCooperativeMatrixConvertNV); + Instruction* op = new Instruction(getUniqueId(), typeId, Op::OpCooperativeMatrixConvertNV); op->addIdOperand(source); addInstruction(std::unique_ptr(op)); @@ -3528,7 +3630,7 @@ Id Builder::createCooperativeMatrixReduce(Op opcode, Id typeId, Id source, unsig // coopmat per-element operation Id Builder::createCooperativeMatrixPerElementOp(Id typeId, const std::vector& operands) { - Instruction* op = new Instruction(getUniqueId(), typeId, spv::OpCooperativeMatrixPerElementOpNV); + Instruction* op = new Instruction(getUniqueId(), typeId, spv::Op::OpCooperativeMatrixPerElementOpNV); // skip operand[0], which is where the result is stored for (uint32_t i = 1; i < operands.size(); ++i) { op->addIdOperand(operands[i]); @@ -3763,7 +3865,7 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector& } // Comments in header -Builder::If::If(Id cond, unsigned int ctrl, Builder& gb) : +Builder::If::If(Id cond, SelectionControlMask ctrl, Builder& gb) : builder(gb), condition(cond), control(ctrl), @@ -3819,7 +3921,7 @@ void Builder::If::makeEndIf() } // Comments in header -void Builder::makeSwitch(Id selector, unsigned int control, int numSegments, const std::vector& caseValues, +void Builder::makeSwitch(Id selector, SelectionControlMask control, int numSegments, const std::vector& caseValues, const std::vector& valueIndexToSegment, int defaultSegment, std::vector& segmentBlocks) { @@ -3835,7 +3937,7 @@ void Builder::makeSwitch(Id selector, unsigned int control, int numSegments, con createSelectionMerge(mergeBlock, control); // make the switch instruction - Instruction* switchInst = new Instruction(NoResult, NoType, OpSwitch); + Instruction* switchInst = new Instruction(NoResult, NoType, Op::OpSwitch); switchInst->reserveOperands((caseValues.size() * 2) + 2); switchInst->addIdOperand(selector); auto defaultOrMerge = (defaultSegment >= 0) ? segmentBlocks[defaultSegment] : mergeBlock; @@ -3997,8 +4099,8 @@ void Builder::accessChainStore(Id rvalue, Decoration nonUniform, spv::MemoryAcce // take LSB of alignment alignment = alignment & ~(alignment & (alignment-1)); - if (getStorageClass(base) == StorageClassPhysicalStorageBufferEXT) { - memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask); + if (getStorageClass(base) == StorageClass::PhysicalStorageBufferEXT) { + memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessMask::Aligned); } createStore(source, base, memoryAccess, scope, alignment); @@ -4022,8 +4124,8 @@ void Builder::accessChainStore(Id rvalue, Decoration nonUniform, spv::MemoryAcce // take LSB of alignment alignment = alignment & ~(alignment & (alignment-1)); - if (getStorageClass(base) == StorageClassPhysicalStorageBufferEXT) { - memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask); + if (getStorageClass(base) == StorageClass::PhysicalStorageBufferEXT) { + memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessMask::Aligned); } createStore(source, base, memoryAccess, scope, alignment); @@ -4067,11 +4169,11 @@ Id Builder::accessChainLoad(Decoration precision, Decoration l_nonUniform, // make a new function variable for this r-value, using an initializer, // and mark it as NonWritable so that downstream it can be detected as a lookup // table - lValue = createVariable(NoPrecision, StorageClassFunction, getTypeId(accessChain.base), + lValue = createVariable(NoPrecision, StorageClass::Function, getTypeId(accessChain.base), "indexable", accessChain.base); - addDecoration(lValue, DecorationNonWritable); + addDecoration(lValue, Decoration::NonWritable); } else { - lValue = createVariable(NoPrecision, StorageClassFunction, getTypeId(accessChain.base), + lValue = createVariable(NoPrecision, StorageClass::Function, getTypeId(accessChain.base), "indexable"); // store into it createStore(accessChain.base, lValue); @@ -4090,8 +4192,8 @@ Id Builder::accessChainLoad(Decoration precision, Decoration l_nonUniform, // take LSB of alignment alignment = alignment & ~(alignment & (alignment-1)); - if (getStorageClass(accessChain.base) == StorageClassPhysicalStorageBufferEXT) { - memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask); + if (getStorageClass(accessChain.base) == StorageClass::PhysicalStorageBufferEXT) { + memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessMask::Aligned); } // load through the access chain @@ -4187,19 +4289,19 @@ void Builder::dump(std::vector& out) const // Capabilities for (auto it = capabilities.cbegin(); it != capabilities.cend(); ++it) { - Instruction capInst(0, 0, OpCapability); + Instruction capInst(0, 0, Op::OpCapability); capInst.addImmediateOperand(*it); capInst.dump(out); } for (auto it = extensions.cbegin(); it != extensions.cend(); ++it) { - Instruction extInst(0, 0, OpExtension); + Instruction extInst(0, 0, Op::OpExtension); extInst.addStringOperand(it->c_str()); extInst.dump(out); } dumpInstructions(out, imports); - Instruction memInst(0, 0, OpMemoryModel); + Instruction memInst(0, 0, Op::OpMemoryModel); memInst.addImmediateOperand(addressModel); memInst.addImmediateOperand(memoryModel); memInst.dump(out); @@ -4212,7 +4314,7 @@ void Builder::dump(std::vector& out) const dumpInstructions(out, strings); dumpSourceInstructions(out); for (int e = 0; e < (int)sourceExtensions.size(); ++e) { - Instruction sourceExtInst(0, 0, OpSourceExtension); + Instruction sourceExtInst(0, 0, Op::OpSourceExtension); sourceExtInst.addStringOperand(sourceExtensions[e]); sourceExtInst.dump(out); } @@ -4366,7 +4468,7 @@ void Builder::createAndSetNoPredecessorBlock(const char* /*name*/) // Comments in header void Builder::createBranch(bool implicit, Block* block) { - Instruction* branch = new Instruction(OpBranch); + Instruction* branch = new Instruction(Op::OpBranch); branch->addIdOperand(block->getId()); if (implicit) { addInstructionNoDebugInfo(std::unique_ptr(branch)); @@ -4377,19 +4479,19 @@ void Builder::createBranch(bool implicit, Block* block) block->addPredecessor(buildPoint); } -void Builder::createSelectionMerge(Block* mergeBlock, unsigned int control) +void Builder::createSelectionMerge(Block* mergeBlock, SelectionControlMask control) { - Instruction* merge = new Instruction(OpSelectionMerge); + Instruction* merge = new Instruction(Op::OpSelectionMerge); merge->reserveOperands(2); merge->addIdOperand(mergeBlock->getId()); merge->addImmediateOperand(control); addInstruction(std::unique_ptr(merge)); } -void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control, +void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, LoopControlMask control, const std::vector& operands) { - Instruction* merge = new Instruction(OpLoopMerge); + Instruction* merge = new Instruction(Op::OpLoopMerge); merge->reserveOperands(operands.size() + 3); merge->addIdOperand(mergeBlock->getId()); merge->addIdOperand(continueBlock->getId()); @@ -4401,7 +4503,7 @@ void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned void Builder::createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock) { - Instruction* branch = new Instruction(OpBranchConditional); + Instruction* branch = new Instruction(Op::OpBranchConditional); branch->reserveOperands(3); branch->addIdOperand(condition); branch->addIdOperand(thenBlock->getId()); @@ -4424,9 +4526,9 @@ void Builder::dumpSourceInstructions(const spv::Id fileId, const std::string& te const int opSourceWordCount = 4; const int nonNullBytesPerInstruction = 4 * (maxWordCount - opSourceWordCount) - 1; - if (sourceLang != SourceLanguageUnknown) { + if (sourceLang != SourceLanguage::Unknown) { // OpSource Language Version File Source - Instruction sourceInst(NoResult, NoType, OpSource); + Instruction sourceInst(NoResult, NoType, Op::OpSource); sourceInst.reserveOperands(3); sourceInst.addImmediateOperand(sourceLang); sourceInst.addImmediateOperand(sourceVersion); @@ -4445,7 +4547,7 @@ void Builder::dumpSourceInstructions(const spv::Id fileId, const std::string& te sourceInst.dump(out); } else { // OpSourcContinued - Instruction sourceContinuedInst(OpSourceContinued); + Instruction sourceContinuedInst(Op::OpSourceContinued); sourceContinuedInst.addStringOperand(subString.c_str()); sourceContinuedInst.dump(out); } @@ -4477,7 +4579,7 @@ template void Builder::dumpInstructions(std::vector& void Builder::dumpModuleProcesses(std::vector& out) const { for (int i = 0; i < (int)moduleProcesses.size(); ++i) { - Instruction moduleProcessed(OpModuleProcessed); + Instruction moduleProcessed(Op::OpModuleProcessed); moduleProcessed.addStringOperand(moduleProcesses[i]); moduleProcessed.dump(out); } diff --git a/3rdparty/glslang/SPIRV/SpvBuilder.h b/3rdparty/glslang/SPIRV/SpvBuilder.h index 008320fdf..f5aa17be9 100644 --- a/3rdparty/glslang/SPIRV/SpvBuilder.h +++ b/3rdparty/glslang/SPIRV/SpvBuilder.h @@ -49,10 +49,13 @@ #include "Logger.h" #define SPV_ENABLE_UTILITY_CODE -#include "spirv.hpp" +#include "spirv.hpp11" #include "spvIR.h" +#include "spvUtil.h" + namespace spv { #include "GLSL.ext.KHR.h" + #include "GLSL.ext.EXT.h" #include "NonSemanticShaderDebugInfo100.h" } @@ -64,6 +67,7 @@ namespace spv { #include #include #include +#include #include namespace spv { @@ -98,7 +102,7 @@ public: if (sItr != stringIds.end()) return sItr->second; spv::Id strId = getUniqueId(); - Instruction* fileString = new Instruction(strId, NoType, OpString); + Instruction* fileString = new Instruction(strId, NoType, Op::OpString); const char* file_c_str = str.c_str(); fileString->addStringOperand(file_c_str); strings.push_back(std::unique_ptr(fileString)); @@ -204,6 +208,7 @@ public: Id makeIntType(int width) { return makeIntegerType(width, true); } Id makeUintType(int width) { return makeIntegerType(width, false); } Id makeFloatType(int width); + Id makeBFloat16Type(); Id makeStructType(const std::vector& members, const char* name, bool const compilerGenerated = true); Id makeStructResultType(Id type0, Id type1); Id makeVectorType(Id component, int size); @@ -295,46 +300,46 @@ public: bool isTensorView(Id resultId)const { return isTensorViewType(getTypeId(resultId)); } bool isBoolType(Id typeId) - { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); } + { return groupedTypes[enumCast(Op::OpTypeBool)].size() > 0 && typeId == groupedTypes[enumCast(Op::OpTypeBool)].back()->getResultId(); } bool isIntType(Id typeId) const - { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) != 0; } + { return getTypeClass(typeId) == Op::OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) != 0; } bool isUintType(Id typeId) const - { return getTypeClass(typeId) == OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) == 0; } - bool isFloatType(Id typeId) const { return getTypeClass(typeId) == OpTypeFloat; } - bool isPointerType(Id typeId) const { return getTypeClass(typeId) == OpTypePointer; } + { return getTypeClass(typeId) == Op::OpTypeInt && module.getInstruction(typeId)->getImmediateOperand(1) == 0; } + bool isFloatType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypeFloat; } + bool isPointerType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypePointer; } bool isScalarType(Id typeId) const - { return getTypeClass(typeId) == OpTypeFloat || getTypeClass(typeId) == OpTypeInt || - getTypeClass(typeId) == OpTypeBool; } - bool isVectorType(Id typeId) const { return getTypeClass(typeId) == OpTypeVector; } - bool isMatrixType(Id typeId) const { return getTypeClass(typeId) == OpTypeMatrix; } - bool isStructType(Id typeId) const { return getTypeClass(typeId) == OpTypeStruct; } - bool isArrayType(Id typeId) const { return getTypeClass(typeId) == OpTypeArray; } + { return getTypeClass(typeId) == Op::OpTypeFloat || getTypeClass(typeId) == Op::OpTypeInt || + getTypeClass(typeId) == Op::OpTypeBool; } + bool isVectorType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypeVector; } + bool isMatrixType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypeMatrix; } + bool isStructType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypeStruct; } + bool isArrayType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypeArray; } bool isCooperativeMatrixType(Id typeId)const { - return getTypeClass(typeId) == OpTypeCooperativeMatrixKHR || getTypeClass(typeId) == OpTypeCooperativeMatrixNV; + return getTypeClass(typeId) == Op::OpTypeCooperativeMatrixKHR || getTypeClass(typeId) == Op::OpTypeCooperativeMatrixNV; } - bool isTensorViewType(Id typeId) const { return getTypeClass(typeId) == OpTypeTensorViewNV; } - bool isCooperativeVectorType(Id typeId)const { return getTypeClass(typeId) == OpTypeCooperativeVectorNV; } + bool isTensorViewType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypeTensorViewNV; } + bool isCooperativeVectorType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypeCooperativeVectorNV; } bool isAggregateType(Id typeId) const { return isArrayType(typeId) || isStructType(typeId) || isCooperativeMatrixType(typeId); } - bool isImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeImage; } - bool isSamplerType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampler; } - bool isSampledImageType(Id typeId) const { return getTypeClass(typeId) == OpTypeSampledImage; } + bool isImageType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypeImage; } + bool isSamplerType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypeSampler; } + bool isSampledImageType(Id typeId) const { return getTypeClass(typeId) == Op::OpTypeSampledImage; } bool containsType(Id typeId, Op typeOp, unsigned int width) const; bool containsPhysicalStorageBufferOrArray(Id typeId) const; bool isConstantOpCode(Op opcode) const; bool isSpecConstantOpCode(Op opcode) const; bool isConstant(Id resultId) const { return isConstantOpCode(getOpCode(resultId)); } - bool isConstantScalar(Id resultId) const { return getOpCode(resultId) == OpConstant; } + bool isConstantScalar(Id resultId) const { return getOpCode(resultId) == Op::OpConstant; } bool isSpecConstant(Id resultId) const { return isSpecConstantOpCode(getOpCode(resultId)); } unsigned int getConstantScalar(Id resultId) const { return module.getInstruction(resultId)->getImmediateOperand(0); } StorageClass getStorageClass(Id resultId) const { return getTypeStorageClass(getTypeId(resultId)); } - bool isVariableOpCode(Op opcode) const { return opcode == OpVariable; } + bool isVariableOpCode(Op opcode) const { return opcode == Op::OpVariable; } bool isVariable(Id resultId) const { return isVariableOpCode(getOpCode(resultId)); } - bool isGlobalStorage(Id resultId) const { return getStorageClass(resultId) != StorageClassFunction; } + bool isGlobalStorage(Id resultId) const { return getStorageClass(resultId) != StorageClass::Function; } bool isGlobalVariable(Id resultId) const { return isVariable(resultId) && isGlobalStorage(resultId); } // See if a resultId is valid for use as an initializer. bool isValidInitializer(Id resultId) const { return isConstant(resultId) || isGlobalVariable(resultId); } @@ -342,7 +347,7 @@ public: int getScalarTypeWidth(Id typeId) const { Id scalarTypeId = getScalarTypeId(typeId); - assert(getTypeClass(scalarTypeId) == OpTypeInt || getTypeClass(scalarTypeId) == OpTypeFloat); + assert(getTypeClass(scalarTypeId) == Op::OpTypeInt || getTypeClass(scalarTypeId) == Op::OpTypeFloat); return module.getInstruction(scalarTypeId)->getImmediateOperand(0); } @@ -393,6 +398,14 @@ public: { return makeIntConstant(makeIntType(32), (unsigned)i, specConstant); } Id makeUintConstant(unsigned u, bool specConstant = false) { return makeIntConstant(makeUintType(32), u, specConstant); } + Id makeUintConstant(Scope u, bool specConstant = false) + { return makeUintConstant((unsigned)u, specConstant); } + Id makeUintConstant(StorageClass u, bool specConstant = false) + { return makeUintConstant((unsigned)u, specConstant); } + Id makeUintConstant(MemorySemanticsMask u, bool specConstant = false) + { return makeUintConstant((unsigned)u, specConstant); } + Id makeUintConstant(SourceLanguage u, bool specConstant = false) + { return makeUintConstant((unsigned)u, specConstant); } Id makeInt64Constant(long long i, bool specConstant = false) { return makeInt64Constant(makeIntType(64), (unsigned long long)i, specConstant); } Id makeUint64Constant(unsigned long long u, bool specConstant = false) @@ -400,6 +413,7 @@ public: Id makeFloatConstant(float f, bool specConstant = false); Id makeDoubleConstant(double d, bool specConstant = false); Id makeFloat16Constant(float f16, bool specConstant = false); + Id makeBFloat16Constant(float bf16, bool specConstant = false); Id makeFpConstant(Id type, double d, bool specConstant = false); Id importNonSemanticShaderDebugInfoInstructions(); @@ -487,13 +501,13 @@ public: Id createUndefined(Id type); // Store into an Id and return the l-value - void createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, - spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0); + void createStore(Id rValue, Id lValue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMask::MaskNone, + spv::Scope scope = spv::Scope::Max, unsigned int alignment = 0); // Load from an Id and return it Id createLoad(Id lValue, spv::Decoration precision, - spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, - spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0); + spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMask::MaskNone, + spv::Scope scope = spv::Scope::Max, unsigned int alignment = 0); // Create an OpAccessChain instruction Id createAccessChain(StorageClass, Id base, const std::vector& offsets); @@ -520,7 +534,7 @@ public: void createNoResultOp(Op, const std::vector& operands); void createNoResultOp(Op, const std::vector& operands); void createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask); - void createMemoryBarrier(unsigned executionScope, unsigned memorySemantics); + void createMemoryBarrier(Scope executionScope, MemorySemanticsMask memorySemantics); Id createUnaryOp(Op, Id typeId, Id operand); Id createBinOp(Op, Id typeId, Id operand1, Id operand2); Id createTriOp(Op, Id typeId, Id operand1, Id operand2, Id operand3); @@ -627,7 +641,7 @@ public: // Helper to use for building nested control flow with if-then-else. class If { public: - If(Id condition, unsigned int ctrl, Builder& builder); + If(Id condition, SelectionControlMask ctrl, Builder& builder); ~If() {} void makeBeginElse(); @@ -639,7 +653,7 @@ public: Builder& builder; Id condition; - unsigned int control; + SelectionControlMask control; Function* function; Block* headerBlock; Block* thenBlock; @@ -659,7 +673,7 @@ public: // Returns the right set of basic blocks to start each code segment with, so that the caller's // recursion stack can hold the memory for it. // - void makeSwitch(Id condition, unsigned int control, int numSegments, const std::vector& caseValues, + void makeSwitch(Id condition, SelectionControlMask control, int numSegments, const std::vector& caseValues, const std::vector& valueToSegment, int defaultSegment, std::vector& segmentBB); // Add a branch to the innermost switch's merge block. @@ -850,12 +864,12 @@ public: // use accessChain and swizzle to store value void accessChainStore(Id rvalue, Decoration nonUniform, - spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, - spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0); + spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMask::MaskNone, + spv::Scope scope = spv::Scope::Max, unsigned int alignment = 0); // use accessChain and swizzle to load an r-value Id accessChainLoad(Decoration precision, Decoration l_nonUniform, Decoration r_nonUniform, Id ResultType, - spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, + spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMask::MaskNone, spv::Scope scope = spv::Scope::Max, unsigned int alignment = 0); // Return whether or not the access chain can be represented in SPIR-V @@ -892,7 +906,7 @@ public: // If set implicit, the branch instruction shouldn't have debug source location. void createBranch(bool implicit, Block* block); void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock); - void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control, + void createLoopMerge(Block* mergeBlock, Block* continueBlock, LoopControlMask control, const std::vector& operands); // Sets to generate opcode for specialization constants. @@ -914,7 +928,7 @@ public: void transferAccessChainSwizzle(bool dynamic); void simplifyAccessChainSwizzle(); void createAndSetNoPredecessorBlock(const char*); - void createSelectionMerge(Block* mergeBlock, unsigned int control); + void createSelectionMerge(Block* mergeBlock, SelectionControlMask control); void dumpSourceInstructions(std::vector&) const; void dumpSourceInstructions(const spv::Id fileId, const std::string& text, std::vector&) const; template void dumpInstructions(std::vector& out, const Range& instructions) const; @@ -998,6 +1012,10 @@ public: // list of OpConstantNull instructions std::vector nullConstants; + // Track which types have explicit layouts, to avoid reusing in storage classes without layout. + // Currently only tracks array types. + std::unordered_set explicitlyLaidOut; + // stack of switches std::stack switchMerges; diff --git a/3rdparty/glslang/SPIRV/SpvPostProcess.cpp b/3rdparty/glslang/SPIRV/SpvPostProcess.cpp index 4cd011028..4f61864a8 100644 --- a/3rdparty/glslang/SPIRV/SpvPostProcess.cpp +++ b/3rdparty/glslang/SPIRV/SpvPostProcess.cpp @@ -44,7 +44,8 @@ #include #include "SpvBuilder.h" -#include "spirv.hpp" +#include "spirv.hpp11" +#include "spvUtil.h" namespace spv { #include "GLSL.std.450.h" @@ -64,137 +65,137 @@ namespace spv { void Builder::postProcessType(const Instruction& inst, Id typeId) { // Characterize the type being questioned - Id basicTypeOp = getMostBasicTypeClass(typeId); + Op basicTypeOp = getMostBasicTypeClass(typeId); int width = 0; - if (basicTypeOp == OpTypeFloat || basicTypeOp == OpTypeInt) + if (basicTypeOp == Op::OpTypeFloat || basicTypeOp == Op::OpTypeInt) width = getScalarTypeWidth(typeId); // Do opcode-specific checks switch (inst.getOpCode()) { - case OpLoad: - case OpStore: - if (basicTypeOp == OpTypeStruct) { - if (containsType(typeId, OpTypeInt, 8)) - addCapability(CapabilityInt8); - if (containsType(typeId, OpTypeInt, 16)) - addCapability(CapabilityInt16); - if (containsType(typeId, OpTypeFloat, 16)) - addCapability(CapabilityFloat16); + case Op::OpLoad: + case Op::OpStore: + if (basicTypeOp == Op::OpTypeStruct) { + if (containsType(typeId, Op::OpTypeInt, 8)) + addCapability(Capability::Int8); + if (containsType(typeId, Op::OpTypeInt, 16)) + addCapability(Capability::Int16); + if (containsType(typeId, Op::OpTypeFloat, 16)) + addCapability(Capability::Float16); } else { StorageClass storageClass = getStorageClass(inst.getIdOperand(0)); if (width == 8) { switch (storageClass) { - case StorageClassPhysicalStorageBufferEXT: - case StorageClassUniform: - case StorageClassStorageBuffer: - case StorageClassPushConstant: + case StorageClass::PhysicalStorageBufferEXT: + case StorageClass::Uniform: + case StorageClass::StorageBuffer: + case StorageClass::PushConstant: break; default: - addCapability(CapabilityInt8); + addCapability(Capability::Int8); break; } } else if (width == 16) { switch (storageClass) { - case StorageClassPhysicalStorageBufferEXT: - case StorageClassUniform: - case StorageClassStorageBuffer: - case StorageClassPushConstant: - case StorageClassInput: - case StorageClassOutput: + case StorageClass::PhysicalStorageBufferEXT: + case StorageClass::Uniform: + case StorageClass::StorageBuffer: + case StorageClass::PushConstant: + case StorageClass::Input: + case StorageClass::Output: break; default: - if (basicTypeOp == OpTypeInt) - addCapability(CapabilityInt16); - if (basicTypeOp == OpTypeFloat) - addCapability(CapabilityFloat16); + if (basicTypeOp == Op::OpTypeInt) + addCapability(Capability::Int16); + if (basicTypeOp == Op::OpTypeFloat) + addCapability(Capability::Float16); break; } } } break; - case OpCopyObject: + case Op::OpCopyObject: break; - case OpFConvert: - case OpSConvert: - case OpUConvert: + case Op::OpFConvert: + case Op::OpSConvert: + case Op::OpUConvert: // Look for any 8/16-bit storage capabilities. If there are none, assume that // the convert instruction requires the Float16/Int8/16 capability. - if (containsType(typeId, OpTypeFloat, 16) || containsType(typeId, OpTypeInt, 16)) { + if (containsType(typeId, Op::OpTypeFloat, 16) || containsType(typeId, Op::OpTypeInt, 16)) { bool foundStorage = false; for (auto it = capabilities.begin(); it != capabilities.end(); ++it) { spv::Capability cap = *it; - if (cap == spv::CapabilityStorageInputOutput16 || - cap == spv::CapabilityStoragePushConstant16 || - cap == spv::CapabilityStorageUniformBufferBlock16 || - cap == spv::CapabilityStorageUniform16) { + if (cap == spv::Capability::StorageInputOutput16 || + cap == spv::Capability::StoragePushConstant16 || + cap == spv::Capability::StorageUniformBufferBlock16 || + cap == spv::Capability::StorageUniform16) { foundStorage = true; break; } } if (!foundStorage) { - if (containsType(typeId, OpTypeFloat, 16)) - addCapability(CapabilityFloat16); - if (containsType(typeId, OpTypeInt, 16)) - addCapability(CapabilityInt16); + if (containsType(typeId, Op::OpTypeFloat, 16)) + addCapability(Capability::Float16); + if (containsType(typeId, Op::OpTypeInt, 16)) + addCapability(Capability::Int16); } } - if (containsType(typeId, OpTypeInt, 8)) { + if (containsType(typeId, Op::OpTypeInt, 8)) { bool foundStorage = false; for (auto it = capabilities.begin(); it != capabilities.end(); ++it) { spv::Capability cap = *it; - if (cap == spv::CapabilityStoragePushConstant8 || - cap == spv::CapabilityUniformAndStorageBuffer8BitAccess || - cap == spv::CapabilityStorageBuffer8BitAccess) { + if (cap == spv::Capability::StoragePushConstant8 || + cap == spv::Capability::UniformAndStorageBuffer8BitAccess || + cap == spv::Capability::StorageBuffer8BitAccess) { foundStorage = true; break; } } if (!foundStorage) { - addCapability(CapabilityInt8); + addCapability(Capability::Int8); } } break; - case OpExtInst: + case Op::OpExtInst: switch (inst.getImmediateOperand(1)) { case GLSLstd450Frexp: case GLSLstd450FrexpStruct: - if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, OpTypeInt, 16)) + if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, Op::OpTypeInt, 16)) addExtension(spv::E_SPV_AMD_gpu_shader_int16); break; case GLSLstd450InterpolateAtCentroid: case GLSLstd450InterpolateAtSample: case GLSLstd450InterpolateAtOffset: - if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, OpTypeFloat, 16)) + if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, Op::OpTypeFloat, 16)) addExtension(spv::E_SPV_AMD_gpu_shader_half_float); break; default: break; } break; - case OpAccessChain: - case OpPtrAccessChain: + case Op::OpAccessChain: + case Op::OpPtrAccessChain: if (isPointerType(typeId)) break; - if (basicTypeOp == OpTypeInt) { + if (basicTypeOp == Op::OpTypeInt) { if (width == 16) - addCapability(CapabilityInt16); + addCapability(Capability::Int16); else if (width == 8) - addCapability(CapabilityInt8); + addCapability(Capability::Int8); } break; default: - if (basicTypeOp == OpTypeInt) { + if (basicTypeOp == Op::OpTypeInt) { if (width == 16) - addCapability(CapabilityInt16); + addCapability(Capability::Int16); else if (width == 8) - addCapability(CapabilityInt8); + addCapability(Capability::Int8); else if (width == 64) - addCapability(CapabilityInt64); - } else if (basicTypeOp == OpTypeFloat) { + addCapability(Capability::Int64); + } else if (basicTypeOp == Op::OpTypeFloat) { if (width == 16) - addCapability(CapabilityFloat16); + addCapability(Capability::Float16); else if (width == 64) - addCapability(CapabilityFloat64); + addCapability(Capability::Float64); } break; } @@ -205,41 +206,41 @@ void Builder::postProcess(Instruction& inst) { // Add capabilities based simply on the opcode. switch (inst.getOpCode()) { - case OpExtInst: + case Op::OpExtInst: switch (inst.getImmediateOperand(1)) { case GLSLstd450InterpolateAtCentroid: case GLSLstd450InterpolateAtSample: case GLSLstd450InterpolateAtOffset: - addCapability(CapabilityInterpolationFunction); + addCapability(Capability::InterpolationFunction); break; default: break; } break; - case OpDPdxFine: - case OpDPdyFine: - case OpFwidthFine: - case OpDPdxCoarse: - case OpDPdyCoarse: - case OpFwidthCoarse: - addCapability(CapabilityDerivativeControl); + case Op::OpDPdxFine: + case Op::OpDPdyFine: + case Op::OpFwidthFine: + case Op::OpDPdxCoarse: + case Op::OpDPdyCoarse: + case Op::OpFwidthCoarse: + addCapability(Capability::DerivativeControl); break; - case OpImageQueryLod: - case OpImageQuerySize: - case OpImageQuerySizeLod: - case OpImageQuerySamples: - case OpImageQueryLevels: - addCapability(CapabilityImageQuery); + case Op::OpImageQueryLod: + case Op::OpImageQuerySize: + case Op::OpImageQuerySizeLod: + case Op::OpImageQuerySamples: + case Op::OpImageQueryLevels: + addCapability(Capability::ImageQuery); break; - case OpGroupNonUniformPartitionNV: + case Op::OpGroupNonUniformPartitionNV: addExtension(E_SPV_NV_shader_subgroup_partitioned); - addCapability(CapabilityGroupNonUniformPartitionedNV); + addCapability(Capability::GroupNonUniformPartitionedNV); break; - case OpLoad: - case OpStore: + case Op::OpLoad: + case Op::OpStore: { // For any load/store to a PhysicalStorageBufferEXT, walk the accesschain // index list to compute the misalignment. The pre-existing alignment value @@ -247,13 +248,13 @@ void Builder::postProcess(Instruction& inst) // the reference type and any scalar component selection in the accesschain, // and this function computes the rest from the SPIR-V Offset decorations. Instruction *accessChain = module.getInstruction(inst.getIdOperand(0)); - if (accessChain->getOpCode() == OpAccessChain) { + if (accessChain->getOpCode() == Op::OpAccessChain) { Instruction *base = module.getInstruction(accessChain->getIdOperand(0)); // Get the type of the base of the access chain. It must be a pointer type. Id typeId = base->getTypeId(); Instruction *type = module.getInstruction(typeId); - assert(type->getOpCode() == OpTypePointer); - if (type->getImmediateOperand(0) != StorageClassPhysicalStorageBufferEXT) { + assert(type->getOpCode() == Op::OpTypePointer); + if (type->getImmediateOperand(0) != StorageClass::PhysicalStorageBufferEXT) { break; } // Get the pointee type. @@ -266,16 +267,16 @@ void Builder::postProcess(Instruction& inst) int alignment = 0; for (int i = 1; i < accessChain->getNumOperands(); ++i) { Instruction *idx = module.getInstruction(accessChain->getIdOperand(i)); - if (type->getOpCode() == OpTypeStruct) { - assert(idx->getOpCode() == OpConstant); + if (type->getOpCode() == Op::OpTypeStruct) { + assert(idx->getOpCode() == Op::OpConstant); unsigned int c = idx->getImmediateOperand(0); const auto function = [&](const std::unique_ptr& decoration) { - if (decoration.get()->getOpCode() == OpMemberDecorate && + if (decoration.get()->getOpCode() == Op::OpMemberDecorate && decoration.get()->getIdOperand(0) == typeId && decoration.get()->getImmediateOperand(1) == c && - (decoration.get()->getImmediateOperand(2) == DecorationOffset || - decoration.get()->getImmediateOperand(2) == DecorationMatrixStride)) { + (decoration.get()->getImmediateOperand(2) == Decoration::Offset || + decoration.get()->getImmediateOperand(2) == Decoration::MatrixStride)) { alignment |= decoration.get()->getImmediateOperand(3); } }; @@ -283,12 +284,12 @@ void Builder::postProcess(Instruction& inst) // get the next member type typeId = type->getIdOperand(c); type = module.getInstruction(typeId); - } else if (type->getOpCode() == OpTypeArray || - type->getOpCode() == OpTypeRuntimeArray) { + } else if (type->getOpCode() == Op::OpTypeArray || + type->getOpCode() == Op::OpTypeRuntimeArray) { const auto function = [&](const std::unique_ptr& decoration) { - if (decoration.get()->getOpCode() == OpDecorate && + if (decoration.get()->getOpCode() == Op::OpDecorate && decoration.get()->getIdOperand(0) == typeId && - decoration.get()->getImmediateOperand(1) == DecorationArrayStride) { + decoration.get()->getImmediateOperand(1) == Decoration::ArrayStride) { alignment |= decoration.get()->getImmediateOperand(2); } }; @@ -302,12 +303,12 @@ void Builder::postProcess(Instruction& inst) } } assert(inst.getNumOperands() >= 3); - unsigned int memoryAccess = inst.getImmediateOperand((inst.getOpCode() == OpStore) ? 2 : 1); - assert(memoryAccess & MemoryAccessAlignedMask); + auto const memoryAccess = (MemoryAccessMask)inst.getImmediateOperand((inst.getOpCode() == Op::OpStore) ? 2 : 1); + assert(anySet(memoryAccess, MemoryAccessMask::Aligned)); static_cast(memoryAccess); // Compute the index of the alignment operand. int alignmentIdx = 2; - if (inst.getOpCode() == OpStore) + if (inst.getOpCode() == Op::OpStore) alignmentIdx++; // Merge new and old (mis)alignment alignment |= inst.getImmediateOperand(alignmentIdx); @@ -404,17 +405,17 @@ void Builder::postProcessFeatures() { // Look for any 8/16 bit type in physical storage buffer class, and set the // appropriate capability. This happens in createSpvVariable for other storage // classes, but there isn't always a variable for physical storage buffer. - for (int t = 0; t < (int)groupedTypes[OpTypePointer].size(); ++t) { - Instruction* type = groupedTypes[OpTypePointer][t]; - if (type->getImmediateOperand(0) == (unsigned)StorageClassPhysicalStorageBufferEXT) { - if (containsType(type->getIdOperand(1), OpTypeInt, 8)) { + for (int t = 0; t < (int)groupedTypes[enumCast(Op::OpTypePointer)].size(); ++t) { + Instruction* type = groupedTypes[enumCast(Op::OpTypePointer)][t]; + if (type->getImmediateOperand(0) == (unsigned)StorageClass::PhysicalStorageBufferEXT) { + if (containsType(type->getIdOperand(1), Op::OpTypeInt, 8)) { addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5); - addCapability(spv::CapabilityStorageBuffer8BitAccess); + addCapability(spv::Capability::StorageBuffer8BitAccess); } - if (containsType(type->getIdOperand(1), OpTypeInt, 16) || - containsType(type->getIdOperand(1), OpTypeFloat, 16)) { + if (containsType(type->getIdOperand(1), Op::OpTypeInt, 16) || + containsType(type->getIdOperand(1), Op::OpTypeFloat, 16)) { addIncorporatedExtension(spv::E_SPV_KHR_16bit_storage, spv::Spv_1_3); - addCapability(spv::CapabilityStorageBuffer16BitAccess); + addCapability(spv::Capability::StorageBuffer16BitAccess); } } } @@ -437,15 +438,15 @@ void Builder::postProcessFeatures() { bool foundDecoration = false; const auto function = [&](const std::unique_ptr& decoration) { if (decoration.get()->getIdOperand(0) == resultId && - decoration.get()->getOpCode() == OpDecorate && - (decoration.get()->getImmediateOperand(1) == spv::DecorationAliasedPointerEXT || - decoration.get()->getImmediateOperand(1) == spv::DecorationRestrictPointerEXT)) { + decoration.get()->getOpCode() == Op::OpDecorate && + (decoration.get()->getImmediateOperand(1) == spv::Decoration::AliasedPointerEXT || + decoration.get()->getImmediateOperand(1) == spv::Decoration::RestrictPointerEXT)) { foundDecoration = true; } }; std::for_each(decorations.begin(), decorations.end(), function); if (!foundDecoration) { - addDecoration(resultId, spv::DecorationAliasedPointerEXT); + addDecoration(resultId, spv::Decoration::AliasedPointerEXT); } } } @@ -454,13 +455,13 @@ void Builder::postProcessFeatures() { // If any Vulkan memory model-specific functionality is used, update the // OpMemoryModel to match. - if (capabilities.find(spv::CapabilityVulkanMemoryModelKHR) != capabilities.end()) { - memoryModel = spv::MemoryModelVulkanKHR; + if (capabilities.find(spv::Capability::VulkanMemoryModelKHR) != capabilities.end()) { + memoryModel = spv::MemoryModel::VulkanKHR; addIncorporatedExtension(spv::E_SPV_KHR_vulkan_memory_model, spv::Spv_1_5); } // Add Aliased decoration if there's more than one Workgroup Block variable. - if (capabilities.find(spv::CapabilityWorkgroupMemoryExplicitLayoutKHR) != capabilities.end()) { + if (capabilities.find(spv::Capability::WorkgroupMemoryExplicitLayoutKHR) != capabilities.end()) { assert(entryPoints.size() == 1); auto &ep = entryPoints[0]; @@ -471,16 +472,16 @@ void Builder::postProcessFeatures() { const Id id = ep->getIdOperand(i); const Instruction *instr = module.getInstruction(id); - if (instr->getOpCode() != spv::OpVariable) + if (instr->getOpCode() != spv::Op::OpVariable) continue; - if (instr->getImmediateOperand(0) == spv::StorageClassWorkgroup) + if (instr->getImmediateOperand(0) == spv::StorageClass::Workgroup) workgroup_variables.push_back(id); } if (workgroup_variables.size() > 1) { for (size_t i = 0; i < workgroup_variables.size(); i++) - addDecoration(workgroup_variables[i], spv::DecorationAliased); + addDecoration(workgroup_variables[i], spv::Decoration::Aliased); } } } @@ -497,7 +498,7 @@ void Builder::postProcessSamplers() for (auto f: module.getFunctions()) { for (auto b: f->getBlocks()) { for (auto &i: b->getInstructions()) { - if (i->getOpCode() == spv::OpSampledImage) { + if (i->getOpCode() == spv::Op::OpSampledImage) { sampledImageInstrs[i->getResultId()] = i.get(); } } @@ -518,7 +519,7 @@ void Builder::postProcessSamplers() if (i->getBlock() != opSampImg->getBlock()) { Instruction *newInstr = new Instruction(getUniqueId(), opSampImg->getTypeId(), - spv::OpSampledImage); + spv::Op::OpSampledImage); newInstr->addIdOperand(opSampImg->getIdOperand(0)); newInstr->addIdOperand(opSampImg->getIdOperand(1)); newInstr->setBlock(b); diff --git a/3rdparty/glslang/SPIRV/disassemble.cpp b/3rdparty/glslang/SPIRV/disassemble.cpp index 606e8899d..a73399693 100644 --- a/3rdparty/glslang/SPIRV/disassemble.cpp +++ b/3rdparty/glslang/SPIRV/disassemble.cpp @@ -48,6 +48,7 @@ #include "disassemble.h" #include "doc.h" +#include "spvUtil.h" namespace spv { extern "C" { @@ -97,7 +98,7 @@ public: protected: SpirvStream(const SpirvStream&); SpirvStream& operator=(const SpirvStream&); - Op getOpCode(int id) const { return idInstruction[id] ? (Op)(stream[idInstruction[id]] & OpCodeMask) : OpNop; } + Op getOpCode(int id) const { return idInstruction[id] ? (Op)(stream[idInstruction[id]] & OpCodeMask) : Op::OpNop; } // Output methods void outputIndent(); @@ -187,14 +188,14 @@ void SpirvStream::processInstructions() // Type Id typeId = 0; - if (InstructionDesc[opCode].hasType()) { + if (InstructionDesc[enumCast(opCode)].hasType()) { typeId = stream[word++]; --numOperands; } // Result Id resultId = 0; - if (InstructionDesc[opCode].hasResult()) { + if (InstructionDesc[enumCast(opCode)].hasResult()) { resultId = stream[word++]; --numOperands; @@ -355,22 +356,22 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, { // Process the opcode - out << (OpcodeString(opCode) + 2); // leave out the "Op" + out << (OpcodeString((int)opCode) + 2); // leave out the "Op" - if (opCode == OpLoopMerge || opCode == OpSelectionMerge) + if (opCode == Op::OpLoopMerge || opCode == Op::OpSelectionMerge) nextNestedControl = stream[word]; - else if (opCode == OpBranchConditional || opCode == OpSwitch) { + else if (opCode == Op::OpBranchConditional || opCode == Op::OpSwitch) { if (nextNestedControl) { nestedControl.push(nextNestedControl); nextNestedControl = 0; } - } else if (opCode == OpExtInstImport) { + } else if (opCode == Op::OpExtInstImport) { idDescriptor[resultId] = decodeString().second; } else { if (resultId != 0 && idDescriptor[resultId].size() == 0) { switch (opCode) { - case OpTypeInt: + case Op::OpTypeInt: switch (stream[word]) { case 8: idDescriptor[resultId] = "int8_t"; break; case 16: idDescriptor[resultId] = "int16_t"; break; @@ -379,26 +380,36 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, case 64: idDescriptor[resultId] = "int64_t"; break; } break; - case OpTypeFloat: + case Op::OpTypeFloat: switch (stream[word]) { - case 16: idDescriptor[resultId] = "float16_t"; break; + case 16: + if (numOperands > 1 && stream[word+1] == spv::FPEncoding::BFloat16KHR) { + idDescriptor[resultId] = "bfloat16_t"; + } else { + idDescriptor[resultId] = "float16_t"; + } + break; default: assert(0); [[fallthrough]]; case 32: idDescriptor[resultId] = "float"; break; case 64: idDescriptor[resultId] = "float64_t"; break; } break; - case OpTypeBool: + case Op::OpTypeBool: idDescriptor[resultId] = "bool"; break; - case OpTypeStruct: + case Op::OpTypeStruct: idDescriptor[resultId] = "struct"; break; - case OpTypePointer: + case Op::OpTypePointer: idDescriptor[resultId] = "ptr"; break; - case OpTypeVector: + case Op::OpTypeVector: if (idDescriptor[stream[word]].size() > 0) { - idDescriptor[resultId].append(idDescriptor[stream[word]].begin(), idDescriptor[stream[word]].begin() + 1); + if (idDescriptor[stream[word]].substr(0,2) == "bf") { + idDescriptor[resultId].append(idDescriptor[stream[word]].begin(), idDescriptor[stream[word]].begin() + 2); + } else { + idDescriptor[resultId].append(idDescriptor[stream[word]].begin(), idDescriptor[stream[word]].begin() + 1); + } if (strstr(idDescriptor[stream[word]].c_str(), "8")) { idDescriptor[resultId].append("8"); } @@ -430,10 +441,10 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, // swapped in mid-traversal. // Handle images specially, so can put out helpful strings. - if (opCode == OpTypeImage) { + if (opCode == Op::OpTypeImage) { out << " "; disassembleIds(1); - out << " " << DimensionString((Dim)stream[word++]); + out << " " << DimensionString((int)(Dim)stream[word++]); out << (stream[word++] != 0 ? " depth" : ""); out << (stream[word++] != 0 ? " array" : ""); out << (stream[word++] != 0 ? " multi-sampled" : ""); @@ -442,7 +453,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, case 1: out << " sampled"; break; case 2: out << " nonsampled"; break; } - out << " format:" << ImageFormatString((ImageFormat)stream[word++]); + out << " format:" << ImageFormatString((int)(ImageFormat)stream[word++]); if (numOperands == 8) { out << " " << AccessQualifierString(stream[word++]); @@ -451,9 +462,9 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, } // Handle all the parameterized operands - for (int op = 0; op < InstructionDesc[opCode].operands.getNum() && numOperands > 0; ++op) { + for (int op = 0; op < InstructionDesc[enumCast(opCode)].operands.getNum() && numOperands > 0; ++op) { out << " "; - OperandClass operandClass = InstructionDesc[opCode].operands.getClass(op); + OperandClass operandClass = InstructionDesc[enumCast(opCode)].operands.getClass(op); switch (operandClass) { case OperandId: case OperandScope: @@ -461,7 +472,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, disassembleIds(1); --numOperands; // Get names for printing "(XXX)" for readability, *after* this id - if (opCode == OpName) + if (opCode == Op::OpName) idDescriptor[stream[word - 1]] = decodeString().second; break; case OperandVariableIds: @@ -474,8 +485,8 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, return; case OperandOptionalLiteral: case OperandVariableLiterals: - if ((opCode == OpDecorate && stream[word - 1] == DecorationBuiltIn) || - (opCode == OpMemberDecorate && stream[word - 1] == DecorationBuiltIn)) { + if ((opCode == Op::OpDecorate && stream[word - 1] == Decoration::BuiltIn) || + (opCode == Op::OpMemberDecorate && stream[word - 1] == Decoration::BuiltIn)) { out << BuiltInString(stream[word++]); --numOperands; ++op; @@ -511,7 +522,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, case OperandLiteralNumber: disassembleImmediates(1); --numOperands; - if (opCode == OpExtInst) { + if (opCode == Op::OpExtInst) { ExtInstSet extInstSet = GLSL450Inst; const char* name = idDescriptor[stream[word - 2]].c_str(); if (strcmp("OpenCL.std", name) == 0) { @@ -575,14 +586,14 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, uint32_t mask = stream[word-1]; // Aligned is the only memory access operand that uses an immediate // value, and it is also the first operand that uses a value at all. - if (mask & MemoryAccessAlignedMask) { + if (mask & (uint32_t)MemoryAccessMask::Aligned) { disassembleImmediates(1); numOperands--; if (numOperands) out << " "; } - uint32_t bitCount = popcount(mask & (MemoryAccessMakePointerAvailableMask | MemoryAccessMakePointerVisibleMask)); + uint32_t bitCount = popcount(mask & (uint32_t)(MemoryAccessMask::MakePointerAvailable | MemoryAccessMask::MakePointerVisible)); disassembleIds(bitCount); numOperands -= bitCount; } @@ -757,41 +768,41 @@ static const char* GLSLextNVGetDebugNames(const char* name, unsigned entrypoint) strcmp(name, spv::E_SPV_NV_shader_image_footprint) == 0) { switch (entrypoint) { // NV builtins - case BuiltInViewportMaskNV: return "ViewportMaskNV"; - case BuiltInSecondaryPositionNV: return "SecondaryPositionNV"; - case BuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; - case BuiltInPositionPerViewNV: return "PositionPerViewNV"; - case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; - case BuiltInBaryCoordNV: return "BaryCoordNV"; - case BuiltInBaryCoordNoPerspNV: return "BaryCoordNoPerspNV"; - case BuiltInTaskCountNV: return "TaskCountNV"; - case BuiltInPrimitiveCountNV: return "PrimitiveCountNV"; - case BuiltInPrimitiveIndicesNV: return "PrimitiveIndicesNV"; - case BuiltInClipDistancePerViewNV: return "ClipDistancePerViewNV"; - case BuiltInCullDistancePerViewNV: return "CullDistancePerViewNV"; - case BuiltInLayerPerViewNV: return "LayerPerViewNV"; - case BuiltInMeshViewCountNV: return "MeshViewCountNV"; - case BuiltInMeshViewIndicesNV: return "MeshViewIndicesNV"; + case (unsigned)BuiltIn::ViewportMaskNV: return "ViewportMaskNV"; + case (unsigned)BuiltIn::SecondaryPositionNV: return "SecondaryPositionNV"; + case (unsigned)BuiltIn::SecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; + case (unsigned)BuiltIn::PositionPerViewNV: return "PositionPerViewNV"; + case (unsigned)BuiltIn::ViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; + case (unsigned)BuiltIn::BaryCoordNV: return "BaryCoordNV"; + case (unsigned)BuiltIn::BaryCoordNoPerspNV: return "BaryCoordNoPerspNV"; + case (unsigned)BuiltIn::TaskCountNV: return "TaskCountNV"; + case (unsigned)BuiltIn::PrimitiveCountNV: return "PrimitiveCountNV"; + case (unsigned)BuiltIn::PrimitiveIndicesNV: return "PrimitiveIndicesNV"; + case (unsigned)BuiltIn::ClipDistancePerViewNV: return "ClipDistancePerViewNV"; + case (unsigned)BuiltIn::CullDistancePerViewNV: return "CullDistancePerViewNV"; + case (unsigned)BuiltIn::LayerPerViewNV: return "LayerPerViewNV"; + case (unsigned)BuiltIn::MeshViewCountNV: return "MeshViewCountNV"; + case (unsigned)BuiltIn::MeshViewIndicesNV: return "MeshViewIndicesNV"; // NV Capabilities - case CapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; - case CapabilityShaderViewportMaskNV: return "ShaderViewportMaskNV"; - case CapabilityShaderStereoViewNV: return "ShaderStereoViewNV"; - case CapabilityPerViewAttributesNV: return "PerViewAttributesNV"; - case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV"; - case CapabilityMeshShadingNV: return "MeshShadingNV"; - case CapabilityImageFootprintNV: return "ImageFootprintNV"; - case CapabilitySampleMaskOverrideCoverageNV:return "SampleMaskOverrideCoverageNV"; + case (unsigned)Capability::GeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; + case (unsigned)Capability::ShaderViewportMaskNV: return "ShaderViewportMaskNV"; + case (unsigned)Capability::ShaderStereoViewNV: return "ShaderStereoViewNV"; + case (unsigned)Capability::PerViewAttributesNV: return "PerViewAttributesNV"; + case (unsigned)Capability::FragmentBarycentricNV: return "FragmentBarycentricNV"; + case (unsigned)Capability::MeshShadingNV: return "MeshShadingNV"; + case (unsigned)Capability::ImageFootprintNV: return "ImageFootprintNV"; + case (unsigned)Capability::SampleMaskOverrideCoverageNV:return "SampleMaskOverrideCoverageNV"; // NV Decorations - case DecorationOverrideCoverageNV: return "OverrideCoverageNV"; - case DecorationPassthroughNV: return "PassthroughNV"; - case DecorationViewportRelativeNV: return "ViewportRelativeNV"; - case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV"; - case DecorationPerVertexNV: return "PerVertexNV"; - case DecorationPerPrimitiveNV: return "PerPrimitiveNV"; - case DecorationPerViewNV: return "PerViewNV"; - case DecorationPerTaskNV: return "PerTaskNV"; + case (unsigned)Decoration::OverrideCoverageNV: return "OverrideCoverageNV"; + case (unsigned)Decoration::PassthroughNV: return "PassthroughNV"; + case (unsigned)Decoration::ViewportRelativeNV: return "ViewportRelativeNV"; + case (unsigned)Decoration::SecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV"; + case (unsigned)Decoration::PerVertexNV: return "PerVertexNV"; + case (unsigned)Decoration::PerPrimitiveNV: return "PerPrimitiveNV"; + case (unsigned)Decoration::PerViewNV: return "PerViewNV"; + case (unsigned)Decoration::PerTaskNV: return "PerTaskNV"; default: return "Bad"; } diff --git a/3rdparty/glslang/SPIRV/doc.cpp b/3rdparty/glslang/SPIRV/doc.cpp index 09f2d76fc..429290b3e 100644 --- a/3rdparty/glslang/SPIRV/doc.cpp +++ b/3rdparty/glslang/SPIRV/doc.cpp @@ -42,6 +42,7 @@ // #include "doc.h" +#include "spvUtil.h" #include #include @@ -99,19 +100,19 @@ const char* ExecutionModelString(int model) case 4: return "Fragment"; case 5: return "GLCompute"; case 6: return "Kernel"; - case ExecutionModelTaskNV: return "TaskNV"; - case ExecutionModelMeshNV: return "MeshNV"; - case ExecutionModelTaskEXT: return "TaskEXT"; - case ExecutionModelMeshEXT: return "MeshEXT"; + case (int)ExecutionModel::TaskNV: return "TaskNV"; + case (int)ExecutionModel::MeshNV: return "MeshNV"; + case (int)ExecutionModel::TaskEXT: return "TaskEXT"; + case (int)ExecutionModel::MeshEXT: return "MeshEXT"; default: return "Bad"; - case ExecutionModelRayGenerationKHR: return "RayGenerationKHR"; - case ExecutionModelIntersectionKHR: return "IntersectionKHR"; - case ExecutionModelAnyHitKHR: return "AnyHitKHR"; - case ExecutionModelClosestHitKHR: return "ClosestHitKHR"; - case ExecutionModelMissKHR: return "MissKHR"; - case ExecutionModelCallableKHR: return "CallableKHR"; + case (int)ExecutionModel::RayGenerationKHR: return "RayGenerationKHR"; + case (int)ExecutionModel::IntersectionKHR: return "IntersectionKHR"; + case (int)ExecutionModel::AnyHitKHR: return "AnyHitKHR"; + case (int)ExecutionModel::ClosestHitKHR: return "ClosestHitKHR"; + case (int)ExecutionModel::MissKHR: return "MissKHR"; + case (int)ExecutionModel::CallableKHR: return "CallableKHR"; } } @@ -122,7 +123,7 @@ const char* AddressingString(int addr) case 1: return "Physical32"; case 2: return "Physical64"; - case AddressingModelPhysicalStorageBuffer64EXT: return "PhysicalStorageBuffer64EXT"; + case (int)AddressingModel::PhysicalStorageBuffer64EXT: return "PhysicalStorageBuffer64EXT"; default: return "Bad"; } @@ -131,10 +132,10 @@ const char* AddressingString(int addr) const char* MemoryString(int mem) { switch (mem) { - case MemoryModelSimple: return "Simple"; - case MemoryModelGLSL450: return "GLSL450"; - case MemoryModelOpenCL: return "OpenCL"; - case MemoryModelVulkanKHR: return "VulkanKHR"; + case (int)MemoryModel::Simple: return "Simple"; + case (int)MemoryModel::GLSL450: return "GLSL450"; + case (int)MemoryModel::OpenCL: return "OpenCL"; + case (int)MemoryModel::VulkanKHR: return "VulkanKHR"; default: return "Bad"; } @@ -179,52 +180,52 @@ const char* ExecutionModeString(int mode) case 31: return "ContractionOff"; case 32: return "Bad"; - case ExecutionModeInitializer: return "Initializer"; - case ExecutionModeFinalizer: return "Finalizer"; - case ExecutionModeSubgroupSize: return "SubgroupSize"; - case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup"; - case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId"; - case ExecutionModeLocalSizeId: return "LocalSizeId"; - case ExecutionModeLocalSizeHintId: return "LocalSizeHintId"; + case (int)ExecutionMode::Initializer: return "Initializer"; + case (int)ExecutionMode::Finalizer: return "Finalizer"; + case (int)ExecutionMode::SubgroupSize: return "SubgroupSize"; + case (int)ExecutionMode::SubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup"; + case (int)ExecutionMode::SubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId"; + case (int)ExecutionMode::LocalSizeId: return "LocalSizeId"; + case (int)ExecutionMode::LocalSizeHintId: return "LocalSizeHintId"; - case ExecutionModePostDepthCoverage: return "PostDepthCoverage"; - case ExecutionModeDenormPreserve: return "DenormPreserve"; - case ExecutionModeDenormFlushToZero: return "DenormFlushToZero"; - case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; - case ExecutionModeRoundingModeRTE: return "RoundingModeRTE"; - case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ"; - case ExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD"; - case ExecutionModeStencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD"; - case ExecutionModeStencilRefLessFrontAMD: return "StencilRefLessFrontAMD"; - case ExecutionModeStencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD"; - case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT"; - case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlow"; - case ExecutionModeMaximallyReconvergesKHR: return "MaximallyReconverges"; + case (int)ExecutionMode::PostDepthCoverage: return "PostDepthCoverage"; + case (int)ExecutionMode::DenormPreserve: return "DenormPreserve"; + case (int)ExecutionMode::DenormFlushToZero: return "DenormFlushToZero"; + case (int)ExecutionMode::SignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; + case (int)ExecutionMode::RoundingModeRTE: return "RoundingModeRTE"; + case (int)ExecutionMode::RoundingModeRTZ: return "RoundingModeRTZ"; + case (int)ExecutionMode::EarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD"; + case (int)ExecutionMode::StencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD"; + case (int)ExecutionMode::StencilRefLessFrontAMD: return "StencilRefLessFrontAMD"; + case (int)ExecutionMode::StencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD"; + case (int)ExecutionMode::StencilRefReplacingEXT: return "StencilRefReplacingEXT"; + case (int)ExecutionMode::SubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlow"; + case (int)ExecutionMode::MaximallyReconvergesKHR: return "MaximallyReconverges"; - case ExecutionModeOutputLinesNV: return "OutputLinesNV"; - case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV"; - case ExecutionModeOutputTrianglesNV: return "OutputTrianglesNV"; - case ExecutionModeDerivativeGroupQuadsNV: return "DerivativeGroupQuadsNV"; - case ExecutionModeDerivativeGroupLinearNV: return "DerivativeGroupLinearNV"; + case (int)ExecutionMode::OutputLinesNV: return "OutputLinesNV"; + case (int)ExecutionMode::OutputPrimitivesNV: return "OutputPrimitivesNV"; + case (int)ExecutionMode::OutputTrianglesNV: return "OutputTrianglesNV"; + case (int)ExecutionMode::DerivativeGroupQuadsNV: return "DerivativeGroupQuadsNV"; + case (int)ExecutionMode::DerivativeGroupLinearNV: return "DerivativeGroupLinearNV"; - case ExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT"; - case ExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT"; - case ExecutionModeSampleInterlockOrderedEXT: return "SampleInterlockOrderedEXT"; - case ExecutionModeSampleInterlockUnorderedEXT: return "SampleInterlockUnorderedEXT"; - case ExecutionModeShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT"; - case ExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT"; + case (int)ExecutionMode::PixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT"; + case (int)ExecutionMode::PixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT"; + case (int)ExecutionMode::SampleInterlockOrderedEXT: return "SampleInterlockOrderedEXT"; + case (int)ExecutionMode::SampleInterlockUnorderedEXT: return "SampleInterlockUnorderedEXT"; + case (int)ExecutionMode::ShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT"; + case (int)ExecutionMode::ShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT"; - case ExecutionModeMaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL"; - case ExecutionModeMaxWorkDimINTEL: return "MaxWorkDimINTEL"; - case ExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL"; - case ExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL"; + case (int)ExecutionMode::MaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL"; + case (int)ExecutionMode::MaxWorkDimINTEL: return "MaxWorkDimINTEL"; + case (int)ExecutionMode::NoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL"; + case (int)ExecutionMode::NumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL"; - case ExecutionModeRequireFullQuadsKHR: return "RequireFullQuadsKHR"; - case ExecutionModeQuadDerivativesKHR: return "QuadDerivativesKHR"; + case (int)ExecutionMode::RequireFullQuadsKHR: return "RequireFullQuadsKHR"; + case (int)ExecutionMode::QuadDerivativesKHR: return "QuadDerivativesKHR"; - case ExecutionModeNonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT"; - case ExecutionModeNonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT"; - case ExecutionModeNonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT"; + case (int)ExecutionMode::NonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT"; + case (int)ExecutionMode::NonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT"; + case (int)ExecutionMode::NonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT"; case ExecutionModeCeiling: default: return "Bad"; @@ -248,17 +249,17 @@ const char* StorageClassString(int StorageClass) case 11: return "Image"; case 12: return "StorageBuffer"; - case StorageClassRayPayloadKHR: return "RayPayloadKHR"; - case StorageClassHitAttributeKHR: return "HitAttributeKHR"; - case StorageClassIncomingRayPayloadKHR: return "IncomingRayPayloadKHR"; - case StorageClassShaderRecordBufferKHR: return "ShaderRecordBufferKHR"; - case StorageClassCallableDataKHR: return "CallableDataKHR"; - case StorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR"; + case (int)StorageClass::RayPayloadKHR: return "RayPayloadKHR"; + case (int)StorageClass::HitAttributeKHR: return "HitAttributeKHR"; + case (int)StorageClass::IncomingRayPayloadKHR: return "IncomingRayPayloadKHR"; + case (int)StorageClass::ShaderRecordBufferKHR: return "ShaderRecordBufferKHR"; + case (int)StorageClass::CallableDataKHR: return "CallableDataKHR"; + case (int)StorageClass::IncomingCallableDataKHR: return "IncomingCallableDataKHR"; - case StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT"; - case StorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT"; - case StorageClassHitObjectAttributeNV: return "HitObjectAttributeNV"; - case StorageClassTileImageEXT: return "TileImageEXT"; + case (int)StorageClass::PhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT"; + case (int)StorageClass::TaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT"; + case (int)StorageClass::HitObjectAttributeNV: return "HitObjectAttributeNV"; + case (int)StorageClass::TileImageEXT: return "TileImageEXT"; default: return "Bad"; } } @@ -317,27 +318,27 @@ const char* DecorationString(int decoration) case DecorationCeiling: default: return "Bad"; - case DecorationWeightTextureQCOM: return "DecorationWeightTextureQCOM"; - case DecorationBlockMatchTextureQCOM: return "DecorationBlockMatchTextureQCOM"; - case DecorationBlockMatchSamplerQCOM: return "DecorationBlockMatchSamplerQCOM"; - case DecorationExplicitInterpAMD: return "ExplicitInterpAMD"; - case DecorationOverrideCoverageNV: return "OverrideCoverageNV"; - case DecorationPassthroughNV: return "PassthroughNV"; - case DecorationViewportRelativeNV: return "ViewportRelativeNV"; - case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV"; - case DecorationPerPrimitiveNV: return "PerPrimitiveNV"; - case DecorationPerViewNV: return "PerViewNV"; - case DecorationPerTaskNV: return "PerTaskNV"; + case (int)Decoration::WeightTextureQCOM: return "DecorationWeightTextureQCOM"; + case (int)Decoration::BlockMatchTextureQCOM: return "DecorationBlockMatchTextureQCOM"; + case (int)Decoration::BlockMatchSamplerQCOM: return "DecorationBlockMatchSamplerQCOM"; + case (int)Decoration::ExplicitInterpAMD: return "ExplicitInterpAMD"; + case (int)Decoration::OverrideCoverageNV: return "OverrideCoverageNV"; + case (int)Decoration::PassthroughNV: return "PassthroughNV"; + case (int)Decoration::ViewportRelativeNV: return "ViewportRelativeNV"; + case (int)Decoration::SecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV"; + case (int)Decoration::PerPrimitiveNV: return "PerPrimitiveNV"; + case (int)Decoration::PerViewNV: return "PerViewNV"; + case (int)Decoration::PerTaskNV: return "PerTaskNV"; - case DecorationPerVertexKHR: return "PerVertexKHR"; + case (int)Decoration::PerVertexKHR: return "PerVertexKHR"; - case DecorationNonUniformEXT: return "DecorationNonUniformEXT"; - case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE"; - case DecorationHlslSemanticGOOGLE: return "DecorationHlslSemanticGOOGLE"; - case DecorationRestrictPointerEXT: return "DecorationRestrictPointerEXT"; - case DecorationAliasedPointerEXT: return "DecorationAliasedPointerEXT"; + case (int)Decoration::NonUniformEXT: return "DecorationNonUniformEXT"; + case (int)Decoration::HlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE"; + case (int)Decoration::HlslSemanticGOOGLE: return "DecorationHlslSemanticGOOGLE"; + case (int)Decoration::RestrictPointerEXT: return "DecorationRestrictPointerEXT"; + case (int)Decoration::AliasedPointerEXT: return "DecorationAliasedPointerEXT"; - case DecorationHitObjectShaderRecordBufferNV: return "DecorationHitObjectShaderRecordBufferNV"; + case (int)Decoration::HitObjectShaderRecordBufferNV: return "DecorationHitObjectShaderRecordBufferNV"; } } @@ -410,71 +411,71 @@ const char* BuiltInString(int builtIn) case 4996: return "BaryCoordSmoothCentroidAMD"; case 4997: return "BaryCoordSmoothSampleAMD"; case 4998: return "BaryCoordPullModelAMD"; - case BuiltInLaunchIdKHR: return "LaunchIdKHR"; - case BuiltInLaunchSizeKHR: return "LaunchSizeKHR"; - case BuiltInWorldRayOriginKHR: return "WorldRayOriginKHR"; - case BuiltInWorldRayDirectionKHR: return "WorldRayDirectionKHR"; - case BuiltInObjectRayOriginKHR: return "ObjectRayOriginKHR"; - case BuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR"; - case BuiltInRayTminKHR: return "RayTminKHR"; - case BuiltInRayTmaxKHR: return "RayTmaxKHR"; - case BuiltInCullMaskKHR: return "CullMaskKHR"; - case BuiltInHitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR"; - case BuiltInHitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV"; - case BuiltInHitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV"; - case BuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV"; - case BuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV"; - case BuiltInHitIsSphereNV: return "HitIsSphereNV"; - case BuiltInHitIsLSSNV: return "HitIsLSSNV"; - case BuiltInHitSpherePositionNV: return "HitSpherePositionNV"; - case BuiltInHitSphereRadiusNV: return "HitSphereRadiusNV"; - case BuiltInHitLSSPositionsNV: return "HitLSSPositionsNV"; - case BuiltInHitLSSRadiiNV: return "HitLLSSRadiiNV"; - case BuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR"; - case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR"; - case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR"; - case BuiltInWorldToObjectKHR: return "WorldToObjectKHR"; - case BuiltInHitTNV: return "HitTNV"; - case BuiltInHitKindKHR: return "HitKindKHR"; - case BuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR"; - case BuiltInViewportMaskNV: return "ViewportMaskNV"; - case BuiltInSecondaryPositionNV: return "SecondaryPositionNV"; - case BuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; - case BuiltInPositionPerViewNV: return "PositionPerViewNV"; - case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; -// case BuiltInFragmentSizeNV: return "FragmentSizeNV"; // superseded by BuiltInFragSizeEXT -// case BuiltInInvocationsPerPixelNV: return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT - case BuiltInBaryCoordKHR: return "BaryCoordKHR"; - case BuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR"; - case BuiltInClusterIDNV: return "ClusterIDNV"; + case (int)BuiltIn::LaunchIdKHR: return "LaunchIdKHR"; + case (int)BuiltIn::LaunchSizeKHR: return "LaunchSizeKHR"; + case (int)BuiltIn::WorldRayOriginKHR: return "WorldRayOriginKHR"; + case (int)BuiltIn::WorldRayDirectionKHR: return "WorldRayDirectionKHR"; + case (int)BuiltIn::ObjectRayOriginKHR: return "ObjectRayOriginKHR"; + case (int)BuiltIn::ObjectRayDirectionKHR: return "ObjectRayDirectionKHR"; + case (int)BuiltIn::RayTminKHR: return "RayTminKHR"; + case (int)BuiltIn::RayTmaxKHR: return "RayTmaxKHR"; + case (int)BuiltIn::CullMaskKHR: return "CullMaskKHR"; + case (int)BuiltIn::HitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR"; + case (int)BuiltIn::HitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV"; + case (int)BuiltIn::HitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV"; + case (int)BuiltIn::HitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV"; + case (int)BuiltIn::HitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV"; + case (int)BuiltIn::HitIsSphereNV: return "HitIsSphereNV"; + case (int)BuiltIn::HitIsLSSNV: return "HitIsLSSNV"; + case (int)BuiltIn::HitSpherePositionNV: return "HitSpherePositionNV"; + case (int)BuiltIn::HitSphereRadiusNV: return "HitSphereRadiusNV"; + case (int)BuiltIn::HitLSSPositionsNV: return "HitLSSPositionsNV"; + case (int)BuiltIn::HitLSSRadiiNV: return "HitLLSSRadiiNV"; + case (int)BuiltIn::InstanceCustomIndexKHR: return "InstanceCustomIndexKHR"; + case (int)BuiltIn::RayGeometryIndexKHR: return "RayGeometryIndexKHR"; + case (int)BuiltIn::ObjectToWorldKHR: return "ObjectToWorldKHR"; + case (int)BuiltIn::WorldToObjectKHR: return "WorldToObjectKHR"; + case (int)BuiltIn::HitTNV: return "HitTNV"; + case (int)BuiltIn::HitKindKHR: return "HitKindKHR"; + case (int)BuiltIn::IncomingRayFlagsKHR: return "IncomingRayFlagsKHR"; + case (int)BuiltIn::ViewportMaskNV: return "ViewportMaskNV"; + case (int)BuiltIn::SecondaryPositionNV: return "SecondaryPositionNV"; + case (int)BuiltIn::SecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; + case (int)BuiltIn::PositionPerViewNV: return "PositionPerViewNV"; + case (int)BuiltIn::ViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; +// case (int)BuiltIn::FragmentSizeNV: return "FragmentSizeNV"; // superseded by BuiltInFragSizeEXT +// case (int)BuiltIn::InvocationsPerPixelNV: return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT + case (int)BuiltIn::BaryCoordKHR: return "BaryCoordKHR"; + case (int)BuiltIn::BaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR"; + case (int)BuiltIn::ClusterIDNV: return "ClusterIDNV"; - case BuiltInFragSizeEXT: return "FragSizeEXT"; - case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT"; + case (int)BuiltIn::FragSizeEXT: return "FragSizeEXT"; + case (int)BuiltIn::FragInvocationCountEXT: return "FragInvocationCountEXT"; case 5264: return "FullyCoveredEXT"; - case BuiltInTaskCountNV: return "TaskCountNV"; - case BuiltInPrimitiveCountNV: return "PrimitiveCountNV"; - case BuiltInPrimitiveIndicesNV: return "PrimitiveIndicesNV"; - case BuiltInClipDistancePerViewNV: return "ClipDistancePerViewNV"; - case BuiltInCullDistancePerViewNV: return "CullDistancePerViewNV"; - case BuiltInLayerPerViewNV: return "LayerPerViewNV"; - case BuiltInMeshViewCountNV: return "MeshViewCountNV"; - case BuiltInMeshViewIndicesNV: return "MeshViewIndicesNV"; - case BuiltInWarpsPerSMNV: return "WarpsPerSMNV"; - case BuiltInSMCountNV: return "SMCountNV"; - case BuiltInWarpIDNV: return "WarpIDNV"; - case BuiltInSMIDNV: return "SMIDNV"; - case BuiltInCurrentRayTimeNV: return "CurrentRayTimeNV"; - case BuiltInPrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT"; - case BuiltInPrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT"; - case BuiltInPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT"; - case BuiltInCullPrimitiveEXT: return "CullPrimitiveEXT"; - case BuiltInCoreCountARM: return "CoreCountARM"; - case BuiltInCoreIDARM: return "CoreIDARM"; - case BuiltInCoreMaxIDARM: return "CoreMaxIDARM"; - case BuiltInWarpIDARM: return "WarpIDARM"; - case BuiltInWarpMaxIDARM: return "BuiltInWarpMaxIDARM"; + case (int)BuiltIn::TaskCountNV: return "TaskCountNV"; + case (int)BuiltIn::PrimitiveCountNV: return "PrimitiveCountNV"; + case (int)BuiltIn::PrimitiveIndicesNV: return "PrimitiveIndicesNV"; + case (int)BuiltIn::ClipDistancePerViewNV: return "ClipDistancePerViewNV"; + case (int)BuiltIn::CullDistancePerViewNV: return "CullDistancePerViewNV"; + case (int)BuiltIn::LayerPerViewNV: return "LayerPerViewNV"; + case (int)BuiltIn::MeshViewCountNV: return "MeshViewCountNV"; + case (int)BuiltIn::MeshViewIndicesNV: return "MeshViewIndicesNV"; + case (int)BuiltIn::WarpsPerSMNV: return "WarpsPerSMNV"; + case (int)BuiltIn::SMCountNV: return "SMCountNV"; + case (int)BuiltIn::WarpIDNV: return "WarpIDNV"; + case (int)BuiltIn::SMIDNV: return "SMIDNV"; + case (int)BuiltIn::CurrentRayTimeNV: return "CurrentRayTimeNV"; + case (int)BuiltIn::PrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT"; + case (int)BuiltIn::PrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT"; + case (int)BuiltIn::PrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT"; + case (int)BuiltIn::CullPrimitiveEXT: return "CullPrimitiveEXT"; + case (int)BuiltIn::CoreCountARM: return "CoreCountARM"; + case (int)BuiltIn::CoreIDARM: return "CoreIDARM"; + case (int)BuiltIn::CoreMaxIDARM: return "CoreMaxIDARM"; + case (int)BuiltIn::WarpIDARM: return "WarpIDARM"; + case (int)BuiltIn::WarpMaxIDARM: return "BuiltInWarpMaxIDARM"; default: return "Bad"; } @@ -490,7 +491,7 @@ const char* DimensionString(int dim) case 4: return "Rect"; case 5: return "Buffer"; case 6: return "SubpassData"; - case DimTileImageDataEXT: return "TileImageDataEXT"; + case (int)Dim::TileImageDataEXT: return "TileImageDataEXT"; default: return "Bad"; } @@ -642,21 +643,21 @@ const int ImageOperandsCeiling = 15; const char* ImageOperandsString(int format) { switch (format) { - case ImageOperandsBiasShift: return "Bias"; - case ImageOperandsLodShift: return "Lod"; - case ImageOperandsGradShift: return "Grad"; - case ImageOperandsConstOffsetShift: return "ConstOffset"; - case ImageOperandsOffsetShift: return "Offset"; - case ImageOperandsConstOffsetsShift: return "ConstOffsets"; - case ImageOperandsSampleShift: return "Sample"; - case ImageOperandsMinLodShift: return "MinLod"; - case ImageOperandsMakeTexelAvailableKHRShift: return "MakeTexelAvailableKHR"; - case ImageOperandsMakeTexelVisibleKHRShift: return "MakeTexelVisibleKHR"; - case ImageOperandsNonPrivateTexelKHRShift: return "NonPrivateTexelKHR"; - case ImageOperandsVolatileTexelKHRShift: return "VolatileTexelKHR"; - case ImageOperandsSignExtendShift: return "SignExtend"; - case ImageOperandsZeroExtendShift: return "ZeroExtend"; - case ImageOperandsNontemporalShift: return "Nontemporal"; + case (int)ImageOperandsShift::Bias: return "Bias"; + case (int)ImageOperandsShift::Lod: return "Lod"; + case (int)ImageOperandsShift::Grad: return "Grad"; + case (int)ImageOperandsShift::ConstOffset: return "ConstOffset"; + case (int)ImageOperandsShift::Offset: return "Offset"; + case (int)ImageOperandsShift::ConstOffsets: return "ConstOffsets"; + case (int)ImageOperandsShift::Sample: return "Sample"; + case (int)ImageOperandsShift::MinLod: return "MinLod"; + case (int)ImageOperandsShift::MakeTexelAvailableKHR: return "MakeTexelAvailableKHR"; + case (int)ImageOperandsShift::MakeTexelVisibleKHR: return "MakeTexelVisibleKHR"; + case (int)ImageOperandsShift::NonPrivateTexelKHR: return "NonPrivateTexelKHR"; + case (int)ImageOperandsShift::VolatileTexelKHR: return "VolatileTexelKHR"; + case (int)ImageOperandsShift::SignExtend: return "SignExtend"; + case (int)ImageOperandsShift::ZeroExtend: return "ZeroExtend"; + case (int)ImageOperandsShift::Nontemporal: return "Nontemporal"; case ImageOperandsCeiling: default: @@ -739,20 +740,20 @@ const char* SelectControlString(int cont) } } -const int LoopControlCeiling = LoopControlPartialCountShift + 1; +const int LoopControlCeiling = (int)LoopControlShift::PartialCount + 1; const char* LoopControlString(int cont) { switch (cont) { - case LoopControlUnrollShift: return "Unroll"; - case LoopControlDontUnrollShift: return "DontUnroll"; - case LoopControlDependencyInfiniteShift: return "DependencyInfinite"; - case LoopControlDependencyLengthShift: return "DependencyLength"; - case LoopControlMinIterationsShift: return "MinIterations"; - case LoopControlMaxIterationsShift: return "MaxIterations"; - case LoopControlIterationMultipleShift: return "IterationMultiple"; - case LoopControlPeelCountShift: return "PeelCount"; - case LoopControlPartialCountShift: return "PartialCount"; + case (int)LoopControlShift::Unroll: return "Unroll"; + case (int)LoopControlShift::DontUnroll: return "DontUnroll"; + case (int)LoopControlShift::DependencyInfinite: return "DependencyInfinite"; + case (int)LoopControlShift::DependencyLength: return "DependencyLength"; + case (int)LoopControlShift::MinIterations: return "MinIterations"; + case (int)LoopControlShift::MaxIterations: return "MaxIterations"; + case (int)LoopControlShift::IterationMultiple: return "IterationMultiple"; + case (int)LoopControlShift::PeelCount: return "PeelCount"; + case (int)LoopControlShift::PartialCount: return "PartialCount"; case LoopControlCeiling: default: return "Bad"; @@ -800,12 +801,12 @@ const int MemoryAccessCeiling = 6; const char* MemoryAccessString(int mem) { switch (mem) { - case MemoryAccessVolatileShift: return "Volatile"; - case MemoryAccessAlignedShift: return "Aligned"; - case MemoryAccessNontemporalShift: return "Nontemporal"; - case MemoryAccessMakePointerAvailableKHRShift: return "MakePointerAvailableKHR"; - case MemoryAccessMakePointerVisibleKHRShift: return "MakePointerVisibleKHR"; - case MemoryAccessNonPrivatePointerKHRShift: return "NonPrivatePointerKHR"; + case (int)MemoryAccessShift::Volatile: return "Volatile"; + case (int)MemoryAccessShift::Aligned: return "Aligned"; + case (int)MemoryAccessShift::Nontemporal: return "Nontemporal"; + case (int)MemoryAccessShift::MakePointerAvailableKHR: return "MakePointerAvailableKHR"; + case (int)MemoryAccessShift::MakePointerVisibleKHR: return "MakePointerVisibleKHR"; + case (int)MemoryAccessShift::NonPrivatePointerKHR: return "NonPrivatePointerKHR"; default: return "Bad"; } @@ -816,11 +817,11 @@ const int CooperativeMatrixOperandsCeiling = 6; const char* CooperativeMatrixOperandsString(int op) { switch (op) { - case CooperativeMatrixOperandsMatrixASignedComponentsKHRShift: return "ASignedComponentsKHR"; - case CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift: return "BSignedComponentsKHR"; - case CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift: return "CSignedComponentsKHR"; - case CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift: return "ResultSignedComponentsKHR"; - case CooperativeMatrixOperandsSaturatingAccumulationKHRShift: return "SaturatingAccumulationKHR"; + case (int)CooperativeMatrixOperandsShift::MatrixASignedComponentsKHR: return "ASignedComponentsKHR"; + case (int)CooperativeMatrixOperandsShift::MatrixBSignedComponentsKHR: return "BSignedComponentsKHR"; + case (int)CooperativeMatrixOperandsShift::MatrixCSignedComponentsKHR: return "CSignedComponentsKHR"; + case (int)CooperativeMatrixOperandsShift::MatrixResultSignedComponentsKHR: return "ResultSignedComponentsKHR"; + case (int)CooperativeMatrixOperandsShift::SaturatingAccumulationKHR: return "SaturatingAccumulationKHR"; default: return "Bad"; } @@ -831,8 +832,8 @@ const int TensorAddressingOperandsCeiling = 3; const char* TensorAddressingOperandsString(int op) { switch (op) { - case TensorAddressingOperandsTensorViewShift: return "TensorView"; - case TensorAddressingOperandsDecodeFuncShift: return "DecodeFunc"; + case (int)TensorAddressingOperandsShift::TensorView: return "TensorView"; + case (int)TensorAddressingOperandsShift::DecodeFunc: return "DecodeFunc"; default: return "Bad"; } @@ -856,13 +857,13 @@ const char* GroupOperationString(int gop) switch (gop) { - case GroupOperationReduce: return "Reduce"; - case GroupOperationInclusiveScan: return "InclusiveScan"; - case GroupOperationExclusiveScan: return "ExclusiveScan"; - case GroupOperationClusteredReduce: return "ClusteredReduce"; - case GroupOperationPartitionedReduceNV: return "PartitionedReduceNV"; - case GroupOperationPartitionedInclusiveScanNV: return "PartitionedInclusiveScanNV"; - case GroupOperationPartitionedExclusiveScanNV: return "PartitionedExclusiveScanNV"; + case (int)GroupOperation::Reduce: return "Reduce"; + case (int)GroupOperation::InclusiveScan: return "InclusiveScan"; + case (int)GroupOperation::ExclusiveScan: return "ExclusiveScan"; + case (int)GroupOperation::ClusteredReduce: return "ClusteredReduce"; + case (int)GroupOperation::PartitionedReduceNV: return "PartitionedReduceNV"; + case (int)GroupOperation::PartitionedInclusiveScanNV: return "PartitionedInclusiveScanNV"; + case (int)GroupOperation::PartitionedExclusiveScanNV: return "PartitionedExclusiveScanNV"; default: return "Bad"; } @@ -961,155 +962,160 @@ const char* CapabilityString(int info) case 67: return "GroupNonUniformClustered"; case 68: return "GroupNonUniformQuad"; - case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR"; - case CapabilityDrawParameters: return "DrawParameters"; - case CapabilitySubgroupVoteKHR: return "SubgroupVoteKHR"; - case CapabilityGroupNonUniformRotateKHR: return "CapabilityGroupNonUniformRotateKHR"; + case (int)Capability::SubgroupBallotKHR: return "SubgroupBallotKHR"; + case (int)Capability::DrawParameters: return "DrawParameters"; + case (int)Capability::SubgroupVoteKHR: return "SubgroupVoteKHR"; + case (int)Capability::GroupNonUniformRotateKHR: return "CapabilityGroupNonUniformRotateKHR"; - case CapabilityStorageUniformBufferBlock16: return "StorageUniformBufferBlock16"; - case CapabilityStorageUniform16: return "StorageUniform16"; - case CapabilityStoragePushConstant16: return "StoragePushConstant16"; - case CapabilityStorageInputOutput16: return "StorageInputOutput16"; + case (int)Capability::StorageUniformBufferBlock16: return "StorageUniformBufferBlock16"; + case (int)Capability::StorageUniform16: return "StorageUniform16"; + case (int)Capability::StoragePushConstant16: return "StoragePushConstant16"; + case (int)Capability::StorageInputOutput16: return "StorageInputOutput16"; - case CapabilityStorageBuffer8BitAccess: return "StorageBuffer8BitAccess"; - case CapabilityUniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess"; - case CapabilityStoragePushConstant8: return "StoragePushConstant8"; + case (int)Capability::StorageBuffer8BitAccess: return "StorageBuffer8BitAccess"; + case (int)Capability::UniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess"; + case (int)Capability::StoragePushConstant8: return "StoragePushConstant8"; - case CapabilityDeviceGroup: return "DeviceGroup"; - case CapabilityMultiView: return "MultiView"; + case (int)Capability::DeviceGroup: return "DeviceGroup"; + case (int)Capability::MultiView: return "MultiView"; - case CapabilityDenormPreserve: return "DenormPreserve"; - case CapabilityDenormFlushToZero: return "DenormFlushToZero"; - case CapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; - case CapabilityRoundingModeRTE: return "RoundingModeRTE"; - case CapabilityRoundingModeRTZ: return "RoundingModeRTZ"; + case (int)Capability::DenormPreserve: return "DenormPreserve"; + case (int)Capability::DenormFlushToZero: return "DenormFlushToZero"; + case (int)Capability::SignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; + case (int)Capability::RoundingModeRTE: return "RoundingModeRTE"; + case (int)Capability::RoundingModeRTZ: return "RoundingModeRTZ"; - case CapabilityStencilExportEXT: return "StencilExportEXT"; + case (int)Capability::StencilExportEXT: return "StencilExportEXT"; - case CapabilityFloat16ImageAMD: return "Float16ImageAMD"; - case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD"; - case CapabilityFragmentMaskAMD: return "FragmentMaskAMD"; - case CapabilityImageReadWriteLodAMD: return "ImageReadWriteLodAMD"; + case (int)Capability::Float16ImageAMD: return "Float16ImageAMD"; + case (int)Capability::ImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD"; + case (int)Capability::FragmentMaskAMD: return "FragmentMaskAMD"; + case (int)Capability::ImageReadWriteLodAMD: return "ImageReadWriteLodAMD"; - case CapabilityAtomicStorageOps: return "AtomicStorageOps"; + case (int)Capability::AtomicStorageOps: return "AtomicStorageOps"; - case CapabilitySampleMaskPostDepthCoverage: return "SampleMaskPostDepthCoverage"; - case CapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; - case CapabilityShaderViewportIndexLayerNV: return "ShaderViewportIndexLayerNV"; - case CapabilityShaderViewportMaskNV: return "ShaderViewportMaskNV"; - case CapabilityShaderStereoViewNV: return "ShaderStereoViewNV"; - case CapabilityPerViewAttributesNV: return "PerViewAttributesNV"; - case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV"; - case CapabilityRayTracingNV: return "RayTracingNV"; - case CapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV"; - case CapabilityRayTracingKHR: return "RayTracingKHR"; - case CapabilityRayCullMaskKHR: return "RayCullMaskKHR"; - case CapabilityRayQueryKHR: return "RayQueryKHR"; - case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; - case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; - case CapabilityRayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR"; - case CapabilityDisplacementMicromapNV: return "DisplacementMicromapNV"; - case CapabilityRayTracingOpacityMicromapEXT: return "RayTracingOpacityMicromapEXT"; - case CapabilityRayTracingDisplacementMicromapNV: return "CapabilityRayTracingDisplacementMicromapNV"; - case CapabilityRayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR"; - case CapabilityComputeDerivativeGroupQuadsNV: return "ComputeDerivativeGroupQuadsNV"; - case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV"; - case CapabilityFragmentBarycentricKHR: return "FragmentBarycentricKHR"; - case CapabilityMeshShadingNV: return "MeshShadingNV"; - case CapabilityImageFootprintNV: return "ImageFootprintNV"; - case CapabilityMeshShadingEXT: return "MeshShadingEXT"; -// case CapabilityShadingRateNV: return "ShadingRateNV"; // superseded by FragmentDensityEXT - case CapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV"; - case CapabilityFragmentDensityEXT: return "FragmentDensityEXT"; + case (int)Capability::SampleMaskPostDepthCoverage: return "SampleMaskPostDepthCoverage"; + case (int)Capability::GeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; + case (int)Capability::ShaderViewportIndexLayerNV: return "ShaderViewportIndexLayerNV"; + case (int)Capability::ShaderViewportMaskNV: return "ShaderViewportMaskNV"; + case (int)Capability::ShaderStereoViewNV: return "ShaderStereoViewNV"; + case (int)Capability::PerViewAttributesNV: return "PerViewAttributesNV"; + case (int)Capability::GroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV"; + case (int)Capability::RayTracingNV: return "RayTracingNV"; + case (int)Capability::RayTracingMotionBlurNV: return "RayTracingMotionBlurNV"; + case (int)Capability::RayTracingKHR: return "RayTracingKHR"; + case (int)Capability::RayCullMaskKHR: return "RayCullMaskKHR"; + case (int)Capability::RayQueryKHR: return "RayQueryKHR"; + case (int)Capability::RayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; + case (int)Capability::RayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; + case (int)Capability::RayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR"; + case (int)Capability::DisplacementMicromapNV: return "DisplacementMicromapNV"; + case (int)Capability::RayTracingOpacityMicromapEXT: return "RayTracingOpacityMicromapEXT"; + case (int)Capability::RayTracingDisplacementMicromapNV: return "CapabilityRayTracingDisplacementMicromapNV"; + case (int)Capability::RayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR"; + case (int)Capability::ComputeDerivativeGroupQuadsNV: return "ComputeDerivativeGroupQuadsNV"; + case (int)Capability::ComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV"; + case (int)Capability::FragmentBarycentricKHR: return "FragmentBarycentricKHR"; + case (int)Capability::MeshShadingNV: return "MeshShadingNV"; + case (int)Capability::ImageFootprintNV: return "ImageFootprintNV"; + case (int)Capability::MeshShadingEXT: return "MeshShadingEXT"; +// case (int)Capability::ShadingRateNV: return "ShadingRateNV"; // superseded by FragmentDensityEXT + case (int)Capability::SampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV"; + case (int)Capability::FragmentDensityEXT: return "FragmentDensityEXT"; - case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT"; + case (int)Capability::FragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT"; - case CapabilityShaderNonUniformEXT: return "ShaderNonUniformEXT"; - case CapabilityRuntimeDescriptorArrayEXT: return "RuntimeDescriptorArrayEXT"; - case CapabilityInputAttachmentArrayDynamicIndexingEXT: return "InputAttachmentArrayDynamicIndexingEXT"; - case CapabilityUniformTexelBufferArrayDynamicIndexingEXT: return "UniformTexelBufferArrayDynamicIndexingEXT"; - case CapabilityStorageTexelBufferArrayDynamicIndexingEXT: return "StorageTexelBufferArrayDynamicIndexingEXT"; - case CapabilityUniformBufferArrayNonUniformIndexingEXT: return "UniformBufferArrayNonUniformIndexingEXT"; - case CapabilitySampledImageArrayNonUniformIndexingEXT: return "SampledImageArrayNonUniformIndexingEXT"; - case CapabilityStorageBufferArrayNonUniformIndexingEXT: return "StorageBufferArrayNonUniformIndexingEXT"; - case CapabilityStorageImageArrayNonUniformIndexingEXT: return "StorageImageArrayNonUniformIndexingEXT"; - case CapabilityInputAttachmentArrayNonUniformIndexingEXT: return "InputAttachmentArrayNonUniformIndexingEXT"; - case CapabilityUniformTexelBufferArrayNonUniformIndexingEXT: return "UniformTexelBufferArrayNonUniformIndexingEXT"; - case CapabilityStorageTexelBufferArrayNonUniformIndexingEXT: return "StorageTexelBufferArrayNonUniformIndexingEXT"; + case (int)Capability::ShaderNonUniformEXT: return "ShaderNonUniformEXT"; + case (int)Capability::RuntimeDescriptorArrayEXT: return "RuntimeDescriptorArrayEXT"; + case (int)Capability::InputAttachmentArrayDynamicIndexingEXT: return "InputAttachmentArrayDynamicIndexingEXT"; + case (int)Capability::UniformTexelBufferArrayDynamicIndexingEXT: return "UniformTexelBufferArrayDynamicIndexingEXT"; + case (int)Capability::StorageTexelBufferArrayDynamicIndexingEXT: return "StorageTexelBufferArrayDynamicIndexingEXT"; + case (int)Capability::UniformBufferArrayNonUniformIndexingEXT: return "UniformBufferArrayNonUniformIndexingEXT"; + case (int)Capability::SampledImageArrayNonUniformIndexingEXT: return "SampledImageArrayNonUniformIndexingEXT"; + case (int)Capability::StorageBufferArrayNonUniformIndexingEXT: return "StorageBufferArrayNonUniformIndexingEXT"; + case (int)Capability::StorageImageArrayNonUniformIndexingEXT: return "StorageImageArrayNonUniformIndexingEXT"; + case (int)Capability::InputAttachmentArrayNonUniformIndexingEXT: return "InputAttachmentArrayNonUniformIndexingEXT"; + case (int)Capability::UniformTexelBufferArrayNonUniformIndexingEXT: return "UniformTexelBufferArrayNonUniformIndexingEXT"; + case (int)Capability::StorageTexelBufferArrayNonUniformIndexingEXT: return "StorageTexelBufferArrayNonUniformIndexingEXT"; - case CapabilityVulkanMemoryModelKHR: return "VulkanMemoryModelKHR"; - case CapabilityVulkanMemoryModelDeviceScopeKHR: return "VulkanMemoryModelDeviceScopeKHR"; + case (int)Capability::VulkanMemoryModelKHR: return "VulkanMemoryModelKHR"; + case (int)Capability::VulkanMemoryModelDeviceScopeKHR: return "VulkanMemoryModelDeviceScopeKHR"; - case CapabilityPhysicalStorageBufferAddressesEXT: return "PhysicalStorageBufferAddressesEXT"; + case (int)Capability::PhysicalStorageBufferAddressesEXT: return "PhysicalStorageBufferAddressesEXT"; - case CapabilityVariablePointers: return "VariablePointers"; + case (int)Capability::VariablePointers: return "VariablePointers"; - case CapabilityCooperativeMatrixNV: return "CooperativeMatrixNV"; - case CapabilityCooperativeMatrixKHR: return "CooperativeMatrixKHR"; - case CapabilityCooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV"; - case CapabilityCooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV"; - case CapabilityCooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV"; - case CapabilityCooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV"; - case CapabilityCooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV"; - case CapabilityTensorAddressingNV: return "TensorAddressingNV"; + case (int)Capability::CooperativeMatrixNV: return "CooperativeMatrixNV"; + case (int)Capability::CooperativeMatrixKHR: return "CooperativeMatrixKHR"; + case (int)Capability::CooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV"; + case (int)Capability::CooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV"; + case (int)Capability::CooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV"; + case (int)Capability::CooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV"; + case (int)Capability::CooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV"; + case (int)Capability::TensorAddressingNV: return "TensorAddressingNV"; - case CapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV"; + case (int)Capability::ShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV"; - case CapabilityCooperativeVectorNV: return "CooperativeVectorNV"; - case CapabilityCooperativeVectorTrainingNV: return "CooperativeVectorTrainingNV"; + case (int)Capability::CooperativeVectorNV: return "CooperativeVectorNV"; + case (int)Capability::CooperativeVectorTrainingNV: return "CooperativeVectorTrainingNV"; - case CapabilityFragmentShaderSampleInterlockEXT: return "CapabilityFragmentShaderSampleInterlockEXT"; - case CapabilityFragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT"; - case CapabilityFragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT"; + case (int)Capability::FragmentShaderSampleInterlockEXT: return "CapabilityFragmentShaderSampleInterlockEXT"; + case (int)Capability::FragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT"; + case (int)Capability::FragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT"; - case CapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT"; - case CapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; - case CapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; + case (int)Capability::TileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT"; + case (int)Capability::TileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; + case (int)Capability::TileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; - case CapabilityCooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; + case (int)Capability::CooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; - case CapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR"; + case (int)Capability::FragmentShadingRateKHR: return "FragmentShadingRateKHR"; - case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT"; - case CapabilityAtomicFloat16VectorNV: return "AtomicFloat16VectorNV"; - case CapabilityShaderClockKHR: return "ShaderClockKHR"; - case CapabilityQuadControlKHR: return "QuadControlKHR"; - case CapabilityInt64ImageEXT: return "Int64ImageEXT"; + case (int)Capability::DemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT"; + case (int)Capability::AtomicFloat16VectorNV: return "AtomicFloat16VectorNV"; + case (int)Capability::ShaderClockKHR: return "ShaderClockKHR"; + case (int)Capability::QuadControlKHR: return "QuadControlKHR"; + case (int)Capability::Int64ImageEXT: return "Int64ImageEXT"; - case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL"; + case (int)Capability::IntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL"; - case CapabilityExpectAssumeKHR: return "ExpectAssumeKHR"; + case (int)Capability::ExpectAssumeKHR: return "ExpectAssumeKHR"; - case CapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT"; - case CapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT"; - case CapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT"; - case CapabilityAtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT"; - case CapabilityAtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT"; - case CapabilityAtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT"; + case (int)Capability::AtomicFloat16AddEXT: return "AtomicFloat16AddEXT"; + case (int)Capability::AtomicFloat32AddEXT: return "AtomicFloat32AddEXT"; + case (int)Capability::AtomicFloat64AddEXT: return "AtomicFloat64AddEXT"; + case (int)Capability::AtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT"; + case (int)Capability::AtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT"; + case (int)Capability::AtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT"; - case CapabilityWorkgroupMemoryExplicitLayoutKHR: return "CapabilityWorkgroupMemoryExplicitLayoutKHR"; - case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR"; - case CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR"; - case CapabilityCoreBuiltinsARM: return "CoreBuiltinsARM"; + case (int)Capability::WorkgroupMemoryExplicitLayoutKHR: return "CapabilityWorkgroupMemoryExplicitLayoutKHR"; + case (int)Capability::WorkgroupMemoryExplicitLayout8BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR"; + case (int)Capability::WorkgroupMemoryExplicitLayout16BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR"; + case (int)Capability::CoreBuiltinsARM: return "CoreBuiltinsARM"; - case CapabilityShaderInvocationReorderNV: return "ShaderInvocationReorderNV"; + case (int)Capability::ShaderInvocationReorderNV: return "ShaderInvocationReorderNV"; - case CapabilityTextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM"; - case CapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM"; - case CapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM"; - case CapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; + case (int)Capability::TextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM"; + case (int)Capability::TextureBoxFilterQCOM: return "TextureBoxFilterQCOM"; + case (int)Capability::TextureBlockMatchQCOM: return "TextureBlockMatchQCOM"; + case (int)Capability::TextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; - case CapabilityReplicatedCompositesEXT: return "CapabilityReplicatedCompositesEXT"; + case (int)Capability::ReplicatedCompositesEXT: return "CapabilityReplicatedCompositesEXT"; - case CapabilityDotProductKHR: return "DotProductKHR"; - case CapabilityDotProductInputAllKHR: return "DotProductInputAllKHR"; - case CapabilityDotProductInput4x8BitKHR: return "DotProductInput4x8BitKHR"; - case CapabilityDotProductInput4x8BitPackedKHR: return "DotProductInput4x8BitPackedKHR"; + case (int)Capability::DotProductKHR: return "DotProductKHR"; + case (int)Capability::DotProductInputAllKHR: return "DotProductInputAllKHR"; + case (int)Capability::DotProductInput4x8BitKHR: return "DotProductInput4x8BitKHR"; + case (int)Capability::DotProductInput4x8BitPackedKHR: return "DotProductInput4x8BitPackedKHR"; - case CapabilityRayTracingClusterAccelerationStructureNV: return "RayTracingClusterAccelerationStructureNV"; + case (int)Capability::RayTracingClusterAccelerationStructureNV: return "RayTracingClusterAccelerationStructureNV"; + + case (int)Capability::RayTracingSpheresGeometryNV: return "RayTracingSpheresGeometryNV"; + case (int)Capability::RayTracingLinearSweptSpheresGeometryNV: return "RayTracingLinearSweptSpheresGeometryNV"; + + case (int)Capability::BFloat16TypeKHR: return "CapabilityBFloat16TypeKHR"; + case (int)Capability::BFloat16DotProductKHR: return "CapabilityBFloat16DotProductKHR"; + case (int)Capability::BFloat16CooperativeMatrixKHR: return "CapabilityBFloat16CooperativeMatrixKHR"; - case CapabilityRayTracingSpheresGeometryNV: return "RayTracingSpheresGeometryNV"; - case CapabilityRayTracingLinearSweptSpheresGeometryNV: return "RayTracingLinearSweptSpheresGeometryNV"; default: return "Bad"; } } @@ -1202,7 +1208,7 @@ const char* OpcodeString(int op) case 82: return "OpCompositeInsert"; case 83: return "OpCopyObject"; case 84: return "OpTranspose"; - case OpCopyLogical: return "OpCopyLogical"; + case (int)Op::OpCopyLogical: return "OpCopyLogical"; case 85: return "Bad"; case 86: return "OpSampledImage"; case 87: return "OpImageSampleImplicitLod"; @@ -1440,9 +1446,9 @@ const char* OpcodeString(int op) case 319: return "OpAtomicFlagClear"; case 320: return "OpImageSparseRead"; - case OpModuleProcessed: return "OpModuleProcessed"; - case OpExecutionModeId: return "OpExecutionModeId"; - case OpDecorateId: return "OpDecorateId"; + case (int)Op::OpModuleProcessed: return "OpModuleProcessed"; + case (int)Op::OpExecutionModeId: return "OpExecutionModeId"; + case (int)Op::OpDecorateId: return "OpDecorateId"; case 333: return "OpGroupNonUniformElect"; case 334: return "OpGroupNonUniformAll"; @@ -1479,7 +1485,7 @@ const char* OpcodeString(int op) case 365: return "OpGroupNonUniformQuadBroadcast"; case 366: return "OpGroupNonUniformQuadSwap"; - case OpTerminateInvocation: return "OpTerminateInvocation"; + case (int)Op::OpTerminateInvocation: return "OpTerminateInvocation"; case 4421: return "OpSubgroupBallotKHR"; case 4422: return "OpSubgroupFirstInvocationKHR"; @@ -1489,15 +1495,15 @@ const char* OpcodeString(int op) case 4432: return "OpSubgroupReadInvocationKHR"; case 4433: return "OpExtInstWithForwardRefsKHR"; - case OpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR"; - case OpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR"; + case (int)Op::OpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR"; + case (int)Op::OpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR"; - case OpAtomicFAddEXT: return "OpAtomicFAddEXT"; - case OpAtomicFMinEXT: return "OpAtomicFMinEXT"; - case OpAtomicFMaxEXT: return "OpAtomicFMaxEXT"; + case (int)Op::OpAtomicFAddEXT: return "OpAtomicFAddEXT"; + case (int)Op::OpAtomicFMinEXT: return "OpAtomicFMinEXT"; + case (int)Op::OpAtomicFMaxEXT: return "OpAtomicFMaxEXT"; - case OpAssumeTrueKHR: return "OpAssumeTrueKHR"; - case OpExpectKHR: return "OpExpectKHR"; + case (int)Op::OpAssumeTrueKHR: return "OpAssumeTrueKHR"; + case (int)Op::OpExpectKHR: return "OpExpectKHR"; case 5000: return "OpGroupIAddNonUniformAMD"; case 5001: return "OpGroupFAddNonUniformAMD"; @@ -1511,177 +1517,177 @@ const char* OpcodeString(int op) case 5011: return "OpFragmentMaskFetchAMD"; case 5012: return "OpFragmentFetchAMD"; - case OpReadClockKHR: return "OpReadClockKHR"; + case (int)Op::OpReadClockKHR: return "OpReadClockKHR"; - case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE"; - case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE"; + case (int)Op::OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE"; + case (int)Op::OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE"; - case OpReportIntersectionKHR: return "OpReportIntersectionKHR"; - case OpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV"; - case OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR"; - case OpTerminateRayNV: return "OpTerminateRayNV"; - case OpTerminateRayKHR: return "OpTerminateRayKHR"; - case OpTraceNV: return "OpTraceNV"; - case OpTraceRayMotionNV: return "OpTraceRayMotionNV"; - case OpTraceRayKHR: return "OpTraceRayKHR"; - case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR"; - case OpExecuteCallableNV: return "OpExecuteCallableNV"; - case OpExecuteCallableKHR: return "OpExecuteCallableKHR"; - case OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR"; + case (int)Op::OpReportIntersectionKHR: return "OpReportIntersectionKHR"; + case (int)Op::OpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV"; + case (int)Op::OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR"; + case (int)Op::OpTerminateRayNV: return "OpTerminateRayNV"; + case (int)Op::OpTerminateRayKHR: return "OpTerminateRayKHR"; + case (int)Op::OpTraceNV: return "OpTraceNV"; + case (int)Op::OpTraceRayMotionNV: return "OpTraceRayMotionNV"; + case (int)Op::OpTraceRayKHR: return "OpTraceRayKHR"; + case (int)Op::OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR"; + case (int)Op::OpExecuteCallableNV: return "OpExecuteCallableNV"; + case (int)Op::OpExecuteCallableKHR: return "OpExecuteCallableKHR"; + case (int)Op::OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR"; - case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV"; - case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; - case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; - case OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT"; - case OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT"; + case (int)Op::OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV"; + case (int)Op::OpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; + case (int)Op::OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; + case (int)Op::OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT"; + case (int)Op::OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT"; - case OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR"; + case (int)Op::OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR"; - case OpTypeRayQueryKHR: return "OpTypeRayQueryKHR"; - case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR"; - case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR"; - case OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR"; - case OpRayQueryConfirmIntersectionKHR: return "OpRayQueryConfirmIntersectionKHR"; - case OpRayQueryProceedKHR: return "OpRayQueryProceedKHR"; - case OpRayQueryGetIntersectionTypeKHR: return "OpRayQueryGetIntersectionTypeKHR"; - case OpRayQueryGetRayTMinKHR: return "OpRayQueryGetRayTMinKHR"; - case OpRayQueryGetRayFlagsKHR: return "OpRayQueryGetRayFlagsKHR"; - case OpRayQueryGetIntersectionTKHR: return "OpRayQueryGetIntersectionTKHR"; - case OpRayQueryGetIntersectionInstanceCustomIndexKHR: return "OpRayQueryGetIntersectionInstanceCustomIndexKHR"; - case OpRayQueryGetIntersectionInstanceIdKHR: return "OpRayQueryGetIntersectionInstanceIdKHR"; - case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR"; - case OpRayQueryGetIntersectionGeometryIndexKHR: return "OpRayQueryGetIntersectionGeometryIndexKHR"; - case OpRayQueryGetIntersectionPrimitiveIndexKHR: return "OpRayQueryGetIntersectionPrimitiveIndexKHR"; - case OpRayQueryGetIntersectionBarycentricsKHR: return "OpRayQueryGetIntersectionBarycentricsKHR"; - case OpRayQueryGetIntersectionFrontFaceKHR: return "OpRayQueryGetIntersectionFrontFaceKHR"; - case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR"; - case OpRayQueryGetIntersectionObjectRayDirectionKHR: return "OpRayQueryGetIntersectionObjectRayDirectionKHR"; - case OpRayQueryGetIntersectionObjectRayOriginKHR: return "OpRayQueryGetIntersectionObjectRayOriginKHR"; - case OpRayQueryGetWorldRayDirectionKHR: return "OpRayQueryGetWorldRayDirectionKHR"; - case OpRayQueryGetWorldRayOriginKHR: return "OpRayQueryGetWorldRayOriginKHR"; - case OpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR"; - case OpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR"; - case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR"; - case OpRayQueryGetIntersectionClusterIdNV: return "OpRayQueryGetIntersectionClusterIdNV"; + case (int)Op::OpTypeRayQueryKHR: return "OpTypeRayQueryKHR"; + case (int)Op::OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR"; + case (int)Op::OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR"; + case (int)Op::OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR"; + case (int)Op::OpRayQueryConfirmIntersectionKHR: return "OpRayQueryConfirmIntersectionKHR"; + case (int)Op::OpRayQueryProceedKHR: return "OpRayQueryProceedKHR"; + case (int)Op::OpRayQueryGetIntersectionTypeKHR: return "OpRayQueryGetIntersectionTypeKHR"; + case (int)Op::OpRayQueryGetRayTMinKHR: return "OpRayQueryGetRayTMinKHR"; + case (int)Op::OpRayQueryGetRayFlagsKHR: return "OpRayQueryGetRayFlagsKHR"; + case (int)Op::OpRayQueryGetIntersectionTKHR: return "OpRayQueryGetIntersectionTKHR"; + case (int)Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR: return "OpRayQueryGetIntersectionInstanceCustomIndexKHR"; + case (int)Op::OpRayQueryGetIntersectionInstanceIdKHR: return "OpRayQueryGetIntersectionInstanceIdKHR"; + case (int)Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR"; + case (int)Op::OpRayQueryGetIntersectionGeometryIndexKHR: return "OpRayQueryGetIntersectionGeometryIndexKHR"; + case (int)Op::OpRayQueryGetIntersectionPrimitiveIndexKHR: return "OpRayQueryGetIntersectionPrimitiveIndexKHR"; + case (int)Op::OpRayQueryGetIntersectionBarycentricsKHR: return "OpRayQueryGetIntersectionBarycentricsKHR"; + case (int)Op::OpRayQueryGetIntersectionFrontFaceKHR: return "OpRayQueryGetIntersectionFrontFaceKHR"; + case (int)Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR"; + case (int)Op::OpRayQueryGetIntersectionObjectRayDirectionKHR: return "OpRayQueryGetIntersectionObjectRayDirectionKHR"; + case (int)Op::OpRayQueryGetIntersectionObjectRayOriginKHR: return "OpRayQueryGetIntersectionObjectRayOriginKHR"; + case (int)Op::OpRayQueryGetWorldRayDirectionKHR: return "OpRayQueryGetWorldRayDirectionKHR"; + case (int)Op::OpRayQueryGetWorldRayOriginKHR: return "OpRayQueryGetWorldRayOriginKHR"; + case (int)Op::OpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR"; + case (int)Op::OpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR"; + case (int)Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR"; + case (int)Op::OpRayQueryGetClusterIdNV: return "OpRayQueryGetIntersectionClusterIdNV"; - case OpRayQueryGetIntersectionSpherePositionNV: return "OpRayQueryGetIntersectionSpherePositionNV"; - case OpRayQueryGetIntersectionSphereRadiusNV: return "OpRayQueryGetIntersectionSphereRadiusNV"; - case OpRayQueryGetIntersectionLSSHitValueNV: return "OpRayQueryGetIntersectionLSSHitValueNV"; - case OpRayQueryGetIntersectionLSSPositionsNV: return "OpRayQueryGetIntersectionLSSPositionsNV"; - case OpRayQueryGetIntersectionLSSRadiiNV: return "OpRayQueryGetIntersectionLSSRadiiNV"; - case OpRayQueryIsSphereHitNV: return "OpRayQueryIsSphereHitNV"; - case OpRayQueryIsLSSHitNV: return "OpRayQueryIsLSSHitNV"; + case (int)Op::OpRayQueryGetIntersectionSpherePositionNV: return "OpRayQueryGetIntersectionSpherePositionNV"; + case (int)Op::OpRayQueryGetIntersectionSphereRadiusNV: return "OpRayQueryGetIntersectionSphereRadiusNV"; + case (int)Op::OpRayQueryGetIntersectionLSSHitValueNV: return "OpRayQueryGetIntersectionLSSHitValueNV"; + case (int)Op::OpRayQueryGetIntersectionLSSPositionsNV: return "OpRayQueryGetIntersectionLSSPositionsNV"; + case (int)Op::OpRayQueryGetIntersectionLSSRadiiNV: return "OpRayQueryGetIntersectionLSSRadiiNV"; + case (int)Op::OpRayQueryIsSphereHitNV: return "OpRayQueryIsSphereHitNV"; + case (int)Op::OpRayQueryIsLSSHitNV: return "OpRayQueryIsLSSHitNV"; - case OpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV"; - case OpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV"; - case OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV"; - case OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV"; - case OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV"; - case OpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR"; - case OpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR"; - case OpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR"; - case OpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR"; - case OpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR"; - case OpDemoteToHelperInvocationEXT: return "OpDemoteToHelperInvocationEXT"; - case OpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT"; + case (int)Op::OpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV"; + case (int)Op::OpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV"; + case (int)Op::OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV"; + case (int)Op::OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV"; + case (int)Op::OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV"; + case (int)Op::OpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR"; + case (int)Op::OpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR"; + case (int)Op::OpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR"; + case (int)Op::OpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR"; + case (int)Op::OpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR"; + case (int)Op::OpDemoteToHelperInvocationEXT: return "OpDemoteToHelperInvocationEXT"; + case (int)Op::OpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT"; - case OpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV"; - case OpCooperativeMatrixTransposeNV: return "OpCooperativeMatrixTransposeNV"; - case OpCooperativeMatrixReduceNV: return "OpCooperativeMatrixReduceNV"; - case OpCooperativeMatrixLoadTensorNV: return "OpCooperativeMatrixLoadTensorNV"; - case OpCooperativeMatrixStoreTensorNV: return "OpCooperativeMatrixStoreTensorNV"; - case OpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV"; - case OpTypeTensorLayoutNV: return "OpTypeTensorLayoutNV"; - case OpTypeTensorViewNV: return "OpTypeTensorViewNV"; - case OpCreateTensorLayoutNV: return "OpCreateTensorLayoutNV"; - case OpTensorLayoutSetBlockSizeNV: return "OpTensorLayoutSetBlockSizeNV"; - case OpTensorLayoutSetDimensionNV: return "OpTensorLayoutSetDimensionNV"; - case OpTensorLayoutSetStrideNV: return "OpTensorLayoutSetStrideNV"; - case OpTensorLayoutSliceNV: return "OpTensorLayoutSliceNV"; - case OpTensorLayoutSetClampValueNV: return "OpTensorLayoutSetClampValueNV"; - case OpCreateTensorViewNV: return "OpCreateTensorViewNV"; - case OpTensorViewSetDimensionNV: return "OpTensorViewSetDimensionNV"; - case OpTensorViewSetStrideNV: return "OpTensorViewSetStrideNV"; - case OpTensorViewSetClipNV: return "OpTensorViewSetClipNV"; + case (int)Op::OpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV"; + case (int)Op::OpCooperativeMatrixTransposeNV: return "OpCooperativeMatrixTransposeNV"; + case (int)Op::OpCooperativeMatrixReduceNV: return "OpCooperativeMatrixReduceNV"; + case (int)Op::OpCooperativeMatrixLoadTensorNV: return "OpCooperativeMatrixLoadTensorNV"; + case (int)Op::OpCooperativeMatrixStoreTensorNV: return "OpCooperativeMatrixStoreTensorNV"; + case (int)Op::OpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV"; + case (int)Op::OpTypeTensorLayoutNV: return "OpTypeTensorLayoutNV"; + case (int)Op::OpTypeTensorViewNV: return "OpTypeTensorViewNV"; + case (int)Op::OpCreateTensorLayoutNV: return "OpCreateTensorLayoutNV"; + case (int)Op::OpTensorLayoutSetBlockSizeNV: return "OpTensorLayoutSetBlockSizeNV"; + case (int)Op::OpTensorLayoutSetDimensionNV: return "OpTensorLayoutSetDimensionNV"; + case (int)Op::OpTensorLayoutSetStrideNV: return "OpTensorLayoutSetStrideNV"; + case (int)Op::OpTensorLayoutSliceNV: return "OpTensorLayoutSliceNV"; + case (int)Op::OpTensorLayoutSetClampValueNV: return "OpTensorLayoutSetClampValueNV"; + case (int)Op::OpCreateTensorViewNV: return "OpCreateTensorViewNV"; + case (int)Op::OpTensorViewSetDimensionNV: return "OpTensorViewSetDimensionNV"; + case (int)Op::OpTensorViewSetStrideNV: return "OpTensorViewSetStrideNV"; + case (int)Op::OpTensorViewSetClipNV: return "OpTensorViewSetClipNV"; - case OpTypeCooperativeVectorNV: return "OpTypeCooperativeVectorNV"; - case OpCooperativeVectorMatrixMulNV: return "OpCooperativeVectorMatrixMulNV"; - case OpCooperativeVectorMatrixMulAddNV: return "OpCooperativeVectorMatrixMulAddNV"; - case OpCooperativeVectorLoadNV: return "OpCooperativeVectorLoadNV"; - case OpCooperativeVectorStoreNV: return "OpCooperativeVectorStoreNV"; - case OpCooperativeVectorOuterProductAccumulateNV: return "OpCooperativeVectorOuterProductAccumulateNV"; - case OpCooperativeVectorReduceSumAccumulateNV: return "OpCooperativeVectorReduceSumAccumulateNV"; + case (int)Op::OpTypeCooperativeVectorNV: return "OpTypeCooperativeVectorNV"; + case (int)Op::OpCooperativeVectorMatrixMulNV: return "OpCooperativeVectorMatrixMulNV"; + case (int)Op::OpCooperativeVectorMatrixMulAddNV: return "OpCooperativeVectorMatrixMulAddNV"; + case (int)Op::OpCooperativeVectorLoadNV: return "OpCooperativeVectorLoadNV"; + case (int)Op::OpCooperativeVectorStoreNV: return "OpCooperativeVectorStoreNV"; + case (int)Op::OpCooperativeVectorOuterProductAccumulateNV: return "OpCooperativeVectorOuterProductAccumulateNV"; + case (int)Op::OpCooperativeVectorReduceSumAccumulateNV: return "OpCooperativeVectorReduceSumAccumulateNV"; - case OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT"; - case OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT"; + case (int)Op::OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT"; + case (int)Op::OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT"; - case OpTypeHitObjectNV: return "OpTypeHitObjectNV"; - case OpHitObjectTraceRayNV: return "OpHitObjectTraceRayNV"; - case OpHitObjectTraceRayMotionNV: return "OpHitObjectTraceRayMotionNV"; - case OpHitObjectRecordHitNV: return "OpHitObjectRecordHitNV"; - case OpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV"; - case OpHitObjectRecordHitWithIndexNV: return "OpHitObjectRecordHitWithIndexNV"; - case OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV"; - case OpHitObjectRecordMissNV: return "OpHitObjectRecordMissNV"; - case OpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV"; - case OpHitObjectRecordEmptyNV: return "OpHitObjectRecordEmptyNV"; - case OpHitObjectExecuteShaderNV: return "OpHitObjectExecuteShaderNV"; - case OpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV"; - case OpReorderThreadWithHitObjectNV: return "OpReorderThreadWithHitObjectNV"; - case OpHitObjectGetCurrentTimeNV: return "OpHitObjectGetCurrentTimeNV"; - case OpHitObjectGetAttributesNV: return "OpHitObjectGetAttributesNV"; - case OpHitObjectGetHitKindNV: return "OpHitObjectGetFrontFaceNV"; - case OpHitObjectGetPrimitiveIndexNV: return "OpHitObjectGetPrimitiveIndexNV"; - case OpHitObjectGetGeometryIndexNV: return "OpHitObjectGetGeometryIndexNV"; - case OpHitObjectGetInstanceIdNV: return "OpHitObjectGetInstanceIdNV"; - case OpHitObjectGetInstanceCustomIndexNV: return "OpHitObjectGetInstanceCustomIndexNV"; - case OpHitObjectGetObjectRayDirectionNV: return "OpHitObjectGetObjectRayDirectionNV"; - case OpHitObjectGetObjectRayOriginNV: return "OpHitObjectGetObjectRayOriginNV"; - case OpHitObjectGetWorldRayDirectionNV: return "OpHitObjectGetWorldRayDirectionNV"; - case OpHitObjectGetWorldRayOriginNV: return "OpHitObjectGetWorldRayOriginNV"; - case OpHitObjectGetWorldToObjectNV: return "OpHitObjectGetWorldToObjectNV"; - case OpHitObjectGetObjectToWorldNV: return "OpHitObjectGetObjectToWorldNV"; - case OpHitObjectGetRayTMaxNV: return "OpHitObjectGetRayTMaxNV"; - case OpHitObjectGetRayTMinNV: return "OpHitObjectGetRayTMinNV"; - case OpHitObjectIsEmptyNV: return "OpHitObjectIsEmptyNV"; - case OpHitObjectIsHitNV: return "OpHitObjectIsHitNV"; - case OpHitObjectIsMissNV: return "OpHitObjectIsMissNV"; - case OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV"; - case OpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV"; - case OpHitObjectGetClusterIdNV: return "OpHitObjectGetClusterIdNV"; - case OpHitObjectGetSpherePositionNV: return "OpHitObjectGetSpherePositionNV"; - case OpHitObjectGetSphereRadiusNV: return "OpHitObjectGetSphereRadiusNV"; - case OpHitObjectGetLSSPositionsNV: return "OpHitObjectGetLSSPositionsNV"; - case OpHitObjectGetLSSRadiiNV: return "OpHitObjectGetLSSRadiiNV"; - case OpHitObjectIsSphereHitNV: return "OpHitObjectIsSphereHitNV"; - case OpHitObjectIsLSSHitNV: return "OpHitObjectIsLSSHitNV"; + case (int)Op::OpTypeHitObjectNV: return "OpTypeHitObjectNV"; + case (int)Op::OpHitObjectTraceRayNV: return "OpHitObjectTraceRayNV"; + case (int)Op::OpHitObjectTraceRayMotionNV: return "OpHitObjectTraceRayMotionNV"; + case (int)Op::OpHitObjectRecordHitNV: return "OpHitObjectRecordHitNV"; + case (int)Op::OpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV"; + case (int)Op::OpHitObjectRecordHitWithIndexNV: return "OpHitObjectRecordHitWithIndexNV"; + case (int)Op::OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV"; + case (int)Op::OpHitObjectRecordMissNV: return "OpHitObjectRecordMissNV"; + case (int)Op::OpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV"; + case (int)Op::OpHitObjectRecordEmptyNV: return "OpHitObjectRecordEmptyNV"; + case (int)Op::OpHitObjectExecuteShaderNV: return "OpHitObjectExecuteShaderNV"; + case (int)Op::OpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV"; + case (int)Op::OpReorderThreadWithHitObjectNV: return "OpReorderThreadWithHitObjectNV"; + case (int)Op::OpHitObjectGetCurrentTimeNV: return "OpHitObjectGetCurrentTimeNV"; + case (int)Op::OpHitObjectGetAttributesNV: return "OpHitObjectGetAttributesNV"; + case (int)Op::OpHitObjectGetHitKindNV: return "OpHitObjectGetFrontFaceNV"; + case (int)Op::OpHitObjectGetPrimitiveIndexNV: return "OpHitObjectGetPrimitiveIndexNV"; + case (int)Op::OpHitObjectGetGeometryIndexNV: return "OpHitObjectGetGeometryIndexNV"; + case (int)Op::OpHitObjectGetInstanceIdNV: return "OpHitObjectGetInstanceIdNV"; + case (int)Op::OpHitObjectGetInstanceCustomIndexNV: return "OpHitObjectGetInstanceCustomIndexNV"; + case (int)Op::OpHitObjectGetObjectRayDirectionNV: return "OpHitObjectGetObjectRayDirectionNV"; + case (int)Op::OpHitObjectGetObjectRayOriginNV: return "OpHitObjectGetObjectRayOriginNV"; + case (int)Op::OpHitObjectGetWorldRayDirectionNV: return "OpHitObjectGetWorldRayDirectionNV"; + case (int)Op::OpHitObjectGetWorldRayOriginNV: return "OpHitObjectGetWorldRayOriginNV"; + case (int)Op::OpHitObjectGetWorldToObjectNV: return "OpHitObjectGetWorldToObjectNV"; + case (int)Op::OpHitObjectGetObjectToWorldNV: return "OpHitObjectGetObjectToWorldNV"; + case (int)Op::OpHitObjectGetRayTMaxNV: return "OpHitObjectGetRayTMaxNV"; + case (int)Op::OpHitObjectGetRayTMinNV: return "OpHitObjectGetRayTMinNV"; + case (int)Op::OpHitObjectIsEmptyNV: return "OpHitObjectIsEmptyNV"; + case (int)Op::OpHitObjectIsHitNV: return "OpHitObjectIsHitNV"; + case (int)Op::OpHitObjectIsMissNV: return "OpHitObjectIsMissNV"; + case (int)Op::OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV"; + case (int)Op::OpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV"; + case (int)Op::OpHitObjectGetClusterIdNV: return "OpHitObjectGetClusterIdNV"; + case (int)Op::OpHitObjectGetSpherePositionNV: return "OpHitObjectGetSpherePositionNV"; + case (int)Op::OpHitObjectGetSphereRadiusNV: return "OpHitObjectGetSphereRadiusNV"; + case (int)Op::OpHitObjectGetLSSPositionsNV: return "OpHitObjectGetLSSPositionsNV"; + case (int)Op::OpHitObjectGetLSSRadiiNV: return "OpHitObjectGetLSSRadiiNV"; + case (int)Op::OpHitObjectIsSphereHitNV: return "OpHitObjectIsSphereHitNV"; + case (int)Op::OpHitObjectIsLSSHitNV: return "OpHitObjectIsLSSHitNV"; - case OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV"; - case OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV"; + case (int)Op::OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV"; + case (int)Op::OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV"; - case OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT"; - case OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT"; - case OpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT"; + case (int)Op::OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT"; + case (int)Op::OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT"; + case (int)Op::OpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT"; - case OpImageSampleWeightedQCOM: return "OpImageSampleWeightedQCOM"; - case OpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM"; - case OpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM"; - case OpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM"; - case OpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM"; - case OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM"; - case OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM"; - case OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM"; + case (int)Op::OpImageSampleWeightedQCOM: return "OpImageSampleWeightedQCOM"; + case (int)Op::OpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM"; + case (int)Op::OpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM"; + case (int)Op::OpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM"; + case (int)Op::OpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM"; + case (int)Op::OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM"; + case (int)Op::OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM"; + case (int)Op::OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM"; - case OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT"; - case OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT"; - case OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT"; + case (int)Op::OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT"; + case (int)Op::OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT"; + case (int)Op::OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT"; - case OpSDotKHR: return "OpSDotKHR"; - case OpUDotKHR: return "OpUDotKHR"; - case OpSUDotKHR: return "OpSUDotKHR"; - case OpSDotAccSatKHR: return "OpSDotAccSatKHR"; - case OpUDotAccSatKHR: return "OpUDotAccSatKHR"; - case OpSUDotAccSatKHR: return "OpSUDotAccSatKHR"; + case (int)Op::OpSDotKHR: return "OpSDotKHR"; + case (int)Op::OpUDotKHR: return "OpUDotKHR"; + case (int)Op::OpSUDotKHR: return "OpSUDotKHR"; + case (int)Op::OpSDotAccSatKHR: return "OpSDotAccSatKHR"; + case (int)Op::OpUDotAccSatKHR: return "OpUDotAccSatKHR"; + case (int)Op::OpSUDotAccSatKHR: return "OpSUDotAccSatKHR"; default: return "Bad"; @@ -1715,137 +1721,137 @@ void Parameterize() // Exceptions to having a result and a resulting type . // (Everything is initialized to have both). - InstructionDesc[OpNop].setResultAndType(false, false); - InstructionDesc[OpSource].setResultAndType(false, false); - InstructionDesc[OpSourceContinued].setResultAndType(false, false); - InstructionDesc[OpSourceExtension].setResultAndType(false, false); - InstructionDesc[OpExtension].setResultAndType(false, false); - InstructionDesc[OpExtInstImport].setResultAndType(true, false); - InstructionDesc[OpCapability].setResultAndType(false, false); - InstructionDesc[OpMemoryModel].setResultAndType(false, false); - InstructionDesc[OpEntryPoint].setResultAndType(false, false); - InstructionDesc[OpExecutionMode].setResultAndType(false, false); - InstructionDesc[OpExecutionModeId].setResultAndType(false, false); - InstructionDesc[OpTypeVoid].setResultAndType(true, false); - InstructionDesc[OpTypeBool].setResultAndType(true, false); - InstructionDesc[OpTypeInt].setResultAndType(true, false); - InstructionDesc[OpTypeFloat].setResultAndType(true, false); - InstructionDesc[OpTypeVector].setResultAndType(true, false); - InstructionDesc[OpTypeMatrix].setResultAndType(true, false); - InstructionDesc[OpTypeImage].setResultAndType(true, false); - InstructionDesc[OpTypeSampler].setResultAndType(true, false); - InstructionDesc[OpTypeSampledImage].setResultAndType(true, false); - InstructionDesc[OpTypeArray].setResultAndType(true, false); - InstructionDesc[OpTypeRuntimeArray].setResultAndType(true, false); - InstructionDesc[OpTypeStruct].setResultAndType(true, false); - InstructionDesc[OpTypeOpaque].setResultAndType(true, false); - InstructionDesc[OpTypePointer].setResultAndType(true, false); - InstructionDesc[OpTypeForwardPointer].setResultAndType(false, false); - InstructionDesc[OpTypeFunction].setResultAndType(true, false); - InstructionDesc[OpTypeEvent].setResultAndType(true, false); - InstructionDesc[OpTypeDeviceEvent].setResultAndType(true, false); - InstructionDesc[OpTypeReserveId].setResultAndType(true, false); - InstructionDesc[OpTypeQueue].setResultAndType(true, false); - InstructionDesc[OpTypePipe].setResultAndType(true, false); - InstructionDesc[OpFunctionEnd].setResultAndType(false, false); - InstructionDesc[OpStore].setResultAndType(false, false); - InstructionDesc[OpImageWrite].setResultAndType(false, false); - InstructionDesc[OpDecorationGroup].setResultAndType(true, false); - InstructionDesc[OpDecorate].setResultAndType(false, false); - InstructionDesc[OpDecorateId].setResultAndType(false, false); - InstructionDesc[OpDecorateStringGOOGLE].setResultAndType(false, false); - InstructionDesc[OpMemberDecorate].setResultAndType(false, false); - InstructionDesc[OpMemberDecorateStringGOOGLE].setResultAndType(false, false); - InstructionDesc[OpGroupDecorate].setResultAndType(false, false); - InstructionDesc[OpGroupMemberDecorate].setResultAndType(false, false); - InstructionDesc[OpName].setResultAndType(false, false); - InstructionDesc[OpMemberName].setResultAndType(false, false); - InstructionDesc[OpString].setResultAndType(true, false); - InstructionDesc[OpLine].setResultAndType(false, false); - InstructionDesc[OpNoLine].setResultAndType(false, false); - InstructionDesc[OpCopyMemory].setResultAndType(false, false); - InstructionDesc[OpCopyMemorySized].setResultAndType(false, false); - InstructionDesc[OpEmitVertex].setResultAndType(false, false); - InstructionDesc[OpEndPrimitive].setResultAndType(false, false); - InstructionDesc[OpEmitStreamVertex].setResultAndType(false, false); - InstructionDesc[OpEndStreamPrimitive].setResultAndType(false, false); - InstructionDesc[OpControlBarrier].setResultAndType(false, false); - InstructionDesc[OpMemoryBarrier].setResultAndType(false, false); - InstructionDesc[OpAtomicStore].setResultAndType(false, false); - InstructionDesc[OpLoopMerge].setResultAndType(false, false); - InstructionDesc[OpSelectionMerge].setResultAndType(false, false); - InstructionDesc[OpLabel].setResultAndType(true, false); - InstructionDesc[OpBranch].setResultAndType(false, false); - InstructionDesc[OpBranchConditional].setResultAndType(false, false); - InstructionDesc[OpSwitch].setResultAndType(false, false); - InstructionDesc[OpKill].setResultAndType(false, false); - InstructionDesc[OpTerminateInvocation].setResultAndType(false, false); - InstructionDesc[OpReturn].setResultAndType(false, false); - InstructionDesc[OpReturnValue].setResultAndType(false, false); - InstructionDesc[OpUnreachable].setResultAndType(false, false); - InstructionDesc[OpLifetimeStart].setResultAndType(false, false); - InstructionDesc[OpLifetimeStop].setResultAndType(false, false); - InstructionDesc[OpCommitReadPipe].setResultAndType(false, false); - InstructionDesc[OpCommitWritePipe].setResultAndType(false, false); - InstructionDesc[OpGroupCommitWritePipe].setResultAndType(false, false); - InstructionDesc[OpGroupCommitReadPipe].setResultAndType(false, false); - InstructionDesc[OpCaptureEventProfilingInfo].setResultAndType(false, false); - InstructionDesc[OpSetUserEventStatus].setResultAndType(false, false); - InstructionDesc[OpRetainEvent].setResultAndType(false, false); - InstructionDesc[OpReleaseEvent].setResultAndType(false, false); - InstructionDesc[OpGroupWaitEvents].setResultAndType(false, false); - InstructionDesc[OpAtomicFlagClear].setResultAndType(false, false); - InstructionDesc[OpModuleProcessed].setResultAndType(false, false); - InstructionDesc[OpTypeCooperativeMatrixNV].setResultAndType(true, false); - InstructionDesc[OpCooperativeMatrixStoreNV].setResultAndType(false, false); - InstructionDesc[OpTypeCooperativeMatrixKHR].setResultAndType(true, false); - InstructionDesc[OpCooperativeMatrixStoreKHR].setResultAndType(false, false); - InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false); - InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false); - InstructionDesc[OpAssumeTrueKHR].setResultAndType(false, false); - InstructionDesc[OpTypeTensorLayoutNV].setResultAndType(true, false); - InstructionDesc[OpTypeTensorViewNV].setResultAndType(true, false); - InstructionDesc[OpCooperativeMatrixStoreTensorNV].setResultAndType(false, false); - InstructionDesc[OpTypeCooperativeVectorNV].setResultAndType(true, false); - InstructionDesc[OpCooperativeVectorStoreNV].setResultAndType(false, false); - InstructionDesc[OpCooperativeVectorOuterProductAccumulateNV].setResultAndType(false, false); - InstructionDesc[OpCooperativeVectorReduceSumAccumulateNV].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpNop)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpSource)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpSourceContinued)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpSourceExtension)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpExtension)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpExtInstImport)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpCapability)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpMemoryModel)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpEntryPoint)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpExecutionMode)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpExecutionModeId)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpTypeVoid)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeBool)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeInt)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeFloat)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeVector)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeMatrix)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeImage)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeSampler)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeSampledImage)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeArray)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeRuntimeArray)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeStruct)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeOpaque)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypePointer)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeForwardPointer)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpTypeFunction)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeEvent)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeDeviceEvent)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeReserveId)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeQueue)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypePipe)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpFunctionEnd)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpStore)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpImageWrite)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpDecorationGroup)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpDecorate)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpDecorateId)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpDecorateStringGOOGLE)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpMemberDecorate)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpMemberDecorateStringGOOGLE)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpGroupDecorate)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpGroupMemberDecorate)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpName)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpMemberName)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpString)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpLine)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpNoLine)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpCopyMemory)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpCopyMemorySized)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpEmitVertex)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpEndPrimitive)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpEmitStreamVertex)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpEndStreamPrimitive)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpControlBarrier)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpMemoryBarrier)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpAtomicStore)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpLoopMerge)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpSelectionMerge)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpLabel)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpBranch)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpBranchConditional)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpSwitch)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpKill)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpTerminateInvocation)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpReturn)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpReturnValue)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpUnreachable)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpLifetimeStart)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpLifetimeStop)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpCommitReadPipe)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpCommitWritePipe)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpCaptureEventProfilingInfo)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpSetUserEventStatus)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpRetainEvent)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpReleaseEvent)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpGroupWaitEvents)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpAtomicFlagClear)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpModuleProcessed)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixNV)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpBeginInvocationInterlockEXT)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpEndInvocationInterlockEXT)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpAssumeTrueKHR)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpTypeTensorLayoutNV)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeTensorViewNV)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpTypeCooperativeVectorNV)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpCooperativeVectorReduceSumAccumulateNV)].setResultAndType(false, false); // Specific additional context-dependent operands - ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <>'"); + ExecutionModeOperands[enumCast(ExecutionMode::Invocations)].push(OperandLiteralNumber, "'Number of <>'"); - ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'"); - ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'"); - ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'"); + ExecutionModeOperands[enumCast(ExecutionMode::LocalSize)].push(OperandLiteralNumber, "'x size'"); + ExecutionModeOperands[enumCast(ExecutionMode::LocalSize)].push(OperandLiteralNumber, "'y size'"); + ExecutionModeOperands[enumCast(ExecutionMode::LocalSize)].push(OperandLiteralNumber, "'z size'"); - ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'"); - ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'"); - ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'"); + ExecutionModeOperands[enumCast(ExecutionMode::LocalSizeHint)].push(OperandLiteralNumber, "'x size'"); + ExecutionModeOperands[enumCast(ExecutionMode::LocalSizeHint)].push(OperandLiteralNumber, "'y size'"); + ExecutionModeOperands[enumCast(ExecutionMode::LocalSizeHint)].push(OperandLiteralNumber, "'z size'"); - ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'"); - ExecutionModeOperands[ExecutionModeVecTypeHint].push(OperandLiteralNumber, "'Vector type'"); + ExecutionModeOperands[enumCast(ExecutionMode::OutputVertices)].push(OperandLiteralNumber, "'Vertex count'"); + ExecutionModeOperands[enumCast(ExecutionMode::VecTypeHint)].push(OperandLiteralNumber, "'Vector type'"); - DecorationOperands[DecorationStream].push(OperandLiteralNumber, "'Stream Number'"); - DecorationOperands[DecorationLocation].push(OperandLiteralNumber, "'Location'"); - DecorationOperands[DecorationComponent].push(OperandLiteralNumber, "'Component'"); - DecorationOperands[DecorationIndex].push(OperandLiteralNumber, "'Index'"); - DecorationOperands[DecorationBinding].push(OperandLiteralNumber, "'Binding Point'"); - DecorationOperands[DecorationDescriptorSet].push(OperandLiteralNumber, "'Descriptor Set'"); - DecorationOperands[DecorationOffset].push(OperandLiteralNumber, "'Byte Offset'"); - DecorationOperands[DecorationXfbBuffer].push(OperandLiteralNumber, "'XFB Buffer Number'"); - DecorationOperands[DecorationXfbStride].push(OperandLiteralNumber, "'XFB Stride'"); - DecorationOperands[DecorationArrayStride].push(OperandLiteralNumber, "'Array Stride'"); - DecorationOperands[DecorationMatrixStride].push(OperandLiteralNumber, "'Matrix Stride'"); - DecorationOperands[DecorationBuiltIn].push(OperandLiteralNumber, "See <>"); - DecorationOperands[DecorationFPRoundingMode].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'"); - DecorationOperands[DecorationFPFastMathMode].push(OperandFPFastMath, "'Fast-Math Mode'"); - DecorationOperands[DecorationLinkageAttributes].push(OperandLiteralString, "'Name'"); - DecorationOperands[DecorationLinkageAttributes].push(OperandLinkageType, "'Linkage Type'"); - DecorationOperands[DecorationFuncParamAttr].push(OperandFuncParamAttr, "'Function Parameter Attribute'"); - DecorationOperands[DecorationSpecId].push(OperandLiteralNumber, "'Specialization Constant ID'"); - DecorationOperands[DecorationInputAttachmentIndex].push(OperandLiteralNumber, "'Attachment Index'"); - DecorationOperands[DecorationAlignment].push(OperandLiteralNumber, "'Alignment'"); + DecorationOperands[enumCast(Decoration::Stream)].push(OperandLiteralNumber, "'Stream Number'"); + DecorationOperands[enumCast(Decoration::Location)].push(OperandLiteralNumber, "'Location'"); + DecorationOperands[enumCast(Decoration::Component)].push(OperandLiteralNumber, "'Component'"); + DecorationOperands[enumCast(Decoration::Index)].push(OperandLiteralNumber, "'Index'"); + DecorationOperands[enumCast(Decoration::Binding)].push(OperandLiteralNumber, "'Binding Point'"); + DecorationOperands[enumCast(Decoration::DescriptorSet)].push(OperandLiteralNumber, "'Descriptor Set'"); + DecorationOperands[enumCast(Decoration::Offset)].push(OperandLiteralNumber, "'Byte Offset'"); + DecorationOperands[enumCast(Decoration::XfbBuffer)].push(OperandLiteralNumber, "'XFB Buffer Number'"); + DecorationOperands[enumCast(Decoration::XfbStride)].push(OperandLiteralNumber, "'XFB Stride'"); + DecorationOperands[enumCast(Decoration::ArrayStride)].push(OperandLiteralNumber, "'Array Stride'"); + DecorationOperands[enumCast(Decoration::MatrixStride)].push(OperandLiteralNumber, "'Matrix Stride'"); + DecorationOperands[enumCast(Decoration::BuiltIn)].push(OperandLiteralNumber, "See <>"); + DecorationOperands[enumCast(Decoration::FPRoundingMode)].push(OperandFPRoundingMode, "'Floating-Point Rounding Mode'"); + DecorationOperands[enumCast(Decoration::FPFastMathMode)].push(OperandFPFastMath, "'Fast-Math Mode'"); + DecorationOperands[enumCast(Decoration::LinkageAttributes)].push(OperandLiteralString, "'Name'"); + DecorationOperands[enumCast(Decoration::LinkageAttributes)].push(OperandLinkageType, "'Linkage Type'"); + DecorationOperands[enumCast(Decoration::FuncParamAttr)].push(OperandFuncParamAttr, "'Function Parameter Attribute'"); + DecorationOperands[enumCast(Decoration::SpecId)].push(OperandLiteralNumber, "'Specialization Constant ID'"); + DecorationOperands[enumCast(Decoration::InputAttachmentIndex)].push(OperandLiteralNumber, "'Attachment Index'"); + DecorationOperands[enumCast(Decoration::Alignment)].push(OperandLiteralNumber, "'Alignment'"); OperandClassParams[OperandSource].set(0, SourceString, nullptr); OperandClassParams[OperandExecutionModel].set(0, ExecutionModelString, nullptr); @@ -1885,1903 +1891,1904 @@ void Parameterize() // set name of operator, an initial set of style operands, and the description - InstructionDesc[OpSource].operands.push(OperandSource, ""); - InstructionDesc[OpSource].operands.push(OperandLiteralNumber, "'Version'"); - InstructionDesc[OpSource].operands.push(OperandId, "'File'", true); - InstructionDesc[OpSource].operands.push(OperandLiteralString, "'Source'", true); + InstructionDesc[enumCast(Op::OpSource)].operands.push(OperandSource, ""); + InstructionDesc[enumCast(Op::OpSource)].operands.push(OperandLiteralNumber, "'Version'"); + InstructionDesc[enumCast(Op::OpSource)].operands.push(OperandId, "'File'", true); + InstructionDesc[enumCast(Op::OpSource)].operands.push(OperandLiteralString, "'Source'", true); - InstructionDesc[OpSourceContinued].operands.push(OperandLiteralString, "'Continued Source'"); + InstructionDesc[enumCast(Op::OpSourceContinued)].operands.push(OperandLiteralString, "'Continued Source'"); - InstructionDesc[OpSourceExtension].operands.push(OperandLiteralString, "'Extension'"); + InstructionDesc[enumCast(Op::OpSourceExtension)].operands.push(OperandLiteralString, "'Extension'"); - InstructionDesc[OpName].operands.push(OperandId, "'Target'"); - InstructionDesc[OpName].operands.push(OperandLiteralString, "'Name'"); + InstructionDesc[enumCast(Op::OpName)].operands.push(OperandId, "'Target'"); + InstructionDesc[enumCast(Op::OpName)].operands.push(OperandLiteralString, "'Name'"); - InstructionDesc[OpMemberName].operands.push(OperandId, "'Type'"); - InstructionDesc[OpMemberName].operands.push(OperandLiteralNumber, "'Member'"); - InstructionDesc[OpMemberName].operands.push(OperandLiteralString, "'Name'"); + InstructionDesc[enumCast(Op::OpMemberName)].operands.push(OperandId, "'Type'"); + InstructionDesc[enumCast(Op::OpMemberName)].operands.push(OperandLiteralNumber, "'Member'"); + InstructionDesc[enumCast(Op::OpMemberName)].operands.push(OperandLiteralString, "'Name'"); - InstructionDesc[OpString].operands.push(OperandLiteralString, "'String'"); + InstructionDesc[enumCast(Op::OpString)].operands.push(OperandLiteralString, "'String'"); - InstructionDesc[OpLine].operands.push(OperandId, "'File'"); - InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Line'"); - InstructionDesc[OpLine].operands.push(OperandLiteralNumber, "'Column'"); + InstructionDesc[enumCast(Op::OpLine)].operands.push(OperandId, "'File'"); + InstructionDesc[enumCast(Op::OpLine)].operands.push(OperandLiteralNumber, "'Line'"); + InstructionDesc[enumCast(Op::OpLine)].operands.push(OperandLiteralNumber, "'Column'"); - InstructionDesc[OpExtension].operands.push(OperandLiteralString, "'Name'"); + InstructionDesc[enumCast(Op::OpExtension)].operands.push(OperandLiteralString, "'Name'"); - InstructionDesc[OpExtInstImport].operands.push(OperandLiteralString, "'Name'"); + InstructionDesc[enumCast(Op::OpExtInstImport)].operands.push(OperandLiteralString, "'Name'"); - InstructionDesc[OpCapability].operands.push(OperandCapability, "'Capability'"); + InstructionDesc[enumCast(Op::OpCapability)].operands.push(OperandCapability, "'Capability'"); - InstructionDesc[OpMemoryModel].operands.push(OperandAddressing, ""); - InstructionDesc[OpMemoryModel].operands.push(OperandMemory, ""); + InstructionDesc[enumCast(Op::OpMemoryModel)].operands.push(OperandAddressing, ""); + InstructionDesc[enumCast(Op::OpMemoryModel)].operands.push(OperandMemory, ""); - InstructionDesc[OpEntryPoint].operands.push(OperandExecutionModel, ""); - InstructionDesc[OpEntryPoint].operands.push(OperandId, "'Entry Point'"); - InstructionDesc[OpEntryPoint].operands.push(OperandLiteralString, "'Name'"); - InstructionDesc[OpEntryPoint].operands.push(OperandVariableIds, "'Interface'"); + InstructionDesc[enumCast(Op::OpEntryPoint)].operands.push(OperandExecutionModel, ""); + InstructionDesc[enumCast(Op::OpEntryPoint)].operands.push(OperandId, "'Entry Point'"); + InstructionDesc[enumCast(Op::OpEntryPoint)].operands.push(OperandLiteralString, "'Name'"); + InstructionDesc[enumCast(Op::OpEntryPoint)].operands.push(OperandVariableIds, "'Interface'"); - InstructionDesc[OpExecutionMode].operands.push(OperandId, "'Entry Point'"); - InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'"); - InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <>"); + InstructionDesc[enumCast(Op::OpExecutionMode)].operands.push(OperandId, "'Entry Point'"); + InstructionDesc[enumCast(Op::OpExecutionMode)].operands.push(OperandExecutionMode, "'Mode'"); + InstructionDesc[enumCast(Op::OpExecutionMode)].operands.push(OperandOptionalLiteral, "See <>"); - InstructionDesc[OpExecutionModeId].operands.push(OperandId, "'Entry Point'"); - InstructionDesc[OpExecutionModeId].operands.push(OperandExecutionMode, "'Mode'"); - InstructionDesc[OpExecutionModeId].operands.push(OperandVariableIds, "See <>"); + InstructionDesc[enumCast(Op::OpExecutionModeId)].operands.push(OperandId, "'Entry Point'"); + InstructionDesc[enumCast(Op::OpExecutionModeId)].operands.push(OperandExecutionMode, "'Mode'"); + InstructionDesc[enumCast(Op::OpExecutionModeId)].operands.push(OperandVariableIds, "See <>"); - InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'"); - InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'"); + InstructionDesc[enumCast(Op::OpTypeInt)].operands.push(OperandLiteralNumber, "'Width'"); + InstructionDesc[enumCast(Op::OpTypeInt)].operands.push(OperandLiteralNumber, "'Signedness'"); - InstructionDesc[OpTypeFloat].operands.push(OperandLiteralNumber, "'Width'"); + InstructionDesc[enumCast(Op::OpTypeFloat)].operands.push(OperandLiteralNumber, "'Width'"); + InstructionDesc[enumCast(Op::OpTypeFloat)].operands.push(OperandOptionalLiteral, "'FP Encoding'"); - InstructionDesc[OpTypeVector].operands.push(OperandId, "'Component Type'"); - InstructionDesc[OpTypeVector].operands.push(OperandLiteralNumber, "'Component Count'"); + InstructionDesc[enumCast(Op::OpTypeVector)].operands.push(OperandId, "'Component Type'"); + InstructionDesc[enumCast(Op::OpTypeVector)].operands.push(OperandLiteralNumber, "'Component Count'"); - InstructionDesc[OpTypeMatrix].operands.push(OperandId, "'Column Type'"); - InstructionDesc[OpTypeMatrix].operands.push(OperandLiteralNumber, "'Column Count'"); + InstructionDesc[enumCast(Op::OpTypeMatrix)].operands.push(OperandId, "'Column Type'"); + InstructionDesc[enumCast(Op::OpTypeMatrix)].operands.push(OperandLiteralNumber, "'Column Count'"); - InstructionDesc[OpTypeImage].operands.push(OperandId, "'Sampled Type'"); - InstructionDesc[OpTypeImage].operands.push(OperandDimensionality, ""); - InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Depth'"); - InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Arrayed'"); - InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'MS'"); - InstructionDesc[OpTypeImage].operands.push(OperandLiteralNumber, "'Sampled'"); - InstructionDesc[OpTypeImage].operands.push(OperandSamplerImageFormat, ""); - InstructionDesc[OpTypeImage].operands.push(OperandAccessQualifier, "", true); + InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandId, "'Sampled Type'"); + InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandDimensionality, ""); + InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandLiteralNumber, "'Depth'"); + InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandLiteralNumber, "'Arrayed'"); + InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandLiteralNumber, "'MS'"); + InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandLiteralNumber, "'Sampled'"); + InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandSamplerImageFormat, ""); + InstructionDesc[enumCast(Op::OpTypeImage)].operands.push(OperandAccessQualifier, "", true); - InstructionDesc[OpTypeSampledImage].operands.push(OperandId, "'Image Type'"); + InstructionDesc[enumCast(Op::OpTypeSampledImage)].operands.push(OperandId, "'Image Type'"); - InstructionDesc[OpTypeArray].operands.push(OperandId, "'Element Type'"); - InstructionDesc[OpTypeArray].operands.push(OperandId, "'Length'"); + InstructionDesc[enumCast(Op::OpTypeArray)].operands.push(OperandId, "'Element Type'"); + InstructionDesc[enumCast(Op::OpTypeArray)].operands.push(OperandId, "'Length'"); - InstructionDesc[OpTypeRuntimeArray].operands.push(OperandId, "'Element Type'"); + InstructionDesc[enumCast(Op::OpTypeRuntimeArray)].operands.push(OperandId, "'Element Type'"); - InstructionDesc[OpTypeStruct].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n..."); + InstructionDesc[enumCast(Op::OpTypeStruct)].operands.push(OperandVariableIds, "'Member 0 type', +\n'member 1 type', +\n..."); - InstructionDesc[OpTypeOpaque].operands.push(OperandLiteralString, "The name of the opaque type."); + InstructionDesc[enumCast(Op::OpTypeOpaque)].operands.push(OperandLiteralString, "The name of the opaque type."); - InstructionDesc[OpTypePointer].operands.push(OperandStorage, ""); - InstructionDesc[OpTypePointer].operands.push(OperandId, "'Type'"); + InstructionDesc[enumCast(Op::OpTypePointer)].operands.push(OperandStorage, ""); + InstructionDesc[enumCast(Op::OpTypePointer)].operands.push(OperandId, "'Type'"); - InstructionDesc[OpTypeForwardPointer].operands.push(OperandId, "'Pointer Type'"); - InstructionDesc[OpTypeForwardPointer].operands.push(OperandStorage, ""); + InstructionDesc[enumCast(Op::OpTypeForwardPointer)].operands.push(OperandId, "'Pointer Type'"); + InstructionDesc[enumCast(Op::OpTypeForwardPointer)].operands.push(OperandStorage, ""); - InstructionDesc[OpTypePipe].operands.push(OperandAccessQualifier, "'Qualifier'"); + InstructionDesc[enumCast(Op::OpTypePipe)].operands.push(OperandAccessQualifier, "'Qualifier'"); - InstructionDesc[OpTypeFunction].operands.push(OperandId, "'Return Type'"); - InstructionDesc[OpTypeFunction].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n..."); + InstructionDesc[enumCast(Op::OpTypeFunction)].operands.push(OperandId, "'Return Type'"); + InstructionDesc[enumCast(Op::OpTypeFunction)].operands.push(OperandVariableIds, "'Parameter 0 Type', +\n'Parameter 1 Type', +\n..."); - InstructionDesc[OpConstant].operands.push(OperandVariableLiterals, "'Value'"); + InstructionDesc[enumCast(Op::OpConstant)].operands.push(OperandVariableLiterals, "'Value'"); - InstructionDesc[OpConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); + InstructionDesc[enumCast(Op::OpConstantComposite)].operands.push(OperandVariableIds, "'Constituents'"); - InstructionDesc[OpConstantSampler].operands.push(OperandSamplerAddressingMode, ""); - InstructionDesc[OpConstantSampler].operands.push(OperandLiteralNumber, "'Param'"); - InstructionDesc[OpConstantSampler].operands.push(OperandSamplerFilterMode, ""); + InstructionDesc[enumCast(Op::OpConstantSampler)].operands.push(OperandSamplerAddressingMode, ""); + InstructionDesc[enumCast(Op::OpConstantSampler)].operands.push(OperandLiteralNumber, "'Param'"); + InstructionDesc[enumCast(Op::OpConstantSampler)].operands.push(OperandSamplerFilterMode, ""); - InstructionDesc[OpSpecConstant].operands.push(OperandVariableLiterals, "'Value'"); + InstructionDesc[enumCast(Op::OpSpecConstant)].operands.push(OperandVariableLiterals, "'Value'"); - InstructionDesc[OpSpecConstantComposite].operands.push(OperandVariableIds, "'Constituents'"); + InstructionDesc[enumCast(Op::OpSpecConstantComposite)].operands.push(OperandVariableIds, "'Constituents'"); - InstructionDesc[OpSpecConstantOp].operands.push(OperandLiteralNumber, "'Opcode'"); - InstructionDesc[OpSpecConstantOp].operands.push(OperandVariableIds, "'Operands'"); + InstructionDesc[enumCast(Op::OpSpecConstantOp)].operands.push(OperandLiteralNumber, "'Opcode'"); + InstructionDesc[enumCast(Op::OpSpecConstantOp)].operands.push(OperandVariableIds, "'Operands'"); - InstructionDesc[OpVariable].operands.push(OperandStorage, ""); - InstructionDesc[OpVariable].operands.push(OperandId, "'Initializer'", true); + InstructionDesc[enumCast(Op::OpVariable)].operands.push(OperandStorage, ""); + InstructionDesc[enumCast(Op::OpVariable)].operands.push(OperandId, "'Initializer'", true); - InstructionDesc[OpFunction].operands.push(OperandFunction, ""); - InstructionDesc[OpFunction].operands.push(OperandId, "'Function Type'"); + InstructionDesc[enumCast(Op::OpFunction)].operands.push(OperandFunction, ""); + InstructionDesc[enumCast(Op::OpFunction)].operands.push(OperandId, "'Function Type'"); - InstructionDesc[OpFunctionCall].operands.push(OperandId, "'Function'"); - InstructionDesc[OpFunctionCall].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n..."); + InstructionDesc[enumCast(Op::OpFunctionCall)].operands.push(OperandId, "'Function'"); + InstructionDesc[enumCast(Op::OpFunctionCall)].operands.push(OperandVariableIds, "'Argument 0', +\n'Argument 1', +\n..."); - InstructionDesc[OpExtInst].operands.push(OperandId, "'Set'"); - InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'"); - InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n..."); + InstructionDesc[enumCast(Op::OpExtInst)].operands.push(OperandId, "'Set'"); + InstructionDesc[enumCast(Op::OpExtInst)].operands.push(OperandLiteralNumber, "'Instruction'"); + InstructionDesc[enumCast(Op::OpExtInst)].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n..."); - InstructionDesc[OpExtInstWithForwardRefsKHR].operands.push(OperandId, "'Set'"); - InstructionDesc[OpExtInstWithForwardRefsKHR].operands.push(OperandLiteralNumber, "'Instruction'"); - InstructionDesc[OpExtInstWithForwardRefsKHR].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n..."); + InstructionDesc[enumCast(Op::OpExtInstWithForwardRefsKHR)].operands.push(OperandId, "'Set'"); + InstructionDesc[enumCast(Op::OpExtInstWithForwardRefsKHR)].operands.push(OperandLiteralNumber, "'Instruction'"); + InstructionDesc[enumCast(Op::OpExtInstWithForwardRefsKHR)].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n..."); - InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true); - InstructionDesc[OpLoad].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpLoad].operands.push(OperandId, "", true); + InstructionDesc[enumCast(Op::OpLoad)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpLoad)].operands.push(OperandMemoryAccess, "", true); + InstructionDesc[enumCast(Op::OpLoad)].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[enumCast(Op::OpLoad)].operands.push(OperandId, "", true); - InstructionDesc[OpStore].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpStore].operands.push(OperandId, "'Object'"); - InstructionDesc[OpStore].operands.push(OperandMemoryAccess, "", true); - InstructionDesc[OpStore].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpStore].operands.push(OperandId, "", true); + InstructionDesc[enumCast(Op::OpStore)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpStore)].operands.push(OperandId, "'Object'"); + InstructionDesc[enumCast(Op::OpStore)].operands.push(OperandMemoryAccess, "", true); + InstructionDesc[enumCast(Op::OpStore)].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[enumCast(Op::OpStore)].operands.push(OperandId, "", true); - InstructionDesc[OpPhi].operands.push(OperandVariableIds, "'Variable, Parent, ...'"); + InstructionDesc[enumCast(Op::OpPhi)].operands.push(OperandVariableIds, "'Variable, Parent, ...'"); - InstructionDesc[OpDecorate].operands.push(OperandId, "'Target'"); - InstructionDesc[OpDecorate].operands.push(OperandDecoration, ""); - InstructionDesc[OpDecorate].operands.push(OperandVariableLiterals, "See <>."); + InstructionDesc[enumCast(Op::OpDecorate)].operands.push(OperandId, "'Target'"); + InstructionDesc[enumCast(Op::OpDecorate)].operands.push(OperandDecoration, ""); + InstructionDesc[enumCast(Op::OpDecorate)].operands.push(OperandVariableLiterals, "See <>."); - InstructionDesc[OpDecorateId].operands.push(OperandId, "'Target'"); - InstructionDesc[OpDecorateId].operands.push(OperandDecoration, ""); - InstructionDesc[OpDecorateId].operands.push(OperandVariableIds, "See <>."); + InstructionDesc[enumCast(Op::OpDecorateId)].operands.push(OperandId, "'Target'"); + InstructionDesc[enumCast(Op::OpDecorateId)].operands.push(OperandDecoration, ""); + InstructionDesc[enumCast(Op::OpDecorateId)].operands.push(OperandVariableIds, "See <>."); - InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'"); - InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, ""); - InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'"); + InstructionDesc[enumCast(Op::OpDecorateStringGOOGLE)].operands.push(OperandId, "'Target'"); + InstructionDesc[enumCast(Op::OpDecorateStringGOOGLE)].operands.push(OperandDecoration, ""); + InstructionDesc[enumCast(Op::OpDecorateStringGOOGLE)].operands.push(OperandVariableLiteralStrings, "'Literal Strings'"); - InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'"); - InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'"); - InstructionDesc[OpMemberDecorate].operands.push(OperandDecoration, ""); - InstructionDesc[OpMemberDecorate].operands.push(OperandVariableLiterals, "See <>."); + InstructionDesc[enumCast(Op::OpMemberDecorate)].operands.push(OperandId, "'Structure Type'"); + InstructionDesc[enumCast(Op::OpMemberDecorate)].operands.push(OperandLiteralNumber, "'Member'"); + InstructionDesc[enumCast(Op::OpMemberDecorate)].operands.push(OperandDecoration, ""); + InstructionDesc[enumCast(Op::OpMemberDecorate)].operands.push(OperandVariableLiterals, "See <>."); - InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'"); - InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'"); - InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, ""); - InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'"); + InstructionDesc[enumCast(Op::OpMemberDecorateStringGOOGLE)].operands.push(OperandId, "'Structure Type'"); + InstructionDesc[enumCast(Op::OpMemberDecorateStringGOOGLE)].operands.push(OperandLiteralNumber, "'Member'"); + InstructionDesc[enumCast(Op::OpMemberDecorateStringGOOGLE)].operands.push(OperandDecoration, ""); + InstructionDesc[enumCast(Op::OpMemberDecorateStringGOOGLE)].operands.push(OperandVariableLiteralStrings, "'Literal Strings'"); - InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'"); - InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'"); + InstructionDesc[enumCast(Op::OpGroupDecorate)].operands.push(OperandId, "'Decoration Group'"); + InstructionDesc[enumCast(Op::OpGroupDecorate)].operands.push(OperandVariableIds, "'Targets'"); - InstructionDesc[OpGroupMemberDecorate].operands.push(OperandId, "'Decoration Group'"); - InstructionDesc[OpGroupMemberDecorate].operands.push(OperandVariableIdLiteral, "'Targets'"); + InstructionDesc[enumCast(Op::OpGroupMemberDecorate)].operands.push(OperandId, "'Decoration Group'"); + InstructionDesc[enumCast(Op::OpGroupMemberDecorate)].operands.push(OperandVariableIdLiteral, "'Targets'"); - InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpVectorExtractDynamic].operands.push(OperandId, "'Index'"); + InstructionDesc[enumCast(Op::OpVectorExtractDynamic)].operands.push(OperandId, "'Vector'"); + InstructionDesc[enumCast(Op::OpVectorExtractDynamic)].operands.push(OperandId, "'Index'"); - InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Component'"); - InstructionDesc[OpVectorInsertDynamic].operands.push(OperandId, "'Index'"); + InstructionDesc[enumCast(Op::OpVectorInsertDynamic)].operands.push(OperandId, "'Vector'"); + InstructionDesc[enumCast(Op::OpVectorInsertDynamic)].operands.push(OperandId, "'Component'"); + InstructionDesc[enumCast(Op::OpVectorInsertDynamic)].operands.push(OperandId, "'Index'"); - InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 1'"); - InstructionDesc[OpVectorShuffle].operands.push(OperandId, "'Vector 2'"); - InstructionDesc[OpVectorShuffle].operands.push(OperandVariableLiterals, "'Components'"); + InstructionDesc[enumCast(Op::OpVectorShuffle)].operands.push(OperandId, "'Vector 1'"); + InstructionDesc[enumCast(Op::OpVectorShuffle)].operands.push(OperandId, "'Vector 2'"); + InstructionDesc[enumCast(Op::OpVectorShuffle)].operands.push(OperandVariableLiterals, "'Components'"); - InstructionDesc[OpCompositeConstruct].operands.push(OperandVariableIds, "'Constituents'"); + InstructionDesc[enumCast(Op::OpCompositeConstruct)].operands.push(OperandVariableIds, "'Constituents'"); - InstructionDesc[OpCompositeExtract].operands.push(OperandId, "'Composite'"); - InstructionDesc[OpCompositeExtract].operands.push(OperandVariableLiterals, "'Indexes'"); + InstructionDesc[enumCast(Op::OpCompositeExtract)].operands.push(OperandId, "'Composite'"); + InstructionDesc[enumCast(Op::OpCompositeExtract)].operands.push(OperandVariableLiterals, "'Indexes'"); - InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Object'"); - InstructionDesc[OpCompositeInsert].operands.push(OperandId, "'Composite'"); - InstructionDesc[OpCompositeInsert].operands.push(OperandVariableLiterals, "'Indexes'"); + InstructionDesc[enumCast(Op::OpCompositeInsert)].operands.push(OperandId, "'Object'"); + InstructionDesc[enumCast(Op::OpCompositeInsert)].operands.push(OperandId, "'Composite'"); + InstructionDesc[enumCast(Op::OpCompositeInsert)].operands.push(OperandVariableLiterals, "'Indexes'"); - InstructionDesc[OpCopyObject].operands.push(OperandId, "'Operand'"); + InstructionDesc[enumCast(Op::OpCopyObject)].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Target'"); - InstructionDesc[OpCopyMemory].operands.push(OperandId, "'Source'"); - InstructionDesc[OpCopyMemory].operands.push(OperandMemoryAccess, "", true); - - InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Target'"); - InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Source'"); - InstructionDesc[OpCopyMemorySized].operands.push(OperandId, "'Size'"); - InstructionDesc[OpCopyMemorySized].operands.push(OperandMemoryAccess, "", true); - - InstructionDesc[OpSampledImage].operands.push(OperandId, "'Image'"); - InstructionDesc[OpSampledImage].operands.push(OperandId, "'Sampler'"); - - InstructionDesc[OpImage].operands.push(OperandId, "'Sampled Image'"); - - InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageRead].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageRead].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'"); - InstructionDesc[OpImageWrite].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageWrite].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleExplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleProjImplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleProjExplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageFetch].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageFetch].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageFetch].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageFetch].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageGather].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageGather].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageGather].operands.push(OperandId, "'Component'"); - InstructionDesc[OpImageGather].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageGather].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageDrefGather].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageDrefGather].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageDrefGather].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleImplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleExplicitLod].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleDrefImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpCopyMemory)].operands.push(OperandId, "'Target'"); + InstructionDesc[enumCast(Op::OpCopyMemory)].operands.push(OperandId, "'Source'"); + InstructionDesc[enumCast(Op::OpCopyMemory)].operands.push(OperandMemoryAccess, "", true); + + InstructionDesc[enumCast(Op::OpCopyMemorySized)].operands.push(OperandId, "'Target'"); + InstructionDesc[enumCast(Op::OpCopyMemorySized)].operands.push(OperandId, "'Source'"); + InstructionDesc[enumCast(Op::OpCopyMemorySized)].operands.push(OperandId, "'Size'"); + InstructionDesc[enumCast(Op::OpCopyMemorySized)].operands.push(OperandMemoryAccess, "", true); + + InstructionDesc[enumCast(Op::OpSampledImage)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpSampledImage)].operands.push(OperandId, "'Sampler'"); + + InstructionDesc[enumCast(Op::OpImage)].operands.push(OperandId, "'Sampled Image'"); + + InstructionDesc[enumCast(Op::OpImageRead)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageRead)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageRead)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageRead)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageWrite)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageWrite)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageWrite)].operands.push(OperandId, "'Texel'"); + InstructionDesc[enumCast(Op::OpImageWrite)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageWrite)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSampleImplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSampleImplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSampleImplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSampleImplicitLod)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSampleExplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSampleExplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSampleExplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSampleExplicitLod)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSampleDrefImplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSampleDrefImplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSampleDrefImplicitLod)].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[enumCast(Op::OpImageSampleDrefImplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSampleDrefImplicitLod)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSampleDrefExplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSampleDrefExplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSampleDrefExplicitLod)].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[enumCast(Op::OpImageSampleDrefExplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSampleDrefExplicitLod)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSampleProjImplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSampleProjImplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSampleProjImplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSampleProjImplicitLod)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSampleProjExplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSampleProjExplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSampleProjExplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSampleProjExplicitLod)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSampleProjDrefImplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSampleProjDrefImplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSampleProjDrefImplicitLod)].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[enumCast(Op::OpImageSampleProjDrefImplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSampleProjDrefImplicitLod)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSampleProjDrefExplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSampleProjDrefExplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSampleProjDrefExplicitLod)].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[enumCast(Op::OpImageSampleProjDrefExplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSampleProjDrefExplicitLod)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageFetch)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageFetch)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageFetch)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageFetch)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageGather)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageGather)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageGather)].operands.push(OperandId, "'Component'"); + InstructionDesc[enumCast(Op::OpImageGather)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageGather)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageDrefGather)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageDrefGather)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageDrefGather)].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[enumCast(Op::OpImageDrefGather)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageDrefGather)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSparseSampleImplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleImplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleImplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleImplicitLod)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSparseSampleExplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleExplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleExplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleExplicitLod)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpImageSparseSampleDrefImplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleDrefImplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleDrefImplicitLod)].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleDrefImplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleDrefImplicitLod)].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleDrefExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleDrefExplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleDrefExplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleDrefExplicitLod)].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleDrefExplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleDrefExplicitLod)].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleProjImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjImplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjImplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjImplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjImplicitLod)].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleProjExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjExplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjExplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjExplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjExplicitLod)].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleProjDrefImplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefImplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefImplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefImplicitLod)].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefImplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefImplicitLod)].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseSampleProjDrefExplicitLod].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefExplicitLod)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefExplicitLod)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefExplicitLod)].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefExplicitLod)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseSampleProjDrefExplicitLod)].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageSparseFetch].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseFetch].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseFetch].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpImageSparseFetch)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageSparseFetch)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseFetch)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseFetch)].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseGather].operands.push(OperandId, "'Component'"); - InstructionDesc[OpImageSparseGather].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseGather].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpImageSparseGather)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSparseGather)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseGather)].operands.push(OperandId, "'Component'"); + InstructionDesc[enumCast(Op::OpImageSparseGather)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseGather)].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseDrefGather].operands.push(OperandId, "'D~ref~'"); - InstructionDesc[OpImageSparseDrefGather].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseDrefGather].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpImageSparseDrefGather)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSparseDrefGather)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseDrefGather)].operands.push(OperandId, "'D~ref~'"); + InstructionDesc[enumCast(Op::OpImageSparseDrefGather)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseDrefGather)].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageSparseRead].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSparseRead].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSparseRead].operands.push(OperandVariableIds, "", true); + InstructionDesc[enumCast(Op::OpImageSparseRead)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageSparseRead)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSparseRead)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSparseRead)].operands.push(OperandVariableIds, "", true); - InstructionDesc[OpImageSparseTexelsResident].operands.push(OperandId, "'Resident Code'"); + InstructionDesc[enumCast(Op::OpImageSparseTexelsResident)].operands.push(OperandId, "'Resident Code'"); - InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageQuerySizeLod].operands.push(OperandId, "'Level of Detail'"); + InstructionDesc[enumCast(Op::OpImageQuerySizeLod)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageQuerySizeLod)].operands.push(OperandId, "'Level of Detail'"); - InstructionDesc[OpImageQuerySize].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageQuerySize)].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageQueryLod].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageQueryLod)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageQueryLod)].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageQueryLevels].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageQueryLevels)].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageQuerySamples].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageQuerySamples)].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageQueryFormat].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageQueryFormat)].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageQueryOrder].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageQueryOrder)].operands.push(OperandId, "'Image'"); - InstructionDesc[OpAccessChain].operands.push(OperandId, "'Base'"); - InstructionDesc[OpAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + InstructionDesc[enumCast(Op::OpAccessChain)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpAccessChain)].operands.push(OperandVariableIds, "'Indexes'"); - InstructionDesc[OpInBoundsAccessChain].operands.push(OperandId, "'Base'"); - InstructionDesc[OpInBoundsAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + InstructionDesc[enumCast(Op::OpInBoundsAccessChain)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpInBoundsAccessChain)].operands.push(OperandVariableIds, "'Indexes'"); - InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Base'"); - InstructionDesc[OpPtrAccessChain].operands.push(OperandId, "'Element'"); - InstructionDesc[OpPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + InstructionDesc[enumCast(Op::OpPtrAccessChain)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpPtrAccessChain)].operands.push(OperandId, "'Element'"); + InstructionDesc[enumCast(Op::OpPtrAccessChain)].operands.push(OperandVariableIds, "'Indexes'"); - InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Base'"); - InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandId, "'Element'"); - InstructionDesc[OpInBoundsPtrAccessChain].operands.push(OperandVariableIds, "'Indexes'"); + InstructionDesc[enumCast(Op::OpInBoundsPtrAccessChain)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpInBoundsPtrAccessChain)].operands.push(OperandId, "'Element'"); + InstructionDesc[enumCast(Op::OpInBoundsPtrAccessChain)].operands.push(OperandVariableIds, "'Indexes'"); - InstructionDesc[OpSNegate].operands.push(OperandId, "'Operand'"); + InstructionDesc[enumCast(Op::OpSNegate)].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpFNegate].operands.push(OperandId, "'Operand'"); + InstructionDesc[enumCast(Op::OpFNegate)].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpNot].operands.push(OperandId, "'Operand'"); + InstructionDesc[enumCast(Op::OpNot)].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpAny].operands.push(OperandId, "'Vector'"); + InstructionDesc[enumCast(Op::OpAny)].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpAll].operands.push(OperandId, "'Vector'"); + InstructionDesc[enumCast(Op::OpAll)].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpConvertFToU].operands.push(OperandId, "'Float Value'"); + InstructionDesc[enumCast(Op::OpConvertFToU)].operands.push(OperandId, "'Float Value'"); - InstructionDesc[OpConvertFToS].operands.push(OperandId, "'Float Value'"); + InstructionDesc[enumCast(Op::OpConvertFToS)].operands.push(OperandId, "'Float Value'"); - InstructionDesc[OpConvertSToF].operands.push(OperandId, "'Signed Value'"); + InstructionDesc[enumCast(Op::OpConvertSToF)].operands.push(OperandId, "'Signed Value'"); - InstructionDesc[OpConvertUToF].operands.push(OperandId, "'Unsigned Value'"); + InstructionDesc[enumCast(Op::OpConvertUToF)].operands.push(OperandId, "'Unsigned Value'"); - InstructionDesc[OpUConvert].operands.push(OperandId, "'Unsigned Value'"); + InstructionDesc[enumCast(Op::OpUConvert)].operands.push(OperandId, "'Unsigned Value'"); - InstructionDesc[OpSConvert].operands.push(OperandId, "'Signed Value'"); + InstructionDesc[enumCast(Op::OpSConvert)].operands.push(OperandId, "'Signed Value'"); - InstructionDesc[OpFConvert].operands.push(OperandId, "'Float Value'"); + InstructionDesc[enumCast(Op::OpFConvert)].operands.push(OperandId, "'Float Value'"); - InstructionDesc[OpSatConvertSToU].operands.push(OperandId, "'Signed Value'"); + InstructionDesc[enumCast(Op::OpSatConvertSToU)].operands.push(OperandId, "'Signed Value'"); - InstructionDesc[OpSatConvertUToS].operands.push(OperandId, "'Unsigned Value'"); + InstructionDesc[enumCast(Op::OpSatConvertUToS)].operands.push(OperandId, "'Unsigned Value'"); - InstructionDesc[OpConvertPtrToU].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpConvertPtrToU)].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpConvertUToPtr].operands.push(OperandId, "'Integer Value'"); + InstructionDesc[enumCast(Op::OpConvertUToPtr)].operands.push(OperandId, "'Integer Value'"); - InstructionDesc[OpPtrCastToGeneric].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpPtrCastToGeneric)].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpGenericCastToPtr].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpGenericCastToPtr)].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpGenericCastToPtrExplicit].operands.push(OperandStorage, "'Storage'"); + InstructionDesc[enumCast(Op::OpGenericCastToPtrExplicit)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpGenericCastToPtrExplicit)].operands.push(OperandStorage, "'Storage'"); - InstructionDesc[OpGenericPtrMemSemantics].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpGenericPtrMemSemantics)].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpBitcast].operands.push(OperandId, "'Operand'"); + InstructionDesc[enumCast(Op::OpBitcast)].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpQuantizeToF16].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpQuantizeToF16)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpTranspose].operands.push(OperandId, "'Matrix'"); + InstructionDesc[enumCast(Op::OpTranspose)].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpCopyLogical].operands.push(OperandId, "'Operand'"); + InstructionDesc[enumCast(Op::OpCopyLogical)].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpIsNan].operands.push(OperandId, "'x'"); + InstructionDesc[enumCast(Op::OpIsNan)].operands.push(OperandId, "'x'"); - InstructionDesc[OpIsInf].operands.push(OperandId, "'x'"); + InstructionDesc[enumCast(Op::OpIsInf)].operands.push(OperandId, "'x'"); - InstructionDesc[OpIsFinite].operands.push(OperandId, "'x'"); + InstructionDesc[enumCast(Op::OpIsFinite)].operands.push(OperandId, "'x'"); - InstructionDesc[OpIsNormal].operands.push(OperandId, "'x'"); + InstructionDesc[enumCast(Op::OpIsNormal)].operands.push(OperandId, "'x'"); - InstructionDesc[OpSignBitSet].operands.push(OperandId, "'x'"); + InstructionDesc[enumCast(Op::OpSignBitSet)].operands.push(OperandId, "'x'"); - InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'x'"); - InstructionDesc[OpLessOrGreater].operands.push(OperandId, "'y'"); + InstructionDesc[enumCast(Op::OpLessOrGreater)].operands.push(OperandId, "'x'"); + InstructionDesc[enumCast(Op::OpLessOrGreater)].operands.push(OperandId, "'y'"); - InstructionDesc[OpOrdered].operands.push(OperandId, "'x'"); - InstructionDesc[OpOrdered].operands.push(OperandId, "'y'"); + InstructionDesc[enumCast(Op::OpOrdered)].operands.push(OperandId, "'x'"); + InstructionDesc[enumCast(Op::OpOrdered)].operands.push(OperandId, "'y'"); - InstructionDesc[OpUnordered].operands.push(OperandId, "'x'"); - InstructionDesc[OpUnordered].operands.push(OperandId, "'y'"); + InstructionDesc[enumCast(Op::OpUnordered)].operands.push(OperandId, "'x'"); + InstructionDesc[enumCast(Op::OpUnordered)].operands.push(OperandId, "'y'"); - InstructionDesc[OpArrayLength].operands.push(OperandId, "'Structure'"); - InstructionDesc[OpArrayLength].operands.push(OperandLiteralNumber, "'Array member'"); + InstructionDesc[enumCast(Op::OpArrayLength)].operands.push(OperandId, "'Structure'"); + InstructionDesc[enumCast(Op::OpArrayLength)].operands.push(OperandLiteralNumber, "'Array member'"); - InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpIAdd].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpIAdd)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpIAdd)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFAdd].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFAdd)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFAdd)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpISub].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpISub].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpISub)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpISub)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFSub].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFSub)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFSub)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpIMul].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpIMul)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpIMul)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFMul].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFMul)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFMul)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpUDiv].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpUDiv)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpUDiv)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSDiv].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpSDiv)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpSDiv)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFDiv].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFDiv)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFDiv)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpUMod].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpUMod)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpUMod)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSRem].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpSRem)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpSRem)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSMod].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpSMod)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpSMod)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFRem].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFRem)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFRem)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFMod].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFMod)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFMod)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpVectorTimesScalar].operands.push(OperandId, "'Scalar'"); + InstructionDesc[enumCast(Op::OpVectorTimesScalar)].operands.push(OperandId, "'Vector'"); + InstructionDesc[enumCast(Op::OpVectorTimesScalar)].operands.push(OperandId, "'Scalar'"); - InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpMatrixTimesScalar].operands.push(OperandId, "'Scalar'"); + InstructionDesc[enumCast(Op::OpMatrixTimesScalar)].operands.push(OperandId, "'Matrix'"); + InstructionDesc[enumCast(Op::OpMatrixTimesScalar)].operands.push(OperandId, "'Scalar'"); - InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpVectorTimesMatrix].operands.push(OperandId, "'Matrix'"); + InstructionDesc[enumCast(Op::OpVectorTimesMatrix)].operands.push(OperandId, "'Vector'"); + InstructionDesc[enumCast(Op::OpVectorTimesMatrix)].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpMatrixTimesVector].operands.push(OperandId, "'Vector'"); + InstructionDesc[enumCast(Op::OpMatrixTimesVector)].operands.push(OperandId, "'Matrix'"); + InstructionDesc[enumCast(Op::OpMatrixTimesVector)].operands.push(OperandId, "'Vector'"); - InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'LeftMatrix'"); - InstructionDesc[OpMatrixTimesMatrix].operands.push(OperandId, "'RightMatrix'"); + InstructionDesc[enumCast(Op::OpMatrixTimesMatrix)].operands.push(OperandId, "'LeftMatrix'"); + InstructionDesc[enumCast(Op::OpMatrixTimesMatrix)].operands.push(OperandId, "'RightMatrix'"); - InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 1'"); - InstructionDesc[OpOuterProduct].operands.push(OperandId, "'Vector 2'"); + InstructionDesc[enumCast(Op::OpOuterProduct)].operands.push(OperandId, "'Vector 1'"); + InstructionDesc[enumCast(Op::OpOuterProduct)].operands.push(OperandId, "'Vector 2'"); - InstructionDesc[OpDot].operands.push(OperandId, "'Vector 1'"); - InstructionDesc[OpDot].operands.push(OperandId, "'Vector 2'"); + InstructionDesc[enumCast(Op::OpDot)].operands.push(OperandId, "'Vector 1'"); + InstructionDesc[enumCast(Op::OpDot)].operands.push(OperandId, "'Vector 2'"); - InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpIAddCarry].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpIAddCarry)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpIAddCarry)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpISubBorrow].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpISubBorrow)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpISubBorrow)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpUMulExtended].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpUMulExtended)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpUMulExtended)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSMulExtended].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpSMulExtended)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpSMulExtended)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Base'"); - InstructionDesc[OpShiftRightLogical].operands.push(OperandId, "'Shift'"); + InstructionDesc[enumCast(Op::OpShiftRightLogical)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpShiftRightLogical)].operands.push(OperandId, "'Shift'"); - InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Base'"); - InstructionDesc[OpShiftRightArithmetic].operands.push(OperandId, "'Shift'"); + InstructionDesc[enumCast(Op::OpShiftRightArithmetic)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpShiftRightArithmetic)].operands.push(OperandId, "'Shift'"); - InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Base'"); - InstructionDesc[OpShiftLeftLogical].operands.push(OperandId, "'Shift'"); + InstructionDesc[enumCast(Op::OpShiftLeftLogical)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpShiftLeftLogical)].operands.push(OperandId, "'Shift'"); - InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpLogicalOr].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpLogicalOr)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpLogicalOr)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpLogicalAnd].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpLogicalAnd)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpLogicalAnd)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpLogicalEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpLogicalEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpLogicalEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpLogicalNotEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpLogicalNotEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpLogicalNotEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpLogicalNot].operands.push(OperandId, "'Operand'"); + InstructionDesc[enumCast(Op::OpLogicalNot)].operands.push(OperandId, "'Operand'"); - InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpBitwiseOr].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpBitwiseOr)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpBitwiseOr)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpBitwiseXor].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpBitwiseXor)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpBitwiseXor)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpBitwiseAnd].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpBitwiseAnd)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpBitwiseAnd)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Base'"); - InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Insert'"); - InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Offset'"); - InstructionDesc[OpBitFieldInsert].operands.push(OperandId, "'Count'"); + InstructionDesc[enumCast(Op::OpBitFieldInsert)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpBitFieldInsert)].operands.push(OperandId, "'Insert'"); + InstructionDesc[enumCast(Op::OpBitFieldInsert)].operands.push(OperandId, "'Offset'"); + InstructionDesc[enumCast(Op::OpBitFieldInsert)].operands.push(OperandId, "'Count'"); - InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Base'"); - InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Offset'"); - InstructionDesc[OpBitFieldSExtract].operands.push(OperandId, "'Count'"); + InstructionDesc[enumCast(Op::OpBitFieldSExtract)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpBitFieldSExtract)].operands.push(OperandId, "'Offset'"); + InstructionDesc[enumCast(Op::OpBitFieldSExtract)].operands.push(OperandId, "'Count'"); - InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Base'"); - InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Offset'"); - InstructionDesc[OpBitFieldUExtract].operands.push(OperandId, "'Count'"); + InstructionDesc[enumCast(Op::OpBitFieldUExtract)].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpBitFieldUExtract)].operands.push(OperandId, "'Offset'"); + InstructionDesc[enumCast(Op::OpBitFieldUExtract)].operands.push(OperandId, "'Count'"); - InstructionDesc[OpBitReverse].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpBitReverse)].operands.push(OperandId, "'Base'"); - InstructionDesc[OpBitCount].operands.push(OperandId, "'Base'"); + InstructionDesc[enumCast(Op::OpBitCount)].operands.push(OperandId, "'Base'"); - InstructionDesc[OpSelect].operands.push(OperandId, "'Condition'"); - InstructionDesc[OpSelect].operands.push(OperandId, "'Object 1'"); - InstructionDesc[OpSelect].operands.push(OperandId, "'Object 2'"); + InstructionDesc[enumCast(Op::OpSelect)].operands.push(OperandId, "'Condition'"); + InstructionDesc[enumCast(Op::OpSelect)].operands.push(OperandId, "'Object 1'"); + InstructionDesc[enumCast(Op::OpSelect)].operands.push(OperandId, "'Object 2'"); - InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpIEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpIEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpIEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFOrdEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFOrdEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFUnordEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFUnordEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpINotEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpINotEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpINotEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdNotEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFOrdNotEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFOrdNotEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordNotEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFUnordNotEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFUnordNotEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpULessThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpULessThan)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpULessThan)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSLessThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpSLessThan)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpSLessThan)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdLessThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFOrdLessThan)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFOrdLessThan)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordLessThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFUnordLessThan)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFUnordLessThan)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpUGreaterThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpUGreaterThan)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpUGreaterThan)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSGreaterThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpSGreaterThan)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpSGreaterThan)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdGreaterThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFOrdGreaterThan)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFOrdGreaterThan)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordGreaterThan].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFUnordGreaterThan)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFUnordGreaterThan)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpULessThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpULessThanEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpULessThanEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSLessThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpSLessThanEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpSLessThanEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdLessThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFOrdLessThanEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFOrdLessThanEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordLessThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFUnordLessThanEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFUnordLessThanEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpUGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpUGreaterThanEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpUGreaterThanEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpSGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpSGreaterThanEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpSGreaterThanEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFOrdGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFOrdGreaterThanEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFOrdGreaterThanEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 1'"); - InstructionDesc[OpFUnordGreaterThanEqual].operands.push(OperandId, "'Operand 2'"); + InstructionDesc[enumCast(Op::OpFUnordGreaterThanEqual)].operands.push(OperandId, "'Operand 1'"); + InstructionDesc[enumCast(Op::OpFUnordGreaterThanEqual)].operands.push(OperandId, "'Operand 2'"); - InstructionDesc[OpDPdx].operands.push(OperandId, "'P'"); + InstructionDesc[enumCast(Op::OpDPdx)].operands.push(OperandId, "'P'"); - InstructionDesc[OpDPdy].operands.push(OperandId, "'P'"); + InstructionDesc[enumCast(Op::OpDPdy)].operands.push(OperandId, "'P'"); - InstructionDesc[OpFwidth].operands.push(OperandId, "'P'"); + InstructionDesc[enumCast(Op::OpFwidth)].operands.push(OperandId, "'P'"); - InstructionDesc[OpDPdxFine].operands.push(OperandId, "'P'"); + InstructionDesc[enumCast(Op::OpDPdxFine)].operands.push(OperandId, "'P'"); - InstructionDesc[OpDPdyFine].operands.push(OperandId, "'P'"); + InstructionDesc[enumCast(Op::OpDPdyFine)].operands.push(OperandId, "'P'"); - InstructionDesc[OpFwidthFine].operands.push(OperandId, "'P'"); + InstructionDesc[enumCast(Op::OpFwidthFine)].operands.push(OperandId, "'P'"); - InstructionDesc[OpDPdxCoarse].operands.push(OperandId, "'P'"); + InstructionDesc[enumCast(Op::OpDPdxCoarse)].operands.push(OperandId, "'P'"); - InstructionDesc[OpDPdyCoarse].operands.push(OperandId, "'P'"); + InstructionDesc[enumCast(Op::OpDPdyCoarse)].operands.push(OperandId, "'P'"); - InstructionDesc[OpFwidthCoarse].operands.push(OperandId, "'P'"); + InstructionDesc[enumCast(Op::OpFwidthCoarse)].operands.push(OperandId, "'P'"); - InstructionDesc[OpEmitStreamVertex].operands.push(OperandId, "'Stream'"); + InstructionDesc[enumCast(Op::OpEmitStreamVertex)].operands.push(OperandId, "'Stream'"); - InstructionDesc[OpEndStreamPrimitive].operands.push(OperandId, "'Stream'"); + InstructionDesc[enumCast(Op::OpEndStreamPrimitive)].operands.push(OperandId, "'Stream'"); - InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpControlBarrier].operands.push(OperandScope, "'Memory'"); - InstructionDesc[OpControlBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpControlBarrier)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpControlBarrier)].operands.push(OperandScope, "'Memory'"); + InstructionDesc[enumCast(Op::OpControlBarrier)].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpMemoryBarrier].operands.push(OperandScope, "'Memory'"); - InstructionDesc[OpMemoryBarrier].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpMemoryBarrier)].operands.push(OperandScope, "'Memory'"); + InstructionDesc[enumCast(Op::OpMemoryBarrier)].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Image'"); - InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageTexelPointer].operands.push(OperandId, "'Sample'"); + InstructionDesc[enumCast(Op::OpImageTexelPointer)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpImageTexelPointer)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageTexelPointer)].operands.push(OperandId, "'Sample'"); - InstructionDesc[OpAtomicLoad].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicLoad].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicLoad].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicLoad)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicLoad)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicLoad)].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicStore].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicStore].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicStore].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicStore)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicStore)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicStore)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicStore)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicExchange].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicExchange].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicExchange].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicExchange)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicExchange)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicExchange)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicExchange)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Equal'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandMemorySemantics, "'Unequal'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicCompareExchange].operands.push(OperandId, "'Comparator'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandMemorySemantics, "'Equal'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandMemorySemantics, "'Unequal'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchange)].operands.push(OperandId, "'Comparator'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Equal'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandMemorySemantics, "'Unequal'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicCompareExchangeWeak].operands.push(OperandId, "'Comparator'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandMemorySemantics, "'Equal'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandMemorySemantics, "'Unequal'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicCompareExchangeWeak)].operands.push(OperandId, "'Comparator'"); - InstructionDesc[OpAtomicIIncrement].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicIIncrement].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicIIncrement].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicIIncrement)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicIIncrement)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicIIncrement)].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicIDecrement].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicIDecrement].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicIDecrement].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicIDecrement)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicIDecrement)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicIDecrement)].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicIAdd].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicIAdd].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicIAdd].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicIAdd)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicIAdd)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicIAdd)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicIAdd)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicFAddEXT].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicFAddEXT].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicFAddEXT)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicFAddEXT)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicFAddEXT)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicFAddEXT)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAssumeTrueKHR].operands.push(OperandId, "'Condition'"); + InstructionDesc[enumCast(Op::OpAssumeTrueKHR)].operands.push(OperandId, "'Condition'"); - InstructionDesc[OpExpectKHR].operands.push(OperandId, "'Value'"); - InstructionDesc[OpExpectKHR].operands.push(OperandId, "'ExpectedValue'"); + InstructionDesc[enumCast(Op::OpExpectKHR)].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpExpectKHR)].operands.push(OperandId, "'ExpectedValue'"); - InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicISub)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicISub)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicISub)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicISub)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicUMin].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicUMin].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicUMin].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicUMin)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicUMin)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicUMin)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicUMin)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicUMax].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicUMax].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicUMax].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicUMax)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicUMax)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicUMax)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicUMax)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicSMin].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicSMin].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicSMin].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicSMin)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicSMin)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicSMin)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicSMin)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicSMax].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicSMax)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicSMax)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicSMax)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicSMax)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicFMinEXT].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicFMinEXT].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpAtomicFMinEXT)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicFMinEXT)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicFMinEXT)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicFMinEXT)].operands.push(OperandId, "'Value'"); - InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicOr].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicOr].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicOr].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicXor].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicXor].operands.push(OperandMemorySemantics, "'Semantics'"); - InstructionDesc[OpAtomicXor].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicFlagTestAndSet].operands.push(OperandMemorySemantics, "'Semantics'"); - - InstructionDesc[OpAtomicFlagClear].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpAtomicFlagClear].operands.push(OperandScope, "'Scope'"); - InstructionDesc[OpAtomicFlagClear].operands.push(OperandMemorySemantics, "'Semantics'"); - - InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Merge Block'"); - InstructionDesc[OpLoopMerge].operands.push(OperandId, "'Continue Target'"); - InstructionDesc[OpLoopMerge].operands.push(OperandLoop, ""); - InstructionDesc[OpLoopMerge].operands.push(OperandOptionalLiteral, ""); - - InstructionDesc[OpSelectionMerge].operands.push(OperandId, "'Merge Block'"); - InstructionDesc[OpSelectionMerge].operands.push(OperandSelect, ""); - - InstructionDesc[OpBranch].operands.push(OperandId, "'Target Label'"); - - InstructionDesc[OpBranchConditional].operands.push(OperandId, "'Condition'"); - InstructionDesc[OpBranchConditional].operands.push(OperandId, "'True Label'"); - InstructionDesc[OpBranchConditional].operands.push(OperandId, "'False Label'"); - InstructionDesc[OpBranchConditional].operands.push(OperandVariableLiterals, "'Branch weights'"); - - InstructionDesc[OpSwitch].operands.push(OperandId, "'Selector'"); - InstructionDesc[OpSwitch].operands.push(OperandId, "'Default'"); - InstructionDesc[OpSwitch].operands.push(OperandVariableLiteralId, "'Target'"); - - - InstructionDesc[OpReturnValue].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpLifetimeStart].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpLifetimeStart].operands.push(OperandLiteralNumber, "'Size'"); - - InstructionDesc[OpLifetimeStop].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpLifetimeStop].operands.push(OperandLiteralNumber, "'Size'"); - - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Destination'"); - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Source'"); - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Num Elements'"); - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Stride'"); - InstructionDesc[OpGroupAsyncCopy].operands.push(OperandId, "'Event'"); - - InstructionDesc[OpGroupWaitEvents].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Num Events'"); - InstructionDesc[OpGroupWaitEvents].operands.push(OperandId, "'Events List'"); - - InstructionDesc[OpGroupAll].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupAll].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpGroupAny].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupAny].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpGroupBroadcast].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'Value'"); - InstructionDesc[OpGroupBroadcast].operands.push(OperandId, "'LocalId'"); - - InstructionDesc[OpGroupIAdd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupIAdd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupIAdd].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupFAdd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFAdd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFAdd].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupUMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupUMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupUMin].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupSMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupSMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupSMin].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupFMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFMin].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupUMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupUMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupUMax].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupSMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupSMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupSMax].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupFMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFMax].operands.push(OperandId, "X"); - - InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpReadPipe].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpReadPipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpWritePipe].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpWritePipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Index'"); - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpReservedReadPipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Index'"); - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpReservedWritePipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Num Packets'"); - InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Num Packets'"); - InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpCommitReadPipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpCommitWritePipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpIsValidReserveId].operands.push(OperandId, "'Reserve Id'"); - - InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGetNumPipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGetMaxPipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Num Packets'"); - InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGroupReserveReadPipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Num Packets'"); - InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGroupReserveWritePipePackets].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGroupCommitReadPipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Pipe'"); - InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Reserve Id'"); - InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Size'"); - InstructionDesc[OpGroupCommitWritePipe].operands.push(OperandId, "'Packet Alignment'"); - - InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkSize'"); - InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'LocalWorkSize'"); - InstructionDesc[OpBuildNDRange].operands.push(OperandId, "'GlobalWorkOffset'"); - - InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Event'"); - InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Profiling Info'"); - InstructionDesc[OpCaptureEventProfilingInfo].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Event'"); - InstructionDesc[OpSetUserEventStatus].operands.push(OperandId, "'Status'"); - - InstructionDesc[OpIsValidEvent].operands.push(OperandId, "'Event'"); - - InstructionDesc[OpRetainEvent].operands.push(OperandId, "'Event'"); - - InstructionDesc[OpReleaseEvent].operands.push(OperandId, "'Event'"); - - InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Invoke'"); - InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param'"); - InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Size'"); - InstructionDesc[OpGetKernelWorkGroupSize].operands.push(OperandId, "'Param Align'"); - - InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Invoke'"); - InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param'"); - InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Size'"); - InstructionDesc[OpGetKernelPreferredWorkGroupSizeMultiple].operands.push(OperandId, "'Param Align'"); - - InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'ND Range'"); - InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Invoke'"); - InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param'"); - InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Size'"); - InstructionDesc[OpGetKernelNDrangeSubGroupCount].operands.push(OperandId, "'Param Align'"); - - InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'ND Range'"); - InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Invoke'"); - InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param'"); - InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Size'"); - InstructionDesc[OpGetKernelNDrangeMaxSubGroupSize].operands.push(OperandId, "'Param Align'"); - - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Queue'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Flags'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'ND Range'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Num Events'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Wait Events'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Ret Event'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Invoke'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Size'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandId, "'Param Align'"); - InstructionDesc[OpEnqueueKernel].operands.push(OperandVariableIds, "'Local Size'"); - - InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Queue'"); - InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Num Events'"); - InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Wait Events'"); - InstructionDesc[OpEnqueueMarker].operands.push(OperandId, "'Ret Event'"); - - InstructionDesc[OpGroupNonUniformElect].operands.push(OperandScope, "'Execution'"); - - InstructionDesc[OpGroupNonUniformAll].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformAll].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformAny].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformAny].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformAllEqual].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformBroadcast].operands.push(OperandId, "ID"); - - InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBroadcastFirst].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBallot].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformInverseBallot].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformBallotBitExtract].operands.push(OperandId, "Bit"); - - InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformBallotBitCount].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBallotFindLSB].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBallotFindMSB].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformShuffle].operands.push(OperandId, "'Id'"); - - InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformShuffleXor].operands.push(OperandId, "Mask"); - - InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformShuffleUp].operands.push(OperandId, "Offset"); - - InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformShuffleDown].operands.push(OperandId, "Offset"); - - InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformIAdd].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformFAdd].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformIMul].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformFMul].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformSMin].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformUMin].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformFMin].operands.push(OperandId, "'ClusterSize'", true); + InstructionDesc[enumCast(Op::OpAtomicFMaxEXT)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicFMaxEXT)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicFMaxEXT)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicFMaxEXT)].operands.push(OperandId, "'Value'"); + + InstructionDesc[enumCast(Op::OpAtomicAnd)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicAnd)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicAnd)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicAnd)].operands.push(OperandId, "'Value'"); + + InstructionDesc[enumCast(Op::OpAtomicOr)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicOr)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicOr)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicOr)].operands.push(OperandId, "'Value'"); + + InstructionDesc[enumCast(Op::OpAtomicXor)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicXor)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicXor)].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[enumCast(Op::OpAtomicXor)].operands.push(OperandId, "'Value'"); + + InstructionDesc[enumCast(Op::OpAtomicFlagTestAndSet)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicFlagTestAndSet)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicFlagTestAndSet)].operands.push(OperandMemorySemantics, "'Semantics'"); + + InstructionDesc[enumCast(Op::OpAtomicFlagClear)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpAtomicFlagClear)].operands.push(OperandScope, "'Scope'"); + InstructionDesc[enumCast(Op::OpAtomicFlagClear)].operands.push(OperandMemorySemantics, "'Semantics'"); + + InstructionDesc[enumCast(Op::OpLoopMerge)].operands.push(OperandId, "'Merge Block'"); + InstructionDesc[enumCast(Op::OpLoopMerge)].operands.push(OperandId, "'Continue Target'"); + InstructionDesc[enumCast(Op::OpLoopMerge)].operands.push(OperandLoop, ""); + InstructionDesc[enumCast(Op::OpLoopMerge)].operands.push(OperandOptionalLiteral, ""); + + InstructionDesc[enumCast(Op::OpSelectionMerge)].operands.push(OperandId, "'Merge Block'"); + InstructionDesc[enumCast(Op::OpSelectionMerge)].operands.push(OperandSelect, ""); + + InstructionDesc[enumCast(Op::OpBranch)].operands.push(OperandId, "'Target Label'"); + + InstructionDesc[enumCast(Op::OpBranchConditional)].operands.push(OperandId, "'Condition'"); + InstructionDesc[enumCast(Op::OpBranchConditional)].operands.push(OperandId, "'True Label'"); + InstructionDesc[enumCast(Op::OpBranchConditional)].operands.push(OperandId, "'False Label'"); + InstructionDesc[enumCast(Op::OpBranchConditional)].operands.push(OperandVariableLiterals, "'Branch weights'"); + + InstructionDesc[enumCast(Op::OpSwitch)].operands.push(OperandId, "'Selector'"); + InstructionDesc[enumCast(Op::OpSwitch)].operands.push(OperandId, "'Default'"); + InstructionDesc[enumCast(Op::OpSwitch)].operands.push(OperandVariableLiteralId, "'Target'"); + + + InstructionDesc[enumCast(Op::OpReturnValue)].operands.push(OperandId, "'Value'"); + + InstructionDesc[enumCast(Op::OpLifetimeStart)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpLifetimeStart)].operands.push(OperandLiteralNumber, "'Size'"); + + InstructionDesc[enumCast(Op::OpLifetimeStop)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpLifetimeStop)].operands.push(OperandLiteralNumber, "'Size'"); + + InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandId, "'Destination'"); + InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandId, "'Source'"); + InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandId, "'Num Elements'"); + InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandId, "'Stride'"); + InstructionDesc[enumCast(Op::OpGroupAsyncCopy)].operands.push(OperandId, "'Event'"); + + InstructionDesc[enumCast(Op::OpGroupWaitEvents)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupWaitEvents)].operands.push(OperandId, "'Num Events'"); + InstructionDesc[enumCast(Op::OpGroupWaitEvents)].operands.push(OperandId, "'Events List'"); + + InstructionDesc[enumCast(Op::OpGroupAll)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupAll)].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[enumCast(Op::OpGroupAny)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupAny)].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[enumCast(Op::OpGroupBroadcast)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupBroadcast)].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpGroupBroadcast)].operands.push(OperandId, "'LocalId'"); + + InstructionDesc[enumCast(Op::OpGroupIAdd)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupIAdd)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupIAdd)].operands.push(OperandId, "'X'"); + + InstructionDesc[enumCast(Op::OpGroupFAdd)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupFAdd)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupFAdd)].operands.push(OperandId, "'X'"); + + InstructionDesc[enumCast(Op::OpGroupUMin)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupUMin)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupUMin)].operands.push(OperandId, "'X'"); + + InstructionDesc[enumCast(Op::OpGroupSMin)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupSMin)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupSMin)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupFMin)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupFMin)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupFMin)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupUMax)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupUMax)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupUMax)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupSMax)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupSMax)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupSMax)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupFMax)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupFMax)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupFMax)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpReadPipe)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpReadPipe)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpReadPipe)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpReadPipe)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpWritePipe)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpWritePipe)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpWritePipe)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpWritePipe)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Index'"); + InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpReservedReadPipe)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Index'"); + InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpReservedWritePipe)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpReserveReadPipePackets)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpReserveReadPipePackets)].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[enumCast(Op::OpReserveReadPipePackets)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpReserveReadPipePackets)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpReserveWritePipePackets)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpReserveWritePipePackets)].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[enumCast(Op::OpReserveWritePipePackets)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpReserveWritePipePackets)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpCommitReadPipe)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpCommitReadPipe)].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[enumCast(Op::OpCommitReadPipe)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpCommitReadPipe)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpCommitWritePipe)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpCommitWritePipe)].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[enumCast(Op::OpCommitWritePipe)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpCommitWritePipe)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpIsValidReserveId)].operands.push(OperandId, "'Reserve Id'"); + + InstructionDesc[enumCast(Op::OpGetNumPipePackets)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpGetNumPipePackets)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpGetNumPipePackets)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpGetMaxPipePackets)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpGetMaxPipePackets)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpGetMaxPipePackets)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpGroupReserveReadPipePackets)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupReserveReadPipePackets)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpGroupReserveReadPipePackets)].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[enumCast(Op::OpGroupReserveReadPipePackets)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpGroupReserveReadPipePackets)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpGroupReserveWritePipePackets)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupReserveWritePipePackets)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpGroupReserveWritePipePackets)].operands.push(OperandId, "'Num Packets'"); + InstructionDesc[enumCast(Op::OpGroupReserveWritePipePackets)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpGroupReserveWritePipePackets)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpGroupCommitReadPipe)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].operands.push(OperandId, "'Pipe'"); + InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].operands.push(OperandId, "'Reserve Id'"); + InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].operands.push(OperandId, "'Packet Size'"); + InstructionDesc[enumCast(Op::OpGroupCommitWritePipe)].operands.push(OperandId, "'Packet Alignment'"); + + InstructionDesc[enumCast(Op::OpBuildNDRange)].operands.push(OperandId, "'GlobalWorkSize'"); + InstructionDesc[enumCast(Op::OpBuildNDRange)].operands.push(OperandId, "'LocalWorkSize'"); + InstructionDesc[enumCast(Op::OpBuildNDRange)].operands.push(OperandId, "'GlobalWorkOffset'"); + + InstructionDesc[enumCast(Op::OpCaptureEventProfilingInfo)].operands.push(OperandId, "'Event'"); + InstructionDesc[enumCast(Op::OpCaptureEventProfilingInfo)].operands.push(OperandId, "'Profiling Info'"); + InstructionDesc[enumCast(Op::OpCaptureEventProfilingInfo)].operands.push(OperandId, "'Value'"); + + InstructionDesc[enumCast(Op::OpSetUserEventStatus)].operands.push(OperandId, "'Event'"); + InstructionDesc[enumCast(Op::OpSetUserEventStatus)].operands.push(OperandId, "'Status'"); + + InstructionDesc[enumCast(Op::OpIsValidEvent)].operands.push(OperandId, "'Event'"); + + InstructionDesc[enumCast(Op::OpRetainEvent)].operands.push(OperandId, "'Event'"); + + InstructionDesc[enumCast(Op::OpReleaseEvent)].operands.push(OperandId, "'Event'"); + + InstructionDesc[enumCast(Op::OpGetKernelWorkGroupSize)].operands.push(OperandId, "'Invoke'"); + InstructionDesc[enumCast(Op::OpGetKernelWorkGroupSize)].operands.push(OperandId, "'Param'"); + InstructionDesc[enumCast(Op::OpGetKernelWorkGroupSize)].operands.push(OperandId, "'Param Size'"); + InstructionDesc[enumCast(Op::OpGetKernelWorkGroupSize)].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[enumCast(Op::OpGetKernelPreferredWorkGroupSizeMultiple)].operands.push(OperandId, "'Invoke'"); + InstructionDesc[enumCast(Op::OpGetKernelPreferredWorkGroupSizeMultiple)].operands.push(OperandId, "'Param'"); + InstructionDesc[enumCast(Op::OpGetKernelPreferredWorkGroupSizeMultiple)].operands.push(OperandId, "'Param Size'"); + InstructionDesc[enumCast(Op::OpGetKernelPreferredWorkGroupSizeMultiple)].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[enumCast(Op::OpGetKernelNDrangeSubGroupCount)].operands.push(OperandId, "'ND Range'"); + InstructionDesc[enumCast(Op::OpGetKernelNDrangeSubGroupCount)].operands.push(OperandId, "'Invoke'"); + InstructionDesc[enumCast(Op::OpGetKernelNDrangeSubGroupCount)].operands.push(OperandId, "'Param'"); + InstructionDesc[enumCast(Op::OpGetKernelNDrangeSubGroupCount)].operands.push(OperandId, "'Param Size'"); + InstructionDesc[enumCast(Op::OpGetKernelNDrangeSubGroupCount)].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[enumCast(Op::OpGetKernelNDrangeMaxSubGroupSize)].operands.push(OperandId, "'ND Range'"); + InstructionDesc[enumCast(Op::OpGetKernelNDrangeMaxSubGroupSize)].operands.push(OperandId, "'Invoke'"); + InstructionDesc[enumCast(Op::OpGetKernelNDrangeMaxSubGroupSize)].operands.push(OperandId, "'Param'"); + InstructionDesc[enumCast(Op::OpGetKernelNDrangeMaxSubGroupSize)].operands.push(OperandId, "'Param Size'"); + InstructionDesc[enumCast(Op::OpGetKernelNDrangeMaxSubGroupSize)].operands.push(OperandId, "'Param Align'"); + + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Queue'"); + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Flags'"); + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'ND Range'"); + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Num Events'"); + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Wait Events'"); + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Ret Event'"); + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Invoke'"); + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Param'"); + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Param Size'"); + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandId, "'Param Align'"); + InstructionDesc[enumCast(Op::OpEnqueueKernel)].operands.push(OperandVariableIds, "'Local Size'"); + + InstructionDesc[enumCast(Op::OpEnqueueMarker)].operands.push(OperandId, "'Queue'"); + InstructionDesc[enumCast(Op::OpEnqueueMarker)].operands.push(OperandId, "'Num Events'"); + InstructionDesc[enumCast(Op::OpEnqueueMarker)].operands.push(OperandId, "'Wait Events'"); + InstructionDesc[enumCast(Op::OpEnqueueMarker)].operands.push(OperandId, "'Ret Event'"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformElect)].operands.push(OperandScope, "'Execution'"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformAll)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformAll)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformAny)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformAny)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformAllEqual)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformAllEqual)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformBroadcast)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBroadcast)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBroadcast)].operands.push(OperandId, "ID"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformBroadcastFirst)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBroadcastFirst)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformBallot)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBallot)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformInverseBallot)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformInverseBallot)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitExtract)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitExtract)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitExtract)].operands.push(OperandId, "Bit"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitCount)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitCount)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBallotBitCount)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformBallotFindLSB)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBallotFindLSB)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformBallotFindMSB)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBallotFindMSB)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffle)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffle)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffle)].operands.push(OperandId, "'Id'"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleXor)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleXor)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleXor)].operands.push(OperandId, "Mask"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleUp)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleUp)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleUp)].operands.push(OperandId, "Offset"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleDown)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleDown)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformShuffleDown)].operands.push(OperandId, "Offset"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformIAdd)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformIAdd)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformIAdd)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformIAdd)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpGroupNonUniformFAdd)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFAdd)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFAdd)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFAdd)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpGroupNonUniformIMul)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformIMul)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformIMul)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformIMul)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpGroupNonUniformFMul)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFMul)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFMul)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFMul)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpGroupNonUniformSMin)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformSMin)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformSMin)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformSMin)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpGroupNonUniformUMin)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformUMin)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformUMin)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformUMin)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpGroupNonUniformFMin)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFMin)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFMin)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFMin)].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformSMax].operands.push(OperandId, "'ClusterSize'", true); + InstructionDesc[enumCast(Op::OpGroupNonUniformSMax)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformSMax)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformSMax)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformSMax)].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformUMax].operands.push(OperandId, "'ClusterSize'", true); + InstructionDesc[enumCast(Op::OpGroupNonUniformUMax)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformUMax)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformUMax)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformUMax)].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformFMax].operands.push(OperandId, "'ClusterSize'", true); + InstructionDesc[enumCast(Op::OpGroupNonUniformFMax)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFMax)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFMax)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformFMax)].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformBitwiseAnd].operands.push(OperandId, "'ClusterSize'", true); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseAnd)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseAnd)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseAnd)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseAnd)].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformBitwiseOr].operands.push(OperandId, "'ClusterSize'", true); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseOr)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseOr)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseOr)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseOr)].operands.push(OperandId, "'ClusterSize'", true); - InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformBitwiseXor].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformLogicalAnd].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformLogicalOr].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformLogicalXor].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformQuadBroadcast].operands.push(OperandId, "'Id'"); - - InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "'Direction'"); - - InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpSubgroupFirstInvocationKHR].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpSubgroupAnyKHR].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpSubgroupAllKHR].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpSubgroupAllKHR].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'"); - - InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'X'"); - InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'Delta'"); - InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'ClusterSize'", true); - - InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'"); - InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'"); - - InstructionDesc[OpModuleProcessed].operands.push(OperandLiteralString, "'process'"); - - InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupIAddNonUniformAMD].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFAddNonUniformAMD].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupUMinNonUniformAMD].operands.push(OperandId, "'X'"); - - InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupSMinNonUniformAMD].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFMinNonUniformAMD].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupUMaxNonUniformAMD].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupSMaxNonUniformAMD].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandScope, "'Execution'"); - InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandGroupOperation, "'Operation'"); - InstructionDesc[OpGroupFMaxNonUniformAMD].operands.push(OperandId, "X"); - - InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Image'"); - InstructionDesc[OpFragmentMaskFetchAMD].operands.push(OperandId, "'Coordinate'"); - - InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Image'"); - InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpFragmentFetchAMD].operands.push(OperandId, "'Fragment Index'"); - - InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X"); - - InstructionDesc[OpGroupNonUniformQuadAllKHR].operands.push(OperandId, "'Predicate'"); - InstructionDesc[OpGroupNonUniformQuadAnyKHR].operands.push(OperandId, "'Predicate'"); - InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false); - - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'"); - InstructionDesc[OpTraceNV].setResultAndType(false, false); - - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Flags'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Cull Mask'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Miss Index'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Origin'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Direction'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Time'"); - InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Payload'"); - InstructionDesc[OpTraceRayMotionNV].setResultAndType(false, false); - - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Stride'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Miss Index'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Origin'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Direction'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Payload'"); - InstructionDesc[OpTraceRayKHR].setResultAndType(false, false); - - InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'"); - InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'"); - - InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false); - - InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false); - - InstructionDesc[OpTerminateRayNV].setResultAndType(false, false); - - InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false); - - InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index"); - InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID"); - InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false); - - InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index"); - InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData"); - InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false); - - InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value"); - InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseXor)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseXor)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseXor)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformBitwiseXor)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalAnd)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalAnd)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalAnd)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalAnd)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalOr)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalOr)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalOr)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalOr)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalXor)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalXor)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalXor)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformLogicalXor)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpGroupNonUniformQuadBroadcast)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformQuadBroadcast)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformQuadBroadcast)].operands.push(OperandId, "'Id'"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformQuadSwap)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformQuadSwap)].operands.push(OperandId, "X"); + InstructionDesc[enumCast(Op::OpGroupNonUniformQuadSwap)].operands.push(OperandId, "'Direction'"); + + InstructionDesc[enumCast(Op::OpSubgroupBallotKHR)].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[enumCast(Op::OpSubgroupFirstInvocationKHR)].operands.push(OperandId, "'Value'"); + + InstructionDesc[enumCast(Op::OpSubgroupAnyKHR)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpSubgroupAnyKHR)].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[enumCast(Op::OpSubgroupAllKHR)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpSubgroupAllKHR)].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[enumCast(Op::OpSubgroupAllEqualKHR)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpSubgroupAllEqualKHR)].operands.push(OperandId, "'Predicate'"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformRotateKHR)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformRotateKHR)].operands.push(OperandId, "'X'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformRotateKHR)].operands.push(OperandId, "'Delta'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformRotateKHR)].operands.push(OperandId, "'ClusterSize'", true); + + InstructionDesc[enumCast(Op::OpSubgroupReadInvocationKHR)].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpSubgroupReadInvocationKHR)].operands.push(OperandId, "'Index'"); + + InstructionDesc[enumCast(Op::OpModuleProcessed)].operands.push(OperandLiteralString, "'process'"); + + InstructionDesc[enumCast(Op::OpGroupIAddNonUniformAMD)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupIAddNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupIAddNonUniformAMD)].operands.push(OperandId, "'X'"); + + InstructionDesc[enumCast(Op::OpGroupFAddNonUniformAMD)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupFAddNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupFAddNonUniformAMD)].operands.push(OperandId, "'X'"); + + InstructionDesc[enumCast(Op::OpGroupUMinNonUniformAMD)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupUMinNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupUMinNonUniformAMD)].operands.push(OperandId, "'X'"); + + InstructionDesc[enumCast(Op::OpGroupSMinNonUniformAMD)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupSMinNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupSMinNonUniformAMD)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupFMinNonUniformAMD)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupFMinNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupFMinNonUniformAMD)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupUMaxNonUniformAMD)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupUMaxNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupUMaxNonUniformAMD)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupSMaxNonUniformAMD)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupSMaxNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupSMaxNonUniformAMD)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupFMaxNonUniformAMD)].operands.push(OperandScope, "'Execution'"); + InstructionDesc[enumCast(Op::OpGroupFMaxNonUniformAMD)].operands.push(OperandGroupOperation, "'Operation'"); + InstructionDesc[enumCast(Op::OpGroupFMaxNonUniformAMD)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpFragmentMaskFetchAMD)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpFragmentMaskFetchAMD)].operands.push(OperandId, "'Coordinate'"); + + InstructionDesc[enumCast(Op::OpFragmentFetchAMD)].operands.push(OperandId, "'Image'"); + InstructionDesc[enumCast(Op::OpFragmentFetchAMD)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpFragmentFetchAMD)].operands.push(OperandId, "'Fragment Index'"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformPartitionNV)].operands.push(OperandId, "X"); + + InstructionDesc[enumCast(Op::OpGroupNonUniformQuadAllKHR)].operands.push(OperandId, "'Predicate'"); + InstructionDesc[enumCast(Op::OpGroupNonUniformQuadAnyKHR)].operands.push(OperandId, "'Predicate'"); + InstructionDesc[enumCast(Op::OpTypeAccelerationStructureKHR)].setResultAndType(true, false); + + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Ray Flags'"); + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Cull Mask'"); + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Ray Origin'"); + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Ray Direction'"); + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpTraceNV)].operands.push(OperandId, "'Payload'"); + InstructionDesc[enumCast(Op::OpTraceNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Ray Flags'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Cull Mask'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Ray Origin'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Ray Direction'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Time'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].operands.push(OperandId, "'Payload'"); + InstructionDesc[enumCast(Op::OpTraceRayMotionNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Ray Flags'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Cull Mask'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Ray Origin'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Ray Direction'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].operands.push(OperandId, "'Payload'"); + InstructionDesc[enumCast(Op::OpTraceRayKHR)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpReportIntersectionKHR)].operands.push(OperandId, "'Hit Parameter'"); + InstructionDesc[enumCast(Op::OpReportIntersectionKHR)].operands.push(OperandId, "'Hit Kind'"); + + InstructionDesc[enumCast(Op::OpIgnoreIntersectionNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpIgnoreIntersectionKHR)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpTerminateRayNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpTerminateRayKHR)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpExecuteCallableNV)].operands.push(OperandId, "SBT Record Index"); + InstructionDesc[enumCast(Op::OpExecuteCallableNV)].operands.push(OperandId, "CallableData ID"); + InstructionDesc[enumCast(Op::OpExecuteCallableNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpExecuteCallableKHR)].operands.push(OperandId, "SBT Record Index"); + InstructionDesc[enumCast(Op::OpExecuteCallableKHR)].operands.push(OperandId, "CallableData"); + InstructionDesc[enumCast(Op::OpExecuteCallableKHR)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpConvertUToAccelerationStructureKHR)].operands.push(OperandId, "Value"); + InstructionDesc[enumCast(Op::OpConvertUToAccelerationStructureKHR)].setResultAndType(true, true); // Ray Query - InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false); - InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeAccelerationStructureKHR)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeRayQueryKHR)].setResultAndType(true, false); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayFlags'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'CullMask'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Origin'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmin'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Direction'"); - InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'Tmax'"); - InstructionDesc[OpRayQueryInitializeKHR].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'AccelerationS'"); + InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'RayFlags'"); + InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'CullMask'"); + InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'Origin'"); + InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'Tmin'"); + InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'Direction'"); + InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].operands.push(OperandId, "'Tmax'"); + InstructionDesc[enumCast(Op::OpRayQueryInitializeKHR)].setResultAndType(false, false); - InstructionDesc[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpRayQueryTerminateKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryTerminateKHR)].setResultAndType(false, false); - InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'"); - InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpRayQueryGenerateIntersectionKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGenerateIntersectionKHR)].operands.push(OperandId, "'THit'"); + InstructionDesc[enumCast(Op::OpRayQueryGenerateIntersectionKHR)].setResultAndType(false, false); - InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false); + InstructionDesc[enumCast(Op::OpRayQueryConfirmIntersectionKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryConfirmIntersectionKHR)].setResultAndType(false, false); - InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true); + InstructionDesc[enumCast(Op::OpRayQueryProceedKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryProceedKHR)].setResultAndType(true, true); - InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionTypeKHR].setResultAndType(true, true); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTypeKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTypeKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTypeKHR)].setResultAndType(true, true); - InstructionDesc[OpRayQueryGetRayTMinKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetRayTMinKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetRayFlagsKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetRayFlagsKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionTKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionTKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceCustomIndexKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceIdKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionGeometryIndexKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionPrimitiveIndexKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionBarycentricsKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionFrontFaceKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionCandidateAABBOpaqueKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionObjectRayDirectionKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionObjectRayOriginKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetWorldRayDirectionKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetWorldRayOriginKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetWorldRayOriginKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionObjectToWorldKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionWorldToObjectKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionTriangleVertexPositionsKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionClusterIdNV].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionClusterIdNV].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionClusterIdNV].setResultAndType(true, true); - InstructionDesc[OpRayQueryGetIntersectionSpherePositionNV].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionSpherePositionNV].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionSpherePositionNV].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionSphereRadiusNV].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionSphereRadiusNV].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionSphereRadiusNV].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionLSSHitValueNV].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionLSSHitValueNV].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionLSSHitValueNV].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionLSSPositionsNV].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionLSSPositionsNV].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionLSSPositionsNV].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionLSSRadiiNV].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionLSSRadiiNV].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryGetIntersectionLSSRadiiNV].setResultAndType(true, true); - - InstructionDesc[OpRayQueryIsSphereHitNV].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryIsSphereHitNV].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryIsSphereHitNV].setResultAndType(true, true); - - InstructionDesc[OpRayQueryIsLSSHitNV].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryIsLSSHitNV].operands.push(OperandId, "'Committed'"); - InstructionDesc[OpRayQueryIsLSSHitNV].setResultAndType(true, true); - - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Sampled Image'"); - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coordinate'"); - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Granularity'"); - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandId, "'Coarse'"); - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleFootprintNV].operands.push(OperandVariableIds, "", true); - - InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Index Offset'"); - InstructionDesc[OpWritePackedPrimitiveIndices4x8NV].operands.push(OperandId, "'Packed Indices'"); - - InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountX'"); - InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountY'"); - InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'groupCountZ'"); - InstructionDesc[OpEmitMeshTasksEXT].operands.push(OperandId, "'Payload'"); - InstructionDesc[OpEmitMeshTasksEXT].setResultAndType(false, false); - - InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'vertexCount'"); - InstructionDesc[OpSetMeshOutputsEXT].operands.push(OperandId, "'primitiveCount'"); - InstructionDesc[OpSetMeshOutputsEXT].setResultAndType(false, false); - - - InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Component Type'"); - InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Scope'"); - InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Rows'"); - InstructionDesc[OpTypeCooperativeMatrixNV].operands.push(OperandId, "'Columns'"); - - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Stride'"); - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "'Column Major'"); - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'"); - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpCooperativeMatrixLoadNV].operands.push(OperandId, "", true); - - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Object'"); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Stride'"); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "'Column Major'"); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'"); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpCooperativeMatrixStoreNV].operands.push(OperandId, "", true); - - InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'"); - InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'"); - InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'"); - - InstructionDesc[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'"); - - InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Component Type'"); - InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Scope'"); - InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Rows'"); - InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Columns'"); - InstructionDesc[OpTypeCooperativeMatrixKHR].operands.push(OperandId, "'Use'"); - - InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Memory Layout'"); - InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "'Stride'"); - InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandMemoryAccess, "'Memory Access'"); - InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpCooperativeMatrixLoadKHR].operands.push(OperandId, "", true); - - InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Object'"); - InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Memory Layout'"); - InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "'Stride'"); - InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandMemoryAccess, "'Memory Access'"); - InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpCooperativeMatrixStoreKHR].operands.push(OperandId, "", true); - - InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'A'"); - InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'B'"); - InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandId, "'C'"); - InstructionDesc[OpCooperativeMatrixMulAddKHR].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true); - - InstructionDesc[OpCooperativeMatrixLengthKHR].operands.push(OperandId, "'Type'"); - - InstructionDesc[OpTypeCooperativeVectorNV].operands.push(OperandId, "'Component Type'"); - InstructionDesc[OpTypeCooperativeVectorNV].operands.push(OperandId, "'Components'"); - - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandId, "'Input'"); - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandId, "'InputInterpretation'"); - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandId, "'MatrixOffset'"); - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandId, "'MatrixInterpretation'"); - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandId, "'M'"); - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandId, "'K'"); - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandId, "'MemoryLayout'"); - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandId, "'Transpose'"); - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandId, "'MatrixStride'", true); - InstructionDesc[OpCooperativeVectorMatrixMulNV].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true); - - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'Input'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'InputInterpretation'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'MatrixOffset'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'MatrixInterpretation'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'Bias'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'BiasOffset'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'BiasInterpretation'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'M'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'K'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'MemoryLayout'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'Transpose'"); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandId, "'MatrixStride'", true); - InstructionDesc[OpCooperativeVectorMatrixMulAddNV].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true); - - InstructionDesc[OpCooperativeVectorLoadNV].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeVectorLoadNV].operands.push(OperandId, "'Offset'"); - InstructionDesc[OpCooperativeVectorLoadNV].operands.push(OperandMemoryAccess, "'Memory Access'"); - InstructionDesc[OpCooperativeVectorLoadNV].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpCooperativeVectorLoadNV].operands.push(OperandId, "", true); - - InstructionDesc[OpCooperativeVectorStoreNV].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeVectorStoreNV].operands.push(OperandId, "'Offset'"); - InstructionDesc[OpCooperativeVectorStoreNV].operands.push(OperandId, "'Object'"); - InstructionDesc[OpCooperativeVectorStoreNV].operands.push(OperandMemoryAccess, "'Memory Access'"); - InstructionDesc[OpCooperativeVectorStoreNV].operands.push(OperandLiteralNumber, "", true); - InstructionDesc[OpCooperativeVectorStoreNV].operands.push(OperandId, "", true); - - InstructionDesc[OpCooperativeVectorOuterProductAccumulateNV].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeVectorOuterProductAccumulateNV].operands.push(OperandId, "'Offset'"); - InstructionDesc[OpCooperativeVectorOuterProductAccumulateNV].operands.push(OperandId, "'A'"); - InstructionDesc[OpCooperativeVectorOuterProductAccumulateNV].operands.push(OperandId, "'B'"); - InstructionDesc[OpCooperativeVectorOuterProductAccumulateNV].operands.push(OperandId, "'MemoryLayout'"); - InstructionDesc[OpCooperativeVectorOuterProductAccumulateNV].operands.push(OperandId, "'MatrixInterpretation'"); - InstructionDesc[OpCooperativeVectorOuterProductAccumulateNV].operands.push(OperandId, "'MatrixStride'", true); - - InstructionDesc[OpCooperativeVectorReduceSumAccumulateNV].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeVectorReduceSumAccumulateNV].operands.push(OperandId, "'Offset'"); - InstructionDesc[OpCooperativeVectorReduceSumAccumulateNV].operands.push(OperandId, "'V'"); - - InstructionDesc[OpDemoteToHelperInvocationEXT].setResultAndType(false, false); - - InstructionDesc[OpReadClockKHR].operands.push(OperandScope, "'Scope'"); - - InstructionDesc[OpTypeHitObjectNV].setResultAndType(true, false); - - InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetShaderRecordBufferHandleNV].setResultAndType(true, true); - - InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Hint'"); - InstructionDesc[OpReorderThreadWithHintNV].operands.push(OperandId, "'Bits'"); - InstructionDesc[OpReorderThreadWithHintNV].setResultAndType(false, false); - - InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Hint'"); - InstructionDesc[OpReorderThreadWithHitObjectNV].operands.push(OperandId, "'Bits'"); - InstructionDesc[OpReorderThreadWithHitObjectNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectGetCurrentTimeNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetCurrentTimeNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetHitKindNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetHitKindNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetPrimitiveIndexNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetPrimitiveIndexNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetGeometryIndexNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetGeometryIndexNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetInstanceIdNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetInstanceIdNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetInstanceCustomIndexNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetObjectRayDirectionNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetObjectRayDirectionNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetObjectRayOriginNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetObjectRayOriginNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetWorldRayDirectionNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetWorldRayDirectionNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetWorldRayOriginNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetWorldRayOriginNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetWorldToObjectNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetWorldToObjectNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetObjectToWorldNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetObjectToWorldNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetRayTMaxNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetRayTMaxNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetRayTMinNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetRayTMinNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetShaderBindingTableRecordIndexNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectIsEmptyNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectIsEmptyNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectIsHitNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectIsHitNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectIsMissNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectIsMissNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetAttributesNV].operands.push(OperandId, "'HitObjectAttribute'"); - InstructionDesc[OpHitObjectGetAttributesNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectExecuteShaderNV].operands.push(OperandId, "'Payload'"); - InstructionDesc[OpHitObjectExecuteShaderNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'InstanceId'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'PrimitiveId'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'GeometryIndex'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitKind'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Offset'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'SBT Record Stride'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Origin'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'Direction'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpHitObjectRecordHitNV].operands.push(OperandId, "'HitObject Attribute'"); - InstructionDesc[OpHitObjectRecordHitNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'InstanceId'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'PrimitiveId'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'GeometryIndex'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitKind'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Offset'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'SBT Record Stride'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Origin'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Direction'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'Current Time'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].operands.push(OperandId, "'HitObject Attribute'"); - InstructionDesc[OpHitObjectRecordHitMotionNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'InstanceId'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'PrimitiveId'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'GeometryIndex'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitKind'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'SBT Record Index'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Origin'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'Direction'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].operands.push(OperandId, "'HitObject Attribute'"); - InstructionDesc[OpHitObjectRecordHitWithIndexNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'InstanceId'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'PrimitiveId'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'GeometryIndex'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitKind'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'SBT Record Index'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Origin'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Direction'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'Current Time'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].operands.push(OperandId, "'HitObject Attribute'"); - InstructionDesc[OpHitObjectRecordHitWithIndexMotionNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'SBT Index'"); - InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Origin'"); - InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'Direction'"); - InstructionDesc[OpHitObjectRecordMissNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpHitObjectRecordMissNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'SBT Index'"); - InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Origin'"); - InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Direction'"); - InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpHitObjectRecordMissMotionNV].operands.push(OperandId, "'Current Time'"); - InstructionDesc[OpHitObjectRecordMissMotionNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectRecordEmptyNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectRecordEmptyNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'RayFlags'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Cullmask'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Offset'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'SBT Record Stride'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Miss Index'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Origin'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Direction'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpHitObjectTraceRayNV].operands.push(OperandId, "'Payload'"); - InstructionDesc[OpHitObjectTraceRayNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'RayFlags'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Cullmask'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Miss Index'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Origin'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMin'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Direction'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'TMax'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Time'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].operands.push(OperandId, "'Payload'"); - InstructionDesc[OpHitObjectTraceRayMotionNV].setResultAndType(false, false); - - InstructionDesc[OpHitObjectGetClusterIdNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetClusterIdNV].setResultAndType(true, true); - InstructionDesc[OpHitObjectGetSpherePositionNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetSpherePositionNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetSphereRadiusNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetSphereRadiusNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetLSSPositionsNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetLSSPositionsNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectGetLSSRadiiNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectGetLSSRadiiNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectIsSphereHitNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectIsSphereHitNV].setResultAndType(true, true); - - InstructionDesc[OpHitObjectIsLSSHitNV].operands.push(OperandId, "'HitObject'"); - InstructionDesc[OpHitObjectIsLSSHitNV].setResultAndType(true, true); - - InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Instance ID'"); - InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Geometry Index'"); - InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Primitive Index'"); - InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].operands.push(OperandId, "'Barycentrics'"); - InstructionDesc[OpFetchMicroTriangleVertexBarycentricNV].setResultAndType(true, true); - - InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Acceleration Structure'"); - InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Instance ID'"); - InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Geometry Index'"); - InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Primitive Index'"); - InstructionDesc[OpFetchMicroTriangleVertexPositionNV].operands.push(OperandId, "'Barycentrics'"); - InstructionDesc[OpFetchMicroTriangleVertexPositionNV].setResultAndType(true, true); - - InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Attachment'"); - InstructionDesc[OpColorAttachmentReadEXT].operands.push(OperandId, "'Sample'", true); - InstructionDesc[OpStencilAttachmentReadEXT].operands.push(OperandId, "'Sample'", true); - InstructionDesc[OpDepthAttachmentReadEXT].operands.push(OperandId, "'Sample'", true); - - InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandId, "'source texture'"); - InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandId, "'texture coordinates'"); - InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandId, "'weights texture'"); - InstructionDesc[OpImageSampleWeightedQCOM].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageSampleWeightedQCOM].setResultAndType(true, true); - - InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandId, "'source texture'"); - InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandId, "'texture coordinates'"); - InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandId, "'box size'"); - InstructionDesc[OpImageBoxFilterQCOM].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageBoxFilterQCOM].setResultAndType(true, true); - - InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'target texture'"); - InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'reference texture'"); - InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandId, "'block size'"); - InstructionDesc[OpImageBlockMatchSADQCOM].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageBlockMatchSADQCOM].setResultAndType(true, true); - - InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'target texture'"); - InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'reference texture'"); - InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'block size'"); - InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageBlockMatchSSDQCOM].setResultAndType(true, true); - - InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'target texture'"); - InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'reference texture'"); - InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'block size'"); - InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageBlockMatchWindowSSDQCOM].setResultAndType(true, true); - - InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'target texture'"); - InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'reference texture'"); - InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'block size'"); - InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageBlockMatchWindowSADQCOM].setResultAndType(true, true); - - InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'target texture'"); - InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'reference texture'"); - InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'block size'"); - InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageBlockMatchGatherSSDQCOM].setResultAndType(true, true); - - InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'target texture'"); - InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'target coordinates'"); - InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'reference texture'"); - InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'reference coordinates'"); - InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'block size'"); - InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandImageOperands, "", true); - InstructionDesc[OpImageBlockMatchGatherSADQCOM].setResultAndType(true, true); - - InstructionDesc[OpConstantCompositeReplicateEXT].operands.push(OperandId, "'Value'"); - InstructionDesc[OpSpecConstantCompositeReplicateEXT].operands.push(OperandId, "'Value'"); - InstructionDesc[OpCompositeConstructReplicateEXT].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpCooperativeMatrixConvertNV].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpCooperativeMatrixTransposeNV].operands.push(OperandId, "'Matrix'"); - - InstructionDesc[OpCooperativeMatrixReduceNV].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpCooperativeMatrixReduceNV].operands.push(OperandLiteralNumber, "'ReduceMask'"); - InstructionDesc[OpCooperativeMatrixReduceNV].operands.push(OperandId, "'CombineFunc'"); - - InstructionDesc[OpCooperativeMatrixPerElementOpNV].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpCooperativeMatrixPerElementOpNV].operands.push(OperandId, "'Operation'"); - InstructionDesc[OpCooperativeMatrixPerElementOpNV].operands.push(OperandVariableIds, "'Operands'"); - - InstructionDesc[OpCooperativeMatrixLoadTensorNV].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeMatrixLoadTensorNV].operands.push(OperandId, "'Object'"); - InstructionDesc[OpCooperativeMatrixLoadTensorNV].operands.push(OperandId, "'TensorLayout'"); - InstructionDesc[OpCooperativeMatrixLoadTensorNV].operands.push(OperandMemoryAccess, "'Memory Access'"); - InstructionDesc[OpCooperativeMatrixLoadTensorNV].operands.push(OperandTensorAddressingOperands, "'Tensor Addressing Operands'"); - - InstructionDesc[OpCooperativeMatrixStoreTensorNV].operands.push(OperandId, "'Pointer'"); - InstructionDesc[OpCooperativeMatrixStoreTensorNV].operands.push(OperandId, "'Object'"); - InstructionDesc[OpCooperativeMatrixStoreTensorNV].operands.push(OperandId, "'TensorLayout'"); - InstructionDesc[OpCooperativeMatrixStoreTensorNV].operands.push(OperandMemoryAccess, "'Memory Access'"); - InstructionDesc[OpCooperativeMatrixStoreTensorNV].operands.push(OperandTensorAddressingOperands, "'Tensor Addressing Operands'"); - - InstructionDesc[OpCooperativeMatrixReduceNV].operands.push(OperandId, "'Matrix'"); - InstructionDesc[OpCooperativeMatrixReduceNV].operands.push(OperandLiteralNumber, "'ReduceMask'"); - - InstructionDesc[OpTypeTensorLayoutNV].operands.push(OperandId, "'Dim'"); - InstructionDesc[OpTypeTensorLayoutNV].operands.push(OperandId, "'ClampMode'"); - - InstructionDesc[OpTypeTensorViewNV].operands.push(OperandId, "'Dim'"); - InstructionDesc[OpTypeTensorViewNV].operands.push(OperandId, "'HasDimensions'"); - InstructionDesc[OpTypeTensorViewNV].operands.push(OperandVariableIds, "'p'"); - - InstructionDesc[OpTensorLayoutSetBlockSizeNV].operands.push(OperandId, "'TensorLayout'"); - InstructionDesc[OpTensorLayoutSetBlockSizeNV].operands.push(OperandVariableIds, "'BlockSize'"); - - InstructionDesc[OpTensorLayoutSetDimensionNV].operands.push(OperandId, "'TensorLayout'"); - InstructionDesc[OpTensorLayoutSetDimensionNV].operands.push(OperandVariableIds, "'Dim'"); - - InstructionDesc[OpTensorLayoutSetStrideNV].operands.push(OperandId, "'TensorLayout'"); - InstructionDesc[OpTensorLayoutSetStrideNV].operands.push(OperandVariableIds, "'Stride'"); - - InstructionDesc[OpTensorLayoutSliceNV].operands.push(OperandId, "'TensorLayout'"); - InstructionDesc[OpTensorLayoutSliceNV].operands.push(OperandVariableIds, "'Operands'"); - - InstructionDesc[OpTensorLayoutSetClampValueNV].operands.push(OperandId, "'TensorLayout'"); - InstructionDesc[OpTensorLayoutSetClampValueNV].operands.push(OperandId, "'Value'"); - - InstructionDesc[OpTensorViewSetDimensionNV].operands.push(OperandId, "'TensorView'"); - InstructionDesc[OpTensorViewSetDimensionNV].operands.push(OperandVariableIds, "'Dim'"); - - InstructionDesc[OpTensorViewSetStrideNV].operands.push(OperandId, "'TensorView'"); - InstructionDesc[OpTensorViewSetStrideNV].operands.push(OperandVariableIds, "'Stride'"); - - InstructionDesc[OpTensorViewSetClipNV].operands.push(OperandId, "'TensorView'"); - InstructionDesc[OpTensorViewSetClipNV].operands.push(OperandId, "'ClipRowOffset'"); - InstructionDesc[OpTensorViewSetClipNV].operands.push(OperandId, "'ClipRowSpan'"); - InstructionDesc[OpTensorViewSetClipNV].operands.push(OperandId, "'ClipColOffset'"); - InstructionDesc[OpTensorViewSetClipNV].operands.push(OperandId, "'ClipColSpan'"); - - InstructionDesc[OpSDotKHR].operands.push(OperandId, "'Vector1'"); - InstructionDesc[OpSDotKHR].operands.push(OperandId, "'Vector2'"); - InstructionDesc[OpSDotKHR].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); - - InstructionDesc[OpUDotKHR].operands.push(OperandId, "'Vector1'"); - InstructionDesc[OpUDotKHR].operands.push(OperandId, "'Vector2'"); - InstructionDesc[OpUDotKHR].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); - - InstructionDesc[OpSUDotKHR].operands.push(OperandId, "'Vector1'"); - InstructionDesc[OpSUDotKHR].operands.push(OperandId, "'Vector2'"); - InstructionDesc[OpSUDotKHR].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); - - InstructionDesc[OpSDotAccSatKHR].operands.push(OperandId, "'Vector1'"); - InstructionDesc[OpSDotAccSatKHR].operands.push(OperandId, "'Vector2'"); - InstructionDesc[OpSDotAccSatKHR].operands.push(OperandId, "'Accumulator'"); - InstructionDesc[OpSDotAccSatKHR].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); - - InstructionDesc[OpUDotAccSatKHR].operands.push(OperandId, "'Vector1'"); - InstructionDesc[OpUDotAccSatKHR].operands.push(OperandId, "'Vector2'"); - InstructionDesc[OpUDotAccSatKHR].operands.push(OperandId, "'Accumulator'"); - InstructionDesc[OpUDotAccSatKHR].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); - - InstructionDesc[OpSUDotAccSatKHR].operands.push(OperandId, "'Vector1'"); - InstructionDesc[OpSUDotAccSatKHR].operands.push(OperandId, "'Vector2'"); - InstructionDesc[OpSUDotAccSatKHR].operands.push(OperandId, "'Accumulator'"); - InstructionDesc[OpSUDotAccSatKHR].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); + InstructionDesc[enumCast(Op::OpRayQueryGetRayTMinKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetRayTMinKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetRayFlagsKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetRayFlagsKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceIdKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceIdKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceIdKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionGeometryIndexKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionGeometryIndexKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionGeometryIndexKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionPrimitiveIndexKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionPrimitiveIndexKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionPrimitiveIndexKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionBarycentricsKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionBarycentricsKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionBarycentricsKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionFrontFaceKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionFrontFaceKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionFrontFaceKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayDirectionKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayDirectionKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayDirectionKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayOriginKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayOriginKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectRayOriginKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetWorldRayDirectionKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetWorldRayDirectionKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetWorldRayOriginKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetWorldRayOriginKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectToWorldKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectToWorldKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionObjectToWorldKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionWorldToObjectKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionWorldToObjectKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionWorldToObjectKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetClusterIdNV)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetClusterIdNV)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetClusterIdNV)].setResultAndType(true, true); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSpherePositionNV)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSpherePositionNV)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSpherePositionNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSphereRadiusNV)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSphereRadiusNV)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionSphereRadiusNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSHitValueNV)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSHitValueNV)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSHitValueNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSPositionsNV)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSPositionsNV)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSPositionsNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSRadiiNV)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSRadiiNV)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionLSSRadiiNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryIsSphereHitNV)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryIsSphereHitNV)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryIsSphereHitNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpRayQueryIsLSSHitNV)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryIsLSSHitNV)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryIsLSSHitNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandId, "'Sampled Image'"); + InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandId, "'Coordinate'"); + InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandId, "'Granularity'"); + InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandId, "'Coarse'"); + InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageSampleFootprintNV)].operands.push(OperandVariableIds, "", true); + + InstructionDesc[enumCast(Op::OpWritePackedPrimitiveIndices4x8NV)].operands.push(OperandId, "'Index Offset'"); + InstructionDesc[enumCast(Op::OpWritePackedPrimitiveIndices4x8NV)].operands.push(OperandId, "'Packed Indices'"); + + InstructionDesc[enumCast(Op::OpEmitMeshTasksEXT)].operands.push(OperandId, "'groupCountX'"); + InstructionDesc[enumCast(Op::OpEmitMeshTasksEXT)].operands.push(OperandId, "'groupCountY'"); + InstructionDesc[enumCast(Op::OpEmitMeshTasksEXT)].operands.push(OperandId, "'groupCountZ'"); + InstructionDesc[enumCast(Op::OpEmitMeshTasksEXT)].operands.push(OperandId, "'Payload'"); + InstructionDesc[enumCast(Op::OpEmitMeshTasksEXT)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpSetMeshOutputsEXT)].operands.push(OperandId, "'vertexCount'"); + InstructionDesc[enumCast(Op::OpSetMeshOutputsEXT)].operands.push(OperandId, "'primitiveCount'"); + InstructionDesc[enumCast(Op::OpSetMeshOutputsEXT)].setResultAndType(false, false); + + + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixNV)].operands.push(OperandId, "'Component Type'"); + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixNV)].operands.push(OperandId, "'Scope'"); + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixNV)].operands.push(OperandId, "'Rows'"); + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixNV)].operands.push(OperandId, "'Columns'"); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandId, "'Stride'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandId, "'Column Major'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadNV)].operands.push(OperandId, "", true); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandId, "'Object'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandId, "'Stride'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandId, "'Column Major'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreNV)].operands.push(OperandId, "", true); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddNV)].operands.push(OperandId, "'A'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddNV)].operands.push(OperandId, "'B'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddNV)].operands.push(OperandId, "'C'"); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixLengthNV)].operands.push(OperandId, "'Type'"); + + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].operands.push(OperandId, "'Component Type'"); + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].operands.push(OperandId, "'Scope'"); + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].operands.push(OperandId, "'Rows'"); + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].operands.push(OperandId, "'Columns'"); + InstructionDesc[enumCast(Op::OpTypeCooperativeMatrixKHR)].operands.push(OperandId, "'Use'"); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandId, "'Memory Layout'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandId, "'Stride'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadKHR)].operands.push(OperandId, "", true); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandId, "'Object'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandId, "'Memory Layout'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandId, "'Stride'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreKHR)].operands.push(OperandId, "", true); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddKHR)].operands.push(OperandId, "'A'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddKHR)].operands.push(OperandId, "'B'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddKHR)].operands.push(OperandId, "'C'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixMulAddKHR)].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixLengthKHR)].operands.push(OperandId, "'Type'"); + + InstructionDesc[enumCast(Op::OpTypeCooperativeVectorNV)].operands.push(OperandId, "'Component Type'"); + InstructionDesc[enumCast(Op::OpTypeCooperativeVectorNV)].operands.push(OperandId, "'Components'"); + + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'Input'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'InputInterpretation'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'Matrix'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'MatrixOffset'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'MatrixInterpretation'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'M'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'K'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'MemoryLayout'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'Transpose'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandId, "'MatrixStride'", true); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulNV)].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true); + + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'Input'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'InputInterpretation'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'Matrix'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'MatrixOffset'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'MatrixInterpretation'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'Bias'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'BiasOffset'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'BiasInterpretation'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'M'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'K'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'MemoryLayout'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'Transpose'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandId, "'MatrixStride'", true); + InstructionDesc[enumCast(Op::OpCooperativeVectorMatrixMulAddNV)].operands.push(OperandCooperativeMatrixOperands, "'Cooperative Matrix Operands'", true); + + InstructionDesc[enumCast(Op::OpCooperativeVectorLoadNV)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorLoadNV)].operands.push(OperandId, "'Offset'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorLoadNV)].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorLoadNV)].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[enumCast(Op::OpCooperativeVectorLoadNV)].operands.push(OperandId, "", true); + + InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandId, "'Offset'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandId, "'Object'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandLiteralNumber, "", true); + InstructionDesc[enumCast(Op::OpCooperativeVectorStoreNV)].operands.push(OperandId, "", true); + + InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'Offset'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'A'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'B'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'MemoryLayout'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'MatrixInterpretation'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorOuterProductAccumulateNV)].operands.push(OperandId, "'MatrixStride'", true); + + InstructionDesc[enumCast(Op::OpCooperativeVectorReduceSumAccumulateNV)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorReduceSumAccumulateNV)].operands.push(OperandId, "'Offset'"); + InstructionDesc[enumCast(Op::OpCooperativeVectorReduceSumAccumulateNV)].operands.push(OperandId, "'V'"); + + InstructionDesc[enumCast(Op::OpDemoteToHelperInvocationEXT)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpReadClockKHR)].operands.push(OperandScope, "'Scope'"); + + InstructionDesc[enumCast(Op::OpTypeHitObjectNV)].setResultAndType(true, false); + + InstructionDesc[enumCast(Op::OpHitObjectGetShaderRecordBufferHandleNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetShaderRecordBufferHandleNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpReorderThreadWithHintNV)].operands.push(OperandId, "'Hint'"); + InstructionDesc[enumCast(Op::OpReorderThreadWithHintNV)].operands.push(OperandId, "'Bits'"); + InstructionDesc[enumCast(Op::OpReorderThreadWithHintNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectNV)].operands.push(OperandId, "'Hint'"); + InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectNV)].operands.push(OperandId, "'Bits'"); + InstructionDesc[enumCast(Op::OpReorderThreadWithHitObjectNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectGetCurrentTimeNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetCurrentTimeNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetHitKindNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetHitKindNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetPrimitiveIndexNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetPrimitiveIndexNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetGeometryIndexNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetGeometryIndexNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetInstanceIdNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetInstanceIdNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetInstanceCustomIndexNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetInstanceCustomIndexNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayDirectionNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayDirectionNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayOriginNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetObjectRayOriginNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayDirectionNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayDirectionNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayOriginNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetWorldRayOriginNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetWorldToObjectNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetWorldToObjectNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetObjectToWorldNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetObjectToWorldNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetRayTMaxNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetRayTMaxNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetRayTMinNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetRayTMinNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetShaderBindingTableRecordIndexNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetShaderBindingTableRecordIndexNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectIsEmptyNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectIsEmptyNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectIsHitNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectIsHitNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectIsMissNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectIsMissNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetAttributesNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetAttributesNV)].operands.push(OperandId, "'HitObjectAttribute'"); + InstructionDesc[enumCast(Op::OpHitObjectGetAttributesNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectExecuteShaderNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectExecuteShaderNV)].operands.push(OperandId, "'Payload'"); + InstructionDesc[enumCast(Op::OpHitObjectExecuteShaderNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'InstanceId'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'PrimitiveId'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'GeometryIndex'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'HitKind'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'Origin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'Direction'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].operands.push(OperandId, "'HitObject Attribute'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'InstanceId'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'PrimitiveId'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'GeometryIndex'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'HitKind'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'Origin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'Direction'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'Current Time'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].operands.push(OperandId, "'HitObject Attribute'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitMotionNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'InstanceId'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'PrimitiveId'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'GeometryIndex'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'HitKind'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'SBT Record Index'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'Origin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'Direction'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].operands.push(OperandId, "'HitObject Attribute'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'InstanceId'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'PrimitiveId'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'GeometryIndex'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'HitKind'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'SBT Record Index'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'Origin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'Direction'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'Current Time'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].operands.push(OperandId, "'HitObject Attribute'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordHitWithIndexMotionNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'SBT Index'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'Origin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'Direction'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'SBT Index'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'Origin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'Direction'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].operands.push(OperandId, "'Current Time'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordMissMotionNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectRecordEmptyNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectRecordEmptyNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'RayFlags'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Cullmask'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Origin'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Direction'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].operands.push(OperandId, "'Payload'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'RayFlags'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Cullmask'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Origin'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'TMin'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Direction'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'TMax'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Time'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].operands.push(OperandId, "'Payload'"); + InstructionDesc[enumCast(Op::OpHitObjectTraceRayMotionNV)].setResultAndType(false, false); + + InstructionDesc[enumCast(Op::OpHitObjectGetClusterIdNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetClusterIdNV)].setResultAndType(true, true); + InstructionDesc[enumCast(Op::OpHitObjectGetSpherePositionNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetSpherePositionNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetSphereRadiusNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetSphereRadiusNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetLSSPositionsNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetLSSPositionsNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectGetLSSRadiiNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectGetLSSRadiiNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectIsSphereHitNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectIsSphereHitNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpHitObjectIsLSSHitNV)].operands.push(OperandId, "'HitObject'"); + InstructionDesc[enumCast(Op::OpHitObjectIsLSSHitNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].operands.push(OperandId, "'Instance ID'"); + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].operands.push(OperandId, "'Geometry Index'"); + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].operands.push(OperandId, "'Primitive Index'"); + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].operands.push(OperandId, "'Barycentrics'"); + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexBarycentricNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].operands.push(OperandId, "'Instance ID'"); + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].operands.push(OperandId, "'Geometry Index'"); + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].operands.push(OperandId, "'Primitive Index'"); + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].operands.push(OperandId, "'Barycentrics'"); + InstructionDesc[enumCast(Op::OpFetchMicroTriangleVertexPositionNV)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpColorAttachmentReadEXT)].operands.push(OperandId, "'Attachment'"); + InstructionDesc[enumCast(Op::OpColorAttachmentReadEXT)].operands.push(OperandId, "'Sample'", true); + 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(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(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(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(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(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(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(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(OperandImageOperands, "", true); + InstructionDesc[enumCast(Op::OpImageBlockMatchGatherSADQCOM)].setResultAndType(true, true); + + InstructionDesc[enumCast(Op::OpConstantCompositeReplicateEXT)].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpSpecConstantCompositeReplicateEXT)].operands.push(OperandId, "'Value'"); + InstructionDesc[enumCast(Op::OpCompositeConstructReplicateEXT)].operands.push(OperandId, "'Value'"); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixConvertNV)].operands.push(OperandId, "'Value'"); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixTransposeNV)].operands.push(OperandId, "'Matrix'"); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixReduceNV)].operands.push(OperandId, "'Matrix'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixReduceNV)].operands.push(OperandLiteralNumber, "'ReduceMask'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixReduceNV)].operands.push(OperandId, "'CombineFunc'"); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixPerElementOpNV)].operands.push(OperandId, "'Matrix'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixPerElementOpNV)].operands.push(OperandId, "'Operation'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixPerElementOpNV)].operands.push(OperandVariableIds, "'Operands'"); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandId, "'Object'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandId, "'TensorLayout'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixLoadTensorNV)].operands.push(OperandTensorAddressingOperands, "'Tensor Addressing Operands'"); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].operands.push(OperandId, "'Pointer'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].operands.push(OperandId, "'Object'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].operands.push(OperandId, "'TensorLayout'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].operands.push(OperandMemoryAccess, "'Memory Access'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixStoreTensorNV)].operands.push(OperandTensorAddressingOperands, "'Tensor Addressing Operands'"); + + InstructionDesc[enumCast(Op::OpCooperativeMatrixReduceNV)].operands.push(OperandId, "'Matrix'"); + InstructionDesc[enumCast(Op::OpCooperativeMatrixReduceNV)].operands.push(OperandLiteralNumber, "'ReduceMask'"); + + InstructionDesc[enumCast(Op::OpTypeTensorLayoutNV)].operands.push(OperandId, "'Dim'"); + InstructionDesc[enumCast(Op::OpTypeTensorLayoutNV)].operands.push(OperandId, "'ClampMode'"); + + InstructionDesc[enumCast(Op::OpTypeTensorViewNV)].operands.push(OperandId, "'Dim'"); + InstructionDesc[enumCast(Op::OpTypeTensorViewNV)].operands.push(OperandId, "'HasDimensions'"); + InstructionDesc[enumCast(Op::OpTypeTensorViewNV)].operands.push(OperandVariableIds, "'p'"); + + InstructionDesc[enumCast(Op::OpTensorLayoutSetBlockSizeNV)].operands.push(OperandId, "'TensorLayout'"); + InstructionDesc[enumCast(Op::OpTensorLayoutSetBlockSizeNV)].operands.push(OperandVariableIds, "'BlockSize'"); + + InstructionDesc[enumCast(Op::OpTensorLayoutSetDimensionNV)].operands.push(OperandId, "'TensorLayout'"); + InstructionDesc[enumCast(Op::OpTensorLayoutSetDimensionNV)].operands.push(OperandVariableIds, "'Dim'"); + + InstructionDesc[enumCast(Op::OpTensorLayoutSetStrideNV)].operands.push(OperandId, "'TensorLayout'"); + InstructionDesc[enumCast(Op::OpTensorLayoutSetStrideNV)].operands.push(OperandVariableIds, "'Stride'"); + + InstructionDesc[enumCast(Op::OpTensorLayoutSliceNV)].operands.push(OperandId, "'TensorLayout'"); + InstructionDesc[enumCast(Op::OpTensorLayoutSliceNV)].operands.push(OperandVariableIds, "'Operands'"); + + InstructionDesc[enumCast(Op::OpTensorLayoutSetClampValueNV)].operands.push(OperandId, "'TensorLayout'"); + InstructionDesc[enumCast(Op::OpTensorLayoutSetClampValueNV)].operands.push(OperandId, "'Value'"); + + InstructionDesc[enumCast(Op::OpTensorViewSetDimensionNV)].operands.push(OperandId, "'TensorView'"); + InstructionDesc[enumCast(Op::OpTensorViewSetDimensionNV)].operands.push(OperandVariableIds, "'Dim'"); + + InstructionDesc[enumCast(Op::OpTensorViewSetStrideNV)].operands.push(OperandId, "'TensorView'"); + InstructionDesc[enumCast(Op::OpTensorViewSetStrideNV)].operands.push(OperandVariableIds, "'Stride'"); + + InstructionDesc[enumCast(Op::OpTensorViewSetClipNV)].operands.push(OperandId, "'TensorView'"); + InstructionDesc[enumCast(Op::OpTensorViewSetClipNV)].operands.push(OperandId, "'ClipRowOffset'"); + InstructionDesc[enumCast(Op::OpTensorViewSetClipNV)].operands.push(OperandId, "'ClipRowSpan'"); + InstructionDesc[enumCast(Op::OpTensorViewSetClipNV)].operands.push(OperandId, "'ClipColOffset'"); + InstructionDesc[enumCast(Op::OpTensorViewSetClipNV)].operands.push(OperandId, "'ClipColSpan'"); + + InstructionDesc[enumCast(Op::OpSDotKHR)].operands.push(OperandId, "'Vector1'"); + InstructionDesc[enumCast(Op::OpSDotKHR)].operands.push(OperandId, "'Vector2'"); + InstructionDesc[enumCast(Op::OpSDotKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); + + InstructionDesc[enumCast(Op::OpUDotKHR)].operands.push(OperandId, "'Vector1'"); + InstructionDesc[enumCast(Op::OpUDotKHR)].operands.push(OperandId, "'Vector2'"); + InstructionDesc[enumCast(Op::OpUDotKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); + + InstructionDesc[enumCast(Op::OpSUDotKHR)].operands.push(OperandId, "'Vector1'"); + InstructionDesc[enumCast(Op::OpSUDotKHR)].operands.push(OperandId, "'Vector2'"); + InstructionDesc[enumCast(Op::OpSUDotKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); + + InstructionDesc[enumCast(Op::OpSDotAccSatKHR)].operands.push(OperandId, "'Vector1'"); + InstructionDesc[enumCast(Op::OpSDotAccSatKHR)].operands.push(OperandId, "'Vector2'"); + InstructionDesc[enumCast(Op::OpSDotAccSatKHR)].operands.push(OperandId, "'Accumulator'"); + InstructionDesc[enumCast(Op::OpSDotAccSatKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); + + InstructionDesc[enumCast(Op::OpUDotAccSatKHR)].operands.push(OperandId, "'Vector1'"); + InstructionDesc[enumCast(Op::OpUDotAccSatKHR)].operands.push(OperandId, "'Vector2'"); + InstructionDesc[enumCast(Op::OpUDotAccSatKHR)].operands.push(OperandId, "'Accumulator'"); + InstructionDesc[enumCast(Op::OpUDotAccSatKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); + + InstructionDesc[enumCast(Op::OpSUDotAccSatKHR)].operands.push(OperandId, "'Vector1'"); + InstructionDesc[enumCast(Op::OpSUDotAccSatKHR)].operands.push(OperandId, "'Vector2'"); + InstructionDesc[enumCast(Op::OpSUDotAccSatKHR)].operands.push(OperandId, "'Accumulator'"); + InstructionDesc[enumCast(Op::OpSUDotAccSatKHR)].operands.push(OperandLiteralNumber, "'PackedVectorFormat'"); }); } diff --git a/3rdparty/glslang/SPIRV/doc.h b/3rdparty/glslang/SPIRV/doc.h index 8cd388a17..c818308e2 100644 --- a/3rdparty/glslang/SPIRV/doc.h +++ b/3rdparty/glslang/SPIRV/doc.h @@ -38,7 +38,7 @@ #pragma once -#include "spirv.hpp" +#include "spirv.hpp11" #include diff --git a/3rdparty/glslang/SPIRV/spirv.hpp b/3rdparty/glslang/SPIRV/spirv.hpp deleted file mode 100644 index 40171b304..000000000 --- a/3rdparty/glslang/SPIRV/spirv.hpp +++ /dev/null @@ -1,5046 +0,0 @@ -// Copyright (c) 2014-2024 The Khronos Group Inc. -// -// 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. - -// 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 will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -// - 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 -// - 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 -// -// Some tokens act like mask values, which can be OR'd together, -// while others are mutually exclusive. The mask-like ones have -// "Mask" in their name, and a parallel enum that has the shift -// amount (1 << x) for each corresponding enumerant. - -#ifndef spirv_HPP -#define spirv_HPP - -namespace spv { - -typedef unsigned int Id; - -#define SPV_VERSION 0x10600 -#define SPV_REVISION 1 - -static const unsigned int MagicNumber = 0x07230203; -static const unsigned int Version = 0x00010600; -static const unsigned int Revision = 1; -static const unsigned int OpCodeMask = 0xffff; -static const unsigned int WordCountShift = 16; - -enum SourceLanguage { - SourceLanguageUnknown = 0, - SourceLanguageESSL = 1, - SourceLanguageGLSL = 2, - SourceLanguageOpenCL_C = 3, - SourceLanguageOpenCL_CPP = 4, - SourceLanguageHLSL = 5, - SourceLanguageCPP_for_OpenCL = 6, - SourceLanguageSYCL = 7, - SourceLanguageHERO_C = 8, - SourceLanguageNZSL = 9, - SourceLanguageWGSL = 10, - SourceLanguageSlang = 11, - SourceLanguageZig = 12, - SourceLanguageMax = 0x7fffffff, -}; - -enum ExecutionModel { - ExecutionModelVertex = 0, - ExecutionModelTessellationControl = 1, - ExecutionModelTessellationEvaluation = 2, - ExecutionModelGeometry = 3, - ExecutionModelFragment = 4, - ExecutionModelGLCompute = 5, - ExecutionModelKernel = 6, - ExecutionModelTaskNV = 5267, - ExecutionModelMeshNV = 5268, - ExecutionModelRayGenerationKHR = 5313, - ExecutionModelRayGenerationNV = 5313, - ExecutionModelIntersectionKHR = 5314, - ExecutionModelIntersectionNV = 5314, - ExecutionModelAnyHitKHR = 5315, - ExecutionModelAnyHitNV = 5315, - ExecutionModelClosestHitKHR = 5316, - ExecutionModelClosestHitNV = 5316, - ExecutionModelMissKHR = 5317, - ExecutionModelMissNV = 5317, - ExecutionModelCallableKHR = 5318, - ExecutionModelCallableNV = 5318, - ExecutionModelTaskEXT = 5364, - ExecutionModelMeshEXT = 5365, - ExecutionModelMax = 0x7fffffff, -}; - -enum AddressingModel { - AddressingModelLogical = 0, - AddressingModelPhysical32 = 1, - AddressingModelPhysical64 = 2, - AddressingModelPhysicalStorageBuffer64 = 5348, - AddressingModelPhysicalStorageBuffer64EXT = 5348, - AddressingModelMax = 0x7fffffff, -}; - -enum MemoryModel { - MemoryModelSimple = 0, - MemoryModelGLSL450 = 1, - MemoryModelOpenCL = 2, - MemoryModelVulkan = 3, - MemoryModelVulkanKHR = 3, - MemoryModelMax = 0x7fffffff, -}; - -enum ExecutionMode { - ExecutionModeInvocations = 0, - ExecutionModeSpacingEqual = 1, - ExecutionModeSpacingFractionalEven = 2, - ExecutionModeSpacingFractionalOdd = 3, - ExecutionModeVertexOrderCw = 4, - ExecutionModeVertexOrderCcw = 5, - ExecutionModePixelCenterInteger = 6, - ExecutionModeOriginUpperLeft = 7, - ExecutionModeOriginLowerLeft = 8, - ExecutionModeEarlyFragmentTests = 9, - ExecutionModePointMode = 10, - ExecutionModeXfb = 11, - ExecutionModeDepthReplacing = 12, - ExecutionModeDepthGreater = 14, - ExecutionModeDepthLess = 15, - ExecutionModeDepthUnchanged = 16, - ExecutionModeLocalSize = 17, - ExecutionModeLocalSizeHint = 18, - ExecutionModeInputPoints = 19, - ExecutionModeInputLines = 20, - ExecutionModeInputLinesAdjacency = 21, - ExecutionModeTriangles = 22, - ExecutionModeInputTrianglesAdjacency = 23, - ExecutionModeQuads = 24, - ExecutionModeIsolines = 25, - ExecutionModeOutputVertices = 26, - ExecutionModeOutputPoints = 27, - ExecutionModeOutputLineStrip = 28, - ExecutionModeOutputTriangleStrip = 29, - ExecutionModeVecTypeHint = 30, - ExecutionModeContractionOff = 31, - ExecutionModeInitializer = 33, - ExecutionModeFinalizer = 34, - ExecutionModeSubgroupSize = 35, - ExecutionModeSubgroupsPerWorkgroup = 36, - ExecutionModeSubgroupsPerWorkgroupId = 37, - ExecutionModeLocalSizeId = 38, - ExecutionModeLocalSizeHintId = 39, - ExecutionModeNonCoherentColorAttachmentReadEXT = 4169, - ExecutionModeNonCoherentDepthAttachmentReadEXT = 4170, - ExecutionModeNonCoherentStencilAttachmentReadEXT = 4171, - ExecutionModeSubgroupUniformControlFlowKHR = 4421, - ExecutionModePostDepthCoverage = 4446, - ExecutionModeDenormPreserve = 4459, - ExecutionModeDenormFlushToZero = 4460, - ExecutionModeSignedZeroInfNanPreserve = 4461, - ExecutionModeRoundingModeRTE = 4462, - ExecutionModeRoundingModeRTZ = 4463, - ExecutionModeEarlyAndLateFragmentTestsAMD = 5017, - ExecutionModeStencilRefReplacingEXT = 5027, - ExecutionModeCoalescingAMDX = 5069, - ExecutionModeIsApiEntryAMDX = 5070, - ExecutionModeMaxNodeRecursionAMDX = 5071, - ExecutionModeStaticNumWorkgroupsAMDX = 5072, - ExecutionModeShaderIndexAMDX = 5073, - ExecutionModeMaxNumWorkgroupsAMDX = 5077, - ExecutionModeStencilRefUnchangedFrontAMD = 5079, - ExecutionModeStencilRefGreaterFrontAMD = 5080, - ExecutionModeStencilRefLessFrontAMD = 5081, - ExecutionModeStencilRefUnchangedBackAMD = 5082, - ExecutionModeStencilRefGreaterBackAMD = 5083, - ExecutionModeStencilRefLessBackAMD = 5084, - ExecutionModeQuadDerivativesKHR = 5088, - ExecutionModeRequireFullQuadsKHR = 5089, - ExecutionModeSharesInputWithAMDX = 5102, - ExecutionModeOutputLinesEXT = 5269, - ExecutionModeOutputLinesNV = 5269, - ExecutionModeOutputPrimitivesEXT = 5270, - ExecutionModeOutputPrimitivesNV = 5270, - ExecutionModeDerivativeGroupQuadsKHR = 5289, - ExecutionModeDerivativeGroupQuadsNV = 5289, - ExecutionModeDerivativeGroupLinearKHR = 5290, - ExecutionModeDerivativeGroupLinearNV = 5290, - ExecutionModeOutputTrianglesEXT = 5298, - ExecutionModeOutputTrianglesNV = 5298, - ExecutionModePixelInterlockOrderedEXT = 5366, - ExecutionModePixelInterlockUnorderedEXT = 5367, - ExecutionModeSampleInterlockOrderedEXT = 5368, - ExecutionModeSampleInterlockUnorderedEXT = 5369, - ExecutionModeShadingRateInterlockOrderedEXT = 5370, - ExecutionModeShadingRateInterlockUnorderedEXT = 5371, - ExecutionModeSharedLocalMemorySizeINTEL = 5618, - ExecutionModeRoundingModeRTPINTEL = 5620, - ExecutionModeRoundingModeRTNINTEL = 5621, - ExecutionModeFloatingPointModeALTINTEL = 5622, - ExecutionModeFloatingPointModeIEEEINTEL = 5623, - ExecutionModeMaxWorkgroupSizeINTEL = 5893, - ExecutionModeMaxWorkDimINTEL = 5894, - ExecutionModeNoGlobalOffsetINTEL = 5895, - ExecutionModeNumSIMDWorkitemsINTEL = 5896, - ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, - ExecutionModeMaximallyReconvergesKHR = 6023, - ExecutionModeFPFastMathDefault = 6028, - ExecutionModeStreamingInterfaceINTEL = 6154, - ExecutionModeRegisterMapInterfaceINTEL = 6160, - ExecutionModeNamedBarrierCountINTEL = 6417, - ExecutionModeMaximumRegistersINTEL = 6461, - ExecutionModeMaximumRegistersIdINTEL = 6462, - ExecutionModeNamedMaximumRegistersINTEL = 6463, - ExecutionModeMax = 0x7fffffff, -}; - -enum StorageClass { - StorageClassUniformConstant = 0, - StorageClassInput = 1, - StorageClassUniform = 2, - StorageClassOutput = 3, - StorageClassWorkgroup = 4, - StorageClassCrossWorkgroup = 5, - StorageClassPrivate = 6, - StorageClassFunction = 7, - StorageClassGeneric = 8, - StorageClassPushConstant = 9, - StorageClassAtomicCounter = 10, - StorageClassImage = 11, - StorageClassStorageBuffer = 12, - StorageClassTileImageEXT = 4172, - StorageClassNodePayloadAMDX = 5068, - StorageClassCallableDataKHR = 5328, - StorageClassCallableDataNV = 5328, - StorageClassIncomingCallableDataKHR = 5329, - StorageClassIncomingCallableDataNV = 5329, - StorageClassRayPayloadKHR = 5338, - StorageClassRayPayloadNV = 5338, - StorageClassHitAttributeKHR = 5339, - StorageClassHitAttributeNV = 5339, - StorageClassIncomingRayPayloadKHR = 5342, - StorageClassIncomingRayPayloadNV = 5342, - StorageClassShaderRecordBufferKHR = 5343, - StorageClassShaderRecordBufferNV = 5343, - StorageClassPhysicalStorageBuffer = 5349, - StorageClassPhysicalStorageBufferEXT = 5349, - StorageClassHitObjectAttributeNV = 5385, - StorageClassTaskPayloadWorkgroupEXT = 5402, - StorageClassCodeSectionINTEL = 5605, - StorageClassDeviceOnlyINTEL = 5936, - StorageClassHostOnlyINTEL = 5937, - StorageClassMax = 0x7fffffff, -}; - -enum Dim { - Dim1D = 0, - Dim2D = 1, - Dim3D = 2, - DimCube = 3, - DimRect = 4, - DimBuffer = 5, - DimSubpassData = 6, - DimTileImageDataEXT = 4173, - DimMax = 0x7fffffff, -}; - -enum SamplerAddressingMode { - SamplerAddressingModeNone = 0, - SamplerAddressingModeClampToEdge = 1, - SamplerAddressingModeClamp = 2, - SamplerAddressingModeRepeat = 3, - SamplerAddressingModeRepeatMirrored = 4, - SamplerAddressingModeMax = 0x7fffffff, -}; - -enum SamplerFilterMode { - SamplerFilterModeNearest = 0, - SamplerFilterModeLinear = 1, - SamplerFilterModeMax = 0x7fffffff, -}; - -enum ImageFormat { - ImageFormatUnknown = 0, - ImageFormatRgba32f = 1, - ImageFormatRgba16f = 2, - ImageFormatR32f = 3, - ImageFormatRgba8 = 4, - ImageFormatRgba8Snorm = 5, - ImageFormatRg32f = 6, - ImageFormatRg16f = 7, - ImageFormatR11fG11fB10f = 8, - ImageFormatR16f = 9, - ImageFormatRgba16 = 10, - ImageFormatRgb10A2 = 11, - ImageFormatRg16 = 12, - ImageFormatRg8 = 13, - ImageFormatR16 = 14, - ImageFormatR8 = 15, - ImageFormatRgba16Snorm = 16, - ImageFormatRg16Snorm = 17, - ImageFormatRg8Snorm = 18, - ImageFormatR16Snorm = 19, - ImageFormatR8Snorm = 20, - ImageFormatRgba32i = 21, - ImageFormatRgba16i = 22, - ImageFormatRgba8i = 23, - ImageFormatR32i = 24, - ImageFormatRg32i = 25, - ImageFormatRg16i = 26, - ImageFormatRg8i = 27, - ImageFormatR16i = 28, - ImageFormatR8i = 29, - ImageFormatRgba32ui = 30, - ImageFormatRgba16ui = 31, - ImageFormatRgba8ui = 32, - ImageFormatR32ui = 33, - ImageFormatRgb10a2ui = 34, - ImageFormatRg32ui = 35, - ImageFormatRg16ui = 36, - ImageFormatRg8ui = 37, - ImageFormatR16ui = 38, - ImageFormatR8ui = 39, - ImageFormatR64ui = 40, - ImageFormatR64i = 41, - ImageFormatMax = 0x7fffffff, -}; - -enum ImageChannelOrder { - ImageChannelOrderR = 0, - ImageChannelOrderA = 1, - ImageChannelOrderRG = 2, - ImageChannelOrderRA = 3, - ImageChannelOrderRGB = 4, - ImageChannelOrderRGBA = 5, - ImageChannelOrderBGRA = 6, - ImageChannelOrderARGB = 7, - ImageChannelOrderIntensity = 8, - ImageChannelOrderLuminance = 9, - ImageChannelOrderRx = 10, - ImageChannelOrderRGx = 11, - ImageChannelOrderRGBx = 12, - ImageChannelOrderDepth = 13, - ImageChannelOrderDepthStencil = 14, - ImageChannelOrdersRGB = 15, - ImageChannelOrdersRGBx = 16, - ImageChannelOrdersRGBA = 17, - ImageChannelOrdersBGRA = 18, - ImageChannelOrderABGR = 19, - ImageChannelOrderMax = 0x7fffffff, -}; - -enum ImageChannelDataType { - ImageChannelDataTypeSnormInt8 = 0, - ImageChannelDataTypeSnormInt16 = 1, - ImageChannelDataTypeUnormInt8 = 2, - ImageChannelDataTypeUnormInt16 = 3, - ImageChannelDataTypeUnormShort565 = 4, - ImageChannelDataTypeUnormShort555 = 5, - ImageChannelDataTypeUnormInt101010 = 6, - ImageChannelDataTypeSignedInt8 = 7, - ImageChannelDataTypeSignedInt16 = 8, - ImageChannelDataTypeSignedInt32 = 9, - ImageChannelDataTypeUnsignedInt8 = 10, - ImageChannelDataTypeUnsignedInt16 = 11, - ImageChannelDataTypeUnsignedInt32 = 12, - ImageChannelDataTypeHalfFloat = 13, - ImageChannelDataTypeFloat = 14, - ImageChannelDataTypeUnormInt24 = 15, - ImageChannelDataTypeUnormInt101010_2 = 16, - ImageChannelDataTypeUnsignedIntRaw10EXT = 19, - ImageChannelDataTypeUnsignedIntRaw12EXT = 20, - ImageChannelDataTypeUnormInt2_101010EXT = 21, - ImageChannelDataTypeMax = 0x7fffffff, -}; - -enum ImageOperandsShift { - ImageOperandsBiasShift = 0, - ImageOperandsLodShift = 1, - ImageOperandsGradShift = 2, - ImageOperandsConstOffsetShift = 3, - ImageOperandsOffsetShift = 4, - ImageOperandsConstOffsetsShift = 5, - ImageOperandsSampleShift = 6, - ImageOperandsMinLodShift = 7, - ImageOperandsMakeTexelAvailableShift = 8, - ImageOperandsMakeTexelAvailableKHRShift = 8, - ImageOperandsMakeTexelVisibleShift = 9, - ImageOperandsMakeTexelVisibleKHRShift = 9, - ImageOperandsNonPrivateTexelShift = 10, - ImageOperandsNonPrivateTexelKHRShift = 10, - ImageOperandsVolatileTexelShift = 11, - ImageOperandsVolatileTexelKHRShift = 11, - ImageOperandsSignExtendShift = 12, - ImageOperandsZeroExtendShift = 13, - ImageOperandsNontemporalShift = 14, - ImageOperandsOffsetsShift = 16, - ImageOperandsMax = 0x7fffffff, -}; - -enum ImageOperandsMask : unsigned { - ImageOperandsMaskNone = 0, - ImageOperandsBiasMask = 0x00000001, - ImageOperandsLodMask = 0x00000002, - ImageOperandsGradMask = 0x00000004, - ImageOperandsConstOffsetMask = 0x00000008, - ImageOperandsOffsetMask = 0x00000010, - ImageOperandsConstOffsetsMask = 0x00000020, - ImageOperandsSampleMask = 0x00000040, - ImageOperandsMinLodMask = 0x00000080, - ImageOperandsMakeTexelAvailableMask = 0x00000100, - ImageOperandsMakeTexelAvailableKHRMask = 0x00000100, - ImageOperandsMakeTexelVisibleMask = 0x00000200, - ImageOperandsMakeTexelVisibleKHRMask = 0x00000200, - ImageOperandsNonPrivateTexelMask = 0x00000400, - ImageOperandsNonPrivateTexelKHRMask = 0x00000400, - ImageOperandsVolatileTexelMask = 0x00000800, - ImageOperandsVolatileTexelKHRMask = 0x00000800, - ImageOperandsSignExtendMask = 0x00001000, - ImageOperandsZeroExtendMask = 0x00002000, - ImageOperandsNontemporalMask = 0x00004000, - ImageOperandsOffsetsMask = 0x00010000, -}; - -enum FPFastMathModeShift { - FPFastMathModeNotNaNShift = 0, - FPFastMathModeNotInfShift = 1, - FPFastMathModeNSZShift = 2, - FPFastMathModeAllowRecipShift = 3, - FPFastMathModeFastShift = 4, - FPFastMathModeAllowContractShift = 16, - FPFastMathModeAllowContractFastINTELShift = 16, - FPFastMathModeAllowReassocShift = 17, - FPFastMathModeAllowReassocINTELShift = 17, - FPFastMathModeAllowTransformShift = 18, - FPFastMathModeMax = 0x7fffffff, -}; - -enum FPFastMathModeMask : unsigned { - FPFastMathModeMaskNone = 0, - FPFastMathModeNotNaNMask = 0x00000001, - FPFastMathModeNotInfMask = 0x00000002, - FPFastMathModeNSZMask = 0x00000004, - FPFastMathModeAllowRecipMask = 0x00000008, - FPFastMathModeFastMask = 0x00000010, - FPFastMathModeAllowContractMask = 0x00010000, - FPFastMathModeAllowContractFastINTELMask = 0x00010000, - FPFastMathModeAllowReassocMask = 0x00020000, - FPFastMathModeAllowReassocINTELMask = 0x00020000, - FPFastMathModeAllowTransformMask = 0x00040000, -}; - -enum FPRoundingMode { - FPRoundingModeRTE = 0, - FPRoundingModeRTZ = 1, - FPRoundingModeRTP = 2, - FPRoundingModeRTN = 3, - FPRoundingModeMax = 0x7fffffff, -}; - -enum LinkageType { - LinkageTypeExport = 0, - LinkageTypeImport = 1, - LinkageTypeLinkOnceODR = 2, - LinkageTypeMax = 0x7fffffff, -}; - -enum AccessQualifier { - AccessQualifierReadOnly = 0, - AccessQualifierWriteOnly = 1, - AccessQualifierReadWrite = 2, - AccessQualifierMax = 0x7fffffff, -}; - -enum FunctionParameterAttribute { - FunctionParameterAttributeZext = 0, - FunctionParameterAttributeSext = 1, - FunctionParameterAttributeByVal = 2, - FunctionParameterAttributeSret = 3, - FunctionParameterAttributeNoAlias = 4, - FunctionParameterAttributeNoCapture = 5, - FunctionParameterAttributeNoWrite = 6, - FunctionParameterAttributeNoReadWrite = 7, - FunctionParameterAttributeRuntimeAlignedINTEL = 5940, - FunctionParameterAttributeMax = 0x7fffffff, -}; - -enum Decoration { - DecorationRelaxedPrecision = 0, - DecorationSpecId = 1, - DecorationBlock = 2, - DecorationBufferBlock = 3, - DecorationRowMajor = 4, - DecorationColMajor = 5, - DecorationArrayStride = 6, - DecorationMatrixStride = 7, - DecorationGLSLShared = 8, - DecorationGLSLPacked = 9, - DecorationCPacked = 10, - DecorationBuiltIn = 11, - DecorationNoPerspective = 13, - DecorationFlat = 14, - DecorationPatch = 15, - DecorationCentroid = 16, - DecorationSample = 17, - DecorationInvariant = 18, - DecorationRestrict = 19, - DecorationAliased = 20, - DecorationVolatile = 21, - DecorationConstant = 22, - DecorationCoherent = 23, - DecorationNonWritable = 24, - DecorationNonReadable = 25, - DecorationUniform = 26, - DecorationUniformId = 27, - DecorationSaturatedConversion = 28, - DecorationStream = 29, - DecorationLocation = 30, - DecorationComponent = 31, - DecorationIndex = 32, - DecorationBinding = 33, - DecorationDescriptorSet = 34, - DecorationOffset = 35, - DecorationXfbBuffer = 36, - DecorationXfbStride = 37, - DecorationFuncParamAttr = 38, - DecorationFPRoundingMode = 39, - DecorationFPFastMathMode = 40, - DecorationLinkageAttributes = 41, - DecorationNoContraction = 42, - DecorationInputAttachmentIndex = 43, - DecorationAlignment = 44, - DecorationMaxByteOffset = 45, - DecorationAlignmentId = 46, - DecorationMaxByteOffsetId = 47, - DecorationNoSignedWrap = 4469, - DecorationNoUnsignedWrap = 4470, - DecorationWeightTextureQCOM = 4487, - DecorationBlockMatchTextureQCOM = 4488, - DecorationBlockMatchSamplerQCOM = 4499, - DecorationExplicitInterpAMD = 4999, - DecorationNodeSharesPayloadLimitsWithAMDX = 5019, - DecorationNodeMaxPayloadsAMDX = 5020, - DecorationTrackFinishWritingAMDX = 5078, - DecorationPayloadNodeNameAMDX = 5091, - DecorationPayloadNodeBaseIndexAMDX = 5098, - DecorationPayloadNodeSparseArrayAMDX = 5099, - DecorationPayloadNodeArraySizeAMDX = 5100, - DecorationPayloadDispatchIndirectAMDX = 5105, - DecorationOverrideCoverageNV = 5248, - DecorationPassthroughNV = 5250, - DecorationViewportRelativeNV = 5252, - DecorationSecondaryViewportRelativeNV = 5256, - DecorationPerPrimitiveEXT = 5271, - DecorationPerPrimitiveNV = 5271, - DecorationPerViewNV = 5272, - DecorationPerTaskNV = 5273, - DecorationPerVertexKHR = 5285, - DecorationPerVertexNV = 5285, - DecorationNonUniform = 5300, - DecorationNonUniformEXT = 5300, - DecorationRestrictPointer = 5355, - DecorationRestrictPointerEXT = 5355, - DecorationAliasedPointer = 5356, - DecorationAliasedPointerEXT = 5356, - DecorationHitObjectShaderRecordBufferNV = 5386, - DecorationBindlessSamplerNV = 5398, - DecorationBindlessImageNV = 5399, - DecorationBoundSamplerNV = 5400, - DecorationBoundImageNV = 5401, - DecorationSIMTCallINTEL = 5599, - DecorationReferencedIndirectlyINTEL = 5602, - DecorationClobberINTEL = 5607, - DecorationSideEffectsINTEL = 5608, - DecorationVectorComputeVariableINTEL = 5624, - DecorationFuncParamIOKindINTEL = 5625, - DecorationVectorComputeFunctionINTEL = 5626, - DecorationStackCallINTEL = 5627, - DecorationGlobalVariableOffsetINTEL = 5628, - DecorationCounterBuffer = 5634, - DecorationHlslCounterBufferGOOGLE = 5634, - DecorationHlslSemanticGOOGLE = 5635, - DecorationUserSemantic = 5635, - DecorationUserTypeGOOGLE = 5636, - DecorationFunctionRoundingModeINTEL = 5822, - DecorationFunctionDenormModeINTEL = 5823, - DecorationRegisterINTEL = 5825, - DecorationMemoryINTEL = 5826, - DecorationNumbanksINTEL = 5827, - DecorationBankwidthINTEL = 5828, - DecorationMaxPrivateCopiesINTEL = 5829, - DecorationSinglepumpINTEL = 5830, - DecorationDoublepumpINTEL = 5831, - DecorationMaxReplicatesINTEL = 5832, - DecorationSimpleDualPortINTEL = 5833, - DecorationMergeINTEL = 5834, - DecorationBankBitsINTEL = 5835, - DecorationForcePow2DepthINTEL = 5836, - DecorationStridesizeINTEL = 5883, - DecorationWordsizeINTEL = 5884, - DecorationTrueDualPortINTEL = 5885, - DecorationBurstCoalesceINTEL = 5899, - DecorationCacheSizeINTEL = 5900, - DecorationDontStaticallyCoalesceINTEL = 5901, - DecorationPrefetchINTEL = 5902, - DecorationStallEnableINTEL = 5905, - DecorationFuseLoopsInFunctionINTEL = 5907, - DecorationMathOpDSPModeINTEL = 5909, - DecorationAliasScopeINTEL = 5914, - DecorationNoAliasINTEL = 5915, - DecorationInitiationIntervalINTEL = 5917, - DecorationMaxConcurrencyINTEL = 5918, - DecorationPipelineEnableINTEL = 5919, - DecorationBufferLocationINTEL = 5921, - DecorationIOPipeStorageINTEL = 5944, - DecorationFunctionFloatingPointModeINTEL = 6080, - DecorationSingleElementVectorINTEL = 6085, - DecorationVectorComputeCallableFunctionINTEL = 6087, - DecorationMediaBlockIOINTEL = 6140, - DecorationStallFreeINTEL = 6151, - DecorationFPMaxErrorDecorationINTEL = 6170, - DecorationLatencyControlLabelINTEL = 6172, - DecorationLatencyControlConstraintINTEL = 6173, - DecorationConduitKernelArgumentINTEL = 6175, - DecorationRegisterMapKernelArgumentINTEL = 6176, - DecorationMMHostInterfaceAddressWidthINTEL = 6177, - DecorationMMHostInterfaceDataWidthINTEL = 6178, - DecorationMMHostInterfaceLatencyINTEL = 6179, - DecorationMMHostInterfaceReadWriteModeINTEL = 6180, - DecorationMMHostInterfaceMaxBurstINTEL = 6181, - DecorationMMHostInterfaceWaitRequestINTEL = 6182, - DecorationStableKernelArgumentINTEL = 6183, - DecorationHostAccessINTEL = 6188, - DecorationInitModeINTEL = 6190, - DecorationImplementInRegisterMapINTEL = 6191, - DecorationCacheControlLoadINTEL = 6442, - DecorationCacheControlStoreINTEL = 6443, - DecorationMax = 0x7fffffff, -}; - -enum BuiltIn { - BuiltInPosition = 0, - BuiltInPointSize = 1, - BuiltInClipDistance = 3, - BuiltInCullDistance = 4, - BuiltInVertexId = 5, - BuiltInInstanceId = 6, - BuiltInPrimitiveId = 7, - BuiltInInvocationId = 8, - BuiltInLayer = 9, - BuiltInViewportIndex = 10, - BuiltInTessLevelOuter = 11, - BuiltInTessLevelInner = 12, - BuiltInTessCoord = 13, - BuiltInPatchVertices = 14, - BuiltInFragCoord = 15, - BuiltInPointCoord = 16, - BuiltInFrontFacing = 17, - BuiltInSampleId = 18, - BuiltInSamplePosition = 19, - BuiltInSampleMask = 20, - BuiltInFragDepth = 22, - BuiltInHelperInvocation = 23, - BuiltInNumWorkgroups = 24, - BuiltInWorkgroupSize = 25, - BuiltInWorkgroupId = 26, - BuiltInLocalInvocationId = 27, - BuiltInGlobalInvocationId = 28, - BuiltInLocalInvocationIndex = 29, - BuiltInWorkDim = 30, - BuiltInGlobalSize = 31, - BuiltInEnqueuedWorkgroupSize = 32, - BuiltInGlobalOffset = 33, - BuiltInGlobalLinearId = 34, - BuiltInSubgroupSize = 36, - BuiltInSubgroupMaxSize = 37, - BuiltInNumSubgroups = 38, - BuiltInNumEnqueuedSubgroups = 39, - BuiltInSubgroupId = 40, - BuiltInSubgroupLocalInvocationId = 41, - BuiltInVertexIndex = 42, - BuiltInInstanceIndex = 43, - BuiltInCoreIDARM = 4160, - BuiltInCoreCountARM = 4161, - BuiltInCoreMaxIDARM = 4162, - BuiltInWarpIDARM = 4163, - BuiltInWarpMaxIDARM = 4164, - BuiltInSubgroupEqMask = 4416, - BuiltInSubgroupEqMaskKHR = 4416, - BuiltInSubgroupGeMask = 4417, - BuiltInSubgroupGeMaskKHR = 4417, - BuiltInSubgroupGtMask = 4418, - BuiltInSubgroupGtMaskKHR = 4418, - BuiltInSubgroupLeMask = 4419, - BuiltInSubgroupLeMaskKHR = 4419, - BuiltInSubgroupLtMask = 4420, - BuiltInSubgroupLtMaskKHR = 4420, - BuiltInBaseVertex = 4424, - BuiltInBaseInstance = 4425, - BuiltInDrawIndex = 4426, - BuiltInPrimitiveShadingRateKHR = 4432, - BuiltInDeviceIndex = 4438, - BuiltInViewIndex = 4440, - BuiltInShadingRateKHR = 4444, - BuiltInBaryCoordNoPerspAMD = 4992, - BuiltInBaryCoordNoPerspCentroidAMD = 4993, - BuiltInBaryCoordNoPerspSampleAMD = 4994, - BuiltInBaryCoordSmoothAMD = 4995, - BuiltInBaryCoordSmoothCentroidAMD = 4996, - BuiltInBaryCoordSmoothSampleAMD = 4997, - BuiltInBaryCoordPullModelAMD = 4998, - BuiltInFragStencilRefEXT = 5014, - BuiltInRemainingRecursionLevelsAMDX = 5021, - BuiltInShaderIndexAMDX = 5073, - BuiltInViewportMaskNV = 5253, - BuiltInSecondaryPositionNV = 5257, - BuiltInSecondaryViewportMaskNV = 5258, - BuiltInPositionPerViewNV = 5261, - BuiltInViewportMaskPerViewNV = 5262, - BuiltInFullyCoveredEXT = 5264, - BuiltInTaskCountNV = 5274, - BuiltInPrimitiveCountNV = 5275, - BuiltInPrimitiveIndicesNV = 5276, - BuiltInClipDistancePerViewNV = 5277, - BuiltInCullDistancePerViewNV = 5278, - BuiltInLayerPerViewNV = 5279, - BuiltInMeshViewCountNV = 5280, - BuiltInMeshViewIndicesNV = 5281, - BuiltInBaryCoordKHR = 5286, - BuiltInBaryCoordNV = 5286, - BuiltInBaryCoordNoPerspKHR = 5287, - BuiltInBaryCoordNoPerspNV = 5287, - BuiltInFragSizeEXT = 5292, - BuiltInFragmentSizeNV = 5292, - BuiltInFragInvocationCountEXT = 5293, - BuiltInInvocationsPerPixelNV = 5293, - BuiltInPrimitivePointIndicesEXT = 5294, - BuiltInPrimitiveLineIndicesEXT = 5295, - BuiltInPrimitiveTriangleIndicesEXT = 5296, - BuiltInCullPrimitiveEXT = 5299, - BuiltInLaunchIdKHR = 5319, - BuiltInLaunchIdNV = 5319, - BuiltInLaunchSizeKHR = 5320, - BuiltInLaunchSizeNV = 5320, - BuiltInWorldRayOriginKHR = 5321, - BuiltInWorldRayOriginNV = 5321, - BuiltInWorldRayDirectionKHR = 5322, - BuiltInWorldRayDirectionNV = 5322, - BuiltInObjectRayOriginKHR = 5323, - BuiltInObjectRayOriginNV = 5323, - BuiltInObjectRayDirectionKHR = 5324, - BuiltInObjectRayDirectionNV = 5324, - BuiltInRayTminKHR = 5325, - BuiltInRayTminNV = 5325, - BuiltInRayTmaxKHR = 5326, - BuiltInRayTmaxNV = 5326, - BuiltInInstanceCustomIndexKHR = 5327, - BuiltInInstanceCustomIndexNV = 5327, - BuiltInObjectToWorldKHR = 5330, - BuiltInObjectToWorldNV = 5330, - BuiltInWorldToObjectKHR = 5331, - BuiltInWorldToObjectNV = 5331, - BuiltInHitTNV = 5332, - BuiltInHitKindKHR = 5333, - BuiltInHitKindNV = 5333, - BuiltInCurrentRayTimeNV = 5334, - BuiltInHitTriangleVertexPositionsKHR = 5335, - BuiltInHitMicroTriangleVertexPositionsNV = 5337, - BuiltInHitMicroTriangleVertexBarycentricsNV = 5344, - BuiltInIncomingRayFlagsKHR = 5351, - BuiltInIncomingRayFlagsNV = 5351, - BuiltInRayGeometryIndexKHR = 5352, - BuiltInHitIsSphereNV = 5359, - BuiltInHitIsLSSNV = 5360, - BuiltInHitSpherePositionNV = 5361, - BuiltInWarpsPerSMNV = 5374, - BuiltInSMCountNV = 5375, - BuiltInWarpIDNV = 5376, - BuiltInSMIDNV = 5377, - BuiltInHitLSSPositionsNV = 5396, - BuiltInHitKindFrontFacingMicroTriangleNV = 5405, - BuiltInHitKindBackFacingMicroTriangleNV = 5406, - BuiltInHitSphereRadiusNV = 5420, - BuiltInHitLSSRadiiNV = 5421, - BuiltInClusterIDNV = 5436, - BuiltInCullMaskKHR = 6021, - BuiltInMax = 0x7fffffff, -}; - -enum SelectionControlShift { - SelectionControlFlattenShift = 0, - SelectionControlDontFlattenShift = 1, - SelectionControlMax = 0x7fffffff, -}; - -enum SelectionControlMask : unsigned { - SelectionControlMaskNone = 0, - SelectionControlFlattenMask = 0x00000001, - SelectionControlDontFlattenMask = 0x00000002, -}; - -enum LoopControlShift { - LoopControlUnrollShift = 0, - LoopControlDontUnrollShift = 1, - LoopControlDependencyInfiniteShift = 2, - LoopControlDependencyLengthShift = 3, - LoopControlMinIterationsShift = 4, - LoopControlMaxIterationsShift = 5, - LoopControlIterationMultipleShift = 6, - LoopControlPeelCountShift = 7, - LoopControlPartialCountShift = 8, - LoopControlInitiationIntervalINTELShift = 16, - LoopControlMaxConcurrencyINTELShift = 17, - LoopControlDependencyArrayINTELShift = 18, - LoopControlPipelineEnableINTELShift = 19, - LoopControlLoopCoalesceINTELShift = 20, - LoopControlMaxInterleavingINTELShift = 21, - LoopControlSpeculatedIterationsINTELShift = 22, - LoopControlNoFusionINTELShift = 23, - LoopControlLoopCountINTELShift = 24, - LoopControlMaxReinvocationDelayINTELShift = 25, - LoopControlMax = 0x7fffffff, -}; - -enum LoopControlMask : unsigned { - LoopControlMaskNone = 0, - LoopControlUnrollMask = 0x00000001, - LoopControlDontUnrollMask = 0x00000002, - LoopControlDependencyInfiniteMask = 0x00000004, - LoopControlDependencyLengthMask = 0x00000008, - LoopControlMinIterationsMask = 0x00000010, - LoopControlMaxIterationsMask = 0x00000020, - LoopControlIterationMultipleMask = 0x00000040, - LoopControlPeelCountMask = 0x00000080, - LoopControlPartialCountMask = 0x00000100, - LoopControlInitiationIntervalINTELMask = 0x00010000, - LoopControlMaxConcurrencyINTELMask = 0x00020000, - LoopControlDependencyArrayINTELMask = 0x00040000, - LoopControlPipelineEnableINTELMask = 0x00080000, - LoopControlLoopCoalesceINTELMask = 0x00100000, - LoopControlMaxInterleavingINTELMask = 0x00200000, - LoopControlSpeculatedIterationsINTELMask = 0x00400000, - LoopControlNoFusionINTELMask = 0x00800000, - LoopControlLoopCountINTELMask = 0x01000000, - LoopControlMaxReinvocationDelayINTELMask = 0x02000000, -}; - -enum FunctionControlShift { - FunctionControlInlineShift = 0, - FunctionControlDontInlineShift = 1, - FunctionControlPureShift = 2, - FunctionControlConstShift = 3, - FunctionControlOptNoneEXTShift = 16, - FunctionControlOptNoneINTELShift = 16, - FunctionControlMax = 0x7fffffff, -}; - -enum FunctionControlMask : unsigned { - FunctionControlMaskNone = 0, - FunctionControlInlineMask = 0x00000001, - FunctionControlDontInlineMask = 0x00000002, - FunctionControlPureMask = 0x00000004, - FunctionControlConstMask = 0x00000008, - FunctionControlOptNoneEXTMask = 0x00010000, - FunctionControlOptNoneINTELMask = 0x00010000, -}; - -enum MemorySemanticsShift { - MemorySemanticsAcquireShift = 1, - MemorySemanticsReleaseShift = 2, - MemorySemanticsAcquireReleaseShift = 3, - MemorySemanticsSequentiallyConsistentShift = 4, - MemorySemanticsUniformMemoryShift = 6, - MemorySemanticsSubgroupMemoryShift = 7, - MemorySemanticsWorkgroupMemoryShift = 8, - MemorySemanticsCrossWorkgroupMemoryShift = 9, - MemorySemanticsAtomicCounterMemoryShift = 10, - MemorySemanticsImageMemoryShift = 11, - MemorySemanticsOutputMemoryShift = 12, - MemorySemanticsOutputMemoryKHRShift = 12, - MemorySemanticsMakeAvailableShift = 13, - MemorySemanticsMakeAvailableKHRShift = 13, - MemorySemanticsMakeVisibleShift = 14, - MemorySemanticsMakeVisibleKHRShift = 14, - MemorySemanticsVolatileShift = 15, - MemorySemanticsMax = 0x7fffffff, -}; - -enum MemorySemanticsMask : unsigned { - MemorySemanticsMaskNone = 0, - MemorySemanticsAcquireMask = 0x00000002, - MemorySemanticsReleaseMask = 0x00000004, - MemorySemanticsAcquireReleaseMask = 0x00000008, - MemorySemanticsSequentiallyConsistentMask = 0x00000010, - MemorySemanticsUniformMemoryMask = 0x00000040, - MemorySemanticsSubgroupMemoryMask = 0x00000080, - MemorySemanticsWorkgroupMemoryMask = 0x00000100, - MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, - MemorySemanticsAtomicCounterMemoryMask = 0x00000400, - MemorySemanticsImageMemoryMask = 0x00000800, - MemorySemanticsOutputMemoryMask = 0x00001000, - MemorySemanticsOutputMemoryKHRMask = 0x00001000, - MemorySemanticsMakeAvailableMask = 0x00002000, - MemorySemanticsMakeAvailableKHRMask = 0x00002000, - MemorySemanticsMakeVisibleMask = 0x00004000, - MemorySemanticsMakeVisibleKHRMask = 0x00004000, - MemorySemanticsVolatileMask = 0x00008000, -}; - -enum MemoryAccessShift { - MemoryAccessVolatileShift = 0, - MemoryAccessAlignedShift = 1, - MemoryAccessNontemporalShift = 2, - MemoryAccessMakePointerAvailableShift = 3, - MemoryAccessMakePointerAvailableKHRShift = 3, - MemoryAccessMakePointerVisibleShift = 4, - MemoryAccessMakePointerVisibleKHRShift = 4, - MemoryAccessNonPrivatePointerShift = 5, - MemoryAccessNonPrivatePointerKHRShift = 5, - MemoryAccessAliasScopeINTELMaskShift = 16, - MemoryAccessNoAliasINTELMaskShift = 17, - MemoryAccessMax = 0x7fffffff, -}; - -enum MemoryAccessMask : unsigned { - MemoryAccessMaskNone = 0, - MemoryAccessVolatileMask = 0x00000001, - MemoryAccessAlignedMask = 0x00000002, - MemoryAccessNontemporalMask = 0x00000004, - MemoryAccessMakePointerAvailableMask = 0x00000008, - MemoryAccessMakePointerAvailableKHRMask = 0x00000008, - MemoryAccessMakePointerVisibleMask = 0x00000010, - MemoryAccessMakePointerVisibleKHRMask = 0x00000010, - MemoryAccessNonPrivatePointerMask = 0x00000020, - MemoryAccessNonPrivatePointerKHRMask = 0x00000020, - MemoryAccessAliasScopeINTELMaskMask = 0x00010000, - MemoryAccessNoAliasINTELMaskMask = 0x00020000, -}; - -enum Scope { - ScopeCrossDevice = 0, - ScopeDevice = 1, - ScopeWorkgroup = 2, - ScopeSubgroup = 3, - ScopeInvocation = 4, - ScopeQueueFamily = 5, - ScopeQueueFamilyKHR = 5, - ScopeShaderCallKHR = 6, - ScopeMax = 0x7fffffff, -}; - -enum GroupOperation { - GroupOperationReduce = 0, - GroupOperationInclusiveScan = 1, - GroupOperationExclusiveScan = 2, - GroupOperationClusteredReduce = 3, - GroupOperationPartitionedReduceNV = 6, - GroupOperationPartitionedInclusiveScanNV = 7, - GroupOperationPartitionedExclusiveScanNV = 8, - GroupOperationMax = 0x7fffffff, -}; - -enum KernelEnqueueFlags { - KernelEnqueueFlagsNoWait = 0, - KernelEnqueueFlagsWaitKernel = 1, - KernelEnqueueFlagsWaitWorkGroup = 2, - KernelEnqueueFlagsMax = 0x7fffffff, -}; - -enum KernelProfilingInfoShift { - KernelProfilingInfoCmdExecTimeShift = 0, - KernelProfilingInfoMax = 0x7fffffff, -}; - -enum KernelProfilingInfoMask : unsigned { - KernelProfilingInfoMaskNone = 0, - KernelProfilingInfoCmdExecTimeMask = 0x00000001, -}; - -enum Capability { - CapabilityMatrix = 0, - CapabilityShader = 1, - CapabilityGeometry = 2, - CapabilityTessellation = 3, - CapabilityAddresses = 4, - CapabilityLinkage = 5, - CapabilityKernel = 6, - CapabilityVector16 = 7, - CapabilityFloat16Buffer = 8, - CapabilityFloat16 = 9, - CapabilityFloat64 = 10, - CapabilityInt64 = 11, - CapabilityInt64Atomics = 12, - CapabilityImageBasic = 13, - CapabilityImageReadWrite = 14, - CapabilityImageMipmap = 15, - CapabilityPipes = 17, - CapabilityGroups = 18, - CapabilityDeviceEnqueue = 19, - CapabilityLiteralSampler = 20, - CapabilityAtomicStorage = 21, - CapabilityInt16 = 22, - CapabilityTessellationPointSize = 23, - CapabilityGeometryPointSize = 24, - CapabilityImageGatherExtended = 25, - CapabilityStorageImageMultisample = 27, - CapabilityUniformBufferArrayDynamicIndexing = 28, - CapabilitySampledImageArrayDynamicIndexing = 29, - CapabilityStorageBufferArrayDynamicIndexing = 30, - CapabilityStorageImageArrayDynamicIndexing = 31, - CapabilityClipDistance = 32, - CapabilityCullDistance = 33, - CapabilityImageCubeArray = 34, - CapabilitySampleRateShading = 35, - CapabilityImageRect = 36, - CapabilitySampledRect = 37, - CapabilityGenericPointer = 38, - CapabilityInt8 = 39, - CapabilityInputAttachment = 40, - CapabilitySparseResidency = 41, - CapabilityMinLod = 42, - CapabilitySampled1D = 43, - CapabilityImage1D = 44, - CapabilitySampledCubeArray = 45, - CapabilitySampledBuffer = 46, - CapabilityImageBuffer = 47, - CapabilityImageMSArray = 48, - CapabilityStorageImageExtendedFormats = 49, - CapabilityImageQuery = 50, - CapabilityDerivativeControl = 51, - CapabilityInterpolationFunction = 52, - CapabilityTransformFeedback = 53, - CapabilityGeometryStreams = 54, - CapabilityStorageImageReadWithoutFormat = 55, - CapabilityStorageImageWriteWithoutFormat = 56, - CapabilityMultiViewport = 57, - CapabilitySubgroupDispatch = 58, - CapabilityNamedBarrier = 59, - CapabilityPipeStorage = 60, - CapabilityGroupNonUniform = 61, - CapabilityGroupNonUniformVote = 62, - CapabilityGroupNonUniformArithmetic = 63, - CapabilityGroupNonUniformBallot = 64, - CapabilityGroupNonUniformShuffle = 65, - CapabilityGroupNonUniformShuffleRelative = 66, - CapabilityGroupNonUniformClustered = 67, - CapabilityGroupNonUniformQuad = 68, - CapabilityShaderLayer = 69, - CapabilityShaderViewportIndex = 70, - CapabilityUniformDecoration = 71, - CapabilityCoreBuiltinsARM = 4165, - CapabilityTileImageColorReadAccessEXT = 4166, - CapabilityTileImageDepthReadAccessEXT = 4167, - CapabilityTileImageStencilReadAccessEXT = 4168, - CapabilityCooperativeMatrixLayoutsARM = 4201, - CapabilityFragmentShadingRateKHR = 4422, - CapabilitySubgroupBallotKHR = 4423, - CapabilityDrawParameters = 4427, - CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428, - CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, - CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, - CapabilitySubgroupVoteKHR = 4431, - CapabilityStorageBuffer16BitAccess = 4433, - CapabilityStorageUniformBufferBlock16 = 4433, - CapabilityStorageUniform16 = 4434, - CapabilityUniformAndStorageBuffer16BitAccess = 4434, - CapabilityStoragePushConstant16 = 4435, - CapabilityStorageInputOutput16 = 4436, - CapabilityDeviceGroup = 4437, - CapabilityMultiView = 4439, - CapabilityVariablePointersStorageBuffer = 4441, - CapabilityVariablePointers = 4442, - CapabilityAtomicStorageOps = 4445, - CapabilitySampleMaskPostDepthCoverage = 4447, - CapabilityStorageBuffer8BitAccess = 4448, - CapabilityUniformAndStorageBuffer8BitAccess = 4449, - CapabilityStoragePushConstant8 = 4450, - CapabilityDenormPreserve = 4464, - CapabilityDenormFlushToZero = 4465, - CapabilitySignedZeroInfNanPreserve = 4466, - CapabilityRoundingModeRTE = 4467, - CapabilityRoundingModeRTZ = 4468, - CapabilityRayQueryProvisionalKHR = 4471, - CapabilityRayQueryKHR = 4472, - CapabilityUntypedPointersKHR = 4473, - CapabilityRayTraversalPrimitiveCullingKHR = 4478, - CapabilityRayTracingKHR = 4479, - CapabilityTextureSampleWeightedQCOM = 4484, - CapabilityTextureBoxFilterQCOM = 4485, - CapabilityTextureBlockMatchQCOM = 4486, - CapabilityTextureBlockMatch2QCOM = 4498, - CapabilityFloat16ImageAMD = 5008, - CapabilityImageGatherBiasLodAMD = 5009, - CapabilityFragmentMaskAMD = 5010, - CapabilityStencilExportEXT = 5013, - CapabilityImageReadWriteLodAMD = 5015, - CapabilityInt64ImageEXT = 5016, - CapabilityShaderClockKHR = 5055, - CapabilityShaderEnqueueAMDX = 5067, - CapabilityQuadControlKHR = 5087, - CapabilitySampleMaskOverrideCoverageNV = 5249, - CapabilityGeometryShaderPassthroughNV = 5251, - CapabilityShaderViewportIndexLayerEXT = 5254, - CapabilityShaderViewportIndexLayerNV = 5254, - CapabilityShaderViewportMaskNV = 5255, - CapabilityShaderStereoViewNV = 5259, - CapabilityPerViewAttributesNV = 5260, - CapabilityFragmentFullyCoveredEXT = 5265, - CapabilityMeshShadingNV = 5266, - CapabilityImageFootprintNV = 5282, - CapabilityMeshShadingEXT = 5283, - CapabilityFragmentBarycentricKHR = 5284, - CapabilityFragmentBarycentricNV = 5284, - CapabilityComputeDerivativeGroupQuadsKHR = 5288, - CapabilityComputeDerivativeGroupQuadsNV = 5288, - CapabilityFragmentDensityEXT = 5291, - CapabilityShadingRateNV = 5291, - CapabilityGroupNonUniformPartitionedNV = 5297, - CapabilityShaderNonUniform = 5301, - CapabilityShaderNonUniformEXT = 5301, - CapabilityRuntimeDescriptorArray = 5302, - CapabilityRuntimeDescriptorArrayEXT = 5302, - CapabilityInputAttachmentArrayDynamicIndexing = 5303, - CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303, - CapabilityUniformTexelBufferArrayDynamicIndexing = 5304, - CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304, - CapabilityStorageTexelBufferArrayDynamicIndexing = 5305, - CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305, - CapabilityUniformBufferArrayNonUniformIndexing = 5306, - CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306, - CapabilitySampledImageArrayNonUniformIndexing = 5307, - CapabilitySampledImageArrayNonUniformIndexingEXT = 5307, - CapabilityStorageBufferArrayNonUniformIndexing = 5308, - CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308, - CapabilityStorageImageArrayNonUniformIndexing = 5309, - CapabilityStorageImageArrayNonUniformIndexingEXT = 5309, - CapabilityInputAttachmentArrayNonUniformIndexing = 5310, - CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310, - CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311, - CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, - CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, - CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, - CapabilityRayTracingPositionFetchKHR = 5336, - CapabilityRayTracingNV = 5340, - CapabilityRayTracingMotionBlurNV = 5341, - CapabilityVulkanMemoryModel = 5345, - CapabilityVulkanMemoryModelKHR = 5345, - CapabilityVulkanMemoryModelDeviceScope = 5346, - CapabilityVulkanMemoryModelDeviceScopeKHR = 5346, - CapabilityPhysicalStorageBufferAddresses = 5347, - CapabilityPhysicalStorageBufferAddressesEXT = 5347, - CapabilityComputeDerivativeGroupLinearKHR = 5350, - CapabilityComputeDerivativeGroupLinearNV = 5350, - CapabilityRayTracingProvisionalKHR = 5353, - CapabilityCooperativeMatrixNV = 5357, - CapabilityFragmentShaderSampleInterlockEXT = 5363, - CapabilityFragmentShaderShadingRateInterlockEXT = 5372, - CapabilityShaderSMBuiltinsNV = 5373, - CapabilityFragmentShaderPixelInterlockEXT = 5378, - CapabilityDemoteToHelperInvocation = 5379, - CapabilityDemoteToHelperInvocationEXT = 5379, - CapabilityDisplacementMicromapNV = 5380, - CapabilityRayTracingOpacityMicromapEXT = 5381, - CapabilityShaderInvocationReorderNV = 5383, - CapabilityBindlessTextureNV = 5390, - CapabilityRayQueryPositionFetchKHR = 5391, - CapabilityCooperativeVectorNV = 5394, - CapabilityAtomicFloat16VectorNV = 5404, - CapabilityRayTracingDisplacementMicromapNV = 5409, - CapabilityRawAccessChainsNV = 5414, - CapabilityRayTracingSpheresGeometryNV = 5418, - CapabilityRayTracingLinearSweptSpheresGeometryNV = 5419, - CapabilityCooperativeMatrixReductionsNV = 5430, - CapabilityCooperativeMatrixConversionsNV = 5431, - CapabilityCooperativeMatrixPerElementOperationsNV = 5432, - CapabilityCooperativeMatrixTensorAddressingNV = 5433, - CapabilityCooperativeMatrixBlockLoadsNV = 5434, - CapabilityCooperativeVectorTrainingNV = 5435, - CapabilityRayTracingClusterAccelerationStructureNV = 5437, - CapabilityTensorAddressingNV = 5439, - CapabilitySubgroupShuffleINTEL = 5568, - CapabilitySubgroupBufferBlockIOINTEL = 5569, - CapabilitySubgroupImageBlockIOINTEL = 5570, - CapabilitySubgroupImageMediaBlockIOINTEL = 5579, - CapabilityRoundToInfinityINTEL = 5582, - CapabilityFloatingPointModeINTEL = 5583, - CapabilityIntegerFunctions2INTEL = 5584, - CapabilityFunctionPointersINTEL = 5603, - CapabilityIndirectReferencesINTEL = 5604, - CapabilityAsmINTEL = 5606, - CapabilityAtomicFloat32MinMaxEXT = 5612, - CapabilityAtomicFloat64MinMaxEXT = 5613, - CapabilityAtomicFloat16MinMaxEXT = 5616, - CapabilityVectorComputeINTEL = 5617, - CapabilityVectorAnyINTEL = 5619, - CapabilityExpectAssumeKHR = 5629, - CapabilitySubgroupAvcMotionEstimationINTEL = 5696, - CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697, - CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698, - CapabilityVariableLengthArrayINTEL = 5817, - CapabilityFunctionFloatControlINTEL = 5821, - CapabilityFPGAMemoryAttributesINTEL = 5824, - CapabilityFPFastMathModeINTEL = 5837, - CapabilityArbitraryPrecisionIntegersINTEL = 5844, - CapabilityArbitraryPrecisionFloatingPointINTEL = 5845, - CapabilityUnstructuredLoopControlsINTEL = 5886, - CapabilityFPGALoopControlsINTEL = 5888, - CapabilityKernelAttributesINTEL = 5892, - CapabilityFPGAKernelAttributesINTEL = 5897, - CapabilityFPGAMemoryAccessesINTEL = 5898, - CapabilityFPGAClusterAttributesINTEL = 5904, - CapabilityLoopFuseINTEL = 5906, - CapabilityFPGADSPControlINTEL = 5908, - CapabilityMemoryAccessAliasingINTEL = 5910, - CapabilityFPGAInvocationPipeliningAttributesINTEL = 5916, - CapabilityFPGABufferLocationINTEL = 5920, - CapabilityArbitraryPrecisionFixedPointINTEL = 5922, - CapabilityUSMStorageClassesINTEL = 5935, - CapabilityRuntimeAlignedAttributeINTEL = 5939, - CapabilityIOPipesINTEL = 5943, - CapabilityBlockingPipesINTEL = 5945, - CapabilityFPGARegINTEL = 5948, - CapabilityDotProductInputAll = 6016, - CapabilityDotProductInputAllKHR = 6016, - CapabilityDotProductInput4x8Bit = 6017, - CapabilityDotProductInput4x8BitKHR = 6017, - CapabilityDotProductInput4x8BitPacked = 6018, - CapabilityDotProductInput4x8BitPackedKHR = 6018, - CapabilityDotProduct = 6019, - CapabilityDotProductKHR = 6019, - CapabilityRayCullMaskKHR = 6020, - CapabilityCooperativeMatrixKHR = 6022, - CapabilityReplicatedCompositesEXT = 6024, - CapabilityBitInstructions = 6025, - CapabilityGroupNonUniformRotateKHR = 6026, - CapabilityFloatControls2 = 6029, - CapabilityAtomicFloat32AddEXT = 6033, - CapabilityAtomicFloat64AddEXT = 6034, - CapabilityLongCompositesINTEL = 6089, - CapabilityOptNoneEXT = 6094, - CapabilityOptNoneINTEL = 6094, - CapabilityAtomicFloat16AddEXT = 6095, - CapabilityDebugInfoModuleINTEL = 6114, - CapabilityBFloat16ConversionINTEL = 6115, - CapabilitySplitBarrierINTEL = 6141, - CapabilityArithmeticFenceEXT = 6144, - CapabilityFPGAClusterAttributesV2INTEL = 6150, - CapabilityFPGAKernelAttributesv2INTEL = 6161, - CapabilityFPMaxErrorINTEL = 6169, - CapabilityFPGALatencyControlINTEL = 6171, - CapabilityFPGAArgumentInterfacesINTEL = 6174, - CapabilityGlobalVariableHostAccessINTEL = 6187, - CapabilityGlobalVariableFPGADecorationsINTEL = 6189, - CapabilitySubgroupBufferPrefetchINTEL = 6220, - CapabilityGroupUniformArithmeticKHR = 6400, - CapabilityMaskedGatherScatterINTEL = 6427, - CapabilityCacheControlsINTEL = 6441, - CapabilityRegisterLimitsINTEL = 6460, - CapabilityMax = 0x7fffffff, -}; - -enum RayFlagsShift { - RayFlagsOpaqueKHRShift = 0, - RayFlagsNoOpaqueKHRShift = 1, - RayFlagsTerminateOnFirstHitKHRShift = 2, - RayFlagsSkipClosestHitShaderKHRShift = 3, - RayFlagsCullBackFacingTrianglesKHRShift = 4, - RayFlagsCullFrontFacingTrianglesKHRShift = 5, - RayFlagsCullOpaqueKHRShift = 6, - RayFlagsCullNoOpaqueKHRShift = 7, - RayFlagsSkipTrianglesKHRShift = 8, - RayFlagsSkipAABBsKHRShift = 9, - RayFlagsForceOpacityMicromap2StateEXTShift = 10, - RayFlagsMax = 0x7fffffff, -}; - -enum RayFlagsMask : unsigned { - RayFlagsMaskNone = 0, - RayFlagsOpaqueKHRMask = 0x00000001, - RayFlagsNoOpaqueKHRMask = 0x00000002, - RayFlagsTerminateOnFirstHitKHRMask = 0x00000004, - RayFlagsSkipClosestHitShaderKHRMask = 0x00000008, - RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010, - RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, - RayFlagsCullOpaqueKHRMask = 0x00000040, - RayFlagsCullNoOpaqueKHRMask = 0x00000080, - RayFlagsSkipTrianglesKHRMask = 0x00000100, - RayFlagsSkipAABBsKHRMask = 0x00000200, - RayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400, -}; - -enum RayQueryIntersection { - RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0, - RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1, - RayQueryIntersectionMax = 0x7fffffff, -}; - -enum RayQueryCommittedIntersectionType { - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0, - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1, - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2, - RayQueryCommittedIntersectionTypeMax = 0x7fffffff, -}; - -enum RayQueryCandidateIntersectionType { - RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0, - RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1, - RayQueryCandidateIntersectionTypeMax = 0x7fffffff, -}; - -enum FragmentShadingRateShift { - FragmentShadingRateVertical2PixelsShift = 0, - FragmentShadingRateVertical4PixelsShift = 1, - FragmentShadingRateHorizontal2PixelsShift = 2, - FragmentShadingRateHorizontal4PixelsShift = 3, - FragmentShadingRateMax = 0x7fffffff, -}; - -enum FragmentShadingRateMask : unsigned { - FragmentShadingRateMaskNone = 0, - FragmentShadingRateVertical2PixelsMask = 0x00000001, - FragmentShadingRateVertical4PixelsMask = 0x00000002, - FragmentShadingRateHorizontal2PixelsMask = 0x00000004, - FragmentShadingRateHorizontal4PixelsMask = 0x00000008, -}; - -enum FPDenormMode { - FPDenormModePreserve = 0, - FPDenormModeFlushToZero = 1, - FPDenormModeMax = 0x7fffffff, -}; - -enum FPOperationMode { - FPOperationModeIEEE = 0, - FPOperationModeALT = 1, - FPOperationModeMax = 0x7fffffff, -}; - -enum QuantizationModes { - QuantizationModesTRN = 0, - QuantizationModesTRN_ZERO = 1, - QuantizationModesRND = 2, - QuantizationModesRND_ZERO = 3, - QuantizationModesRND_INF = 4, - QuantizationModesRND_MIN_INF = 5, - QuantizationModesRND_CONV = 6, - QuantizationModesRND_CONV_ODD = 7, - QuantizationModesMax = 0x7fffffff, -}; - -enum OverflowModes { - OverflowModesWRAP = 0, - OverflowModesSAT = 1, - OverflowModesSAT_ZERO = 2, - OverflowModesSAT_SYM = 3, - OverflowModesMax = 0x7fffffff, -}; - -enum PackedVectorFormat { - PackedVectorFormatPackedVectorFormat4x8Bit = 0, - PackedVectorFormatPackedVectorFormat4x8BitKHR = 0, - PackedVectorFormatMax = 0x7fffffff, -}; - -enum CooperativeMatrixOperandsShift { - CooperativeMatrixOperandsMatrixASignedComponentsKHRShift = 0, - CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift = 1, - CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift = 2, - CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift = 3, - CooperativeMatrixOperandsSaturatingAccumulationKHRShift = 4, - CooperativeMatrixOperandsMax = 0x7fffffff, -}; - -enum CooperativeMatrixOperandsMask : unsigned { - CooperativeMatrixOperandsMaskNone = 0, - CooperativeMatrixOperandsMatrixASignedComponentsKHRMask = 0x00000001, - CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask = 0x00000002, - CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask = 0x00000004, - CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask = 0x00000008, - CooperativeMatrixOperandsSaturatingAccumulationKHRMask = 0x00000010, -}; - -enum CooperativeMatrixLayout { - CooperativeMatrixLayoutRowMajorKHR = 0, - CooperativeMatrixLayoutColumnMajorKHR = 1, - CooperativeMatrixLayoutRowBlockedInterleavedARM = 4202, - CooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203, - CooperativeMatrixLayoutMax = 0x7fffffff, -}; - -enum CooperativeMatrixUse { - CooperativeMatrixUseMatrixAKHR = 0, - CooperativeMatrixUseMatrixBKHR = 1, - CooperativeMatrixUseMatrixAccumulatorKHR = 2, - CooperativeMatrixUseMax = 0x7fffffff, -}; - -enum CooperativeMatrixReduceShift { - CooperativeMatrixReduceRowShift = 0, - CooperativeMatrixReduceColumnShift = 1, - CooperativeMatrixReduce2x2Shift = 2, - CooperativeMatrixReduceMax = 0x7fffffff, -}; - -enum CooperativeMatrixReduceMask : unsigned { - CooperativeMatrixReduceMaskNone = 0, - CooperativeMatrixReduceRowMask = 0x00000001, - CooperativeMatrixReduceColumnMask = 0x00000002, - CooperativeMatrixReduce2x2Mask = 0x00000004, -}; - -enum TensorClampMode { - TensorClampModeUndefined = 0, - TensorClampModeConstant = 1, - TensorClampModeClampToEdge = 2, - TensorClampModeRepeat = 3, - TensorClampModeRepeatMirrored = 4, - TensorClampModeMax = 0x7fffffff, -}; - -enum TensorAddressingOperandsShift { - TensorAddressingOperandsTensorViewShift = 0, - TensorAddressingOperandsDecodeFuncShift = 1, - TensorAddressingOperandsMax = 0x7fffffff, -}; - -enum TensorAddressingOperandsMask : unsigned { - TensorAddressingOperandsMaskNone = 0, - TensorAddressingOperandsTensorViewMask = 0x00000001, - TensorAddressingOperandsDecodeFuncMask = 0x00000002, -}; - -enum InitializationModeQualifier { - InitializationModeQualifierInitOnDeviceReprogramINTEL = 0, - InitializationModeQualifierInitOnDeviceResetINTEL = 1, - InitializationModeQualifierMax = 0x7fffffff, -}; - -enum HostAccessQualifier { - HostAccessQualifierNoneINTEL = 0, - HostAccessQualifierReadINTEL = 1, - HostAccessQualifierWriteINTEL = 2, - HostAccessQualifierReadWriteINTEL = 3, - HostAccessQualifierMax = 0x7fffffff, -}; - -enum LoadCacheControl { - LoadCacheControlUncachedINTEL = 0, - LoadCacheControlCachedINTEL = 1, - LoadCacheControlStreamingINTEL = 2, - LoadCacheControlInvalidateAfterReadINTEL = 3, - LoadCacheControlConstCachedINTEL = 4, - LoadCacheControlMax = 0x7fffffff, -}; - -enum StoreCacheControl { - StoreCacheControlUncachedINTEL = 0, - StoreCacheControlWriteThroughINTEL = 1, - StoreCacheControlWriteBackINTEL = 2, - StoreCacheControlStreamingINTEL = 3, - StoreCacheControlMax = 0x7fffffff, -}; - -enum NamedMaximumNumberOfRegisters { - NamedMaximumNumberOfRegistersAutoINTEL = 0, - NamedMaximumNumberOfRegistersMax = 0x7fffffff, -}; - -enum RawAccessChainOperandsShift { - RawAccessChainOperandsRobustnessPerComponentNVShift = 0, - RawAccessChainOperandsRobustnessPerElementNVShift = 1, - RawAccessChainOperandsMax = 0x7fffffff, -}; - -enum RawAccessChainOperandsMask : unsigned { - RawAccessChainOperandsMaskNone = 0, - RawAccessChainOperandsRobustnessPerComponentNVMask = 0x00000001, - RawAccessChainOperandsRobustnessPerElementNVMask = 0x00000002, -}; - -enum FPEncoding { - FPEncodingMax = 0x7fffffff, -}; - -enum CooperativeVectorMatrixLayout { - CooperativeVectorMatrixLayoutRowMajorNV = 0, - CooperativeVectorMatrixLayoutColumnMajorNV = 1, - CooperativeVectorMatrixLayoutInferencingOptimalNV = 2, - CooperativeVectorMatrixLayoutTrainingOptimalNV = 3, - CooperativeVectorMatrixLayoutMax = 0x7fffffff, -}; - -enum ComponentType { - ComponentTypeFloat16NV = 0, - ComponentTypeFloat32NV = 1, - ComponentTypeFloat64NV = 2, - ComponentTypeSignedInt8NV = 3, - ComponentTypeSignedInt16NV = 4, - ComponentTypeSignedInt32NV = 5, - ComponentTypeSignedInt64NV = 6, - ComponentTypeUnsignedInt8NV = 7, - ComponentTypeUnsignedInt16NV = 8, - ComponentTypeUnsignedInt32NV = 9, - ComponentTypeUnsignedInt64NV = 10, - ComponentTypeSignedInt8PackedNV = 1000491000, - ComponentTypeUnsignedInt8PackedNV = 1000491001, - ComponentTypeFloatE4M3NV = 1000491002, - ComponentTypeFloatE5M2NV = 1000491003, - ComponentTypeMax = 0x7fffffff, -}; - -enum Op { - OpNop = 0, - OpUndef = 1, - OpSourceContinued = 2, - OpSource = 3, - OpSourceExtension = 4, - OpName = 5, - OpMemberName = 6, - OpString = 7, - OpLine = 8, - OpExtension = 10, - OpExtInstImport = 11, - OpExtInst = 12, - OpMemoryModel = 14, - OpEntryPoint = 15, - OpExecutionMode = 16, - OpCapability = 17, - OpTypeVoid = 19, - OpTypeBool = 20, - OpTypeInt = 21, - OpTypeFloat = 22, - OpTypeVector = 23, - OpTypeMatrix = 24, - OpTypeImage = 25, - OpTypeSampler = 26, - OpTypeSampledImage = 27, - OpTypeArray = 28, - OpTypeRuntimeArray = 29, - OpTypeStruct = 30, - OpTypeOpaque = 31, - OpTypePointer = 32, - OpTypeFunction = 33, - OpTypeEvent = 34, - OpTypeDeviceEvent = 35, - OpTypeReserveId = 36, - OpTypeQueue = 37, - OpTypePipe = 38, - OpTypeForwardPointer = 39, - OpConstantTrue = 41, - OpConstantFalse = 42, - OpConstant = 43, - OpConstantComposite = 44, - OpConstantSampler = 45, - OpConstantNull = 46, - OpSpecConstantTrue = 48, - OpSpecConstantFalse = 49, - OpSpecConstant = 50, - OpSpecConstantComposite = 51, - OpSpecConstantOp = 52, - OpFunction = 54, - OpFunctionParameter = 55, - OpFunctionEnd = 56, - OpFunctionCall = 57, - OpVariable = 59, - OpImageTexelPointer = 60, - OpLoad = 61, - OpStore = 62, - OpCopyMemory = 63, - OpCopyMemorySized = 64, - OpAccessChain = 65, - OpInBoundsAccessChain = 66, - OpPtrAccessChain = 67, - OpArrayLength = 68, - OpGenericPtrMemSemantics = 69, - OpInBoundsPtrAccessChain = 70, - OpDecorate = 71, - OpMemberDecorate = 72, - OpDecorationGroup = 73, - OpGroupDecorate = 74, - OpGroupMemberDecorate = 75, - OpVectorExtractDynamic = 77, - OpVectorInsertDynamic = 78, - OpVectorShuffle = 79, - OpCompositeConstruct = 80, - OpCompositeExtract = 81, - OpCompositeInsert = 82, - OpCopyObject = 83, - OpTranspose = 84, - OpSampledImage = 86, - OpImageSampleImplicitLod = 87, - OpImageSampleExplicitLod = 88, - OpImageSampleDrefImplicitLod = 89, - OpImageSampleDrefExplicitLod = 90, - OpImageSampleProjImplicitLod = 91, - OpImageSampleProjExplicitLod = 92, - OpImageSampleProjDrefImplicitLod = 93, - OpImageSampleProjDrefExplicitLod = 94, - OpImageFetch = 95, - OpImageGather = 96, - OpImageDrefGather = 97, - OpImageRead = 98, - OpImageWrite = 99, - OpImage = 100, - OpImageQueryFormat = 101, - OpImageQueryOrder = 102, - OpImageQuerySizeLod = 103, - OpImageQuerySize = 104, - OpImageQueryLod = 105, - OpImageQueryLevels = 106, - OpImageQuerySamples = 107, - OpConvertFToU = 109, - OpConvertFToS = 110, - OpConvertSToF = 111, - OpConvertUToF = 112, - OpUConvert = 113, - OpSConvert = 114, - OpFConvert = 115, - OpQuantizeToF16 = 116, - OpConvertPtrToU = 117, - OpSatConvertSToU = 118, - OpSatConvertUToS = 119, - OpConvertUToPtr = 120, - OpPtrCastToGeneric = 121, - OpGenericCastToPtr = 122, - OpGenericCastToPtrExplicit = 123, - OpBitcast = 124, - OpSNegate = 126, - OpFNegate = 127, - OpIAdd = 128, - OpFAdd = 129, - OpISub = 130, - OpFSub = 131, - OpIMul = 132, - OpFMul = 133, - OpUDiv = 134, - OpSDiv = 135, - OpFDiv = 136, - OpUMod = 137, - OpSRem = 138, - OpSMod = 139, - OpFRem = 140, - OpFMod = 141, - OpVectorTimesScalar = 142, - OpMatrixTimesScalar = 143, - OpVectorTimesMatrix = 144, - OpMatrixTimesVector = 145, - OpMatrixTimesMatrix = 146, - OpOuterProduct = 147, - OpDot = 148, - OpIAddCarry = 149, - OpISubBorrow = 150, - OpUMulExtended = 151, - OpSMulExtended = 152, - OpAny = 154, - OpAll = 155, - OpIsNan = 156, - OpIsInf = 157, - OpIsFinite = 158, - OpIsNormal = 159, - OpSignBitSet = 160, - OpLessOrGreater = 161, - OpOrdered = 162, - OpUnordered = 163, - OpLogicalEqual = 164, - OpLogicalNotEqual = 165, - OpLogicalOr = 166, - OpLogicalAnd = 167, - OpLogicalNot = 168, - OpSelect = 169, - OpIEqual = 170, - OpINotEqual = 171, - OpUGreaterThan = 172, - OpSGreaterThan = 173, - OpUGreaterThanEqual = 174, - OpSGreaterThanEqual = 175, - OpULessThan = 176, - OpSLessThan = 177, - OpULessThanEqual = 178, - OpSLessThanEqual = 179, - OpFOrdEqual = 180, - OpFUnordEqual = 181, - OpFOrdNotEqual = 182, - OpFUnordNotEqual = 183, - OpFOrdLessThan = 184, - OpFUnordLessThan = 185, - OpFOrdGreaterThan = 186, - OpFUnordGreaterThan = 187, - OpFOrdLessThanEqual = 188, - OpFUnordLessThanEqual = 189, - OpFOrdGreaterThanEqual = 190, - OpFUnordGreaterThanEqual = 191, - OpShiftRightLogical = 194, - OpShiftRightArithmetic = 195, - OpShiftLeftLogical = 196, - OpBitwiseOr = 197, - OpBitwiseXor = 198, - OpBitwiseAnd = 199, - OpNot = 200, - OpBitFieldInsert = 201, - OpBitFieldSExtract = 202, - OpBitFieldUExtract = 203, - OpBitReverse = 204, - OpBitCount = 205, - OpDPdx = 207, - OpDPdy = 208, - OpFwidth = 209, - OpDPdxFine = 210, - OpDPdyFine = 211, - OpFwidthFine = 212, - OpDPdxCoarse = 213, - OpDPdyCoarse = 214, - OpFwidthCoarse = 215, - OpEmitVertex = 218, - OpEndPrimitive = 219, - OpEmitStreamVertex = 220, - OpEndStreamPrimitive = 221, - OpControlBarrier = 224, - OpMemoryBarrier = 225, - OpAtomicLoad = 227, - OpAtomicStore = 228, - OpAtomicExchange = 229, - OpAtomicCompareExchange = 230, - OpAtomicCompareExchangeWeak = 231, - OpAtomicIIncrement = 232, - OpAtomicIDecrement = 233, - OpAtomicIAdd = 234, - OpAtomicISub = 235, - OpAtomicSMin = 236, - OpAtomicUMin = 237, - OpAtomicSMax = 238, - OpAtomicUMax = 239, - OpAtomicAnd = 240, - OpAtomicOr = 241, - OpAtomicXor = 242, - OpPhi = 245, - OpLoopMerge = 246, - OpSelectionMerge = 247, - OpLabel = 248, - OpBranch = 249, - OpBranchConditional = 250, - OpSwitch = 251, - OpKill = 252, - OpReturn = 253, - OpReturnValue = 254, - OpUnreachable = 255, - OpLifetimeStart = 256, - OpLifetimeStop = 257, - OpGroupAsyncCopy = 259, - OpGroupWaitEvents = 260, - OpGroupAll = 261, - OpGroupAny = 262, - OpGroupBroadcast = 263, - OpGroupIAdd = 264, - OpGroupFAdd = 265, - OpGroupFMin = 266, - OpGroupUMin = 267, - OpGroupSMin = 268, - OpGroupFMax = 269, - OpGroupUMax = 270, - OpGroupSMax = 271, - OpReadPipe = 274, - OpWritePipe = 275, - OpReservedReadPipe = 276, - OpReservedWritePipe = 277, - OpReserveReadPipePackets = 278, - OpReserveWritePipePackets = 279, - OpCommitReadPipe = 280, - OpCommitWritePipe = 281, - OpIsValidReserveId = 282, - OpGetNumPipePackets = 283, - OpGetMaxPipePackets = 284, - OpGroupReserveReadPipePackets = 285, - OpGroupReserveWritePipePackets = 286, - OpGroupCommitReadPipe = 287, - OpGroupCommitWritePipe = 288, - OpEnqueueMarker = 291, - OpEnqueueKernel = 292, - OpGetKernelNDrangeSubGroupCount = 293, - OpGetKernelNDrangeMaxSubGroupSize = 294, - OpGetKernelWorkGroupSize = 295, - OpGetKernelPreferredWorkGroupSizeMultiple = 296, - OpRetainEvent = 297, - OpReleaseEvent = 298, - OpCreateUserEvent = 299, - OpIsValidEvent = 300, - OpSetUserEventStatus = 301, - OpCaptureEventProfilingInfo = 302, - OpGetDefaultQueue = 303, - OpBuildNDRange = 304, - OpImageSparseSampleImplicitLod = 305, - OpImageSparseSampleExplicitLod = 306, - OpImageSparseSampleDrefImplicitLod = 307, - OpImageSparseSampleDrefExplicitLod = 308, - OpImageSparseSampleProjImplicitLod = 309, - OpImageSparseSampleProjExplicitLod = 310, - OpImageSparseSampleProjDrefImplicitLod = 311, - OpImageSparseSampleProjDrefExplicitLod = 312, - OpImageSparseFetch = 313, - OpImageSparseGather = 314, - OpImageSparseDrefGather = 315, - OpImageSparseTexelsResident = 316, - OpNoLine = 317, - OpAtomicFlagTestAndSet = 318, - OpAtomicFlagClear = 319, - OpImageSparseRead = 320, - OpSizeOf = 321, - OpTypePipeStorage = 322, - OpConstantPipeStorage = 323, - OpCreatePipeFromPipeStorage = 324, - OpGetKernelLocalSizeForSubgroupCount = 325, - OpGetKernelMaxNumSubgroups = 326, - OpTypeNamedBarrier = 327, - OpNamedBarrierInitialize = 328, - OpMemoryNamedBarrier = 329, - OpModuleProcessed = 330, - OpExecutionModeId = 331, - OpDecorateId = 332, - OpGroupNonUniformElect = 333, - OpGroupNonUniformAll = 334, - OpGroupNonUniformAny = 335, - OpGroupNonUniformAllEqual = 336, - OpGroupNonUniformBroadcast = 337, - OpGroupNonUniformBroadcastFirst = 338, - OpGroupNonUniformBallot = 339, - OpGroupNonUniformInverseBallot = 340, - OpGroupNonUniformBallotBitExtract = 341, - OpGroupNonUniformBallotBitCount = 342, - OpGroupNonUniformBallotFindLSB = 343, - OpGroupNonUniformBallotFindMSB = 344, - OpGroupNonUniformShuffle = 345, - OpGroupNonUniformShuffleXor = 346, - OpGroupNonUniformShuffleUp = 347, - OpGroupNonUniformShuffleDown = 348, - OpGroupNonUniformIAdd = 349, - OpGroupNonUniformFAdd = 350, - OpGroupNonUniformIMul = 351, - OpGroupNonUniformFMul = 352, - OpGroupNonUniformSMin = 353, - OpGroupNonUniformUMin = 354, - OpGroupNonUniformFMin = 355, - OpGroupNonUniformSMax = 356, - OpGroupNonUniformUMax = 357, - OpGroupNonUniformFMax = 358, - OpGroupNonUniformBitwiseAnd = 359, - OpGroupNonUniformBitwiseOr = 360, - OpGroupNonUniformBitwiseXor = 361, - OpGroupNonUniformLogicalAnd = 362, - OpGroupNonUniformLogicalOr = 363, - OpGroupNonUniformLogicalXor = 364, - OpGroupNonUniformQuadBroadcast = 365, - OpGroupNonUniformQuadSwap = 366, - OpCopyLogical = 400, - OpPtrEqual = 401, - OpPtrNotEqual = 402, - OpPtrDiff = 403, - OpColorAttachmentReadEXT = 4160, - OpDepthAttachmentReadEXT = 4161, - OpStencilAttachmentReadEXT = 4162, - OpTerminateInvocation = 4416, - OpTypeUntypedPointerKHR = 4417, - OpUntypedVariableKHR = 4418, - OpUntypedAccessChainKHR = 4419, - OpUntypedInBoundsAccessChainKHR = 4420, - OpSubgroupBallotKHR = 4421, - OpSubgroupFirstInvocationKHR = 4422, - OpUntypedPtrAccessChainKHR = 4423, - OpUntypedInBoundsPtrAccessChainKHR = 4424, - OpUntypedArrayLengthKHR = 4425, - OpUntypedPrefetchKHR = 4426, - OpSubgroupAllKHR = 4428, - OpSubgroupAnyKHR = 4429, - OpSubgroupAllEqualKHR = 4430, - OpGroupNonUniformRotateKHR = 4431, - OpSubgroupReadInvocationKHR = 4432, - OpExtInstWithForwardRefsKHR = 4433, - OpTraceRayKHR = 4445, - OpExecuteCallableKHR = 4446, - OpConvertUToAccelerationStructureKHR = 4447, - OpIgnoreIntersectionKHR = 4448, - OpTerminateRayKHR = 4449, - OpSDot = 4450, - OpSDotKHR = 4450, - OpUDot = 4451, - OpUDotKHR = 4451, - OpSUDot = 4452, - OpSUDotKHR = 4452, - OpSDotAccSat = 4453, - OpSDotAccSatKHR = 4453, - OpUDotAccSat = 4454, - OpUDotAccSatKHR = 4454, - OpSUDotAccSat = 4455, - OpSUDotAccSatKHR = 4455, - OpTypeCooperativeMatrixKHR = 4456, - OpCooperativeMatrixLoadKHR = 4457, - OpCooperativeMatrixStoreKHR = 4458, - OpCooperativeMatrixMulAddKHR = 4459, - OpCooperativeMatrixLengthKHR = 4460, - OpConstantCompositeReplicateEXT = 4461, - OpSpecConstantCompositeReplicateEXT = 4462, - OpCompositeConstructReplicateEXT = 4463, - OpTypeRayQueryKHR = 4472, - OpRayQueryInitializeKHR = 4473, - OpRayQueryTerminateKHR = 4474, - OpRayQueryGenerateIntersectionKHR = 4475, - OpRayQueryConfirmIntersectionKHR = 4476, - OpRayQueryProceedKHR = 4477, - OpRayQueryGetIntersectionTypeKHR = 4479, - OpImageSampleWeightedQCOM = 4480, - OpImageBoxFilterQCOM = 4481, - OpImageBlockMatchSSDQCOM = 4482, - OpImageBlockMatchSADQCOM = 4483, - OpImageBlockMatchWindowSSDQCOM = 4500, - OpImageBlockMatchWindowSADQCOM = 4501, - OpImageBlockMatchGatherSSDQCOM = 4502, - OpImageBlockMatchGatherSADQCOM = 4503, - OpGroupIAddNonUniformAMD = 5000, - OpGroupFAddNonUniformAMD = 5001, - OpGroupFMinNonUniformAMD = 5002, - OpGroupUMinNonUniformAMD = 5003, - OpGroupSMinNonUniformAMD = 5004, - OpGroupFMaxNonUniformAMD = 5005, - OpGroupUMaxNonUniformAMD = 5006, - OpGroupSMaxNonUniformAMD = 5007, - OpFragmentMaskFetchAMD = 5011, - OpFragmentFetchAMD = 5012, - OpReadClockKHR = 5056, - OpAllocateNodePayloadsAMDX = 5074, - OpEnqueueNodePayloadsAMDX = 5075, - OpTypeNodePayloadArrayAMDX = 5076, - OpFinishWritingNodePayloadAMDX = 5078, - OpNodePayloadArrayLengthAMDX = 5090, - OpIsNodePayloadValidAMDX = 5101, - OpConstantStringAMDX = 5103, - OpSpecConstantStringAMDX = 5104, - OpGroupNonUniformQuadAllKHR = 5110, - OpGroupNonUniformQuadAnyKHR = 5111, - OpHitObjectRecordHitMotionNV = 5249, - OpHitObjectRecordHitWithIndexMotionNV = 5250, - OpHitObjectRecordMissMotionNV = 5251, - OpHitObjectGetWorldToObjectNV = 5252, - OpHitObjectGetObjectToWorldNV = 5253, - OpHitObjectGetObjectRayDirectionNV = 5254, - OpHitObjectGetObjectRayOriginNV = 5255, - OpHitObjectTraceRayMotionNV = 5256, - OpHitObjectGetShaderRecordBufferHandleNV = 5257, - OpHitObjectGetShaderBindingTableRecordIndexNV = 5258, - OpHitObjectRecordEmptyNV = 5259, - OpHitObjectTraceRayNV = 5260, - OpHitObjectRecordHitNV = 5261, - OpHitObjectRecordHitWithIndexNV = 5262, - OpHitObjectRecordMissNV = 5263, - OpHitObjectExecuteShaderNV = 5264, - OpHitObjectGetCurrentTimeNV = 5265, - OpHitObjectGetAttributesNV = 5266, - OpHitObjectGetHitKindNV = 5267, - OpHitObjectGetPrimitiveIndexNV = 5268, - OpHitObjectGetGeometryIndexNV = 5269, - OpHitObjectGetInstanceIdNV = 5270, - OpHitObjectGetInstanceCustomIndexNV = 5271, - OpHitObjectGetWorldRayDirectionNV = 5272, - OpHitObjectGetWorldRayOriginNV = 5273, - OpHitObjectGetRayTMaxNV = 5274, - OpHitObjectGetRayTMinNV = 5275, - OpHitObjectIsEmptyNV = 5276, - OpHitObjectIsHitNV = 5277, - OpHitObjectIsMissNV = 5278, - OpReorderThreadWithHitObjectNV = 5279, - OpReorderThreadWithHintNV = 5280, - OpTypeHitObjectNV = 5281, - OpImageSampleFootprintNV = 5283, - OpTypeCooperativeVectorNV = 5288, - OpCooperativeVectorMatrixMulNV = 5289, - OpCooperativeVectorOuterProductAccumulateNV = 5290, - OpCooperativeVectorReduceSumAccumulateNV = 5291, - OpCooperativeVectorMatrixMulAddNV = 5292, - OpCooperativeMatrixConvertNV = 5293, - OpEmitMeshTasksEXT = 5294, - OpSetMeshOutputsEXT = 5295, - OpGroupNonUniformPartitionNV = 5296, - OpWritePackedPrimitiveIndices4x8NV = 5299, - OpFetchMicroTriangleVertexPositionNV = 5300, - OpFetchMicroTriangleVertexBarycentricNV = 5301, - OpCooperativeVectorLoadNV = 5302, - OpCooperativeVectorStoreNV = 5303, - OpReportIntersectionKHR = 5334, - OpReportIntersectionNV = 5334, - OpIgnoreIntersectionNV = 5335, - OpTerminateRayNV = 5336, - OpTraceNV = 5337, - OpTraceMotionNV = 5338, - OpTraceRayMotionNV = 5339, - OpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340, - OpTypeAccelerationStructureKHR = 5341, - OpTypeAccelerationStructureNV = 5341, - OpExecuteCallableNV = 5344, - OpRayQueryGetIntersectionClusterIdNV = 5345, - OpHitObjectGetClusterIdNV = 5346, - OpTypeCooperativeMatrixNV = 5358, - OpCooperativeMatrixLoadNV = 5359, - OpCooperativeMatrixStoreNV = 5360, - OpCooperativeMatrixMulAddNV = 5361, - OpCooperativeMatrixLengthNV = 5362, - OpBeginInvocationInterlockEXT = 5364, - OpEndInvocationInterlockEXT = 5365, - OpCooperativeMatrixReduceNV = 5366, - OpCooperativeMatrixLoadTensorNV = 5367, - OpCooperativeMatrixStoreTensorNV = 5368, - OpCooperativeMatrixPerElementOpNV = 5369, - OpTypeTensorLayoutNV = 5370, - OpTypeTensorViewNV = 5371, - OpCreateTensorLayoutNV = 5372, - OpTensorLayoutSetDimensionNV = 5373, - OpTensorLayoutSetStrideNV = 5374, - OpTensorLayoutSliceNV = 5375, - OpTensorLayoutSetClampValueNV = 5376, - OpCreateTensorViewNV = 5377, - OpTensorViewSetDimensionNV = 5378, - OpTensorViewSetStrideNV = 5379, - OpDemoteToHelperInvocation = 5380, - OpDemoteToHelperInvocationEXT = 5380, - OpIsHelperInvocationEXT = 5381, - OpTensorViewSetClipNV = 5382, - OpTensorLayoutSetBlockSizeNV = 5384, - OpCooperativeMatrixTransposeNV = 5390, - OpConvertUToImageNV = 5391, - OpConvertUToSamplerNV = 5392, - OpConvertImageToUNV = 5393, - OpConvertSamplerToUNV = 5394, - OpConvertUToSampledImageNV = 5395, - OpConvertSampledImageToUNV = 5396, - OpSamplerImageAddressingModeNV = 5397, - OpRawAccessChainNV = 5398, - OpRayQueryGetIntersectionSpherePositionNV = 5427, - OpRayQueryGetIntersectionSphereRadiusNV = 5428, - OpRayQueryGetIntersectionLSSPositionsNV = 5429, - OpRayQueryGetIntersectionLSSRadiiNV = 5430, - OpRayQueryGetIntersectionLSSHitValueNV = 5431, - OpHitObjectGetSpherePositionNV = 5432, - OpHitObjectGetSphereRadiusNV = 5433, - OpHitObjectGetLSSPositionsNV = 5434, - OpHitObjectGetLSSRadiiNV = 5435, - OpHitObjectIsSphereHitNV = 5436, - OpHitObjectIsLSSHitNV = 5437, - OpRayQueryIsSphereHitNV = 5438, - OpRayQueryIsLSSHitNV = 5439, - OpSubgroupShuffleINTEL = 5571, - OpSubgroupShuffleDownINTEL = 5572, - OpSubgroupShuffleUpINTEL = 5573, - OpSubgroupShuffleXorINTEL = 5574, - OpSubgroupBlockReadINTEL = 5575, - OpSubgroupBlockWriteINTEL = 5576, - OpSubgroupImageBlockReadINTEL = 5577, - OpSubgroupImageBlockWriteINTEL = 5578, - OpSubgroupImageMediaBlockReadINTEL = 5580, - OpSubgroupImageMediaBlockWriteINTEL = 5581, - OpUCountLeadingZerosINTEL = 5585, - OpUCountTrailingZerosINTEL = 5586, - OpAbsISubINTEL = 5587, - OpAbsUSubINTEL = 5588, - OpIAddSatINTEL = 5589, - OpUAddSatINTEL = 5590, - OpIAverageINTEL = 5591, - OpUAverageINTEL = 5592, - OpIAverageRoundedINTEL = 5593, - OpUAverageRoundedINTEL = 5594, - OpISubSatINTEL = 5595, - OpUSubSatINTEL = 5596, - OpIMul32x16INTEL = 5597, - OpUMul32x16INTEL = 5598, - OpConstantFunctionPointerINTEL = 5600, - OpFunctionPointerCallINTEL = 5601, - OpAsmTargetINTEL = 5609, - OpAsmINTEL = 5610, - OpAsmCallINTEL = 5611, - OpAtomicFMinEXT = 5614, - OpAtomicFMaxEXT = 5615, - OpAssumeTrueKHR = 5630, - OpExpectKHR = 5631, - OpDecorateString = 5632, - OpDecorateStringGOOGLE = 5632, - OpMemberDecorateString = 5633, - OpMemberDecorateStringGOOGLE = 5633, - OpVmeImageINTEL = 5699, - OpTypeVmeImageINTEL = 5700, - OpTypeAvcImePayloadINTEL = 5701, - OpTypeAvcRefPayloadINTEL = 5702, - OpTypeAvcSicPayloadINTEL = 5703, - OpTypeAvcMcePayloadINTEL = 5704, - OpTypeAvcMceResultINTEL = 5705, - OpTypeAvcImeResultINTEL = 5706, - OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, - OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, - OpTypeAvcImeSingleReferenceStreaminINTEL = 5709, - OpTypeAvcImeDualReferenceStreaminINTEL = 5710, - OpTypeAvcRefResultINTEL = 5711, - OpTypeAvcSicResultINTEL = 5712, - OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, - OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, - OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, - OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, - OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, - OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, - OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, - OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, - OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, - OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, - OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, - OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, - OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, - OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, - OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, - OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, - OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, - OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, - OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, - OpSubgroupAvcMceConvertToImePayloadINTEL = 5732, - OpSubgroupAvcMceConvertToImeResultINTEL = 5733, - OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, - OpSubgroupAvcMceConvertToRefResultINTEL = 5735, - OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, - OpSubgroupAvcMceConvertToSicResultINTEL = 5737, - OpSubgroupAvcMceGetMotionVectorsINTEL = 5738, - OpSubgroupAvcMceGetInterDistortionsINTEL = 5739, - OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, - OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, - OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, - OpSubgroupAvcMceGetInterDirectionsINTEL = 5743, - OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, - OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, - OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, - OpSubgroupAvcImeInitializeINTEL = 5747, - OpSubgroupAvcImeSetSingleReferenceINTEL = 5748, - OpSubgroupAvcImeSetDualReferenceINTEL = 5749, - OpSubgroupAvcImeRefWindowSizeINTEL = 5750, - OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, - OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, - OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, - OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, - OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, - OpSubgroupAvcImeSetWeightedSadINTEL = 5756, - OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, - OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, - OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, - OpSubgroupAvcImeConvertToMceResultINTEL = 5765, - OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, - OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, - OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, - OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, - OpSubgroupAvcImeGetBorderReachedINTEL = 5776, - OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, - OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, - OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, - OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, - OpSubgroupAvcFmeInitializeINTEL = 5781, - OpSubgroupAvcBmeInitializeINTEL = 5782, - OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, - OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, - OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, - OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, - OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, - OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, - OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, - OpSubgroupAvcRefConvertToMceResultINTEL = 5790, - OpSubgroupAvcSicInitializeINTEL = 5791, - OpSubgroupAvcSicConfigureSkcINTEL = 5792, - OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, - OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, - OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, - OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, - OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, - OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, - OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, - OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, - OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, - OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, - OpSubgroupAvcSicEvaluateIpeINTEL = 5803, - OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, - OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, - OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, - OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, - OpSubgroupAvcSicConvertToMceResultINTEL = 5808, - OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, - OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, - OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, - OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, - OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, - OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, - OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, - OpSubgroupAvcSicGetInterRawSadsINTEL = 5816, - OpVariableLengthArrayINTEL = 5818, - OpSaveMemoryINTEL = 5819, - OpRestoreMemoryINTEL = 5820, - OpArbitraryFloatSinCosPiINTEL = 5840, - OpArbitraryFloatCastINTEL = 5841, - OpArbitraryFloatCastFromIntINTEL = 5842, - OpArbitraryFloatCastToIntINTEL = 5843, - OpArbitraryFloatAddINTEL = 5846, - OpArbitraryFloatSubINTEL = 5847, - OpArbitraryFloatMulINTEL = 5848, - OpArbitraryFloatDivINTEL = 5849, - OpArbitraryFloatGTINTEL = 5850, - OpArbitraryFloatGEINTEL = 5851, - OpArbitraryFloatLTINTEL = 5852, - OpArbitraryFloatLEINTEL = 5853, - OpArbitraryFloatEQINTEL = 5854, - OpArbitraryFloatRecipINTEL = 5855, - OpArbitraryFloatRSqrtINTEL = 5856, - OpArbitraryFloatCbrtINTEL = 5857, - OpArbitraryFloatHypotINTEL = 5858, - OpArbitraryFloatSqrtINTEL = 5859, - OpArbitraryFloatLogINTEL = 5860, - OpArbitraryFloatLog2INTEL = 5861, - OpArbitraryFloatLog10INTEL = 5862, - OpArbitraryFloatLog1pINTEL = 5863, - OpArbitraryFloatExpINTEL = 5864, - OpArbitraryFloatExp2INTEL = 5865, - OpArbitraryFloatExp10INTEL = 5866, - OpArbitraryFloatExpm1INTEL = 5867, - OpArbitraryFloatSinINTEL = 5868, - OpArbitraryFloatCosINTEL = 5869, - OpArbitraryFloatSinCosINTEL = 5870, - OpArbitraryFloatSinPiINTEL = 5871, - OpArbitraryFloatCosPiINTEL = 5872, - OpArbitraryFloatASinINTEL = 5873, - OpArbitraryFloatASinPiINTEL = 5874, - OpArbitraryFloatACosINTEL = 5875, - OpArbitraryFloatACosPiINTEL = 5876, - OpArbitraryFloatATanINTEL = 5877, - OpArbitraryFloatATanPiINTEL = 5878, - OpArbitraryFloatATan2INTEL = 5879, - OpArbitraryFloatPowINTEL = 5880, - OpArbitraryFloatPowRINTEL = 5881, - OpArbitraryFloatPowNINTEL = 5882, - OpLoopControlINTEL = 5887, - OpAliasDomainDeclINTEL = 5911, - OpAliasScopeDeclINTEL = 5912, - OpAliasScopeListDeclINTEL = 5913, - OpFixedSqrtINTEL = 5923, - OpFixedRecipINTEL = 5924, - OpFixedRsqrtINTEL = 5925, - OpFixedSinINTEL = 5926, - OpFixedCosINTEL = 5927, - OpFixedSinCosINTEL = 5928, - OpFixedSinPiINTEL = 5929, - OpFixedCosPiINTEL = 5930, - OpFixedSinCosPiINTEL = 5931, - OpFixedLogINTEL = 5932, - OpFixedExpINTEL = 5933, - OpPtrCastToCrossWorkgroupINTEL = 5934, - OpCrossWorkgroupCastToPtrINTEL = 5938, - OpReadPipeBlockingINTEL = 5946, - OpWritePipeBlockingINTEL = 5947, - OpFPGARegINTEL = 5949, - OpRayQueryGetRayTMinKHR = 6016, - OpRayQueryGetRayFlagsKHR = 6017, - OpRayQueryGetIntersectionTKHR = 6018, - OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, - OpRayQueryGetIntersectionInstanceIdKHR = 6020, - OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, - OpRayQueryGetIntersectionGeometryIndexKHR = 6022, - OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, - OpRayQueryGetIntersectionBarycentricsKHR = 6024, - OpRayQueryGetIntersectionFrontFaceKHR = 6025, - OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, - OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, - OpRayQueryGetIntersectionObjectRayOriginKHR = 6028, - OpRayQueryGetWorldRayDirectionKHR = 6029, - OpRayQueryGetWorldRayOriginKHR = 6030, - OpRayQueryGetIntersectionObjectToWorldKHR = 6031, - OpRayQueryGetIntersectionWorldToObjectKHR = 6032, - OpAtomicFAddEXT = 6035, - OpTypeBufferSurfaceINTEL = 6086, - OpTypeStructContinuedINTEL = 6090, - OpConstantCompositeContinuedINTEL = 6091, - OpSpecConstantCompositeContinuedINTEL = 6092, - OpCompositeConstructContinuedINTEL = 6096, - OpConvertFToBF16INTEL = 6116, - OpConvertBF16ToFINTEL = 6117, - OpControlBarrierArriveINTEL = 6142, - OpControlBarrierWaitINTEL = 6143, - OpArithmeticFenceEXT = 6145, - OpSubgroupBlockPrefetchINTEL = 6221, - OpGroupIMulKHR = 6401, - OpGroupFMulKHR = 6402, - OpGroupBitwiseAndKHR = 6403, - OpGroupBitwiseOrKHR = 6404, - OpGroupBitwiseXorKHR = 6405, - OpGroupLogicalAndKHR = 6406, - OpGroupLogicalOrKHR = 6407, - OpGroupLogicalXorKHR = 6408, - OpMaskedGatherINTEL = 6428, - OpMaskedScatterINTEL = 6429, - OpMax = 0x7fffffff, -}; - -#ifdef SPV_ENABLE_UTILITY_CODE -#ifndef __cplusplus -#include -#endif -inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { - *hasResult = *hasResultType = false; - switch (opcode) { - default: /* unknown opcode */ break; - case OpNop: *hasResult = false; *hasResultType = false; break; - case OpUndef: *hasResult = true; *hasResultType = true; break; - case OpSourceContinued: *hasResult = false; *hasResultType = false; break; - case OpSource: *hasResult = false; *hasResultType = false; break; - case OpSourceExtension: *hasResult = false; *hasResultType = false; break; - case OpName: *hasResult = false; *hasResultType = false; break; - case OpMemberName: *hasResult = false; *hasResultType = false; break; - case OpString: *hasResult = true; *hasResultType = false; break; - case OpLine: *hasResult = false; *hasResultType = false; break; - case OpExtension: *hasResult = false; *hasResultType = false; break; - case OpExtInstImport: *hasResult = true; *hasResultType = false; break; - case OpExtInst: *hasResult = true; *hasResultType = true; break; - case OpMemoryModel: *hasResult = false; *hasResultType = false; break; - case OpEntryPoint: *hasResult = false; *hasResultType = false; break; - case OpExecutionMode: *hasResult = false; *hasResultType = false; break; - case OpCapability: *hasResult = false; *hasResultType = false; break; - case OpTypeVoid: *hasResult = true; *hasResultType = false; break; - case OpTypeBool: *hasResult = true; *hasResultType = false; break; - case OpTypeInt: *hasResult = true; *hasResultType = false; break; - case OpTypeFloat: *hasResult = true; *hasResultType = false; break; - case OpTypeVector: *hasResult = true; *hasResultType = false; break; - case OpTypeMatrix: *hasResult = true; *hasResultType = false; break; - case OpTypeImage: *hasResult = true; *hasResultType = false; break; - case OpTypeSampler: *hasResult = true; *hasResultType = false; break; - case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break; - case OpTypeArray: *hasResult = true; *hasResultType = false; break; - case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break; - case OpTypeStruct: *hasResult = true; *hasResultType = false; break; - case OpTypeOpaque: *hasResult = true; *hasResultType = false; break; - case OpTypePointer: *hasResult = true; *hasResultType = false; break; - case OpTypeFunction: *hasResult = true; *hasResultType = false; break; - case OpTypeEvent: *hasResult = true; *hasResultType = false; break; - case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break; - case OpTypeReserveId: *hasResult = true; *hasResultType = false; break; - case OpTypeQueue: *hasResult = true; *hasResultType = false; break; - case OpTypePipe: *hasResult = true; *hasResultType = false; break; - case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break; - case OpConstantTrue: *hasResult = true; *hasResultType = true; break; - case OpConstantFalse: *hasResult = true; *hasResultType = true; break; - case OpConstant: *hasResult = true; *hasResultType = true; break; - case OpConstantComposite: *hasResult = true; *hasResultType = true; break; - case OpConstantSampler: *hasResult = true; *hasResultType = true; break; - case OpConstantNull: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break; - case OpSpecConstant: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break; - case OpFunction: *hasResult = true; *hasResultType = true; break; - case OpFunctionParameter: *hasResult = true; *hasResultType = true; break; - case OpFunctionEnd: *hasResult = false; *hasResultType = false; break; - case OpFunctionCall: *hasResult = true; *hasResultType = true; break; - case OpVariable: *hasResult = true; *hasResultType = true; break; - case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break; - case OpLoad: *hasResult = true; *hasResultType = true; break; - case OpStore: *hasResult = false; *hasResultType = false; break; - case OpCopyMemory: *hasResult = false; *hasResultType = false; break; - case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break; - case OpAccessChain: *hasResult = true; *hasResultType = true; break; - case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break; - case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case OpArrayLength: *hasResult = true; *hasResultType = true; break; - case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break; - case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case OpDecorate: *hasResult = false; *hasResultType = false; break; - case OpMemberDecorate: *hasResult = false; *hasResultType = false; break; - case OpDecorationGroup: *hasResult = true; *hasResultType = false; break; - case OpGroupDecorate: *hasResult = false; *hasResultType = false; break; - case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break; - case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break; - case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break; - case OpVectorShuffle: *hasResult = true; *hasResultType = true; break; - case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break; - case OpCompositeExtract: *hasResult = true; *hasResultType = true; break; - case OpCompositeInsert: *hasResult = true; *hasResultType = true; break; - case OpCopyObject: *hasResult = true; *hasResultType = true; break; - case OpTranspose: *hasResult = true; *hasResultType = true; break; - case OpSampledImage: *hasResult = true; *hasResultType = true; break; - case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageFetch: *hasResult = true; *hasResultType = true; break; - case OpImageGather: *hasResult = true; *hasResultType = true; break; - case OpImageDrefGather: *hasResult = true; *hasResultType = true; break; - case OpImageRead: *hasResult = true; *hasResultType = true; break; - case OpImageWrite: *hasResult = false; *hasResultType = false; break; - case OpImage: *hasResult = true; *hasResultType = true; break; - case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break; - case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySize: *hasResult = true; *hasResultType = true; break; - case OpImageQueryLod: *hasResult = true; *hasResultType = true; break; - case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break; - case OpConvertFToU: *hasResult = true; *hasResultType = true; break; - case OpConvertFToS: *hasResult = true; *hasResultType = true; break; - case OpConvertSToF: *hasResult = true; *hasResultType = true; break; - case OpConvertUToF: *hasResult = true; *hasResultType = true; break; - case OpUConvert: *hasResult = true; *hasResultType = true; break; - case OpSConvert: *hasResult = true; *hasResultType = true; break; - case OpFConvert: *hasResult = true; *hasResultType = true; break; - case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break; - case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break; - case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break; - case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break; - case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break; - case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break; - case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break; - case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break; - case OpBitcast: *hasResult = true; *hasResultType = true; break; - case OpSNegate: *hasResult = true; *hasResultType = true; break; - case OpFNegate: *hasResult = true; *hasResultType = true; break; - case OpIAdd: *hasResult = true; *hasResultType = true; break; - case OpFAdd: *hasResult = true; *hasResultType = true; break; - case OpISub: *hasResult = true; *hasResultType = true; break; - case OpFSub: *hasResult = true; *hasResultType = true; break; - case OpIMul: *hasResult = true; *hasResultType = true; break; - case OpFMul: *hasResult = true; *hasResultType = true; break; - case OpUDiv: *hasResult = true; *hasResultType = true; break; - case OpSDiv: *hasResult = true; *hasResultType = true; break; - case OpFDiv: *hasResult = true; *hasResultType = true; break; - case OpUMod: *hasResult = true; *hasResultType = true; break; - case OpSRem: *hasResult = true; *hasResultType = true; break; - case OpSMod: *hasResult = true; *hasResultType = true; break; - case OpFRem: *hasResult = true; *hasResultType = true; break; - case OpFMod: *hasResult = true; *hasResultType = true; break; - case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break; - case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break; - case OpOuterProduct: *hasResult = true; *hasResultType = true; break; - case OpDot: *hasResult = true; *hasResultType = true; break; - case OpIAddCarry: *hasResult = true; *hasResultType = true; break; - case OpISubBorrow: *hasResult = true; *hasResultType = true; break; - case OpUMulExtended: *hasResult = true; *hasResultType = true; break; - case OpSMulExtended: *hasResult = true; *hasResultType = true; break; - case OpAny: *hasResult = true; *hasResultType = true; break; - case OpAll: *hasResult = true; *hasResultType = true; break; - case OpIsNan: *hasResult = true; *hasResultType = true; break; - case OpIsInf: *hasResult = true; *hasResultType = true; break; - case OpIsFinite: *hasResult = true; *hasResultType = true; break; - case OpIsNormal: *hasResult = true; *hasResultType = true; break; - case OpSignBitSet: *hasResult = true; *hasResultType = true; break; - case OpLessOrGreater: *hasResult = true; *hasResultType = true; break; - case OpOrdered: *hasResult = true; *hasResultType = true; break; - case OpUnordered: *hasResult = true; *hasResultType = true; break; - case OpLogicalEqual: *hasResult = true; *hasResultType = true; break; - case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break; - case OpLogicalOr: *hasResult = true; *hasResultType = true; break; - case OpLogicalAnd: *hasResult = true; *hasResultType = true; break; - case OpLogicalNot: *hasResult = true; *hasResultType = true; break; - case OpSelect: *hasResult = true; *hasResultType = true; break; - case OpIEqual: *hasResult = true; *hasResultType = true; break; - case OpINotEqual: *hasResult = true; *hasResultType = true; break; - case OpUGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpSGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpULessThan: *hasResult = true; *hasResultType = true; break; - case OpSLessThan: *hasResult = true; *hasResultType = true; break; - case OpULessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break; - case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break; - case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break; - case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break; - case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break; - case OpBitwiseOr: *hasResult = true; *hasResultType = true; break; - case OpBitwiseXor: *hasResult = true; *hasResultType = true; break; - case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case OpNot: *hasResult = true; *hasResultType = true; break; - case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break; - case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break; - case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break; - case OpBitReverse: *hasResult = true; *hasResultType = true; break; - case OpBitCount: *hasResult = true; *hasResultType = true; break; - case OpDPdx: *hasResult = true; *hasResultType = true; break; - case OpDPdy: *hasResult = true; *hasResultType = true; break; - case OpFwidth: *hasResult = true; *hasResultType = true; break; - case OpDPdxFine: *hasResult = true; *hasResultType = true; break; - case OpDPdyFine: *hasResult = true; *hasResultType = true; break; - case OpFwidthFine: *hasResult = true; *hasResultType = true; break; - case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break; - case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break; - case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break; - case OpEmitVertex: *hasResult = false; *hasResultType = false; break; - case OpEndPrimitive: *hasResult = false; *hasResultType = false; break; - case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break; - case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break; - case OpControlBarrier: *hasResult = false; *hasResultType = false; break; - case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break; - case OpAtomicLoad: *hasResult = true; *hasResultType = true; break; - case OpAtomicStore: *hasResult = false; *hasResultType = false; break; - case OpAtomicExchange: *hasResult = true; *hasResultType = true; break; - case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break; - case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break; - case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break; - case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break; - case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break; - case OpAtomicISub: *hasResult = true; *hasResultType = true; break; - case OpAtomicSMin: *hasResult = true; *hasResultType = true; break; - case OpAtomicUMin: *hasResult = true; *hasResultType = true; break; - case OpAtomicSMax: *hasResult = true; *hasResultType = true; break; - case OpAtomicUMax: *hasResult = true; *hasResultType = true; break; - case OpAtomicAnd: *hasResult = true; *hasResultType = true; break; - case OpAtomicOr: *hasResult = true; *hasResultType = true; break; - case OpAtomicXor: *hasResult = true; *hasResultType = true; break; - case OpPhi: *hasResult = true; *hasResultType = true; break; - case OpLoopMerge: *hasResult = false; *hasResultType = false; break; - case OpSelectionMerge: *hasResult = false; *hasResultType = false; break; - case OpLabel: *hasResult = true; *hasResultType = false; break; - case OpBranch: *hasResult = false; *hasResultType = false; break; - case OpBranchConditional: *hasResult = false; *hasResultType = false; break; - case OpSwitch: *hasResult = false; *hasResultType = false; break; - case OpKill: *hasResult = false; *hasResultType = false; break; - case OpReturn: *hasResult = false; *hasResultType = false; break; - case OpReturnValue: *hasResult = false; *hasResultType = false; break; - case OpUnreachable: *hasResult = false; *hasResultType = false; break; - case OpLifetimeStart: *hasResult = false; *hasResultType = false; break; - case OpLifetimeStop: *hasResult = false; *hasResultType = false; break; - case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break; - case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break; - case OpGroupAll: *hasResult = true; *hasResultType = true; break; - case OpGroupAny: *hasResult = true; *hasResultType = true; break; - case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupIAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupFAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupFMin: *hasResult = true; *hasResultType = true; break; - case OpGroupUMin: *hasResult = true; *hasResultType = true; break; - case OpGroupSMin: *hasResult = true; *hasResultType = true; break; - case OpGroupFMax: *hasResult = true; *hasResultType = true; break; - case OpGroupUMax: *hasResult = true; *hasResultType = true; break; - case OpGroupSMax: *hasResult = true; *hasResultType = true; break; - case OpReadPipe: *hasResult = true; *hasResultType = true; break; - case OpWritePipe: *hasResult = true; *hasResultType = true; break; - case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break; - case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break; - case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break; - case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break; - case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break; - case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break; - case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break; - case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break; - case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break; - case OpRetainEvent: *hasResult = false; *hasResultType = false; break; - case OpReleaseEvent: *hasResult = false; *hasResultType = false; break; - case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break; - case OpIsValidEvent: *hasResult = true; *hasResultType = true; break; - case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break; - case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break; - case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break; - case OpBuildNDRange: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break; - case OpImageSparseGather: *hasResult = true; *hasResultType = true; break; - case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break; - case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break; - case OpNoLine: *hasResult = false; *hasResultType = false; break; - case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break; - case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break; - case OpImageSparseRead: *hasResult = true; *hasResultType = true; break; - case OpSizeOf: *hasResult = true; *hasResultType = true; break; - case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break; - case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break; - case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break; - case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break; - case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break; - case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break; - case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break; - case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break; - case OpModuleProcessed: *hasResult = false; *hasResultType = false; break; - case OpExecutionModeId: *hasResult = false; *hasResultType = false; break; - case OpDecorateId: *hasResult = false; *hasResultType = false; break; - case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break; - case OpCopyLogical: *hasResult = true; *hasResultType = true; break; - case OpPtrEqual: *hasResult = true; *hasResultType = true; break; - case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; - case OpPtrDiff: *hasResult = true; *hasResultType = true; break; - case OpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; - case OpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; - case OpStencilAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; - case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; - case OpTypeUntypedPointerKHR: *hasResult = true; *hasResultType = false; break; - case OpUntypedVariableKHR: *hasResult = true; *hasResultType = true; break; - case OpUntypedAccessChainKHR: *hasResult = true; *hasResultType = true; break; - case OpUntypedInBoundsAccessChainKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpUntypedPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break; - case OpUntypedInBoundsPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break; - case OpUntypedArrayLengthKHR: *hasResult = true; *hasResultType = true; break; - case OpUntypedPrefetchKHR: *hasResult = false; *hasResultType = false; break; - case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpExtInstWithForwardRefsKHR: *hasResult = true; *hasResultType = true; break; - case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break; - case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; - case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; - case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; - case OpSDot: *hasResult = true; *hasResultType = true; break; - case OpUDot: *hasResult = true; *hasResultType = true; break; - case OpSUDot: *hasResult = true; *hasResultType = true; break; - case OpSDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpUDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpTypeCooperativeMatrixKHR: *hasResult = true; *hasResultType = false; break; - case OpCooperativeMatrixLoadKHR: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixStoreKHR: *hasResult = false; *hasResultType = false; break; - case OpCooperativeMatrixMulAddKHR: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixLengthKHR: *hasResult = true; *hasResultType = true; break; - case OpConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break; - case OpCompositeConstructReplicateEXT: *hasResult = true; *hasResultType = true; break; - case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; - case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break; - case OpImageSampleWeightedQCOM: *hasResult = true; *hasResultType = true; break; - case OpImageBoxFilterQCOM: *hasResult = true; *hasResultType = true; break; - case OpImageBlockMatchSSDQCOM: *hasResult = true; *hasResultType = true; break; - case OpImageBlockMatchSADQCOM: *hasResult = true; *hasResultType = true; break; - case OpImageBlockMatchWindowSSDQCOM: *hasResult = true; *hasResultType = true; break; - case OpImageBlockMatchWindowSADQCOM: *hasResult = true; *hasResultType = true; break; - case OpImageBlockMatchGatherSSDQCOM: *hasResult = true; *hasResultType = true; break; - case OpImageBlockMatchGatherSADQCOM: *hasResult = true; *hasResultType = true; break; - case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break; - case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break; - case OpReadClockKHR: *hasResult = true; *hasResultType = true; break; - case OpAllocateNodePayloadsAMDX: *hasResult = true; *hasResultType = true; break; - case OpEnqueueNodePayloadsAMDX: *hasResult = false; *hasResultType = false; break; - case OpTypeNodePayloadArrayAMDX: *hasResult = true; *hasResultType = false; break; - case OpFinishWritingNodePayloadAMDX: *hasResult = true; *hasResultType = true; break; - case OpNodePayloadArrayLengthAMDX: *hasResult = true; *hasResultType = true; break; - case OpIsNodePayloadValidAMDX: *hasResult = true; *hasResultType = true; break; - case OpConstantStringAMDX: *hasResult = true; *hasResultType = false; break; - case OpSpecConstantStringAMDX: *hasResult = true; *hasResultType = false; break; - case OpGroupNonUniformQuadAllKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadAnyKHR: *hasResult = true; *hasResultType = true; break; - case OpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectGetWorldToObjectNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetObjectToWorldNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetObjectRayDirectionNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetObjectRayOriginNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectGetShaderRecordBufferHandleNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetShaderBindingTableRecordIndexNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectRecordEmptyNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectTraceRayNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectRecordHitNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectRecordHitWithIndexNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectRecordMissNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectExecuteShaderNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectGetCurrentTimeNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetAttributesNV: *hasResult = false; *hasResultType = false; break; - case OpHitObjectGetHitKindNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetPrimitiveIndexNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetGeometryIndexNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetInstanceIdNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetInstanceCustomIndexNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetWorldRayDirectionNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetWorldRayOriginNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetRayTMaxNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetRayTMinNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectIsEmptyNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectIsHitNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectIsMissNV: *hasResult = true; *hasResultType = true; break; - case OpHitObjectGetClusterIdNV: *hasResult = true; *hasResultType = true; break; - case OpReorderThreadWithHitObjectNV: *hasResult = false; *hasResultType = false; break; - case OpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break; - case OpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break; - case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; - case OpTypeCooperativeVectorNV: *hasResult = true; *hasResultType = false; break; - case OpCooperativeVectorMatrixMulNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeVectorOuterProductAccumulateNV: *hasResult = false; *hasResultType = false; break; - case OpCooperativeVectorReduceSumAccumulateNV: *hasResult = false; *hasResultType = false; break; - case OpCooperativeVectorMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixConvertNV: *hasResult = true; *hasResultType = true; break; - case OpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break; - case OpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break; - case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break; - case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; - case OpFetchMicroTriangleVertexPositionNV: *hasResult = true; *hasResultType = true; break; - case OpFetchMicroTriangleVertexBarycentricNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeVectorLoadNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeVectorStoreNV: *hasResult = false; *hasResultType = false; break; - case OpReportIntersectionKHR: *hasResult = true; *hasResultType = true; break; - case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; - case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break; - case OpTraceNV: *hasResult = false; *hasResultType = false; break; - case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break; - case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; - case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break; - case OpTypeAccelerationStructureKHR: *hasResult = true; *hasResultType = false; break; - case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; - case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; - case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; - case OpCooperativeMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; - case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpCooperativeMatrixReduceNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixLoadTensorNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixStoreTensorNV: *hasResult = false; *hasResultType = false; break; - case OpCooperativeMatrixPerElementOpNV: *hasResult = true; *hasResultType = true; break; - case OpTypeTensorLayoutNV: *hasResult = true; *hasResultType = false; break; - case OpTypeTensorViewNV: *hasResult = true; *hasResultType = false; break; - case OpCreateTensorLayoutNV: *hasResult = true; *hasResultType = true; break; - case OpTensorLayoutSetDimensionNV: *hasResult = true; *hasResultType = true; break; - case OpTensorLayoutSetStrideNV: *hasResult = true; *hasResultType = true; break; - case OpTensorLayoutSliceNV: *hasResult = true; *hasResultType = true; break; - case OpTensorLayoutSetClampValueNV: *hasResult = true; *hasResultType = true; break; - case OpCreateTensorViewNV: *hasResult = true; *hasResultType = true; break; - case OpTensorViewSetDimensionNV: *hasResult = true; *hasResultType = true; break; - case OpTensorViewSetStrideNV: *hasResult = true; *hasResultType = true; break; - case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; - case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; - case OpTensorViewSetClipNV: *hasResult = true; *hasResultType = true; break; - case OpTensorLayoutSetBlockSizeNV: *hasResult = true; *hasResultType = true; break; - case OpCooperativeMatrixTransposeNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; - case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; - case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; - case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; - case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; - case OpRawAccessChainNV: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break; - case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; - case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; - case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; - case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; - case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; - case OpExpectKHR: *hasResult = true; *hasResultType = true; break; - case OpDecorateString: *hasResult = false; *hasResultType = false; break; - case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break; - case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; - case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; - case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; - case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; - case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; - case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; - case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; - case OpAliasDomainDeclINTEL: *hasResult = true; *hasResultType = false; break; - case OpAliasScopeDeclINTEL: *hasResult = true; *hasResultType = false; break; - case OpAliasScopeListDeclINTEL: *hasResult = true; *hasResultType = false; break; - case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; - case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; - case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; - case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionClusterIdNV: *hasResult = true; *hasResultType = true; break; - case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; - case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpCompositeConstructContinuedINTEL: *hasResult = true; *hasResultType = true; break; - case OpConvertFToBF16INTEL: *hasResult = true; *hasResultType = true; break; - case OpConvertBF16ToFINTEL: *hasResult = true; *hasResultType = true; break; - case OpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break; - case OpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break; - case OpArithmeticFenceEXT: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break; - case OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; - case OpMaskedGatherINTEL: *hasResult = true; *hasResultType = true; break; - case OpMaskedScatterINTEL: *hasResult = false; *hasResultType = false; break; - } -} -inline const char* SourceLanguageToString(SourceLanguage value) { - switch (value) { - case SourceLanguageUnknown: return "Unknown"; - case SourceLanguageESSL: return "ESSL"; - case SourceLanguageGLSL: return "GLSL"; - case SourceLanguageOpenCL_C: return "OpenCL_C"; - case SourceLanguageOpenCL_CPP: return "OpenCL_CPP"; - case SourceLanguageHLSL: return "HLSL"; - case SourceLanguageCPP_for_OpenCL: return "CPP_for_OpenCL"; - case SourceLanguageSYCL: return "SYCL"; - case SourceLanguageHERO_C: return "HERO_C"; - case SourceLanguageNZSL: return "NZSL"; - case SourceLanguageWGSL: return "WGSL"; - case SourceLanguageSlang: return "Slang"; - case SourceLanguageZig: return "Zig"; - default: return "Unknown"; - } -} - -inline const char* ExecutionModelToString(ExecutionModel value) { - switch (value) { - case ExecutionModelVertex: return "Vertex"; - case ExecutionModelTessellationControl: return "TessellationControl"; - case ExecutionModelTessellationEvaluation: return "TessellationEvaluation"; - case ExecutionModelGeometry: return "Geometry"; - case ExecutionModelFragment: return "Fragment"; - case ExecutionModelGLCompute: return "GLCompute"; - case ExecutionModelKernel: return "Kernel"; - case ExecutionModelTaskNV: return "TaskNV"; - case ExecutionModelMeshNV: return "MeshNV"; - case ExecutionModelRayGenerationKHR: return "RayGenerationKHR"; - case ExecutionModelIntersectionKHR: return "IntersectionKHR"; - case ExecutionModelAnyHitKHR: return "AnyHitKHR"; - case ExecutionModelClosestHitKHR: return "ClosestHitKHR"; - case ExecutionModelMissKHR: return "MissKHR"; - case ExecutionModelCallableKHR: return "CallableKHR"; - case ExecutionModelTaskEXT: return "TaskEXT"; - case ExecutionModelMeshEXT: return "MeshEXT"; - default: return "Unknown"; - } -} - -inline const char* AddressingModelToString(AddressingModel value) { - switch (value) { - case AddressingModelLogical: return "Logical"; - case AddressingModelPhysical32: return "Physical32"; - case AddressingModelPhysical64: return "Physical64"; - case AddressingModelPhysicalStorageBuffer64: return "PhysicalStorageBuffer64"; - default: return "Unknown"; - } -} - -inline const char* MemoryModelToString(MemoryModel value) { - switch (value) { - case MemoryModelSimple: return "Simple"; - case MemoryModelGLSL450: return "GLSL450"; - case MemoryModelOpenCL: return "OpenCL"; - case MemoryModelVulkan: return "Vulkan"; - default: return "Unknown"; - } -} - -inline const char* ExecutionModeToString(ExecutionMode value) { - switch (value) { - case ExecutionModeInvocations: return "Invocations"; - case ExecutionModeSpacingEqual: return "SpacingEqual"; - case ExecutionModeSpacingFractionalEven: return "SpacingFractionalEven"; - case ExecutionModeSpacingFractionalOdd: return "SpacingFractionalOdd"; - case ExecutionModeVertexOrderCw: return "VertexOrderCw"; - case ExecutionModeVertexOrderCcw: return "VertexOrderCcw"; - case ExecutionModePixelCenterInteger: return "PixelCenterInteger"; - case ExecutionModeOriginUpperLeft: return "OriginUpperLeft"; - case ExecutionModeOriginLowerLeft: return "OriginLowerLeft"; - case ExecutionModeEarlyFragmentTests: return "EarlyFragmentTests"; - case ExecutionModePointMode: return "PointMode"; - case ExecutionModeXfb: return "Xfb"; - case ExecutionModeDepthReplacing: return "DepthReplacing"; - case ExecutionModeDepthGreater: return "DepthGreater"; - case ExecutionModeDepthLess: return "DepthLess"; - case ExecutionModeDepthUnchanged: return "DepthUnchanged"; - case ExecutionModeLocalSize: return "LocalSize"; - case ExecutionModeLocalSizeHint: return "LocalSizeHint"; - case ExecutionModeInputPoints: return "InputPoints"; - case ExecutionModeInputLines: return "InputLines"; - case ExecutionModeInputLinesAdjacency: return "InputLinesAdjacency"; - case ExecutionModeTriangles: return "Triangles"; - case ExecutionModeInputTrianglesAdjacency: return "InputTrianglesAdjacency"; - case ExecutionModeQuads: return "Quads"; - case ExecutionModeIsolines: return "Isolines"; - case ExecutionModeOutputVertices: return "OutputVertices"; - case ExecutionModeOutputPoints: return "OutputPoints"; - case ExecutionModeOutputLineStrip: return "OutputLineStrip"; - case ExecutionModeOutputTriangleStrip: return "OutputTriangleStrip"; - case ExecutionModeVecTypeHint: return "VecTypeHint"; - case ExecutionModeContractionOff: return "ContractionOff"; - case ExecutionModeInitializer: return "Initializer"; - case ExecutionModeFinalizer: return "Finalizer"; - case ExecutionModeSubgroupSize: return "SubgroupSize"; - case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup"; - case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId"; - case ExecutionModeLocalSizeId: return "LocalSizeId"; - case ExecutionModeLocalSizeHintId: return "LocalSizeHintId"; - case ExecutionModeNonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT"; - case ExecutionModeNonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT"; - case ExecutionModeNonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT"; - case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlowKHR"; - case ExecutionModePostDepthCoverage: return "PostDepthCoverage"; - case ExecutionModeDenormPreserve: return "DenormPreserve"; - case ExecutionModeDenormFlushToZero: return "DenormFlushToZero"; - case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; - case ExecutionModeRoundingModeRTE: return "RoundingModeRTE"; - case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ"; - case ExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD"; - case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT"; - case ExecutionModeCoalescingAMDX: return "CoalescingAMDX"; - case ExecutionModeIsApiEntryAMDX: return "IsApiEntryAMDX"; - case ExecutionModeMaxNodeRecursionAMDX: return "MaxNodeRecursionAMDX"; - case ExecutionModeStaticNumWorkgroupsAMDX: return "StaticNumWorkgroupsAMDX"; - case ExecutionModeShaderIndexAMDX: return "ShaderIndexAMDX"; - case ExecutionModeMaxNumWorkgroupsAMDX: return "MaxNumWorkgroupsAMDX"; - case ExecutionModeStencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD"; - case ExecutionModeStencilRefGreaterFrontAMD: return "StencilRefGreaterFrontAMD"; - case ExecutionModeStencilRefLessFrontAMD: return "StencilRefLessFrontAMD"; - case ExecutionModeStencilRefUnchangedBackAMD: return "StencilRefUnchangedBackAMD"; - case ExecutionModeStencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD"; - case ExecutionModeStencilRefLessBackAMD: return "StencilRefLessBackAMD"; - case ExecutionModeQuadDerivativesKHR: return "QuadDerivativesKHR"; - case ExecutionModeRequireFullQuadsKHR: return "RequireFullQuadsKHR"; - case ExecutionModeSharesInputWithAMDX: return "SharesInputWithAMDX"; - case ExecutionModeOutputLinesEXT: return "OutputLinesEXT"; - case ExecutionModeOutputPrimitivesEXT: return "OutputPrimitivesEXT"; - case ExecutionModeDerivativeGroupQuadsKHR: return "DerivativeGroupQuadsKHR"; - case ExecutionModeDerivativeGroupLinearKHR: return "DerivativeGroupLinearKHR"; - case ExecutionModeOutputTrianglesEXT: return "OutputTrianglesEXT"; - case ExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT"; - case ExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT"; - case ExecutionModeSampleInterlockOrderedEXT: return "SampleInterlockOrderedEXT"; - case ExecutionModeSampleInterlockUnorderedEXT: return "SampleInterlockUnorderedEXT"; - case ExecutionModeShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT"; - case ExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT"; - case ExecutionModeSharedLocalMemorySizeINTEL: return "SharedLocalMemorySizeINTEL"; - case ExecutionModeRoundingModeRTPINTEL: return "RoundingModeRTPINTEL"; - case ExecutionModeRoundingModeRTNINTEL: return "RoundingModeRTNINTEL"; - case ExecutionModeFloatingPointModeALTINTEL: return "FloatingPointModeALTINTEL"; - case ExecutionModeFloatingPointModeIEEEINTEL: return "FloatingPointModeIEEEINTEL"; - case ExecutionModeMaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL"; - case ExecutionModeMaxWorkDimINTEL: return "MaxWorkDimINTEL"; - case ExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL"; - case ExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL"; - case ExecutionModeSchedulerTargetFmaxMhzINTEL: return "SchedulerTargetFmaxMhzINTEL"; - case ExecutionModeMaximallyReconvergesKHR: return "MaximallyReconvergesKHR"; - case ExecutionModeFPFastMathDefault: return "FPFastMathDefault"; - case ExecutionModeStreamingInterfaceINTEL: return "StreamingInterfaceINTEL"; - case ExecutionModeRegisterMapInterfaceINTEL: return "RegisterMapInterfaceINTEL"; - case ExecutionModeNamedBarrierCountINTEL: return "NamedBarrierCountINTEL"; - case ExecutionModeMaximumRegistersINTEL: return "MaximumRegistersINTEL"; - case ExecutionModeMaximumRegistersIdINTEL: return "MaximumRegistersIdINTEL"; - case ExecutionModeNamedMaximumRegistersINTEL: return "NamedMaximumRegistersINTEL"; - default: return "Unknown"; - } -} - -inline const char* StorageClassToString(StorageClass value) { - switch (value) { - case StorageClassUniformConstant: return "UniformConstant"; - case StorageClassInput: return "Input"; - case StorageClassUniform: return "Uniform"; - case StorageClassOutput: return "Output"; - case StorageClassWorkgroup: return "Workgroup"; - case StorageClassCrossWorkgroup: return "CrossWorkgroup"; - case StorageClassPrivate: return "Private"; - case StorageClassFunction: return "Function"; - case StorageClassGeneric: return "Generic"; - case StorageClassPushConstant: return "PushConstant"; - case StorageClassAtomicCounter: return "AtomicCounter"; - case StorageClassImage: return "Image"; - case StorageClassStorageBuffer: return "StorageBuffer"; - case StorageClassTileImageEXT: return "TileImageEXT"; - case StorageClassNodePayloadAMDX: return "NodePayloadAMDX"; - case StorageClassCallableDataKHR: return "CallableDataKHR"; - case StorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR"; - case StorageClassRayPayloadKHR: return "RayPayloadKHR"; - case StorageClassHitAttributeKHR: return "HitAttributeKHR"; - case StorageClassIncomingRayPayloadKHR: return "IncomingRayPayloadKHR"; - case StorageClassShaderRecordBufferKHR: return "ShaderRecordBufferKHR"; - case StorageClassPhysicalStorageBuffer: return "PhysicalStorageBuffer"; - case StorageClassHitObjectAttributeNV: return "HitObjectAttributeNV"; - case StorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT"; - case StorageClassCodeSectionINTEL: return "CodeSectionINTEL"; - case StorageClassDeviceOnlyINTEL: return "DeviceOnlyINTEL"; - case StorageClassHostOnlyINTEL: return "HostOnlyINTEL"; - default: return "Unknown"; - } -} - -inline const char* DimToString(Dim value) { - switch (value) { - case Dim1D: return "1D"; - case Dim2D: return "2D"; - case Dim3D: return "3D"; - case DimCube: return "Cube"; - case DimRect: return "Rect"; - case DimBuffer: return "Buffer"; - case DimSubpassData: return "SubpassData"; - case DimTileImageDataEXT: return "TileImageDataEXT"; - default: return "Unknown"; - } -} - -inline const char* SamplerAddressingModeToString(SamplerAddressingMode value) { - switch (value) { - case SamplerAddressingModeNone: return "None"; - case SamplerAddressingModeClampToEdge: return "ClampToEdge"; - case SamplerAddressingModeClamp: return "Clamp"; - case SamplerAddressingModeRepeat: return "Repeat"; - case SamplerAddressingModeRepeatMirrored: return "RepeatMirrored"; - default: return "Unknown"; - } -} - -inline const char* SamplerFilterModeToString(SamplerFilterMode value) { - switch (value) { - case SamplerFilterModeNearest: return "Nearest"; - case SamplerFilterModeLinear: return "Linear"; - default: return "Unknown"; - } -} - -inline const char* ImageFormatToString(ImageFormat value) { - switch (value) { - case ImageFormatUnknown: return "Unknown"; - case ImageFormatRgba32f: return "Rgba32f"; - case ImageFormatRgba16f: return "Rgba16f"; - case ImageFormatR32f: return "R32f"; - case ImageFormatRgba8: return "Rgba8"; - case ImageFormatRgba8Snorm: return "Rgba8Snorm"; - case ImageFormatRg32f: return "Rg32f"; - case ImageFormatRg16f: return "Rg16f"; - case ImageFormatR11fG11fB10f: return "R11fG11fB10f"; - case ImageFormatR16f: return "R16f"; - case ImageFormatRgba16: return "Rgba16"; - case ImageFormatRgb10A2: return "Rgb10A2"; - case ImageFormatRg16: return "Rg16"; - case ImageFormatRg8: return "Rg8"; - case ImageFormatR16: return "R16"; - case ImageFormatR8: return "R8"; - case ImageFormatRgba16Snorm: return "Rgba16Snorm"; - case ImageFormatRg16Snorm: return "Rg16Snorm"; - case ImageFormatRg8Snorm: return "Rg8Snorm"; - case ImageFormatR16Snorm: return "R16Snorm"; - case ImageFormatR8Snorm: return "R8Snorm"; - case ImageFormatRgba32i: return "Rgba32i"; - case ImageFormatRgba16i: return "Rgba16i"; - case ImageFormatRgba8i: return "Rgba8i"; - case ImageFormatR32i: return "R32i"; - case ImageFormatRg32i: return "Rg32i"; - case ImageFormatRg16i: return "Rg16i"; - case ImageFormatRg8i: return "Rg8i"; - case ImageFormatR16i: return "R16i"; - case ImageFormatR8i: return "R8i"; - case ImageFormatRgba32ui: return "Rgba32ui"; - case ImageFormatRgba16ui: return "Rgba16ui"; - case ImageFormatRgba8ui: return "Rgba8ui"; - case ImageFormatR32ui: return "R32ui"; - case ImageFormatRgb10a2ui: return "Rgb10a2ui"; - case ImageFormatRg32ui: return "Rg32ui"; - case ImageFormatRg16ui: return "Rg16ui"; - case ImageFormatRg8ui: return "Rg8ui"; - case ImageFormatR16ui: return "R16ui"; - case ImageFormatR8ui: return "R8ui"; - case ImageFormatR64ui: return "R64ui"; - case ImageFormatR64i: return "R64i"; - default: return "Unknown"; - } -} - -inline const char* ImageChannelOrderToString(ImageChannelOrder value) { - switch (value) { - case ImageChannelOrderR: return "R"; - case ImageChannelOrderA: return "A"; - case ImageChannelOrderRG: return "RG"; - case ImageChannelOrderRA: return "RA"; - case ImageChannelOrderRGB: return "RGB"; - case ImageChannelOrderRGBA: return "RGBA"; - case ImageChannelOrderBGRA: return "BGRA"; - case ImageChannelOrderARGB: return "ARGB"; - case ImageChannelOrderIntensity: return "Intensity"; - case ImageChannelOrderLuminance: return "Luminance"; - case ImageChannelOrderRx: return "Rx"; - case ImageChannelOrderRGx: return "RGx"; - case ImageChannelOrderRGBx: return "RGBx"; - case ImageChannelOrderDepth: return "Depth"; - case ImageChannelOrderDepthStencil: return "DepthStencil"; - case ImageChannelOrdersRGB: return "sRGB"; - case ImageChannelOrdersRGBx: return "sRGBx"; - case ImageChannelOrdersRGBA: return "sRGBA"; - case ImageChannelOrdersBGRA: return "sBGRA"; - case ImageChannelOrderABGR: return "ABGR"; - default: return "Unknown"; - } -} - -inline const char* ImageChannelDataTypeToString(ImageChannelDataType value) { - switch (value) { - case ImageChannelDataTypeSnormInt8: return "SnormInt8"; - case ImageChannelDataTypeSnormInt16: return "SnormInt16"; - case ImageChannelDataTypeUnormInt8: return "UnormInt8"; - case ImageChannelDataTypeUnormInt16: return "UnormInt16"; - case ImageChannelDataTypeUnormShort565: return "UnormShort565"; - case ImageChannelDataTypeUnormShort555: return "UnormShort555"; - case ImageChannelDataTypeUnormInt101010: return "UnormInt101010"; - case ImageChannelDataTypeSignedInt8: return "SignedInt8"; - case ImageChannelDataTypeSignedInt16: return "SignedInt16"; - case ImageChannelDataTypeSignedInt32: return "SignedInt32"; - case ImageChannelDataTypeUnsignedInt8: return "UnsignedInt8"; - case ImageChannelDataTypeUnsignedInt16: return "UnsignedInt16"; - case ImageChannelDataTypeUnsignedInt32: return "UnsignedInt32"; - case ImageChannelDataTypeHalfFloat: return "HalfFloat"; - case ImageChannelDataTypeFloat: return "Float"; - case ImageChannelDataTypeUnormInt24: return "UnormInt24"; - case ImageChannelDataTypeUnormInt101010_2: return "UnormInt101010_2"; - case ImageChannelDataTypeUnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT"; - case ImageChannelDataTypeUnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT"; - case ImageChannelDataTypeUnormInt2_101010EXT: return "UnormInt2_101010EXT"; - default: return "Unknown"; - } -} - -inline const char* FPRoundingModeToString(FPRoundingMode value) { - switch (value) { - case FPRoundingModeRTE: return "RTE"; - case FPRoundingModeRTZ: return "RTZ"; - case FPRoundingModeRTP: return "RTP"; - case FPRoundingModeRTN: return "RTN"; - default: return "Unknown"; - } -} - -inline const char* LinkageTypeToString(LinkageType value) { - switch (value) { - case LinkageTypeExport: return "Export"; - case LinkageTypeImport: return "Import"; - case LinkageTypeLinkOnceODR: return "LinkOnceODR"; - default: return "Unknown"; - } -} - -inline const char* AccessQualifierToString(AccessQualifier value) { - switch (value) { - case AccessQualifierReadOnly: return "ReadOnly"; - case AccessQualifierWriteOnly: return "WriteOnly"; - case AccessQualifierReadWrite: return "ReadWrite"; - default: return "Unknown"; - } -} - -inline const char* FunctionParameterAttributeToString(FunctionParameterAttribute value) { - switch (value) { - case FunctionParameterAttributeZext: return "Zext"; - case FunctionParameterAttributeSext: return "Sext"; - case FunctionParameterAttributeByVal: return "ByVal"; - case FunctionParameterAttributeSret: return "Sret"; - case FunctionParameterAttributeNoAlias: return "NoAlias"; - case FunctionParameterAttributeNoCapture: return "NoCapture"; - case FunctionParameterAttributeNoWrite: return "NoWrite"; - case FunctionParameterAttributeNoReadWrite: return "NoReadWrite"; - case FunctionParameterAttributeRuntimeAlignedINTEL: return "RuntimeAlignedINTEL"; - default: return "Unknown"; - } -} - -inline const char* DecorationToString(Decoration value) { - switch (value) { - case DecorationRelaxedPrecision: return "RelaxedPrecision"; - case DecorationSpecId: return "SpecId"; - case DecorationBlock: return "Block"; - case DecorationBufferBlock: return "BufferBlock"; - case DecorationRowMajor: return "RowMajor"; - case DecorationColMajor: return "ColMajor"; - case DecorationArrayStride: return "ArrayStride"; - case DecorationMatrixStride: return "MatrixStride"; - case DecorationGLSLShared: return "GLSLShared"; - case DecorationGLSLPacked: return "GLSLPacked"; - case DecorationCPacked: return "CPacked"; - case DecorationBuiltIn: return "BuiltIn"; - case DecorationNoPerspective: return "NoPerspective"; - case DecorationFlat: return "Flat"; - case DecorationPatch: return "Patch"; - case DecorationCentroid: return "Centroid"; - case DecorationSample: return "Sample"; - case DecorationInvariant: return "Invariant"; - case DecorationRestrict: return "Restrict"; - case DecorationAliased: return "Aliased"; - case DecorationVolatile: return "Volatile"; - case DecorationConstant: return "Constant"; - case DecorationCoherent: return "Coherent"; - case DecorationNonWritable: return "NonWritable"; - case DecorationNonReadable: return "NonReadable"; - case DecorationUniform: return "Uniform"; - case DecorationUniformId: return "UniformId"; - case DecorationSaturatedConversion: return "SaturatedConversion"; - case DecorationStream: return "Stream"; - case DecorationLocation: return "Location"; - case DecorationComponent: return "Component"; - case DecorationIndex: return "Index"; - case DecorationBinding: return "Binding"; - case DecorationDescriptorSet: return "DescriptorSet"; - case DecorationOffset: return "Offset"; - case DecorationXfbBuffer: return "XfbBuffer"; - case DecorationXfbStride: return "XfbStride"; - case DecorationFuncParamAttr: return "FuncParamAttr"; - case DecorationFPRoundingMode: return "FPRoundingMode"; - case DecorationFPFastMathMode: return "FPFastMathMode"; - case DecorationLinkageAttributes: return "LinkageAttributes"; - case DecorationNoContraction: return "NoContraction"; - case DecorationInputAttachmentIndex: return "InputAttachmentIndex"; - case DecorationAlignment: return "Alignment"; - case DecorationMaxByteOffset: return "MaxByteOffset"; - case DecorationAlignmentId: return "AlignmentId"; - case DecorationMaxByteOffsetId: return "MaxByteOffsetId"; - case DecorationNoSignedWrap: return "NoSignedWrap"; - case DecorationNoUnsignedWrap: return "NoUnsignedWrap"; - case DecorationWeightTextureQCOM: return "WeightTextureQCOM"; - case DecorationBlockMatchTextureQCOM: return "BlockMatchTextureQCOM"; - case DecorationBlockMatchSamplerQCOM: return "BlockMatchSamplerQCOM"; - case DecorationExplicitInterpAMD: return "ExplicitInterpAMD"; - case DecorationNodeSharesPayloadLimitsWithAMDX: return "NodeSharesPayloadLimitsWithAMDX"; - case DecorationNodeMaxPayloadsAMDX: return "NodeMaxPayloadsAMDX"; - case DecorationTrackFinishWritingAMDX: return "TrackFinishWritingAMDX"; - case DecorationPayloadNodeNameAMDX: return "PayloadNodeNameAMDX"; - case DecorationPayloadNodeBaseIndexAMDX: return "PayloadNodeBaseIndexAMDX"; - case DecorationPayloadNodeSparseArrayAMDX: return "PayloadNodeSparseArrayAMDX"; - case DecorationPayloadNodeArraySizeAMDX: return "PayloadNodeArraySizeAMDX"; - case DecorationPayloadDispatchIndirectAMDX: return "PayloadDispatchIndirectAMDX"; - case DecorationOverrideCoverageNV: return "OverrideCoverageNV"; - case DecorationPassthroughNV: return "PassthroughNV"; - case DecorationViewportRelativeNV: return "ViewportRelativeNV"; - case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV"; - case DecorationPerPrimitiveEXT: return "PerPrimitiveEXT"; - case DecorationPerViewNV: return "PerViewNV"; - case DecorationPerTaskNV: return "PerTaskNV"; - case DecorationPerVertexKHR: return "PerVertexKHR"; - case DecorationNonUniform: return "NonUniform"; - case DecorationRestrictPointer: return "RestrictPointer"; - case DecorationAliasedPointer: return "AliasedPointer"; - case DecorationHitObjectShaderRecordBufferNV: return "HitObjectShaderRecordBufferNV"; - case DecorationBindlessSamplerNV: return "BindlessSamplerNV"; - case DecorationBindlessImageNV: return "BindlessImageNV"; - case DecorationBoundSamplerNV: return "BoundSamplerNV"; - case DecorationBoundImageNV: return "BoundImageNV"; - case DecorationSIMTCallINTEL: return "SIMTCallINTEL"; - case DecorationReferencedIndirectlyINTEL: return "ReferencedIndirectlyINTEL"; - case DecorationClobberINTEL: return "ClobberINTEL"; - case DecorationSideEffectsINTEL: return "SideEffectsINTEL"; - case DecorationVectorComputeVariableINTEL: return "VectorComputeVariableINTEL"; - case DecorationFuncParamIOKindINTEL: return "FuncParamIOKindINTEL"; - case DecorationVectorComputeFunctionINTEL: return "VectorComputeFunctionINTEL"; - case DecorationStackCallINTEL: return "StackCallINTEL"; - case DecorationGlobalVariableOffsetINTEL: return "GlobalVariableOffsetINTEL"; - case DecorationCounterBuffer: return "CounterBuffer"; - case DecorationHlslSemanticGOOGLE: return "HlslSemanticGOOGLE"; - case DecorationUserTypeGOOGLE: return "UserTypeGOOGLE"; - case DecorationFunctionRoundingModeINTEL: return "FunctionRoundingModeINTEL"; - case DecorationFunctionDenormModeINTEL: return "FunctionDenormModeINTEL"; - case DecorationRegisterINTEL: return "RegisterINTEL"; - case DecorationMemoryINTEL: return "MemoryINTEL"; - case DecorationNumbanksINTEL: return "NumbanksINTEL"; - case DecorationBankwidthINTEL: return "BankwidthINTEL"; - case DecorationMaxPrivateCopiesINTEL: return "MaxPrivateCopiesINTEL"; - case DecorationSinglepumpINTEL: return "SinglepumpINTEL"; - case DecorationDoublepumpINTEL: return "DoublepumpINTEL"; - case DecorationMaxReplicatesINTEL: return "MaxReplicatesINTEL"; - case DecorationSimpleDualPortINTEL: return "SimpleDualPortINTEL"; - case DecorationMergeINTEL: return "MergeINTEL"; - case DecorationBankBitsINTEL: return "BankBitsINTEL"; - case DecorationForcePow2DepthINTEL: return "ForcePow2DepthINTEL"; - case DecorationStridesizeINTEL: return "StridesizeINTEL"; - case DecorationWordsizeINTEL: return "WordsizeINTEL"; - case DecorationTrueDualPortINTEL: return "TrueDualPortINTEL"; - case DecorationBurstCoalesceINTEL: return "BurstCoalesceINTEL"; - case DecorationCacheSizeINTEL: return "CacheSizeINTEL"; - case DecorationDontStaticallyCoalesceINTEL: return "DontStaticallyCoalesceINTEL"; - case DecorationPrefetchINTEL: return "PrefetchINTEL"; - case DecorationStallEnableINTEL: return "StallEnableINTEL"; - case DecorationFuseLoopsInFunctionINTEL: return "FuseLoopsInFunctionINTEL"; - case DecorationMathOpDSPModeINTEL: return "MathOpDSPModeINTEL"; - case DecorationAliasScopeINTEL: return "AliasScopeINTEL"; - case DecorationNoAliasINTEL: return "NoAliasINTEL"; - case DecorationInitiationIntervalINTEL: return "InitiationIntervalINTEL"; - case DecorationMaxConcurrencyINTEL: return "MaxConcurrencyINTEL"; - case DecorationPipelineEnableINTEL: return "PipelineEnableINTEL"; - case DecorationBufferLocationINTEL: return "BufferLocationINTEL"; - case DecorationIOPipeStorageINTEL: return "IOPipeStorageINTEL"; - case DecorationFunctionFloatingPointModeINTEL: return "FunctionFloatingPointModeINTEL"; - case DecorationSingleElementVectorINTEL: return "SingleElementVectorINTEL"; - case DecorationVectorComputeCallableFunctionINTEL: return "VectorComputeCallableFunctionINTEL"; - case DecorationMediaBlockIOINTEL: return "MediaBlockIOINTEL"; - case DecorationStallFreeINTEL: return "StallFreeINTEL"; - case DecorationFPMaxErrorDecorationINTEL: return "FPMaxErrorDecorationINTEL"; - case DecorationLatencyControlLabelINTEL: return "LatencyControlLabelINTEL"; - case DecorationLatencyControlConstraintINTEL: return "LatencyControlConstraintINTEL"; - case DecorationConduitKernelArgumentINTEL: return "ConduitKernelArgumentINTEL"; - case DecorationRegisterMapKernelArgumentINTEL: return "RegisterMapKernelArgumentINTEL"; - case DecorationMMHostInterfaceAddressWidthINTEL: return "MMHostInterfaceAddressWidthINTEL"; - case DecorationMMHostInterfaceDataWidthINTEL: return "MMHostInterfaceDataWidthINTEL"; - case DecorationMMHostInterfaceLatencyINTEL: return "MMHostInterfaceLatencyINTEL"; - case DecorationMMHostInterfaceReadWriteModeINTEL: return "MMHostInterfaceReadWriteModeINTEL"; - case DecorationMMHostInterfaceMaxBurstINTEL: return "MMHostInterfaceMaxBurstINTEL"; - case DecorationMMHostInterfaceWaitRequestINTEL: return "MMHostInterfaceWaitRequestINTEL"; - case DecorationStableKernelArgumentINTEL: return "StableKernelArgumentINTEL"; - case DecorationHostAccessINTEL: return "HostAccessINTEL"; - case DecorationInitModeINTEL: return "InitModeINTEL"; - case DecorationImplementInRegisterMapINTEL: return "ImplementInRegisterMapINTEL"; - case DecorationCacheControlLoadINTEL: return "CacheControlLoadINTEL"; - case DecorationCacheControlStoreINTEL: return "CacheControlStoreINTEL"; - default: return "Unknown"; - } -} - -inline const char* BuiltInToString(BuiltIn value) { - switch (value) { - case BuiltInPosition: return "Position"; - case BuiltInPointSize: return "PointSize"; - case BuiltInClipDistance: return "ClipDistance"; - case BuiltInCullDistance: return "CullDistance"; - case BuiltInVertexId: return "VertexId"; - case BuiltInInstanceId: return "InstanceId"; - case BuiltInPrimitiveId: return "PrimitiveId"; - case BuiltInInvocationId: return "InvocationId"; - case BuiltInLayer: return "Layer"; - case BuiltInViewportIndex: return "ViewportIndex"; - case BuiltInTessLevelOuter: return "TessLevelOuter"; - case BuiltInTessLevelInner: return "TessLevelInner"; - case BuiltInTessCoord: return "TessCoord"; - case BuiltInPatchVertices: return "PatchVertices"; - case BuiltInFragCoord: return "FragCoord"; - case BuiltInPointCoord: return "PointCoord"; - case BuiltInFrontFacing: return "FrontFacing"; - case BuiltInSampleId: return "SampleId"; - case BuiltInSamplePosition: return "SamplePosition"; - case BuiltInSampleMask: return "SampleMask"; - case BuiltInFragDepth: return "FragDepth"; - case BuiltInHelperInvocation: return "HelperInvocation"; - case BuiltInNumWorkgroups: return "NumWorkgroups"; - case BuiltInWorkgroupSize: return "WorkgroupSize"; - case BuiltInWorkgroupId: return "WorkgroupId"; - case BuiltInLocalInvocationId: return "LocalInvocationId"; - case BuiltInGlobalInvocationId: return "GlobalInvocationId"; - case BuiltInLocalInvocationIndex: return "LocalInvocationIndex"; - case BuiltInWorkDim: return "WorkDim"; - case BuiltInGlobalSize: return "GlobalSize"; - case BuiltInEnqueuedWorkgroupSize: return "EnqueuedWorkgroupSize"; - case BuiltInGlobalOffset: return "GlobalOffset"; - case BuiltInGlobalLinearId: return "GlobalLinearId"; - case BuiltInSubgroupSize: return "SubgroupSize"; - case BuiltInSubgroupMaxSize: return "SubgroupMaxSize"; - case BuiltInNumSubgroups: return "NumSubgroups"; - case BuiltInNumEnqueuedSubgroups: return "NumEnqueuedSubgroups"; - case BuiltInSubgroupId: return "SubgroupId"; - case BuiltInSubgroupLocalInvocationId: return "SubgroupLocalInvocationId"; - case BuiltInVertexIndex: return "VertexIndex"; - case BuiltInInstanceIndex: return "InstanceIndex"; - case BuiltInCoreIDARM: return "CoreIDARM"; - case BuiltInCoreCountARM: return "CoreCountARM"; - case BuiltInCoreMaxIDARM: return "CoreMaxIDARM"; - case BuiltInWarpIDARM: return "WarpIDARM"; - case BuiltInWarpMaxIDARM: return "WarpMaxIDARM"; - case BuiltInSubgroupEqMask: return "SubgroupEqMask"; - case BuiltInSubgroupGeMask: return "SubgroupGeMask"; - case BuiltInSubgroupGtMask: return "SubgroupGtMask"; - case BuiltInSubgroupLeMask: return "SubgroupLeMask"; - case BuiltInSubgroupLtMask: return "SubgroupLtMask"; - case BuiltInBaseVertex: return "BaseVertex"; - case BuiltInBaseInstance: return "BaseInstance"; - case BuiltInDrawIndex: return "DrawIndex"; - case BuiltInPrimitiveShadingRateKHR: return "PrimitiveShadingRateKHR"; - case BuiltInDeviceIndex: return "DeviceIndex"; - case BuiltInViewIndex: return "ViewIndex"; - case BuiltInShadingRateKHR: return "ShadingRateKHR"; - case BuiltInBaryCoordNoPerspAMD: return "BaryCoordNoPerspAMD"; - case BuiltInBaryCoordNoPerspCentroidAMD: return "BaryCoordNoPerspCentroidAMD"; - case BuiltInBaryCoordNoPerspSampleAMD: return "BaryCoordNoPerspSampleAMD"; - case BuiltInBaryCoordSmoothAMD: return "BaryCoordSmoothAMD"; - case BuiltInBaryCoordSmoothCentroidAMD: return "BaryCoordSmoothCentroidAMD"; - case BuiltInBaryCoordSmoothSampleAMD: return "BaryCoordSmoothSampleAMD"; - case BuiltInBaryCoordPullModelAMD: return "BaryCoordPullModelAMD"; - case BuiltInFragStencilRefEXT: return "FragStencilRefEXT"; - case BuiltInRemainingRecursionLevelsAMDX: return "RemainingRecursionLevelsAMDX"; - case BuiltInShaderIndexAMDX: return "ShaderIndexAMDX"; - case BuiltInViewportMaskNV: return "ViewportMaskNV"; - case BuiltInSecondaryPositionNV: return "SecondaryPositionNV"; - case BuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; - case BuiltInPositionPerViewNV: return "PositionPerViewNV"; - case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; - case BuiltInFullyCoveredEXT: return "FullyCoveredEXT"; - case BuiltInTaskCountNV: return "TaskCountNV"; - case BuiltInPrimitiveCountNV: return "PrimitiveCountNV"; - case BuiltInPrimitiveIndicesNV: return "PrimitiveIndicesNV"; - case BuiltInClipDistancePerViewNV: return "ClipDistancePerViewNV"; - case BuiltInCullDistancePerViewNV: return "CullDistancePerViewNV"; - case BuiltInLayerPerViewNV: return "LayerPerViewNV"; - case BuiltInMeshViewCountNV: return "MeshViewCountNV"; - case BuiltInMeshViewIndicesNV: return "MeshViewIndicesNV"; - case BuiltInBaryCoordKHR: return "BaryCoordKHR"; - case BuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR"; - case BuiltInFragSizeEXT: return "FragSizeEXT"; - case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT"; - case BuiltInPrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT"; - case BuiltInPrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT"; - case BuiltInPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT"; - case BuiltInCullPrimitiveEXT: return "CullPrimitiveEXT"; - case BuiltInLaunchIdKHR: return "LaunchIdKHR"; - case BuiltInLaunchSizeKHR: return "LaunchSizeKHR"; - case BuiltInWorldRayOriginKHR: return "WorldRayOriginKHR"; - case BuiltInWorldRayDirectionKHR: return "WorldRayDirectionKHR"; - case BuiltInObjectRayOriginKHR: return "ObjectRayOriginKHR"; - case BuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR"; - case BuiltInRayTminKHR: return "RayTminKHR"; - case BuiltInRayTmaxKHR: return "RayTmaxKHR"; - case BuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR"; - case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR"; - case BuiltInWorldToObjectKHR: return "WorldToObjectKHR"; - case BuiltInHitTNV: return "HitTNV"; - case BuiltInHitKindKHR: return "HitKindKHR"; - case BuiltInCurrentRayTimeNV: return "CurrentRayTimeNV"; - case BuiltInHitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR"; - case BuiltInHitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV"; - case BuiltInHitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV"; - case BuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR"; - case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR"; - case BuiltInWarpsPerSMNV: return "WarpsPerSMNV"; - case BuiltInSMCountNV: return "SMCountNV"; - case BuiltInWarpIDNV: return "WarpIDNV"; - case BuiltInSMIDNV: return "SMIDNV"; - case BuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV"; - case BuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV"; - case BuiltInCullMaskKHR: return "CullMaskKHR"; - default: return "Unknown"; - } -} - -inline const char* ScopeToString(Scope value) { - switch (value) { - case ScopeCrossDevice: return "CrossDevice"; - case ScopeDevice: return "Device"; - case ScopeWorkgroup: return "Workgroup"; - case ScopeSubgroup: return "Subgroup"; - case ScopeInvocation: return "Invocation"; - case ScopeQueueFamily: return "QueueFamily"; - case ScopeShaderCallKHR: return "ShaderCallKHR"; - default: return "Unknown"; - } -} - -inline const char* GroupOperationToString(GroupOperation value) { - switch (value) { - case GroupOperationReduce: return "Reduce"; - case GroupOperationInclusiveScan: return "InclusiveScan"; - case GroupOperationExclusiveScan: return "ExclusiveScan"; - case GroupOperationClusteredReduce: return "ClusteredReduce"; - case GroupOperationPartitionedReduceNV: return "PartitionedReduceNV"; - case GroupOperationPartitionedInclusiveScanNV: return "PartitionedInclusiveScanNV"; - case GroupOperationPartitionedExclusiveScanNV: return "PartitionedExclusiveScanNV"; - default: return "Unknown"; - } -} - -inline const char* KernelEnqueueFlagsToString(KernelEnqueueFlags value) { - switch (value) { - case KernelEnqueueFlagsNoWait: return "NoWait"; - case KernelEnqueueFlagsWaitKernel: return "WaitKernel"; - case KernelEnqueueFlagsWaitWorkGroup: return "WaitWorkGroup"; - default: return "Unknown"; - } -} - -inline const char* CapabilityToString(Capability value) { - switch (value) { - case CapabilityMatrix: return "Matrix"; - case CapabilityShader: return "Shader"; - case CapabilityGeometry: return "Geometry"; - case CapabilityTessellation: return "Tessellation"; - case CapabilityAddresses: return "Addresses"; - case CapabilityLinkage: return "Linkage"; - case CapabilityKernel: return "Kernel"; - case CapabilityVector16: return "Vector16"; - case CapabilityFloat16Buffer: return "Float16Buffer"; - case CapabilityFloat16: return "Float16"; - case CapabilityFloat64: return "Float64"; - case CapabilityInt64: return "Int64"; - case CapabilityInt64Atomics: return "Int64Atomics"; - case CapabilityImageBasic: return "ImageBasic"; - case CapabilityImageReadWrite: return "ImageReadWrite"; - case CapabilityImageMipmap: return "ImageMipmap"; - case CapabilityPipes: return "Pipes"; - case CapabilityGroups: return "Groups"; - case CapabilityDeviceEnqueue: return "DeviceEnqueue"; - case CapabilityLiteralSampler: return "LiteralSampler"; - case CapabilityAtomicStorage: return "AtomicStorage"; - case CapabilityInt16: return "Int16"; - case CapabilityTessellationPointSize: return "TessellationPointSize"; - case CapabilityGeometryPointSize: return "GeometryPointSize"; - case CapabilityImageGatherExtended: return "ImageGatherExtended"; - case CapabilityStorageImageMultisample: return "StorageImageMultisample"; - case CapabilityUniformBufferArrayDynamicIndexing: return "UniformBufferArrayDynamicIndexing"; - case CapabilitySampledImageArrayDynamicIndexing: return "SampledImageArrayDynamicIndexing"; - case CapabilityStorageBufferArrayDynamicIndexing: return "StorageBufferArrayDynamicIndexing"; - case CapabilityStorageImageArrayDynamicIndexing: return "StorageImageArrayDynamicIndexing"; - case CapabilityClipDistance: return "ClipDistance"; - case CapabilityCullDistance: return "CullDistance"; - case CapabilityImageCubeArray: return "ImageCubeArray"; - case CapabilitySampleRateShading: return "SampleRateShading"; - case CapabilityImageRect: return "ImageRect"; - case CapabilitySampledRect: return "SampledRect"; - case CapabilityGenericPointer: return "GenericPointer"; - case CapabilityInt8: return "Int8"; - case CapabilityInputAttachment: return "InputAttachment"; - case CapabilitySparseResidency: return "SparseResidency"; - case CapabilityMinLod: return "MinLod"; - case CapabilitySampled1D: return "Sampled1D"; - case CapabilityImage1D: return "Image1D"; - case CapabilitySampledCubeArray: return "SampledCubeArray"; - case CapabilitySampledBuffer: return "SampledBuffer"; - case CapabilityImageBuffer: return "ImageBuffer"; - case CapabilityImageMSArray: return "ImageMSArray"; - case CapabilityStorageImageExtendedFormats: return "StorageImageExtendedFormats"; - case CapabilityImageQuery: return "ImageQuery"; - case CapabilityDerivativeControl: return "DerivativeControl"; - case CapabilityInterpolationFunction: return "InterpolationFunction"; - case CapabilityTransformFeedback: return "TransformFeedback"; - case CapabilityGeometryStreams: return "GeometryStreams"; - case CapabilityStorageImageReadWithoutFormat: return "StorageImageReadWithoutFormat"; - case CapabilityStorageImageWriteWithoutFormat: return "StorageImageWriteWithoutFormat"; - case CapabilityMultiViewport: return "MultiViewport"; - case CapabilitySubgroupDispatch: return "SubgroupDispatch"; - case CapabilityNamedBarrier: return "NamedBarrier"; - case CapabilityPipeStorage: return "PipeStorage"; - case CapabilityGroupNonUniform: return "GroupNonUniform"; - case CapabilityGroupNonUniformVote: return "GroupNonUniformVote"; - case CapabilityGroupNonUniformArithmetic: return "GroupNonUniformArithmetic"; - case CapabilityGroupNonUniformBallot: return "GroupNonUniformBallot"; - case CapabilityGroupNonUniformShuffle: return "GroupNonUniformShuffle"; - case CapabilityGroupNonUniformShuffleRelative: return "GroupNonUniformShuffleRelative"; - case CapabilityGroupNonUniformClustered: return "GroupNonUniformClustered"; - case CapabilityGroupNonUniformQuad: return "GroupNonUniformQuad"; - case CapabilityShaderLayer: return "ShaderLayer"; - case CapabilityShaderViewportIndex: return "ShaderViewportIndex"; - case CapabilityUniformDecoration: return "UniformDecoration"; - case CapabilityCoreBuiltinsARM: return "CoreBuiltinsARM"; - case CapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT"; - case CapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; - case CapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; - case CapabilityCooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; - case CapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR"; - case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR"; - case CapabilityDrawParameters: return "DrawParameters"; - case CapabilityWorkgroupMemoryExplicitLayoutKHR: return "WorkgroupMemoryExplicitLayoutKHR"; - case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "WorkgroupMemoryExplicitLayout8BitAccessKHR"; - case CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "WorkgroupMemoryExplicitLayout16BitAccessKHR"; - case CapabilitySubgroupVoteKHR: return "SubgroupVoteKHR"; - case CapabilityStorageBuffer16BitAccess: return "StorageBuffer16BitAccess"; - case CapabilityStorageUniform16: return "StorageUniform16"; - case CapabilityStoragePushConstant16: return "StoragePushConstant16"; - case CapabilityStorageInputOutput16: return "StorageInputOutput16"; - case CapabilityDeviceGroup: return "DeviceGroup"; - case CapabilityMultiView: return "MultiView"; - case CapabilityVariablePointersStorageBuffer: return "VariablePointersStorageBuffer"; - case CapabilityVariablePointers: return "VariablePointers"; - case CapabilityAtomicStorageOps: return "AtomicStorageOps"; - case CapabilitySampleMaskPostDepthCoverage: return "SampleMaskPostDepthCoverage"; - case CapabilityStorageBuffer8BitAccess: return "StorageBuffer8BitAccess"; - case CapabilityUniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess"; - case CapabilityStoragePushConstant8: return "StoragePushConstant8"; - case CapabilityDenormPreserve: return "DenormPreserve"; - case CapabilityDenormFlushToZero: return "DenormFlushToZero"; - case CapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; - case CapabilityRoundingModeRTE: return "RoundingModeRTE"; - case CapabilityRoundingModeRTZ: return "RoundingModeRTZ"; - case CapabilityRayQueryProvisionalKHR: return "RayQueryProvisionalKHR"; - case CapabilityRayQueryKHR: return "RayQueryKHR"; - case CapabilityUntypedPointersKHR: return "UntypedPointersKHR"; - case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; - case CapabilityRayTracingKHR: return "RayTracingKHR"; - case CapabilityTextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM"; - case CapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM"; - case CapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM"; - case CapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; - case CapabilityFloat16ImageAMD: return "Float16ImageAMD"; - case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD"; - case CapabilityFragmentMaskAMD: return "FragmentMaskAMD"; - case CapabilityStencilExportEXT: return "StencilExportEXT"; - case CapabilityImageReadWriteLodAMD: return "ImageReadWriteLodAMD"; - case CapabilityInt64ImageEXT: return "Int64ImageEXT"; - case CapabilityShaderClockKHR: return "ShaderClockKHR"; - case CapabilityShaderEnqueueAMDX: return "ShaderEnqueueAMDX"; - case CapabilityQuadControlKHR: return "QuadControlKHR"; - case CapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV"; - case CapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; - case CapabilityShaderViewportIndexLayerEXT: return "ShaderViewportIndexLayerEXT"; - case CapabilityShaderViewportMaskNV: return "ShaderViewportMaskNV"; - case CapabilityShaderStereoViewNV: return "ShaderStereoViewNV"; - case CapabilityPerViewAttributesNV: return "PerViewAttributesNV"; - case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT"; - case CapabilityMeshShadingNV: return "MeshShadingNV"; - case CapabilityImageFootprintNV: return "ImageFootprintNV"; - case CapabilityMeshShadingEXT: return "MeshShadingEXT"; - case CapabilityFragmentBarycentricKHR: return "FragmentBarycentricKHR"; - case CapabilityComputeDerivativeGroupQuadsKHR: return "ComputeDerivativeGroupQuadsKHR"; - case CapabilityFragmentDensityEXT: return "FragmentDensityEXT"; - case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV"; - case CapabilityShaderNonUniform: return "ShaderNonUniform"; - case CapabilityRuntimeDescriptorArray: return "RuntimeDescriptorArray"; - case CapabilityInputAttachmentArrayDynamicIndexing: return "InputAttachmentArrayDynamicIndexing"; - case CapabilityUniformTexelBufferArrayDynamicIndexing: return "UniformTexelBufferArrayDynamicIndexing"; - case CapabilityStorageTexelBufferArrayDynamicIndexing: return "StorageTexelBufferArrayDynamicIndexing"; - case CapabilityUniformBufferArrayNonUniformIndexing: return "UniformBufferArrayNonUniformIndexing"; - case CapabilitySampledImageArrayNonUniformIndexing: return "SampledImageArrayNonUniformIndexing"; - case CapabilityStorageBufferArrayNonUniformIndexing: return "StorageBufferArrayNonUniformIndexing"; - case CapabilityStorageImageArrayNonUniformIndexing: return "StorageImageArrayNonUniformIndexing"; - case CapabilityInputAttachmentArrayNonUniformIndexing: return "InputAttachmentArrayNonUniformIndexing"; - case CapabilityUniformTexelBufferArrayNonUniformIndexing: return "UniformTexelBufferArrayNonUniformIndexing"; - case CapabilityStorageTexelBufferArrayNonUniformIndexing: return "StorageTexelBufferArrayNonUniformIndexing"; - case CapabilityRayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR"; - case CapabilityRayTracingNV: return "RayTracingNV"; - case CapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV"; - case CapabilityVulkanMemoryModel: return "VulkanMemoryModel"; - case CapabilityVulkanMemoryModelDeviceScope: return "VulkanMemoryModelDeviceScope"; - case CapabilityPhysicalStorageBufferAddresses: return "PhysicalStorageBufferAddresses"; - case CapabilityComputeDerivativeGroupLinearKHR: return "ComputeDerivativeGroupLinearKHR"; - case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; - case CapabilityCooperativeMatrixNV: return "CooperativeMatrixNV"; - case CapabilityFragmentShaderSampleInterlockEXT: return "FragmentShaderSampleInterlockEXT"; - case CapabilityFragmentShaderShadingRateInterlockEXT: return "FragmentShaderShadingRateInterlockEXT"; - case CapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV"; - case CapabilityFragmentShaderPixelInterlockEXT: return "FragmentShaderPixelInterlockEXT"; - case CapabilityDemoteToHelperInvocation: return "DemoteToHelperInvocation"; - case CapabilityDisplacementMicromapNV: return "DisplacementMicromapNV"; - case CapabilityRayTracingOpacityMicromapEXT: return "RayTracingOpacityMicromapEXT"; - case CapabilityShaderInvocationReorderNV: return "ShaderInvocationReorderNV"; - case CapabilityBindlessTextureNV: return "BindlessTextureNV"; - case CapabilityRayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR"; - case CapabilityCooperativeVectorNV: return "CooperativeVectorNV"; - case CapabilityAtomicFloat16VectorNV: return "AtomicFloat16VectorNV"; - case CapabilityRayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV"; - case CapabilityRawAccessChainsNV: return "RawAccessChainsNV"; - case CapabilityCooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV"; - case CapabilityCooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV"; - case CapabilityCooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV"; - case CapabilityCooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV"; - case CapabilityCooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV"; - case CapabilityCooperativeVectorTrainingNV: return "CooperativeVectorTrainingNV"; - case CapabilityTensorAddressingNV: return "TensorAddressingNV"; - case CapabilitySubgroupShuffleINTEL: return "SubgroupShuffleINTEL"; - case CapabilitySubgroupBufferBlockIOINTEL: return "SubgroupBufferBlockIOINTEL"; - case CapabilitySubgroupImageBlockIOINTEL: return "SubgroupImageBlockIOINTEL"; - case CapabilitySubgroupImageMediaBlockIOINTEL: return "SubgroupImageMediaBlockIOINTEL"; - case CapabilityRoundToInfinityINTEL: return "RoundToInfinityINTEL"; - case CapabilityFloatingPointModeINTEL: return "FloatingPointModeINTEL"; - case CapabilityIntegerFunctions2INTEL: return "IntegerFunctions2INTEL"; - case CapabilityFunctionPointersINTEL: return "FunctionPointersINTEL"; - case CapabilityIndirectReferencesINTEL: return "IndirectReferencesINTEL"; - case CapabilityAsmINTEL: return "AsmINTEL"; - case CapabilityAtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT"; - case CapabilityAtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT"; - case CapabilityAtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT"; - case CapabilityVectorComputeINTEL: return "VectorComputeINTEL"; - case CapabilityVectorAnyINTEL: return "VectorAnyINTEL"; - case CapabilityExpectAssumeKHR: return "ExpectAssumeKHR"; - case CapabilitySubgroupAvcMotionEstimationINTEL: return "SubgroupAvcMotionEstimationINTEL"; - case CapabilitySubgroupAvcMotionEstimationIntraINTEL: return "SubgroupAvcMotionEstimationIntraINTEL"; - case CapabilitySubgroupAvcMotionEstimationChromaINTEL: return "SubgroupAvcMotionEstimationChromaINTEL"; - case CapabilityVariableLengthArrayINTEL: return "VariableLengthArrayINTEL"; - case CapabilityFunctionFloatControlINTEL: return "FunctionFloatControlINTEL"; - case CapabilityFPGAMemoryAttributesINTEL: return "FPGAMemoryAttributesINTEL"; - case CapabilityFPFastMathModeINTEL: return "FPFastMathModeINTEL"; - case CapabilityArbitraryPrecisionIntegersINTEL: return "ArbitraryPrecisionIntegersINTEL"; - case CapabilityArbitraryPrecisionFloatingPointINTEL: return "ArbitraryPrecisionFloatingPointINTEL"; - case CapabilityUnstructuredLoopControlsINTEL: return "UnstructuredLoopControlsINTEL"; - case CapabilityFPGALoopControlsINTEL: return "FPGALoopControlsINTEL"; - case CapabilityKernelAttributesINTEL: return "KernelAttributesINTEL"; - case CapabilityFPGAKernelAttributesINTEL: return "FPGAKernelAttributesINTEL"; - case CapabilityFPGAMemoryAccessesINTEL: return "FPGAMemoryAccessesINTEL"; - case CapabilityFPGAClusterAttributesINTEL: return "FPGAClusterAttributesINTEL"; - case CapabilityLoopFuseINTEL: return "LoopFuseINTEL"; - case CapabilityFPGADSPControlINTEL: return "FPGADSPControlINTEL"; - case CapabilityMemoryAccessAliasingINTEL: return "MemoryAccessAliasingINTEL"; - case CapabilityFPGAInvocationPipeliningAttributesINTEL: return "FPGAInvocationPipeliningAttributesINTEL"; - case CapabilityFPGABufferLocationINTEL: return "FPGABufferLocationINTEL"; - case CapabilityArbitraryPrecisionFixedPointINTEL: return "ArbitraryPrecisionFixedPointINTEL"; - case CapabilityUSMStorageClassesINTEL: return "USMStorageClassesINTEL"; - case CapabilityRuntimeAlignedAttributeINTEL: return "RuntimeAlignedAttributeINTEL"; - case CapabilityIOPipesINTEL: return "IOPipesINTEL"; - case CapabilityBlockingPipesINTEL: return "BlockingPipesINTEL"; - case CapabilityFPGARegINTEL: return "FPGARegINTEL"; - case CapabilityDotProductInputAll: return "DotProductInputAll"; - case CapabilityDotProductInput4x8Bit: return "DotProductInput4x8Bit"; - case CapabilityDotProductInput4x8BitPacked: return "DotProductInput4x8BitPacked"; - case CapabilityDotProduct: return "DotProduct"; - case CapabilityRayCullMaskKHR: return "RayCullMaskKHR"; - case CapabilityCooperativeMatrixKHR: return "CooperativeMatrixKHR"; - case CapabilityReplicatedCompositesEXT: return "ReplicatedCompositesEXT"; - case CapabilityBitInstructions: return "BitInstructions"; - case CapabilityGroupNonUniformRotateKHR: return "GroupNonUniformRotateKHR"; - case CapabilityFloatControls2: return "FloatControls2"; - case CapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT"; - case CapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT"; - case CapabilityLongCompositesINTEL: return "LongCompositesINTEL"; - case CapabilityOptNoneEXT: return "OptNoneEXT"; - case CapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT"; - case CapabilityDebugInfoModuleINTEL: return "DebugInfoModuleINTEL"; - case CapabilityBFloat16ConversionINTEL: return "BFloat16ConversionINTEL"; - case CapabilitySplitBarrierINTEL: return "SplitBarrierINTEL"; - case CapabilityArithmeticFenceEXT: return "ArithmeticFenceEXT"; - case CapabilityFPGAClusterAttributesV2INTEL: return "FPGAClusterAttributesV2INTEL"; - case CapabilityFPGAKernelAttributesv2INTEL: return "FPGAKernelAttributesv2INTEL"; - case CapabilityFPMaxErrorINTEL: return "FPMaxErrorINTEL"; - case CapabilityFPGALatencyControlINTEL: return "FPGALatencyControlINTEL"; - case CapabilityFPGAArgumentInterfacesINTEL: return "FPGAArgumentInterfacesINTEL"; - case CapabilityGlobalVariableHostAccessINTEL: return "GlobalVariableHostAccessINTEL"; - case CapabilityGlobalVariableFPGADecorationsINTEL: return "GlobalVariableFPGADecorationsINTEL"; - case CapabilitySubgroupBufferPrefetchINTEL: return "SubgroupBufferPrefetchINTEL"; - case CapabilityGroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR"; - case CapabilityMaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL"; - case CapabilityCacheControlsINTEL: return "CacheControlsINTEL"; - case CapabilityRegisterLimitsINTEL: return "RegisterLimitsINTEL"; - default: return "Unknown"; - } -} - -inline const char* RayQueryIntersectionToString(RayQueryIntersection value) { - switch (value) { - case RayQueryIntersectionRayQueryCandidateIntersectionKHR: return "RayQueryCandidateIntersectionKHR"; - case RayQueryIntersectionRayQueryCommittedIntersectionKHR: return "RayQueryCommittedIntersectionKHR"; - default: return "Unknown"; - } -} - -inline const char* RayQueryCommittedIntersectionTypeToString(RayQueryCommittedIntersectionType value) { - switch (value) { - case RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR: return "RayQueryCommittedIntersectionNoneKHR"; - case RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR: return "RayQueryCommittedIntersectionTriangleKHR"; - case RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR: return "RayQueryCommittedIntersectionGeneratedKHR"; - default: return "Unknown"; - } -} - -inline const char* RayQueryCandidateIntersectionTypeToString(RayQueryCandidateIntersectionType value) { - switch (value) { - case RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR: return "RayQueryCandidateIntersectionTriangleKHR"; - case RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR: return "RayQueryCandidateIntersectionAABBKHR"; - default: return "Unknown"; - } -} - -inline const char* FPDenormModeToString(FPDenormMode value) { - switch (value) { - case FPDenormModePreserve: return "Preserve"; - case FPDenormModeFlushToZero: return "FlushToZero"; - default: return "Unknown"; - } -} - -inline const char* FPOperationModeToString(FPOperationMode value) { - switch (value) { - case FPOperationModeIEEE: return "IEEE"; - case FPOperationModeALT: return "ALT"; - default: return "Unknown"; - } -} - -inline const char* QuantizationModesToString(QuantizationModes value) { - switch (value) { - case QuantizationModesTRN: return "TRN"; - case QuantizationModesTRN_ZERO: return "TRN_ZERO"; - case QuantizationModesRND: return "RND"; - case QuantizationModesRND_ZERO: return "RND_ZERO"; - case QuantizationModesRND_INF: return "RND_INF"; - case QuantizationModesRND_MIN_INF: return "RND_MIN_INF"; - case QuantizationModesRND_CONV: return "RND_CONV"; - case QuantizationModesRND_CONV_ODD: return "RND_CONV_ODD"; - default: return "Unknown"; - } -} - -inline const char* OverflowModesToString(OverflowModes value) { - switch (value) { - case OverflowModesWRAP: return "WRAP"; - case OverflowModesSAT: return "SAT"; - case OverflowModesSAT_ZERO: return "SAT_ZERO"; - case OverflowModesSAT_SYM: return "SAT_SYM"; - default: return "Unknown"; - } -} - -inline const char* PackedVectorFormatToString(PackedVectorFormat value) { - switch (value) { - case PackedVectorFormatPackedVectorFormat4x8Bit: return "PackedVectorFormat4x8Bit"; - default: return "Unknown"; - } -} - -inline const char* CooperativeMatrixLayoutToString(CooperativeMatrixLayout value) { - switch (value) { - case CooperativeMatrixLayoutRowMajorKHR: return "RowMajorKHR"; - case CooperativeMatrixLayoutColumnMajorKHR: return "ColumnMajorKHR"; - case CooperativeMatrixLayoutRowBlockedInterleavedARM: return "RowBlockedInterleavedARM"; - case CooperativeMatrixLayoutColumnBlockedInterleavedARM: return "ColumnBlockedInterleavedARM"; - default: return "Unknown"; - } -} - -inline const char* CooperativeMatrixUseToString(CooperativeMatrixUse value) { - switch (value) { - case CooperativeMatrixUseMatrixAKHR: return "MatrixAKHR"; - case CooperativeMatrixUseMatrixBKHR: return "MatrixBKHR"; - case CooperativeMatrixUseMatrixAccumulatorKHR: return "MatrixAccumulatorKHR"; - default: return "Unknown"; - } -} - -inline const char* TensorClampModeToString(TensorClampMode value) { - switch (value) { - case TensorClampModeUndefined: return "Undefined"; - case TensorClampModeConstant: return "Constant"; - case TensorClampModeClampToEdge: return "ClampToEdge"; - case TensorClampModeRepeat: return "Repeat"; - case TensorClampModeRepeatMirrored: return "RepeatMirrored"; - default: return "Unknown"; - } -} - -inline const char* InitializationModeQualifierToString(InitializationModeQualifier value) { - switch (value) { - case InitializationModeQualifierInitOnDeviceReprogramINTEL: return "InitOnDeviceReprogramINTEL"; - case InitializationModeQualifierInitOnDeviceResetINTEL: return "InitOnDeviceResetINTEL"; - default: return "Unknown"; - } -} - -inline const char* HostAccessQualifierToString(HostAccessQualifier value) { - switch (value) { - case HostAccessQualifierNoneINTEL: return "NoneINTEL"; - case HostAccessQualifierReadINTEL: return "ReadINTEL"; - case HostAccessQualifierWriteINTEL: return "WriteINTEL"; - case HostAccessQualifierReadWriteINTEL: return "ReadWriteINTEL"; - default: return "Unknown"; - } -} - -inline const char* LoadCacheControlToString(LoadCacheControl value) { - switch (value) { - case LoadCacheControlUncachedINTEL: return "UncachedINTEL"; - case LoadCacheControlCachedINTEL: return "CachedINTEL"; - case LoadCacheControlStreamingINTEL: return "StreamingINTEL"; - case LoadCacheControlInvalidateAfterReadINTEL: return "InvalidateAfterReadINTEL"; - case LoadCacheControlConstCachedINTEL: return "ConstCachedINTEL"; - default: return "Unknown"; - } -} - -inline const char* StoreCacheControlToString(StoreCacheControl value) { - switch (value) { - case StoreCacheControlUncachedINTEL: return "UncachedINTEL"; - case StoreCacheControlWriteThroughINTEL: return "WriteThroughINTEL"; - case StoreCacheControlWriteBackINTEL: return "WriteBackINTEL"; - case StoreCacheControlStreamingINTEL: return "StreamingINTEL"; - default: return "Unknown"; - } -} - -inline const char* NamedMaximumNumberOfRegistersToString(NamedMaximumNumberOfRegisters value) { - switch (value) { - case NamedMaximumNumberOfRegistersAutoINTEL: return "AutoINTEL"; - default: return "Unknown"; - } -} - -inline const char* FPEncodingToString(FPEncoding value) { - switch (value) { - default: return "Unknown"; - } -} - -inline const char* CooperativeVectorMatrixLayoutToString(CooperativeVectorMatrixLayout value) { - switch (value) { - case CooperativeVectorMatrixLayoutRowMajorNV: return "RowMajorNV"; - case CooperativeVectorMatrixLayoutColumnMajorNV: return "ColumnMajorNV"; - case CooperativeVectorMatrixLayoutInferencingOptimalNV: return "InferencingOptimalNV"; - case CooperativeVectorMatrixLayoutTrainingOptimalNV: return "TrainingOptimalNV"; - default: return "Unknown"; - } -} - -inline const char* ComponentTypeToString(ComponentType value) { - switch (value) { - case ComponentTypeFloat16NV: return "Float16NV"; - case ComponentTypeFloat32NV: return "Float32NV"; - case ComponentTypeFloat64NV: return "Float64NV"; - case ComponentTypeSignedInt8NV: return "SignedInt8NV"; - case ComponentTypeSignedInt16NV: return "SignedInt16NV"; - case ComponentTypeSignedInt32NV: return "SignedInt32NV"; - case ComponentTypeSignedInt64NV: return "SignedInt64NV"; - case ComponentTypeUnsignedInt8NV: return "UnsignedInt8NV"; - case ComponentTypeUnsignedInt16NV: return "UnsignedInt16NV"; - case ComponentTypeUnsignedInt32NV: return "UnsignedInt32NV"; - case ComponentTypeUnsignedInt64NV: return "UnsignedInt64NV"; - case ComponentTypeSignedInt8PackedNV: return "SignedInt8PackedNV"; - case ComponentTypeUnsignedInt8PackedNV: return "UnsignedInt8PackedNV"; - case ComponentTypeFloatE4M3NV: return "FloatE4M3NV"; - case ComponentTypeFloatE5M2NV: return "FloatE5M2NV"; - default: return "Unknown"; - } -} - -inline const char* OpToString(Op value) { - switch (value) { - case OpNop: return "OpNop"; - case OpUndef: return "OpUndef"; - case OpSourceContinued: return "OpSourceContinued"; - case OpSource: return "OpSource"; - case OpSourceExtension: return "OpSourceExtension"; - case OpName: return "OpName"; - case OpMemberName: return "OpMemberName"; - case OpString: return "OpString"; - case OpLine: return "OpLine"; - case OpExtension: return "OpExtension"; - case OpExtInstImport: return "OpExtInstImport"; - case OpExtInst: return "OpExtInst"; - case OpMemoryModel: return "OpMemoryModel"; - case OpEntryPoint: return "OpEntryPoint"; - case OpExecutionMode: return "OpExecutionMode"; - case OpCapability: return "OpCapability"; - case OpTypeVoid: return "OpTypeVoid"; - case OpTypeBool: return "OpTypeBool"; - case OpTypeInt: return "OpTypeInt"; - case OpTypeFloat: return "OpTypeFloat"; - case OpTypeVector: return "OpTypeVector"; - case OpTypeMatrix: return "OpTypeMatrix"; - case OpTypeImage: return "OpTypeImage"; - case OpTypeSampler: return "OpTypeSampler"; - case OpTypeSampledImage: return "OpTypeSampledImage"; - case OpTypeArray: return "OpTypeArray"; - case OpTypeRuntimeArray: return "OpTypeRuntimeArray"; - case OpTypeStruct: return "OpTypeStruct"; - case OpTypeOpaque: return "OpTypeOpaque"; - case OpTypePointer: return "OpTypePointer"; - case OpTypeFunction: return "OpTypeFunction"; - case OpTypeEvent: return "OpTypeEvent"; - case OpTypeDeviceEvent: return "OpTypeDeviceEvent"; - case OpTypeReserveId: return "OpTypeReserveId"; - case OpTypeQueue: return "OpTypeQueue"; - case OpTypePipe: return "OpTypePipe"; - case OpTypeForwardPointer: return "OpTypeForwardPointer"; - case OpConstantTrue: return "OpConstantTrue"; - case OpConstantFalse: return "OpConstantFalse"; - case OpConstant: return "OpConstant"; - case OpConstantComposite: return "OpConstantComposite"; - case OpConstantSampler: return "OpConstantSampler"; - case OpConstantNull: return "OpConstantNull"; - case OpSpecConstantTrue: return "OpSpecConstantTrue"; - case OpSpecConstantFalse: return "OpSpecConstantFalse"; - case OpSpecConstant: return "OpSpecConstant"; - case OpSpecConstantComposite: return "OpSpecConstantComposite"; - case OpSpecConstantOp: return "OpSpecConstantOp"; - case OpFunction: return "OpFunction"; - case OpFunctionParameter: return "OpFunctionParameter"; - case OpFunctionEnd: return "OpFunctionEnd"; - case OpFunctionCall: return "OpFunctionCall"; - case OpVariable: return "OpVariable"; - case OpImageTexelPointer: return "OpImageTexelPointer"; - case OpLoad: return "OpLoad"; - case OpStore: return "OpStore"; - case OpCopyMemory: return "OpCopyMemory"; - case OpCopyMemorySized: return "OpCopyMemorySized"; - case OpAccessChain: return "OpAccessChain"; - case OpInBoundsAccessChain: return "OpInBoundsAccessChain"; - case OpPtrAccessChain: return "OpPtrAccessChain"; - case OpArrayLength: return "OpArrayLength"; - case OpGenericPtrMemSemantics: return "OpGenericPtrMemSemantics"; - case OpInBoundsPtrAccessChain: return "OpInBoundsPtrAccessChain"; - case OpDecorate: return "OpDecorate"; - case OpMemberDecorate: return "OpMemberDecorate"; - case OpDecorationGroup: return "OpDecorationGroup"; - case OpGroupDecorate: return "OpGroupDecorate"; - case OpGroupMemberDecorate: return "OpGroupMemberDecorate"; - case OpVectorExtractDynamic: return "OpVectorExtractDynamic"; - case OpVectorInsertDynamic: return "OpVectorInsertDynamic"; - case OpVectorShuffle: return "OpVectorShuffle"; - case OpCompositeConstruct: return "OpCompositeConstruct"; - case OpCompositeExtract: return "OpCompositeExtract"; - case OpCompositeInsert: return "OpCompositeInsert"; - case OpCopyObject: return "OpCopyObject"; - case OpTranspose: return "OpTranspose"; - case OpSampledImage: return "OpSampledImage"; - case OpImageSampleImplicitLod: return "OpImageSampleImplicitLod"; - case OpImageSampleExplicitLod: return "OpImageSampleExplicitLod"; - case OpImageSampleDrefImplicitLod: return "OpImageSampleDrefImplicitLod"; - case OpImageSampleDrefExplicitLod: return "OpImageSampleDrefExplicitLod"; - case OpImageSampleProjImplicitLod: return "OpImageSampleProjImplicitLod"; - case OpImageSampleProjExplicitLod: return "OpImageSampleProjExplicitLod"; - case OpImageSampleProjDrefImplicitLod: return "OpImageSampleProjDrefImplicitLod"; - case OpImageSampleProjDrefExplicitLod: return "OpImageSampleProjDrefExplicitLod"; - case OpImageFetch: return "OpImageFetch"; - case OpImageGather: return "OpImageGather"; - case OpImageDrefGather: return "OpImageDrefGather"; - case OpImageRead: return "OpImageRead"; - case OpImageWrite: return "OpImageWrite"; - case OpImage: return "OpImage"; - case OpImageQueryFormat: return "OpImageQueryFormat"; - case OpImageQueryOrder: return "OpImageQueryOrder"; - case OpImageQuerySizeLod: return "OpImageQuerySizeLod"; - case OpImageQuerySize: return "OpImageQuerySize"; - case OpImageQueryLod: return "OpImageQueryLod"; - case OpImageQueryLevels: return "OpImageQueryLevels"; - case OpImageQuerySamples: return "OpImageQuerySamples"; - case OpConvertFToU: return "OpConvertFToU"; - case OpConvertFToS: return "OpConvertFToS"; - case OpConvertSToF: return "OpConvertSToF"; - case OpConvertUToF: return "OpConvertUToF"; - case OpUConvert: return "OpUConvert"; - case OpSConvert: return "OpSConvert"; - case OpFConvert: return "OpFConvert"; - case OpQuantizeToF16: return "OpQuantizeToF16"; - case OpConvertPtrToU: return "OpConvertPtrToU"; - case OpSatConvertSToU: return "OpSatConvertSToU"; - case OpSatConvertUToS: return "OpSatConvertUToS"; - case OpConvertUToPtr: return "OpConvertUToPtr"; - case OpPtrCastToGeneric: return "OpPtrCastToGeneric"; - case OpGenericCastToPtr: return "OpGenericCastToPtr"; - case OpGenericCastToPtrExplicit: return "OpGenericCastToPtrExplicit"; - case OpBitcast: return "OpBitcast"; - case OpSNegate: return "OpSNegate"; - case OpFNegate: return "OpFNegate"; - case OpIAdd: return "OpIAdd"; - case OpFAdd: return "OpFAdd"; - case OpISub: return "OpISub"; - case OpFSub: return "OpFSub"; - case OpIMul: return "OpIMul"; - case OpFMul: return "OpFMul"; - case OpUDiv: return "OpUDiv"; - case OpSDiv: return "OpSDiv"; - case OpFDiv: return "OpFDiv"; - case OpUMod: return "OpUMod"; - case OpSRem: return "OpSRem"; - case OpSMod: return "OpSMod"; - case OpFRem: return "OpFRem"; - case OpFMod: return "OpFMod"; - case OpVectorTimesScalar: return "OpVectorTimesScalar"; - case OpMatrixTimesScalar: return "OpMatrixTimesScalar"; - case OpVectorTimesMatrix: return "OpVectorTimesMatrix"; - case OpMatrixTimesVector: return "OpMatrixTimesVector"; - case OpMatrixTimesMatrix: return "OpMatrixTimesMatrix"; - case OpOuterProduct: return "OpOuterProduct"; - case OpDot: return "OpDot"; - case OpIAddCarry: return "OpIAddCarry"; - case OpISubBorrow: return "OpISubBorrow"; - case OpUMulExtended: return "OpUMulExtended"; - case OpSMulExtended: return "OpSMulExtended"; - case OpAny: return "OpAny"; - case OpAll: return "OpAll"; - case OpIsNan: return "OpIsNan"; - case OpIsInf: return "OpIsInf"; - case OpIsFinite: return "OpIsFinite"; - case OpIsNormal: return "OpIsNormal"; - case OpSignBitSet: return "OpSignBitSet"; - case OpLessOrGreater: return "OpLessOrGreater"; - case OpOrdered: return "OpOrdered"; - case OpUnordered: return "OpUnordered"; - case OpLogicalEqual: return "OpLogicalEqual"; - case OpLogicalNotEqual: return "OpLogicalNotEqual"; - case OpLogicalOr: return "OpLogicalOr"; - case OpLogicalAnd: return "OpLogicalAnd"; - case OpLogicalNot: return "OpLogicalNot"; - case OpSelect: return "OpSelect"; - case OpIEqual: return "OpIEqual"; - case OpINotEqual: return "OpINotEqual"; - case OpUGreaterThan: return "OpUGreaterThan"; - case OpSGreaterThan: return "OpSGreaterThan"; - case OpUGreaterThanEqual: return "OpUGreaterThanEqual"; - case OpSGreaterThanEqual: return "OpSGreaterThanEqual"; - case OpULessThan: return "OpULessThan"; - case OpSLessThan: return "OpSLessThan"; - case OpULessThanEqual: return "OpULessThanEqual"; - case OpSLessThanEqual: return "OpSLessThanEqual"; - case OpFOrdEqual: return "OpFOrdEqual"; - case OpFUnordEqual: return "OpFUnordEqual"; - case OpFOrdNotEqual: return "OpFOrdNotEqual"; - case OpFUnordNotEqual: return "OpFUnordNotEqual"; - case OpFOrdLessThan: return "OpFOrdLessThan"; - case OpFUnordLessThan: return "OpFUnordLessThan"; - case OpFOrdGreaterThan: return "OpFOrdGreaterThan"; - case OpFUnordGreaterThan: return "OpFUnordGreaterThan"; - case OpFOrdLessThanEqual: return "OpFOrdLessThanEqual"; - case OpFUnordLessThanEqual: return "OpFUnordLessThanEqual"; - case OpFOrdGreaterThanEqual: return "OpFOrdGreaterThanEqual"; - case OpFUnordGreaterThanEqual: return "OpFUnordGreaterThanEqual"; - case OpShiftRightLogical: return "OpShiftRightLogical"; - case OpShiftRightArithmetic: return "OpShiftRightArithmetic"; - case OpShiftLeftLogical: return "OpShiftLeftLogical"; - case OpBitwiseOr: return "OpBitwiseOr"; - case OpBitwiseXor: return "OpBitwiseXor"; - case OpBitwiseAnd: return "OpBitwiseAnd"; - case OpNot: return "OpNot"; - case OpBitFieldInsert: return "OpBitFieldInsert"; - case OpBitFieldSExtract: return "OpBitFieldSExtract"; - case OpBitFieldUExtract: return "OpBitFieldUExtract"; - case OpBitReverse: return "OpBitReverse"; - case OpBitCount: return "OpBitCount"; - case OpDPdx: return "OpDPdx"; - case OpDPdy: return "OpDPdy"; - case OpFwidth: return "OpFwidth"; - case OpDPdxFine: return "OpDPdxFine"; - case OpDPdyFine: return "OpDPdyFine"; - case OpFwidthFine: return "OpFwidthFine"; - case OpDPdxCoarse: return "OpDPdxCoarse"; - case OpDPdyCoarse: return "OpDPdyCoarse"; - case OpFwidthCoarse: return "OpFwidthCoarse"; - case OpEmitVertex: return "OpEmitVertex"; - case OpEndPrimitive: return "OpEndPrimitive"; - case OpEmitStreamVertex: return "OpEmitStreamVertex"; - case OpEndStreamPrimitive: return "OpEndStreamPrimitive"; - case OpControlBarrier: return "OpControlBarrier"; - case OpMemoryBarrier: return "OpMemoryBarrier"; - case OpAtomicLoad: return "OpAtomicLoad"; - case OpAtomicStore: return "OpAtomicStore"; - case OpAtomicExchange: return "OpAtomicExchange"; - case OpAtomicCompareExchange: return "OpAtomicCompareExchange"; - case OpAtomicCompareExchangeWeak: return "OpAtomicCompareExchangeWeak"; - case OpAtomicIIncrement: return "OpAtomicIIncrement"; - case OpAtomicIDecrement: return "OpAtomicIDecrement"; - case OpAtomicIAdd: return "OpAtomicIAdd"; - case OpAtomicISub: return "OpAtomicISub"; - case OpAtomicSMin: return "OpAtomicSMin"; - case OpAtomicUMin: return "OpAtomicUMin"; - case OpAtomicSMax: return "OpAtomicSMax"; - case OpAtomicUMax: return "OpAtomicUMax"; - case OpAtomicAnd: return "OpAtomicAnd"; - case OpAtomicOr: return "OpAtomicOr"; - case OpAtomicXor: return "OpAtomicXor"; - case OpPhi: return "OpPhi"; - case OpLoopMerge: return "OpLoopMerge"; - case OpSelectionMerge: return "OpSelectionMerge"; - case OpLabel: return "OpLabel"; - case OpBranch: return "OpBranch"; - case OpBranchConditional: return "OpBranchConditional"; - case OpSwitch: return "OpSwitch"; - case OpKill: return "OpKill"; - case OpReturn: return "OpReturn"; - case OpReturnValue: return "OpReturnValue"; - case OpUnreachable: return "OpUnreachable"; - case OpLifetimeStart: return "OpLifetimeStart"; - case OpLifetimeStop: return "OpLifetimeStop"; - case OpGroupAsyncCopy: return "OpGroupAsyncCopy"; - case OpGroupWaitEvents: return "OpGroupWaitEvents"; - case OpGroupAll: return "OpGroupAll"; - case OpGroupAny: return "OpGroupAny"; - case OpGroupBroadcast: return "OpGroupBroadcast"; - case OpGroupIAdd: return "OpGroupIAdd"; - case OpGroupFAdd: return "OpGroupFAdd"; - case OpGroupFMin: return "OpGroupFMin"; - case OpGroupUMin: return "OpGroupUMin"; - case OpGroupSMin: return "OpGroupSMin"; - case OpGroupFMax: return "OpGroupFMax"; - case OpGroupUMax: return "OpGroupUMax"; - case OpGroupSMax: return "OpGroupSMax"; - case OpReadPipe: return "OpReadPipe"; - case OpWritePipe: return "OpWritePipe"; - case OpReservedReadPipe: return "OpReservedReadPipe"; - case OpReservedWritePipe: return "OpReservedWritePipe"; - case OpReserveReadPipePackets: return "OpReserveReadPipePackets"; - case OpReserveWritePipePackets: return "OpReserveWritePipePackets"; - case OpCommitReadPipe: return "OpCommitReadPipe"; - case OpCommitWritePipe: return "OpCommitWritePipe"; - case OpIsValidReserveId: return "OpIsValidReserveId"; - case OpGetNumPipePackets: return "OpGetNumPipePackets"; - case OpGetMaxPipePackets: return "OpGetMaxPipePackets"; - case OpGroupReserveReadPipePackets: return "OpGroupReserveReadPipePackets"; - case OpGroupReserveWritePipePackets: return "OpGroupReserveWritePipePackets"; - case OpGroupCommitReadPipe: return "OpGroupCommitReadPipe"; - case OpGroupCommitWritePipe: return "OpGroupCommitWritePipe"; - case OpEnqueueMarker: return "OpEnqueueMarker"; - case OpEnqueueKernel: return "OpEnqueueKernel"; - case OpGetKernelNDrangeSubGroupCount: return "OpGetKernelNDrangeSubGroupCount"; - case OpGetKernelNDrangeMaxSubGroupSize: return "OpGetKernelNDrangeMaxSubGroupSize"; - case OpGetKernelWorkGroupSize: return "OpGetKernelWorkGroupSize"; - case OpGetKernelPreferredWorkGroupSizeMultiple: return "OpGetKernelPreferredWorkGroupSizeMultiple"; - case OpRetainEvent: return "OpRetainEvent"; - case OpReleaseEvent: return "OpReleaseEvent"; - case OpCreateUserEvent: return "OpCreateUserEvent"; - case OpIsValidEvent: return "OpIsValidEvent"; - case OpSetUserEventStatus: return "OpSetUserEventStatus"; - case OpCaptureEventProfilingInfo: return "OpCaptureEventProfilingInfo"; - case OpGetDefaultQueue: return "OpGetDefaultQueue"; - case OpBuildNDRange: return "OpBuildNDRange"; - case OpImageSparseSampleImplicitLod: return "OpImageSparseSampleImplicitLod"; - case OpImageSparseSampleExplicitLod: return "OpImageSparseSampleExplicitLod"; - case OpImageSparseSampleDrefImplicitLod: return "OpImageSparseSampleDrefImplicitLod"; - case OpImageSparseSampleDrefExplicitLod: return "OpImageSparseSampleDrefExplicitLod"; - case OpImageSparseSampleProjImplicitLod: return "OpImageSparseSampleProjImplicitLod"; - case OpImageSparseSampleProjExplicitLod: return "OpImageSparseSampleProjExplicitLod"; - case OpImageSparseSampleProjDrefImplicitLod: return "OpImageSparseSampleProjDrefImplicitLod"; - case OpImageSparseSampleProjDrefExplicitLod: return "OpImageSparseSampleProjDrefExplicitLod"; - case OpImageSparseFetch: return "OpImageSparseFetch"; - case OpImageSparseGather: return "OpImageSparseGather"; - case OpImageSparseDrefGather: return "OpImageSparseDrefGather"; - case OpImageSparseTexelsResident: return "OpImageSparseTexelsResident"; - case OpNoLine: return "OpNoLine"; - case OpAtomicFlagTestAndSet: return "OpAtomicFlagTestAndSet"; - case OpAtomicFlagClear: return "OpAtomicFlagClear"; - case OpImageSparseRead: return "OpImageSparseRead"; - case OpSizeOf: return "OpSizeOf"; - case OpTypePipeStorage: return "OpTypePipeStorage"; - case OpConstantPipeStorage: return "OpConstantPipeStorage"; - case OpCreatePipeFromPipeStorage: return "OpCreatePipeFromPipeStorage"; - case OpGetKernelLocalSizeForSubgroupCount: return "OpGetKernelLocalSizeForSubgroupCount"; - case OpGetKernelMaxNumSubgroups: return "OpGetKernelMaxNumSubgroups"; - case OpTypeNamedBarrier: return "OpTypeNamedBarrier"; - case OpNamedBarrierInitialize: return "OpNamedBarrierInitialize"; - case OpMemoryNamedBarrier: return "OpMemoryNamedBarrier"; - case OpModuleProcessed: return "OpModuleProcessed"; - case OpExecutionModeId: return "OpExecutionModeId"; - case OpDecorateId: return "OpDecorateId"; - case OpGroupNonUniformElect: return "OpGroupNonUniformElect"; - case OpGroupNonUniformAll: return "OpGroupNonUniformAll"; - case OpGroupNonUniformAny: return "OpGroupNonUniformAny"; - case OpGroupNonUniformAllEqual: return "OpGroupNonUniformAllEqual"; - case OpGroupNonUniformBroadcast: return "OpGroupNonUniformBroadcast"; - case OpGroupNonUniformBroadcastFirst: return "OpGroupNonUniformBroadcastFirst"; - case OpGroupNonUniformBallot: return "OpGroupNonUniformBallot"; - case OpGroupNonUniformInverseBallot: return "OpGroupNonUniformInverseBallot"; - case OpGroupNonUniformBallotBitExtract: return "OpGroupNonUniformBallotBitExtract"; - case OpGroupNonUniformBallotBitCount: return "OpGroupNonUniformBallotBitCount"; - case OpGroupNonUniformBallotFindLSB: return "OpGroupNonUniformBallotFindLSB"; - case OpGroupNonUniformBallotFindMSB: return "OpGroupNonUniformBallotFindMSB"; - case OpGroupNonUniformShuffle: return "OpGroupNonUniformShuffle"; - case OpGroupNonUniformShuffleXor: return "OpGroupNonUniformShuffleXor"; - case OpGroupNonUniformShuffleUp: return "OpGroupNonUniformShuffleUp"; - case OpGroupNonUniformShuffleDown: return "OpGroupNonUniformShuffleDown"; - case OpGroupNonUniformIAdd: return "OpGroupNonUniformIAdd"; - case OpGroupNonUniformFAdd: return "OpGroupNonUniformFAdd"; - case OpGroupNonUniformIMul: return "OpGroupNonUniformIMul"; - case OpGroupNonUniformFMul: return "OpGroupNonUniformFMul"; - case OpGroupNonUniformSMin: return "OpGroupNonUniformSMin"; - case OpGroupNonUniformUMin: return "OpGroupNonUniformUMin"; - case OpGroupNonUniformFMin: return "OpGroupNonUniformFMin"; - case OpGroupNonUniformSMax: return "OpGroupNonUniformSMax"; - case OpGroupNonUniformUMax: return "OpGroupNonUniformUMax"; - case OpGroupNonUniformFMax: return "OpGroupNonUniformFMax"; - case OpGroupNonUniformBitwiseAnd: return "OpGroupNonUniformBitwiseAnd"; - case OpGroupNonUniformBitwiseOr: return "OpGroupNonUniformBitwiseOr"; - case OpGroupNonUniformBitwiseXor: return "OpGroupNonUniformBitwiseXor"; - case OpGroupNonUniformLogicalAnd: return "OpGroupNonUniformLogicalAnd"; - case OpGroupNonUniformLogicalOr: return "OpGroupNonUniformLogicalOr"; - case OpGroupNonUniformLogicalXor: return "OpGroupNonUniformLogicalXor"; - case OpGroupNonUniformQuadBroadcast: return "OpGroupNonUniformQuadBroadcast"; - case OpGroupNonUniformQuadSwap: return "OpGroupNonUniformQuadSwap"; - case OpCopyLogical: return "OpCopyLogical"; - case OpPtrEqual: return "OpPtrEqual"; - case OpPtrNotEqual: return "OpPtrNotEqual"; - case OpPtrDiff: return "OpPtrDiff"; - case OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT"; - case OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT"; - case OpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT"; - case OpTerminateInvocation: return "OpTerminateInvocation"; - case OpTypeUntypedPointerKHR: return "OpTypeUntypedPointerKHR"; - case OpUntypedVariableKHR: return "OpUntypedVariableKHR"; - case OpUntypedAccessChainKHR: return "OpUntypedAccessChainKHR"; - case OpUntypedInBoundsAccessChainKHR: return "OpUntypedInBoundsAccessChainKHR"; - case OpSubgroupBallotKHR: return "OpSubgroupBallotKHR"; - case OpSubgroupFirstInvocationKHR: return "OpSubgroupFirstInvocationKHR"; - case OpUntypedPtrAccessChainKHR: return "OpUntypedPtrAccessChainKHR"; - case OpUntypedInBoundsPtrAccessChainKHR: return "OpUntypedInBoundsPtrAccessChainKHR"; - case OpUntypedArrayLengthKHR: return "OpUntypedArrayLengthKHR"; - case OpUntypedPrefetchKHR: return "OpUntypedPrefetchKHR"; - case OpSubgroupAllKHR: return "OpSubgroupAllKHR"; - case OpSubgroupAnyKHR: return "OpSubgroupAnyKHR"; - case OpSubgroupAllEqualKHR: return "OpSubgroupAllEqualKHR"; - case OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR"; - case OpSubgroupReadInvocationKHR: return "OpSubgroupReadInvocationKHR"; - case OpExtInstWithForwardRefsKHR: return "OpExtInstWithForwardRefsKHR"; - case OpTraceRayKHR: return "OpTraceRayKHR"; - case OpExecuteCallableKHR: return "OpExecuteCallableKHR"; - case OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR"; - case OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR"; - case OpTerminateRayKHR: return "OpTerminateRayKHR"; - case OpSDot: return "OpSDot"; - case OpUDot: return "OpUDot"; - case OpSUDot: return "OpSUDot"; - case OpSDotAccSat: return "OpSDotAccSat"; - case OpUDotAccSat: return "OpUDotAccSat"; - case OpSUDotAccSat: return "OpSUDotAccSat"; - case OpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR"; - case OpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR"; - case OpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR"; - case OpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR"; - case OpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR"; - case OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT"; - case OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT"; - case OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT"; - case OpTypeRayQueryKHR: return "OpTypeRayQueryKHR"; - case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR"; - case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR"; - case OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR"; - case OpRayQueryConfirmIntersectionKHR: return "OpRayQueryConfirmIntersectionKHR"; - case OpRayQueryProceedKHR: return "OpRayQueryProceedKHR"; - case OpRayQueryGetIntersectionTypeKHR: return "OpRayQueryGetIntersectionTypeKHR"; - case OpImageSampleWeightedQCOM: return "OpImageSampleWeightedQCOM"; - case OpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM"; - case OpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM"; - case OpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM"; - case OpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM"; - case OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM"; - case OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM"; - case OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM"; - case OpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD"; - case OpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD"; - case OpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD"; - case OpGroupUMinNonUniformAMD: return "OpGroupUMinNonUniformAMD"; - case OpGroupSMinNonUniformAMD: return "OpGroupSMinNonUniformAMD"; - case OpGroupFMaxNonUniformAMD: return "OpGroupFMaxNonUniformAMD"; - case OpGroupUMaxNonUniformAMD: return "OpGroupUMaxNonUniformAMD"; - case OpGroupSMaxNonUniformAMD: return "OpGroupSMaxNonUniformAMD"; - case OpFragmentMaskFetchAMD: return "OpFragmentMaskFetchAMD"; - case OpFragmentFetchAMD: return "OpFragmentFetchAMD"; - case OpReadClockKHR: return "OpReadClockKHR"; - case OpAllocateNodePayloadsAMDX: return "OpAllocateNodePayloadsAMDX"; - case OpEnqueueNodePayloadsAMDX: return "OpEnqueueNodePayloadsAMDX"; - case OpTypeNodePayloadArrayAMDX: return "OpTypeNodePayloadArrayAMDX"; - case OpFinishWritingNodePayloadAMDX: return "OpFinishWritingNodePayloadAMDX"; - case OpNodePayloadArrayLengthAMDX: return "OpNodePayloadArrayLengthAMDX"; - case OpIsNodePayloadValidAMDX: return "OpIsNodePayloadValidAMDX"; - case OpConstantStringAMDX: return "OpConstantStringAMDX"; - case OpSpecConstantStringAMDX: return "OpSpecConstantStringAMDX"; - case OpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR"; - case OpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR"; - case OpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV"; - case OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV"; - case OpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV"; - case OpHitObjectGetWorldToObjectNV: return "OpHitObjectGetWorldToObjectNV"; - case OpHitObjectGetObjectToWorldNV: return "OpHitObjectGetObjectToWorldNV"; - case OpHitObjectGetObjectRayDirectionNV: return "OpHitObjectGetObjectRayDirectionNV"; - case OpHitObjectGetObjectRayOriginNV: return "OpHitObjectGetObjectRayOriginNV"; - case OpHitObjectTraceRayMotionNV: return "OpHitObjectTraceRayMotionNV"; - case OpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV"; - case OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV"; - case OpHitObjectRecordEmptyNV: return "OpHitObjectRecordEmptyNV"; - case OpHitObjectTraceRayNV: return "OpHitObjectTraceRayNV"; - case OpHitObjectRecordHitNV: return "OpHitObjectRecordHitNV"; - case OpHitObjectRecordHitWithIndexNV: return "OpHitObjectRecordHitWithIndexNV"; - case OpHitObjectRecordMissNV: return "OpHitObjectRecordMissNV"; - case OpHitObjectExecuteShaderNV: return "OpHitObjectExecuteShaderNV"; - case OpHitObjectGetCurrentTimeNV: return "OpHitObjectGetCurrentTimeNV"; - case OpHitObjectGetAttributesNV: return "OpHitObjectGetAttributesNV"; - case OpHitObjectGetHitKindNV: return "OpHitObjectGetHitKindNV"; - case OpHitObjectGetPrimitiveIndexNV: return "OpHitObjectGetPrimitiveIndexNV"; - case OpHitObjectGetGeometryIndexNV: return "OpHitObjectGetGeometryIndexNV"; - case OpHitObjectGetInstanceIdNV: return "OpHitObjectGetInstanceIdNV"; - case OpHitObjectGetInstanceCustomIndexNV: return "OpHitObjectGetInstanceCustomIndexNV"; - case OpHitObjectGetWorldRayDirectionNV: return "OpHitObjectGetWorldRayDirectionNV"; - case OpHitObjectGetWorldRayOriginNV: return "OpHitObjectGetWorldRayOriginNV"; - case OpHitObjectGetRayTMaxNV: return "OpHitObjectGetRayTMaxNV"; - case OpHitObjectGetRayTMinNV: return "OpHitObjectGetRayTMinNV"; - case OpHitObjectIsEmptyNV: return "OpHitObjectIsEmptyNV"; - case OpHitObjectIsHitNV: return "OpHitObjectIsHitNV"; - case OpHitObjectIsMissNV: return "OpHitObjectIsMissNV"; - case OpReorderThreadWithHitObjectNV: return "OpReorderThreadWithHitObjectNV"; - case OpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV"; - case OpTypeHitObjectNV: return "OpTypeHitObjectNV"; - case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; - case OpTypeCooperativeVectorNV: return "OpTypeCooperativeVectorNV"; - case OpCooperativeVectorMatrixMulNV: return "OpCooperativeVectorMatrixMulNV"; - case OpCooperativeVectorOuterProductAccumulateNV: return "OpCooperativeVectorOuterProductAccumulateNV"; - case OpCooperativeVectorReduceSumAccumulateNV: return "OpCooperativeVectorReduceSumAccumulateNV"; - case OpCooperativeVectorMatrixMulAddNV: return "OpCooperativeVectorMatrixMulAddNV"; - case OpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV"; - case OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT"; - case OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT"; - case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV"; - case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; - case OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV"; - case OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV"; - case OpCooperativeVectorLoadNV: return "OpCooperativeVectorLoadNV"; - case OpCooperativeVectorStoreNV: return "OpCooperativeVectorStoreNV"; - case OpReportIntersectionKHR: return "OpReportIntersectionKHR"; - case OpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV"; - case OpTerminateRayNV: return "OpTerminateRayNV"; - case OpTraceNV: return "OpTraceNV"; - case OpTraceMotionNV: return "OpTraceMotionNV"; - case OpTraceRayMotionNV: return "OpTraceRayMotionNV"; - case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR"; - case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR"; - case OpExecuteCallableNV: return "OpExecuteCallableNV"; - case OpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV"; - case OpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV"; - case OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV"; - case OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV"; - case OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV"; - case OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT"; - case OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT"; - case OpCooperativeMatrixReduceNV: return "OpCooperativeMatrixReduceNV"; - case OpCooperativeMatrixLoadTensorNV: return "OpCooperativeMatrixLoadTensorNV"; - case OpCooperativeMatrixStoreTensorNV: return "OpCooperativeMatrixStoreTensorNV"; - case OpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV"; - case OpTypeTensorLayoutNV: return "OpTypeTensorLayoutNV"; - case OpTypeTensorViewNV: return "OpTypeTensorViewNV"; - case OpCreateTensorLayoutNV: return "OpCreateTensorLayoutNV"; - case OpTensorLayoutSetDimensionNV: return "OpTensorLayoutSetDimensionNV"; - case OpTensorLayoutSetStrideNV: return "OpTensorLayoutSetStrideNV"; - case OpTensorLayoutSliceNV: return "OpTensorLayoutSliceNV"; - case OpTensorLayoutSetClampValueNV: return "OpTensorLayoutSetClampValueNV"; - case OpCreateTensorViewNV: return "OpCreateTensorViewNV"; - case OpTensorViewSetDimensionNV: return "OpTensorViewSetDimensionNV"; - case OpTensorViewSetStrideNV: return "OpTensorViewSetStrideNV"; - case OpDemoteToHelperInvocation: return "OpDemoteToHelperInvocation"; - case OpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT"; - case OpTensorViewSetClipNV: return "OpTensorViewSetClipNV"; - case OpTensorLayoutSetBlockSizeNV: return "OpTensorLayoutSetBlockSizeNV"; - case OpCooperativeMatrixTransposeNV: return "OpCooperativeMatrixTransposeNV"; - case OpConvertUToImageNV: return "OpConvertUToImageNV"; - case OpConvertUToSamplerNV: return "OpConvertUToSamplerNV"; - case OpConvertImageToUNV: return "OpConvertImageToUNV"; - case OpConvertSamplerToUNV: return "OpConvertSamplerToUNV"; - case OpConvertUToSampledImageNV: return "OpConvertUToSampledImageNV"; - case OpConvertSampledImageToUNV: return "OpConvertSampledImageToUNV"; - case OpSamplerImageAddressingModeNV: return "OpSamplerImageAddressingModeNV"; - case OpRawAccessChainNV: return "OpRawAccessChainNV"; - case OpSubgroupShuffleINTEL: return "OpSubgroupShuffleINTEL"; - case OpSubgroupShuffleDownINTEL: return "OpSubgroupShuffleDownINTEL"; - case OpSubgroupShuffleUpINTEL: return "OpSubgroupShuffleUpINTEL"; - case OpSubgroupShuffleXorINTEL: return "OpSubgroupShuffleXorINTEL"; - case OpSubgroupBlockReadINTEL: return "OpSubgroupBlockReadINTEL"; - case OpSubgroupBlockWriteINTEL: return "OpSubgroupBlockWriteINTEL"; - case OpSubgroupImageBlockReadINTEL: return "OpSubgroupImageBlockReadINTEL"; - case OpSubgroupImageBlockWriteINTEL: return "OpSubgroupImageBlockWriteINTEL"; - case OpSubgroupImageMediaBlockReadINTEL: return "OpSubgroupImageMediaBlockReadINTEL"; - case OpSubgroupImageMediaBlockWriteINTEL: return "OpSubgroupImageMediaBlockWriteINTEL"; - case OpUCountLeadingZerosINTEL: return "OpUCountLeadingZerosINTEL"; - case OpUCountTrailingZerosINTEL: return "OpUCountTrailingZerosINTEL"; - case OpAbsISubINTEL: return "OpAbsISubINTEL"; - case OpAbsUSubINTEL: return "OpAbsUSubINTEL"; - case OpIAddSatINTEL: return "OpIAddSatINTEL"; - case OpUAddSatINTEL: return "OpUAddSatINTEL"; - case OpIAverageINTEL: return "OpIAverageINTEL"; - case OpUAverageINTEL: return "OpUAverageINTEL"; - case OpIAverageRoundedINTEL: return "OpIAverageRoundedINTEL"; - case OpUAverageRoundedINTEL: return "OpUAverageRoundedINTEL"; - case OpISubSatINTEL: return "OpISubSatINTEL"; - case OpUSubSatINTEL: return "OpUSubSatINTEL"; - case OpIMul32x16INTEL: return "OpIMul32x16INTEL"; - case OpUMul32x16INTEL: return "OpUMul32x16INTEL"; - case OpConstantFunctionPointerINTEL: return "OpConstantFunctionPointerINTEL"; - case OpFunctionPointerCallINTEL: return "OpFunctionPointerCallINTEL"; - case OpAsmTargetINTEL: return "OpAsmTargetINTEL"; - case OpAsmINTEL: return "OpAsmINTEL"; - case OpAsmCallINTEL: return "OpAsmCallINTEL"; - case OpAtomicFMinEXT: return "OpAtomicFMinEXT"; - case OpAtomicFMaxEXT: return "OpAtomicFMaxEXT"; - case OpAssumeTrueKHR: return "OpAssumeTrueKHR"; - case OpExpectKHR: return "OpExpectKHR"; - case OpDecorateString: return "OpDecorateString"; - case OpMemberDecorateString: return "OpMemberDecorateString"; - case OpVmeImageINTEL: return "OpVmeImageINTEL"; - case OpTypeVmeImageINTEL: return "OpTypeVmeImageINTEL"; - case OpTypeAvcImePayloadINTEL: return "OpTypeAvcImePayloadINTEL"; - case OpTypeAvcRefPayloadINTEL: return "OpTypeAvcRefPayloadINTEL"; - case OpTypeAvcSicPayloadINTEL: return "OpTypeAvcSicPayloadINTEL"; - case OpTypeAvcMcePayloadINTEL: return "OpTypeAvcMcePayloadINTEL"; - case OpTypeAvcMceResultINTEL: return "OpTypeAvcMceResultINTEL"; - case OpTypeAvcImeResultINTEL: return "OpTypeAvcImeResultINTEL"; - case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: return "OpTypeAvcImeResultSingleReferenceStreamoutINTEL"; - case OpTypeAvcImeResultDualReferenceStreamoutINTEL: return "OpTypeAvcImeResultDualReferenceStreamoutINTEL"; - case OpTypeAvcImeSingleReferenceStreaminINTEL: return "OpTypeAvcImeSingleReferenceStreaminINTEL"; - case OpTypeAvcImeDualReferenceStreaminINTEL: return "OpTypeAvcImeDualReferenceStreaminINTEL"; - case OpTypeAvcRefResultINTEL: return "OpTypeAvcRefResultINTEL"; - case OpTypeAvcSicResultINTEL: return "OpTypeAvcSicResultINTEL"; - case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL"; - case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL"; - case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL"; - case OpSubgroupAvcMceSetInterShapePenaltyINTEL: return "OpSubgroupAvcMceSetInterShapePenaltyINTEL"; - case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL"; - case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceSetInterDirectionPenaltyINTEL"; - case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL"; - case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: return "OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL"; - case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL"; - case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL"; - case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL"; - case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: return "OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL"; - case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL"; - case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL"; - case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL"; - case OpSubgroupAvcMceSetAcOnlyHaarINTEL: return "OpSubgroupAvcMceSetAcOnlyHaarINTEL"; - case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL"; - case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL"; - case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL"; - case OpSubgroupAvcMceConvertToImePayloadINTEL: return "OpSubgroupAvcMceConvertToImePayloadINTEL"; - case OpSubgroupAvcMceConvertToImeResultINTEL: return "OpSubgroupAvcMceConvertToImeResultINTEL"; - case OpSubgroupAvcMceConvertToRefPayloadINTEL: return "OpSubgroupAvcMceConvertToRefPayloadINTEL"; - case OpSubgroupAvcMceConvertToRefResultINTEL: return "OpSubgroupAvcMceConvertToRefResultINTEL"; - case OpSubgroupAvcMceConvertToSicPayloadINTEL: return "OpSubgroupAvcMceConvertToSicPayloadINTEL"; - case OpSubgroupAvcMceConvertToSicResultINTEL: return "OpSubgroupAvcMceConvertToSicResultINTEL"; - case OpSubgroupAvcMceGetMotionVectorsINTEL: return "OpSubgroupAvcMceGetMotionVectorsINTEL"; - case OpSubgroupAvcMceGetInterDistortionsINTEL: return "OpSubgroupAvcMceGetInterDistortionsINTEL"; - case OpSubgroupAvcMceGetBestInterDistortionsINTEL: return "OpSubgroupAvcMceGetBestInterDistortionsINTEL"; - case OpSubgroupAvcMceGetInterMajorShapeINTEL: return "OpSubgroupAvcMceGetInterMajorShapeINTEL"; - case OpSubgroupAvcMceGetInterMinorShapeINTEL: return "OpSubgroupAvcMceGetInterMinorShapeINTEL"; - case OpSubgroupAvcMceGetInterDirectionsINTEL: return "OpSubgroupAvcMceGetInterDirectionsINTEL"; - case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: return "OpSubgroupAvcMceGetInterMotionVectorCountINTEL"; - case OpSubgroupAvcMceGetInterReferenceIdsINTEL: return "OpSubgroupAvcMceGetInterReferenceIdsINTEL"; - case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL"; - case OpSubgroupAvcImeInitializeINTEL: return "OpSubgroupAvcImeInitializeINTEL"; - case OpSubgroupAvcImeSetSingleReferenceINTEL: return "OpSubgroupAvcImeSetSingleReferenceINTEL"; - case OpSubgroupAvcImeSetDualReferenceINTEL: return "OpSubgroupAvcImeSetDualReferenceINTEL"; - case OpSubgroupAvcImeRefWindowSizeINTEL: return "OpSubgroupAvcImeRefWindowSizeINTEL"; - case OpSubgroupAvcImeAdjustRefOffsetINTEL: return "OpSubgroupAvcImeAdjustRefOffsetINTEL"; - case OpSubgroupAvcImeConvertToMcePayloadINTEL: return "OpSubgroupAvcImeConvertToMcePayloadINTEL"; - case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: return "OpSubgroupAvcImeSetMaxMotionVectorCountINTEL"; - case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: return "OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL"; - case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: return "OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL"; - case OpSubgroupAvcImeSetWeightedSadINTEL: return "OpSubgroupAvcImeSetWeightedSadINTEL"; - case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL"; - case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceINTEL"; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL"; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL"; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL"; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL"; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL"; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL"; - case OpSubgroupAvcImeConvertToMceResultINTEL: return "OpSubgroupAvcImeConvertToMceResultINTEL"; - case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeGetSingleReferenceStreaminINTEL"; - case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: return "OpSubgroupAvcImeGetDualReferenceStreaminINTEL"; - case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL"; - case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripDualReferenceStreamoutINTEL"; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL"; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL"; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL"; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL"; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL"; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL"; - case OpSubgroupAvcImeGetBorderReachedINTEL: return "OpSubgroupAvcImeGetBorderReachedINTEL"; - case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: return "OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL"; - case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: return "OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL"; - case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL"; - case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL"; - case OpSubgroupAvcFmeInitializeINTEL: return "OpSubgroupAvcFmeInitializeINTEL"; - case OpSubgroupAvcBmeInitializeINTEL: return "OpSubgroupAvcBmeInitializeINTEL"; - case OpSubgroupAvcRefConvertToMcePayloadINTEL: return "OpSubgroupAvcRefConvertToMcePayloadINTEL"; - case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: return "OpSubgroupAvcRefSetBidirectionalMixDisableINTEL"; - case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: return "OpSubgroupAvcRefSetBilinearFilterEnableINTEL"; - case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL"; - case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithDualReferenceINTEL"; - case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL"; - case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL"; - case OpSubgroupAvcRefConvertToMceResultINTEL: return "OpSubgroupAvcRefConvertToMceResultINTEL"; - case OpSubgroupAvcSicInitializeINTEL: return "OpSubgroupAvcSicInitializeINTEL"; - case OpSubgroupAvcSicConfigureSkcINTEL: return "OpSubgroupAvcSicConfigureSkcINTEL"; - case OpSubgroupAvcSicConfigureIpeLumaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaINTEL"; - case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaChromaINTEL"; - case OpSubgroupAvcSicGetMotionVectorMaskINTEL: return "OpSubgroupAvcSicGetMotionVectorMaskINTEL"; - case OpSubgroupAvcSicConvertToMcePayloadINTEL: return "OpSubgroupAvcSicConvertToMcePayloadINTEL"; - case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL"; - case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL"; - case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL"; - case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: return "OpSubgroupAvcSicSetBilinearFilterEnableINTEL"; - case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: return "OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL"; - case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: return "OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL"; - case OpSubgroupAvcSicEvaluateIpeINTEL: return "OpSubgroupAvcSicEvaluateIpeINTEL"; - case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL"; - case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithDualReferenceINTEL"; - case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL"; - case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL"; - case OpSubgroupAvcSicConvertToMceResultINTEL: return "OpSubgroupAvcSicConvertToMceResultINTEL"; - case OpSubgroupAvcSicGetIpeLumaShapeINTEL: return "OpSubgroupAvcSicGetIpeLumaShapeINTEL"; - case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL"; - case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL"; - case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: return "OpSubgroupAvcSicGetPackedIpeLumaModesINTEL"; - case OpSubgroupAvcSicGetIpeChromaModeINTEL: return "OpSubgroupAvcSicGetIpeChromaModeINTEL"; - case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL"; - case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL"; - case OpSubgroupAvcSicGetInterRawSadsINTEL: return "OpSubgroupAvcSicGetInterRawSadsINTEL"; - case OpVariableLengthArrayINTEL: return "OpVariableLengthArrayINTEL"; - case OpSaveMemoryINTEL: return "OpSaveMemoryINTEL"; - case OpRestoreMemoryINTEL: return "OpRestoreMemoryINTEL"; - case OpArbitraryFloatSinCosPiINTEL: return "OpArbitraryFloatSinCosPiINTEL"; - case OpArbitraryFloatCastINTEL: return "OpArbitraryFloatCastINTEL"; - case OpArbitraryFloatCastFromIntINTEL: return "OpArbitraryFloatCastFromIntINTEL"; - case OpArbitraryFloatCastToIntINTEL: return "OpArbitraryFloatCastToIntINTEL"; - case OpArbitraryFloatAddINTEL: return "OpArbitraryFloatAddINTEL"; - case OpArbitraryFloatSubINTEL: return "OpArbitraryFloatSubINTEL"; - case OpArbitraryFloatMulINTEL: return "OpArbitraryFloatMulINTEL"; - case OpArbitraryFloatDivINTEL: return "OpArbitraryFloatDivINTEL"; - case OpArbitraryFloatGTINTEL: return "OpArbitraryFloatGTINTEL"; - case OpArbitraryFloatGEINTEL: return "OpArbitraryFloatGEINTEL"; - case OpArbitraryFloatLTINTEL: return "OpArbitraryFloatLTINTEL"; - case OpArbitraryFloatLEINTEL: return "OpArbitraryFloatLEINTEL"; - case OpArbitraryFloatEQINTEL: return "OpArbitraryFloatEQINTEL"; - case OpArbitraryFloatRecipINTEL: return "OpArbitraryFloatRecipINTEL"; - case OpArbitraryFloatRSqrtINTEL: return "OpArbitraryFloatRSqrtINTEL"; - case OpArbitraryFloatCbrtINTEL: return "OpArbitraryFloatCbrtINTEL"; - case OpArbitraryFloatHypotINTEL: return "OpArbitraryFloatHypotINTEL"; - case OpArbitraryFloatSqrtINTEL: return "OpArbitraryFloatSqrtINTEL"; - case OpArbitraryFloatLogINTEL: return "OpArbitraryFloatLogINTEL"; - case OpArbitraryFloatLog2INTEL: return "OpArbitraryFloatLog2INTEL"; - case OpArbitraryFloatLog10INTEL: return "OpArbitraryFloatLog10INTEL"; - case OpArbitraryFloatLog1pINTEL: return "OpArbitraryFloatLog1pINTEL"; - case OpArbitraryFloatExpINTEL: return "OpArbitraryFloatExpINTEL"; - case OpArbitraryFloatExp2INTEL: return "OpArbitraryFloatExp2INTEL"; - case OpArbitraryFloatExp10INTEL: return "OpArbitraryFloatExp10INTEL"; - case OpArbitraryFloatExpm1INTEL: return "OpArbitraryFloatExpm1INTEL"; - case OpArbitraryFloatSinINTEL: return "OpArbitraryFloatSinINTEL"; - case OpArbitraryFloatCosINTEL: return "OpArbitraryFloatCosINTEL"; - case OpArbitraryFloatSinCosINTEL: return "OpArbitraryFloatSinCosINTEL"; - case OpArbitraryFloatSinPiINTEL: return "OpArbitraryFloatSinPiINTEL"; - case OpArbitraryFloatCosPiINTEL: return "OpArbitraryFloatCosPiINTEL"; - case OpArbitraryFloatASinINTEL: return "OpArbitraryFloatASinINTEL"; - case OpArbitraryFloatASinPiINTEL: return "OpArbitraryFloatASinPiINTEL"; - case OpArbitraryFloatACosINTEL: return "OpArbitraryFloatACosINTEL"; - case OpArbitraryFloatACosPiINTEL: return "OpArbitraryFloatACosPiINTEL"; - case OpArbitraryFloatATanINTEL: return "OpArbitraryFloatATanINTEL"; - case OpArbitraryFloatATanPiINTEL: return "OpArbitraryFloatATanPiINTEL"; - case OpArbitraryFloatATan2INTEL: return "OpArbitraryFloatATan2INTEL"; - case OpArbitraryFloatPowINTEL: return "OpArbitraryFloatPowINTEL"; - case OpArbitraryFloatPowRINTEL: return "OpArbitraryFloatPowRINTEL"; - case OpArbitraryFloatPowNINTEL: return "OpArbitraryFloatPowNINTEL"; - case OpLoopControlINTEL: return "OpLoopControlINTEL"; - case OpAliasDomainDeclINTEL: return "OpAliasDomainDeclINTEL"; - case OpAliasScopeDeclINTEL: return "OpAliasScopeDeclINTEL"; - case OpAliasScopeListDeclINTEL: return "OpAliasScopeListDeclINTEL"; - case OpFixedSqrtINTEL: return "OpFixedSqrtINTEL"; - case OpFixedRecipINTEL: return "OpFixedRecipINTEL"; - case OpFixedRsqrtINTEL: return "OpFixedRsqrtINTEL"; - case OpFixedSinINTEL: return "OpFixedSinINTEL"; - case OpFixedCosINTEL: return "OpFixedCosINTEL"; - case OpFixedSinCosINTEL: return "OpFixedSinCosINTEL"; - case OpFixedSinPiINTEL: return "OpFixedSinPiINTEL"; - case OpFixedCosPiINTEL: return "OpFixedCosPiINTEL"; - case OpFixedSinCosPiINTEL: return "OpFixedSinCosPiINTEL"; - case OpFixedLogINTEL: return "OpFixedLogINTEL"; - case OpFixedExpINTEL: return "OpFixedExpINTEL"; - case OpPtrCastToCrossWorkgroupINTEL: return "OpPtrCastToCrossWorkgroupINTEL"; - case OpCrossWorkgroupCastToPtrINTEL: return "OpCrossWorkgroupCastToPtrINTEL"; - case OpReadPipeBlockingINTEL: return "OpReadPipeBlockingINTEL"; - case OpWritePipeBlockingINTEL: return "OpWritePipeBlockingINTEL"; - case OpFPGARegINTEL: return "OpFPGARegINTEL"; - case OpRayQueryGetRayTMinKHR: return "OpRayQueryGetRayTMinKHR"; - case OpRayQueryGetRayFlagsKHR: return "OpRayQueryGetRayFlagsKHR"; - case OpRayQueryGetIntersectionTKHR: return "OpRayQueryGetIntersectionTKHR"; - case OpRayQueryGetIntersectionInstanceCustomIndexKHR: return "OpRayQueryGetIntersectionInstanceCustomIndexKHR"; - case OpRayQueryGetIntersectionInstanceIdKHR: return "OpRayQueryGetIntersectionInstanceIdKHR"; - case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR"; - case OpRayQueryGetIntersectionGeometryIndexKHR: return "OpRayQueryGetIntersectionGeometryIndexKHR"; - case OpRayQueryGetIntersectionPrimitiveIndexKHR: return "OpRayQueryGetIntersectionPrimitiveIndexKHR"; - case OpRayQueryGetIntersectionBarycentricsKHR: return "OpRayQueryGetIntersectionBarycentricsKHR"; - case OpRayQueryGetIntersectionFrontFaceKHR: return "OpRayQueryGetIntersectionFrontFaceKHR"; - case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR"; - case OpRayQueryGetIntersectionObjectRayDirectionKHR: return "OpRayQueryGetIntersectionObjectRayDirectionKHR"; - case OpRayQueryGetIntersectionObjectRayOriginKHR: return "OpRayQueryGetIntersectionObjectRayOriginKHR"; - case OpRayQueryGetWorldRayDirectionKHR: return "OpRayQueryGetWorldRayDirectionKHR"; - case OpRayQueryGetWorldRayOriginKHR: return "OpRayQueryGetWorldRayOriginKHR"; - case OpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR"; - case OpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR"; - case OpAtomicFAddEXT: return "OpAtomicFAddEXT"; - case OpTypeBufferSurfaceINTEL: return "OpTypeBufferSurfaceINTEL"; - case OpTypeStructContinuedINTEL: return "OpTypeStructContinuedINTEL"; - case OpConstantCompositeContinuedINTEL: return "OpConstantCompositeContinuedINTEL"; - case OpSpecConstantCompositeContinuedINTEL: return "OpSpecConstantCompositeContinuedINTEL"; - case OpCompositeConstructContinuedINTEL: return "OpCompositeConstructContinuedINTEL"; - case OpConvertFToBF16INTEL: return "OpConvertFToBF16INTEL"; - case OpConvertBF16ToFINTEL: return "OpConvertBF16ToFINTEL"; - case OpControlBarrierArriveINTEL: return "OpControlBarrierArriveINTEL"; - case OpControlBarrierWaitINTEL: return "OpControlBarrierWaitINTEL"; - case OpArithmeticFenceEXT: return "OpArithmeticFenceEXT"; - case OpSubgroupBlockPrefetchINTEL: return "OpSubgroupBlockPrefetchINTEL"; - case OpGroupIMulKHR: return "OpGroupIMulKHR"; - case OpGroupFMulKHR: return "OpGroupFMulKHR"; - case OpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR"; - case OpGroupBitwiseOrKHR: return "OpGroupBitwiseOrKHR"; - case OpGroupBitwiseXorKHR: return "OpGroupBitwiseXorKHR"; - case OpGroupLogicalAndKHR: return "OpGroupLogicalAndKHR"; - case OpGroupLogicalOrKHR: return "OpGroupLogicalOrKHR"; - case OpGroupLogicalXorKHR: return "OpGroupLogicalXorKHR"; - case OpMaskedGatherINTEL: return "OpMaskedGatherINTEL"; - case OpMaskedScatterINTEL: return "OpMaskedScatterINTEL"; - default: return "Unknown"; - } -} - -#endif /* SPV_ENABLE_UTILITY_CODE */ - -// Overload bitwise operators for mask bit combining - -inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } -inline ImageOperandsMask operator&(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) & unsigned(b)); } -inline ImageOperandsMask operator^(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) ^ unsigned(b)); } -inline ImageOperandsMask operator~(ImageOperandsMask a) { return ImageOperandsMask(~unsigned(a)); } -inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } -inline FPFastMathModeMask operator&(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) & unsigned(b)); } -inline FPFastMathModeMask operator^(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) ^ unsigned(b)); } -inline FPFastMathModeMask operator~(FPFastMathModeMask a) { return FPFastMathModeMask(~unsigned(a)); } -inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } -inline SelectionControlMask operator&(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) & unsigned(b)); } -inline SelectionControlMask operator^(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) ^ unsigned(b)); } -inline SelectionControlMask operator~(SelectionControlMask a) { return SelectionControlMask(~unsigned(a)); } -inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } -inline LoopControlMask operator&(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) & unsigned(b)); } -inline LoopControlMask operator^(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) ^ unsigned(b)); } -inline LoopControlMask operator~(LoopControlMask a) { return LoopControlMask(~unsigned(a)); } -inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } -inline FunctionControlMask operator&(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) & unsigned(b)); } -inline FunctionControlMask operator^(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) ^ unsigned(b)); } -inline FunctionControlMask operator~(FunctionControlMask a) { return FunctionControlMask(~unsigned(a)); } -inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } -inline MemorySemanticsMask operator&(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) & unsigned(b)); } -inline MemorySemanticsMask operator^(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) ^ unsigned(b)); } -inline MemorySemanticsMask operator~(MemorySemanticsMask a) { return MemorySemanticsMask(~unsigned(a)); } -inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } -inline MemoryAccessMask operator&(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) & unsigned(b)); } -inline MemoryAccessMask operator^(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) ^ unsigned(b)); } -inline MemoryAccessMask operator~(MemoryAccessMask a) { return MemoryAccessMask(~unsigned(a)); } -inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } -inline KernelProfilingInfoMask operator&(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) & unsigned(b)); } -inline KernelProfilingInfoMask operator^(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) ^ unsigned(b)); } -inline KernelProfilingInfoMask operator~(KernelProfilingInfoMask a) { return KernelProfilingInfoMask(~unsigned(a)); } -inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } -inline RayFlagsMask operator&(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) & unsigned(b)); } -inline RayFlagsMask operator^(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) ^ unsigned(b)); } -inline RayFlagsMask operator~(RayFlagsMask a) { return RayFlagsMask(~unsigned(a)); } -inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } -inline FragmentShadingRateMask operator&(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) & unsigned(b)); } -inline FragmentShadingRateMask operator^(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) ^ unsigned(b)); } -inline FragmentShadingRateMask operator~(FragmentShadingRateMask a) { return FragmentShadingRateMask(~unsigned(a)); } -inline CooperativeMatrixOperandsMask operator|(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) | unsigned(b)); } -inline CooperativeMatrixOperandsMask operator&(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) & unsigned(b)); } -inline CooperativeMatrixOperandsMask operator^(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) ^ unsigned(b)); } -inline CooperativeMatrixOperandsMask operator~(CooperativeMatrixOperandsMask a) { return CooperativeMatrixOperandsMask(~unsigned(a)); } -inline CooperativeMatrixReduceMask operator|(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) | unsigned(b)); } -inline CooperativeMatrixReduceMask operator&(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) & unsigned(b)); } -inline CooperativeMatrixReduceMask operator^(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) ^ unsigned(b)); } -inline CooperativeMatrixReduceMask operator~(CooperativeMatrixReduceMask a) { return CooperativeMatrixReduceMask(~unsigned(a)); } -inline TensorAddressingOperandsMask operator|(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) | unsigned(b)); } -inline TensorAddressingOperandsMask operator&(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) & unsigned(b)); } -inline TensorAddressingOperandsMask operator^(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) ^ unsigned(b)); } -inline TensorAddressingOperandsMask operator~(TensorAddressingOperandsMask a) { return TensorAddressingOperandsMask(~unsigned(a)); } -inline RawAccessChainOperandsMask operator|(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) | unsigned(b)); } -inline RawAccessChainOperandsMask operator&(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) & unsigned(b)); } -inline RawAccessChainOperandsMask operator^(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) ^ unsigned(b)); } -inline RawAccessChainOperandsMask operator~(RawAccessChainOperandsMask a) { return RawAccessChainOperandsMask(~unsigned(a)); } - -} // end namespace spv - -#endif // #ifndef spirv_HPP - diff --git a/3rdparty/glslang/SPIRV/spirv.hpp11 b/3rdparty/glslang/SPIRV/spirv.hpp11 new file mode 100644 index 000000000..3b1a14757 --- /dev/null +++ b/3rdparty/glslang/SPIRV/spirv.hpp11 @@ -0,0 +1,5162 @@ +// Copyright (c) 2014-2024 The Khronos Group Inc. +// +// 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. + +// 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 will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +// - 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 +// - 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 +// +// Some tokens act like mask values, which can be OR'd together, +// while others are mutually exclusive. The mask-like ones have +// "Mask" in their name, and a parallel enum that has the shift +// amount (1 << x) for each corresponding enumerant. + +#ifndef spirv_HPP +#define spirv_HPP + +namespace spv { + +typedef unsigned int Id; + +#define SPV_VERSION 0x10600 +#define SPV_REVISION 1 + +static const unsigned int MagicNumber = 0x07230203; +static const unsigned int Version = 0x00010600; +static const unsigned int Revision = 1; +static const unsigned int OpCodeMask = 0xffff; +static const unsigned int WordCountShift = 16; + +enum class SourceLanguage : unsigned { + Unknown = 0, + ESSL = 1, + GLSL = 2, + OpenCL_C = 3, + OpenCL_CPP = 4, + HLSL = 5, + CPP_for_OpenCL = 6, + SYCL = 7, + HERO_C = 8, + NZSL = 9, + WGSL = 10, + Slang = 11, + Zig = 12, + Rust = 13, + Max = 0x7fffffff, +}; + +enum class ExecutionModel : unsigned { + Vertex = 0, + TessellationControl = 1, + TessellationEvaluation = 2, + Geometry = 3, + Fragment = 4, + GLCompute = 5, + Kernel = 6, + TaskNV = 5267, + MeshNV = 5268, + RayGenerationKHR = 5313, + RayGenerationNV = 5313, + IntersectionKHR = 5314, + IntersectionNV = 5314, + AnyHitKHR = 5315, + AnyHitNV = 5315, + ClosestHitKHR = 5316, + ClosestHitNV = 5316, + MissKHR = 5317, + MissNV = 5317, + CallableKHR = 5318, + CallableNV = 5318, + TaskEXT = 5364, + MeshEXT = 5365, + Max = 0x7fffffff, +}; + +enum class AddressingModel : unsigned { + Logical = 0, + Physical32 = 1, + Physical64 = 2, + PhysicalStorageBuffer64 = 5348, + PhysicalStorageBuffer64EXT = 5348, + Max = 0x7fffffff, +}; + +enum class MemoryModel : unsigned { + Simple = 0, + GLSL450 = 1, + OpenCL = 2, + Vulkan = 3, + VulkanKHR = 3, + Max = 0x7fffffff, +}; + +enum class ExecutionMode : unsigned { + Invocations = 0, + SpacingEqual = 1, + SpacingFractionalEven = 2, + SpacingFractionalOdd = 3, + VertexOrderCw = 4, + VertexOrderCcw = 5, + PixelCenterInteger = 6, + OriginUpperLeft = 7, + OriginLowerLeft = 8, + EarlyFragmentTests = 9, + PointMode = 10, + Xfb = 11, + DepthReplacing = 12, + DepthGreater = 14, + DepthLess = 15, + DepthUnchanged = 16, + LocalSize = 17, + LocalSizeHint = 18, + InputPoints = 19, + InputLines = 20, + InputLinesAdjacency = 21, + Triangles = 22, + InputTrianglesAdjacency = 23, + Quads = 24, + Isolines = 25, + OutputVertices = 26, + OutputPoints = 27, + OutputLineStrip = 28, + OutputTriangleStrip = 29, + VecTypeHint = 30, + ContractionOff = 31, + Initializer = 33, + Finalizer = 34, + SubgroupSize = 35, + SubgroupsPerWorkgroup = 36, + SubgroupsPerWorkgroupId = 37, + LocalSizeId = 38, + LocalSizeHintId = 39, + NonCoherentColorAttachmentReadEXT = 4169, + NonCoherentDepthAttachmentReadEXT = 4170, + NonCoherentStencilAttachmentReadEXT = 4171, + SubgroupUniformControlFlowKHR = 4421, + PostDepthCoverage = 4446, + DenormPreserve = 4459, + DenormFlushToZero = 4460, + SignedZeroInfNanPreserve = 4461, + RoundingModeRTE = 4462, + RoundingModeRTZ = 4463, + EarlyAndLateFragmentTestsAMD = 5017, + StencilRefReplacingEXT = 5027, + CoalescingAMDX = 5069, + IsApiEntryAMDX = 5070, + MaxNodeRecursionAMDX = 5071, + StaticNumWorkgroupsAMDX = 5072, + ShaderIndexAMDX = 5073, + MaxNumWorkgroupsAMDX = 5077, + StencilRefUnchangedFrontAMD = 5079, + StencilRefGreaterFrontAMD = 5080, + StencilRefLessFrontAMD = 5081, + StencilRefUnchangedBackAMD = 5082, + StencilRefGreaterBackAMD = 5083, + StencilRefLessBackAMD = 5084, + QuadDerivativesKHR = 5088, + RequireFullQuadsKHR = 5089, + SharesInputWithAMDX = 5102, + OutputLinesEXT = 5269, + OutputLinesNV = 5269, + OutputPrimitivesEXT = 5270, + OutputPrimitivesNV = 5270, + DerivativeGroupQuadsKHR = 5289, + DerivativeGroupQuadsNV = 5289, + DerivativeGroupLinearKHR = 5290, + DerivativeGroupLinearNV = 5290, + OutputTrianglesEXT = 5298, + OutputTrianglesNV = 5298, + PixelInterlockOrderedEXT = 5366, + PixelInterlockUnorderedEXT = 5367, + SampleInterlockOrderedEXT = 5368, + SampleInterlockUnorderedEXT = 5369, + ShadingRateInterlockOrderedEXT = 5370, + ShadingRateInterlockUnorderedEXT = 5371, + SharedLocalMemorySizeINTEL = 5618, + RoundingModeRTPINTEL = 5620, + RoundingModeRTNINTEL = 5621, + FloatingPointModeALTINTEL = 5622, + FloatingPointModeIEEEINTEL = 5623, + MaxWorkgroupSizeINTEL = 5893, + MaxWorkDimINTEL = 5894, + NoGlobalOffsetINTEL = 5895, + NumSIMDWorkitemsINTEL = 5896, + SchedulerTargetFmaxMhzINTEL = 5903, + MaximallyReconvergesKHR = 6023, + FPFastMathDefault = 6028, + StreamingInterfaceINTEL = 6154, + RegisterMapInterfaceINTEL = 6160, + NamedBarrierCountINTEL = 6417, + MaximumRegistersINTEL = 6461, + MaximumRegistersIdINTEL = 6462, + NamedMaximumRegistersINTEL = 6463, + Max = 0x7fffffff, +}; + +enum class StorageClass : unsigned { + UniformConstant = 0, + Input = 1, + Uniform = 2, + Output = 3, + Workgroup = 4, + CrossWorkgroup = 5, + Private = 6, + Function = 7, + Generic = 8, + PushConstant = 9, + AtomicCounter = 10, + Image = 11, + StorageBuffer = 12, + TileImageEXT = 4172, + NodePayloadAMDX = 5068, + CallableDataKHR = 5328, + CallableDataNV = 5328, + IncomingCallableDataKHR = 5329, + IncomingCallableDataNV = 5329, + RayPayloadKHR = 5338, + RayPayloadNV = 5338, + HitAttributeKHR = 5339, + HitAttributeNV = 5339, + IncomingRayPayloadKHR = 5342, + IncomingRayPayloadNV = 5342, + ShaderRecordBufferKHR = 5343, + ShaderRecordBufferNV = 5343, + PhysicalStorageBuffer = 5349, + PhysicalStorageBufferEXT = 5349, + HitObjectAttributeNV = 5385, + TaskPayloadWorkgroupEXT = 5402, + CodeSectionINTEL = 5605, + DeviceOnlyINTEL = 5936, + HostOnlyINTEL = 5937, + Max = 0x7fffffff, +}; + +enum class Dim : unsigned { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + Cube = 3, + Rect = 4, + Buffer = 5, + SubpassData = 6, + TileImageDataEXT = 4173, + Max = 0x7fffffff, +}; + +enum class SamplerAddressingMode : unsigned { + None = 0, + ClampToEdge = 1, + Clamp = 2, + Repeat = 3, + RepeatMirrored = 4, + Max = 0x7fffffff, +}; + +enum class SamplerFilterMode : unsigned { + Nearest = 0, + Linear = 1, + Max = 0x7fffffff, +}; + +enum class ImageFormat : unsigned { + Unknown = 0, + Rgba32f = 1, + Rgba16f = 2, + R32f = 3, + Rgba8 = 4, + Rgba8Snorm = 5, + Rg32f = 6, + Rg16f = 7, + R11fG11fB10f = 8, + R16f = 9, + Rgba16 = 10, + Rgb10A2 = 11, + Rg16 = 12, + Rg8 = 13, + R16 = 14, + R8 = 15, + Rgba16Snorm = 16, + Rg16Snorm = 17, + Rg8Snorm = 18, + R16Snorm = 19, + R8Snorm = 20, + Rgba32i = 21, + Rgba16i = 22, + Rgba8i = 23, + R32i = 24, + Rg32i = 25, + Rg16i = 26, + Rg8i = 27, + R16i = 28, + R8i = 29, + Rgba32ui = 30, + Rgba16ui = 31, + Rgba8ui = 32, + R32ui = 33, + Rgb10a2ui = 34, + Rg32ui = 35, + Rg16ui = 36, + Rg8ui = 37, + R16ui = 38, + R8ui = 39, + R64ui = 40, + R64i = 41, + Max = 0x7fffffff, +}; + +enum class ImageChannelOrder : unsigned { + R = 0, + A = 1, + RG = 2, + RA = 3, + RGB = 4, + RGBA = 5, + BGRA = 6, + ARGB = 7, + Intensity = 8, + Luminance = 9, + Rx = 10, + RGx = 11, + RGBx = 12, + Depth = 13, + DepthStencil = 14, + sRGB = 15, + sRGBx = 16, + sRGBA = 17, + sBGRA = 18, + ABGR = 19, + Max = 0x7fffffff, +}; + +enum class ImageChannelDataType : unsigned { + SnormInt8 = 0, + SnormInt16 = 1, + UnormInt8 = 2, + UnormInt16 = 3, + UnormShort565 = 4, + UnormShort555 = 5, + UnormInt101010 = 6, + SignedInt8 = 7, + SignedInt16 = 8, + SignedInt32 = 9, + UnsignedInt8 = 10, + UnsignedInt16 = 11, + UnsignedInt32 = 12, + HalfFloat = 13, + Float = 14, + UnormInt24 = 15, + UnormInt101010_2 = 16, + UnsignedIntRaw10EXT = 19, + UnsignedIntRaw12EXT = 20, + UnormInt2_101010EXT = 21, + Max = 0x7fffffff, +}; + +enum class ImageOperandsShift : unsigned { + Bias = 0, + Lod = 1, + Grad = 2, + ConstOffset = 3, + Offset = 4, + ConstOffsets = 5, + Sample = 6, + MinLod = 7, + MakeTexelAvailable = 8, + MakeTexelAvailableKHR = 8, + MakeTexelVisible = 9, + MakeTexelVisibleKHR = 9, + NonPrivateTexel = 10, + NonPrivateTexelKHR = 10, + VolatileTexel = 11, + VolatileTexelKHR = 11, + SignExtend = 12, + ZeroExtend = 13, + Nontemporal = 14, + Offsets = 16, + Max = 0x7fffffff, +}; + +enum class ImageOperandsMask : unsigned { + MaskNone = 0, + Bias = 0x00000001, + Lod = 0x00000002, + Grad = 0x00000004, + ConstOffset = 0x00000008, + Offset = 0x00000010, + ConstOffsets = 0x00000020, + Sample = 0x00000040, + MinLod = 0x00000080, + MakeTexelAvailable = 0x00000100, + MakeTexelAvailableKHR = 0x00000100, + MakeTexelVisible = 0x00000200, + MakeTexelVisibleKHR = 0x00000200, + NonPrivateTexel = 0x00000400, + NonPrivateTexelKHR = 0x00000400, + VolatileTexel = 0x00000800, + VolatileTexelKHR = 0x00000800, + SignExtend = 0x00001000, + ZeroExtend = 0x00002000, + Nontemporal = 0x00004000, + Offsets = 0x00010000, +}; + +enum class FPFastMathModeShift : unsigned { + NotNaN = 0, + NotInf = 1, + NSZ = 2, + AllowRecip = 3, + Fast = 4, + AllowContract = 16, + AllowContractFastINTEL = 16, + AllowReassoc = 17, + AllowReassocINTEL = 17, + AllowTransform = 18, + Max = 0x7fffffff, +}; + +enum class FPFastMathModeMask : unsigned { + MaskNone = 0, + NotNaN = 0x00000001, + NotInf = 0x00000002, + NSZ = 0x00000004, + AllowRecip = 0x00000008, + Fast = 0x00000010, + AllowContract = 0x00010000, + AllowContractFastINTEL = 0x00010000, + AllowReassoc = 0x00020000, + AllowReassocINTEL = 0x00020000, + AllowTransform = 0x00040000, +}; + +enum class FPRoundingMode : unsigned { + RTE = 0, + RTZ = 1, + RTP = 2, + RTN = 3, + Max = 0x7fffffff, +}; + +enum class LinkageType : unsigned { + Export = 0, + Import = 1, + LinkOnceODR = 2, + Max = 0x7fffffff, +}; + +enum class AccessQualifier : unsigned { + ReadOnly = 0, + WriteOnly = 1, + ReadWrite = 2, + Max = 0x7fffffff, +}; + +enum class FunctionParameterAttribute : unsigned { + Zext = 0, + Sext = 1, + ByVal = 2, + Sret = 3, + NoAlias = 4, + NoCapture = 5, + NoWrite = 6, + NoReadWrite = 7, + RuntimeAlignedINTEL = 5940, + Max = 0x7fffffff, +}; + +enum class Decoration : unsigned { + RelaxedPrecision = 0, + SpecId = 1, + Block = 2, + BufferBlock = 3, + RowMajor = 4, + ColMajor = 5, + ArrayStride = 6, + MatrixStride = 7, + GLSLShared = 8, + GLSLPacked = 9, + CPacked = 10, + BuiltIn = 11, + NoPerspective = 13, + Flat = 14, + Patch = 15, + Centroid = 16, + Sample = 17, + Invariant = 18, + Restrict = 19, + Aliased = 20, + Volatile = 21, + Constant = 22, + Coherent = 23, + NonWritable = 24, + NonReadable = 25, + Uniform = 26, + UniformId = 27, + SaturatedConversion = 28, + Stream = 29, + Location = 30, + Component = 31, + Index = 32, + Binding = 33, + DescriptorSet = 34, + Offset = 35, + XfbBuffer = 36, + XfbStride = 37, + FuncParamAttr = 38, + FPRoundingMode = 39, + FPFastMathMode = 40, + LinkageAttributes = 41, + NoContraction = 42, + InputAttachmentIndex = 43, + Alignment = 44, + MaxByteOffset = 45, + AlignmentId = 46, + MaxByteOffsetId = 47, + NoSignedWrap = 4469, + NoUnsignedWrap = 4470, + WeightTextureQCOM = 4487, + BlockMatchTextureQCOM = 4488, + BlockMatchSamplerQCOM = 4499, + ExplicitInterpAMD = 4999, + NodeSharesPayloadLimitsWithAMDX = 5019, + NodeMaxPayloadsAMDX = 5020, + TrackFinishWritingAMDX = 5078, + PayloadNodeNameAMDX = 5091, + PayloadNodeBaseIndexAMDX = 5098, + PayloadNodeSparseArrayAMDX = 5099, + PayloadNodeArraySizeAMDX = 5100, + PayloadDispatchIndirectAMDX = 5105, + OverrideCoverageNV = 5248, + PassthroughNV = 5250, + ViewportRelativeNV = 5252, + SecondaryViewportRelativeNV = 5256, + PerPrimitiveEXT = 5271, + PerPrimitiveNV = 5271, + PerViewNV = 5272, + PerTaskNV = 5273, + PerVertexKHR = 5285, + PerVertexNV = 5285, + NonUniform = 5300, + NonUniformEXT = 5300, + RestrictPointer = 5355, + RestrictPointerEXT = 5355, + AliasedPointer = 5356, + AliasedPointerEXT = 5356, + HitObjectShaderRecordBufferNV = 5386, + BindlessSamplerNV = 5398, + BindlessImageNV = 5399, + BoundSamplerNV = 5400, + BoundImageNV = 5401, + SIMTCallINTEL = 5599, + ReferencedIndirectlyINTEL = 5602, + ClobberINTEL = 5607, + SideEffectsINTEL = 5608, + VectorComputeVariableINTEL = 5624, + FuncParamIOKindINTEL = 5625, + VectorComputeFunctionINTEL = 5626, + StackCallINTEL = 5627, + GlobalVariableOffsetINTEL = 5628, + CounterBuffer = 5634, + HlslCounterBufferGOOGLE = 5634, + HlslSemanticGOOGLE = 5635, + UserSemantic = 5635, + UserTypeGOOGLE = 5636, + FunctionRoundingModeINTEL = 5822, + FunctionDenormModeINTEL = 5823, + RegisterINTEL = 5825, + MemoryINTEL = 5826, + NumbanksINTEL = 5827, + BankwidthINTEL = 5828, + MaxPrivateCopiesINTEL = 5829, + SinglepumpINTEL = 5830, + DoublepumpINTEL = 5831, + MaxReplicatesINTEL = 5832, + SimpleDualPortINTEL = 5833, + MergeINTEL = 5834, + BankBitsINTEL = 5835, + ForcePow2DepthINTEL = 5836, + StridesizeINTEL = 5883, + WordsizeINTEL = 5884, + TrueDualPortINTEL = 5885, + BurstCoalesceINTEL = 5899, + CacheSizeINTEL = 5900, + DontStaticallyCoalesceINTEL = 5901, + PrefetchINTEL = 5902, + StallEnableINTEL = 5905, + FuseLoopsInFunctionINTEL = 5907, + MathOpDSPModeINTEL = 5909, + AliasScopeINTEL = 5914, + NoAliasINTEL = 5915, + InitiationIntervalINTEL = 5917, + MaxConcurrencyINTEL = 5918, + PipelineEnableINTEL = 5919, + BufferLocationINTEL = 5921, + IOPipeStorageINTEL = 5944, + FunctionFloatingPointModeINTEL = 6080, + SingleElementVectorINTEL = 6085, + VectorComputeCallableFunctionINTEL = 6087, + MediaBlockIOINTEL = 6140, + StallFreeINTEL = 6151, + FPMaxErrorDecorationINTEL = 6170, + LatencyControlLabelINTEL = 6172, + LatencyControlConstraintINTEL = 6173, + ConduitKernelArgumentINTEL = 6175, + RegisterMapKernelArgumentINTEL = 6176, + MMHostInterfaceAddressWidthINTEL = 6177, + MMHostInterfaceDataWidthINTEL = 6178, + MMHostInterfaceLatencyINTEL = 6179, + MMHostInterfaceReadWriteModeINTEL = 6180, + MMHostInterfaceMaxBurstINTEL = 6181, + MMHostInterfaceWaitRequestINTEL = 6182, + StableKernelArgumentINTEL = 6183, + HostAccessINTEL = 6188, + InitModeINTEL = 6190, + ImplementInRegisterMapINTEL = 6191, + CacheControlLoadINTEL = 6442, + CacheControlStoreINTEL = 6443, + Max = 0x7fffffff, +}; + +enum class BuiltIn : unsigned { + Position = 0, + PointSize = 1, + ClipDistance = 3, + CullDistance = 4, + VertexId = 5, + InstanceId = 6, + PrimitiveId = 7, + InvocationId = 8, + Layer = 9, + ViewportIndex = 10, + TessLevelOuter = 11, + TessLevelInner = 12, + TessCoord = 13, + PatchVertices = 14, + FragCoord = 15, + PointCoord = 16, + FrontFacing = 17, + SampleId = 18, + SamplePosition = 19, + SampleMask = 20, + FragDepth = 22, + HelperInvocation = 23, + NumWorkgroups = 24, + WorkgroupSize = 25, + WorkgroupId = 26, + LocalInvocationId = 27, + GlobalInvocationId = 28, + LocalInvocationIndex = 29, + WorkDim = 30, + GlobalSize = 31, + EnqueuedWorkgroupSize = 32, + GlobalOffset = 33, + GlobalLinearId = 34, + SubgroupSize = 36, + SubgroupMaxSize = 37, + NumSubgroups = 38, + NumEnqueuedSubgroups = 39, + SubgroupId = 40, + SubgroupLocalInvocationId = 41, + VertexIndex = 42, + InstanceIndex = 43, + CoreIDARM = 4160, + CoreCountARM = 4161, + CoreMaxIDARM = 4162, + WarpIDARM = 4163, + WarpMaxIDARM = 4164, + SubgroupEqMask = 4416, + SubgroupEqMaskKHR = 4416, + SubgroupGeMask = 4417, + SubgroupGeMaskKHR = 4417, + SubgroupGtMask = 4418, + SubgroupGtMaskKHR = 4418, + SubgroupLeMask = 4419, + SubgroupLeMaskKHR = 4419, + SubgroupLtMask = 4420, + SubgroupLtMaskKHR = 4420, + BaseVertex = 4424, + BaseInstance = 4425, + DrawIndex = 4426, + PrimitiveShadingRateKHR = 4432, + DeviceIndex = 4438, + ViewIndex = 4440, + ShadingRateKHR = 4444, + BaryCoordNoPerspAMD = 4992, + BaryCoordNoPerspCentroidAMD = 4993, + BaryCoordNoPerspSampleAMD = 4994, + BaryCoordSmoothAMD = 4995, + BaryCoordSmoothCentroidAMD = 4996, + BaryCoordSmoothSampleAMD = 4997, + BaryCoordPullModelAMD = 4998, + FragStencilRefEXT = 5014, + RemainingRecursionLevelsAMDX = 5021, + ShaderIndexAMDX = 5073, + ViewportMaskNV = 5253, + SecondaryPositionNV = 5257, + SecondaryViewportMaskNV = 5258, + PositionPerViewNV = 5261, + ViewportMaskPerViewNV = 5262, + FullyCoveredEXT = 5264, + TaskCountNV = 5274, + PrimitiveCountNV = 5275, + PrimitiveIndicesNV = 5276, + ClipDistancePerViewNV = 5277, + CullDistancePerViewNV = 5278, + LayerPerViewNV = 5279, + MeshViewCountNV = 5280, + MeshViewIndicesNV = 5281, + BaryCoordKHR = 5286, + BaryCoordNV = 5286, + BaryCoordNoPerspKHR = 5287, + BaryCoordNoPerspNV = 5287, + FragSizeEXT = 5292, + FragmentSizeNV = 5292, + FragInvocationCountEXT = 5293, + InvocationsPerPixelNV = 5293, + PrimitivePointIndicesEXT = 5294, + PrimitiveLineIndicesEXT = 5295, + PrimitiveTriangleIndicesEXT = 5296, + CullPrimitiveEXT = 5299, + LaunchIdKHR = 5319, + LaunchIdNV = 5319, + LaunchSizeKHR = 5320, + LaunchSizeNV = 5320, + WorldRayOriginKHR = 5321, + WorldRayOriginNV = 5321, + WorldRayDirectionKHR = 5322, + WorldRayDirectionNV = 5322, + ObjectRayOriginKHR = 5323, + ObjectRayOriginNV = 5323, + ObjectRayDirectionKHR = 5324, + ObjectRayDirectionNV = 5324, + RayTminKHR = 5325, + RayTminNV = 5325, + RayTmaxKHR = 5326, + RayTmaxNV = 5326, + InstanceCustomIndexKHR = 5327, + InstanceCustomIndexNV = 5327, + ObjectToWorldKHR = 5330, + ObjectToWorldNV = 5330, + WorldToObjectKHR = 5331, + WorldToObjectNV = 5331, + HitTNV = 5332, + HitKindKHR = 5333, + HitKindNV = 5333, + CurrentRayTimeNV = 5334, + HitTriangleVertexPositionsKHR = 5335, + HitMicroTriangleVertexPositionsNV = 5337, + HitMicroTriangleVertexBarycentricsNV = 5344, + IncomingRayFlagsKHR = 5351, + IncomingRayFlagsNV = 5351, + RayGeometryIndexKHR = 5352, + HitIsSphereNV = 5359, + HitIsLSSNV = 5360, + HitSpherePositionNV = 5361, + WarpsPerSMNV = 5374, + SMCountNV = 5375, + WarpIDNV = 5376, + SMIDNV = 5377, + HitLSSPositionsNV = 5396, + HitKindFrontFacingMicroTriangleNV = 5405, + HitKindBackFacingMicroTriangleNV = 5406, + HitSphereRadiusNV = 5420, + HitLSSRadiiNV = 5421, + ClusterIDNV = 5436, + CullMaskKHR = 6021, + Max = 0x7fffffff, +}; + +enum class SelectionControlShift : unsigned { + Flatten = 0, + DontFlatten = 1, + Max = 0x7fffffff, +}; + +enum class SelectionControlMask : unsigned { + MaskNone = 0, + Flatten = 0x00000001, + DontFlatten = 0x00000002, +}; + +enum class LoopControlShift : unsigned { + Unroll = 0, + DontUnroll = 1, + DependencyInfinite = 2, + DependencyLength = 3, + MinIterations = 4, + MaxIterations = 5, + IterationMultiple = 6, + PeelCount = 7, + PartialCount = 8, + InitiationIntervalINTEL = 16, + MaxConcurrencyINTEL = 17, + DependencyArrayINTEL = 18, + PipelineEnableINTEL = 19, + LoopCoalesceINTEL = 20, + MaxInterleavingINTEL = 21, + SpeculatedIterationsINTEL = 22, + NoFusionINTEL = 23, + LoopCountINTEL = 24, + MaxReinvocationDelayINTEL = 25, + Max = 0x7fffffff, +}; + +enum class LoopControlMask : unsigned { + MaskNone = 0, + Unroll = 0x00000001, + DontUnroll = 0x00000002, + DependencyInfinite = 0x00000004, + DependencyLength = 0x00000008, + MinIterations = 0x00000010, + MaxIterations = 0x00000020, + IterationMultiple = 0x00000040, + PeelCount = 0x00000080, + PartialCount = 0x00000100, + InitiationIntervalINTEL = 0x00010000, + MaxConcurrencyINTEL = 0x00020000, + DependencyArrayINTEL = 0x00040000, + PipelineEnableINTEL = 0x00080000, + LoopCoalesceINTEL = 0x00100000, + MaxInterleavingINTEL = 0x00200000, + SpeculatedIterationsINTEL = 0x00400000, + NoFusionINTEL = 0x00800000, + LoopCountINTEL = 0x01000000, + MaxReinvocationDelayINTEL = 0x02000000, +}; + +enum class FunctionControlShift : unsigned { + Inline = 0, + DontInline = 1, + Pure = 2, + Const = 3, + OptNoneEXT = 16, + OptNoneINTEL = 16, + Max = 0x7fffffff, +}; + +enum class FunctionControlMask : unsigned { + MaskNone = 0, + Inline = 0x00000001, + DontInline = 0x00000002, + Pure = 0x00000004, + Const = 0x00000008, + OptNoneEXT = 0x00010000, + OptNoneINTEL = 0x00010000, +}; + +enum class MemorySemanticsShift : unsigned { + Acquire = 1, + Release = 2, + AcquireRelease = 3, + SequentiallyConsistent = 4, + UniformMemory = 6, + SubgroupMemory = 7, + WorkgroupMemory = 8, + CrossWorkgroupMemory = 9, + AtomicCounterMemory = 10, + ImageMemory = 11, + OutputMemory = 12, + OutputMemoryKHR = 12, + MakeAvailable = 13, + MakeAvailableKHR = 13, + MakeVisible = 14, + MakeVisibleKHR = 14, + Volatile = 15, + Max = 0x7fffffff, +}; + +enum class MemorySemanticsMask : unsigned { + MaskNone = 0, + Acquire = 0x00000002, + Release = 0x00000004, + AcquireRelease = 0x00000008, + SequentiallyConsistent = 0x00000010, + UniformMemory = 0x00000040, + SubgroupMemory = 0x00000080, + WorkgroupMemory = 0x00000100, + CrossWorkgroupMemory = 0x00000200, + AtomicCounterMemory = 0x00000400, + ImageMemory = 0x00000800, + OutputMemory = 0x00001000, + OutputMemoryKHR = 0x00001000, + MakeAvailable = 0x00002000, + MakeAvailableKHR = 0x00002000, + MakeVisible = 0x00004000, + MakeVisibleKHR = 0x00004000, + Volatile = 0x00008000, +}; + +enum class MemoryAccessShift : unsigned { + Volatile = 0, + Aligned = 1, + Nontemporal = 2, + MakePointerAvailable = 3, + MakePointerAvailableKHR = 3, + MakePointerVisible = 4, + MakePointerVisibleKHR = 4, + NonPrivatePointer = 5, + NonPrivatePointerKHR = 5, + AliasScopeINTELMask = 16, + NoAliasINTELMask = 17, + Max = 0x7fffffff, +}; + +enum class MemoryAccessMask : unsigned { + MaskNone = 0, + Volatile = 0x00000001, + Aligned = 0x00000002, + Nontemporal = 0x00000004, + MakePointerAvailable = 0x00000008, + MakePointerAvailableKHR = 0x00000008, + MakePointerVisible = 0x00000010, + MakePointerVisibleKHR = 0x00000010, + NonPrivatePointer = 0x00000020, + NonPrivatePointerKHR = 0x00000020, + AliasScopeINTELMask = 0x00010000, + NoAliasINTELMask = 0x00020000, +}; + +enum class Scope : unsigned { + CrossDevice = 0, + Device = 1, + Workgroup = 2, + Subgroup = 3, + Invocation = 4, + QueueFamily = 5, + QueueFamilyKHR = 5, + ShaderCallKHR = 6, + Max = 0x7fffffff, +}; + +enum class GroupOperation : unsigned { + Reduce = 0, + InclusiveScan = 1, + ExclusiveScan = 2, + ClusteredReduce = 3, + PartitionedReduceNV = 6, + PartitionedInclusiveScanNV = 7, + PartitionedExclusiveScanNV = 8, + Max = 0x7fffffff, +}; + +enum class KernelEnqueueFlags : unsigned { + NoWait = 0, + WaitKernel = 1, + WaitWorkGroup = 2, + Max = 0x7fffffff, +}; + +enum class KernelProfilingInfoShift : unsigned { + CmdExecTime = 0, + Max = 0x7fffffff, +}; + +enum class KernelProfilingInfoMask : unsigned { + MaskNone = 0, + CmdExecTime = 0x00000001, +}; + +enum class Capability : unsigned { + Matrix = 0, + Shader = 1, + Geometry = 2, + Tessellation = 3, + Addresses = 4, + Linkage = 5, + Kernel = 6, + Vector16 = 7, + Float16Buffer = 8, + Float16 = 9, + Float64 = 10, + Int64 = 11, + Int64Atomics = 12, + ImageBasic = 13, + ImageReadWrite = 14, + ImageMipmap = 15, + Pipes = 17, + Groups = 18, + DeviceEnqueue = 19, + LiteralSampler = 20, + AtomicStorage = 21, + Int16 = 22, + TessellationPointSize = 23, + GeometryPointSize = 24, + ImageGatherExtended = 25, + StorageImageMultisample = 27, + UniformBufferArrayDynamicIndexing = 28, + SampledImageArrayDynamicIndexing = 29, + StorageBufferArrayDynamicIndexing = 30, + StorageImageArrayDynamicIndexing = 31, + ClipDistance = 32, + CullDistance = 33, + ImageCubeArray = 34, + SampleRateShading = 35, + ImageRect = 36, + SampledRect = 37, + GenericPointer = 38, + Int8 = 39, + InputAttachment = 40, + SparseResidency = 41, + MinLod = 42, + Sampled1D = 43, + Image1D = 44, + SampledCubeArray = 45, + SampledBuffer = 46, + ImageBuffer = 47, + ImageMSArray = 48, + StorageImageExtendedFormats = 49, + ImageQuery = 50, + DerivativeControl = 51, + InterpolationFunction = 52, + TransformFeedback = 53, + GeometryStreams = 54, + StorageImageReadWithoutFormat = 55, + StorageImageWriteWithoutFormat = 56, + MultiViewport = 57, + SubgroupDispatch = 58, + NamedBarrier = 59, + PipeStorage = 60, + GroupNonUniform = 61, + GroupNonUniformVote = 62, + GroupNonUniformArithmetic = 63, + GroupNonUniformBallot = 64, + GroupNonUniformShuffle = 65, + GroupNonUniformShuffleRelative = 66, + GroupNonUniformClustered = 67, + GroupNonUniformQuad = 68, + ShaderLayer = 69, + ShaderViewportIndex = 70, + UniformDecoration = 71, + CoreBuiltinsARM = 4165, + TileImageColorReadAccessEXT = 4166, + TileImageDepthReadAccessEXT = 4167, + TileImageStencilReadAccessEXT = 4168, + CooperativeMatrixLayoutsARM = 4201, + FragmentShadingRateKHR = 4422, + SubgroupBallotKHR = 4423, + DrawParameters = 4427, + WorkgroupMemoryExplicitLayoutKHR = 4428, + WorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, + WorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, + SubgroupVoteKHR = 4431, + StorageBuffer16BitAccess = 4433, + StorageUniformBufferBlock16 = 4433, + StorageUniform16 = 4434, + UniformAndStorageBuffer16BitAccess = 4434, + StoragePushConstant16 = 4435, + StorageInputOutput16 = 4436, + DeviceGroup = 4437, + MultiView = 4439, + VariablePointersStorageBuffer = 4441, + VariablePointers = 4442, + AtomicStorageOps = 4445, + SampleMaskPostDepthCoverage = 4447, + StorageBuffer8BitAccess = 4448, + UniformAndStorageBuffer8BitAccess = 4449, + StoragePushConstant8 = 4450, + DenormPreserve = 4464, + DenormFlushToZero = 4465, + SignedZeroInfNanPreserve = 4466, + RoundingModeRTE = 4467, + RoundingModeRTZ = 4468, + RayQueryProvisionalKHR = 4471, + RayQueryKHR = 4472, + UntypedPointersKHR = 4473, + RayTraversalPrimitiveCullingKHR = 4478, + RayTracingKHR = 4479, + TextureSampleWeightedQCOM = 4484, + TextureBoxFilterQCOM = 4485, + TextureBlockMatchQCOM = 4486, + TextureBlockMatch2QCOM = 4498, + Float16ImageAMD = 5008, + ImageGatherBiasLodAMD = 5009, + FragmentMaskAMD = 5010, + StencilExportEXT = 5013, + ImageReadWriteLodAMD = 5015, + Int64ImageEXT = 5016, + ShaderClockKHR = 5055, + ShaderEnqueueAMDX = 5067, + QuadControlKHR = 5087, + BFloat16TypeKHR = 5116, + BFloat16DotProductKHR = 5117, + BFloat16CooperativeMatrixKHR = 5118, + SampleMaskOverrideCoverageNV = 5249, + GeometryShaderPassthroughNV = 5251, + ShaderViewportIndexLayerEXT = 5254, + ShaderViewportIndexLayerNV = 5254, + ShaderViewportMaskNV = 5255, + ShaderStereoViewNV = 5259, + PerViewAttributesNV = 5260, + FragmentFullyCoveredEXT = 5265, + MeshShadingNV = 5266, + ImageFootprintNV = 5282, + MeshShadingEXT = 5283, + FragmentBarycentricKHR = 5284, + FragmentBarycentricNV = 5284, + ComputeDerivativeGroupQuadsKHR = 5288, + ComputeDerivativeGroupQuadsNV = 5288, + FragmentDensityEXT = 5291, + ShadingRateNV = 5291, + GroupNonUniformPartitionedNV = 5297, + ShaderNonUniform = 5301, + ShaderNonUniformEXT = 5301, + RuntimeDescriptorArray = 5302, + RuntimeDescriptorArrayEXT = 5302, + InputAttachmentArrayDynamicIndexing = 5303, + InputAttachmentArrayDynamicIndexingEXT = 5303, + UniformTexelBufferArrayDynamicIndexing = 5304, + UniformTexelBufferArrayDynamicIndexingEXT = 5304, + StorageTexelBufferArrayDynamicIndexing = 5305, + StorageTexelBufferArrayDynamicIndexingEXT = 5305, + UniformBufferArrayNonUniformIndexing = 5306, + UniformBufferArrayNonUniformIndexingEXT = 5306, + SampledImageArrayNonUniformIndexing = 5307, + SampledImageArrayNonUniformIndexingEXT = 5307, + StorageBufferArrayNonUniformIndexing = 5308, + StorageBufferArrayNonUniformIndexingEXT = 5308, + StorageImageArrayNonUniformIndexing = 5309, + StorageImageArrayNonUniformIndexingEXT = 5309, + InputAttachmentArrayNonUniformIndexing = 5310, + InputAttachmentArrayNonUniformIndexingEXT = 5310, + UniformTexelBufferArrayNonUniformIndexing = 5311, + UniformTexelBufferArrayNonUniformIndexingEXT = 5311, + StorageTexelBufferArrayNonUniformIndexing = 5312, + StorageTexelBufferArrayNonUniformIndexingEXT = 5312, + RayTracingPositionFetchKHR = 5336, + RayTracingNV = 5340, + RayTracingMotionBlurNV = 5341, + VulkanMemoryModel = 5345, + VulkanMemoryModelKHR = 5345, + VulkanMemoryModelDeviceScope = 5346, + VulkanMemoryModelDeviceScopeKHR = 5346, + PhysicalStorageBufferAddresses = 5347, + PhysicalStorageBufferAddressesEXT = 5347, + ComputeDerivativeGroupLinearKHR = 5350, + ComputeDerivativeGroupLinearNV = 5350, + RayTracingProvisionalKHR = 5353, + CooperativeMatrixNV = 5357, + FragmentShaderSampleInterlockEXT = 5363, + FragmentShaderShadingRateInterlockEXT = 5372, + ShaderSMBuiltinsNV = 5373, + FragmentShaderPixelInterlockEXT = 5378, + DemoteToHelperInvocation = 5379, + DemoteToHelperInvocationEXT = 5379, + DisplacementMicromapNV = 5380, + RayTracingOpacityMicromapEXT = 5381, + ShaderInvocationReorderNV = 5383, + BindlessTextureNV = 5390, + RayQueryPositionFetchKHR = 5391, + CooperativeVectorNV = 5394, + AtomicFloat16VectorNV = 5404, + RayTracingDisplacementMicromapNV = 5409, + RawAccessChainsNV = 5414, + RayTracingSpheresGeometryNV = 5418, + RayTracingLinearSweptSpheresGeometryNV = 5419, + CooperativeMatrixReductionsNV = 5430, + CooperativeMatrixConversionsNV = 5431, + CooperativeMatrixPerElementOperationsNV = 5432, + CooperativeMatrixTensorAddressingNV = 5433, + CooperativeMatrixBlockLoadsNV = 5434, + CooperativeVectorTrainingNV = 5435, + RayTracingClusterAccelerationStructureNV = 5437, + TensorAddressingNV = 5439, + SubgroupShuffleINTEL = 5568, + SubgroupBufferBlockIOINTEL = 5569, + SubgroupImageBlockIOINTEL = 5570, + SubgroupImageMediaBlockIOINTEL = 5579, + RoundToInfinityINTEL = 5582, + FloatingPointModeINTEL = 5583, + IntegerFunctions2INTEL = 5584, + FunctionPointersINTEL = 5603, + IndirectReferencesINTEL = 5604, + AsmINTEL = 5606, + AtomicFloat32MinMaxEXT = 5612, + AtomicFloat64MinMaxEXT = 5613, + AtomicFloat16MinMaxEXT = 5616, + VectorComputeINTEL = 5617, + VectorAnyINTEL = 5619, + ExpectAssumeKHR = 5629, + SubgroupAvcMotionEstimationINTEL = 5696, + SubgroupAvcMotionEstimationIntraINTEL = 5697, + SubgroupAvcMotionEstimationChromaINTEL = 5698, + VariableLengthArrayINTEL = 5817, + FunctionFloatControlINTEL = 5821, + FPGAMemoryAttributesINTEL = 5824, + FPFastMathModeINTEL = 5837, + ArbitraryPrecisionIntegersINTEL = 5844, + ArbitraryPrecisionFloatingPointINTEL = 5845, + UnstructuredLoopControlsINTEL = 5886, + FPGALoopControlsINTEL = 5888, + KernelAttributesINTEL = 5892, + FPGAKernelAttributesINTEL = 5897, + FPGAMemoryAccessesINTEL = 5898, + FPGAClusterAttributesINTEL = 5904, + LoopFuseINTEL = 5906, + FPGADSPControlINTEL = 5908, + MemoryAccessAliasingINTEL = 5910, + FPGAInvocationPipeliningAttributesINTEL = 5916, + FPGABufferLocationINTEL = 5920, + ArbitraryPrecisionFixedPointINTEL = 5922, + USMStorageClassesINTEL = 5935, + RuntimeAlignedAttributeINTEL = 5939, + IOPipesINTEL = 5943, + BlockingPipesINTEL = 5945, + FPGARegINTEL = 5948, + DotProductInputAll = 6016, + DotProductInputAllKHR = 6016, + DotProductInput4x8Bit = 6017, + DotProductInput4x8BitKHR = 6017, + DotProductInput4x8BitPacked = 6018, + DotProductInput4x8BitPackedKHR = 6018, + DotProduct = 6019, + DotProductKHR = 6019, + RayCullMaskKHR = 6020, + CooperativeMatrixKHR = 6022, + ReplicatedCompositesEXT = 6024, + BitInstructions = 6025, + GroupNonUniformRotateKHR = 6026, + FloatControls2 = 6029, + AtomicFloat32AddEXT = 6033, + AtomicFloat64AddEXT = 6034, + LongCompositesINTEL = 6089, + OptNoneEXT = 6094, + OptNoneINTEL = 6094, + AtomicFloat16AddEXT = 6095, + DebugInfoModuleINTEL = 6114, + BFloat16ConversionINTEL = 6115, + SplitBarrierINTEL = 6141, + ArithmeticFenceEXT = 6144, + FPGAClusterAttributesV2INTEL = 6150, + FPGAKernelAttributesv2INTEL = 6161, + FPMaxErrorINTEL = 6169, + FPGALatencyControlINTEL = 6171, + FPGAArgumentInterfacesINTEL = 6174, + GlobalVariableHostAccessINTEL = 6187, + GlobalVariableFPGADecorationsINTEL = 6189, + SubgroupBufferPrefetchINTEL = 6220, + Subgroup2DBlockIOINTEL = 6228, + Subgroup2DBlockTransformINTEL = 6229, + Subgroup2DBlockTransposeINTEL = 6230, + SubgroupMatrixMultiplyAccumulateINTEL = 6236, + GroupUniformArithmeticKHR = 6400, + MaskedGatherScatterINTEL = 6427, + CacheControlsINTEL = 6441, + RegisterLimitsINTEL = 6460, + Max = 0x7fffffff, +}; + +enum class RayFlagsShift : unsigned { + OpaqueKHR = 0, + NoOpaqueKHR = 1, + TerminateOnFirstHitKHR = 2, + SkipClosestHitShaderKHR = 3, + CullBackFacingTrianglesKHR = 4, + CullFrontFacingTrianglesKHR = 5, + CullOpaqueKHR = 6, + CullNoOpaqueKHR = 7, + SkipBuiltinPrimitivesNV = 8, + SkipTrianglesKHR = 8, + SkipAABBsKHR = 9, + ForceOpacityMicromap2StateEXT = 10, + Max = 0x7fffffff, +}; + +enum class RayFlagsMask : unsigned { + MaskNone = 0, + OpaqueKHR = 0x00000001, + NoOpaqueKHR = 0x00000002, + TerminateOnFirstHitKHR = 0x00000004, + SkipClosestHitShaderKHR = 0x00000008, + CullBackFacingTrianglesKHR = 0x00000010, + CullFrontFacingTrianglesKHR = 0x00000020, + CullOpaqueKHR = 0x00000040, + CullNoOpaqueKHR = 0x00000080, + SkipBuiltinPrimitivesNV = 0x00000100, + SkipTrianglesKHR = 0x00000100, + SkipAABBsKHR = 0x00000200, + ForceOpacityMicromap2StateEXT = 0x00000400, +}; + +enum class RayQueryIntersection : unsigned { + RayQueryCandidateIntersectionKHR = 0, + RayQueryCommittedIntersectionKHR = 1, + Max = 0x7fffffff, +}; + +enum class RayQueryCommittedIntersectionType : unsigned { + RayQueryCommittedIntersectionNoneKHR = 0, + RayQueryCommittedIntersectionTriangleKHR = 1, + RayQueryCommittedIntersectionGeneratedKHR = 2, + Max = 0x7fffffff, +}; + +enum class RayQueryCandidateIntersectionType : unsigned { + RayQueryCandidateIntersectionTriangleKHR = 0, + RayQueryCandidateIntersectionAABBKHR = 1, + Max = 0x7fffffff, +}; + +enum class FragmentShadingRateShift : unsigned { + Vertical2Pixels = 0, + Vertical4Pixels = 1, + Horizontal2Pixels = 2, + Horizontal4Pixels = 3, + Max = 0x7fffffff, +}; + +enum class FragmentShadingRateMask : unsigned { + MaskNone = 0, + Vertical2Pixels = 0x00000001, + Vertical4Pixels = 0x00000002, + Horizontal2Pixels = 0x00000004, + Horizontal4Pixels = 0x00000008, +}; + +enum class FPDenormMode : unsigned { + Preserve = 0, + FlushToZero = 1, + Max = 0x7fffffff, +}; + +enum class FPOperationMode : unsigned { + IEEE = 0, + ALT = 1, + Max = 0x7fffffff, +}; + +enum class QuantizationModes : unsigned { + TRN = 0, + TRN_ZERO = 1, + RND = 2, + RND_ZERO = 3, + RND_INF = 4, + RND_MIN_INF = 5, + RND_CONV = 6, + RND_CONV_ODD = 7, + Max = 0x7fffffff, +}; + +enum class OverflowModes : unsigned { + WRAP = 0, + SAT = 1, + SAT_ZERO = 2, + SAT_SYM = 3, + Max = 0x7fffffff, +}; + +enum class PackedVectorFormat : unsigned { + PackedVectorFormat4x8Bit = 0, + PackedVectorFormat4x8BitKHR = 0, + Max = 0x7fffffff, +}; + +enum class CooperativeMatrixOperandsShift : unsigned { + MatrixASignedComponentsKHR = 0, + MatrixBSignedComponentsKHR = 1, + MatrixCSignedComponentsKHR = 2, + MatrixResultSignedComponentsKHR = 3, + SaturatingAccumulationKHR = 4, + Max = 0x7fffffff, +}; + +enum class CooperativeMatrixOperandsMask : unsigned { + MaskNone = 0, + MatrixASignedComponentsKHR = 0x00000001, + MatrixBSignedComponentsKHR = 0x00000002, + MatrixCSignedComponentsKHR = 0x00000004, + MatrixResultSignedComponentsKHR = 0x00000008, + SaturatingAccumulationKHR = 0x00000010, +}; + +enum class CooperativeMatrixLayout : unsigned { + RowMajorKHR = 0, + ColumnMajorKHR = 1, + RowBlockedInterleavedARM = 4202, + ColumnBlockedInterleavedARM = 4203, + Max = 0x7fffffff, +}; + +enum class CooperativeMatrixUse : unsigned { + MatrixAKHR = 0, + MatrixBKHR = 1, + MatrixAccumulatorKHR = 2, + Max = 0x7fffffff, +}; + +enum class CooperativeMatrixReduceShift : unsigned { + Row = 0, + Column = 1, + CooperativeMatrixReduce2x2 = 2, + Max = 0x7fffffff, +}; + +enum class CooperativeMatrixReduceMask : unsigned { + MaskNone = 0, + Row = 0x00000001, + Column = 0x00000002, + CooperativeMatrixReduce2x2 = 0x00000004, +}; + +enum class TensorClampMode : unsigned { + Undefined = 0, + Constant = 1, + ClampToEdge = 2, + Repeat = 3, + RepeatMirrored = 4, + Max = 0x7fffffff, +}; + +enum class TensorAddressingOperandsShift : unsigned { + TensorView = 0, + DecodeFunc = 1, + Max = 0x7fffffff, +}; + +enum class TensorAddressingOperandsMask : unsigned { + MaskNone = 0, + TensorView = 0x00000001, + DecodeFunc = 0x00000002, +}; + +enum class InitializationModeQualifier : unsigned { + InitOnDeviceReprogramINTEL = 0, + InitOnDeviceResetINTEL = 1, + Max = 0x7fffffff, +}; + +enum class HostAccessQualifier : unsigned { + NoneINTEL = 0, + ReadINTEL = 1, + WriteINTEL = 2, + ReadWriteINTEL = 3, + Max = 0x7fffffff, +}; + +enum class LoadCacheControl : unsigned { + UncachedINTEL = 0, + CachedINTEL = 1, + StreamingINTEL = 2, + InvalidateAfterReadINTEL = 3, + ConstCachedINTEL = 4, + Max = 0x7fffffff, +}; + +enum class StoreCacheControl : unsigned { + UncachedINTEL = 0, + WriteThroughINTEL = 1, + WriteBackINTEL = 2, + StreamingINTEL = 3, + Max = 0x7fffffff, +}; + +enum class NamedMaximumNumberOfRegisters : unsigned { + AutoINTEL = 0, + Max = 0x7fffffff, +}; + +enum class MatrixMultiplyAccumulateOperandsShift : unsigned { + MatrixASignedComponentsINTEL = 0, + MatrixBSignedComponentsINTEL = 1, + MatrixCBFloat16INTEL = 2, + MatrixResultBFloat16INTEL = 3, + MatrixAPackedInt8INTEL = 4, + MatrixBPackedInt8INTEL = 5, + MatrixAPackedInt4INTEL = 6, + MatrixBPackedInt4INTEL = 7, + MatrixATF32INTEL = 8, + MatrixBTF32INTEL = 9, + MatrixAPackedFloat16INTEL = 10, + MatrixBPackedFloat16INTEL = 11, + MatrixAPackedBFloat16INTEL = 12, + MatrixBPackedBFloat16INTEL = 13, + Max = 0x7fffffff, +}; + +enum class MatrixMultiplyAccumulateOperandsMask : unsigned { + MaskNone = 0, + MatrixASignedComponentsINTEL = 0x00000001, + MatrixBSignedComponentsINTEL = 0x00000002, + MatrixCBFloat16INTEL = 0x00000004, + MatrixResultBFloat16INTEL = 0x00000008, + MatrixAPackedInt8INTEL = 0x00000010, + MatrixBPackedInt8INTEL = 0x00000020, + MatrixAPackedInt4INTEL = 0x00000040, + MatrixBPackedInt4INTEL = 0x00000080, + MatrixATF32INTEL = 0x00000100, + MatrixBTF32INTEL = 0x00000200, + MatrixAPackedFloat16INTEL = 0x00000400, + MatrixBPackedFloat16INTEL = 0x00000800, + MatrixAPackedBFloat16INTEL = 0x00001000, + MatrixBPackedBFloat16INTEL = 0x00002000, +}; + +enum class RawAccessChainOperandsShift : unsigned { + RobustnessPerComponentNV = 0, + RobustnessPerElementNV = 1, + Max = 0x7fffffff, +}; + +enum class RawAccessChainOperandsMask : unsigned { + MaskNone = 0, + RobustnessPerComponentNV = 0x00000001, + RobustnessPerElementNV = 0x00000002, +}; + +enum class FPEncoding : unsigned { + BFloat16KHR = 0, + Max = 0x7fffffff, +}; + +enum class CooperativeVectorMatrixLayout : unsigned { + RowMajorNV = 0, + ColumnMajorNV = 1, + InferencingOptimalNV = 2, + TrainingOptimalNV = 3, + Max = 0x7fffffff, +}; + +enum class ComponentType : unsigned { + Float16NV = 0, + Float32NV = 1, + Float64NV = 2, + SignedInt8NV = 3, + SignedInt16NV = 4, + SignedInt32NV = 5, + SignedInt64NV = 6, + UnsignedInt8NV = 7, + UnsignedInt16NV = 8, + UnsignedInt32NV = 9, + UnsignedInt64NV = 10, + SignedInt8PackedNV = 1000491000, + UnsignedInt8PackedNV = 1000491001, + FloatE4M3NV = 1000491002, + FloatE5M2NV = 1000491003, + Max = 0x7fffffff, +}; + +enum class Op : unsigned { + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpSizeOf = 321, + OpTypePipeStorage = 322, + OpConstantPipeStorage = 323, + OpCreatePipeFromPipeStorage = 324, + OpGetKernelLocalSizeForSubgroupCount = 325, + OpGetKernelMaxNumSubgroups = 326, + OpTypeNamedBarrier = 327, + OpNamedBarrierInitialize = 328, + OpMemoryNamedBarrier = 329, + OpModuleProcessed = 330, + OpExecutionModeId = 331, + OpDecorateId = 332, + OpGroupNonUniformElect = 333, + OpGroupNonUniformAll = 334, + OpGroupNonUniformAny = 335, + OpGroupNonUniformAllEqual = 336, + OpGroupNonUniformBroadcast = 337, + OpGroupNonUniformBroadcastFirst = 338, + OpGroupNonUniformBallot = 339, + OpGroupNonUniformInverseBallot = 340, + OpGroupNonUniformBallotBitExtract = 341, + OpGroupNonUniformBallotBitCount = 342, + OpGroupNonUniformBallotFindLSB = 343, + OpGroupNonUniformBallotFindMSB = 344, + OpGroupNonUniformShuffle = 345, + OpGroupNonUniformShuffleXor = 346, + OpGroupNonUniformShuffleUp = 347, + OpGroupNonUniformShuffleDown = 348, + OpGroupNonUniformIAdd = 349, + OpGroupNonUniformFAdd = 350, + OpGroupNonUniformIMul = 351, + OpGroupNonUniformFMul = 352, + OpGroupNonUniformSMin = 353, + OpGroupNonUniformUMin = 354, + OpGroupNonUniformFMin = 355, + OpGroupNonUniformSMax = 356, + OpGroupNonUniformUMax = 357, + OpGroupNonUniformFMax = 358, + OpGroupNonUniformBitwiseAnd = 359, + OpGroupNonUniformBitwiseOr = 360, + OpGroupNonUniformBitwiseXor = 361, + OpGroupNonUniformLogicalAnd = 362, + OpGroupNonUniformLogicalOr = 363, + OpGroupNonUniformLogicalXor = 364, + OpGroupNonUniformQuadBroadcast = 365, + OpGroupNonUniformQuadSwap = 366, + OpCopyLogical = 400, + OpPtrEqual = 401, + OpPtrNotEqual = 402, + OpPtrDiff = 403, + OpColorAttachmentReadEXT = 4160, + OpDepthAttachmentReadEXT = 4161, + OpStencilAttachmentReadEXT = 4162, + OpTerminateInvocation = 4416, + OpTypeUntypedPointerKHR = 4417, + OpUntypedVariableKHR = 4418, + OpUntypedAccessChainKHR = 4419, + OpUntypedInBoundsAccessChainKHR = 4420, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpUntypedPtrAccessChainKHR = 4423, + OpUntypedInBoundsPtrAccessChainKHR = 4424, + OpUntypedArrayLengthKHR = 4425, + OpUntypedPrefetchKHR = 4426, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpGroupNonUniformRotateKHR = 4431, + OpSubgroupReadInvocationKHR = 4432, + OpExtInstWithForwardRefsKHR = 4433, + OpTraceRayKHR = 4445, + OpExecuteCallableKHR = 4446, + OpConvertUToAccelerationStructureKHR = 4447, + OpIgnoreIntersectionKHR = 4448, + OpTerminateRayKHR = 4449, + OpSDot = 4450, + OpSDotKHR = 4450, + OpUDot = 4451, + OpUDotKHR = 4451, + OpSUDot = 4452, + OpSUDotKHR = 4452, + OpSDotAccSat = 4453, + OpSDotAccSatKHR = 4453, + OpUDotAccSat = 4454, + OpUDotAccSatKHR = 4454, + OpSUDotAccSat = 4455, + OpSUDotAccSatKHR = 4455, + OpTypeCooperativeMatrixKHR = 4456, + OpCooperativeMatrixLoadKHR = 4457, + OpCooperativeMatrixStoreKHR = 4458, + OpCooperativeMatrixMulAddKHR = 4459, + OpCooperativeMatrixLengthKHR = 4460, + OpConstantCompositeReplicateEXT = 4461, + OpSpecConstantCompositeReplicateEXT = 4462, + OpCompositeConstructReplicateEXT = 4463, + OpTypeRayQueryKHR = 4472, + OpRayQueryInitializeKHR = 4473, + OpRayQueryTerminateKHR = 4474, + OpRayQueryGenerateIntersectionKHR = 4475, + OpRayQueryConfirmIntersectionKHR = 4476, + OpRayQueryProceedKHR = 4477, + OpRayQueryGetIntersectionTypeKHR = 4479, + OpImageSampleWeightedQCOM = 4480, + OpImageBoxFilterQCOM = 4481, + OpImageBlockMatchSSDQCOM = 4482, + OpImageBlockMatchSADQCOM = 4483, + OpImageBlockMatchWindowSSDQCOM = 4500, + OpImageBlockMatchWindowSADQCOM = 4501, + OpImageBlockMatchGatherSSDQCOM = 4502, + OpImageBlockMatchGatherSADQCOM = 4503, + OpGroupIAddNonUniformAMD = 5000, + OpGroupFAddNonUniformAMD = 5001, + OpGroupFMinNonUniformAMD = 5002, + OpGroupUMinNonUniformAMD = 5003, + OpGroupSMinNonUniformAMD = 5004, + OpGroupFMaxNonUniformAMD = 5005, + OpGroupUMaxNonUniformAMD = 5006, + OpGroupSMaxNonUniformAMD = 5007, + OpFragmentMaskFetchAMD = 5011, + OpFragmentFetchAMD = 5012, + OpReadClockKHR = 5056, + OpAllocateNodePayloadsAMDX = 5074, + OpEnqueueNodePayloadsAMDX = 5075, + OpTypeNodePayloadArrayAMDX = 5076, + OpFinishWritingNodePayloadAMDX = 5078, + OpNodePayloadArrayLengthAMDX = 5090, + OpIsNodePayloadValidAMDX = 5101, + OpConstantStringAMDX = 5103, + OpSpecConstantStringAMDX = 5104, + OpGroupNonUniformQuadAllKHR = 5110, + OpGroupNonUniformQuadAnyKHR = 5111, + OpHitObjectRecordHitMotionNV = 5249, + OpHitObjectRecordHitWithIndexMotionNV = 5250, + OpHitObjectRecordMissMotionNV = 5251, + OpHitObjectGetWorldToObjectNV = 5252, + OpHitObjectGetObjectToWorldNV = 5253, + OpHitObjectGetObjectRayDirectionNV = 5254, + OpHitObjectGetObjectRayOriginNV = 5255, + OpHitObjectTraceRayMotionNV = 5256, + OpHitObjectGetShaderRecordBufferHandleNV = 5257, + OpHitObjectGetShaderBindingTableRecordIndexNV = 5258, + OpHitObjectRecordEmptyNV = 5259, + OpHitObjectTraceRayNV = 5260, + OpHitObjectRecordHitNV = 5261, + OpHitObjectRecordHitWithIndexNV = 5262, + OpHitObjectRecordMissNV = 5263, + OpHitObjectExecuteShaderNV = 5264, + OpHitObjectGetCurrentTimeNV = 5265, + OpHitObjectGetAttributesNV = 5266, + OpHitObjectGetHitKindNV = 5267, + OpHitObjectGetPrimitiveIndexNV = 5268, + OpHitObjectGetGeometryIndexNV = 5269, + OpHitObjectGetInstanceIdNV = 5270, + OpHitObjectGetInstanceCustomIndexNV = 5271, + OpHitObjectGetWorldRayDirectionNV = 5272, + OpHitObjectGetWorldRayOriginNV = 5273, + OpHitObjectGetRayTMaxNV = 5274, + OpHitObjectGetRayTMinNV = 5275, + OpHitObjectIsEmptyNV = 5276, + OpHitObjectIsHitNV = 5277, + OpHitObjectIsMissNV = 5278, + OpReorderThreadWithHitObjectNV = 5279, + OpReorderThreadWithHintNV = 5280, + OpTypeHitObjectNV = 5281, + OpImageSampleFootprintNV = 5283, + OpTypeCooperativeVectorNV = 5288, + OpCooperativeVectorMatrixMulNV = 5289, + OpCooperativeVectorOuterProductAccumulateNV = 5290, + OpCooperativeVectorReduceSumAccumulateNV = 5291, + OpCooperativeVectorMatrixMulAddNV = 5292, + OpCooperativeMatrixConvertNV = 5293, + OpEmitMeshTasksEXT = 5294, + OpSetMeshOutputsEXT = 5295, + OpGroupNonUniformPartitionNV = 5296, + OpWritePackedPrimitiveIndices4x8NV = 5299, + OpFetchMicroTriangleVertexPositionNV = 5300, + OpFetchMicroTriangleVertexBarycentricNV = 5301, + OpCooperativeVectorLoadNV = 5302, + OpCooperativeVectorStoreNV = 5303, + OpReportIntersectionKHR = 5334, + OpReportIntersectionNV = 5334, + OpIgnoreIntersectionNV = 5335, + OpTerminateRayNV = 5336, + OpTraceNV = 5337, + OpTraceMotionNV = 5338, + OpTraceRayMotionNV = 5339, + OpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340, + OpTypeAccelerationStructureKHR = 5341, + OpTypeAccelerationStructureNV = 5341, + OpExecuteCallableNV = 5344, + OpRayQueryGetClusterIdNV = 5345, + OpHitObjectGetClusterIdNV = 5346, + OpTypeCooperativeMatrixNV = 5358, + OpCooperativeMatrixLoadNV = 5359, + OpCooperativeMatrixStoreNV = 5360, + OpCooperativeMatrixMulAddNV = 5361, + OpCooperativeMatrixLengthNV = 5362, + OpBeginInvocationInterlockEXT = 5364, + OpEndInvocationInterlockEXT = 5365, + OpCooperativeMatrixReduceNV = 5366, + OpCooperativeMatrixLoadTensorNV = 5367, + OpCooperativeMatrixStoreTensorNV = 5368, + OpCooperativeMatrixPerElementOpNV = 5369, + OpTypeTensorLayoutNV = 5370, + OpTypeTensorViewNV = 5371, + OpCreateTensorLayoutNV = 5372, + OpTensorLayoutSetDimensionNV = 5373, + OpTensorLayoutSetStrideNV = 5374, + OpTensorLayoutSliceNV = 5375, + OpTensorLayoutSetClampValueNV = 5376, + OpCreateTensorViewNV = 5377, + OpTensorViewSetDimensionNV = 5378, + OpTensorViewSetStrideNV = 5379, + OpDemoteToHelperInvocation = 5380, + OpDemoteToHelperInvocationEXT = 5380, + OpIsHelperInvocationEXT = 5381, + OpTensorViewSetClipNV = 5382, + OpTensorLayoutSetBlockSizeNV = 5384, + OpCooperativeMatrixTransposeNV = 5390, + OpConvertUToImageNV = 5391, + OpConvertUToSamplerNV = 5392, + OpConvertImageToUNV = 5393, + OpConvertSamplerToUNV = 5394, + OpConvertUToSampledImageNV = 5395, + OpConvertSampledImageToUNV = 5396, + OpSamplerImageAddressingModeNV = 5397, + OpRawAccessChainNV = 5398, + OpRayQueryGetIntersectionSpherePositionNV = 5427, + OpRayQueryGetIntersectionSphereRadiusNV = 5428, + OpRayQueryGetIntersectionLSSPositionsNV = 5429, + OpRayQueryGetIntersectionLSSRadiiNV = 5430, + OpRayQueryGetIntersectionLSSHitValueNV = 5431, + OpHitObjectGetSpherePositionNV = 5432, + OpHitObjectGetSphereRadiusNV = 5433, + OpHitObjectGetLSSPositionsNV = 5434, + OpHitObjectGetLSSRadiiNV = 5435, + OpHitObjectIsSphereHitNV = 5436, + OpHitObjectIsLSSHitNV = 5437, + OpRayQueryIsSphereHitNV = 5438, + OpRayQueryIsLSSHitNV = 5439, + OpSubgroupShuffleINTEL = 5571, + OpSubgroupShuffleDownINTEL = 5572, + OpSubgroupShuffleUpINTEL = 5573, + OpSubgroupShuffleXorINTEL = 5574, + OpSubgroupBlockReadINTEL = 5575, + OpSubgroupBlockWriteINTEL = 5576, + OpSubgroupImageBlockReadINTEL = 5577, + OpSubgroupImageBlockWriteINTEL = 5578, + OpSubgroupImageMediaBlockReadINTEL = 5580, + OpSubgroupImageMediaBlockWriteINTEL = 5581, + OpUCountLeadingZerosINTEL = 5585, + OpUCountTrailingZerosINTEL = 5586, + OpAbsISubINTEL = 5587, + OpAbsUSubINTEL = 5588, + OpIAddSatINTEL = 5589, + OpUAddSatINTEL = 5590, + OpIAverageINTEL = 5591, + OpUAverageINTEL = 5592, + OpIAverageRoundedINTEL = 5593, + OpUAverageRoundedINTEL = 5594, + OpISubSatINTEL = 5595, + OpUSubSatINTEL = 5596, + OpIMul32x16INTEL = 5597, + OpUMul32x16INTEL = 5598, + OpConstantFunctionPointerINTEL = 5600, + OpFunctionPointerCallINTEL = 5601, + OpAsmTargetINTEL = 5609, + OpAsmINTEL = 5610, + OpAsmCallINTEL = 5611, + OpAtomicFMinEXT = 5614, + OpAtomicFMaxEXT = 5615, + OpAssumeTrueKHR = 5630, + OpExpectKHR = 5631, + OpDecorateString = 5632, + OpDecorateStringGOOGLE = 5632, + OpMemberDecorateString = 5633, + OpMemberDecorateStringGOOGLE = 5633, + OpVmeImageINTEL = 5699, + OpTypeVmeImageINTEL = 5700, + OpTypeAvcImePayloadINTEL = 5701, + OpTypeAvcRefPayloadINTEL = 5702, + OpTypeAvcSicPayloadINTEL = 5703, + OpTypeAvcMcePayloadINTEL = 5704, + OpTypeAvcMceResultINTEL = 5705, + OpTypeAvcImeResultINTEL = 5706, + OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, + OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, + OpTypeAvcImeSingleReferenceStreaminINTEL = 5709, + OpTypeAvcImeDualReferenceStreaminINTEL = 5710, + OpTypeAvcRefResultINTEL = 5711, + OpTypeAvcSicResultINTEL = 5712, + OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, + OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, + OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, + OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, + OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, + OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, + OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, + OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, + OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, + OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, + OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, + OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, + OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, + OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, + OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, + OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, + OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, + OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, + OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, + OpSubgroupAvcMceConvertToImePayloadINTEL = 5732, + OpSubgroupAvcMceConvertToImeResultINTEL = 5733, + OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, + OpSubgroupAvcMceConvertToRefResultINTEL = 5735, + OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, + OpSubgroupAvcMceConvertToSicResultINTEL = 5737, + OpSubgroupAvcMceGetMotionVectorsINTEL = 5738, + OpSubgroupAvcMceGetInterDistortionsINTEL = 5739, + OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, + OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, + OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, + OpSubgroupAvcMceGetInterDirectionsINTEL = 5743, + OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, + OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, + OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, + OpSubgroupAvcImeInitializeINTEL = 5747, + OpSubgroupAvcImeSetSingleReferenceINTEL = 5748, + OpSubgroupAvcImeSetDualReferenceINTEL = 5749, + OpSubgroupAvcImeRefWindowSizeINTEL = 5750, + OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, + OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, + OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, + OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, + OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, + OpSubgroupAvcImeSetWeightedSadINTEL = 5756, + OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, + OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, + OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, + OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, + OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, + OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, + OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, + OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, + OpSubgroupAvcImeConvertToMceResultINTEL = 5765, + OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, + OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, + OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, + OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, + OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, + OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, + OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, + OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, + OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, + OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, + OpSubgroupAvcImeGetBorderReachedINTEL = 5776, + OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, + OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, + OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, + OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, + OpSubgroupAvcFmeInitializeINTEL = 5781, + OpSubgroupAvcBmeInitializeINTEL = 5782, + OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, + OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, + OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, + OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, + OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, + OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, + OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, + OpSubgroupAvcRefConvertToMceResultINTEL = 5790, + OpSubgroupAvcSicInitializeINTEL = 5791, + OpSubgroupAvcSicConfigureSkcINTEL = 5792, + OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, + OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, + OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, + OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, + OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, + OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, + OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, + OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, + OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, + OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, + OpSubgroupAvcSicEvaluateIpeINTEL = 5803, + OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, + OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, + OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, + OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, + OpSubgroupAvcSicConvertToMceResultINTEL = 5808, + OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, + OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, + OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, + OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, + OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, + OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, + OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, + OpSubgroupAvcSicGetInterRawSadsINTEL = 5816, + OpVariableLengthArrayINTEL = 5818, + OpSaveMemoryINTEL = 5819, + OpRestoreMemoryINTEL = 5820, + OpArbitraryFloatSinCosPiINTEL = 5840, + OpArbitraryFloatCastINTEL = 5841, + OpArbitraryFloatCastFromIntINTEL = 5842, + OpArbitraryFloatCastToIntINTEL = 5843, + OpArbitraryFloatAddINTEL = 5846, + OpArbitraryFloatSubINTEL = 5847, + OpArbitraryFloatMulINTEL = 5848, + OpArbitraryFloatDivINTEL = 5849, + OpArbitraryFloatGTINTEL = 5850, + OpArbitraryFloatGEINTEL = 5851, + OpArbitraryFloatLTINTEL = 5852, + OpArbitraryFloatLEINTEL = 5853, + OpArbitraryFloatEQINTEL = 5854, + OpArbitraryFloatRecipINTEL = 5855, + OpArbitraryFloatRSqrtINTEL = 5856, + OpArbitraryFloatCbrtINTEL = 5857, + OpArbitraryFloatHypotINTEL = 5858, + OpArbitraryFloatSqrtINTEL = 5859, + OpArbitraryFloatLogINTEL = 5860, + OpArbitraryFloatLog2INTEL = 5861, + OpArbitraryFloatLog10INTEL = 5862, + OpArbitraryFloatLog1pINTEL = 5863, + OpArbitraryFloatExpINTEL = 5864, + OpArbitraryFloatExp2INTEL = 5865, + OpArbitraryFloatExp10INTEL = 5866, + OpArbitraryFloatExpm1INTEL = 5867, + OpArbitraryFloatSinINTEL = 5868, + OpArbitraryFloatCosINTEL = 5869, + OpArbitraryFloatSinCosINTEL = 5870, + OpArbitraryFloatSinPiINTEL = 5871, + OpArbitraryFloatCosPiINTEL = 5872, + OpArbitraryFloatASinINTEL = 5873, + OpArbitraryFloatASinPiINTEL = 5874, + OpArbitraryFloatACosINTEL = 5875, + OpArbitraryFloatACosPiINTEL = 5876, + OpArbitraryFloatATanINTEL = 5877, + OpArbitraryFloatATanPiINTEL = 5878, + OpArbitraryFloatATan2INTEL = 5879, + OpArbitraryFloatPowINTEL = 5880, + OpArbitraryFloatPowRINTEL = 5881, + OpArbitraryFloatPowNINTEL = 5882, + OpLoopControlINTEL = 5887, + OpAliasDomainDeclINTEL = 5911, + OpAliasScopeDeclINTEL = 5912, + OpAliasScopeListDeclINTEL = 5913, + OpFixedSqrtINTEL = 5923, + OpFixedRecipINTEL = 5924, + OpFixedRsqrtINTEL = 5925, + OpFixedSinINTEL = 5926, + OpFixedCosINTEL = 5927, + OpFixedSinCosINTEL = 5928, + OpFixedSinPiINTEL = 5929, + OpFixedCosPiINTEL = 5930, + OpFixedSinCosPiINTEL = 5931, + OpFixedLogINTEL = 5932, + OpFixedExpINTEL = 5933, + OpPtrCastToCrossWorkgroupINTEL = 5934, + OpCrossWorkgroupCastToPtrINTEL = 5938, + OpReadPipeBlockingINTEL = 5946, + OpWritePipeBlockingINTEL = 5947, + OpFPGARegINTEL = 5949, + OpRayQueryGetRayTMinKHR = 6016, + OpRayQueryGetRayFlagsKHR = 6017, + OpRayQueryGetIntersectionTKHR = 6018, + OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, + OpRayQueryGetIntersectionInstanceIdKHR = 6020, + OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, + OpRayQueryGetIntersectionGeometryIndexKHR = 6022, + OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, + OpRayQueryGetIntersectionBarycentricsKHR = 6024, + OpRayQueryGetIntersectionFrontFaceKHR = 6025, + OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, + OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, + OpRayQueryGetIntersectionObjectRayOriginKHR = 6028, + OpRayQueryGetWorldRayDirectionKHR = 6029, + OpRayQueryGetWorldRayOriginKHR = 6030, + OpRayQueryGetIntersectionObjectToWorldKHR = 6031, + OpRayQueryGetIntersectionWorldToObjectKHR = 6032, + OpAtomicFAddEXT = 6035, + OpTypeBufferSurfaceINTEL = 6086, + OpTypeStructContinuedINTEL = 6090, + OpConstantCompositeContinuedINTEL = 6091, + OpSpecConstantCompositeContinuedINTEL = 6092, + OpCompositeConstructContinuedINTEL = 6096, + OpConvertFToBF16INTEL = 6116, + OpConvertBF16ToFINTEL = 6117, + OpControlBarrierArriveINTEL = 6142, + OpControlBarrierWaitINTEL = 6143, + OpArithmeticFenceEXT = 6145, + OpSubgroupBlockPrefetchINTEL = 6221, + OpSubgroup2DBlockLoadINTEL = 6231, + OpSubgroup2DBlockLoadTransformINTEL = 6232, + OpSubgroup2DBlockLoadTransposeINTEL = 6233, + OpSubgroup2DBlockPrefetchINTEL = 6234, + OpSubgroup2DBlockStoreINTEL = 6235, + OpSubgroupMatrixMultiplyAccumulateINTEL = 6237, + OpGroupIMulKHR = 6401, + OpGroupFMulKHR = 6402, + OpGroupBitwiseAndKHR = 6403, + OpGroupBitwiseOrKHR = 6404, + OpGroupBitwiseXorKHR = 6405, + OpGroupLogicalAndKHR = 6406, + OpGroupLogicalOrKHR = 6407, + OpGroupLogicalXorKHR = 6408, + OpMaskedGatherINTEL = 6428, + OpMaskedScatterINTEL = 6429, + Max = 0x7fffffff, +}; + +#ifdef SPV_ENABLE_UTILITY_CODE +#ifndef __cplusplus +#include +#endif +inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { + *hasResult = *hasResultType = false; + switch (opcode) { + default: /* unknown opcode */ break; + case Op::OpNop: *hasResult = false; *hasResultType = false; break; + case Op::OpUndef: *hasResult = true; *hasResultType = true; break; + case Op::OpSourceContinued: *hasResult = false; *hasResultType = false; break; + case Op::OpSource: *hasResult = false; *hasResultType = false; break; + case Op::OpSourceExtension: *hasResult = false; *hasResultType = false; break; + case Op::OpName: *hasResult = false; *hasResultType = false; break; + case Op::OpMemberName: *hasResult = false; *hasResultType = false; break; + case Op::OpString: *hasResult = true; *hasResultType = false; break; + case Op::OpLine: *hasResult = false; *hasResultType = false; break; + case Op::OpExtension: *hasResult = false; *hasResultType = false; break; + case Op::OpExtInstImport: *hasResult = true; *hasResultType = false; break; + case Op::OpExtInst: *hasResult = true; *hasResultType = true; break; + case Op::OpMemoryModel: *hasResult = false; *hasResultType = false; break; + case Op::OpEntryPoint: *hasResult = false; *hasResultType = false; break; + case Op::OpExecutionMode: *hasResult = false; *hasResultType = false; break; + case Op::OpCapability: *hasResult = false; *hasResultType = false; break; + case Op::OpTypeVoid: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeBool: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeInt: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeFloat: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeVector: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeMatrix: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeImage: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeSampler: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeSampledImage: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeArray: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeStruct: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeOpaque: *hasResult = true; *hasResultType = false; break; + case Op::OpTypePointer: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeFunction: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeEvent: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeReserveId: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeQueue: *hasResult = true; *hasResultType = false; break; + case Op::OpTypePipe: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break; + case Op::OpConstantTrue: *hasResult = true; *hasResultType = true; break; + case Op::OpConstantFalse: *hasResult = true; *hasResultType = true; break; + case Op::OpConstant: *hasResult = true; *hasResultType = true; break; + case Op::OpConstantComposite: *hasResult = true; *hasResultType = true; break; + case Op::OpConstantSampler: *hasResult = true; *hasResultType = true; break; + case Op::OpConstantNull: *hasResult = true; *hasResultType = true; break; + case Op::OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break; + case Op::OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break; + case Op::OpSpecConstant: *hasResult = true; *hasResultType = true; break; + case Op::OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break; + case Op::OpSpecConstantOp: *hasResult = true; *hasResultType = true; break; + case Op::OpFunction: *hasResult = true; *hasResultType = true; break; + case Op::OpFunctionParameter: *hasResult = true; *hasResultType = true; break; + case Op::OpFunctionEnd: *hasResult = false; *hasResultType = false; break; + case Op::OpFunctionCall: *hasResult = true; *hasResultType = true; break; + case Op::OpVariable: *hasResult = true; *hasResultType = true; break; + case Op::OpImageTexelPointer: *hasResult = true; *hasResultType = true; break; + case Op::OpLoad: *hasResult = true; *hasResultType = true; break; + case Op::OpStore: *hasResult = false; *hasResultType = false; break; + case Op::OpCopyMemory: *hasResult = false; *hasResultType = false; break; + case Op::OpCopyMemorySized: *hasResult = false; *hasResultType = false; break; + case Op::OpAccessChain: *hasResult = true; *hasResultType = true; break; + case Op::OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break; + case Op::OpPtrAccessChain: *hasResult = true; *hasResultType = true; break; + case Op::OpArrayLength: *hasResult = true; *hasResultType = true; break; + case Op::OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break; + case Op::OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break; + case Op::OpDecorate: *hasResult = false; *hasResultType = false; break; + case Op::OpMemberDecorate: *hasResult = false; *hasResultType = false; break; + case Op::OpDecorationGroup: *hasResult = true; *hasResultType = false; break; + case Op::OpGroupDecorate: *hasResult = false; *hasResultType = false; break; + case Op::OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break; + case Op::OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break; + case Op::OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break; + case Op::OpVectorShuffle: *hasResult = true; *hasResultType = true; break; + case Op::OpCompositeConstruct: *hasResult = true; *hasResultType = true; break; + case Op::OpCompositeExtract: *hasResult = true; *hasResultType = true; break; + case Op::OpCompositeInsert: *hasResult = true; *hasResultType = true; break; + case Op::OpCopyObject: *hasResult = true; *hasResultType = true; break; + case Op::OpTranspose: *hasResult = true; *hasResultType = true; break; + case Op::OpSampledImage: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageFetch: *hasResult = true; *hasResultType = true; break; + case Op::OpImageGather: *hasResult = true; *hasResultType = true; break; + case Op::OpImageDrefGather: *hasResult = true; *hasResultType = true; break; + case Op::OpImageRead: *hasResult = true; *hasResultType = true; break; + case Op::OpImageWrite: *hasResult = false; *hasResultType = false; break; + case Op::OpImage: *hasResult = true; *hasResultType = true; break; + case Op::OpImageQueryFormat: *hasResult = true; *hasResultType = true; break; + case Op::OpImageQueryOrder: *hasResult = true; *hasResultType = true; break; + case Op::OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageQuerySize: *hasResult = true; *hasResultType = true; break; + case Op::OpImageQueryLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageQueryLevels: *hasResult = true; *hasResultType = true; break; + case Op::OpImageQuerySamples: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertFToU: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertFToS: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertSToF: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertUToF: *hasResult = true; *hasResultType = true; break; + case Op::OpUConvert: *hasResult = true; *hasResultType = true; break; + case Op::OpSConvert: *hasResult = true; *hasResultType = true; break; + case Op::OpFConvert: *hasResult = true; *hasResultType = true; break; + case Op::OpQuantizeToF16: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertPtrToU: *hasResult = true; *hasResultType = true; break; + case Op::OpSatConvertSToU: *hasResult = true; *hasResultType = true; break; + case Op::OpSatConvertUToS: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertUToPtr: *hasResult = true; *hasResultType = true; break; + case Op::OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break; + case Op::OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break; + case Op::OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break; + case Op::OpBitcast: *hasResult = true; *hasResultType = true; break; + case Op::OpSNegate: *hasResult = true; *hasResultType = true; break; + case Op::OpFNegate: *hasResult = true; *hasResultType = true; break; + case Op::OpIAdd: *hasResult = true; *hasResultType = true; break; + case Op::OpFAdd: *hasResult = true; *hasResultType = true; break; + case Op::OpISub: *hasResult = true; *hasResultType = true; break; + case Op::OpFSub: *hasResult = true; *hasResultType = true; break; + case Op::OpIMul: *hasResult = true; *hasResultType = true; break; + case Op::OpFMul: *hasResult = true; *hasResultType = true; break; + case Op::OpUDiv: *hasResult = true; *hasResultType = true; break; + case Op::OpSDiv: *hasResult = true; *hasResultType = true; break; + case Op::OpFDiv: *hasResult = true; *hasResultType = true; break; + case Op::OpUMod: *hasResult = true; *hasResultType = true; break; + case Op::OpSRem: *hasResult = true; *hasResultType = true; break; + case Op::OpSMod: *hasResult = true; *hasResultType = true; break; + case Op::OpFRem: *hasResult = true; *hasResultType = true; break; + case Op::OpFMod: *hasResult = true; *hasResultType = true; break; + case Op::OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break; + case Op::OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break; + case Op::OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break; + case Op::OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break; + case Op::OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break; + case Op::OpOuterProduct: *hasResult = true; *hasResultType = true; break; + case Op::OpDot: *hasResult = true; *hasResultType = true; break; + case Op::OpIAddCarry: *hasResult = true; *hasResultType = true; break; + case Op::OpISubBorrow: *hasResult = true; *hasResultType = true; break; + case Op::OpUMulExtended: *hasResult = true; *hasResultType = true; break; + case Op::OpSMulExtended: *hasResult = true; *hasResultType = true; break; + case Op::OpAny: *hasResult = true; *hasResultType = true; break; + case Op::OpAll: *hasResult = true; *hasResultType = true; break; + case Op::OpIsNan: *hasResult = true; *hasResultType = true; break; + case Op::OpIsInf: *hasResult = true; *hasResultType = true; break; + case Op::OpIsFinite: *hasResult = true; *hasResultType = true; break; + case Op::OpIsNormal: *hasResult = true; *hasResultType = true; break; + case Op::OpSignBitSet: *hasResult = true; *hasResultType = true; break; + case Op::OpLessOrGreater: *hasResult = true; *hasResultType = true; break; + case Op::OpOrdered: *hasResult = true; *hasResultType = true; break; + case Op::OpUnordered: *hasResult = true; *hasResultType = true; break; + case Op::OpLogicalEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpLogicalOr: *hasResult = true; *hasResultType = true; break; + case Op::OpLogicalAnd: *hasResult = true; *hasResultType = true; break; + case Op::OpLogicalNot: *hasResult = true; *hasResultType = true; break; + case Op::OpSelect: *hasResult = true; *hasResultType = true; break; + case Op::OpIEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpINotEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpUGreaterThan: *hasResult = true; *hasResultType = true; break; + case Op::OpSGreaterThan: *hasResult = true; *hasResultType = true; break; + case Op::OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpULessThan: *hasResult = true; *hasResultType = true; break; + case Op::OpSLessThan: *hasResult = true; *hasResultType = true; break; + case Op::OpULessThanEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpSLessThanEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpFOrdEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpFUnordEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpFOrdLessThan: *hasResult = true; *hasResultType = true; break; + case Op::OpFUnordLessThan: *hasResult = true; *hasResultType = true; break; + case Op::OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break; + case Op::OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break; + case Op::OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpShiftRightLogical: *hasResult = true; *hasResultType = true; break; + case Op::OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break; + case Op::OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break; + case Op::OpBitwiseOr: *hasResult = true; *hasResultType = true; break; + case Op::OpBitwiseXor: *hasResult = true; *hasResultType = true; break; + case Op::OpBitwiseAnd: *hasResult = true; *hasResultType = true; break; + case Op::OpNot: *hasResult = true; *hasResultType = true; break; + case Op::OpBitFieldInsert: *hasResult = true; *hasResultType = true; break; + case Op::OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break; + case Op::OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break; + case Op::OpBitReverse: *hasResult = true; *hasResultType = true; break; + case Op::OpBitCount: *hasResult = true; *hasResultType = true; break; + case Op::OpDPdx: *hasResult = true; *hasResultType = true; break; + case Op::OpDPdy: *hasResult = true; *hasResultType = true; break; + case Op::OpFwidth: *hasResult = true; *hasResultType = true; break; + case Op::OpDPdxFine: *hasResult = true; *hasResultType = true; break; + case Op::OpDPdyFine: *hasResult = true; *hasResultType = true; break; + case Op::OpFwidthFine: *hasResult = true; *hasResultType = true; break; + case Op::OpDPdxCoarse: *hasResult = true; *hasResultType = true; break; + case Op::OpDPdyCoarse: *hasResult = true; *hasResultType = true; break; + case Op::OpFwidthCoarse: *hasResult = true; *hasResultType = true; break; + case Op::OpEmitVertex: *hasResult = false; *hasResultType = false; break; + case Op::OpEndPrimitive: *hasResult = false; *hasResultType = false; break; + case Op::OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break; + case Op::OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break; + case Op::OpControlBarrier: *hasResult = false; *hasResultType = false; break; + case Op::OpMemoryBarrier: *hasResult = false; *hasResultType = false; break; + case Op::OpAtomicLoad: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicStore: *hasResult = false; *hasResultType = false; break; + case Op::OpAtomicExchange: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicIAdd: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicISub: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicSMin: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicUMin: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicSMax: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicUMax: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicAnd: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicOr: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicXor: *hasResult = true; *hasResultType = true; break; + case Op::OpPhi: *hasResult = true; *hasResultType = true; break; + case Op::OpLoopMerge: *hasResult = false; *hasResultType = false; break; + case Op::OpSelectionMerge: *hasResult = false; *hasResultType = false; break; + case Op::OpLabel: *hasResult = true; *hasResultType = false; break; + case Op::OpBranch: *hasResult = false; *hasResultType = false; break; + case Op::OpBranchConditional: *hasResult = false; *hasResultType = false; break; + case Op::OpSwitch: *hasResult = false; *hasResultType = false; break; + case Op::OpKill: *hasResult = false; *hasResultType = false; break; + case Op::OpReturn: *hasResult = false; *hasResultType = false; break; + case Op::OpReturnValue: *hasResult = false; *hasResultType = false; break; + case Op::OpUnreachable: *hasResult = false; *hasResultType = false; break; + case Op::OpLifetimeStart: *hasResult = false; *hasResultType = false; break; + case Op::OpLifetimeStop: *hasResult = false; *hasResultType = false; break; + case Op::OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break; + case Op::OpGroupAll: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupAny: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupBroadcast: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupIAdd: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupFAdd: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupFMin: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupUMin: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupSMin: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupFMax: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupUMax: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupSMax: *hasResult = true; *hasResultType = true; break; + case Op::OpReadPipe: *hasResult = true; *hasResultType = true; break; + case Op::OpWritePipe: *hasResult = true; *hasResultType = true; break; + case Op::OpReservedReadPipe: *hasResult = true; *hasResultType = true; break; + case Op::OpReservedWritePipe: *hasResult = true; *hasResultType = true; break; + case Op::OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; + case Op::OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; + case Op::OpCommitReadPipe: *hasResult = false; *hasResultType = false; break; + case Op::OpCommitWritePipe: *hasResult = false; *hasResultType = false; break; + case Op::OpIsValidReserveId: *hasResult = true; *hasResultType = true; break; + case Op::OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break; + case Op::OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break; + case Op::OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break; + case Op::OpEnqueueMarker: *hasResult = true; *hasResultType = true; break; + case Op::OpEnqueueKernel: *hasResult = true; *hasResultType = true; break; + case Op::OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break; + case Op::OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break; + case Op::OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break; + case Op::OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break; + case Op::OpRetainEvent: *hasResult = false; *hasResultType = false; break; + case Op::OpReleaseEvent: *hasResult = false; *hasResultType = false; break; + case Op::OpCreateUserEvent: *hasResult = true; *hasResultType = true; break; + case Op::OpIsValidEvent: *hasResult = true; *hasResultType = true; break; + case Op::OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break; + case Op::OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break; + case Op::OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break; + case Op::OpBuildNDRange: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseFetch: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseGather: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break; + case Op::OpNoLine: *hasResult = false; *hasResultType = false; break; + case Op::OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break; + case Op::OpImageSparseRead: *hasResult = true; *hasResultType = true; break; + case Op::OpSizeOf: *hasResult = true; *hasResultType = true; break; + case Op::OpTypePipeStorage: *hasResult = true; *hasResultType = false; break; + case Op::OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break; + case Op::OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break; + case Op::OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break; + case Op::OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break; + case Op::OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break; + case Op::OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break; + case Op::OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break; + case Op::OpModuleProcessed: *hasResult = false; *hasResultType = false; break; + case Op::OpExecutionModeId: *hasResult = false; *hasResultType = false; break; + case Op::OpDecorateId: *hasResult = false; *hasResultType = false; break; + case Op::OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break; + case Op::OpCopyLogical: *hasResult = true; *hasResultType = true; break; + case Op::OpPtrEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; + case Op::OpPtrDiff: *hasResult = true; *hasResultType = true; break; + case Op::OpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpStencilAttachmentReadEXT: *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; + case Op::OpUntypedAccessChainKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpUntypedInBoundsAccessChainKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpUntypedPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break; + 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::OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; 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::OpTraceRayKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpSDot: *hasResult = true; *hasResultType = true; break; + case Op::OpUDot: *hasResult = true; *hasResultType = true; break; + case Op::OpSUDot: *hasResult = true; *hasResultType = true; break; + case Op::OpSDotAccSat: *hasResult = true; *hasResultType = true; break; + case Op::OpUDotAccSat: *hasResult = true; *hasResultType = true; break; + case Op::OpSUDotAccSat: *hasResult = true; *hasResultType = true; break; + case Op::OpTypeCooperativeMatrixKHR: *hasResult = true; *hasResultType = false; break; + case Op::OpCooperativeMatrixLoadKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpCooperativeMatrixStoreKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpCooperativeMatrixMulAddKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpCooperativeMatrixLengthKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpSpecConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpCompositeConstructReplicateEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; + case Op::OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpImageSampleWeightedQCOM: *hasResult = true; *hasResultType = true; break; + case Op::OpImageBoxFilterQCOM: *hasResult = true; *hasResultType = true; break; + case Op::OpImageBlockMatchSSDQCOM: *hasResult = true; *hasResultType = true; break; + case Op::OpImageBlockMatchSADQCOM: *hasResult = true; *hasResultType = true; break; + case Op::OpImageBlockMatchWindowSSDQCOM: *hasResult = true; *hasResultType = true; break; + case Op::OpImageBlockMatchWindowSADQCOM: *hasResult = true; *hasResultType = true; break; + case Op::OpImageBlockMatchGatherSSDQCOM: *hasResult = true; *hasResultType = true; break; + case Op::OpImageBlockMatchGatherSADQCOM: *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; + case Op::OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupSMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case Op::OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break; + case Op::OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break; + case Op::OpReadClockKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpAllocateNodePayloadsAMDX: *hasResult = true; *hasResultType = true; break; + case Op::OpEnqueueNodePayloadsAMDX: *hasResult = false; *hasResultType = false; break; + case Op::OpTypeNodePayloadArrayAMDX: *hasResult = true; *hasResultType = false; break; + case Op::OpFinishWritingNodePayloadAMDX: *hasResult = true; *hasResultType = true; break; + case Op::OpNodePayloadArrayLengthAMDX: *hasResult = true; *hasResultType = true; break; + case Op::OpIsNodePayloadValidAMDX: *hasResult = true; *hasResultType = true; break; + case Op::OpConstantStringAMDX: *hasResult = true; *hasResultType = false; break; + 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::OpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectGetWorldToObjectNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetObjectToWorldNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetObjectRayDirectionNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetObjectRayOriginNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectGetShaderRecordBufferHandleNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetShaderBindingTableRecordIndexNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectRecordEmptyNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectTraceRayNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectRecordHitNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectRecordHitWithIndexNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectRecordMissNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectExecuteShaderNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectGetCurrentTimeNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetAttributesNV: *hasResult = false; *hasResultType = false; break; + case Op::OpHitObjectGetHitKindNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetPrimitiveIndexNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetGeometryIndexNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetInstanceIdNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetInstanceCustomIndexNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetWorldRayDirectionNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetWorldRayOriginNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetRayTMaxNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetRayTMinNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectIsEmptyNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectIsHitNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectIsMissNV: *hasResult = true; *hasResultType = true; break; + case Op::OpReorderThreadWithHitObjectNV: *hasResult = false; *hasResultType = false; break; + 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::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::OpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break; + case Op::OpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break; + case Op::OpGroupNonUniformPartitionNV: *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; + case Op::OpCooperativeVectorLoadNV: *hasResult = true; *hasResultType = true; break; + case Op::OpCooperativeVectorStoreNV: *hasResult = false; *hasResultType = false; break; + case Op::OpReportIntersectionKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; + case Op::OpTerminateRayNV: *hasResult = false; *hasResultType = false; break; + case Op::OpTraceNV: *hasResult = false; *hasResultType = false; break; + case Op::OpTraceMotionNV: *hasResult = false; *hasResultType = false; break; + case Op::OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; + 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::OpHitObjectGetClusterIdNV: *hasResult = true; *hasResultType = true; break; + case Op::OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; + case Op::OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; + 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::OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; + case Op::OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; + case Op::OpCooperativeMatrixReduceNV: *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::OpTypeTensorLayoutNV: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeTensorViewNV: *hasResult = true; *hasResultType = false; break; + case Op::OpCreateTensorLayoutNV: *hasResult = true; *hasResultType = true; break; + case Op::OpTensorLayoutSetDimensionNV: *hasResult = true; *hasResultType = true; break; + case Op::OpTensorLayoutSetStrideNV: *hasResult = true; *hasResultType = true; break; + case Op::OpTensorLayoutSliceNV: *hasResult = true; *hasResultType = true; break; + case Op::OpTensorLayoutSetClampValueNV: *hasResult = true; *hasResultType = true; break; + case Op::OpCreateTensorViewNV: *hasResult = true; *hasResultType = true; break; + case Op::OpTensorViewSetDimensionNV: *hasResult = true; *hasResultType = true; break; + case Op::OpTensorViewSetStrideNV: *hasResult = true; *hasResultType = true; break; + case Op::OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; + case Op::OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpTensorViewSetClipNV: *hasResult = true; *hasResultType = true; break; + case Op::OpTensorLayoutSetBlockSizeNV: *hasResult = true; *hasResultType = true; break; + case Op::OpCooperativeMatrixTransposeNV: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; + case Op::OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; + case Op::OpRawAccessChainNV: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionSpherePositionNV: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionSphereRadiusNV: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionLSSPositionsNV: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionLSSRadiiNV: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionLSSHitValueNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetSpherePositionNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetSphereRadiusNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetLSSPositionsNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectGetLSSRadiiNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectIsSphereHitNV: *hasResult = true; *hasResultType = true; break; + case Op::OpHitObjectIsLSSHitNV: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryIsSphereHitNV: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryIsLSSHitNV: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpIAverageINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpUAverageINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpISubSatINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpAsmTargetINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpAsmINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; + case Op::OpExpectKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpDecorateString: *hasResult = false; *hasResultType = false; break; + case Op::OpMemberDecorateString: *hasResult = false; *hasResultType = false; break; + case Op::OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break; + case Op::OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; + 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::OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; + 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::OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; + case Op::OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; + 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::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::OpArithmeticFenceEXT: *hasResult = true; *hasResultType = true; 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; + case Op::OpSubgroup2DBlockLoadTransposeINTEL: *hasResult = false; *hasResultType = false; break; + 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::OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupBitwiseOrKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpGroupBitwiseXorKHR: *hasResult = true; *hasResultType = true; break; + 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::OpMaskedGatherINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpMaskedScatterINTEL: *hasResult = false; *hasResultType = false; break; + } +} +inline const char* SourceLanguageToString(SourceLanguage value) { + switch (value) { + case SourceLanguage::Unknown: return "Unknown"; + case SourceLanguage::ESSL: return "ESSL"; + case SourceLanguage::GLSL: return "GLSL"; + case SourceLanguage::OpenCL_C: return "OpenCL_C"; + case SourceLanguage::OpenCL_CPP: return "OpenCL_CPP"; + case SourceLanguage::HLSL: return "HLSL"; + case SourceLanguage::CPP_for_OpenCL: return "CPP_for_OpenCL"; + case SourceLanguage::SYCL: return "SYCL"; + case SourceLanguage::HERO_C: return "HERO_C"; + case SourceLanguage::NZSL: return "NZSL"; + case SourceLanguage::WGSL: return "WGSL"; + case SourceLanguage::Slang: return "Slang"; + case SourceLanguage::Zig: return "Zig"; + case SourceLanguage::Rust: return "Rust"; + default: return "Unknown"; + } +} + +inline const char* ExecutionModelToString(ExecutionModel value) { + switch (value) { + case ExecutionModel::Vertex: return "Vertex"; + case ExecutionModel::TessellationControl: return "TessellationControl"; + case ExecutionModel::TessellationEvaluation: return "TessellationEvaluation"; + case ExecutionModel::Geometry: return "Geometry"; + case ExecutionModel::Fragment: return "Fragment"; + case ExecutionModel::GLCompute: return "GLCompute"; + case ExecutionModel::Kernel: return "Kernel"; + case ExecutionModel::TaskNV: return "TaskNV"; + case ExecutionModel::MeshNV: return "MeshNV"; + case ExecutionModel::RayGenerationKHR: return "RayGenerationKHR"; + case ExecutionModel::IntersectionKHR: return "IntersectionKHR"; + case ExecutionModel::AnyHitKHR: return "AnyHitKHR"; + case ExecutionModel::ClosestHitKHR: return "ClosestHitKHR"; + case ExecutionModel::MissKHR: return "MissKHR"; + case ExecutionModel::CallableKHR: return "CallableKHR"; + case ExecutionModel::TaskEXT: return "TaskEXT"; + case ExecutionModel::MeshEXT: return "MeshEXT"; + default: return "Unknown"; + } +} + +inline const char* AddressingModelToString(AddressingModel value) { + switch (value) { + case AddressingModel::Logical: return "Logical"; + case AddressingModel::Physical32: return "Physical32"; + case AddressingModel::Physical64: return "Physical64"; + case AddressingModel::PhysicalStorageBuffer64: return "PhysicalStorageBuffer64"; + default: return "Unknown"; + } +} + +inline const char* MemoryModelToString(MemoryModel value) { + switch (value) { + case MemoryModel::Simple: return "Simple"; + case MemoryModel::GLSL450: return "GLSL450"; + case MemoryModel::OpenCL: return "OpenCL"; + case MemoryModel::Vulkan: return "Vulkan"; + default: return "Unknown"; + } +} + +inline const char* ExecutionModeToString(ExecutionMode value) { + switch (value) { + case ExecutionMode::Invocations: return "Invocations"; + case ExecutionMode::SpacingEqual: return "SpacingEqual"; + case ExecutionMode::SpacingFractionalEven: return "SpacingFractionalEven"; + case ExecutionMode::SpacingFractionalOdd: return "SpacingFractionalOdd"; + case ExecutionMode::VertexOrderCw: return "VertexOrderCw"; + case ExecutionMode::VertexOrderCcw: return "VertexOrderCcw"; + case ExecutionMode::PixelCenterInteger: return "PixelCenterInteger"; + case ExecutionMode::OriginUpperLeft: return "OriginUpperLeft"; + case ExecutionMode::OriginLowerLeft: return "OriginLowerLeft"; + case ExecutionMode::EarlyFragmentTests: return "EarlyFragmentTests"; + case ExecutionMode::PointMode: return "PointMode"; + case ExecutionMode::Xfb: return "Xfb"; + case ExecutionMode::DepthReplacing: return "DepthReplacing"; + case ExecutionMode::DepthGreater: return "DepthGreater"; + case ExecutionMode::DepthLess: return "DepthLess"; + case ExecutionMode::DepthUnchanged: return "DepthUnchanged"; + case ExecutionMode::LocalSize: return "LocalSize"; + case ExecutionMode::LocalSizeHint: return "LocalSizeHint"; + case ExecutionMode::InputPoints: return "InputPoints"; + case ExecutionMode::InputLines: return "InputLines"; + case ExecutionMode::InputLinesAdjacency: return "InputLinesAdjacency"; + case ExecutionMode::Triangles: return "Triangles"; + case ExecutionMode::InputTrianglesAdjacency: return "InputTrianglesAdjacency"; + case ExecutionMode::Quads: return "Quads"; + case ExecutionMode::Isolines: return "Isolines"; + case ExecutionMode::OutputVertices: return "OutputVertices"; + case ExecutionMode::OutputPoints: return "OutputPoints"; + case ExecutionMode::OutputLineStrip: return "OutputLineStrip"; + case ExecutionMode::OutputTriangleStrip: return "OutputTriangleStrip"; + case ExecutionMode::VecTypeHint: return "VecTypeHint"; + case ExecutionMode::ContractionOff: return "ContractionOff"; + case ExecutionMode::Initializer: return "Initializer"; + case ExecutionMode::Finalizer: return "Finalizer"; + case ExecutionMode::SubgroupSize: return "SubgroupSize"; + case ExecutionMode::SubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup"; + case ExecutionMode::SubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId"; + case ExecutionMode::LocalSizeId: return "LocalSizeId"; + case ExecutionMode::LocalSizeHintId: return "LocalSizeHintId"; + case ExecutionMode::NonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT"; + case ExecutionMode::NonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT"; + case ExecutionMode::NonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT"; + case ExecutionMode::SubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlowKHR"; + case ExecutionMode::PostDepthCoverage: return "PostDepthCoverage"; + case ExecutionMode::DenormPreserve: return "DenormPreserve"; + case ExecutionMode::DenormFlushToZero: return "DenormFlushToZero"; + case ExecutionMode::SignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; + case ExecutionMode::RoundingModeRTE: return "RoundingModeRTE"; + case ExecutionMode::RoundingModeRTZ: return "RoundingModeRTZ"; + case ExecutionMode::EarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD"; + case ExecutionMode::StencilRefReplacingEXT: return "StencilRefReplacingEXT"; + case ExecutionMode::CoalescingAMDX: return "CoalescingAMDX"; + case ExecutionMode::IsApiEntryAMDX: return "IsApiEntryAMDX"; + case ExecutionMode::MaxNodeRecursionAMDX: return "MaxNodeRecursionAMDX"; + case ExecutionMode::StaticNumWorkgroupsAMDX: return "StaticNumWorkgroupsAMDX"; + case ExecutionMode::ShaderIndexAMDX: return "ShaderIndexAMDX"; + case ExecutionMode::MaxNumWorkgroupsAMDX: return "MaxNumWorkgroupsAMDX"; + case ExecutionMode::StencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD"; + case ExecutionMode::StencilRefGreaterFrontAMD: return "StencilRefGreaterFrontAMD"; + case ExecutionMode::StencilRefLessFrontAMD: return "StencilRefLessFrontAMD"; + case ExecutionMode::StencilRefUnchangedBackAMD: return "StencilRefUnchangedBackAMD"; + case ExecutionMode::StencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD"; + case ExecutionMode::StencilRefLessBackAMD: return "StencilRefLessBackAMD"; + case ExecutionMode::QuadDerivativesKHR: return "QuadDerivativesKHR"; + case ExecutionMode::RequireFullQuadsKHR: return "RequireFullQuadsKHR"; + case ExecutionMode::SharesInputWithAMDX: return "SharesInputWithAMDX"; + case ExecutionMode::OutputLinesEXT: return "OutputLinesEXT"; + case ExecutionMode::OutputPrimitivesEXT: return "OutputPrimitivesEXT"; + case ExecutionMode::DerivativeGroupQuadsKHR: return "DerivativeGroupQuadsKHR"; + case ExecutionMode::DerivativeGroupLinearKHR: return "DerivativeGroupLinearKHR"; + case ExecutionMode::OutputTrianglesEXT: return "OutputTrianglesEXT"; + case ExecutionMode::PixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT"; + case ExecutionMode::PixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT"; + case ExecutionMode::SampleInterlockOrderedEXT: return "SampleInterlockOrderedEXT"; + case ExecutionMode::SampleInterlockUnorderedEXT: return "SampleInterlockUnorderedEXT"; + case ExecutionMode::ShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT"; + case ExecutionMode::ShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT"; + case ExecutionMode::SharedLocalMemorySizeINTEL: return "SharedLocalMemorySizeINTEL"; + case ExecutionMode::RoundingModeRTPINTEL: return "RoundingModeRTPINTEL"; + case ExecutionMode::RoundingModeRTNINTEL: return "RoundingModeRTNINTEL"; + case ExecutionMode::FloatingPointModeALTINTEL: return "FloatingPointModeALTINTEL"; + case ExecutionMode::FloatingPointModeIEEEINTEL: return "FloatingPointModeIEEEINTEL"; + case ExecutionMode::MaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL"; + case ExecutionMode::MaxWorkDimINTEL: return "MaxWorkDimINTEL"; + case ExecutionMode::NoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL"; + case ExecutionMode::NumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL"; + case ExecutionMode::SchedulerTargetFmaxMhzINTEL: return "SchedulerTargetFmaxMhzINTEL"; + case ExecutionMode::MaximallyReconvergesKHR: return "MaximallyReconvergesKHR"; + case ExecutionMode::FPFastMathDefault: return "FPFastMathDefault"; + case ExecutionMode::StreamingInterfaceINTEL: return "StreamingInterfaceINTEL"; + case ExecutionMode::RegisterMapInterfaceINTEL: return "RegisterMapInterfaceINTEL"; + case ExecutionMode::NamedBarrierCountINTEL: return "NamedBarrierCountINTEL"; + case ExecutionMode::MaximumRegistersINTEL: return "MaximumRegistersINTEL"; + case ExecutionMode::MaximumRegistersIdINTEL: return "MaximumRegistersIdINTEL"; + case ExecutionMode::NamedMaximumRegistersINTEL: return "NamedMaximumRegistersINTEL"; + default: return "Unknown"; + } +} + +inline const char* StorageClassToString(StorageClass value) { + switch (value) { + case StorageClass::UniformConstant: return "UniformConstant"; + case StorageClass::Input: return "Input"; + case StorageClass::Uniform: return "Uniform"; + case StorageClass::Output: return "Output"; + case StorageClass::Workgroup: return "Workgroup"; + case StorageClass::CrossWorkgroup: return "CrossWorkgroup"; + case StorageClass::Private: return "Private"; + case StorageClass::Function: return "Function"; + case StorageClass::Generic: return "Generic"; + case StorageClass::PushConstant: return "PushConstant"; + case StorageClass::AtomicCounter: return "AtomicCounter"; + case StorageClass::Image: return "Image"; + case StorageClass::StorageBuffer: return "StorageBuffer"; + case StorageClass::TileImageEXT: return "TileImageEXT"; + case StorageClass::NodePayloadAMDX: return "NodePayloadAMDX"; + case StorageClass::CallableDataKHR: return "CallableDataKHR"; + case StorageClass::IncomingCallableDataKHR: return "IncomingCallableDataKHR"; + case StorageClass::RayPayloadKHR: return "RayPayloadKHR"; + case StorageClass::HitAttributeKHR: return "HitAttributeKHR"; + case StorageClass::IncomingRayPayloadKHR: return "IncomingRayPayloadKHR"; + case StorageClass::ShaderRecordBufferKHR: return "ShaderRecordBufferKHR"; + case StorageClass::PhysicalStorageBuffer: return "PhysicalStorageBuffer"; + case StorageClass::HitObjectAttributeNV: return "HitObjectAttributeNV"; + case StorageClass::TaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT"; + case StorageClass::CodeSectionINTEL: return "CodeSectionINTEL"; + case StorageClass::DeviceOnlyINTEL: return "DeviceOnlyINTEL"; + case StorageClass::HostOnlyINTEL: return "HostOnlyINTEL"; + default: return "Unknown"; + } +} + +inline const char* DimToString(Dim value) { + switch (value) { + case Dim::Dim1D: return "1D"; + case Dim::Dim2D: return "2D"; + case Dim::Dim3D: return "3D"; + case Dim::Cube: return "Cube"; + case Dim::Rect: return "Rect"; + case Dim::Buffer: return "Buffer"; + case Dim::SubpassData: return "SubpassData"; + case Dim::TileImageDataEXT: return "TileImageDataEXT"; + default: return "Unknown"; + } +} + +inline const char* SamplerAddressingModeToString(SamplerAddressingMode value) { + switch (value) { + case SamplerAddressingMode::None: return "None"; + case SamplerAddressingMode::ClampToEdge: return "ClampToEdge"; + case SamplerAddressingMode::Clamp: return "Clamp"; + case SamplerAddressingMode::Repeat: return "Repeat"; + case SamplerAddressingMode::RepeatMirrored: return "RepeatMirrored"; + default: return "Unknown"; + } +} + +inline const char* SamplerFilterModeToString(SamplerFilterMode value) { + switch (value) { + case SamplerFilterMode::Nearest: return "Nearest"; + case SamplerFilterMode::Linear: return "Linear"; + default: return "Unknown"; + } +} + +inline const char* ImageFormatToString(ImageFormat value) { + switch (value) { + case ImageFormat::Unknown: return "Unknown"; + case ImageFormat::Rgba32f: return "Rgba32f"; + case ImageFormat::Rgba16f: return "Rgba16f"; + case ImageFormat::R32f: return "R32f"; + case ImageFormat::Rgba8: return "Rgba8"; + case ImageFormat::Rgba8Snorm: return "Rgba8Snorm"; + case ImageFormat::Rg32f: return "Rg32f"; + case ImageFormat::Rg16f: return "Rg16f"; + case ImageFormat::R11fG11fB10f: return "R11fG11fB10f"; + case ImageFormat::R16f: return "R16f"; + case ImageFormat::Rgba16: return "Rgba16"; + case ImageFormat::Rgb10A2: return "Rgb10A2"; + case ImageFormat::Rg16: return "Rg16"; + case ImageFormat::Rg8: return "Rg8"; + case ImageFormat::R16: return "R16"; + case ImageFormat::R8: return "R8"; + case ImageFormat::Rgba16Snorm: return "Rgba16Snorm"; + case ImageFormat::Rg16Snorm: return "Rg16Snorm"; + case ImageFormat::Rg8Snorm: return "Rg8Snorm"; + case ImageFormat::R16Snorm: return "R16Snorm"; + case ImageFormat::R8Snorm: return "R8Snorm"; + case ImageFormat::Rgba32i: return "Rgba32i"; + case ImageFormat::Rgba16i: return "Rgba16i"; + case ImageFormat::Rgba8i: return "Rgba8i"; + case ImageFormat::R32i: return "R32i"; + case ImageFormat::Rg32i: return "Rg32i"; + case ImageFormat::Rg16i: return "Rg16i"; + case ImageFormat::Rg8i: return "Rg8i"; + case ImageFormat::R16i: return "R16i"; + case ImageFormat::R8i: return "R8i"; + case ImageFormat::Rgba32ui: return "Rgba32ui"; + case ImageFormat::Rgba16ui: return "Rgba16ui"; + case ImageFormat::Rgba8ui: return "Rgba8ui"; + case ImageFormat::R32ui: return "R32ui"; + case ImageFormat::Rgb10a2ui: return "Rgb10a2ui"; + case ImageFormat::Rg32ui: return "Rg32ui"; + case ImageFormat::Rg16ui: return "Rg16ui"; + case ImageFormat::Rg8ui: return "Rg8ui"; + case ImageFormat::R16ui: return "R16ui"; + case ImageFormat::R8ui: return "R8ui"; + case ImageFormat::R64ui: return "R64ui"; + case ImageFormat::R64i: return "R64i"; + default: return "Unknown"; + } +} + +inline const char* ImageChannelOrderToString(ImageChannelOrder value) { + switch (value) { + case ImageChannelOrder::R: return "R"; + case ImageChannelOrder::A: return "A"; + case ImageChannelOrder::RG: return "RG"; + case ImageChannelOrder::RA: return "RA"; + case ImageChannelOrder::RGB: return "RGB"; + case ImageChannelOrder::RGBA: return "RGBA"; + case ImageChannelOrder::BGRA: return "BGRA"; + case ImageChannelOrder::ARGB: return "ARGB"; + case ImageChannelOrder::Intensity: return "Intensity"; + case ImageChannelOrder::Luminance: return "Luminance"; + case ImageChannelOrder::Rx: return "Rx"; + case ImageChannelOrder::RGx: return "RGx"; + case ImageChannelOrder::RGBx: return "RGBx"; + case ImageChannelOrder::Depth: return "Depth"; + case ImageChannelOrder::DepthStencil: return "DepthStencil"; + case ImageChannelOrder::sRGB: return "sRGB"; + case ImageChannelOrder::sRGBx: return "sRGBx"; + case ImageChannelOrder::sRGBA: return "sRGBA"; + case ImageChannelOrder::sBGRA: return "sBGRA"; + case ImageChannelOrder::ABGR: return "ABGR"; + default: return "Unknown"; + } +} + +inline const char* ImageChannelDataTypeToString(ImageChannelDataType value) { + switch (value) { + case ImageChannelDataType::SnormInt8: return "SnormInt8"; + case ImageChannelDataType::SnormInt16: return "SnormInt16"; + case ImageChannelDataType::UnormInt8: return "UnormInt8"; + case ImageChannelDataType::UnormInt16: return "UnormInt16"; + case ImageChannelDataType::UnormShort565: return "UnormShort565"; + case ImageChannelDataType::UnormShort555: return "UnormShort555"; + case ImageChannelDataType::UnormInt101010: return "UnormInt101010"; + case ImageChannelDataType::SignedInt8: return "SignedInt8"; + case ImageChannelDataType::SignedInt16: return "SignedInt16"; + case ImageChannelDataType::SignedInt32: return "SignedInt32"; + case ImageChannelDataType::UnsignedInt8: return "UnsignedInt8"; + case ImageChannelDataType::UnsignedInt16: return "UnsignedInt16"; + case ImageChannelDataType::UnsignedInt32: return "UnsignedInt32"; + case ImageChannelDataType::HalfFloat: return "HalfFloat"; + case ImageChannelDataType::Float: return "Float"; + case ImageChannelDataType::UnormInt24: return "UnormInt24"; + case ImageChannelDataType::UnormInt101010_2: return "UnormInt101010_2"; + case ImageChannelDataType::UnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT"; + case ImageChannelDataType::UnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT"; + case ImageChannelDataType::UnormInt2_101010EXT: return "UnormInt2_101010EXT"; + default: return "Unknown"; + } +} + +inline const char* FPRoundingModeToString(FPRoundingMode value) { + switch (value) { + case FPRoundingMode::RTE: return "RTE"; + case FPRoundingMode::RTZ: return "RTZ"; + case FPRoundingMode::RTP: return "RTP"; + case FPRoundingMode::RTN: return "RTN"; + default: return "Unknown"; + } +} + +inline const char* LinkageTypeToString(LinkageType value) { + switch (value) { + case LinkageType::Export: return "Export"; + case LinkageType::Import: return "Import"; + case LinkageType::LinkOnceODR: return "LinkOnceODR"; + default: return "Unknown"; + } +} + +inline const char* AccessQualifierToString(AccessQualifier value) { + switch (value) { + case AccessQualifier::ReadOnly: return "ReadOnly"; + case AccessQualifier::WriteOnly: return "WriteOnly"; + case AccessQualifier::ReadWrite: return "ReadWrite"; + default: return "Unknown"; + } +} + +inline const char* FunctionParameterAttributeToString(FunctionParameterAttribute value) { + switch (value) { + case FunctionParameterAttribute::Zext: return "Zext"; + case FunctionParameterAttribute::Sext: return "Sext"; + case FunctionParameterAttribute::ByVal: return "ByVal"; + case FunctionParameterAttribute::Sret: return "Sret"; + case FunctionParameterAttribute::NoAlias: return "NoAlias"; + case FunctionParameterAttribute::NoCapture: return "NoCapture"; + case FunctionParameterAttribute::NoWrite: return "NoWrite"; + case FunctionParameterAttribute::NoReadWrite: return "NoReadWrite"; + case FunctionParameterAttribute::RuntimeAlignedINTEL: return "RuntimeAlignedINTEL"; + default: return "Unknown"; + } +} + +inline const char* DecorationToString(Decoration value) { + switch (value) { + case Decoration::RelaxedPrecision: return "RelaxedPrecision"; + case Decoration::SpecId: return "SpecId"; + case Decoration::Block: return "Block"; + case Decoration::BufferBlock: return "BufferBlock"; + case Decoration::RowMajor: return "RowMajor"; + case Decoration::ColMajor: return "ColMajor"; + case Decoration::ArrayStride: return "ArrayStride"; + case Decoration::MatrixStride: return "MatrixStride"; + case Decoration::GLSLShared: return "GLSLShared"; + case Decoration::GLSLPacked: return "GLSLPacked"; + case Decoration::CPacked: return "CPacked"; + case Decoration::BuiltIn: return "BuiltIn"; + case Decoration::NoPerspective: return "NoPerspective"; + case Decoration::Flat: return "Flat"; + case Decoration::Patch: return "Patch"; + case Decoration::Centroid: return "Centroid"; + case Decoration::Sample: return "Sample"; + case Decoration::Invariant: return "Invariant"; + case Decoration::Restrict: return "Restrict"; + case Decoration::Aliased: return "Aliased"; + case Decoration::Volatile: return "Volatile"; + case Decoration::Constant: return "Constant"; + case Decoration::Coherent: return "Coherent"; + case Decoration::NonWritable: return "NonWritable"; + case Decoration::NonReadable: return "NonReadable"; + case Decoration::Uniform: return "Uniform"; + case Decoration::UniformId: return "UniformId"; + case Decoration::SaturatedConversion: return "SaturatedConversion"; + case Decoration::Stream: return "Stream"; + case Decoration::Location: return "Location"; + case Decoration::Component: return "Component"; + case Decoration::Index: return "Index"; + case Decoration::Binding: return "Binding"; + case Decoration::DescriptorSet: return "DescriptorSet"; + case Decoration::Offset: return "Offset"; + case Decoration::XfbBuffer: return "XfbBuffer"; + case Decoration::XfbStride: return "XfbStride"; + case Decoration::FuncParamAttr: return "FuncParamAttr"; + case Decoration::FPRoundingMode: return "FPRoundingMode"; + case Decoration::FPFastMathMode: return "FPFastMathMode"; + case Decoration::LinkageAttributes: return "LinkageAttributes"; + case Decoration::NoContraction: return "NoContraction"; + case Decoration::InputAttachmentIndex: return "InputAttachmentIndex"; + case Decoration::Alignment: return "Alignment"; + case Decoration::MaxByteOffset: return "MaxByteOffset"; + case Decoration::AlignmentId: return "AlignmentId"; + case Decoration::MaxByteOffsetId: return "MaxByteOffsetId"; + case Decoration::NoSignedWrap: return "NoSignedWrap"; + case Decoration::NoUnsignedWrap: return "NoUnsignedWrap"; + case Decoration::WeightTextureQCOM: return "WeightTextureQCOM"; + case Decoration::BlockMatchTextureQCOM: return "BlockMatchTextureQCOM"; + case Decoration::BlockMatchSamplerQCOM: return "BlockMatchSamplerQCOM"; + case Decoration::ExplicitInterpAMD: return "ExplicitInterpAMD"; + case Decoration::NodeSharesPayloadLimitsWithAMDX: return "NodeSharesPayloadLimitsWithAMDX"; + case Decoration::NodeMaxPayloadsAMDX: return "NodeMaxPayloadsAMDX"; + case Decoration::TrackFinishWritingAMDX: return "TrackFinishWritingAMDX"; + case Decoration::PayloadNodeNameAMDX: return "PayloadNodeNameAMDX"; + case Decoration::PayloadNodeBaseIndexAMDX: return "PayloadNodeBaseIndexAMDX"; + case Decoration::PayloadNodeSparseArrayAMDX: return "PayloadNodeSparseArrayAMDX"; + case Decoration::PayloadNodeArraySizeAMDX: return "PayloadNodeArraySizeAMDX"; + case Decoration::PayloadDispatchIndirectAMDX: return "PayloadDispatchIndirectAMDX"; + case Decoration::OverrideCoverageNV: return "OverrideCoverageNV"; + case Decoration::PassthroughNV: return "PassthroughNV"; + case Decoration::ViewportRelativeNV: return "ViewportRelativeNV"; + case Decoration::SecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV"; + case Decoration::PerPrimitiveEXT: return "PerPrimitiveEXT"; + case Decoration::PerViewNV: return "PerViewNV"; + case Decoration::PerTaskNV: return "PerTaskNV"; + case Decoration::PerVertexKHR: return "PerVertexKHR"; + case Decoration::NonUniform: return "NonUniform"; + case Decoration::RestrictPointer: return "RestrictPointer"; + case Decoration::AliasedPointer: return "AliasedPointer"; + case Decoration::HitObjectShaderRecordBufferNV: return "HitObjectShaderRecordBufferNV"; + case Decoration::BindlessSamplerNV: return "BindlessSamplerNV"; + case Decoration::BindlessImageNV: return "BindlessImageNV"; + case Decoration::BoundSamplerNV: return "BoundSamplerNV"; + case Decoration::BoundImageNV: return "BoundImageNV"; + case Decoration::SIMTCallINTEL: return "SIMTCallINTEL"; + case Decoration::ReferencedIndirectlyINTEL: return "ReferencedIndirectlyINTEL"; + case Decoration::ClobberINTEL: return "ClobberINTEL"; + case Decoration::SideEffectsINTEL: return "SideEffectsINTEL"; + case Decoration::VectorComputeVariableINTEL: return "VectorComputeVariableINTEL"; + case Decoration::FuncParamIOKindINTEL: return "FuncParamIOKindINTEL"; + case Decoration::VectorComputeFunctionINTEL: return "VectorComputeFunctionINTEL"; + case Decoration::StackCallINTEL: return "StackCallINTEL"; + case Decoration::GlobalVariableOffsetINTEL: return "GlobalVariableOffsetINTEL"; + case Decoration::CounterBuffer: return "CounterBuffer"; + case Decoration::HlslSemanticGOOGLE: return "HlslSemanticGOOGLE"; + 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::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::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::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::HostAccessINTEL: return "HostAccessINTEL"; + case Decoration::InitModeINTEL: return "InitModeINTEL"; + case Decoration::ImplementInRegisterMapINTEL: return "ImplementInRegisterMapINTEL"; + case Decoration::CacheControlLoadINTEL: return "CacheControlLoadINTEL"; + case Decoration::CacheControlStoreINTEL: return "CacheControlStoreINTEL"; + default: return "Unknown"; + } +} + +inline const char* BuiltInToString(BuiltIn value) { + switch (value) { + case BuiltIn::Position: return "Position"; + case BuiltIn::PointSize: return "PointSize"; + case BuiltIn::ClipDistance: return "ClipDistance"; + case BuiltIn::CullDistance: return "CullDistance"; + case BuiltIn::VertexId: return "VertexId"; + case BuiltIn::InstanceId: return "InstanceId"; + case BuiltIn::PrimitiveId: return "PrimitiveId"; + case BuiltIn::InvocationId: return "InvocationId"; + case BuiltIn::Layer: return "Layer"; + case BuiltIn::ViewportIndex: return "ViewportIndex"; + case BuiltIn::TessLevelOuter: return "TessLevelOuter"; + case BuiltIn::TessLevelInner: return "TessLevelInner"; + case BuiltIn::TessCoord: return "TessCoord"; + case BuiltIn::PatchVertices: return "PatchVertices"; + case BuiltIn::FragCoord: return "FragCoord"; + case BuiltIn::PointCoord: return "PointCoord"; + case BuiltIn::FrontFacing: return "FrontFacing"; + case BuiltIn::SampleId: return "SampleId"; + case BuiltIn::SamplePosition: return "SamplePosition"; + case BuiltIn::SampleMask: return "SampleMask"; + case BuiltIn::FragDepth: return "FragDepth"; + case BuiltIn::HelperInvocation: return "HelperInvocation"; + case BuiltIn::NumWorkgroups: return "NumWorkgroups"; + case BuiltIn::WorkgroupSize: return "WorkgroupSize"; + case BuiltIn::WorkgroupId: return "WorkgroupId"; + case BuiltIn::LocalInvocationId: return "LocalInvocationId"; + case BuiltIn::GlobalInvocationId: return "GlobalInvocationId"; + case BuiltIn::LocalInvocationIndex: return "LocalInvocationIndex"; + case BuiltIn::WorkDim: return "WorkDim"; + case BuiltIn::GlobalSize: return "GlobalSize"; + case BuiltIn::EnqueuedWorkgroupSize: return "EnqueuedWorkgroupSize"; + case BuiltIn::GlobalOffset: return "GlobalOffset"; + case BuiltIn::GlobalLinearId: return "GlobalLinearId"; + case BuiltIn::SubgroupSize: return "SubgroupSize"; + case BuiltIn::SubgroupMaxSize: return "SubgroupMaxSize"; + case BuiltIn::NumSubgroups: return "NumSubgroups"; + case BuiltIn::NumEnqueuedSubgroups: return "NumEnqueuedSubgroups"; + case BuiltIn::SubgroupId: return "SubgroupId"; + case BuiltIn::SubgroupLocalInvocationId: return "SubgroupLocalInvocationId"; + case BuiltIn::VertexIndex: return "VertexIndex"; + case BuiltIn::InstanceIndex: return "InstanceIndex"; + case BuiltIn::CoreIDARM: return "CoreIDARM"; + case BuiltIn::CoreCountARM: return "CoreCountARM"; + case BuiltIn::CoreMaxIDARM: return "CoreMaxIDARM"; + case BuiltIn::WarpIDARM: return "WarpIDARM"; + case BuiltIn::WarpMaxIDARM: return "WarpMaxIDARM"; + case BuiltIn::SubgroupEqMask: return "SubgroupEqMask"; + case BuiltIn::SubgroupGeMask: return "SubgroupGeMask"; + case BuiltIn::SubgroupGtMask: return "SubgroupGtMask"; + case BuiltIn::SubgroupLeMask: return "SubgroupLeMask"; + case BuiltIn::SubgroupLtMask: return "SubgroupLtMask"; + case BuiltIn::BaseVertex: return "BaseVertex"; + case BuiltIn::BaseInstance: return "BaseInstance"; + case BuiltIn::DrawIndex: return "DrawIndex"; + case BuiltIn::PrimitiveShadingRateKHR: return "PrimitiveShadingRateKHR"; + case BuiltIn::DeviceIndex: return "DeviceIndex"; + case BuiltIn::ViewIndex: return "ViewIndex"; + case BuiltIn::ShadingRateKHR: return "ShadingRateKHR"; + case BuiltIn::BaryCoordNoPerspAMD: return "BaryCoordNoPerspAMD"; + case BuiltIn::BaryCoordNoPerspCentroidAMD: return "BaryCoordNoPerspCentroidAMD"; + case BuiltIn::BaryCoordNoPerspSampleAMD: return "BaryCoordNoPerspSampleAMD"; + case BuiltIn::BaryCoordSmoothAMD: return "BaryCoordSmoothAMD"; + case BuiltIn::BaryCoordSmoothCentroidAMD: return "BaryCoordSmoothCentroidAMD"; + case BuiltIn::BaryCoordSmoothSampleAMD: return "BaryCoordSmoothSampleAMD"; + case BuiltIn::BaryCoordPullModelAMD: return "BaryCoordPullModelAMD"; + case BuiltIn::FragStencilRefEXT: return "FragStencilRefEXT"; + case BuiltIn::RemainingRecursionLevelsAMDX: return "RemainingRecursionLevelsAMDX"; + case BuiltIn::ShaderIndexAMDX: return "ShaderIndexAMDX"; + case BuiltIn::ViewportMaskNV: return "ViewportMaskNV"; + case BuiltIn::SecondaryPositionNV: return "SecondaryPositionNV"; + case BuiltIn::SecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; + case BuiltIn::PositionPerViewNV: return "PositionPerViewNV"; + case BuiltIn::ViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; + case BuiltIn::FullyCoveredEXT: return "FullyCoveredEXT"; + case BuiltIn::TaskCountNV: return "TaskCountNV"; + case BuiltIn::PrimitiveCountNV: return "PrimitiveCountNV"; + case BuiltIn::PrimitiveIndicesNV: return "PrimitiveIndicesNV"; + case BuiltIn::ClipDistancePerViewNV: return "ClipDistancePerViewNV"; + case BuiltIn::CullDistancePerViewNV: return "CullDistancePerViewNV"; + case BuiltIn::LayerPerViewNV: return "LayerPerViewNV"; + case BuiltIn::MeshViewCountNV: return "MeshViewCountNV"; + case BuiltIn::MeshViewIndicesNV: return "MeshViewIndicesNV"; + case BuiltIn::BaryCoordKHR: return "BaryCoordKHR"; + case BuiltIn::BaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR"; + case BuiltIn::FragSizeEXT: return "FragSizeEXT"; + case BuiltIn::FragInvocationCountEXT: return "FragInvocationCountEXT"; + case BuiltIn::PrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT"; + case BuiltIn::PrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT"; + case BuiltIn::PrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT"; + case BuiltIn::CullPrimitiveEXT: return "CullPrimitiveEXT"; + case BuiltIn::LaunchIdKHR: return "LaunchIdKHR"; + case BuiltIn::LaunchSizeKHR: return "LaunchSizeKHR"; + case BuiltIn::WorldRayOriginKHR: return "WorldRayOriginKHR"; + case BuiltIn::WorldRayDirectionKHR: return "WorldRayDirectionKHR"; + case BuiltIn::ObjectRayOriginKHR: return "ObjectRayOriginKHR"; + case BuiltIn::ObjectRayDirectionKHR: return "ObjectRayDirectionKHR"; + case BuiltIn::RayTminKHR: return "RayTminKHR"; + case BuiltIn::RayTmaxKHR: return "RayTmaxKHR"; + case BuiltIn::InstanceCustomIndexKHR: return "InstanceCustomIndexKHR"; + case BuiltIn::ObjectToWorldKHR: return "ObjectToWorldKHR"; + case BuiltIn::WorldToObjectKHR: return "WorldToObjectKHR"; + case BuiltIn::HitTNV: return "HitTNV"; + case BuiltIn::HitKindKHR: return "HitKindKHR"; + case BuiltIn::CurrentRayTimeNV: return "CurrentRayTimeNV"; + case BuiltIn::HitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR"; + case BuiltIn::HitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV"; + case BuiltIn::HitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV"; + case BuiltIn::IncomingRayFlagsKHR: return "IncomingRayFlagsKHR"; + case BuiltIn::RayGeometryIndexKHR: return "RayGeometryIndexKHR"; + case BuiltIn::HitIsSphereNV: return "HitIsSphereNV"; + case BuiltIn::HitIsLSSNV: return "HitIsLSSNV"; + case BuiltIn::HitSpherePositionNV: return "HitSpherePositionNV"; + case BuiltIn::WarpsPerSMNV: return "WarpsPerSMNV"; + case BuiltIn::SMCountNV: return "SMCountNV"; + case BuiltIn::WarpIDNV: return "WarpIDNV"; + case BuiltIn::SMIDNV: return "SMIDNV"; + case BuiltIn::HitLSSPositionsNV: return "HitLSSPositionsNV"; + case BuiltIn::HitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV"; + case BuiltIn::HitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV"; + case BuiltIn::HitSphereRadiusNV: return "HitSphereRadiusNV"; + case BuiltIn::HitLSSRadiiNV: return "HitLSSRadiiNV"; + case BuiltIn::ClusterIDNV: return "ClusterIDNV"; + case BuiltIn::CullMaskKHR: return "CullMaskKHR"; + default: return "Unknown"; + } +} + +inline const char* ScopeToString(Scope value) { + switch (value) { + case Scope::CrossDevice: return "CrossDevice"; + case Scope::Device: return "Device"; + case Scope::Workgroup: return "Workgroup"; + case Scope::Subgroup: return "Subgroup"; + case Scope::Invocation: return "Invocation"; + case Scope::QueueFamily: return "QueueFamily"; + case Scope::ShaderCallKHR: return "ShaderCallKHR"; + default: return "Unknown"; + } +} + +inline const char* GroupOperationToString(GroupOperation value) { + switch (value) { + case GroupOperation::Reduce: return "Reduce"; + 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"; + default: return "Unknown"; + } +} + +inline const char* KernelEnqueueFlagsToString(KernelEnqueueFlags value) { + switch (value) { + case KernelEnqueueFlags::NoWait: return "NoWait"; + case KernelEnqueueFlags::WaitKernel: return "WaitKernel"; + case KernelEnqueueFlags::WaitWorkGroup: return "WaitWorkGroup"; + default: return "Unknown"; + } +} + +inline const char* CapabilityToString(Capability value) { + switch (value) { + case Capability::Matrix: return "Matrix"; + case Capability::Shader: return "Shader"; + case Capability::Geometry: return "Geometry"; + case Capability::Tessellation: return "Tessellation"; + case Capability::Addresses: return "Addresses"; + case Capability::Linkage: return "Linkage"; + case Capability::Kernel: return "Kernel"; + case Capability::Vector16: return "Vector16"; + case Capability::Float16Buffer: return "Float16Buffer"; + case Capability::Float16: return "Float16"; + case Capability::Float64: return "Float64"; + case Capability::Int64: return "Int64"; + case Capability::Int64Atomics: return "Int64Atomics"; + case Capability::ImageBasic: return "ImageBasic"; + case Capability::ImageReadWrite: return "ImageReadWrite"; + case Capability::ImageMipmap: return "ImageMipmap"; + case Capability::Pipes: return "Pipes"; + case Capability::Groups: return "Groups"; + case Capability::DeviceEnqueue: return "DeviceEnqueue"; + case Capability::LiteralSampler: return "LiteralSampler"; + case Capability::AtomicStorage: return "AtomicStorage"; + case Capability::Int16: return "Int16"; + case Capability::TessellationPointSize: return "TessellationPointSize"; + case Capability::GeometryPointSize: return "GeometryPointSize"; + case Capability::ImageGatherExtended: return "ImageGatherExtended"; + case Capability::StorageImageMultisample: return "StorageImageMultisample"; + case Capability::UniformBufferArrayDynamicIndexing: return "UniformBufferArrayDynamicIndexing"; + case Capability::SampledImageArrayDynamicIndexing: return "SampledImageArrayDynamicIndexing"; + case Capability::StorageBufferArrayDynamicIndexing: return "StorageBufferArrayDynamicIndexing"; + case Capability::StorageImageArrayDynamicIndexing: return "StorageImageArrayDynamicIndexing"; + case Capability::ClipDistance: return "ClipDistance"; + case Capability::CullDistance: return "CullDistance"; + case Capability::ImageCubeArray: return "ImageCubeArray"; + case Capability::SampleRateShading: return "SampleRateShading"; + case Capability::ImageRect: return "ImageRect"; + case Capability::SampledRect: return "SampledRect"; + case Capability::GenericPointer: return "GenericPointer"; + case Capability::Int8: return "Int8"; + case Capability::InputAttachment: return "InputAttachment"; + case Capability::SparseResidency: return "SparseResidency"; + case Capability::MinLod: return "MinLod"; + case Capability::Sampled1D: return "Sampled1D"; + case Capability::Image1D: return "Image1D"; + case Capability::SampledCubeArray: return "SampledCubeArray"; + case Capability::SampledBuffer: return "SampledBuffer"; + case Capability::ImageBuffer: return "ImageBuffer"; + case Capability::ImageMSArray: return "ImageMSArray"; + case Capability::StorageImageExtendedFormats: return "StorageImageExtendedFormats"; + case Capability::ImageQuery: return "ImageQuery"; + case Capability::DerivativeControl: return "DerivativeControl"; + case Capability::InterpolationFunction: return "InterpolationFunction"; + case Capability::TransformFeedback: return "TransformFeedback"; + case Capability::GeometryStreams: return "GeometryStreams"; + case Capability::StorageImageReadWithoutFormat: return "StorageImageReadWithoutFormat"; + case Capability::StorageImageWriteWithoutFormat: return "StorageImageWriteWithoutFormat"; + case Capability::MultiViewport: return "MultiViewport"; + case Capability::SubgroupDispatch: return "SubgroupDispatch"; + case Capability::NamedBarrier: return "NamedBarrier"; + case Capability::PipeStorage: return "PipeStorage"; + case Capability::GroupNonUniform: return "GroupNonUniform"; + case Capability::GroupNonUniformVote: return "GroupNonUniformVote"; + case Capability::GroupNonUniformArithmetic: return "GroupNonUniformArithmetic"; + case Capability::GroupNonUniformBallot: return "GroupNonUniformBallot"; + case Capability::GroupNonUniformShuffle: return "GroupNonUniformShuffle"; + case Capability::GroupNonUniformShuffleRelative: return "GroupNonUniformShuffleRelative"; + case Capability::GroupNonUniformClustered: return "GroupNonUniformClustered"; + case Capability::GroupNonUniformQuad: return "GroupNonUniformQuad"; + case Capability::ShaderLayer: return "ShaderLayer"; + case Capability::ShaderViewportIndex: return "ShaderViewportIndex"; + case Capability::UniformDecoration: return "UniformDecoration"; + case Capability::CoreBuiltinsARM: return "CoreBuiltinsARM"; + case Capability::TileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT"; + case Capability::TileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; + case Capability::TileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; + case Capability::CooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; + case Capability::FragmentShadingRateKHR: return "FragmentShadingRateKHR"; + case Capability::SubgroupBallotKHR: return "SubgroupBallotKHR"; + case Capability::DrawParameters: return "DrawParameters"; + case Capability::WorkgroupMemoryExplicitLayoutKHR: return "WorkgroupMemoryExplicitLayoutKHR"; + case Capability::WorkgroupMemoryExplicitLayout8BitAccessKHR: return "WorkgroupMemoryExplicitLayout8BitAccessKHR"; + case Capability::WorkgroupMemoryExplicitLayout16BitAccessKHR: return "WorkgroupMemoryExplicitLayout16BitAccessKHR"; + case Capability::SubgroupVoteKHR: return "SubgroupVoteKHR"; + case Capability::StorageBuffer16BitAccess: return "StorageBuffer16BitAccess"; + case Capability::StorageUniform16: return "StorageUniform16"; + case Capability::StoragePushConstant16: return "StoragePushConstant16"; + case Capability::StorageInputOutput16: return "StorageInputOutput16"; + case Capability::DeviceGroup: return "DeviceGroup"; + case Capability::MultiView: return "MultiView"; + case Capability::VariablePointersStorageBuffer: return "VariablePointersStorageBuffer"; + case Capability::VariablePointers: return "VariablePointers"; + case Capability::AtomicStorageOps: return "AtomicStorageOps"; + case Capability::SampleMaskPostDepthCoverage: return "SampleMaskPostDepthCoverage"; + case Capability::StorageBuffer8BitAccess: return "StorageBuffer8BitAccess"; + case Capability::UniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess"; + case Capability::StoragePushConstant8: return "StoragePushConstant8"; + case Capability::DenormPreserve: return "DenormPreserve"; + case Capability::DenormFlushToZero: return "DenormFlushToZero"; + case Capability::SignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; + case Capability::RoundingModeRTE: return "RoundingModeRTE"; + case Capability::RoundingModeRTZ: return "RoundingModeRTZ"; + case Capability::RayQueryProvisionalKHR: return "RayQueryProvisionalKHR"; + case Capability::RayQueryKHR: return "RayQueryKHR"; + case Capability::UntypedPointersKHR: return "UntypedPointersKHR"; + case Capability::RayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; + case Capability::RayTracingKHR: return "RayTracingKHR"; + case Capability::TextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM"; + case Capability::TextureBoxFilterQCOM: return "TextureBoxFilterQCOM"; + case Capability::TextureBlockMatchQCOM: return "TextureBlockMatchQCOM"; + case Capability::TextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; + case Capability::Float16ImageAMD: return "Float16ImageAMD"; + case Capability::ImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD"; + case Capability::FragmentMaskAMD: return "FragmentMaskAMD"; + case Capability::StencilExportEXT: return "StencilExportEXT"; + case Capability::ImageReadWriteLodAMD: return "ImageReadWriteLodAMD"; + case Capability::Int64ImageEXT: return "Int64ImageEXT"; + case Capability::ShaderClockKHR: return "ShaderClockKHR"; + case Capability::ShaderEnqueueAMDX: return "ShaderEnqueueAMDX"; + case Capability::QuadControlKHR: return "QuadControlKHR"; + case Capability::BFloat16TypeKHR: return "BFloat16TypeKHR"; + case Capability::BFloat16DotProductKHR: return "BFloat16DotProductKHR"; + case Capability::BFloat16CooperativeMatrixKHR: return "BFloat16CooperativeMatrixKHR"; + case Capability::SampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV"; + case Capability::GeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; + case Capability::ShaderViewportIndexLayerEXT: return "ShaderViewportIndexLayerEXT"; + case Capability::ShaderViewportMaskNV: return "ShaderViewportMaskNV"; + case Capability::ShaderStereoViewNV: return "ShaderStereoViewNV"; + case Capability::PerViewAttributesNV: return "PerViewAttributesNV"; + case Capability::FragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT"; + case Capability::MeshShadingNV: return "MeshShadingNV"; + case Capability::ImageFootprintNV: return "ImageFootprintNV"; + case Capability::MeshShadingEXT: return "MeshShadingEXT"; + case Capability::FragmentBarycentricKHR: return "FragmentBarycentricKHR"; + case Capability::ComputeDerivativeGroupQuadsKHR: return "ComputeDerivativeGroupQuadsKHR"; + case Capability::FragmentDensityEXT: return "FragmentDensityEXT"; + case Capability::GroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV"; + case Capability::ShaderNonUniform: return "ShaderNonUniform"; + case Capability::RuntimeDescriptorArray: return "RuntimeDescriptorArray"; + case Capability::InputAttachmentArrayDynamicIndexing: return "InputAttachmentArrayDynamicIndexing"; + case Capability::UniformTexelBufferArrayDynamicIndexing: return "UniformTexelBufferArrayDynamicIndexing"; + case Capability::StorageTexelBufferArrayDynamicIndexing: return "StorageTexelBufferArrayDynamicIndexing"; + case Capability::UniformBufferArrayNonUniformIndexing: return "UniformBufferArrayNonUniformIndexing"; + case Capability::SampledImageArrayNonUniformIndexing: return "SampledImageArrayNonUniformIndexing"; + case Capability::StorageBufferArrayNonUniformIndexing: return "StorageBufferArrayNonUniformIndexing"; + case Capability::StorageImageArrayNonUniformIndexing: return "StorageImageArrayNonUniformIndexing"; + case Capability::InputAttachmentArrayNonUniformIndexing: return "InputAttachmentArrayNonUniformIndexing"; + case Capability::UniformTexelBufferArrayNonUniformIndexing: return "UniformTexelBufferArrayNonUniformIndexing"; + case Capability::StorageTexelBufferArrayNonUniformIndexing: return "StorageTexelBufferArrayNonUniformIndexing"; + case Capability::RayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR"; + case Capability::RayTracingNV: return "RayTracingNV"; + case Capability::RayTracingMotionBlurNV: return "RayTracingMotionBlurNV"; + case Capability::VulkanMemoryModel: return "VulkanMemoryModel"; + case Capability::VulkanMemoryModelDeviceScope: return "VulkanMemoryModelDeviceScope"; + case Capability::PhysicalStorageBufferAddresses: return "PhysicalStorageBufferAddresses"; + case Capability::ComputeDerivativeGroupLinearKHR: return "ComputeDerivativeGroupLinearKHR"; + case Capability::RayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; + case Capability::CooperativeMatrixNV: return "CooperativeMatrixNV"; + case Capability::FragmentShaderSampleInterlockEXT: return "FragmentShaderSampleInterlockEXT"; + case Capability::FragmentShaderShadingRateInterlockEXT: return "FragmentShaderShadingRateInterlockEXT"; + case Capability::ShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV"; + case Capability::FragmentShaderPixelInterlockEXT: return "FragmentShaderPixelInterlockEXT"; + case Capability::DemoteToHelperInvocation: return "DemoteToHelperInvocation"; + case Capability::DisplacementMicromapNV: return "DisplacementMicromapNV"; + case Capability::RayTracingOpacityMicromapEXT: return "RayTracingOpacityMicromapEXT"; + case Capability::ShaderInvocationReorderNV: return "ShaderInvocationReorderNV"; + case Capability::BindlessTextureNV: return "BindlessTextureNV"; + case Capability::RayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR"; + case Capability::CooperativeVectorNV: return "CooperativeVectorNV"; + case Capability::AtomicFloat16VectorNV: return "AtomicFloat16VectorNV"; + case Capability::RayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV"; + case Capability::RawAccessChainsNV: return "RawAccessChainsNV"; + case Capability::RayTracingSpheresGeometryNV: return "RayTracingSpheresGeometryNV"; + case Capability::RayTracingLinearSweptSpheresGeometryNV: return "RayTracingLinearSweptSpheresGeometryNV"; + case Capability::CooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV"; + case Capability::CooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV"; + case Capability::CooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV"; + case Capability::CooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV"; + case Capability::CooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV"; + case Capability::CooperativeVectorTrainingNV: return "CooperativeVectorTrainingNV"; + case Capability::RayTracingClusterAccelerationStructureNV: return "RayTracingClusterAccelerationStructureNV"; + case Capability::TensorAddressingNV: return "TensorAddressingNV"; + case Capability::SubgroupShuffleINTEL: return "SubgroupShuffleINTEL"; + case Capability::SubgroupBufferBlockIOINTEL: return "SubgroupBufferBlockIOINTEL"; + case Capability::SubgroupImageBlockIOINTEL: return "SubgroupImageBlockIOINTEL"; + case Capability::SubgroupImageMediaBlockIOINTEL: return "SubgroupImageMediaBlockIOINTEL"; + case Capability::RoundToInfinityINTEL: return "RoundToInfinityINTEL"; + case Capability::FloatingPointModeINTEL: return "FloatingPointModeINTEL"; + case Capability::IntegerFunctions2INTEL: return "IntegerFunctions2INTEL"; + case Capability::FunctionPointersINTEL: return "FunctionPointersINTEL"; + case Capability::IndirectReferencesINTEL: return "IndirectReferencesINTEL"; + case Capability::AsmINTEL: return "AsmINTEL"; + case Capability::AtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT"; + case Capability::AtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT"; + case Capability::AtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT"; + case Capability::VectorComputeINTEL: return "VectorComputeINTEL"; + case Capability::VectorAnyINTEL: return "VectorAnyINTEL"; + case Capability::ExpectAssumeKHR: return "ExpectAssumeKHR"; + case Capability::SubgroupAvcMotionEstimationINTEL: return "SubgroupAvcMotionEstimationINTEL"; + case Capability::SubgroupAvcMotionEstimationIntraINTEL: return "SubgroupAvcMotionEstimationIntraINTEL"; + case Capability::SubgroupAvcMotionEstimationChromaINTEL: return "SubgroupAvcMotionEstimationChromaINTEL"; + case Capability::VariableLengthArrayINTEL: return "VariableLengthArrayINTEL"; + case Capability::FunctionFloatControlINTEL: return "FunctionFloatControlINTEL"; + case Capability::FPGAMemoryAttributesINTEL: return "FPGAMemoryAttributesINTEL"; + case Capability::FPFastMathModeINTEL: return "FPFastMathModeINTEL"; + case Capability::ArbitraryPrecisionIntegersINTEL: return "ArbitraryPrecisionIntegersINTEL"; + case Capability::ArbitraryPrecisionFloatingPointINTEL: return "ArbitraryPrecisionFloatingPointINTEL"; + case Capability::UnstructuredLoopControlsINTEL: return "UnstructuredLoopControlsINTEL"; + case Capability::FPGALoopControlsINTEL: return "FPGALoopControlsINTEL"; + 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::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::DotProductInputAll: return "DotProductInputAll"; + case Capability::DotProductInput4x8Bit: return "DotProductInput4x8Bit"; + case Capability::DotProductInput4x8BitPacked: return "DotProductInput4x8BitPacked"; + case Capability::DotProduct: return "DotProduct"; + case Capability::RayCullMaskKHR: return "RayCullMaskKHR"; + case Capability::CooperativeMatrixKHR: return "CooperativeMatrixKHR"; + case Capability::ReplicatedCompositesEXT: return "ReplicatedCompositesEXT"; + case Capability::BitInstructions: return "BitInstructions"; + case Capability::GroupNonUniformRotateKHR: return "GroupNonUniformRotateKHR"; + case Capability::FloatControls2: return "FloatControls2"; + case Capability::AtomicFloat32AddEXT: return "AtomicFloat32AddEXT"; + case Capability::AtomicFloat64AddEXT: return "AtomicFloat64AddEXT"; + case Capability::LongCompositesINTEL: return "LongCompositesINTEL"; + case Capability::OptNoneEXT: return "OptNoneEXT"; + case Capability::AtomicFloat16AddEXT: return "AtomicFloat16AddEXT"; + case Capability::DebugInfoModuleINTEL: return "DebugInfoModuleINTEL"; + case Capability::BFloat16ConversionINTEL: return "BFloat16ConversionINTEL"; + case Capability::SplitBarrierINTEL: return "SplitBarrierINTEL"; + case Capability::ArithmeticFenceEXT: return "ArithmeticFenceEXT"; + case Capability::FPGAClusterAttributesV2INTEL: return "FPGAClusterAttributesV2INTEL"; + case Capability::FPGAKernelAttributesv2INTEL: return "FPGAKernelAttributesv2INTEL"; + case Capability::FPMaxErrorINTEL: return "FPMaxErrorINTEL"; + case Capability::FPGALatencyControlINTEL: return "FPGALatencyControlINTEL"; + case Capability::FPGAArgumentInterfacesINTEL: return "FPGAArgumentInterfacesINTEL"; + case Capability::GlobalVariableHostAccessINTEL: return "GlobalVariableHostAccessINTEL"; + case Capability::GlobalVariableFPGADecorationsINTEL: return "GlobalVariableFPGADecorationsINTEL"; + 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::GroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR"; + case Capability::MaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL"; + case Capability::CacheControlsINTEL: return "CacheControlsINTEL"; + case Capability::RegisterLimitsINTEL: return "RegisterLimitsINTEL"; + default: return "Unknown"; + } +} + +inline const char* RayQueryIntersectionToString(RayQueryIntersection value) { + switch (value) { + case RayQueryIntersection::RayQueryCandidateIntersectionKHR: return "RayQueryCandidateIntersectionKHR"; + case RayQueryIntersection::RayQueryCommittedIntersectionKHR: return "RayQueryCommittedIntersectionKHR"; + default: return "Unknown"; + } +} + +inline const char* RayQueryCommittedIntersectionTypeToString(RayQueryCommittedIntersectionType value) { + switch (value) { + case RayQueryCommittedIntersectionType::RayQueryCommittedIntersectionNoneKHR: return "RayQueryCommittedIntersectionNoneKHR"; + case RayQueryCommittedIntersectionType::RayQueryCommittedIntersectionTriangleKHR: return "RayQueryCommittedIntersectionTriangleKHR"; + case RayQueryCommittedIntersectionType::RayQueryCommittedIntersectionGeneratedKHR: return "RayQueryCommittedIntersectionGeneratedKHR"; + default: return "Unknown"; + } +} + +inline const char* RayQueryCandidateIntersectionTypeToString(RayQueryCandidateIntersectionType value) { + switch (value) { + case RayQueryCandidateIntersectionType::RayQueryCandidateIntersectionTriangleKHR: return "RayQueryCandidateIntersectionTriangleKHR"; + case RayQueryCandidateIntersectionType::RayQueryCandidateIntersectionAABBKHR: return "RayQueryCandidateIntersectionAABBKHR"; + default: return "Unknown"; + } +} + +inline const char* FPDenormModeToString(FPDenormMode value) { + switch (value) { + case FPDenormMode::Preserve: return "Preserve"; + case FPDenormMode::FlushToZero: return "FlushToZero"; + default: return "Unknown"; + } +} + +inline const char* FPOperationModeToString(FPOperationMode value) { + switch (value) { + case FPOperationMode::IEEE: return "IEEE"; + case FPOperationMode::ALT: return "ALT"; + default: return "Unknown"; + } +} + +inline const char* QuantizationModesToString(QuantizationModes value) { + switch (value) { + case QuantizationModes::TRN: return "TRN"; + case QuantizationModes::TRN_ZERO: return "TRN_ZERO"; + case QuantizationModes::RND: return "RND"; + case QuantizationModes::RND_ZERO: return "RND_ZERO"; + case QuantizationModes::RND_INF: return "RND_INF"; + case QuantizationModes::RND_MIN_INF: return "RND_MIN_INF"; + case QuantizationModes::RND_CONV: return "RND_CONV"; + case QuantizationModes::RND_CONV_ODD: return "RND_CONV_ODD"; + default: return "Unknown"; + } +} + +inline const char* OverflowModesToString(OverflowModes value) { + switch (value) { + case OverflowModes::WRAP: return "WRAP"; + case OverflowModes::SAT: return "SAT"; + case OverflowModes::SAT_ZERO: return "SAT_ZERO"; + case OverflowModes::SAT_SYM: return "SAT_SYM"; + default: return "Unknown"; + } +} + +inline const char* PackedVectorFormatToString(PackedVectorFormat value) { + switch (value) { + case PackedVectorFormat::PackedVectorFormat4x8Bit: return "PackedVectorFormat4x8Bit"; + default: return "Unknown"; + } +} + +inline const char* CooperativeMatrixLayoutToString(CooperativeMatrixLayout value) { + switch (value) { + case CooperativeMatrixLayout::RowMajorKHR: return "RowMajorKHR"; + case CooperativeMatrixLayout::ColumnMajorKHR: return "ColumnMajorKHR"; + case CooperativeMatrixLayout::RowBlockedInterleavedARM: return "RowBlockedInterleavedARM"; + case CooperativeMatrixLayout::ColumnBlockedInterleavedARM: return "ColumnBlockedInterleavedARM"; + default: return "Unknown"; + } +} + +inline const char* CooperativeMatrixUseToString(CooperativeMatrixUse value) { + switch (value) { + case CooperativeMatrixUse::MatrixAKHR: return "MatrixAKHR"; + case CooperativeMatrixUse::MatrixBKHR: return "MatrixBKHR"; + case CooperativeMatrixUse::MatrixAccumulatorKHR: return "MatrixAccumulatorKHR"; + default: return "Unknown"; + } +} + +inline const char* TensorClampModeToString(TensorClampMode value) { + switch (value) { + case TensorClampMode::Undefined: return "Undefined"; + case TensorClampMode::Constant: return "Constant"; + case TensorClampMode::ClampToEdge: return "ClampToEdge"; + case TensorClampMode::Repeat: return "Repeat"; + case TensorClampMode::RepeatMirrored: return "RepeatMirrored"; + default: return "Unknown"; + } +} + +inline const char* InitializationModeQualifierToString(InitializationModeQualifier value) { + switch (value) { + case InitializationModeQualifier::InitOnDeviceReprogramINTEL: return "InitOnDeviceReprogramINTEL"; + case InitializationModeQualifier::InitOnDeviceResetINTEL: return "InitOnDeviceResetINTEL"; + default: return "Unknown"; + } +} + +inline const char* HostAccessQualifierToString(HostAccessQualifier value) { + switch (value) { + case HostAccessQualifier::NoneINTEL: return "NoneINTEL"; + case HostAccessQualifier::ReadINTEL: return "ReadINTEL"; + case HostAccessQualifier::WriteINTEL: return "WriteINTEL"; + case HostAccessQualifier::ReadWriteINTEL: return "ReadWriteINTEL"; + default: return "Unknown"; + } +} + +inline const char* LoadCacheControlToString(LoadCacheControl value) { + switch (value) { + case LoadCacheControl::UncachedINTEL: return "UncachedINTEL"; + case LoadCacheControl::CachedINTEL: return "CachedINTEL"; + case LoadCacheControl::StreamingINTEL: return "StreamingINTEL"; + case LoadCacheControl::InvalidateAfterReadINTEL: return "InvalidateAfterReadINTEL"; + case LoadCacheControl::ConstCachedINTEL: return "ConstCachedINTEL"; + default: return "Unknown"; + } +} + +inline const char* StoreCacheControlToString(StoreCacheControl value) { + switch (value) { + case StoreCacheControl::UncachedINTEL: return "UncachedINTEL"; + case StoreCacheControl::WriteThroughINTEL: return "WriteThroughINTEL"; + case StoreCacheControl::WriteBackINTEL: return "WriteBackINTEL"; + case StoreCacheControl::StreamingINTEL: return "StreamingINTEL"; + default: return "Unknown"; + } +} + +inline const char* NamedMaximumNumberOfRegistersToString(NamedMaximumNumberOfRegisters value) { + switch (value) { + case NamedMaximumNumberOfRegisters::AutoINTEL: return "AutoINTEL"; + default: return "Unknown"; + } +} + +inline const char* FPEncodingToString(FPEncoding value) { + switch (value) { + case FPEncoding::BFloat16KHR: return "BFloat16KHR"; + default: return "Unknown"; + } +} + +inline const char* CooperativeVectorMatrixLayoutToString(CooperativeVectorMatrixLayout value) { + switch (value) { + case CooperativeVectorMatrixLayout::RowMajorNV: return "RowMajorNV"; + case CooperativeVectorMatrixLayout::ColumnMajorNV: return "ColumnMajorNV"; + case CooperativeVectorMatrixLayout::InferencingOptimalNV: return "InferencingOptimalNV"; + case CooperativeVectorMatrixLayout::TrainingOptimalNV: return "TrainingOptimalNV"; + default: return "Unknown"; + } +} + +inline const char* ComponentTypeToString(ComponentType value) { + switch (value) { + case ComponentType::Float16NV: return "Float16NV"; + case ComponentType::Float32NV: return "Float32NV"; + case ComponentType::Float64NV: return "Float64NV"; + case ComponentType::SignedInt8NV: return "SignedInt8NV"; + case ComponentType::SignedInt16NV: return "SignedInt16NV"; + case ComponentType::SignedInt32NV: return "SignedInt32NV"; + case ComponentType::SignedInt64NV: return "SignedInt64NV"; + case ComponentType::UnsignedInt8NV: return "UnsignedInt8NV"; + case ComponentType::UnsignedInt16NV: return "UnsignedInt16NV"; + case ComponentType::UnsignedInt32NV: return "UnsignedInt32NV"; + case ComponentType::UnsignedInt64NV: return "UnsignedInt64NV"; + case ComponentType::SignedInt8PackedNV: return "SignedInt8PackedNV"; + case ComponentType::UnsignedInt8PackedNV: return "UnsignedInt8PackedNV"; + case ComponentType::FloatE4M3NV: return "FloatE4M3NV"; + case ComponentType::FloatE5M2NV: return "FloatE5M2NV"; + default: return "Unknown"; + } +} + +inline const char* OpToString(Op value) { + switch (value) { + case Op::OpNop: return "OpNop"; + case Op::OpUndef: return "OpUndef"; + case Op::OpSourceContinued: return "OpSourceContinued"; + case Op::OpSource: return "OpSource"; + case Op::OpSourceExtension: return "OpSourceExtension"; + case Op::OpName: return "OpName"; + case Op::OpMemberName: return "OpMemberName"; + case Op::OpString: return "OpString"; + case Op::OpLine: return "OpLine"; + case Op::OpExtension: return "OpExtension"; + case Op::OpExtInstImport: return "OpExtInstImport"; + case Op::OpExtInst: return "OpExtInst"; + case Op::OpMemoryModel: return "OpMemoryModel"; + case Op::OpEntryPoint: return "OpEntryPoint"; + case Op::OpExecutionMode: return "OpExecutionMode"; + case Op::OpCapability: return "OpCapability"; + case Op::OpTypeVoid: return "OpTypeVoid"; + case Op::OpTypeBool: return "OpTypeBool"; + case Op::OpTypeInt: return "OpTypeInt"; + case Op::OpTypeFloat: return "OpTypeFloat"; + case Op::OpTypeVector: return "OpTypeVector"; + case Op::OpTypeMatrix: return "OpTypeMatrix"; + case Op::OpTypeImage: return "OpTypeImage"; + case Op::OpTypeSampler: return "OpTypeSampler"; + case Op::OpTypeSampledImage: return "OpTypeSampledImage"; + case Op::OpTypeArray: return "OpTypeArray"; + case Op::OpTypeRuntimeArray: return "OpTypeRuntimeArray"; + case Op::OpTypeStruct: return "OpTypeStruct"; + case Op::OpTypeOpaque: return "OpTypeOpaque"; + case Op::OpTypePointer: return "OpTypePointer"; + case Op::OpTypeFunction: return "OpTypeFunction"; + case Op::OpTypeEvent: return "OpTypeEvent"; + case Op::OpTypeDeviceEvent: return "OpTypeDeviceEvent"; + case Op::OpTypeReserveId: return "OpTypeReserveId"; + case Op::OpTypeQueue: return "OpTypeQueue"; + case Op::OpTypePipe: return "OpTypePipe"; + case Op::OpTypeForwardPointer: return "OpTypeForwardPointer"; + case Op::OpConstantTrue: return "OpConstantTrue"; + case Op::OpConstantFalse: return "OpConstantFalse"; + case Op::OpConstant: return "OpConstant"; + case Op::OpConstantComposite: return "OpConstantComposite"; + case Op::OpConstantSampler: return "OpConstantSampler"; + case Op::OpConstantNull: return "OpConstantNull"; + case Op::OpSpecConstantTrue: return "OpSpecConstantTrue"; + case Op::OpSpecConstantFalse: return "OpSpecConstantFalse"; + case Op::OpSpecConstant: return "OpSpecConstant"; + case Op::OpSpecConstantComposite: return "OpSpecConstantComposite"; + case Op::OpSpecConstantOp: return "OpSpecConstantOp"; + case Op::OpFunction: return "OpFunction"; + case Op::OpFunctionParameter: return "OpFunctionParameter"; + case Op::OpFunctionEnd: return "OpFunctionEnd"; + case Op::OpFunctionCall: return "OpFunctionCall"; + case Op::OpVariable: return "OpVariable"; + case Op::OpImageTexelPointer: return "OpImageTexelPointer"; + case Op::OpLoad: return "OpLoad"; + case Op::OpStore: return "OpStore"; + case Op::OpCopyMemory: return "OpCopyMemory"; + case Op::OpCopyMemorySized: return "OpCopyMemorySized"; + case Op::OpAccessChain: return "OpAccessChain"; + case Op::OpInBoundsAccessChain: return "OpInBoundsAccessChain"; + case Op::OpPtrAccessChain: return "OpPtrAccessChain"; + case Op::OpArrayLength: return "OpArrayLength"; + case Op::OpGenericPtrMemSemantics: return "OpGenericPtrMemSemantics"; + case Op::OpInBoundsPtrAccessChain: return "OpInBoundsPtrAccessChain"; + case Op::OpDecorate: return "OpDecorate"; + case Op::OpMemberDecorate: return "OpMemberDecorate"; + case Op::OpDecorationGroup: return "OpDecorationGroup"; + case Op::OpGroupDecorate: return "OpGroupDecorate"; + case Op::OpGroupMemberDecorate: return "OpGroupMemberDecorate"; + case Op::OpVectorExtractDynamic: return "OpVectorExtractDynamic"; + case Op::OpVectorInsertDynamic: return "OpVectorInsertDynamic"; + case Op::OpVectorShuffle: return "OpVectorShuffle"; + case Op::OpCompositeConstruct: return "OpCompositeConstruct"; + case Op::OpCompositeExtract: return "OpCompositeExtract"; + case Op::OpCompositeInsert: return "OpCompositeInsert"; + case Op::OpCopyObject: return "OpCopyObject"; + case Op::OpTranspose: return "OpTranspose"; + case Op::OpSampledImage: return "OpSampledImage"; + case Op::OpImageSampleImplicitLod: return "OpImageSampleImplicitLod"; + case Op::OpImageSampleExplicitLod: return "OpImageSampleExplicitLod"; + case Op::OpImageSampleDrefImplicitLod: return "OpImageSampleDrefImplicitLod"; + case Op::OpImageSampleDrefExplicitLod: return "OpImageSampleDrefExplicitLod"; + case Op::OpImageSampleProjImplicitLod: return "OpImageSampleProjImplicitLod"; + case Op::OpImageSampleProjExplicitLod: return "OpImageSampleProjExplicitLod"; + case Op::OpImageSampleProjDrefImplicitLod: return "OpImageSampleProjDrefImplicitLod"; + case Op::OpImageSampleProjDrefExplicitLod: return "OpImageSampleProjDrefExplicitLod"; + case Op::OpImageFetch: return "OpImageFetch"; + case Op::OpImageGather: return "OpImageGather"; + case Op::OpImageDrefGather: return "OpImageDrefGather"; + case Op::OpImageRead: return "OpImageRead"; + case Op::OpImageWrite: return "OpImageWrite"; + case Op::OpImage: return "OpImage"; + case Op::OpImageQueryFormat: return "OpImageQueryFormat"; + case Op::OpImageQueryOrder: return "OpImageQueryOrder"; + case Op::OpImageQuerySizeLod: return "OpImageQuerySizeLod"; + case Op::OpImageQuerySize: return "OpImageQuerySize"; + case Op::OpImageQueryLod: return "OpImageQueryLod"; + case Op::OpImageQueryLevels: return "OpImageQueryLevels"; + case Op::OpImageQuerySamples: return "OpImageQuerySamples"; + case Op::OpConvertFToU: return "OpConvertFToU"; + case Op::OpConvertFToS: return "OpConvertFToS"; + case Op::OpConvertSToF: return "OpConvertSToF"; + case Op::OpConvertUToF: return "OpConvertUToF"; + case Op::OpUConvert: return "OpUConvert"; + case Op::OpSConvert: return "OpSConvert"; + case Op::OpFConvert: return "OpFConvert"; + case Op::OpQuantizeToF16: return "OpQuantizeToF16"; + case Op::OpConvertPtrToU: return "OpConvertPtrToU"; + case Op::OpSatConvertSToU: return "OpSatConvertSToU"; + case Op::OpSatConvertUToS: return "OpSatConvertUToS"; + case Op::OpConvertUToPtr: return "OpConvertUToPtr"; + case Op::OpPtrCastToGeneric: return "OpPtrCastToGeneric"; + case Op::OpGenericCastToPtr: return "OpGenericCastToPtr"; + case Op::OpGenericCastToPtrExplicit: return "OpGenericCastToPtrExplicit"; + case Op::OpBitcast: return "OpBitcast"; + case Op::OpSNegate: return "OpSNegate"; + case Op::OpFNegate: return "OpFNegate"; + case Op::OpIAdd: return "OpIAdd"; + case Op::OpFAdd: return "OpFAdd"; + case Op::OpISub: return "OpISub"; + case Op::OpFSub: return "OpFSub"; + case Op::OpIMul: return "OpIMul"; + case Op::OpFMul: return "OpFMul"; + case Op::OpUDiv: return "OpUDiv"; + case Op::OpSDiv: return "OpSDiv"; + case Op::OpFDiv: return "OpFDiv"; + case Op::OpUMod: return "OpUMod"; + case Op::OpSRem: return "OpSRem"; + case Op::OpSMod: return "OpSMod"; + case Op::OpFRem: return "OpFRem"; + case Op::OpFMod: return "OpFMod"; + case Op::OpVectorTimesScalar: return "OpVectorTimesScalar"; + case Op::OpMatrixTimesScalar: return "OpMatrixTimesScalar"; + case Op::OpVectorTimesMatrix: return "OpVectorTimesMatrix"; + case Op::OpMatrixTimesVector: return "OpMatrixTimesVector"; + case Op::OpMatrixTimesMatrix: return "OpMatrixTimesMatrix"; + case Op::OpOuterProduct: return "OpOuterProduct"; + case Op::OpDot: return "OpDot"; + case Op::OpIAddCarry: return "OpIAddCarry"; + case Op::OpISubBorrow: return "OpISubBorrow"; + case Op::OpUMulExtended: return "OpUMulExtended"; + case Op::OpSMulExtended: return "OpSMulExtended"; + case Op::OpAny: return "OpAny"; + case Op::OpAll: return "OpAll"; + case Op::OpIsNan: return "OpIsNan"; + case Op::OpIsInf: return "OpIsInf"; + case Op::OpIsFinite: return "OpIsFinite"; + case Op::OpIsNormal: return "OpIsNormal"; + case Op::OpSignBitSet: return "OpSignBitSet"; + case Op::OpLessOrGreater: return "OpLessOrGreater"; + case Op::OpOrdered: return "OpOrdered"; + case Op::OpUnordered: return "OpUnordered"; + case Op::OpLogicalEqual: return "OpLogicalEqual"; + case Op::OpLogicalNotEqual: return "OpLogicalNotEqual"; + case Op::OpLogicalOr: return "OpLogicalOr"; + case Op::OpLogicalAnd: return "OpLogicalAnd"; + case Op::OpLogicalNot: return "OpLogicalNot"; + case Op::OpSelect: return "OpSelect"; + case Op::OpIEqual: return "OpIEqual"; + case Op::OpINotEqual: return "OpINotEqual"; + case Op::OpUGreaterThan: return "OpUGreaterThan"; + case Op::OpSGreaterThan: return "OpSGreaterThan"; + case Op::OpUGreaterThanEqual: return "OpUGreaterThanEqual"; + case Op::OpSGreaterThanEqual: return "OpSGreaterThanEqual"; + case Op::OpULessThan: return "OpULessThan"; + case Op::OpSLessThan: return "OpSLessThan"; + case Op::OpULessThanEqual: return "OpULessThanEqual"; + case Op::OpSLessThanEqual: return "OpSLessThanEqual"; + case Op::OpFOrdEqual: return "OpFOrdEqual"; + case Op::OpFUnordEqual: return "OpFUnordEqual"; + case Op::OpFOrdNotEqual: return "OpFOrdNotEqual"; + case Op::OpFUnordNotEqual: return "OpFUnordNotEqual"; + case Op::OpFOrdLessThan: return "OpFOrdLessThan"; + case Op::OpFUnordLessThan: return "OpFUnordLessThan"; + case Op::OpFOrdGreaterThan: return "OpFOrdGreaterThan"; + case Op::OpFUnordGreaterThan: return "OpFUnordGreaterThan"; + case Op::OpFOrdLessThanEqual: return "OpFOrdLessThanEqual"; + case Op::OpFUnordLessThanEqual: return "OpFUnordLessThanEqual"; + case Op::OpFOrdGreaterThanEqual: return "OpFOrdGreaterThanEqual"; + case Op::OpFUnordGreaterThanEqual: return "OpFUnordGreaterThanEqual"; + case Op::OpShiftRightLogical: return "OpShiftRightLogical"; + case Op::OpShiftRightArithmetic: return "OpShiftRightArithmetic"; + case Op::OpShiftLeftLogical: return "OpShiftLeftLogical"; + case Op::OpBitwiseOr: return "OpBitwiseOr"; + case Op::OpBitwiseXor: return "OpBitwiseXor"; + case Op::OpBitwiseAnd: return "OpBitwiseAnd"; + case Op::OpNot: return "OpNot"; + case Op::OpBitFieldInsert: return "OpBitFieldInsert"; + case Op::OpBitFieldSExtract: return "OpBitFieldSExtract"; + case Op::OpBitFieldUExtract: return "OpBitFieldUExtract"; + case Op::OpBitReverse: return "OpBitReverse"; + case Op::OpBitCount: return "OpBitCount"; + case Op::OpDPdx: return "OpDPdx"; + case Op::OpDPdy: return "OpDPdy"; + case Op::OpFwidth: return "OpFwidth"; + case Op::OpDPdxFine: return "OpDPdxFine"; + case Op::OpDPdyFine: return "OpDPdyFine"; + case Op::OpFwidthFine: return "OpFwidthFine"; + case Op::OpDPdxCoarse: return "OpDPdxCoarse"; + case Op::OpDPdyCoarse: return "OpDPdyCoarse"; + case Op::OpFwidthCoarse: return "OpFwidthCoarse"; + case Op::OpEmitVertex: return "OpEmitVertex"; + case Op::OpEndPrimitive: return "OpEndPrimitive"; + case Op::OpEmitStreamVertex: return "OpEmitStreamVertex"; + case Op::OpEndStreamPrimitive: return "OpEndStreamPrimitive"; + case Op::OpControlBarrier: return "OpControlBarrier"; + case Op::OpMemoryBarrier: return "OpMemoryBarrier"; + case Op::OpAtomicLoad: return "OpAtomicLoad"; + case Op::OpAtomicStore: return "OpAtomicStore"; + case Op::OpAtomicExchange: return "OpAtomicExchange"; + case Op::OpAtomicCompareExchange: return "OpAtomicCompareExchange"; + case Op::OpAtomicCompareExchangeWeak: return "OpAtomicCompareExchangeWeak"; + case Op::OpAtomicIIncrement: return "OpAtomicIIncrement"; + case Op::OpAtomicIDecrement: return "OpAtomicIDecrement"; + case Op::OpAtomicIAdd: return "OpAtomicIAdd"; + case Op::OpAtomicISub: return "OpAtomicISub"; + case Op::OpAtomicSMin: return "OpAtomicSMin"; + case Op::OpAtomicUMin: return "OpAtomicUMin"; + case Op::OpAtomicSMax: return "OpAtomicSMax"; + case Op::OpAtomicUMax: return "OpAtomicUMax"; + case Op::OpAtomicAnd: return "OpAtomicAnd"; + case Op::OpAtomicOr: return "OpAtomicOr"; + case Op::OpAtomicXor: return "OpAtomicXor"; + case Op::OpPhi: return "OpPhi"; + case Op::OpLoopMerge: return "OpLoopMerge"; + case Op::OpSelectionMerge: return "OpSelectionMerge"; + case Op::OpLabel: return "OpLabel"; + case Op::OpBranch: return "OpBranch"; + case Op::OpBranchConditional: return "OpBranchConditional"; + case Op::OpSwitch: return "OpSwitch"; + case Op::OpKill: return "OpKill"; + case Op::OpReturn: return "OpReturn"; + case Op::OpReturnValue: return "OpReturnValue"; + case Op::OpUnreachable: return "OpUnreachable"; + case Op::OpLifetimeStart: return "OpLifetimeStart"; + case Op::OpLifetimeStop: return "OpLifetimeStop"; + case Op::OpGroupAsyncCopy: return "OpGroupAsyncCopy"; + case Op::OpGroupWaitEvents: return "OpGroupWaitEvents"; + case Op::OpGroupAll: return "OpGroupAll"; + case Op::OpGroupAny: return "OpGroupAny"; + case Op::OpGroupBroadcast: return "OpGroupBroadcast"; + case Op::OpGroupIAdd: return "OpGroupIAdd"; + case Op::OpGroupFAdd: return "OpGroupFAdd"; + case Op::OpGroupFMin: return "OpGroupFMin"; + case Op::OpGroupUMin: return "OpGroupUMin"; + case Op::OpGroupSMin: return "OpGroupSMin"; + case Op::OpGroupFMax: return "OpGroupFMax"; + case Op::OpGroupUMax: return "OpGroupUMax"; + case Op::OpGroupSMax: return "OpGroupSMax"; + case Op::OpReadPipe: return "OpReadPipe"; + case Op::OpWritePipe: return "OpWritePipe"; + case Op::OpReservedReadPipe: return "OpReservedReadPipe"; + case Op::OpReservedWritePipe: return "OpReservedWritePipe"; + case Op::OpReserveReadPipePackets: return "OpReserveReadPipePackets"; + case Op::OpReserveWritePipePackets: return "OpReserveWritePipePackets"; + case Op::OpCommitReadPipe: return "OpCommitReadPipe"; + case Op::OpCommitWritePipe: return "OpCommitWritePipe"; + case Op::OpIsValidReserveId: return "OpIsValidReserveId"; + case Op::OpGetNumPipePackets: return "OpGetNumPipePackets"; + case Op::OpGetMaxPipePackets: return "OpGetMaxPipePackets"; + case Op::OpGroupReserveReadPipePackets: return "OpGroupReserveReadPipePackets"; + case Op::OpGroupReserveWritePipePackets: return "OpGroupReserveWritePipePackets"; + case Op::OpGroupCommitReadPipe: return "OpGroupCommitReadPipe"; + case Op::OpGroupCommitWritePipe: return "OpGroupCommitWritePipe"; + case Op::OpEnqueueMarker: return "OpEnqueueMarker"; + case Op::OpEnqueueKernel: return "OpEnqueueKernel"; + case Op::OpGetKernelNDrangeSubGroupCount: return "OpGetKernelNDrangeSubGroupCount"; + case Op::OpGetKernelNDrangeMaxSubGroupSize: return "OpGetKernelNDrangeMaxSubGroupSize"; + case Op::OpGetKernelWorkGroupSize: return "OpGetKernelWorkGroupSize"; + case Op::OpGetKernelPreferredWorkGroupSizeMultiple: return "OpGetKernelPreferredWorkGroupSizeMultiple"; + case Op::OpRetainEvent: return "OpRetainEvent"; + case Op::OpReleaseEvent: return "OpReleaseEvent"; + case Op::OpCreateUserEvent: return "OpCreateUserEvent"; + case Op::OpIsValidEvent: return "OpIsValidEvent"; + case Op::OpSetUserEventStatus: return "OpSetUserEventStatus"; + case Op::OpCaptureEventProfilingInfo: return "OpCaptureEventProfilingInfo"; + case Op::OpGetDefaultQueue: return "OpGetDefaultQueue"; + case Op::OpBuildNDRange: return "OpBuildNDRange"; + case Op::OpImageSparseSampleImplicitLod: return "OpImageSparseSampleImplicitLod"; + case Op::OpImageSparseSampleExplicitLod: return "OpImageSparseSampleExplicitLod"; + case Op::OpImageSparseSampleDrefImplicitLod: return "OpImageSparseSampleDrefImplicitLod"; + case Op::OpImageSparseSampleDrefExplicitLod: return "OpImageSparseSampleDrefExplicitLod"; + case Op::OpImageSparseSampleProjImplicitLod: return "OpImageSparseSampleProjImplicitLod"; + case Op::OpImageSparseSampleProjExplicitLod: return "OpImageSparseSampleProjExplicitLod"; + case Op::OpImageSparseSampleProjDrefImplicitLod: return "OpImageSparseSampleProjDrefImplicitLod"; + case Op::OpImageSparseSampleProjDrefExplicitLod: return "OpImageSparseSampleProjDrefExplicitLod"; + case Op::OpImageSparseFetch: return "OpImageSparseFetch"; + case Op::OpImageSparseGather: return "OpImageSparseGather"; + case Op::OpImageSparseDrefGather: return "OpImageSparseDrefGather"; + case Op::OpImageSparseTexelsResident: return "OpImageSparseTexelsResident"; + case Op::OpNoLine: return "OpNoLine"; + case Op::OpAtomicFlagTestAndSet: return "OpAtomicFlagTestAndSet"; + case Op::OpAtomicFlagClear: return "OpAtomicFlagClear"; + case Op::OpImageSparseRead: return "OpImageSparseRead"; + case Op::OpSizeOf: return "OpSizeOf"; + case Op::OpTypePipeStorage: return "OpTypePipeStorage"; + case Op::OpConstantPipeStorage: return "OpConstantPipeStorage"; + case Op::OpCreatePipeFromPipeStorage: return "OpCreatePipeFromPipeStorage"; + case Op::OpGetKernelLocalSizeForSubgroupCount: return "OpGetKernelLocalSizeForSubgroupCount"; + case Op::OpGetKernelMaxNumSubgroups: return "OpGetKernelMaxNumSubgroups"; + case Op::OpTypeNamedBarrier: return "OpTypeNamedBarrier"; + case Op::OpNamedBarrierInitialize: return "OpNamedBarrierInitialize"; + case Op::OpMemoryNamedBarrier: return "OpMemoryNamedBarrier"; + case Op::OpModuleProcessed: return "OpModuleProcessed"; + case Op::OpExecutionModeId: return "OpExecutionModeId"; + case Op::OpDecorateId: return "OpDecorateId"; + case Op::OpGroupNonUniformElect: return "OpGroupNonUniformElect"; + case Op::OpGroupNonUniformAll: return "OpGroupNonUniformAll"; + case Op::OpGroupNonUniformAny: return "OpGroupNonUniformAny"; + case Op::OpGroupNonUniformAllEqual: return "OpGroupNonUniformAllEqual"; + case Op::OpGroupNonUniformBroadcast: return "OpGroupNonUniformBroadcast"; + case Op::OpGroupNonUniformBroadcastFirst: return "OpGroupNonUniformBroadcastFirst"; + case Op::OpGroupNonUniformBallot: return "OpGroupNonUniformBallot"; + case Op::OpGroupNonUniformInverseBallot: return "OpGroupNonUniformInverseBallot"; + case Op::OpGroupNonUniformBallotBitExtract: return "OpGroupNonUniformBallotBitExtract"; + case Op::OpGroupNonUniformBallotBitCount: return "OpGroupNonUniformBallotBitCount"; + case Op::OpGroupNonUniformBallotFindLSB: return "OpGroupNonUniformBallotFindLSB"; + case Op::OpGroupNonUniformBallotFindMSB: return "OpGroupNonUniformBallotFindMSB"; + case Op::OpGroupNonUniformShuffle: return "OpGroupNonUniformShuffle"; + case Op::OpGroupNonUniformShuffleXor: return "OpGroupNonUniformShuffleXor"; + case Op::OpGroupNonUniformShuffleUp: return "OpGroupNonUniformShuffleUp"; + case Op::OpGroupNonUniformShuffleDown: return "OpGroupNonUniformShuffleDown"; + case Op::OpGroupNonUniformIAdd: return "OpGroupNonUniformIAdd"; + case Op::OpGroupNonUniformFAdd: return "OpGroupNonUniformFAdd"; + case Op::OpGroupNonUniformIMul: return "OpGroupNonUniformIMul"; + case Op::OpGroupNonUniformFMul: return "OpGroupNonUniformFMul"; + case Op::OpGroupNonUniformSMin: return "OpGroupNonUniformSMin"; + case Op::OpGroupNonUniformUMin: return "OpGroupNonUniformUMin"; + case Op::OpGroupNonUniformFMin: return "OpGroupNonUniformFMin"; + case Op::OpGroupNonUniformSMax: return "OpGroupNonUniformSMax"; + case Op::OpGroupNonUniformUMax: return "OpGroupNonUniformUMax"; + case Op::OpGroupNonUniformFMax: return "OpGroupNonUniformFMax"; + case Op::OpGroupNonUniformBitwiseAnd: return "OpGroupNonUniformBitwiseAnd"; + case Op::OpGroupNonUniformBitwiseOr: return "OpGroupNonUniformBitwiseOr"; + case Op::OpGroupNonUniformBitwiseXor: return "OpGroupNonUniformBitwiseXor"; + case Op::OpGroupNonUniformLogicalAnd: return "OpGroupNonUniformLogicalAnd"; + case Op::OpGroupNonUniformLogicalOr: return "OpGroupNonUniformLogicalOr"; + case Op::OpGroupNonUniformLogicalXor: return "OpGroupNonUniformLogicalXor"; + case Op::OpGroupNonUniformQuadBroadcast: return "OpGroupNonUniformQuadBroadcast"; + case Op::OpGroupNonUniformQuadSwap: return "OpGroupNonUniformQuadSwap"; + case Op::OpCopyLogical: return "OpCopyLogical"; + case Op::OpPtrEqual: return "OpPtrEqual"; + case Op::OpPtrNotEqual: return "OpPtrNotEqual"; + case Op::OpPtrDiff: return "OpPtrDiff"; + case Op::OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT"; + case Op::OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT"; + case Op::OpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT"; + case Op::OpTerminateInvocation: return "OpTerminateInvocation"; + case Op::OpTypeUntypedPointerKHR: return "OpTypeUntypedPointerKHR"; + case Op::OpUntypedVariableKHR: return "OpUntypedVariableKHR"; + case Op::OpUntypedAccessChainKHR: return "OpUntypedAccessChainKHR"; + case Op::OpUntypedInBoundsAccessChainKHR: return "OpUntypedInBoundsAccessChainKHR"; + case Op::OpSubgroupBallotKHR: return "OpSubgroupBallotKHR"; + case Op::OpSubgroupFirstInvocationKHR: return "OpSubgroupFirstInvocationKHR"; + case Op::OpUntypedPtrAccessChainKHR: return "OpUntypedPtrAccessChainKHR"; + case Op::OpUntypedInBoundsPtrAccessChainKHR: return "OpUntypedInBoundsPtrAccessChainKHR"; + case Op::OpUntypedArrayLengthKHR: return "OpUntypedArrayLengthKHR"; + case Op::OpUntypedPrefetchKHR: return "OpUntypedPrefetchKHR"; + case Op::OpSubgroupAllKHR: return "OpSubgroupAllKHR"; + case Op::OpSubgroupAnyKHR: return "OpSubgroupAnyKHR"; + case Op::OpSubgroupAllEqualKHR: return "OpSubgroupAllEqualKHR"; + case Op::OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR"; + case Op::OpSubgroupReadInvocationKHR: return "OpSubgroupReadInvocationKHR"; + case Op::OpExtInstWithForwardRefsKHR: return "OpExtInstWithForwardRefsKHR"; + case Op::OpTraceRayKHR: return "OpTraceRayKHR"; + case Op::OpExecuteCallableKHR: return "OpExecuteCallableKHR"; + case Op::OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR"; + case Op::OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR"; + case Op::OpTerminateRayKHR: return "OpTerminateRayKHR"; + case Op::OpSDot: return "OpSDot"; + case Op::OpUDot: return "OpUDot"; + case Op::OpSUDot: return "OpSUDot"; + case Op::OpSDotAccSat: return "OpSDotAccSat"; + case Op::OpUDotAccSat: return "OpUDotAccSat"; + case Op::OpSUDotAccSat: return "OpSUDotAccSat"; + case Op::OpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR"; + case Op::OpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR"; + case Op::OpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR"; + case Op::OpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR"; + case Op::OpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR"; + case Op::OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT"; + case Op::OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT"; + case Op::OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT"; + case Op::OpTypeRayQueryKHR: return "OpTypeRayQueryKHR"; + case Op::OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR"; + case Op::OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR"; + case Op::OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR"; + case Op::OpRayQueryConfirmIntersectionKHR: return "OpRayQueryConfirmIntersectionKHR"; + case Op::OpRayQueryProceedKHR: return "OpRayQueryProceedKHR"; + case Op::OpRayQueryGetIntersectionTypeKHR: return "OpRayQueryGetIntersectionTypeKHR"; + case Op::OpImageSampleWeightedQCOM: return "OpImageSampleWeightedQCOM"; + case Op::OpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM"; + case Op::OpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM"; + case Op::OpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM"; + case Op::OpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM"; + case Op::OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM"; + case Op::OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM"; + case Op::OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM"; + case Op::OpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD"; + case Op::OpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD"; + case Op::OpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD"; + case Op::OpGroupUMinNonUniformAMD: return "OpGroupUMinNonUniformAMD"; + case Op::OpGroupSMinNonUniformAMD: return "OpGroupSMinNonUniformAMD"; + case Op::OpGroupFMaxNonUniformAMD: return "OpGroupFMaxNonUniformAMD"; + case Op::OpGroupUMaxNonUniformAMD: return "OpGroupUMaxNonUniformAMD"; + case Op::OpGroupSMaxNonUniformAMD: return "OpGroupSMaxNonUniformAMD"; + case Op::OpFragmentMaskFetchAMD: return "OpFragmentMaskFetchAMD"; + case Op::OpFragmentFetchAMD: return "OpFragmentFetchAMD"; + case Op::OpReadClockKHR: return "OpReadClockKHR"; + case Op::OpAllocateNodePayloadsAMDX: return "OpAllocateNodePayloadsAMDX"; + case Op::OpEnqueueNodePayloadsAMDX: return "OpEnqueueNodePayloadsAMDX"; + case Op::OpTypeNodePayloadArrayAMDX: return "OpTypeNodePayloadArrayAMDX"; + case Op::OpFinishWritingNodePayloadAMDX: return "OpFinishWritingNodePayloadAMDX"; + case Op::OpNodePayloadArrayLengthAMDX: return "OpNodePayloadArrayLengthAMDX"; + case Op::OpIsNodePayloadValidAMDX: return "OpIsNodePayloadValidAMDX"; + case Op::OpConstantStringAMDX: return "OpConstantStringAMDX"; + case Op::OpSpecConstantStringAMDX: return "OpSpecConstantStringAMDX"; + case Op::OpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR"; + case Op::OpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR"; + case Op::OpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV"; + case Op::OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV"; + case Op::OpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV"; + case Op::OpHitObjectGetWorldToObjectNV: return "OpHitObjectGetWorldToObjectNV"; + case Op::OpHitObjectGetObjectToWorldNV: return "OpHitObjectGetObjectToWorldNV"; + case Op::OpHitObjectGetObjectRayDirectionNV: return "OpHitObjectGetObjectRayDirectionNV"; + case Op::OpHitObjectGetObjectRayOriginNV: return "OpHitObjectGetObjectRayOriginNV"; + case Op::OpHitObjectTraceRayMotionNV: return "OpHitObjectTraceRayMotionNV"; + case Op::OpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV"; + case Op::OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV"; + case Op::OpHitObjectRecordEmptyNV: return "OpHitObjectRecordEmptyNV"; + case Op::OpHitObjectTraceRayNV: return "OpHitObjectTraceRayNV"; + case Op::OpHitObjectRecordHitNV: return "OpHitObjectRecordHitNV"; + case Op::OpHitObjectRecordHitWithIndexNV: return "OpHitObjectRecordHitWithIndexNV"; + case Op::OpHitObjectRecordMissNV: return "OpHitObjectRecordMissNV"; + case Op::OpHitObjectExecuteShaderNV: return "OpHitObjectExecuteShaderNV"; + case Op::OpHitObjectGetCurrentTimeNV: return "OpHitObjectGetCurrentTimeNV"; + case Op::OpHitObjectGetAttributesNV: return "OpHitObjectGetAttributesNV"; + case Op::OpHitObjectGetHitKindNV: return "OpHitObjectGetHitKindNV"; + case Op::OpHitObjectGetPrimitiveIndexNV: return "OpHitObjectGetPrimitiveIndexNV"; + case Op::OpHitObjectGetGeometryIndexNV: return "OpHitObjectGetGeometryIndexNV"; + case Op::OpHitObjectGetInstanceIdNV: return "OpHitObjectGetInstanceIdNV"; + case Op::OpHitObjectGetInstanceCustomIndexNV: return "OpHitObjectGetInstanceCustomIndexNV"; + case Op::OpHitObjectGetWorldRayDirectionNV: return "OpHitObjectGetWorldRayDirectionNV"; + case Op::OpHitObjectGetWorldRayOriginNV: return "OpHitObjectGetWorldRayOriginNV"; + case Op::OpHitObjectGetRayTMaxNV: return "OpHitObjectGetRayTMaxNV"; + case Op::OpHitObjectGetRayTMinNV: return "OpHitObjectGetRayTMinNV"; + case Op::OpHitObjectIsEmptyNV: return "OpHitObjectIsEmptyNV"; + case Op::OpHitObjectIsHitNV: return "OpHitObjectIsHitNV"; + case Op::OpHitObjectIsMissNV: return "OpHitObjectIsMissNV"; + case Op::OpReorderThreadWithHitObjectNV: return "OpReorderThreadWithHitObjectNV"; + case Op::OpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV"; + case Op::OpTypeHitObjectNV: return "OpTypeHitObjectNV"; + case Op::OpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; + case Op::OpTypeCooperativeVectorNV: return "OpTypeCooperativeVectorNV"; + case Op::OpCooperativeVectorMatrixMulNV: return "OpCooperativeVectorMatrixMulNV"; + case Op::OpCooperativeVectorOuterProductAccumulateNV: return "OpCooperativeVectorOuterProductAccumulateNV"; + case Op::OpCooperativeVectorReduceSumAccumulateNV: return "OpCooperativeVectorReduceSumAccumulateNV"; + case Op::OpCooperativeVectorMatrixMulAddNV: return "OpCooperativeVectorMatrixMulAddNV"; + case Op::OpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV"; + case Op::OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT"; + case Op::OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT"; + case Op::OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV"; + case Op::OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; + case Op::OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV"; + case Op::OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV"; + case Op::OpCooperativeVectorLoadNV: return "OpCooperativeVectorLoadNV"; + case Op::OpCooperativeVectorStoreNV: return "OpCooperativeVectorStoreNV"; + case Op::OpReportIntersectionKHR: return "OpReportIntersectionKHR"; + case Op::OpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV"; + case Op::OpTerminateRayNV: return "OpTerminateRayNV"; + case Op::OpTraceNV: return "OpTraceNV"; + case Op::OpTraceMotionNV: return "OpTraceMotionNV"; + case Op::OpTraceRayMotionNV: return "OpTraceRayMotionNV"; + case Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR"; + case Op::OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR"; + case Op::OpExecuteCallableNV: return "OpExecuteCallableNV"; + case Op::OpRayQueryGetClusterIdNV: return "OpRayQueryGetClusterIdNV"; + case Op::OpHitObjectGetClusterIdNV: return "OpHitObjectGetClusterIdNV"; + case Op::OpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV"; + case Op::OpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV"; + case Op::OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV"; + case Op::OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV"; + case Op::OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV"; + case Op::OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT"; + case Op::OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT"; + case Op::OpCooperativeMatrixReduceNV: return "OpCooperativeMatrixReduceNV"; + case Op::OpCooperativeMatrixLoadTensorNV: return "OpCooperativeMatrixLoadTensorNV"; + case Op::OpCooperativeMatrixStoreTensorNV: return "OpCooperativeMatrixStoreTensorNV"; + case Op::OpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV"; + case Op::OpTypeTensorLayoutNV: return "OpTypeTensorLayoutNV"; + case Op::OpTypeTensorViewNV: return "OpTypeTensorViewNV"; + case Op::OpCreateTensorLayoutNV: return "OpCreateTensorLayoutNV"; + case Op::OpTensorLayoutSetDimensionNV: return "OpTensorLayoutSetDimensionNV"; + case Op::OpTensorLayoutSetStrideNV: return "OpTensorLayoutSetStrideNV"; + case Op::OpTensorLayoutSliceNV: return "OpTensorLayoutSliceNV"; + case Op::OpTensorLayoutSetClampValueNV: return "OpTensorLayoutSetClampValueNV"; + case Op::OpCreateTensorViewNV: return "OpCreateTensorViewNV"; + case Op::OpTensorViewSetDimensionNV: return "OpTensorViewSetDimensionNV"; + case Op::OpTensorViewSetStrideNV: return "OpTensorViewSetStrideNV"; + case Op::OpDemoteToHelperInvocation: return "OpDemoteToHelperInvocation"; + case Op::OpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT"; + case Op::OpTensorViewSetClipNV: return "OpTensorViewSetClipNV"; + case Op::OpTensorLayoutSetBlockSizeNV: return "OpTensorLayoutSetBlockSizeNV"; + case Op::OpCooperativeMatrixTransposeNV: return "OpCooperativeMatrixTransposeNV"; + case Op::OpConvertUToImageNV: return "OpConvertUToImageNV"; + case Op::OpConvertUToSamplerNV: return "OpConvertUToSamplerNV"; + case Op::OpConvertImageToUNV: return "OpConvertImageToUNV"; + case Op::OpConvertSamplerToUNV: return "OpConvertSamplerToUNV"; + case Op::OpConvertUToSampledImageNV: return "OpConvertUToSampledImageNV"; + case Op::OpConvertSampledImageToUNV: return "OpConvertSampledImageToUNV"; + case Op::OpSamplerImageAddressingModeNV: return "OpSamplerImageAddressingModeNV"; + case Op::OpRawAccessChainNV: return "OpRawAccessChainNV"; + case Op::OpRayQueryGetIntersectionSpherePositionNV: return "OpRayQueryGetIntersectionSpherePositionNV"; + case Op::OpRayQueryGetIntersectionSphereRadiusNV: return "OpRayQueryGetIntersectionSphereRadiusNV"; + case Op::OpRayQueryGetIntersectionLSSPositionsNV: return "OpRayQueryGetIntersectionLSSPositionsNV"; + case Op::OpRayQueryGetIntersectionLSSRadiiNV: return "OpRayQueryGetIntersectionLSSRadiiNV"; + case Op::OpRayQueryGetIntersectionLSSHitValueNV: return "OpRayQueryGetIntersectionLSSHitValueNV"; + case Op::OpHitObjectGetSpherePositionNV: return "OpHitObjectGetSpherePositionNV"; + case Op::OpHitObjectGetSphereRadiusNV: return "OpHitObjectGetSphereRadiusNV"; + case Op::OpHitObjectGetLSSPositionsNV: return "OpHitObjectGetLSSPositionsNV"; + case Op::OpHitObjectGetLSSRadiiNV: return "OpHitObjectGetLSSRadiiNV"; + case Op::OpHitObjectIsSphereHitNV: return "OpHitObjectIsSphereHitNV"; + case Op::OpHitObjectIsLSSHitNV: return "OpHitObjectIsLSSHitNV"; + case Op::OpRayQueryIsSphereHitNV: return "OpRayQueryIsSphereHitNV"; + case Op::OpRayQueryIsLSSHitNV: return "OpRayQueryIsLSSHitNV"; + case Op::OpSubgroupShuffleINTEL: return "OpSubgroupShuffleINTEL"; + case Op::OpSubgroupShuffleDownINTEL: return "OpSubgroupShuffleDownINTEL"; + case Op::OpSubgroupShuffleUpINTEL: return "OpSubgroupShuffleUpINTEL"; + case Op::OpSubgroupShuffleXorINTEL: return "OpSubgroupShuffleXorINTEL"; + case Op::OpSubgroupBlockReadINTEL: return "OpSubgroupBlockReadINTEL"; + case Op::OpSubgroupBlockWriteINTEL: return "OpSubgroupBlockWriteINTEL"; + case Op::OpSubgroupImageBlockReadINTEL: return "OpSubgroupImageBlockReadINTEL"; + case Op::OpSubgroupImageBlockWriteINTEL: return "OpSubgroupImageBlockWriteINTEL"; + case Op::OpSubgroupImageMediaBlockReadINTEL: return "OpSubgroupImageMediaBlockReadINTEL"; + case Op::OpSubgroupImageMediaBlockWriteINTEL: return "OpSubgroupImageMediaBlockWriteINTEL"; + case Op::OpUCountLeadingZerosINTEL: return "OpUCountLeadingZerosINTEL"; + case Op::OpUCountTrailingZerosINTEL: return "OpUCountTrailingZerosINTEL"; + case Op::OpAbsISubINTEL: return "OpAbsISubINTEL"; + case Op::OpAbsUSubINTEL: return "OpAbsUSubINTEL"; + case Op::OpIAddSatINTEL: return "OpIAddSatINTEL"; + case Op::OpUAddSatINTEL: return "OpUAddSatINTEL"; + case Op::OpIAverageINTEL: return "OpIAverageINTEL"; + case Op::OpUAverageINTEL: return "OpUAverageINTEL"; + case Op::OpIAverageRoundedINTEL: return "OpIAverageRoundedINTEL"; + case Op::OpUAverageRoundedINTEL: return "OpUAverageRoundedINTEL"; + case Op::OpISubSatINTEL: return "OpISubSatINTEL"; + case Op::OpUSubSatINTEL: return "OpUSubSatINTEL"; + case Op::OpIMul32x16INTEL: return "OpIMul32x16INTEL"; + case Op::OpUMul32x16INTEL: return "OpUMul32x16INTEL"; + case Op::OpConstantFunctionPointerINTEL: return "OpConstantFunctionPointerINTEL"; + case Op::OpFunctionPointerCallINTEL: return "OpFunctionPointerCallINTEL"; + case Op::OpAsmTargetINTEL: return "OpAsmTargetINTEL"; + case Op::OpAsmINTEL: return "OpAsmINTEL"; + case Op::OpAsmCallINTEL: return "OpAsmCallINTEL"; + case Op::OpAtomicFMinEXT: return "OpAtomicFMinEXT"; + case Op::OpAtomicFMaxEXT: return "OpAtomicFMaxEXT"; + case Op::OpAssumeTrueKHR: return "OpAssumeTrueKHR"; + case Op::OpExpectKHR: return "OpExpectKHR"; + case Op::OpDecorateString: return "OpDecorateString"; + case Op::OpMemberDecorateString: return "OpMemberDecorateString"; + case Op::OpVmeImageINTEL: return "OpVmeImageINTEL"; + case Op::OpTypeVmeImageINTEL: return "OpTypeVmeImageINTEL"; + case Op::OpTypeAvcImePayloadINTEL: return "OpTypeAvcImePayloadINTEL"; + case Op::OpTypeAvcRefPayloadINTEL: return "OpTypeAvcRefPayloadINTEL"; + case Op::OpTypeAvcSicPayloadINTEL: return "OpTypeAvcSicPayloadINTEL"; + case Op::OpTypeAvcMcePayloadINTEL: return "OpTypeAvcMcePayloadINTEL"; + case Op::OpTypeAvcMceResultINTEL: return "OpTypeAvcMceResultINTEL"; + case Op::OpTypeAvcImeResultINTEL: return "OpTypeAvcImeResultINTEL"; + case Op::OpTypeAvcImeResultSingleReferenceStreamoutINTEL: return "OpTypeAvcImeResultSingleReferenceStreamoutINTEL"; + case Op::OpTypeAvcImeResultDualReferenceStreamoutINTEL: return "OpTypeAvcImeResultDualReferenceStreamoutINTEL"; + case Op::OpTypeAvcImeSingleReferenceStreaminINTEL: return "OpTypeAvcImeSingleReferenceStreaminINTEL"; + case Op::OpTypeAvcImeDualReferenceStreaminINTEL: return "OpTypeAvcImeDualReferenceStreaminINTEL"; + case Op::OpTypeAvcRefResultINTEL: return "OpTypeAvcRefResultINTEL"; + case Op::OpTypeAvcSicResultINTEL: return "OpTypeAvcSicResultINTEL"; + case Op::OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL"; + case Op::OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL"; + case Op::OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL"; + case Op::OpSubgroupAvcMceSetInterShapePenaltyINTEL: return "OpSubgroupAvcMceSetInterShapePenaltyINTEL"; + case Op::OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL"; + case Op::OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceSetInterDirectionPenaltyINTEL"; + case Op::OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL"; + case Op::OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: return "OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL"; + case Op::OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL"; + case Op::OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL"; + case Op::OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL"; + case Op::OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: return "OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL"; + case Op::OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL"; + case Op::OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL"; + case Op::OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL"; + case Op::OpSubgroupAvcMceSetAcOnlyHaarINTEL: return "OpSubgroupAvcMceSetAcOnlyHaarINTEL"; + case Op::OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL"; + case Op::OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL"; + case Op::OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL"; + case Op::OpSubgroupAvcMceConvertToImePayloadINTEL: return "OpSubgroupAvcMceConvertToImePayloadINTEL"; + case Op::OpSubgroupAvcMceConvertToImeResultINTEL: return "OpSubgroupAvcMceConvertToImeResultINTEL"; + case Op::OpSubgroupAvcMceConvertToRefPayloadINTEL: return "OpSubgroupAvcMceConvertToRefPayloadINTEL"; + case Op::OpSubgroupAvcMceConvertToRefResultINTEL: return "OpSubgroupAvcMceConvertToRefResultINTEL"; + case Op::OpSubgroupAvcMceConvertToSicPayloadINTEL: return "OpSubgroupAvcMceConvertToSicPayloadINTEL"; + case Op::OpSubgroupAvcMceConvertToSicResultINTEL: return "OpSubgroupAvcMceConvertToSicResultINTEL"; + case Op::OpSubgroupAvcMceGetMotionVectorsINTEL: return "OpSubgroupAvcMceGetMotionVectorsINTEL"; + case Op::OpSubgroupAvcMceGetInterDistortionsINTEL: return "OpSubgroupAvcMceGetInterDistortionsINTEL"; + case Op::OpSubgroupAvcMceGetBestInterDistortionsINTEL: return "OpSubgroupAvcMceGetBestInterDistortionsINTEL"; + case Op::OpSubgroupAvcMceGetInterMajorShapeINTEL: return "OpSubgroupAvcMceGetInterMajorShapeINTEL"; + case Op::OpSubgroupAvcMceGetInterMinorShapeINTEL: return "OpSubgroupAvcMceGetInterMinorShapeINTEL"; + case Op::OpSubgroupAvcMceGetInterDirectionsINTEL: return "OpSubgroupAvcMceGetInterDirectionsINTEL"; + case Op::OpSubgroupAvcMceGetInterMotionVectorCountINTEL: return "OpSubgroupAvcMceGetInterMotionVectorCountINTEL"; + case Op::OpSubgroupAvcMceGetInterReferenceIdsINTEL: return "OpSubgroupAvcMceGetInterReferenceIdsINTEL"; + case Op::OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL"; + case Op::OpSubgroupAvcImeInitializeINTEL: return "OpSubgroupAvcImeInitializeINTEL"; + case Op::OpSubgroupAvcImeSetSingleReferenceINTEL: return "OpSubgroupAvcImeSetSingleReferenceINTEL"; + case Op::OpSubgroupAvcImeSetDualReferenceINTEL: return "OpSubgroupAvcImeSetDualReferenceINTEL"; + case Op::OpSubgroupAvcImeRefWindowSizeINTEL: return "OpSubgroupAvcImeRefWindowSizeINTEL"; + case Op::OpSubgroupAvcImeAdjustRefOffsetINTEL: return "OpSubgroupAvcImeAdjustRefOffsetINTEL"; + case Op::OpSubgroupAvcImeConvertToMcePayloadINTEL: return "OpSubgroupAvcImeConvertToMcePayloadINTEL"; + case Op::OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: return "OpSubgroupAvcImeSetMaxMotionVectorCountINTEL"; + case Op::OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: return "OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL"; + case Op::OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: return "OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL"; + case Op::OpSubgroupAvcImeSetWeightedSadINTEL: return "OpSubgroupAvcImeSetWeightedSadINTEL"; + case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL"; + case Op::OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceINTEL"; + case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL"; + case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL"; + case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL"; + case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL"; + case Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL"; + case Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL"; + case Op::OpSubgroupAvcImeConvertToMceResultINTEL: return "OpSubgroupAvcImeConvertToMceResultINTEL"; + case Op::OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeGetSingleReferenceStreaminINTEL"; + case Op::OpSubgroupAvcImeGetDualReferenceStreaminINTEL: return "OpSubgroupAvcImeGetDualReferenceStreaminINTEL"; + case Op::OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL"; + case Op::OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripDualReferenceStreamoutINTEL"; + case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL"; + case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL"; + case Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL"; + case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL"; + case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL"; + case Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL"; + case Op::OpSubgroupAvcImeGetBorderReachedINTEL: return "OpSubgroupAvcImeGetBorderReachedINTEL"; + case Op::OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: return "OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL"; + case Op::OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: return "OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL"; + case Op::OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL"; + case Op::OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL"; + case Op::OpSubgroupAvcFmeInitializeINTEL: return "OpSubgroupAvcFmeInitializeINTEL"; + case Op::OpSubgroupAvcBmeInitializeINTEL: return "OpSubgroupAvcBmeInitializeINTEL"; + case Op::OpSubgroupAvcRefConvertToMcePayloadINTEL: return "OpSubgroupAvcRefConvertToMcePayloadINTEL"; + case Op::OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: return "OpSubgroupAvcRefSetBidirectionalMixDisableINTEL"; + case Op::OpSubgroupAvcRefSetBilinearFilterEnableINTEL: return "OpSubgroupAvcRefSetBilinearFilterEnableINTEL"; + case Op::OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL"; + case Op::OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithDualReferenceINTEL"; + case Op::OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL"; + case Op::OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL"; + case Op::OpSubgroupAvcRefConvertToMceResultINTEL: return "OpSubgroupAvcRefConvertToMceResultINTEL"; + case Op::OpSubgroupAvcSicInitializeINTEL: return "OpSubgroupAvcSicInitializeINTEL"; + case Op::OpSubgroupAvcSicConfigureSkcINTEL: return "OpSubgroupAvcSicConfigureSkcINTEL"; + case Op::OpSubgroupAvcSicConfigureIpeLumaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaINTEL"; + case Op::OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaChromaINTEL"; + case Op::OpSubgroupAvcSicGetMotionVectorMaskINTEL: return "OpSubgroupAvcSicGetMotionVectorMaskINTEL"; + case Op::OpSubgroupAvcSicConvertToMcePayloadINTEL: return "OpSubgroupAvcSicConvertToMcePayloadINTEL"; + case Op::OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL"; + case Op::OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL"; + case Op::OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL"; + case Op::OpSubgroupAvcSicSetBilinearFilterEnableINTEL: return "OpSubgroupAvcSicSetBilinearFilterEnableINTEL"; + case Op::OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: return "OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL"; + case Op::OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: return "OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL"; + case Op::OpSubgroupAvcSicEvaluateIpeINTEL: return "OpSubgroupAvcSicEvaluateIpeINTEL"; + case Op::OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL"; + case Op::OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithDualReferenceINTEL"; + case Op::OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL"; + case Op::OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL"; + case Op::OpSubgroupAvcSicConvertToMceResultINTEL: return "OpSubgroupAvcSicConvertToMceResultINTEL"; + case Op::OpSubgroupAvcSicGetIpeLumaShapeINTEL: return "OpSubgroupAvcSicGetIpeLumaShapeINTEL"; + case Op::OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL"; + case Op::OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL"; + case Op::OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: return "OpSubgroupAvcSicGetPackedIpeLumaModesINTEL"; + case Op::OpSubgroupAvcSicGetIpeChromaModeINTEL: return "OpSubgroupAvcSicGetIpeChromaModeINTEL"; + case Op::OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL"; + case Op::OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL"; + case Op::OpSubgroupAvcSicGetInterRawSadsINTEL: return "OpSubgroupAvcSicGetInterRawSadsINTEL"; + 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::OpArbitraryFloatLogINTEL: return "OpArbitraryFloatLogINTEL"; + case Op::OpArbitraryFloatLog2INTEL: return "OpArbitraryFloatLog2INTEL"; + case Op::OpArbitraryFloatLog10INTEL: return "OpArbitraryFloatLog10INTEL"; + case Op::OpArbitraryFloatLog1pINTEL: return "OpArbitraryFloatLog1pINTEL"; + case Op::OpArbitraryFloatExpINTEL: return "OpArbitraryFloatExpINTEL"; + case Op::OpArbitraryFloatExp2INTEL: return "OpArbitraryFloatExp2INTEL"; + case Op::OpArbitraryFloatExp10INTEL: return "OpArbitraryFloatExp10INTEL"; + case Op::OpArbitraryFloatExpm1INTEL: return "OpArbitraryFloatExpm1INTEL"; + case Op::OpArbitraryFloatSinINTEL: return "OpArbitraryFloatSinINTEL"; + case Op::OpArbitraryFloatCosINTEL: return "OpArbitraryFloatCosINTEL"; + case Op::OpArbitraryFloatSinCosINTEL: return "OpArbitraryFloatSinCosINTEL"; + case Op::OpArbitraryFloatSinPiINTEL: return "OpArbitraryFloatSinPiINTEL"; + case Op::OpArbitraryFloatCosPiINTEL: return "OpArbitraryFloatCosPiINTEL"; + case Op::OpArbitraryFloatASinINTEL: return "OpArbitraryFloatASinINTEL"; + case Op::OpArbitraryFloatASinPiINTEL: return "OpArbitraryFloatASinPiINTEL"; + case Op::OpArbitraryFloatACosINTEL: return "OpArbitraryFloatACosINTEL"; + case Op::OpArbitraryFloatACosPiINTEL: return "OpArbitraryFloatACosPiINTEL"; + case Op::OpArbitraryFloatATanINTEL: return "OpArbitraryFloatATanINTEL"; + case Op::OpArbitraryFloatATanPiINTEL: return "OpArbitraryFloatATanPiINTEL"; + case Op::OpArbitraryFloatATan2INTEL: return "OpArbitraryFloatATan2INTEL"; + case Op::OpArbitraryFloatPowINTEL: return "OpArbitraryFloatPowINTEL"; + case Op::OpArbitraryFloatPowRINTEL: return "OpArbitraryFloatPowRINTEL"; + case Op::OpArbitraryFloatPowNINTEL: return "OpArbitraryFloatPowNINTEL"; + case Op::OpLoopControlINTEL: return "OpLoopControlINTEL"; + 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::OpRayQueryGetRayTMinKHR: return "OpRayQueryGetRayTMinKHR"; + case Op::OpRayQueryGetRayFlagsKHR: return "OpRayQueryGetRayFlagsKHR"; + case Op::OpRayQueryGetIntersectionTKHR: return "OpRayQueryGetIntersectionTKHR"; + case Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR: return "OpRayQueryGetIntersectionInstanceCustomIndexKHR"; + case Op::OpRayQueryGetIntersectionInstanceIdKHR: return "OpRayQueryGetIntersectionInstanceIdKHR"; + case Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR"; + case Op::OpRayQueryGetIntersectionGeometryIndexKHR: return "OpRayQueryGetIntersectionGeometryIndexKHR"; + case Op::OpRayQueryGetIntersectionPrimitiveIndexKHR: return "OpRayQueryGetIntersectionPrimitiveIndexKHR"; + case Op::OpRayQueryGetIntersectionBarycentricsKHR: return "OpRayQueryGetIntersectionBarycentricsKHR"; + case Op::OpRayQueryGetIntersectionFrontFaceKHR: return "OpRayQueryGetIntersectionFrontFaceKHR"; + case Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR"; + case Op::OpRayQueryGetIntersectionObjectRayDirectionKHR: return "OpRayQueryGetIntersectionObjectRayDirectionKHR"; + case Op::OpRayQueryGetIntersectionObjectRayOriginKHR: return "OpRayQueryGetIntersectionObjectRayOriginKHR"; + case Op::OpRayQueryGetWorldRayDirectionKHR: return "OpRayQueryGetWorldRayDirectionKHR"; + case Op::OpRayQueryGetWorldRayOriginKHR: return "OpRayQueryGetWorldRayOriginKHR"; + case Op::OpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR"; + case Op::OpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR"; + case Op::OpAtomicFAddEXT: return "OpAtomicFAddEXT"; + case Op::OpTypeBufferSurfaceINTEL: return "OpTypeBufferSurfaceINTEL"; + case Op::OpTypeStructContinuedINTEL: return "OpTypeStructContinuedINTEL"; + case Op::OpConstantCompositeContinuedINTEL: return "OpConstantCompositeContinuedINTEL"; + case Op::OpSpecConstantCompositeContinuedINTEL: return "OpSpecConstantCompositeContinuedINTEL"; + 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::OpArithmeticFenceEXT: return "OpArithmeticFenceEXT"; + case Op::OpSubgroupBlockPrefetchINTEL: return "OpSubgroupBlockPrefetchINTEL"; + case Op::OpSubgroup2DBlockLoadINTEL: return "OpSubgroup2DBlockLoadINTEL"; + case Op::OpSubgroup2DBlockLoadTransformINTEL: return "OpSubgroup2DBlockLoadTransformINTEL"; + case Op::OpSubgroup2DBlockLoadTransposeINTEL: return "OpSubgroup2DBlockLoadTransposeINTEL"; + case Op::OpSubgroup2DBlockPrefetchINTEL: return "OpSubgroup2DBlockPrefetchINTEL"; + case Op::OpSubgroup2DBlockStoreINTEL: return "OpSubgroup2DBlockStoreINTEL"; + case Op::OpSubgroupMatrixMultiplyAccumulateINTEL: return "OpSubgroupMatrixMultiplyAccumulateINTEL"; + case Op::OpGroupIMulKHR: return "OpGroupIMulKHR"; + case Op::OpGroupFMulKHR: return "OpGroupFMulKHR"; + case Op::OpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR"; + case Op::OpGroupBitwiseOrKHR: return "OpGroupBitwiseOrKHR"; + case Op::OpGroupBitwiseXorKHR: return "OpGroupBitwiseXorKHR"; + case Op::OpGroupLogicalAndKHR: return "OpGroupLogicalAndKHR"; + case Op::OpGroupLogicalOrKHR: return "OpGroupLogicalOrKHR"; + case Op::OpGroupLogicalXorKHR: return "OpGroupLogicalXorKHR"; + case Op::OpMaskedGatherINTEL: return "OpMaskedGatherINTEL"; + case Op::OpMaskedScatterINTEL: return "OpMaskedScatterINTEL"; + default: return "Unknown"; + } +} + +#endif /* SPV_ENABLE_UTILITY_CODE */ + +// Overload bitwise operators for mask bit combining + +constexpr ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } +constexpr ImageOperandsMask operator&(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) & unsigned(b)); } +constexpr ImageOperandsMask operator^(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) ^ unsigned(b)); } +constexpr ImageOperandsMask operator~(ImageOperandsMask a) { return ImageOperandsMask(~unsigned(a)); } +constexpr FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } +constexpr FPFastMathModeMask operator&(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) & unsigned(b)); } +constexpr FPFastMathModeMask operator^(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) ^ unsigned(b)); } +constexpr FPFastMathModeMask operator~(FPFastMathModeMask a) { return FPFastMathModeMask(~unsigned(a)); } +constexpr SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } +constexpr SelectionControlMask operator&(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) & unsigned(b)); } +constexpr SelectionControlMask operator^(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) ^ unsigned(b)); } +constexpr SelectionControlMask operator~(SelectionControlMask a) { return SelectionControlMask(~unsigned(a)); } +constexpr LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } +constexpr LoopControlMask operator&(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) & unsigned(b)); } +constexpr LoopControlMask operator^(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) ^ unsigned(b)); } +constexpr LoopControlMask operator~(LoopControlMask a) { return LoopControlMask(~unsigned(a)); } +constexpr FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } +constexpr FunctionControlMask operator&(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) & unsigned(b)); } +constexpr FunctionControlMask operator^(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) ^ unsigned(b)); } +constexpr FunctionControlMask operator~(FunctionControlMask a) { return FunctionControlMask(~unsigned(a)); } +constexpr MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } +constexpr MemorySemanticsMask operator&(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) & unsigned(b)); } +constexpr MemorySemanticsMask operator^(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) ^ unsigned(b)); } +constexpr MemorySemanticsMask operator~(MemorySemanticsMask a) { return MemorySemanticsMask(~unsigned(a)); } +constexpr MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } +constexpr MemoryAccessMask operator&(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) & unsigned(b)); } +constexpr MemoryAccessMask operator^(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) ^ unsigned(b)); } +constexpr MemoryAccessMask operator~(MemoryAccessMask a) { return MemoryAccessMask(~unsigned(a)); } +constexpr KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } +constexpr KernelProfilingInfoMask operator&(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) & unsigned(b)); } +constexpr KernelProfilingInfoMask operator^(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) ^ unsigned(b)); } +constexpr KernelProfilingInfoMask operator~(KernelProfilingInfoMask a) { return KernelProfilingInfoMask(~unsigned(a)); } +constexpr RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } +constexpr RayFlagsMask operator&(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) & unsigned(b)); } +constexpr RayFlagsMask operator^(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) ^ unsigned(b)); } +constexpr RayFlagsMask operator~(RayFlagsMask a) { return RayFlagsMask(~unsigned(a)); } +constexpr FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } +constexpr FragmentShadingRateMask operator&(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) & unsigned(b)); } +constexpr FragmentShadingRateMask operator^(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) ^ unsigned(b)); } +constexpr FragmentShadingRateMask operator~(FragmentShadingRateMask a) { return FragmentShadingRateMask(~unsigned(a)); } +constexpr CooperativeMatrixOperandsMask operator|(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) | unsigned(b)); } +constexpr CooperativeMatrixOperandsMask operator&(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) & unsigned(b)); } +constexpr CooperativeMatrixOperandsMask operator^(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) ^ unsigned(b)); } +constexpr CooperativeMatrixOperandsMask operator~(CooperativeMatrixOperandsMask a) { return CooperativeMatrixOperandsMask(~unsigned(a)); } +constexpr CooperativeMatrixReduceMask operator|(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) | unsigned(b)); } +constexpr CooperativeMatrixReduceMask operator&(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) & unsigned(b)); } +constexpr CooperativeMatrixReduceMask operator^(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) ^ unsigned(b)); } +constexpr CooperativeMatrixReduceMask operator~(CooperativeMatrixReduceMask a) { return CooperativeMatrixReduceMask(~unsigned(a)); } +constexpr TensorAddressingOperandsMask operator|(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) | unsigned(b)); } +constexpr TensorAddressingOperandsMask operator&(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) & unsigned(b)); } +constexpr TensorAddressingOperandsMask operator^(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) ^ unsigned(b)); } +constexpr TensorAddressingOperandsMask operator~(TensorAddressingOperandsMask a) { return TensorAddressingOperandsMask(~unsigned(a)); } +constexpr MatrixMultiplyAccumulateOperandsMask operator|(MatrixMultiplyAccumulateOperandsMask a, MatrixMultiplyAccumulateOperandsMask b) { return MatrixMultiplyAccumulateOperandsMask(unsigned(a) | unsigned(b)); } +constexpr MatrixMultiplyAccumulateOperandsMask operator&(MatrixMultiplyAccumulateOperandsMask a, MatrixMultiplyAccumulateOperandsMask b) { return MatrixMultiplyAccumulateOperandsMask(unsigned(a) & unsigned(b)); } +constexpr MatrixMultiplyAccumulateOperandsMask operator^(MatrixMultiplyAccumulateOperandsMask a, MatrixMultiplyAccumulateOperandsMask b) { return MatrixMultiplyAccumulateOperandsMask(unsigned(a) ^ unsigned(b)); } +constexpr MatrixMultiplyAccumulateOperandsMask operator~(MatrixMultiplyAccumulateOperandsMask a) { return MatrixMultiplyAccumulateOperandsMask(~unsigned(a)); } +constexpr RawAccessChainOperandsMask operator|(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) | unsigned(b)); } +constexpr RawAccessChainOperandsMask operator&(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) & unsigned(b)); } +constexpr RawAccessChainOperandsMask operator^(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) ^ unsigned(b)); } +constexpr RawAccessChainOperandsMask operator~(RawAccessChainOperandsMask a) { return RawAccessChainOperandsMask(~unsigned(a)); } + +} // end namespace spv + +#endif // #ifndef spirv_HPP + diff --git a/3rdparty/glslang/SPIRV/spvIR.h b/3rdparty/glslang/SPIRV/spvIR.h index e723f0e1e..f1039cfdb 100644 --- a/3rdparty/glslang/SPIRV/spvIR.h +++ b/3rdparty/glslang/SPIRV/spvIR.h @@ -47,7 +47,7 @@ #ifndef spvIR_H #define spvIR_H -#include "spirv.hpp" +#include "spirv.hpp11" #include #include @@ -67,7 +67,7 @@ class Module; const Id NoResult = 0; const Id NoType = 0; -const Decoration NoPrecision = DecorationMax; +const Decoration NoPrecision = Decoration::Max; #ifdef __GNUC__ # define POTENTIALLY_UNUSED __attribute__((unused)) @@ -77,15 +77,19 @@ const Decoration NoPrecision = DecorationMax; POTENTIALLY_UNUSED const MemorySemanticsMask MemorySemanticsAllMemory = - (MemorySemanticsMask)(MemorySemanticsUniformMemoryMask | - MemorySemanticsWorkgroupMemoryMask | - MemorySemanticsAtomicCounterMemoryMask | - MemorySemanticsImageMemoryMask); + (MemorySemanticsMask)(MemorySemanticsMask::UniformMemory | + MemorySemanticsMask::WorkgroupMemory | + MemorySemanticsMask::AtomicCounterMemory | + MemorySemanticsMask::ImageMemory); struct IdImmediate { bool isId; // true if word is an Id, false if word is an immediate unsigned word; IdImmediate(bool i, unsigned w) : isId(i), word(w) {} + IdImmediate(bool i, spv::MemoryAccessMask w) : isId(i), word((unsigned)w) {} + IdImmediate(bool i, spv::TensorAddressingOperandsMask w) : isId(i), word((unsigned)w) {} + IdImmediate(bool i, spv::ImageOperandsMask w) : isId(i), word((unsigned)w) {} + IdImmediate(bool i, spv::CooperativeMatrixOperandsMask w) : isId(i), word((unsigned)w) {} }; // @@ -119,6 +123,67 @@ public: operands.push_back(immediate); idOperand.push_back(false); } + + void addImmediateOperand(spv::StorageClass immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::ExecutionMode immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::ExecutionModel immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::Decoration immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::LinkageType immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::MemoryAccessMask immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::Capability immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::AddressingModel immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::MemoryModel immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::FPEncoding immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::SourceLanguage immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::Dim immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::FunctionControlMask immediate){ + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::SelectionControlMask immediate) { + addImmediateOperand((unsigned)immediate); + } + + void addImmediateOperand(spv::LoopControlMask immediate) { + addImmediateOperand((unsigned)immediate); + } + void setImmediateOperand(unsigned idx, unsigned int immediate) { assert(!idOperand[idx]); operands[idx] = immediate; @@ -128,7 +193,7 @@ public: { unsigned int word = 0; unsigned int shiftAmount = 0; - char c; + unsigned char c; do { c = *(str++); @@ -178,7 +243,7 @@ public: wordCount += (unsigned int)operands.size(); // Write out the beginning of the instruction - out.push_back(((wordCount) << WordCountShift) | opCode); + out.push_back(((wordCount) << WordCountShift) | (unsigned)opCode); if (typeId) out.push_back(typeId); if (resultId) @@ -190,10 +255,10 @@ public: } const char *getNameString() const { - if (opCode == OpString) { + if (opCode == Op::OpString) { return (const char *)&operands[0]; } else { - assert(opCode == OpName); + assert(opCode == Op::OpName); return (const char *)&operands[1]; } } @@ -266,8 +331,8 @@ public: if (instructions.size() < 2) return nullptr; const Instruction* nextToLast = (instructions.cend() - 2)->get(); switch (nextToLast->getOpCode()) { - case OpSelectionMerge: - case OpLoopMerge: + case Op::OpSelectionMerge: + case Op::OpLoopMerge: return nextToLast; default: return nullptr; @@ -284,7 +349,7 @@ public: assert(instructions.size() > 0); instructions.resize(1); successors.clear(); - addInstruction(std::unique_ptr(new Instruction(OpUnreachable))); + addInstruction(std::unique_ptr(new Instruction(Op::OpUnreachable))); } // Change this block into a canonical dead continue target branching to the // given header ID. Delete instructions as necessary. A canonical dead continue @@ -298,7 +363,7 @@ public: successors.clear(); // Add OpBranch back to the header. assert(header != nullptr); - Instruction* branch = new Instruction(OpBranch); + Instruction* branch = new Instruction(Op::OpBranch); branch->addIdOperand(header->getId()); addInstruction(std::unique_ptr(branch)); successors.push_back(header); @@ -307,14 +372,14 @@ public: bool isTerminated() const { switch (instructions.back()->getOpCode()) { - case OpBranch: - case OpBranchConditional: - case OpSwitch: - case OpKill: - case OpTerminateInvocation: - case OpReturn: - case OpReturnValue: - case OpUnreachable: + case Op::OpBranch: + case Op::OpBranchConditional: + case Op::OpSwitch: + case Op::OpKill: + case Op::OpTerminateInvocation: + case Op::OpReturn: + case Op::OpReturnValue: + case Op::OpUnreachable: return true; default: return false; @@ -411,14 +476,14 @@ public: Id getFuncTypeId() const { return functionInstruction.getIdOperand(1); } void setReturnPrecision(Decoration precision) { - if (precision == DecorationRelaxedPrecision) + if (precision == Decoration::RelaxedPrecision) reducedPrecisionReturn = true; } Decoration getReturnPrecision() const - { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; } + { return reducedPrecisionReturn ? Decoration::RelaxedPrecision : NoPrecision; } void setDebugLineInfo(Id fileName, int line, int column) { - lineInstruction = std::unique_ptr{new Instruction(OpLine)}; + lineInstruction = std::unique_ptr{new Instruction(Op::OpLine)}; lineInstruction->reserveOperands(3); lineInstruction->addIdOperand(fileName); lineInstruction->addImmediateOperand(line); @@ -431,13 +496,13 @@ public: void addParamPrecision(unsigned param, Decoration precision) { - if (precision == DecorationRelaxedPrecision) + if (precision == Decoration::RelaxedPrecision) reducedPrecisionParams.insert(param); } Decoration getParamPrecision(unsigned param) const { return reducedPrecisionParams.find(param) != reducedPrecisionParams.end() ? - DecorationRelaxedPrecision : NoPrecision; + Decoration::RelaxedPrecision : NoPrecision; } void dump(std::vector& out) const @@ -456,7 +521,7 @@ public: // Blocks inReadableOrder(blocks[0], [&out](const Block* b, ReachReason, Block*) { b->dump(out); }); - Instruction end(0, 0, OpFunctionEnd); + Instruction end(0, 0, Op::OpFunctionEnd); end.dump(out); } @@ -509,7 +574,7 @@ public: } StorageClass getStorageClass(Id typeId) const { - assert(idToInstruction[typeId]->getOpCode() == spv::OpTypePointer); + assert(idToInstruction[typeId]->getOpCode() == spv::Op::OpTypePointer); return (StorageClass)idToInstruction[typeId]->getImmediateOperand(0); } @@ -538,13 +603,13 @@ protected: // - all the OpFunctionParameter instructions __inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, LinkageType linkage, const std::string& name, Module& parent) : parent(parent), lineInstruction(nullptr), - functionInstruction(id, resultType, OpFunction), implicitThis(false), + functionInstruction(id, resultType, Op::OpFunction), implicitThis(false), reducedPrecisionReturn(false), linkType(linkage) { // OpFunction functionInstruction.reserveOperands(2); - functionInstruction.addImmediateOperand(FunctionControlMaskNone); + functionInstruction.addImmediateOperand(FunctionControlMask::MaskNone); functionInstruction.addIdOperand(functionType); parent.mapInstruction(&functionInstruction); parent.addFunction(this); @@ -553,13 +618,13 @@ __inline Function::Function(Id id, Id resultType, Id functionType, Id firstParam Instruction* typeInst = parent.getInstruction(functionType); int numParams = typeInst->getNumOperands() - 1; for (int p = 0; p < numParams; ++p) { - Instruction* param = new Instruction(firstParamId + p, typeInst->getIdOperand(p + 1), OpFunctionParameter); + Instruction* param = new Instruction(firstParamId + p, typeInst->getIdOperand(p + 1), Op::OpFunctionParameter); parent.mapInstruction(param); parameterInstructions.push_back(param); } // If importing/exporting, save the function name (without the mangled parameters) for the linkage decoration - if (linkType != LinkageTypeMax) { + if (linkType != LinkageType::Max) { exportName = name.substr(0, name.find_first_of('(')); } } @@ -573,7 +638,7 @@ __inline void Function::addLocalVariable(std::unique_ptr inst) __inline Block::Block(Id id, Function& parent) : parent(parent), unreachable(false) { - instructions.push_back(std::unique_ptr(new Instruction(id, NoType, OpLabel))); + instructions.push_back(std::unique_ptr(new Instruction(id, NoType, Op::OpLabel))); instructions.back()->setBlock(this); parent.getParent().mapInstruction(instructions.back().get()); } diff --git a/3rdparty/glslang/SPIRV/spvUtil.h b/3rdparty/glslang/SPIRV/spvUtil.h new file mode 100644 index 000000000..d772a30dd --- /dev/null +++ b/3rdparty/glslang/SPIRV/spvUtil.h @@ -0,0 +1,88 @@ +// +// Copyright (C) 2025 Jan Kelemen +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +#pragma once +#ifndef spvUtil_H +#define spvUtil_H + +#include +#include + +#include "spirv.hpp11" + +namespace spv { +__inline uint32_t operator&(uint32_t value, spv::MemoryAccessMask mask) { return value & (unsigned)mask; } + +__inline bool operator==(uint32_t word, spv::FPEncoding encoding) { return word == (unsigned)encoding; } +__inline bool operator!=(uint32_t word, spv::FPEncoding encoding) { return !(word == encoding); } + +__inline bool operator==(uint32_t word, spv::Decoration decoration) { return word == (unsigned)decoration; } +__inline bool operator!=(uint32_t word, spv::Decoration decoration) { return !(word == decoration); } + +__inline bool operator==(uint32_t word, spv::Op op) { return word == (unsigned)op; } +__inline bool operator!=(uint32_t word, spv::Op op) { return !(word == op); } + +__inline bool operator==(uint32_t word, spv::StorageClass storage) { return word == (unsigned)storage; } +__inline bool operator!=(uint32_t word, spv::StorageClass storage) { return !(word == storage); } + +__inline bool anySet(spv::MemoryAccessMask value, spv::MemoryAccessMask mask) +{ + return (value & mask) != spv::MemoryAccessMask::MaskNone; +} + +__inline bool anySet(spv::ImageOperandsMask value, spv::ImageOperandsMask mask) +{ + return (value & mask) != spv::ImageOperandsMask::MaskNone; +} + +__inline bool anySet(spv::MemorySemanticsMask value, spv::MemorySemanticsMask mask) +{ + return (value & mask) != spv::MemorySemanticsMask::MaskNone; +} + +__inline void addMask(uint32_t& word, spv::TensorAddressingOperandsMask mask) { word |= (unsigned)mask; } + +__inline void addMask(spv::CooperativeMatrixOperandsMask& word, spv::CooperativeMatrixOperandsMask mask) +{ + word = word | mask; +} + +template> +__inline To enumCast(Enum value) +{ + return static_cast(value); +} +} + +#endif // spvUtil_H diff --git a/3rdparty/glslang/StandAlone/StandAlone.cpp b/3rdparty/glslang/StandAlone/StandAlone.cpp index d2d9dce66..88ac68b76 100644 --- a/3rdparty/glslang/StandAlone/StandAlone.cpp +++ b/3rdparty/glslang/StandAlone/StandAlone.cpp @@ -112,6 +112,7 @@ enum TOptions : uint64_t { EOptionCompileOnly = (1ull << 32), EOptionDisplayErrorColumn = (1ull << 33), EOptionLinkTimeOptimization = (1ull << 34), + EOptionValidateCrossStageIO = (1ull << 35), }; bool targetHlslFunctionality1 = false; bool SpvToolsDisassembler = false; @@ -907,6 +908,8 @@ void ProcessArguments(std::vector>& workItem Options |= EOptionDisplayErrorColumn; } else if (lowerword == "lto") { Options |= EOptionLinkTimeOptimization; + } else if (lowerword == "validate-io") { + Options |= EOptionValidateCrossStageIO; } else if (lowerword == "help") { usage(); break; @@ -1095,6 +1098,10 @@ void ProcessArguments(std::vector>& workItem if ((Options & EOptionLinkTimeOptimization) && !(Options & EOptionLinkProgram)) Error("link time optimization requires -l for linking"); + // cross stage IO validation makes no sense unless linking + if ((Options & EOptionValidateCrossStageIO) && !(Options & EOptionLinkProgram)) + Error("cross stage IO validation requires -l for linking"); + // -o or -x makes no sense if there is no target binary if (binaryFileName && (Options & EOptionSpv) == 0) Error("no binary generation requested (e.g., -V)"); @@ -1185,6 +1192,8 @@ void SetMessageOptions(EShMessages& messages) messages = (EShMessages)(messages | EShMsgDisplayErrorColumn); if (Options & EOptionLinkTimeOptimization) messages = (EShMessages)(messages | EShMsgLinkTimeOptimization); + if (Options & EOptionValidateCrossStageIO) + messages = (EShMessages)(messages | EShMsgValidateCrossStageIO); } // @@ -2154,7 +2163,8 @@ void usage() " --no-link Only compile shader; do not link (GLSL-only)\n" " NOTE: this option will set the export linkage\n" " attribute on all functions\n" - " --lto perform link time optimization\n"); + " --lto perform link time optimization\n" + " --validate-io validate cross stage IO\n"); exit(EFailUsage); } diff --git a/3rdparty/glslang/build_info.h b/3rdparty/glslang/build_info.h index 6f73ec077..f78ec2a13 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 15 -#define GLSLANG_VERSION_MINOR 2 +#define GLSLANG_VERSION_MINOR 3 #define GLSLANG_VERSION_PATCH 0 #define GLSLANG_VERSION_FLAVOR "" diff --git a/3rdparty/glslang/glslang/Include/BaseTypes.h b/3rdparty/glslang/glslang/Include/BaseTypes.h index 1d33a6900..83eef226d 100644 --- a/3rdparty/glslang/glslang/Include/BaseTypes.h +++ b/3rdparty/glslang/glslang/Include/BaseTypes.h @@ -49,6 +49,7 @@ enum TBasicType { EbtFloat, EbtDouble, EbtFloat16, + EbtBFloat16, EbtInt8, EbtUint8, EbtInt16, @@ -602,6 +603,7 @@ __inline bool isTypeFloat(TBasicType type) case EbtFloat: case EbtDouble: case EbtFloat16: + case EbtBFloat16: return true; default: return false; @@ -614,6 +616,7 @@ __inline uint32_t GetNumBits(TBasicType type) case EbtInt8: case EbtUint8: return 8; + case EbtBFloat16: case EbtFloat16: case EbtInt16: case EbtUint16: diff --git a/3rdparty/glslang/glslang/Include/PoolAlloc.h b/3rdparty/glslang/glslang/Include/PoolAlloc.h index e84ac52cd..8a9284144 100644 --- a/3rdparty/glslang/glslang/Include/PoolAlloc.h +++ b/3rdparty/glslang/glslang/Include/PoolAlloc.h @@ -61,6 +61,8 @@ // class as the allocator (second) template argument. // +#include "visibility.h" + #include #include #include @@ -179,6 +181,7 @@ public: // Call allocate() to actually acquire memory. Returns nullptr if no memory // available, otherwise a properly aligned pointer to 'numBytes' of memory. // + GLSLANG_EXPORT_FOR_TESTS void* allocate(size_t numBytes); // @@ -255,6 +258,7 @@ private: // different times. But a simple use is to have a global pop // with everyone using the same global allocator. // +GLSLANG_EXPORT_FOR_TESTS extern TPoolAllocator& GetThreadPoolAllocator(); void SetThreadPoolAllocator(TPoolAllocator* poolAllocator); @@ -289,6 +293,7 @@ public: template pool_allocator(const pool_allocator& p) : allocator(p.getAllocator()) { } + GLSLANG_EXPORT_FOR_TESTS pointer allocate(size_type n) { return reinterpret_cast(getAllocator().allocate(n * sizeof(T))); } pointer allocate(size_type n, const void*) { diff --git a/3rdparty/glslang/glslang/Include/Types.h b/3rdparty/glslang/glslang/Include/Types.h index 4cf71beeb..1f5abf2e8 100644 --- a/3rdparty/glslang/glslang/Include/Types.h +++ b/3rdparty/glslang/glslang/Include/Types.h @@ -246,6 +246,7 @@ struct TSampler { // misnomer now; includes images, textures without sampler, case EbtInt: s.append("i"); break; case EbtUint: s.append("u"); break; case EbtFloat16: s.append("f16"); break; + case EbtBFloat16: s.append("bf16"); break; case EbtInt8: s.append("i8"); break; case EbtUint16: s.append("u8"); break; case EbtInt16: s.append("i16"); break; @@ -1854,7 +1855,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; } + virtual bool isFloatingDomain() const { return basicType == EbtFloat || basicType == EbtDouble || basicType == EbtFloat16 || basicType == EbtBFloat16; } virtual bool isIntegerDomain() const { switch (basicType) { @@ -1960,6 +1961,7 @@ public: case EbtFloat: case EbtDouble: case EbtFloat16: + case EbtBFloat16: case EbtInt8: case EbtUint8: case EbtInt16: @@ -1992,6 +1994,10 @@ public: { return containsBasicType(EbtFloat16); } + bool containsBFloat16() const + { + return containsBasicType(EbtBFloat16); + } bool contains64BitInt() const { return containsBasicType(EbtInt64) || containsBasicType(EbtUint64); @@ -2113,6 +2119,7 @@ public: case EbtVoid: return "void"; case EbtDouble: return "double"; case EbtFloat16: return "float16_t"; + case EbtBFloat16: return "bfloat16_t"; case EbtInt8: return "int8_t"; case EbtUint8: return "uint8_t"; case EbtInt16: return "int16_t"; @@ -2791,8 +2798,8 @@ public: else rv = false; } else if (isCoopMatKHR() && right.isCoopMatKHR()) { - if (getBasicType() == EbtFloat || getBasicType() == EbtFloat16) - rv = right.getBasicType() == EbtFloat || right.getBasicType() == EbtFloat16 || right.getBasicType() == EbtCoopmat; + if (getBasicType() == EbtFloat || getBasicType() == EbtFloat16 || getBasicType() == EbtBFloat16) + rv = right.getBasicType() == EbtFloat || right.getBasicType() == EbtFloat16 || right.getBasicType() == EbtBFloat16 || right.getBasicType() == EbtCoopmat; else if (getBasicType() == EbtUint || getBasicType() == EbtUint8 || getBasicType() == EbtUint16) rv = right.getBasicType() == EbtUint || right.getBasicType() == EbtUint8 || right.getBasicType() == EbtUint16 || right.getBasicType() == EbtCoopmat; else if (getBasicType() == EbtInt || getBasicType() == EbtInt8 || getBasicType() == EbtInt16) diff --git a/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h b/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h index d0bcced4d..34bfbdb9d 100644 --- a/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h +++ b/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h @@ -178,6 +178,7 @@ typedef enum { GLSLANG_MSG_ABSOLUTE_PATH = (1 << 16), GLSLANG_MSG_DISPLAY_ERROR_COLUMN = (1 << 17), GLSLANG_MSG_LINK_TIME_OPTIMIZATION_BIT = (1 << 18), + GLSLANG_MSG_VALIDATE_CROSS_STAGE_IO_BIT = (1 << 19), 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 11f7b2a67..2595bb122 100644 --- a/3rdparty/glslang/glslang/Include/intermediate.h +++ b/3rdparty/glslang/glslang/Include/intermediate.h @@ -611,6 +611,10 @@ enum TOperator { EOpConstructF16Mat4x2, EOpConstructF16Mat4x3, EOpConstructF16Mat4x4, + EOpConstructBFloat16, + EOpConstructBF16Vec2, + EOpConstructBF16Vec3, + EOpConstructBF16Vec4, EOpConstructStruct, EOpConstructTextureSampler, EOpConstructNonuniform, // expected to be transformed away, not present in final AST diff --git a/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp b/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp index 488ac8161..b07678153 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp @@ -151,6 +151,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TIntermTyped* right case EbtDouble: case EbtFloat: case EbtFloat16: + case EbtBFloat16: if (rightUnionArray[i].getDConst() != 0.0) newConstArray[i].setDConst(leftUnionArray[i].getDConst() / rightUnionArray[i].getDConst()); else if (leftUnionArray[i].getDConst() > 0.0) @@ -503,6 +504,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) switch (getType().getBasicType()) { case EbtDouble: case EbtFloat16: + case EbtBFloat16: case EbtFloat: valf = unionArray[i].getDConst(); srcType = CONV_FLOAT; @@ -551,6 +553,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) switch (returnType.getBasicType()) { case EbtDouble: case EbtFloat16: + case EbtBFloat16: case EbtFloat: dstType = CONV_FLOAT; break; @@ -621,6 +624,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) switch (returnType.getBasicType()) { case EbtDouble: case EbtFloat16: + case EbtBFloat16: case EbtFloat: newConstArray[i].setDConst(valf); break; case EbtInt8: @@ -652,6 +656,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) switch (getType().getBasicType()) { case EbtDouble: case EbtFloat16: + case EbtBFloat16: case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break; // Note: avoid UBSAN error regarding negating 0x80000000 case EbtInt: newConstArray[i].setIConst( @@ -944,6 +949,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) case EOpMin: switch(children[0]->getAsTyped()->getBasicType()) { case EbtFloat16: + case EbtBFloat16: case EbtFloat: case EbtDouble: newConstArray[comp].setDConst(std::min(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst())); @@ -978,6 +984,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) case EOpMax: switch(children[0]->getAsTyped()->getBasicType()) { case EbtFloat16: + case EbtBFloat16: case EbtFloat: case EbtDouble: newConstArray[comp].setDConst(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst())); @@ -1012,6 +1019,7 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) case EOpClamp: switch(children[0]->getAsTyped()->getBasicType()) { case EbtFloat16: + case EbtBFloat16: case EbtFloat: case EbtDouble: newConstArray[comp].setDConst(std::min(std::max(childConstUnions[0][arg0comp].getDConst(), childConstUnions[1][arg1comp].getDConst()), diff --git a/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp b/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp index 8aebdba4f..ad0f0ab90 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp @@ -3866,6 +3866,31 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "bvec3 notEqual(f16vec3, f16vec3);" "bvec4 notEqual(f16vec4, f16vec4);" + "bfloat16_t dot(bfloat16_t, bfloat16_t);" + "bfloat16_t dot(bf16vec2, bf16vec2);" + "bfloat16_t dot(bf16vec3, bf16vec3);" + "bfloat16_t dot(bf16vec4, bf16vec4);" + + "int16_t bfloat16BitsToIntEXT(bfloat16_t value);" + "i16vec2 bfloat16BitsToIntEXT(bf16vec2 value);" + "i16vec3 bfloat16BitsToIntEXT(bf16vec3 value);" + "i16vec4 bfloat16BitsToIntEXT(bf16vec4 value);" + + "uint16_t bfloat16BitsToUintEXT(bfloat16_t value);" + "u16vec2 bfloat16BitsToUintEXT(bf16vec2 value);" + "u16vec3 bfloat16BitsToUintEXT(bf16vec3 value);" + "u16vec4 bfloat16BitsToUintEXT(bf16vec4 value);" + + "bfloat16_t intBitsToBFloat16EXT(int16_t value);" + "bf16vec2 intBitsToBFloat16EXT(i16vec2 value);" + "bf16vec3 intBitsToBFloat16EXT(i16vec3 value);" + "bf16vec4 intBitsToBFloat16EXT(i16vec4 value);" + + "bfloat16_t uintBitsToBFloat16EXT(uint16_t value);" + "bf16vec2 uintBitsToBFloat16EXT(u16vec2 value);" + "bf16vec3 uintBitsToBFloat16EXT(u16vec3 value);" + "bf16vec4 uintBitsToBFloat16EXT(u16vec4 value);" + "\n"); } @@ -4618,6 +4643,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV { "float", "vec2", "vec4", "float16_t", "f16vec2", "f16vec4", + "bfloat16_t", "bf16vec2", "bf16vec4", "double", "dvec2", "dvec4", "int8_t", "i8vec2", "i8vec4", "int16_t", "i16vec2", "i16vec4", @@ -9498,6 +9524,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("dotAccSatEXT", 1, &E_GL_EXT_integer_dot_product); symbolTable.setFunctionExtensions("dotPacked4x8AccSatEXT", 1, &E_GL_EXT_integer_dot_product); } + + { + symbolTable.setFunctionExtensions("bfloat16BitsToIntEXT", 1, &E_GL_EXT_bfloat16); + symbolTable.setFunctionExtensions("bfloat16BitsToUintEXT", 1, &E_GL_EXT_bfloat16); + symbolTable.setFunctionExtensions("intBitsToBFloat16EXT", 1, &E_GL_EXT_bfloat16); + symbolTable.setFunctionExtensions("uintBitsToBFloat16EXT", 1, &E_GL_EXT_bfloat16); + } + break; case EShLangRayGen: @@ -10466,6 +10500,15 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("dotPacked4x8AccSatEXT", EOpDotPackedAccSatEXT); } + // GL_EXT_bfloat16 + if ((profile == EEsProfile && version >= 320) || + (profile != EEsProfile && version >= 450)) { + symbolTable.relateToOperator("bfloat16BitsToIntEXT", EOpFloatBitsToInt); + symbolTable.relateToOperator("bfloat16BitsToUintEXT", EOpFloatBitsToUint); + symbolTable.relateToOperator("intBitsToBFloat16EXT", EOpIntBitsToFloat); + symbolTable.relateToOperator("uintBitsToBFloat16EXT", EOpUintBitsToFloat); + } + // GL_KHR_shader_subgroup if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 140)) { diff --git a/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp b/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp index 58120d7e3..d162f32c6 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp @@ -399,6 +399,7 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, case EOpConstructUint64: newType = EbtUint64; break; case EOpConstructDouble: newType = EbtDouble; break; case EOpConstructFloat16: newType = EbtFloat16; break; + case EOpConstructBFloat16: newType = EbtBFloat16; break; default: break; // some compilers want this } @@ -428,7 +429,8 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, case EOpConstructBool: case EOpConstructFloat: case EOpConstructDouble: - case EOpConstructFloat16: { + case EOpConstructFloat16: + case EOpConstructBFloat16: { TIntermUnary* unary_node = child->getAsUnaryNode(); if (unary_node != nullptr) unary_node->updatePrecision(); @@ -569,6 +571,12 @@ bool TIntermediate::isConversionAllowed(TOperator op, TIntermTyped* node) const bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& newOp) const { + // bfloat16_t <-> bool not supported + if ((src == EbtBFloat16 && dst == EbtBool) || + (dst == EbtBFloat16 && src == EbtBool)) { + return false; + } + if ((isTypeInt(dst) || isTypeFloat(dst) || dst == EbtBool) && (isTypeInt(src) || isTypeFloat(src) || src == EbtBool)) { newOp = EOpConvNumeric; @@ -596,9 +604,10 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped node->getBasicType() == EbtInt || node->getBasicType() == EbtUint || node->getBasicType() == EbtInt64 || node->getBasicType() == EbtUint64); - bool convertToFloatTypes = (convertTo == EbtFloat16 || convertTo == EbtFloat || convertTo == EbtDouble); + bool convertToFloatTypes = (convertTo == EbtFloat16 || convertTo == EbtBFloat16 || convertTo == EbtFloat || convertTo == EbtDouble); bool convertFromFloatTypes = (node->getBasicType() == EbtFloat16 || + node->getBasicType() == EbtBFloat16 || node->getBasicType() == EbtFloat || node->getBasicType() == EbtDouble); @@ -848,6 +857,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt case EOpConstructUint: case EOpConstructDouble: case EOpConstructFloat16: + case EOpConstructBFloat16: case EOpConstructInt8: case EOpConstructUint8: case EOpConstructInt16: @@ -954,6 +964,9 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt // changing language sementics on the fly by asking what extensions are in use // - at the time of this writing (14-Aug-2020), no test results are changed by this. switch (op) { + case EOpConstructBFloat16: + canPromoteConstant = true; + break; case EOpConstructFloat16: canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float16); @@ -1256,6 +1269,7 @@ bool TIntermediate::isFPPromotion(TBasicType from, TBasicType to) const // floating-point promotions if (to == EbtDouble) { switch(from) { + case EbtBFloat16: case EbtFloat16: case EbtFloat: return true; @@ -1348,7 +1362,7 @@ bool TIntermediate::isIntegralConversion(TBasicType from, TBasicType to) const bool TIntermediate::isFPConversion(TBasicType from, TBasicType to) const { - if (to == EbtFloat && from == EbtFloat16) { + if (to == EbtFloat && (from == EbtFloat16 || from == EbtBFloat16)) { return true; } else { return false; @@ -1500,6 +1514,8 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtFloat16: return (version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64)) && numericFeatures.contains(TNumericFeatures::gpu_shader_half_float); + case EbtBFloat16: + return true; default: return false; } @@ -1516,6 +1532,8 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtFloat16: return numericFeatures.contains(TNumericFeatures::gpu_shader_half_float) || getSource() == EShSourceHlsl; + case EbtBFloat16: + return true; default: return false; } @@ -1724,6 +1742,10 @@ std::tuple TIntermediate::getConversionDestinationType(T (type1 == EbtFloat16 && canImplicitlyPromote(type0, EbtFloat16, op)) ) { res0 = EbtFloat16; res1 = EbtFloat16; + } else if ((type0 == EbtBFloat16 && canImplicitlyPromote(type1, EbtBFloat16, op)) || + (type1 == EbtBFloat16 && canImplicitlyPromote(type0, EbtBFloat16, op)) ) { + res0 = EbtBFloat16; + res1 = EbtBFloat16; } else if (isTypeInt(type0) && isTypeInt(type1) && (canImplicitlyPromote(type0, type1, op) || canImplicitlyPromote(type1, type0, op))) { if ((isTypeSignedInt(type0) && isTypeSignedInt(type1)) || @@ -2020,6 +2042,15 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const } } break; + case EbtBFloat16: + switch (type.getVectorSize()) { + case 1: op = EOpConstructBFloat16; break; + case 2: op = EOpConstructBF16Vec2; break; + case 3: op = EOpConstructBF16Vec3; break; + case 4: op = EOpConstructBF16Vec4; break; + default: break; // some compilers want this + } + break; case EbtInt8: switch(type.getVectorSize()) { case 1: op = EOpConstructInt8; break; @@ -2429,7 +2460,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); + assert(baseType == EbtFloat || baseType == EbtDouble || baseType == EbtFloat16 || baseType == EbtBFloat16); if (isEsProfile() && (baseType == EbtFloat || baseType == EbtFloat16)) { int exponent = 0; @@ -3683,6 +3714,7 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC #define TO_ALL(Get) \ switch (promoteTo) { \ + case EbtBFloat16: 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; \ @@ -3704,6 +3736,7 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC case EbtUint: TO_ALL(getUConst); break; case EbtBool: TO_ALL(getBConst); break; case EbtFloat16: TO_ALL(getDConst); break; + case EbtBFloat16: 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/LiveTraverser.h b/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h index 9b39b5983..0e9d748ca 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h +++ b/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h @@ -132,6 +132,47 @@ protected: return true; // traverse the whole subtree } + // To prune semantically dead paths in switch statements with constant expressions. + virtual bool visitSwitch(TVisit /* visit */, TIntermSwitch* node) + { + if (traverseAll) + return true; // traverse all code + + TIntermConstantUnion* constant = node->getCondition()->getAsConstantUnion(); + if (constant) { + TConstUnion switchValue = constant->getConstArray()[0]; + int liveBranch = -1; + const auto& body = node->getBody()->getSequence(); + for (unsigned int i = 0; i < body.size(); ++i) { + if (body[i]->getAsBranchNode()) { + if (body[i]->getAsBranchNode()->getFlowOp() == glslang::EOpCase) { + TConstUnion caseValue = + body[i]->getAsBranchNode()->getExpression()->getAsConstantUnion()->getConstArray()[0]; + if (switchValue == caseValue.getIConst()) { + liveBranch = (int)i; + break; + } + } else if (body[i]->getAsBranchNode()->getFlowOp() == glslang::EOpDefault) { + liveBranch = (int)i; + } + } + } + if (liveBranch != -1) { + for (int i = liveBranch; i < (int)body.size(); ++i) { + if (body[i]->getAsAggregate()) { + for (auto* inst : body[i]->getAsAggregate()->getSequence()) { + if (inst->getAsBranchNode() && (inst->getAsBranchNode()->getFlowOp() == glslang::EOpBreak)) + return false; // found and traversed the live case(s) + inst->traverse(this); + } + } + } + } + return false; // finished traversing all cases + } else + return true; // traverse the whole subtree + } + // Track live functions as well as uniforms, so that we don't visit dead functions // and only visit each function once. void addFunctionCall(TIntermAggregate* call) diff --git a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp index d19478042..ee3bad930 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp @@ -906,7 +906,8 @@ TIntermTyped* TParseContext::handleBinaryMath(const TSourceLoc& loc, const char* if (((left->getType().contains16BitFloat() || right->getType().contains16BitFloat()) && !float16Arithmetic()) || ((left->getType().contains16BitInt() || right->getType().contains16BitInt()) && !int16Arithmetic()) || - ((left->getType().contains8BitInt() || right->getType().contains8BitInt()) && !int8Arithmetic())) { + ((left->getType().contains8BitInt() || right->getType().contains8BitInt()) && !int8Arithmetic()) || + (left->getType().containsBFloat16() || right->getType().containsBFloat16())) { allowed = false; } @@ -933,7 +934,8 @@ TIntermTyped* TParseContext::handleUnaryMath(const TSourceLoc& loc, const char* bool allowed = true; if ((childNode->getType().contains16BitFloat() && !float16Arithmetic()) || (childNode->getType().contains16BitInt() && !int16Arithmetic()) || - (childNode->getType().contains8BitInt() && !int8Arithmetic())) { + (childNode->getType().contains8BitInt() && !int8Arithmetic()) || + (childNode->getType().containsBFloat16())) { allowed = false; } @@ -7102,6 +7104,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) case EbtFloat: case EbtDouble: case EbtFloat16: + case EbtBFloat16: break; default: error(loc, "cannot be applied to this type", "constant_id", ""); @@ -7809,6 +7812,7 @@ void TParseContext::typeParametersCheck(const TSourceLoc& loc, const TPublicType switch (publicType.typeParameters->basicType) { case EbtFloat: case EbtFloat16: + case EbtBFloat16: case EbtInt: case EbtInt8: case EbtInt16: @@ -8319,6 +8323,9 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden if (type.contains8BitInt()) requireInt8Arithmetic(loc, "qualifier", "(u)int8 types can only be in uniform block or buffer storage"); } + if (type.getBasicType() == EbtBFloat16 && + (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut)) + error(loc, "qualifier", "bfloat16 types not allowed as input/output", ""); if (type.getQualifier().storage == EvqtaskPayloadSharedEXT) intermediate.addTaskPayloadEXTCount(); @@ -8989,6 +8996,13 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T } break; + case EOpConstructBF16Vec2: + case EOpConstructBF16Vec3: + case EOpConstructBF16Vec4: + case EOpConstructBFloat16: + basicOp = EOpConstructBFloat16; + break; + case EOpConstructI8Vec2: case EOpConstructI8Vec3: case EOpConstructI8Vec4: diff --git a/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp b/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp index d2375a0e2..d5778d72c 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp @@ -537,6 +537,11 @@ const std::unordered_map KeywordMap { {"f16mat4x3",F16MAT4X3}, {"f16mat4x4",F16MAT4X4}, + {"bfloat16_t",BFLOAT16_T}, + {"bf16vec2",BF16VEC2}, + {"bf16vec3",BF16VEC3}, + {"bf16vec4",BF16VEC4}, + {"float32_t",FLOAT32_T}, {"f32vec2",F32VEC2}, {"f32vec3",F32VEC3}, @@ -1454,6 +1459,17 @@ int TScanContext::tokenizeIdentifier() return identifierOrType(); + case BFLOAT16_T: + case BF16VEC2: + case BF16VEC3: + case BF16VEC4: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_bfloat16)) + return keyword; + + return identifierOrType(); + case SAMPLERCUBEARRAY: case SAMPLERCUBEARRAYSHADOW: case ISAMPLERCUBEARRAY: diff --git a/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp b/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp index 040b21daf..3cb6687fa 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp @@ -1979,6 +1979,14 @@ bool TProgram::link(EShMessages messages) error = true; } + if (messages & EShMsgAST) { + for (int s = 0; s < EShLangCount; ++s) { + if (intermediate[s] == nullptr) + continue; + intermediate[s]->output(*infoSink, true); + } + } + return ! error; } @@ -2044,9 +2052,6 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages) } intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0); - if (messages & EShMsgAST) - intermediate[stage]->output(*infoSink, true); - return intermediate[stage]->getNumErrors() == 0; } @@ -2070,9 +2075,27 @@ bool TProgram::crossStageCheck(EShMessages messages) { activeStages.push_back(intermediate[s]); } + class TFinalLinkTraverser : public TIntermTraverser { + public: + TFinalLinkTraverser() { } + virtual ~TFinalLinkTraverser() { } + + virtual void visitSymbol(TIntermSymbol* symbol) + { + // Implicitly size arrays. + // If an unsized array is left as unsized, it effectively + // becomes run-time sized. + symbol->getWritableType().adoptImplicitArraySizes(false); + } + } finalLinkTraverser; + // no extra linking if there is only one stage - if (! (activeStages.size() > 1)) + if (! (activeStages.size() > 1)) { + if (activeStages.size() == 1 && activeStages[0]->getTreeRoot()) { + activeStages[0]->getTreeRoot()->traverse(&finalLinkTraverser); + } return true; + } // setup temporary tree to hold unfirom objects from different stages TIntermediate* firstIntermediate = activeStages.front(); @@ -2094,6 +2117,12 @@ bool TProgram::crossStageCheck(EShMessages messages) { } error |= uniforms.getNumErrors() != 0; + // update implicit array sizes across shader stages + for (unsigned int i = 0; i < activeStages.size(); ++i) { + activeStages[i]->mergeImplicitArraySizes(*infoSink, uniforms); + activeStages[i]->getTreeRoot()->traverse(&finalLinkTraverser); + } + // copy final definition of global block back into each stage for (unsigned int i = 0; i < activeStages.size(); ++i) { // We only want to merge into already existing global uniform blocks. @@ -2106,8 +2135,8 @@ bool TProgram::crossStageCheck(EShMessages messages) { // compare cross stage symbols for each stage boundary for (unsigned int i = 1; i < activeStages.size(); ++i) { - activeStages[i - 1]->checkStageIO(*infoSink, *activeStages[i]); - error |= (activeStages[i - 1]->getNumErrors() != 0); + activeStages[i - 1]->checkStageIO(*infoSink, *activeStages[i], messages); + error |= (activeStages[i - 1]->getNumErrors() != 0 || activeStages[i]->getNumErrors() != 0); } // if requested, optimize cross stage IO diff --git a/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp b/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp index ec53fe378..fcfa5df04 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp @@ -70,6 +70,7 @@ void TType::buildMangledName(TString& mangledName) const case EbtBool: mangledName += 'b'; break; case EbtDouble: mangledName += 'd'; break; case EbtFloat16: mangledName += "f16"; break; + case EbtBFloat16: mangledName += "bf16"; break; case EbtInt8: mangledName += "i8"; break; case EbtUint8: mangledName += "u8"; break; case EbtInt16: mangledName += "i16"; break; diff --git a/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp b/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp index 4e4246aa3..e20d8083b 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp @@ -378,6 +378,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_texture_array] = EBhDisable; extensionBehavior[E_GL_EXT_texture_offset_non_const] = EBhDisable; extensionBehavior[E_GL_EXT_nontemporal_keyword] = EBhDisable; + extensionBehavior[E_GL_EXT_bfloat16] = EBhDisable; // OVR extensions extensionBehavior[E_GL_OVR_multiview] = EBhDisable; @@ -612,6 +613,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_control_flow_attributes2 1\n" "#define GL_EXT_integer_dot_product 1\n" + "#define GL_EXT_bfloat16 1\n" ; if (spvVersion.spv == 0) { @@ -1276,6 +1278,16 @@ void TParseVersions::float16ScalarVectorCheck(const TSourceLoc& loc, const char* } } +void TParseVersions::bfloat16ScalarVectorCheck(const TSourceLoc& loc, const char* op, bool builtIn) +{ + if (!builtIn) { + const char* const extensions[] = { + E_GL_EXT_bfloat16, + }; + requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + } +} + // Call for any operation needing GLSL float32 data-type support. void TParseVersions::explicitFloat32Check(const TSourceLoc& loc, const char* op, bool builtIn) { diff --git a/3rdparty/glslang/glslang/MachineIndependent/Versions.h b/3rdparty/glslang/glslang/MachineIndependent/Versions.h index b7e2ba1dd..bd74a0f9c 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/Versions.h +++ b/3rdparty/glslang/glslang/MachineIndependent/Versions.h @@ -356,6 +356,8 @@ const char* const E_GL_EXT_texture_shadow_lod = "GL_EXT_texture_shadow_lod"; const char* const E_GL_EXT_integer_dot_product = "GL_EXT_integer_dot_product"; +const char* const E_GL_EXT_bfloat16 = "GL_EXT_bfloat16"; + // 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/glslang.y b/3rdparty/glslang/glslang/MachineIndependent/glslang.y index 6cd221ff3..006ca1645 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/glslang.y +++ b/3rdparty/glslang/glslang/MachineIndependent/glslang.y @@ -146,7 +146,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token UTEXTURE2D UTEXTURE3D UTEXTURECUBE UTEXTURE2DARRAY %token ATTRIBUTE VARYING -%token FLOAT16_T FLOAT32_T DOUBLE FLOAT64_T +%token BFLOAT16_T FLOAT16_T FLOAT32_T DOUBLE FLOAT64_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 @@ -157,6 +157,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token I8VEC2 I8VEC3 I8VEC4 %token U8VEC2 U8VEC3 U8VEC4 %token DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4 +%token BF16VEC2 BF16VEC3 BF16VEC4 %token F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4 %token F32VEC2 F32VEC3 F32VEC4 F32MAT2 F32MAT3 F32MAT4 %token F64VEC2 F64VEC3 F64VEC4 F64MAT2 F64MAT3 F64MAT4 @@ -1937,6 +1938,11 @@ type_specifier_nonarray $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtDouble; } + | BFLOAT16_T { + parseContext.bfloat16ScalarVectorCheck($1.loc, "bfloat16_t", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtBFloat16; + } | FLOAT16_T { parseContext.float16ScalarVectorCheck($1.loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); @@ -2016,6 +2022,24 @@ type_specifier_nonarray $$.basicType = EbtDouble; $$.setVector(4); } + | BF16VEC2 { + parseContext.bfloat16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtBFloat16; + $$.setVector(2); + } + | BF16VEC3 { + parseContext.bfloat16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtBFloat16; + $$.setVector(3); + } + | BF16VEC4 { + parseContext.bfloat16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtBFloat16; + $$.setVector(4); + } | F16VEC2 { parseContext.float16ScalarVectorCheck($1.loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); diff --git a/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp b/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp index c16143918..9cc9ac985 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp @@ -184,545 +184,549 @@ enum yysymbol_kind_t YYSYMBOL_UTEXTURE2DARRAY = 60, /* UTEXTURE2DARRAY */ YYSYMBOL_ATTRIBUTE = 61, /* ATTRIBUTE */ YYSYMBOL_VARYING = 62, /* VARYING */ - YYSYMBOL_FLOAT16_T = 63, /* FLOAT16_T */ - YYSYMBOL_FLOAT32_T = 64, /* FLOAT32_T */ - YYSYMBOL_DOUBLE = 65, /* DOUBLE */ - YYSYMBOL_FLOAT64_T = 66, /* FLOAT64_T */ - YYSYMBOL_INT64_T = 67, /* INT64_T */ - YYSYMBOL_UINT64_T = 68, /* UINT64_T */ - YYSYMBOL_INT32_T = 69, /* INT32_T */ - YYSYMBOL_UINT32_T = 70, /* UINT32_T */ - YYSYMBOL_INT16_T = 71, /* INT16_T */ - YYSYMBOL_UINT16_T = 72, /* UINT16_T */ - YYSYMBOL_INT8_T = 73, /* INT8_T */ - YYSYMBOL_UINT8_T = 74, /* UINT8_T */ - YYSYMBOL_I64VEC2 = 75, /* I64VEC2 */ - YYSYMBOL_I64VEC3 = 76, /* I64VEC3 */ - YYSYMBOL_I64VEC4 = 77, /* I64VEC4 */ - YYSYMBOL_U64VEC2 = 78, /* U64VEC2 */ - YYSYMBOL_U64VEC3 = 79, /* U64VEC3 */ - YYSYMBOL_U64VEC4 = 80, /* U64VEC4 */ - YYSYMBOL_I32VEC2 = 81, /* I32VEC2 */ - YYSYMBOL_I32VEC3 = 82, /* I32VEC3 */ - YYSYMBOL_I32VEC4 = 83, /* I32VEC4 */ - YYSYMBOL_U32VEC2 = 84, /* U32VEC2 */ - YYSYMBOL_U32VEC3 = 85, /* U32VEC3 */ - YYSYMBOL_U32VEC4 = 86, /* U32VEC4 */ - YYSYMBOL_I16VEC2 = 87, /* I16VEC2 */ - YYSYMBOL_I16VEC3 = 88, /* I16VEC3 */ - YYSYMBOL_I16VEC4 = 89, /* I16VEC4 */ - YYSYMBOL_U16VEC2 = 90, /* U16VEC2 */ - YYSYMBOL_U16VEC3 = 91, /* U16VEC3 */ - YYSYMBOL_U16VEC4 = 92, /* U16VEC4 */ - YYSYMBOL_I8VEC2 = 93, /* I8VEC2 */ - YYSYMBOL_I8VEC3 = 94, /* I8VEC3 */ - YYSYMBOL_I8VEC4 = 95, /* I8VEC4 */ - YYSYMBOL_U8VEC2 = 96, /* U8VEC2 */ - YYSYMBOL_U8VEC3 = 97, /* U8VEC3 */ - YYSYMBOL_U8VEC4 = 98, /* U8VEC4 */ - YYSYMBOL_DVEC2 = 99, /* DVEC2 */ - YYSYMBOL_DVEC3 = 100, /* DVEC3 */ - YYSYMBOL_DVEC4 = 101, /* DVEC4 */ - YYSYMBOL_DMAT2 = 102, /* DMAT2 */ - YYSYMBOL_DMAT3 = 103, /* DMAT3 */ - YYSYMBOL_DMAT4 = 104, /* DMAT4 */ - YYSYMBOL_F16VEC2 = 105, /* F16VEC2 */ - YYSYMBOL_F16VEC3 = 106, /* F16VEC3 */ - YYSYMBOL_F16VEC4 = 107, /* F16VEC4 */ - YYSYMBOL_F16MAT2 = 108, /* F16MAT2 */ - YYSYMBOL_F16MAT3 = 109, /* F16MAT3 */ - YYSYMBOL_F16MAT4 = 110, /* F16MAT4 */ - YYSYMBOL_F32VEC2 = 111, /* F32VEC2 */ - YYSYMBOL_F32VEC3 = 112, /* F32VEC3 */ - YYSYMBOL_F32VEC4 = 113, /* F32VEC4 */ - YYSYMBOL_F32MAT2 = 114, /* F32MAT2 */ - YYSYMBOL_F32MAT3 = 115, /* F32MAT3 */ - YYSYMBOL_F32MAT4 = 116, /* F32MAT4 */ - YYSYMBOL_F64VEC2 = 117, /* F64VEC2 */ - YYSYMBOL_F64VEC3 = 118, /* F64VEC3 */ - YYSYMBOL_F64VEC4 = 119, /* F64VEC4 */ - YYSYMBOL_F64MAT2 = 120, /* F64MAT2 */ - YYSYMBOL_F64MAT3 = 121, /* F64MAT3 */ - YYSYMBOL_F64MAT4 = 122, /* F64MAT4 */ - YYSYMBOL_DMAT2X2 = 123, /* DMAT2X2 */ - YYSYMBOL_DMAT2X3 = 124, /* DMAT2X3 */ - YYSYMBOL_DMAT2X4 = 125, /* DMAT2X4 */ - YYSYMBOL_DMAT3X2 = 126, /* DMAT3X2 */ - YYSYMBOL_DMAT3X3 = 127, /* DMAT3X3 */ - YYSYMBOL_DMAT3X4 = 128, /* DMAT3X4 */ - YYSYMBOL_DMAT4X2 = 129, /* DMAT4X2 */ - YYSYMBOL_DMAT4X3 = 130, /* DMAT4X3 */ - YYSYMBOL_DMAT4X4 = 131, /* DMAT4X4 */ - YYSYMBOL_F16MAT2X2 = 132, /* F16MAT2X2 */ - YYSYMBOL_F16MAT2X3 = 133, /* F16MAT2X3 */ - YYSYMBOL_F16MAT2X4 = 134, /* F16MAT2X4 */ - YYSYMBOL_F16MAT3X2 = 135, /* F16MAT3X2 */ - YYSYMBOL_F16MAT3X3 = 136, /* F16MAT3X3 */ - YYSYMBOL_F16MAT3X4 = 137, /* F16MAT3X4 */ - YYSYMBOL_F16MAT4X2 = 138, /* F16MAT4X2 */ - YYSYMBOL_F16MAT4X3 = 139, /* F16MAT4X3 */ - YYSYMBOL_F16MAT4X4 = 140, /* F16MAT4X4 */ - YYSYMBOL_F32MAT2X2 = 141, /* F32MAT2X2 */ - YYSYMBOL_F32MAT2X3 = 142, /* F32MAT2X3 */ - YYSYMBOL_F32MAT2X4 = 143, /* F32MAT2X4 */ - YYSYMBOL_F32MAT3X2 = 144, /* F32MAT3X2 */ - YYSYMBOL_F32MAT3X3 = 145, /* F32MAT3X3 */ - YYSYMBOL_F32MAT3X4 = 146, /* F32MAT3X4 */ - YYSYMBOL_F32MAT4X2 = 147, /* F32MAT4X2 */ - YYSYMBOL_F32MAT4X3 = 148, /* F32MAT4X3 */ - YYSYMBOL_F32MAT4X4 = 149, /* F32MAT4X4 */ - YYSYMBOL_F64MAT2X2 = 150, /* F64MAT2X2 */ - YYSYMBOL_F64MAT2X3 = 151, /* F64MAT2X3 */ - YYSYMBOL_F64MAT2X4 = 152, /* F64MAT2X4 */ - YYSYMBOL_F64MAT3X2 = 153, /* F64MAT3X2 */ - YYSYMBOL_F64MAT3X3 = 154, /* F64MAT3X3 */ - YYSYMBOL_F64MAT3X4 = 155, /* F64MAT3X4 */ - YYSYMBOL_F64MAT4X2 = 156, /* F64MAT4X2 */ - YYSYMBOL_F64MAT4X3 = 157, /* F64MAT4X3 */ - YYSYMBOL_F64MAT4X4 = 158, /* F64MAT4X4 */ - YYSYMBOL_ATOMIC_UINT = 159, /* ATOMIC_UINT */ - YYSYMBOL_ACCSTRUCTNV = 160, /* ACCSTRUCTNV */ - YYSYMBOL_ACCSTRUCTEXT = 161, /* ACCSTRUCTEXT */ - YYSYMBOL_RAYQUERYEXT = 162, /* RAYQUERYEXT */ - YYSYMBOL_FCOOPMATNV = 163, /* FCOOPMATNV */ - YYSYMBOL_ICOOPMATNV = 164, /* ICOOPMATNV */ - YYSYMBOL_UCOOPMATNV = 165, /* UCOOPMATNV */ - YYSYMBOL_COOPMAT = 166, /* COOPMAT */ - YYSYMBOL_COOPVECNV = 167, /* COOPVECNV */ - YYSYMBOL_HITOBJECTNV = 168, /* HITOBJECTNV */ - YYSYMBOL_HITOBJECTATTRNV = 169, /* HITOBJECTATTRNV */ - YYSYMBOL_TENSORLAYOUTNV = 170, /* TENSORLAYOUTNV */ - YYSYMBOL_TENSORVIEWNV = 171, /* TENSORVIEWNV */ - YYSYMBOL_SAMPLERCUBEARRAY = 172, /* SAMPLERCUBEARRAY */ - YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 173, /* SAMPLERCUBEARRAYSHADOW */ - YYSYMBOL_ISAMPLERCUBEARRAY = 174, /* ISAMPLERCUBEARRAY */ - YYSYMBOL_USAMPLERCUBEARRAY = 175, /* USAMPLERCUBEARRAY */ - YYSYMBOL_SAMPLER1D = 176, /* SAMPLER1D */ - YYSYMBOL_SAMPLER1DARRAY = 177, /* SAMPLER1DARRAY */ - YYSYMBOL_SAMPLER1DARRAYSHADOW = 178, /* SAMPLER1DARRAYSHADOW */ - YYSYMBOL_ISAMPLER1D = 179, /* ISAMPLER1D */ - YYSYMBOL_SAMPLER1DSHADOW = 180, /* SAMPLER1DSHADOW */ - YYSYMBOL_SAMPLER2DRECT = 181, /* SAMPLER2DRECT */ - YYSYMBOL_SAMPLER2DRECTSHADOW = 182, /* SAMPLER2DRECTSHADOW */ - YYSYMBOL_ISAMPLER2DRECT = 183, /* ISAMPLER2DRECT */ - YYSYMBOL_USAMPLER2DRECT = 184, /* USAMPLER2DRECT */ - YYSYMBOL_SAMPLERBUFFER = 185, /* SAMPLERBUFFER */ - YYSYMBOL_ISAMPLERBUFFER = 186, /* ISAMPLERBUFFER */ - YYSYMBOL_USAMPLERBUFFER = 187, /* USAMPLERBUFFER */ - YYSYMBOL_SAMPLER2DMS = 188, /* SAMPLER2DMS */ - YYSYMBOL_ISAMPLER2DMS = 189, /* ISAMPLER2DMS */ - YYSYMBOL_USAMPLER2DMS = 190, /* USAMPLER2DMS */ - YYSYMBOL_SAMPLER2DMSARRAY = 191, /* SAMPLER2DMSARRAY */ - YYSYMBOL_ISAMPLER2DMSARRAY = 192, /* ISAMPLER2DMSARRAY */ - YYSYMBOL_USAMPLER2DMSARRAY = 193, /* USAMPLER2DMSARRAY */ - YYSYMBOL_SAMPLEREXTERNALOES = 194, /* SAMPLEREXTERNALOES */ - YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 195, /* SAMPLEREXTERNAL2DY2YEXT */ - YYSYMBOL_ISAMPLER1DARRAY = 196, /* ISAMPLER1DARRAY */ - YYSYMBOL_USAMPLER1D = 197, /* USAMPLER1D */ - YYSYMBOL_USAMPLER1DARRAY = 198, /* USAMPLER1DARRAY */ - YYSYMBOL_F16SAMPLER1D = 199, /* F16SAMPLER1D */ - YYSYMBOL_F16SAMPLER2D = 200, /* F16SAMPLER2D */ - YYSYMBOL_F16SAMPLER3D = 201, /* F16SAMPLER3D */ - YYSYMBOL_F16SAMPLER2DRECT = 202, /* F16SAMPLER2DRECT */ - YYSYMBOL_F16SAMPLERCUBE = 203, /* F16SAMPLERCUBE */ - YYSYMBOL_F16SAMPLER1DARRAY = 204, /* F16SAMPLER1DARRAY */ - YYSYMBOL_F16SAMPLER2DARRAY = 205, /* F16SAMPLER2DARRAY */ - YYSYMBOL_F16SAMPLERCUBEARRAY = 206, /* F16SAMPLERCUBEARRAY */ - YYSYMBOL_F16SAMPLERBUFFER = 207, /* F16SAMPLERBUFFER */ - YYSYMBOL_F16SAMPLER2DMS = 208, /* F16SAMPLER2DMS */ - YYSYMBOL_F16SAMPLER2DMSARRAY = 209, /* F16SAMPLER2DMSARRAY */ - YYSYMBOL_F16SAMPLER1DSHADOW = 210, /* F16SAMPLER1DSHADOW */ - YYSYMBOL_F16SAMPLER2DSHADOW = 211, /* F16SAMPLER2DSHADOW */ - YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 212, /* F16SAMPLER1DARRAYSHADOW */ - YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 213, /* F16SAMPLER2DARRAYSHADOW */ - YYSYMBOL_F16SAMPLER2DRECTSHADOW = 214, /* F16SAMPLER2DRECTSHADOW */ - YYSYMBOL_F16SAMPLERCUBESHADOW = 215, /* F16SAMPLERCUBESHADOW */ - YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 216, /* F16SAMPLERCUBEARRAYSHADOW */ - YYSYMBOL_IMAGE1D = 217, /* IMAGE1D */ - YYSYMBOL_IIMAGE1D = 218, /* IIMAGE1D */ - YYSYMBOL_UIMAGE1D = 219, /* UIMAGE1D */ - YYSYMBOL_IMAGE2D = 220, /* IMAGE2D */ - YYSYMBOL_IIMAGE2D = 221, /* IIMAGE2D */ - YYSYMBOL_UIMAGE2D = 222, /* UIMAGE2D */ - YYSYMBOL_IMAGE3D = 223, /* IMAGE3D */ - YYSYMBOL_IIMAGE3D = 224, /* IIMAGE3D */ - YYSYMBOL_UIMAGE3D = 225, /* UIMAGE3D */ - YYSYMBOL_IMAGE2DRECT = 226, /* IMAGE2DRECT */ - YYSYMBOL_IIMAGE2DRECT = 227, /* IIMAGE2DRECT */ - YYSYMBOL_UIMAGE2DRECT = 228, /* UIMAGE2DRECT */ - YYSYMBOL_IMAGECUBE = 229, /* IMAGECUBE */ - YYSYMBOL_IIMAGECUBE = 230, /* IIMAGECUBE */ - YYSYMBOL_UIMAGECUBE = 231, /* UIMAGECUBE */ - YYSYMBOL_IMAGEBUFFER = 232, /* IMAGEBUFFER */ - YYSYMBOL_IIMAGEBUFFER = 233, /* IIMAGEBUFFER */ - YYSYMBOL_UIMAGEBUFFER = 234, /* UIMAGEBUFFER */ - YYSYMBOL_IMAGE1DARRAY = 235, /* IMAGE1DARRAY */ - YYSYMBOL_IIMAGE1DARRAY = 236, /* IIMAGE1DARRAY */ - YYSYMBOL_UIMAGE1DARRAY = 237, /* UIMAGE1DARRAY */ - YYSYMBOL_IMAGE2DARRAY = 238, /* IMAGE2DARRAY */ - YYSYMBOL_IIMAGE2DARRAY = 239, /* IIMAGE2DARRAY */ - YYSYMBOL_UIMAGE2DARRAY = 240, /* UIMAGE2DARRAY */ - YYSYMBOL_IMAGECUBEARRAY = 241, /* IMAGECUBEARRAY */ - YYSYMBOL_IIMAGECUBEARRAY = 242, /* IIMAGECUBEARRAY */ - YYSYMBOL_UIMAGECUBEARRAY = 243, /* UIMAGECUBEARRAY */ - YYSYMBOL_IMAGE2DMS = 244, /* IMAGE2DMS */ - YYSYMBOL_IIMAGE2DMS = 245, /* IIMAGE2DMS */ - YYSYMBOL_UIMAGE2DMS = 246, /* UIMAGE2DMS */ - YYSYMBOL_IMAGE2DMSARRAY = 247, /* IMAGE2DMSARRAY */ - YYSYMBOL_IIMAGE2DMSARRAY = 248, /* IIMAGE2DMSARRAY */ - YYSYMBOL_UIMAGE2DMSARRAY = 249, /* UIMAGE2DMSARRAY */ - YYSYMBOL_F16IMAGE1D = 250, /* F16IMAGE1D */ - YYSYMBOL_F16IMAGE2D = 251, /* F16IMAGE2D */ - YYSYMBOL_F16IMAGE3D = 252, /* F16IMAGE3D */ - YYSYMBOL_F16IMAGE2DRECT = 253, /* F16IMAGE2DRECT */ - YYSYMBOL_F16IMAGECUBE = 254, /* F16IMAGECUBE */ - YYSYMBOL_F16IMAGE1DARRAY = 255, /* F16IMAGE1DARRAY */ - YYSYMBOL_F16IMAGE2DARRAY = 256, /* F16IMAGE2DARRAY */ - YYSYMBOL_F16IMAGECUBEARRAY = 257, /* F16IMAGECUBEARRAY */ - YYSYMBOL_F16IMAGEBUFFER = 258, /* F16IMAGEBUFFER */ - YYSYMBOL_F16IMAGE2DMS = 259, /* F16IMAGE2DMS */ - YYSYMBOL_F16IMAGE2DMSARRAY = 260, /* F16IMAGE2DMSARRAY */ - YYSYMBOL_I64IMAGE1D = 261, /* I64IMAGE1D */ - YYSYMBOL_U64IMAGE1D = 262, /* U64IMAGE1D */ - YYSYMBOL_I64IMAGE2D = 263, /* I64IMAGE2D */ - YYSYMBOL_U64IMAGE2D = 264, /* U64IMAGE2D */ - YYSYMBOL_I64IMAGE3D = 265, /* I64IMAGE3D */ - YYSYMBOL_U64IMAGE3D = 266, /* U64IMAGE3D */ - YYSYMBOL_I64IMAGE2DRECT = 267, /* I64IMAGE2DRECT */ - YYSYMBOL_U64IMAGE2DRECT = 268, /* U64IMAGE2DRECT */ - YYSYMBOL_I64IMAGECUBE = 269, /* I64IMAGECUBE */ - YYSYMBOL_U64IMAGECUBE = 270, /* U64IMAGECUBE */ - YYSYMBOL_I64IMAGEBUFFER = 271, /* I64IMAGEBUFFER */ - YYSYMBOL_U64IMAGEBUFFER = 272, /* U64IMAGEBUFFER */ - YYSYMBOL_I64IMAGE1DARRAY = 273, /* I64IMAGE1DARRAY */ - YYSYMBOL_U64IMAGE1DARRAY = 274, /* U64IMAGE1DARRAY */ - YYSYMBOL_I64IMAGE2DARRAY = 275, /* I64IMAGE2DARRAY */ - YYSYMBOL_U64IMAGE2DARRAY = 276, /* U64IMAGE2DARRAY */ - YYSYMBOL_I64IMAGECUBEARRAY = 277, /* I64IMAGECUBEARRAY */ - YYSYMBOL_U64IMAGECUBEARRAY = 278, /* U64IMAGECUBEARRAY */ - YYSYMBOL_I64IMAGE2DMS = 279, /* I64IMAGE2DMS */ - YYSYMBOL_U64IMAGE2DMS = 280, /* U64IMAGE2DMS */ - YYSYMBOL_I64IMAGE2DMSARRAY = 281, /* I64IMAGE2DMSARRAY */ - YYSYMBOL_U64IMAGE2DMSARRAY = 282, /* U64IMAGE2DMSARRAY */ - YYSYMBOL_TEXTURECUBEARRAY = 283, /* TEXTURECUBEARRAY */ - YYSYMBOL_ITEXTURECUBEARRAY = 284, /* ITEXTURECUBEARRAY */ - YYSYMBOL_UTEXTURECUBEARRAY = 285, /* UTEXTURECUBEARRAY */ - YYSYMBOL_TEXTURE1D = 286, /* TEXTURE1D */ - YYSYMBOL_ITEXTURE1D = 287, /* ITEXTURE1D */ - YYSYMBOL_UTEXTURE1D = 288, /* UTEXTURE1D */ - YYSYMBOL_TEXTURE1DARRAY = 289, /* TEXTURE1DARRAY */ - YYSYMBOL_ITEXTURE1DARRAY = 290, /* ITEXTURE1DARRAY */ - YYSYMBOL_UTEXTURE1DARRAY = 291, /* UTEXTURE1DARRAY */ - YYSYMBOL_TEXTURE2DRECT = 292, /* TEXTURE2DRECT */ - YYSYMBOL_ITEXTURE2DRECT = 293, /* ITEXTURE2DRECT */ - YYSYMBOL_UTEXTURE2DRECT = 294, /* UTEXTURE2DRECT */ - YYSYMBOL_TEXTUREBUFFER = 295, /* TEXTUREBUFFER */ - YYSYMBOL_ITEXTUREBUFFER = 296, /* ITEXTUREBUFFER */ - YYSYMBOL_UTEXTUREBUFFER = 297, /* UTEXTUREBUFFER */ - YYSYMBOL_TEXTURE2DMS = 298, /* TEXTURE2DMS */ - YYSYMBOL_ITEXTURE2DMS = 299, /* ITEXTURE2DMS */ - YYSYMBOL_UTEXTURE2DMS = 300, /* UTEXTURE2DMS */ - YYSYMBOL_TEXTURE2DMSARRAY = 301, /* TEXTURE2DMSARRAY */ - YYSYMBOL_ITEXTURE2DMSARRAY = 302, /* ITEXTURE2DMSARRAY */ - YYSYMBOL_UTEXTURE2DMSARRAY = 303, /* UTEXTURE2DMSARRAY */ - YYSYMBOL_F16TEXTURE1D = 304, /* F16TEXTURE1D */ - YYSYMBOL_F16TEXTURE2D = 305, /* F16TEXTURE2D */ - YYSYMBOL_F16TEXTURE3D = 306, /* F16TEXTURE3D */ - YYSYMBOL_F16TEXTURE2DRECT = 307, /* F16TEXTURE2DRECT */ - YYSYMBOL_F16TEXTURECUBE = 308, /* F16TEXTURECUBE */ - YYSYMBOL_F16TEXTURE1DARRAY = 309, /* F16TEXTURE1DARRAY */ - YYSYMBOL_F16TEXTURE2DARRAY = 310, /* F16TEXTURE2DARRAY */ - YYSYMBOL_F16TEXTURECUBEARRAY = 311, /* F16TEXTURECUBEARRAY */ - YYSYMBOL_F16TEXTUREBUFFER = 312, /* F16TEXTUREBUFFER */ - YYSYMBOL_F16TEXTURE2DMS = 313, /* F16TEXTURE2DMS */ - YYSYMBOL_F16TEXTURE2DMSARRAY = 314, /* F16TEXTURE2DMSARRAY */ - YYSYMBOL_SUBPASSINPUT = 315, /* SUBPASSINPUT */ - YYSYMBOL_SUBPASSINPUTMS = 316, /* SUBPASSINPUTMS */ - YYSYMBOL_ISUBPASSINPUT = 317, /* ISUBPASSINPUT */ - YYSYMBOL_ISUBPASSINPUTMS = 318, /* ISUBPASSINPUTMS */ - YYSYMBOL_USUBPASSINPUT = 319, /* USUBPASSINPUT */ - YYSYMBOL_USUBPASSINPUTMS = 320, /* USUBPASSINPUTMS */ - YYSYMBOL_F16SUBPASSINPUT = 321, /* F16SUBPASSINPUT */ - YYSYMBOL_F16SUBPASSINPUTMS = 322, /* F16SUBPASSINPUTMS */ - YYSYMBOL_SPIRV_INSTRUCTION = 323, /* SPIRV_INSTRUCTION */ - YYSYMBOL_SPIRV_EXECUTION_MODE = 324, /* SPIRV_EXECUTION_MODE */ - YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 325, /* SPIRV_EXECUTION_MODE_ID */ - YYSYMBOL_SPIRV_DECORATE = 326, /* SPIRV_DECORATE */ - YYSYMBOL_SPIRV_DECORATE_ID = 327, /* SPIRV_DECORATE_ID */ - YYSYMBOL_SPIRV_DECORATE_STRING = 328, /* SPIRV_DECORATE_STRING */ - YYSYMBOL_SPIRV_TYPE = 329, /* SPIRV_TYPE */ - YYSYMBOL_SPIRV_STORAGE_CLASS = 330, /* SPIRV_STORAGE_CLASS */ - YYSYMBOL_SPIRV_BY_REFERENCE = 331, /* SPIRV_BY_REFERENCE */ - YYSYMBOL_SPIRV_LITERAL = 332, /* SPIRV_LITERAL */ - YYSYMBOL_ATTACHMENTEXT = 333, /* ATTACHMENTEXT */ - YYSYMBOL_IATTACHMENTEXT = 334, /* IATTACHMENTEXT */ - YYSYMBOL_UATTACHMENTEXT = 335, /* UATTACHMENTEXT */ - YYSYMBOL_LEFT_OP = 336, /* LEFT_OP */ - YYSYMBOL_RIGHT_OP = 337, /* RIGHT_OP */ - YYSYMBOL_INC_OP = 338, /* INC_OP */ - YYSYMBOL_DEC_OP = 339, /* DEC_OP */ - YYSYMBOL_LE_OP = 340, /* LE_OP */ - YYSYMBOL_GE_OP = 341, /* GE_OP */ - YYSYMBOL_EQ_OP = 342, /* EQ_OP */ - YYSYMBOL_NE_OP = 343, /* NE_OP */ - YYSYMBOL_AND_OP = 344, /* AND_OP */ - YYSYMBOL_OR_OP = 345, /* OR_OP */ - YYSYMBOL_XOR_OP = 346, /* XOR_OP */ - YYSYMBOL_MUL_ASSIGN = 347, /* MUL_ASSIGN */ - YYSYMBOL_DIV_ASSIGN = 348, /* DIV_ASSIGN */ - YYSYMBOL_ADD_ASSIGN = 349, /* ADD_ASSIGN */ - YYSYMBOL_MOD_ASSIGN = 350, /* MOD_ASSIGN */ - YYSYMBOL_LEFT_ASSIGN = 351, /* LEFT_ASSIGN */ - YYSYMBOL_RIGHT_ASSIGN = 352, /* RIGHT_ASSIGN */ - YYSYMBOL_AND_ASSIGN = 353, /* AND_ASSIGN */ - YYSYMBOL_XOR_ASSIGN = 354, /* XOR_ASSIGN */ - YYSYMBOL_OR_ASSIGN = 355, /* OR_ASSIGN */ - YYSYMBOL_SUB_ASSIGN = 356, /* SUB_ASSIGN */ - YYSYMBOL_STRING_LITERAL = 357, /* STRING_LITERAL */ - YYSYMBOL_LEFT_PAREN = 358, /* LEFT_PAREN */ - YYSYMBOL_RIGHT_PAREN = 359, /* RIGHT_PAREN */ - YYSYMBOL_LEFT_BRACKET = 360, /* LEFT_BRACKET */ - YYSYMBOL_RIGHT_BRACKET = 361, /* RIGHT_BRACKET */ - YYSYMBOL_LEFT_BRACE = 362, /* LEFT_BRACE */ - YYSYMBOL_RIGHT_BRACE = 363, /* RIGHT_BRACE */ - YYSYMBOL_DOT = 364, /* DOT */ - YYSYMBOL_COMMA = 365, /* COMMA */ - YYSYMBOL_COLON = 366, /* COLON */ - YYSYMBOL_EQUAL = 367, /* EQUAL */ - YYSYMBOL_SEMICOLON = 368, /* SEMICOLON */ - YYSYMBOL_BANG = 369, /* BANG */ - YYSYMBOL_DASH = 370, /* DASH */ - YYSYMBOL_TILDE = 371, /* TILDE */ - YYSYMBOL_PLUS = 372, /* PLUS */ - YYSYMBOL_STAR = 373, /* STAR */ - YYSYMBOL_SLASH = 374, /* SLASH */ - YYSYMBOL_PERCENT = 375, /* PERCENT */ - YYSYMBOL_LEFT_ANGLE = 376, /* LEFT_ANGLE */ - YYSYMBOL_RIGHT_ANGLE = 377, /* RIGHT_ANGLE */ - YYSYMBOL_VERTICAL_BAR = 378, /* VERTICAL_BAR */ - YYSYMBOL_CARET = 379, /* CARET */ - YYSYMBOL_AMPERSAND = 380, /* AMPERSAND */ - YYSYMBOL_QUESTION = 381, /* QUESTION */ - YYSYMBOL_INVARIANT = 382, /* INVARIANT */ - YYSYMBOL_HIGH_PRECISION = 383, /* HIGH_PRECISION */ - YYSYMBOL_MEDIUM_PRECISION = 384, /* MEDIUM_PRECISION */ - YYSYMBOL_LOW_PRECISION = 385, /* LOW_PRECISION */ - YYSYMBOL_PRECISION = 386, /* PRECISION */ - YYSYMBOL_PACKED = 387, /* PACKED */ - YYSYMBOL_RESOURCE = 388, /* RESOURCE */ - YYSYMBOL_SUPERP = 389, /* SUPERP */ - YYSYMBOL_FLOATCONSTANT = 390, /* FLOATCONSTANT */ - YYSYMBOL_INTCONSTANT = 391, /* INTCONSTANT */ - YYSYMBOL_UINTCONSTANT = 392, /* UINTCONSTANT */ - YYSYMBOL_BOOLCONSTANT = 393, /* BOOLCONSTANT */ - YYSYMBOL_IDENTIFIER = 394, /* IDENTIFIER */ - YYSYMBOL_TYPE_NAME = 395, /* TYPE_NAME */ - YYSYMBOL_CENTROID = 396, /* CENTROID */ - YYSYMBOL_IN = 397, /* IN */ - YYSYMBOL_OUT = 398, /* OUT */ - YYSYMBOL_INOUT = 399, /* INOUT */ - YYSYMBOL_STRUCT = 400, /* STRUCT */ - YYSYMBOL_VOID = 401, /* VOID */ - YYSYMBOL_WHILE = 402, /* WHILE */ - YYSYMBOL_BREAK = 403, /* BREAK */ - YYSYMBOL_CONTINUE = 404, /* CONTINUE */ - YYSYMBOL_DO = 405, /* DO */ - YYSYMBOL_ELSE = 406, /* ELSE */ - YYSYMBOL_FOR = 407, /* FOR */ - YYSYMBOL_IF = 408, /* IF */ - YYSYMBOL_DISCARD = 409, /* DISCARD */ - YYSYMBOL_RETURN = 410, /* RETURN */ - YYSYMBOL_SWITCH = 411, /* SWITCH */ - YYSYMBOL_CASE = 412, /* CASE */ - YYSYMBOL_DEFAULT = 413, /* DEFAULT */ - YYSYMBOL_TERMINATE_INVOCATION = 414, /* TERMINATE_INVOCATION */ - YYSYMBOL_TERMINATE_RAY = 415, /* TERMINATE_RAY */ - YYSYMBOL_IGNORE_INTERSECTION = 416, /* IGNORE_INTERSECTION */ - YYSYMBOL_UNIFORM = 417, /* UNIFORM */ - YYSYMBOL_SHARED = 418, /* SHARED */ - YYSYMBOL_BUFFER = 419, /* BUFFER */ - YYSYMBOL_TILEIMAGEEXT = 420, /* TILEIMAGEEXT */ - YYSYMBOL_FLAT = 421, /* FLAT */ - YYSYMBOL_SMOOTH = 422, /* SMOOTH */ - YYSYMBOL_LAYOUT = 423, /* LAYOUT */ - YYSYMBOL_DOUBLECONSTANT = 424, /* DOUBLECONSTANT */ - YYSYMBOL_INT16CONSTANT = 425, /* INT16CONSTANT */ - YYSYMBOL_UINT16CONSTANT = 426, /* UINT16CONSTANT */ - YYSYMBOL_FLOAT16CONSTANT = 427, /* FLOAT16CONSTANT */ - YYSYMBOL_INT32CONSTANT = 428, /* INT32CONSTANT */ - YYSYMBOL_UINT32CONSTANT = 429, /* UINT32CONSTANT */ - YYSYMBOL_INT64CONSTANT = 430, /* INT64CONSTANT */ - YYSYMBOL_UINT64CONSTANT = 431, /* UINT64CONSTANT */ - YYSYMBOL_SUBROUTINE = 432, /* SUBROUTINE */ - YYSYMBOL_DEMOTE = 433, /* DEMOTE */ - YYSYMBOL_FUNCTION = 434, /* FUNCTION */ - YYSYMBOL_PAYLOADNV = 435, /* PAYLOADNV */ - YYSYMBOL_PAYLOADINNV = 436, /* PAYLOADINNV */ - YYSYMBOL_HITATTRNV = 437, /* HITATTRNV */ - YYSYMBOL_CALLDATANV = 438, /* CALLDATANV */ - YYSYMBOL_CALLDATAINNV = 439, /* CALLDATAINNV */ - YYSYMBOL_PAYLOADEXT = 440, /* PAYLOADEXT */ - YYSYMBOL_PAYLOADINEXT = 441, /* PAYLOADINEXT */ - YYSYMBOL_HITATTREXT = 442, /* HITATTREXT */ - YYSYMBOL_CALLDATAEXT = 443, /* CALLDATAEXT */ - YYSYMBOL_CALLDATAINEXT = 444, /* CALLDATAINEXT */ - YYSYMBOL_PATCH = 445, /* PATCH */ - YYSYMBOL_SAMPLE = 446, /* SAMPLE */ - YYSYMBOL_NONUNIFORM = 447, /* NONUNIFORM */ - YYSYMBOL_COHERENT = 448, /* COHERENT */ - YYSYMBOL_VOLATILE = 449, /* VOLATILE */ - YYSYMBOL_RESTRICT = 450, /* RESTRICT */ - YYSYMBOL_READONLY = 451, /* READONLY */ - YYSYMBOL_WRITEONLY = 452, /* WRITEONLY */ - YYSYMBOL_NONTEMPORAL = 453, /* NONTEMPORAL */ - YYSYMBOL_DEVICECOHERENT = 454, /* DEVICECOHERENT */ - YYSYMBOL_QUEUEFAMILYCOHERENT = 455, /* QUEUEFAMILYCOHERENT */ - YYSYMBOL_WORKGROUPCOHERENT = 456, /* WORKGROUPCOHERENT */ - YYSYMBOL_SUBGROUPCOHERENT = 457, /* SUBGROUPCOHERENT */ - YYSYMBOL_NONPRIVATE = 458, /* NONPRIVATE */ - YYSYMBOL_SHADERCALLCOHERENT = 459, /* SHADERCALLCOHERENT */ - YYSYMBOL_NOPERSPECTIVE = 460, /* NOPERSPECTIVE */ - YYSYMBOL_EXPLICITINTERPAMD = 461, /* EXPLICITINTERPAMD */ - YYSYMBOL_PERVERTEXEXT = 462, /* PERVERTEXEXT */ - YYSYMBOL_PERVERTEXNV = 463, /* PERVERTEXNV */ - YYSYMBOL_PERPRIMITIVENV = 464, /* PERPRIMITIVENV */ - YYSYMBOL_PERVIEWNV = 465, /* PERVIEWNV */ - YYSYMBOL_PERTASKNV = 466, /* PERTASKNV */ - YYSYMBOL_PERPRIMITIVEEXT = 467, /* PERPRIMITIVEEXT */ - YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 468, /* TASKPAYLOADWORKGROUPEXT */ - YYSYMBOL_PRECISE = 469, /* PRECISE */ - YYSYMBOL_YYACCEPT = 470, /* $accept */ - YYSYMBOL_variable_identifier = 471, /* variable_identifier */ - YYSYMBOL_primary_expression = 472, /* primary_expression */ - YYSYMBOL_postfix_expression = 473, /* postfix_expression */ - YYSYMBOL_integer_expression = 474, /* integer_expression */ - YYSYMBOL_function_call = 475, /* function_call */ - YYSYMBOL_function_call_or_method = 476, /* function_call_or_method */ - YYSYMBOL_function_call_generic = 477, /* function_call_generic */ - YYSYMBOL_function_call_header_no_parameters = 478, /* function_call_header_no_parameters */ - YYSYMBOL_function_call_header_with_parameters = 479, /* function_call_header_with_parameters */ - YYSYMBOL_function_call_header = 480, /* function_call_header */ - YYSYMBOL_function_identifier = 481, /* function_identifier */ - YYSYMBOL_unary_expression = 482, /* unary_expression */ - YYSYMBOL_unary_operator = 483, /* unary_operator */ - YYSYMBOL_multiplicative_expression = 484, /* multiplicative_expression */ - YYSYMBOL_additive_expression = 485, /* additive_expression */ - YYSYMBOL_shift_expression = 486, /* shift_expression */ - YYSYMBOL_relational_expression = 487, /* relational_expression */ - YYSYMBOL_equality_expression = 488, /* equality_expression */ - YYSYMBOL_and_expression = 489, /* and_expression */ - YYSYMBOL_exclusive_or_expression = 490, /* exclusive_or_expression */ - YYSYMBOL_inclusive_or_expression = 491, /* inclusive_or_expression */ - YYSYMBOL_logical_and_expression = 492, /* logical_and_expression */ - YYSYMBOL_logical_xor_expression = 493, /* logical_xor_expression */ - YYSYMBOL_logical_or_expression = 494, /* logical_or_expression */ - YYSYMBOL_conditional_expression = 495, /* conditional_expression */ - YYSYMBOL_496_1 = 496, /* $@1 */ - YYSYMBOL_assignment_expression = 497, /* assignment_expression */ - YYSYMBOL_assignment_operator = 498, /* assignment_operator */ - YYSYMBOL_expression = 499, /* expression */ - YYSYMBOL_constant_expression = 500, /* constant_expression */ - YYSYMBOL_declaration = 501, /* declaration */ - YYSYMBOL_block_structure = 502, /* block_structure */ - YYSYMBOL_503_2 = 503, /* $@2 */ - YYSYMBOL_identifier_list = 504, /* identifier_list */ - YYSYMBOL_function_prototype = 505, /* function_prototype */ - YYSYMBOL_function_declarator = 506, /* function_declarator */ - YYSYMBOL_function_header_with_parameters = 507, /* function_header_with_parameters */ - YYSYMBOL_function_header = 508, /* function_header */ - YYSYMBOL_parameter_declarator = 509, /* parameter_declarator */ - YYSYMBOL_parameter_declaration = 510, /* parameter_declaration */ - YYSYMBOL_parameter_type_specifier = 511, /* parameter_type_specifier */ - YYSYMBOL_init_declarator_list = 512, /* init_declarator_list */ - YYSYMBOL_single_declaration = 513, /* single_declaration */ - YYSYMBOL_fully_specified_type = 514, /* fully_specified_type */ - YYSYMBOL_invariant_qualifier = 515, /* invariant_qualifier */ - YYSYMBOL_interpolation_qualifier = 516, /* interpolation_qualifier */ - YYSYMBOL_layout_qualifier = 517, /* layout_qualifier */ - YYSYMBOL_layout_qualifier_id_list = 518, /* layout_qualifier_id_list */ - YYSYMBOL_layout_qualifier_id = 519, /* layout_qualifier_id */ - YYSYMBOL_precise_qualifier = 520, /* precise_qualifier */ - YYSYMBOL_type_qualifier = 521, /* type_qualifier */ - YYSYMBOL_single_type_qualifier = 522, /* single_type_qualifier */ - YYSYMBOL_storage_qualifier = 523, /* storage_qualifier */ - YYSYMBOL_non_uniform_qualifier = 524, /* non_uniform_qualifier */ - YYSYMBOL_type_name_list = 525, /* type_name_list */ - YYSYMBOL_type_specifier = 526, /* type_specifier */ - YYSYMBOL_array_specifier = 527, /* array_specifier */ - YYSYMBOL_type_parameter_specifier_opt = 528, /* type_parameter_specifier_opt */ - YYSYMBOL_type_parameter_specifier = 529, /* type_parameter_specifier */ - YYSYMBOL_type_parameter_specifier_list = 530, /* type_parameter_specifier_list */ - YYSYMBOL_type_specifier_nonarray = 531, /* type_specifier_nonarray */ - YYSYMBOL_precision_qualifier = 532, /* precision_qualifier */ - YYSYMBOL_struct_specifier = 533, /* struct_specifier */ - YYSYMBOL_534_3 = 534, /* $@3 */ - YYSYMBOL_535_4 = 535, /* $@4 */ - YYSYMBOL_struct_declaration_list = 536, /* struct_declaration_list */ - YYSYMBOL_struct_declaration = 537, /* struct_declaration */ - YYSYMBOL_struct_declarator_list = 538, /* struct_declarator_list */ - YYSYMBOL_struct_declarator = 539, /* struct_declarator */ - YYSYMBOL_initializer = 540, /* initializer */ - YYSYMBOL_initializer_list = 541, /* initializer_list */ - YYSYMBOL_declaration_statement = 542, /* declaration_statement */ - YYSYMBOL_statement = 543, /* statement */ - YYSYMBOL_simple_statement = 544, /* simple_statement */ - YYSYMBOL_demote_statement = 545, /* demote_statement */ - YYSYMBOL_compound_statement = 546, /* compound_statement */ - YYSYMBOL_547_5 = 547, /* $@5 */ - YYSYMBOL_548_6 = 548, /* $@6 */ - YYSYMBOL_statement_no_new_scope = 549, /* statement_no_new_scope */ - YYSYMBOL_statement_scoped = 550, /* statement_scoped */ - YYSYMBOL_551_7 = 551, /* $@7 */ - YYSYMBOL_552_8 = 552, /* $@8 */ - YYSYMBOL_compound_statement_no_new_scope = 553, /* compound_statement_no_new_scope */ - YYSYMBOL_statement_list = 554, /* statement_list */ - YYSYMBOL_expression_statement = 555, /* expression_statement */ - YYSYMBOL_selection_statement = 556, /* selection_statement */ - YYSYMBOL_selection_statement_nonattributed = 557, /* selection_statement_nonattributed */ - YYSYMBOL_selection_rest_statement = 558, /* selection_rest_statement */ - YYSYMBOL_condition = 559, /* condition */ - YYSYMBOL_switch_statement = 560, /* switch_statement */ - YYSYMBOL_switch_statement_nonattributed = 561, /* switch_statement_nonattributed */ - YYSYMBOL_562_9 = 562, /* $@9 */ - YYSYMBOL_switch_statement_list = 563, /* switch_statement_list */ - YYSYMBOL_case_label = 564, /* case_label */ - YYSYMBOL_iteration_statement = 565, /* iteration_statement */ - YYSYMBOL_iteration_statement_nonattributed = 566, /* iteration_statement_nonattributed */ - YYSYMBOL_567_10 = 567, /* $@10 */ - YYSYMBOL_568_11 = 568, /* $@11 */ - YYSYMBOL_569_12 = 569, /* $@12 */ - YYSYMBOL_for_init_statement = 570, /* for_init_statement */ - YYSYMBOL_conditionopt = 571, /* conditionopt */ - YYSYMBOL_for_rest_statement = 572, /* for_rest_statement */ - YYSYMBOL_jump_statement = 573, /* jump_statement */ - YYSYMBOL_translation_unit = 574, /* translation_unit */ - YYSYMBOL_external_declaration = 575, /* external_declaration */ - YYSYMBOL_function_definition = 576, /* function_definition */ - YYSYMBOL_577_13 = 577, /* $@13 */ - YYSYMBOL_attribute = 578, /* attribute */ - YYSYMBOL_attribute_list = 579, /* attribute_list */ - YYSYMBOL_single_attribute = 580, /* single_attribute */ - YYSYMBOL_spirv_requirements_list = 581, /* spirv_requirements_list */ - YYSYMBOL_spirv_requirements_parameter = 582, /* spirv_requirements_parameter */ - YYSYMBOL_spirv_extension_list = 583, /* spirv_extension_list */ - YYSYMBOL_spirv_capability_list = 584, /* spirv_capability_list */ - YYSYMBOL_spirv_execution_mode_qualifier = 585, /* spirv_execution_mode_qualifier */ - YYSYMBOL_spirv_execution_mode_parameter_list = 586, /* spirv_execution_mode_parameter_list */ - YYSYMBOL_spirv_execution_mode_parameter = 587, /* spirv_execution_mode_parameter */ - YYSYMBOL_spirv_execution_mode_id_parameter_list = 588, /* spirv_execution_mode_id_parameter_list */ - YYSYMBOL_spirv_storage_class_qualifier = 589, /* spirv_storage_class_qualifier */ - YYSYMBOL_spirv_decorate_qualifier = 590, /* spirv_decorate_qualifier */ - YYSYMBOL_spirv_decorate_parameter_list = 591, /* spirv_decorate_parameter_list */ - YYSYMBOL_spirv_decorate_parameter = 592, /* spirv_decorate_parameter */ - YYSYMBOL_spirv_decorate_id_parameter_list = 593, /* spirv_decorate_id_parameter_list */ - YYSYMBOL_spirv_decorate_id_parameter = 594, /* spirv_decorate_id_parameter */ - YYSYMBOL_spirv_decorate_string_parameter_list = 595, /* spirv_decorate_string_parameter_list */ - YYSYMBOL_spirv_type_specifier = 596, /* spirv_type_specifier */ - YYSYMBOL_spirv_type_parameter_list = 597, /* spirv_type_parameter_list */ - YYSYMBOL_spirv_type_parameter = 598, /* spirv_type_parameter */ - YYSYMBOL_spirv_instruction_qualifier = 599, /* spirv_instruction_qualifier */ - YYSYMBOL_spirv_instruction_qualifier_list = 600, /* spirv_instruction_qualifier_list */ - YYSYMBOL_spirv_instruction_qualifier_id = 601 /* spirv_instruction_qualifier_id */ + YYSYMBOL_BFLOAT16_T = 63, /* BFLOAT16_T */ + YYSYMBOL_FLOAT16_T = 64, /* FLOAT16_T */ + YYSYMBOL_FLOAT32_T = 65, /* FLOAT32_T */ + YYSYMBOL_DOUBLE = 66, /* DOUBLE */ + YYSYMBOL_FLOAT64_T = 67, /* FLOAT64_T */ + YYSYMBOL_INT64_T = 68, /* INT64_T */ + YYSYMBOL_UINT64_T = 69, /* UINT64_T */ + YYSYMBOL_INT32_T = 70, /* INT32_T */ + YYSYMBOL_UINT32_T = 71, /* UINT32_T */ + YYSYMBOL_INT16_T = 72, /* INT16_T */ + YYSYMBOL_UINT16_T = 73, /* UINT16_T */ + YYSYMBOL_INT8_T = 74, /* INT8_T */ + YYSYMBOL_UINT8_T = 75, /* UINT8_T */ + YYSYMBOL_I64VEC2 = 76, /* I64VEC2 */ + YYSYMBOL_I64VEC3 = 77, /* I64VEC3 */ + YYSYMBOL_I64VEC4 = 78, /* I64VEC4 */ + YYSYMBOL_U64VEC2 = 79, /* U64VEC2 */ + YYSYMBOL_U64VEC3 = 80, /* U64VEC3 */ + YYSYMBOL_U64VEC4 = 81, /* U64VEC4 */ + YYSYMBOL_I32VEC2 = 82, /* I32VEC2 */ + YYSYMBOL_I32VEC3 = 83, /* I32VEC3 */ + YYSYMBOL_I32VEC4 = 84, /* I32VEC4 */ + YYSYMBOL_U32VEC2 = 85, /* U32VEC2 */ + YYSYMBOL_U32VEC3 = 86, /* U32VEC3 */ + YYSYMBOL_U32VEC4 = 87, /* U32VEC4 */ + YYSYMBOL_I16VEC2 = 88, /* I16VEC2 */ + YYSYMBOL_I16VEC3 = 89, /* I16VEC3 */ + YYSYMBOL_I16VEC4 = 90, /* I16VEC4 */ + YYSYMBOL_U16VEC2 = 91, /* U16VEC2 */ + YYSYMBOL_U16VEC3 = 92, /* U16VEC3 */ + YYSYMBOL_U16VEC4 = 93, /* U16VEC4 */ + YYSYMBOL_I8VEC2 = 94, /* I8VEC2 */ + YYSYMBOL_I8VEC3 = 95, /* I8VEC3 */ + YYSYMBOL_I8VEC4 = 96, /* I8VEC4 */ + YYSYMBOL_U8VEC2 = 97, /* U8VEC2 */ + YYSYMBOL_U8VEC3 = 98, /* U8VEC3 */ + YYSYMBOL_U8VEC4 = 99, /* U8VEC4 */ + YYSYMBOL_DVEC2 = 100, /* DVEC2 */ + YYSYMBOL_DVEC3 = 101, /* DVEC3 */ + YYSYMBOL_DVEC4 = 102, /* DVEC4 */ + YYSYMBOL_DMAT2 = 103, /* DMAT2 */ + YYSYMBOL_DMAT3 = 104, /* DMAT3 */ + YYSYMBOL_DMAT4 = 105, /* DMAT4 */ + YYSYMBOL_BF16VEC2 = 106, /* BF16VEC2 */ + YYSYMBOL_BF16VEC3 = 107, /* BF16VEC3 */ + YYSYMBOL_BF16VEC4 = 108, /* BF16VEC4 */ + YYSYMBOL_F16VEC2 = 109, /* F16VEC2 */ + YYSYMBOL_F16VEC3 = 110, /* F16VEC3 */ + YYSYMBOL_F16VEC4 = 111, /* F16VEC4 */ + YYSYMBOL_F16MAT2 = 112, /* F16MAT2 */ + YYSYMBOL_F16MAT3 = 113, /* F16MAT3 */ + YYSYMBOL_F16MAT4 = 114, /* F16MAT4 */ + YYSYMBOL_F32VEC2 = 115, /* F32VEC2 */ + YYSYMBOL_F32VEC3 = 116, /* F32VEC3 */ + YYSYMBOL_F32VEC4 = 117, /* F32VEC4 */ + YYSYMBOL_F32MAT2 = 118, /* F32MAT2 */ + YYSYMBOL_F32MAT3 = 119, /* F32MAT3 */ + YYSYMBOL_F32MAT4 = 120, /* F32MAT4 */ + YYSYMBOL_F64VEC2 = 121, /* F64VEC2 */ + YYSYMBOL_F64VEC3 = 122, /* F64VEC3 */ + YYSYMBOL_F64VEC4 = 123, /* F64VEC4 */ + YYSYMBOL_F64MAT2 = 124, /* F64MAT2 */ + YYSYMBOL_F64MAT3 = 125, /* F64MAT3 */ + YYSYMBOL_F64MAT4 = 126, /* F64MAT4 */ + YYSYMBOL_DMAT2X2 = 127, /* DMAT2X2 */ + YYSYMBOL_DMAT2X3 = 128, /* DMAT2X3 */ + YYSYMBOL_DMAT2X4 = 129, /* DMAT2X4 */ + YYSYMBOL_DMAT3X2 = 130, /* DMAT3X2 */ + YYSYMBOL_DMAT3X3 = 131, /* DMAT3X3 */ + YYSYMBOL_DMAT3X4 = 132, /* DMAT3X4 */ + YYSYMBOL_DMAT4X2 = 133, /* DMAT4X2 */ + YYSYMBOL_DMAT4X3 = 134, /* DMAT4X3 */ + YYSYMBOL_DMAT4X4 = 135, /* DMAT4X4 */ + YYSYMBOL_F16MAT2X2 = 136, /* F16MAT2X2 */ + YYSYMBOL_F16MAT2X3 = 137, /* F16MAT2X3 */ + YYSYMBOL_F16MAT2X4 = 138, /* F16MAT2X4 */ + YYSYMBOL_F16MAT3X2 = 139, /* F16MAT3X2 */ + YYSYMBOL_F16MAT3X3 = 140, /* F16MAT3X3 */ + YYSYMBOL_F16MAT3X4 = 141, /* F16MAT3X4 */ + YYSYMBOL_F16MAT4X2 = 142, /* F16MAT4X2 */ + YYSYMBOL_F16MAT4X3 = 143, /* F16MAT4X3 */ + YYSYMBOL_F16MAT4X4 = 144, /* F16MAT4X4 */ + YYSYMBOL_F32MAT2X2 = 145, /* F32MAT2X2 */ + YYSYMBOL_F32MAT2X3 = 146, /* F32MAT2X3 */ + YYSYMBOL_F32MAT2X4 = 147, /* F32MAT2X4 */ + YYSYMBOL_F32MAT3X2 = 148, /* F32MAT3X2 */ + YYSYMBOL_F32MAT3X3 = 149, /* F32MAT3X3 */ + YYSYMBOL_F32MAT3X4 = 150, /* F32MAT3X4 */ + YYSYMBOL_F32MAT4X2 = 151, /* F32MAT4X2 */ + YYSYMBOL_F32MAT4X3 = 152, /* F32MAT4X3 */ + YYSYMBOL_F32MAT4X4 = 153, /* F32MAT4X4 */ + YYSYMBOL_F64MAT2X2 = 154, /* F64MAT2X2 */ + YYSYMBOL_F64MAT2X3 = 155, /* F64MAT2X3 */ + YYSYMBOL_F64MAT2X4 = 156, /* F64MAT2X4 */ + YYSYMBOL_F64MAT3X2 = 157, /* F64MAT3X2 */ + YYSYMBOL_F64MAT3X3 = 158, /* F64MAT3X3 */ + YYSYMBOL_F64MAT3X4 = 159, /* F64MAT3X4 */ + YYSYMBOL_F64MAT4X2 = 160, /* F64MAT4X2 */ + YYSYMBOL_F64MAT4X3 = 161, /* F64MAT4X3 */ + YYSYMBOL_F64MAT4X4 = 162, /* F64MAT4X4 */ + YYSYMBOL_ATOMIC_UINT = 163, /* ATOMIC_UINT */ + YYSYMBOL_ACCSTRUCTNV = 164, /* ACCSTRUCTNV */ + YYSYMBOL_ACCSTRUCTEXT = 165, /* ACCSTRUCTEXT */ + YYSYMBOL_RAYQUERYEXT = 166, /* RAYQUERYEXT */ + YYSYMBOL_FCOOPMATNV = 167, /* FCOOPMATNV */ + YYSYMBOL_ICOOPMATNV = 168, /* ICOOPMATNV */ + YYSYMBOL_UCOOPMATNV = 169, /* UCOOPMATNV */ + YYSYMBOL_COOPMAT = 170, /* COOPMAT */ + YYSYMBOL_COOPVECNV = 171, /* COOPVECNV */ + YYSYMBOL_HITOBJECTNV = 172, /* HITOBJECTNV */ + YYSYMBOL_HITOBJECTATTRNV = 173, /* HITOBJECTATTRNV */ + YYSYMBOL_TENSORLAYOUTNV = 174, /* TENSORLAYOUTNV */ + YYSYMBOL_TENSORVIEWNV = 175, /* TENSORVIEWNV */ + YYSYMBOL_SAMPLERCUBEARRAY = 176, /* SAMPLERCUBEARRAY */ + YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 177, /* SAMPLERCUBEARRAYSHADOW */ + YYSYMBOL_ISAMPLERCUBEARRAY = 178, /* ISAMPLERCUBEARRAY */ + YYSYMBOL_USAMPLERCUBEARRAY = 179, /* USAMPLERCUBEARRAY */ + YYSYMBOL_SAMPLER1D = 180, /* SAMPLER1D */ + YYSYMBOL_SAMPLER1DARRAY = 181, /* SAMPLER1DARRAY */ + YYSYMBOL_SAMPLER1DARRAYSHADOW = 182, /* SAMPLER1DARRAYSHADOW */ + YYSYMBOL_ISAMPLER1D = 183, /* ISAMPLER1D */ + YYSYMBOL_SAMPLER1DSHADOW = 184, /* SAMPLER1DSHADOW */ + YYSYMBOL_SAMPLER2DRECT = 185, /* SAMPLER2DRECT */ + YYSYMBOL_SAMPLER2DRECTSHADOW = 186, /* SAMPLER2DRECTSHADOW */ + YYSYMBOL_ISAMPLER2DRECT = 187, /* ISAMPLER2DRECT */ + YYSYMBOL_USAMPLER2DRECT = 188, /* USAMPLER2DRECT */ + YYSYMBOL_SAMPLERBUFFER = 189, /* SAMPLERBUFFER */ + YYSYMBOL_ISAMPLERBUFFER = 190, /* ISAMPLERBUFFER */ + YYSYMBOL_USAMPLERBUFFER = 191, /* USAMPLERBUFFER */ + YYSYMBOL_SAMPLER2DMS = 192, /* SAMPLER2DMS */ + YYSYMBOL_ISAMPLER2DMS = 193, /* ISAMPLER2DMS */ + YYSYMBOL_USAMPLER2DMS = 194, /* USAMPLER2DMS */ + YYSYMBOL_SAMPLER2DMSARRAY = 195, /* SAMPLER2DMSARRAY */ + YYSYMBOL_ISAMPLER2DMSARRAY = 196, /* ISAMPLER2DMSARRAY */ + YYSYMBOL_USAMPLER2DMSARRAY = 197, /* USAMPLER2DMSARRAY */ + YYSYMBOL_SAMPLEREXTERNALOES = 198, /* SAMPLEREXTERNALOES */ + YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 199, /* SAMPLEREXTERNAL2DY2YEXT */ + YYSYMBOL_ISAMPLER1DARRAY = 200, /* ISAMPLER1DARRAY */ + YYSYMBOL_USAMPLER1D = 201, /* USAMPLER1D */ + YYSYMBOL_USAMPLER1DARRAY = 202, /* USAMPLER1DARRAY */ + YYSYMBOL_F16SAMPLER1D = 203, /* F16SAMPLER1D */ + YYSYMBOL_F16SAMPLER2D = 204, /* F16SAMPLER2D */ + YYSYMBOL_F16SAMPLER3D = 205, /* F16SAMPLER3D */ + YYSYMBOL_F16SAMPLER2DRECT = 206, /* F16SAMPLER2DRECT */ + YYSYMBOL_F16SAMPLERCUBE = 207, /* F16SAMPLERCUBE */ + YYSYMBOL_F16SAMPLER1DARRAY = 208, /* F16SAMPLER1DARRAY */ + YYSYMBOL_F16SAMPLER2DARRAY = 209, /* F16SAMPLER2DARRAY */ + YYSYMBOL_F16SAMPLERCUBEARRAY = 210, /* F16SAMPLERCUBEARRAY */ + YYSYMBOL_F16SAMPLERBUFFER = 211, /* F16SAMPLERBUFFER */ + YYSYMBOL_F16SAMPLER2DMS = 212, /* F16SAMPLER2DMS */ + YYSYMBOL_F16SAMPLER2DMSARRAY = 213, /* F16SAMPLER2DMSARRAY */ + YYSYMBOL_F16SAMPLER1DSHADOW = 214, /* F16SAMPLER1DSHADOW */ + YYSYMBOL_F16SAMPLER2DSHADOW = 215, /* F16SAMPLER2DSHADOW */ + YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 216, /* F16SAMPLER1DARRAYSHADOW */ + YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 217, /* F16SAMPLER2DARRAYSHADOW */ + YYSYMBOL_F16SAMPLER2DRECTSHADOW = 218, /* F16SAMPLER2DRECTSHADOW */ + YYSYMBOL_F16SAMPLERCUBESHADOW = 219, /* F16SAMPLERCUBESHADOW */ + YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 220, /* F16SAMPLERCUBEARRAYSHADOW */ + YYSYMBOL_IMAGE1D = 221, /* IMAGE1D */ + YYSYMBOL_IIMAGE1D = 222, /* IIMAGE1D */ + YYSYMBOL_UIMAGE1D = 223, /* UIMAGE1D */ + YYSYMBOL_IMAGE2D = 224, /* IMAGE2D */ + YYSYMBOL_IIMAGE2D = 225, /* IIMAGE2D */ + YYSYMBOL_UIMAGE2D = 226, /* UIMAGE2D */ + YYSYMBOL_IMAGE3D = 227, /* IMAGE3D */ + YYSYMBOL_IIMAGE3D = 228, /* IIMAGE3D */ + YYSYMBOL_UIMAGE3D = 229, /* UIMAGE3D */ + YYSYMBOL_IMAGE2DRECT = 230, /* IMAGE2DRECT */ + YYSYMBOL_IIMAGE2DRECT = 231, /* IIMAGE2DRECT */ + YYSYMBOL_UIMAGE2DRECT = 232, /* UIMAGE2DRECT */ + YYSYMBOL_IMAGECUBE = 233, /* IMAGECUBE */ + YYSYMBOL_IIMAGECUBE = 234, /* IIMAGECUBE */ + YYSYMBOL_UIMAGECUBE = 235, /* UIMAGECUBE */ + YYSYMBOL_IMAGEBUFFER = 236, /* IMAGEBUFFER */ + YYSYMBOL_IIMAGEBUFFER = 237, /* IIMAGEBUFFER */ + YYSYMBOL_UIMAGEBUFFER = 238, /* UIMAGEBUFFER */ + YYSYMBOL_IMAGE1DARRAY = 239, /* IMAGE1DARRAY */ + YYSYMBOL_IIMAGE1DARRAY = 240, /* IIMAGE1DARRAY */ + YYSYMBOL_UIMAGE1DARRAY = 241, /* UIMAGE1DARRAY */ + YYSYMBOL_IMAGE2DARRAY = 242, /* IMAGE2DARRAY */ + YYSYMBOL_IIMAGE2DARRAY = 243, /* IIMAGE2DARRAY */ + YYSYMBOL_UIMAGE2DARRAY = 244, /* UIMAGE2DARRAY */ + YYSYMBOL_IMAGECUBEARRAY = 245, /* IMAGECUBEARRAY */ + YYSYMBOL_IIMAGECUBEARRAY = 246, /* IIMAGECUBEARRAY */ + YYSYMBOL_UIMAGECUBEARRAY = 247, /* UIMAGECUBEARRAY */ + YYSYMBOL_IMAGE2DMS = 248, /* IMAGE2DMS */ + YYSYMBOL_IIMAGE2DMS = 249, /* IIMAGE2DMS */ + YYSYMBOL_UIMAGE2DMS = 250, /* UIMAGE2DMS */ + YYSYMBOL_IMAGE2DMSARRAY = 251, /* IMAGE2DMSARRAY */ + YYSYMBOL_IIMAGE2DMSARRAY = 252, /* IIMAGE2DMSARRAY */ + YYSYMBOL_UIMAGE2DMSARRAY = 253, /* UIMAGE2DMSARRAY */ + YYSYMBOL_F16IMAGE1D = 254, /* F16IMAGE1D */ + YYSYMBOL_F16IMAGE2D = 255, /* F16IMAGE2D */ + YYSYMBOL_F16IMAGE3D = 256, /* F16IMAGE3D */ + YYSYMBOL_F16IMAGE2DRECT = 257, /* F16IMAGE2DRECT */ + YYSYMBOL_F16IMAGECUBE = 258, /* F16IMAGECUBE */ + YYSYMBOL_F16IMAGE1DARRAY = 259, /* F16IMAGE1DARRAY */ + YYSYMBOL_F16IMAGE2DARRAY = 260, /* F16IMAGE2DARRAY */ + YYSYMBOL_F16IMAGECUBEARRAY = 261, /* F16IMAGECUBEARRAY */ + YYSYMBOL_F16IMAGEBUFFER = 262, /* F16IMAGEBUFFER */ + YYSYMBOL_F16IMAGE2DMS = 263, /* F16IMAGE2DMS */ + YYSYMBOL_F16IMAGE2DMSARRAY = 264, /* F16IMAGE2DMSARRAY */ + YYSYMBOL_I64IMAGE1D = 265, /* I64IMAGE1D */ + YYSYMBOL_U64IMAGE1D = 266, /* U64IMAGE1D */ + YYSYMBOL_I64IMAGE2D = 267, /* I64IMAGE2D */ + YYSYMBOL_U64IMAGE2D = 268, /* U64IMAGE2D */ + YYSYMBOL_I64IMAGE3D = 269, /* I64IMAGE3D */ + YYSYMBOL_U64IMAGE3D = 270, /* U64IMAGE3D */ + YYSYMBOL_I64IMAGE2DRECT = 271, /* I64IMAGE2DRECT */ + YYSYMBOL_U64IMAGE2DRECT = 272, /* U64IMAGE2DRECT */ + YYSYMBOL_I64IMAGECUBE = 273, /* I64IMAGECUBE */ + YYSYMBOL_U64IMAGECUBE = 274, /* U64IMAGECUBE */ + YYSYMBOL_I64IMAGEBUFFER = 275, /* I64IMAGEBUFFER */ + YYSYMBOL_U64IMAGEBUFFER = 276, /* U64IMAGEBUFFER */ + YYSYMBOL_I64IMAGE1DARRAY = 277, /* I64IMAGE1DARRAY */ + YYSYMBOL_U64IMAGE1DARRAY = 278, /* U64IMAGE1DARRAY */ + YYSYMBOL_I64IMAGE2DARRAY = 279, /* I64IMAGE2DARRAY */ + YYSYMBOL_U64IMAGE2DARRAY = 280, /* U64IMAGE2DARRAY */ + YYSYMBOL_I64IMAGECUBEARRAY = 281, /* I64IMAGECUBEARRAY */ + YYSYMBOL_U64IMAGECUBEARRAY = 282, /* U64IMAGECUBEARRAY */ + YYSYMBOL_I64IMAGE2DMS = 283, /* I64IMAGE2DMS */ + YYSYMBOL_U64IMAGE2DMS = 284, /* U64IMAGE2DMS */ + YYSYMBOL_I64IMAGE2DMSARRAY = 285, /* I64IMAGE2DMSARRAY */ + YYSYMBOL_U64IMAGE2DMSARRAY = 286, /* U64IMAGE2DMSARRAY */ + YYSYMBOL_TEXTURECUBEARRAY = 287, /* TEXTURECUBEARRAY */ + YYSYMBOL_ITEXTURECUBEARRAY = 288, /* ITEXTURECUBEARRAY */ + YYSYMBOL_UTEXTURECUBEARRAY = 289, /* UTEXTURECUBEARRAY */ + YYSYMBOL_TEXTURE1D = 290, /* TEXTURE1D */ + YYSYMBOL_ITEXTURE1D = 291, /* ITEXTURE1D */ + YYSYMBOL_UTEXTURE1D = 292, /* UTEXTURE1D */ + YYSYMBOL_TEXTURE1DARRAY = 293, /* TEXTURE1DARRAY */ + YYSYMBOL_ITEXTURE1DARRAY = 294, /* ITEXTURE1DARRAY */ + YYSYMBOL_UTEXTURE1DARRAY = 295, /* UTEXTURE1DARRAY */ + YYSYMBOL_TEXTURE2DRECT = 296, /* TEXTURE2DRECT */ + YYSYMBOL_ITEXTURE2DRECT = 297, /* ITEXTURE2DRECT */ + YYSYMBOL_UTEXTURE2DRECT = 298, /* UTEXTURE2DRECT */ + YYSYMBOL_TEXTUREBUFFER = 299, /* TEXTUREBUFFER */ + YYSYMBOL_ITEXTUREBUFFER = 300, /* ITEXTUREBUFFER */ + YYSYMBOL_UTEXTUREBUFFER = 301, /* UTEXTUREBUFFER */ + YYSYMBOL_TEXTURE2DMS = 302, /* TEXTURE2DMS */ + YYSYMBOL_ITEXTURE2DMS = 303, /* ITEXTURE2DMS */ + YYSYMBOL_UTEXTURE2DMS = 304, /* UTEXTURE2DMS */ + YYSYMBOL_TEXTURE2DMSARRAY = 305, /* TEXTURE2DMSARRAY */ + YYSYMBOL_ITEXTURE2DMSARRAY = 306, /* ITEXTURE2DMSARRAY */ + YYSYMBOL_UTEXTURE2DMSARRAY = 307, /* UTEXTURE2DMSARRAY */ + YYSYMBOL_F16TEXTURE1D = 308, /* F16TEXTURE1D */ + YYSYMBOL_F16TEXTURE2D = 309, /* F16TEXTURE2D */ + YYSYMBOL_F16TEXTURE3D = 310, /* F16TEXTURE3D */ + YYSYMBOL_F16TEXTURE2DRECT = 311, /* F16TEXTURE2DRECT */ + YYSYMBOL_F16TEXTURECUBE = 312, /* F16TEXTURECUBE */ + YYSYMBOL_F16TEXTURE1DARRAY = 313, /* F16TEXTURE1DARRAY */ + YYSYMBOL_F16TEXTURE2DARRAY = 314, /* F16TEXTURE2DARRAY */ + YYSYMBOL_F16TEXTURECUBEARRAY = 315, /* F16TEXTURECUBEARRAY */ + YYSYMBOL_F16TEXTUREBUFFER = 316, /* F16TEXTUREBUFFER */ + YYSYMBOL_F16TEXTURE2DMS = 317, /* F16TEXTURE2DMS */ + YYSYMBOL_F16TEXTURE2DMSARRAY = 318, /* F16TEXTURE2DMSARRAY */ + YYSYMBOL_SUBPASSINPUT = 319, /* SUBPASSINPUT */ + YYSYMBOL_SUBPASSINPUTMS = 320, /* SUBPASSINPUTMS */ + YYSYMBOL_ISUBPASSINPUT = 321, /* ISUBPASSINPUT */ + YYSYMBOL_ISUBPASSINPUTMS = 322, /* ISUBPASSINPUTMS */ + YYSYMBOL_USUBPASSINPUT = 323, /* USUBPASSINPUT */ + YYSYMBOL_USUBPASSINPUTMS = 324, /* USUBPASSINPUTMS */ + YYSYMBOL_F16SUBPASSINPUT = 325, /* F16SUBPASSINPUT */ + YYSYMBOL_F16SUBPASSINPUTMS = 326, /* F16SUBPASSINPUTMS */ + YYSYMBOL_SPIRV_INSTRUCTION = 327, /* SPIRV_INSTRUCTION */ + YYSYMBOL_SPIRV_EXECUTION_MODE = 328, /* SPIRV_EXECUTION_MODE */ + YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 329, /* SPIRV_EXECUTION_MODE_ID */ + YYSYMBOL_SPIRV_DECORATE = 330, /* SPIRV_DECORATE */ + YYSYMBOL_SPIRV_DECORATE_ID = 331, /* SPIRV_DECORATE_ID */ + YYSYMBOL_SPIRV_DECORATE_STRING = 332, /* SPIRV_DECORATE_STRING */ + YYSYMBOL_SPIRV_TYPE = 333, /* SPIRV_TYPE */ + YYSYMBOL_SPIRV_STORAGE_CLASS = 334, /* SPIRV_STORAGE_CLASS */ + YYSYMBOL_SPIRV_BY_REFERENCE = 335, /* SPIRV_BY_REFERENCE */ + YYSYMBOL_SPIRV_LITERAL = 336, /* SPIRV_LITERAL */ + YYSYMBOL_ATTACHMENTEXT = 337, /* ATTACHMENTEXT */ + YYSYMBOL_IATTACHMENTEXT = 338, /* IATTACHMENTEXT */ + YYSYMBOL_UATTACHMENTEXT = 339, /* UATTACHMENTEXT */ + YYSYMBOL_LEFT_OP = 340, /* LEFT_OP */ + YYSYMBOL_RIGHT_OP = 341, /* RIGHT_OP */ + YYSYMBOL_INC_OP = 342, /* INC_OP */ + YYSYMBOL_DEC_OP = 343, /* DEC_OP */ + YYSYMBOL_LE_OP = 344, /* LE_OP */ + YYSYMBOL_GE_OP = 345, /* GE_OP */ + YYSYMBOL_EQ_OP = 346, /* EQ_OP */ + YYSYMBOL_NE_OP = 347, /* NE_OP */ + YYSYMBOL_AND_OP = 348, /* AND_OP */ + YYSYMBOL_OR_OP = 349, /* OR_OP */ + YYSYMBOL_XOR_OP = 350, /* XOR_OP */ + YYSYMBOL_MUL_ASSIGN = 351, /* MUL_ASSIGN */ + YYSYMBOL_DIV_ASSIGN = 352, /* DIV_ASSIGN */ + YYSYMBOL_ADD_ASSIGN = 353, /* ADD_ASSIGN */ + YYSYMBOL_MOD_ASSIGN = 354, /* MOD_ASSIGN */ + YYSYMBOL_LEFT_ASSIGN = 355, /* LEFT_ASSIGN */ + YYSYMBOL_RIGHT_ASSIGN = 356, /* RIGHT_ASSIGN */ + YYSYMBOL_AND_ASSIGN = 357, /* AND_ASSIGN */ + YYSYMBOL_XOR_ASSIGN = 358, /* XOR_ASSIGN */ + YYSYMBOL_OR_ASSIGN = 359, /* OR_ASSIGN */ + YYSYMBOL_SUB_ASSIGN = 360, /* SUB_ASSIGN */ + YYSYMBOL_STRING_LITERAL = 361, /* STRING_LITERAL */ + YYSYMBOL_LEFT_PAREN = 362, /* LEFT_PAREN */ + YYSYMBOL_RIGHT_PAREN = 363, /* RIGHT_PAREN */ + YYSYMBOL_LEFT_BRACKET = 364, /* LEFT_BRACKET */ + YYSYMBOL_RIGHT_BRACKET = 365, /* RIGHT_BRACKET */ + YYSYMBOL_LEFT_BRACE = 366, /* LEFT_BRACE */ + YYSYMBOL_RIGHT_BRACE = 367, /* RIGHT_BRACE */ + YYSYMBOL_DOT = 368, /* DOT */ + YYSYMBOL_COMMA = 369, /* COMMA */ + YYSYMBOL_COLON = 370, /* COLON */ + YYSYMBOL_EQUAL = 371, /* EQUAL */ + YYSYMBOL_SEMICOLON = 372, /* SEMICOLON */ + YYSYMBOL_BANG = 373, /* BANG */ + YYSYMBOL_DASH = 374, /* DASH */ + YYSYMBOL_TILDE = 375, /* TILDE */ + YYSYMBOL_PLUS = 376, /* PLUS */ + YYSYMBOL_STAR = 377, /* STAR */ + YYSYMBOL_SLASH = 378, /* SLASH */ + YYSYMBOL_PERCENT = 379, /* PERCENT */ + YYSYMBOL_LEFT_ANGLE = 380, /* LEFT_ANGLE */ + YYSYMBOL_RIGHT_ANGLE = 381, /* RIGHT_ANGLE */ + YYSYMBOL_VERTICAL_BAR = 382, /* VERTICAL_BAR */ + YYSYMBOL_CARET = 383, /* CARET */ + YYSYMBOL_AMPERSAND = 384, /* AMPERSAND */ + YYSYMBOL_QUESTION = 385, /* QUESTION */ + YYSYMBOL_INVARIANT = 386, /* INVARIANT */ + YYSYMBOL_HIGH_PRECISION = 387, /* HIGH_PRECISION */ + YYSYMBOL_MEDIUM_PRECISION = 388, /* MEDIUM_PRECISION */ + YYSYMBOL_LOW_PRECISION = 389, /* LOW_PRECISION */ + YYSYMBOL_PRECISION = 390, /* PRECISION */ + YYSYMBOL_PACKED = 391, /* PACKED */ + YYSYMBOL_RESOURCE = 392, /* RESOURCE */ + YYSYMBOL_SUPERP = 393, /* SUPERP */ + YYSYMBOL_FLOATCONSTANT = 394, /* FLOATCONSTANT */ + YYSYMBOL_INTCONSTANT = 395, /* INTCONSTANT */ + YYSYMBOL_UINTCONSTANT = 396, /* UINTCONSTANT */ + YYSYMBOL_BOOLCONSTANT = 397, /* BOOLCONSTANT */ + YYSYMBOL_IDENTIFIER = 398, /* IDENTIFIER */ + YYSYMBOL_TYPE_NAME = 399, /* TYPE_NAME */ + YYSYMBOL_CENTROID = 400, /* CENTROID */ + YYSYMBOL_IN = 401, /* IN */ + YYSYMBOL_OUT = 402, /* OUT */ + YYSYMBOL_INOUT = 403, /* INOUT */ + YYSYMBOL_STRUCT = 404, /* STRUCT */ + YYSYMBOL_VOID = 405, /* VOID */ + YYSYMBOL_WHILE = 406, /* WHILE */ + YYSYMBOL_BREAK = 407, /* BREAK */ + YYSYMBOL_CONTINUE = 408, /* CONTINUE */ + YYSYMBOL_DO = 409, /* DO */ + YYSYMBOL_ELSE = 410, /* ELSE */ + YYSYMBOL_FOR = 411, /* FOR */ + YYSYMBOL_IF = 412, /* IF */ + YYSYMBOL_DISCARD = 413, /* DISCARD */ + YYSYMBOL_RETURN = 414, /* RETURN */ + YYSYMBOL_SWITCH = 415, /* SWITCH */ + YYSYMBOL_CASE = 416, /* CASE */ + YYSYMBOL_DEFAULT = 417, /* DEFAULT */ + YYSYMBOL_TERMINATE_INVOCATION = 418, /* TERMINATE_INVOCATION */ + YYSYMBOL_TERMINATE_RAY = 419, /* TERMINATE_RAY */ + YYSYMBOL_IGNORE_INTERSECTION = 420, /* IGNORE_INTERSECTION */ + YYSYMBOL_UNIFORM = 421, /* UNIFORM */ + YYSYMBOL_SHARED = 422, /* SHARED */ + YYSYMBOL_BUFFER = 423, /* BUFFER */ + YYSYMBOL_TILEIMAGEEXT = 424, /* TILEIMAGEEXT */ + YYSYMBOL_FLAT = 425, /* FLAT */ + YYSYMBOL_SMOOTH = 426, /* SMOOTH */ + YYSYMBOL_LAYOUT = 427, /* LAYOUT */ + YYSYMBOL_DOUBLECONSTANT = 428, /* DOUBLECONSTANT */ + YYSYMBOL_INT16CONSTANT = 429, /* INT16CONSTANT */ + YYSYMBOL_UINT16CONSTANT = 430, /* UINT16CONSTANT */ + YYSYMBOL_FLOAT16CONSTANT = 431, /* FLOAT16CONSTANT */ + YYSYMBOL_INT32CONSTANT = 432, /* INT32CONSTANT */ + YYSYMBOL_UINT32CONSTANT = 433, /* UINT32CONSTANT */ + YYSYMBOL_INT64CONSTANT = 434, /* INT64CONSTANT */ + YYSYMBOL_UINT64CONSTANT = 435, /* UINT64CONSTANT */ + YYSYMBOL_SUBROUTINE = 436, /* SUBROUTINE */ + YYSYMBOL_DEMOTE = 437, /* DEMOTE */ + YYSYMBOL_FUNCTION = 438, /* FUNCTION */ + YYSYMBOL_PAYLOADNV = 439, /* PAYLOADNV */ + YYSYMBOL_PAYLOADINNV = 440, /* PAYLOADINNV */ + YYSYMBOL_HITATTRNV = 441, /* HITATTRNV */ + YYSYMBOL_CALLDATANV = 442, /* CALLDATANV */ + YYSYMBOL_CALLDATAINNV = 443, /* CALLDATAINNV */ + YYSYMBOL_PAYLOADEXT = 444, /* PAYLOADEXT */ + YYSYMBOL_PAYLOADINEXT = 445, /* PAYLOADINEXT */ + YYSYMBOL_HITATTREXT = 446, /* HITATTREXT */ + YYSYMBOL_CALLDATAEXT = 447, /* CALLDATAEXT */ + YYSYMBOL_CALLDATAINEXT = 448, /* CALLDATAINEXT */ + YYSYMBOL_PATCH = 449, /* PATCH */ + YYSYMBOL_SAMPLE = 450, /* SAMPLE */ + YYSYMBOL_NONUNIFORM = 451, /* NONUNIFORM */ + YYSYMBOL_COHERENT = 452, /* COHERENT */ + YYSYMBOL_VOLATILE = 453, /* VOLATILE */ + YYSYMBOL_RESTRICT = 454, /* RESTRICT */ + YYSYMBOL_READONLY = 455, /* READONLY */ + YYSYMBOL_WRITEONLY = 456, /* WRITEONLY */ + YYSYMBOL_NONTEMPORAL = 457, /* NONTEMPORAL */ + YYSYMBOL_DEVICECOHERENT = 458, /* DEVICECOHERENT */ + YYSYMBOL_QUEUEFAMILYCOHERENT = 459, /* QUEUEFAMILYCOHERENT */ + YYSYMBOL_WORKGROUPCOHERENT = 460, /* WORKGROUPCOHERENT */ + YYSYMBOL_SUBGROUPCOHERENT = 461, /* SUBGROUPCOHERENT */ + YYSYMBOL_NONPRIVATE = 462, /* NONPRIVATE */ + YYSYMBOL_SHADERCALLCOHERENT = 463, /* SHADERCALLCOHERENT */ + YYSYMBOL_NOPERSPECTIVE = 464, /* NOPERSPECTIVE */ + YYSYMBOL_EXPLICITINTERPAMD = 465, /* EXPLICITINTERPAMD */ + YYSYMBOL_PERVERTEXEXT = 466, /* PERVERTEXEXT */ + YYSYMBOL_PERVERTEXNV = 467, /* PERVERTEXNV */ + YYSYMBOL_PERPRIMITIVENV = 468, /* PERPRIMITIVENV */ + YYSYMBOL_PERVIEWNV = 469, /* PERVIEWNV */ + YYSYMBOL_PERTASKNV = 470, /* PERTASKNV */ + YYSYMBOL_PERPRIMITIVEEXT = 471, /* PERPRIMITIVEEXT */ + YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 472, /* TASKPAYLOADWORKGROUPEXT */ + YYSYMBOL_PRECISE = 473, /* PRECISE */ + YYSYMBOL_YYACCEPT = 474, /* $accept */ + YYSYMBOL_variable_identifier = 475, /* variable_identifier */ + YYSYMBOL_primary_expression = 476, /* primary_expression */ + YYSYMBOL_postfix_expression = 477, /* postfix_expression */ + YYSYMBOL_integer_expression = 478, /* integer_expression */ + YYSYMBOL_function_call = 479, /* function_call */ + YYSYMBOL_function_call_or_method = 480, /* function_call_or_method */ + YYSYMBOL_function_call_generic = 481, /* function_call_generic */ + YYSYMBOL_function_call_header_no_parameters = 482, /* function_call_header_no_parameters */ + YYSYMBOL_function_call_header_with_parameters = 483, /* function_call_header_with_parameters */ + YYSYMBOL_function_call_header = 484, /* function_call_header */ + YYSYMBOL_function_identifier = 485, /* function_identifier */ + YYSYMBOL_unary_expression = 486, /* unary_expression */ + YYSYMBOL_unary_operator = 487, /* unary_operator */ + YYSYMBOL_multiplicative_expression = 488, /* multiplicative_expression */ + YYSYMBOL_additive_expression = 489, /* additive_expression */ + YYSYMBOL_shift_expression = 490, /* shift_expression */ + YYSYMBOL_relational_expression = 491, /* relational_expression */ + YYSYMBOL_equality_expression = 492, /* equality_expression */ + YYSYMBOL_and_expression = 493, /* and_expression */ + YYSYMBOL_exclusive_or_expression = 494, /* exclusive_or_expression */ + YYSYMBOL_inclusive_or_expression = 495, /* inclusive_or_expression */ + YYSYMBOL_logical_and_expression = 496, /* logical_and_expression */ + YYSYMBOL_logical_xor_expression = 497, /* logical_xor_expression */ + YYSYMBOL_logical_or_expression = 498, /* logical_or_expression */ + YYSYMBOL_conditional_expression = 499, /* conditional_expression */ + YYSYMBOL_500_1 = 500, /* $@1 */ + YYSYMBOL_assignment_expression = 501, /* assignment_expression */ + YYSYMBOL_assignment_operator = 502, /* assignment_operator */ + YYSYMBOL_expression = 503, /* expression */ + YYSYMBOL_constant_expression = 504, /* constant_expression */ + YYSYMBOL_declaration = 505, /* declaration */ + YYSYMBOL_block_structure = 506, /* block_structure */ + YYSYMBOL_507_2 = 507, /* $@2 */ + YYSYMBOL_identifier_list = 508, /* identifier_list */ + YYSYMBOL_function_prototype = 509, /* function_prototype */ + YYSYMBOL_function_declarator = 510, /* function_declarator */ + YYSYMBOL_function_header_with_parameters = 511, /* function_header_with_parameters */ + YYSYMBOL_function_header = 512, /* function_header */ + YYSYMBOL_parameter_declarator = 513, /* parameter_declarator */ + YYSYMBOL_parameter_declaration = 514, /* parameter_declaration */ + YYSYMBOL_parameter_type_specifier = 515, /* parameter_type_specifier */ + YYSYMBOL_init_declarator_list = 516, /* init_declarator_list */ + YYSYMBOL_single_declaration = 517, /* single_declaration */ + YYSYMBOL_fully_specified_type = 518, /* fully_specified_type */ + YYSYMBOL_invariant_qualifier = 519, /* invariant_qualifier */ + YYSYMBOL_interpolation_qualifier = 520, /* interpolation_qualifier */ + YYSYMBOL_layout_qualifier = 521, /* layout_qualifier */ + YYSYMBOL_layout_qualifier_id_list = 522, /* layout_qualifier_id_list */ + YYSYMBOL_layout_qualifier_id = 523, /* layout_qualifier_id */ + YYSYMBOL_precise_qualifier = 524, /* precise_qualifier */ + YYSYMBOL_type_qualifier = 525, /* type_qualifier */ + YYSYMBOL_single_type_qualifier = 526, /* single_type_qualifier */ + YYSYMBOL_storage_qualifier = 527, /* storage_qualifier */ + YYSYMBOL_non_uniform_qualifier = 528, /* non_uniform_qualifier */ + YYSYMBOL_type_name_list = 529, /* type_name_list */ + YYSYMBOL_type_specifier = 530, /* type_specifier */ + YYSYMBOL_array_specifier = 531, /* array_specifier */ + YYSYMBOL_type_parameter_specifier_opt = 532, /* type_parameter_specifier_opt */ + YYSYMBOL_type_parameter_specifier = 533, /* type_parameter_specifier */ + YYSYMBOL_type_parameter_specifier_list = 534, /* type_parameter_specifier_list */ + YYSYMBOL_type_specifier_nonarray = 535, /* type_specifier_nonarray */ + YYSYMBOL_precision_qualifier = 536, /* precision_qualifier */ + YYSYMBOL_struct_specifier = 537, /* struct_specifier */ + YYSYMBOL_538_3 = 538, /* $@3 */ + YYSYMBOL_539_4 = 539, /* $@4 */ + YYSYMBOL_struct_declaration_list = 540, /* struct_declaration_list */ + YYSYMBOL_struct_declaration = 541, /* struct_declaration */ + YYSYMBOL_struct_declarator_list = 542, /* struct_declarator_list */ + YYSYMBOL_struct_declarator = 543, /* struct_declarator */ + YYSYMBOL_initializer = 544, /* initializer */ + YYSYMBOL_initializer_list = 545, /* initializer_list */ + YYSYMBOL_declaration_statement = 546, /* declaration_statement */ + YYSYMBOL_statement = 547, /* statement */ + YYSYMBOL_simple_statement = 548, /* simple_statement */ + YYSYMBOL_demote_statement = 549, /* demote_statement */ + YYSYMBOL_compound_statement = 550, /* compound_statement */ + YYSYMBOL_551_5 = 551, /* $@5 */ + YYSYMBOL_552_6 = 552, /* $@6 */ + YYSYMBOL_statement_no_new_scope = 553, /* statement_no_new_scope */ + YYSYMBOL_statement_scoped = 554, /* statement_scoped */ + YYSYMBOL_555_7 = 555, /* $@7 */ + YYSYMBOL_556_8 = 556, /* $@8 */ + YYSYMBOL_compound_statement_no_new_scope = 557, /* compound_statement_no_new_scope */ + YYSYMBOL_statement_list = 558, /* statement_list */ + YYSYMBOL_expression_statement = 559, /* expression_statement */ + YYSYMBOL_selection_statement = 560, /* selection_statement */ + YYSYMBOL_selection_statement_nonattributed = 561, /* selection_statement_nonattributed */ + YYSYMBOL_selection_rest_statement = 562, /* selection_rest_statement */ + YYSYMBOL_condition = 563, /* condition */ + YYSYMBOL_switch_statement = 564, /* switch_statement */ + YYSYMBOL_switch_statement_nonattributed = 565, /* switch_statement_nonattributed */ + YYSYMBOL_566_9 = 566, /* $@9 */ + YYSYMBOL_switch_statement_list = 567, /* switch_statement_list */ + YYSYMBOL_case_label = 568, /* case_label */ + YYSYMBOL_iteration_statement = 569, /* iteration_statement */ + YYSYMBOL_iteration_statement_nonattributed = 570, /* iteration_statement_nonattributed */ + YYSYMBOL_571_10 = 571, /* $@10 */ + YYSYMBOL_572_11 = 572, /* $@11 */ + YYSYMBOL_573_12 = 573, /* $@12 */ + YYSYMBOL_for_init_statement = 574, /* for_init_statement */ + YYSYMBOL_conditionopt = 575, /* conditionopt */ + YYSYMBOL_for_rest_statement = 576, /* for_rest_statement */ + YYSYMBOL_jump_statement = 577, /* jump_statement */ + YYSYMBOL_translation_unit = 578, /* translation_unit */ + YYSYMBOL_external_declaration = 579, /* external_declaration */ + YYSYMBOL_function_definition = 580, /* function_definition */ + YYSYMBOL_581_13 = 581, /* $@13 */ + YYSYMBOL_attribute = 582, /* attribute */ + YYSYMBOL_attribute_list = 583, /* attribute_list */ + YYSYMBOL_single_attribute = 584, /* single_attribute */ + YYSYMBOL_spirv_requirements_list = 585, /* spirv_requirements_list */ + YYSYMBOL_spirv_requirements_parameter = 586, /* spirv_requirements_parameter */ + YYSYMBOL_spirv_extension_list = 587, /* spirv_extension_list */ + YYSYMBOL_spirv_capability_list = 588, /* spirv_capability_list */ + YYSYMBOL_spirv_execution_mode_qualifier = 589, /* spirv_execution_mode_qualifier */ + YYSYMBOL_spirv_execution_mode_parameter_list = 590, /* spirv_execution_mode_parameter_list */ + YYSYMBOL_spirv_execution_mode_parameter = 591, /* spirv_execution_mode_parameter */ + YYSYMBOL_spirv_execution_mode_id_parameter_list = 592, /* spirv_execution_mode_id_parameter_list */ + YYSYMBOL_spirv_storage_class_qualifier = 593, /* spirv_storage_class_qualifier */ + YYSYMBOL_spirv_decorate_qualifier = 594, /* spirv_decorate_qualifier */ + YYSYMBOL_spirv_decorate_parameter_list = 595, /* spirv_decorate_parameter_list */ + YYSYMBOL_spirv_decorate_parameter = 596, /* spirv_decorate_parameter */ + YYSYMBOL_spirv_decorate_id_parameter_list = 597, /* spirv_decorate_id_parameter_list */ + YYSYMBOL_spirv_decorate_id_parameter = 598, /* spirv_decorate_id_parameter */ + YYSYMBOL_spirv_decorate_string_parameter_list = 599, /* spirv_decorate_string_parameter_list */ + YYSYMBOL_spirv_type_specifier = 600, /* spirv_type_specifier */ + YYSYMBOL_spirv_type_parameter_list = 601, /* spirv_type_parameter_list */ + YYSYMBOL_spirv_type_parameter = 602, /* spirv_type_parameter */ + YYSYMBOL_spirv_instruction_qualifier = 603, /* spirv_instruction_qualifier */ + YYSYMBOL_spirv_instruction_qualifier_list = 604, /* spirv_instruction_qualifier_list */ + YYSYMBOL_spirv_instruction_qualifier_id = 605 /* spirv_instruction_qualifier_id */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -737,7 +741,7 @@ typedef enum yysymbol_kind_t yysymbol_kind_t; extern int yylex(YYSTYPE*, TParseContext&); -#line 741 "MachineIndependent/glslang_tab.cpp" +#line 745 "MachineIndependent/glslang_tab.cpp" #ifdef short @@ -1059,21 +1063,21 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 457 +#define YYFINAL 461 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 12858 +#define YYLAST 12966 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 470 +#define YYNTOKENS 474 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 132 /* YYNRULES -- Number of rules. */ -#define YYNRULES 705 +#define YYNRULES 709 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 951 +#define YYNSTATES 955 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 724 +#define YYMAXUTOK 728 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1159,84 +1163,84 @@ static const yytype_int16 yytranslate[] = 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 + 465, 466, 467, 468, 469, 470, 471, 472, 473 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 357, 357, 363, 366, 371, 374, 377, 381, 384, - 387, 391, 395, 399, 403, 407, 411, 417, 424, 427, - 430, 433, 436, 441, 449, 456, 463, 469, 473, 480, - 483, 489, 507, 532, 540, 545, 572, 580, 586, 590, - 594, 614, 615, 616, 617, 623, 624, 629, 634, 643, - 644, 649, 657, 658, 664, 673, 674, 679, 684, 689, - 697, 698, 707, 719, 720, 729, 730, 739, 740, 749, - 750, 758, 759, 767, 768, 776, 777, 777, 795, 796, - 812, 816, 820, 824, 829, 833, 837, 841, 845, 849, - 853, 860, 863, 874, 881, 886, 893, 898, 903, 910, - 914, 918, 922, 927, 932, 941, 941, 952, 956, 963, - 968, 976, 984, 996, 999, 1006, 1019, 1042, 1065, 1080, - 1105, 1116, 1126, 1136, 1146, 1155, 1158, 1162, 1166, 1171, - 1179, 1184, 1189, 1194, 1199, 1208, 1218, 1245, 1254, 1261, - 1268, 1275, 1282, 1290, 1298, 1308, 1318, 1325, 1335, 1341, - 1344, 1351, 1355, 1359, 1367, 1376, 1379, 1390, 1393, 1396, - 1400, 1404, 1408, 1412, 1415, 1420, 1424, 1429, 1437, 1441, - 1446, 1452, 1458, 1465, 1470, 1475, 1483, 1488, 1500, 1514, - 1520, 1525, 1533, 1541, 1549, 1557, 1565, 1573, 1581, 1589, - 1597, 1604, 1611, 1615, 1620, 1625, 1630, 1635, 1640, 1645, - 1649, 1653, 1657, 1661, 1665, 1671, 1677, 1687, 1694, 1697, - 1705, 1712, 1723, 1728, 1736, 1740, 1750, 1753, 1759, 1765, - 1771, 1779, 1789, 1793, 1797, 1801, 1806, 1810, 1815, 1820, - 1825, 1830, 1835, 1840, 1845, 1850, 1855, 1861, 1867, 1873, - 1878, 1883, 1888, 1893, 1898, 1903, 1908, 1913, 1918, 1923, - 1928, 1933, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, - 1980, 1985, 1990, 1995, 2003, 2011, 2019, 2025, 2031, 2037, + 0, 358, 358, 364, 367, 372, 375, 378, 382, 385, + 388, 392, 396, 400, 404, 408, 412, 418, 425, 428, + 431, 434, 437, 442, 450, 457, 464, 470, 474, 481, + 484, 490, 508, 533, 541, 546, 573, 581, 587, 591, + 595, 615, 616, 617, 618, 624, 625, 630, 635, 644, + 645, 650, 658, 659, 665, 674, 675, 680, 685, 690, + 698, 699, 708, 720, 721, 730, 731, 740, 741, 750, + 751, 759, 760, 768, 769, 777, 778, 778, 796, 797, + 813, 817, 821, 825, 830, 834, 838, 842, 846, 850, + 854, 861, 864, 875, 882, 887, 894, 899, 904, 911, + 915, 919, 923, 928, 933, 942, 942, 953, 957, 964, + 969, 977, 985, 997, 1000, 1007, 1020, 1043, 1066, 1081, + 1106, 1117, 1127, 1137, 1147, 1156, 1159, 1163, 1167, 1172, + 1180, 1185, 1190, 1195, 1200, 1209, 1219, 1246, 1255, 1262, + 1269, 1276, 1283, 1291, 1299, 1309, 1319, 1326, 1336, 1342, + 1345, 1352, 1356, 1360, 1368, 1377, 1380, 1391, 1394, 1397, + 1401, 1405, 1409, 1413, 1416, 1421, 1425, 1430, 1438, 1442, + 1447, 1453, 1459, 1466, 1471, 1476, 1484, 1489, 1501, 1515, + 1521, 1526, 1534, 1542, 1550, 1558, 1566, 1574, 1582, 1590, + 1598, 1605, 1612, 1616, 1621, 1626, 1631, 1636, 1641, 1646, + 1650, 1654, 1658, 1662, 1666, 1672, 1678, 1688, 1695, 1698, + 1706, 1713, 1724, 1729, 1737, 1741, 1751, 1754, 1760, 1766, + 1772, 1780, 1790, 1794, 1798, 1802, 1807, 1811, 1816, 1821, + 1826, 1831, 1836, 1841, 1846, 1851, 1856, 1862, 1868, 1874, + 1879, 1884, 1889, 1894, 1899, 1904, 1909, 1914, 1919, 1924, + 1929, 1934, 1941, 1946, 1951, 1956, 1961, 1966, 1971, 1976, + 1981, 1986, 1991, 1996, 2001, 2009, 2017, 2025, 2031, 2037, 2043, 2049, 2055, 2061, 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, - 2225, 2233, 2241, 2249, 2257, 2265, 2273, 2281, 2289, 2297, - 2305, 2313, 2319, 2325, 2331, 2337, 2343, 2349, 2355, 2361, + 2223, 2229, 2235, 2241, 2249, 2257, 2265, 2273, 2281, 2289, + 2297, 2305, 2313, 2321, 2329, 2337, 2343, 2349, 2355, 2361, 2367, 2373, 2379, 2385, 2391, 2397, 2403, 2409, 2415, 2421, 2427, 2433, 2439, 2445, 2451, 2457, 2463, 2469, 2475, 2481, - 2487, 2493, 2499, 2505, 2511, 2517, 2523, 2529, 2533, 2537, - 2541, 2546, 2551, 2556, 2561, 2566, 2571, 2576, 2581, 2586, - 2591, 2596, 2601, 2606, 2611, 2617, 2623, 2629, 2635, 2641, - 2647, 2653, 2659, 2665, 2671, 2677, 2683, 2689, 2694, 2699, - 2704, 2709, 2714, 2719, 2724, 2729, 2734, 2739, 2744, 2749, - 2754, 2759, 2764, 2769, 2774, 2779, 2784, 2789, 2794, 2799, - 2804, 2809, 2814, 2819, 2824, 2829, 2834, 2839, 2844, 2849, - 2854, 2860, 2866, 2871, 2876, 2881, 2887, 2892, 2897, 2902, - 2908, 2913, 2918, 2923, 2929, 2934, 2939, 2944, 2950, 2956, - 2962, 2968, 2973, 2979, 2985, 2991, 2996, 3001, 3006, 3011, - 3016, 3022, 3027, 3032, 3037, 3043, 3048, 3053, 3058, 3064, - 3069, 3074, 3079, 3085, 3090, 3095, 3100, 3106, 3111, 3116, - 3121, 3127, 3132, 3137, 3142, 3148, 3153, 3158, 3163, 3169, - 3174, 3179, 3184, 3190, 3195, 3200, 3205, 3211, 3216, 3221, - 3226, 3232, 3237, 3242, 3247, 3253, 3258, 3263, 3268, 3274, - 3279, 3284, 3289, 3295, 3300, 3305, 3310, 3316, 3321, 3326, - 3331, 3336, 3341, 3346, 3351, 3356, 3361, 3366, 3371, 3376, - 3381, 3386, 3391, 3396, 3401, 3406, 3411, 3416, 3421, 3426, - 3431, 3436, 3442, 3448, 3454, 3460, 3466, 3472, 3478, 3485, - 3492, 3498, 3504, 3510, 3516, 3523, 3530, 3537, 3544, 3549, - 3554, 3558, 3564, 3568, 3572, 3577, 3593, 3598, 3603, 3611, - 3611, 3628, 3628, 3638, 3641, 3654, 3676, 3703, 3707, 3713, - 3718, 3729, 3732, 3738, 3744, 3753, 3756, 3762, 3766, 3767, - 3773, 3774, 3775, 3776, 3777, 3778, 3779, 3780, 3784, 3792, - 3793, 3797, 3793, 3811, 3812, 3816, 3816, 3823, 3823, 3837, - 3840, 3850, 3858, 3869, 3870, 3874, 3877, 3884, 3891, 3895, - 3903, 3907, 3920, 3923, 3930, 3930, 3950, 3953, 3959, 3971, - 3983, 3986, 3994, 3994, 4009, 4009, 4027, 4027, 4048, 4051, - 4057, 4060, 4066, 4070, 4077, 4082, 4087, 4094, 4097, 4101, - 4105, 4109, 4118, 4122, 4131, 4134, 4137, 4145, 4145, 4187, - 4192, 4195, 4200, 4203, 4208, 4211, 4216, 4219, 4224, 4227, - 4232, 4235, 4240, 4244, 4249, 4253, 4258, 4262, 4269, 4272, - 4277, 4280, 4283, 4286, 4289, 4294, 4303, 4314, 4319, 4327, - 4331, 4336, 4340, 4345, 4349, 4354, 4358, 4365, 4368, 4373, - 4376, 4379, 4382, 4387, 4390, 4395, 4401, 4404, 4407, 4410, - 4415, 4419, 4424, 4428, 4433, 4437, 4444, 4447, 4452, 4455, - 4460, 4463, 4469, 4472, 4477, 4480 + 2487, 2493, 2499, 2505, 2511, 2517, 2523, 2529, 2535, 2541, + 2547, 2553, 2557, 2561, 2565, 2570, 2575, 2580, 2585, 2590, + 2595, 2600, 2605, 2610, 2615, 2620, 2625, 2630, 2635, 2641, + 2647, 2653, 2659, 2665, 2671, 2677, 2683, 2689, 2695, 2701, + 2707, 2713, 2718, 2723, 2728, 2733, 2738, 2743, 2748, 2753, + 2758, 2763, 2768, 2773, 2778, 2783, 2788, 2793, 2798, 2803, + 2808, 2813, 2818, 2823, 2828, 2833, 2838, 2843, 2848, 2853, + 2858, 2863, 2868, 2873, 2878, 2884, 2890, 2895, 2900, 2905, + 2911, 2916, 2921, 2926, 2932, 2937, 2942, 2947, 2953, 2958, + 2963, 2968, 2974, 2980, 2986, 2992, 2997, 3003, 3009, 3015, + 3020, 3025, 3030, 3035, 3040, 3046, 3051, 3056, 3061, 3067, + 3072, 3077, 3082, 3088, 3093, 3098, 3103, 3109, 3114, 3119, + 3124, 3130, 3135, 3140, 3145, 3151, 3156, 3161, 3166, 3172, + 3177, 3182, 3187, 3193, 3198, 3203, 3208, 3214, 3219, 3224, + 3229, 3235, 3240, 3245, 3250, 3256, 3261, 3266, 3271, 3277, + 3282, 3287, 3292, 3298, 3303, 3308, 3313, 3319, 3324, 3329, + 3334, 3340, 3345, 3350, 3355, 3360, 3365, 3370, 3375, 3380, + 3385, 3390, 3395, 3400, 3405, 3410, 3415, 3420, 3425, 3430, + 3435, 3440, 3445, 3450, 3455, 3460, 3466, 3472, 3478, 3484, + 3490, 3496, 3502, 3509, 3516, 3522, 3528, 3534, 3540, 3547, + 3554, 3561, 3568, 3573, 3578, 3582, 3588, 3592, 3596, 3601, + 3617, 3622, 3627, 3635, 3635, 3652, 3652, 3662, 3665, 3678, + 3700, 3727, 3731, 3737, 3742, 3753, 3756, 3762, 3768, 3777, + 3780, 3786, 3790, 3791, 3797, 3798, 3799, 3800, 3801, 3802, + 3803, 3804, 3808, 3816, 3817, 3821, 3817, 3835, 3836, 3840, + 3840, 3847, 3847, 3861, 3864, 3874, 3882, 3893, 3894, 3898, + 3901, 3908, 3915, 3919, 3927, 3931, 3944, 3947, 3954, 3954, + 3974, 3977, 3983, 3995, 4007, 4010, 4018, 4018, 4033, 4033, + 4051, 4051, 4072, 4075, 4081, 4084, 4090, 4094, 4101, 4106, + 4111, 4118, 4121, 4125, 4129, 4133, 4142, 4146, 4155, 4158, + 4161, 4169, 4169, 4211, 4216, 4219, 4224, 4227, 4232, 4235, + 4240, 4243, 4248, 4251, 4256, 4259, 4264, 4268, 4273, 4277, + 4282, 4286, 4293, 4296, 4301, 4304, 4307, 4310, 4313, 4318, + 4327, 4338, 4343, 4351, 4355, 4360, 4364, 4369, 4373, 4378, + 4382, 4389, 4392, 4397, 4400, 4403, 4406, 4411, 4414, 4419, + 4425, 4428, 4431, 4434, 4439, 4443, 4448, 4452, 4457, 4461, + 4468, 4471, 4476, 4479, 4484, 4487, 4493, 4496, 4501, 4504 }; #endif @@ -1263,28 +1267,29 @@ static const char *const yytname[] = "USAMPLER2DARRAY", "SAMPLER", "SAMPLERSHADOW", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE", "TEXTURE2DARRAY", "ITEXTURE2D", "ITEXTURE3D", "ITEXTURECUBE", "ITEXTURE2DARRAY", "UTEXTURE2D", "UTEXTURE3D", - "UTEXTURECUBE", "UTEXTURE2DARRAY", "ATTRIBUTE", "VARYING", "FLOAT16_T", - "FLOAT32_T", "DOUBLE", "FLOAT64_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", "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", "F64MAT2X3", - "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", - "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT", - "RAYQUERYEXT", "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "COOPMAT", - "COOPVECNV", "HITOBJECTNV", "HITOBJECTATTRNV", "TENSORLAYOUTNV", - "TENSORVIEWNV", "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", - "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY", "SAMPLER1D", "SAMPLER1DARRAY", + "UTEXTURECUBE", "UTEXTURE2DARRAY", "ATTRIBUTE", "VARYING", "BFLOAT16_T", + "FLOAT16_T", "FLOAT32_T", "DOUBLE", "FLOAT64_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", "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", "F64MAT2X3", "F64MAT2X4", "F64MAT3X2", + "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3", "F64MAT4X4", + "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT", "RAYQUERYEXT", + "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "COOPMAT", "COOPVECNV", + "HITOBJECTNV", "HITOBJECTATTRNV", "TENSORLAYOUTNV", "TENSORVIEWNV", + "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", + "USAMPLERCUBEARRAY", "SAMPLER1D", "SAMPLER1DARRAY", "SAMPLER1DARRAYSHADOW", "ISAMPLER1D", "SAMPLER1DSHADOW", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER", "SAMPLER2DMS", @@ -1414,12 +1419,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-838) +#define YYPACT_NINF (-878) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-700) +#define YYTABLE_NINF (-704) #define yytable_value_is_error(Yyn) \ 0 @@ -1428,102 +1433,102 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 4693, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -301, -281, -273, -261, -183, -122, -105, -103, -838, - -838, -838, -838, -838, -91, -838, -838, -838, -838, -838, - -143, -838, -838, -838, -838, -838, -312, -838, -838, -838, - -838, -838, -838, -838, -77, -63, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -338, -111, -136, -80, 7962, -175, -838, - -97, -838, -838, -838, -838, 5627, -838, -838, -838, -838, - -56, -838, -838, 957, -838, -838, 7962, -37, -838, -838, - -838, 6094, -53, -135, -129, -128, -127, -123, -53, -121, - -46, 12424, -838, -13, -360, -44, -838, -317, -838, -10, - -7, 7962, -838, -838, -838, 7962, -38, -36, -838, -269, - -838, -226, -838, -838, 11092, -5, -838, -838, -838, -2, - -34, 7962, -838, -9, -6, -3, -838, -311, -838, -254, - -4, -1, 1, 3, -224, 4, 5, 7, 8, 9, - 10, -213, 18, 13, 21, -306, -838, 14, 7962, -838, - 19, -838, -211, -838, -838, -202, 9316, -838, -307, 1424, - -838, -838, -838, -838, -838, -5, -272, -838, 9760, -266, - -838, -27, -838, -90, 11092, 11092, -838, 11092, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, -252, -838, -838, - -838, 22, -201, 11536, 27, -838, 11092, -838, 29, -330, - 20, -7, 30, -838, -329, -53, -838, -23, -838, -318, - 31, -112, 11092, -102, -838, -147, -101, -160, -100, 32, - -73, -53, -838, 11980, -838, -72, 11092, 34, -46, -838, - 7962, 16, 6561, -838, 7962, 11092, -838, -360, -838, 26, - -838, -838, -30, -268, -212, -308, -198, -15, 23, 15, - 46, 53, -316, 39, -838, 10204, -838, 38, -838, -838, - 45, 24, 40, -838, 48, 49, 44, 10648, 56, 11092, - 63, 54, 62, 66, 67, -233, -838, -838, -39, -838, - -111, 78, 29, -838, -838, -838, -838, -838, 1891, -838, - -838, -838, -838, -838, -838, -838, -838, -838, 5160, 20, - 9760, -264, 8428, -838, -838, 9760, 7962, -838, 43, -838, - -838, -838, -200, -838, -838, 11092, 50, -838, -838, 11092, - 79, -838, -838, -838, 11092, -838, -838, -838, -320, -838, - -838, -197, 72, -838, -838, -838, -838, -838, -838, -188, - -838, -187, -838, -838, -186, 75, -838, -838, -838, -838, - -185, -838, -165, -838, -838, -838, -838, -838, -164, -838, - 81, -838, -162, 82, -161, 72, -838, -313, -157, -838, - 84, 89, -838, -838, 16, -5, -35, -838, -838, -838, - 7028, -838, -838, -838, 11092, 11092, 11092, 11092, 11092, 11092, - 11092, 11092, 11092, 11092, 11092, 11092, 11092, 11092, 11092, 11092, - 11092, 11092, 11092, -838, -838, -838, 88, -838, 2358, -838, - -838, -838, 2358, -838, 11092, -838, -838, -33, 11092, -205, - -838, -838, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, 11092, 11092, -838, -838, - -838, -838, -838, -838, -838, 9760, -838, -838, -180, -838, - 7495, -838, -838, 91, 85, -838, -838, -838, -838, -838, - -218, -139, -838, -315, -838, -318, -838, -318, -838, 11092, - 11092, -838, -147, -838, -147, -838, -160, -160, -838, 98, - 32, -838, 11980, -838, 11092, -838, -838, -29, 20, 16, - -838, -838, -838, -838, -838, -30, -30, -268, -268, -212, - -212, -212, -212, -308, -308, -198, -15, 23, 15, 46, - 53, 11092, -838, 2358, 4226, 57, 3759, -153, -838, -152, - -838, -838, -838, -838, -838, 8872, -838, -838, -838, 99, - -838, 69, -838, -150, -838, -149, -838, -148, -838, -145, - -838, -141, -140, -838, -838, -838, -137, 95, 85, 68, - 104, 106, -838, -838, 4226, 103, -838, -838, -838, -838, - -838, -838, -838, -838, -838, -838, -838, 11092, -838, 100, - 2825, 11092, -838, 101, 107, 64, 109, 3292, -838, 110, - -838, 9760, -838, -838, -838, -138, 11092, 2825, 103, -838, - -838, 2358, -838, 108, 85, -838, -838, 2358, 111, -838, - -838 + 4729, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -305, -273, -212, -207, -194, + -121, -113, -108, -878, -878, -878, -878, -878, -320, -878, + -878, -878, -878, -878, -196, -878, -878, -878, -878, -878, + -333, -878, -878, -878, -878, -878, -878, -878, -99, -91, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -337, -240, -67, + -64, 8026, -278, -878, -71, -878, -878, -878, -878, 5671, + -878, -878, -878, -878, -47, -878, -878, 961, -878, -878, + 8026, -29, -878, -878, -878, 6142, -53, -134, -133, -128, + -126, -118, -53, -117, -49, 12528, -878, -16, -360, -46, + -878, -316, -878, -13, -10, 8026, -878, -878, -878, 8026, + -43, -42, -878, -313, -878, -258, -878, -878, 11184, -7, + -878, -878, -878, -5, -39, 8026, -878, -12, -9, -8, + -878, -264, -878, -253, -6, -3, -2, -1, -251, 1, + 3, 4, 6, 7, 8, -233, 11, 10, 16, -310, + -878, 13, 8026, -878, 15, -878, -230, -878, -878, -226, + 9392, -878, -274, 1432, -878, -878, -878, -878, -878, -7, + -311, -878, 9840, -271, -878, -35, -878, -238, 11184, 11184, + -878, 11184, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -261, -878, -878, -878, 17, -225, 11632, 19, -878, + 11184, -878, 21, -284, 20, -10, 25, -878, -325, -53, + -878, -34, -878, -321, 24, -116, 11184, -112, -878, -151, + -111, -168, -107, 28, -100, -53, -878, 12080, -878, -98, + 11184, 29, -49, -878, 8026, -27, 6613, -878, 8026, 11184, + -878, -360, -878, 14, -878, -878, -146, -153, -101, -314, + -163, -15, 23, 18, 42, 45, -307, 31, -878, 10288, + -878, 30, -878, -878, 36, 27, 38, -878, 40, 41, + 39, 10736, 52, 11184, 46, 43, 56, 59, 61, -231, + -878, -878, -68, -878, -240, 72, 21, -878, -878, -878, + -878, -878, 1903, -878, -878, -878, -878, -878, -878, -878, + -878, -878, 5200, 20, 9840, -262, 8496, -878, -878, 9840, + 8026, -878, 44, -878, -878, -878, -221, -878, -878, 11184, + 49, -878, -878, 11184, 55, -878, -878, -878, 11184, -878, + -878, -878, -324, -878, -878, -218, 65, -878, -878, -878, + -878, -878, -878, -216, -878, -209, -878, -878, -200, 70, + -878, -878, -878, -878, -199, -878, -198, -878, -878, -878, + -878, -878, -197, -878, 71, -878, -190, 74, -188, 65, + -878, -317, -161, -878, 78, 81, -878, -878, -27, -7, + -66, -878, -878, -878, 7084, -878, -878, -878, 11184, 11184, + 11184, 11184, 11184, 11184, 11184, 11184, 11184, 11184, 11184, 11184, + 11184, 11184, 11184, 11184, 11184, 11184, 11184, -878, -878, -878, + 83, -878, 2374, -878, -878, -878, 2374, -878, 11184, -878, + -878, -41, 11184, -80, -878, -878, -878, -878, -878, -878, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + 11184, 11184, -878, -878, -878, -878, -878, -878, -878, 9840, + -878, -878, -119, -878, 7555, -878, -878, 85, 84, -878, + -878, -878, -878, -878, -252, -131, -878, -318, -878, -321, + -878, -321, -878, 11184, 11184, -878, -151, -878, -151, -878, + -168, -168, -878, 91, 28, -878, 12080, -878, 11184, -878, + -878, -37, 20, -27, -878, -878, -878, -878, -878, -146, + -146, -153, -153, -101, -101, -101, -101, -314, -314, -163, + -15, 23, 18, 42, 45, 11184, -878, 2374, 4258, 48, + 3787, -159, -878, -157, -878, -878, -878, -878, -878, 8944, + -878, -878, -878, 94, -878, 64, -878, -156, -878, -154, + -878, -152, -878, -149, -878, -147, -145, -878, -878, -878, + -33, 89, 84, 62, 99, 101, -878, -878, 4258, 98, + -878, -878, -878, -878, -878, -878, -878, -878, -878, -878, + -878, 11184, -878, 95, 2845, 11184, -878, 97, 104, 60, + 105, 3316, -878, 106, -878, 9840, -878, -878, -878, -144, + 11184, 2845, 98, -878, -878, 2374, -878, 102, 84, -878, + -878, 2374, 108, -878, -878 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1534,137 +1539,137 @@ static const yytype_int16 yydefact[] = 0, 168, 226, 224, 225, 223, 230, 231, 232, 233, 234, 235, 236, 237, 238, 227, 228, 229, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 352, 353, 354, 355, 356, 357, 358, 378, 379, 380, - 381, 382, 383, 384, 393, 406, 407, 394, 395, 397, - 396, 398, 399, 400, 401, 402, 403, 404, 405, 177, - 178, 252, 253, 251, 254, 261, 262, 259, 260, 257, - 258, 255, 256, 284, 285, 286, 296, 297, 298, 281, - 282, 283, 293, 294, 295, 278, 279, 280, 290, 291, - 292, 275, 276, 277, 287, 288, 289, 263, 264, 265, - 299, 300, 301, 266, 267, 268, 311, 312, 313, 269, - 270, 271, 323, 324, 325, 272, 273, 274, 335, 336, - 337, 302, 303, 304, 305, 306, 307, 308, 309, 310, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 326, - 327, 328, 329, 330, 331, 332, 333, 334, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 350, 347, 348, - 349, 534, 535, 536, 537, 541, 543, 182, 538, 539, - 362, 363, 386, 389, 351, 360, 361, 377, 359, 408, - 409, 412, 413, 414, 416, 417, 418, 420, 421, 422, - 424, 425, 521, 522, 385, 387, 388, 364, 365, 366, - 410, 367, 371, 372, 375, 415, 419, 423, 368, 369, - 373, 374, 411, 370, 376, 455, 457, 458, 459, 461, - 462, 463, 465, 466, 467, 469, 470, 471, 473, 474, - 475, 477, 478, 479, 481, 482, 483, 485, 486, 487, - 489, 490, 491, 493, 494, 495, 497, 498, 456, 460, - 464, 468, 472, 480, 484, 488, 476, 492, 496, 499, - 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 356, 357, 358, 359, 360, 361, 362, 382, 383, 384, + 385, 386, 387, 388, 397, 410, 411, 398, 399, 401, + 400, 402, 403, 404, 405, 406, 407, 408, 409, 177, + 178, 252, 253, 254, 251, 255, 262, 263, 260, 261, + 258, 259, 256, 257, 288, 289, 290, 300, 301, 302, + 285, 286, 287, 297, 298, 299, 282, 283, 284, 294, + 295, 296, 279, 280, 281, 291, 292, 293, 264, 265, + 266, 303, 304, 305, 267, 268, 269, 270, 271, 272, + 315, 316, 317, 273, 274, 275, 327, 328, 329, 276, + 277, 278, 339, 340, 341, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 354, 351, 352, 353, 538, 539, 540, 541, 545, + 547, 182, 542, 543, 366, 367, 390, 393, 355, 364, + 365, 381, 363, 412, 413, 416, 417, 418, 420, 421, + 422, 424, 425, 426, 428, 429, 525, 526, 389, 391, + 392, 368, 369, 370, 414, 371, 375, 376, 379, 419, + 423, 427, 372, 373, 377, 378, 415, 374, 380, 459, + 461, 462, 463, 465, 466, 467, 469, 470, 471, 473, + 474, 475, 477, 478, 479, 481, 482, 483, 485, 486, + 487, 489, 490, 491, 493, 494, 495, 497, 498, 499, + 501, 502, 460, 464, 468, 472, 476, 484, 488, 492, + 480, 496, 500, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, - 520, 390, 391, 392, 426, 435, 437, 431, 436, 438, - 439, 441, 442, 443, 445, 446, 447, 449, 450, 451, - 453, 454, 427, 428, 429, 440, 430, 432, 433, 434, - 444, 448, 452, 526, 527, 530, 531, 532, 533, 528, - 529, 0, 0, 0, 0, 0, 0, 0, 0, 166, - 167, 523, 524, 525, 0, 636, 137, 546, 547, 548, - 0, 545, 172, 170, 171, 169, 0, 222, 173, 175, - 176, 174, 139, 138, 0, 204, 540, 184, 186, 181, - 188, 190, 185, 187, 183, 189, 191, 179, 180, 207, - 192, 199, 200, 201, 202, 203, 193, 194, 195, 196, - 197, 198, 140, 141, 143, 142, 144, 146, 147, 145, - 206, 154, 635, 0, 637, 0, 114, 113, 0, 125, - 130, 161, 160, 158, 162, 0, 155, 157, 163, 135, - 217, 159, 544, 0, 632, 634, 0, 0, 164, 165, - 542, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 551, 0, 0, 0, 99, 0, 94, 0, - 109, 0, 121, 115, 123, 0, 124, 0, 97, 131, - 102, 0, 156, 136, 0, 210, 216, 1, 633, 0, - 0, 0, 96, 0, 0, 0, 644, 0, 702, 0, + 520, 521, 522, 523, 524, 394, 395, 396, 430, 439, + 441, 435, 440, 442, 443, 445, 446, 447, 449, 450, + 451, 453, 454, 455, 457, 458, 431, 432, 433, 444, + 434, 436, 437, 438, 448, 452, 456, 530, 531, 534, + 535, 536, 537, 532, 533, 0, 0, 0, 0, 0, + 0, 0, 0, 166, 167, 527, 528, 529, 0, 640, + 137, 550, 551, 552, 0, 549, 172, 170, 171, 169, + 0, 222, 173, 175, 176, 174, 139, 138, 0, 204, + 544, 184, 186, 181, 188, 190, 185, 187, 183, 189, + 191, 179, 180, 207, 192, 199, 200, 201, 202, 203, + 193, 194, 195, 196, 197, 198, 140, 141, 143, 142, + 144, 146, 147, 145, 206, 154, 639, 0, 641, 0, + 114, 113, 0, 125, 130, 161, 160, 158, 162, 0, + 155, 157, 163, 135, 217, 159, 548, 0, 636, 638, + 0, 0, 164, 165, 546, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 555, 0, 0, 0, + 99, 0, 94, 0, 109, 0, 121, 115, 123, 0, + 124, 0, 97, 131, 102, 0, 156, 136, 0, 210, + 216, 1, 637, 0, 0, 0, 96, 0, 0, 0, + 648, 0, 706, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 646, 0, + 644, 0, 0, 553, 151, 153, 0, 149, 208, 0, + 0, 100, 0, 0, 642, 110, 116, 120, 122, 118, + 126, 117, 0, 132, 105, 0, 103, 0, 0, 0, + 9, 0, 43, 42, 44, 41, 5, 6, 7, 8, + 2, 16, 14, 15, 17, 10, 11, 12, 13, 3, + 18, 37, 20, 25, 26, 0, 0, 30, 0, 220, + 0, 36, 219, 0, 211, 111, 0, 95, 0, 0, + 704, 0, 656, 0, 0, 0, 0, 0, 673, 0, + 0, 0, 0, 0, 0, 0, 698, 0, 671, 0, + 0, 0, 0, 98, 0, 0, 0, 557, 0, 0, + 148, 0, 205, 0, 212, 45, 49, 52, 55, 60, + 63, 65, 67, 69, 71, 73, 75, 0, 34, 0, + 101, 584, 593, 597, 0, 0, 0, 618, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, + 78, 91, 0, 571, 0, 163, 135, 574, 595, 573, + 581, 572, 0, 575, 576, 599, 577, 606, 578, 579, + 614, 580, 0, 119, 0, 127, 0, 565, 134, 0, + 0, 107, 0, 104, 38, 39, 0, 22, 23, 0, + 0, 28, 27, 0, 222, 31, 33, 40, 0, 218, + 112, 708, 0, 709, 649, 0, 0, 707, 668, 664, + 665, 666, 667, 0, 662, 0, 93, 669, 0, 0, + 683, 684, 685, 686, 0, 681, 0, 690, 691, 692, + 693, 689, 0, 687, 0, 694, 0, 0, 0, 2, + 702, 217, 0, 700, 0, 0, 643, 645, 0, 563, + 0, 561, 556, 558, 0, 152, 150, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 642, 0, 640, 0, 0, 549, - 151, 153, 0, 149, 208, 0, 0, 100, 0, 0, - 638, 110, 116, 120, 122, 118, 126, 117, 0, 132, - 105, 0, 103, 0, 0, 0, 9, 0, 43, 42, - 44, 41, 5, 6, 7, 8, 2, 16, 14, 15, - 17, 10, 11, 12, 13, 3, 18, 37, 20, 25, - 26, 0, 0, 30, 0, 220, 0, 36, 219, 0, - 211, 111, 0, 95, 0, 0, 700, 0, 652, 0, - 0, 0, 0, 0, 669, 0, 0, 0, 0, 0, - 0, 0, 694, 0, 667, 0, 0, 0, 0, 98, - 0, 0, 0, 553, 0, 0, 148, 0, 205, 0, - 212, 45, 49, 52, 55, 60, 63, 65, 67, 69, - 71, 73, 75, 0, 34, 0, 101, 580, 589, 593, - 0, 0, 0, 614, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 45, 78, 91, 0, 567, - 0, 163, 135, 570, 591, 569, 577, 568, 0, 571, - 572, 595, 573, 602, 574, 575, 610, 576, 0, 119, - 0, 127, 0, 561, 134, 0, 0, 107, 0, 104, - 38, 39, 0, 22, 23, 0, 0, 28, 27, 0, - 222, 31, 33, 40, 0, 218, 112, 704, 0, 705, - 645, 0, 0, 703, 664, 660, 661, 662, 663, 0, - 658, 0, 93, 665, 0, 0, 679, 680, 681, 682, - 0, 677, 0, 686, 687, 688, 689, 685, 0, 683, - 0, 690, 0, 0, 0, 2, 698, 217, 0, 696, - 0, 0, 639, 641, 0, 559, 0, 557, 552, 554, - 0, 152, 150, 209, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 76, 213, 214, 0, 579, 0, 612, - 625, 624, 0, 616, 0, 628, 626, 0, 0, 0, - 609, 629, 630, 631, 578, 81, 82, 84, 83, 86, - 87, 88, 89, 90, 85, 80, 0, 0, 594, 590, - 592, 596, 603, 611, 129, 0, 564, 565, 0, 133, - 0, 108, 4, 0, 24, 21, 32, 221, 648, 650, - 0, 0, 701, 0, 654, 0, 653, 0, 656, 0, - 0, 671, 0, 670, 0, 673, 0, 0, 675, 0, - 0, 695, 0, 692, 0, 668, 643, 0, 560, 0, - 555, 550, 46, 47, 48, 51, 50, 53, 54, 58, - 59, 56, 57, 61, 62, 64, 66, 68, 70, 72, - 74, 0, 215, 581, 0, 0, 0, 0, 627, 0, - 608, 79, 92, 128, 562, 0, 106, 19, 646, 0, - 647, 0, 659, 0, 666, 0, 678, 0, 684, 0, - 691, 0, 0, 697, 556, 558, 0, 0, 600, 0, - 0, 0, 619, 618, 621, 587, 604, 563, 566, 649, - 651, 655, 657, 672, 674, 676, 693, 0, 582, 0, - 0, 0, 620, 0, 0, 599, 0, 0, 597, 0, - 77, 0, 584, 613, 583, 0, 622, 0, 587, 586, - 588, 606, 601, 0, 623, 617, 598, 607, 0, 615, - 605 + 0, 0, 0, 0, 0, 0, 0, 76, 213, 214, + 0, 583, 0, 616, 629, 628, 0, 620, 0, 632, + 630, 0, 0, 0, 613, 633, 634, 635, 582, 81, + 82, 84, 83, 86, 87, 88, 89, 90, 85, 80, + 0, 0, 598, 594, 596, 600, 607, 615, 129, 0, + 568, 569, 0, 133, 0, 108, 4, 0, 24, 21, + 32, 221, 652, 654, 0, 0, 705, 0, 658, 0, + 657, 0, 660, 0, 0, 675, 0, 674, 0, 677, + 0, 0, 679, 0, 0, 699, 0, 696, 0, 672, + 647, 0, 564, 0, 559, 554, 46, 47, 48, 51, + 50, 53, 54, 58, 59, 56, 57, 61, 62, 64, + 66, 68, 70, 72, 74, 0, 215, 585, 0, 0, + 0, 0, 631, 0, 612, 79, 92, 128, 566, 0, + 106, 19, 650, 0, 651, 0, 663, 0, 670, 0, + 682, 0, 688, 0, 695, 0, 0, 701, 560, 562, + 0, 0, 604, 0, 0, 0, 623, 622, 625, 591, + 608, 567, 570, 653, 655, 659, 661, 676, 678, 680, + 697, 0, 586, 0, 0, 0, 624, 0, 0, 603, + 0, 0, 601, 0, 77, 0, 588, 617, 587, 0, + 626, 0, 591, 590, 592, 610, 605, 0, 627, 621, + 602, 611, 0, 619, 609 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -838, -550, -838, -838, -838, -838, -838, -838, -838, -838, - -838, -838, -436, -838, -400, -415, -493, -399, -270, -267, - -274, -271, -265, -263, -838, -492, -838, -499, -838, -510, - -536, 11, -838, -838, -838, 6, -401, -838, -838, 33, - 41, 35, -838, -838, -413, -838, -838, -838, -838, -104, - -838, -396, -381, -838, 12, -838, 0, -439, -838, -838, - -838, -560, 144, -838, -838, -838, -557, -563, -239, -352, - -614, -838, -376, -624, -837, -838, -434, -838, -838, -444, - -443, -838, -838, 55, -736, -370, -838, -151, -838, -406, - -838, -146, -838, -838, -838, -838, -144, -838, -838, -838, - -838, -838, -838, -838, -838, 90, -838, -838, 2, -838, - -71, -296, -379, -838, -838, -838, -305, -314, -310, -838, - -838, -319, -309, -321, -304, -303, -838, -323, -302, -838, - -405, -552 + -878, -557, -878, -878, -878, -878, -878, -878, -878, -878, + -878, -878, -431, -878, -403, -397, -489, -409, -275, -279, + -272, -276, -270, -277, -878, -494, -878, -497, -878, -517, + -548, 9, -878, -878, -878, 5, -399, -878, -878, 33, + 35, 34, -878, -878, -417, -878, -878, -878, -878, -105, + -878, -400, -381, -878, 12, -878, 0, -430, -878, -878, + -878, -570, 140, -878, -878, -878, -564, -567, -241, -355, + -643, -878, -380, -625, -877, -878, -441, -878, -878, -448, + -447, -878, -878, 51, -740, -374, -878, -155, -878, -410, + -878, -150, -878, -878, -878, -878, -143, -878, -878, -878, + -878, -878, -878, -878, -878, 82, -878, -878, 2, -878, + -82, -232, -385, -878, -878, -878, -315, -312, -323, -878, + -878, -309, -308, -326, -319, -322, -878, -306, -328, -878, + -398, -551 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 535, 536, 537, 803, 538, 539, 540, 541, 542, - 543, 544, 625, 546, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 626, 861, 627, 786, 628, - 716, 629, 393, 656, 513, 630, 395, 396, 397, 442, - 443, 444, 398, 399, 400, 401, 402, 403, 492, 493, - 404, 405, 406, 407, 547, 495, 604, 498, 455, 456, - 549, 410, 411, 412, 584, 488, 582, 583, 726, 727, - 654, 798, 633, 634, 635, 636, 637, 758, 897, 933, - 925, 926, 927, 934, 638, 639, 640, 641, 928, 900, - 642, 643, 929, 948, 644, 645, 646, 864, 762, 866, - 904, 923, 924, 647, 413, 414, 415, 439, 648, 485, - 486, 465, 466, 810, 811, 417, 689, 690, 694, 418, - 419, 700, 701, 708, 709, 712, 420, 718, 719, 421, - 467, 468 + 0, 539, 540, 541, 807, 542, 543, 544, 545, 546, + 547, 548, 629, 550, 596, 597, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 630, 865, 631, 790, 632, + 720, 633, 397, 660, 517, 634, 399, 400, 401, 446, + 447, 448, 402, 403, 404, 405, 406, 407, 496, 497, + 408, 409, 410, 411, 551, 499, 608, 502, 459, 460, + 553, 414, 415, 416, 588, 492, 586, 587, 730, 731, + 658, 802, 637, 638, 639, 640, 641, 762, 901, 937, + 929, 930, 931, 938, 642, 643, 644, 645, 932, 904, + 646, 647, 933, 952, 648, 649, 650, 868, 766, 870, + 908, 927, 928, 651, 417, 418, 419, 443, 652, 489, + 490, 469, 470, 814, 815, 421, 693, 694, 698, 422, + 423, 704, 705, 712, 713, 716, 424, 722, 723, 425, + 471, 472 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1672,196 +1677,103 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 409, 445, 416, 460, 603, 683, 394, 662, 460, 653, - 509, 392, 408, 717, 790, 459, 550, 707, 545, 729, - 461, 683, 863, 481, 452, 461, 693, 730, 677, 752, - 436, 678, 741, 742, 490, 674, 794, 808, 797, 684, - 721, 799, 677, 496, 671, 445, -699, 675, 556, 731, - 432, 497, -699, 605, 557, 577, 437, 422, 491, 578, - 591, 606, 679, 454, 452, 753, 649, 651, 743, 744, - 692, 809, 685, 686, 687, 688, 679, 423, 660, 661, - 452, 692, 433, 932, 692, 424, 663, 664, 496, 507, - 940, 496, 580, 692, 605, 650, 605, 425, 508, 800, - 932, 655, 737, 795, 738, 558, -35, 767, 665, 769, - 673, 559, 666, 756, 775, 776, 777, 778, 779, 780, - 781, 782, 783, 784, 739, 740, 591, 471, 473, 475, - 477, 479, 480, 483, 785, 564, 510, 591, 865, 511, - 591, 565, 512, 878, 745, 746, 572, 879, 586, 591, - 681, 653, 573, 653, 587, 804, 653, 588, 668, 802, - 787, 870, 812, 589, 669, 787, 714, 729, 557, 591, - 806, 814, 816, 818, 821, 426, 680, 815, 817, 819, - 822, 873, 680, 874, 680, 875, 580, 680, 580, 680, - 447, 680, 680, 448, 823, 825, 680, 828, 831, 452, - 824, 826, 833, 829, 832, 947, 905, 906, 834, 911, - 912, 913, 787, 787, 914, 815, 819, 822, 915, 916, - 826, 943, 880, 440, 829, 834, 881, 787, 787, 917, - 703, 704, 705, 706, 526, 460, 427, 729, 807, 790, - 337, 338, 339, 696, 697, 698, 699, 459, 849, 850, - 851, 852, 461, 428, 867, 429, 469, 438, 869, 470, - 580, 908, 472, 474, 476, 470, 470, 470, 478, 430, - 482, 470, 717, 470, 717, 658, 707, 707, 659, 691, - 683, 434, 470, 884, 693, 441, 838, 871, 872, 695, - 702, 710, 470, 470, 470, 435, 653, 449, 842, 843, - 844, 591, 591, 591, 591, 591, 591, 591, 591, 591, - 591, 591, 591, 591, 591, 591, 591, 942, 713, 720, - 454, 470, 470, 790, 847, 848, 787, 692, 692, 788, - 839, 462, 787, 840, 580, 868, 839, 845, 846, 894, - 692, 464, 692, 734, 735, 736, 853, 854, 484, 489, - 494, 896, 499, 334, 898, 496, 505, 551, 506, 553, - 552, 554, 555, 560, 561, 747, 562, 657, 563, 566, - 567, 682, 568, 569, 570, 571, 653, 574, 575, 576, - 605, 667, 579, 591, 591, 672, 585, -34, 507, 711, - 750, 678, 760, 749, 898, 722, 591, 446, 591, 751, - 754, 757, 748, 759, 580, 453, 763, 764, 761, 408, - 725, 935, 765, 409, 768, 416, 409, 408, 930, 394, - 733, 409, 771, 416, 392, 408, 944, 463, 408, 770, - 772, 487, 653, 408, 773, 774, -36, 801, -29, 813, - 820, 446, 501, 835, 805, 446, 827, 830, 836, 862, - 787, 899, 877, 408, 548, 890, 909, 408, 918, 901, - 910, 453, 919, 920, 921, -585, 937, 931, 461, 936, - 938, 607, 941, 408, 950, 857, 949, 855, 503, 858, - 504, 856, 502, 732, 431, 837, 859, 895, 581, 860, - 902, 899, 939, 945, 500, 946, 903, 791, 922, 632, - 408, 882, 792, 458, 793, 887, 889, 723, 461, 892, - 885, 631, 883, 886, 0, 0, 0, 0, 0, 0, - 0, 0, 888, 0, 0, 0, 0, 891, 0, 0, - 0, 0, 893, 0, 0, 0, 0, 0, 0, 0, + 413, 449, 420, 464, 666, 398, 607, 721, 464, 396, + 687, 798, 412, 801, 711, 657, 803, 794, 697, 733, + 465, 463, 867, 513, 734, 465, 687, 549, 456, 554, + 745, 746, 725, 436, 485, 440, 681, 812, 494, 682, + 688, 735, 756, 681, 434, 449, -703, 936, 500, 511, + 675, 500, -703, 500, 944, 581, 501, 426, 512, 582, + 654, 441, 495, 458, 936, 437, 747, 748, 456, 595, + 683, 813, 696, 689, 690, 691, 692, 683, 757, 653, + 655, 667, 668, 696, 456, 678, 696, 664, 665, 427, + 609, 451, 584, 609, 452, 696, 804, 679, 610, 560, + 659, -35, 609, 669, 771, 561, 773, 670, 514, 799, + 562, 515, 568, 882, 516, 760, 563, 883, 569, 677, + 779, 780, 781, 782, 783, 784, 785, 786, 787, 788, + 576, 662, 442, 590, 663, 595, 577, 592, 672, 591, + 789, 869, 806, 593, 673, 816, 595, 818, 791, 595, + 428, 561, 808, 819, 820, 429, 877, 657, 595, 657, + 821, 685, 657, 822, 825, 827, 829, 733, 430, 823, + 826, 828, 830, 832, 684, 835, 810, 718, 595, 833, + 684, 836, 684, 749, 750, 684, 584, 684, 584, 684, + 684, 341, 342, 343, 684, 475, 477, 479, 481, 483, + 484, 487, 837, 456, 909, 951, 910, 915, 838, 916, + 791, 917, 791, 819, 918, 823, 919, 826, 920, 947, + 830, 741, 833, 742, 838, 791, 707, 708, 709, 710, + 530, 738, 739, 740, 884, 464, 912, 733, 885, 743, + 744, 431, 794, 700, 701, 702, 703, 811, 878, 432, + 879, 871, 465, 463, 433, 873, 853, 854, 855, 856, + 584, 473, 476, 438, 474, 474, 721, 478, 721, 480, + 474, 439, 474, 711, 711, 888, 697, 482, 486, 695, + 474, 474, 474, 699, 706, 687, 474, 474, 714, 791, + 874, 474, 946, 875, 876, 717, 444, 724, 474, 842, + 474, 791, 657, 843, 792, 445, 844, 846, 847, 848, + 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, + 595, 595, 595, 595, 595, 595, 794, 453, 791, 696, + 696, 872, 843, 458, 584, 898, 791, 921, 849, 850, + 857, 858, 696, 466, 696, 468, 851, 852, 900, 488, + 493, 902, 498, 503, 338, 509, 510, 500, 555, 556, + 557, 559, 558, 661, 686, 564, 565, 566, 567, 751, + 570, 729, 571, 572, 578, 573, 574, 575, 580, 579, + 671, 676, 657, -34, 609, 583, 589, 511, 682, 715, + 754, 902, 595, 595, 726, 755, 758, 761, 763, 764, + 753, 450, 767, 768, 584, 595, 752, 595, 939, 457, + 765, 769, 737, 412, 772, 775, 774, 413, -29, 420, + 413, 412, 398, 948, 934, 413, 396, 420, 776, 412, + 467, 777, 412, 778, -36, 491, 817, 412, 657, 824, + 831, 839, 805, 834, 840, 450, 505, 809, 866, 450, + 881, 903, 894, 791, 905, 913, 922, 412, 552, 914, + 923, 412, 924, 925, -589, 457, 935, 941, 465, 940, + 942, 611, 945, 860, 953, 954, 859, 412, 862, 864, + 506, 861, 507, 508, 435, 863, 736, 841, 899, 943, + 906, 903, 585, 949, 504, 950, 907, 795, 926, 462, + 727, 889, 796, 636, 412, 893, 887, 886, 465, 797, + 897, 892, 895, 0, 0, 635, 0, 0, 890, 891, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 676, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 724, 0, 581, 0, 581, 0, 0, 0, 0, 0, - 0, 0, 408, 0, 408, 0, 408, 0, 0, 0, + 0, 0, 0, 0, 728, 0, 585, 0, 585, 0, + 0, 0, 0, 0, 0, 0, 412, 0, 412, 0, + 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 409, 0, - 631, 0, 0, 0, 0, 0, 581, 0, 0, 0, - 408, 0, 0, 0, 0, 0, 0, 0, 408, 0, + 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 413, 0, 635, 0, 0, 0, 0, 0, + 585, 0, 0, 0, 412, 0, 0, 0, 0, 0, + 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 632, 0, - 0, 0, 632, 0, 0, 0, 0, 0, 0, 0, - 631, 0, 0, 0, 631, 0, 0, 0, 0, 0, + 0, 0, 636, 0, 0, 0, 636, 0, 0, 0, + 0, 0, 0, 0, 635, 0, 0, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 408, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 585, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 632, 632, 0, 632, 0, 416, 0, - 0, 0, 0, 0, 0, 631, 631, 0, 631, 0, + 0, 0, 0, 0, 0, 0, 0, 636, 636, 0, + 636, 0, 420, 0, 0, 0, 0, 0, 0, 635, + 635, 0, 635, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 636, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 632, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 631, 0, 0, 0, - 632, 0, 0, 0, 0, 0, 0, 632, 0, 0, - 0, 0, 631, 0, 0, 0, 0, 632, 0, 631, - 0, 632, 0, 0, 0, 0, 0, 632, 0, 631, - 0, 0, 0, 631, 0, 0, 0, 457, 0, 631, - 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 334, 0, 0, - 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, - 337, 338, 339, 340, 0, 0, 0, 0, 0, 0, - 0, 0, 341, 342, 343, 344, 345, 346, 347, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 348, 349, 350, 351, 352, 353, - 354, 0, 0, 0, 0, 0, 0, 0, 0, 355, - 0, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 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, - 0, 0, 514, 515, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 516, 517, 0, 334, 0, 607, 608, 0, 0, - 0, 0, 609, 518, 519, 520, 521, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 336, 337, 338, 339, - 340, 0, 0, 0, 522, 523, 524, 525, 526, 341, - 342, 343, 344, 345, 346, 347, 610, 611, 612, 613, - 0, 614, 615, 616, 617, 618, 619, 620, 621, 622, - 623, 348, 349, 350, 351, 352, 353, 354, 527, 528, - 529, 530, 531, 532, 533, 534, 355, 624, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 1, 2, 3, 4, 5, 6, + 635, 0, 0, 0, 636, 0, 0, 0, 0, 0, + 0, 636, 0, 0, 0, 0, 635, 0, 0, 0, + 0, 636, 0, 635, 0, 636, 0, 0, 0, 0, + 0, 636, 0, 635, 0, 0, 0, 635, 0, 0, + 0, 461, 0, 635, 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, @@ -1894,1217 +1806,21 @@ static const yytype_int16 yytable[] = 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, 0, 0, 514, - 515, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 516, 517, - 0, 334, 0, 607, 789, 0, 0, 0, 0, 609, - 518, 519, 520, 521, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 336, 337, 338, 339, 340, 0, 0, - 0, 522, 523, 524, 525, 526, 341, 342, 343, 344, - 345, 346, 347, 610, 611, 612, 613, 0, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 348, 349, - 350, 351, 352, 353, 354, 527, 528, 529, 530, 531, - 532, 533, 534, 355, 624, 356, 357, 358, 359, 360, + 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 338, 0, 0, 0, 0, + 0, 0, 0, 339, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 340, 341, 342, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, + 345, 346, 347, 348, 349, 350, 351, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 352, 353, 354, 355, 356, 357, 358, 0, + 0, 0, 0, 0, 0, 0, 0, 359, 0, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 391, 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, 0, 0, 514, 515, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 516, 517, 0, 334, 0, - 607, 0, 0, 0, 0, 0, 609, 518, 519, 520, - 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 336, 337, 338, 339, 340, 0, 0, 0, 522, 523, - 524, 525, 526, 341, 342, 343, 344, 345, 346, 347, - 610, 611, 612, 613, 0, 614, 615, 616, 617, 618, - 619, 620, 621, 622, 623, 348, 349, 350, 351, 352, - 353, 354, 527, 528, 529, 530, 531, 532, 533, 534, - 355, 624, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 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, 0, 0, 514, 515, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 516, 517, 0, 334, 0, 499, 0, 0, - 0, 0, 0, 609, 518, 519, 520, 521, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 336, 337, 338, - 339, 340, 0, 0, 0, 522, 523, 524, 525, 526, - 341, 342, 343, 344, 345, 346, 347, 610, 611, 612, - 613, 0, 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 348, 349, 350, 351, 352, 353, 354, 527, - 528, 529, 530, 531, 532, 533, 534, 355, 624, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 390, 391, 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, 0, 0, - 514, 515, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, - 517, 0, 334, 0, 0, 0, 0, 0, 0, 0, - 609, 518, 519, 520, 521, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 336, 337, 338, 339, 340, 0, - 0, 0, 522, 523, 524, 525, 526, 341, 342, 343, - 344, 345, 346, 347, 610, 611, 612, 613, 0, 614, - 615, 616, 617, 618, 619, 620, 621, 622, 623, 348, - 349, 350, 351, 352, 353, 354, 527, 528, 529, 530, - 531, 532, 533, 534, 355, 624, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, 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, 0, 0, 514, 515, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 516, 517, 0, 334, - 0, 0, 0, 0, 0, 0, 0, 609, 518, 519, - 520, 521, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 336, 337, 338, 339, 340, 0, 0, 0, 522, - 523, 524, 525, 526, 341, 342, 343, 344, 345, 346, - 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 348, 349, 350, 351, - 352, 353, 354, 527, 528, 529, 530, 531, 532, 533, - 534, 355, 0, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 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, 0, - 0, 0, 324, 325, 326, 327, 328, 329, 330, 331, - 332, 333, 0, 0, 514, 515, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 516, 517, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 518, 519, 520, 521, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 336, 337, - 338, 339, 0, 0, 0, 0, 522, 523, 524, 525, - 526, 341, 342, 343, 344, 345, 346, 347, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 348, 349, 350, 351, 352, 353, 354, - 527, 528, 529, 530, 531, 532, 533, 534, 355, 0, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 334, 0, 0, 0, 0, 0, 0, - 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 336, 337, 338, 339, 340, - 0, 0, 0, 0, 0, 0, 0, 0, 341, 342, - 343, 344, 345, 346, 347, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 348, 349, 350, 351, 352, 353, 354, 0, 0, 0, - 0, 0, 0, 0, 0, 355, 0, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 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, 0, 0, 0, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 333, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 336, 337, 338, 339, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 341, 342, 343, 344, 345, - 346, 347, 610, 0, 0, 613, 0, 614, 615, 0, - 0, 618, 0, 0, 0, 0, 0, 348, 349, 350, - 351, 352, 353, 354, 0, 0, 0, 0, 0, 0, - 0, 0, 355, 0, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, - 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, - 0, 0, 0, 324, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 450, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 336, - 337, 338, 339, 0, 0, 0, 0, 0, 0, 0, - 0, 451, 341, 342, 343, 344, 345, 346, 347, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 348, 349, 350, 351, 352, 353, - 354, 0, 0, 0, 0, 0, 0, 0, 0, 355, - 0, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 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, 0, 0, 0, - 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 334, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 336, 337, 338, 339, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, - 342, 343, 344, 345, 346, 347, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 348, 349, 350, 351, 352, 353, 354, 0, 0, - 0, 0, 0, 0, 0, 0, 355, 0, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, - 388, 389, 390, 391, 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, 0, 0, 0, 324, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 728, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 336, 337, 338, 339, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 341, 342, 343, 344, - 345, 346, 347, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 348, 349, - 350, 351, 352, 353, 354, 0, 0, 0, 0, 0, - 0, 0, 0, 355, 0, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 391, 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, 0, 0, 0, 324, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 841, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 336, 337, 338, 339, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 341, 342, 343, 344, 345, 346, 347, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 348, 349, 350, 351, 352, - 353, 354, 0, 0, 0, 0, 0, 0, 0, 0, - 355, 0, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 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, 0, 0, - 0, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 333, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 876, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 336, 337, 338, - 339, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 341, 342, 343, 344, 345, 346, 347, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 348, 349, 350, 351, 352, 353, 354, 0, - 0, 0, 0, 0, 0, 0, 0, 355, 0, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 390, 391, 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, 0, 0, 0, 324, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 336, 337, 338, 339, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 341, 342, 343, - 344, 345, 346, 347, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, - 349, 350, 351, 352, 353, 354, 0, 0, 0, 0, - 0, 0, 0, 0, 355, 0, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, 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, 0, 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, 0, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 331, 332, 333, 0, 0, 514, 515, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 516, 517, 0, 0, 0, - 652, 796, 0, 0, 0, 0, 0, 518, 519, 520, - 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 522, 523, - 524, 525, 526, 341, 0, 0, 0, 0, 346, 347, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 527, 528, 529, 530, 531, 532, 533, 534, - 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 369, 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, 0, 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, 0, 0, 0, 0, 0, - 0, 327, 0, 0, 0, 331, 332, 333, 0, 0, - 514, 515, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, - 517, 0, 0, 0, 652, 907, 0, 0, 0, 0, - 0, 518, 519, 520, 521, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 522, 523, 524, 525, 526, 341, 0, 0, - 0, 0, 346, 347, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 527, 528, 529, 530, - 531, 532, 533, 534, 0, 0, 356, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, - 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, 0, 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, 0, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 331, - 332, 333, 0, 0, 514, 515, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 516, 517, 0, 0, 590, 0, 0, - 0, 0, 0, 0, 0, 518, 519, 520, 521, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 522, 523, 524, 525, - 526, 341, 0, 0, 0, 0, 346, 347, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 527, 528, 529, 530, 531, 532, 533, 534, 0, 0, - 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 369, 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, 0, - 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, 0, 0, 0, 0, 0, 0, 327, - 0, 0, 0, 331, 332, 333, 0, 0, 514, 515, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 516, 517, 0, - 0, 0, 652, 0, 0, 0, 0, 0, 0, 518, - 519, 520, 521, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 522, 523, 524, 525, 526, 341, 0, 0, 0, 0, - 346, 347, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 527, 528, 529, 530, 531, 532, - 533, 534, 0, 0, 356, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 369, 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, 0, 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, 0, 0, 0, - 0, 0, 0, 327, 0, 0, 0, 331, 332, 333, - 0, 0, 514, 515, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 516, 517, 0, 0, 755, 0, 0, 0, 0, - 0, 0, 0, 518, 519, 520, 521, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 522, 523, 524, 525, 526, 341, - 0, 0, 0, 0, 346, 347, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 527, 528, - 529, 530, 531, 532, 533, 534, 0, 0, 356, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 369, 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, 0, 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, 0, 0, 0, 0, 0, 0, 327, 0, 0, - 0, 331, 332, 333, 0, 0, 514, 515, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 516, 517, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 766, 518, 519, 520, - 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 522, 523, - 524, 525, 526, 341, 0, 0, 0, 0, 346, 347, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 527, 528, 529, 530, 531, 532, 533, 534, - 0, 0, 356, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 369, 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, 0, 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, 0, 0, 0, 0, 0, - 0, 327, 0, 0, 0, 331, 332, 333, 0, 0, - 514, 515, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, - 517, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 518, 519, 520, 521, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 522, 523, 524, 525, 526, 341, 0, 0, - 0, 0, 346, 347, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 527, 528, 529, 530, - 531, 532, 533, 534, 0, 0, 356, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 369, - 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, 0, 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, 0, - 0, 0, 0, 0, 0, 327, 0, 0, 0, 331, - 332, 333, 0, 0, 514, 515, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 516, 517, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 518, 519, 520, 521, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 522, 523, 524, 525, - 526, 341, 0, 0, 0, 0, 346, 670, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 527, 528, 529, 530, 531, 532, 533, 534, 0, 0, - 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 369, 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, 0, - 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, 0, 0, 0, 0, 0, 0, 327, - 0, 0, 0, 331, 332, 333, 0, 0, 514, 515, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 516, 517, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 518, - 519, 520, 521, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 522, 523, 524, 525, 715, 341, 0, 0, 0, 0, - 346, 347, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 527, 528, 529, 530, 531, 532, - 533, 534, 0, 0, 356, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 369, 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, 0, 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, 0, 0, 0, - 0, 0, 0, 327, 0, 0, 0, 331, 332, 333, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, - 0, 0, 0, 0, 346, 347, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 356 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 397, 0, 416, 496, 557, 0, 517, 421, 508, - 449, 0, 0, 573, 638, 416, 455, 567, 454, 582, - 416, 573, 758, 428, 405, 421, 562, 584, 357, 345, - 368, 360, 340, 341, 394, 365, 650, 357, 652, 357, - 576, 655, 357, 360, 543, 441, 359, 377, 359, 585, - 362, 368, 365, 360, 365, 361, 394, 358, 418, 365, - 496, 368, 391, 376, 445, 381, 505, 506, 376, 377, - 562, 391, 390, 391, 392, 393, 391, 358, 514, 515, - 461, 573, 394, 920, 576, 358, 338, 339, 360, 358, - 927, 360, 488, 585, 360, 367, 360, 358, 367, 656, - 937, 367, 370, 367, 372, 359, 358, 617, 360, 619, - 546, 365, 364, 605, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 336, 337, 562, 423, 424, 425, - 426, 427, 428, 429, 367, 359, 362, 573, 762, 365, - 576, 365, 368, 361, 342, 343, 359, 365, 359, 585, - 555, 650, 365, 652, 365, 665, 655, 359, 359, 359, - 365, 366, 359, 365, 365, 365, 571, 730, 365, 605, - 669, 359, 359, 359, 359, 358, 555, 365, 365, 365, - 365, 795, 561, 363, 563, 365, 582, 566, 584, 568, - 365, 570, 571, 368, 359, 359, 575, 359, 359, 580, - 365, 365, 359, 365, 365, 941, 359, 359, 365, 359, - 359, 359, 365, 365, 359, 365, 365, 365, 359, 359, - 365, 359, 361, 359, 365, 365, 365, 365, 365, 366, - 390, 391, 392, 393, 394, 648, 358, 800, 674, 863, - 383, 384, 385, 390, 391, 392, 393, 648, 741, 742, - 743, 744, 648, 358, 764, 358, 391, 368, 768, 394, - 656, 875, 391, 391, 391, 394, 394, 394, 391, 360, - 391, 394, 832, 394, 834, 365, 826, 827, 368, 391, - 832, 358, 394, 819, 820, 365, 725, 786, 787, 391, - 391, 391, 394, 394, 394, 358, 795, 394, 734, 735, - 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, - 746, 747, 748, 749, 750, 751, 752, 931, 391, 391, - 376, 394, 394, 947, 739, 740, 365, 819, 820, 368, - 365, 368, 365, 368, 730, 368, 365, 737, 738, 368, - 832, 394, 834, 373, 374, 375, 745, 746, 394, 362, - 394, 861, 362, 360, 864, 360, 394, 359, 394, 368, - 394, 367, 365, 367, 365, 380, 365, 394, 365, 365, - 365, 394, 365, 365, 365, 365, 875, 359, 365, 358, - 360, 359, 368, 819, 820, 358, 367, 358, 358, 357, - 344, 360, 368, 378, 904, 361, 832, 397, 834, 346, - 361, 363, 379, 358, 800, 405, 358, 358, 368, 397, - 394, 921, 368, 413, 358, 413, 416, 405, 917, 413, - 394, 421, 368, 421, 413, 413, 936, 421, 416, 366, - 368, 431, 931, 421, 368, 368, 358, 394, 359, 367, - 365, 441, 440, 359, 394, 445, 365, 365, 359, 361, - 365, 864, 361, 441, 454, 357, 357, 445, 363, 402, - 391, 461, 394, 359, 358, 362, 359, 367, 864, 368, - 406, 362, 362, 461, 363, 749, 368, 747, 445, 750, - 445, 748, 441, 587, 340, 724, 751, 839, 488, 752, - 866, 904, 926, 937, 439, 938, 866, 648, 904, 499, - 488, 815, 648, 413, 648, 824, 827, 578, 904, 832, - 820, 499, 817, 822, -1, -1, -1, -1, -1, -1, - -1, -1, 826, -1, -1, -1, -1, 830, -1, -1, - -1, -1, 834, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 551, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 580, -1, 582, -1, 584, -1, -1, -1, -1, -1, - -1, -1, 580, -1, 582, -1, 584, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 638, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 648, -1, - 638, -1, -1, -1, -1, -1, 656, -1, -1, -1, - 648, -1, -1, -1, -1, -1, -1, -1, 656, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 730, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 730, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 758, -1, - -1, -1, 762, -1, -1, -1, -1, -1, -1, -1, - 758, -1, -1, -1, 762, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 800, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 800, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 863, 864, -1, 866, -1, 866, -1, - -1, -1, -1, -1, -1, 863, 864, -1, 866, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 904, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 904, -1, -1, -1, - 920, -1, -1, -1, -1, -1, -1, 927, -1, -1, - -1, -1, 920, -1, -1, -1, -1, 937, -1, 927, - -1, 941, -1, -1, -1, -1, -1, 947, -1, 937, - -1, -1, -1, 941, -1, -1, -1, 0, -1, 947, - 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, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 360, -1, -1, - -1, -1, -1, -1, -1, 368, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, - 383, 384, 385, 386, -1, -1, -1, -1, -1, -1, - -1, -1, 395, 396, 397, 398, 399, 400, 401, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 417, 418, 419, 420, 421, 422, - 423, -1, -1, -1, -1, -1, -1, -1, -1, 432, - -1, 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, 3, 4, 5, + 391, 392, 393, 394, 395, 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, @@ -3138,113 +1854,20 @@ static const yytype_int16 yycheck[] = 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, - -1, -1, 338, 339, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 357, 358, -1, 360, -1, 362, 363, -1, -1, - -1, -1, 368, 369, 370, 371, 372, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 382, 383, 384, 385, - 386, -1, -1, -1, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - -1, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, - 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 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, -1, -1, 338, - 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 357, 358, - -1, 360, -1, 362, 363, -1, -1, -1, -1, 368, - 369, 370, 371, 372, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 382, 383, 384, 385, 386, -1, -1, - -1, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, -1, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, - 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 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, -1, -1, 338, 339, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 357, 358, -1, 360, -1, - 362, -1, -1, -1, -1, -1, 368, 369, 370, 371, - 372, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 382, 383, 384, 385, 386, -1, -1, -1, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, -1, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 3, 4, + 336, 337, 0, 0, 518, 519, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 520, 521, 0, 338, 0, 611, 612, + 0, 0, 0, 0, 613, 522, 523, 524, 525, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 340, 341, + 342, 343, 344, 0, 0, 0, 526, 527, 528, 529, + 530, 345, 346, 347, 348, 349, 350, 351, 614, 615, + 616, 617, 0, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 352, 353, 354, 355, 356, 357, 358, + 531, 532, 533, 534, 535, 536, 537, 538, 359, 628, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 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, @@ -3278,113 +1901,20 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 338, 339, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 357, 358, -1, 360, -1, 362, -1, -1, - -1, -1, -1, 368, 369, 370, 371, 372, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 382, 383, 384, - 385, 386, -1, -1, -1, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, -1, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 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, -1, -1, - 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 357, - 358, -1, 360, -1, -1, -1, -1, -1, -1, -1, - 368, 369, 370, 371, 372, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 382, 383, 384, 385, 386, -1, - -1, -1, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, -1, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 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, -1, -1, 338, 339, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 357, 358, -1, 360, - -1, -1, -1, -1, -1, -1, -1, 368, 369, 370, - 371, 372, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 382, 383, 384, 385, 386, -1, -1, -1, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, -1, 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, 3, + 335, 336, 337, 0, 0, 518, 519, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 520, 521, 0, 338, 0, 611, + 793, 0, 0, 0, 0, 613, 522, 523, 524, 525, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, + 341, 342, 343, 344, 0, 0, 0, 526, 527, 528, + 529, 530, 345, 346, 347, 348, 349, 350, 351, 614, + 615, 616, 617, 0, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 352, 353, 354, 355, 356, 357, + 358, 531, 532, 533, 534, 535, 536, 537, 538, 359, + 628, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 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, @@ -3416,115 +1946,22 @@ static const yytype_int16 yycheck[] = 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, -1, - -1, -1, 326, 327, 328, 329, 330, 331, 332, 333, - 334, 335, -1, -1, 338, 339, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 357, 358, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 369, 370, 371, 372, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 382, 383, - 384, 385, -1, -1, -1, -1, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, -1, - 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, 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, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 360, -1, -1, -1, -1, -1, -1, - -1, 368, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 382, 383, 384, 385, 386, - -1, -1, -1, -1, -1, -1, -1, -1, 395, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 417, 418, 419, 420, 421, 422, 423, -1, -1, -1, - -1, -1, -1, -1, -1, 432, -1, 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, 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, -1, -1, -1, 326, 327, 328, 329, - 330, 331, 332, 333, 334, 335, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 382, 383, 384, 385, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 395, 396, 397, 398, 399, - 400, 401, 402, -1, -1, 405, -1, 407, 408, -1, - -1, 411, -1, -1, -1, -1, -1, 417, 418, 419, - 420, 421, 422, 423, -1, -1, -1, -1, -1, -1, - -1, -1, 432, -1, 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, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 0, 0, 518, 519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 520, 521, 0, 338, 0, + 611, 0, 0, 0, 0, 0, 613, 522, 523, 524, + 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 340, 341, 342, 343, 344, 0, 0, 0, 526, 527, + 528, 529, 530, 345, 346, 347, 348, 349, 350, 351, + 614, 615, 616, 617, 0, 618, 619, 620, 621, 622, + 623, 624, 625, 626, 627, 352, 353, 354, 355, 356, + 357, 358, 531, 532, 533, 534, 535, 536, 537, 538, + 359, 628, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 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, @@ -3557,115 +1994,22 @@ static const yytype_int16 yycheck[] = 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, - -1, -1, -1, 326, 327, 328, 329, 330, 331, 332, - 333, 334, 335, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 368, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 382, - 383, 384, 385, -1, -1, -1, -1, -1, -1, -1, - -1, 394, 395, 396, 397, 398, 399, 400, 401, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 417, 418, 419, 420, 421, 422, - 423, -1, -1, -1, -1, -1, -1, -1, -1, 432, - -1, 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, 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, -1, -1, -1, - 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 360, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 382, 383, 384, 385, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 395, - 396, 397, 398, 399, 400, 401, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 417, 418, 419, 420, 421, 422, 423, -1, -1, - -1, -1, -1, -1, -1, -1, 432, -1, 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, 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, -1, -1, -1, 326, 327, 328, - 329, 330, 331, 332, 333, 334, 335, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 382, 383, 384, 385, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 395, 396, 397, 398, - 399, 400, 401, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 417, 418, - 419, 420, 421, 422, 423, -1, -1, -1, -1, -1, - -1, -1, -1, 432, -1, 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, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 0, 0, 518, 519, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 520, 521, 0, 338, + 0, 503, 0, 0, 0, 0, 0, 613, 522, 523, + 524, 525, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 340, 341, 342, 343, 344, 0, 0, 0, 526, + 527, 528, 529, 530, 345, 346, 347, 348, 349, 350, + 351, 614, 615, 616, 617, 0, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 627, 352, 353, 354, 355, + 356, 357, 358, 531, 532, 533, 534, 535, 536, 537, + 538, 359, 628, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 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, @@ -3697,68 +2041,163 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, 326, 327, 328, 329, 330, 331, - 332, 333, 334, 335, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 382, 383, 384, 385, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 395, 396, 397, 398, 399, 400, 401, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 417, 418, 419, 420, 421, - 422, 423, -1, -1, -1, -1, -1, -1, -1, -1, - 432, -1, 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, 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, -1, -1, - -1, 326, 327, 328, 329, 330, 331, 332, 333, 334, - 335, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 382, 383, 384, - 385, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 395, 396, 397, 398, 399, 400, 401, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 417, 418, 419, 420, 421, 422, 423, -1, - -1, -1, -1, -1, -1, -1, -1, 432, -1, 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, 3, 4, 5, 6, 7, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 0, 0, 518, 519, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 520, 521, 0, + 338, 0, 0, 0, 0, 0, 0, 0, 613, 522, + 523, 524, 525, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 340, 341, 342, 343, 344, 0, 0, 0, + 526, 527, 528, 529, 530, 345, 346, 347, 348, 349, + 350, 351, 614, 615, 616, 617, 0, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 352, 353, 354, + 355, 356, 357, 358, 531, 532, 533, 534, 535, 536, + 537, 538, 359, 628, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 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, 0, 0, 518, + 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 520, 521, + 0, 338, 0, 0, 0, 0, 0, 0, 0, 613, + 522, 523, 524, 525, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 340, 341, 342, 343, 344, 0, 0, + 0, 526, 527, 528, 529, 530, 345, 346, 347, 348, + 349, 350, 351, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 352, 353, + 354, 355, 356, 357, 358, 531, 532, 533, 534, 535, + 536, 537, 538, 359, 0, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 0, 0, 0, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 0, 0, + 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, + 521, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 522, 523, 524, 525, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 340, 341, 342, 343, 0, 0, + 0, 0, 526, 527, 528, 529, 530, 345, 346, 347, + 348, 349, 350, 351, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 352, + 353, 354, 355, 356, 357, 358, 531, 532, 533, 534, + 535, 536, 537, 538, 359, 0, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 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, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 338, 0, 0, 0, 0, 0, 0, + 0, 339, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 340, 341, 342, 343, 344, + 0, 0, 0, 0, 0, 0, 0, 0, 345, 346, + 347, 348, 349, 350, 351, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 352, 353, 354, 355, 356, 357, 358, 0, 0, 0, + 0, 0, 0, 0, 0, 359, 0, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 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, @@ -3790,28 +2229,1188 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, 326, 327, - 328, 329, 330, 331, 332, 333, 334, 335, -1, -1, + 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, + 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 340, 341, 342, 343, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 345, + 346, 347, 348, 349, 350, 351, 614, 0, 0, 617, + 0, 618, 619, 0, 0, 622, 0, 0, 0, 0, + 0, 352, 353, 354, 355, 356, 357, 358, 0, 0, + 0, 0, 0, 0, 0, 0, 359, 0, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 0, 0, + 0, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 454, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 340, 341, 342, + 343, 0, 0, 0, 0, 0, 0, 0, 0, 455, + 345, 346, 347, 348, 349, 350, 351, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 352, 353, 354, 355, 356, 357, 358, 0, + 0, 0, 0, 0, 0, 0, 0, 359, 0, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 0, + 0, 0, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 338, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 340, 341, + 342, 343, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 345, 346, 347, 348, 349, 350, 351, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 352, 353, 354, 355, 356, 357, 358, + 0, 0, 0, 0, 0, 0, 0, 0, 359, 0, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 0, 0, 0, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, + 341, 342, 343, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 345, 346, 347, 348, 349, 350, 351, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 352, 353, 354, 355, 356, 357, + 358, 0, 0, 0, 0, 0, 0, 0, 0, 359, + 0, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 0, 0, 0, 328, 329, 330, 331, 332, 333, + 334, 335, 336, 337, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 845, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 340, 341, 342, 343, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 345, 346, 347, 348, 349, 350, 351, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 352, 353, 354, 355, 356, + 357, 358, 0, 0, 0, 0, 0, 0, 0, 0, + 359, 0, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, + 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, + 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, + 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, + 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, + 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, + 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, + 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, + 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 0, 0, 0, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 880, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 340, 341, 342, 343, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 345, 346, 347, 348, 349, 350, + 351, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 352, 353, 354, 355, + 356, 357, 358, 0, 0, 0, 0, 0, 0, 0, + 0, 359, 0, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, + 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, + 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, + 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, + 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 0, 0, 0, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 340, 341, 342, 343, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 345, 346, 347, 348, 349, + 350, 351, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 352, 353, 354, + 355, 356, 357, 358, 0, 0, 0, 0, 0, 0, + 0, 0, 359, 0, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 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, 0, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 0, 0, 0, 0, 0, 0, 331, + 0, 0, 0, 335, 336, 337, 0, 0, 518, 519, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 520, 521, 0, + 0, 0, 656, 800, 0, 0, 0, 0, 0, 522, + 523, 524, 525, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 526, 527, 528, 529, 530, 345, 0, 0, 0, 0, + 350, 351, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 531, 532, 533, 534, 535, 536, + 537, 538, 0, 0, 360, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 373, 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, 0, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 0, 0, 0, 0, 0, 0, 331, 0, 0, + 0, 335, 336, 337, 0, 0, 518, 519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 520, 521, 0, 0, 0, + 656, 911, 0, 0, 0, 0, 0, 522, 523, 524, + 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 526, 527, + 528, 529, 530, 345, 0, 0, 0, 0, 350, 351, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 531, 532, 533, 534, 535, 536, 537, 538, + 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 373, 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, 0, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 0, + 0, 0, 0, 0, 0, 331, 0, 0, 0, 335, + 336, 337, 0, 0, 518, 519, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 520, 521, 0, 0, 594, 0, 0, + 0, 0, 0, 0, 0, 522, 523, 524, 525, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 526, 527, 528, 529, + 530, 345, 0, 0, 0, 0, 350, 351, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 531, 532, 533, 534, 535, 536, 537, 538, 0, 0, + 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 373, 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, 0, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, + 0, 0, 0, 331, 0, 0, 0, 335, 336, 337, + 0, 0, 518, 519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 520, 521, 0, 0, 0, 656, 0, 0, 0, + 0, 0, 0, 522, 523, 524, 525, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 526, 527, 528, 529, 530, 345, + 0, 0, 0, 0, 350, 351, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 531, 532, + 533, 534, 535, 536, 537, 538, 0, 0, 360, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 373, 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, 0, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, + 0, 331, 0, 0, 0, 335, 336, 337, 0, 0, + 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, + 521, 0, 0, 759, 0, 0, 0, 0, 0, 0, + 0, 522, 523, 524, 525, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 526, 527, 528, 529, 530, 345, 0, 0, + 0, 0, 350, 351, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 531, 532, 533, 534, + 535, 536, 537, 538, 0, 0, 360, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 373, + 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, 0, + 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 0, 0, 0, 0, 0, 0, 331, + 0, 0, 0, 335, 336, 337, 0, 0, 518, 519, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 520, 521, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 770, 522, + 523, 524, 525, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 526, 527, 528, 529, 530, 345, 0, 0, 0, 0, + 350, 351, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 531, 532, 533, 534, 535, 536, + 537, 538, 0, 0, 360, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 373, 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, 0, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 0, 0, 0, 0, 0, 0, 331, 0, 0, + 0, 335, 336, 337, 0, 0, 518, 519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 520, 521, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 522, 523, 524, + 525, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 526, 527, + 528, 529, 530, 345, 0, 0, 0, 0, 350, 351, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 531, 532, 533, 534, 535, 536, 537, 538, + 0, 0, 360, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 373, 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, 0, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 0, + 0, 0, 0, 0, 0, 331, 0, 0, 0, 335, + 336, 337, 0, 0, 518, 519, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 520, 521, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 522, 523, 524, 525, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 526, 527, 528, 529, + 530, 345, 0, 0, 0, 0, 350, 674, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 531, 532, 533, 534, 535, 536, 537, 538, 0, 0, + 360, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 373, 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, 0, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, + 0, 0, 0, 331, 0, 0, 0, 335, 336, 337, + 0, 0, 518, 519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 520, 521, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 522, 523, 524, 525, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 526, 527, 528, 529, 719, 345, + 0, 0, 0, 0, 350, 351, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 531, 532, + 533, 534, 535, 536, 537, 538, 0, 0, 360, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 373, 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, 0, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, + 0, 331, 0, 0, 0, 335, 336, 337, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 345, 0, 0, + 0, 0, 350, 351, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 360 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 401, 0, 420, 521, 0, 500, 577, 425, 0, + 561, 654, 0, 656, 571, 512, 659, 642, 566, 586, + 420, 420, 762, 453, 588, 425, 577, 458, 409, 459, + 344, 345, 580, 366, 432, 372, 361, 361, 398, 364, + 361, 589, 349, 361, 364, 445, 363, 924, 364, 362, + 547, 364, 369, 364, 931, 365, 372, 362, 371, 369, + 371, 398, 422, 380, 941, 398, 380, 381, 449, 500, + 395, 395, 566, 394, 395, 396, 397, 395, 385, 509, + 510, 342, 343, 577, 465, 369, 580, 518, 519, 362, + 364, 369, 492, 364, 372, 589, 660, 381, 372, 363, + 371, 362, 364, 364, 621, 369, 623, 368, 366, 371, + 363, 369, 363, 365, 372, 609, 369, 369, 369, 550, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 363, 369, 372, 363, 372, 566, 369, 363, 363, 369, + 371, 766, 363, 369, 369, 363, 577, 363, 369, 580, + 362, 369, 669, 369, 363, 362, 799, 654, 589, 656, + 369, 559, 659, 363, 363, 363, 363, 734, 362, 369, + 369, 369, 369, 363, 559, 363, 673, 575, 609, 369, + 565, 369, 567, 346, 347, 570, 586, 572, 588, 574, + 575, 387, 388, 389, 579, 427, 428, 429, 430, 431, + 432, 433, 363, 584, 363, 945, 363, 363, 369, 363, + 369, 363, 369, 369, 363, 369, 363, 369, 363, 363, + 369, 374, 369, 376, 369, 369, 394, 395, 396, 397, + 398, 377, 378, 379, 365, 652, 879, 804, 369, 340, + 341, 362, 867, 394, 395, 396, 397, 678, 367, 362, + 369, 768, 652, 652, 362, 772, 745, 746, 747, 748, + 660, 395, 395, 362, 398, 398, 836, 395, 838, 395, + 398, 362, 398, 830, 831, 823, 824, 395, 395, 395, + 398, 398, 398, 395, 395, 836, 398, 398, 395, 369, + 370, 398, 935, 790, 791, 395, 363, 395, 398, 729, + 398, 369, 799, 369, 372, 369, 372, 738, 739, 740, + 741, 742, 743, 744, 745, 746, 747, 748, 749, 750, + 751, 752, 753, 754, 755, 756, 951, 398, 369, 823, + 824, 372, 369, 380, 734, 372, 369, 370, 741, 742, + 749, 750, 836, 372, 838, 398, 743, 744, 865, 398, + 366, 868, 398, 366, 364, 398, 398, 364, 363, 398, + 372, 369, 371, 398, 398, 371, 369, 369, 369, 384, + 369, 398, 369, 369, 363, 369, 369, 369, 362, 369, + 363, 362, 879, 362, 364, 372, 371, 362, 364, 361, + 348, 908, 823, 824, 365, 350, 365, 367, 362, 372, + 382, 401, 362, 362, 804, 836, 383, 838, 925, 409, + 372, 372, 398, 401, 362, 372, 370, 417, 363, 417, + 420, 409, 417, 940, 921, 425, 417, 425, 372, 417, + 425, 372, 420, 372, 362, 435, 371, 425, 935, 369, + 369, 363, 398, 369, 363, 445, 444, 398, 365, 449, + 365, 868, 361, 369, 406, 361, 367, 445, 458, 395, + 398, 449, 363, 362, 366, 465, 371, 363, 868, 372, + 410, 366, 366, 752, 372, 367, 751, 465, 754, 756, + 445, 753, 449, 449, 344, 755, 591, 728, 843, 930, + 870, 908, 492, 941, 443, 942, 870, 652, 908, 417, + 582, 824, 652, 503, 492, 831, 821, 819, 908, 652, + 838, 830, 834, -1, -1, 503, -1, -1, 826, 828, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 836, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 555, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 584, -1, 586, -1, 588, -1, + -1, -1, -1, -1, -1, -1, 584, -1, 586, -1, + 588, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 642, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 652, -1, 642, -1, -1, -1, -1, -1, + 660, -1, -1, -1, 652, -1, -1, -1, -1, -1, + -1, -1, 660, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 382, 383, 384, 385, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 395, 396, 397, - 398, 399, 400, 401, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 417, - 418, 419, 420, 421, 422, 423, -1, -1, -1, -1, - -1, -1, -1, -1, 432, -1, 434, 435, 436, 437, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 734, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 734, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 762, -1, -1, -1, 766, -1, -1, -1, + -1, -1, -1, -1, 762, -1, -1, -1, 766, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 804, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 804, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -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, 868, -1, + 870, -1, 870, -1, -1, -1, -1, -1, -1, 867, + 868, -1, 870, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 908, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 908, -1, -1, -1, 924, -1, -1, -1, -1, -1, + -1, 931, -1, -1, -1, -1, 924, -1, -1, -1, + -1, 941, -1, 931, -1, 945, -1, -1, -1, -1, + -1, 951, -1, 941, -1, -1, -1, 945, -1, -1, + -1, 0, -1, 951, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 364, -1, -1, -1, -1, + -1, -1, -1, 372, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 386, 387, 388, + 389, 390, -1, -1, -1, -1, -1, -1, -1, -1, + 399, 400, 401, 402, 403, 404, 405, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 421, 422, 423, 424, 425, 426, 427, -1, + -1, -1, -1, -1, -1, -1, -1, 436, -1, 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, 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, -1, -1, 342, 343, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 361, 362, -1, 364, -1, 366, 367, + -1, -1, -1, -1, 372, 373, 374, 375, 376, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, + 388, 389, 390, -1, -1, -1, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, -1, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 4, 5, 6, 7, 8, 9, 10, 11, + 468, 469, 470, 471, 472, 473, 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, -1, -1, 342, 343, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 361, 362, -1, 364, -1, 366, + 367, -1, -1, -1, -1, 372, 373, 374, 375, 376, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 386, + 387, 388, 389, 390, -1, -1, -1, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, -1, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, + 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 470, 471, 472, 473, 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, -1, -1, 342, 343, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 361, 362, -1, 364, -1, + 366, -1, -1, -1, -1, -1, 372, 373, 374, 375, + 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 386, 387, 388, 389, 390, -1, -1, -1, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, -1, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, + 466, 467, 468, 469, 470, 471, 472, 473, 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, -1, -1, 342, 343, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 361, 362, -1, 364, + -1, 366, -1, -1, -1, -1, -1, 372, 373, 374, + 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 386, 387, 388, 389, 390, -1, -1, -1, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, -1, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 471, 472, 473, 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, -1, -1, 342, 343, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 361, 362, -1, + 364, -1, -1, -1, -1, -1, -1, -1, 372, 373, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 386, 387, 388, 389, 390, -1, -1, -1, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, -1, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, + 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, + 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, -1, -1, 342, + 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 361, 362, + -1, 364, -1, -1, -1, -1, -1, -1, -1, 372, + 373, 374, 375, 376, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 386, 387, 388, 389, 390, -1, -1, + -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, -1, 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, 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, -1, - -1, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 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, @@ -3821,7 +3420,7 @@ static const yytype_int16 yycheck[] = 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, -1, 170, 171, + 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, @@ -3837,25 +3436,169 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, -1, -1, 329, -1, -1, - -1, 333, 334, 335, -1, -1, 338, 339, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 357, 358, -1, -1, -1, - 362, 363, -1, -1, -1, -1, -1, 369, 370, 371, - 372, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 390, 391, - 392, 393, 394, 395, -1, -1, -1, -1, 400, 401, + 322, 323, 324, 325, 326, -1, -1, -1, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, -1, -1, + 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, + 362, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 373, 374, 375, 376, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 386, 387, 388, 389, -1, -1, + -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, -1, 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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 424, 425, 426, 427, 428, 429, 430, 431, - -1, -1, 434, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 447, 4, 5, 6, 7, + -1, -1, -1, 364, -1, -1, -1, -1, -1, -1, + -1, 372, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 386, 387, 388, 389, 390, + -1, -1, -1, -1, -1, -1, -1, -1, 399, 400, + 401, 402, 403, 404, 405, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 421, 422, 423, 424, 425, 426, 427, -1, -1, -1, + -1, -1, -1, -1, -1, 436, -1, 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, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, + 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, + 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, + 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, + 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, + 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 386, 387, 388, 389, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 399, + 400, 401, 402, 403, 404, 405, 406, -1, -1, 409, + -1, 411, 412, -1, -1, 415, -1, -1, -1, -1, + -1, 421, 422, 423, 424, 425, 426, 427, -1, -1, + -1, -1, -1, -1, -1, -1, 436, -1, 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, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, + 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, + 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, + 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, + 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, + 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, + 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, + 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, + 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, + 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, + 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, -1, + -1, 330, 331, 332, 333, 334, 335, 336, 337, 338, + 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 372, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 386, 387, 388, + 389, -1, -1, -1, -1, -1, -1, -1, -1, 398, + 399, 400, 401, 402, 403, 404, 405, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 421, 422, 423, 424, 425, 426, 427, -1, + -1, -1, -1, -1, -1, -1, -1, 436, -1, 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, 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, -1, -1, 63, 64, 65, 66, 67, + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, @@ -3866,7 +3609,7 @@ static const yytype_int16 yycheck[] = 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, -1, 170, 171, 172, 173, 174, 175, 176, 177, + 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, @@ -3881,19 +3624,210 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, -1, - -1, 329, -1, -1, -1, 333, 334, 335, -1, -1, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + -1, -1, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 357, - 358, -1, -1, -1, 362, 363, -1, -1, -1, -1, - -1, 369, 370, 371, 372, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 390, 391, 392, 393, 394, 395, -1, -1, - -1, -1, 400, 401, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 364, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 424, 425, 426, 427, - 428, 429, 430, 431, -1, -1, 434, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 447, + -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, + 388, 389, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 399, 400, 401, 402, 403, 404, 405, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 421, 422, 423, 424, 425, 426, 427, + -1, -1, -1, -1, -1, -1, -1, -1, 436, -1, + 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, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, + 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, + 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, + 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, + 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, + 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, + 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, + 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, + 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, + 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, + 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, -1, -1, 330, 331, 332, 333, 334, 335, 336, + 337, 338, 339, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 367, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 386, + 387, 388, 389, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 399, 400, 401, 402, 403, 404, 405, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 421, 422, 423, 424, 425, 426, + 427, -1, -1, -1, -1, -1, -1, -1, -1, 436, + -1, 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, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, + 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, + 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, + 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, + 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, + 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, + 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, + 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, + 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, + 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, + 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, + 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, + 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, + 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, + 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, -1, -1, 330, 331, 332, 333, 334, 335, + 336, 337, 338, 339, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 367, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 386, 387, 388, 389, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 399, 400, 401, 402, 403, 404, 405, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 421, 422, 423, 424, 425, + 426, 427, -1, -1, -1, -1, -1, -1, -1, -1, + 436, -1, 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, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, + 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, + 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, + 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, + 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, + 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, + 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, + 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, -1, -1, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 367, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 386, 387, 388, 389, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 399, 400, 401, 402, 403, 404, + 405, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 421, 422, 423, 424, + 425, 426, 427, -1, -1, -1, -1, -1, -1, -1, + -1, 436, -1, 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, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, + 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, + 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, + 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, + 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, + 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, + 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, + 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, + 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, + 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, + 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, + 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, -1, -1, 330, 331, 332, 333, + 334, 335, 336, 337, 338, 339, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 386, 387, 388, 389, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 399, 400, 401, 402, 403, + 404, 405, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 421, 422, 423, + 424, 425, 426, 427, -1, -1, -1, -1, -1, -1, + -1, -1, 436, -1, 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, 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, @@ -3910,7 +3844,7 @@ static const yytype_int16 yycheck[] = 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, -1, 170, 171, 172, 173, + 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, 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, @@ -3925,64 +3859,20 @@ static const yytype_int16 yycheck[] = 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, -1, - -1, -1, -1, -1, -1, 329, -1, -1, -1, 333, - 334, 335, -1, -1, 338, 339, -1, -1, -1, -1, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, -1, -1, -1, -1, -1, 333, + -1, -1, -1, 337, 338, 339, -1, -1, 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 357, 358, -1, -1, 361, -1, -1, - -1, -1, -1, -1, -1, 369, 370, 371, 372, -1, + -1, -1, -1, -1, -1, -1, -1, 361, 362, -1, + -1, -1, 366, 367, -1, -1, -1, -1, -1, 373, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 390, 391, 392, 393, - 394, 395, -1, -1, -1, -1, 400, 401, -1, -1, + 394, 395, 396, 397, 398, 399, -1, -1, -1, -1, + 404, 405, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 424, 425, 426, 427, 428, 429, 430, 431, -1, -1, - 434, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 447, 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, -1, - 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, -1, -1, -1, -1, -1, -1, 329, - -1, -1, -1, 333, 334, 335, -1, -1, 338, 339, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 357, 358, -1, - -1, -1, 362, -1, -1, -1, -1, -1, -1, 369, - 370, 371, 372, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 390, 391, 392, 393, 394, 395, -1, -1, -1, -1, - 400, 401, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 424, 425, 426, 427, 428, 429, - 430, 431, -1, -1, 434, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 447, 4, 5, + -1, -1, -1, -1, 428, 429, 430, 431, 432, 433, + 434, 435, -1, -1, 438, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 451, 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, @@ -3999,7 +3889,7 @@ static const yytype_int16 yycheck[] = 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, -1, 170, 171, 172, 173, 174, 175, + 166, 167, 168, 169, 170, 171, 172, -1, 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, @@ -4014,64 +3904,20 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, - -1, -1, -1, 329, -1, -1, -1, 333, 334, 335, - -1, -1, 338, 339, -1, -1, -1, -1, -1, -1, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, -1, -1, -1, -1, -1, 333, -1, -1, + -1, 337, 338, 339, -1, -1, 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 357, 358, -1, -1, 361, -1, -1, -1, -1, - -1, -1, -1, 369, 370, 371, 372, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 390, 391, 392, 393, 394, 395, - -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 424, 425, - 426, 427, 428, 429, 430, 431, -1, -1, 434, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 447, 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, -1, 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, -1, -1, -1, -1, -1, -1, 329, -1, -1, - -1, 333, 334, 335, -1, -1, 338, 339, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 357, 358, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 368, 369, 370, 371, - 372, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 390, 391, - 392, 393, 394, 395, -1, -1, -1, -1, 400, 401, + -1, -1, -1, -1, -1, 361, 362, -1, -1, -1, + 366, 367, -1, -1, -1, -1, -1, 373, 374, 375, + 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 394, 395, + 396, 397, 398, 399, -1, -1, -1, -1, 404, 405, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 424, 425, 426, 427, 428, 429, 430, 431, - -1, -1, 434, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 447, 4, 5, 6, 7, + -1, -1, 428, 429, 430, 431, 432, 433, 434, 435, + -1, -1, 438, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 451, 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, @@ -4088,7 +3934,7 @@ static const yytype_int16 yycheck[] = 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, -1, 170, 171, 172, 173, 174, 175, 176, 177, + 168, 169, 170, 171, 172, -1, 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, @@ -4103,19 +3949,109 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, -1, - -1, 329, -1, -1, -1, 333, 334, 335, -1, -1, - 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 357, - 358, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 369, 370, 371, 372, -1, -1, -1, -1, -1, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + -1, -1, -1, -1, -1, 333, -1, -1, -1, 337, + 338, 339, -1, -1, 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 390, 391, 392, 393, 394, 395, -1, -1, - -1, -1, 400, 401, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 361, 362, -1, -1, 365, -1, -1, + -1, -1, -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 424, 425, 426, 427, - 428, 429, 430, 431, -1, -1, 434, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 447, + -1, -1, -1, -1, -1, -1, 394, 395, 396, 397, + 398, 399, -1, -1, -1, -1, 404, 405, -1, -1, + -1, -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, 434, 435, -1, -1, + 438, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 451, 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, -1, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, + -1, -1, -1, 333, -1, -1, -1, 337, 338, 339, + -1, -1, 342, 343, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 361, 362, -1, -1, -1, 366, -1, -1, -1, + -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, + -1, -1, -1, -1, 404, 405, -1, -1, -1, -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, 434, 435, -1, -1, 438, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 451, 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, -1, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, + -1, 333, -1, -1, -1, 337, 338, 339, -1, -1, + 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 361, + 362, -1, -1, 365, -1, -1, -1, -1, -1, -1, + -1, 373, 374, 375, 376, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 394, 395, 396, 397, 398, 399, -1, -1, + -1, -1, 404, 405, -1, -1, -1, -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, 434, 435, -1, -1, 438, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 451, 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, @@ -4132,7 +4068,7 @@ static const yytype_int16 yycheck[] = 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, -1, 170, 171, 172, 173, + 164, 165, 166, 167, 168, 169, 170, 171, 172, -1, 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, @@ -4147,64 +4083,20 @@ static const yytype_int16 yycheck[] = 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, -1, - -1, -1, -1, -1, -1, 329, -1, -1, -1, 333, - 334, 335, -1, -1, 338, 339, -1, -1, -1, -1, + 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, + 324, 325, 326, -1, -1, -1, -1, -1, -1, 333, + -1, -1, -1, 337, 338, 339, -1, -1, 342, 343, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 357, 358, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 369, 370, 371, 372, -1, + -1, -1, -1, -1, -1, -1, -1, 361, 362, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 372, 373, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 390, 391, 392, 393, - 394, 395, -1, -1, -1, -1, 400, 401, -1, -1, + 394, 395, 396, 397, 398, 399, -1, -1, -1, -1, + 404, 405, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 424, 425, 426, 427, 428, 429, 430, 431, -1, -1, - 434, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 447, 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, -1, - 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, -1, -1, -1, -1, -1, -1, 329, - -1, -1, -1, 333, 334, 335, -1, -1, 338, 339, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 357, 358, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 369, - 370, 371, 372, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 390, 391, 392, 393, 394, 395, -1, -1, -1, -1, - 400, 401, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 424, 425, 426, 427, 428, 429, - 430, 431, -1, -1, 434, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 447, 4, 5, + -1, -1, -1, -1, 428, 429, 430, 431, 432, 433, + 434, 435, -1, -1, 438, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 451, 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, @@ -4221,7 +4113,7 @@ static const yytype_int16 yycheck[] = 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, -1, 170, 171, 172, 173, 174, 175, + 166, 167, 168, 169, 170, 171, 172, -1, 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, @@ -4236,18 +4128,153 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, - -1, -1, -1, 329, -1, -1, -1, 333, 334, 335, + 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, + 326, -1, -1, -1, -1, -1, -1, 333, -1, -1, + -1, 337, 338, 339, -1, -1, 342, 343, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 361, 362, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, + 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 394, 395, + 396, 397, 398, 399, -1, -1, -1, -1, 404, 405, + -1, -1, -1, -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, 434, 435, + -1, -1, 438, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 451, 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, -1, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, + 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, + 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, + 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, + -1, -1, -1, -1, -1, 333, -1, -1, -1, 337, + 338, 339, -1, -1, 342, 343, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 361, 362, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 373, 374, 375, 376, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 394, 395, 396, 397, + 398, 399, -1, -1, -1, -1, 404, 405, -1, -1, + -1, -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, 434, 435, -1, -1, + 438, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 451, 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, -1, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, + 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, + 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, + -1, -1, -1, 333, -1, -1, -1, 337, 338, 339, + -1, -1, 342, 343, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 361, 362, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, + -1, -1, -1, -1, 404, 405, -1, -1, -1, -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, 434, 435, -1, -1, 438, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 451, 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, -1, 174, 175, 176, 177, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, + 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, + 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, + 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, + -1, 333, -1, -1, -1, 337, 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 395, - -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 399, -1, -1, + -1, -1, 404, 405, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 434 + -1, -1, -1, -1, -1, -1, 438 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -4287,145 +4314,145 @@ static const yytype_int16 yystos[] = 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, 360, 368, 382, 383, 384, 385, - 386, 395, 396, 397, 398, 399, 400, 401, 417, 418, - 419, 420, 421, 422, 423, 432, 434, 435, 436, 437, + 332, 333, 334, 335, 336, 337, 338, 339, 364, 372, + 386, 387, 388, 389, 390, 399, 400, 401, 402, 403, + 404, 405, 421, 422, 423, 424, 425, 426, 427, 436, 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, 501, 502, 505, 506, 507, 508, 512, 513, - 514, 515, 516, 517, 520, 521, 522, 523, 524, 526, - 531, 532, 533, 574, 575, 576, 578, 585, 589, 590, - 596, 599, 358, 358, 358, 358, 358, 358, 358, 358, - 360, 532, 362, 394, 358, 358, 368, 394, 368, 577, - 359, 365, 509, 510, 511, 521, 526, 365, 368, 394, - 368, 394, 522, 526, 376, 528, 529, 0, 575, 506, - 514, 521, 368, 505, 394, 581, 582, 600, 601, 391, - 394, 581, 391, 581, 391, 581, 391, 581, 391, 581, - 581, 600, 391, 581, 394, 579, 580, 526, 535, 362, - 394, 418, 518, 519, 394, 525, 360, 368, 527, 362, - 553, 578, 510, 509, 511, 394, 394, 358, 367, 527, - 362, 365, 368, 504, 338, 339, 357, 358, 369, 370, - 371, 372, 390, 391, 392, 393, 394, 424, 425, 426, - 427, 428, 429, 430, 431, 471, 472, 473, 475, 476, - 477, 478, 479, 480, 481, 482, 483, 524, 526, 530, - 527, 359, 394, 368, 367, 365, 359, 365, 359, 365, - 367, 365, 365, 365, 359, 365, 365, 365, 365, 365, - 365, 365, 359, 365, 359, 365, 358, 361, 365, 368, - 521, 526, 536, 537, 534, 367, 359, 365, 359, 365, - 361, 482, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 494, 495, 526, 360, 368, 362, 363, 368, - 402, 403, 404, 405, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 433, 482, 495, 497, 499, 501, - 505, 524, 526, 542, 543, 544, 545, 546, 554, 555, - 556, 557, 560, 561, 564, 565, 566, 573, 578, 527, - 367, 527, 362, 497, 540, 367, 503, 394, 365, 368, - 482, 482, 499, 338, 339, 360, 364, 359, 359, 365, - 401, 497, 358, 482, 365, 377, 578, 357, 360, 391, - 582, 600, 394, 601, 357, 390, 391, 392, 393, 586, - 587, 391, 495, 500, 588, 391, 390, 391, 392, 393, - 591, 592, 391, 390, 391, 392, 393, 471, 593, 594, - 391, 357, 595, 391, 600, 394, 500, 531, 597, 598, - 391, 500, 361, 580, 526, 394, 538, 539, 363, 537, - 536, 500, 519, 394, 373, 374, 375, 370, 372, 336, - 337, 340, 341, 376, 377, 342, 343, 380, 379, 378, - 344, 346, 345, 381, 361, 361, 495, 363, 547, 358, - 368, 368, 568, 358, 358, 368, 368, 499, 358, 499, - 366, 368, 368, 368, 368, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 367, 498, 365, 368, 363, - 543, 557, 561, 566, 540, 367, 363, 540, 541, 540, - 536, 394, 359, 474, 499, 394, 497, 482, 357, 391, - 583, 584, 359, 367, 359, 365, 359, 365, 359, 365, - 365, 359, 365, 359, 365, 359, 365, 365, 359, 365, - 365, 359, 365, 359, 365, 359, 359, 538, 527, 365, - 368, 363, 482, 482, 482, 484, 484, 485, 485, 486, - 486, 486, 486, 487, 487, 488, 489, 490, 491, 492, - 493, 496, 361, 554, 567, 543, 569, 499, 368, 499, - 366, 497, 497, 540, 363, 365, 363, 361, 361, 365, - 361, 365, 587, 586, 500, 588, 592, 591, 594, 593, - 357, 595, 597, 598, 368, 539, 499, 548, 499, 514, - 559, 402, 542, 555, 570, 359, 359, 363, 540, 357, - 391, 359, 359, 359, 359, 359, 359, 366, 363, 394, - 359, 358, 559, 571, 572, 550, 551, 552, 558, 562, - 497, 367, 544, 549, 553, 499, 368, 359, 406, 546, - 544, 362, 540, 359, 499, 549, 550, 554, 563, 368, - 363 + 468, 469, 470, 471, 472, 473, 505, 506, 509, 510, + 511, 512, 516, 517, 518, 519, 520, 521, 524, 525, + 526, 527, 528, 530, 535, 536, 537, 578, 579, 580, + 582, 589, 593, 594, 600, 603, 362, 362, 362, 362, + 362, 362, 362, 362, 364, 536, 366, 398, 362, 362, + 372, 398, 372, 581, 363, 369, 513, 514, 515, 525, + 530, 369, 372, 398, 372, 398, 526, 530, 380, 532, + 533, 0, 579, 510, 518, 525, 372, 509, 398, 585, + 586, 604, 605, 395, 398, 585, 395, 585, 395, 585, + 395, 585, 395, 585, 585, 604, 395, 585, 398, 583, + 584, 530, 539, 366, 398, 422, 522, 523, 398, 529, + 364, 372, 531, 366, 557, 582, 514, 513, 515, 398, + 398, 362, 371, 531, 366, 369, 372, 508, 342, 343, + 361, 362, 373, 374, 375, 376, 394, 395, 396, 397, + 398, 428, 429, 430, 431, 432, 433, 434, 435, 475, + 476, 477, 479, 480, 481, 482, 483, 484, 485, 486, + 487, 528, 530, 534, 531, 363, 398, 372, 371, 369, + 363, 369, 363, 369, 371, 369, 369, 369, 363, 369, + 369, 369, 369, 369, 369, 369, 363, 369, 363, 369, + 362, 365, 369, 372, 525, 530, 540, 541, 538, 371, + 363, 369, 363, 369, 365, 486, 488, 489, 490, 491, + 492, 493, 494, 495, 496, 497, 498, 499, 530, 364, + 372, 366, 367, 372, 406, 407, 408, 409, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 437, 486, + 499, 501, 503, 505, 509, 528, 530, 546, 547, 548, + 549, 550, 558, 559, 560, 561, 564, 565, 568, 569, + 570, 577, 582, 531, 371, 531, 366, 501, 544, 371, + 507, 398, 369, 372, 486, 486, 503, 342, 343, 364, + 368, 363, 363, 369, 405, 501, 362, 486, 369, 381, + 582, 361, 364, 395, 586, 604, 398, 605, 361, 394, + 395, 396, 397, 590, 591, 395, 499, 504, 592, 395, + 394, 395, 396, 397, 595, 596, 395, 394, 395, 396, + 397, 475, 597, 598, 395, 361, 599, 395, 604, 398, + 504, 535, 601, 602, 395, 504, 365, 584, 530, 398, + 542, 543, 367, 541, 540, 504, 523, 398, 377, 378, + 379, 374, 376, 340, 341, 344, 345, 380, 381, 346, + 347, 384, 383, 382, 348, 350, 349, 385, 365, 365, + 499, 367, 551, 362, 372, 372, 572, 362, 362, 372, + 372, 503, 362, 503, 370, 372, 372, 372, 372, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 371, + 502, 369, 372, 367, 547, 561, 565, 570, 544, 371, + 367, 544, 545, 544, 540, 398, 363, 478, 503, 398, + 501, 486, 361, 395, 587, 588, 363, 371, 363, 369, + 363, 369, 363, 369, 369, 363, 369, 363, 369, 363, + 369, 369, 363, 369, 369, 363, 369, 363, 369, 363, + 363, 542, 531, 369, 372, 367, 486, 486, 486, 488, + 488, 489, 489, 490, 490, 490, 490, 491, 491, 492, + 493, 494, 495, 496, 497, 500, 365, 558, 571, 547, + 573, 503, 372, 503, 370, 501, 501, 544, 367, 369, + 367, 365, 365, 369, 365, 369, 591, 590, 504, 592, + 596, 595, 598, 597, 361, 599, 601, 602, 372, 543, + 503, 552, 503, 518, 563, 406, 546, 559, 574, 363, + 363, 367, 544, 361, 395, 363, 363, 363, 363, 363, + 363, 370, 367, 398, 363, 362, 563, 575, 576, 554, + 555, 556, 562, 566, 501, 371, 548, 553, 557, 503, + 372, 363, 410, 550, 548, 366, 544, 363, 503, 553, + 554, 558, 567, 372, 367 }; /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */ static const yytype_int16 yyr1[] = { - 0, 470, 471, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 473, 473, - 473, 473, 473, 473, 474, 475, 476, 477, 477, 478, - 478, 479, 479, 480, 481, 481, 481, 482, 482, 482, - 482, 483, 483, 483, 483, 484, 484, 484, 484, 485, - 485, 485, 486, 486, 486, 487, 487, 487, 487, 487, - 488, 488, 488, 489, 489, 490, 490, 491, 491, 492, - 492, 493, 493, 494, 494, 495, 496, 495, 497, 497, - 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 499, 499, 500, 501, 501, 501, 501, 501, 501, - 501, 501, 501, 501, 501, 503, 502, 504, 504, 505, - 505, 505, 505, 506, 506, 507, 507, 508, 509, 509, - 510, 510, 510, 510, 511, 512, 512, 512, 512, 512, - 513, 513, 513, 513, 513, 514, 514, 515, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 517, 518, - 518, 519, 519, 519, 520, 521, 521, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 522, 522, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 524, 525, 525, - 526, 526, 527, 527, 527, 527, 528, 528, 529, 530, - 530, 530, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 532, 532, 532, 534, - 533, 535, 533, 536, 536, 537, 537, 538, 538, 539, - 539, 540, 540, 540, 540, 541, 541, 542, 543, 543, - 544, 544, 544, 544, 544, 544, 544, 544, 545, 546, - 547, 548, 546, 549, 549, 551, 550, 552, 550, 553, - 553, 554, 554, 555, 555, 556, 556, 557, 558, 558, - 559, 559, 560, 560, 562, 561, 563, 563, 564, 564, - 565, 565, 567, 566, 568, 566, 569, 566, 570, 570, - 571, 571, 572, 572, 573, 573, 573, 573, 573, 573, - 573, 573, 574, 574, 575, 575, 575, 577, 576, 578, - 579, 579, 580, 580, 581, 581, 582, 582, 583, 583, - 584, 584, 585, 585, 585, 585, 585, 585, 586, 586, - 587, 587, 587, 587, 587, 588, 588, 589, 589, 590, - 590, 590, 590, 590, 590, 590, 590, 591, 591, 592, - 592, 592, 592, 593, 593, 594, 594, 594, 594, 594, - 595, 595, 596, 596, 596, 596, 597, 597, 598, 598, - 599, 599, 600, 600, 601, 601 + 0, 474, 475, 476, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 476, 476, 476, 476, 476, 477, 477, + 477, 477, 477, 477, 478, 479, 480, 481, 481, 482, + 482, 483, 483, 484, 485, 485, 485, 486, 486, 486, + 486, 487, 487, 487, 487, 488, 488, 488, 488, 489, + 489, 489, 490, 490, 490, 491, 491, 491, 491, 491, + 492, 492, 492, 493, 493, 494, 494, 495, 495, 496, + 496, 497, 497, 498, 498, 499, 500, 499, 501, 501, + 502, 502, 502, 502, 502, 502, 502, 502, 502, 502, + 502, 503, 503, 504, 505, 505, 505, 505, 505, 505, + 505, 505, 505, 505, 505, 507, 506, 508, 508, 509, + 509, 509, 509, 510, 510, 511, 511, 512, 513, 513, + 514, 514, 514, 514, 515, 516, 516, 516, 516, 516, + 517, 517, 517, 517, 517, 518, 518, 519, 520, 520, + 520, 520, 520, 520, 520, 520, 520, 520, 521, 522, + 522, 523, 523, 523, 524, 525, 525, 526, 526, 526, + 526, 526, 526, 526, 526, 526, 526, 526, 527, 527, + 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, + 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, + 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, + 527, 527, 527, 527, 527, 527, 527, 528, 529, 529, + 530, 530, 531, 531, 531, 531, 532, 532, 533, 534, + 534, 534, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 535, 535, 535, 535, 535, 535, 535, 535, 535, 535, + 536, 536, 536, 538, 537, 539, 537, 540, 540, 541, + 541, 542, 542, 543, 543, 544, 544, 544, 544, 545, + 545, 546, 547, 547, 548, 548, 548, 548, 548, 548, + 548, 548, 549, 550, 551, 552, 550, 553, 553, 555, + 554, 556, 554, 557, 557, 558, 558, 559, 559, 560, + 560, 561, 562, 562, 563, 563, 564, 564, 566, 565, + 567, 567, 568, 568, 569, 569, 571, 570, 572, 570, + 573, 570, 574, 574, 575, 575, 576, 576, 577, 577, + 577, 577, 577, 577, 577, 577, 578, 578, 579, 579, + 579, 581, 580, 582, 583, 583, 584, 584, 585, 585, + 586, 586, 587, 587, 588, 588, 589, 589, 589, 589, + 589, 589, 590, 590, 591, 591, 591, 591, 591, 592, + 592, 593, 593, 594, 594, 594, 594, 594, 594, 594, + 594, 595, 595, 596, 596, 596, 596, 597, 597, 598, + 598, 598, 598, 598, 599, 599, 600, 600, 600, 600, + 601, 601, 602, 602, 603, 603, 604, 604, 605, 605 }; /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */ @@ -4485,23 +4512,23 @@ 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, 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, 0, 6, 0, 5, 1, 2, 3, + 4, 1, 3, 1, 2, 1, 3, 4, 2, 1, + 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 0, 0, 5, 1, 1, 0, + 2, 0, 2, 2, 3, 1, 2, 1, 2, 1, + 2, 5, 3, 1, 1, 4, 1, 2, 0, 8, + 0, 1, 3, 2, 1, 2, 0, 6, 0, 8, + 0, 7, 1, 1, 1, 0, 2, 3, 2, 2, + 2, 3, 2, 2, 2, 2, 1, 2, 1, 1, + 1, 0, 3, 5, 1, 3, 1, 4, 1, 3, + 5, 5, 1, 3, 1, 3, 4, 6, 6, 8, + 6, 8, 1, 3, 1, 1, 1, 1, 1, 1, + 3, 4, 6, 4, 6, 6, 8, 6, 8, 6, + 8, 1, 3, 1, 1, 1, 1, 1, 3, 1, + 1, 1, 1, 1, 1, 3, 6, 8, 4, 6, + 1, 3, 1, 1, 4, 6, 1, 3, 3, 3 }; @@ -5243,260 +5270,260 @@ yyreduce: switch (yyn) { case 2: /* variable_identifier: IDENTIFIER */ -#line 357 "MachineIndependent/glslang.y" +#line 358 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 5251 "MachineIndependent/glslang_tab.cpp" +#line 5278 "MachineIndependent/glslang_tab.cpp" break; case 3: /* primary_expression: variable_identifier */ -#line 363 "MachineIndependent/glslang.y" +#line 364 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5259 "MachineIndependent/glslang_tab.cpp" +#line 5286 "MachineIndependent/glslang_tab.cpp" break; case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */ -#line 366 "MachineIndependent/glslang.y" +#line 367 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 5269 "MachineIndependent/glslang_tab.cpp" +#line 5296 "MachineIndependent/glslang_tab.cpp" break; case 5: /* primary_expression: FLOATCONSTANT */ -#line 371 "MachineIndependent/glslang.y" +#line 372 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 5277 "MachineIndependent/glslang_tab.cpp" +#line 5304 "MachineIndependent/glslang_tab.cpp" break; case 6: /* primary_expression: INTCONSTANT */ -#line 374 "MachineIndependent/glslang.y" +#line 375 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 5285 "MachineIndependent/glslang_tab.cpp" +#line 5312 "MachineIndependent/glslang_tab.cpp" break; case 7: /* primary_expression: UINTCONSTANT */ -#line 377 "MachineIndependent/glslang.y" +#line 378 "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 5294 "MachineIndependent/glslang_tab.cpp" +#line 5321 "MachineIndependent/glslang_tab.cpp" break; case 8: /* primary_expression: BOOLCONSTANT */ -#line 381 "MachineIndependent/glslang.y" +#line 382 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 5302 "MachineIndependent/glslang_tab.cpp" +#line 5329 "MachineIndependent/glslang_tab.cpp" break; case 9: /* primary_expression: STRING_LITERAL */ -#line 384 "MachineIndependent/glslang.y" +#line 385 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 5310 "MachineIndependent/glslang_tab.cpp" - break; - - case 10: /* primary_expression: INT32CONSTANT */ -#line 387 "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 5319 "MachineIndependent/glslang_tab.cpp" - break; - - case 11: /* primary_expression: UINT32CONSTANT */ -#line 391 "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 5328 "MachineIndependent/glslang_tab.cpp" - break; - - case 12: /* primary_expression: INT64CONSTANT */ -#line 395 "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 5337 "MachineIndependent/glslang_tab.cpp" break; - case 13: /* primary_expression: UINT64CONSTANT */ -#line 399 "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); + case 10: /* primary_expression: INT32CONSTANT */ +#line 388 "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 5346 "MachineIndependent/glslang_tab.cpp" break; - case 14: /* primary_expression: INT16CONSTANT */ -#line 403 "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); + case 11: /* primary_expression: UINT32CONSTANT */ +#line 392 "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 5355 "MachineIndependent/glslang_tab.cpp" break; - case 15: /* primary_expression: UINT16CONSTANT */ -#line 407 "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); + case 12: /* primary_expression: INT64CONSTANT */ +#line 396 "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 5364 "MachineIndependent/glslang_tab.cpp" break; + case 13: /* primary_expression: UINT64CONSTANT */ +#line 400 "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 5373 "MachineIndependent/glslang_tab.cpp" + break; + + case 14: /* primary_expression: INT16CONSTANT */ +#line 404 "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 5382 "MachineIndependent/glslang_tab.cpp" + break; + + case 15: /* primary_expression: UINT16CONSTANT */ +#line 408 "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 5391 "MachineIndependent/glslang_tab.cpp" + break; + case 16: /* primary_expression: DOUBLECONSTANT */ -#line 411 "MachineIndependent/glslang.y" +#line 412 "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 5375 "MachineIndependent/glslang_tab.cpp" +#line 5402 "MachineIndependent/glslang_tab.cpp" break; case 17: /* primary_expression: FLOAT16CONSTANT */ -#line 417 "MachineIndependent/glslang.y" +#line 418 "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 5384 "MachineIndependent/glslang_tab.cpp" +#line 5411 "MachineIndependent/glslang_tab.cpp" break; case 18: /* postfix_expression: primary_expression */ -#line 424 "MachineIndependent/glslang.y" +#line 425 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5392 "MachineIndependent/glslang_tab.cpp" +#line 5419 "MachineIndependent/glslang_tab.cpp" break; case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ -#line 427 "MachineIndependent/glslang.y" +#line 428 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 5400 "MachineIndependent/glslang_tab.cpp" +#line 5427 "MachineIndependent/glslang_tab.cpp" break; case 20: /* postfix_expression: function_call */ -#line 430 "MachineIndependent/glslang.y" +#line 431 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5408 "MachineIndependent/glslang_tab.cpp" +#line 5435 "MachineIndependent/glslang_tab.cpp" break; case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER */ -#line 433 "MachineIndependent/glslang.y" +#line 434 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 5416 "MachineIndependent/glslang_tab.cpp" +#line 5443 "MachineIndependent/glslang_tab.cpp" break; case 22: /* postfix_expression: postfix_expression INC_OP */ -#line 436 "MachineIndependent/glslang.y" +#line 437 "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 5426 "MachineIndependent/glslang_tab.cpp" +#line 5453 "MachineIndependent/glslang_tab.cpp" break; case 23: /* postfix_expression: postfix_expression DEC_OP */ -#line 441 "MachineIndependent/glslang.y" +#line 442 "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 5436 "MachineIndependent/glslang_tab.cpp" +#line 5463 "MachineIndependent/glslang_tab.cpp" break; case 24: /* integer_expression: expression */ -#line 449 "MachineIndependent/glslang.y" +#line 450 "MachineIndependent/glslang.y" { parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5445 "MachineIndependent/glslang_tab.cpp" +#line 5472 "MachineIndependent/glslang_tab.cpp" break; case 25: /* function_call: function_call_or_method */ -#line 456 "MachineIndependent/glslang.y" +#line 457 "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 5454 "MachineIndependent/glslang_tab.cpp" +#line 5481 "MachineIndependent/glslang_tab.cpp" break; case 26: /* function_call_or_method: function_call_generic */ -#line 463 "MachineIndependent/glslang.y" +#line 464 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5462 "MachineIndependent/glslang_tab.cpp" +#line 5489 "MachineIndependent/glslang_tab.cpp" break; case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ -#line 469 "MachineIndependent/glslang.y" +#line 470 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5471 "MachineIndependent/glslang_tab.cpp" +#line 5498 "MachineIndependent/glslang_tab.cpp" break; case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ -#line 473 "MachineIndependent/glslang.y" +#line 474 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5480 "MachineIndependent/glslang_tab.cpp" +#line 5507 "MachineIndependent/glslang_tab.cpp" break; case 29: /* function_call_header_no_parameters: function_call_header VOID */ -#line 480 "MachineIndependent/glslang.y" +#line 481 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 5488 "MachineIndependent/glslang_tab.cpp" +#line 5515 "MachineIndependent/glslang_tab.cpp" break; case 30: /* function_call_header_no_parameters: function_call_header */ -#line 483 "MachineIndependent/glslang.y" +#line 484 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5496 "MachineIndependent/glslang_tab.cpp" +#line 5523 "MachineIndependent/glslang_tab.cpp" break; case 31: /* function_call_header_with_parameters: function_call_header assignment_expression */ -#line 489 "MachineIndependent/glslang.y" +#line 490 "MachineIndependent/glslang.y" { if (parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed @@ -5515,11 +5542,11 @@ yyreduce: (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } } -#line 5519 "MachineIndependent/glslang_tab.cpp" +#line 5546 "MachineIndependent/glslang_tab.cpp" break; case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression */ -#line 507 "MachineIndependent/glslang.y" +#line 508 "MachineIndependent/glslang.y" { if (parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed @@ -5542,29 +5569,29 @@ yyreduce: (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); } } -#line 5546 "MachineIndependent/glslang_tab.cpp" +#line 5573 "MachineIndependent/glslang_tab.cpp" break; case 33: /* function_call_header: function_identifier LEFT_PAREN */ -#line 532 "MachineIndependent/glslang.y" +#line 533 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 5554 "MachineIndependent/glslang_tab.cpp" +#line 5581 "MachineIndependent/glslang_tab.cpp" break; case 34: /* function_identifier: type_specifier */ -#line 540 "MachineIndependent/glslang.y" +#line 541 "MachineIndependent/glslang.y" { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5564 "MachineIndependent/glslang_tab.cpp" +#line 5591 "MachineIndependent/glslang_tab.cpp" break; case 35: /* function_identifier: postfix_expression */ -#line 545 "MachineIndependent/glslang.y" +#line 546 "MachineIndependent/glslang.y" { // // Should be a method or subroutine call, but we haven't recognized the arguments yet. @@ -5592,50 +5619,50 @@ yyreduce: (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 5596 "MachineIndependent/glslang_tab.cpp" +#line 5623 "MachineIndependent/glslang_tab.cpp" break; case 36: /* function_identifier: non_uniform_qualifier */ -#line 572 "MachineIndependent/glslang.y" +#line 573 "MachineIndependent/glslang.y" { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5606 "MachineIndependent/glslang_tab.cpp" +#line 5633 "MachineIndependent/glslang_tab.cpp" break; case 37: /* unary_expression: postfix_expression */ -#line 580 "MachineIndependent/glslang.y" +#line 581 "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 5617 "MachineIndependent/glslang_tab.cpp" +#line 5644 "MachineIndependent/glslang_tab.cpp" break; case 38: /* unary_expression: INC_OP unary_expression */ -#line 586 "MachineIndependent/glslang.y" +#line 587 "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 5626 "MachineIndependent/glslang_tab.cpp" +#line 5653 "MachineIndependent/glslang_tab.cpp" break; case 39: /* unary_expression: DEC_OP unary_expression */ -#line 590 "MachineIndependent/glslang.y" +#line 591 "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 5635 "MachineIndependent/glslang_tab.cpp" +#line 5662 "MachineIndependent/glslang_tab.cpp" break; case 40: /* unary_expression: unary_operator unary_expression */ -#line 594 "MachineIndependent/glslang.y" +#line 595 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm).op != EOpNull) { char errorOp[2] = {0, 0}; @@ -5652,179 +5679,179 @@ yyreduce: (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 5656 "MachineIndependent/glslang_tab.cpp" +#line 5683 "MachineIndependent/glslang_tab.cpp" break; case 41: /* unary_operator: PLUS */ -#line 614 "MachineIndependent/glslang.y" +#line 615 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 5662 "MachineIndependent/glslang_tab.cpp" +#line 5689 "MachineIndependent/glslang_tab.cpp" break; case 42: /* unary_operator: DASH */ -#line 615 "MachineIndependent/glslang.y" +#line 616 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 5668 "MachineIndependent/glslang_tab.cpp" +#line 5695 "MachineIndependent/glslang_tab.cpp" break; case 43: /* unary_operator: BANG */ -#line 616 "MachineIndependent/glslang.y" +#line 617 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 5674 "MachineIndependent/glslang_tab.cpp" +#line 5701 "MachineIndependent/glslang_tab.cpp" break; case 44: /* unary_operator: TILDE */ -#line 617 "MachineIndependent/glslang.y" +#line 618 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); } -#line 5681 "MachineIndependent/glslang_tab.cpp" +#line 5708 "MachineIndependent/glslang_tab.cpp" break; case 45: /* multiplicative_expression: unary_expression */ -#line 623 "MachineIndependent/glslang.y" +#line 624 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5687 "MachineIndependent/glslang_tab.cpp" +#line 5714 "MachineIndependent/glslang_tab.cpp" break; case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ -#line 624 "MachineIndependent/glslang.y" +#line 625 "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 5697 "MachineIndependent/glslang_tab.cpp" - break; - - case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ -#line 629 "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 5707 "MachineIndependent/glslang_tab.cpp" - break; - - case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ -#line 634 "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 5718 "MachineIndependent/glslang_tab.cpp" - break; - - case 49: /* additive_expression: multiplicative_expression */ -#line 643 "MachineIndependent/glslang.y" - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } #line 5724 "MachineIndependent/glslang_tab.cpp" break; - case 50: /* additive_expression: additive_expression PLUS multiplicative_expression */ -#line 644 "MachineIndependent/glslang.y" - { - (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); + case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ +#line 630 "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 5734 "MachineIndependent/glslang_tab.cpp" break; - case 51: /* additive_expression: additive_expression DASH multiplicative_expression */ -#line 649 "MachineIndependent/glslang.y" + case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ +#line 635 "MachineIndependent/glslang.y" { - (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); + 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 5744 "MachineIndependent/glslang_tab.cpp" +#line 5745 "MachineIndependent/glslang_tab.cpp" break; - case 52: /* shift_expression: additive_expression */ -#line 657 "MachineIndependent/glslang.y" - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5750 "MachineIndependent/glslang_tab.cpp" + case 49: /* additive_expression: multiplicative_expression */ +#line 644 "MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5751 "MachineIndependent/glslang_tab.cpp" break; - case 53: /* shift_expression: shift_expression LEFT_OP additive_expression */ -#line 658 "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)); + case 50: /* additive_expression: additive_expression PLUS multiplicative_expression */ +#line 645 "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 5761 "MachineIndependent/glslang_tab.cpp" break; + case 51: /* additive_expression: additive_expression DASH multiplicative_expression */ +#line 650 "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 5771 "MachineIndependent/glslang_tab.cpp" + break; + + case 52: /* shift_expression: additive_expression */ +#line 658 "MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5777 "MachineIndependent/glslang_tab.cpp" + break; + + case 53: /* shift_expression: shift_expression LEFT_OP additive_expression */ +#line 659 "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 5788 "MachineIndependent/glslang_tab.cpp" + break; + case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression */ -#line 664 "MachineIndependent/glslang.y" +#line 665 "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 5772 "MachineIndependent/glslang_tab.cpp" +#line 5799 "MachineIndependent/glslang_tab.cpp" break; case 55: /* relational_expression: shift_expression */ -#line 673 "MachineIndependent/glslang.y" +#line 674 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5778 "MachineIndependent/glslang_tab.cpp" +#line 5805 "MachineIndependent/glslang_tab.cpp" break; case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ -#line 674 "MachineIndependent/glslang.y" +#line 675 "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 5788 "MachineIndependent/glslang_tab.cpp" +#line 5815 "MachineIndependent/glslang_tab.cpp" break; case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ -#line 679 "MachineIndependent/glslang.y" +#line 680 "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 5798 "MachineIndependent/glslang_tab.cpp" +#line 5825 "MachineIndependent/glslang_tab.cpp" break; case 58: /* relational_expression: relational_expression LE_OP shift_expression */ -#line 684 "MachineIndependent/glslang.y" +#line 685 "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 5808 "MachineIndependent/glslang_tab.cpp" +#line 5835 "MachineIndependent/glslang_tab.cpp" break; case 59: /* relational_expression: relational_expression GE_OP shift_expression */ -#line 689 "MachineIndependent/glslang.y" +#line 690 "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 5818 "MachineIndependent/glslang_tab.cpp" +#line 5845 "MachineIndependent/glslang_tab.cpp" break; case 60: /* equality_expression: relational_expression */ -#line 697 "MachineIndependent/glslang.y" +#line 698 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5824 "MachineIndependent/glslang_tab.cpp" +#line 5851 "MachineIndependent/glslang_tab.cpp" break; case 61: /* equality_expression: equality_expression EQ_OP relational_expression */ -#line 698 "MachineIndependent/glslang.y" +#line 699 "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(), "=="); @@ -5834,11 +5861,11 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5838 "MachineIndependent/glslang_tab.cpp" +#line 5865 "MachineIndependent/glslang_tab.cpp" break; case 62: /* equality_expression: equality_expression NE_OP relational_expression */ -#line 707 "MachineIndependent/glslang.y" +#line 708 "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(), "!="); @@ -5848,124 +5875,124 @@ yyreduce: if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5852 "MachineIndependent/glslang_tab.cpp" +#line 5879 "MachineIndependent/glslang_tab.cpp" break; case 63: /* and_expression: equality_expression */ -#line 719 "MachineIndependent/glslang.y" +#line 720 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5858 "MachineIndependent/glslang_tab.cpp" +#line 5885 "MachineIndependent/glslang_tab.cpp" break; case 64: /* and_expression: and_expression AMPERSAND equality_expression */ -#line 720 "MachineIndependent/glslang.y" +#line 721 "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 5869 "MachineIndependent/glslang_tab.cpp" +#line 5896 "MachineIndependent/glslang_tab.cpp" break; case 65: /* exclusive_or_expression: and_expression */ -#line 729 "MachineIndependent/glslang.y" +#line 730 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5875 "MachineIndependent/glslang_tab.cpp" +#line 5902 "MachineIndependent/glslang_tab.cpp" break; case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ -#line 730 "MachineIndependent/glslang.y" +#line 731 "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 5886 "MachineIndependent/glslang_tab.cpp" +#line 5913 "MachineIndependent/glslang_tab.cpp" break; case 67: /* inclusive_or_expression: exclusive_or_expression */ -#line 739 "MachineIndependent/glslang.y" +#line 740 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5892 "MachineIndependent/glslang_tab.cpp" +#line 5919 "MachineIndependent/glslang_tab.cpp" break; case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression */ -#line 740 "MachineIndependent/glslang.y" +#line 741 "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 5903 "MachineIndependent/glslang_tab.cpp" +#line 5930 "MachineIndependent/glslang_tab.cpp" break; case 69: /* logical_and_expression: inclusive_or_expression */ -#line 749 "MachineIndependent/glslang.y" +#line 750 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5909 "MachineIndependent/glslang_tab.cpp" +#line 5936 "MachineIndependent/glslang_tab.cpp" break; case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ -#line 750 "MachineIndependent/glslang.y" +#line 751 "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 5919 "MachineIndependent/glslang_tab.cpp" +#line 5946 "MachineIndependent/glslang_tab.cpp" break; case 71: /* logical_xor_expression: logical_and_expression */ -#line 758 "MachineIndependent/glslang.y" +#line 759 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5925 "MachineIndependent/glslang_tab.cpp" +#line 5952 "MachineIndependent/glslang_tab.cpp" break; case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ -#line 759 "MachineIndependent/glslang.y" +#line 760 "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 5935 "MachineIndependent/glslang_tab.cpp" +#line 5962 "MachineIndependent/glslang_tab.cpp" break; case 73: /* logical_or_expression: logical_xor_expression */ -#line 767 "MachineIndependent/glslang.y" +#line 768 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5941 "MachineIndependent/glslang_tab.cpp" +#line 5968 "MachineIndependent/glslang_tab.cpp" break; case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ -#line 768 "MachineIndependent/glslang.y" +#line 769 "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 5951 "MachineIndependent/glslang_tab.cpp" +#line 5978 "MachineIndependent/glslang_tab.cpp" break; case 75: /* conditional_expression: logical_or_expression */ -#line 776 "MachineIndependent/glslang.y" +#line 777 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5957 "MachineIndependent/glslang_tab.cpp" +#line 5984 "MachineIndependent/glslang_tab.cpp" break; case 76: /* $@1: %empty */ -#line 777 "MachineIndependent/glslang.y" +#line 778 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 5965 "MachineIndependent/glslang_tab.cpp" +#line 5992 "MachineIndependent/glslang_tab.cpp" break; case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression */ -#line 780 "MachineIndependent/glslang.y" +#line 781 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode)); @@ -5978,17 +6005,17 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5982 "MachineIndependent/glslang_tab.cpp" +#line 6009 "MachineIndependent/glslang_tab.cpp" break; case 78: /* assignment_expression: conditional_expression */ -#line 795 "MachineIndependent/glslang.y" +#line 796 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5988 "MachineIndependent/glslang_tab.cpp" +#line 6015 "MachineIndependent/glslang_tab.cpp" break; case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression */ -#line 796 "MachineIndependent/glslang.y" +#line 797 "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(), "="); @@ -6002,119 +6029,119 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 6006 "MachineIndependent/glslang_tab.cpp" +#line 6033 "MachineIndependent/glslang_tab.cpp" break; case 80: /* assignment_operator: EQUAL */ -#line 812 "MachineIndependent/glslang.y" +#line 813 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 6015 "MachineIndependent/glslang_tab.cpp" +#line 6042 "MachineIndependent/glslang_tab.cpp" break; case 81: /* assignment_operator: MUL_ASSIGN */ -#line 816 "MachineIndependent/glslang.y" +#line 817 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 6024 "MachineIndependent/glslang_tab.cpp" +#line 6051 "MachineIndependent/glslang_tab.cpp" break; case 82: /* assignment_operator: DIV_ASSIGN */ -#line 820 "MachineIndependent/glslang.y" +#line 821 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 6033 "MachineIndependent/glslang_tab.cpp" +#line 6060 "MachineIndependent/glslang_tab.cpp" break; case 83: /* assignment_operator: MOD_ASSIGN */ -#line 824 "MachineIndependent/glslang.y" +#line 825 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%="); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 6043 "MachineIndependent/glslang_tab.cpp" +#line 6070 "MachineIndependent/glslang_tab.cpp" break; case 84: /* assignment_operator: ADD_ASSIGN */ -#line 829 "MachineIndependent/glslang.y" +#line 830 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 6052 "MachineIndependent/glslang_tab.cpp" +#line 6079 "MachineIndependent/glslang_tab.cpp" break; case 85: /* assignment_operator: SUB_ASSIGN */ -#line 833 "MachineIndependent/glslang.y" +#line 834 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 6061 "MachineIndependent/glslang_tab.cpp" +#line 6088 "MachineIndependent/glslang_tab.cpp" break; case 86: /* assignment_operator: LEFT_ASSIGN */ -#line 837 "MachineIndependent/glslang.y" +#line 838 "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 6070 "MachineIndependent/glslang_tab.cpp" +#line 6097 "MachineIndependent/glslang_tab.cpp" break; case 87: /* assignment_operator: RIGHT_ASSIGN */ -#line 841 "MachineIndependent/glslang.y" +#line 842 "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 6079 "MachineIndependent/glslang_tab.cpp" +#line 6106 "MachineIndependent/glslang_tab.cpp" break; case 88: /* assignment_operator: AND_ASSIGN */ -#line 845 "MachineIndependent/glslang.y" +#line 846 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 6088 "MachineIndependent/glslang_tab.cpp" +#line 6115 "MachineIndependent/glslang_tab.cpp" break; case 89: /* assignment_operator: XOR_ASSIGN */ -#line 849 "MachineIndependent/glslang.y" +#line 850 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 6097 "MachineIndependent/glslang_tab.cpp" +#line 6124 "MachineIndependent/glslang_tab.cpp" break; case 90: /* assignment_operator: OR_ASSIGN */ -#line 853 "MachineIndependent/glslang.y" +#line 854 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 6106 "MachineIndependent/glslang_tab.cpp" +#line 6133 "MachineIndependent/glslang_tab.cpp" break; case 91: /* expression: assignment_expression */ -#line 860 "MachineIndependent/glslang.y" +#line 861 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6114 "MachineIndependent/glslang_tab.cpp" +#line 6141 "MachineIndependent/glslang_tab.cpp" break; case 92: /* expression: expression COMMA assignment_expression */ -#line 863 "MachineIndependent/glslang.y" +#line 864 "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); @@ -6123,30 +6150,30 @@ yyreduce: (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 6127 "MachineIndependent/glslang_tab.cpp" +#line 6154 "MachineIndependent/glslang_tab.cpp" break; case 93: /* constant_expression: conditional_expression */ -#line 874 "MachineIndependent/glslang.y" +#line 875 "MachineIndependent/glslang.y" { parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6136 "MachineIndependent/glslang_tab.cpp" +#line 6163 "MachineIndependent/glslang_tab.cpp" break; case 94: /* declaration: function_prototype SEMICOLON */ -#line 881 "MachineIndependent/glslang.y" +#line 882 "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 6146 "MachineIndependent/glslang_tab.cpp" +#line 6173 "MachineIndependent/glslang_tab.cpp" break; case 95: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON */ -#line 886 "MachineIndependent/glslang.y" +#line 887 "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 @@ -6154,31 +6181,31 @@ yyreduce: (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 6158 "MachineIndependent/glslang_tab.cpp" +#line 6185 "MachineIndependent/glslang_tab.cpp" break; case 96: /* declaration: spirv_execution_mode_qualifier SEMICOLON */ -#line 893 "MachineIndependent/glslang.y" +#line 894 "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 6168 "MachineIndependent/glslang_tab.cpp" +#line 6195 "MachineIndependent/glslang_tab.cpp" break; case 97: /* declaration: init_declarator_list SEMICOLON */ -#line 898 "MachineIndependent/glslang.y" +#line 899 "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 6178 "MachineIndependent/glslang_tab.cpp" +#line 6205 "MachineIndependent/glslang_tab.cpp" break; case 98: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ -#line 903 "MachineIndependent/glslang.y" +#line 904 "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 @@ -6186,75 +6213,75 @@ yyreduce: parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 6190 "MachineIndependent/glslang_tab.cpp" +#line 6217 "MachineIndependent/glslang_tab.cpp" break; case 99: /* declaration: block_structure SEMICOLON */ -#line 910 "MachineIndependent/glslang.y" +#line 911 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 6199 "MachineIndependent/glslang_tab.cpp" +#line 6226 "MachineIndependent/glslang_tab.cpp" break; case 100: /* declaration: block_structure IDENTIFIER SEMICOLON */ -#line 914 "MachineIndependent/glslang.y" +#line 915 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 6208 "MachineIndependent/glslang_tab.cpp" +#line 6235 "MachineIndependent/glslang_tab.cpp" break; case 101: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ -#line 918 "MachineIndependent/glslang.y" +#line 919 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 6217 "MachineIndependent/glslang_tab.cpp" +#line 6244 "MachineIndependent/glslang_tab.cpp" break; case 102: /* declaration: type_qualifier SEMICOLON */ -#line 922 "MachineIndependent/glslang.y" +#line 923 "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 6227 "MachineIndependent/glslang_tab.cpp" +#line 6254 "MachineIndependent/glslang_tab.cpp" break; case 103: /* declaration: type_qualifier IDENTIFIER SEMICOLON */ -#line 927 "MachineIndependent/glslang.y" +#line 928 "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].lex).string); (yyval.interm.intermNode) = 0; } -#line 6237 "MachineIndependent/glslang_tab.cpp" +#line 6264 "MachineIndependent/glslang_tab.cpp" break; case 104: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON */ -#line 932 "MachineIndependent/glslang.y" +#line 933 "MachineIndependent/glslang.y" { parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers); (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string); parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 6248 "MachineIndependent/glslang_tab.cpp" +#line 6275 "MachineIndependent/glslang_tab.cpp" break; case 105: /* $@2: %empty */ -#line 941 "MachineIndependent/glslang.y" +#line 942 "MachineIndependent/glslang.y" { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 6254 "MachineIndependent/glslang_tab.cpp" +#line 6281 "MachineIndependent/glslang_tab.cpp" break; case 106: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */ -#line 941 "MachineIndependent/glslang.y" +#line 942 "MachineIndependent/glslang.y" { --parseContext.blockNestingLevel; parseContext.blockName = (yyvsp[-4].lex).string; @@ -6264,39 +6291,39 @@ yyreduce: (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 6268 "MachineIndependent/glslang_tab.cpp" +#line 6295 "MachineIndependent/glslang_tab.cpp" break; case 107: /* identifier_list: COMMA IDENTIFIER */ -#line 952 "MachineIndependent/glslang.y" +#line 953 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 6277 "MachineIndependent/glslang_tab.cpp" +#line 6304 "MachineIndependent/glslang_tab.cpp" break; case 108: /* identifier_list: identifier_list COMMA IDENTIFIER */ -#line 956 "MachineIndependent/glslang.y" +#line 957 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 6286 "MachineIndependent/glslang_tab.cpp" +#line 6313 "MachineIndependent/glslang_tab.cpp" break; case 109: /* function_prototype: function_declarator RIGHT_PAREN */ -#line 963 "MachineIndependent/glslang.y" +#line 964 "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 6296 "MachineIndependent/glslang_tab.cpp" +#line 6323 "MachineIndependent/glslang_tab.cpp" break; case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute */ -#line 968 "MachineIndependent/glslang.y" +#line 969 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-2].interm.function); if (parseContext.compileOnly) (yyval.interm).function->setExport(); @@ -6305,11 +6332,11 @@ yyreduce: parseContext.requireExtensions((yyvsp[-1].lex).loc, 2, extensions, "attribute"); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); } -#line 6309 "MachineIndependent/glslang_tab.cpp" +#line 6336 "MachineIndependent/glslang_tab.cpp" break; case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN */ -#line 976 "MachineIndependent/glslang.y" +#line 977 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-1].interm.function); if (parseContext.compileOnly) (yyval.interm).function->setExport(); @@ -6318,11 +6345,11 @@ yyreduce: parseContext.requireExtensions((yyvsp[0].lex).loc, 2, extensions, "attribute"); parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes)); } -#line 6322 "MachineIndependent/glslang_tab.cpp" +#line 6349 "MachineIndependent/glslang_tab.cpp" break; case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute */ -#line 984 "MachineIndependent/glslang.y" +#line 985 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-2].interm.function); if (parseContext.compileOnly) (yyval.interm).function->setExport(); @@ -6332,27 +6359,27 @@ yyreduce: parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes)); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); } -#line 6336 "MachineIndependent/glslang_tab.cpp" +#line 6363 "MachineIndependent/glslang_tab.cpp" break; case 113: /* function_declarator: function_header */ -#line 996 "MachineIndependent/glslang.y" +#line 997 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 6344 "MachineIndependent/glslang_tab.cpp" +#line 6371 "MachineIndependent/glslang_tab.cpp" break; case 114: /* function_declarator: function_header_with_parameters */ -#line 999 "MachineIndependent/glslang.y" +#line 1000 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 6352 "MachineIndependent/glslang_tab.cpp" +#line 6379 "MachineIndependent/glslang_tab.cpp" break; case 115: /* function_header_with_parameters: function_header parameter_declaration */ -#line 1006 "MachineIndependent/glslang.y" +#line 1007 "MachineIndependent/glslang.y" { // Add the parameter (yyval.interm.function) = (yyvsp[-1].interm.function); @@ -6366,11 +6393,11 @@ yyreduce: else delete (yyvsp[0].interm).param.type; } -#line 6370 "MachineIndependent/glslang_tab.cpp" +#line 6397 "MachineIndependent/glslang_tab.cpp" break; case 116: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ -#line 1019 "MachineIndependent/glslang.y" +#line 1020 "MachineIndependent/glslang.y" { // // Only first parameter of one-parameter functions can be void @@ -6391,11 +6418,11 @@ yyreduce: parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-2].interm.function), (yyvsp[0].interm).param); } } -#line 6395 "MachineIndependent/glslang_tab.cpp" +#line 6422 "MachineIndependent/glslang_tab.cpp" break; case 117: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ -#line 1042 "MachineIndependent/glslang.y" +#line 1043 "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", @@ -6415,11 +6442,11 @@ yyreduce: function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 6419 "MachineIndependent/glslang_tab.cpp" +#line 6446 "MachineIndependent/glslang_tab.cpp" break; case 118: /* parameter_declarator: type_specifier IDENTIFIER */ -#line 1065 "MachineIndependent/glslang.y" +#line 1066 "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"); @@ -6435,11 +6462,11 @@ yyreduce: (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 6439 "MachineIndependent/glslang_tab.cpp" +#line 6466 "MachineIndependent/glslang_tab.cpp" break; case 119: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ -#line 1080 "MachineIndependent/glslang.y" +#line 1081 "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"); @@ -6459,11 +6486,11 @@ yyreduce: (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 6463 "MachineIndependent/glslang_tab.cpp" +#line 6490 "MachineIndependent/glslang_tab.cpp" break; case 120: /* parameter_declaration: type_qualifier parameter_declarator */ -#line 1105 "MachineIndependent/glslang.y" +#line 1106 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -6475,11 +6502,11 @@ yyreduce: parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 6479 "MachineIndependent/glslang_tab.cpp" +#line 6506 "MachineIndependent/glslang_tab.cpp" break; case 121: /* parameter_declaration: parameter_declarator */ -#line 1116 "MachineIndependent/glslang.y" +#line 1117 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); @@ -6487,11 +6514,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->isCoopMatOrVec()); } -#line 6491 "MachineIndependent/glslang_tab.cpp" +#line 6518 "MachineIndependent/glslang_tab.cpp" break; case 122: /* parameter_declaration: type_qualifier parameter_type_specifier */ -#line 1126 "MachineIndependent/glslang.y" +#line 1127 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -6502,11 +6529,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 6506 "MachineIndependent/glslang_tab.cpp" +#line 6533 "MachineIndependent/glslang_tab.cpp" break; case 123: /* parameter_declaration: parameter_type_specifier */ -#line 1136 "MachineIndependent/glslang.y" +#line 1137 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); @@ -6514,118 +6541,118 @@ 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->isCoopMatOrVec()); } -#line 6518 "MachineIndependent/glslang_tab.cpp" +#line 6545 "MachineIndependent/glslang_tab.cpp" break; case 124: /* parameter_type_specifier: type_specifier */ -#line 1146 "MachineIndependent/glslang.y" +#line 1147 "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 6529 "MachineIndependent/glslang_tab.cpp" +#line 6556 "MachineIndependent/glslang_tab.cpp" break; case 125: /* init_declarator_list: single_declaration */ -#line 1155 "MachineIndependent/glslang.y" +#line 1156 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 6537 "MachineIndependent/glslang_tab.cpp" +#line 6564 "MachineIndependent/glslang_tab.cpp" break; case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ -#line 1158 "MachineIndependent/glslang.y" +#line 1159 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 6546 "MachineIndependent/glslang_tab.cpp" +#line 6573 "MachineIndependent/glslang_tab.cpp" break; case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ -#line 1162 "MachineIndependent/glslang.y" +#line 1163 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 6555 "MachineIndependent/glslang_tab.cpp" +#line 6582 "MachineIndependent/glslang_tab.cpp" break; case 128: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ -#line 1166 "MachineIndependent/glslang.y" +#line 1167 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-5].interm).type; TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc); } -#line 6565 "MachineIndependent/glslang_tab.cpp" +#line 6592 "MachineIndependent/glslang_tab.cpp" break; case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ -#line 1171 "MachineIndependent/glslang.y" +#line 1172 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm).type; TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc); } -#line 6575 "MachineIndependent/glslang_tab.cpp" +#line 6602 "MachineIndependent/glslang_tab.cpp" break; case 130: /* single_declaration: fully_specified_type */ -#line 1179 "MachineIndependent/glslang.y" +#line 1180 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[0].interm.type); (yyval.interm).intermNode = 0; parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 6585 "MachineIndependent/glslang_tab.cpp" +#line 6612 "MachineIndependent/glslang_tab.cpp" break; case 131: /* single_declaration: fully_specified_type IDENTIFIER */ -#line 1184 "MachineIndependent/glslang.y" +#line 1185 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-1].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 6595 "MachineIndependent/glslang_tab.cpp" +#line 6622 "MachineIndependent/glslang_tab.cpp" break; case 132: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ -#line 1189 "MachineIndependent/glslang.y" +#line 1190 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-2].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 6605 "MachineIndependent/glslang_tab.cpp" +#line 6632 "MachineIndependent/glslang_tab.cpp" break; case 133: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ -#line 1194 "MachineIndependent/glslang.y" +#line 1195 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm.type); TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc); } -#line 6615 "MachineIndependent/glslang_tab.cpp" +#line 6642 "MachineIndependent/glslang_tab.cpp" break; case 134: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 1199 "MachineIndependent/glslang.y" +#line 1200 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-3].interm.type); TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode)); (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc); } -#line 6625 "MachineIndependent/glslang_tab.cpp" +#line 6652 "MachineIndependent/glslang_tab.cpp" break; case 135: /* fully_specified_type: type_specifier */ -#line 1208 "MachineIndependent/glslang.y" +#line 1209 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); @@ -6636,11 +6663,11 @@ yyreduce: } parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier, (yyval.interm.type).isCoopmatOrvec()); } -#line 6640 "MachineIndependent/glslang_tab.cpp" +#line 6667 "MachineIndependent/glslang_tab.cpp" break; case 136: /* fully_specified_type: type_qualifier type_specifier */ -#line 1218 "MachineIndependent/glslang.y" +#line 1219 "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)); @@ -6665,22 +6692,22 @@ yyreduce: (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 6669 "MachineIndependent/glslang_tab.cpp" +#line 6696 "MachineIndependent/glslang_tab.cpp" break; case 137: /* invariant_qualifier: INVARIANT */ -#line 1245 "MachineIndependent/glslang.y" +#line 1246 "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 6680 "MachineIndependent/glslang_tab.cpp" +#line 6707 "MachineIndependent/glslang_tab.cpp" break; case 138: /* interpolation_qualifier: SMOOTH */ -#line 1254 "MachineIndependent/glslang.y" +#line 1255 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "smooth"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth"); @@ -6688,11 +6715,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 6692 "MachineIndependent/glslang_tab.cpp" +#line 6719 "MachineIndependent/glslang_tab.cpp" break; case 139: /* interpolation_qualifier: FLAT */ -#line 1261 "MachineIndependent/glslang.y" +#line 1262 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "flat"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat"); @@ -6700,11 +6727,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 6704 "MachineIndependent/glslang_tab.cpp" +#line 6731 "MachineIndependent/glslang_tab.cpp" break; case 140: /* interpolation_qualifier: NOPERSPECTIVE */ -#line 1268 "MachineIndependent/glslang.y" +#line 1269 "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"); @@ -6712,11 +6739,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 6716 "MachineIndependent/glslang_tab.cpp" +#line 6743 "MachineIndependent/glslang_tab.cpp" break; case 141: /* interpolation_qualifier: EXPLICITINTERPAMD */ -#line 1275 "MachineIndependent/glslang.y" +#line 1276 "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"); @@ -6724,11 +6751,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 6728 "MachineIndependent/glslang_tab.cpp" +#line 6755 "MachineIndependent/glslang_tab.cpp" break; case 142: /* interpolation_qualifier: PERVERTEXNV */ -#line 1282 "MachineIndependent/glslang.y" +#line 1283 "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"); @@ -6737,11 +6764,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 6741 "MachineIndependent/glslang_tab.cpp" +#line 6768 "MachineIndependent/glslang_tab.cpp" break; case 143: /* interpolation_qualifier: PERVERTEXEXT */ -#line 1290 "MachineIndependent/glslang.y" +#line 1291 "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"); @@ -6750,11 +6777,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexEXT = true; } -#line 6754 "MachineIndependent/glslang_tab.cpp" +#line 6781 "MachineIndependent/glslang_tab.cpp" break; case 144: /* interpolation_qualifier: PERPRIMITIVENV */ -#line 1298 "MachineIndependent/glslang.y" +#line 1299 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV"); @@ -6765,11 +6792,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 6769 "MachineIndependent/glslang_tab.cpp" +#line 6796 "MachineIndependent/glslang_tab.cpp" break; case 145: /* interpolation_qualifier: PERPRIMITIVEEXT */ -#line 1308 "MachineIndependent/glslang.y" +#line 1309 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveEXT"); @@ -6780,11 +6807,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 6784 "MachineIndependent/glslang_tab.cpp" +#line 6811 "MachineIndependent/glslang_tab.cpp" break; case 146: /* interpolation_qualifier: PERVIEWNV */ -#line 1318 "MachineIndependent/glslang.y" +#line 1319 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV"); @@ -6792,11 +6819,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 6796 "MachineIndependent/glslang_tab.cpp" +#line 6823 "MachineIndependent/glslang_tab.cpp" break; case 147: /* interpolation_qualifier: PERTASKNV */ -#line 1325 "MachineIndependent/glslang.y" +#line 1326 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV"); @@ -6804,84 +6831,84 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 6808 "MachineIndependent/glslang_tab.cpp" +#line 6835 "MachineIndependent/glslang_tab.cpp" break; case 148: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ -#line 1335 "MachineIndependent/glslang.y" +#line 1336 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 6816 "MachineIndependent/glslang_tab.cpp" +#line 6843 "MachineIndependent/glslang_tab.cpp" break; case 149: /* layout_qualifier_id_list: layout_qualifier_id */ -#line 1341 "MachineIndependent/glslang.y" +#line 1342 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6824 "MachineIndependent/glslang_tab.cpp" +#line 6851 "MachineIndependent/glslang_tab.cpp" break; case 150: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ -#line 1344 "MachineIndependent/glslang.y" +#line 1345 "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 6834 "MachineIndependent/glslang_tab.cpp" +#line 6861 "MachineIndependent/glslang_tab.cpp" break; case 151: /* layout_qualifier_id: IDENTIFIER */ -#line 1351 "MachineIndependent/glslang.y" +#line 1352 "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 6843 "MachineIndependent/glslang_tab.cpp" +#line 6870 "MachineIndependent/glslang_tab.cpp" break; case 152: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ -#line 1355 "MachineIndependent/glslang.y" +#line 1356 "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 6852 "MachineIndependent/glslang_tab.cpp" +#line 6879 "MachineIndependent/glslang_tab.cpp" break; case 153: /* layout_qualifier_id: SHARED */ -#line 1359 "MachineIndependent/glslang.y" +#line 1360 "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 6862 "MachineIndependent/glslang_tab.cpp" +#line 6889 "MachineIndependent/glslang_tab.cpp" break; case 154: /* precise_qualifier: PRECISE */ -#line 1367 "MachineIndependent/glslang.y" +#line 1368 "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 6873 "MachineIndependent/glslang_tab.cpp" +#line 6900 "MachineIndependent/glslang_tab.cpp" break; case 155: /* type_qualifier: single_type_qualifier */ -#line 1376 "MachineIndependent/glslang.y" +#line 1377 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6881 "MachineIndependent/glslang_tab.cpp" +#line 6908 "MachineIndependent/glslang_tab.cpp" break; case 156: /* type_qualifier: type_qualifier single_type_qualifier */ -#line 1379 "MachineIndependent/glslang.y" +#line 1380 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -6890,151 +6917,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 6894 "MachineIndependent/glslang_tab.cpp" +#line 6921 "MachineIndependent/glslang_tab.cpp" break; case 157: /* single_type_qualifier: storage_qualifier */ -#line 1390 "MachineIndependent/glslang.y" +#line 1391 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6902 "MachineIndependent/glslang_tab.cpp" +#line 6929 "MachineIndependent/glslang_tab.cpp" break; case 158: /* single_type_qualifier: layout_qualifier */ -#line 1393 "MachineIndependent/glslang.y" +#line 1394 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6910 "MachineIndependent/glslang_tab.cpp" - break; - - case 159: /* single_type_qualifier: precision_qualifier */ -#line 1396 "MachineIndependent/glslang.y" - { - parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); - (yyval.interm.type) = (yyvsp[0].interm.type); - } -#line 6919 "MachineIndependent/glslang_tab.cpp" - break; - - case 160: /* single_type_qualifier: interpolation_qualifier */ -#line 1400 "MachineIndependent/glslang.y" - { - // allow inheritance of storage qualifier from block declaration - (yyval.interm.type) = (yyvsp[0].interm.type); - } -#line 6928 "MachineIndependent/glslang_tab.cpp" - break; - - case 161: /* single_type_qualifier: invariant_qualifier */ -#line 1404 "MachineIndependent/glslang.y" - { - // allow inheritance of storage qualifier from block declaration - (yyval.interm.type) = (yyvsp[0].interm.type); - } #line 6937 "MachineIndependent/glslang_tab.cpp" break; - case 162: /* single_type_qualifier: precise_qualifier */ -#line 1408 "MachineIndependent/glslang.y" - { - // allow inheritance of storage qualifier from block declaration + case 159: /* single_type_qualifier: precision_qualifier */ +#line 1397 "MachineIndependent/glslang.y" + { + parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } #line 6946 "MachineIndependent/glslang_tab.cpp" break; - case 163: /* single_type_qualifier: non_uniform_qualifier */ -#line 1412 "MachineIndependent/glslang.y" - { + case 160: /* single_type_qualifier: interpolation_qualifier */ +#line 1401 "MachineIndependent/glslang.y" + { + // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6954 "MachineIndependent/glslang_tab.cpp" +#line 6955 "MachineIndependent/glslang_tab.cpp" break; - case 164: /* single_type_qualifier: spirv_storage_class_qualifier */ -#line 1415 "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"); + case 161: /* single_type_qualifier: invariant_qualifier */ +#line 1405 "MachineIndependent/glslang.y" + { + // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } #line 6964 "MachineIndependent/glslang_tab.cpp" break; - case 165: /* single_type_qualifier: spirv_decorate_qualifier */ -#line 1420 "MachineIndependent/glslang.y" - { - parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier"); + case 162: /* single_type_qualifier: precise_qualifier */ +#line 1409 "MachineIndependent/glslang.y" + { + // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } #line 6973 "MachineIndependent/glslang_tab.cpp" break; + case 163: /* single_type_qualifier: non_uniform_qualifier */ +#line 1413 "MachineIndependent/glslang.y" + { + (yyval.interm.type) = (yyvsp[0].interm.type); + } +#line 6981 "MachineIndependent/glslang_tab.cpp" + break; + + case 164: /* single_type_qualifier: spirv_storage_class_qualifier */ +#line 1416 "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 6991 "MachineIndependent/glslang_tab.cpp" + break; + + case 165: /* single_type_qualifier: spirv_decorate_qualifier */ +#line 1421 "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 7000 "MachineIndependent/glslang_tab.cpp" + break; + case 166: /* single_type_qualifier: SPIRV_BY_REFERENCE */ -#line 1424 "MachineIndependent/glslang.y" +#line 1425 "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 6983 "MachineIndependent/glslang_tab.cpp" +#line 7010 "MachineIndependent/glslang_tab.cpp" break; case 167: /* single_type_qualifier: SPIRV_LITERAL */ -#line 1429 "MachineIndependent/glslang.y" +#line 1430 "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 6993 "MachineIndependent/glslang_tab.cpp" +#line 7020 "MachineIndependent/glslang_tab.cpp" break; case 168: /* storage_qualifier: CONST */ -#line 1437 "MachineIndependent/glslang.y" +#line 1438 "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 7002 "MachineIndependent/glslang_tab.cpp" +#line 7029 "MachineIndependent/glslang_tab.cpp" break; case 169: /* storage_qualifier: INOUT */ -#line 1441 "MachineIndependent/glslang.y" +#line 1442 "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 7012 "MachineIndependent/glslang_tab.cpp" +#line 7039 "MachineIndependent/glslang_tab.cpp" break; case 170: /* storage_qualifier: IN */ -#line 1446 "MachineIndependent/glslang.y" +#line 1447 "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 7023 "MachineIndependent/glslang_tab.cpp" +#line 7050 "MachineIndependent/glslang_tab.cpp" break; case 171: /* storage_qualifier: OUT */ -#line 1452 "MachineIndependent/glslang.y" +#line 1453 "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 7034 "MachineIndependent/glslang_tab.cpp" +#line 7061 "MachineIndependent/glslang_tab.cpp" break; case 172: /* storage_qualifier: CENTROID */ -#line 1458 "MachineIndependent/glslang.y" +#line 1459 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); @@ -7042,31 +7069,31 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 7046 "MachineIndependent/glslang_tab.cpp" +#line 7073 "MachineIndependent/glslang_tab.cpp" break; case 173: /* storage_qualifier: UNIFORM */ -#line 1465 "MachineIndependent/glslang.y" +#line 1466 "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 7056 "MachineIndependent/glslang_tab.cpp" +#line 7083 "MachineIndependent/glslang_tab.cpp" break; case 174: /* storage_qualifier: TILEIMAGEEXT */ -#line 1470 "MachineIndependent/glslang.y" +#line 1471 "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 7066 "MachineIndependent/glslang_tab.cpp" +#line 7093 "MachineIndependent/glslang_tab.cpp" break; case 175: /* storage_qualifier: SHARED */ -#line 1475 "MachineIndependent/glslang.y" +#line 1476 "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"); @@ -7075,21 +7102,21 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 7079 "MachineIndependent/glslang_tab.cpp" +#line 7106 "MachineIndependent/glslang_tab.cpp" break; case 176: /* storage_qualifier: BUFFER */ -#line 1483 "MachineIndependent/glslang.y" +#line 1484 "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 7089 "MachineIndependent/glslang_tab.cpp" +#line 7116 "MachineIndependent/glslang_tab.cpp" break; case 177: /* storage_qualifier: ATTRIBUTE */ -#line 1488 "MachineIndependent/glslang.y" +#line 1489 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); @@ -7102,11 +7129,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 7106 "MachineIndependent/glslang_tab.cpp" +#line 7133 "MachineIndependent/glslang_tab.cpp" break; case 178: /* storage_qualifier: VARYING */ -#line 1500 "MachineIndependent/glslang.y" +#line 1501 "MachineIndependent/glslang.y" { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); @@ -7121,32 +7148,32 @@ yyreduce: else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 7125 "MachineIndependent/glslang_tab.cpp" +#line 7152 "MachineIndependent/glslang_tab.cpp" break; case 179: /* storage_qualifier: PATCH */ -#line 1514 "MachineIndependent/glslang.y" +#line 1515 "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 7136 "MachineIndependent/glslang_tab.cpp" +#line 7163 "MachineIndependent/glslang_tab.cpp" break; case 180: /* storage_qualifier: SAMPLE */ -#line 1520 "MachineIndependent/glslang.y" +#line 1521 "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 7146 "MachineIndependent/glslang_tab.cpp" +#line 7173 "MachineIndependent/glslang_tab.cpp" break; case 181: /* storage_qualifier: HITATTRNV */ -#line 1525 "MachineIndependent/glslang.y" +#line 1526 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -7155,11 +7182,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 7159 "MachineIndependent/glslang_tab.cpp" +#line 7186 "MachineIndependent/glslang_tab.cpp" break; case 182: /* storage_qualifier: HITOBJECTATTRNV */ -#line 1533 "MachineIndependent/glslang.y" +#line 1534 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask @@ -7168,11 +7195,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitObjectAttrNV; } -#line 7172 "MachineIndependent/glslang_tab.cpp" +#line 7199 "MachineIndependent/glslang_tab.cpp" break; case 183: /* storage_qualifier: HITATTREXT */ -#line 1541 "MachineIndependent/glslang.y" +#line 1542 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -7181,11 +7208,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 7185 "MachineIndependent/glslang_tab.cpp" +#line 7212 "MachineIndependent/glslang_tab.cpp" break; case 184: /* storage_qualifier: PAYLOADNV */ -#line 1549 "MachineIndependent/glslang.y" +#line 1550 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -7194,11 +7221,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 7198 "MachineIndependent/glslang_tab.cpp" +#line 7225 "MachineIndependent/glslang_tab.cpp" break; case 185: /* storage_qualifier: PAYLOADEXT */ -#line 1557 "MachineIndependent/glslang.y" +#line 1558 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -7207,11 +7234,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 7211 "MachineIndependent/glslang_tab.cpp" +#line 7238 "MachineIndependent/glslang_tab.cpp" break; case 186: /* storage_qualifier: PAYLOADINNV */ -#line 1565 "MachineIndependent/glslang.y" +#line 1566 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -7220,11 +7247,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 7224 "MachineIndependent/glslang_tab.cpp" +#line 7251 "MachineIndependent/glslang_tab.cpp" break; case 187: /* storage_qualifier: PAYLOADINEXT */ -#line 1573 "MachineIndependent/glslang.y" +#line 1574 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -7233,11 +7260,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 7237 "MachineIndependent/glslang_tab.cpp" +#line 7264 "MachineIndependent/glslang_tab.cpp" break; case 188: /* storage_qualifier: CALLDATANV */ -#line 1581 "MachineIndependent/glslang.y" +#line 1582 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -7246,11 +7273,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 7250 "MachineIndependent/glslang_tab.cpp" +#line 7277 "MachineIndependent/glslang_tab.cpp" break; case 189: /* storage_qualifier: CALLDATAEXT */ -#line 1589 "MachineIndependent/glslang.y" +#line 1590 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -7259,11 +7286,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 7263 "MachineIndependent/glslang_tab.cpp" +#line 7290 "MachineIndependent/glslang_tab.cpp" break; case 190: /* storage_qualifier: CALLDATAINNV */ -#line 1597 "MachineIndependent/glslang.y" +#line 1598 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); @@ -7271,11 +7298,11 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 7275 "MachineIndependent/glslang_tab.cpp" +#line 7302 "MachineIndependent/glslang_tab.cpp" break; case 191: /* storage_qualifier: CALLDATAINEXT */ -#line 1604 "MachineIndependent/glslang.y" +#line 1605 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); @@ -7283,147 +7310,147 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 7287 "MachineIndependent/glslang_tab.cpp" +#line 7314 "MachineIndependent/glslang_tab.cpp" break; case 192: /* storage_qualifier: COHERENT */ -#line 1611 "MachineIndependent/glslang.y" +#line 1612 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 7296 "MachineIndependent/glslang_tab.cpp" +#line 7323 "MachineIndependent/glslang_tab.cpp" break; case 193: /* storage_qualifier: DEVICECOHERENT */ -#line 1615 "MachineIndependent/glslang.y" +#line 1616 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 7306 "MachineIndependent/glslang_tab.cpp" +#line 7333 "MachineIndependent/glslang_tab.cpp" break; case 194: /* storage_qualifier: QUEUEFAMILYCOHERENT */ -#line 1620 "MachineIndependent/glslang.y" +#line 1621 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 7316 "MachineIndependent/glslang_tab.cpp" +#line 7343 "MachineIndependent/glslang_tab.cpp" break; case 195: /* storage_qualifier: WORKGROUPCOHERENT */ -#line 1625 "MachineIndependent/glslang.y" +#line 1626 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 7326 "MachineIndependent/glslang_tab.cpp" +#line 7353 "MachineIndependent/glslang_tab.cpp" break; case 196: /* storage_qualifier: SUBGROUPCOHERENT */ -#line 1630 "MachineIndependent/glslang.y" +#line 1631 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 7336 "MachineIndependent/glslang_tab.cpp" +#line 7363 "MachineIndependent/glslang_tab.cpp" break; case 197: /* storage_qualifier: NONPRIVATE */ -#line 1635 "MachineIndependent/glslang.y" +#line 1636 "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 7346 "MachineIndependent/glslang_tab.cpp" +#line 7373 "MachineIndependent/glslang_tab.cpp" break; case 198: /* storage_qualifier: SHADERCALLCOHERENT */ -#line 1640 "MachineIndependent/glslang.y" +#line 1641 "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 7356 "MachineIndependent/glslang_tab.cpp" +#line 7383 "MachineIndependent/glslang_tab.cpp" break; case 199: /* storage_qualifier: VOLATILE */ -#line 1645 "MachineIndependent/glslang.y" +#line 1646 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 7365 "MachineIndependent/glslang_tab.cpp" +#line 7392 "MachineIndependent/glslang_tab.cpp" break; case 200: /* storage_qualifier: RESTRICT */ -#line 1649 "MachineIndependent/glslang.y" +#line 1650 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 7374 "MachineIndependent/glslang_tab.cpp" +#line 7401 "MachineIndependent/glslang_tab.cpp" break; case 201: /* storage_qualifier: READONLY */ -#line 1653 "MachineIndependent/glslang.y" +#line 1654 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 7383 "MachineIndependent/glslang_tab.cpp" +#line 7410 "MachineIndependent/glslang_tab.cpp" break; case 202: /* storage_qualifier: WRITEONLY */ -#line 1657 "MachineIndependent/glslang.y" +#line 1658 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 7392 "MachineIndependent/glslang_tab.cpp" +#line 7419 "MachineIndependent/glslang_tab.cpp" break; case 203: /* storage_qualifier: NONTEMPORAL */ -#line 1661 "MachineIndependent/glslang.y" +#line 1662 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nontemporal = true; } -#line 7401 "MachineIndependent/glslang_tab.cpp" +#line 7428 "MachineIndependent/glslang_tab.cpp" break; case 204: /* storage_qualifier: SUBROUTINE */ -#line 1665 "MachineIndependent/glslang.y" +#line 1666 "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 7412 "MachineIndependent/glslang_tab.cpp" +#line 7439 "MachineIndependent/glslang_tab.cpp" break; case 205: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ -#line 1671 "MachineIndependent/glslang.y" +#line 1672 "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 7423 "MachineIndependent/glslang_tab.cpp" +#line 7450 "MachineIndependent/glslang_tab.cpp" break; case 206: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT */ -#line 1677 "MachineIndependent/glslang.y" +#line 1678 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskPayloadSharedEXT"); @@ -7431,38 +7458,38 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqtaskPayloadSharedEXT; } -#line 7435 "MachineIndependent/glslang_tab.cpp" +#line 7462 "MachineIndependent/glslang_tab.cpp" break; case 207: /* non_uniform_qualifier: NONUNIFORM */ -#line 1687 "MachineIndependent/glslang.y" +#line 1688 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 7444 "MachineIndependent/glslang_tab.cpp" +#line 7471 "MachineIndependent/glslang_tab.cpp" break; case 208: /* type_name_list: IDENTIFIER */ -#line 1694 "MachineIndependent/glslang.y" +#line 1695 "MachineIndependent/glslang.y" { // TODO } -#line 7452 "MachineIndependent/glslang_tab.cpp" +#line 7479 "MachineIndependent/glslang_tab.cpp" break; case 209: /* type_name_list: type_name_list COMMA IDENTIFIER */ -#line 1697 "MachineIndependent/glslang.y" +#line 1698 "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 7462 "MachineIndependent/glslang_tab.cpp" +#line 7489 "MachineIndependent/glslang_tab.cpp" break; case 210: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ -#line 1705 "MachineIndependent/glslang.y" +#line 1706 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); @@ -7470,11 +7497,11 @@ yyreduce: parseContext.typeParametersCheck((yyvsp[-1].interm.type).loc, (yyval.interm.type)); } -#line 7474 "MachineIndependent/glslang_tab.cpp" +#line 7501 "MachineIndependent/glslang_tab.cpp" break; case 211: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ -#line 1712 "MachineIndependent/glslang.y" +#line 1713 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); @@ -7483,21 +7510,21 @@ yyreduce: (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; parseContext.typeParametersCheck((yyvsp[-2].interm.type).loc, (yyval.interm.type)); } -#line 7487 "MachineIndependent/glslang_tab.cpp" +#line 7514 "MachineIndependent/glslang_tab.cpp" break; case 212: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ -#line 1723 "MachineIndependent/glslang.y" +#line 1724 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 7497 "MachineIndependent/glslang_tab.cpp" +#line 7524 "MachineIndependent/glslang_tab.cpp" break; case 213: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1728 "MachineIndependent/glslang.y" +#line 1729 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -7506,20 +7533,20 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 7510 "MachineIndependent/glslang_tab.cpp" +#line 7537 "MachineIndependent/glslang_tab.cpp" break; case 214: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ -#line 1736 "MachineIndependent/glslang.y" +#line 1737 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 7519 "MachineIndependent/glslang_tab.cpp" +#line 7546 "MachineIndependent/glslang_tab.cpp" break; case 215: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1740 "MachineIndependent/glslang.y" +#line 1741 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); @@ -7527,46 +7554,46 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 7531 "MachineIndependent/glslang_tab.cpp" +#line 7558 "MachineIndependent/glslang_tab.cpp" break; case 216: /* type_parameter_specifier_opt: type_parameter_specifier */ -#line 1750 "MachineIndependent/glslang.y" +#line 1751 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 7539 "MachineIndependent/glslang_tab.cpp" +#line 7566 "MachineIndependent/glslang_tab.cpp" break; case 217: /* type_parameter_specifier_opt: %empty */ -#line 1753 "MachineIndependent/glslang.y" +#line 1754 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = 0; } -#line 7547 "MachineIndependent/glslang_tab.cpp" +#line 7574 "MachineIndependent/glslang_tab.cpp" break; case 218: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ -#line 1759 "MachineIndependent/glslang.y" +#line 1760 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 7555 "MachineIndependent/glslang_tab.cpp" +#line 7582 "MachineIndependent/glslang_tab.cpp" break; case 219: /* type_parameter_specifier_list: type_specifier */ -#line 1765 "MachineIndependent/glslang.y" +#line 1766 "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 7566 "MachineIndependent/glslang_tab.cpp" +#line 7593 "MachineIndependent/glslang_tab.cpp" break; case 220: /* type_parameter_specifier_list: unary_expression */ -#line 1771 "MachineIndependent/glslang.y" +#line 1772 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = new TTypeParameters; (yyval.interm.typeParameters)->arraySizes = new TArraySizes; @@ -7575,11 +7602,11 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true); (yyval.interm.typeParameters)->arraySizes->addInnerSize(size); } -#line 7579 "MachineIndependent/glslang_tab.cpp" +#line 7606 "MachineIndependent/glslang_tab.cpp" break; case 221: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ -#line 1779 "MachineIndependent/glslang.y" +#line 1780 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); @@ -7587,300 +7614,300 @@ yyreduce: parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true); (yyval.interm.typeParameters)->arraySizes->addInnerSize(size); } -#line 7591 "MachineIndependent/glslang_tab.cpp" +#line 7618 "MachineIndependent/glslang_tab.cpp" break; case 222: /* type_specifier_nonarray: VOID */ -#line 1789 "MachineIndependent/glslang.y" +#line 1790 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 7600 "MachineIndependent/glslang_tab.cpp" +#line 7627 "MachineIndependent/glslang_tab.cpp" break; case 223: /* type_specifier_nonarray: FLOAT */ -#line 1793 "MachineIndependent/glslang.y" +#line 1794 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7609 "MachineIndependent/glslang_tab.cpp" +#line 7636 "MachineIndependent/glslang_tab.cpp" break; case 224: /* type_specifier_nonarray: INT */ -#line 1797 "MachineIndependent/glslang.y" +#line 1798 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7618 "MachineIndependent/glslang_tab.cpp" +#line 7645 "MachineIndependent/glslang_tab.cpp" break; case 225: /* type_specifier_nonarray: UINT */ -#line 1801 "MachineIndependent/glslang.y" +#line 1802 "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 7628 "MachineIndependent/glslang_tab.cpp" +#line 7655 "MachineIndependent/glslang_tab.cpp" break; case 226: /* type_specifier_nonarray: BOOL */ -#line 1806 "MachineIndependent/glslang.y" +#line 1807 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 7637 "MachineIndependent/glslang_tab.cpp" +#line 7664 "MachineIndependent/glslang_tab.cpp" break; case 227: /* type_specifier_nonarray: VEC2 */ -#line 1810 "MachineIndependent/glslang.y" +#line 1811 "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 7647 "MachineIndependent/glslang_tab.cpp" +#line 7674 "MachineIndependent/glslang_tab.cpp" break; case 228: /* type_specifier_nonarray: VEC3 */ -#line 1815 "MachineIndependent/glslang.y" +#line 1816 "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 7657 "MachineIndependent/glslang_tab.cpp" +#line 7684 "MachineIndependent/glslang_tab.cpp" break; case 229: /* type_specifier_nonarray: VEC4 */ -#line 1820 "MachineIndependent/glslang.y" +#line 1821 "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 7667 "MachineIndependent/glslang_tab.cpp" +#line 7694 "MachineIndependent/glslang_tab.cpp" break; case 230: /* type_specifier_nonarray: BVEC2 */ -#line 1825 "MachineIndependent/glslang.y" +#line 1826 "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 7677 "MachineIndependent/glslang_tab.cpp" +#line 7704 "MachineIndependent/glslang_tab.cpp" break; case 231: /* type_specifier_nonarray: BVEC3 */ -#line 1830 "MachineIndependent/glslang.y" +#line 1831 "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 7687 "MachineIndependent/glslang_tab.cpp" +#line 7714 "MachineIndependent/glslang_tab.cpp" break; case 232: /* type_specifier_nonarray: BVEC4 */ -#line 1835 "MachineIndependent/glslang.y" +#line 1836 "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 7697 "MachineIndependent/glslang_tab.cpp" +#line 7724 "MachineIndependent/glslang_tab.cpp" break; case 233: /* type_specifier_nonarray: IVEC2 */ -#line 1840 "MachineIndependent/glslang.y" +#line 1841 "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 7707 "MachineIndependent/glslang_tab.cpp" +#line 7734 "MachineIndependent/glslang_tab.cpp" break; case 234: /* type_specifier_nonarray: IVEC3 */ -#line 1845 "MachineIndependent/glslang.y" +#line 1846 "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 7717 "MachineIndependent/glslang_tab.cpp" +#line 7744 "MachineIndependent/glslang_tab.cpp" break; case 235: /* type_specifier_nonarray: IVEC4 */ -#line 1850 "MachineIndependent/glslang.y" +#line 1851 "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 7727 "MachineIndependent/glslang_tab.cpp" +#line 7754 "MachineIndependent/glslang_tab.cpp" break; case 236: /* type_specifier_nonarray: UVEC2 */ -#line 1855 "MachineIndependent/glslang.y" +#line 1856 "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 7738 "MachineIndependent/glslang_tab.cpp" +#line 7765 "MachineIndependent/glslang_tab.cpp" break; case 237: /* type_specifier_nonarray: UVEC3 */ -#line 1861 "MachineIndependent/glslang.y" +#line 1862 "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 7749 "MachineIndependent/glslang_tab.cpp" +#line 7776 "MachineIndependent/glslang_tab.cpp" break; case 238: /* type_specifier_nonarray: UVEC4 */ -#line 1867 "MachineIndependent/glslang.y" +#line 1868 "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 7760 "MachineIndependent/glslang_tab.cpp" +#line 7787 "MachineIndependent/glslang_tab.cpp" break; case 239: /* type_specifier_nonarray: MAT2 */ -#line 1873 "MachineIndependent/glslang.y" +#line 1874 "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 7770 "MachineIndependent/glslang_tab.cpp" +#line 7797 "MachineIndependent/glslang_tab.cpp" break; case 240: /* type_specifier_nonarray: MAT3 */ -#line 1878 "MachineIndependent/glslang.y" +#line 1879 "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 7780 "MachineIndependent/glslang_tab.cpp" +#line 7807 "MachineIndependent/glslang_tab.cpp" break; case 241: /* type_specifier_nonarray: MAT4 */ -#line 1883 "MachineIndependent/glslang.y" +#line 1884 "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 7790 "MachineIndependent/glslang_tab.cpp" +#line 7817 "MachineIndependent/glslang_tab.cpp" break; case 242: /* type_specifier_nonarray: MAT2X2 */ -#line 1888 "MachineIndependent/glslang.y" +#line 1889 "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 7800 "MachineIndependent/glslang_tab.cpp" +#line 7827 "MachineIndependent/glslang_tab.cpp" break; case 243: /* type_specifier_nonarray: MAT2X3 */ -#line 1893 "MachineIndependent/glslang.y" +#line 1894 "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 7810 "MachineIndependent/glslang_tab.cpp" +#line 7837 "MachineIndependent/glslang_tab.cpp" break; case 244: /* type_specifier_nonarray: MAT2X4 */ -#line 1898 "MachineIndependent/glslang.y" +#line 1899 "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 7820 "MachineIndependent/glslang_tab.cpp" +#line 7847 "MachineIndependent/glslang_tab.cpp" break; case 245: /* type_specifier_nonarray: MAT3X2 */ -#line 1903 "MachineIndependent/glslang.y" +#line 1904 "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 7830 "MachineIndependent/glslang_tab.cpp" +#line 7857 "MachineIndependent/glslang_tab.cpp" break; case 246: /* type_specifier_nonarray: MAT3X3 */ -#line 1908 "MachineIndependent/glslang.y" +#line 1909 "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 7840 "MachineIndependent/glslang_tab.cpp" +#line 7867 "MachineIndependent/glslang_tab.cpp" break; case 247: /* type_specifier_nonarray: MAT3X4 */ -#line 1913 "MachineIndependent/glslang.y" +#line 1914 "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 7850 "MachineIndependent/glslang_tab.cpp" +#line 7877 "MachineIndependent/glslang_tab.cpp" break; case 248: /* type_specifier_nonarray: MAT4X2 */ -#line 1918 "MachineIndependent/glslang.y" +#line 1919 "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 7860 "MachineIndependent/glslang_tab.cpp" +#line 7887 "MachineIndependent/glslang_tab.cpp" break; case 249: /* type_specifier_nonarray: MAT4X3 */ -#line 1923 "MachineIndependent/glslang.y" +#line 1924 "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 7870 "MachineIndependent/glslang_tab.cpp" +#line 7897 "MachineIndependent/glslang_tab.cpp" break; case 250: /* type_specifier_nonarray: MAT4X4 */ -#line 1928 "MachineIndependent/glslang.y" +#line 1929 "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 7880 "MachineIndependent/glslang_tab.cpp" +#line 7907 "MachineIndependent/glslang_tab.cpp" break; case 251: /* type_specifier_nonarray: DOUBLE */ -#line 1933 "MachineIndependent/glslang.y" +#line 1934 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7888,121 +7915,131 @@ yyreduce: (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7892 "MachineIndependent/glslang_tab.cpp" +#line 7919 "MachineIndependent/glslang_tab.cpp" break; - case 252: /* type_specifier_nonarray: FLOAT16_T */ -#line 1940 "MachineIndependent/glslang.y" + case 252: /* type_specifier_nonarray: BFLOAT16_T */ +#line 1941 "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 7929 "MachineIndependent/glslang_tab.cpp" + break; + + case 253: /* type_specifier_nonarray: FLOAT16_T */ +#line 1946 "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 7902 "MachineIndependent/glslang_tab.cpp" +#line 7939 "MachineIndependent/glslang_tab.cpp" break; - case 253: /* type_specifier_nonarray: FLOAT32_T */ -#line 1945 "MachineIndependent/glslang.y" + case 254: /* type_specifier_nonarray: FLOAT32_T */ +#line 1951 "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 7912 "MachineIndependent/glslang_tab.cpp" +#line 7949 "MachineIndependent/glslang_tab.cpp" break; - case 254: /* type_specifier_nonarray: FLOAT64_T */ -#line 1950 "MachineIndependent/glslang.y" + case 255: /* type_specifier_nonarray: FLOAT64_T */ +#line 1956 "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 7922 "MachineIndependent/glslang_tab.cpp" +#line 7959 "MachineIndependent/glslang_tab.cpp" break; - case 255: /* type_specifier_nonarray: INT8_T */ -#line 1955 "MachineIndependent/glslang.y" + case 256: /* type_specifier_nonarray: INT8_T */ +#line 1961 "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 7932 "MachineIndependent/glslang_tab.cpp" +#line 7969 "MachineIndependent/glslang_tab.cpp" break; - case 256: /* type_specifier_nonarray: UINT8_T */ -#line 1960 "MachineIndependent/glslang.y" + case 257: /* type_specifier_nonarray: UINT8_T */ +#line 1966 "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 7942 "MachineIndependent/glslang_tab.cpp" +#line 7979 "MachineIndependent/glslang_tab.cpp" break; - case 257: /* type_specifier_nonarray: INT16_T */ -#line 1965 "MachineIndependent/glslang.y" + case 258: /* type_specifier_nonarray: INT16_T */ +#line 1971 "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 7952 "MachineIndependent/glslang_tab.cpp" +#line 7989 "MachineIndependent/glslang_tab.cpp" break; - case 258: /* type_specifier_nonarray: UINT16_T */ -#line 1970 "MachineIndependent/glslang.y" + case 259: /* type_specifier_nonarray: UINT16_T */ +#line 1976 "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 7962 "MachineIndependent/glslang_tab.cpp" +#line 7999 "MachineIndependent/glslang_tab.cpp" break; - case 259: /* type_specifier_nonarray: INT32_T */ -#line 1975 "MachineIndependent/glslang.y" + case 260: /* type_specifier_nonarray: INT32_T */ +#line 1981 "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 7972 "MachineIndependent/glslang_tab.cpp" +#line 8009 "MachineIndependent/glslang_tab.cpp" break; - case 260: /* type_specifier_nonarray: UINT32_T */ -#line 1980 "MachineIndependent/glslang.y" + case 261: /* type_specifier_nonarray: UINT32_T */ +#line 1986 "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 7982 "MachineIndependent/glslang_tab.cpp" +#line 8019 "MachineIndependent/glslang_tab.cpp" break; - case 261: /* type_specifier_nonarray: INT64_T */ -#line 1985 "MachineIndependent/glslang.y" + case 262: /* type_specifier_nonarray: INT64_T */ +#line 1991 "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 7992 "MachineIndependent/glslang_tab.cpp" +#line 8029 "MachineIndependent/glslang_tab.cpp" break; - case 262: /* type_specifier_nonarray: UINT64_T */ -#line 1990 "MachineIndependent/glslang.y" + case 263: /* type_specifier_nonarray: UINT64_T */ +#line 1996 "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 8002 "MachineIndependent/glslang_tab.cpp" +#line 8039 "MachineIndependent/glslang_tab.cpp" break; - case 263: /* type_specifier_nonarray: DVEC2 */ -#line 1995 "MachineIndependent/glslang.y" + case 264: /* type_specifier_nonarray: DVEC2 */ +#line 2001 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8011,400 +8048,433 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 8015 "MachineIndependent/glslang_tab.cpp" - break; - - case 264: /* type_specifier_nonarray: DVEC3 */ -#line 2003 "MachineIndependent/glslang.y" - { - parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector"); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtDouble; - (yyval.interm.type).setVector(3); - } -#line 8028 "MachineIndependent/glslang_tab.cpp" - break; - - case 265: /* type_specifier_nonarray: DVEC4 */ -#line 2011 "MachineIndependent/glslang.y" - { - parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); - if (! parseContext.symbolTable.atBuiltInLevel()) - parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector"); - (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtDouble; - (yyval.interm.type).setVector(4); - } -#line 8041 "MachineIndependent/glslang_tab.cpp" - break; - - case 266: /* type_specifier_nonarray: F16VEC2 */ -#line 2019 "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 8052 "MachineIndependent/glslang_tab.cpp" break; - case 267: /* type_specifier_nonarray: F16VEC3 */ -#line 2025 "MachineIndependent/glslang.y" - { - parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); + case 265: /* type_specifier_nonarray: DVEC3 */ +#line 2009 "MachineIndependent/glslang.y" + { + parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); + if (! parseContext.symbolTable.atBuiltInLevel()) + parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 8063 "MachineIndependent/glslang_tab.cpp" +#line 8065 "MachineIndependent/glslang_tab.cpp" break; - case 268: /* type_specifier_nonarray: F16VEC4 */ -#line 2031 "MachineIndependent/glslang.y" - { - parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); + case 266: /* type_specifier_nonarray: DVEC4 */ +#line 2017 "MachineIndependent/glslang.y" + { + parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); + if (! parseContext.symbolTable.atBuiltInLevel()) + parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); - (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 8074 "MachineIndependent/glslang_tab.cpp" +#line 8078 "MachineIndependent/glslang_tab.cpp" break; - case 269: /* type_specifier_nonarray: F32VEC2 */ -#line 2037 "MachineIndependent/glslang.y" - { - parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); + case 267: /* type_specifier_nonarray: BF16VEC2 */ +#line 2025 "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 = EbtFloat; + (yyval.interm.type).basicType = EbtBFloat16; (yyval.interm.type).setVector(2); } -#line 8085 "MachineIndependent/glslang_tab.cpp" +#line 8089 "MachineIndependent/glslang_tab.cpp" break; - case 270: /* type_specifier_nonarray: F32VEC3 */ + case 268: /* type_specifier_nonarray: BF16VEC3 */ +#line 2031 "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 8100 "MachineIndependent/glslang_tab.cpp" + break; + + case 269: /* type_specifier_nonarray: BF16VEC4 */ +#line 2037 "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 8111 "MachineIndependent/glslang_tab.cpp" + break; + + case 270: /* type_specifier_nonarray: F16VEC2 */ #line 2043 "MachineIndependent/glslang.y" { - parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); + 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 = EbtFloat; - (yyval.interm.type).setVector(3); + (yyval.interm.type).basicType = EbtFloat16; + (yyval.interm.type).setVector(2); } -#line 8096 "MachineIndependent/glslang_tab.cpp" +#line 8122 "MachineIndependent/glslang_tab.cpp" break; - case 271: /* type_specifier_nonarray: F32VEC4 */ + case 271: /* type_specifier_nonarray: F16VEC3 */ #line 2049 "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 8133 "MachineIndependent/glslang_tab.cpp" + break; + + case 272: /* type_specifier_nonarray: F16VEC4 */ +#line 2055 "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 8144 "MachineIndependent/glslang_tab.cpp" + break; + + case 273: /* type_specifier_nonarray: F32VEC2 */ +#line 2061 "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 8155 "MachineIndependent/glslang_tab.cpp" + break; + + case 274: /* type_specifier_nonarray: F32VEC3 */ +#line 2067 "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 8166 "MachineIndependent/glslang_tab.cpp" + break; + + case 275: /* type_specifier_nonarray: F32VEC4 */ +#line 2073 "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 8107 "MachineIndependent/glslang_tab.cpp" +#line 8177 "MachineIndependent/glslang_tab.cpp" break; - case 272: /* type_specifier_nonarray: F64VEC2 */ -#line 2055 "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 8118 "MachineIndependent/glslang_tab.cpp" - break; - - case 273: /* type_specifier_nonarray: F64VEC3 */ -#line 2061 "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 8129 "MachineIndependent/glslang_tab.cpp" - break; - - case 274: /* type_specifier_nonarray: F64VEC4 */ -#line 2067 "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 8140 "MachineIndependent/glslang_tab.cpp" - break; - - case 275: /* type_specifier_nonarray: I8VEC2 */ -#line 2073 "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 8151 "MachineIndependent/glslang_tab.cpp" - break; - - case 276: /* type_specifier_nonarray: I8VEC3 */ + case 276: /* type_specifier_nonarray: F64VEC2 */ #line 2079 "MachineIndependent/glslang.y" - { - parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); + { + 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 = EbtInt8; + (yyval.interm.type).basicType = EbtDouble; + (yyval.interm.type).setVector(2); + } +#line 8188 "MachineIndependent/glslang_tab.cpp" + break; + + case 277: /* type_specifier_nonarray: F64VEC3 */ +#line 2085 "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 8162 "MachineIndependent/glslang_tab.cpp" +#line 8199 "MachineIndependent/glslang_tab.cpp" break; - case 277: /* type_specifier_nonarray: I8VEC4 */ -#line 2085 "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 8173 "MachineIndependent/glslang_tab.cpp" - break; - - case 278: /* type_specifier_nonarray: I16VEC2 */ + case 278: /* type_specifier_nonarray: F64VEC4 */ #line 2091 "MachineIndependent/glslang.y" { - parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); + 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 = EbtInt16; - (yyval.interm.type).setVector(2); - } -#line 8184 "MachineIndependent/glslang_tab.cpp" - break; - - case 279: /* type_specifier_nonarray: I16VEC3 */ -#line 2097 "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 8195 "MachineIndependent/glslang_tab.cpp" - break; - - case 280: /* type_specifier_nonarray: I16VEC4 */ -#line 2103 "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).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 8206 "MachineIndependent/glslang_tab.cpp" +#line 8210 "MachineIndependent/glslang_tab.cpp" break; - case 281: /* type_specifier_nonarray: I32VEC2 */ -#line 2109 "MachineIndependent/glslang.y" - { - parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); + case 279: /* type_specifier_nonarray: I8VEC2 */ +#line 2097 "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 = EbtInt; + (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 8217 "MachineIndependent/glslang_tab.cpp" +#line 8221 "MachineIndependent/glslang_tab.cpp" break; - case 282: /* type_specifier_nonarray: I32VEC3 */ + case 280: /* type_specifier_nonarray: I8VEC3 */ +#line 2103 "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 8232 "MachineIndependent/glslang_tab.cpp" + break; + + case 281: /* type_specifier_nonarray: I8VEC4 */ +#line 2109 "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 8243 "MachineIndependent/glslang_tab.cpp" + break; + + case 282: /* type_specifier_nonarray: I16VEC2 */ #line 2115 "MachineIndependent/glslang.y" { - parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); + 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 = EbtInt; - (yyval.interm.type).setVector(3); + (yyval.interm.type).basicType = EbtInt16; + (yyval.interm.type).setVector(2); } -#line 8228 "MachineIndependent/glslang_tab.cpp" +#line 8254 "MachineIndependent/glslang_tab.cpp" break; - case 283: /* type_specifier_nonarray: I32VEC4 */ + case 283: /* type_specifier_nonarray: I16VEC3 */ #line 2121 "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 8265 "MachineIndependent/glslang_tab.cpp" + break; + + case 284: /* type_specifier_nonarray: I16VEC4 */ +#line 2127 "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 8276 "MachineIndependent/glslang_tab.cpp" + break; + + case 285: /* type_specifier_nonarray: I32VEC2 */ +#line 2133 "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 8287 "MachineIndependent/glslang_tab.cpp" + break; + + case 286: /* type_specifier_nonarray: I32VEC3 */ +#line 2139 "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 8298 "MachineIndependent/glslang_tab.cpp" + break; + + case 287: /* type_specifier_nonarray: I32VEC4 */ +#line 2145 "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 8239 "MachineIndependent/glslang_tab.cpp" +#line 8309 "MachineIndependent/glslang_tab.cpp" break; - case 284: /* type_specifier_nonarray: I64VEC2 */ -#line 2127 "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 8250 "MachineIndependent/glslang_tab.cpp" - break; - - case 285: /* type_specifier_nonarray: I64VEC3 */ -#line 2133 "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 8261 "MachineIndependent/glslang_tab.cpp" - break; - - case 286: /* type_specifier_nonarray: I64VEC4 */ -#line 2139 "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 8272 "MachineIndependent/glslang_tab.cpp" - break; - - case 287: /* type_specifier_nonarray: U8VEC2 */ -#line 2145 "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 8283 "MachineIndependent/glslang_tab.cpp" - break; - - case 288: /* type_specifier_nonarray: U8VEC3 */ + case 288: /* type_specifier_nonarray: I64VEC2 */ #line 2151 "MachineIndependent/glslang.y" - { - parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); + { + 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 = EbtUint8; + (yyval.interm.type).basicType = EbtInt64; + (yyval.interm.type).setVector(2); + } +#line 8320 "MachineIndependent/glslang_tab.cpp" + break; + + case 289: /* type_specifier_nonarray: I64VEC3 */ +#line 2157 "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 8294 "MachineIndependent/glslang_tab.cpp" +#line 8331 "MachineIndependent/glslang_tab.cpp" break; - case 289: /* type_specifier_nonarray: U8VEC4 */ -#line 2157 "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 8305 "MachineIndependent/glslang_tab.cpp" - break; - - case 290: /* type_specifier_nonarray: U16VEC2 */ + case 290: /* type_specifier_nonarray: I64VEC4 */ #line 2163 "MachineIndependent/glslang.y" { - parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); + 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 = EbtUint16; - (yyval.interm.type).setVector(2); - } -#line 8316 "MachineIndependent/glslang_tab.cpp" - break; - - case 291: /* type_specifier_nonarray: U16VEC3 */ -#line 2169 "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 8327 "MachineIndependent/glslang_tab.cpp" - break; - - case 292: /* type_specifier_nonarray: U16VEC4 */ -#line 2175 "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).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 8338 "MachineIndependent/glslang_tab.cpp" +#line 8342 "MachineIndependent/glslang_tab.cpp" break; - case 293: /* type_specifier_nonarray: U32VEC2 */ -#line 2181 "MachineIndependent/glslang.y" - { - parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); + case 291: /* type_specifier_nonarray: U8VEC2 */ +#line 2169 "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 = EbtUint; + (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 8349 "MachineIndependent/glslang_tab.cpp" +#line 8353 "MachineIndependent/glslang_tab.cpp" break; - case 294: /* type_specifier_nonarray: U32VEC3 */ + case 292: /* type_specifier_nonarray: U8VEC3 */ +#line 2175 "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 8364 "MachineIndependent/glslang_tab.cpp" + break; + + case 293: /* type_specifier_nonarray: U8VEC4 */ +#line 2181 "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 8375 "MachineIndependent/glslang_tab.cpp" + break; + + case 294: /* type_specifier_nonarray: U16VEC2 */ #line 2187 "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 8386 "MachineIndependent/glslang_tab.cpp" + break; + + case 295: /* type_specifier_nonarray: U16VEC3 */ +#line 2193 "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 8397 "MachineIndependent/glslang_tab.cpp" + break; + + case 296: /* type_specifier_nonarray: U16VEC4 */ +#line 2199 "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 8408 "MachineIndependent/glslang_tab.cpp" + break; + + case 297: /* type_specifier_nonarray: U32VEC2 */ +#line 2205 "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 8419 "MachineIndependent/glslang_tab.cpp" + break; + + case 298: /* type_specifier_nonarray: U32VEC3 */ +#line 2211 "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 8360 "MachineIndependent/glslang_tab.cpp" +#line 8430 "MachineIndependent/glslang_tab.cpp" break; - case 295: /* type_specifier_nonarray: U32VEC4 */ -#line 2193 "MachineIndependent/glslang.y" + case 299: /* type_specifier_nonarray: U32VEC4 */ +#line 2217 "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 8371 "MachineIndependent/glslang_tab.cpp" +#line 8441 "MachineIndependent/glslang_tab.cpp" break; - case 296: /* type_specifier_nonarray: U64VEC2 */ -#line 2199 "MachineIndependent/glslang.y" + case 300: /* type_specifier_nonarray: U64VEC2 */ +#line 2223 "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 8382 "MachineIndependent/glslang_tab.cpp" +#line 8452 "MachineIndependent/glslang_tab.cpp" break; - case 297: /* type_specifier_nonarray: U64VEC3 */ -#line 2205 "MachineIndependent/glslang.y" + case 301: /* type_specifier_nonarray: U64VEC3 */ +#line 2229 "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 8393 "MachineIndependent/glslang_tab.cpp" +#line 8463 "MachineIndependent/glslang_tab.cpp" break; - case 298: /* type_specifier_nonarray: U64VEC4 */ -#line 2211 "MachineIndependent/glslang.y" + case 302: /* type_specifier_nonarray: U64VEC4 */ +#line 2235 "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 8404 "MachineIndependent/glslang_tab.cpp" +#line 8474 "MachineIndependent/glslang_tab.cpp" break; - case 299: /* type_specifier_nonarray: DMAT2 */ -#line 2217 "MachineIndependent/glslang.y" + case 303: /* type_specifier_nonarray: DMAT2 */ +#line 2241 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8413,11 +8483,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8417 "MachineIndependent/glslang_tab.cpp" +#line 8487 "MachineIndependent/glslang_tab.cpp" break; - case 300: /* type_specifier_nonarray: DMAT3 */ -#line 2225 "MachineIndependent/glslang.y" + case 304: /* type_specifier_nonarray: DMAT3 */ +#line 2249 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8426,11 +8496,11 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8430 "MachineIndependent/glslang_tab.cpp" +#line 8500 "MachineIndependent/glslang_tab.cpp" break; - case 301: /* type_specifier_nonarray: DMAT4 */ -#line 2233 "MachineIndependent/glslang.y" + case 305: /* type_specifier_nonarray: DMAT4 */ +#line 2257 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8439,49 +8509,10 @@ yyreduce: (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8443 "MachineIndependent/glslang_tab.cpp" +#line 8513 "MachineIndependent/glslang_tab.cpp" break; - case 302: /* type_specifier_nonarray: DMAT2X2 */ -#line 2241 "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 8456 "MachineIndependent/glslang_tab.cpp" - break; - - case 303: /* type_specifier_nonarray: DMAT2X3 */ -#line 2249 "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, 3); - } -#line 8469 "MachineIndependent/glslang_tab.cpp" - break; - - case 304: /* type_specifier_nonarray: DMAT2X4 */ -#line 2257 "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, 4); - } -#line 8482 "MachineIndependent/glslang_tab.cpp" - break; - - case 305: /* type_specifier_nonarray: DMAT3X2 */ + case 306: /* type_specifier_nonarray: DMAT2X2 */ #line 2265 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); @@ -8489,12 +8520,12 @@ yyreduce: 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, 2); + (yyval.interm.type).setMatrix(2, 2); } -#line 8495 "MachineIndependent/glslang_tab.cpp" +#line 8526 "MachineIndependent/glslang_tab.cpp" break; - case 306: /* type_specifier_nonarray: DMAT3X3 */ + case 307: /* type_specifier_nonarray: DMAT2X3 */ #line 2273 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); @@ -8502,12 +8533,12 @@ yyreduce: 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); + (yyval.interm.type).setMatrix(2, 3); } -#line 8508 "MachineIndependent/glslang_tab.cpp" +#line 8539 "MachineIndependent/glslang_tab.cpp" break; - case 307: /* type_specifier_nonarray: DMAT3X4 */ + case 308: /* type_specifier_nonarray: DMAT2X4 */ #line 2281 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); @@ -8515,12 +8546,12 @@ yyreduce: 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, 4); + (yyval.interm.type).setMatrix(2, 4); } -#line 8521 "MachineIndependent/glslang_tab.cpp" +#line 8552 "MachineIndependent/glslang_tab.cpp" break; - case 308: /* type_specifier_nonarray: DMAT4X2 */ + case 309: /* type_specifier_nonarray: DMAT3X2 */ #line 2289 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); @@ -8528,12 +8559,12 @@ yyreduce: 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, 2); + (yyval.interm.type).setMatrix(3, 2); } -#line 8534 "MachineIndependent/glslang_tab.cpp" +#line 8565 "MachineIndependent/glslang_tab.cpp" break; - case 309: /* type_specifier_nonarray: DMAT4X3 */ + case 310: /* type_specifier_nonarray: DMAT3X3 */ #line 2297 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); @@ -8541,12 +8572,12 @@ yyreduce: 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, 3); + (yyval.interm.type).setMatrix(3, 3); } -#line 8547 "MachineIndependent/glslang_tab.cpp" +#line 8578 "MachineIndependent/glslang_tab.cpp" break; - case 310: /* type_specifier_nonarray: DMAT4X4 */ + case 311: /* type_specifier_nonarray: DMAT3X4 */ #line 2305 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); @@ -8554,2263 +8585,2302 @@ yyreduce: 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, 4); + } +#line 8591 "MachineIndependent/glslang_tab.cpp" + break; + + case 312: /* type_specifier_nonarray: DMAT4X2 */ +#line 2313 "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, 2); + } +#line 8604 "MachineIndependent/glslang_tab.cpp" + break; + + case 313: /* type_specifier_nonarray: DMAT4X3 */ +#line 2321 "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, 3); + } +#line 8617 "MachineIndependent/glslang_tab.cpp" + break; + + case 314: /* type_specifier_nonarray: DMAT4X4 */ +#line 2329 "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 8560 "MachineIndependent/glslang_tab.cpp" +#line 8630 "MachineIndependent/glslang_tab.cpp" break; - case 311: /* type_specifier_nonarray: F16MAT2 */ -#line 2313 "MachineIndependent/glslang.y" + case 315: /* type_specifier_nonarray: F16MAT2 */ +#line 2337 "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 8571 "MachineIndependent/glslang_tab.cpp" +#line 8641 "MachineIndependent/glslang_tab.cpp" break; - case 312: /* type_specifier_nonarray: F16MAT3 */ -#line 2319 "MachineIndependent/glslang.y" + case 316: /* type_specifier_nonarray: F16MAT3 */ +#line 2343 "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 8582 "MachineIndependent/glslang_tab.cpp" +#line 8652 "MachineIndependent/glslang_tab.cpp" break; - case 313: /* type_specifier_nonarray: F16MAT4 */ -#line 2325 "MachineIndependent/glslang.y" + case 317: /* type_specifier_nonarray: F16MAT4 */ +#line 2349 "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 8593 "MachineIndependent/glslang_tab.cpp" +#line 8663 "MachineIndependent/glslang_tab.cpp" break; - case 314: /* type_specifier_nonarray: F16MAT2X2 */ -#line 2331 "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 8604 "MachineIndependent/glslang_tab.cpp" - break; - - case 315: /* type_specifier_nonarray: F16MAT2X3 */ -#line 2337 "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 8615 "MachineIndependent/glslang_tab.cpp" - break; - - case 316: /* type_specifier_nonarray: F16MAT2X4 */ -#line 2343 "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 8626 "MachineIndependent/glslang_tab.cpp" - break; - - case 317: /* type_specifier_nonarray: F16MAT3X2 */ -#line 2349 "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 8637 "MachineIndependent/glslang_tab.cpp" - break; - - case 318: /* type_specifier_nonarray: F16MAT3X3 */ + case 318: /* type_specifier_nonarray: F16MAT2X2 */ #line 2355 "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); + (yyval.interm.type).setMatrix(2, 2); } -#line 8648 "MachineIndependent/glslang_tab.cpp" +#line 8674 "MachineIndependent/glslang_tab.cpp" break; - case 319: /* type_specifier_nonarray: F16MAT3X4 */ + case 319: /* type_specifier_nonarray: F16MAT2X3 */ #line 2361 "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); + (yyval.interm.type).setMatrix(2, 3); } -#line 8659 "MachineIndependent/glslang_tab.cpp" +#line 8685 "MachineIndependent/glslang_tab.cpp" break; - case 320: /* type_specifier_nonarray: F16MAT4X2 */ + case 320: /* type_specifier_nonarray: F16MAT2X4 */ #line 2367 "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); + (yyval.interm.type).setMatrix(2, 4); } -#line 8670 "MachineIndependent/glslang_tab.cpp" +#line 8696 "MachineIndependent/glslang_tab.cpp" break; - case 321: /* type_specifier_nonarray: F16MAT4X3 */ + case 321: /* type_specifier_nonarray: F16MAT3X2 */ #line 2373 "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); + (yyval.interm.type).setMatrix(3, 2); } -#line 8681 "MachineIndependent/glslang_tab.cpp" +#line 8707 "MachineIndependent/glslang_tab.cpp" break; - case 322: /* type_specifier_nonarray: F16MAT4X4 */ + case 322: /* type_specifier_nonarray: F16MAT3X3 */ #line 2379 "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 8718 "MachineIndependent/glslang_tab.cpp" + break; + + case 323: /* type_specifier_nonarray: F16MAT3X4 */ +#line 2385 "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 8729 "MachineIndependent/glslang_tab.cpp" + break; + + case 324: /* type_specifier_nonarray: F16MAT4X2 */ +#line 2391 "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 8740 "MachineIndependent/glslang_tab.cpp" + break; + + case 325: /* type_specifier_nonarray: F16MAT4X3 */ +#line 2397 "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 8751 "MachineIndependent/glslang_tab.cpp" + break; + + case 326: /* type_specifier_nonarray: F16MAT4X4 */ +#line 2403 "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 8692 "MachineIndependent/glslang_tab.cpp" +#line 8762 "MachineIndependent/glslang_tab.cpp" break; - case 323: /* type_specifier_nonarray: F32MAT2 */ -#line 2385 "MachineIndependent/glslang.y" + case 327: /* type_specifier_nonarray: F32MAT2 */ +#line 2409 "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 8703 "MachineIndependent/glslang_tab.cpp" +#line 8773 "MachineIndependent/glslang_tab.cpp" break; - case 324: /* type_specifier_nonarray: F32MAT3 */ -#line 2391 "MachineIndependent/glslang.y" + case 328: /* type_specifier_nonarray: F32MAT3 */ +#line 2415 "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 8714 "MachineIndependent/glslang_tab.cpp" +#line 8784 "MachineIndependent/glslang_tab.cpp" break; - case 325: /* type_specifier_nonarray: F32MAT4 */ -#line 2397 "MachineIndependent/glslang.y" + case 329: /* type_specifier_nonarray: F32MAT4 */ +#line 2421 "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 8725 "MachineIndependent/glslang_tab.cpp" +#line 8795 "MachineIndependent/glslang_tab.cpp" break; - case 326: /* type_specifier_nonarray: F32MAT2X2 */ -#line 2403 "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 8736 "MachineIndependent/glslang_tab.cpp" - break; - - case 327: /* type_specifier_nonarray: F32MAT2X3 */ -#line 2409 "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 8747 "MachineIndependent/glslang_tab.cpp" - break; - - case 328: /* type_specifier_nonarray: F32MAT2X4 */ -#line 2415 "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 8758 "MachineIndependent/glslang_tab.cpp" - break; - - case 329: /* type_specifier_nonarray: F32MAT3X2 */ -#line 2421 "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 8769 "MachineIndependent/glslang_tab.cpp" - break; - - case 330: /* type_specifier_nonarray: F32MAT3X3 */ + case 330: /* type_specifier_nonarray: F32MAT2X2 */ #line 2427 "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); + (yyval.interm.type).setMatrix(2, 2); } -#line 8780 "MachineIndependent/glslang_tab.cpp" +#line 8806 "MachineIndependent/glslang_tab.cpp" break; - case 331: /* type_specifier_nonarray: F32MAT3X4 */ + case 331: /* type_specifier_nonarray: F32MAT2X3 */ #line 2433 "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 8817 "MachineIndependent/glslang_tab.cpp" + break; + + case 332: /* type_specifier_nonarray: F32MAT2X4 */ +#line 2439 "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 8828 "MachineIndependent/glslang_tab.cpp" + break; + + case 333: /* type_specifier_nonarray: F32MAT3X2 */ +#line 2445 "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 8839 "MachineIndependent/glslang_tab.cpp" + break; + + case 334: /* type_specifier_nonarray: F32MAT3X3 */ +#line 2451 "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 8850 "MachineIndependent/glslang_tab.cpp" + break; + + case 335: /* type_specifier_nonarray: F32MAT3X4 */ +#line 2457 "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 8791 "MachineIndependent/glslang_tab.cpp" +#line 8861 "MachineIndependent/glslang_tab.cpp" break; - case 332: /* type_specifier_nonarray: F32MAT4X2 */ -#line 2439 "MachineIndependent/glslang.y" + case 336: /* type_specifier_nonarray: F32MAT4X2 */ +#line 2463 "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 8802 "MachineIndependent/glslang_tab.cpp" +#line 8872 "MachineIndependent/glslang_tab.cpp" break; - case 333: /* type_specifier_nonarray: F32MAT4X3 */ -#line 2445 "MachineIndependent/glslang.y" + case 337: /* type_specifier_nonarray: F32MAT4X3 */ +#line 2469 "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 8813 "MachineIndependent/glslang_tab.cpp" +#line 8883 "MachineIndependent/glslang_tab.cpp" break; - case 334: /* type_specifier_nonarray: F32MAT4X4 */ -#line 2451 "MachineIndependent/glslang.y" + case 338: /* type_specifier_nonarray: F32MAT4X4 */ +#line 2475 "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 8824 "MachineIndependent/glslang_tab.cpp" +#line 8894 "MachineIndependent/glslang_tab.cpp" break; - case 335: /* type_specifier_nonarray: F64MAT2 */ -#line 2457 "MachineIndependent/glslang.y" + case 339: /* type_specifier_nonarray: F64MAT2 */ +#line 2481 "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 8835 "MachineIndependent/glslang_tab.cpp" +#line 8905 "MachineIndependent/glslang_tab.cpp" break; - case 336: /* type_specifier_nonarray: F64MAT3 */ -#line 2463 "MachineIndependent/glslang.y" + case 340: /* type_specifier_nonarray: F64MAT3 */ +#line 2487 "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 8846 "MachineIndependent/glslang_tab.cpp" +#line 8916 "MachineIndependent/glslang_tab.cpp" break; - case 337: /* type_specifier_nonarray: F64MAT4 */ -#line 2469 "MachineIndependent/glslang.y" + case 341: /* type_specifier_nonarray: F64MAT4 */ +#line 2493 "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 8857 "MachineIndependent/glslang_tab.cpp" +#line 8927 "MachineIndependent/glslang_tab.cpp" break; - case 338: /* type_specifier_nonarray: F64MAT2X2 */ -#line 2475 "MachineIndependent/glslang.y" + case 342: /* type_specifier_nonarray: F64MAT2X2 */ +#line 2499 "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 8868 "MachineIndependent/glslang_tab.cpp" +#line 8938 "MachineIndependent/glslang_tab.cpp" break; - case 339: /* type_specifier_nonarray: F64MAT2X3 */ -#line 2481 "MachineIndependent/glslang.y" + case 343: /* type_specifier_nonarray: F64MAT2X3 */ +#line 2505 "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 8879 "MachineIndependent/glslang_tab.cpp" +#line 8949 "MachineIndependent/glslang_tab.cpp" break; - case 340: /* type_specifier_nonarray: F64MAT2X4 */ -#line 2487 "MachineIndependent/glslang.y" + case 344: /* type_specifier_nonarray: F64MAT2X4 */ +#line 2511 "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 8890 "MachineIndependent/glslang_tab.cpp" +#line 8960 "MachineIndependent/glslang_tab.cpp" break; - case 341: /* type_specifier_nonarray: F64MAT3X2 */ -#line 2493 "MachineIndependent/glslang.y" + case 345: /* type_specifier_nonarray: F64MAT3X2 */ +#line 2517 "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 8901 "MachineIndependent/glslang_tab.cpp" +#line 8971 "MachineIndependent/glslang_tab.cpp" break; - case 342: /* type_specifier_nonarray: F64MAT3X3 */ -#line 2499 "MachineIndependent/glslang.y" + case 346: /* type_specifier_nonarray: F64MAT3X3 */ +#line 2523 "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 8912 "MachineIndependent/glslang_tab.cpp" +#line 8982 "MachineIndependent/glslang_tab.cpp" break; - case 343: /* type_specifier_nonarray: F64MAT3X4 */ -#line 2505 "MachineIndependent/glslang.y" + case 347: /* type_specifier_nonarray: F64MAT3X4 */ +#line 2529 "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 8923 "MachineIndependent/glslang_tab.cpp" +#line 8993 "MachineIndependent/glslang_tab.cpp" break; - case 344: /* type_specifier_nonarray: F64MAT4X2 */ -#line 2511 "MachineIndependent/glslang.y" + case 348: /* type_specifier_nonarray: F64MAT4X2 */ +#line 2535 "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 8934 "MachineIndependent/glslang_tab.cpp" +#line 9004 "MachineIndependent/glslang_tab.cpp" break; - case 345: /* type_specifier_nonarray: F64MAT4X3 */ -#line 2517 "MachineIndependent/glslang.y" + case 349: /* type_specifier_nonarray: F64MAT4X3 */ +#line 2541 "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 8945 "MachineIndependent/glslang_tab.cpp" +#line 9015 "MachineIndependent/glslang_tab.cpp" break; - case 346: /* type_specifier_nonarray: F64MAT4X4 */ -#line 2523 "MachineIndependent/glslang.y" + case 350: /* type_specifier_nonarray: F64MAT4X4 */ +#line 2547 "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 8956 "MachineIndependent/glslang_tab.cpp" +#line 9026 "MachineIndependent/glslang_tab.cpp" break; - case 347: /* type_specifier_nonarray: ACCSTRUCTNV */ -#line 2529 "MachineIndependent/glslang.y" + case 351: /* type_specifier_nonarray: ACCSTRUCTNV */ +#line 2553 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8965 "MachineIndependent/glslang_tab.cpp" +#line 9035 "MachineIndependent/glslang_tab.cpp" break; - case 348: /* type_specifier_nonarray: ACCSTRUCTEXT */ -#line 2533 "MachineIndependent/glslang.y" + case 352: /* type_specifier_nonarray: ACCSTRUCTEXT */ +#line 2557 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8974 "MachineIndependent/glslang_tab.cpp" +#line 9044 "MachineIndependent/glslang_tab.cpp" break; - case 349: /* type_specifier_nonarray: RAYQUERYEXT */ -#line 2537 "MachineIndependent/glslang.y" + case 353: /* type_specifier_nonarray: RAYQUERYEXT */ +#line 2561 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 8983 "MachineIndependent/glslang_tab.cpp" +#line 9053 "MachineIndependent/glslang_tab.cpp" break; - case 350: /* type_specifier_nonarray: ATOMIC_UINT */ -#line 2541 "MachineIndependent/glslang.y" + case 354: /* type_specifier_nonarray: ATOMIC_UINT */ +#line 2565 "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 8993 "MachineIndependent/glslang_tab.cpp" +#line 9063 "MachineIndependent/glslang_tab.cpp" break; - case 351: /* type_specifier_nonarray: SAMPLER1D */ -#line 2546 "MachineIndependent/glslang.y" + case 355: /* type_specifier_nonarray: SAMPLER1D */ +#line 2570 "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 9003 "MachineIndependent/glslang_tab.cpp" +#line 9073 "MachineIndependent/glslang_tab.cpp" break; - case 352: /* type_specifier_nonarray: SAMPLER2D */ -#line 2551 "MachineIndependent/glslang.y" + case 356: /* type_specifier_nonarray: SAMPLER2D */ +#line 2575 "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 9013 "MachineIndependent/glslang_tab.cpp" +#line 9083 "MachineIndependent/glslang_tab.cpp" break; - case 353: /* type_specifier_nonarray: SAMPLER3D */ -#line 2556 "MachineIndependent/glslang.y" + case 357: /* type_specifier_nonarray: SAMPLER3D */ +#line 2580 "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 9023 "MachineIndependent/glslang_tab.cpp" +#line 9093 "MachineIndependent/glslang_tab.cpp" break; - case 354: /* type_specifier_nonarray: SAMPLERCUBE */ -#line 2561 "MachineIndependent/glslang.y" + case 358: /* type_specifier_nonarray: SAMPLERCUBE */ +#line 2585 "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 9033 "MachineIndependent/glslang_tab.cpp" +#line 9103 "MachineIndependent/glslang_tab.cpp" break; - case 355: /* type_specifier_nonarray: SAMPLER2DSHADOW */ -#line 2566 "MachineIndependent/glslang.y" + case 359: /* type_specifier_nonarray: SAMPLER2DSHADOW */ +#line 2590 "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 9043 "MachineIndependent/glslang_tab.cpp" +#line 9113 "MachineIndependent/glslang_tab.cpp" break; - case 356: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ -#line 2571 "MachineIndependent/glslang.y" + case 360: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ +#line 2595 "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 9053 "MachineIndependent/glslang_tab.cpp" +#line 9123 "MachineIndependent/glslang_tab.cpp" break; - case 357: /* type_specifier_nonarray: SAMPLER2DARRAY */ -#line 2576 "MachineIndependent/glslang.y" + case 361: /* type_specifier_nonarray: SAMPLER2DARRAY */ +#line 2600 "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 9063 "MachineIndependent/glslang_tab.cpp" +#line 9133 "MachineIndependent/glslang_tab.cpp" break; - case 358: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ -#line 2581 "MachineIndependent/glslang.y" + case 362: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ +#line 2605 "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 9073 "MachineIndependent/glslang_tab.cpp" +#line 9143 "MachineIndependent/glslang_tab.cpp" break; - case 359: /* type_specifier_nonarray: SAMPLER1DSHADOW */ -#line 2586 "MachineIndependent/glslang.y" + case 363: /* type_specifier_nonarray: SAMPLER1DSHADOW */ +#line 2610 "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 9083 "MachineIndependent/glslang_tab.cpp" +#line 9153 "MachineIndependent/glslang_tab.cpp" break; - case 360: /* type_specifier_nonarray: SAMPLER1DARRAY */ -#line 2591 "MachineIndependent/glslang.y" + case 364: /* type_specifier_nonarray: SAMPLER1DARRAY */ +#line 2615 "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 9093 "MachineIndependent/glslang_tab.cpp" +#line 9163 "MachineIndependent/glslang_tab.cpp" break; - case 361: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ -#line 2596 "MachineIndependent/glslang.y" + case 365: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ +#line 2620 "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 9103 "MachineIndependent/glslang_tab.cpp" +#line 9173 "MachineIndependent/glslang_tab.cpp" break; - case 362: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ -#line 2601 "MachineIndependent/glslang.y" + case 366: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ +#line 2625 "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 9113 "MachineIndependent/glslang_tab.cpp" +#line 9183 "MachineIndependent/glslang_tab.cpp" break; - case 363: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ -#line 2606 "MachineIndependent/glslang.y" + case 367: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ +#line 2630 "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 9123 "MachineIndependent/glslang_tab.cpp" +#line 9193 "MachineIndependent/glslang_tab.cpp" break; - case 364: /* type_specifier_nonarray: F16SAMPLER1D */ -#line 2611 "MachineIndependent/glslang.y" + case 368: /* type_specifier_nonarray: F16SAMPLER1D */ +#line 2635 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); } -#line 9134 "MachineIndependent/glslang_tab.cpp" +#line 9204 "MachineIndependent/glslang_tab.cpp" break; - case 365: /* type_specifier_nonarray: F16SAMPLER2D */ -#line 2617 "MachineIndependent/glslang.y" + case 369: /* type_specifier_nonarray: F16SAMPLER2D */ +#line 2641 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); } -#line 9145 "MachineIndependent/glslang_tab.cpp" +#line 9215 "MachineIndependent/glslang_tab.cpp" break; - case 366: /* type_specifier_nonarray: F16SAMPLER3D */ -#line 2623 "MachineIndependent/glslang.y" + case 370: /* type_specifier_nonarray: F16SAMPLER3D */ +#line 2647 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); } -#line 9156 "MachineIndependent/glslang_tab.cpp" +#line 9226 "MachineIndependent/glslang_tab.cpp" break; - case 367: /* type_specifier_nonarray: F16SAMPLERCUBE */ -#line 2629 "MachineIndependent/glslang.y" + case 371: /* type_specifier_nonarray: F16SAMPLERCUBE */ +#line 2653 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); } -#line 9167 "MachineIndependent/glslang_tab.cpp" +#line 9237 "MachineIndependent/glslang_tab.cpp" break; - case 368: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ -#line 2635 "MachineIndependent/glslang.y" + case 372: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ +#line 2659 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); } -#line 9178 "MachineIndependent/glslang_tab.cpp" +#line 9248 "MachineIndependent/glslang_tab.cpp" break; - case 369: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ -#line 2641 "MachineIndependent/glslang.y" + case 373: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ +#line 2665 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); } -#line 9189 "MachineIndependent/glslang_tab.cpp" +#line 9259 "MachineIndependent/glslang_tab.cpp" break; - case 370: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ -#line 2647 "MachineIndependent/glslang.y" + case 374: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ +#line 2671 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); } -#line 9200 "MachineIndependent/glslang_tab.cpp" +#line 9270 "MachineIndependent/glslang_tab.cpp" break; - case 371: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ -#line 2653 "MachineIndependent/glslang.y" + case 375: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ +#line 2677 "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 9211 "MachineIndependent/glslang_tab.cpp" +#line 9281 "MachineIndependent/glslang_tab.cpp" break; - case 372: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ -#line 2659 "MachineIndependent/glslang.y" + case 376: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ +#line 2683 "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 9222 "MachineIndependent/glslang_tab.cpp" +#line 9292 "MachineIndependent/glslang_tab.cpp" break; - case 373: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ -#line 2665 "MachineIndependent/glslang.y" + case 377: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ +#line 2689 "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 9233 "MachineIndependent/glslang_tab.cpp" +#line 9303 "MachineIndependent/glslang_tab.cpp" break; - case 374: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ -#line 2671 "MachineIndependent/glslang.y" + case 378: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ +#line 2695 "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 9244 "MachineIndependent/glslang_tab.cpp" +#line 9314 "MachineIndependent/glslang_tab.cpp" break; - case 375: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ -#line 2677 "MachineIndependent/glslang.y" + case 379: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ +#line 2701 "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 9255 "MachineIndependent/glslang_tab.cpp" +#line 9325 "MachineIndependent/glslang_tab.cpp" break; - case 376: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ -#line 2683 "MachineIndependent/glslang.y" + case 380: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ +#line 2707 "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 9266 "MachineIndependent/glslang_tab.cpp" +#line 9336 "MachineIndependent/glslang_tab.cpp" break; - case 377: /* type_specifier_nonarray: ISAMPLER1D */ -#line 2689 "MachineIndependent/glslang.y" + case 381: /* type_specifier_nonarray: ISAMPLER1D */ +#line 2713 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 9276 "MachineIndependent/glslang_tab.cpp" +#line 9346 "MachineIndependent/glslang_tab.cpp" break; - case 378: /* type_specifier_nonarray: ISAMPLER2D */ -#line 2694 "MachineIndependent/glslang.y" + case 382: /* type_specifier_nonarray: ISAMPLER2D */ +#line 2718 "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 9286 "MachineIndependent/glslang_tab.cpp" +#line 9356 "MachineIndependent/glslang_tab.cpp" break; - case 379: /* type_specifier_nonarray: ISAMPLER3D */ -#line 2699 "MachineIndependent/glslang.y" + case 383: /* type_specifier_nonarray: ISAMPLER3D */ +#line 2723 "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 9296 "MachineIndependent/glslang_tab.cpp" +#line 9366 "MachineIndependent/glslang_tab.cpp" break; - case 380: /* type_specifier_nonarray: ISAMPLERCUBE */ -#line 2704 "MachineIndependent/glslang.y" + case 384: /* type_specifier_nonarray: ISAMPLERCUBE */ +#line 2728 "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 9306 "MachineIndependent/glslang_tab.cpp" +#line 9376 "MachineIndependent/glslang_tab.cpp" break; - case 381: /* type_specifier_nonarray: ISAMPLER2DARRAY */ -#line 2709 "MachineIndependent/glslang.y" + case 385: /* type_specifier_nonarray: ISAMPLER2DARRAY */ +#line 2733 "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 9316 "MachineIndependent/glslang_tab.cpp" +#line 9386 "MachineIndependent/glslang_tab.cpp" break; - case 382: /* type_specifier_nonarray: USAMPLER2D */ -#line 2714 "MachineIndependent/glslang.y" + case 386: /* type_specifier_nonarray: USAMPLER2D */ +#line 2738 "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 9326 "MachineIndependent/glslang_tab.cpp" +#line 9396 "MachineIndependent/glslang_tab.cpp" break; - case 383: /* type_specifier_nonarray: USAMPLER3D */ -#line 2719 "MachineIndependent/glslang.y" + case 387: /* type_specifier_nonarray: USAMPLER3D */ +#line 2743 "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 9336 "MachineIndependent/glslang_tab.cpp" +#line 9406 "MachineIndependent/glslang_tab.cpp" break; - case 384: /* type_specifier_nonarray: USAMPLERCUBE */ -#line 2724 "MachineIndependent/glslang.y" + case 388: /* type_specifier_nonarray: USAMPLERCUBE */ +#line 2748 "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 9346 "MachineIndependent/glslang_tab.cpp" +#line 9416 "MachineIndependent/glslang_tab.cpp" break; - case 385: /* type_specifier_nonarray: ISAMPLER1DARRAY */ -#line 2729 "MachineIndependent/glslang.y" + case 389: /* type_specifier_nonarray: ISAMPLER1DARRAY */ +#line 2753 "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 9356 "MachineIndependent/glslang_tab.cpp" +#line 9426 "MachineIndependent/glslang_tab.cpp" break; - case 386: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ -#line 2734 "MachineIndependent/glslang.y" + case 390: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ +#line 2758 "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 9366 "MachineIndependent/glslang_tab.cpp" +#line 9436 "MachineIndependent/glslang_tab.cpp" break; - case 387: /* type_specifier_nonarray: USAMPLER1D */ -#line 2739 "MachineIndependent/glslang.y" + case 391: /* type_specifier_nonarray: USAMPLER1D */ +#line 2763 "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 9376 "MachineIndependent/glslang_tab.cpp" +#line 9446 "MachineIndependent/glslang_tab.cpp" break; - case 388: /* type_specifier_nonarray: USAMPLER1DARRAY */ -#line 2744 "MachineIndependent/glslang.y" + case 392: /* type_specifier_nonarray: USAMPLER1DARRAY */ +#line 2768 "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 9386 "MachineIndependent/glslang_tab.cpp" +#line 9456 "MachineIndependent/glslang_tab.cpp" break; - case 389: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ -#line 2749 "MachineIndependent/glslang.y" + case 393: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ +#line 2773 "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 9396 "MachineIndependent/glslang_tab.cpp" +#line 9466 "MachineIndependent/glslang_tab.cpp" break; - case 390: /* type_specifier_nonarray: TEXTURECUBEARRAY */ -#line 2754 "MachineIndependent/glslang.y" + case 394: /* type_specifier_nonarray: TEXTURECUBEARRAY */ +#line 2778 "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 9406 "MachineIndependent/glslang_tab.cpp" +#line 9476 "MachineIndependent/glslang_tab.cpp" break; - case 391: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ -#line 2759 "MachineIndependent/glslang.y" + case 395: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ +#line 2783 "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 9416 "MachineIndependent/glslang_tab.cpp" +#line 9486 "MachineIndependent/glslang_tab.cpp" break; - case 392: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ -#line 2764 "MachineIndependent/glslang.y" + case 396: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ +#line 2788 "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 9426 "MachineIndependent/glslang_tab.cpp" +#line 9496 "MachineIndependent/glslang_tab.cpp" break; - case 393: /* type_specifier_nonarray: USAMPLER2DARRAY */ -#line 2769 "MachineIndependent/glslang.y" + case 397: /* type_specifier_nonarray: USAMPLER2DARRAY */ +#line 2793 "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 9436 "MachineIndependent/glslang_tab.cpp" +#line 9506 "MachineIndependent/glslang_tab.cpp" break; - case 394: /* type_specifier_nonarray: TEXTURE2D */ -#line 2774 "MachineIndependent/glslang.y" + case 398: /* type_specifier_nonarray: TEXTURE2D */ +#line 2798 "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 9446 "MachineIndependent/glslang_tab.cpp" +#line 9516 "MachineIndependent/glslang_tab.cpp" break; - case 395: /* type_specifier_nonarray: TEXTURE3D */ -#line 2779 "MachineIndependent/glslang.y" + case 399: /* type_specifier_nonarray: TEXTURE3D */ +#line 2803 "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 9456 "MachineIndependent/glslang_tab.cpp" +#line 9526 "MachineIndependent/glslang_tab.cpp" break; - case 396: /* type_specifier_nonarray: TEXTURE2DARRAY */ -#line 2784 "MachineIndependent/glslang.y" + case 400: /* type_specifier_nonarray: TEXTURE2DARRAY */ +#line 2808 "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 9466 "MachineIndependent/glslang_tab.cpp" +#line 9536 "MachineIndependent/glslang_tab.cpp" break; - case 397: /* type_specifier_nonarray: TEXTURECUBE */ -#line 2789 "MachineIndependent/glslang.y" + case 401: /* type_specifier_nonarray: TEXTURECUBE */ +#line 2813 "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 9476 "MachineIndependent/glslang_tab.cpp" +#line 9546 "MachineIndependent/glslang_tab.cpp" break; - case 398: /* type_specifier_nonarray: ITEXTURE2D */ -#line 2794 "MachineIndependent/glslang.y" + case 402: /* type_specifier_nonarray: ITEXTURE2D */ +#line 2818 "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 9486 "MachineIndependent/glslang_tab.cpp" +#line 9556 "MachineIndependent/glslang_tab.cpp" break; - case 399: /* type_specifier_nonarray: ITEXTURE3D */ -#line 2799 "MachineIndependent/glslang.y" + case 403: /* type_specifier_nonarray: ITEXTURE3D */ +#line 2823 "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 9496 "MachineIndependent/glslang_tab.cpp" +#line 9566 "MachineIndependent/glslang_tab.cpp" break; - case 400: /* type_specifier_nonarray: ITEXTURECUBE */ -#line 2804 "MachineIndependent/glslang.y" + case 404: /* type_specifier_nonarray: ITEXTURECUBE */ +#line 2828 "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 9506 "MachineIndependent/glslang_tab.cpp" +#line 9576 "MachineIndependent/glslang_tab.cpp" break; - case 401: /* type_specifier_nonarray: ITEXTURE2DARRAY */ -#line 2809 "MachineIndependent/glslang.y" + case 405: /* type_specifier_nonarray: ITEXTURE2DARRAY */ +#line 2833 "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 9516 "MachineIndependent/glslang_tab.cpp" +#line 9586 "MachineIndependent/glslang_tab.cpp" break; - case 402: /* type_specifier_nonarray: UTEXTURE2D */ -#line 2814 "MachineIndependent/glslang.y" + case 406: /* type_specifier_nonarray: UTEXTURE2D */ +#line 2838 "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 9526 "MachineIndependent/glslang_tab.cpp" +#line 9596 "MachineIndependent/glslang_tab.cpp" break; - case 403: /* type_specifier_nonarray: UTEXTURE3D */ -#line 2819 "MachineIndependent/glslang.y" + case 407: /* type_specifier_nonarray: UTEXTURE3D */ +#line 2843 "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 9536 "MachineIndependent/glslang_tab.cpp" +#line 9606 "MachineIndependent/glslang_tab.cpp" break; - case 404: /* type_specifier_nonarray: UTEXTURECUBE */ -#line 2824 "MachineIndependent/glslang.y" + case 408: /* type_specifier_nonarray: UTEXTURECUBE */ +#line 2848 "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 9546 "MachineIndependent/glslang_tab.cpp" +#line 9616 "MachineIndependent/glslang_tab.cpp" break; - case 405: /* type_specifier_nonarray: UTEXTURE2DARRAY */ -#line 2829 "MachineIndependent/glslang.y" + case 409: /* type_specifier_nonarray: UTEXTURE2DARRAY */ +#line 2853 "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 9556 "MachineIndependent/glslang_tab.cpp" +#line 9626 "MachineIndependent/glslang_tab.cpp" break; - case 406: /* type_specifier_nonarray: SAMPLER */ -#line 2834 "MachineIndependent/glslang.y" + case 410: /* type_specifier_nonarray: SAMPLER */ +#line 2858 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 9566 "MachineIndependent/glslang_tab.cpp" +#line 9636 "MachineIndependent/glslang_tab.cpp" break; - case 407: /* type_specifier_nonarray: SAMPLERSHADOW */ -#line 2839 "MachineIndependent/glslang.y" + case 411: /* type_specifier_nonarray: SAMPLERSHADOW */ +#line 2863 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 9576 "MachineIndependent/glslang_tab.cpp" +#line 9646 "MachineIndependent/glslang_tab.cpp" break; - case 408: /* type_specifier_nonarray: SAMPLER2DRECT */ -#line 2844 "MachineIndependent/glslang.y" + case 412: /* type_specifier_nonarray: SAMPLER2DRECT */ +#line 2868 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 9586 "MachineIndependent/glslang_tab.cpp" +#line 9656 "MachineIndependent/glslang_tab.cpp" break; - case 409: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ -#line 2849 "MachineIndependent/glslang.y" + case 413: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ +#line 2873 "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 9596 "MachineIndependent/glslang_tab.cpp" +#line 9666 "MachineIndependent/glslang_tab.cpp" break; - case 410: /* type_specifier_nonarray: F16SAMPLER2DRECT */ -#line 2854 "MachineIndependent/glslang.y" + case 414: /* type_specifier_nonarray: F16SAMPLER2DRECT */ +#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, EsdRect); } -#line 9607 "MachineIndependent/glslang_tab.cpp" +#line 9677 "MachineIndependent/glslang_tab.cpp" break; - case 411: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ -#line 2860 "MachineIndependent/glslang.y" + case 415: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ +#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, EsdRect, false, true); } -#line 9618 "MachineIndependent/glslang_tab.cpp" +#line 9688 "MachineIndependent/glslang_tab.cpp" break; - case 412: /* type_specifier_nonarray: ISAMPLER2DRECT */ -#line 2866 "MachineIndependent/glslang.y" + case 416: /* type_specifier_nonarray: ISAMPLER2DRECT */ +#line 2890 "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 9628 "MachineIndependent/glslang_tab.cpp" +#line 9698 "MachineIndependent/glslang_tab.cpp" break; - case 413: /* type_specifier_nonarray: USAMPLER2DRECT */ -#line 2871 "MachineIndependent/glslang.y" + case 417: /* type_specifier_nonarray: USAMPLER2DRECT */ +#line 2895 "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 9638 "MachineIndependent/glslang_tab.cpp" +#line 9708 "MachineIndependent/glslang_tab.cpp" break; - case 414: /* type_specifier_nonarray: SAMPLERBUFFER */ -#line 2876 "MachineIndependent/glslang.y" + case 418: /* type_specifier_nonarray: SAMPLERBUFFER */ +#line 2900 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 9648 "MachineIndependent/glslang_tab.cpp" +#line 9718 "MachineIndependent/glslang_tab.cpp" break; - case 415: /* type_specifier_nonarray: F16SAMPLERBUFFER */ -#line 2881 "MachineIndependent/glslang.y" + case 419: /* type_specifier_nonarray: F16SAMPLERBUFFER */ +#line 2905 "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 9659 "MachineIndependent/glslang_tab.cpp" +#line 9729 "MachineIndependent/glslang_tab.cpp" break; - case 416: /* type_specifier_nonarray: ISAMPLERBUFFER */ -#line 2887 "MachineIndependent/glslang.y" + case 420: /* type_specifier_nonarray: ISAMPLERBUFFER */ +#line 2911 "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 9669 "MachineIndependent/glslang_tab.cpp" +#line 9739 "MachineIndependent/glslang_tab.cpp" break; - case 417: /* type_specifier_nonarray: USAMPLERBUFFER */ -#line 2892 "MachineIndependent/glslang.y" + case 421: /* type_specifier_nonarray: USAMPLERBUFFER */ +#line 2916 "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 9679 "MachineIndependent/glslang_tab.cpp" +#line 9749 "MachineIndependent/glslang_tab.cpp" break; - case 418: /* type_specifier_nonarray: SAMPLER2DMS */ -#line 2897 "MachineIndependent/glslang.y" + case 422: /* type_specifier_nonarray: SAMPLER2DMS */ +#line 2921 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 9689 "MachineIndependent/glslang_tab.cpp" +#line 9759 "MachineIndependent/glslang_tab.cpp" break; - case 419: /* type_specifier_nonarray: F16SAMPLER2DMS */ -#line 2902 "MachineIndependent/glslang.y" + case 423: /* type_specifier_nonarray: F16SAMPLER2DMS */ +#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, Esd2D, false, false, true); } -#line 9700 "MachineIndependent/glslang_tab.cpp" +#line 9770 "MachineIndependent/glslang_tab.cpp" break; - case 420: /* type_specifier_nonarray: ISAMPLER2DMS */ -#line 2908 "MachineIndependent/glslang.y" + case 424: /* type_specifier_nonarray: ISAMPLER2DMS */ +#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, Esd2D, false, false, true); } -#line 9710 "MachineIndependent/glslang_tab.cpp" +#line 9780 "MachineIndependent/glslang_tab.cpp" break; - case 421: /* type_specifier_nonarray: USAMPLER2DMS */ -#line 2913 "MachineIndependent/glslang.y" + case 425: /* type_specifier_nonarray: USAMPLER2DMS */ +#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(EbtUint, Esd2D, false, false, true); } -#line 9720 "MachineIndependent/glslang_tab.cpp" +#line 9790 "MachineIndependent/glslang_tab.cpp" break; - case 422: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ -#line 2918 "MachineIndependent/glslang.y" + case 426: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ +#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(EbtFloat, Esd2D, true, false, true); } -#line 9730 "MachineIndependent/glslang_tab.cpp" +#line 9800 "MachineIndependent/glslang_tab.cpp" break; - case 423: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ -#line 2923 "MachineIndependent/glslang.y" + case 427: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ +#line 2947 "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 9741 "MachineIndependent/glslang_tab.cpp" +#line 9811 "MachineIndependent/glslang_tab.cpp" break; - case 424: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ -#line 2929 "MachineIndependent/glslang.y" + case 428: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ +#line 2953 "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 9751 "MachineIndependent/glslang_tab.cpp" +#line 9821 "MachineIndependent/glslang_tab.cpp" break; - case 425: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ -#line 2934 "MachineIndependent/glslang.y" + case 429: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ +#line 2958 "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 9761 "MachineIndependent/glslang_tab.cpp" +#line 9831 "MachineIndependent/glslang_tab.cpp" break; - case 426: /* type_specifier_nonarray: TEXTURE1D */ -#line 2939 "MachineIndependent/glslang.y" + case 430: /* type_specifier_nonarray: TEXTURE1D */ +#line 2963 "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 9771 "MachineIndependent/glslang_tab.cpp" +#line 9841 "MachineIndependent/glslang_tab.cpp" break; - case 427: /* type_specifier_nonarray: F16TEXTURE1D */ -#line 2944 "MachineIndependent/glslang.y" + case 431: /* type_specifier_nonarray: F16TEXTURE1D */ +#line 2968 "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 9782 "MachineIndependent/glslang_tab.cpp" +#line 9852 "MachineIndependent/glslang_tab.cpp" break; - case 428: /* type_specifier_nonarray: F16TEXTURE2D */ -#line 2950 "MachineIndependent/glslang.y" + case 432: /* type_specifier_nonarray: F16TEXTURE2D */ +#line 2974 "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 9793 "MachineIndependent/glslang_tab.cpp" +#line 9863 "MachineIndependent/glslang_tab.cpp" break; - case 429: /* type_specifier_nonarray: F16TEXTURE3D */ -#line 2956 "MachineIndependent/glslang.y" + case 433: /* type_specifier_nonarray: F16TEXTURE3D */ +#line 2980 "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 9804 "MachineIndependent/glslang_tab.cpp" +#line 9874 "MachineIndependent/glslang_tab.cpp" break; - case 430: /* type_specifier_nonarray: F16TEXTURECUBE */ -#line 2962 "MachineIndependent/glslang.y" + case 434: /* type_specifier_nonarray: F16TEXTURECUBE */ +#line 2986 "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 9815 "MachineIndependent/glslang_tab.cpp" +#line 9885 "MachineIndependent/glslang_tab.cpp" break; - case 431: /* type_specifier_nonarray: TEXTURE1DARRAY */ -#line 2968 "MachineIndependent/glslang.y" + case 435: /* type_specifier_nonarray: TEXTURE1DARRAY */ +#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.setTexture(EbtFloat, Esd1D, true); } -#line 9825 "MachineIndependent/glslang_tab.cpp" +#line 9895 "MachineIndependent/glslang_tab.cpp" break; - case 432: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ -#line 2973 "MachineIndependent/glslang.y" + case 436: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ +#line 2997 "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 9836 "MachineIndependent/glslang_tab.cpp" +#line 9906 "MachineIndependent/glslang_tab.cpp" break; - case 433: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ -#line 2979 "MachineIndependent/glslang.y" + case 437: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ +#line 3003 "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 9847 "MachineIndependent/glslang_tab.cpp" +#line 9917 "MachineIndependent/glslang_tab.cpp" break; - case 434: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ -#line 2985 "MachineIndependent/glslang.y" + case 438: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ +#line 3009 "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 9858 "MachineIndependent/glslang_tab.cpp" +#line 9928 "MachineIndependent/glslang_tab.cpp" break; - case 435: /* type_specifier_nonarray: ITEXTURE1D */ -#line 2991 "MachineIndependent/glslang.y" + case 439: /* type_specifier_nonarray: ITEXTURE1D */ +#line 3015 "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 9868 "MachineIndependent/glslang_tab.cpp" +#line 9938 "MachineIndependent/glslang_tab.cpp" break; - case 436: /* type_specifier_nonarray: ITEXTURE1DARRAY */ -#line 2996 "MachineIndependent/glslang.y" + case 440: /* type_specifier_nonarray: ITEXTURE1DARRAY */ +#line 3020 "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 9878 "MachineIndependent/glslang_tab.cpp" +#line 9948 "MachineIndependent/glslang_tab.cpp" break; - case 437: /* type_specifier_nonarray: UTEXTURE1D */ -#line 3001 "MachineIndependent/glslang.y" + case 441: /* type_specifier_nonarray: UTEXTURE1D */ +#line 3025 "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 9888 "MachineIndependent/glslang_tab.cpp" +#line 9958 "MachineIndependent/glslang_tab.cpp" break; - case 438: /* type_specifier_nonarray: UTEXTURE1DARRAY */ -#line 3006 "MachineIndependent/glslang.y" + case 442: /* type_specifier_nonarray: UTEXTURE1DARRAY */ +#line 3030 "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 9898 "MachineIndependent/glslang_tab.cpp" +#line 9968 "MachineIndependent/glslang_tab.cpp" break; - case 439: /* type_specifier_nonarray: TEXTURE2DRECT */ -#line 3011 "MachineIndependent/glslang.y" + case 443: /* type_specifier_nonarray: TEXTURE2DRECT */ +#line 3035 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 9908 "MachineIndependent/glslang_tab.cpp" +#line 9978 "MachineIndependent/glslang_tab.cpp" break; - case 440: /* type_specifier_nonarray: F16TEXTURE2DRECT */ -#line 3016 "MachineIndependent/glslang.y" + case 444: /* type_specifier_nonarray: F16TEXTURE2DRECT */ +#line 3040 "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 9919 "MachineIndependent/glslang_tab.cpp" +#line 9989 "MachineIndependent/glslang_tab.cpp" break; - case 441: /* type_specifier_nonarray: ITEXTURE2DRECT */ -#line 3022 "MachineIndependent/glslang.y" + case 445: /* type_specifier_nonarray: ITEXTURE2DRECT */ +#line 3046 "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 9929 "MachineIndependent/glslang_tab.cpp" +#line 9999 "MachineIndependent/glslang_tab.cpp" break; - case 442: /* type_specifier_nonarray: UTEXTURE2DRECT */ -#line 3027 "MachineIndependent/glslang.y" + case 446: /* type_specifier_nonarray: UTEXTURE2DRECT */ +#line 3051 "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 9939 "MachineIndependent/glslang_tab.cpp" +#line 10009 "MachineIndependent/glslang_tab.cpp" break; - case 443: /* type_specifier_nonarray: TEXTUREBUFFER */ -#line 3032 "MachineIndependent/glslang.y" + case 447: /* type_specifier_nonarray: TEXTUREBUFFER */ +#line 3056 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 9949 "MachineIndependent/glslang_tab.cpp" +#line 10019 "MachineIndependent/glslang_tab.cpp" break; - case 444: /* type_specifier_nonarray: F16TEXTUREBUFFER */ -#line 3037 "MachineIndependent/glslang.y" + case 448: /* type_specifier_nonarray: F16TEXTUREBUFFER */ +#line 3061 "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 9960 "MachineIndependent/glslang_tab.cpp" +#line 10030 "MachineIndependent/glslang_tab.cpp" break; - case 445: /* type_specifier_nonarray: ITEXTUREBUFFER */ -#line 3043 "MachineIndependent/glslang.y" + case 449: /* type_specifier_nonarray: ITEXTUREBUFFER */ +#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(EbtInt, EsdBuffer); } -#line 9970 "MachineIndependent/glslang_tab.cpp" +#line 10040 "MachineIndependent/glslang_tab.cpp" break; - case 446: /* type_specifier_nonarray: UTEXTUREBUFFER */ -#line 3048 "MachineIndependent/glslang.y" + case 450: /* type_specifier_nonarray: UTEXTUREBUFFER */ +#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, EsdBuffer); } -#line 9980 "MachineIndependent/glslang_tab.cpp" +#line 10050 "MachineIndependent/glslang_tab.cpp" break; - case 447: /* type_specifier_nonarray: TEXTURE2DMS */ -#line 3053 "MachineIndependent/glslang.y" + case 451: /* type_specifier_nonarray: TEXTURE2DMS */ +#line 3077 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 9990 "MachineIndependent/glslang_tab.cpp" +#line 10060 "MachineIndependent/glslang_tab.cpp" break; - case 448: /* type_specifier_nonarray: F16TEXTURE2DMS */ -#line 3058 "MachineIndependent/glslang.y" + case 452: /* type_specifier_nonarray: F16TEXTURE2DMS */ +#line 3082 "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 10001 "MachineIndependent/glslang_tab.cpp" +#line 10071 "MachineIndependent/glslang_tab.cpp" break; - case 449: /* type_specifier_nonarray: ITEXTURE2DMS */ -#line 3064 "MachineIndependent/glslang.y" + case 453: /* type_specifier_nonarray: ITEXTURE2DMS */ +#line 3088 "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 10011 "MachineIndependent/glslang_tab.cpp" +#line 10081 "MachineIndependent/glslang_tab.cpp" break; - case 450: /* type_specifier_nonarray: UTEXTURE2DMS */ -#line 3069 "MachineIndependent/glslang.y" + case 454: /* type_specifier_nonarray: UTEXTURE2DMS */ +#line 3093 "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 10021 "MachineIndependent/glslang_tab.cpp" +#line 10091 "MachineIndependent/glslang_tab.cpp" break; - case 451: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ -#line 3074 "MachineIndependent/glslang.y" + case 455: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ +#line 3098 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 10031 "MachineIndependent/glslang_tab.cpp" +#line 10101 "MachineIndependent/glslang_tab.cpp" break; - case 452: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ -#line 3079 "MachineIndependent/glslang.y" + case 456: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ +#line 3103 "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 10042 "MachineIndependent/glslang_tab.cpp" +#line 10112 "MachineIndependent/glslang_tab.cpp" break; - case 453: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ -#line 3085 "MachineIndependent/glslang.y" + case 457: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ +#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.setTexture(EbtInt, Esd2D, true, false, true); } -#line 10052 "MachineIndependent/glslang_tab.cpp" +#line 10122 "MachineIndependent/glslang_tab.cpp" break; - case 454: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ -#line 3090 "MachineIndependent/glslang.y" + case 458: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ +#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.setTexture(EbtUint, Esd2D, true, false, true); } -#line 10062 "MachineIndependent/glslang_tab.cpp" +#line 10132 "MachineIndependent/glslang_tab.cpp" break; - case 455: /* type_specifier_nonarray: IMAGE1D */ -#line 3095 "MachineIndependent/glslang.y" + case 459: /* type_specifier_nonarray: IMAGE1D */ +#line 3119 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 10072 "MachineIndependent/glslang_tab.cpp" +#line 10142 "MachineIndependent/glslang_tab.cpp" break; - case 456: /* type_specifier_nonarray: F16IMAGE1D */ -#line 3100 "MachineIndependent/glslang.y" + case 460: /* type_specifier_nonarray: F16IMAGE1D */ +#line 3124 "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 10083 "MachineIndependent/glslang_tab.cpp" +#line 10153 "MachineIndependent/glslang_tab.cpp" break; - case 457: /* type_specifier_nonarray: IIMAGE1D */ -#line 3106 "MachineIndependent/glslang.y" + case 461: /* type_specifier_nonarray: IIMAGE1D */ +#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.setImage(EbtInt, Esd1D); } -#line 10093 "MachineIndependent/glslang_tab.cpp" +#line 10163 "MachineIndependent/glslang_tab.cpp" break; - case 458: /* type_specifier_nonarray: UIMAGE1D */ -#line 3111 "MachineIndependent/glslang.y" + case 462: /* type_specifier_nonarray: UIMAGE1D */ +#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.setImage(EbtUint, Esd1D); } -#line 10103 "MachineIndependent/glslang_tab.cpp" +#line 10173 "MachineIndependent/glslang_tab.cpp" break; - case 459: /* type_specifier_nonarray: IMAGE2D */ -#line 3116 "MachineIndependent/glslang.y" + case 463: /* type_specifier_nonarray: IMAGE2D */ +#line 3140 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 10113 "MachineIndependent/glslang_tab.cpp" +#line 10183 "MachineIndependent/glslang_tab.cpp" break; - case 460: /* type_specifier_nonarray: F16IMAGE2D */ -#line 3121 "MachineIndependent/glslang.y" + case 464: /* type_specifier_nonarray: F16IMAGE2D */ +#line 3145 "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 10124 "MachineIndependent/glslang_tab.cpp" +#line 10194 "MachineIndependent/glslang_tab.cpp" break; - case 461: /* type_specifier_nonarray: IIMAGE2D */ -#line 3127 "MachineIndependent/glslang.y" + case 465: /* type_specifier_nonarray: IIMAGE2D */ +#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.setImage(EbtInt, Esd2D); } -#line 10134 "MachineIndependent/glslang_tab.cpp" +#line 10204 "MachineIndependent/glslang_tab.cpp" break; - case 462: /* type_specifier_nonarray: UIMAGE2D */ -#line 3132 "MachineIndependent/glslang.y" + case 466: /* type_specifier_nonarray: UIMAGE2D */ +#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.setImage(EbtUint, Esd2D); } -#line 10144 "MachineIndependent/glslang_tab.cpp" +#line 10214 "MachineIndependent/glslang_tab.cpp" break; - case 463: /* type_specifier_nonarray: IMAGE3D */ -#line 3137 "MachineIndependent/glslang.y" + case 467: /* type_specifier_nonarray: IMAGE3D */ +#line 3161 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 10154 "MachineIndependent/glslang_tab.cpp" +#line 10224 "MachineIndependent/glslang_tab.cpp" break; - case 464: /* type_specifier_nonarray: F16IMAGE3D */ -#line 3142 "MachineIndependent/glslang.y" + case 468: /* type_specifier_nonarray: F16IMAGE3D */ +#line 3166 "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 10165 "MachineIndependent/glslang_tab.cpp" +#line 10235 "MachineIndependent/glslang_tab.cpp" break; - case 465: /* type_specifier_nonarray: IIMAGE3D */ -#line 3148 "MachineIndependent/glslang.y" + case 469: /* type_specifier_nonarray: IIMAGE3D */ +#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.setImage(EbtInt, Esd3D); } -#line 10175 "MachineIndependent/glslang_tab.cpp" +#line 10245 "MachineIndependent/glslang_tab.cpp" break; - case 466: /* type_specifier_nonarray: UIMAGE3D */ -#line 3153 "MachineIndependent/glslang.y" + case 470: /* type_specifier_nonarray: UIMAGE3D */ +#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.setImage(EbtUint, Esd3D); } -#line 10185 "MachineIndependent/glslang_tab.cpp" +#line 10255 "MachineIndependent/glslang_tab.cpp" break; - case 467: /* type_specifier_nonarray: IMAGE2DRECT */ -#line 3158 "MachineIndependent/glslang.y" + case 471: /* type_specifier_nonarray: IMAGE2DRECT */ +#line 3182 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 10195 "MachineIndependent/glslang_tab.cpp" +#line 10265 "MachineIndependent/glslang_tab.cpp" break; - case 468: /* type_specifier_nonarray: F16IMAGE2DRECT */ -#line 3163 "MachineIndependent/glslang.y" + case 472: /* type_specifier_nonarray: F16IMAGE2DRECT */ +#line 3187 "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 10206 "MachineIndependent/glslang_tab.cpp" +#line 10276 "MachineIndependent/glslang_tab.cpp" break; - case 469: /* type_specifier_nonarray: IIMAGE2DRECT */ -#line 3169 "MachineIndependent/glslang.y" + case 473: /* type_specifier_nonarray: IIMAGE2DRECT */ +#line 3193 "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 10216 "MachineIndependent/glslang_tab.cpp" +#line 10286 "MachineIndependent/glslang_tab.cpp" break; - case 470: /* type_specifier_nonarray: UIMAGE2DRECT */ -#line 3174 "MachineIndependent/glslang.y" + case 474: /* type_specifier_nonarray: UIMAGE2DRECT */ +#line 3198 "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 10226 "MachineIndependent/glslang_tab.cpp" +#line 10296 "MachineIndependent/glslang_tab.cpp" break; - case 471: /* type_specifier_nonarray: IMAGECUBE */ -#line 3179 "MachineIndependent/glslang.y" + case 475: /* type_specifier_nonarray: IMAGECUBE */ +#line 3203 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 10236 "MachineIndependent/glslang_tab.cpp" +#line 10306 "MachineIndependent/glslang_tab.cpp" break; - case 472: /* type_specifier_nonarray: F16IMAGECUBE */ -#line 3184 "MachineIndependent/glslang.y" + case 476: /* type_specifier_nonarray: F16IMAGECUBE */ +#line 3208 "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 10247 "MachineIndependent/glslang_tab.cpp" +#line 10317 "MachineIndependent/glslang_tab.cpp" break; - case 473: /* type_specifier_nonarray: IIMAGECUBE */ -#line 3190 "MachineIndependent/glslang.y" + case 477: /* type_specifier_nonarray: IIMAGECUBE */ +#line 3214 "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 10257 "MachineIndependent/glslang_tab.cpp" +#line 10327 "MachineIndependent/glslang_tab.cpp" break; - case 474: /* type_specifier_nonarray: UIMAGECUBE */ -#line 3195 "MachineIndependent/glslang.y" + case 478: /* type_specifier_nonarray: UIMAGECUBE */ +#line 3219 "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 10267 "MachineIndependent/glslang_tab.cpp" +#line 10337 "MachineIndependent/glslang_tab.cpp" break; - case 475: /* type_specifier_nonarray: IMAGEBUFFER */ -#line 3200 "MachineIndependent/glslang.y" + case 479: /* type_specifier_nonarray: IMAGEBUFFER */ +#line 3224 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 10277 "MachineIndependent/glslang_tab.cpp" +#line 10347 "MachineIndependent/glslang_tab.cpp" break; - case 476: /* type_specifier_nonarray: F16IMAGEBUFFER */ -#line 3205 "MachineIndependent/glslang.y" + case 480: /* type_specifier_nonarray: F16IMAGEBUFFER */ +#line 3229 "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 10288 "MachineIndependent/glslang_tab.cpp" +#line 10358 "MachineIndependent/glslang_tab.cpp" break; - case 477: /* type_specifier_nonarray: IIMAGEBUFFER */ -#line 3211 "MachineIndependent/glslang.y" + case 481: /* type_specifier_nonarray: IIMAGEBUFFER */ +#line 3235 "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 10298 "MachineIndependent/glslang_tab.cpp" +#line 10368 "MachineIndependent/glslang_tab.cpp" break; - case 478: /* type_specifier_nonarray: UIMAGEBUFFER */ -#line 3216 "MachineIndependent/glslang.y" + case 482: /* type_specifier_nonarray: UIMAGEBUFFER */ +#line 3240 "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 10308 "MachineIndependent/glslang_tab.cpp" +#line 10378 "MachineIndependent/glslang_tab.cpp" break; - case 479: /* type_specifier_nonarray: IMAGE1DARRAY */ -#line 3221 "MachineIndependent/glslang.y" + case 483: /* type_specifier_nonarray: IMAGE1DARRAY */ +#line 3245 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 10318 "MachineIndependent/glslang_tab.cpp" +#line 10388 "MachineIndependent/glslang_tab.cpp" break; - case 480: /* type_specifier_nonarray: F16IMAGE1DARRAY */ -#line 3226 "MachineIndependent/glslang.y" + case 484: /* type_specifier_nonarray: F16IMAGE1DARRAY */ +#line 3250 "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 10329 "MachineIndependent/glslang_tab.cpp" +#line 10399 "MachineIndependent/glslang_tab.cpp" break; - case 481: /* type_specifier_nonarray: IIMAGE1DARRAY */ -#line 3232 "MachineIndependent/glslang.y" + case 485: /* type_specifier_nonarray: IIMAGE1DARRAY */ +#line 3256 "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 10339 "MachineIndependent/glslang_tab.cpp" +#line 10409 "MachineIndependent/glslang_tab.cpp" break; - case 482: /* type_specifier_nonarray: UIMAGE1DARRAY */ -#line 3237 "MachineIndependent/glslang.y" + case 486: /* type_specifier_nonarray: UIMAGE1DARRAY */ +#line 3261 "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 10349 "MachineIndependent/glslang_tab.cpp" +#line 10419 "MachineIndependent/glslang_tab.cpp" break; - case 483: /* type_specifier_nonarray: IMAGE2DARRAY */ -#line 3242 "MachineIndependent/glslang.y" + case 487: /* type_specifier_nonarray: IMAGE2DARRAY */ +#line 3266 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 10359 "MachineIndependent/glslang_tab.cpp" +#line 10429 "MachineIndependent/glslang_tab.cpp" break; - case 484: /* type_specifier_nonarray: F16IMAGE2DARRAY */ -#line 3247 "MachineIndependent/glslang.y" + case 488: /* type_specifier_nonarray: F16IMAGE2DARRAY */ +#line 3271 "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 10370 "MachineIndependent/glslang_tab.cpp" +#line 10440 "MachineIndependent/glslang_tab.cpp" break; - case 485: /* type_specifier_nonarray: IIMAGE2DARRAY */ -#line 3253 "MachineIndependent/glslang.y" + case 489: /* type_specifier_nonarray: IIMAGE2DARRAY */ +#line 3277 "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 10380 "MachineIndependent/glslang_tab.cpp" +#line 10450 "MachineIndependent/glslang_tab.cpp" break; - case 486: /* type_specifier_nonarray: UIMAGE2DARRAY */ -#line 3258 "MachineIndependent/glslang.y" + case 490: /* type_specifier_nonarray: UIMAGE2DARRAY */ +#line 3282 "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 10390 "MachineIndependent/glslang_tab.cpp" +#line 10460 "MachineIndependent/glslang_tab.cpp" break; - case 487: /* type_specifier_nonarray: IMAGECUBEARRAY */ -#line 3263 "MachineIndependent/glslang.y" + case 491: /* type_specifier_nonarray: IMAGECUBEARRAY */ +#line 3287 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 10400 "MachineIndependent/glslang_tab.cpp" +#line 10470 "MachineIndependent/glslang_tab.cpp" break; - case 488: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ -#line 3268 "MachineIndependent/glslang.y" + case 492: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ +#line 3292 "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 10411 "MachineIndependent/glslang_tab.cpp" +#line 10481 "MachineIndependent/glslang_tab.cpp" break; - case 489: /* type_specifier_nonarray: IIMAGECUBEARRAY */ -#line 3274 "MachineIndependent/glslang.y" + case 493: /* type_specifier_nonarray: IIMAGECUBEARRAY */ +#line 3298 "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 10421 "MachineIndependent/glslang_tab.cpp" +#line 10491 "MachineIndependent/glslang_tab.cpp" break; - case 490: /* type_specifier_nonarray: UIMAGECUBEARRAY */ -#line 3279 "MachineIndependent/glslang.y" + case 494: /* type_specifier_nonarray: UIMAGECUBEARRAY */ +#line 3303 "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 10431 "MachineIndependent/glslang_tab.cpp" +#line 10501 "MachineIndependent/glslang_tab.cpp" break; - case 491: /* type_specifier_nonarray: IMAGE2DMS */ -#line 3284 "MachineIndependent/glslang.y" + case 495: /* type_specifier_nonarray: IMAGE2DMS */ +#line 3308 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 10441 "MachineIndependent/glslang_tab.cpp" +#line 10511 "MachineIndependent/glslang_tab.cpp" break; - case 492: /* type_specifier_nonarray: F16IMAGE2DMS */ -#line 3289 "MachineIndependent/glslang.y" + case 496: /* type_specifier_nonarray: F16IMAGE2DMS */ +#line 3313 "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 10452 "MachineIndependent/glslang_tab.cpp" +#line 10522 "MachineIndependent/glslang_tab.cpp" break; - case 493: /* type_specifier_nonarray: IIMAGE2DMS */ -#line 3295 "MachineIndependent/glslang.y" + case 497: /* type_specifier_nonarray: IIMAGE2DMS */ +#line 3319 "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 10462 "MachineIndependent/glslang_tab.cpp" +#line 10532 "MachineIndependent/glslang_tab.cpp" break; - case 494: /* type_specifier_nonarray: UIMAGE2DMS */ -#line 3300 "MachineIndependent/glslang.y" + case 498: /* type_specifier_nonarray: UIMAGE2DMS */ +#line 3324 "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 10472 "MachineIndependent/glslang_tab.cpp" +#line 10542 "MachineIndependent/glslang_tab.cpp" break; - case 495: /* type_specifier_nonarray: IMAGE2DMSARRAY */ -#line 3305 "MachineIndependent/glslang.y" + case 499: /* type_specifier_nonarray: IMAGE2DMSARRAY */ +#line 3329 "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 10482 "MachineIndependent/glslang_tab.cpp" +#line 10552 "MachineIndependent/glslang_tab.cpp" break; - case 496: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ -#line 3310 "MachineIndependent/glslang.y" + case 500: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ +#line 3334 "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 10493 "MachineIndependent/glslang_tab.cpp" +#line 10563 "MachineIndependent/glslang_tab.cpp" break; - case 497: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ -#line 3316 "MachineIndependent/glslang.y" + case 501: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ +#line 3340 "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 10503 "MachineIndependent/glslang_tab.cpp" +#line 10573 "MachineIndependent/glslang_tab.cpp" break; - case 498: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ -#line 3321 "MachineIndependent/glslang.y" + case 502: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ +#line 3345 "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 10513 "MachineIndependent/glslang_tab.cpp" +#line 10583 "MachineIndependent/glslang_tab.cpp" break; - case 499: /* type_specifier_nonarray: I64IMAGE1D */ -#line 3326 "MachineIndependent/glslang.y" + case 503: /* type_specifier_nonarray: I64IMAGE1D */ +#line 3350 "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 10523 "MachineIndependent/glslang_tab.cpp" +#line 10593 "MachineIndependent/glslang_tab.cpp" break; - case 500: /* type_specifier_nonarray: U64IMAGE1D */ -#line 3331 "MachineIndependent/glslang.y" + case 504: /* type_specifier_nonarray: U64IMAGE1D */ +#line 3355 "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 10533 "MachineIndependent/glslang_tab.cpp" +#line 10603 "MachineIndependent/glslang_tab.cpp" break; - case 501: /* type_specifier_nonarray: I64IMAGE2D */ -#line 3336 "MachineIndependent/glslang.y" + case 505: /* type_specifier_nonarray: I64IMAGE2D */ +#line 3360 "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 10543 "MachineIndependent/glslang_tab.cpp" +#line 10613 "MachineIndependent/glslang_tab.cpp" break; - case 502: /* type_specifier_nonarray: U64IMAGE2D */ -#line 3341 "MachineIndependent/glslang.y" + case 506: /* type_specifier_nonarray: U64IMAGE2D */ +#line 3365 "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 10553 "MachineIndependent/glslang_tab.cpp" +#line 10623 "MachineIndependent/glslang_tab.cpp" break; - case 503: /* type_specifier_nonarray: I64IMAGE3D */ -#line 3346 "MachineIndependent/glslang.y" + case 507: /* type_specifier_nonarray: I64IMAGE3D */ +#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(EbtInt64, Esd3D); } -#line 10563 "MachineIndependent/glslang_tab.cpp" +#line 10633 "MachineIndependent/glslang_tab.cpp" break; - case 504: /* type_specifier_nonarray: U64IMAGE3D */ -#line 3351 "MachineIndependent/glslang.y" + case 508: /* type_specifier_nonarray: U64IMAGE3D */ +#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(EbtUint64, Esd3D); } -#line 10573 "MachineIndependent/glslang_tab.cpp" +#line 10643 "MachineIndependent/glslang_tab.cpp" break; - case 505: /* type_specifier_nonarray: I64IMAGE2DRECT */ -#line 3356 "MachineIndependent/glslang.y" + case 509: /* type_specifier_nonarray: I64IMAGE2DRECT */ +#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(EbtInt64, EsdRect); } -#line 10583 "MachineIndependent/glslang_tab.cpp" +#line 10653 "MachineIndependent/glslang_tab.cpp" break; - case 506: /* type_specifier_nonarray: U64IMAGE2DRECT */ -#line 3361 "MachineIndependent/glslang.y" + case 510: /* type_specifier_nonarray: U64IMAGE2DRECT */ +#line 3385 "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 10593 "MachineIndependent/glslang_tab.cpp" +#line 10663 "MachineIndependent/glslang_tab.cpp" break; - case 507: /* type_specifier_nonarray: I64IMAGECUBE */ -#line 3366 "MachineIndependent/glslang.y" + case 511: /* type_specifier_nonarray: I64IMAGECUBE */ +#line 3390 "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 10603 "MachineIndependent/glslang_tab.cpp" +#line 10673 "MachineIndependent/glslang_tab.cpp" break; - case 508: /* type_specifier_nonarray: U64IMAGECUBE */ -#line 3371 "MachineIndependent/glslang.y" + case 512: /* type_specifier_nonarray: U64IMAGECUBE */ +#line 3395 "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 10613 "MachineIndependent/glslang_tab.cpp" +#line 10683 "MachineIndependent/glslang_tab.cpp" break; - case 509: /* type_specifier_nonarray: I64IMAGEBUFFER */ -#line 3376 "MachineIndependent/glslang.y" + case 513: /* type_specifier_nonarray: I64IMAGEBUFFER */ +#line 3400 "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 10623 "MachineIndependent/glslang_tab.cpp" +#line 10693 "MachineIndependent/glslang_tab.cpp" break; - case 510: /* type_specifier_nonarray: U64IMAGEBUFFER */ -#line 3381 "MachineIndependent/glslang.y" + case 514: /* type_specifier_nonarray: U64IMAGEBUFFER */ +#line 3405 "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 10633 "MachineIndependent/glslang_tab.cpp" +#line 10703 "MachineIndependent/glslang_tab.cpp" break; - case 511: /* type_specifier_nonarray: I64IMAGE1DARRAY */ -#line 3386 "MachineIndependent/glslang.y" + case 515: /* type_specifier_nonarray: I64IMAGE1DARRAY */ +#line 3410 "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 10643 "MachineIndependent/glslang_tab.cpp" +#line 10713 "MachineIndependent/glslang_tab.cpp" break; - case 512: /* type_specifier_nonarray: U64IMAGE1DARRAY */ -#line 3391 "MachineIndependent/glslang.y" + case 516: /* type_specifier_nonarray: U64IMAGE1DARRAY */ +#line 3415 "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 10653 "MachineIndependent/glslang_tab.cpp" +#line 10723 "MachineIndependent/glslang_tab.cpp" break; - case 513: /* type_specifier_nonarray: I64IMAGE2DARRAY */ -#line 3396 "MachineIndependent/glslang.y" + case 517: /* type_specifier_nonarray: I64IMAGE2DARRAY */ +#line 3420 "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 10663 "MachineIndependent/glslang_tab.cpp" +#line 10733 "MachineIndependent/glslang_tab.cpp" break; - case 514: /* type_specifier_nonarray: U64IMAGE2DARRAY */ -#line 3401 "MachineIndependent/glslang.y" + case 518: /* type_specifier_nonarray: U64IMAGE2DARRAY */ +#line 3425 "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 10673 "MachineIndependent/glslang_tab.cpp" +#line 10743 "MachineIndependent/glslang_tab.cpp" break; - case 515: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ -#line 3406 "MachineIndependent/glslang.y" + case 519: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ +#line 3430 "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 10683 "MachineIndependent/glslang_tab.cpp" +#line 10753 "MachineIndependent/glslang_tab.cpp" break; - case 516: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ -#line 3411 "MachineIndependent/glslang.y" + case 520: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ +#line 3435 "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 10693 "MachineIndependent/glslang_tab.cpp" +#line 10763 "MachineIndependent/glslang_tab.cpp" break; - case 517: /* type_specifier_nonarray: I64IMAGE2DMS */ -#line 3416 "MachineIndependent/glslang.y" + case 521: /* type_specifier_nonarray: I64IMAGE2DMS */ +#line 3440 "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 10703 "MachineIndependent/glslang_tab.cpp" +#line 10773 "MachineIndependent/glslang_tab.cpp" break; - case 518: /* type_specifier_nonarray: U64IMAGE2DMS */ -#line 3421 "MachineIndependent/glslang.y" + case 522: /* type_specifier_nonarray: U64IMAGE2DMS */ +#line 3445 "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 10713 "MachineIndependent/glslang_tab.cpp" +#line 10783 "MachineIndependent/glslang_tab.cpp" break; - case 519: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ -#line 3426 "MachineIndependent/glslang.y" + case 523: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ +#line 3450 "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 10723 "MachineIndependent/glslang_tab.cpp" +#line 10793 "MachineIndependent/glslang_tab.cpp" break; - case 520: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ -#line 3431 "MachineIndependent/glslang.y" + case 524: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ +#line 3455 "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 10733 "MachineIndependent/glslang_tab.cpp" +#line 10803 "MachineIndependent/glslang_tab.cpp" break; - case 521: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ -#line 3436 "MachineIndependent/glslang.y" + case 525: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ +#line 3460 "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 10744 "MachineIndependent/glslang_tab.cpp" +#line 10814 "MachineIndependent/glslang_tab.cpp" break; - case 522: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ -#line 3442 "MachineIndependent/glslang.y" + case 526: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ +#line 3466 "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 10755 "MachineIndependent/glslang_tab.cpp" +#line 10825 "MachineIndependent/glslang_tab.cpp" break; - case 523: /* type_specifier_nonarray: ATTACHMENTEXT */ -#line 3448 "MachineIndependent/glslang.y" + case 527: /* type_specifier_nonarray: ATTACHMENTEXT */ +#line 3472 "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 10766 "MachineIndependent/glslang_tab.cpp" +#line 10836 "MachineIndependent/glslang_tab.cpp" break; - case 524: /* type_specifier_nonarray: IATTACHMENTEXT */ -#line 3454 "MachineIndependent/glslang.y" + case 528: /* type_specifier_nonarray: IATTACHMENTEXT */ +#line 3478 "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 10777 "MachineIndependent/glslang_tab.cpp" +#line 10847 "MachineIndependent/glslang_tab.cpp" break; - case 525: /* type_specifier_nonarray: UATTACHMENTEXT */ -#line 3460 "MachineIndependent/glslang.y" + case 529: /* type_specifier_nonarray: UATTACHMENTEXT */ +#line 3484 "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 10788 "MachineIndependent/glslang_tab.cpp" +#line 10858 "MachineIndependent/glslang_tab.cpp" break; - case 526: /* type_specifier_nonarray: SUBPASSINPUT */ -#line 3466 "MachineIndependent/glslang.y" + case 530: /* type_specifier_nonarray: SUBPASSINPUT */ +#line 3490 "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 10799 "MachineIndependent/glslang_tab.cpp" +#line 10869 "MachineIndependent/glslang_tab.cpp" break; - case 527: /* type_specifier_nonarray: SUBPASSINPUTMS */ -#line 3472 "MachineIndependent/glslang.y" + case 531: /* type_specifier_nonarray: SUBPASSINPUTMS */ +#line 3496 "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 10810 "MachineIndependent/glslang_tab.cpp" +#line 10880 "MachineIndependent/glslang_tab.cpp" break; - case 528: /* type_specifier_nonarray: F16SUBPASSINPUT */ -#line 3478 "MachineIndependent/glslang.y" + case 532: /* type_specifier_nonarray: F16SUBPASSINPUT */ +#line 3502 "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"); @@ -10818,11 +10888,11 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 10822 "MachineIndependent/glslang_tab.cpp" +#line 10892 "MachineIndependent/glslang_tab.cpp" break; - case 529: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ -#line 3485 "MachineIndependent/glslang.y" + case 533: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ +#line 3509 "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"); @@ -10830,55 +10900,55 @@ yyreduce: (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 10834 "MachineIndependent/glslang_tab.cpp" +#line 10904 "MachineIndependent/glslang_tab.cpp" break; - case 530: /* type_specifier_nonarray: ISUBPASSINPUT */ -#line 3492 "MachineIndependent/glslang.y" + case 534: /* type_specifier_nonarray: ISUBPASSINPUT */ +#line 3516 "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 10845 "MachineIndependent/glslang_tab.cpp" +#line 10915 "MachineIndependent/glslang_tab.cpp" break; - case 531: /* type_specifier_nonarray: ISUBPASSINPUTMS */ -#line 3498 "MachineIndependent/glslang.y" + case 535: /* type_specifier_nonarray: ISUBPASSINPUTMS */ +#line 3522 "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 10856 "MachineIndependent/glslang_tab.cpp" +#line 10926 "MachineIndependent/glslang_tab.cpp" break; - case 532: /* type_specifier_nonarray: USUBPASSINPUT */ -#line 3504 "MachineIndependent/glslang.y" + case 536: /* type_specifier_nonarray: USUBPASSINPUT */ +#line 3528 "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 10867 "MachineIndependent/glslang_tab.cpp" +#line 10937 "MachineIndependent/glslang_tab.cpp" break; - case 533: /* type_specifier_nonarray: USUBPASSINPUTMS */ -#line 3510 "MachineIndependent/glslang.y" + case 537: /* type_specifier_nonarray: USUBPASSINPUTMS */ +#line 3534 "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 10878 "MachineIndependent/glslang_tab.cpp" +#line 10948 "MachineIndependent/glslang_tab.cpp" break; - case 534: /* type_specifier_nonarray: FCOOPMATNV */ -#line 3516 "MachineIndependent/glslang.y" + case 538: /* type_specifier_nonarray: FCOOPMATNV */ +#line 3540 "MachineIndependent/glslang.y" { parseContext.fcoopmatCheckNV((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); @@ -10886,11 +10956,11 @@ yyreduce: (yyval.interm.type).coopmatNV = true; (yyval.interm.type).coopmatKHR = false; } -#line 10890 "MachineIndependent/glslang_tab.cpp" +#line 10960 "MachineIndependent/glslang_tab.cpp" break; - case 535: /* type_specifier_nonarray: ICOOPMATNV */ -#line 3523 "MachineIndependent/glslang.y" + case 539: /* type_specifier_nonarray: ICOOPMATNV */ +#line 3547 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); @@ -10898,11 +10968,11 @@ yyreduce: (yyval.interm.type).coopmatNV = true; (yyval.interm.type).coopmatKHR = false; } -#line 10902 "MachineIndependent/glslang_tab.cpp" +#line 10972 "MachineIndependent/glslang_tab.cpp" break; - case 536: /* type_specifier_nonarray: UCOOPMATNV */ -#line 3530 "MachineIndependent/glslang.y" + case 540: /* type_specifier_nonarray: UCOOPMATNV */ +#line 3554 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); @@ -10910,11 +10980,11 @@ yyreduce: (yyval.interm.type).coopmatNV = true; (yyval.interm.type).coopmatKHR = false; } -#line 10914 "MachineIndependent/glslang_tab.cpp" +#line 10984 "MachineIndependent/glslang_tab.cpp" break; - case 537: /* type_specifier_nonarray: COOPMAT */ -#line 3537 "MachineIndependent/glslang.y" + case 541: /* type_specifier_nonarray: COOPMAT */ +#line 3561 "MachineIndependent/glslang.y" { parseContext.coopmatCheck((yyvsp[0].lex).loc, "coopmat", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); @@ -10922,79 +10992,79 @@ yyreduce: (yyval.interm.type).coopmatNV = false; (yyval.interm.type).coopmatKHR = true; } -#line 10926 "MachineIndependent/glslang_tab.cpp" +#line 10996 "MachineIndependent/glslang_tab.cpp" break; - case 538: /* type_specifier_nonarray: TENSORLAYOUTNV */ -#line 3544 "MachineIndependent/glslang.y" + case 542: /* type_specifier_nonarray: TENSORLAYOUTNV */ +#line 3568 "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 10936 "MachineIndependent/glslang_tab.cpp" +#line 11006 "MachineIndependent/glslang_tab.cpp" break; - case 539: /* type_specifier_nonarray: TENSORVIEWNV */ -#line 3549 "MachineIndependent/glslang.y" + case 543: /* type_specifier_nonarray: TENSORVIEWNV */ +#line 3573 "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 10946 "MachineIndependent/glslang_tab.cpp" +#line 11016 "MachineIndependent/glslang_tab.cpp" break; - case 540: /* type_specifier_nonarray: FUNCTION */ -#line 3554 "MachineIndependent/glslang.y" + case 544: /* type_specifier_nonarray: FUNCTION */ +#line 3578 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).basicType = EbtFunction; } -#line 10955 "MachineIndependent/glslang_tab.cpp" +#line 11025 "MachineIndependent/glslang_tab.cpp" break; - case 541: /* type_specifier_nonarray: COOPVECNV */ -#line 3558 "MachineIndependent/glslang.y" + case 545: /* type_specifier_nonarray: COOPVECNV */ +#line 3582 "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 10966 "MachineIndependent/glslang_tab.cpp" +#line 11036 "MachineIndependent/glslang_tab.cpp" break; - case 542: /* type_specifier_nonarray: spirv_type_specifier */ -#line 3564 "MachineIndependent/glslang.y" + case 546: /* type_specifier_nonarray: spirv_type_specifier */ +#line 3588 "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 10975 "MachineIndependent/glslang_tab.cpp" +#line 11045 "MachineIndependent/glslang_tab.cpp" break; - case 543: /* type_specifier_nonarray: HITOBJECTNV */ -#line 3568 "MachineIndependent/glslang.y" + case 547: /* type_specifier_nonarray: HITOBJECTNV */ +#line 3592 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtHitObjectNV; } -#line 10984 "MachineIndependent/glslang_tab.cpp" +#line 11054 "MachineIndependent/glslang_tab.cpp" break; - case 544: /* type_specifier_nonarray: struct_specifier */ -#line 3572 "MachineIndependent/glslang.y" + case 548: /* type_specifier_nonarray: struct_specifier */ +#line 3596 "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 10994 "MachineIndependent/glslang_tab.cpp" +#line 11064 "MachineIndependent/glslang_tab.cpp" break; - case 545: /* type_specifier_nonarray: TYPE_NAME */ -#line 3577 "MachineIndependent/glslang.y" + case 549: /* type_specifier_nonarray: TYPE_NAME */ +#line 3601 "MachineIndependent/glslang.y" { // // This is for user defined type names. The lexical phase looked up the @@ -11008,47 +11078,47 @@ yyreduce: } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 11012 "MachineIndependent/glslang_tab.cpp" +#line 11082 "MachineIndependent/glslang_tab.cpp" break; - case 546: /* precision_qualifier: HIGH_PRECISION */ -#line 3593 "MachineIndependent/glslang.y" + case 550: /* precision_qualifier: HIGH_PRECISION */ +#line 3617 "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 11022 "MachineIndependent/glslang_tab.cpp" +#line 11092 "MachineIndependent/glslang_tab.cpp" break; - case 547: /* precision_qualifier: MEDIUM_PRECISION */ -#line 3598 "MachineIndependent/glslang.y" + case 551: /* precision_qualifier: MEDIUM_PRECISION */ +#line 3622 "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 11032 "MachineIndependent/glslang_tab.cpp" +#line 11102 "MachineIndependent/glslang_tab.cpp" break; - case 548: /* precision_qualifier: LOW_PRECISION */ -#line 3603 "MachineIndependent/glslang.y" + case 552: /* precision_qualifier: LOW_PRECISION */ +#line 3627 "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 11042 "MachineIndependent/glslang_tab.cpp" +#line 11112 "MachineIndependent/glslang_tab.cpp" break; - case 549: /* $@3: %empty */ -#line 3611 "MachineIndependent/glslang.y" + case 553: /* $@3: %empty */ +#line 3635 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 11048 "MachineIndependent/glslang_tab.cpp" +#line 11118 "MachineIndependent/glslang_tab.cpp" break; - case 550: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ -#line 3611 "MachineIndependent/glslang.y" + case 554: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ +#line 3635 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); @@ -11066,17 +11136,17 @@ yyreduce: (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 11070 "MachineIndependent/glslang_tab.cpp" +#line 11140 "MachineIndependent/glslang_tab.cpp" break; - case 551: /* $@4: %empty */ -#line 3628 "MachineIndependent/glslang.y" + case 555: /* $@4: %empty */ +#line 3652 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 11076 "MachineIndependent/glslang_tab.cpp" +#line 11146 "MachineIndependent/glslang_tab.cpp" break; - case 552: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ -#line 3628 "MachineIndependent/glslang.y" + case 556: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ +#line 3652 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); @@ -11084,19 +11154,19 @@ yyreduce: (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 11088 "MachineIndependent/glslang_tab.cpp" +#line 11158 "MachineIndependent/glslang_tab.cpp" break; - case 553: /* struct_declaration_list: struct_declaration */ -#line 3638 "MachineIndependent/glslang.y" + case 557: /* struct_declaration_list: struct_declaration */ +#line 3662 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 11096 "MachineIndependent/glslang_tab.cpp" +#line 11166 "MachineIndependent/glslang_tab.cpp" break; - case 554: /* struct_declaration_list: struct_declaration_list struct_declaration */ -#line 3641 "MachineIndependent/glslang.y" + case 558: /* struct_declaration_list: struct_declaration_list struct_declaration */ +#line 3665 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { @@ -11107,11 +11177,11 @@ yyreduce: (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 11111 "MachineIndependent/glslang_tab.cpp" +#line 11181 "MachineIndependent/glslang_tab.cpp" break; - case 555: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ -#line 3654 "MachineIndependent/glslang.y" + case 559: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ +#line 3678 "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"); @@ -11134,11 +11204,11 @@ yyreduce: (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 11138 "MachineIndependent/glslang_tab.cpp" +#line 11208 "MachineIndependent/glslang_tab.cpp" break; - case 556: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ -#line 3676 "MachineIndependent/glslang.y" + case 560: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ +#line 3700 "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"); @@ -11163,38 +11233,38 @@ yyreduce: (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 11167 "MachineIndependent/glslang_tab.cpp" +#line 11237 "MachineIndependent/glslang_tab.cpp" break; - case 557: /* struct_declarator_list: struct_declarator */ -#line 3703 "MachineIndependent/glslang.y" + case 561: /* struct_declarator_list: struct_declarator */ +#line 3727 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 11176 "MachineIndependent/glslang_tab.cpp" +#line 11246 "MachineIndependent/glslang_tab.cpp" break; - case 558: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ -#line 3707 "MachineIndependent/glslang.y" + case 562: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ +#line 3731 "MachineIndependent/glslang.y" { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 11184 "MachineIndependent/glslang_tab.cpp" +#line 11254 "MachineIndependent/glslang_tab.cpp" break; - case 559: /* struct_declarator: IDENTIFIER */ -#line 3713 "MachineIndependent/glslang.y" + case 563: /* struct_declarator: IDENTIFIER */ +#line 3737 "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 11194 "MachineIndependent/glslang_tab.cpp" +#line 11264 "MachineIndependent/glslang_tab.cpp" break; - case 560: /* struct_declarator: IDENTIFIER array_specifier */ -#line 3718 "MachineIndependent/glslang.y" + case 564: /* struct_declarator: IDENTIFIER array_specifier */ +#line 3742 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes); @@ -11203,168 +11273,168 @@ yyreduce: (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 11207 "MachineIndependent/glslang_tab.cpp" +#line 11277 "MachineIndependent/glslang_tab.cpp" break; - case 561: /* initializer: assignment_expression */ -#line 3729 "MachineIndependent/glslang.y" + case 565: /* initializer: assignment_expression */ +#line 3753 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 11215 "MachineIndependent/glslang_tab.cpp" +#line 11285 "MachineIndependent/glslang_tab.cpp" break; - case 562: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ -#line 3732 "MachineIndependent/glslang.y" + case 566: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ +#line 3756 "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 11226 "MachineIndependent/glslang_tab.cpp" +#line 11296 "MachineIndependent/glslang_tab.cpp" break; - case 563: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ -#line 3738 "MachineIndependent/glslang.y" + case 567: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ +#line 3762 "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 11237 "MachineIndependent/glslang_tab.cpp" +#line 11307 "MachineIndependent/glslang_tab.cpp" break; - case 564: /* initializer: LEFT_BRACE RIGHT_BRACE */ -#line 3744 "MachineIndependent/glslang.y" + case 568: /* initializer: LEFT_BRACE RIGHT_BRACE */ +#line 3768 "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 11248 "MachineIndependent/glslang_tab.cpp" - break; - - case 565: /* initializer_list: initializer */ -#line 3753 "MachineIndependent/glslang.y" - { - (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); - } -#line 11256 "MachineIndependent/glslang_tab.cpp" - break; - - case 566: /* initializer_list: initializer_list COMMA initializer */ -#line 3756 "MachineIndependent/glslang.y" - { - (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); - } -#line 11264 "MachineIndependent/glslang_tab.cpp" - break; - - case 567: /* declaration_statement: declaration */ -#line 3762 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11270 "MachineIndependent/glslang_tab.cpp" - break; - - case 568: /* statement: compound_statement */ -#line 3766 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11276 "MachineIndependent/glslang_tab.cpp" - break; - - case 569: /* statement: simple_statement */ -#line 3767 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11282 "MachineIndependent/glslang_tab.cpp" - break; - - case 570: /* simple_statement: declaration_statement */ -#line 3773 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11288 "MachineIndependent/glslang_tab.cpp" - break; - - case 571: /* simple_statement: expression_statement */ -#line 3774 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11294 "MachineIndependent/glslang_tab.cpp" - break; - - case 572: /* simple_statement: selection_statement */ -#line 3775 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11300 "MachineIndependent/glslang_tab.cpp" - break; - - case 573: /* simple_statement: switch_statement */ -#line 3776 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11306 "MachineIndependent/glslang_tab.cpp" - break; - - case 574: /* simple_statement: case_label */ -#line 3777 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11312 "MachineIndependent/glslang_tab.cpp" - break; - - case 575: /* simple_statement: iteration_statement */ -#line 3778 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } #line 11318 "MachineIndependent/glslang_tab.cpp" break; - case 576: /* simple_statement: jump_statement */ -#line 3779 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11324 "MachineIndependent/glslang_tab.cpp" + case 569: /* initializer_list: initializer */ +#line 3777 "MachineIndependent/glslang.y" + { + (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); + } +#line 11326 "MachineIndependent/glslang_tab.cpp" break; - case 577: /* simple_statement: demote_statement */ + case 570: /* initializer_list: initializer_list COMMA initializer */ #line 3780 "MachineIndependent/glslang.y" - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11330 "MachineIndependent/glslang_tab.cpp" + { + (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); + } +#line 11334 "MachineIndependent/glslang_tab.cpp" break; - case 578: /* demote_statement: DEMOTE SEMICOLON */ -#line 3784 "MachineIndependent/glslang.y" + case 571: /* declaration_statement: declaration */ +#line 3786 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11340 "MachineIndependent/glslang_tab.cpp" + break; + + case 572: /* statement: compound_statement */ +#line 3790 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11346 "MachineIndependent/glslang_tab.cpp" + break; + + case 573: /* statement: simple_statement */ +#line 3791 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11352 "MachineIndependent/glslang_tab.cpp" + break; + + case 574: /* simple_statement: declaration_statement */ +#line 3797 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11358 "MachineIndependent/glslang_tab.cpp" + break; + + case 575: /* simple_statement: expression_statement */ +#line 3798 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11364 "MachineIndependent/glslang_tab.cpp" + break; + + case 576: /* simple_statement: selection_statement */ +#line 3799 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11370 "MachineIndependent/glslang_tab.cpp" + break; + + case 577: /* simple_statement: switch_statement */ +#line 3800 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11376 "MachineIndependent/glslang_tab.cpp" + break; + + case 578: /* simple_statement: case_label */ +#line 3801 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11382 "MachineIndependent/glslang_tab.cpp" + break; + + case 579: /* simple_statement: iteration_statement */ +#line 3802 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11388 "MachineIndependent/glslang_tab.cpp" + break; + + case 580: /* simple_statement: jump_statement */ +#line 3803 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11394 "MachineIndependent/glslang_tab.cpp" + break; + + case 581: /* simple_statement: demote_statement */ +#line 3804 "MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 11400 "MachineIndependent/glslang_tab.cpp" + break; + + case 582: /* demote_statement: DEMOTE SEMICOLON */ +#line 3808 "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 11340 "MachineIndependent/glslang_tab.cpp" +#line 11410 "MachineIndependent/glslang_tab.cpp" break; - case 579: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ -#line 3792 "MachineIndependent/glslang.y" + case 583: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ +#line 3816 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11346 "MachineIndependent/glslang_tab.cpp" +#line 11416 "MachineIndependent/glslang_tab.cpp" break; - case 580: /* $@5: %empty */ -#line 3793 "MachineIndependent/glslang.y" + case 584: /* $@5: %empty */ +#line 3817 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 11355 "MachineIndependent/glslang_tab.cpp" +#line 11425 "MachineIndependent/glslang_tab.cpp" break; - case 581: /* $@6: %empty */ -#line 3797 "MachineIndependent/glslang.y" + case 585: /* $@6: %empty */ +#line 3821 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 11364 "MachineIndependent/glslang_tab.cpp" +#line 11434 "MachineIndependent/glslang_tab.cpp" break; - case 582: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ -#line 3801 "MachineIndependent/glslang.y" + case 586: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ +#line 3825 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate()) { (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence); @@ -11372,69 +11442,69 @@ yyreduce: } (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode); } -#line 11376 "MachineIndependent/glslang_tab.cpp" +#line 11446 "MachineIndependent/glslang_tab.cpp" break; - case 583: /* statement_no_new_scope: compound_statement_no_new_scope */ -#line 3811 "MachineIndependent/glslang.y" + case 587: /* statement_no_new_scope: compound_statement_no_new_scope */ +#line 3835 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11382 "MachineIndependent/glslang_tab.cpp" +#line 11452 "MachineIndependent/glslang_tab.cpp" break; - case 584: /* statement_no_new_scope: simple_statement */ -#line 3812 "MachineIndependent/glslang.y" + case 588: /* statement_no_new_scope: simple_statement */ +#line 3836 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11388 "MachineIndependent/glslang_tab.cpp" +#line 11458 "MachineIndependent/glslang_tab.cpp" break; - case 585: /* $@7: %empty */ -#line 3816 "MachineIndependent/glslang.y" + case 589: /* $@7: %empty */ +#line 3840 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 11396 "MachineIndependent/glslang_tab.cpp" +#line 11466 "MachineIndependent/glslang_tab.cpp" break; - case 586: /* statement_scoped: $@7 compound_statement */ -#line 3819 "MachineIndependent/glslang.y" + case 590: /* statement_scoped: $@7 compound_statement */ +#line 3843 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11405 "MachineIndependent/glslang_tab.cpp" +#line 11475 "MachineIndependent/glslang_tab.cpp" break; - case 587: /* $@8: %empty */ -#line 3823 "MachineIndependent/glslang.y" + case 591: /* $@8: %empty */ +#line 3847 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11415 "MachineIndependent/glslang_tab.cpp" +#line 11485 "MachineIndependent/glslang_tab.cpp" break; - case 588: /* statement_scoped: $@8 simple_statement */ -#line 3828 "MachineIndependent/glslang.y" + case 592: /* statement_scoped: $@8 simple_statement */ +#line 3852 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11426 "MachineIndependent/glslang_tab.cpp" +#line 11496 "MachineIndependent/glslang_tab.cpp" break; - case 589: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ -#line 3837 "MachineIndependent/glslang.y" + case 593: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ +#line 3861 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11434 "MachineIndependent/glslang_tab.cpp" +#line 11504 "MachineIndependent/glslang_tab.cpp" break; - case 590: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ -#line 3840 "MachineIndependent/glslang.y" + case 594: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ +#line 3864 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate()) { (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence); @@ -11442,11 +11512,11 @@ yyreduce: } (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode); } -#line 11446 "MachineIndependent/glslang_tab.cpp" +#line 11516 "MachineIndependent/glslang_tab.cpp" break; - case 591: /* statement_list: statement */ -#line 3850 "MachineIndependent/glslang.y" + case 595: /* statement_list: statement */ +#line 3874 "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 || @@ -11455,11 +11525,11 @@ yyreduce: (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 11459 "MachineIndependent/glslang_tab.cpp" +#line 11529 "MachineIndependent/glslang_tab.cpp" break; - case 592: /* statement_list: statement_list statement */ -#line 3858 "MachineIndependent/glslang.y" + case 596: /* statement_list: statement_list statement */ +#line 3882 "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)) { @@ -11468,77 +11538,77 @@ yyreduce: } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 11472 "MachineIndependent/glslang_tab.cpp" +#line 11542 "MachineIndependent/glslang_tab.cpp" break; - case 593: /* expression_statement: SEMICOLON */ -#line 3869 "MachineIndependent/glslang.y" + case 597: /* expression_statement: SEMICOLON */ +#line 3893 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11478 "MachineIndependent/glslang_tab.cpp" +#line 11548 "MachineIndependent/glslang_tab.cpp" break; - case 594: /* expression_statement: expression SEMICOLON */ -#line 3870 "MachineIndependent/glslang.y" + case 598: /* expression_statement: expression SEMICOLON */ +#line 3894 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 11484 "MachineIndependent/glslang_tab.cpp" +#line 11554 "MachineIndependent/glslang_tab.cpp" break; - case 595: /* selection_statement: selection_statement_nonattributed */ -#line 3874 "MachineIndependent/glslang.y" + case 599: /* selection_statement: selection_statement_nonattributed */ +#line 3898 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11492 "MachineIndependent/glslang_tab.cpp" +#line 11562 "MachineIndependent/glslang_tab.cpp" break; - case 596: /* selection_statement: attribute selection_statement_nonattributed */ -#line 3877 "MachineIndependent/glslang.y" + case 600: /* selection_statement: attribute selection_statement_nonattributed */ +#line 3901 "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 11502 "MachineIndependent/glslang_tab.cpp" +#line 11572 "MachineIndependent/glslang_tab.cpp" break; - case 597: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ -#line 3884 "MachineIndependent/glslang.y" + case 601: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ +#line 3908 "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 11511 "MachineIndependent/glslang_tab.cpp" +#line 11581 "MachineIndependent/glslang_tab.cpp" break; - case 598: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ -#line 3891 "MachineIndependent/glslang.y" + case 602: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ +#line 3915 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 11520 "MachineIndependent/glslang_tab.cpp" +#line 11590 "MachineIndependent/glslang_tab.cpp" break; - case 599: /* selection_rest_statement: statement_scoped */ -#line 3895 "MachineIndependent/glslang.y" + case 603: /* selection_rest_statement: statement_scoped */ +#line 3919 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 11529 "MachineIndependent/glslang_tab.cpp" +#line 11599 "MachineIndependent/glslang_tab.cpp" break; - case 600: /* condition: expression */ -#line 3903 "MachineIndependent/glslang.y" + case 604: /* condition: expression */ +#line 3927 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)); } -#line 11538 "MachineIndependent/glslang_tab.cpp" +#line 11608 "MachineIndependent/glslang_tab.cpp" break; - case 601: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 3907 "MachineIndependent/glslang.y" + case 605: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 3931 "MachineIndependent/glslang.y" { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -11549,29 +11619,29 @@ yyreduce: else (yyval.interm.intermTypedNode) = 0; } -#line 11553 "MachineIndependent/glslang_tab.cpp" +#line 11623 "MachineIndependent/glslang_tab.cpp" break; - case 602: /* switch_statement: switch_statement_nonattributed */ -#line 3920 "MachineIndependent/glslang.y" + case 606: /* switch_statement: switch_statement_nonattributed */ +#line 3944 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11561 "MachineIndependent/glslang_tab.cpp" +#line 11631 "MachineIndependent/glslang_tab.cpp" break; - case 603: /* switch_statement: attribute switch_statement_nonattributed */ -#line 3923 "MachineIndependent/glslang.y" + case 607: /* switch_statement: attribute switch_statement_nonattributed */ +#line 3947 "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 11571 "MachineIndependent/glslang_tab.cpp" +#line 11641 "MachineIndependent/glslang_tab.cpp" break; - case 604: /* $@9: %empty */ -#line 3930 "MachineIndependent/glslang.y" + case 608: /* $@9: %empty */ +#line 3954 "MachineIndependent/glslang.y" { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -11580,11 +11650,11 @@ yyreduce: parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 11584 "MachineIndependent/glslang_tab.cpp" +#line 11654 "MachineIndependent/glslang_tab.cpp" break; - case 605: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ -#line 3938 "MachineIndependent/glslang.y" + case 609: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ +#line 3962 "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(); @@ -11594,27 +11664,27 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11598 "MachineIndependent/glslang_tab.cpp" +#line 11668 "MachineIndependent/glslang_tab.cpp" break; - case 606: /* switch_statement_list: %empty */ -#line 3950 "MachineIndependent/glslang.y" + case 610: /* switch_statement_list: %empty */ +#line 3974 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11606 "MachineIndependent/glslang_tab.cpp" +#line 11676 "MachineIndependent/glslang_tab.cpp" break; - case 607: /* switch_statement_list: statement_list */ -#line 3953 "MachineIndependent/glslang.y" + case 611: /* switch_statement_list: statement_list */ +#line 3977 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11614 "MachineIndependent/glslang_tab.cpp" +#line 11684 "MachineIndependent/glslang_tab.cpp" break; - case 608: /* case_label: CASE expression COLON */ -#line 3959 "MachineIndependent/glslang.y" + case 612: /* case_label: CASE expression COLON */ +#line 3983 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -11627,11 +11697,11 @@ yyreduce: (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 11631 "MachineIndependent/glslang_tab.cpp" +#line 11701 "MachineIndependent/glslang_tab.cpp" break; - case 609: /* case_label: DEFAULT COLON */ -#line 3971 "MachineIndependent/glslang.y" + case 613: /* case_label: DEFAULT COLON */ +#line 3995 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -11641,30 +11711,30 @@ yyreduce: else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 11645 "MachineIndependent/glslang_tab.cpp" +#line 11715 "MachineIndependent/glslang_tab.cpp" break; - case 610: /* iteration_statement: iteration_statement_nonattributed */ -#line 3983 "MachineIndependent/glslang.y" + case 614: /* iteration_statement: iteration_statement_nonattributed */ +#line 4007 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11653 "MachineIndependent/glslang_tab.cpp" +#line 11723 "MachineIndependent/glslang_tab.cpp" break; - case 611: /* iteration_statement: attribute iteration_statement_nonattributed */ -#line 3986 "MachineIndependent/glslang.y" + case 615: /* iteration_statement: attribute iteration_statement_nonattributed */ +#line 4010 "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"); parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11664 "MachineIndependent/glslang_tab.cpp" +#line 11734 "MachineIndependent/glslang_tab.cpp" break; - case 612: /* $@10: %empty */ -#line 3994 "MachineIndependent/glslang.y" + case 616: /* $@10: %empty */ +#line 4018 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -11673,11 +11743,11 @@ yyreduce: ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11677 "MachineIndependent/glslang_tab.cpp" +#line 11747 "MachineIndependent/glslang_tab.cpp" break; - case 613: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ -#line 4002 "MachineIndependent/glslang.y" + case 617: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ +#line 4026 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, true, (yyvsp[-5].lex).loc); @@ -11685,22 +11755,22 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11689 "MachineIndependent/glslang_tab.cpp" +#line 11759 "MachineIndependent/glslang_tab.cpp" break; - case 614: /* $@11: %empty */ -#line 4009 "MachineIndependent/glslang.y" + case 618: /* $@11: %empty */ +#line 4033 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11700 "MachineIndependent/glslang_tab.cpp" +#line 11770 "MachineIndependent/glslang_tab.cpp" break; - case 615: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ -#line 4015 "MachineIndependent/glslang.y" + case 619: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ +#line 4039 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -11713,22 +11783,22 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11717 "MachineIndependent/glslang_tab.cpp" +#line 11787 "MachineIndependent/glslang_tab.cpp" break; - case 616: /* $@12: %empty */ -#line 4027 "MachineIndependent/glslang.y" + case 620: /* $@12: %empty */ +#line 4051 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11728 "MachineIndependent/glslang_tab.cpp" +#line 11798 "MachineIndependent/glslang_tab.cpp" break; - case 617: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ -#line 4033 "MachineIndependent/glslang.y" + case 621: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ +#line 4057 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); @@ -11741,81 +11811,81 @@ yyreduce: --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11745 "MachineIndependent/glslang_tab.cpp" +#line 11815 "MachineIndependent/glslang_tab.cpp" break; - case 618: /* for_init_statement: expression_statement */ -#line 4048 "MachineIndependent/glslang.y" + case 622: /* for_init_statement: expression_statement */ +#line 4072 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11753 "MachineIndependent/glslang_tab.cpp" +#line 11823 "MachineIndependent/glslang_tab.cpp" break; - case 619: /* for_init_statement: declaration_statement */ -#line 4051 "MachineIndependent/glslang.y" + case 623: /* for_init_statement: declaration_statement */ +#line 4075 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11761 "MachineIndependent/glslang_tab.cpp" +#line 11831 "MachineIndependent/glslang_tab.cpp" break; - case 620: /* conditionopt: condition */ -#line 4057 "MachineIndependent/glslang.y" + case 624: /* conditionopt: condition */ +#line 4081 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 11769 "MachineIndependent/glslang_tab.cpp" +#line 11839 "MachineIndependent/glslang_tab.cpp" break; - case 621: /* conditionopt: %empty */ -#line 4060 "MachineIndependent/glslang.y" + case 625: /* conditionopt: %empty */ +#line 4084 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = 0; } -#line 11777 "MachineIndependent/glslang_tab.cpp" +#line 11847 "MachineIndependent/glslang_tab.cpp" break; - case 622: /* for_rest_statement: conditionopt SEMICOLON */ -#line 4066 "MachineIndependent/glslang.y" + case 626: /* for_rest_statement: conditionopt SEMICOLON */ +#line 4090 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 11786 "MachineIndependent/glslang_tab.cpp" +#line 11856 "MachineIndependent/glslang_tab.cpp" break; - case 623: /* for_rest_statement: conditionopt SEMICOLON expression */ -#line 4070 "MachineIndependent/glslang.y" + case 627: /* for_rest_statement: conditionopt SEMICOLON expression */ +#line 4094 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 11795 "MachineIndependent/glslang_tab.cpp" +#line 11865 "MachineIndependent/glslang_tab.cpp" break; - case 624: /* jump_statement: CONTINUE SEMICOLON */ -#line 4077 "MachineIndependent/glslang.y" + case 628: /* jump_statement: CONTINUE SEMICOLON */ +#line 4101 "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 11805 "MachineIndependent/glslang_tab.cpp" +#line 11875 "MachineIndependent/glslang_tab.cpp" break; - case 625: /* jump_statement: BREAK SEMICOLON */ -#line 4082 "MachineIndependent/glslang.y" + case 629: /* jump_statement: BREAK SEMICOLON */ +#line 4106 "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 11815 "MachineIndependent/glslang_tab.cpp" +#line 11885 "MachineIndependent/glslang_tab.cpp" break; - case 626: /* jump_statement: RETURN SEMICOLON */ -#line 4087 "MachineIndependent/glslang.y" + case 630: /* jump_statement: RETURN SEMICOLON */ +#line 4111 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -11823,101 +11893,101 @@ yyreduce: if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 11827 "MachineIndependent/glslang_tab.cpp" +#line 11897 "MachineIndependent/glslang_tab.cpp" break; - case 627: /* jump_statement: RETURN expression SEMICOLON */ -#line 4094 "MachineIndependent/glslang.y" + case 631: /* jump_statement: RETURN expression SEMICOLON */ +#line 4118 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 11835 "MachineIndependent/glslang_tab.cpp" +#line 11905 "MachineIndependent/glslang_tab.cpp" break; - case 628: /* jump_statement: DISCARD SEMICOLON */ -#line 4097 "MachineIndependent/glslang.y" + case 632: /* jump_statement: DISCARD SEMICOLON */ +#line 4121 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 11844 "MachineIndependent/glslang_tab.cpp" +#line 11914 "MachineIndependent/glslang_tab.cpp" break; - case 629: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ -#line 4101 "MachineIndependent/glslang.y" + case 633: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ +#line 4125 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc); } -#line 11853 "MachineIndependent/glslang_tab.cpp" +#line 11923 "MachineIndependent/glslang_tab.cpp" break; - case 630: /* jump_statement: TERMINATE_RAY SEMICOLON */ -#line 4105 "MachineIndependent/glslang.y" + case 634: /* jump_statement: TERMINATE_RAY SEMICOLON */ +#line 4129 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc); } -#line 11862 "MachineIndependent/glslang_tab.cpp" +#line 11932 "MachineIndependent/glslang_tab.cpp" break; - case 631: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ -#line 4109 "MachineIndependent/glslang.y" + case 635: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ +#line 4133 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc); } -#line 11871 "MachineIndependent/glslang_tab.cpp" +#line 11941 "MachineIndependent/glslang_tab.cpp" break; - case 632: /* translation_unit: external_declaration */ -#line 4118 "MachineIndependent/glslang.y" + case 636: /* translation_unit: external_declaration */ +#line 4142 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 11880 "MachineIndependent/glslang_tab.cpp" +#line 11950 "MachineIndependent/glslang_tab.cpp" break; - case 633: /* translation_unit: translation_unit external_declaration */ -#line 4122 "MachineIndependent/glslang.y" + case 637: /* translation_unit: translation_unit external_declaration */ +#line 4146 "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 11891 "MachineIndependent/glslang_tab.cpp" +#line 11961 "MachineIndependent/glslang_tab.cpp" break; - case 634: /* external_declaration: function_definition */ -#line 4131 "MachineIndependent/glslang.y" + case 638: /* external_declaration: function_definition */ +#line 4155 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11899 "MachineIndependent/glslang_tab.cpp" +#line 11969 "MachineIndependent/glslang_tab.cpp" break; - case 635: /* external_declaration: declaration */ -#line 4134 "MachineIndependent/glslang.y" + case 639: /* external_declaration: declaration */ +#line 4158 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11907 "MachineIndependent/glslang_tab.cpp" +#line 11977 "MachineIndependent/glslang_tab.cpp" break; - case 636: /* external_declaration: SEMICOLON */ -#line 4137 "MachineIndependent/glslang.y" + case 640: /* external_declaration: SEMICOLON */ +#line 4161 "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 11917 "MachineIndependent/glslang_tab.cpp" +#line 11987 "MachineIndependent/glslang_tab.cpp" break; - case 637: /* $@13: %empty */ -#line 4145 "MachineIndependent/glslang.y" + case 641: /* $@13: %empty */ +#line 4169 "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); @@ -11930,11 +12000,11 @@ yyreduce: ++parseContext.statementNestingLevel; } } -#line 11934 "MachineIndependent/glslang_tab.cpp" +#line 12004 "MachineIndependent/glslang_tab.cpp" break; - case 638: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ -#line 4157 "MachineIndependent/glslang.y" + case 642: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ +#line 4181 "MachineIndependent/glslang.y" { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -11962,228 +12032,228 @@ yyreduce: --parseContext.statementNestingLevel; } } -#line 11966 "MachineIndependent/glslang_tab.cpp" +#line 12036 "MachineIndependent/glslang_tab.cpp" break; - case 639: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ -#line 4187 "MachineIndependent/glslang.y" + case 643: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ +#line 4211 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); } -#line 11974 "MachineIndependent/glslang_tab.cpp" +#line 12044 "MachineIndependent/glslang_tab.cpp" break; - case 640: /* attribute_list: single_attribute */ -#line 4192 "MachineIndependent/glslang.y" + case 644: /* attribute_list: single_attribute */ +#line 4216 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 11982 "MachineIndependent/glslang_tab.cpp" +#line 12052 "MachineIndependent/glslang_tab.cpp" break; - case 641: /* attribute_list: attribute_list COMMA single_attribute */ -#line 4195 "MachineIndependent/glslang.y" + case 645: /* attribute_list: attribute_list COMMA single_attribute */ +#line 4219 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 11990 "MachineIndependent/glslang_tab.cpp" +#line 12060 "MachineIndependent/glslang_tab.cpp" break; - case 642: /* single_attribute: IDENTIFIER */ -#line 4200 "MachineIndependent/glslang.y" + case 646: /* single_attribute: IDENTIFIER */ +#line 4224 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 11998 "MachineIndependent/glslang_tab.cpp" +#line 12068 "MachineIndependent/glslang_tab.cpp" break; - case 643: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ -#line 4203 "MachineIndependent/glslang.y" + case 647: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ +#line 4227 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 12006 "MachineIndependent/glslang_tab.cpp" +#line 12076 "MachineIndependent/glslang_tab.cpp" break; - case 644: /* spirv_requirements_list: spirv_requirements_parameter */ -#line 4208 "MachineIndependent/glslang.y" + case 648: /* spirv_requirements_list: spirv_requirements_parameter */ +#line 4232 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq); } -#line 12014 "MachineIndependent/glslang_tab.cpp" +#line 12084 "MachineIndependent/glslang_tab.cpp" break; - case 645: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ -#line 4211 "MachineIndependent/glslang.y" + case 649: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ +#line 4235 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq)); } -#line 12022 "MachineIndependent/glslang_tab.cpp" +#line 12092 "MachineIndependent/glslang_tab.cpp" break; - case 646: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ -#line 4216 "MachineIndependent/glslang.y" + case 650: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ +#line 4240 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr); } -#line 12030 "MachineIndependent/glslang_tab.cpp" +#line 12100 "MachineIndependent/glslang_tab.cpp" break; - case 647: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ -#line 4219 "MachineIndependent/glslang.y" + case 651: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ +#line 4243 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 12038 "MachineIndependent/glslang_tab.cpp" +#line 12108 "MachineIndependent/glslang_tab.cpp" break; - case 648: /* spirv_extension_list: STRING_LITERAL */ -#line 4224 "MachineIndependent/glslang.y" + case 652: /* spirv_extension_list: STRING_LITERAL */ +#line 4248 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 12046 "MachineIndependent/glslang_tab.cpp" +#line 12116 "MachineIndependent/glslang_tab.cpp" break; - case 649: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ -#line 4227 "MachineIndependent/glslang.y" + case 653: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ +#line 4251 "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 12054 "MachineIndependent/glslang_tab.cpp" +#line 12124 "MachineIndependent/glslang_tab.cpp" break; - case 650: /* spirv_capability_list: INTCONSTANT */ -#line 4232 "MachineIndependent/glslang.y" + case 654: /* spirv_capability_list: INTCONSTANT */ +#line 4256 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true)); } -#line 12062 "MachineIndependent/glslang_tab.cpp" +#line 12132 "MachineIndependent/glslang_tab.cpp" break; - case 651: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ -#line 4235 "MachineIndependent/glslang.y" + case 655: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ +#line 4259 "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 12070 "MachineIndependent/glslang_tab.cpp" +#line 12140 "MachineIndependent/glslang_tab.cpp" break; - case 652: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4240 "MachineIndependent/glslang.y" + case 656: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4264 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); (yyval.interm.intermNode) = 0; } -#line 12079 "MachineIndependent/glslang_tab.cpp" +#line 12149 "MachineIndependent/glslang_tab.cpp" break; - case 653: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4244 "MachineIndependent/glslang.y" + case 657: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4268 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); (yyval.interm.intermNode) = 0; } -#line 12089 "MachineIndependent/glslang_tab.cpp" +#line 12159 "MachineIndependent/glslang_tab.cpp" break; - case 654: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4249 "MachineIndependent/glslang.y" + case 658: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ +#line 4273 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 12098 "MachineIndependent/glslang_tab.cpp" +#line 12168 "MachineIndependent/glslang_tab.cpp" break; - case 655: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4253 "MachineIndependent/glslang.y" + case 659: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ +#line 4277 "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 12108 "MachineIndependent/glslang_tab.cpp" +#line 12178 "MachineIndependent/glslang_tab.cpp" break; - case 656: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ -#line 4258 "MachineIndependent/glslang.y" + case 660: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ +#line 4282 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 12117 "MachineIndependent/glslang_tab.cpp" +#line 12187 "MachineIndependent/glslang_tab.cpp" break; - case 657: /* 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 4262 "MachineIndependent/glslang.y" + case 661: /* 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 4286 "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 12127 "MachineIndependent/glslang_tab.cpp" +#line 12197 "MachineIndependent/glslang_tab.cpp" break; - case 658: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ -#line 4269 "MachineIndependent/glslang.y" + case 662: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ +#line 4293 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 12135 "MachineIndependent/glslang_tab.cpp" +#line 12205 "MachineIndependent/glslang_tab.cpp" break; - case 659: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ -#line 4272 "MachineIndependent/glslang.y" + case 663: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ +#line 4296 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 12143 "MachineIndependent/glslang_tab.cpp" +#line 12213 "MachineIndependent/glslang_tab.cpp" break; - case 660: /* spirv_execution_mode_parameter: FLOATCONSTANT */ -#line 4277 "MachineIndependent/glslang.y" + case 664: /* spirv_execution_mode_parameter: FLOATCONSTANT */ +#line 4301 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 12151 "MachineIndependent/glslang_tab.cpp" +#line 12221 "MachineIndependent/glslang_tab.cpp" break; - case 661: /* spirv_execution_mode_parameter: INTCONSTANT */ -#line 4280 "MachineIndependent/glslang.y" + case 665: /* spirv_execution_mode_parameter: INTCONSTANT */ +#line 4304 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 12159 "MachineIndependent/glslang_tab.cpp" +#line 12229 "MachineIndependent/glslang_tab.cpp" break; - case 662: /* spirv_execution_mode_parameter: UINTCONSTANT */ -#line 4283 "MachineIndependent/glslang.y" + case 666: /* spirv_execution_mode_parameter: UINTCONSTANT */ +#line 4307 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 12167 "MachineIndependent/glslang_tab.cpp" +#line 12237 "MachineIndependent/glslang_tab.cpp" break; - case 663: /* spirv_execution_mode_parameter: BOOLCONSTANT */ -#line 4286 "MachineIndependent/glslang.y" + case 667: /* spirv_execution_mode_parameter: BOOLCONSTANT */ +#line 4310 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 12175 "MachineIndependent/glslang_tab.cpp" +#line 12245 "MachineIndependent/glslang_tab.cpp" break; - case 664: /* spirv_execution_mode_parameter: STRING_LITERAL */ -#line 4289 "MachineIndependent/glslang.y" + case 668: /* spirv_execution_mode_parameter: STRING_LITERAL */ +#line 4313 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 12183 "MachineIndependent/glslang_tab.cpp" +#line 12253 "MachineIndependent/glslang_tab.cpp" break; - case 665: /* spirv_execution_mode_id_parameter_list: constant_expression */ -#line 4294 "MachineIndependent/glslang.y" + case 669: /* spirv_execution_mode_id_parameter_list: constant_expression */ +#line 4318 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -12193,11 +12263,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 12197 "MachineIndependent/glslang_tab.cpp" +#line 12267 "MachineIndependent/glslang_tab.cpp" break; - case 666: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ -#line 4303 "MachineIndependent/glslang.y" + case 670: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ +#line 4327 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -12207,351 +12277,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 12211 "MachineIndependent/glslang_tab.cpp" +#line 12281 "MachineIndependent/glslang_tab.cpp" break; - case 667: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4314 "MachineIndependent/glslang.y" + case 671: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4338 "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 12221 "MachineIndependent/glslang_tab.cpp" +#line 12291 "MachineIndependent/glslang_tab.cpp" break; - case 668: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4319 "MachineIndependent/glslang.y" + case 672: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4343 "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 12232 "MachineIndependent/glslang_tab.cpp" +#line 12302 "MachineIndependent/glslang_tab.cpp" break; - case 669: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4327 "MachineIndependent/glslang.y" + case 673: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4351 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i); } -#line 12241 "MachineIndependent/glslang_tab.cpp" +#line 12311 "MachineIndependent/glslang_tab.cpp" break; - case 670: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4331 "MachineIndependent/glslang.y" + case 674: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4355 "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 12251 "MachineIndependent/glslang_tab.cpp" +#line 12321 "MachineIndependent/glslang_tab.cpp" break; - case 671: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4336 "MachineIndependent/glslang.y" + case 675: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ +#line 4360 "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 12260 "MachineIndependent/glslang_tab.cpp" +#line 12330 "MachineIndependent/glslang_tab.cpp" break; - case 672: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4340 "MachineIndependent/glslang.y" + case 676: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ +#line 4364 "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 12270 "MachineIndependent/glslang_tab.cpp" +#line 12340 "MachineIndependent/glslang_tab.cpp" break; - case 673: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4345 "MachineIndependent/glslang.y" + case 677: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ +#line 4369 "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 12279 "MachineIndependent/glslang_tab.cpp" +#line 12349 "MachineIndependent/glslang_tab.cpp" break; - case 674: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4349 "MachineIndependent/glslang.y" + case 678: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ +#line 4373 "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 12289 "MachineIndependent/glslang_tab.cpp" +#line 12359 "MachineIndependent/glslang_tab.cpp" break; - case 675: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4354 "MachineIndependent/glslang.y" + case 679: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ +#line 4378 "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 12298 "MachineIndependent/glslang_tab.cpp" +#line 12368 "MachineIndependent/glslang_tab.cpp" break; - case 676: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4358 "MachineIndependent/glslang.y" + case 680: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ +#line 4382 "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 12308 "MachineIndependent/glslang_tab.cpp" +#line 12378 "MachineIndependent/glslang_tab.cpp" break; - case 677: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ -#line 4365 "MachineIndependent/glslang.y" + case 681: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ +#line 4389 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 12316 "MachineIndependent/glslang_tab.cpp" +#line 12386 "MachineIndependent/glslang_tab.cpp" break; - case 678: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ -#line 4368 "MachineIndependent/glslang.y" + case 682: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ +#line 4392 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 12324 "MachineIndependent/glslang_tab.cpp" +#line 12394 "MachineIndependent/glslang_tab.cpp" break; - case 679: /* spirv_decorate_parameter: FLOATCONSTANT */ -#line 4373 "MachineIndependent/glslang.y" + case 683: /* spirv_decorate_parameter: FLOATCONSTANT */ +#line 4397 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 12332 "MachineIndependent/glslang_tab.cpp" +#line 12402 "MachineIndependent/glslang_tab.cpp" break; - case 680: /* spirv_decorate_parameter: INTCONSTANT */ -#line 4376 "MachineIndependent/glslang.y" + case 684: /* spirv_decorate_parameter: INTCONSTANT */ +#line 4400 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 12340 "MachineIndependent/glslang_tab.cpp" +#line 12410 "MachineIndependent/glslang_tab.cpp" break; - case 681: /* spirv_decorate_parameter: UINTCONSTANT */ -#line 4379 "MachineIndependent/glslang.y" + case 685: /* spirv_decorate_parameter: UINTCONSTANT */ +#line 4403 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 12348 "MachineIndependent/glslang_tab.cpp" +#line 12418 "MachineIndependent/glslang_tab.cpp" break; - case 682: /* spirv_decorate_parameter: BOOLCONSTANT */ -#line 4382 "MachineIndependent/glslang.y" + case 686: /* spirv_decorate_parameter: BOOLCONSTANT */ +#line 4406 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 12356 "MachineIndependent/glslang_tab.cpp" +#line 12426 "MachineIndependent/glslang_tab.cpp" break; - case 683: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter */ -#line 4387 "MachineIndependent/glslang.y" + case 687: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter */ +#line 4411 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 12364 "MachineIndependent/glslang_tab.cpp" +#line 12434 "MachineIndependent/glslang_tab.cpp" break; - case 684: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter */ -#line 4390 "MachineIndependent/glslang.y" + case 688: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter */ +#line 4414 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 12372 "MachineIndependent/glslang_tab.cpp" +#line 12442 "MachineIndependent/glslang_tab.cpp" break; - case 685: /* spirv_decorate_id_parameter: variable_identifier */ -#line 4395 "MachineIndependent/glslang.y" + case 689: /* spirv_decorate_id_parameter: variable_identifier */ +#line 4419 "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 12383 "MachineIndependent/glslang_tab.cpp" +#line 12453 "MachineIndependent/glslang_tab.cpp" break; - case 686: /* spirv_decorate_id_parameter: FLOATCONSTANT */ -#line 4401 "MachineIndependent/glslang.y" + case 690: /* spirv_decorate_id_parameter: FLOATCONSTANT */ +#line 4425 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 12391 "MachineIndependent/glslang_tab.cpp" +#line 12461 "MachineIndependent/glslang_tab.cpp" break; - case 687: /* spirv_decorate_id_parameter: INTCONSTANT */ -#line 4404 "MachineIndependent/glslang.y" + case 691: /* spirv_decorate_id_parameter: INTCONSTANT */ +#line 4428 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 12399 "MachineIndependent/glslang_tab.cpp" +#line 12469 "MachineIndependent/glslang_tab.cpp" break; - case 688: /* spirv_decorate_id_parameter: UINTCONSTANT */ -#line 4407 "MachineIndependent/glslang.y" + case 692: /* spirv_decorate_id_parameter: UINTCONSTANT */ +#line 4431 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 12407 "MachineIndependent/glslang_tab.cpp" +#line 12477 "MachineIndependent/glslang_tab.cpp" break; - case 689: /* spirv_decorate_id_parameter: BOOLCONSTANT */ -#line 4410 "MachineIndependent/glslang.y" + case 693: /* spirv_decorate_id_parameter: BOOLCONSTANT */ +#line 4434 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 12415 "MachineIndependent/glslang_tab.cpp" +#line 12485 "MachineIndependent/glslang_tab.cpp" break; - case 690: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ -#line 4415 "MachineIndependent/glslang.y" + case 694: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ +#line 4439 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate( parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 12424 "MachineIndependent/glslang_tab.cpp" +#line 12494 "MachineIndependent/glslang_tab.cpp" break; - case 691: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ -#line 4419 "MachineIndependent/glslang.y" + case 695: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ +#line 4443 "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 12432 "MachineIndependent/glslang_tab.cpp" +#line 12502 "MachineIndependent/glslang_tab.cpp" break; - case 692: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4424 "MachineIndependent/glslang.y" + case 696: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ +#line 4448 "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 12441 "MachineIndependent/glslang_tab.cpp" +#line 12511 "MachineIndependent/glslang_tab.cpp" break; - case 693: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4428 "MachineIndependent/glslang.y" + case 697: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ +#line 4452 "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 12451 "MachineIndependent/glslang_tab.cpp" +#line 12521 "MachineIndependent/glslang_tab.cpp" break; - case 694: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4433 "MachineIndependent/glslang.y" + case 698: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4457 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst)); } -#line 12460 "MachineIndependent/glslang_tab.cpp" +#line 12530 "MachineIndependent/glslang_tab.cpp" break; - case 695: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4437 "MachineIndependent/glslang.y" + case 699: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4461 "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 12470 "MachineIndependent/glslang_tab.cpp" +#line 12540 "MachineIndependent/glslang_tab.cpp" break; - case 696: /* spirv_type_parameter_list: spirv_type_parameter */ -#line 4444 "MachineIndependent/glslang.y" + case 700: /* spirv_type_parameter_list: spirv_type_parameter */ +#line 4468 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams); } -#line 12478 "MachineIndependent/glslang_tab.cpp" +#line 12548 "MachineIndependent/glslang_tab.cpp" break; - case 697: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ -#line 4447 "MachineIndependent/glslang.y" + case 701: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ +#line 4471 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams)); } -#line 12486 "MachineIndependent/glslang_tab.cpp" +#line 12556 "MachineIndependent/glslang_tab.cpp" break; - case 698: /* spirv_type_parameter: constant_expression */ -#line 4452 "MachineIndependent/glslang.y" + case 702: /* spirv_type_parameter: constant_expression */ +#line 4476 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion()); } -#line 12494 "MachineIndependent/glslang_tab.cpp" +#line 12564 "MachineIndependent/glslang_tab.cpp" break; - case 699: /* spirv_type_parameter: type_specifier_nonarray */ -#line 4455 "MachineIndependent/glslang.y" + case 703: /* spirv_type_parameter: type_specifier_nonarray */ +#line 4479 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 12502 "MachineIndependent/glslang_tab.cpp" +#line 12572 "MachineIndependent/glslang_tab.cpp" break; - case 700: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4460 "MachineIndependent/glslang.y" + case 704: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4484 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 12510 "MachineIndependent/glslang_tab.cpp" +#line 12580 "MachineIndependent/glslang_tab.cpp" break; - case 701: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4463 "MachineIndependent/glslang.y" + case 705: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4487 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 12519 "MachineIndependent/glslang_tab.cpp" +#line 12589 "MachineIndependent/glslang_tab.cpp" break; - case 702: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ -#line 4469 "MachineIndependent/glslang.y" + case 706: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ +#line 4493 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst); } -#line 12527 "MachineIndependent/glslang_tab.cpp" +#line 12597 "MachineIndependent/glslang_tab.cpp" break; - case 703: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ -#line 4472 "MachineIndependent/glslang.y" + case 707: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ +#line 4496 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst)); } -#line 12535 "MachineIndependent/glslang_tab.cpp" +#line 12605 "MachineIndependent/glslang_tab.cpp" break; - case 704: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ -#line 4477 "MachineIndependent/glslang.y" + case 708: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ +#line 4501 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string); } -#line 12543 "MachineIndependent/glslang_tab.cpp" +#line 12613 "MachineIndependent/glslang_tab.cpp" break; - case 705: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ -#line 4480 "MachineIndependent/glslang.y" + case 709: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ +#line 4504 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i); } -#line 12551 "MachineIndependent/glslang_tab.cpp" +#line 12621 "MachineIndependent/glslang_tab.cpp" break; -#line 12555 "MachineIndependent/glslang_tab.cpp" +#line 12625 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -12775,5 +12845,5 @@ yyreturnlab: return yyresult; } -#line 4484 "MachineIndependent/glslang.y" +#line 4508 "MachineIndependent/glslang.y" diff --git a/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h b/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h index 270714c00..2ff6f78ae 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h @@ -114,413 +114,417 @@ extern int yydebug; UTEXTURE2DARRAY = 315, /* UTEXTURE2DARRAY */ ATTRIBUTE = 316, /* ATTRIBUTE */ VARYING = 317, /* VARYING */ - FLOAT16_T = 318, /* FLOAT16_T */ - FLOAT32_T = 319, /* FLOAT32_T */ - DOUBLE = 320, /* DOUBLE */ - FLOAT64_T = 321, /* FLOAT64_T */ - INT64_T = 322, /* INT64_T */ - UINT64_T = 323, /* UINT64_T */ - INT32_T = 324, /* INT32_T */ - UINT32_T = 325, /* UINT32_T */ - INT16_T = 326, /* INT16_T */ - UINT16_T = 327, /* UINT16_T */ - INT8_T = 328, /* INT8_T */ - UINT8_T = 329, /* UINT8_T */ - I64VEC2 = 330, /* I64VEC2 */ - I64VEC3 = 331, /* I64VEC3 */ - I64VEC4 = 332, /* I64VEC4 */ - U64VEC2 = 333, /* U64VEC2 */ - U64VEC3 = 334, /* U64VEC3 */ - U64VEC4 = 335, /* U64VEC4 */ - I32VEC2 = 336, /* I32VEC2 */ - I32VEC3 = 337, /* I32VEC3 */ - I32VEC4 = 338, /* I32VEC4 */ - U32VEC2 = 339, /* U32VEC2 */ - U32VEC3 = 340, /* U32VEC3 */ - U32VEC4 = 341, /* U32VEC4 */ - I16VEC2 = 342, /* I16VEC2 */ - I16VEC3 = 343, /* I16VEC3 */ - I16VEC4 = 344, /* I16VEC4 */ - U16VEC2 = 345, /* U16VEC2 */ - U16VEC3 = 346, /* U16VEC3 */ - U16VEC4 = 347, /* U16VEC4 */ - I8VEC2 = 348, /* I8VEC2 */ - I8VEC3 = 349, /* I8VEC3 */ - I8VEC4 = 350, /* I8VEC4 */ - U8VEC2 = 351, /* U8VEC2 */ - U8VEC3 = 352, /* U8VEC3 */ - U8VEC4 = 353, /* U8VEC4 */ - DVEC2 = 354, /* DVEC2 */ - DVEC3 = 355, /* DVEC3 */ - DVEC4 = 356, /* DVEC4 */ - DMAT2 = 357, /* DMAT2 */ - DMAT3 = 358, /* DMAT3 */ - DMAT4 = 359, /* DMAT4 */ - F16VEC2 = 360, /* F16VEC2 */ - F16VEC3 = 361, /* F16VEC3 */ - F16VEC4 = 362, /* F16VEC4 */ - F16MAT2 = 363, /* F16MAT2 */ - F16MAT3 = 364, /* F16MAT3 */ - F16MAT4 = 365, /* F16MAT4 */ - F32VEC2 = 366, /* F32VEC2 */ - F32VEC3 = 367, /* F32VEC3 */ - F32VEC4 = 368, /* F32VEC4 */ - F32MAT2 = 369, /* F32MAT2 */ - F32MAT3 = 370, /* F32MAT3 */ - F32MAT4 = 371, /* F32MAT4 */ - F64VEC2 = 372, /* F64VEC2 */ - F64VEC3 = 373, /* F64VEC3 */ - F64VEC4 = 374, /* F64VEC4 */ - F64MAT2 = 375, /* F64MAT2 */ - F64MAT3 = 376, /* F64MAT3 */ - F64MAT4 = 377, /* F64MAT4 */ - DMAT2X2 = 378, /* DMAT2X2 */ - DMAT2X3 = 379, /* DMAT2X3 */ - DMAT2X4 = 380, /* DMAT2X4 */ - DMAT3X2 = 381, /* DMAT3X2 */ - DMAT3X3 = 382, /* DMAT3X3 */ - DMAT3X4 = 383, /* DMAT3X4 */ - DMAT4X2 = 384, /* DMAT4X2 */ - DMAT4X3 = 385, /* DMAT4X3 */ - DMAT4X4 = 386, /* DMAT4X4 */ - F16MAT2X2 = 387, /* F16MAT2X2 */ - F16MAT2X3 = 388, /* F16MAT2X3 */ - F16MAT2X4 = 389, /* F16MAT2X4 */ - F16MAT3X2 = 390, /* F16MAT3X2 */ - F16MAT3X3 = 391, /* F16MAT3X3 */ - F16MAT3X4 = 392, /* F16MAT3X4 */ - F16MAT4X2 = 393, /* F16MAT4X2 */ - F16MAT4X3 = 394, /* F16MAT4X3 */ - F16MAT4X4 = 395, /* F16MAT4X4 */ - F32MAT2X2 = 396, /* F32MAT2X2 */ - F32MAT2X3 = 397, /* F32MAT2X3 */ - F32MAT2X4 = 398, /* F32MAT2X4 */ - F32MAT3X2 = 399, /* F32MAT3X2 */ - F32MAT3X3 = 400, /* F32MAT3X3 */ - F32MAT3X4 = 401, /* F32MAT3X4 */ - F32MAT4X2 = 402, /* F32MAT4X2 */ - F32MAT4X3 = 403, /* F32MAT4X3 */ - F32MAT4X4 = 404, /* F32MAT4X4 */ - F64MAT2X2 = 405, /* F64MAT2X2 */ - F64MAT2X3 = 406, /* F64MAT2X3 */ - F64MAT2X4 = 407, /* F64MAT2X4 */ - F64MAT3X2 = 408, /* F64MAT3X2 */ - F64MAT3X3 = 409, /* F64MAT3X3 */ - F64MAT3X4 = 410, /* F64MAT3X4 */ - F64MAT4X2 = 411, /* F64MAT4X2 */ - F64MAT4X3 = 412, /* F64MAT4X3 */ - F64MAT4X4 = 413, /* F64MAT4X4 */ - ATOMIC_UINT = 414, /* ATOMIC_UINT */ - ACCSTRUCTNV = 415, /* ACCSTRUCTNV */ - ACCSTRUCTEXT = 416, /* ACCSTRUCTEXT */ - RAYQUERYEXT = 417, /* RAYQUERYEXT */ - FCOOPMATNV = 418, /* FCOOPMATNV */ - ICOOPMATNV = 419, /* ICOOPMATNV */ - UCOOPMATNV = 420, /* UCOOPMATNV */ - COOPMAT = 421, /* COOPMAT */ - COOPVECNV = 422, /* COOPVECNV */ - HITOBJECTNV = 423, /* HITOBJECTNV */ - HITOBJECTATTRNV = 424, /* HITOBJECTATTRNV */ - TENSORLAYOUTNV = 425, /* TENSORLAYOUTNV */ - TENSORVIEWNV = 426, /* TENSORVIEWNV */ - SAMPLERCUBEARRAY = 427, /* SAMPLERCUBEARRAY */ - SAMPLERCUBEARRAYSHADOW = 428, /* SAMPLERCUBEARRAYSHADOW */ - ISAMPLERCUBEARRAY = 429, /* ISAMPLERCUBEARRAY */ - USAMPLERCUBEARRAY = 430, /* USAMPLERCUBEARRAY */ - SAMPLER1D = 431, /* SAMPLER1D */ - SAMPLER1DARRAY = 432, /* SAMPLER1DARRAY */ - SAMPLER1DARRAYSHADOW = 433, /* SAMPLER1DARRAYSHADOW */ - ISAMPLER1D = 434, /* ISAMPLER1D */ - SAMPLER1DSHADOW = 435, /* SAMPLER1DSHADOW */ - SAMPLER2DRECT = 436, /* SAMPLER2DRECT */ - SAMPLER2DRECTSHADOW = 437, /* SAMPLER2DRECTSHADOW */ - ISAMPLER2DRECT = 438, /* ISAMPLER2DRECT */ - USAMPLER2DRECT = 439, /* USAMPLER2DRECT */ - SAMPLERBUFFER = 440, /* SAMPLERBUFFER */ - ISAMPLERBUFFER = 441, /* ISAMPLERBUFFER */ - USAMPLERBUFFER = 442, /* USAMPLERBUFFER */ - SAMPLER2DMS = 443, /* SAMPLER2DMS */ - ISAMPLER2DMS = 444, /* ISAMPLER2DMS */ - USAMPLER2DMS = 445, /* USAMPLER2DMS */ - SAMPLER2DMSARRAY = 446, /* SAMPLER2DMSARRAY */ - ISAMPLER2DMSARRAY = 447, /* ISAMPLER2DMSARRAY */ - USAMPLER2DMSARRAY = 448, /* USAMPLER2DMSARRAY */ - SAMPLEREXTERNALOES = 449, /* SAMPLEREXTERNALOES */ - SAMPLEREXTERNAL2DY2YEXT = 450, /* SAMPLEREXTERNAL2DY2YEXT */ - ISAMPLER1DARRAY = 451, /* ISAMPLER1DARRAY */ - USAMPLER1D = 452, /* USAMPLER1D */ - USAMPLER1DARRAY = 453, /* USAMPLER1DARRAY */ - F16SAMPLER1D = 454, /* F16SAMPLER1D */ - F16SAMPLER2D = 455, /* F16SAMPLER2D */ - F16SAMPLER3D = 456, /* F16SAMPLER3D */ - F16SAMPLER2DRECT = 457, /* F16SAMPLER2DRECT */ - F16SAMPLERCUBE = 458, /* F16SAMPLERCUBE */ - F16SAMPLER1DARRAY = 459, /* F16SAMPLER1DARRAY */ - F16SAMPLER2DARRAY = 460, /* F16SAMPLER2DARRAY */ - F16SAMPLERCUBEARRAY = 461, /* F16SAMPLERCUBEARRAY */ - F16SAMPLERBUFFER = 462, /* F16SAMPLERBUFFER */ - F16SAMPLER2DMS = 463, /* F16SAMPLER2DMS */ - F16SAMPLER2DMSARRAY = 464, /* F16SAMPLER2DMSARRAY */ - F16SAMPLER1DSHADOW = 465, /* F16SAMPLER1DSHADOW */ - F16SAMPLER2DSHADOW = 466, /* F16SAMPLER2DSHADOW */ - F16SAMPLER1DARRAYSHADOW = 467, /* F16SAMPLER1DARRAYSHADOW */ - F16SAMPLER2DARRAYSHADOW = 468, /* F16SAMPLER2DARRAYSHADOW */ - F16SAMPLER2DRECTSHADOW = 469, /* F16SAMPLER2DRECTSHADOW */ - F16SAMPLERCUBESHADOW = 470, /* F16SAMPLERCUBESHADOW */ - F16SAMPLERCUBEARRAYSHADOW = 471, /* F16SAMPLERCUBEARRAYSHADOW */ - IMAGE1D = 472, /* IMAGE1D */ - IIMAGE1D = 473, /* IIMAGE1D */ - UIMAGE1D = 474, /* UIMAGE1D */ - IMAGE2D = 475, /* IMAGE2D */ - IIMAGE2D = 476, /* IIMAGE2D */ - UIMAGE2D = 477, /* UIMAGE2D */ - IMAGE3D = 478, /* IMAGE3D */ - IIMAGE3D = 479, /* IIMAGE3D */ - UIMAGE3D = 480, /* UIMAGE3D */ - IMAGE2DRECT = 481, /* IMAGE2DRECT */ - IIMAGE2DRECT = 482, /* IIMAGE2DRECT */ - UIMAGE2DRECT = 483, /* UIMAGE2DRECT */ - IMAGECUBE = 484, /* IMAGECUBE */ - IIMAGECUBE = 485, /* IIMAGECUBE */ - UIMAGECUBE = 486, /* UIMAGECUBE */ - IMAGEBUFFER = 487, /* IMAGEBUFFER */ - IIMAGEBUFFER = 488, /* IIMAGEBUFFER */ - UIMAGEBUFFER = 489, /* UIMAGEBUFFER */ - IMAGE1DARRAY = 490, /* IMAGE1DARRAY */ - IIMAGE1DARRAY = 491, /* IIMAGE1DARRAY */ - UIMAGE1DARRAY = 492, /* UIMAGE1DARRAY */ - IMAGE2DARRAY = 493, /* IMAGE2DARRAY */ - IIMAGE2DARRAY = 494, /* IIMAGE2DARRAY */ - UIMAGE2DARRAY = 495, /* UIMAGE2DARRAY */ - IMAGECUBEARRAY = 496, /* IMAGECUBEARRAY */ - IIMAGECUBEARRAY = 497, /* IIMAGECUBEARRAY */ - UIMAGECUBEARRAY = 498, /* UIMAGECUBEARRAY */ - IMAGE2DMS = 499, /* IMAGE2DMS */ - IIMAGE2DMS = 500, /* IIMAGE2DMS */ - UIMAGE2DMS = 501, /* UIMAGE2DMS */ - IMAGE2DMSARRAY = 502, /* IMAGE2DMSARRAY */ - IIMAGE2DMSARRAY = 503, /* IIMAGE2DMSARRAY */ - UIMAGE2DMSARRAY = 504, /* UIMAGE2DMSARRAY */ - F16IMAGE1D = 505, /* F16IMAGE1D */ - F16IMAGE2D = 506, /* F16IMAGE2D */ - F16IMAGE3D = 507, /* F16IMAGE3D */ - F16IMAGE2DRECT = 508, /* F16IMAGE2DRECT */ - F16IMAGECUBE = 509, /* F16IMAGECUBE */ - F16IMAGE1DARRAY = 510, /* F16IMAGE1DARRAY */ - F16IMAGE2DARRAY = 511, /* F16IMAGE2DARRAY */ - F16IMAGECUBEARRAY = 512, /* F16IMAGECUBEARRAY */ - F16IMAGEBUFFER = 513, /* F16IMAGEBUFFER */ - F16IMAGE2DMS = 514, /* F16IMAGE2DMS */ - F16IMAGE2DMSARRAY = 515, /* F16IMAGE2DMSARRAY */ - I64IMAGE1D = 516, /* I64IMAGE1D */ - U64IMAGE1D = 517, /* U64IMAGE1D */ - I64IMAGE2D = 518, /* I64IMAGE2D */ - U64IMAGE2D = 519, /* U64IMAGE2D */ - I64IMAGE3D = 520, /* I64IMAGE3D */ - U64IMAGE3D = 521, /* U64IMAGE3D */ - I64IMAGE2DRECT = 522, /* I64IMAGE2DRECT */ - U64IMAGE2DRECT = 523, /* U64IMAGE2DRECT */ - I64IMAGECUBE = 524, /* I64IMAGECUBE */ - U64IMAGECUBE = 525, /* U64IMAGECUBE */ - I64IMAGEBUFFER = 526, /* I64IMAGEBUFFER */ - U64IMAGEBUFFER = 527, /* U64IMAGEBUFFER */ - I64IMAGE1DARRAY = 528, /* I64IMAGE1DARRAY */ - U64IMAGE1DARRAY = 529, /* U64IMAGE1DARRAY */ - I64IMAGE2DARRAY = 530, /* I64IMAGE2DARRAY */ - U64IMAGE2DARRAY = 531, /* U64IMAGE2DARRAY */ - I64IMAGECUBEARRAY = 532, /* I64IMAGECUBEARRAY */ - U64IMAGECUBEARRAY = 533, /* U64IMAGECUBEARRAY */ - I64IMAGE2DMS = 534, /* I64IMAGE2DMS */ - U64IMAGE2DMS = 535, /* U64IMAGE2DMS */ - I64IMAGE2DMSARRAY = 536, /* I64IMAGE2DMSARRAY */ - U64IMAGE2DMSARRAY = 537, /* U64IMAGE2DMSARRAY */ - TEXTURECUBEARRAY = 538, /* TEXTURECUBEARRAY */ - ITEXTURECUBEARRAY = 539, /* ITEXTURECUBEARRAY */ - UTEXTURECUBEARRAY = 540, /* UTEXTURECUBEARRAY */ - TEXTURE1D = 541, /* TEXTURE1D */ - ITEXTURE1D = 542, /* ITEXTURE1D */ - UTEXTURE1D = 543, /* UTEXTURE1D */ - TEXTURE1DARRAY = 544, /* TEXTURE1DARRAY */ - ITEXTURE1DARRAY = 545, /* ITEXTURE1DARRAY */ - UTEXTURE1DARRAY = 546, /* UTEXTURE1DARRAY */ - TEXTURE2DRECT = 547, /* TEXTURE2DRECT */ - ITEXTURE2DRECT = 548, /* ITEXTURE2DRECT */ - UTEXTURE2DRECT = 549, /* UTEXTURE2DRECT */ - TEXTUREBUFFER = 550, /* TEXTUREBUFFER */ - ITEXTUREBUFFER = 551, /* ITEXTUREBUFFER */ - UTEXTUREBUFFER = 552, /* UTEXTUREBUFFER */ - TEXTURE2DMS = 553, /* TEXTURE2DMS */ - ITEXTURE2DMS = 554, /* ITEXTURE2DMS */ - UTEXTURE2DMS = 555, /* UTEXTURE2DMS */ - TEXTURE2DMSARRAY = 556, /* TEXTURE2DMSARRAY */ - ITEXTURE2DMSARRAY = 557, /* ITEXTURE2DMSARRAY */ - UTEXTURE2DMSARRAY = 558, /* UTEXTURE2DMSARRAY */ - F16TEXTURE1D = 559, /* F16TEXTURE1D */ - F16TEXTURE2D = 560, /* F16TEXTURE2D */ - F16TEXTURE3D = 561, /* F16TEXTURE3D */ - F16TEXTURE2DRECT = 562, /* F16TEXTURE2DRECT */ - F16TEXTURECUBE = 563, /* F16TEXTURECUBE */ - F16TEXTURE1DARRAY = 564, /* F16TEXTURE1DARRAY */ - F16TEXTURE2DARRAY = 565, /* F16TEXTURE2DARRAY */ - F16TEXTURECUBEARRAY = 566, /* F16TEXTURECUBEARRAY */ - F16TEXTUREBUFFER = 567, /* F16TEXTUREBUFFER */ - F16TEXTURE2DMS = 568, /* F16TEXTURE2DMS */ - F16TEXTURE2DMSARRAY = 569, /* F16TEXTURE2DMSARRAY */ - SUBPASSINPUT = 570, /* SUBPASSINPUT */ - SUBPASSINPUTMS = 571, /* SUBPASSINPUTMS */ - ISUBPASSINPUT = 572, /* ISUBPASSINPUT */ - ISUBPASSINPUTMS = 573, /* ISUBPASSINPUTMS */ - USUBPASSINPUT = 574, /* USUBPASSINPUT */ - USUBPASSINPUTMS = 575, /* USUBPASSINPUTMS */ - F16SUBPASSINPUT = 576, /* F16SUBPASSINPUT */ - F16SUBPASSINPUTMS = 577, /* F16SUBPASSINPUTMS */ - SPIRV_INSTRUCTION = 578, /* SPIRV_INSTRUCTION */ - SPIRV_EXECUTION_MODE = 579, /* SPIRV_EXECUTION_MODE */ - SPIRV_EXECUTION_MODE_ID = 580, /* SPIRV_EXECUTION_MODE_ID */ - SPIRV_DECORATE = 581, /* SPIRV_DECORATE */ - SPIRV_DECORATE_ID = 582, /* SPIRV_DECORATE_ID */ - SPIRV_DECORATE_STRING = 583, /* SPIRV_DECORATE_STRING */ - SPIRV_TYPE = 584, /* SPIRV_TYPE */ - SPIRV_STORAGE_CLASS = 585, /* SPIRV_STORAGE_CLASS */ - SPIRV_BY_REFERENCE = 586, /* SPIRV_BY_REFERENCE */ - SPIRV_LITERAL = 587, /* SPIRV_LITERAL */ - ATTACHMENTEXT = 588, /* ATTACHMENTEXT */ - IATTACHMENTEXT = 589, /* IATTACHMENTEXT */ - UATTACHMENTEXT = 590, /* UATTACHMENTEXT */ - LEFT_OP = 591, /* LEFT_OP */ - RIGHT_OP = 592, /* RIGHT_OP */ - INC_OP = 593, /* INC_OP */ - DEC_OP = 594, /* DEC_OP */ - LE_OP = 595, /* LE_OP */ - GE_OP = 596, /* GE_OP */ - EQ_OP = 597, /* EQ_OP */ - NE_OP = 598, /* NE_OP */ - AND_OP = 599, /* AND_OP */ - OR_OP = 600, /* OR_OP */ - XOR_OP = 601, /* XOR_OP */ - MUL_ASSIGN = 602, /* MUL_ASSIGN */ - DIV_ASSIGN = 603, /* DIV_ASSIGN */ - ADD_ASSIGN = 604, /* ADD_ASSIGN */ - MOD_ASSIGN = 605, /* MOD_ASSIGN */ - LEFT_ASSIGN = 606, /* LEFT_ASSIGN */ - RIGHT_ASSIGN = 607, /* RIGHT_ASSIGN */ - AND_ASSIGN = 608, /* AND_ASSIGN */ - XOR_ASSIGN = 609, /* XOR_ASSIGN */ - OR_ASSIGN = 610, /* OR_ASSIGN */ - SUB_ASSIGN = 611, /* SUB_ASSIGN */ - STRING_LITERAL = 612, /* STRING_LITERAL */ - LEFT_PAREN = 613, /* LEFT_PAREN */ - RIGHT_PAREN = 614, /* RIGHT_PAREN */ - LEFT_BRACKET = 615, /* LEFT_BRACKET */ - RIGHT_BRACKET = 616, /* RIGHT_BRACKET */ - LEFT_BRACE = 617, /* LEFT_BRACE */ - RIGHT_BRACE = 618, /* RIGHT_BRACE */ - DOT = 619, /* DOT */ - COMMA = 620, /* COMMA */ - COLON = 621, /* COLON */ - EQUAL = 622, /* EQUAL */ - SEMICOLON = 623, /* SEMICOLON */ - BANG = 624, /* BANG */ - DASH = 625, /* DASH */ - TILDE = 626, /* TILDE */ - PLUS = 627, /* PLUS */ - STAR = 628, /* STAR */ - SLASH = 629, /* SLASH */ - PERCENT = 630, /* PERCENT */ - LEFT_ANGLE = 631, /* LEFT_ANGLE */ - RIGHT_ANGLE = 632, /* RIGHT_ANGLE */ - VERTICAL_BAR = 633, /* VERTICAL_BAR */ - CARET = 634, /* CARET */ - AMPERSAND = 635, /* AMPERSAND */ - QUESTION = 636, /* QUESTION */ - INVARIANT = 637, /* INVARIANT */ - HIGH_PRECISION = 638, /* HIGH_PRECISION */ - MEDIUM_PRECISION = 639, /* MEDIUM_PRECISION */ - LOW_PRECISION = 640, /* LOW_PRECISION */ - PRECISION = 641, /* PRECISION */ - PACKED = 642, /* PACKED */ - RESOURCE = 643, /* RESOURCE */ - SUPERP = 644, /* SUPERP */ - FLOATCONSTANT = 645, /* FLOATCONSTANT */ - INTCONSTANT = 646, /* INTCONSTANT */ - UINTCONSTANT = 647, /* UINTCONSTANT */ - BOOLCONSTANT = 648, /* BOOLCONSTANT */ - IDENTIFIER = 649, /* IDENTIFIER */ - TYPE_NAME = 650, /* TYPE_NAME */ - CENTROID = 651, /* CENTROID */ - IN = 652, /* IN */ - OUT = 653, /* OUT */ - INOUT = 654, /* INOUT */ - STRUCT = 655, /* STRUCT */ - VOID = 656, /* VOID */ - WHILE = 657, /* WHILE */ - BREAK = 658, /* BREAK */ - CONTINUE = 659, /* CONTINUE */ - DO = 660, /* DO */ - ELSE = 661, /* ELSE */ - FOR = 662, /* FOR */ - IF = 663, /* IF */ - DISCARD = 664, /* DISCARD */ - RETURN = 665, /* RETURN */ - SWITCH = 666, /* SWITCH */ - CASE = 667, /* CASE */ - DEFAULT = 668, /* DEFAULT */ - TERMINATE_INVOCATION = 669, /* TERMINATE_INVOCATION */ - TERMINATE_RAY = 670, /* TERMINATE_RAY */ - IGNORE_INTERSECTION = 671, /* IGNORE_INTERSECTION */ - UNIFORM = 672, /* UNIFORM */ - SHARED = 673, /* SHARED */ - BUFFER = 674, /* BUFFER */ - TILEIMAGEEXT = 675, /* TILEIMAGEEXT */ - FLAT = 676, /* FLAT */ - SMOOTH = 677, /* SMOOTH */ - LAYOUT = 678, /* LAYOUT */ - DOUBLECONSTANT = 679, /* DOUBLECONSTANT */ - INT16CONSTANT = 680, /* INT16CONSTANT */ - UINT16CONSTANT = 681, /* UINT16CONSTANT */ - FLOAT16CONSTANT = 682, /* FLOAT16CONSTANT */ - INT32CONSTANT = 683, /* INT32CONSTANT */ - UINT32CONSTANT = 684, /* UINT32CONSTANT */ - INT64CONSTANT = 685, /* INT64CONSTANT */ - UINT64CONSTANT = 686, /* UINT64CONSTANT */ - SUBROUTINE = 687, /* SUBROUTINE */ - DEMOTE = 688, /* DEMOTE */ - FUNCTION = 689, /* FUNCTION */ - PAYLOADNV = 690, /* PAYLOADNV */ - PAYLOADINNV = 691, /* PAYLOADINNV */ - HITATTRNV = 692, /* HITATTRNV */ - CALLDATANV = 693, /* CALLDATANV */ - CALLDATAINNV = 694, /* CALLDATAINNV */ - PAYLOADEXT = 695, /* PAYLOADEXT */ - PAYLOADINEXT = 696, /* PAYLOADINEXT */ - HITATTREXT = 697, /* HITATTREXT */ - CALLDATAEXT = 698, /* CALLDATAEXT */ - CALLDATAINEXT = 699, /* CALLDATAINEXT */ - PATCH = 700, /* PATCH */ - SAMPLE = 701, /* SAMPLE */ - NONUNIFORM = 702, /* NONUNIFORM */ - COHERENT = 703, /* COHERENT */ - VOLATILE = 704, /* VOLATILE */ - RESTRICT = 705, /* RESTRICT */ - READONLY = 706, /* READONLY */ - WRITEONLY = 707, /* WRITEONLY */ - NONTEMPORAL = 708, /* NONTEMPORAL */ - DEVICECOHERENT = 709, /* DEVICECOHERENT */ - QUEUEFAMILYCOHERENT = 710, /* QUEUEFAMILYCOHERENT */ - WORKGROUPCOHERENT = 711, /* WORKGROUPCOHERENT */ - SUBGROUPCOHERENT = 712, /* SUBGROUPCOHERENT */ - NONPRIVATE = 713, /* NONPRIVATE */ - SHADERCALLCOHERENT = 714, /* SHADERCALLCOHERENT */ - NOPERSPECTIVE = 715, /* NOPERSPECTIVE */ - EXPLICITINTERPAMD = 716, /* EXPLICITINTERPAMD */ - PERVERTEXEXT = 717, /* PERVERTEXEXT */ - PERVERTEXNV = 718, /* PERVERTEXNV */ - PERPRIMITIVENV = 719, /* PERPRIMITIVENV */ - PERVIEWNV = 720, /* PERVIEWNV */ - PERTASKNV = 721, /* PERTASKNV */ - PERPRIMITIVEEXT = 722, /* PERPRIMITIVEEXT */ - TASKPAYLOADWORKGROUPEXT = 723, /* TASKPAYLOADWORKGROUPEXT */ - PRECISE = 724 /* PRECISE */ + BFLOAT16_T = 318, /* BFLOAT16_T */ + FLOAT16_T = 319, /* FLOAT16_T */ + FLOAT32_T = 320, /* FLOAT32_T */ + DOUBLE = 321, /* DOUBLE */ + FLOAT64_T = 322, /* FLOAT64_T */ + INT64_T = 323, /* INT64_T */ + UINT64_T = 324, /* UINT64_T */ + INT32_T = 325, /* INT32_T */ + UINT32_T = 326, /* UINT32_T */ + INT16_T = 327, /* INT16_T */ + UINT16_T = 328, /* UINT16_T */ + INT8_T = 329, /* INT8_T */ + UINT8_T = 330, /* UINT8_T */ + I64VEC2 = 331, /* I64VEC2 */ + I64VEC3 = 332, /* I64VEC3 */ + I64VEC4 = 333, /* I64VEC4 */ + U64VEC2 = 334, /* U64VEC2 */ + U64VEC3 = 335, /* U64VEC3 */ + U64VEC4 = 336, /* U64VEC4 */ + I32VEC2 = 337, /* I32VEC2 */ + I32VEC3 = 338, /* I32VEC3 */ + I32VEC4 = 339, /* I32VEC4 */ + U32VEC2 = 340, /* U32VEC2 */ + U32VEC3 = 341, /* U32VEC3 */ + U32VEC4 = 342, /* U32VEC4 */ + I16VEC2 = 343, /* I16VEC2 */ + I16VEC3 = 344, /* I16VEC3 */ + I16VEC4 = 345, /* I16VEC4 */ + U16VEC2 = 346, /* U16VEC2 */ + U16VEC3 = 347, /* U16VEC3 */ + U16VEC4 = 348, /* U16VEC4 */ + I8VEC2 = 349, /* I8VEC2 */ + I8VEC3 = 350, /* I8VEC3 */ + I8VEC4 = 351, /* I8VEC4 */ + U8VEC2 = 352, /* U8VEC2 */ + U8VEC3 = 353, /* U8VEC3 */ + U8VEC4 = 354, /* U8VEC4 */ + DVEC2 = 355, /* DVEC2 */ + DVEC3 = 356, /* DVEC3 */ + DVEC4 = 357, /* DVEC4 */ + DMAT2 = 358, /* DMAT2 */ + DMAT3 = 359, /* DMAT3 */ + DMAT4 = 360, /* DMAT4 */ + BF16VEC2 = 361, /* BF16VEC2 */ + BF16VEC3 = 362, /* BF16VEC3 */ + BF16VEC4 = 363, /* BF16VEC4 */ + F16VEC2 = 364, /* F16VEC2 */ + F16VEC3 = 365, /* F16VEC3 */ + F16VEC4 = 366, /* F16VEC4 */ + F16MAT2 = 367, /* F16MAT2 */ + F16MAT3 = 368, /* F16MAT3 */ + F16MAT4 = 369, /* F16MAT4 */ + F32VEC2 = 370, /* F32VEC2 */ + F32VEC3 = 371, /* F32VEC3 */ + F32VEC4 = 372, /* F32VEC4 */ + F32MAT2 = 373, /* F32MAT2 */ + F32MAT3 = 374, /* F32MAT3 */ + F32MAT4 = 375, /* F32MAT4 */ + F64VEC2 = 376, /* F64VEC2 */ + F64VEC3 = 377, /* F64VEC3 */ + F64VEC4 = 378, /* F64VEC4 */ + F64MAT2 = 379, /* F64MAT2 */ + F64MAT3 = 380, /* F64MAT3 */ + F64MAT4 = 381, /* F64MAT4 */ + DMAT2X2 = 382, /* DMAT2X2 */ + DMAT2X3 = 383, /* DMAT2X3 */ + DMAT2X4 = 384, /* DMAT2X4 */ + DMAT3X2 = 385, /* DMAT3X2 */ + DMAT3X3 = 386, /* DMAT3X3 */ + DMAT3X4 = 387, /* DMAT3X4 */ + DMAT4X2 = 388, /* DMAT4X2 */ + DMAT4X3 = 389, /* DMAT4X3 */ + DMAT4X4 = 390, /* DMAT4X4 */ + F16MAT2X2 = 391, /* F16MAT2X2 */ + F16MAT2X3 = 392, /* F16MAT2X3 */ + F16MAT2X4 = 393, /* F16MAT2X4 */ + F16MAT3X2 = 394, /* F16MAT3X2 */ + F16MAT3X3 = 395, /* F16MAT3X3 */ + F16MAT3X4 = 396, /* F16MAT3X4 */ + F16MAT4X2 = 397, /* F16MAT4X2 */ + F16MAT4X3 = 398, /* F16MAT4X3 */ + F16MAT4X4 = 399, /* F16MAT4X4 */ + F32MAT2X2 = 400, /* F32MAT2X2 */ + F32MAT2X3 = 401, /* F32MAT2X3 */ + F32MAT2X4 = 402, /* F32MAT2X4 */ + F32MAT3X2 = 403, /* F32MAT3X2 */ + F32MAT3X3 = 404, /* F32MAT3X3 */ + F32MAT3X4 = 405, /* F32MAT3X4 */ + F32MAT4X2 = 406, /* F32MAT4X2 */ + F32MAT4X3 = 407, /* F32MAT4X3 */ + F32MAT4X4 = 408, /* F32MAT4X4 */ + F64MAT2X2 = 409, /* F64MAT2X2 */ + F64MAT2X3 = 410, /* F64MAT2X3 */ + F64MAT2X4 = 411, /* F64MAT2X4 */ + F64MAT3X2 = 412, /* F64MAT3X2 */ + F64MAT3X3 = 413, /* F64MAT3X3 */ + F64MAT3X4 = 414, /* F64MAT3X4 */ + F64MAT4X2 = 415, /* F64MAT4X2 */ + F64MAT4X3 = 416, /* F64MAT4X3 */ + F64MAT4X4 = 417, /* F64MAT4X4 */ + ATOMIC_UINT = 418, /* ATOMIC_UINT */ + ACCSTRUCTNV = 419, /* ACCSTRUCTNV */ + ACCSTRUCTEXT = 420, /* ACCSTRUCTEXT */ + RAYQUERYEXT = 421, /* RAYQUERYEXT */ + FCOOPMATNV = 422, /* FCOOPMATNV */ + ICOOPMATNV = 423, /* ICOOPMATNV */ + UCOOPMATNV = 424, /* UCOOPMATNV */ + COOPMAT = 425, /* COOPMAT */ + COOPVECNV = 426, /* COOPVECNV */ + HITOBJECTNV = 427, /* HITOBJECTNV */ + HITOBJECTATTRNV = 428, /* HITOBJECTATTRNV */ + TENSORLAYOUTNV = 429, /* TENSORLAYOUTNV */ + TENSORVIEWNV = 430, /* TENSORVIEWNV */ + SAMPLERCUBEARRAY = 431, /* SAMPLERCUBEARRAY */ + SAMPLERCUBEARRAYSHADOW = 432, /* SAMPLERCUBEARRAYSHADOW */ + ISAMPLERCUBEARRAY = 433, /* ISAMPLERCUBEARRAY */ + USAMPLERCUBEARRAY = 434, /* USAMPLERCUBEARRAY */ + SAMPLER1D = 435, /* SAMPLER1D */ + SAMPLER1DARRAY = 436, /* SAMPLER1DARRAY */ + SAMPLER1DARRAYSHADOW = 437, /* SAMPLER1DARRAYSHADOW */ + ISAMPLER1D = 438, /* ISAMPLER1D */ + SAMPLER1DSHADOW = 439, /* SAMPLER1DSHADOW */ + SAMPLER2DRECT = 440, /* SAMPLER2DRECT */ + SAMPLER2DRECTSHADOW = 441, /* SAMPLER2DRECTSHADOW */ + ISAMPLER2DRECT = 442, /* ISAMPLER2DRECT */ + USAMPLER2DRECT = 443, /* USAMPLER2DRECT */ + SAMPLERBUFFER = 444, /* SAMPLERBUFFER */ + ISAMPLERBUFFER = 445, /* ISAMPLERBUFFER */ + USAMPLERBUFFER = 446, /* USAMPLERBUFFER */ + SAMPLER2DMS = 447, /* SAMPLER2DMS */ + ISAMPLER2DMS = 448, /* ISAMPLER2DMS */ + USAMPLER2DMS = 449, /* USAMPLER2DMS */ + SAMPLER2DMSARRAY = 450, /* SAMPLER2DMSARRAY */ + ISAMPLER2DMSARRAY = 451, /* ISAMPLER2DMSARRAY */ + USAMPLER2DMSARRAY = 452, /* USAMPLER2DMSARRAY */ + SAMPLEREXTERNALOES = 453, /* SAMPLEREXTERNALOES */ + SAMPLEREXTERNAL2DY2YEXT = 454, /* SAMPLEREXTERNAL2DY2YEXT */ + ISAMPLER1DARRAY = 455, /* ISAMPLER1DARRAY */ + USAMPLER1D = 456, /* USAMPLER1D */ + USAMPLER1DARRAY = 457, /* USAMPLER1DARRAY */ + F16SAMPLER1D = 458, /* F16SAMPLER1D */ + F16SAMPLER2D = 459, /* F16SAMPLER2D */ + F16SAMPLER3D = 460, /* F16SAMPLER3D */ + F16SAMPLER2DRECT = 461, /* F16SAMPLER2DRECT */ + F16SAMPLERCUBE = 462, /* F16SAMPLERCUBE */ + F16SAMPLER1DARRAY = 463, /* F16SAMPLER1DARRAY */ + F16SAMPLER2DARRAY = 464, /* F16SAMPLER2DARRAY */ + F16SAMPLERCUBEARRAY = 465, /* F16SAMPLERCUBEARRAY */ + F16SAMPLERBUFFER = 466, /* F16SAMPLERBUFFER */ + F16SAMPLER2DMS = 467, /* F16SAMPLER2DMS */ + F16SAMPLER2DMSARRAY = 468, /* F16SAMPLER2DMSARRAY */ + F16SAMPLER1DSHADOW = 469, /* F16SAMPLER1DSHADOW */ + F16SAMPLER2DSHADOW = 470, /* F16SAMPLER2DSHADOW */ + F16SAMPLER1DARRAYSHADOW = 471, /* F16SAMPLER1DARRAYSHADOW */ + F16SAMPLER2DARRAYSHADOW = 472, /* F16SAMPLER2DARRAYSHADOW */ + F16SAMPLER2DRECTSHADOW = 473, /* F16SAMPLER2DRECTSHADOW */ + F16SAMPLERCUBESHADOW = 474, /* F16SAMPLERCUBESHADOW */ + F16SAMPLERCUBEARRAYSHADOW = 475, /* F16SAMPLERCUBEARRAYSHADOW */ + IMAGE1D = 476, /* IMAGE1D */ + IIMAGE1D = 477, /* IIMAGE1D */ + UIMAGE1D = 478, /* UIMAGE1D */ + IMAGE2D = 479, /* IMAGE2D */ + IIMAGE2D = 480, /* IIMAGE2D */ + UIMAGE2D = 481, /* UIMAGE2D */ + IMAGE3D = 482, /* IMAGE3D */ + IIMAGE3D = 483, /* IIMAGE3D */ + UIMAGE3D = 484, /* UIMAGE3D */ + IMAGE2DRECT = 485, /* IMAGE2DRECT */ + IIMAGE2DRECT = 486, /* IIMAGE2DRECT */ + UIMAGE2DRECT = 487, /* UIMAGE2DRECT */ + IMAGECUBE = 488, /* IMAGECUBE */ + IIMAGECUBE = 489, /* IIMAGECUBE */ + UIMAGECUBE = 490, /* UIMAGECUBE */ + IMAGEBUFFER = 491, /* IMAGEBUFFER */ + IIMAGEBUFFER = 492, /* IIMAGEBUFFER */ + UIMAGEBUFFER = 493, /* UIMAGEBUFFER */ + IMAGE1DARRAY = 494, /* IMAGE1DARRAY */ + IIMAGE1DARRAY = 495, /* IIMAGE1DARRAY */ + UIMAGE1DARRAY = 496, /* UIMAGE1DARRAY */ + IMAGE2DARRAY = 497, /* IMAGE2DARRAY */ + IIMAGE2DARRAY = 498, /* IIMAGE2DARRAY */ + UIMAGE2DARRAY = 499, /* UIMAGE2DARRAY */ + IMAGECUBEARRAY = 500, /* IMAGECUBEARRAY */ + IIMAGECUBEARRAY = 501, /* IIMAGECUBEARRAY */ + UIMAGECUBEARRAY = 502, /* UIMAGECUBEARRAY */ + IMAGE2DMS = 503, /* IMAGE2DMS */ + IIMAGE2DMS = 504, /* IIMAGE2DMS */ + UIMAGE2DMS = 505, /* UIMAGE2DMS */ + IMAGE2DMSARRAY = 506, /* IMAGE2DMSARRAY */ + IIMAGE2DMSARRAY = 507, /* IIMAGE2DMSARRAY */ + UIMAGE2DMSARRAY = 508, /* UIMAGE2DMSARRAY */ + F16IMAGE1D = 509, /* F16IMAGE1D */ + F16IMAGE2D = 510, /* F16IMAGE2D */ + F16IMAGE3D = 511, /* F16IMAGE3D */ + F16IMAGE2DRECT = 512, /* F16IMAGE2DRECT */ + F16IMAGECUBE = 513, /* F16IMAGECUBE */ + F16IMAGE1DARRAY = 514, /* F16IMAGE1DARRAY */ + F16IMAGE2DARRAY = 515, /* F16IMAGE2DARRAY */ + F16IMAGECUBEARRAY = 516, /* F16IMAGECUBEARRAY */ + F16IMAGEBUFFER = 517, /* F16IMAGEBUFFER */ + F16IMAGE2DMS = 518, /* F16IMAGE2DMS */ + F16IMAGE2DMSARRAY = 519, /* F16IMAGE2DMSARRAY */ + I64IMAGE1D = 520, /* I64IMAGE1D */ + U64IMAGE1D = 521, /* U64IMAGE1D */ + I64IMAGE2D = 522, /* I64IMAGE2D */ + U64IMAGE2D = 523, /* U64IMAGE2D */ + I64IMAGE3D = 524, /* I64IMAGE3D */ + U64IMAGE3D = 525, /* U64IMAGE3D */ + I64IMAGE2DRECT = 526, /* I64IMAGE2DRECT */ + U64IMAGE2DRECT = 527, /* U64IMAGE2DRECT */ + I64IMAGECUBE = 528, /* I64IMAGECUBE */ + U64IMAGECUBE = 529, /* U64IMAGECUBE */ + I64IMAGEBUFFER = 530, /* I64IMAGEBUFFER */ + U64IMAGEBUFFER = 531, /* U64IMAGEBUFFER */ + I64IMAGE1DARRAY = 532, /* I64IMAGE1DARRAY */ + U64IMAGE1DARRAY = 533, /* U64IMAGE1DARRAY */ + I64IMAGE2DARRAY = 534, /* I64IMAGE2DARRAY */ + U64IMAGE2DARRAY = 535, /* U64IMAGE2DARRAY */ + I64IMAGECUBEARRAY = 536, /* I64IMAGECUBEARRAY */ + U64IMAGECUBEARRAY = 537, /* U64IMAGECUBEARRAY */ + I64IMAGE2DMS = 538, /* I64IMAGE2DMS */ + U64IMAGE2DMS = 539, /* U64IMAGE2DMS */ + I64IMAGE2DMSARRAY = 540, /* I64IMAGE2DMSARRAY */ + U64IMAGE2DMSARRAY = 541, /* U64IMAGE2DMSARRAY */ + TEXTURECUBEARRAY = 542, /* TEXTURECUBEARRAY */ + ITEXTURECUBEARRAY = 543, /* ITEXTURECUBEARRAY */ + UTEXTURECUBEARRAY = 544, /* UTEXTURECUBEARRAY */ + TEXTURE1D = 545, /* TEXTURE1D */ + ITEXTURE1D = 546, /* ITEXTURE1D */ + UTEXTURE1D = 547, /* UTEXTURE1D */ + TEXTURE1DARRAY = 548, /* TEXTURE1DARRAY */ + ITEXTURE1DARRAY = 549, /* ITEXTURE1DARRAY */ + UTEXTURE1DARRAY = 550, /* UTEXTURE1DARRAY */ + TEXTURE2DRECT = 551, /* TEXTURE2DRECT */ + ITEXTURE2DRECT = 552, /* ITEXTURE2DRECT */ + UTEXTURE2DRECT = 553, /* UTEXTURE2DRECT */ + TEXTUREBUFFER = 554, /* TEXTUREBUFFER */ + ITEXTUREBUFFER = 555, /* ITEXTUREBUFFER */ + UTEXTUREBUFFER = 556, /* UTEXTUREBUFFER */ + TEXTURE2DMS = 557, /* TEXTURE2DMS */ + ITEXTURE2DMS = 558, /* ITEXTURE2DMS */ + UTEXTURE2DMS = 559, /* UTEXTURE2DMS */ + TEXTURE2DMSARRAY = 560, /* TEXTURE2DMSARRAY */ + ITEXTURE2DMSARRAY = 561, /* ITEXTURE2DMSARRAY */ + UTEXTURE2DMSARRAY = 562, /* UTEXTURE2DMSARRAY */ + F16TEXTURE1D = 563, /* F16TEXTURE1D */ + F16TEXTURE2D = 564, /* F16TEXTURE2D */ + F16TEXTURE3D = 565, /* F16TEXTURE3D */ + F16TEXTURE2DRECT = 566, /* F16TEXTURE2DRECT */ + F16TEXTURECUBE = 567, /* F16TEXTURECUBE */ + F16TEXTURE1DARRAY = 568, /* F16TEXTURE1DARRAY */ + F16TEXTURE2DARRAY = 569, /* F16TEXTURE2DARRAY */ + F16TEXTURECUBEARRAY = 570, /* F16TEXTURECUBEARRAY */ + F16TEXTUREBUFFER = 571, /* F16TEXTUREBUFFER */ + F16TEXTURE2DMS = 572, /* F16TEXTURE2DMS */ + F16TEXTURE2DMSARRAY = 573, /* F16TEXTURE2DMSARRAY */ + SUBPASSINPUT = 574, /* SUBPASSINPUT */ + SUBPASSINPUTMS = 575, /* SUBPASSINPUTMS */ + ISUBPASSINPUT = 576, /* ISUBPASSINPUT */ + ISUBPASSINPUTMS = 577, /* ISUBPASSINPUTMS */ + USUBPASSINPUT = 578, /* USUBPASSINPUT */ + USUBPASSINPUTMS = 579, /* USUBPASSINPUTMS */ + F16SUBPASSINPUT = 580, /* F16SUBPASSINPUT */ + F16SUBPASSINPUTMS = 581, /* F16SUBPASSINPUTMS */ + SPIRV_INSTRUCTION = 582, /* SPIRV_INSTRUCTION */ + SPIRV_EXECUTION_MODE = 583, /* SPIRV_EXECUTION_MODE */ + SPIRV_EXECUTION_MODE_ID = 584, /* SPIRV_EXECUTION_MODE_ID */ + SPIRV_DECORATE = 585, /* SPIRV_DECORATE */ + SPIRV_DECORATE_ID = 586, /* SPIRV_DECORATE_ID */ + SPIRV_DECORATE_STRING = 587, /* SPIRV_DECORATE_STRING */ + SPIRV_TYPE = 588, /* SPIRV_TYPE */ + SPIRV_STORAGE_CLASS = 589, /* SPIRV_STORAGE_CLASS */ + SPIRV_BY_REFERENCE = 590, /* SPIRV_BY_REFERENCE */ + SPIRV_LITERAL = 591, /* SPIRV_LITERAL */ + ATTACHMENTEXT = 592, /* ATTACHMENTEXT */ + IATTACHMENTEXT = 593, /* IATTACHMENTEXT */ + UATTACHMENTEXT = 594, /* UATTACHMENTEXT */ + LEFT_OP = 595, /* LEFT_OP */ + RIGHT_OP = 596, /* RIGHT_OP */ + INC_OP = 597, /* INC_OP */ + DEC_OP = 598, /* DEC_OP */ + LE_OP = 599, /* LE_OP */ + GE_OP = 600, /* GE_OP */ + EQ_OP = 601, /* EQ_OP */ + NE_OP = 602, /* NE_OP */ + AND_OP = 603, /* AND_OP */ + OR_OP = 604, /* OR_OP */ + XOR_OP = 605, /* XOR_OP */ + MUL_ASSIGN = 606, /* MUL_ASSIGN */ + DIV_ASSIGN = 607, /* DIV_ASSIGN */ + ADD_ASSIGN = 608, /* ADD_ASSIGN */ + MOD_ASSIGN = 609, /* MOD_ASSIGN */ + LEFT_ASSIGN = 610, /* LEFT_ASSIGN */ + RIGHT_ASSIGN = 611, /* RIGHT_ASSIGN */ + AND_ASSIGN = 612, /* AND_ASSIGN */ + XOR_ASSIGN = 613, /* XOR_ASSIGN */ + OR_ASSIGN = 614, /* OR_ASSIGN */ + SUB_ASSIGN = 615, /* SUB_ASSIGN */ + STRING_LITERAL = 616, /* STRING_LITERAL */ + LEFT_PAREN = 617, /* LEFT_PAREN */ + RIGHT_PAREN = 618, /* RIGHT_PAREN */ + LEFT_BRACKET = 619, /* LEFT_BRACKET */ + RIGHT_BRACKET = 620, /* RIGHT_BRACKET */ + LEFT_BRACE = 621, /* LEFT_BRACE */ + RIGHT_BRACE = 622, /* RIGHT_BRACE */ + DOT = 623, /* DOT */ + COMMA = 624, /* COMMA */ + COLON = 625, /* COLON */ + EQUAL = 626, /* EQUAL */ + SEMICOLON = 627, /* SEMICOLON */ + BANG = 628, /* BANG */ + DASH = 629, /* DASH */ + TILDE = 630, /* TILDE */ + PLUS = 631, /* PLUS */ + STAR = 632, /* STAR */ + SLASH = 633, /* SLASH */ + PERCENT = 634, /* PERCENT */ + LEFT_ANGLE = 635, /* LEFT_ANGLE */ + RIGHT_ANGLE = 636, /* RIGHT_ANGLE */ + VERTICAL_BAR = 637, /* VERTICAL_BAR */ + CARET = 638, /* CARET */ + AMPERSAND = 639, /* AMPERSAND */ + QUESTION = 640, /* QUESTION */ + INVARIANT = 641, /* INVARIANT */ + HIGH_PRECISION = 642, /* HIGH_PRECISION */ + MEDIUM_PRECISION = 643, /* MEDIUM_PRECISION */ + LOW_PRECISION = 644, /* LOW_PRECISION */ + PRECISION = 645, /* PRECISION */ + PACKED = 646, /* PACKED */ + RESOURCE = 647, /* RESOURCE */ + SUPERP = 648, /* SUPERP */ + FLOATCONSTANT = 649, /* FLOATCONSTANT */ + INTCONSTANT = 650, /* INTCONSTANT */ + UINTCONSTANT = 651, /* UINTCONSTANT */ + BOOLCONSTANT = 652, /* BOOLCONSTANT */ + IDENTIFIER = 653, /* IDENTIFIER */ + TYPE_NAME = 654, /* TYPE_NAME */ + CENTROID = 655, /* CENTROID */ + IN = 656, /* IN */ + OUT = 657, /* OUT */ + INOUT = 658, /* INOUT */ + STRUCT = 659, /* STRUCT */ + VOID = 660, /* VOID */ + WHILE = 661, /* WHILE */ + BREAK = 662, /* BREAK */ + CONTINUE = 663, /* CONTINUE */ + DO = 664, /* DO */ + ELSE = 665, /* ELSE */ + FOR = 666, /* FOR */ + IF = 667, /* IF */ + DISCARD = 668, /* DISCARD */ + RETURN = 669, /* RETURN */ + SWITCH = 670, /* SWITCH */ + CASE = 671, /* CASE */ + DEFAULT = 672, /* DEFAULT */ + TERMINATE_INVOCATION = 673, /* TERMINATE_INVOCATION */ + TERMINATE_RAY = 674, /* TERMINATE_RAY */ + IGNORE_INTERSECTION = 675, /* IGNORE_INTERSECTION */ + UNIFORM = 676, /* UNIFORM */ + SHARED = 677, /* SHARED */ + BUFFER = 678, /* BUFFER */ + TILEIMAGEEXT = 679, /* TILEIMAGEEXT */ + FLAT = 680, /* FLAT */ + SMOOTH = 681, /* SMOOTH */ + LAYOUT = 682, /* LAYOUT */ + DOUBLECONSTANT = 683, /* DOUBLECONSTANT */ + INT16CONSTANT = 684, /* INT16CONSTANT */ + UINT16CONSTANT = 685, /* UINT16CONSTANT */ + FLOAT16CONSTANT = 686, /* FLOAT16CONSTANT */ + INT32CONSTANT = 687, /* INT32CONSTANT */ + UINT32CONSTANT = 688, /* UINT32CONSTANT */ + INT64CONSTANT = 689, /* INT64CONSTANT */ + UINT64CONSTANT = 690, /* UINT64CONSTANT */ + SUBROUTINE = 691, /* SUBROUTINE */ + DEMOTE = 692, /* DEMOTE */ + FUNCTION = 693, /* FUNCTION */ + PAYLOADNV = 694, /* PAYLOADNV */ + PAYLOADINNV = 695, /* PAYLOADINNV */ + HITATTRNV = 696, /* HITATTRNV */ + CALLDATANV = 697, /* CALLDATANV */ + CALLDATAINNV = 698, /* CALLDATAINNV */ + PAYLOADEXT = 699, /* PAYLOADEXT */ + PAYLOADINEXT = 700, /* PAYLOADINEXT */ + HITATTREXT = 701, /* HITATTREXT */ + CALLDATAEXT = 702, /* CALLDATAEXT */ + CALLDATAINEXT = 703, /* CALLDATAINEXT */ + PATCH = 704, /* PATCH */ + SAMPLE = 705, /* SAMPLE */ + NONUNIFORM = 706, /* NONUNIFORM */ + COHERENT = 707, /* COHERENT */ + VOLATILE = 708, /* VOLATILE */ + RESTRICT = 709, /* RESTRICT */ + READONLY = 710, /* READONLY */ + WRITEONLY = 711, /* WRITEONLY */ + NONTEMPORAL = 712, /* NONTEMPORAL */ + DEVICECOHERENT = 713, /* DEVICECOHERENT */ + QUEUEFAMILYCOHERENT = 714, /* QUEUEFAMILYCOHERENT */ + WORKGROUPCOHERENT = 715, /* WORKGROUPCOHERENT */ + SUBGROUPCOHERENT = 716, /* SUBGROUPCOHERENT */ + NONPRIVATE = 717, /* NONPRIVATE */ + SHADERCALLCOHERENT = 718, /* SHADERCALLCOHERENT */ + NOPERSPECTIVE = 719, /* NOPERSPECTIVE */ + EXPLICITINTERPAMD = 720, /* EXPLICITINTERPAMD */ + PERVERTEXEXT = 721, /* PERVERTEXEXT */ + PERVERTEXNV = 722, /* PERVERTEXNV */ + PERPRIMITIVENV = 723, /* PERPRIMITIVENV */ + PERVIEWNV = 724, /* PERVIEWNV */ + PERTASKNV = 725, /* PERTASKNV */ + PERPRIMITIVEEXT = 726, /* PERPRIMITIVEEXT */ + TASKPAYLOADWORKGROUPEXT = 727, /* TASKPAYLOADWORKGROUPEXT */ + PRECISE = 728 /* PRECISE */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -568,7 +572,7 @@ union YYSTYPE glslang::TTypeParameters* typeParameters; } interm; -#line 572 "MachineIndependent/glslang_tab.cpp.h" +#line 576 "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 9415547d6..866503a79 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp @@ -625,6 +625,10 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpConstructBMat4x2: out.debug << "Construct bmat4x2"; break; case EOpConstructBMat4x3: out.debug << "Construct bmat4x3"; break; case EOpConstructBMat4x4: out.debug << "Construct bmat4"; break; + case EOpConstructBFloat16: out.debug << "Construct bfloat16_t"; break; + case EOpConstructBF16Vec2: out.debug << "Construct bf16vec2"; break; + case EOpConstructBF16Vec3: out.debug << "Construct bf16vec3"; break; + case EOpConstructBF16Vec4: out.debug << "Construct bf16vec4"; break; case EOpConstructFloat16: out.debug << "Construct float16_t"; break; case EOpConstructF16Vec2: out.debug << "Construct f16vec2"; break; case EOpConstructF16Vec3: out.debug << "Construct f16vec3"; break; @@ -1159,6 +1163,7 @@ static void OutputConstantUnion(TInfoSink& out, const TIntermTyped* node, const case EbtFloat: case EbtDouble: case EbtFloat16: + case EbtBFloat16: OutputDouble(out, constUnion[i].getDConst(), extra); out.debug << "\n"; break; diff --git a/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp b/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp index 7bdf526cc..f53479e01 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp +++ b/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp @@ -57,9 +57,12 @@ namespace glslang { // // Link-time error emitter. // -void TIntermediate::error(TInfoSink& infoSink, const char* message, EShLanguage unitStage) +void TIntermediate::error(TInfoSink& infoSink, const TSourceLoc* loc, EShMessages messages, const char* message, + EShLanguage unitStage) { infoSink.info.prefix(EPrefixError); + if (loc) + infoSink.info.location(*loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn); if (unitStage == EShLangCount) infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n"; else if (language == EShLangCount) @@ -71,9 +74,12 @@ void TIntermediate::error(TInfoSink& infoSink, const char* message, EShLanguage } // Link-time warning. -void TIntermediate::warn(TInfoSink& infoSink, const char* message, EShLanguage unitStage) +void TIntermediate::warn(TInfoSink& infoSink, const TSourceLoc* loc, EShMessages messages, const char* message, + EShLanguage unitStage) { infoSink.info.prefix(EPrefixWarning); + if (loc) + infoSink.info.location(*loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn); if (unitStage == EShLangCount) infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n"; else if (language == EShLangCount) @@ -143,10 +149,43 @@ static bool isSameSymbol(TIntermSymbol* symbol1, TIntermSymbol* symbol2) { return true; return false; } + +// +// merge implicit array sizes for uniform/buffer objects +// +void TIntermediate::mergeImplicitArraySizes(TInfoSink&, TIntermediate& unit) { + if (unit.treeRoot == nullptr || treeRoot == nullptr) + return; + + // Get the linker-object lists + TIntermSequence& linkerObjects = findLinkerObjects()->getSequence(); + TIntermSequence unitLinkerObjects = unit.findLinkerObjects()->getSequence(); + + // filter unitLinkerObjects to only contain uniforms + auto end = std::remove_if(unitLinkerObjects.begin(), unitLinkerObjects.end(), + [](TIntermNode* node) {return node->getAsSymbolNode()->getQualifier().storage != EvqUniform && + node->getAsSymbolNode()->getQualifier().storage != EvqBuffer; }); + unitLinkerObjects.resize(end - unitLinkerObjects.begin()); + + std::size_t initialNumLinkerObjects = linkerObjects.size(); + for (unsigned int unitLinkObj = 0; unitLinkObj < unitLinkerObjects.size(); ++unitLinkObj) { + for (std::size_t linkObj = 0; linkObj < initialNumLinkerObjects; ++linkObj) { + TIntermSymbol* symbol = linkerObjects[linkObj]->getAsSymbolNode(); + TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode(); + assert(symbol && unitSymbol); + + if (isSameSymbol(symbol, unitSymbol)) { + // Update implicit array sizes + mergeImplicitArraySizes(symbol->getWritableType(), unitSymbol->getType()); + } + } + } +} + // // do error checking on the shader boundary in / out vars // -void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit) { +void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit, EShMessages messages) { if (unit.treeRoot == nullptr || treeRoot == nullptr) return; @@ -167,7 +206,171 @@ void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit) { // do matching and error checking mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); - // TODO: final check; make sure that any statically used `in` have matching `out` written to + if ((messages & EShMsgValidateCrossStageIO) == 0) + return; + + // The OpenGL Shading Language, Version 4.60.8 (https://registry.khronos.org/OpenGL/specs/gl/GLSLangSpec.4.60.pdf) + // 4.3.4 Input Variables + // Only the input variables that are statically read need to be written by the previous stage; it is + // allowed to have superfluous declarations of input variables. This is shown in the following table. + // +------------------------------------------------------------------------------------------------+ + // | Treatment of Mismatched Input | Consuming Shader (input variables) | + // | Variables |---------------------------------------------------------| + // | | No | Declared but no | Declared and Static Use | + // | | Declaration | Static Use | | + // |--------------------------------------+-------------+-----------------+-------------------------| + // | Generating Shader | No Declaration | Allowed | Allowed | Link-Time Error | + // | (output variables) |-----------------+-------------+-----------------+-------------------------| + // | | Declared but no | Allowed | Allowed | Allowed (values are | + // | | Static Use | | | undefined) | + // | |-----------------+-------------+-----------------+-------------------------| + // | | Declared and | Allowed | Allowed | Allowed (values are | + // | | Static Use | | | potentially undefined) | + // +------------------------------------------------------------------------------------------------+ + // Consumption errors are based on static use only. Compilation may generate a warning, but not an + // error, for any dynamic use the compiler can deduce that might cause consumption of undefined values. + + // TODO: implement support for geometry passthrough + if (getGeoPassthroughEXT()) { + unit.warn(infoSink, "GL_NV_geometry_shader_passthrough is enabled, skipping cross-stage IO validation", + getStage()); + return; + } + + class TIOTraverser : public TLiveTraverser { + public: + TIOTraverser(TIntermediate& i, bool all, TIntermSequence& sequence, TStorageQualifier storage) + : TLiveTraverser(i, all, true, false, false), sequence(sequence), storage(storage) + { + } + + virtual void visitSymbol(TIntermSymbol* symbol) + { + if (symbol->getQualifier().storage == storage) + sequence.push_back(symbol); + } + + private: + TIntermSequence& sequence; + TStorageQualifier storage; + }; + + // live symbols only + TIntermSequence unitLiveInputs; + + TIOTraverser unitTraverser(unit, false, unitLiveInputs, EvqVaryingIn); + unitTraverser.pushFunction(unit.getEntryPointMangledName().c_str()); + while (! unitTraverser.destinations.empty()) { + TIntermNode* destination = unitTraverser.destinations.back(); + unitTraverser.destinations.pop_back(); + destination->traverse(&unitTraverser); + } + + // all symbols + TIntermSequence allOutputs; + + TIOTraverser traverser(*this, true, allOutputs, EvqVaryingOut); + getTreeRoot()->traverse(&traverser); + + std::unordered_set outputLocations; + for (auto& output : allOutputs) { + if (output->getAsSymbolNode()->getBasicType() == EbtBlock) { + int lastLocation = -1; + if (output->getAsSymbolNode()->getQualifier().hasLocation()) + lastLocation = output->getAsSymbolNode()->getQualifier().layoutLocation; + const TTypeList* members = output->getAsSymbolNode()->getType().getStruct(); + for (auto& member : *members) { + int location = lastLocation; + if (member.type->getQualifier().hasLocation()) + location = member.type->getQualifier().layoutLocation; + if (location != -1) { + int locationSize = TIntermediate::computeTypeLocationSize(*member.type, getStage()); + for (int i = 0; i < locationSize; ++i) + outputLocations.insert(location + i); + lastLocation = location + locationSize; + } + } + } else { + int locationSize = TIntermediate::computeTypeLocationSize(output->getAsSymbolNode()->getType(), getStage()); + for (int i = 0; i < locationSize; ++i) + outputLocations.insert(output->getAsSymbolNode()->getQualifier().layoutLocation + i); + } + } + + // remove unitStage inputs with matching outputs in the current stage + auto liveEnd = std::remove_if( + unitLiveInputs.begin(), unitLiveInputs.end(), [this, &allOutputs, &outputLocations](TIntermNode* input) { + // ignore built-ins + if (input->getAsSymbolNode()->getAccessName().compare(0, 3, "gl_") == 0) + return true; + // try to match by location + if (input->getAsSymbolNode()->getQualifier().hasLocation() && + outputLocations.find(input->getAsSymbolNode()->getQualifier().layoutLocation) != outputLocations.end()) + return true; + if (input->getAsSymbolNode()->getBasicType() == EbtBlock) { + int lastLocation = -1; + if (input->getAsSymbolNode()->getQualifier().hasLocation()) + lastLocation = input->getAsSymbolNode()->getQualifier().layoutLocation; + const TTypeList* members = input->getAsSymbolNode()->getType().getStruct(); + for (auto& member : *members) { + int location = lastLocation; + if (member.type->getQualifier().hasLocation()) + location = member.type->getQualifier().layoutLocation; + if (location != -1) { + int locationSize = TIntermediate::computeTypeLocationSize(*member.type, getStage()); + for (int i = 0; i < locationSize; ++i) + if (outputLocations.find(location + i) != outputLocations.end()) + return true; + lastLocation = location + locationSize; + } + } + } + // otherwise, try to match by name + return std::any_of(allOutputs.begin(), allOutputs.end(), [input](TIntermNode* output) { + return output->getAsSymbolNode()->getAccessName() == input->getAsSymbolNode()->getAccessName(); + }); + }); + unitLiveInputs.resize(liveEnd - unitLiveInputs.begin()); + + // check remaining loose unitStage inputs for a matching output block member + liveEnd = std::remove_if(unitLiveInputs.begin(), unitLiveInputs.end(), [&allOutputs](TIntermNode* input) { + return std::any_of(allOutputs.begin(), allOutputs.end(), [input](TIntermNode* output) { + if (output->getAsSymbolNode()->getBasicType() != EbtBlock) + return false; + const TTypeList* members = output->getAsSymbolNode()->getType().getStruct(); + return std::any_of(members->begin(), members->end(), [input](TTypeLoc type) { + return type.type->getFieldName() == input->getAsSymbolNode()->getName(); + }); + }); + }); + unitLiveInputs.resize(liveEnd - unitLiveInputs.begin()); + + // finally, check remaining unitStage block inputs for a matching loose output + liveEnd = std::remove_if( + unitLiveInputs.begin(), unitLiveInputs.end(), [&allOutputs](TIntermNode* input) { + if (input->getAsSymbolNode()->getBasicType() != EbtBlock) + return false; + // liveness isn't tracked per member so finding any one live member is the best we can do + const TTypeList* members = input->getAsSymbolNode()->getType().getStruct(); + return std::any_of(members->begin(), members->end(), [allOutputs](TTypeLoc type) { + return std::any_of(allOutputs.begin(), allOutputs.end(), [&type](TIntermNode* output) { + return type.type->getFieldName() == output->getAsSymbolNode()->getName(); + }); + }); + }); + unitLiveInputs.resize(liveEnd - unitLiveInputs.begin()); + + // any remaining unitStage inputs have no matching output + std::for_each(unitLiveInputs.begin(), unitLiveInputs.end(), [&](TIntermNode* input) { + unit.error(infoSink, &input->getLoc(), messages, + "Preceding stage has no matching declaration for statically used input:", getStage()); + infoSink.info << " " + << input->getAsSymbolNode()->getType().getCompleteString( + true, true, false, true, input->getAsSymbolNode()->getAccessName()) + << "\n"; + }); + + // TODO: warn about statically read inputs with outputs declared but not written to } void TIntermediate::optimizeStageIO(TInfoSink&, TIntermediate& unit) @@ -859,11 +1062,32 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin } else if (symbol->getWritableType().isImplicitlySizedArray() && unitSymbol->getType().isSizedArray()) { if (symbol->getWritableType().getImplicitArraySize() > unitSymbol->getType().getOuterArraySize()) - error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders."); + error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders.", unitStage); } else if (unitSymbol->getType().isImplicitlySizedArray() && symbol->getWritableType().isSizedArray()) { if (unitSymbol->getType().getImplicitArraySize() > symbol->getWritableType().getOuterArraySize()) - error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders."); + error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders.", unitStage); + } + + if (symbol->getType().isStruct() && unitSymbol->getType().isStruct() && + symbol->getType().getStruct()->size() == unitSymbol->getType().getStruct()->size()) { + for (int i = 0; i < (int)symbol->getType().getStruct()->size(); ++i) { + auto& type = (*symbol->getWritableType().getStruct())[i]; + auto& unitType = (*unitSymbol->getWritableType().getStruct())[i]; + + if (type.type->isImplicitlySizedArray() && unitType.type->isImplicitlySizedArray()) { + if (unitType.type->getImplicitArraySize() > type.type->getImplicitArraySize()) + type.type->updateImplicitArraySize(unitType.type->getImplicitArraySize()); + } + else if (type.type->isImplicitlySizedArray() && unitType.type->isSizedArray()) { + if (type.type->getImplicitArraySize() > unitType.type->getOuterArraySize()) + error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders.", unitStage); + } + else if (type.type->isSizedArray() && unitType.type->isImplicitlySizedArray()) { + if (type.type->getOuterArraySize() < unitType.type->getImplicitArraySize()) + error(infoSink, "Implicit size of unsized array doesn't match same symbol among multiple shaders.", unitStage); + } + } } // Update implicit array sizes @@ -1316,7 +1540,8 @@ void TIntermediate::sharedBlockCheck(TInfoSink& infoSink) // Do final link-time error checking of a complete (merged) intermediate representation. // (Much error checking was done during merging). // -// Also, lock in defaults of things not set, including array sizes. +// Also, lock in defaults of things not set. +// Defer adopting implicit array sizes to later, after all stages are merged. // void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) { @@ -1477,23 +1702,6 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) error(infoSink, "Unknown Stage."); break; } - - // Process the tree for any node-specific work. - class TFinalLinkTraverser : public TIntermTraverser { - public: - TFinalLinkTraverser() { } - virtual ~TFinalLinkTraverser() { } - - virtual void visitSymbol(TIntermSymbol* symbol) - { - // Implicitly size arrays. - // If an unsized array is left as unsized, it effectively - // becomes run-time sized. - symbol->getWritableType().adoptImplicitArraySizes(false); - } - } finalLinkTraverser; - - treeRoot->traverse(&finalLinkTraverser); } // @@ -2176,6 +2384,7 @@ int TIntermediate::getBaseAlignmentScalar(const TType& type, int& size) case EbtUint64: case EbtDouble: size = 8; return 8; case EbtFloat16: size = 2; return 2; + case EbtBFloat16: size = 2; return 2; case EbtInt8: case EbtUint8: size = 1; return 1; case EbtInt16: diff --git a/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h b/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h index 0ab9e4b07..1f4b7681a 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h +++ b/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h @@ -1053,7 +1053,8 @@ public: void mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit, bool mergeExistingOnly); void mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit); - void checkStageIO(TInfoSink&, TIntermediate&); + void mergeImplicitArraySizes(TInfoSink& infoSink, TIntermediate& unit); + void checkStageIO(TInfoSink&, TIntermediate&, EShMessages); void optimizeStageIO(TInfoSink&, TIntermediate&); bool buildConvertOp(TBasicType dst, TBasicType src, TOperator& convertOp) const; @@ -1124,8 +1125,14 @@ public: protected: TIntermSymbol* addSymbol(long long Id, const TString&, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&); - void error(TInfoSink& infoSink, const char*, EShLanguage unitStage = EShLangCount); - void warn(TInfoSink& infoSink, const char*, EShLanguage unitStage = EShLangCount); + void error(TInfoSink& infoSink, const TSourceLoc* loc, EShMessages messages, const char*, EShLanguage unitStage = EShLangCount); + void error(TInfoSink& infoSink, const char* message, EShLanguage unitStage = EShLangCount) { + error(infoSink, nullptr, EShMsgDefault, message, unitStage); + } + void warn(TInfoSink& infoSink, const TSourceLoc* loc, EShMessages, const char*, EShLanguage unitStage = EShLangCount); + void warn(TInfoSink& infoSink, const char* message, EShLanguage unitStage = EShLangCount) { + warn(infoSink, nullptr, EShMsgDefault, message, unitStage); + } void mergeCallGraphs(TInfoSink&, TIntermediate&); void mergeModes(TInfoSink&, TIntermediate&); void mergeTrees(TInfoSink&, TIntermediate&); diff --git a/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h b/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h index 6509efd76..1e06c23a8 100644 --- a/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h +++ b/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h @@ -103,6 +103,7 @@ public: virtual void doubleCheck(const TSourceLoc&, const char* op); virtual void float16Check(const TSourceLoc&, const char* op, bool builtIn = false); virtual void float16ScalarVectorCheck(const TSourceLoc&, const char* op, bool builtIn = false); + virtual void bfloat16ScalarVectorCheck(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); diff --git a/3rdparty/glslang/glslang/Public/ShaderLang.h b/3rdparty/glslang/glslang/Public/ShaderLang.h index 1a3a0b243..e681a55a4 100644 --- a/3rdparty/glslang/glslang/Public/ShaderLang.h +++ b/3rdparty/glslang/glslang/Public/ShaderLang.h @@ -273,6 +273,7 @@ enum EShMessages : unsigned { EShMsgAbsolutePath = (1 << 16), // Output Absolute path for messages 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 LAST_ELEMENT_MARKER(EShMsgCount), };