diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 66c1d6f..e843850 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -53,7 +53,7 @@ jobs: with: path: ./.zigversion - name: Install Zig - uses: mlugg/setup-zig@v1 + uses: mlugg/setup-zig@v2 with: version: ${{ steps.zigversion.outputs.content }} @@ -89,7 +89,7 @@ jobs: with: path: ./.zigversion - name: Install Zig - uses: mlugg/setup-zig@v1 + uses: mlugg/setup-zig@v2 with: version: ${{ steps.zigversion.outputs.content }} diff --git a/README.md b/README.md index 86b62a0..7782c65 100644 --- a/README.md +++ b/README.md @@ -41,9 +41,9 @@ Minimal is `0.14.0`. But you know try your version and believe. ## Bgfx version -- [BX](https://github.com/bkaradzic/bx//compare/01c99ddd0912c5ecf56d9522f287c6c67aa3ad14...master) -- [BImg](https://github.com/bkaradzic/bimg/compare/c5c7b6e1874cf60caa18b643391f5122f89a4ca8...master) -- [BGFX](https://github.com/bkaradzic/bgfx/compare/de56398919b875b27b629c0b62f119c338c081d8...master) +- [BX](https://github.com/bkaradzic/bx//compare/d858859d1724fc037129318330f9c5ee5e008a08...master) +- [BImg](https://github.com/bkaradzic/bimg/compare/446b9eb11130821fd11607c2fc94aee80976e56a...master) +- [BGFX](https://github.com/bkaradzic/bgfx/compare/14e0aa5aff65a12df621fbc9466b42d41d01f013...master) ## Getting started diff --git a/build.zig b/build.zig index f220684..c2e56f2 100644 --- a/build.zig +++ b/build.zig @@ -786,7 +786,6 @@ const spirv_opt_files = .{ spirv_opt_path ++ "source/binary.cpp", spirv_opt_path ++ "source/diagnostic.cpp", spirv_opt_path ++ "source/disassemble.cpp", - spirv_opt_path ++ "source/enum_string_mapping.cpp", spirv_opt_path ++ "source/ext_inst.cpp", spirv_opt_path ++ "source/extensions.cpp", spirv_opt_path ++ "source/libspirv.cpp", @@ -914,6 +913,8 @@ const spirv_opt_files = .{ spirv_opt_path ++ "source/opt/wrap_opkill.cpp", spirv_opt_path ++ "source/opt/opextinst_forward_ref_fixup_pass.cpp", spirv_opt_path ++ "source/opt/struct_packing_pass.cpp", + spirv_opt_path ++ "source/opt/split_combined_image_sampler_pass.cpp", + spirv_opt_path ++ "source/opt/resolve_binding_conflicts_pass.cpp", spirv_opt_path ++ "source/parsed_operand.cpp", spirv_opt_path ++ "source/print.cpp", spirv_opt_path ++ "source/reduce/change_operand_reduction_opportunity.cpp", @@ -954,6 +955,7 @@ const spirv_opt_files = .{ spirv_opt_path ++ "source/spirv_target_env.cpp", spirv_opt_path ++ "source/spirv_validator_options.cpp", spirv_opt_path ++ "source/table.cpp", + spirv_opt_path ++ "source/table2.cpp", spirv_opt_path ++ "source/text.cpp", spirv_opt_path ++ "source/text_handler.cpp", spirv_opt_path ++ "source/util/bit_vector.cpp", @@ -1004,4 +1006,6 @@ const spirv_opt_files = .{ spirv_opt_path ++ "source/val/validate_type.cpp", spirv_opt_path ++ "source/val/validation_state.cpp", spirv_opt_path ++ "source/val/validate_tensor_layout.cpp", + spirv_opt_path ++ "source/val/validate_tensor.cpp", + spirv_opt_path ++ "source/val/validate_invalid_type.cpp", }; diff --git a/build.zig.zon b/build.zig.zon index 276f9f8..a9f1fbb 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,7 +1,7 @@ .{ .name = .zbgfx, .fingerprint = 0xc48ed871c4086e4a, - .version = "0.3.0", + .version = "0.4.0", .paths = .{ "includes", "libs", diff --git a/libs/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h b/libs/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h index 38d3b97..25dd88f 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h +++ b/libs/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.KHR.h @@ -63,5 +63,8 @@ static const char* const E_SPV_KHR_subgroup_rotate = "SPV_KHR_subgr static const char* const E_SPV_KHR_expect_assume = "SPV_KHR_expect_assume"; static const char* const E_SPV_EXT_replicated_composites = "SPV_EXT_replicated_composites"; 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/libs/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.NV.h b/libs/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.NV.h index d449c45..4516d2d 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.NV.h +++ b/libs/bgfx/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; @@ -96,4 +96,9 @@ const char* const E_SPV_NV_tensor_addressing = "SPV_NV_tensor_addressing"; //SPV_NV_cooperative_matrix2 const char* const E_SPV_NV_cooperative_matrix2 = "SPV_NV_cooperative_matrix2"; +//SPV_NV_cluster_acceleration_structure +const char* const E_SPV_NV_cluster_acceleration_structure = "SPV_NV_cluster_acceleration_structure"; + +//SPV_NV_linear_swept_spheres +const char* const E_SPV_NV_linear_swept_spheres = "SPV_NV_linear_swept_spheres"; #endif // #ifndef GLSLextNV_H diff --git a/libs/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h b/libs/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h index b52990f..a671d79 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/GLSL.ext.QCOM.h +++ b/libs/bgfx/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; @@ -40,4 +40,7 @@ const char* const E_SPV_QCOM_image_processing = "SPV_QCOM_image_processing"; //SPV_QCOM_image_processing2 const char* const E_SPV_QCOM_image_processing2 = "SPV_QCOM_image_processing2"; +//SPV_QCOM_tile_shading +const char* const E_SPV_QCOM_tile_shading = "SPV_QCOM_tile_shading"; + #endif // #ifndef GLSLextQCOM_H diff --git a/libs/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp b/libs/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp index 4dc754f..9088f77 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp +++ b/libs/bgfx/3rdparty/glslang/SPIRV/GlslangToSpv.cpp @@ -1,7 +1,7 @@ // // Copyright (C) 2014-2016 LunarG, Inc. // Copyright (C) 2015-2020 Google, Inc. -// Copyright (C) 2017, 2022-2024 Arm Limited. +// Copyright (C) 2017, 2022-2025 Arm Limited. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // // All rights reserved. @@ -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,33 +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::MemoryAccessMask::Nontemporal; } - if (mask != spv::MemoryAccessMaskNone) { - builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + if (mask != spv::MemoryAccessMask::MaskNone) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); } return mask; @@ -579,24 +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 (mask != spv::ImageOperandsMaskNone) { - builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + if (coherentFlags.nontemporal && builder.getSpvVersion() >= spv::Spv_1_6) { + mask = mask | spv::ImageOperandsMask::Nontemporal; + } + if (mask != spv::ImageOperandsMask::MaskNone) { + builder.addCapability(spv::Capability::VulkanMemoryModelKHR); } return mask; @@ -614,6 +622,7 @@ spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCohere flags.subgroupcoherent = type.getQualifier().subgroupcoherent; flags.shadercallcoherent = type.getQualifier().shadercallcoherent; flags.volatil = type.getQualifier().volatil; + flags.nontemporal = type.getQualifier().nontemporal; // *coherent variables are implicitly nonprivate in GLSL flags.nonprivate = type.getQualifier().nonprivate || flags.anyCoherent() || @@ -626,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; @@ -663,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. @@ -701,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 || @@ -720,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 || @@ -752,366 +761,405 @@ 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::Capability::RayTracingClusterAccelerationStructureNV); + builder.addExtension("SPV_NV_cluster_acceleration_structure"); + return spv::BuiltIn::ClusterIDNV; + case glslang::EbvHitIsSphereNV: + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); + builder.addExtension("SPV_NV_linear_swept_spheres"); + return spv::BuiltIn::HitIsSphereNV; + case glslang::EbvHitIsLSSNV: + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); + builder.addExtension("SPV_NV_linear_swept_spheres"); + return spv::BuiltIn::HitIsLSSNV; + case glslang::EbvHitSpherePositionNV: + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); + builder.addExtension("SPV_NV_linear_swept_spheres"); + return spv::BuiltIn::HitSpherePositionNV; + case glslang::EbvHitSphereRadiusNV: + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); + builder.addExtension("SPV_NV_linear_swept_spheres"); + return spv::BuiltIn::HitSphereRadiusNV; + case glslang::EbvHitLSSPositionsNV: + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); + builder.addExtension("SPV_NV_linear_swept_spheres"); + return spv::BuiltIn::HitLSSPositionsNV; + case glslang::EbvHitLSSRadiiNV: + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); + builder.addExtension("SPV_NV_linear_swept_spheres"); + 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; + + // QCOM builtins + case glslang::EbvTileOffsetQCOM: + builder.addExtension(spv::E_SPV_QCOM_tile_shading); + return spv::BuiltIn::TileOffsetQCOM; + case glslang::EbvTileDimensionQCOM: + builder.addExtension(spv::E_SPV_QCOM_tile_shading); + return spv::BuiltIn::TileDimensionQCOM; + case glslang::EbvTileApronSizeQCOM: + builder.addExtension(spv::E_SPV_QCOM_tile_shading); + return spv::BuiltIn::TileApronSizeQCOM; default: - return spv::BuiltInMax; + return spv::BuiltIn::Max; } } @@ -1150,13 +1198,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; @@ -1164,49 +1212,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; } } @@ -1214,57 +1262,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()); } } @@ -1276,72 +1324,78 @@ 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 (type.getQualifier().isTileAttachmentQCOM()) { + builder.addExtension(spv::E_SPV_QCOM_tile_shading); + builder.addCapability(spv::Capability::TileShadingQCOM); + return spv::StorageClass::TileAttachmentQCOM; } 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 @@ -1401,33 +1455,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); } } } @@ -1498,6 +1552,8 @@ void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& pa child.nonprivate = true; if (parent.volatil) child.volatil = true; + if (parent.nontemporal) + child.nontemporal = true; if (parent.restrict) child.restrict = true; if (parent.readonly) @@ -1588,23 +1644,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 @@ -1622,147 +1678,153 @@ 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->getNonCoherentTileAttachmentReadQCOM()) { + builder.addCapability(spv::Capability::TileShadingQCOM); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::NonCoherentTileAttachmentReadQCOM); + builder.addExtension(spv::E_SPV_QCOM_tile_shading); + } + 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)) { @@ -1776,36 +1838,53 @@ 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), - glslangIntermediate->getLocalSize(1), - glslangIntermediate->getLocalSize(2)); + if (glslangIntermediate->getTileShadingRateQCOM(0) >= 1 || glslangIntermediate->getTileShadingRateQCOM(1) >= 1 || glslangIntermediate->getTileShadingRateQCOM(2) >= 1) { + auto rate_x = glslangIntermediate->getTileShadingRateQCOM(0); + auto rate_y = glslangIntermediate->getTileShadingRateQCOM(1); + auto rate_z = glslangIntermediate->getTileShadingRateQCOM(2); + rate_x = ( rate_x == 0 ? 1 : rate_x ); + rate_y = ( rate_y == 0 ? 1 : rate_y ); + rate_z = ( rate_z == 0 ? 1 : rate_z ); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::TileShadingRateQCOM, rate_x, rate_y, rate_z); + } else { + 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); } + + if (glslangIntermediate->getNonCoherentTileAttachmentReadQCOM()) { + builder.addCapability(spv::Capability::TileShadingQCOM); + builder.addExecutionMode(shaderEntry, spv::ExecutionMode::NonCoherentTileAttachmentReadQCOM); + builder.addExtension(spv::E_SPV_QCOM_tile_shading); + } + 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 { @@ -1813,59 +1892,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; - } - if (mode != spv::ExecutionModeMax) - builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + 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::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: @@ -1876,21 +1955,25 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, case EShLangCallable: { auto& extensions = glslangIntermediate->getRequestedExtensions(); + if (extensions.find("GL_EXT_opacity_micromap") != extensions.end()) { + builder.addCapability(spv::Capability::RayTracingOpacityMicromapEXT); + builder.addExtension("SPV_EXT_opacity_micromap"); + } if (extensions.find("GL_NV_ray_tracing") == extensions.end()) { - builder.addCapability(spv::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"); } } @@ -1899,10 +1982,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) { @@ -1911,29 +1994,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; @@ -2075,7 +2158,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); } } @@ -2139,7 +2222,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); } } } @@ -2410,13 +2493,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 @@ -2425,7 +2508,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); @@ -2502,13 +2585,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"); @@ -2518,8 +2601,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"); @@ -2572,6 +2655,9 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); length = builder.createCooperativeMatrixLengthNV(typeId); } + } else if (node->getOperand()->getType().isCoopVecNV()) { + spv::Id typeId = convertGlslangToSpvType(node->getOperand()->getType()); + length = builder.getCooperativeVectorNumComponents(typeId); } else { glslang::TIntermTyped* block = node->getOperand()->getAsBinaryNode()->getLeft(); block->traverse(this); @@ -2585,9 +2671,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); } } @@ -2651,6 +2737,11 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI case glslang::EOpHitObjectRecordEmptyNV: case glslang::EOpHitObjectGetShaderBindingTableRecordIndexNV: case glslang::EOpHitObjectGetShaderRecordBufferHandleNV: + case glslang::EOpHitObjectGetClusterIdNV: + case glslang::EOpHitObjectGetSpherePositionNV: + case glslang::EOpHitObjectGetSphereRadiusNV: + case glslang::EOpHitObjectIsSphereHitNV: + case glslang::EOpHitObjectIsLSSHitNV: return true; default: return false; @@ -2694,7 +2785,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); } } @@ -2762,6 +2853,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) @@ -2797,37 +2890,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; @@ -2847,7 +2940,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); @@ -3101,6 +3194,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: @@ -3142,6 +3239,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpConstructReference: case glslang::EOpConstructCooperativeMatrixNV: case glslang::EOpConstructCooperativeMatrixKHR: + case glslang::EOpConstructCooperativeVectorNV: { builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); std::vector arguments; @@ -3156,16 +3254,23 @@ 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 && + arguments.size() == 1 && + builder.getTypeId(arguments[0]) == resultType()) { + constructed = arguments[0]; } else if (node->getOp() == glslang::EOpConstructStruct || node->getOp() == glslang::EOpConstructCooperativeMatrixNV || node->getOp() == glslang::EOpConstructCooperativeMatrixKHR || - node->getType().isArray()) { + node->getType().isArray() || + // Handle constructing coopvec from one component here, to avoid the component + // getting smeared + (node->getOp() == glslang::EOpConstructCooperativeVectorNV && arguments.size() == 1 && builder.isScalar(arguments[0]))) { std::vector constituents; for (int c = 0; c < (int)arguments.size(); ++c) constituents.push_back(arguments[c]); @@ -3176,7 +3281,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(); @@ -3279,7 +3384,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; @@ -3289,13 +3394,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; @@ -3317,7 +3422,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: @@ -3340,7 +3445,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: @@ -3351,6 +3456,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpCooperativeMatrixReduceNV: case glslang::EOpCooperativeMatrixPerElementOpNV: case glslang::EOpCooperativeMatrixTransposeNV: + case glslang::EOpCooperativeVectorMatMulNV: + case glslang::EOpCooperativeVectorMatMulAddNV: + case glslang::EOpCooperativeVectorLoadNV: + case glslang::EOpCooperativeVectorStoreNV: + case glslang::EOpCooperativeVectorOuterProductAccumulateNV: + case glslang::EOpCooperativeVectorReduceSumAccumulateNV: noReturnValue = true; break; case glslang::EOpBeginInvocationInterlock: @@ -3393,48 +3504,86 @@ 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::Capability::ShaderInvocationReorderNV); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); + noReturnValue = true; break; + + case glslang::EOpRayQueryGetIntersectionLSSPositionsNV: + case glslang::EOpRayQueryGetIntersectionLSSRadiiNV: + builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); + builder.addCapability(spv::Capability::RayQueryKHR); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); + noReturnValue = true; + break; + + case glslang::EOpRayQueryGetIntersectionSpherePositionNV: + case glslang::EOpRayQueryGetIntersectionSphereRadiusNV: + case glslang::EOpRayQueryIsSphereHitNV: + builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); + 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::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::Capability::RayQueryKHR); + builder.addCapability(spv::Capability::RayTracingClusterAccelerationStructureNV); break; case glslang::EOpDebugPrintf: @@ -3504,10 +3653,16 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpHitObjectRecordMissNV: case glslang::EOpHitObjectRecordMissMotionNV: case glslang::EOpHitObjectGetAttributesNV: + case glslang::EOpHitObjectGetClusterIdNV: if (arg == 0) lvalue = true; break; + case glslang::EOpHitObjectGetLSSPositionsNV: + case glslang::EOpHitObjectGetLSSRadiiNV: + lvalue = true; + break; + case glslang::EOpRayQueryInitialize: case glslang::EOpRayQueryTerminate: case glslang::EOpRayQueryConfirmIntersection: @@ -3526,6 +3681,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpRayQueryGetIntersectionObjectRayOrigin: case glslang::EOpRayQueryGetIntersectionObjectToWorld: case glslang::EOpRayQueryGetIntersectionWorldToObject: + case glslang::EOpRayQueryGetIntersectionClusterIdNV: + case glslang::EOpRayQueryGetIntersectionSpherePositionNV: + case glslang::EOpRayQueryGetIntersectionSphereRadiusNV: + case glslang::EOpRayQueryGetIntersectionLSSHitValueNV: + case glslang::EOpRayQueryIsSphereHitNV: + case glslang::EOpRayQueryIsLSSHitNV: if (arg == 0) lvalue = true; break; @@ -3598,12 +3759,30 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpCooperativeMatrixLoad: case glslang::EOpCooperativeMatrixLoadNV: case glslang::EOpCooperativeMatrixLoadTensorNV: + case glslang::EOpCooperativeVectorLoadNV: if (arg == 0 || arg == 1) lvalue = true; break; case glslang::EOpCooperativeMatrixStore: case glslang::EOpCooperativeMatrixStoreNV: case glslang::EOpCooperativeMatrixStoreTensorNV: + case glslang::EOpCooperativeVectorStoreNV: + if (arg == 1) + lvalue = true; + break; + case glslang::EOpCooperativeVectorMatMulNV: + if (arg == 0 || arg == 3) + lvalue = true; + break; + case glslang::EOpCooperativeVectorMatMulAddNV: + if (arg == 0 || arg == 3 || arg == 6) + lvalue = true; + break; + case glslang::EOpCooperativeVectorOuterProductAccumulateNV: + if (arg == 2) + lvalue = true; + break; + case glslang::EOpCooperativeVectorReduceSumAccumulateNV: if (arg == 1) lvalue = true; break; @@ -3623,6 +3802,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt lvalue = true; break; case glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: + case glslang::EOpRayQueryGetIntersectionLSSPositionsNV: + case glslang::EOpRayQueryGetIntersectionLSSRadiiNV: if (arg == 0 || arg == 2) lvalue = true; break; @@ -3635,57 +3816,69 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt else glslangOperands[arg]->traverse(this); - if (node->getOp() == glslang::EOpCooperativeMatrixLoad || - node->getOp() == glslang::EOpCooperativeMatrixStore || - node->getOp() == glslang::EOpCooperativeMatrixLoadNV || - node->getOp() == glslang::EOpCooperativeMatrixStoreNV || - node->getOp() == glslang::EOpCooperativeMatrixLoadTensorNV || - node->getOp() == glslang::EOpCooperativeMatrixStoreTensorNV) { + bool isCoopMat = node->getOp() == glslang::EOpCooperativeMatrixLoad || + node->getOp() == glslang::EOpCooperativeMatrixStore || + node->getOp() == glslang::EOpCooperativeMatrixLoadNV || + node->getOp() == glslang::EOpCooperativeMatrixStoreNV || + node->getOp() == glslang::EOpCooperativeMatrixLoadTensorNV || + node->getOp() == glslang::EOpCooperativeMatrixStoreTensorNV; + bool isCoopVec = node->getOp() == glslang::EOpCooperativeVectorLoadNV || + node->getOp() == glslang::EOpCooperativeVectorStoreNV; + if (isCoopMat || isCoopVec) { if (arg == 1) { - // fold "element" parameter into the access chain - spv::Builder::AccessChain save = builder.getAccessChain(); - builder.clearAccessChain(); - glslangOperands[2]->traverse(this); - - spv::Id elementId = accessChainLoad(glslangOperands[2]->getAsTyped()->getType()); + spv::Builder::AccessChain::CoherentFlags coherentFlags {}; + unsigned int alignment {}; + if (isCoopMat) { + // fold "element" parameter into the access chain + spv::Builder::AccessChain save = builder.getAccessChain(); + builder.clearAccessChain(); + glslangOperands[2]->traverse(this); - builder.setAccessChain(save); + spv::Id elementId = accessChainLoad(glslangOperands[2]->getAsTyped()->getType()); - // Point to the first element of the array. - builder.accessChainPush(elementId, - TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType()), - glslangOperands[arg]->getAsTyped()->getType().getBufferReferenceAlignment()); + builder.setAccessChain(save); - spv::Builder::AccessChain::CoherentFlags coherentFlags = builder.getAccessChain().coherentFlags; - unsigned int alignment = builder.getAccessChain().alignment; + // Point to the first element of the array. + builder.accessChainPush(elementId, + TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType()), + glslangOperands[arg]->getAsTyped()->getType().getBufferReferenceAlignment()); + coherentFlags = builder.getAccessChain().coherentFlags; + alignment = builder.getAccessChain().alignment; + } else { + coherentFlags = builder.getAccessChain().coherentFlags; + coherentFlags |= TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType()); + alignment = 16; + } - int memoryAccess = TranslateMemoryAccess(coherentFlags); + spv::MemoryAccessMask memoryAccess = TranslateMemoryAccess(coherentFlags); if (node->getOp() == glslang::EOpCooperativeMatrixLoad || node->getOp() == glslang::EOpCooperativeMatrixLoadNV || - node->getOp() == glslang::EOpCooperativeMatrixLoadTensorNV) - memoryAccess &= ~spv::MemoryAccessMakePointerAvailableKHRMask; + node->getOp() == glslang::EOpCooperativeMatrixLoadTensorNV || + node->getOp() == glslang::EOpCooperativeVectorLoadNV) + memoryAccess = (memoryAccess & ~spv::MemoryAccessMask::MakePointerAvailableKHR); if (node->getOp() == glslang::EOpCooperativeMatrixStore || node->getOp() == glslang::EOpCooperativeMatrixStoreNV || - node->getOp() == glslang::EOpCooperativeMatrixStoreTensorNV) - memoryAccess &= ~spv::MemoryAccessMakePointerVisibleKHRMask; + node->getOp() == glslang::EOpCooperativeMatrixStoreTensorNV || + node->getOp() == glslang::EOpCooperativeVectorStoreNV) + 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)))); } - } else if (arg == 2) { + } else if (isCoopMat && arg == 2) { continue; } } @@ -3699,7 +3892,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 { @@ -3709,8 +3902,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt lvalueCoherentFlags |= TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType()); } else { builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename()); - glslang::TOperator glslangOp = node->getOp(); - if (arg == 1 && + glslang::TOperator glslangOp = node->getOp(); + if (arg == 1 && (glslangOp == glslang::EOpRayQueryGetIntersectionType || glslangOp == glslang::EOpRayQueryGetIntersectionT || glslangOp == glslang::EOpRayQueryGetIntersectionInstanceCustomIndex || @@ -3724,22 +3917,30 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt glslangOp == glslang::EOpRayQueryGetIntersectionObjectRayOrigin || glslangOp == glslang::EOpRayQueryGetIntersectionObjectToWorld || glslangOp == glslang::EOpRayQueryGetIntersectionWorldToObject || - glslangOp == glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT + glslangOp == glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT || + glslangOp == glslang::EOpRayQueryGetIntersectionClusterIdNV || + glslangOp == glslang::EOpRayQueryGetIntersectionSpherePositionNV || + glslangOp == glslang::EOpRayQueryGetIntersectionSphereRadiusNV || + glslangOp == glslang::EOpRayQueryGetIntersectionLSSHitValueNV || + glslangOp == glslang::EOpRayQueryGetIntersectionLSSPositionsNV || + glslangOp == glslang::EOpRayQueryGetIntersectionLSSRadiiNV || + glslangOp == glslang::EOpRayQueryIsLSSHitNV || + glslangOp == glslang::EOpRayQueryIsSphereHitNV )) { bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst(); operands.push_back(builder.makeIntConstant(cond ? 1 : 0)); - } else if ((arg == 10 && glslangOp == glslang::EOpTraceKHR) || - (arg == 11 && glslangOp == glslang::EOpTraceRayMotionNV) || - (arg == 1 && glslangOp == glslang::EOpExecuteCallableKHR) || - (arg == 1 && glslangOp == glslang::EOpHitObjectExecuteShaderNV) || - (arg == 11 && glslangOp == glslang::EOpHitObjectTraceRayNV) || - (arg == 12 && glslangOp == glslang::EOpHitObjectTraceRayMotionNV)) { - const int set = glslangOp == glslang::EOpExecuteCallableKHR ? 1 : 0; - const int location = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getUConst(); - auto itNode = locationToSymbol[set].find(location); - visitSymbol(itNode->second); - spv::Id symId = getSymbolId(itNode->second); - operands.push_back(symId); + } else if ((arg == 10 && glslangOp == glslang::EOpTraceKHR) || + (arg == 11 && glslangOp == glslang::EOpTraceRayMotionNV) || + (arg == 1 && glslangOp == glslang::EOpExecuteCallableKHR) || + (arg == 1 && glslangOp == glslang::EOpHitObjectExecuteShaderNV) || + (arg == 11 && glslangOp == glslang::EOpHitObjectTraceRayNV) || + (arg == 12 && glslangOp == glslang::EOpHitObjectTraceRayMotionNV)) { + const int set = glslangOp == glslang::EOpExecuteCallableKHR ? 1 : 0; + const int location = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getUConst(); + auto itNode = locationToSymbol[set].find(location); + visitSymbol(itNode->second); + spv::Id symId = getSymbolId(itNode->second); + operands.push_back(symId); } else if ((arg == 12 && glslangOp == glslang::EOpHitObjectRecordHitNV) || (arg == 13 && glslangOp == glslang::EOpHitObjectRecordHitMotionNV) || (arg == 11 && glslangOp == glslang::EOpHitObjectRecordHitWithIndexNV) || @@ -3751,16 +3952,16 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt visitSymbol(itNode->second); spv::Id symId = getSymbolId(itNode->second); operands.push_back(symId); - } else if (glslangOperands[arg]->getAsTyped()->getQualifier().isSpirvLiteral()) { - // Will be translated to a literal value, make a placeholder here - operands.push_back(spv::NoResult); - } else if (glslangOperands[arg]->getAsTyped()->getBasicType() == glslang::EbtFunction) { - spv::Function* function = functionMap[glslangOperands[arg]->getAsSymbolNode()->getMangledName().c_str()]; - assert(function); - operands.push_back(function->getId()); - } else { - operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType())); - } + } else if (glslangOperands[arg]->getAsTyped()->getQualifier().isSpirvLiteral()) { + // Will be translated to a literal value, make a placeholder here + operands.push_back(spv::NoResult); + } else if (glslangOperands[arg]->getAsTyped()->getBasicType() == glslang::EbtFunction) { + spv::Function* function = functionMap[glslangOperands[arg]->getAsSymbolNode()->getMangledName().c_str()]; + assert(function); + operands.push_back(function->getId()); + } else { + operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType())); + } } } @@ -3768,7 +3969,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); @@ -3785,11 +3986,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 } @@ -3798,7 +3999,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; @@ -3809,11 +4010,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 { @@ -3826,8 +4027,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; @@ -3837,7 +4038,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 @@ -3845,13 +4046,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) { @@ -3861,11 +4062,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 { @@ -3875,9 +4076,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; @@ -3889,43 +4090,102 @@ 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') + builder.createStore(result, operands[2]); + result = 0; + } else if (node->getOp() == glslang::EOpRayQueryGetIntersectionLSSPositionsNV) { + std::vector idImmOps; + + idImmOps.push_back(spv::IdImmediate(true, operands[0])); // q + idImmOps.push_back(spv::IdImmediate(true, operands[1])); // committed + + spv::Id typeId = builder.makeArrayType(builder.makeVectorType(builder.makeFloatType(32), 3), + builder.makeUintConstant(2), 0); + // do the op + + spv::Op spvOp = spv::Op::OpRayQueryGetIntersectionLSSPositionsNV; spv::Id result = builder.createOp(spvOp, typeId, idImmOps); // store the result to the pointer (out param 'm') builder.createStore(result, operands[2]); result = 0; + } else if (node->getOp() == glslang::EOpRayQueryGetIntersectionLSSRadiiNV) { + std::vector idImmOps; + + idImmOps.push_back(spv::IdImmediate(true, operands[0])); // q + idImmOps.push_back(spv::IdImmediate(true, operands[1])); // committed + + spv::Id typeId = builder.makeArrayType(builder.makeFloatType(32), + builder.makeUintConstant(2), 0); + // do the op + + spv::Op spvOp = spv::Op::OpRayQueryGetIntersectionLSSRadiiNV; + + spv::Id result = builder.createOp(spvOp, typeId, idImmOps); + // store the result to the pointer (out param 'm') + builder.createStore(result, operands[2]); + result = 0; + } else if (node->getOp() == glslang::EOpHitObjectGetLSSPositionsNV) { + std::vector idImmOps; + + idImmOps.push_back(spv::IdImmediate(true, operands[0])); // hitObject + + spv::Op spvOp = spv::Op::OpHitObjectGetLSSPositionsNV; + spv::Id typeId = builder.makeArrayType(builder.makeVectorType(builder.makeFloatType(32), 3), + builder.makeUintConstant(2), 0); + + spv::Id result = builder.createOp(spvOp, typeId, idImmOps); + // store the result to the pointer (out param 'm') + builder.createStore(result, operands[1]); + result = 0; + } else if (node->getOp() == glslang::EOpHitObjectGetLSSRadiiNV) { + std::vector idImmOps; + + idImmOps.push_back(spv::IdImmediate(true, operands[0])); // hitObject + + spv::Op spvOp = spv::Op::OpHitObjectGetLSSRadiiNV; + spv::Id typeId = builder.makeArrayType(builder.makeFloatType(32), + builder.makeUintConstant(2), 0); + + spv::Id result = builder.createOp(spvOp, typeId, idImmOps); + // store the result to the pointer (out param 'm') + builder.createStore(result, operands[1]); + 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])); @@ -3936,7 +4196,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])); @@ -3948,16 +4208,106 @@ 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) { + 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())) + addMask(matrixOperands, spv::CooperativeMatrixOperandsMask::MatrixBSignedComponentsKHR); + if (isTypeSignedInt(glslangOperands[0]->getAsTyped()->getBasicType())) + addMask(matrixOperands, spv::CooperativeMatrixOperandsMask::MatrixResultSignedComponentsKHR); + + uint32_t opIdx = 1; + std::vector idImmOps; + idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // Input + idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // InputInterpretation + idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // Matrix + idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // MatrixOffset + idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // MatrixInterpretation + if (isMulAdd) { + idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // Bias + idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // BiasOffset + idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // BiasInterpretation + } + idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // M + idImmOps.push_back(spv::IdImmediate(true, operands[opIdx++])); // K + 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 != 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::Op::OpCooperativeVectorMatrixMulAddNV : spv::Op::OpCooperativeVectorMatrixMulNV, typeId, idImmOps); + // store the result to the pointer (out param 'res') + builder.createStore(result, operands[0]); + result = 0; + } else if (node->getOp() == glslang::EOpCooperativeVectorLoadNV) { + std::vector idImmOps; + + idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf + idImmOps.push_back(spv::IdImmediate(true, operands[2])); // offset + idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end()); + // 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(spv::Op::OpCooperativeVectorLoadNV, typeId, idImmOps); + // store the result to the pointer (out param 'v') + builder.createStore(result, operands[0]); + result = 0; + } else if (node->getOp() == glslang::EOpCooperativeVectorStoreNV) { + std::vector idImmOps; + + 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])); // object + idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end()); + builder.createNoResultOp(spv::Op::OpCooperativeVectorStoreNV, idImmOps); + result = 0; + } else if (node->getOp() == glslang::EOpCooperativeVectorOuterProductAccumulateNV) { + builder.addCapability(spv::Capability::CooperativeVectorTrainingNV); + builder.addExtension(spv::E_SPV_NV_cooperative_vector); + + std::vector idImmOps; + + idImmOps.push_back(spv::IdImmediate(true, operands[2])); // Matrix + idImmOps.push_back(spv::IdImmediate(true, operands[3])); // Offset + idImmOps.push_back(spv::IdImmediate(true, operands[0])); // A + idImmOps.push_back(spv::IdImmediate(true, operands[1])); // B + 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::Op::OpCooperativeVectorOuterProductAccumulateNV, idImmOps); + result = 0; + } else if (node->getOp() == glslang::EOpCooperativeVectorReduceSumAccumulateNV) { + builder.addCapability(spv::Capability::CooperativeVectorTrainingNV); + builder.addExtension(spv::E_SPV_NV_cooperative_vector); + + std::vector idImmOps; + + 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::Op::OpCooperativeVectorReduceSumAccumulateNV, idImmOps); + result = 0; } else if (atomic) { // Handle all atomics glslang::TBasicType typeProxy = (node->getOp() == glslang::EOpAtomicStore) @@ -4136,14 +4486,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); @@ -4151,7 +4501,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); @@ -4182,7 +4532,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())); } @@ -4383,19 +4733,15 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T switch (node->getFlowOp()) { case glslang::EOpKill: if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { - if (glslangIntermediate->getSource() == glslang::EShSourceHlsl) { - builder.addCapability(spv::CapabilityDemoteToHelperInvocation); - builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT); - } else { - builder.makeStatementTerminator(spv::OpTerminateInvocation, "post-terminate-invocation"); - } + builder.addCapability(spv::Capability::DemoteToHelperInvocation); + builder.createNoResultOp(spv::Op::OpDemoteToHelperInvocationEXT); } 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()) @@ -4414,7 +4760,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()); @@ -4427,15 +4773,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: @@ -4466,56 +4812,59 @@ 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; + case spv::StorageClass::TileAttachmentQCOM: + builder.addCapability(spv::Capability::TileShadingQCOM); 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); } } @@ -4554,15 +4903,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); @@ -4612,9 +4961,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; } } @@ -4655,6 +5004,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; @@ -4674,7 +5026,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: @@ -4692,7 +5044,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; @@ -4704,7 +5056,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(); } @@ -4714,13 +5066,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); } @@ -4770,7 +5122,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; @@ -4841,19 +5193,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); @@ -4862,7 +5214,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: @@ -4879,14 +5231,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); @@ -4897,13 +5249,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); @@ -4914,6 +5271,21 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty spvType = builder.makeCooperativeMatrixTypeKHR(spvType, scope, rows, cols, use); } + if (type.isCoopVecNV()) { + builder.addCapability(spv::Capability::CooperativeVectorNV); + builder.addExtension(spv::E_SPV_NV_cooperative_vector); + + if (type.getBasicType() == glslang::EbtFloat16) + builder.addCapability(spv::Capability::Float16); + if (type.getBasicType() == glslang::EbtUint8 || type.getBasicType() == glslang::EbtInt8) { + builder.addCapability(spv::Capability::Int8); + } + + spv::Id components = makeArraySizeId(*type.getTypeParameters()->arraySizes, 0); + + spvType = builder.makeCooperativeVectorTypeNV(spvType, components); + } + if (type.isArray()) { int stride = 0; // keep this 0 unless doing an explicit layout; 0 will mean no decoration, no stride @@ -4936,7 +5308,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 { @@ -4954,12 +5326,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; @@ -5204,60 +5576,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); } @@ -5273,14 +5645,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. @@ -5324,14 +5696,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; @@ -5370,9 +5742,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); @@ -5381,9 +5753,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)); } } @@ -5396,7 +5768,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); } @@ -5437,10 +5809,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; } @@ -5708,11 +6080,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); } } }; @@ -5767,7 +6139,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()); @@ -5798,11 +6170,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); } } } @@ -5994,6 +6366,8 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& lvalue = true; break; case glslang::EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: + case glslang::EOpRayQueryGetIntersectionLSSPositionsNV: + case glslang::EOpRayQueryGetIntersectionLSSRadiiNV: if (i == 2) lvalue = true; break; @@ -6047,11 +6421,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; @@ -6073,9 +6447,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 @@ -6085,19 +6459,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; @@ -6140,19 +6514,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; } @@ -6162,7 +6536,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; @@ -6171,40 +6545,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. @@ -6223,72 +6597,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); @@ -6300,7 +6674,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); @@ -6319,14 +6693,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; @@ -6362,14 +6736,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); } @@ -6410,7 +6784,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); } } @@ -6509,7 +6883,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: @@ -6598,6 +6972,10 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO params.volatil = true; } + if (imageType.getQualifier().nontemporal) { + params.nontemporal = true; + } + std::vector result( 1, builder.createTextureCall(precision, resultType(), sparse, cracked.fetch, cracked.proj, cracked.gather, noImplicitLod, params, signExtensionMask()) @@ -6665,7 +7043,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 @@ -6681,7 +7059,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]); @@ -6726,7 +7104,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; @@ -6734,137 +7112,145 @@ 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: - if (isFloat && (builder.isVector(left) || builder.isVector(right))) { - if (builder.isVector(right)) + if (isFloat && (builder.isVector(left) || builder.isVector(right) || builder.isCooperativeVector(left) || builder.isCooperativeVector(right))) { + if (builder.isVector(right) || builder.isCooperativeVector(right)) std::swap(left, right); assert(builder.isScalar(right)); needMatchingVectors = false; - binOp = spv::OpVectorTimesScalar; - } else if (isFloat) - binOp = spv::OpFMul; - else - binOp = spv::OpIMul; + binOp = spv::Op::OpVectorTimesScalar; + } else if (isFloat) { + 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::Op::OpIMul; + } else { + 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: @@ -6882,7 +7268,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)) @@ -6913,59 +7299,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); @@ -6996,29 +7382,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; @@ -7045,11 +7431,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); @@ -7092,7 +7478,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); @@ -7101,19 +7487,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: @@ -7123,7 +7509,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: @@ -7216,13 +7602,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: @@ -7237,7 +7623,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: @@ -7297,24 +7683,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: @@ -7331,40 +7717,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) @@ -7382,10 +7768,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; @@ -7398,15 +7784,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: @@ -7493,116 +7879,151 @@ 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::Op::OpHitObjectGetClusterIdNV; + builder.addExtension(spv::E_SPV_NV_cluster_acceleration_structure); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); + builder.addCapability(spv::Capability::RayTracingClusterAccelerationStructureNV); + break; + + case glslang::EOpHitObjectGetSpherePositionNV: + unaryOp = spv::Op::OpHitObjectGetSpherePositionNV; + builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); + break; + + case glslang::EOpHitObjectGetSphereRadiusNV: + unaryOp = spv::Op::OpHitObjectGetSphereRadiusNV; + builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); + break; + + case glslang::EOpHitObjectIsSphereHitNV: + unaryOp = spv::Op::OpHitObjectIsSphereHitNV; + builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); + builder.addCapability(spv::Capability::RayTracingSpheresGeometryNV); + break; + + case glslang::EOpHitObjectIsLSSHitNV: + unaryOp = spv::Op::OpHitObjectIsLSSHitNV; + builder.addExtension(spv::E_SPV_NV_linear_swept_spheres); + builder.addCapability(spv::Capability::ShaderInvocationReorderNV); + builder.addCapability(spv::Capability::RayTracingLinearSweptSpheresGeometryNV); 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: @@ -7672,19 +8093,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 (vectorSize > 0) + 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); } @@ -7695,7 +8118,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; @@ -7703,25 +8126,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); } @@ -7744,10 +8167,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); @@ -7759,7 +8182,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) { @@ -7771,12 +8194,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) { @@ -7803,17 +8226,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: @@ -7822,10 +8245,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); @@ -7854,98 +8277,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: @@ -7953,30 +8376,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); @@ -7984,7 +8407,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 @@ -7996,21 +8419,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) { @@ -8020,7 +8443,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( @@ -8037,20 +8460,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 @@ -8058,15 +8482,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 { @@ -8075,7 +8499,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; } @@ -8088,21 +8512,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 || @@ -8121,7 +8545,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: @@ -8129,7 +8553,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: @@ -8137,14 +8561,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); } @@ -8157,21 +8581,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; @@ -8185,14 +8609,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)); } @@ -8209,29 +8633,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)) @@ -8251,31 +8675,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)) @@ -8287,7 +8711,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); } @@ -8295,15 +8719,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. @@ -8323,20 +8747,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); @@ -8357,18 +8781,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: @@ -8380,23 +8804,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: @@ -8419,8 +8843,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: @@ -8429,15 +8853,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: @@ -8461,7 +8885,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!"); } @@ -8471,32 +8895,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: @@ -8505,9 +8929,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: @@ -8518,9 +8942,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: @@ -8531,11 +8955,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: @@ -8546,11 +8970,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: @@ -8561,9 +8985,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: @@ -8574,9 +8998,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: @@ -8587,20 +9011,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; @@ -8612,7 +9036,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: @@ -8622,7 +9046,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: @@ -8632,7 +9056,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: @@ -8641,7 +9065,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: @@ -8650,7 +9074,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: @@ -8659,7 +9083,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: @@ -8668,7 +9092,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; } @@ -8676,14 +9100,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); } @@ -8716,7 +9140,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(); @@ -8760,7 +9184,53 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: libCall = spv::GLSLstd450Pow; break; case glslang::EOpDot: - opCode = spv::OpDot; + case glslang::EOpDotPackedEXT: + case glslang::EOpDotAccSatEXT: + case glslang::EOpDotPackedAccSatEXT: + { + if (builder.isFloatType(builder.getScalarTypeId(typeId0)) || + // HLSL supports dot(int,int) which is just a multiply + glslangIntermediate->getSource() == glslang::EShSourceHlsl) { + 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::Capability::DotProductKHR); + const unsigned int vectorSize = builder.getNumComponents(operands[0]); + if (op == glslang::EOpDotPackedEXT || op == glslang::EOpDotPackedAccSatEXT) { + builder.addCapability(spv::Capability::DotProductInput4x8BitPackedKHR); + } else if (vectorSize == 4 && builder.getScalarTypeWidth(typeId0) == 8) { + builder.addCapability(spv::Capability::DotProductInput4x8BitKHR); + } else { + 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::Op::OpUDotAccSatKHR : spv::Op::OpUDotKHR; + } else if (type0isSigned && type1isSigned) { + opCode = accSat ? spv::Op::OpSDotAccSatKHR : spv::Op::OpSDotKHR; + } else { + 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]); + } + } + std::vector operands2; + for (auto &o : operands) { + operands2.push_back({true, o}); + } + if (op == glslang::EOpDotPackedEXT || op == glslang::EOpDotPackedAccSatEXT) { + operands2.push_back({false, 0}); + } + return builder.createOp(opCode, typeId, operands2); + } + } break; case glslang::EOpAtan: libCall = spv::GLSLstd450Atan2; @@ -8781,7 +9251,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()); @@ -8816,20 +9286,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; } @@ -8839,17 +9309,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; } @@ -8866,33 +9336,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: @@ -9018,240 +9488,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::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::Op::OpRayQueryGetIntersectionSpherePositionNV; + break; + case glslang::EOpRayQueryGetIntersectionSphereRadiusNV: + typeId = builder.makeFloatType(32); + opCode = spv::Op::OpRayQueryGetIntersectionSphereRadiusNV; + break; + case glslang::EOpRayQueryGetIntersectionLSSHitValueNV: + typeId = builder.makeFloatType(32); + opCode = spv::Op::OpRayQueryGetIntersectionLSSHitValueNV; + break; + case glslang::EOpRayQueryIsSphereHitNV: + typeId = builder.makeBoolType(); + opCode = spv::Op::OpRayQueryIsSphereHitNV; + break; + case glslang::EOpRayQueryIsLSSHitNV: + typeId = builder.makeBoolType(); + 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::Op::OpHitObjectIsSphereHitNV; + break; + case glslang::EOpHitObjectIsLSSHitNV: + typeId = builder.makeBoolType(); + 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::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; @@ -9259,87 +9765,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; @@ -9352,16 +9858,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) { @@ -9409,7 +9915,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) @@ -9429,99 +9935,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: { @@ -9535,52 +10041,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: @@ -9591,15 +10097,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 @@ -9633,8 +10139,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)); @@ -9667,76 +10173,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. @@ -9748,60 +10254,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) @@ -9823,38 +10329,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); } } @@ -9871,12 +10377,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); @@ -9888,13 +10394,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); @@ -9906,15 +10412,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); } } @@ -9946,15 +10452,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 = ... @@ -9964,7 +10470,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)); } } @@ -10028,8 +10534,9 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla glslang::TVector::const_iterator iter; for (iter = glslangType.getStruct()->begin(); iter != glslangType.getStruct()->end(); ++iter) spvConsts.push_back(createSpvConstantFromConstUnionArray(*iter->type, consts, nextConst, false)); - } else if (glslangType.getVectorSize() > 1) { - for (unsigned int i = 0; i < (unsigned int)glslangType.getVectorSize(); ++i) { + } else if (glslangType.getVectorSize() > 1 || glslangType.isCoopVecNV()) { + unsigned int numComponents = glslangType.isCoopVecNV() ? glslangType.getTypeParameters()->arraySizes->getDimSize(0) : glslangType.getVectorSize(); + for (unsigned int i = 0; i < numComponents; ++i) { bool zero = nextConst >= consts.size(); switch (glslangType.getBasicType()) { case glslang::EbtInt: @@ -10045,19 +10552,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: @@ -10070,9 +10577,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; @@ -10097,19 +10607,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: @@ -10122,12 +10632,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()); @@ -10257,10 +10770,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(); @@ -10275,7 +10788,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/libs/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp b/libs/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp index 9d9410b..18e487d 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp +++ b/libs/bgfx/3rdparty/glslang/SPIRV/InReadableOrder.cpp @@ -85,7 +85,7 @@ class ReadableOrderTraverser { 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/libs/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp b/libs/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp index 8452764..02ecb3c 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.cpp +++ b/libs/bgfx/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::OpAccessChain: - case spv::OpLoad: - case spv::OpStore: - case spv::OpCompositeConstruct: - case spv::OpFunctionCall: - ++opCounter[opCode]; + 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::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,33 +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::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/libs/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h b/libs/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h index e60da79..d4c2295 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h +++ b/libs/bgfx/3rdparty/glslang/SPIRV/SPVRemapper.h @@ -91,7 +91,7 @@ class spirvbin_base_t #include #include -#include "spirv.hpp" +#include "spirv.hpp11" namespace spv { diff --git a/libs/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp b/libs/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp index e23ccab..0f953ac 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.cpp +++ b/libs/bgfx/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,20 +548,42 @@ 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)); } } +Id Builder::makeCooperativeVectorTypeNV(Id componentType, Id components) +{ + // try to find it + Instruction* type; + 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, Op::OpTypeCooperativeVectorNV); + type->addIdOperand(componentType); + type->addIdOperand(components); + groupedTypes[enumCast(Op::OpTypeCooperativeVectorNV)].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} + Id Builder::makeGenericType(spv::Op opcode, std::vector& operands) { // 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 @@ -541,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); @@ -557,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); @@ -585,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); @@ -603,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; @@ -621,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; @@ -633,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); @@ -656,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); @@ -682,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) && @@ -695,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); @@ -705,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; @@ -748,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); } } @@ -759,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"; } }; @@ -778,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); @@ -806,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); @@ -831,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); @@ -869,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); @@ -909,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); @@ -940,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); @@ -976,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); @@ -995,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); @@ -1035,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); @@ -1080,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); @@ -1104,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()); @@ -1122,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; } @@ -1153,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); @@ -1177,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); @@ -1202,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); @@ -1228,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); @@ -1243,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); @@ -1257,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); @@ -1272,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) { @@ -1282,7 +1375,7 @@ Id Builder::makeAccelerationStructureType() debugId[type->getResultId()] = debugType; } } else { - type = groupedTypes[OpTypeAccelerationStructureKHR].back(); + type = groupedTypes[enumCast(Op::OpTypeAccelerationStructureKHR)].back(); } return type->getResultId(); @@ -1291,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) { @@ -1301,7 +1394,7 @@ Id Builder::makeRayQueryType() debugId[type->getResultId()] = debugType; } } else { - type = groupedTypes[OpTypeRayQueryKHR].back(); + type = groupedTypes[enumCast(Op::OpTypeRayQueryKHR)].back(); } return type->getResultId(); @@ -1310,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(); @@ -1337,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; @@ -1355,23 +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 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: @@ -1390,17 +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 Op::OpTypeVector: + case Op::OpTypeMatrix: + case Op::OpTypeArray: + case Op::OpTypeRuntimeArray: + case Op::OpTypePointer: + case Op::OpTypeCooperativeVectorNV: return getScalarTypeId(getContainedTypeId(typeId)); default: assert(0); @@ -1416,16 +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 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); @@ -1469,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; @@ -1499,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; @@ -1519,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) @@ -1534,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 && @@ -1552,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; @@ -1576,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; @@ -1604,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); @@ -1616,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(); } @@ -1635,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(); @@ -1643,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; } @@ -1656,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(); @@ -1664,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; @@ -1672,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; } @@ -1682,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(); @@ -1690,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; @@ -1699,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; } @@ -1707,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(); @@ -1715,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; @@ -1726,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; } @@ -1736,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(); @@ -1744,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); @@ -1756,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; } @@ -1764,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(); @@ -1804,16 +1931,23 @@ Id Builder::importNonSemanticShaderDebugInfoInstructions() return nonSemanticShaderDebugInfo; } -Id Builder::findCompositeConstant(Op typeClass, Id typeId, const std::vector& comps) +Id Builder::findCompositeConstant(Op typeClass, Op opcode, Id typeId, const std::vector& comps, size_t numMembers) { Instruction* constant = nullptr; bool found = false; - for (int i = 0; i < (int)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; + if (constant->getOpCode() != opcode) { + continue; + } + + if (constant->getNumOperands() != (int)numMembers) + continue; + // same contents? bool mismatch = false; for (int op = 0; op < constant->getNumOperands(); ++op) { @@ -1863,35 +1997,36 @@ Id Builder::makeCompositeConstant(Id typeId, const std::vector& members, boo bool replicate = false; size_t numMembers = members.size(); - if (useReplicatedComposites) { + 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 Op::OpTypeVector: + case Op::OpTypeArray: + case Op::OpTypeMatrix: + case Op::OpTypeCooperativeMatrixKHR: + case Op::OpTypeCooperativeMatrixNV: + case Op::OpTypeCooperativeVectorNV: if (! specConstant) { - Id existing = findCompositeConstant(typeClass, typeId, members); + 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) @@ -1908,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(); @@ -1919,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()); @@ -1937,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); @@ -1957,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); @@ -1973,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); @@ -1985,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); @@ -1995,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); @@ -2006,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); @@ -2021,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); @@ -2035,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); @@ -2050,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); @@ -2064,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); @@ -2076,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); @@ -2090,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); @@ -2106,10 +2241,10 @@ void Builder::addDecorationId(Id id, Decoration decoration, const std::vectorreserveOperands(3); dec->addIdOperand(id); dec->addImmediateOperand(member); @@ -2122,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); @@ -2137,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); @@ -2153,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); @@ -2170,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); @@ -2192,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); @@ -2200,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); @@ -2231,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; @@ -2343,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); @@ -2365,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); @@ -2393,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"); @@ -2434,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; } @@ -2444,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); @@ -2453,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); } } @@ -2505,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)); @@ -2547,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(); } @@ -2557,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; @@ -2576,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)); } } @@ -2600,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)); } } @@ -2629,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) @@ -2642,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); @@ -2658,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)); @@ -2675,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)); @@ -2690,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); @@ -2707,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) @@ -2721,7 +2856,7 @@ Id Builder::createCompositeExtract(Id composite, Id typeId, const std::vectorreserveOperands(3); insert->addIdOperand(object); insert->addIdOperand(composite); @@ -2733,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); @@ -2746,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); @@ -2757,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); @@ -2809,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)); @@ -2817,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)); } @@ -2910,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) @@ -2921,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) @@ -2952,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); @@ -2972,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); @@ -3021,7 +3156,7 @@ Id Builder::smearScalar(Decoration precision, Id scalar, Id vectorType) assert(getTypeId(scalar) == getScalarTypeId(vectorType)); int numComponents = getNumTypeComponents(vectorType); - if (numComponents == 1) + if (numComponents == 1 && !isCooperativeVectorType(vectorType)) return scalar; Instruction* smear = nullptr; @@ -3038,15 +3173,15 @@ Id Builder::smearScalar(Decoration precision, Id scalar, Id vectorType) auto result_id = makeCompositeConstant(vectorType, members, isSpecConstant(scalar)); smear = module.getInstruction(result_id); } else { - bool replicate = useReplicatedComposites && (numComponents > 0); + bool replicate = (useReplicatedComposites || isCooperativeVectorType(vectorType)) && (numComponents > 0); 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); @@ -3061,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); @@ -3100,132 +3235,139 @@ 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); + if (!isConstant(parameters.offsets) && sourceLang == spv::SourceLanguage::GLSL) { + mask = (ImageOperandsMask)(mask | ImageOperandsMask::Offsets); + } else { + 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 | 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; } } @@ -3235,10 +3377,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: @@ -3271,7 +3413,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); @@ -3293,22 +3435,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; @@ -3327,11 +3469,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: @@ -3346,7 +3488,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(); } @@ -3370,15 +3512,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; } @@ -3391,7 +3533,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); @@ -3414,7 +3556,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); } @@ -3425,7 +3567,8 @@ Id Builder::createCompositeCompare(Decoration precision, Id value1, Id value2, b Id Builder::createCompositeConstruct(Id typeId, const std::vector& constituents) { assert(isAggregateType(typeId) || (getNumTypeConstituents(typeId) > 1 && - getNumTypeConstituents(typeId) == constituents.size())); + getNumTypeConstituents(typeId) == constituents.size()) || + (isCooperativeVectorType(typeId) && constituents.size() == 1)); if (generatingOpCodeForSpecConst) { // Sometime, even in spec-constant-op mode, the constant composite to be @@ -3444,18 +3587,18 @@ Id Builder::createCompositeConstruct(Id typeId, const std::vector& constitue bool replicate = false; size_t numConstituents = constituents.size(); - if (useReplicatedComposites) { + if (useReplicatedComposites || isCooperativeVectorType(typeId)) { replicate = numConstituents > 0 && std::equal(constituents.begin() + 1, constituents.end(), constituents.begin()); } 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()); @@ -3469,7 +3612,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)); @@ -3491,7 +3634,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]); @@ -3510,7 +3653,7 @@ Id Builder::createConstructor(Decoration precision, const std::vector& sourc // Special case: when calling a vector constructor with a single scalar // argument, smear the scalar - if (sources.size() == 1 && isScalar(sources[0]) && numTargetComponents > 1) + if (sources.size() == 1 && isScalar(sources[0]) && (numTargetComponents > 1 || isCooperativeVectorType(resultTypeId))) return smearScalar(precision, sources[0], resultTypeId); // Special case: 2 vectors of equal size @@ -3574,7 +3717,7 @@ Id Builder::createConstructor(Decoration precision, const std::vector& sourc if (isScalar(sources[i]) || isPointer(sources[i])) latchResult(sources[i]); - else if (isVector(sources[i])) + else if (isVector(sources[i]) || isCooperativeVector(sources[i])) accumulateVectorConstituents(sources[i]); else if (isMatrix(sources[i])) accumulateMatrixConstituents(sources[i]); @@ -3726,7 +3869,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), @@ -3782,7 +3925,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) { @@ -3798,7 +3941,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; @@ -3960,8 +4103,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); @@ -3985,8 +4128,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); @@ -4021,17 +4164,20 @@ Id Builder::accessChainLoad(Decoration precision, Decoration l_nonUniform, if (constant) { id = createCompositeExtract(accessChain.base, swizzleBase, indexes); setPrecision(id, precision); + } else if (isCooperativeVector(accessChain.base)) { + assert(accessChain.indexChain.size() == 1); + id = createVectorExtractDynamic(accessChain.base, resultType, accessChain.indexChain[0]); } else { Id lValue = NoResult; if (spvVersion >= Spv_1_4 && isValidInitializer(accessChain.base)) { // 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); @@ -4050,8 +4196,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 @@ -4147,19 +4293,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); @@ -4172,7 +4318,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); } @@ -4326,7 +4472,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)); @@ -4337,19 +4483,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()); @@ -4361,7 +4507,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()); @@ -4384,9 +4530,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); @@ -4405,7 +4551,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); } @@ -4437,7 +4583,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/libs/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h b/libs/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h index 44377ac..f5aa17b 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/SpvBuilder.h +++ b/libs/bgfx/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 { @@ -75,6 +79,7 @@ typedef enum { Spv_1_3 = (1 << 16) | (3 << 8), Spv_1_4 = (1 << 16) | (4 << 8), Spv_1_5 = (1 << 16) | (5 << 8), + Spv_1_6 = (1 << 16) | (6 << 8), } SpvVersion; class Builder { @@ -97,7 +102,7 @@ class Builder { 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)); @@ -203,6 +208,7 @@ class Builder { 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); @@ -216,6 +222,7 @@ class Builder { Id makeCooperativeMatrixTypeKHR(Id component, Id scope, Id rows, Id cols, Id use); Id makeCooperativeMatrixTypeNV(Id component, Id scope, Id rows, Id cols); Id makeCooperativeMatrixTypeWithSameShape(Id component, Id otherType); + Id makeCooperativeVectorTypeNV(Id componentType, Id components); Id makeGenericType(spv::Op opcode, std::vector& operands); // SPIR-V NonSemantic Shader DebugInfo Instructions @@ -280,56 +287,59 @@ class Builder { { return (ImageFormat)module.getInstruction(typeId)->getImmediateOperand(6); } Id getResultingAccessChainType() const; Id getIdOperand(Id resultId, int idx) { return module.getInstruction(resultId)->getIdOperand(idx); } + Id getCooperativeVectorNumComponents(Id typeId) const { return module.getInstruction(typeId)->getIdOperand(1); } bool isPointer(Id resultId) const { return isPointerType(getTypeId(resultId)); } bool isScalar(Id resultId) const { return isScalarType(getTypeId(resultId)); } bool isVector(Id resultId) const { return isVectorType(getTypeId(resultId)); } bool isMatrix(Id resultId) const { return isMatrixType(getTypeId(resultId)); } bool isCooperativeMatrix(Id resultId)const { return isCooperativeMatrixType(getTypeId(resultId)); } + bool isCooperativeVector(Id resultId)const { return isCooperativeVectorType(getTypeId(resultId)); } bool isAggregate(Id resultId) const { return isAggregateType(getTypeId(resultId)); } bool isSampledImage(Id resultId) const { return isSampledImageType(getTypeId(resultId)); } 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 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); } @@ -337,7 +347,7 @@ class Builder { 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); } @@ -388,6 +398,14 @@ class Builder { { 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) @@ -395,6 +413,7 @@ class Builder { 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(); @@ -482,13 +501,13 @@ class Builder { 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); @@ -515,7 +534,7 @@ class Builder { 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); @@ -586,6 +605,7 @@ class Builder { Id coarse; bool nonprivate; bool volatil; + bool nontemporal; }; // Select the correct texture operation based on all inputs, and emit the correct instruction @@ -621,7 +641,7 @@ class Builder { // 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(); @@ -633,7 +653,7 @@ class Builder { Builder& builder; Id condition; - unsigned int control; + SelectionControlMask control; Function* function; Block* headerBlock; Block* thenBlock; @@ -653,7 +673,7 @@ class Builder { // 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. @@ -754,6 +774,7 @@ class Builder { unsigned shadercallcoherent : 1; unsigned nonprivate : 1; unsigned volatil : 1; + unsigned nontemporal : 1; unsigned isImage : 1; unsigned nonUniform : 1; @@ -766,6 +787,7 @@ class Builder { shadercallcoherent = 0; nonprivate = 0; volatil = 0; + nontemporal = 0; isImage = 0; nonUniform = 0; } @@ -779,6 +801,7 @@ class Builder { shadercallcoherent |= other.shadercallcoherent; nonprivate |= other.nonprivate; volatil |= other.volatil; + nontemporal = other.nontemporal; isImage |= other.isImage; nonUniform |= other.nonUniform; return *this; @@ -841,12 +864,12 @@ class Builder { // 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 @@ -883,7 +906,7 @@ class Builder { // 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. @@ -898,14 +921,14 @@ class Builder { protected: Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned value); Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2); - Id findCompositeConstant(Op typeClass, Id typeId, const std::vector& comps); + Id findCompositeConstant(Op typeClass, Op opcode, Id typeId, const std::vector& comps, size_t numMembers); Id findStructConstant(Id typeId, const std::vector& comps); Id collapseAccessChain(); void remapDynamicSwizzle(); 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; @@ -989,6 +1012,10 @@ class Builder { // 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/libs/bgfx/3rdparty/glslang/SPIRV/SpvPostProcess.cpp b/libs/bgfx/3rdparty/glslang/SPIRV/SpvPostProcess.cpp index 4cd0110..4f61864 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/SpvPostProcess.cpp +++ b/libs/bgfx/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/libs/bgfx/3rdparty/glslang/SPIRV/SpvTools.cpp b/libs/bgfx/3rdparty/glslang/SPIRV/SpvTools.cpp index a7a1a73..d1b411f 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/SpvTools.cpp +++ b/libs/bgfx/3rdparty/glslang/SPIRV/SpvTools.cpp @@ -165,6 +165,7 @@ void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector< spvValidatorOptionsSetBeforeHlslLegalization(options, prelegalization); spvValidatorOptionsSetScalarBlockLayout(options, intermediate.usingScalarBlockLayout()); spvValidatorOptionsSetWorkgroupScalarBlockLayout(options, intermediate.usingScalarBlockLayout()); + spvValidatorOptionsSetAllowOffsetTextureOperand(options, intermediate.usingTextureOffsetNonConst()); spvValidateWithOptions(context, options, &binary, &diagnostic); // report diff --git a/libs/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp b/libs/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp index 606e889..a733996 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/disassemble.cpp +++ b/libs/bgfx/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 @@ class SpirvStream { 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/libs/bgfx/3rdparty/glslang/SPIRV/doc.cpp b/libs/bgfx/3rdparty/glslang/SPIRV/doc.cpp index dce8a71..db097a7 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/doc.cpp +++ b/libs/bgfx/3rdparty/glslang/SPIRV/doc.cpp @@ -1,6 +1,6 @@ // // Copyright (C) 2014-2015 LunarG, Inc. -// Copyright (C) 2022-2024 Arm Limited. +// Copyright (C) 2022-2025 Arm Limited. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // // All rights reserved. @@ -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,56 @@ 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 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 ExecutionModeOutputLinesNV: return "OutputLinesNV"; - case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV"; - case ExecutionModeOutputTrianglesNV: return "OutputTrianglesNV"; - case ExecutionModeDerivativeGroupQuadsNV: return "DerivativeGroupQuadsNV"; - case ExecutionModeDerivativeGroupLinearNV: 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 ExecutionModeMaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL"; - case ExecutionModeMaxWorkDimINTEL: return "MaxWorkDimINTEL"; - case ExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL"; - case ExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL"; - - case ExecutionModeRequireFullQuadsKHR: return "RequireFullQuadsKHR"; - case ExecutionModeQuadDerivativesKHR: return "QuadDerivativesKHR"; - - case ExecutionModeNonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT"; - case ExecutionModeNonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT"; - case ExecutionModeNonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT"; + 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 (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::NonCoherentTileAttachmentReadQCOM: return "NonCoherentTileAttachmentReadQCOM"; + case (int)ExecutionMode::TileShadingRateQCOM: return "TileShadingRateQCOM"; + + 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 (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 (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 (int)ExecutionMode::MaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL"; + case (int)ExecutionMode::MaxWorkDimINTEL: return "MaxWorkDimINTEL"; + case (int)ExecutionMode::NoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL"; + case (int)ExecutionMode::NumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL"; + + case (int)ExecutionMode::RequireFullQuadsKHR: return "RequireFullQuadsKHR"; + case (int)ExecutionMode::QuadDerivativesKHR: return "QuadDerivativesKHR"; + + 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 +253,18 @@ 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 StorageClassPhysicalStorageBufferEXT: return "PhysicalStorageBufferEXT"; - case StorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT"; - case StorageClassHitObjectAttributeNV: return "HitObjectAttributeNV"; - case StorageClassTileImageEXT: return "TileImageEXT"; + case (int)StorageClass::TileAttachmentQCOM: return "TileAttachmentQCOM"; + 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 (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 +323,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 DecorationPerVertexKHR: return "PerVertexKHR"; - - case DecorationNonUniformEXT: return "DecorationNonUniformEXT"; - case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE"; - case DecorationHlslSemanticGOOGLE: return "DecorationHlslSemanticGOOGLE"; - case DecorationRestrictPointerEXT: return "DecorationRestrictPointerEXT"; - case DecorationAliasedPointerEXT: return "DecorationAliasedPointerEXT"; - - case DecorationHitObjectShaderRecordBufferNV: return "DecorationHitObjectShaderRecordBufferNV"; + 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 (int)Decoration::PerVertexKHR: return "PerVertexKHR"; + + 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 (int)Decoration::HitObjectShaderRecordBufferNV: return "DecorationHitObjectShaderRecordBufferNV"; } } @@ -403,6 +409,10 @@ const char* BuiltInString(int builtIn) case 4444: return "ShadingRateKHR"; case 5014: return "FragStencilRefEXT"; + case (int)BuiltIn::TileOffsetQCOM: return "TileOffsetQCOM"; + case (int)BuiltIn::TileDimensionQCOM: return "TileDimensionQCOM"; + case (int)BuiltIn::TileApronSizeQCOM: return "TileApronSizeQCOM"; + case 4992: return "BaryCoordNoPerspAMD"; case 4993: return "BaryCoordNoPerspCentroidAMD"; case 4994: return "BaryCoordNoPerspSampleAMD"; @@ -410,64 +420,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 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 BuiltInFragSizeEXT: return "FragSizeEXT"; - case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT"; + 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 (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"; } @@ -483,7 +500,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"; } @@ -630,25 +647,27 @@ const char* ImageChannelDataTypeString(int type) } } -const int ImageOperandsCeiling = 14; +const int ImageOperandsCeiling = 17; 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 (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 (int)ImageOperandsShift::Offsets: return "Offsets"; case ImageOperandsCeiling: default: @@ -731,20 +750,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"; @@ -792,12 +811,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"; } @@ -808,11 +827,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"; } @@ -823,8 +842,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"; } @@ -848,13 +867,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"; } @@ -953,141 +972,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 CapabilityStorageUniformBufferBlock16: return "StorageUniformBufferBlock16"; - case CapabilityStorageUniform16: return "StorageUniform16"; - case CapabilityStoragePushConstant16: return "StoragePushConstant16"; - case CapabilityStorageInputOutput16: return "StorageInputOutput16"; - - case CapabilityStorageBuffer8BitAccess: return "StorageBuffer8BitAccess"; - case CapabilityUniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess"; - case CapabilityStoragePushConstant8: return "StoragePushConstant8"; - - case CapabilityDeviceGroup: return "DeviceGroup"; - case CapabilityMultiView: return "MultiView"; - - case CapabilityDenormPreserve: return "DenormPreserve"; - case CapabilityDenormFlushToZero: return "DenormFlushToZero"; - case CapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; - case CapabilityRoundingModeRTE: return "RoundingModeRTE"; - case CapabilityRoundingModeRTZ: return "RoundingModeRTZ"; - - case CapabilityStencilExportEXT: return "StencilExportEXT"; - - case CapabilityFloat16ImageAMD: return "Float16ImageAMD"; - case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD"; - case CapabilityFragmentMaskAMD: return "FragmentMaskAMD"; - case CapabilityImageReadWriteLodAMD: return "ImageReadWriteLodAMD"; - - case CapabilityAtomicStorageOps: 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 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 CapabilityFragmentFullyCoveredEXT: 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 CapabilityVulkanMemoryModelKHR: return "VulkanMemoryModelKHR"; - case CapabilityVulkanMemoryModelDeviceScopeKHR: return "VulkanMemoryModelDeviceScopeKHR"; - - case CapabilityPhysicalStorageBufferAddressesEXT: return "PhysicalStorageBufferAddressesEXT"; - - case CapabilityVariablePointers: 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 CapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV"; - - case CapabilityFragmentShaderSampleInterlockEXT: return "CapabilityFragmentShaderSampleInterlockEXT"; - case CapabilityFragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT"; - case CapabilityFragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT"; - - case CapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT"; - case CapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; - case CapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; - - case CapabilityCooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; - - case CapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR"; - - case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT"; - case CapabilityAtomicFloat16VectorNV: return "AtomicFloat16VectorNV"; - case CapabilityShaderClockKHR: return "ShaderClockKHR"; - case CapabilityQuadControlKHR: return "QuadControlKHR"; - case CapabilityInt64ImageEXT: return "Int64ImageEXT"; - - case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL"; - - case CapabilityExpectAssumeKHR: 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 CapabilityWorkgroupMemoryExplicitLayoutKHR: return "CapabilityWorkgroupMemoryExplicitLayoutKHR"; - case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR"; - case CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR"; - case CapabilityCoreBuiltinsARM: return "CoreBuiltinsARM"; - - case CapabilityShaderInvocationReorderNV: return "ShaderInvocationReorderNV"; - - case CapabilityTextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM"; - case CapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM"; - case CapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM"; - case CapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; - - case CapabilityReplicatedCompositesEXT: return "CapabilityReplicatedCompositesEXT"; + 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 (int)Capability::StorageUniformBufferBlock16: return "StorageUniformBufferBlock16"; + case (int)Capability::StorageUniform16: return "StorageUniform16"; + case (int)Capability::StoragePushConstant16: return "StoragePushConstant16"; + case (int)Capability::StorageInputOutput16: return "StorageInputOutput16"; + + case (int)Capability::StorageBuffer8BitAccess: return "StorageBuffer8BitAccess"; + case (int)Capability::UniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess"; + case (int)Capability::StoragePushConstant8: return "StoragePushConstant8"; + + case (int)Capability::DeviceGroup: return "DeviceGroup"; + case (int)Capability::MultiView: return "MultiView"; + + 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 (int)Capability::StencilExportEXT: return "StencilExportEXT"; + + 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 (int)Capability::AtomicStorageOps: return "AtomicStorageOps"; + + 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 (int)Capability::FragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT"; + + 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 (int)Capability::VulkanMemoryModelKHR: return "VulkanMemoryModelKHR"; + case (int)Capability::VulkanMemoryModelDeviceScopeKHR: return "VulkanMemoryModelDeviceScopeKHR"; + + case (int)Capability::PhysicalStorageBufferAddressesEXT: return "PhysicalStorageBufferAddressesEXT"; + + case (int)Capability::VariablePointers: return "VariablePointers"; + + 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 (int)Capability::ShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV"; + + case (int)Capability::CooperativeVectorNV: return "CooperativeVectorNV"; + case (int)Capability::CooperativeVectorTrainingNV: return "CooperativeVectorTrainingNV"; + + case (int)Capability::FragmentShaderSampleInterlockEXT: return "CapabilityFragmentShaderSampleInterlockEXT"; + case (int)Capability::FragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT"; + case (int)Capability::FragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT"; + + case (int)Capability::TileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT"; + case (int)Capability::TileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; + case (int)Capability::TileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; + + case (int)Capability::CooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; + + case (int)Capability::FragmentShadingRateKHR: return "FragmentShadingRateKHR"; + + 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 (int)Capability::IntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL"; + + case (int)Capability::ExpectAssumeKHR: return "ExpectAssumeKHR"; + + 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 (int)Capability::WorkgroupMemoryExplicitLayoutKHR: return "CapabilityWorkgroupMemoryExplicitLayoutKHR"; + case (int)Capability::WorkgroupMemoryExplicitLayout8BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR"; + case (int)Capability::WorkgroupMemoryExplicitLayout16BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR"; + case (int)Capability::CoreBuiltinsARM: return "CoreBuiltinsARM"; + + case (int)Capability::ShaderInvocationReorderNV: return "ShaderInvocationReorderNV"; + + case (int)Capability::TextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM"; + case (int)Capability::TextureBoxFilterQCOM: return "TextureBoxFilterQCOM"; + case (int)Capability::TextureBlockMatchQCOM: return "TextureBlockMatchQCOM"; + case (int)Capability::TileShadingQCOM: return "TileShadingQCOM"; + case (int)Capability::TextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; + + case (int)Capability::ReplicatedCompositesEXT: return "CapabilityReplicatedCompositesEXT"; + + 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 (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"; default: return "Bad"; } @@ -1181,7 +1219,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"; @@ -1419,9 +1457,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"; @@ -1458,7 +1496,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"; @@ -1468,15 +1506,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"; @@ -1490,146 +1528,177 @@ const char* OpcodeString(int op) case 5011: return "OpFragmentMaskFetchAMD"; case 5012: return "OpFragmentFetchAMD"; - case OpReadClockKHR: return "OpReadClockKHR"; - - case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE"; - case 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 OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV"; - case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; - case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; - case OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT"; - case OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT"; - - case 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 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 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 OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT"; - case 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 OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV"; - case OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV"; - - case OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT"; - case OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT"; - case 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 OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT"; - case OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT"; - case OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT"; + case (int)Op::OpReadClockKHR: return "OpReadClockKHR"; + + case (int)Op::OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE"; + case (int)Op::OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE"; + + 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 (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 (int)Op::OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR"; + + 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 (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 (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 (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 (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 (int)Op::OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT"; + case (int)Op::OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT"; + + 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 (int)Op::OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV"; + case (int)Op::OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV"; + + case (int)Op::OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT"; + case (int)Op::OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT"; + case (int)Op::OpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT"; + + 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 (int)Op::OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT"; + case (int)Op::OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT"; + case (int)Op::OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT"; + + 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"; @@ -1663,132 +1732,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[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[ExecutionModeLocalSize].push(OperandLiteralNumber, "'x size'"); - ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'y size'"); - ExecutionModeOperands[ExecutionModeLocalSize].push(OperandLiteralNumber, "'z size'"); - - ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'x size'"); - ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'y size'"); - ExecutionModeOperands[ExecutionModeLocalSizeHint].push(OperandLiteralNumber, "'z size'"); - - ExecutionModeOperands[ExecutionModeOutputVertices].push(OperandLiteralNumber, "'Vertex count'"); - ExecutionModeOperands[ExecutionModeVecTypeHint].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'"); + ExecutionModeOperands[enumCast(ExecutionMode::Invocations)].push(OperandLiteralNumber, "'Number of <>'"); + + 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[enumCast(ExecutionMode::LocalSizeHint)].push(OperandLiteralNumber, "'x size'"); + ExecutionModeOperands[enumCast(ExecutionMode::LocalSizeHint)].push(OperandLiteralNumber, "'y size'"); + ExecutionModeOperands[enumCast(ExecutionMode::LocalSizeHint)].push(OperandLiteralNumber, "'z size'"); + + ExecutionModeOperands[enumCast(ExecutionMode::OutputVertices)].push(OperandLiteralNumber, "'Vertex count'"); + ExecutionModeOperands[enumCast(ExecutionMode::VecTypeHint)].push(OperandLiteralNumber, "'Vector type'"); + + 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); @@ -1828,1770 +1902,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[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[OpRayQueryTerminateKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryTerminateKHR].setResultAndType(false, false); - - InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGenerateIntersectionKHR].operands.push(OperandId, "'THit'"); - InstructionDesc[OpRayQueryGenerateIntersectionKHR].setResultAndType(false, false); - - InstructionDesc[OpRayQueryConfirmIntersectionKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryConfirmIntersectionKHR].setResultAndType(false, false); - - InstructionDesc[OpRayQueryProceedKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryProceedKHR].setResultAndType(true, true); - - InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'RayQuery'"); - InstructionDesc[OpRayQueryGetIntersectionTypeKHR].operands.push(OperandId, "'Committed'"); - InstructionDesc[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[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[enumCast(Op::OpTypeAccelerationStructureKHR)].setResultAndType(true, false); + InstructionDesc[enumCast(Op::OpTypeRayQueryKHR)].setResultAndType(true, false); - InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'A'"); - InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'B'"); - InstructionDesc[OpCooperativeMatrixMulAddNV].operands.push(OperandId, "'C'"); + 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[OpCooperativeMatrixLengthNV].operands.push(OperandId, "'Type'"); + InstructionDesc[enumCast(Op::OpRayQueryTerminateKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryTerminateKHR)].setResultAndType(false, false); - 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[enumCast(Op::OpRayQueryGenerateIntersectionKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGenerateIntersectionKHR)].operands.push(OperandId, "'THit'"); + InstructionDesc[enumCast(Op::OpRayQueryGenerateIntersectionKHR)].setResultAndType(false, false); - 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[enumCast(Op::OpRayQueryConfirmIntersectionKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryConfirmIntersectionKHR)].setResultAndType(false, false); - 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[enumCast(Op::OpRayQueryProceedKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryProceedKHR)].setResultAndType(true, 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[enumCast(Op::OpRayQueryGetIntersectionTypeKHR)].operands.push(OperandId, "'RayQuery'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTypeKHR)].operands.push(OperandId, "'Committed'"); + InstructionDesc[enumCast(Op::OpRayQueryGetIntersectionTypeKHR)].setResultAndType(true, true); - InstructionDesc[OpCooperativeMatrixLengthKHR].operands.push(OperandId, "'Type'"); - - 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[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[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/libs/bgfx/3rdparty/glslang/SPIRV/doc.h b/libs/bgfx/3rdparty/glslang/SPIRV/doc.h index 8cd388a..c818308 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/doc.h +++ b/libs/bgfx/3rdparty/glslang/SPIRV/doc.h @@ -38,7 +38,7 @@ #pragma once -#include "spirv.hpp" +#include "spirv.hpp11" #include diff --git a/libs/bgfx/3rdparty/glslang/SPIRV/spirv.hpp11 b/libs/bgfx/3rdparty/glslang/SPIRV/spirv.hpp11 new file mode 100644 index 0000000..e9e36c3 --- /dev/null +++ b/libs/bgfx/3rdparty/glslang/SPIRV/spirv.hpp11 @@ -0,0 +1,5176 @@ +// 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, + NonCoherentTileAttachmentReadQCOM = 4489, + TileShadingRateQCOM = 4490, + 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, + TileAttachmentQCOM = 4491, + 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, + TileOffsetQCOM = 4492, + TileDimensionQCOM = 4493, + TileApronSizeQCOM = 4494, + 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, + TileShadingQCOM = 4495, + 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::NonCoherentTileAttachmentReadQCOM: return "NonCoherentTileAttachmentReadQCOM"; + case ExecutionMode::TileShadingRateQCOM: return "TileShadingRateQCOM"; + 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::TileAttachmentQCOM: return "TileAttachmentQCOM"; + 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::TileOffsetQCOM: return "TileOffsetQCOM"; + case BuiltIn::TileDimensionQCOM: return "TileDimensionQCOM"; + case BuiltIn::TileApronSizeQCOM: return "TileApronSizeQCOM"; + 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::TileShadingQCOM: return "TileShadingQCOM"; + 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/libs/bgfx/3rdparty/glslang/SPIRV/spvIR.h b/libs/bgfx/3rdparty/glslang/SPIRV/spvIR.h index e723f0e..f1039cf 100644 --- a/libs/bgfx/3rdparty/glslang/SPIRV/spvIR.h +++ b/libs/bgfx/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 @@ class Instruction { 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 @@ class Instruction { { unsigned int word = 0; unsigned int shiftAmount = 0; - char c; + unsigned char c; do { c = *(str++); @@ -178,7 +243,7 @@ class Instruction { 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 @@ class Instruction { } 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 @@ class Block { 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 @@ class Block { 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 @@ class Block { 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 @@ class Block { 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 @@ class Function { 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 @@ class Function { 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 @@ class Function { // 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 @@ class Module { } 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 @@ class Module { // - 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/libs/bgfx/3rdparty/glslang/SPIRV/spvUtil.h b/libs/bgfx/3rdparty/glslang/SPIRV/spvUtil.h new file mode 100644 index 0000000..d772a30 --- /dev/null +++ b/libs/bgfx/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/libs/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp b/libs/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp index 8323845..b1853b0 100644 --- a/libs/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp +++ b/libs/bgfx/3rdparty/glslang/StandAlone/StandAlone.cpp @@ -56,10 +56,12 @@ #include #include #include +#include #include #include #include #include +#include #include "../glslang/OSDependent/osinclude.h" @@ -110,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; @@ -905,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; @@ -1093,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)"); @@ -1183,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); } // @@ -1943,25 +1954,26 @@ void usage() { printf("Usage: glslang [option]... [file]...\n" "\n" - "'file' can end in . for auto-stage classification, where is:\n" - " .conf to provide a config file that replaces the default configuration\n" - " (see -c option below for generating a template)\n" - " .vert for a vertex shader\n" - " .tesc for a tessellation control shader\n" - " .tese for a tessellation evaluation shader\n" - " .geom for a geometry shader\n" - " .frag for a fragment shader\n" - " .comp for a compute shader\n" - " .mesh for a mesh shader\n" - " .task for a task shader\n" - " .rgen for a ray generation shader\n" - " .rint for a ray intersection shader\n" - " .rahit for a ray any hit shader\n" - " .rchit for a ray closest hit shader\n" - " .rmiss for a ray miss shader\n" - " .rcall for a ray callable shader\n" - " .glsl for .vert.glsl, .tesc.glsl, ..., .comp.glsl compound suffixes\n" - " .hlsl for .vert.hlsl, .tesc.hlsl, ..., .comp.hlsl compound suffixes\n" + "'file' with one of the following three endings can be auto-classified:\n" + "1) ., where is one of:\n" + " vert for a vertex shader\n" + " tesc for a tessellation control shader\n" + " tese for a tessellation evaluation shader\n" + " geom for a geometry shader\n" + " frag for a fragment shader\n" + " comp for a compute shader\n" + " mesh for a mesh shader\n" + " task for a task shader\n" + " rgen for a ray generation shader\n" + " rint for a ray intersection shader\n" + " rahit for a ray any hit shader\n" + " rchit for a ray closest hit shader\n" + " rmiss for a ray miss shader\n" + " rcall for a ray callable shader\n" + "2) ..glsl or ..hlsl compound suffix, where stage options are\n" + " described above\n" + "3) .conf, to provide a config file that replaces the default configuration\n" + " (see -c option below for generating a template)\n" "\n" "Options:\n" " -C cascading errors; risk crash from accumulation of error recoveries\n" @@ -1989,7 +2001,8 @@ void usage() " allowing the use of default uniforms, atomic_uints, and\n" " gl_VertexID and gl_InstanceID keywords.\n" " -S uses specified stage rather than parsing the file extension\n" - " choices for are vert, tesc, tese, geom, frag, or comp\n" + " choices for include vert, tesc, tese, geom, frag, comp.\n" + " A full list of options is given above." " -U | --undef-macro | --U \n" " undefine a pre-processor macro\n" " -V[ver] create SPIR-V binary, under Vulkan semantics; turns on -l;\n" @@ -2017,7 +2030,7 @@ void usage() " -m memory leak mode\n" " -o save binary to , requires a binary option (e.g., -V)\n" " -q dump reflection query database; requires -l for linking\n" - " -r | --relaxed-errors" + " -r | --relaxed-errors\n" " relaxed GLSL semantic error-checking mode\n" " -s silence syntax and semantic error reporting\n" " -t multi-threaded mode\n" @@ -2042,10 +2055,10 @@ void usage() " --flatten-uniform-arrays | --fua flatten uniform texture/sampler arrays to\n" " scalars\n" " --glsl-version {100 | 110 | 120 | 130 | 140 | 150 |\n" - " 300es | 310es | 320es | 330\n" - " 400 | 410 | 420 | 430 | 440 | 450 | 460}\n" + " 300es | 310es | 320es | 330\n" + " 400 | 410 | 420 | 430 | 440 | 450 | 460}\n" " set GLSL version, overrides #version\n" - " in shader sourcen\n" + " in shader source\n" " --hlsl-offsets allow block offsets to follow HLSL rules\n" " works independently of source language\n" " --hlsl-iomap perform IO mapping in HLSL register space\n" @@ -2152,7 +2165,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/libs/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp b/libs/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp index 1bd4a2d..b1f0326 100644 --- a/libs/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp +++ b/libs/bgfx/3rdparty/glslang/StandAlone/spirv-remap.cpp @@ -182,7 +182,7 @@ namespace { std::cout << " " << basename(name) << " [--version | -V]" << std::endl; std::cout << " " << basename(name) << " [--help | -?]" << std::endl; - exit(5); + exit(0); } // grind through each SPIR in turn diff --git a/libs/bgfx/3rdparty/glslang/build_info.h b/libs/bgfx/3rdparty/glslang/build_info.h index 05e3e30..f78ec2a 100644 --- a/libs/bgfx/3rdparty/glslang/build_info.h +++ b/libs/bgfx/3rdparty/glslang/build_info.h @@ -35,7 +35,7 @@ #define GLSLANG_BUILD_INFO #define GLSLANG_VERSION_MAJOR 15 -#define GLSLANG_VERSION_MINOR 1 +#define GLSLANG_VERSION_MINOR 3 #define GLSLANG_VERSION_PATCH 0 #define GLSLANG_VERSION_FLAVOR "" diff --git a/libs/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h b/libs/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h index 8586707..a33ab3f 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h +++ b/libs/bgfx/3rdparty/glslang/glslang/Include/BaseTypes.h @@ -49,6 +49,7 @@ enum TBasicType { EbtFloat, EbtDouble, EbtFloat16, + EbtBFloat16, EbtInt8, EbtUint8, EbtInt16, @@ -70,6 +71,7 @@ enum TBasicType { EbtFunction, EbtTensorLayoutNV, EbtTensorViewNV, + EbtCoopvecNV, // SPIR-V type defined by spirv_type EbtSpirvType, @@ -278,6 +280,7 @@ enum TBuiltInVariable { EbvWorldToObject3x4, EbvIncomingRayFlags, EbvCurrentRayTimeNV, + EbvClusterIDNV, // barycentrics EbvBaryCoordNV, EbvBaryCoordNoPerspNV, @@ -298,6 +301,13 @@ enum TBuiltInVariable { EbvHitKindFrontFacingMicroTriangleNV, EbvHitKindBackFacingMicroTriangleNV, + EbvHitIsSphereNV, + EbvHitIsLSSNV, + EbvHitSpherePositionNV, + EbvHitSphereRadiusNV, + EbvHitLSSPositionsNV, + EbvHitLSSRadiiNV, + //GL_EXT_mesh_shader EbvPrimitivePointIndicesEXT, EbvPrimitiveLineIndicesEXT, @@ -334,6 +344,11 @@ enum TBuiltInVariable { EbvPositionFetch, + // SPV_QCOM_tile_shading + EbvTileOffsetQCOM, + EbvTileDimensionQCOM, + EbvTileApronSizeQCOM, + EbvLast }; @@ -502,6 +517,7 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvObjectToWorld: return "ObjectToWorldNV"; case EbvWorldToObject: return "WorldToObjectNV"; case EbvCurrentRayTimeNV: return "CurrentRayTimeNV"; + case EbvClusterIDNV: return "ClusterIDNV"; case EbvBaryCoordEXT: case EbvBaryCoordNV: return "BaryCoordKHR"; @@ -533,6 +549,13 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV"; case EbvHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV"; + case EbvHitIsSphereNV: return "HitIsSphereNV"; + case EbvHitIsLSSNV: return "HitIsLSSNV"; + case EbvHitSpherePositionNV: return "HitSpherePositionNV"; + case EbvHitSphereRadiusNV: return "HitSphereRadiusNV"; + case EbvHitLSSPositionsNV: return "HitSpherePositionsNV"; + case EbvHitLSSRadiiNV: return "HitLSSRadiiNV"; + default: return "unknown built-in variable"; } } @@ -585,6 +608,7 @@ __inline bool isTypeFloat(TBasicType type) case EbtFloat: case EbtDouble: case EbtFloat16: + case EbtBFloat16: return true; default: return false; @@ -597,6 +621,7 @@ __inline uint32_t GetNumBits(TBasicType type) case EbtInt8: case EbtUint8: return 8; + case EbtBFloat16: case EbtFloat16: case EbtInt16: case EbtUint16: diff --git a/libs/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h b/libs/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h index e84ac52..8a92841 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/Include/PoolAlloc.h +++ b/libs/bgfx/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 @@ class TPoolAllocator { // 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 @@ class TPoolAllocator { // 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 @@ class pool_allocator { 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/libs/bgfx/3rdparty/glslang/glslang/Include/Types.h b/libs/bgfx/3rdparty/glslang/glslang/Include/Types.h index 465fb46..d6841bb 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/Include/Types.h +++ b/libs/bgfx/3rdparty/glslang/glslang/Include/Types.h @@ -85,6 +85,7 @@ struct TSampler { // misnomer now; includes images, textures without sampler, bool image : 1; // image, combined should be false bool combined : 1; // true means texture is combined with a sampler, false means texture with no sampler bool sampler : 1; // true means a pure sampler, other fields should be clear() + bool tileQCOM : 1; // is tile shading attachment unsigned int vectorSize : 3; // vector return type size. // Some languages support structures as sample results. Storing the whole structure in the @@ -127,6 +128,8 @@ struct TSampler { // misnomer now; includes images, textures without sampler, bool isShadow() const { return shadow; } bool isArrayed() const { return arrayed; } + bool isTileAttachmentQCOM() const { return tileQCOM; } + void clear() { type = EbtVoid; @@ -139,6 +142,7 @@ struct TSampler { // misnomer now; includes images, textures without sampler, sampler = false; external = false; yuv = false; + tileQCOM = false; #ifdef ENABLE_HLSL clearReturnStruct(); @@ -220,7 +224,8 @@ struct TSampler { // misnomer now; includes images, textures without sampler, isCombined() == right.isCombined() && isPureSampler() == right.isPureSampler() && isExternal() == right.isExternal() && - isYuv() == right.isYuv() + isYuv() == right.isYuv() && + isTileAttachmentQCOM() == right.isTileAttachmentQCOM() #ifdef ENABLE_HLSL && getVectorSize() == right.getVectorSize() && getStructReturnIndex() == right.getStructReturnIndex() @@ -246,6 +251,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; @@ -259,6 +265,8 @@ struct TSampler { // misnomer now; includes images, textures without sampler, s.append("attachmentEXT"); else if (isSubpass()) s.append("subpass"); + else if (isTileAttachmentQCOM()) + s.append("attachmentQCOM"); else s.append("image"); } else if (isCombined()) { @@ -552,6 +560,7 @@ class TQualifier { shadercallcoherent = false; nonprivate = false; volatil = false; + nontemporal = false; restrict = false; readonly = false; writeonly = false; @@ -589,6 +598,7 @@ class TQualifier { bool writeonly : 1; bool coherent : 1; bool volatil : 1; + bool nontemporal : 1; bool devicecoherent : 1; bool queuefamilycoherent : 1; bool workgroupcoherent : 1; @@ -603,14 +613,15 @@ class TQualifier { bool isRestrict() const { return restrict; } bool isCoherent() const { return coherent; } bool isVolatile() const { return volatil; } + bool isNonTemporal() const { return nontemporal; } bool isSample() const { return sample; } bool isMemory() const { - return shadercallcoherent || subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly || nonprivate; + return shadercallcoherent || subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || nontemporal || restrict || readonly || writeonly || nonprivate; } bool isMemoryQualifierImageAndSSBOOnly() const { - return shadercallcoherent || subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || restrict || readonly || writeonly; + return shadercallcoherent || subgroupcoherent || workgroupcoherent || queuefamilycoherent || devicecoherent || coherent || volatil || nontemporal || restrict || readonly || writeonly; } bool bufferReferenceNeedsVulkanMemoryModel() const { @@ -846,6 +857,8 @@ class TQualifier { layoutBufferReferenceAlign = layoutBufferReferenceAlignEnd; layoutFormat = ElfNone; + layoutTileAttachmentQCOM = false; + clearInterstageLayout(); layoutSpecConstantId = layoutSpecConstantIdEnd; @@ -947,6 +960,8 @@ class TQualifier { bool layoutBindlessSampler; bool layoutBindlessImage; + bool layoutTileAttachmentQCOM; + bool hasUniformLayout() const { return hasMatrix() || @@ -1065,6 +1080,10 @@ class TQualifier { { return layoutBindlessImage; } + bool isTileAttachmentQCOM() const + { + return layoutTileAttachmentQCOM; + } // GL_EXT_spirv_intrinsics bool hasSpirvDecorate() const { return spirvDecorate != nullptr; } @@ -1278,7 +1297,7 @@ class TQualifier { } }; -// Qualifiers that don't need to be keep per object. They have shader scope, not object scope. +// Qualifiers that don't need to be kept per object. They have shader scope, not object scope. // So, they will not be part of TType, TQualifier, etc. struct TShaderQualifiers { TLayoutGeometry geometry; // geometry/tessellation shader in/out primitives @@ -1308,6 +1327,9 @@ struct TShaderQualifiers { bool layoutDerivativeGroupLinear; // true if layout derivative_group_linearNV set int primitives; // mesh shader "max_primitives"DerivativeGroupLinear; // true if layout derivative_group_linearNV set bool layoutPrimitiveCulling; // true if layout primitive_culling set + bool layoutNonCoherentTileAttachmentReadQCOM; // fragment shaders -- per object + int layoutTileShadingRateQCOM[3]; // compute shader + bool layoutTileShadingRateQCOMNotDefault[3]; // compute shader TLayoutDepth getDepth() const { return layoutDepth; } TLayoutStencil getStencil() const { return layoutStencil; } @@ -1344,6 +1366,13 @@ struct TShaderQualifiers { layoutDerivativeGroupQuads = false; layoutDerivativeGroupLinear = false; layoutPrimitiveCulling = false; + layoutNonCoherentTileAttachmentReadQCOM = false; + layoutTileShadingRateQCOM[0] = 0; + layoutTileShadingRateQCOM[1] = 0; + layoutTileShadingRateQCOM[2] = 0; + layoutTileShadingRateQCOMNotDefault[0] = false; + layoutTileShadingRateQCOMNotDefault[1] = false; + layoutTileShadingRateQCOMNotDefault[2] = false; primitives = TQualifier::layoutNotSet; interlockOrdering = EioNone; } @@ -1413,6 +1442,15 @@ struct TShaderQualifiers { interlockOrdering = src.interlockOrdering; if (src.layoutPrimitiveCulling) layoutPrimitiveCulling = src.layoutPrimitiveCulling; + if (src.layoutNonCoherentTileAttachmentReadQCOM) + layoutNonCoherentTileAttachmentReadQCOM = src.layoutNonCoherentTileAttachmentReadQCOM; + for (int i = 0; i < 3; ++i) { + if (src.layoutTileShadingRateQCOM[i] > 1) + layoutTileShadingRateQCOM[i] = src.layoutTileShadingRateQCOM[i]; + } + for (int i = 0; i < 3; ++i) { + layoutTileShadingRateQCOMNotDefault[i] = src.layoutTileShadingRateQCOMNotDefault[i] || layoutTileShadingRateQCOMNotDefault[i]; + } } }; @@ -1460,6 +1498,8 @@ class TPublicType { uint32_t matrixRows : 4; bool coopmatNV : 1; bool coopmatKHR : 1; + bool coopvecNV : 1; + bool tileAttachmentQCOM: 1; TArraySizes* arraySizes; const TType* userDef; TSourceLoc loc; @@ -1470,6 +1510,8 @@ class TPublicType { bool isCoopmat() const { return coopmatNV || coopmatKHR; } bool isCoopmatNV() const { return coopmatNV; } bool isCoopmatKHR() const { return coopmatKHR; } + bool isCoopvecNV() const { return coopvecNV; } + bool isCoopmatOrvec() const { return isCoopmat() || isCoopvecNV(); } bool isTensorLayoutNV() const { return basicType == EbtTensorLayoutNV; } bool isTensorViewNV() const { return basicType == EbtTensorViewNV; } @@ -1486,6 +1528,8 @@ class TPublicType { typeParameters = nullptr; coopmatNV = false; coopmatKHR = false; + coopvecNV = false; + tileAttachmentQCOM = false; spirvType = nullptr; } @@ -1545,8 +1589,8 @@ class TType { // for "empty" type (no args) or simple scalar/vector/matrix explicit TType(TBasicType t = EbtVoid, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0, bool isVector = false) : - basicType(t), vectorSize(static_cast(vs) & 0b1111), matrixCols(static_cast(mc) & 0b1111), matrixRows(static_cast(mr) & 0b1111), vector1(isVector && vs == 1), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), - arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr), + basicType(t), vectorSize(static_cast(vs) & 0b1111), matrixCols(static_cast(mc) & 0b1111), matrixRows(static_cast(mr) & 0b1111), vector1(isVector && vs == 1), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), coopvecNV(false), + tileAttachmentQCOM(false), arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr), spirvType(nullptr) { assert(vs >= 0); @@ -1561,8 +1605,8 @@ class TType { // for explicit precision qualifier TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0, bool isVector = false) : - basicType(t), vectorSize(static_cast(vs) & 0b1111), matrixCols(static_cast(mc) & 0b1111), matrixRows(static_cast(mr) & 0b1111), vector1(isVector && vs == 1), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), - arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr), + basicType(t), vectorSize(static_cast(vs) & 0b1111), matrixCols(static_cast(mc) & 0b1111), matrixRows(static_cast(mr) & 0b1111), vector1(isVector && vs == 1), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), coopvecNV(false), + tileAttachmentQCOM(false), arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr), spirvType(nullptr) { assert(vs >= 0); @@ -1579,8 +1623,8 @@ class TType { // for turning a TPublicType into a TType, using a shallow copy explicit TType(const TPublicType& p) : basicType(p.basicType), - vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), coopmatNV(p.coopmatNV), coopmatKHR(p.coopmatKHR), coopmatKHRuse(0), coopmatKHRUseValid(false), - arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(p.typeParameters), + vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), coopmatNV(p.coopmatNV), coopmatKHR(p.coopmatKHR), coopmatKHRuse(0), coopmatKHRUseValid(false), coopvecNV(p.coopvecNV), + tileAttachmentQCOM(p.tileAttachmentQCOM), arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(p.typeParameters), spirvType(p.spirvType) { if (basicType == EbtSampler) @@ -1630,11 +1674,14 @@ class TType { coopmatKHRUseValid = true; } } + if (p.isCoopvecNV() && p.typeParameters) { + basicType = p.typeParameters->basicType; + } } // for construction of sampler types TType(const TSampler& sampler, TStorageQualifier q = EvqUniform, TArraySizes* as = nullptr) : - basicType(EbtSampler), vectorSize(1u), matrixCols(0u), matrixRows(0u), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), - arraySizes(as), structure(nullptr), fieldName(nullptr), typeName(nullptr), + basicType(EbtSampler), vectorSize(1u), matrixCols(0u), matrixRows(0u), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), coopvecNV(false), + tileAttachmentQCOM(false), arraySizes(as), structure(nullptr), fieldName(nullptr), typeName(nullptr), sampler(sampler), typeParameters(nullptr), spirvType(nullptr) { qualifier.clear(); @@ -1676,19 +1723,23 @@ class TType { // dereference from vector to scalar vectorSize = 1; vector1 = false; - } else if (isCoopMat()) { + } else if (isCoopMat() || isCoopVecNV()) { coopmatNV = false; coopmatKHR = false; coopmatKHRuse = 0; coopmatKHRUseValid = false; + coopvecNV = false; + typeParameters = nullptr; + } else if (isTileAttachmentQCOM()) { + tileAttachmentQCOM = false; typeParameters = nullptr; } } } // for making structures, ... TType(TTypeList* userDef, const TString& n) : - basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), - arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr), + basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), coopvecNV(false), + tileAttachmentQCOM(false), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr), spirvType(nullptr) { sampler.clear(); @@ -1697,8 +1748,8 @@ class TType { } // For interface blocks TType(TTypeList* userDef, const TString& n, const TQualifier& q) : - basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), - qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr), + basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), coopvecNV(false), + tileAttachmentQCOM(false), qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr), spirvType(nullptr) { sampler.clear(); @@ -1707,7 +1758,7 @@ class TType { // for block reference (first parameter must be EbtReference) explicit TType(TBasicType t, const TType &p, const TString& n) : basicType(t), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false), - arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr), + tileAttachmentQCOM(false), arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr), spirvType(nullptr) { assert(t == EbtReference); @@ -1745,6 +1796,8 @@ class TType { coopmatKHR = copyOf.isCoopMatKHR(); coopmatKHRuse = copyOf.coopmatKHRuse; coopmatKHRUseValid = copyOf.coopmatKHRUseValid; + coopvecNV = copyOf.isCoopVecNV(); + tileAttachmentQCOM = copyOf.tileAttachmentQCOM; } // Make complete copy of the whole type graph rooted at 'copyOf'. @@ -1828,7 +1881,7 @@ class TType { virtual const TTypeParameters* getTypeParameters() const { return typeParameters; } virtual TTypeParameters* getTypeParameters() { return typeParameters; } - virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); } + virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray() && ! isCoopVecNV(); } virtual bool isScalarOrVec1() const { return isScalar() || vector1; } virtual bool isScalarOrVector() const { return !isMatrix() && !isStruct() && !isArray(); } virtual bool isVector() const { return vectorSize > 1u || vector1; } @@ -1842,7 +1895,7 @@ class TType { 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) { @@ -1863,7 +1916,7 @@ class TType { } virtual bool isOpaque() const { return basicType == EbtSampler || basicType == EbtAtomicUint || basicType == EbtAccStruct || basicType == EbtRayQuery - || basicType == EbtHitObjectNV; } + || basicType == EbtHitObjectNV || isTileAttachmentQCOM(); } virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; } virtual bool isAttachmentEXT() const { return basicType == EbtSampler && getSampler().isAttachmentEXT(); } @@ -1879,6 +1932,9 @@ class TType { bool isCoopMat() const { return coopmatNV || coopmatKHR; } bool isCoopMatNV() const { return coopmatNV; } bool isCoopMatKHR() const { return coopmatKHR; } + bool isCoopVecNV() const { return coopvecNV; } + bool isCoopMatOrVec() const { return isCoopMat() || isCoopVecNV(); } + bool isTileAttachmentQCOM() const { return tileAttachmentQCOM; } bool isReference() const { return getBasicType() == EbtReference; } bool isSpirvType() const { return getBasicType() == EbtSpirvType; } int getCoopMatKHRuse() const { return static_cast(coopmatKHRuse); } @@ -1946,6 +2002,7 @@ class TType { case EbtFloat: case EbtDouble: case EbtFloat16: + case EbtBFloat16: case EbtInt8: case EbtUint8: case EbtInt16: @@ -1978,6 +2035,10 @@ class TType { { return containsBasicType(EbtFloat16); } + bool containsBFloat16() const + { + return containsBasicType(EbtBFloat16); + } bool contains64BitInt() const { return containsBasicType(EbtInt64) || containsBasicType(EbtUint64); @@ -1994,6 +2055,10 @@ class TType { { return contains([](const TType* t) { return t->coopmatNV || t->coopmatKHR; } ); } + bool containsCoopVec() const + { + return contains([](const TType* t) { return t->coopvecNV; } ); + } bool containsReference() const { return containsBasicType(EbtReference); @@ -2095,6 +2160,7 @@ class TType { 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"; @@ -2113,6 +2179,7 @@ class TType { case EbtCoopmat: return "coopmat"; case EbtTensorLayoutNV: return "tensorLayoutNV"; case EbtTensorViewNV: return "tensorViewNV"; + case EbtCoopvecNV: return "coopvecNV"; default: return "unknown type"; } } @@ -2218,7 +2285,7 @@ class TType { appendStr(" layoutSecondaryViewportRelativeOffset="); appendInt(qualifier.layoutSecondaryViewportRelativeOffset); } - + if (qualifier.layoutShaderRecord) appendStr(" shaderRecordNV"); if (qualifier.layoutFullQuads) @@ -2281,6 +2348,8 @@ class TType { appendStr(" nonprivate"); if (qualifier.volatil) appendStr(" volatile"); + if (qualifier.nontemporal) + appendStr(" nontemporal"); if (qualifier.restrict) appendStr(" restrict"); if (qualifier.readonly) @@ -2431,6 +2500,10 @@ class TType { appendStr(" "); appendStr("tensorViewNV"); } + if (isCoopVecNV()) { + appendStr(" "); + appendStr("coopvecNV"); + } appendStr("<"); for (int i = 0; i < (int)typeParameters->arraySizes->getNumDims(); ++i) { @@ -2512,7 +2585,9 @@ class TType { { uint32_t components = 0; - if (getBasicType() == EbtStruct || getBasicType() == EbtBlock) { + if (isCoopVecNV()) { + components = typeParameters->arraySizes->getDimSize(0); + } else if (getBasicType() == EbtStruct || getBasicType() == EbtBlock) { for (TTypeList::const_iterator tl = getStruct()->begin(); tl != getStruct()->end(); tl++) components += ((*tl).type)->computeNumComponents(); } else if (matrixCols) @@ -2716,6 +2791,7 @@ class TType { vector1 == right.vector1 && isCoopMatNV() == right.isCoopMatNV() && isCoopMatKHR() == right.isCoopMatKHR() && + isCoopVecNV() == right.isCoopVecNV() && sameStructType(right, lpidx, rpidx) && sameReferenceType(right); } @@ -2737,6 +2813,18 @@ class TType { return false; } + // See if a cooperative vector type parameter with unspecified parameters is + // an OK function parameter + bool coopVecParameterOK(const TType& right) const + { + if (isCoopVecNV() && right.isCoopVecNV()) { + return ((getBasicType() == right.getBasicType()) || (getBasicType() == EbtCoopvecNV) || + (right.getBasicType() == EbtCoopvecNV)) && + typeParameters == nullptr && right.typeParameters != nullptr; + } + return false; + } + bool sameCoopMatBaseType(const TType &right) const { bool rv = false; @@ -2751,8 +2839,8 @@ class TType { 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) @@ -2774,6 +2862,22 @@ class TType { return false; } + bool sameCoopVecBaseType(const TType &right) const { + bool rv = false; + + if (isCoopVecNV() && right.isCoopVecNV()) { + if (getBasicType() == EbtFloat || getBasicType() == EbtFloat16) + rv = right.getBasicType() == EbtFloat || right.getBasicType() == EbtFloat16 || right.getBasicType() == EbtCoopvecNV; + else if (getBasicType() == EbtUint || getBasicType() == EbtUint8 || getBasicType() == EbtUint16) + rv = right.getBasicType() == EbtUint || right.getBasicType() == EbtUint8 || right.getBasicType() == EbtUint16 || right.getBasicType() == EbtCoopvecNV; + else if (getBasicType() == EbtInt || getBasicType() == EbtInt8 || getBasicType() == EbtInt16) + rv = right.getBasicType() == EbtInt || right.getBasicType() == EbtInt8 || right.getBasicType() == EbtInt16 || right.getBasicType() == EbtCoopvecNV; + else + rv = false; + } + return rv; + } + bool sameCoopMatUse(const TType &right) const { return coopmatKHRuse == right.coopmatKHRuse; } @@ -2903,6 +3007,8 @@ class TType { bool coopmatKHR : 1; uint32_t coopmatKHRuse : 3; // Accepts one of three values: 0, 1, 2 (gl_MatrixUseA, gl_MatrixUseB, gl_MatrixUseAccumulator) bool coopmatKHRUseValid : 1; // True if coopmatKHRuse has been set + bool coopvecNV : 1; + bool tileAttachmentQCOM : 1; TQualifier qualifier; TArraySizes* arraySizes; // nullptr unless an array; can be shared across types diff --git a/libs/bgfx/3rdparty/glslang/glslang/Include/glslang_c_interface.h b/libs/bgfx/3rdparty/glslang/glslang/Include/glslang_c_interface.h index bfe0652..0612021 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/Include/glslang_c_interface.h +++ b/libs/bgfx/3rdparty/glslang/glslang/Include/glslang_c_interface.h @@ -284,7 +284,7 @@ GLSLANG_EXPORT const char* glslang_program_SPIRV_get_messages(glslang_program_t* GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program); GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program); -GLSLANG_EXPORT glslang_mapper_t* glslang_glsl_mapper_create(); +GLSLANG_EXPORT glslang_mapper_t* glslang_glsl_mapper_create(void); GLSLANG_EXPORT void glslang_glsl_mapper_delete(glslang_mapper_t* mapper); GLSLANG_EXPORT glslang_resolver_t* glslang_glsl_resolver_create(glslang_program_t* program, glslang_stage_t stage); diff --git a/libs/bgfx/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h b/libs/bgfx/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h index d0bcced..34bfbdb 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/Include/glslang_c_shader_types.h +++ b/libs/bgfx/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/libs/bgfx/3rdparty/glslang/glslang/Include/intermediate.h b/libs/bgfx/3rdparty/glslang/glslang/Include/intermediate.h index e574b80..2595bb1 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/Include/intermediate.h +++ b/libs/bgfx/3rdparty/glslang/glslang/Include/intermediate.h @@ -387,6 +387,11 @@ enum TOperator { EOpSubgroupPartitionedExclusiveXor, EOpSubgroupGuardStop, + + // Integer dot product + EOpDotPackedEXT, + EOpDotAccSatEXT, + EOpDotPackedAccSatEXT, EOpMinInvocations, EOpMaxInvocations, @@ -467,6 +472,13 @@ enum TOperator { EOpTensorViewSetStrideNV, EOpTensorViewSetClipNV, + EOpCooperativeVectorMatMulNV, + EOpCooperativeVectorMatMulAddNV, + EOpCooperativeVectorLoadNV, + EOpCooperativeVectorStoreNV, + EOpCooperativeVectorOuterProductAccumulateNV, + EOpCooperativeVectorReduceSumAccumulateNV, + EOpBeginInvocationInterlock, // Fragment only EOpEndInvocationInterlock, // Fragment only @@ -599,12 +611,17 @@ enum TOperator { EOpConstructF16Mat4x2, EOpConstructF16Mat4x3, EOpConstructF16Mat4x4, + EOpConstructBFloat16, + EOpConstructBF16Vec2, + EOpConstructBF16Vec3, + EOpConstructBF16Vec4, EOpConstructStruct, EOpConstructTextureSampler, EOpConstructNonuniform, // expected to be transformed away, not present in final AST EOpConstructReference, EOpConstructCooperativeMatrixNV, EOpConstructCooperativeMatrixKHR, + EOpConstructCooperativeVectorNV, EOpConstructAccStruct, EOpConstructGuardEnd, @@ -954,6 +971,25 @@ enum TOperator { EOpImageBlockMatchWindowSADQCOM, EOpImageBlockMatchGatherSSDQCOM, EOpImageBlockMatchGatherSADQCOM, + + // GL_NV_cluster_acceleration_structure + EOpRayQueryGetIntersectionClusterIdNV, + EOpHitObjectGetClusterIdNV, + + // GL_NV_linear_swept_spheres + EOpRayQueryGetIntersectionSpherePositionNV, + EOpRayQueryGetIntersectionSphereRadiusNV, + EOpRayQueryGetIntersectionLSSHitValueNV, + EOpRayQueryGetIntersectionLSSPositionsNV, + EOpRayQueryGetIntersectionLSSRadiiNV, + EOpRayQueryIsSphereHitNV, + EOpRayQueryIsLSSHitNV, + EOpHitObjectGetSpherePositionNV, + EOpHitObjectGetSphereRadiusNV, + EOpHitObjectGetLSSPositionsNV, + EOpHitObjectGetLSSRadiiNV, + EOpHitObjectIsSphereHitNV, + EOpHitObjectIsLSSHitNV, }; inline bool IsOpNumericConv(const TOperator op) { diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp index 2878be8..b076781 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Constant.cpp +++ b/libs/bgfx/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()), @@ -1119,6 +1127,9 @@ TIntermTyped* TIntermediate::fold(TIntermAggregate* aggrNode) break; } case EOpDot: + if (!children[0]->getAsTyped()->isFloatingDomain()) { + return aggrNode; + } newConstArray[0].setDConst(childConstUnions[0].dot(childConstUnions[1])); break; case EOpCross: diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp index abab968..862f4ab 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Initialize.cpp @@ -118,12 +118,12 @@ enum ArgClass { ClassFIO = 1 << 9, // first argument is inout ClassRS = 1 << 10, // the return is held scalar as the arguments cycle ClassNS = 1 << 11, // no scalar prototype - ClassCV = 1 << 12, // first argument is 'coherent volatile' + ClassCVN = 1 << 12, // first argument is 'coherent volatile nontemporal' ClassFO = 1 << 13, // first argument is output ClassV3 = 1 << 14, // vec3 only }; // Mixtures of the above, to help the function tables -const ArgClass ClassV1FIOCV = (ArgClass)(ClassV1 | ClassFIO | ClassCV); +const ArgClass ClassV1FIOCVN = (ArgClass)(ClassV1 | ClassFIO | ClassCVN); const ArgClass ClassBNS = (ArgClass)(ClassB | ClassNS); const ArgClass ClassRSNS = (ArgClass)(ClassRS | ClassNS); @@ -246,14 +246,14 @@ const std::array BaseFunctions = { BuiltInFunction{ EOpGreaterThanEqual, "greaterThanEqual", 2, TypeU, ClassBNS, {Es300Desktop130Version} }, BuiltInFunction{ EOpVectorEqual, "equal", 2, TypeU, ClassBNS, {Es300Desktop130Version} }, BuiltInFunction{ EOpVectorNotEqual, "notEqual", 2, TypeU, ClassBNS, {Es300Desktop130Version} }, - BuiltInFunction{ EOpAtomicAdd, "atomicAdd", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, - BuiltInFunction{ EOpAtomicMin, "atomicMin", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, - BuiltInFunction{ EOpAtomicMax, "atomicMax", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, - BuiltInFunction{ EOpAtomicAnd, "atomicAnd", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, - BuiltInFunction{ EOpAtomicOr, "atomicOr", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, - BuiltInFunction{ EOpAtomicXor, "atomicXor", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, - BuiltInFunction{ EOpAtomicExchange, "atomicExchange", 2, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, - BuiltInFunction{ EOpAtomicCompSwap, "atomicCompSwap", 3, TypeIU, ClassV1FIOCV, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicAdd, "atomicAdd", 2, TypeIU, ClassV1FIOCVN, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicMin, "atomicMin", 2, TypeIU, ClassV1FIOCVN, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicMax, "atomicMax", 2, TypeIU, ClassV1FIOCVN, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicAnd, "atomicAnd", 2, TypeIU, ClassV1FIOCVN, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicOr, "atomicOr", 2, TypeIU, ClassV1FIOCVN, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicXor, "atomicXor", 2, TypeIU, ClassV1FIOCVN, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicExchange, "atomicExchange", 2, TypeIU, ClassV1FIOCVN, {Es310Desktop400Version} }, + BuiltInFunction{ EOpAtomicCompSwap, "atomicCompSwap", 3, TypeIU, ClassV1FIOCVN, {Es310Desktop400Version} }, BuiltInFunction{ EOpMix, "mix", 3, TypeB, ClassRegular, {Es310Desktop450Version} }, BuiltInFunction{ EOpMix, "mix", 3, TypeIU, ClassLB, {Es310Desktop450Version} }, }; @@ -369,8 +369,8 @@ void AddTabledBuiltin(TString& decls, const BuiltInFunction& function) if (arg == function.numArguments - 1 && (function.classes & ClassLO)) decls.append("out "); if (arg == 0) { - if (function.classes & ClassCV) - decls.append("coherent volatile "); + if (function.classes & ClassCVN) + decls.append("coherent volatile nontemporal "); if (function.classes & ClassFIO) decls.append("inout "); if (function.classes & ClassFO) @@ -1353,130 +1353,130 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 430)) { commonBuiltins.append( - "uint atomicAdd(coherent volatile inout uint, uint, int, int, int);" - " int atomicAdd(coherent volatile inout int, int, int, int, int);" + "uint atomicAdd(coherent volatile nontemporal inout uint, uint, int, int, int);" + " int atomicAdd(coherent volatile nontemporal inout int, int, int, int, int);" - "uint atomicMin(coherent volatile inout uint, uint, int, int, int);" - " int atomicMin(coherent volatile inout int, int, int, int, int);" + "uint atomicMin(coherent volatile nontemporal inout uint, uint, int, int, int);" + " int atomicMin(coherent volatile nontemporal inout int, int, int, int, int);" - "uint atomicMax(coherent volatile inout uint, uint, int, int, int);" - " int atomicMax(coherent volatile inout int, int, int, int, int);" + "uint atomicMax(coherent volatile nontemporal inout uint, uint, int, int, int);" + " int atomicMax(coherent volatile nontemporal inout int, int, int, int, int);" - "uint atomicAnd(coherent volatile inout uint, uint, int, int, int);" - " int atomicAnd(coherent volatile inout int, int, int, int, int);" + "uint atomicAnd(coherent volatile nontemporal inout uint, uint, int, int, int);" + " int atomicAnd(coherent volatile nontemporal inout int, int, int, int, int);" - "uint atomicOr (coherent volatile inout uint, uint, int, int, int);" - " int atomicOr (coherent volatile inout int, int, int, int, int);" + "uint atomicOr (coherent volatile nontemporal inout uint, uint, int, int, int);" + " int atomicOr (coherent volatile nontemporal inout int, int, int, int, int);" - "uint atomicXor(coherent volatile inout uint, uint, int, int, int);" - " int atomicXor(coherent volatile inout int, int, int, int, int);" + "uint atomicXor(coherent volatile nontemporal inout uint, uint, int, int, int);" + " int atomicXor(coherent volatile nontemporal inout int, int, int, int, int);" - "uint atomicExchange(coherent volatile inout uint, uint, int, int, int);" - " int atomicExchange(coherent volatile inout int, int, int, int, int);" + "uint atomicExchange(coherent volatile nontemporal inout uint, uint, int, int, int);" + " int atomicExchange(coherent volatile nontemporal inout int, int, int, int, int);" - "uint atomicCompSwap(coherent volatile inout uint, uint, uint, int, int, int, int, int);" - " int atomicCompSwap(coherent volatile inout int, int, int, int, int, int, int, int);" + "uint atomicCompSwap(coherent volatile nontemporal inout uint, uint, uint, int, int, int, int, int);" + " int atomicCompSwap(coherent volatile nontemporal inout int, int, int, int, int, int, int, int);" - "uint atomicLoad(coherent volatile in uint, int, int, int);" - " int atomicLoad(coherent volatile in int, int, int, int);" + "uint atomicLoad(coherent volatile nontemporal in uint, int, int, int);" + " int atomicLoad(coherent volatile nontemporal in int, int, int, int);" - "void atomicStore(coherent volatile out uint, uint, int, int, int);" - "void atomicStore(coherent volatile out int, int, int, int, int);" + "void atomicStore(coherent volatile nontemporal out uint, uint, int, int, int);" + "void atomicStore(coherent volatile nontemporal out int, int, int, int, int);" "\n"); } if (profile != EEsProfile && version >= 440) { commonBuiltins.append( - "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);" - " int64_t atomicMin(coherent volatile inout int64_t, int64_t);" - "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t, int, int, int);" - " int64_t atomicMin(coherent volatile inout int64_t, int64_t, int, int, int);" - "float16_t atomicMin(coherent volatile inout float16_t, float16_t);" - "float16_t atomicMin(coherent volatile inout float16_t, float16_t, int, int, int);" - " float atomicMin(coherent volatile inout float, float);" - " float atomicMin(coherent volatile inout float, float, int, int, int);" - " double atomicMin(coherent volatile inout double, double);" - " double atomicMin(coherent volatile inout double, double, int, int, int);" - - "uint64_t atomicMax(coherent volatile inout uint64_t, uint64_t);" - " int64_t atomicMax(coherent volatile inout int64_t, int64_t);" - "uint64_t atomicMax(coherent volatile inout uint64_t, uint64_t, int, int, int);" - " int64_t atomicMax(coherent volatile inout int64_t, int64_t, int, int, int);" - "float16_t atomicMax(coherent volatile inout float16_t, float16_t);" - "float16_t atomicMax(coherent volatile inout float16_t, float16_t, int, int, int);" - " float atomicMax(coherent volatile inout float, float);" - " float atomicMax(coherent volatile inout float, float, int, int, int);" - " double atomicMax(coherent volatile inout double, double);" - " double atomicMax(coherent volatile inout double, double, int, int, int);" - - "uint64_t atomicAnd(coherent volatile inout uint64_t, uint64_t);" - " int64_t atomicAnd(coherent volatile inout int64_t, int64_t);" - "uint64_t atomicAnd(coherent volatile inout uint64_t, uint64_t, int, int, int);" - " int64_t atomicAnd(coherent volatile inout int64_t, int64_t, int, int, int);" - - "uint64_t atomicOr (coherent volatile inout uint64_t, uint64_t);" - " int64_t atomicOr (coherent volatile inout int64_t, int64_t);" - "uint64_t atomicOr (coherent volatile inout uint64_t, uint64_t, int, int, int);" - " int64_t atomicOr (coherent volatile inout int64_t, int64_t, int, int, int);" - - "uint64_t atomicXor(coherent volatile inout uint64_t, uint64_t);" - " int64_t atomicXor(coherent volatile inout int64_t, int64_t);" - "uint64_t atomicXor(coherent volatile inout uint64_t, uint64_t, int, int, int);" - " int64_t atomicXor(coherent volatile inout int64_t, int64_t, int, int, int);" - - "uint64_t atomicAdd(coherent volatile inout uint64_t, uint64_t);" - " int64_t atomicAdd(coherent volatile inout int64_t, int64_t);" - "uint64_t atomicAdd(coherent volatile inout uint64_t, uint64_t, int, int, int);" - " int64_t atomicAdd(coherent volatile inout int64_t, int64_t, int, int, int);" - "float16_t atomicAdd(coherent volatile inout float16_t, float16_t);" - "float16_t atomicAdd(coherent volatile inout float16_t, float16_t, int, int, int);" - " float atomicAdd(coherent volatile inout float, float);" - " float atomicAdd(coherent volatile inout float, float, int, int, int);" - " double atomicAdd(coherent volatile inout double, double);" - " double atomicAdd(coherent volatile inout double, double, int, int, int);" - - "uint64_t atomicExchange(coherent volatile inout uint64_t, uint64_t);" - " int64_t atomicExchange(coherent volatile inout int64_t, int64_t);" - "uint64_t atomicExchange(coherent volatile inout uint64_t, uint64_t, int, int, int);" - " int64_t atomicExchange(coherent volatile inout int64_t, int64_t, int, int, int);" - "float16_t atomicExchange(coherent volatile inout float16_t, float16_t);" - "float16_t atomicExchange(coherent volatile inout float16_t, float16_t, int, int, int);" - " float atomicExchange(coherent volatile inout float, float);" - " float atomicExchange(coherent volatile inout float, float, int, int, int);" - " double atomicExchange(coherent volatile inout double, double);" - " double atomicExchange(coherent volatile inout double, double, int, int, int);" - - "uint64_t atomicCompSwap(coherent volatile inout uint64_t, uint64_t, uint64_t);" - " int64_t atomicCompSwap(coherent volatile inout int64_t, int64_t, int64_t);" - "uint64_t atomicCompSwap(coherent volatile inout uint64_t, uint64_t, uint64_t, int, int, int, int, int);" - " int64_t atomicCompSwap(coherent volatile inout int64_t, int64_t, int64_t, int, int, int, int, int);" - - "uint64_t atomicLoad(coherent volatile in uint64_t, int, int, int);" - " int64_t atomicLoad(coherent volatile in int64_t, int, int, int);" - "float16_t atomicLoad(coherent volatile in float16_t, int, int, int);" - " float atomicLoad(coherent volatile in float, int, int, int);" - " double atomicLoad(coherent volatile in double, int, int, int);" - - "void atomicStore(coherent volatile out uint64_t, uint64_t, int, int, int);" - "void atomicStore(coherent volatile out int64_t, int64_t, int, int, int);" - "void atomicStore(coherent volatile out float16_t, float16_t, int, int, int);" - "void atomicStore(coherent volatile out float, float, int, int, int);" - "void atomicStore(coherent volatile out double, double, int, int, int);" + "uint64_t atomicMin(coherent volatile nontemporal inout uint64_t, uint64_t);" + " int64_t atomicMin(coherent volatile nontemporal inout int64_t, int64_t);" + "uint64_t atomicMin(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);" + " int64_t atomicMin(coherent volatile nontemporal inout int64_t, int64_t, int, int, int);" + "float16_t atomicMin(coherent volatile nontemporal inout float16_t, float16_t);" + "float16_t atomicMin(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);" + " float atomicMin(coherent volatile nontemporal inout float, float);" + " float atomicMin(coherent volatile nontemporal inout float, float, int, int, int);" + " double atomicMin(coherent volatile nontemporal inout double, double);" + " double atomicMin(coherent volatile nontemporal inout double, double, int, int, int);" + + "uint64_t atomicMax(coherent volatile nontemporal inout uint64_t, uint64_t);" + " int64_t atomicMax(coherent volatile nontemporal inout int64_t, int64_t);" + "uint64_t atomicMax(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);" + " int64_t atomicMax(coherent volatile nontemporal inout int64_t, int64_t, int, int, int);" + "float16_t atomicMax(coherent volatile nontemporal inout float16_t, float16_t);" + "float16_t atomicMax(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);" + " float atomicMax(coherent volatile nontemporal inout float, float);" + " float atomicMax(coherent volatile nontemporal inout float, float, int, int, int);" + " double atomicMax(coherent volatile nontemporal inout double, double);" + " double atomicMax(coherent volatile nontemporal inout double, double, int, int, int);" + + "uint64_t atomicAnd(coherent volatile nontemporal inout uint64_t, uint64_t);" + " int64_t atomicAnd(coherent volatile nontemporal inout int64_t, int64_t);" + "uint64_t atomicAnd(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);" + " int64_t atomicAnd(coherent volatile nontemporal inout int64_t, int64_t, int, int, int);" + + "uint64_t atomicOr (coherent volatile nontemporal inout uint64_t, uint64_t);" + " int64_t atomicOr (coherent volatile nontemporal inout int64_t, int64_t);" + "uint64_t atomicOr (coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);" + " int64_t atomicOr (coherent volatile nontemporal inout int64_t, int64_t, int, int, int);" + + "uint64_t atomicXor(coherent volatile nontemporal inout uint64_t, uint64_t);" + " int64_t atomicXor(coherent volatile nontemporal inout int64_t, int64_t);" + "uint64_t atomicXor(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);" + " int64_t atomicXor(coherent volatile nontemporal inout int64_t, int64_t, int, int, int);" + + "uint64_t atomicAdd(coherent volatile nontemporal inout uint64_t, uint64_t);" + " int64_t atomicAdd(coherent volatile nontemporal inout int64_t, int64_t);" + "uint64_t atomicAdd(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);" + " int64_t atomicAdd(coherent volatile nontemporal inout int64_t, int64_t, int, int, int);" + "float16_t atomicAdd(coherent volatile nontemporal inout float16_t, float16_t);" + "float16_t atomicAdd(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);" + " float atomicAdd(coherent volatile nontemporal inout float, float);" + " float atomicAdd(coherent volatile nontemporal inout float, float, int, int, int);" + " double atomicAdd(coherent volatile nontemporal inout double, double);" + " double atomicAdd(coherent volatile nontemporal inout double, double, int, int, int);" + + "uint64_t atomicExchange(coherent volatile nontemporal inout uint64_t, uint64_t);" + " int64_t atomicExchange(coherent volatile nontemporal inout int64_t, int64_t);" + "uint64_t atomicExchange(coherent volatile nontemporal inout uint64_t, uint64_t, int, int, int);" + " int64_t atomicExchange(coherent volatile nontemporal inout int64_t, int64_t, int, int, int);" + "float16_t atomicExchange(coherent volatile nontemporal inout float16_t, float16_t);" + "float16_t atomicExchange(coherent volatile nontemporal inout float16_t, float16_t, int, int, int);" + " float atomicExchange(coherent volatile nontemporal inout float, float);" + " float atomicExchange(coherent volatile nontemporal inout float, float, int, int, int);" + " double atomicExchange(coherent volatile nontemporal inout double, double);" + " double atomicExchange(coherent volatile nontemporal inout double, double, int, int, int);" + + "uint64_t atomicCompSwap(coherent volatile nontemporal inout uint64_t, uint64_t, uint64_t);" + " int64_t atomicCompSwap(coherent volatile nontemporal inout int64_t, int64_t, int64_t);" + "uint64_t atomicCompSwap(coherent volatile nontemporal inout uint64_t, uint64_t, uint64_t, int, int, int, int, int);" + " int64_t atomicCompSwap(coherent volatile nontemporal inout int64_t, int64_t, int64_t, int, int, int, int, int);" + + "uint64_t atomicLoad(coherent volatile nontemporal in uint64_t, int, int, int);" + " int64_t atomicLoad(coherent volatile nontemporal in int64_t, int, int, int);" + "float16_t atomicLoad(coherent volatile nontemporal in float16_t, int, int, int);" + " float atomicLoad(coherent volatile nontemporal in float, int, int, int);" + " double atomicLoad(coherent volatile nontemporal in double, int, int, int);" + + "void atomicStore(coherent volatile nontemporal out uint64_t, uint64_t, int, int, int);" + "void atomicStore(coherent volatile nontemporal out int64_t, int64_t, int, int, int);" + "void atomicStore(coherent volatile nontemporal out float16_t, float16_t, int, int, int);" + "void atomicStore(coherent volatile nontemporal out float, float, int, int, int);" + "void atomicStore(coherent volatile nontemporal out double, double, int, int, int);" "\n"); } // NV_shader_atomic_fp16_vector if (profile != EEsProfile && version >= 430) { commonBuiltins.append( - "f16vec2 atomicAdd(coherent volatile inout f16vec2, f16vec2);" - "f16vec4 atomicAdd(coherent volatile inout f16vec4, f16vec4);" - "f16vec2 atomicMin(coherent volatile inout f16vec2, f16vec2);" - "f16vec4 atomicMin(coherent volatile inout f16vec4, f16vec4);" - "f16vec2 atomicMax(coherent volatile inout f16vec2, f16vec2);" - "f16vec4 atomicMax(coherent volatile inout f16vec4, f16vec4);" - "f16vec2 atomicExchange(coherent volatile inout f16vec2, f16vec2);" - "f16vec4 atomicExchange(coherent volatile inout f16vec4, f16vec4);" + "f16vec2 atomicAdd(coherent volatile nontemporal inout f16vec2, f16vec2);" + "f16vec4 atomicAdd(coherent volatile nontemporal inout f16vec4, f16vec4);" + "f16vec2 atomicMin(coherent volatile nontemporal inout f16vec2, f16vec2);" + "f16vec4 atomicMin(coherent volatile nontemporal inout f16vec4, f16vec4);" + "f16vec2 atomicMax(coherent volatile nontemporal inout f16vec2, f16vec2);" + "f16vec4 atomicMax(coherent volatile nontemporal inout f16vec4, f16vec4);" + "f16vec2 atomicExchange(coherent volatile nontemporal inout f16vec2, f16vec2);" + "f16vec4 atomicExchange(coherent volatile nontemporal inout f16vec4, f16vec4);" "\n"); } @@ -1506,7 +1506,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } - if ((profile != EEsProfile && version >= 400) || + if ((profile != EEsProfile && version >= 150) || // GL_NV_gpu_shader5 (profile == EEsProfile && version >= 310)) { // GL_OES_gpu_shader5 commonBuiltins.append( @@ -1536,7 +1536,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } if ((profile == EEsProfile && version >= 310) || - (profile != EEsProfile && version >= 400)) { + (profile != EEsProfile && version >= 150)) { // GL_NV_gpu_shader5 commonBuiltins.append( "float frexp(highp float, out highp int);" "vec2 frexp(highp vec2, out highp ivec2);" @@ -1865,29 +1865,29 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV else if (spvVersion.vulkanRelaxed) { // // Atomic counter functions act as aliases to normal atomic functions. - // replace definitions to take 'volatile coherent uint' instead of 'atomic_uint' + // replace definitions to take 'volatile coherent nontemporal uint' instead of 'atomic_uint' // and map to equivalent non-counter atomic op // if ((profile != EEsProfile && version >= 300) || (profile == EEsProfile && version >= 310)) { commonBuiltins.append( - "uint atomicCounterIncrement(volatile coherent uint);" - "uint atomicCounterDecrement(volatile coherent uint);" - "uint atomicCounter(volatile coherent uint);" + "uint atomicCounterIncrement(volatile coherent nontemporal uint);" + "uint atomicCounterDecrement(volatile coherent nontemporal uint);" + "uint atomicCounter(volatile coherent nontemporal uint);" "\n"); } if (profile != EEsProfile && version >= 460) { commonBuiltins.append( - "uint atomicCounterAdd(volatile coherent uint, uint);" - "uint atomicCounterSubtract(volatile coherent uint, uint);" - "uint atomicCounterMin(volatile coherent uint, uint);" - "uint atomicCounterMax(volatile coherent uint, uint);" - "uint atomicCounterAnd(volatile coherent uint, uint);" - "uint atomicCounterOr(volatile coherent uint, uint);" - "uint atomicCounterXor(volatile coherent uint, uint);" - "uint atomicCounterExchange(volatile coherent uint, uint);" - "uint atomicCounterCompSwap(volatile coherent uint, uint, uint);" + "uint atomicCounterAdd(volatile coherent nontemporal uint, uint);" + "uint atomicCounterSubtract(volatile coherent nontemporal uint, uint);" + "uint atomicCounterMin(volatile coherent nontemporal uint, uint);" + "uint atomicCounterMax(volatile coherent nontemporal uint, uint);" + "uint atomicCounterAnd(volatile coherent nontemporal uint, uint);" + "uint atomicCounterOr(volatile coherent nontemporal uint, uint);" + "uint atomicCounterXor(volatile coherent nontemporal uint, uint);" + "uint atomicCounterExchange(volatile coherent nontemporal uint, uint);" + "uint atomicCounterCompSwap(volatile coherent nontemporal uint, uint, uint);" "\n"); } @@ -1895,7 +1895,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV // Bitfield if ((profile == EEsProfile && version >= 310) || - (profile != EEsProfile && version >= 400)) { + (profile != EEsProfile && version >= 150)) { // ARB_gpu_shader5/NV_gpu_shader5 commonBuiltins.append( " int bitfieldExtract( int, int, int);" "ivec2 bitfieldExtract(ivec2, int, int);" @@ -1920,7 +1920,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } - if (profile != EEsProfile && version >= 400) { + if (profile != EEsProfile && version >= 150) { //GL_ARB_gpu_shader5/GL_NV_gpu_shader5 commonBuiltins.append( " int findLSB( int);" "ivec2 findLSB(ivec2);" @@ -1948,7 +1948,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } - if (profile != EEsProfile && version >= 400) { + if (profile != EEsProfile && version >= 150) { //GL_ARB_gpu_shader5/GL_NV_gpu_shader5 commonBuiltins.append( " int bitCount( int);" "ivec2 bitCount(ivec2);" @@ -1969,12 +1969,146 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "ivec2 findMSB(highp uvec2);" "ivec3 findMSB(highp uvec3);" "ivec4 findMSB(highp uvec4);" + "\n"); + } + + if (profile != EEsProfile && version >= 150 && version < 450) { //GL_NV_gpu_shader5 + commonBuiltins.append( + "int64_t packInt2x32(ivec2);" + "uint64_t packUint2x32(uvec2);" + "ivec2 unpackInt2x32(int64_t);" + "uvec2 unpackUint2x32(uint64_t);" + + "uint packFloat2x16(f16vec2);" + "f16vec2 unpackFloat2x16(uint);" + + "int64_t doubleBitsToInt64(double);" + "i64vec2 doubleBitsToInt64(dvec2);" + "i64vec3 doubleBitsToInt64(dvec3);" + "i64vec4 doubleBitsToInt64(dvec4);" + + "uint64_t doubleBitsToUint64(double);" + "u64vec2 doubleBitsToUint64(dvec2);" + "u64vec3 doubleBitsToUint64(dvec3);" + "u64vec4 doubleBitsToUint64(dvec4);" + + "double int64BitsToDouble(int64_t);" + "dvec2 int64BitsToDouble(i64vec2);" + "dvec3 int64BitsToDouble(i64vec3);" + "dvec4 int64BitsToDouble(i64vec4);" + + "double uint64BitsToDouble(uint64_t);" + "dvec2 uint64BitsToDouble(u64vec2);" + "dvec3 uint64BitsToDouble(u64vec3);" + "dvec4 uint64BitsToDouble(u64vec4);" + // Modifications to Vector Relational Functions + // Introduction of explicitly sized types + "bvec2 lessThan(i64vec2, i64vec2);" + "bvec3 lessThan(i64vec3, i64vec3);" + "bvec4 lessThan(i64vec4, i64vec4);" + "bvec2 lessThan(u64vec2, u64vec2);" + "bvec3 lessThan(u64vec3, u64vec3);" + "bvec4 lessThan(u64vec4, u64vec4);" + + "bvec2 lessThanEqual(i64vec2, i64vec2);" + "bvec3 lessThanEqual(i64vec3, i64vec3);" + "bvec4 lessThanEqual(i64vec4, i64vec4);" + "bvec2 lessThanEqual(u64vec2, u64vec2);" + "bvec3 lessThanEqual(u64vec3, u64vec3);" + "bvec4 lessThanEqual(u64vec4, u64vec4);" + + "bvec2 greaterThan(i64vec2, i64vec2);" + "bvec3 greaterThan(i64vec3, i64vec3);" + "bvec4 greaterThan(i64vec4, i64vec4);" + "bvec2 greaterThan(u64vec2, u64vec2);" + "bvec3 greaterThan(u64vec3, u64vec3);" + "bvec4 greaterThan(u64vec4, u64vec4);" + + "bvec2 greaterThanEqual(i64vec2, i64vec2);" + "bvec3 greaterThanEqual(i64vec3, i64vec3);" + "bvec4 greaterThanEqual(i64vec4, i64vec4);" + "bvec2 greaterThanEqual(u64vec2, u64vec2);" + "bvec3 greaterThanEqual(u64vec3, u64vec3);" + "bvec4 greaterThanEqual(u64vec4, u64vec4);" + + "bvec2 equal(i64vec2, i64vec2);" + "bvec3 equal(i64vec3, i64vec3);" + "bvec4 equal(i64vec4, i64vec4);" + "bvec2 equal(u64vec2, u64vec2);" + "bvec3 equal(u64vec3, u64vec3);" + "bvec4 equal(u64vec4, u64vec4);" + + "bvec2 notEqual(i64vec2, i64vec2);" + "bvec3 notEqual(i64vec3, i64vec3);" + "bvec4 notEqual(i64vec4, i64vec4);" + "bvec2 notEqual(u64vec2, u64vec2);" + "bvec3 notEqual(u64vec3, u64vec3);" + "bvec4 notEqual(u64vec4, u64vec4);" + + "bvec2 lessThan(f16vec2, f16vec2);" + "bvec3 lessThan(f16vec3, f16vec3);" + "bvec4 lessThan(f16vec4, f16vec4);" + + "bvec2 lessThanEqual(f16vec2, f16vec2);" + "bvec3 lessThanEqual(f16vec3, f16vec3);" + "bvec4 lessThanEqual(f16vec4, f16vec4);" + + "bvec2 greaterThan(f16vec2, f16vec2);" + "bvec3 greaterThan(f16vec3, f16vec3);" + "bvec4 greaterThan(f16vec4, f16vec4);" + + "bvec2 greaterThanEqual(f16vec2, f16vec2);" + "bvec3 greaterThanEqual(f16vec3, f16vec3);" + "bvec4 greaterThanEqual(f16vec4, f16vec4);" + + "bvec2 equal(f16vec2, f16vec2);" + "bvec3 equal(f16vec3, f16vec3);" + "bvec4 equal(f16vec4, f16vec4);" + + "bvec2 notEqual(f16vec2, f16vec2);" + "bvec3 notEqual(f16vec3, f16vec3);" + "bvec4 notEqual(f16vec4, f16vec4);" + + // Dependency on GL_ARB_gpu_shader_fp64 + "bvec2 lessThan(dvec2, dvec2);" + "bvec3 lessThan(dvec3, dvec3);" + "bvec4 lessThan(dvec4, dvec4);" + + "bvec2 lessThanEqual(dvec2, dvec2);" + "bvec3 lessThanEqual(dvec3, dvec3);" + "bvec4 lessThanEqual(dvec4, dvec4);" + + "bvec2 greaterThan(dvec2, dvec2);" + "bvec3 greaterThan(dvec3, dvec3);" + "bvec4 greaterThan(dvec4, dvec4);" + + "bvec2 greaterThanEqual(dvec2, dvec2);" + "bvec3 greaterThanEqual(dvec3, dvec3);" + "bvec4 greaterThanEqual(dvec4, dvec4);" + + "bvec2 equal(dvec2, dvec2);" + "bvec3 equal(dvec3, dvec3);" + "bvec4 equal(dvec4, dvec4);" + + "bvec2 notEqual(dvec2, dvec2);" + "bvec3 notEqual(dvec3, dvec3);" + "bvec4 notEqual(dvec4, dvec4);" + + "\n"); + } + + + if (profile != EEsProfile && version >= 150) { + commonBuiltins.append( + "bool anyThreadNV(bool);" + "bool allThreadsNV(bool);" + "bool allThreadsEqualNV(bool);" "\n"); } if ((profile == EEsProfile && version >= 310) || - (profile != EEsProfile && version >= 400)) { + (profile != EEsProfile && version >= 150)) { // NV_gpu_shader5 commonBuiltins.append( " uint uaddCarry(highp uint, highp uint, out lowp uint carry);" "uvec2 uaddCarry(highp uvec2, highp uvec2, out lowp uvec2 carry);" @@ -2082,6 +2216,143 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } + // GL_EXT_integer_dot_product + if ((profile == EEsProfile && version >= 300) || + (profile != EEsProfile && version >= 450)) { + commonBuiltins.append( + + "uint dotEXT(uvec2 a, uvec2 b);" + "int dotEXT(ivec2 a, ivec2 b);" + "int dotEXT(ivec2 a, uvec2 b);" + "int dotEXT(uvec2 a, ivec2 b);" + + "uint dotEXT(uvec3 a, uvec3 b);" + "int dotEXT(ivec3 a, ivec3 b);" + "int dotEXT(ivec3 a, uvec3 b);" + "int dotEXT(uvec3 a, ivec3 b);" + + "uint dotEXT(uvec4 a, uvec4 b);" + "int dotEXT(ivec4 a, ivec4 b);" + "int dotEXT(ivec4 a, uvec4 b);" + "int dotEXT(uvec4 a, ivec4 b);" + + "uint dotPacked4x8EXT(uint a, uint b);" + "int dotPacked4x8EXT(int a, uint b);" + "int dotPacked4x8EXT(uint a, int b);" + "int dotPacked4x8EXT(int a, int b);" + + "uint dotEXT(u8vec2 a, u8vec2 b);" + "int dotEXT(i8vec2 a, u8vec2 b);" + "int dotEXT(u8vec2 a, i8vec2 b);" + "int dotEXT(i8vec2 a, i8vec2 b);" + + "uint dotEXT(u8vec3 a, u8vec3 b);" + "int dotEXT(i8vec3 a, u8vec3 b);" + "int dotEXT(u8vec3 a, i8vec3 b);" + "int dotEXT(i8vec3 a, i8vec3 b);" + + "uint dotEXT(u8vec4 a, u8vec4 b);" + "int dotEXT(i8vec4 a, u8vec4 b);" + "int dotEXT(u8vec4 a, i8vec4 b);" + "int dotEXT(i8vec4 a, i8vec4 b);" + + "uint dotEXT(u16vec2 a, u16vec2 b);" + "int dotEXT(i16vec2 a, u16vec2 b);" + "int dotEXT(u16vec2 a, i16vec2 b);" + "int dotEXT(i16vec2 a, i16vec2 b);" + + "uint dotEXT(u16vec3 a, u16vec3 b);" + "int dotEXT(i16vec3 a, u16vec3 b);" + "int dotEXT(u16vec3 a, i16vec3 b);" + "int dotEXT(i16vec3 a, i16vec3 b);" + + "uint dotEXT(u16vec4 a, u16vec4 b);" + "int dotEXT(i16vec4 a, u16vec4 b);" + "int dotEXT(u16vec4 a, i16vec4 b);" + "int dotEXT(i16vec4 a, i16vec4 b);" + + "uint64_t dotEXT(u64vec2 a, u64vec2 b);" + "int64_t dotEXT(i64vec2 a, u64vec2 b);" + "int64_t dotEXT(u64vec2 a, i64vec2 b);" + "int64_t dotEXT(i64vec2 a, i64vec2 b);" + + "uint64_t dotEXT(u64vec3 a, u64vec3 b);" + "int64_t dotEXT(i64vec3 a, u64vec3 b);" + "int64_t dotEXT(u64vec3 a, i64vec3 b);" + "int64_t dotEXT(i64vec3 a, i64vec3 b);" + + "uint64_t dotEXT(u64vec4 a, u64vec4 b);" + "int64_t dotEXT(i64vec4 a, u64vec4 b);" + "int64_t dotEXT(u64vec4 a, i64vec4 b);" + "int64_t dotEXT(i64vec4 a, i64vec4 b);" + + "uint dotAccSatEXT(uvec2 a, uvec2 b, uint c);" + "int dotAccSatEXT(ivec2 a, uvec2 b, int c);" + "int dotAccSatEXT(uvec2 a, ivec2 b, int c);" + "int dotAccSatEXT(ivec2 a, ivec2 b, int c);" + + "uint dotAccSatEXT(uvec3 a, uvec3 b, uint c);" + "int dotAccSatEXT(ivec3 a, uvec3 b, int c);" + "int dotAccSatEXT(uvec3 a, ivec3 b, int c);" + "int dotAccSatEXT(ivec3 a, ivec3 b, int c);" + + "uint dotAccSatEXT(uvec4 a, uvec4 b, uint c);" + "int dotAccSatEXT(ivec4 a, uvec4 b, int c);" + "int dotAccSatEXT(uvec4 a, ivec4 b, int c);" + "int dotAccSatEXT(ivec4 a, ivec4 b, int c);" + + "uint dotPacked4x8AccSatEXT(uint a, uint b, uint c);" + "int dotPacked4x8AccSatEXT(int a, uint b, int c);" + "int dotPacked4x8AccSatEXT(uint a, int b, int c);" + "int dotPacked4x8AccSatEXT(int a, int b, int c);" + + "uint dotAccSatEXT(u8vec2 a, u8vec2 b, uint c);" + "int dotAccSatEXT(i8vec2 a, u8vec2 b, int c);" + "int dotAccSatEXT(u8vec2 a, i8vec2 b, int c);" + "int dotAccSatEXT(i8vec2 a, i8vec2 b, int c);" + + "uint dotAccSatEXT(u8vec3 a, u8vec3 b, uint c);" + "int dotAccSatEXT(i8vec3 a, u8vec3 b, int c);" + "int dotAccSatEXT(u8vec3 a, i8vec3 b, int c);" + "int dotAccSatEXT(i8vec3 a, i8vec3 b, int c);" + + "uint dotAccSatEXT(u8vec4 a, u8vec4 b, uint c);" + "int dotAccSatEXT(i8vec4 a, u8vec4 b, int c);" + "int dotAccSatEXT(u8vec4 a, i8vec4 b, int c);" + "int dotAccSatEXT(i8vec4 a, i8vec4 b, int c);" + + "uint dotAccSatEXT(u16vec2 a, u16vec2 b, uint c);" + "int dotAccSatEXT(i16vec2 a, u16vec2 b, int c);" + "int dotAccSatEXT(u16vec2 a, i16vec2 b, int c);" + "int dotAccSatEXT(i16vec2 a, i16vec2 b, int c);" + + "uint dotAccSatEXT(u16vec3 a, u16vec3 b, uint c);" + "int dotAccSatEXT(i16vec3 a, u16vec3 b, int c);" + "int dotAccSatEXT(u16vec3 a, i16vec3 b, int c);" + "int dotAccSatEXT(i16vec3 a, i16vec3 b, int c);" + + "uint dotAccSatEXT(u16vec4 a, u16vec4 b, uint c);" + "int dotAccSatEXT(i16vec4 a, u16vec4 b, int c);" + "int dotAccSatEXT(u16vec4 a, i16vec4 b, int c);" + "int dotAccSatEXT(i16vec4 a, i16vec4 b, int c);" + + "uint64_t dotAccSatEXT(u64vec2 a, u64vec2 b, uint64_t c);" + "int64_t dotAccSatEXT(i64vec2 a, u64vec2 b, int64_t c);" + "int64_t dotAccSatEXT(u64vec2 a, i64vec2 b, int64_t c);" + "int64_t dotAccSatEXT(i64vec2 a, i64vec2 b, int64_t c);" + + "uint64_t dotAccSatEXT(u64vec3 a, u64vec3 b, uint64_t c);" + "int64_t dotAccSatEXT(i64vec3 a, u64vec3 b, int64_t c);" + "int64_t dotAccSatEXT(u64vec3 a, i64vec3 b, int64_t c);" + "int64_t dotAccSatEXT(i64vec3 a, i64vec3 b, int64_t c);" + + "uint64_t dotAccSatEXT(u64vec4 a, u64vec4 b, uint64_t c);" + "int64_t dotAccSatEXT(i64vec4 a, u64vec4 b, int64_t c);" + "int64_t dotAccSatEXT(u64vec4 a, i64vec4 b, int64_t c);" + "int64_t dotAccSatEXT(i64vec4 a, i64vec4 b, int64_t c);" + "\n"); + } + // GL_KHR_shader_subgroup if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 140)) { @@ -3729,6 +4000,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"); } @@ -4323,8 +4619,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV // Prototypes for built-in functions seen by geometry shaders only. // //============================================================================ - - if (profile != EEsProfile && (version >= 400 || version == 150)) { + if (profile != EEsProfile && version >= 150) { stageBuiltins[EShLangGeometry].append( "void EmitStreamVertex(int);" "void EndStreamPrimitive(int);" @@ -4398,77 +4693,77 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV // adding it introduces undesirable tempArgs on the stack. What we want // is more like "buf" thought of as a pointer value being an in parameter. stageBuiltins[EShLangCompute].append( - "void coopMatLoadNV(out fcoopmatNV m, volatile coherent float16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out fcoopmatNV m, volatile coherent float[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out fcoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n" - - "void coopMatStoreNV(fcoopmatNV m, volatile coherent float16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(fcoopmatNV m, volatile coherent float[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(fcoopmatNV m, volatile coherent float64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(fcoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(fcoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(fcoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal float16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal float[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out fcoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n" + + "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal float16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal float[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal float64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(fcoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n" "fcoopmatNV coopMatMulAddNV(fcoopmatNV A, fcoopmatNV B, fcoopmatNV C);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out icoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n" - - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatLoadNV(out ucoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n" - - "void coopMatStoreNV(icoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(icoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n" - - "void coopMatStoreNV(ucoopmatNV m, volatile coherent int8_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent int16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent int[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent int64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent ivec2[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent ivec4[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint8_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint16_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent uint64_t[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent uvec2[] buf, uint element, uint stride, bool colMajor);\n" - "void coopMatStoreNV(ucoopmatNV m, volatile coherent uvec4[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out icoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n" + + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatLoadNV(out ucoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n" + + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(icoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n" + + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int8_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal int64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal ivec2[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal ivec4[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint8_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint16_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uint64_t[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uvec2[] buf, uint element, uint stride, bool colMajor);\n" + "void coopMatStoreNV(ucoopmatNV m, volatile coherent nontemporal uvec4[] buf, uint element, uint stride, bool colMajor);\n" "icoopmatNV coopMatMulAddNV(icoopmatNV A, icoopmatNV B, icoopmatNV C);\n" "ucoopmatNV coopMatMulAddNV(ucoopmatNV A, ucoopmatNV B, ucoopmatNV C);\n" @@ -4481,6 +4776,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", @@ -4492,16 +4788,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "uint64_t", "u64vec2", "u64vec4", }; for (auto t : allTypes) { - cooperativeMatrixFuncs << "void coopMatLoad(out coopmat m, volatile coherent " << t << "[] buf, uint element, uint stride, int matrixLayout);\n"; - cooperativeMatrixFuncs << "void coopMatStore(coopmat m, volatile coherent " << t << "[] buf, uint element, uint stride, int matrixLayout);\n"; + cooperativeMatrixFuncs << "void coopMatLoad(out coopmat m, volatile coherent nontemporal " << t << "[] buf, uint element, uint stride, int matrixLayout);\n"; + cooperativeMatrixFuncs << "void coopMatStore(coopmat m, volatile coherent nontemporal " << t << "[] buf, uint element, uint stride, int matrixLayout);\n"; } // Just use uint8_t for buffer type, we have special matching rules to allow any conversion - cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t);\n"; - cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t, tensorViewNV v);\n"; - cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t, __function f);\n"; - cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t, tensorViewNV v, __function f);\n"; - cooperativeMatrixFuncs << "void coopMatStoreTensorNV(coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t);\n"; - cooperativeMatrixFuncs << "void coopMatStoreTensorNV(coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t, tensorViewNV v);\n"; + cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, uint element, tensorLayoutNV t);\n"; + cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, uint element, tensorLayoutNV t, tensorViewNV v);\n"; + cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, uint element, tensorLayoutNV t, __function f);\n"; + cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent nontemporal uint8_t[] buf, uint element, tensorLayoutNV t, tensorViewNV v, __function f);\n"; + cooperativeMatrixFuncs << "void coopMatStoreTensorNV(coopmat m, volatile coherent nontemporal uint8_t[] buf, uint element, tensorLayoutNV t);\n"; + cooperativeMatrixFuncs << "void coopMatStoreTensorNV(coopmat m, volatile coherent nontemporal uint8_t[] buf, uint element, tensorLayoutNV t, tensorViewNV v);\n"; } cooperativeMatrixFuncs << @@ -4600,6 +4896,161 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV ); } + if (profile != EEsProfile && version >= 450) { + const char *basicTypes[] = { + "int8_t", + "int16_t", + "int32_t", + "int64_t", + "uint8_t", + "uint16_t", + "uint32_t", + "uint64_t", + "float16_t", + "float32_t", + "float64_t", + }; + for (uint32_t i = 0; i < sizeof(basicTypes)/sizeof(basicTypes[0]); ++i) { + std::string func = std::string("void coopVecMatMulNV(out coopvecNV result, ") + + std::string("coopvecNV v, ") + + std::string("int inputInterpretation, ") + + std::string(basicTypes[i]) + std::string("[] matrix, ") + + std::string("uint matrixOffset, ") + + std::string("int matrixInterpretation, ") + + std::string("uint M, ") + + std::string("uint K, ") + + std::string("int matrixLayout, ") + + std::string("bool transpose, ") + + std::string("uint matrixStride);\n"); + commonBuiltins.append(func.c_str()); + + for (uint32_t j = 0; j < sizeof(basicTypes)/sizeof(basicTypes[0]); ++j) { + func = std::string("void coopVecMatMulAddNV(out coopvecNV result, ") + + std::string("coopvecNV v, ") + + std::string("int inputInterpretation, ") + + std::string(basicTypes[i]) + std::string("[] matrix, ") + + std::string("uint matrixOffset, ") + + std::string("int matrixInterpretation, ") + + std::string(basicTypes[j]) + std::string("[] bias, ") + + std::string("uint biasOffset, ") + + std::string("int biasInterpretation, ") + + std::string("uint M, ") + + std::string("uint K, ") + + std::string("int matrixLayout, ") + + std::string("bool transpose, ") + + std::string("uint matrixStride);\n"); + commonBuiltins.append(func.c_str()); + } + + func = std::string("void coopVecOuterProductAccumulateNV(coopvecNV v1, coopvecNV v2, ") + + std::string(basicTypes[i]) + + std::string("[] buf, uint offset, uint stride, int matrixLayout, int matrixInterpretation);\n"); + commonBuiltins.append(func.c_str()); + + func = std::string("void coopVecReduceSumAccumulateNV(coopvecNV v, ") + + std::string(basicTypes[i]) + + std::string("[] buf, uint offset);\n"); + commonBuiltins.append(func.c_str()); + } + + std::string cooperativeVectorFuncs = + "coopvecNV fma(coopvecNV, coopvecNV, coopvecNV);\n" + "coopvecNV min(coopvecNV, coopvecNV);\n" + "coopvecNV max(coopvecNV, coopvecNV);\n" + "coopvecNV step(coopvecNV, coopvecNV);\n" + "coopvecNV exp(coopvecNV);\n" + "coopvecNV log(coopvecNV);\n" + "coopvecNV tanh(coopvecNV);\n" + "coopvecNV atan(coopvecNV);\n" + "coopvecNV clamp(coopvecNV, coopvecNV, coopvecNV);\n" + "\n" + ; + + commonBuiltins.append(cooperativeVectorFuncs.c_str()); + + const char *scalarAndVectorTypes[] = { + "int8_t", + "int16_t", + "int32_t", + "int64_t", + "uint8_t", + "uint16_t", + "uint32_t", + "uint64_t", + "float16_t", + "float32_t", + "float64_t", + "i8vec2", + "i16vec2", + "i32vec2", + "i64vec2", + "u8vec2", + "u16vec2", + "u32vec2", + "u64vec2", + "f16vec2", + "f32vec2", + "f64vec2", + "i8vec3", + "i16vec3", + "i32vec3", + "i64vec3", + "u8vec3", + "u16vec3", + "u32vec3", + "u64vec3", + "f16vec3", + "f32vec3", + "f64vec3", + "i8vec4", + "i16vec4", + "i32vec4", + "i64vec4", + "u8vec4", + "u16vec4", + "u32vec4", + "u64vec4", + "f16vec4", + "f32vec4", + "f64vec4", + }; + for (uint32_t i = 0; i < sizeof(scalarAndVectorTypes)/sizeof(scalarAndVectorTypes[0]); ++i) { + std::string load = std::string("void coopVecLoadNV(out coopvecNV v, volatile coherent ") + + std::string(scalarAndVectorTypes[i]) + std::string("[] buf, uint offset);"); + std::string store = std::string("void coopVecStoreNV(coopvecNV v, volatile coherent ") + + std::string(scalarAndVectorTypes[i]) + std::string("[] buf, uint offset);"); + commonBuiltins.append(load.c_str()); + commonBuiltins.append(store.c_str()); + } + + commonBuiltins.append( + "const int gl_CooperativeVectorMatrixLayoutRowMajorNV = 0;\n" + "const int gl_CooperativeVectorMatrixLayoutColumnMajorNV = 1;\n" + "const int gl_CooperativeVectorMatrixLayoutInferencingOptimalNV = 2;\n" + "const int gl_CooperativeVectorMatrixLayoutTrainingOptimalNV = 3;\n" + "\n" + ); + + commonBuiltins.append( + "const int gl_ComponentTypeFloat16NV = 0;\n" + "const int gl_ComponentTypeFloat32NV = 1;\n" + "const int gl_ComponentTypeFloat64NV = 2;\n" + "const int gl_ComponentTypeSignedInt8NV = 3;\n" + "const int gl_ComponentTypeSignedInt16NV = 4;\n" + "const int gl_ComponentTypeSignedInt32NV = 5;\n" + "const int gl_ComponentTypeSignedInt64NV = 6;\n" + "const int gl_ComponentTypeUnsignedInt8NV = 7;\n" + "const int gl_ComponentTypeUnsignedInt16NV = 8;\n" + "const int gl_ComponentTypeUnsignedInt32NV = 9;\n" + "const int gl_ComponentTypeUnsignedInt64NV = 10;\n" + "const int gl_ComponentTypeSignedInt8PackedNV = 1000491000;\n" + "const int gl_ComponentTypeUnsignedInt8PackedNV = 1000491001;\n" + "const int gl_ComponentTypeFloatE4M3NV = 1000491002;\n" + "const int gl_ComponentTypeFloatE5M2NV = 1000491003;\n" + "\n" + ); + } + //============================================================================ // // Prototypes for built-in functions seen by fragment shaders only. @@ -4668,7 +5119,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV // GL_OES_shader_multisample_interpolation if ((profile == EEsProfile && version >= 310) || - (profile != EEsProfile && version >= 400)) { + (profile != EEsProfile && version >= 150)) { // NV_gpu_shader5 stageBuiltins[EShLangFragment].append( "float interpolateAtCentroid(float);" "vec2 interpolateAtCentroid(vec2);" @@ -4797,6 +5248,14 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "mat4x3 rayQueryGetIntersectionObjectToWorldEXT(rayQueryEXT, bool);" "mat4x3 rayQueryGetIntersectionWorldToObjectEXT(rayQueryEXT, bool);" "void rayQueryGetIntersectionTriangleVertexPositionsEXT(rayQueryEXT, bool, out vec3[3]);" + "int rayQueryGetIntersectionClusterIdNV(rayQueryEXT, bool);" + "vec3 rayQueryGetIntersectionSpherePositionNV(rayQueryEXT, bool);" + "float rayQueryGetIntersectionSphereRadiusNV(rayQueryEXT, bool);" + "float rayQueryGetIntersectionLSSHitValueNV(rayQueryEXT, bool);" + "void rayQueryGetIntersectionLSSPositionsNV(rayQueryEXT, bool, out vec3[2]);" + "void rayQueryGetIntersectionLSSRadiiNV(rayQueryEXT, bool, out float[2]);" + "bool rayQueryIsSphereHitNV(rayQueryEXT, bool);" + "bool rayQueryIsLSSHitNV(rayQueryEXT, bool);" "\n"); stageBuiltins[EShLangRayGen].append( @@ -4835,11 +5294,18 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "float hitObjectGetCurrentTimeNV(hitObjectNV);" "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);" "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);" + "int hitObjectGetClusterIdNV(hitObjectNV);" "void reorderThreadNV(uint, uint);" "void reorderThreadNV(hitObjectNV);" "void reorderThreadNV(hitObjectNV, uint, uint);" "vec3 fetchMicroTriangleVertexPositionNV(accelerationStructureEXT, int, int, int, ivec2);" "vec2 fetchMicroTriangleVertexBarycentricNV(accelerationStructureEXT, int, int, int, ivec2);" + "vec3 hitObjectGetSpherePositionNV(hitObjectNV);" + "float hitObjectGetSphereRadiusNV(hitObjectNV);" + "void hitObjectGetLSSPositionsNV(hitObjectNV, out vec3[2]);" + "void hitObjectGetLSSRadiiNV(hitObjectNV, out float[2]);" + "bool hitObjectIsSphereHitNV(hitObjectNV);" + "bool hitObjectIsLSSHitNV(hitObjectNV);" "\n"); stageBuiltins[EShLangIntersect].append( "bool reportIntersectionNV(float, uint);" @@ -4885,6 +5351,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "float hitObjectGetCurrentTimeNV(hitObjectNV);" "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);" "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);" + "int hitObjectGetClusterIdNV(hitObjectNV);" + "vec3 hitObjectGetSpherePositionNV(hitObjectNV);" + "float hitObjectGetSphereRadiusNV(hitObjectNV);" + "void hitObjectGetLSSPositionsNV(hitObjectNV, out vec3[2]);" + "void hitObjectGetLSSRadiiNV(hitObjectNV, out float[2]);" + "bool hitObjectIsSphereHitNV(hitObjectNV);" + "bool hitObjectIsLSSHitNV(hitObjectNV);" "\n"); stageBuiltins[EShLangMiss].append( "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" @@ -4922,6 +5395,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "float hitObjectGetCurrentTimeNV(hitObjectNV);" "uint hitObjectGetShaderBindingTableRecordIndexNV(hitObjectNV);" "uvec2 hitObjectGetShaderRecordBufferHandleNV(hitObjectNV);" + "int hitObjectGetClusterIdNV(hitObjectNV);" + "vec3 hitObjectGetSpherePositionNV(hitObjectNV);" + "float hitObjectGetSphereRadiusNV(hitObjectNV);" + "void hitObjectGetLSSPositionsNV(hitObjectNV, out vec3[2]);" + "void hitObjectGetLSSRadiiNV(hitObjectNV, out float[2]);" + "bool hitObjectIsSphereHitNV(hitObjectNV);" + "bool hitObjectIsLSSHitNV(hitObjectNV);" "\n"); stageBuiltins[EShLangCallable].append( "void executeCallableNV(uint, int);" @@ -5151,6 +5631,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } + // GL_QCOM_tile_shading + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 460)) { + stageBuiltins[EShLangCompute].append( + "in highp uvec2 gl_TileOffsetQCOM;" // GL_QCOM_tile_shading + "in highp uvec3 gl_TileDimensionQCOM;" // GL_QCOM_tile_shading + "in highp uvec2 gl_TileApronSizeQCOM;" // GL_QCOM_tile_shading + "\n"); + } + //============================================================================ // // Define the interface to the mesh/task shader. @@ -5541,7 +6031,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "out vec4 gl_ClipVertex;" ); - if (version >= 400) + if (version >= 150) stageBuiltins[EShLangGeometry].append( "in int gl_InvocationID;" ); @@ -5856,7 +6346,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } } - if (version >= 400) + if (version >= 150) stageBuiltins[EShLangFragment].append( "flat in int gl_SampleMaskIn[];" ); @@ -5991,6 +6481,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "flat in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2 "\n"); } + + // GL_QCOM_tile_shading + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 460)) { + stageBuiltins[EShLangFragment].append( + "flat in highp uvec2 gl_TileOffsetQCOM;" // GL_QCOM_tile_shading + "flat in highp uvec3 gl_TileDimensionQCOM;" // GL_QCOM_tile_shading + "flat in highp uvec2 gl_TileApronSizeQCOM;" // GL_QCOM_tile_shading + "\n"); + } // GL_ARB_shader_ballot if (profile != EEsProfile && version >= 450) { @@ -6150,12 +6650,14 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "const uint gl_RayFlagsCullNoOpaqueNV = 128U;" "const uint gl_RayFlagsCullNoOpaqueEXT = 128U;" "const uint gl_RayFlagsSkipTrianglesEXT = 256U;" + "const uint gl_RayFlagsSkipBuiltinPrimitivesNV = 256U;" "const uint gl_RayFlagsSkipAABBEXT = 512U;" "const uint gl_RayFlagsForceOpacityMicromap2StateEXT = 1024U;" "const uint gl_HitKindFrontFacingTriangleEXT = 254U;" "const uint gl_HitKindBackFacingTriangleEXT = 255U;" "in uint gl_HitKindFrontFacingMicroTriangleNV;" "in uint gl_HitKindBackFacingMicroTriangleNV;" + "const int gl_ClusterIDNoneNV = -1;" "\n"; const char *constRayQueryIntersection = @@ -6246,6 +6748,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in vec3 gl_HitTriangleVertexPositionsEXT[3];" "in vec3 gl_HitMicroTriangleVertexPositionsNV[3];" "in vec2 gl_HitMicroTriangleVertexBarycentricsNV[3];" + "in int gl_ClusterIDNV;" + "in bool gl_HitIsSphereNV;" + "in bool gl_HitIsLSSNV;" + "in vec3 gl_HitSpherePositionNV;" + "in float gl_HitSphereRadiusNV;" + "in vec3 gl_HitLSSPositionsNV[2];" + "in float gl_HitLSSRadiiNV[2];" "\n"; const char *missDecls = @@ -6538,7 +7047,7 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int commonBuiltins.append(postfixes[sizeDims]); } if (sampler.isImage()) - commonBuiltins.append(" imageSize(readonly writeonly volatile coherent "); + commonBuiltins.append(" imageSize(readonly writeonly volatile coherent nontemporal "); else commonBuiltins.append(" textureSize("); commonBuiltins.append(typeName); @@ -6556,7 +7065,7 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int if (profile != EEsProfile && version >= 430 && sampler.isMultiSample()) { commonBuiltins.append("int "); if (sampler.isImage()) - commonBuiltins.append("imageSamples(readonly writeonly volatile coherent "); + commonBuiltins.append("imageSamples(readonly writeonly volatile coherent nontemporal "); else commonBuiltins.append("textureSamples("); commonBuiltins.append(typeName); @@ -6644,18 +7153,18 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int if (profile == EEsProfile) commonBuiltins.append("highp "); commonBuiltins.append(prefixes[sampler.type]); - commonBuiltins.append("vec4 imageLoad(readonly volatile coherent "); + commonBuiltins.append("vec4 imageLoad(readonly volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(");\n"); - commonBuiltins.append("void imageStore(writeonly volatile coherent "); + commonBuiltins.append("void imageStore(writeonly volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", "); commonBuiltins.append(prefixes[sampler.type]); commonBuiltins.append("vec4);\n"); if (! sampler.is1D() && ! sampler.isBuffer() && profile != EEsProfile && version >= 450) { - commonBuiltins.append("int sparseImageLoadARB(readonly volatile coherent "); + commonBuiltins.append("int sparseImageLoadARB(readonly volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", out "); commonBuiltins.append(prefixes[sampler.type]); @@ -6679,13 +7188,13 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int const int numBuiltins = 7; static const char* atomicFunc[numBuiltins] = { - " imageAtomicAdd(volatile coherent ", - " imageAtomicMin(volatile coherent ", - " imageAtomicMax(volatile coherent ", - " imageAtomicAnd(volatile coherent ", - " imageAtomicOr(volatile coherent ", - " imageAtomicXor(volatile coherent ", - " imageAtomicExchange(volatile coherent " + " imageAtomicAdd(volatile coherent nontemporal ", + " imageAtomicMin(volatile coherent nontemporal ", + " imageAtomicMax(volatile coherent nontemporal ", + " imageAtomicAnd(volatile coherent nontemporal ", + " imageAtomicOr(volatile coherent nontemporal ", + " imageAtomicXor(volatile coherent nontemporal ", + " imageAtomicExchange(volatile coherent nontemporal " }; // Loop twice to add prototypes with/without scope/semantics @@ -6703,7 +7212,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int } commonBuiltins.append(dataType); - commonBuiltins.append(" imageAtomicCompSwap(volatile coherent "); + commonBuiltins.append(" imageAtomicCompSwap(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", "); commonBuiltins.append(dataType); @@ -6716,11 +7225,11 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int } commonBuiltins.append(dataType); - commonBuiltins.append(" imageAtomicLoad(volatile coherent "); + commonBuiltins.append(" imageAtomicLoad(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", int, int, int);\n"); - commonBuiltins.append("void imageAtomicStore(volatile coherent "); + commonBuiltins.append("void imageAtomicStore(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", "); commonBuiltins.append(dataType); @@ -6731,7 +7240,7 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int // GL_ARB_ES3_1_compatibility // TODO: spec issue: are there restrictions on the kind of layout() that can be used? what about dropping memory qualifiers? if (profile == EEsProfile && version >= 310) { - commonBuiltins.append("float imageAtomicExchange(volatile coherent "); + commonBuiltins.append("float imageAtomicExchange(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", float);\n"); } @@ -6740,10 +7249,10 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int if (profile != EEsProfile && version >= 430) { const int numFp16Builtins = 4; const char* atomicFp16Func[numFp16Builtins] = { - " imageAtomicAdd(volatile coherent ", - " imageAtomicMin(volatile coherent ", - " imageAtomicMax(volatile coherent ", - " imageAtomicExchange(volatile coherent " + " imageAtomicAdd(volatile coherent nontemporal ", + " imageAtomicMin(volatile coherent nontemporal ", + " imageAtomicMax(volatile coherent nontemporal ", + " imageAtomicExchange(volatile coherent nontemporal " }; const int numFp16DataTypes = 2; const char* atomicFp16DataTypes[numFp16DataTypes] = { @@ -6764,47 +7273,47 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int } if (profile != EEsProfile && version >= 450) { - commonBuiltins.append("float imageAtomicAdd(volatile coherent "); + commonBuiltins.append("float imageAtomicAdd(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", float);\n"); - commonBuiltins.append("float imageAtomicAdd(volatile coherent "); + commonBuiltins.append("float imageAtomicAdd(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", float"); commonBuiltins.append(", int, int, int);\n"); - commonBuiltins.append("float imageAtomicExchange(volatile coherent "); + commonBuiltins.append("float imageAtomicExchange(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", float);\n"); - commonBuiltins.append("float imageAtomicExchange(volatile coherent "); + commonBuiltins.append("float imageAtomicExchange(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", float"); commonBuiltins.append(", int, int, int);\n"); - commonBuiltins.append("float imageAtomicLoad(readonly volatile coherent "); + commonBuiltins.append("float imageAtomicLoad(readonly volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", int, int, int);\n"); - commonBuiltins.append("void imageAtomicStore(writeonly volatile coherent "); + commonBuiltins.append("void imageAtomicStore(writeonly volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", float"); commonBuiltins.append(", int, int, int);\n"); - commonBuiltins.append("float imageAtomicMin(volatile coherent "); + commonBuiltins.append("float imageAtomicMin(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", float);\n"); - commonBuiltins.append("float imageAtomicMin(volatile coherent "); + commonBuiltins.append("float imageAtomicMin(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", float"); commonBuiltins.append(", int, int, int);\n"); - commonBuiltins.append("float imageAtomicMax(volatile coherent "); + commonBuiltins.append("float imageAtomicMax(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", float);\n"); - commonBuiltins.append("float imageAtomicMax(volatile coherent "); + commonBuiltins.append("float imageAtomicMax(volatile coherent nontemporal "); commonBuiltins.append(imageParams); commonBuiltins.append(", float"); commonBuiltins.append(", int, int, int);\n"); @@ -6828,18 +7337,18 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int imageLodParams.append(", int"); commonBuiltins.append(prefixes[sampler.type]); - commonBuiltins.append("vec4 imageLoadLodAMD(readonly volatile coherent "); + commonBuiltins.append("vec4 imageLoadLodAMD(readonly volatile coherent nontemporal "); commonBuiltins.append(imageLodParams); commonBuiltins.append(");\n"); - commonBuiltins.append("void imageStoreLodAMD(writeonly volatile coherent "); + commonBuiltins.append("void imageStoreLodAMD(writeonly volatile coherent nontemporal "); commonBuiltins.append(imageLodParams); commonBuiltins.append(", "); commonBuiltins.append(prefixes[sampler.type]); commonBuiltins.append("vec4);\n"); if (! sampler.is1D()) { - commonBuiltins.append("int sparseImageLoadLodAMD(readonly volatile coherent "); + commonBuiltins.append("int sparseImageLoadLodAMD(readonly volatile coherent nontemporal "); commonBuiltins.append(imageLodParams); commonBuiltins.append(", out "); commonBuiltins.append(prefixes[sampler.type]); @@ -8045,6 +8554,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("allInvocationsARB", 1, &E_GL_ARB_shader_group_vote); symbolTable.setFunctionExtensions("allInvocationsEqualARB", 1, &E_GL_ARB_shader_group_vote); } + if (version >= 150) { + symbolTable.setFunctionExtensions("anyThreadNV", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("allThreadsNV", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("allThreadsEqualNV", 1, &E_GL_NV_gpu_shader5); + } } @@ -8133,8 +8647,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion if (version == 310) symbolTable.setFunctionExtensions("textureGatherOffsets", Num_AEP_gpu_shader5, AEP_gpu_shader5); } - if (version == 310) + if (version == 310) { symbolTable.setFunctionExtensions("fma", Num_AEP_gpu_shader5, AEP_gpu_shader5); + } else if (profile != EEsProfile && version >= 150) { + symbolTable.setFunctionExtensions("fma", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + } } if (profile == EEsProfile && version < 320) { @@ -8223,6 +8740,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_PositionPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes); symbolTable.setVariableExtensions("gl_ViewportMaskPerViewNV", 1, &E_GL_NVX_multiview_per_view_attributes); + if (profile != EEsProfile && language == EShLangGeometry && version < 400) { + symbolTable.setVariableExtensions("gl_InvocationID", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + } BuiltInVariable("gl_ViewportMask", EbvViewportMaskNV, symbolTable); BuiltInVariable("gl_SecondaryPositionNV", EbvSecondaryPositionNV, symbolTable); BuiltInVariable("gl_SecondaryViewportMaskNV", EbvSecondaryViewportMaskNV, symbolTable); @@ -8321,6 +8841,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable); } + // GL_ARB_gpu_shader5/GL_NV_gpu_shader5 + if (profile != EEsProfile && version < 400 && language == EShLangGeometry) { + symbolTable.setFunctionExtensions("EmitStreamVertex", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("EndStreamPrimitive", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + } // GL_KHR_shader_subgroup if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 140)) { @@ -8364,18 +8889,18 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_WarpMaxIDARM", EbvWarpMaxIDARM, symbolTable); } - if (language == EShLangGeometry || language == EShLangVertex) { - if ((profile == EEsProfile && version >= 310) || - (profile != EEsProfile && version >= 450)) { - symbolTable.setVariableExtensions("gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate); - BuiltInVariable("gl_PrimitiveShadingRateEXT", EbvPrimitiveShadingRateKHR, symbolTable); + if (language == EShLangGeometry || language == EShLangVertex) { + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 450)) { + symbolTable.setVariableExtensions("gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate); + BuiltInVariable("gl_PrimitiveShadingRateEXT", EbvPrimitiveShadingRateKHR, symbolTable); - symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); - symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); - symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); - symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); - } - } + symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + } + } break; case EShLangFragment: @@ -8434,6 +8959,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("rayQueryGetWorldRayOriginEXT", 1, &E_GL_EXT_ray_query); symbolTable.setFunctionExtensions("rayQueryGetWorldRayDirectionEXT", 1, &E_GL_EXT_ray_query); symbolTable.setFunctionExtensions("rayQueryGetIntersectionTriangleVertexPositionsEXT", 1, &E_GL_EXT_ray_tracing_position_fetch); + symbolTable.setFunctionExtensions("rayQueryGetIntersectionClusterIdNV", 1, &E_GL_NV_cluster_acceleration_structure); + symbolTable.setFunctionExtensions("rayQueryGetIntersectionSpherePositionNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("rayQueryGetIntersectionSphereRadiusNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("rayQueryGetIntersectionLSSHitValueNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("rayQueryGetIntersectionLSSPositionsNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("rayQueryGetIntersectionLSSRadiiNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("rayQueryIsSphereHitNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("rayQueryIsLSSHitNV", 1, &E_GL_NV_linear_swept_spheres); symbolTable.setVariableExtensions("gl_RayFlagsSkipAABBEXT", 1, &E_GL_EXT_ray_flags_primitive_culling); symbolTable.setVariableExtensions("gl_RayFlagsSkipTrianglesEXT", 1, &E_GL_EXT_ray_flags_primitive_culling); symbolTable.setVariableExtensions("gl_RayFlagsForceOpacityMicromap2StateEXT", 1, &E_GL_EXT_opacity_micromap); @@ -8446,6 +8979,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_SampleMask", EbvSampleMask, symbolTable); if (profile != EEsProfile && version < 400) { + BuiltInVariable("gl_SampleMaskIn", EbvSampleMask, symbolTable); + symbolTable.setVariableExtensions("gl_SampleMaskIn", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + BuiltInVariable("gl_NumSamples", EbvSampleMask, symbolTable); symbolTable.setVariableExtensions("gl_SampleMask", 1, &E_GL_ARB_sample_shading); @@ -8551,6 +9087,37 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("atomicCounter" , 1, &E_GL_ARB_shader_atomic_counters); } + // E_GL_ARB_gpu_shader5/E_GL_NV_gpu_shader5 + if (profile != EEsProfile && version < 400) { + symbolTable.setFunctionExtensions("bitfieldExtract", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("bitfieldInsert", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("bitfieldReverse", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("bitCount", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("findLSB", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("findMSB", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("uaddCarry", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("usubBorrow", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("umulExtended", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("imulExtended", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("interpolateAtCentroid", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("interpolateAtSample", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + symbolTable.setFunctionExtensions("interpolateAtOffset", Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5); + } + + // E_GL_NV_gpu_shader5 + if (profile != EEsProfile && version < 450) { + symbolTable.setFunctionExtensions("packInt2x32", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("packUint2x32", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("unpackInt2x32", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("unpackUint2x32", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("packFloat2x16", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("unpackFloat2x16", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("doubleBitsToInt64", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("doubleBitsToUint64", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("int64BitsToDouble", 1, &E_GL_NV_gpu_shader5); + symbolTable.setFunctionExtensions("uint64BitsToDouble", 1, &E_GL_NV_gpu_shader5); + } + // E_GL_ARB_shader_atomic_counter_ops if (profile != EEsProfile && version == 450) { symbolTable.setFunctionExtensions("atomicCounterAddARB" , 1, &E_GL_ARB_shader_atomic_counter_ops); @@ -8695,11 +9262,15 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion } if (profile != EEsProfile && version < 330 ) { - const char* bitsConvertExt[2] = {E_GL_ARB_shader_bit_encoding, E_GL_ARB_gpu_shader5}; - symbolTable.setFunctionExtensions("floatBitsToInt", 2, bitsConvertExt); - symbolTable.setFunctionExtensions("floatBitsToUint", 2, bitsConvertExt); - symbolTable.setFunctionExtensions("intBitsToFloat", 2, bitsConvertExt); - symbolTable.setFunctionExtensions("uintBitsToFloat", 2, bitsConvertExt); + const int numBitEncodingExts = 3; + const char* bitEncodingExts[numBitEncodingExts] = { E_GL_ARB_shader_bit_encoding, + E_GL_ARB_gpu_shader5, + E_GL_NV_gpu_shader5}; + symbolTable.setFunctionExtensions("floatBitsToInt", numBitEncodingExts, bitEncodingExts); + symbolTable.setFunctionExtensions("floatBitsToUint", numBitEncodingExts, bitEncodingExts); + symbolTable.setFunctionExtensions("intBitsToFloat", numBitEncodingExts, bitEncodingExts); + symbolTable.setFunctionExtensions("uintBitsToFloat", numBitEncodingExts, bitEncodingExts); + } if (profile != EEsProfile && version < 430 ) { @@ -8720,12 +9291,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion // GL_ARB_shading_language_packing if (profile != EEsProfile && version < 400 ) { - symbolTable.setFunctionExtensions("packUnorm2x16", 1, &E_GL_ARB_shading_language_packing); - symbolTable.setFunctionExtensions("unpackUnorm2x16", 1, &E_GL_ARB_shading_language_packing); - symbolTable.setFunctionExtensions("packSnorm4x8", 1, &E_GL_ARB_shading_language_packing); - symbolTable.setFunctionExtensions("packUnorm4x8", 1, &E_GL_ARB_shading_language_packing); - symbolTable.setFunctionExtensions("unpackSnorm4x8", 1, &E_GL_ARB_shading_language_packing); - symbolTable.setFunctionExtensions("unpackUnorm4x8", 1, &E_GL_ARB_shading_language_packing); + const int numPackingExts = 3; + const char* packingExts[numPackingExts] = { E_GL_ARB_shading_language_packing, + E_GL_ARB_gpu_shader5, + E_GL_NV_gpu_shader5}; + symbolTable.setFunctionExtensions("packUnorm2x16", numPackingExts, packingExts); + symbolTable.setFunctionExtensions("unpackUnorm2x16", numPackingExts, packingExts); + symbolTable.setFunctionExtensions("packSnorm4x8", numPackingExts, packingExts); + symbolTable.setFunctionExtensions("packUnorm4x8", numPackingExts, packingExts); + symbolTable.setFunctionExtensions("unpackSnorm4x8", numPackingExts, packingExts); + symbolTable.setFunctionExtensions("unpackUnorm4x8", numPackingExts, packingExts); } if (profile != EEsProfile && version < 420 ) { symbolTable.setFunctionExtensions("packSnorm2x16", 1, &E_GL_ARB_shading_language_packing); @@ -8963,6 +9538,17 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("textureBlockMatchGatherSSDQCOM", 1, &E_GL_QCOM_image_processing2); symbolTable.setFunctionExtensions("textureBlockMatchGatherSADQCOM", 1, &E_GL_QCOM_image_processing2); } + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 460)) { + BuiltInVariable("gl_TileOffsetQCOM", EbvTileOffsetQCOM, symbolTable); + BuiltInVariable("gl_TileDimensionQCOM", EbvTileDimensionQCOM, symbolTable); + BuiltInVariable("gl_TileApronSizeQCOM", EbvTileApronSizeQCOM, symbolTable); + + symbolTable.setVariableExtensions("gl_TileOffsetQCOM", 1, &E_GL_QCOM_tile_shading); + symbolTable.setVariableExtensions("gl_TileDimensionQCOM", 1, &E_GL_QCOM_tile_shading); + symbolTable.setVariableExtensions("gl_TileApronSizeQCOM", 1, &E_GL_QCOM_tile_shading); + } break; case EShLangCompute: @@ -9120,6 +9706,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("setTensorViewClipNV", 1, &E_GL_NV_cooperative_matrix2); } + { + symbolTable.setFunctionExtensions("coopVecMatMulNV", 1, &E_GL_NV_cooperative_vector); + symbolTable.setFunctionExtensions("coopVecMatMulAddNV", 1, &E_GL_NV_cooperative_vector); + symbolTable.setFunctionExtensions("coopVecOuterProductAccumulateNV", 1, &E_GL_NV_cooperative_vector); + symbolTable.setFunctionExtensions("coopVecReduceSumAccumulateNV", 1, &E_GL_NV_cooperative_vector); + } + if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { symbolTable.setFunctionExtensions("dFdx", 1, &E_GL_NV_compute_shader_derivatives); symbolTable.setFunctionExtensions("dFdy", 1, &E_GL_NV_compute_shader_derivatives); @@ -9144,6 +9737,34 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap); symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap); } + + // GL_EXT_integer_dot_product + if ((profile == EEsProfile && version >= 300) || + (profile != EEsProfile && version >= 450)) { + symbolTable.setFunctionExtensions("dotEXT", 1, &E_GL_EXT_integer_dot_product); + symbolTable.setFunctionExtensions("dotPacked4x8EXT", 1, &E_GL_EXT_integer_dot_product); + 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); + } + + // E_SPV_QCOM_tile_shading + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 460)) { + BuiltInVariable("gl_TileOffsetQCOM", EbvTileOffsetQCOM, symbolTable); + BuiltInVariable("gl_TileDimensionQCOM", EbvTileDimensionQCOM, symbolTable); + BuiltInVariable("gl_TileApronSizeQCOM", EbvTileApronSizeQCOM, symbolTable); + + symbolTable.setVariableExtensions("gl_TileOffsetQCOM", 1, &E_GL_QCOM_tile_shading); + symbolTable.setVariableExtensions("gl_TileDimensionQCOM", 1, &E_GL_QCOM_tile_shading); + symbolTable.setVariableExtensions("gl_TileApronSizeQCOM", 1, &E_GL_QCOM_tile_shading); + } break; case EShLangRayGen: @@ -9192,6 +9813,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_HitTriangleVertexPositionsEXT", 1, &E_GL_EXT_ray_tracing_position_fetch); symbolTable.setVariableExtensions("gl_HitMicroTriangleVertexPositionsNV", 1, &E_GL_NV_displacement_micromap); symbolTable.setVariableExtensions("gl_HitMicroTriangleVertexBarycentricsNV", 1, &E_GL_NV_displacement_micromap); + symbolTable.setVariableExtensions("gl_ClusterIDNV", 1, &E_GL_NV_cluster_acceleration_structure); + symbolTable.setVariableExtensions("gl_HitKindSphereNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setVariableExtensions("gl_HitKindLSSNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setVariableExtensions("gl_HitSpherePositionNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setVariableExtensions("gl_HitSphereRadiusNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setVariableExtensions("gl_HitLSSPositionNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setVariableExtensions("gl_HitLSSRadiiNV", 1, &E_GL_NV_linear_swept_spheres); symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group); @@ -9236,9 +9864,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("hitObjectGetCurrentTimeNV", 1, &E_GL_NV_shader_invocation_reorder); symbolTable.setFunctionExtensions("hitObjectGetShaderBindingTableRecordIndexNV", 1, &E_GL_NV_shader_invocation_reorder); symbolTable.setFunctionExtensions("hitObjectGetShaderRecordBufferHandleNV", 1, &E_GL_NV_shader_invocation_reorder); + symbolTable.setFunctionExtensions("hitObjectGetClusterIdNV", 1, &E_GL_NV_cluster_acceleration_structure); symbolTable.setFunctionExtensions("reorderThreadNV", 1, &E_GL_NV_shader_invocation_reorder); symbolTable.setFunctionExtensions("fetchMicroTriangleVertexPositionNV", 1, &E_GL_NV_displacement_micromap); symbolTable.setFunctionExtensions("fetchMicroTriangleVertexBarycentricNV", 1, &E_GL_NV_displacement_micromap); + symbolTable.setFunctionExtensions("hitObjectGetSpherePositionNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("hitObjectGetSphereRadiusNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("hitObjectGetLSSPositionsNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("hitObjectGetLSSRadiiNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("hitObjectIsSphereHitNV", 1, &E_GL_NV_linear_swept_spheres); + symbolTable.setFunctionExtensions("hitObjectIsLSSHitNV", 1, &E_GL_NV_linear_swept_spheres); BuiltInVariable("gl_LaunchIDNV", EbvLaunchId, symbolTable); @@ -9280,6 +9915,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_HitMicroTriangleVertexBarycentricsNV", EbvMicroTriangleBaryNV, symbolTable); BuiltInVariable("gl_HitKindFrontFacingMicroTriangleNV", EbvHitKindFrontFacingMicroTriangleNV, symbolTable); BuiltInVariable("gl_HitKindBackFacingMicroTriangleNV", EbvHitKindBackFacingMicroTriangleNV, symbolTable); + BuiltInVariable("gl_ClusterIDNV", EbvClusterIDNV, symbolTable); + BuiltInVariable("gl_HitIsSphereNV", EbvHitIsSphereNV, symbolTable); + BuiltInVariable("gl_HitIsLSSNV", EbvHitIsLSSNV, symbolTable); + BuiltInVariable("gl_HitSpherePositionNV", EbvHitSpherePositionNV, symbolTable); + BuiltInVariable("gl_HitSphereRadiusNV", EbvHitSphereRadiusNV, symbolTable); + BuiltInVariable("gl_HitLSSPositionsNV", EbvHitLSSPositionsNV, symbolTable); + BuiltInVariable("gl_HitLSSRadiiNV", EbvHitLSSRadiiNV, symbolTable); // gl_HitT variables are aliases of their gl_RayTmax counterparts. RetargetVariable("gl_HitTNV", "gl_RayTmaxNV", symbolTable); @@ -10036,6 +10678,16 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("allInvocations", EOpAllInvocations); symbolTable.relateToOperator("allInvocationsEqual", EOpAllInvocationsEqual); } + // As per dependency between NV_gpu_shader5 and ARB_shader_group_vote + // anyInvocationARB = anyThreadNV + // allInvocationsARB = allThreadsNV + // allInvocationsEqualARB = allThreadsEqualNV + // Thus we reuse the Op's + if (version >= 150) { + symbolTable.relateToOperator("anyThreadNV", EOpAnyInvocation); + symbolTable.relateToOperator("allThreadsNV", EOpAllInvocations); + symbolTable.relateToOperator("allThreadsEqualNV", EOpAllInvocationsEqual); + } symbolTable.relateToOperator("minInvocationsAMD", EOpMinInvocations); symbolTable.relateToOperator("maxInvocationsAMD", EOpMaxInvocations); symbolTable.relateToOperator("addInvocationsAMD", EOpAddInvocations); @@ -10082,6 +10734,24 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("fragmentFetchAMD", EOpFragmentFetch); } + // GL_EXT_integer_dot_product + if ((profile == EEsProfile && version >= 300) || + (profile != EEsProfile && version >= 450)) { + symbolTable.relateToOperator("dotEXT", EOpDot); + symbolTable.relateToOperator("dotPacked4x8EXT", EOpDotPackedEXT); + symbolTable.relateToOperator("dotAccSatEXT", EOpDotAccSatEXT); + 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)) { @@ -10201,6 +10871,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("texture2DArrayLod", EOpTextureLod); symbolTable.relateToOperator("shadow1DArrayLod", EOpTextureLod); } + + symbolTable.relateToOperator("coopVecMatMulNV", EOpCooperativeVectorMatMulNV); + symbolTable.relateToOperator("coopVecMatMulAddNV", EOpCooperativeVectorMatMulAddNV); + symbolTable.relateToOperator("coopVecLoadNV", EOpCooperativeVectorLoadNV); + symbolTable.relateToOperator("coopVecStoreNV", EOpCooperativeVectorStoreNV); + symbolTable.relateToOperator("coopVecOuterProductAccumulateNV", EOpCooperativeVectorOuterProductAccumulateNV); + symbolTable.relateToOperator("coopVecReduceSumAccumulateNV", EOpCooperativeVectorReduceSumAccumulateNV); } switch(language) { @@ -10253,6 +10930,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("rayQueryGetIntersectionObjectToWorldEXT", EOpRayQueryGetIntersectionObjectToWorld); symbolTable.relateToOperator("rayQueryGetIntersectionWorldToObjectEXT", EOpRayQueryGetIntersectionWorldToObject); symbolTable.relateToOperator("rayQueryGetIntersectionTriangleVertexPositionsEXT", EOpRayQueryGetIntersectionTriangleVertexPositionsEXT); + symbolTable.relateToOperator("rayQueryGetIntersectionClusterIdNV", EOpRayQueryGetIntersectionClusterIdNV); + symbolTable.relateToOperator("rayQueryGetIntersectionSpherePositionNV", EOpRayQueryGetIntersectionSpherePositionNV); + symbolTable.relateToOperator("rayQueryGetIntersectionSphereRadiusNV", EOpRayQueryGetIntersectionSphereRadiusNV); + symbolTable.relateToOperator("rayQueryGetIntersectionLSSHitValueNV", EOpRayQueryGetIntersectionLSSHitValueNV); + symbolTable.relateToOperator("rayQueryGetIntersectionLSSPositionsNV", EOpRayQueryGetIntersectionLSSPositionsNV); + symbolTable.relateToOperator("rayQueryGetIntersectionLSSRadiiNV", EOpRayQueryGetIntersectionLSSRadiiNV); + symbolTable.relateToOperator("rayQueryIsSphereHitNV", EOpRayQueryIsSphereHitNV); + symbolTable.relateToOperator("rayQueryIsLSSHitNV", EOpRayQueryIsLSSHitNV); } symbolTable.relateToOperator("interpolateAtCentroid", EOpInterpolateAtCentroid); @@ -10363,7 +11048,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("hitObjectGetCurrentTimeNV", EOpHitObjectGetCurrentTimeNV); symbolTable.relateToOperator("hitObjectGetShaderBindingTableRecordIndexNV", EOpHitObjectGetShaderBindingTableRecordIndexNV); symbolTable.relateToOperator("hitObjectGetShaderRecordBufferHandleNV", EOpHitObjectGetShaderRecordBufferHandleNV); + symbolTable.relateToOperator("hitObjectGetClusterIdNV", EOpHitObjectGetClusterIdNV); symbolTable.relateToOperator("reorderThreadNV", EOpReorderThreadNV); + symbolTable.relateToOperator("hitObjectGetSpherePositionNV", EOpHitObjectGetSpherePositionNV); + symbolTable.relateToOperator("hitObjectGetSphereRadiusNV", EOpHitObjectGetSphereRadiusNV); + symbolTable.relateToOperator("hitObjectGetLSSPositionsNV", EOpHitObjectGetLSSPositionsNV); + symbolTable.relateToOperator("hitObjectGetLSSRadiiNV", EOpHitObjectGetLSSRadiiNV); + symbolTable.relateToOperator("hitObjectIsSphereHitNV", EOpHitObjectIsSphereHitNV); + symbolTable.relateToOperator("hitObjectIsLSSHitNV", EOpHitObjectIsLSSHitNV); } break; case EShLangIntersect: diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp index 7f707c8..638f9c1 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Intermediate.cpp @@ -46,6 +46,7 @@ #include "propagateNoContraction.h" #include +#include #include #include @@ -398,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 } @@ -427,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(); @@ -568,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; @@ -595,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); @@ -829,6 +839,11 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt node->getType().isTensorViewNV()) return nullptr; + // Reject implicit conversions to cooperative vector types + if (node->getType().isCoopVecNV() && + op != EOpConstructCooperativeVectorNV) + return nullptr; + // Note: callers are responsible for other aspects of shape, // like vector and matrix sizes. @@ -842,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: @@ -896,6 +912,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt case EOpConstructStruct: case EOpConstructCooperativeMatrixNV: case EOpConstructCooperativeMatrixKHR: + case EOpConstructCooperativeVectorNV: if (type.isReference() || node->getType().isReference()) { // types must match to assign a reference @@ -947,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); @@ -1249,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; @@ -1341,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; @@ -1489,10 +1510,17 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtInt16: case EbtUint16: return (version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64)) && - numericFeatures.contains(TNumericFeatures::gpu_shader_int16); + (numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) || + numericFeatures.contains(TNumericFeatures::gpu_shader_int16)); case EbtFloat16: return (version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64)) && - numericFeatures.contains(TNumericFeatures::gpu_shader_half_float); + (numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) || + numericFeatures.contains(TNumericFeatures::gpu_shader_half_float)); + case EbtBFloat16: + return true; + case EbtInt8: + case EbtUint8: + return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); default: return false; } @@ -1505,22 +1533,35 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat return getSource() == EShSourceHlsl; case EbtInt16: case EbtUint16: - return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) || + numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); case EbtFloat16: return numericFeatures.contains(TNumericFeatures::gpu_shader_half_float) || + numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) || getSource() == EShSourceHlsl; + case EbtBFloat16: + return true; + case EbtInt8: + case EbtUint8: + return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); default: return false; } case EbtUint: switch (from) { case EbtInt: - return version >= 400 || getSource() == EShSourceHlsl || IsRequestedExtension(E_GL_ARB_gpu_shader5); + return version >= 400 || getSource() == EShSourceHlsl || + IsRequestedExtension(E_GL_ARB_gpu_shader5) || + numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); case EbtBool: return getSource() == EShSourceHlsl; case EbtInt16: case EbtUint16: - return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) || + numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); + case EbtInt8: + case EbtUint8: + return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); default: return false; } @@ -1529,7 +1570,10 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtBool: return getSource() == EShSourceHlsl; case EbtInt16: - return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) || + numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); + case EbtInt8: + return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); default: return false; } @@ -1541,7 +1585,11 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat return true; case EbtInt16: case EbtUint16: - return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) || + numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); + case EbtInt8: + case EbtUint8: + return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); default: return false; } @@ -1549,8 +1597,11 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat switch (from) { case EbtInt: return true; + case EbtInt8: + return numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); case EbtInt16: - return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16) || + numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types); default: return false; } @@ -1717,6 +1768,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)) || @@ -1772,6 +1827,9 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const if (type.isCoopMatKHR()) return EOpConstructCooperativeMatrixKHR; + if (type.isCoopVecNV()) + return EOpConstructCooperativeVectorNV; + switch (type.getBasicType()) { case EbtStruct: op = EOpConstructStruct; @@ -2010,6 +2068,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; @@ -2419,7 +2486,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; @@ -3301,6 +3368,43 @@ bool TIntermediate::promoteBinary(TIntermBinary& node) return false; } + if (left->getType().isCoopVecNV() || right->getType().isCoopVecNV()) { + // Operations on two cooperative vectors must have identical types + if (left->getType().isCoopVecNV() && right->getType().isCoopVecNV() && + left->getType() != right->getType()) { + return false; + } + switch (op) { + case EOpMul: + case EOpMulAssign: + // Use VectorTimesScalar if either operand is not a vector. Otherwise use Mul. + if (!left->getType().isCoopVecNV() || !right->getType().isCoopVecNV()) { + node.setOp(op == EOpMulAssign ? EOpVectorTimesScalarAssign : EOpVectorTimesScalar); + } + // In case of scalar*vector, take the result type from the vector. + if (right->getType().isCoopVecNV()) { + node.setType(right->getType()); + } + return true; + case EOpLeftShift: + case EOpLeftShiftAssign: + case EOpRightShift: + case EOpRightShiftAssign: + case EOpAdd: + case EOpSub: + case EOpDiv: + case EOpAssign: + // These require both to be cooperative vectors + if (!left->getType().isCoopVecNV() || !right->getType().isCoopVecNV()) { + return false; + } + return true; + default: + break; + } + return false; + } + // Finish handling the case, for all ops, where both operands are scalars. if (left->isScalar() && right->isScalar()) return true; @@ -3636,6 +3740,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; \ @@ -3657,6 +3762,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/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h index 9b39b59..0e9d748 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/LiveTraverser.h @@ -132,6 +132,47 @@ class TLiveTraverser : public TIntermTraverser { 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/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp index f7895d9..986b941 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp @@ -305,6 +305,11 @@ void TParseContextBase::checkIndex(const TSourceLoc& loc, const TType& type, int error(loc, "", "[", "matrix index out of range '%d'", index); index = type.getMatrixCols() - 1; } + } else if (type.isCoopVecNV()) { + if (index >= type.computeNumComponents()) { + error(loc, "", "[", "cooperative vector index out of range '%d'", index); + index = type.computeNumComponents() - 1; + } } } diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp index 41c6179..8ea6e2e 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp @@ -44,6 +44,7 @@ #include +#include "Versions.h" #include "preprocessor/PpContext.h" extern int yyparse(glslang::TParseContext*); @@ -549,7 +550,7 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn variableCheck(base); if (! base->isArray() && ! base->isMatrix() && ! base->isVector() && ! base->getType().isCoopMat() && - ! base->isReference()) { + ! base->isReference() && ! base->getType().isCoopVecNV()) { if (base->getAsSymbolNode()) error(loc, " left of '[' is not of type array, matrix, or vector ", base->getAsSymbolNode()->getName().c_str(), ""); else @@ -644,9 +645,13 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn if (base->getBasicType() == EbtBlock) { if (base->getQualifier().storage == EvqBuffer) requireProfile(base->getLoc(), ~EEsProfile, "variable indexing buffer block array"); - else if (base->getQualifier().storage == EvqUniform) + else if (base->getQualifier().storage == EvqUniform) { profileRequires(base->getLoc(), EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "variable indexing uniform block array"); + profileRequires(base->getLoc(), ECoreProfile, 400, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, + "variable indexing uniform block array"); + + } else { // input/output blocks either don't exist or can't be variably indexed } @@ -656,7 +661,8 @@ TIntermTyped* TParseContext::handleBracketDereference(const TSourceLoc& loc, TIn const char* explanation = "variable indexing sampler array"; requireProfile(base->getLoc(), EEsProfile | ECoreProfile | ECompatibilityProfile, explanation); profileRequires(base->getLoc(), EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, explanation); - profileRequires(base->getLoc(), ECoreProfile | ECompatibilityProfile, 400, nullptr, explanation); + profileRequires(base->getLoc(), ECoreProfile | ECompatibilityProfile, 400, Num_AEP_core_gpu_shader5, + AEP_core_gpu_shader5, explanation); } result = intermediate.addIndex(EOpIndexIndirect, base, index, loc); @@ -905,7 +911,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; } @@ -932,7 +939,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; } @@ -970,7 +978,7 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm const char* feature = ".length() on vectors and matrices"; requireProfile(loc, ~EEsProfile, feature); profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, feature); - } else if (!base->getType().isCoopMat()) { + } else if (!base->getType().isCoopMat() && !base->getType().isCoopVecNV()) { bool enhanced = intermediate.getEnhancedMsgs(); error(loc, "does not operate on this type:", field.c_str(), base->getType().getCompleteString(enhanced).c_str()); return base; @@ -1182,19 +1190,23 @@ TFunction* TParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFunct if (prevDec) { if (prevDec->isPrototyped() && prototype) profileRequires(loc, EEsProfile, 300, nullptr, "multiple prototypes for same function"); - if (prevDec->getType() != function.getType()) - error(loc, "overloaded functions must have the same return type", function.getName().c_str(), ""); if (prevDec->getSpirvInstruction() != function.getSpirvInstruction()) { error(loc, "overloaded functions must have the same qualifiers", function.getName().c_str(), "spirv_instruction"); } + bool parameterTypesDiffer = false; for (int i = 0; i < prevDec->getParamCount(); ++i) { if ((*prevDec)[i].type->getQualifier().storage != function[i].type->getQualifier().storage) error(loc, "overloaded functions must have the same parameter storage qualifiers for argument", function[i].type->getStorageQualifierString(), "%d", i+1); if ((*prevDec)[i].type->getQualifier().precision != function[i].type->getQualifier().precision) error(loc, "overloaded functions must have the same parameter precision qualifiers for argument", function[i].type->getPrecisionQualifierString(), "%d", i+1); + + if (*(*prevDec)[i].type != *function[i].type) + parameterTypesDiffer = true; } + if (!parameterTypesDiffer && prevDec->getType() != function.getType()) + error(loc, "overloaded functions must have the same return type", function.getName().c_str(), ""); } arrayObjectCheck(loc, function.getType(), "array in function return type"); @@ -1427,6 +1439,8 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction error(arguments->getLoc(), message, "readonly", ""); if (argQualifier.writeonly && ! formalQualifier.writeonly) error(arguments->getLoc(), message, "writeonly", ""); + if (argQualifier.nontemporal && ! formalQualifier.nontemporal) + error(arguments->getLoc(), message, "nontemporal", ""); // Don't check 'restrict', it is different than the rest: // "...but only restrict can be taken away from a calling argument, by a formal parameter that // lacks the restrict qualifier..." @@ -1445,6 +1459,11 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction if (builtIn && arg->getAsTyped()->getType().contains8BitInt()) requireInt8Arithmetic(arguments->getLoc(), "built-in function", "(u)int8 types can only be in uniform block or buffer storage"); + // Check that coopVecOuterProductAccumulateNV vector component types match + if (builtIn && fnCandidate->getBuiltInOp() == EOpCooperativeVectorOuterProductAccumulateNV && + i == 1 && arg->getAsTyped()->getType().getBasicType() != aggregate->getSequence()[0]->getAsTyped()->getType().getBasicType()) + error(arguments->getLoc(), "cooperative vector basic types must match", fnCandidate->getName().c_str(), ""); + // TODO 4.5 functionality: A shader will fail to compile // if the value passed to the memargument of an atomic memory function does not correspond to a buffer or // shared variable. It is acceptable to pass an element of an array or a single component of a vector to the @@ -1500,6 +1519,14 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction } handleCoopMat2FunctionCall(loc, fnCandidate, result, arguments); + + if (result->getAsTyped()->getType().isCoopVecNV() && + !result->getAsTyped()->getType().isParameterized()) { + if (auto unaryNode = result->getAsUnaryNode()) + result->setType(unaryNode->getOperand()->getAsTyped()->getType()); + else + result->setType(result->getAsAggregate()->getSequence()[0]->getAsTyped()->getType()); + } } } @@ -1553,7 +1580,7 @@ void TParseContext::handleCoopMat2FunctionCall(const TSourceLoc& loc, const TFun error(loc, "coordinate parameters must be uint32_t", param->getAsSymbolNode()->getMangledName().c_str(), ""); } } - + // error checking reduce function has matching parameters if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV) { const TFunction* combineOp = symbolTable.find(param->getAsSymbolNode()->getMangledName())->getAsFunction(); @@ -2021,7 +2048,7 @@ TIntermTyped* TParseContext::handleLengthMethod(const TSourceLoc& loc, TFunction length = type.getMatrixCols(); else if (type.isVector()) length = type.getVectorSize(); - else if (type.isCoopMat()) + else if (type.isCoopMat() || type.isCoopVecNV()) return intermediate.addBuiltInFunctionCall(loc, EOpArrayLength, true, intermNode, TType(EbtInt)); else { // we should not get here, because earlier semantic checking should have prevented this path @@ -2083,7 +2110,8 @@ TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& funct // Will there be any output conversions? bool outputConversions = false; for (int i = 0; i < function.getParamCount(); ++i) { - if (*function[i].type != arguments[i]->getAsTyped()->getType() && function[i].type->getQualifier().isParamOutput()) { + if (*function[i].type != arguments[i]->getAsTyped()->getType() && function[i].type->getQualifier().isParamOutput() && + !function[i].type->isCoopMat()) { outputConversions = true; break; } @@ -2127,13 +2155,6 @@ TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& funct } TVariable* tempArg = makeInternalVariable("tempArg", paramType); tempArg->getWritableType().getQualifier().makeTemporary(); - if (function[i].type->getQualifier().isParamInput()) { - // If the parameter is also an input, copy-in. - TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc()); - TIntermTyped* tempAssign = intermediate.addAssign(EOpAssign, tempArgNode, intermediate.addSymbol(*arguments[i]->getAsTyped()->getAsSymbolNode()), arguments[i]->getLoc()); - conversionTree = intermediate.mergeAggregate(tempAssign, conversionTree, intermNode.getLoc()); - } - TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc()); TIntermTyped* tempAssign = intermediate.addAssign(EOpAssign, arguments[i]->getAsTyped(), tempArgNode, arguments[i]->getLoc()); conversionTree = intermediate.growAggregate(conversionTree, tempAssign, arguments[i]->getLoc()); @@ -2373,23 +2394,27 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan feature = featureString.c_str(); profileRequires(loc, EEsProfile, 310, nullptr, feature); int compArg = -1; // track which argument, if any, is the constant component argument + const int numTexGatherExts = 3; + const char* texGatherExts[numTexGatherExts] = { E_GL_ARB_texture_gather, + E_GL_ARB_gpu_shader5, + E_GL_NV_gpu_shader5}; switch (callNode.getOp()) { case EOpTextureGather: // More than two arguments needs gpu_shader5, and rectangular or shadow needs gpu_shader5, // otherwise, need GL_ARB_texture_gather. if (fnCandidate.getParamCount() > 2 || fnCandidate[0].type->getSampler().dim == EsdRect || fnCandidate[0].type->getSampler().shadow) { - profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature); + profileRequires(loc, ~EEsProfile, 400, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, feature); if (! fnCandidate[0].type->getSampler().shadow) compArg = 2; } else - profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_texture_gather, feature); + profileRequires(loc, ~EEsProfile, 400, numTexGatherExts, texGatherExts, feature); break; case EOpTextureGatherOffset: // GL_ARB_texture_gather is good enough for 2D non-shadow textures with no component argument if (fnCandidate[0].type->getSampler().dim == Esd2D && ! fnCandidate[0].type->getSampler().shadow && fnCandidate.getParamCount() == 3) - profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_texture_gather, feature); + profileRequires(loc, ~EEsProfile, 400, numTexGatherExts, texGatherExts, feature); else - profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature); + profileRequires(loc, ~EEsProfile, 400, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, feature); if (! (*argp)[fnCandidate[0].type->getSampler().shadow ? 3 : 2]->getAsConstantUnion()) profileRequires(loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "non-constant offset argument"); @@ -2397,11 +2422,13 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan compArg = 3; break; case EOpTextureGatherOffsets: - profileRequires(loc, ~EEsProfile, 400, E_GL_ARB_gpu_shader5, feature); + profileRequires(loc, ~EEsProfile, 400, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, feature); if (! fnCandidate[0].type->getSampler().shadow) compArg = 3; // check for constant offsets - if (! (*argp)[fnCandidate[0].type->getSampler().shadow ? 3 : 2]->getAsConstantUnion()) + if (! (*argp)[fnCandidate[0].type->getSampler().shadow ? 3 : 2]->getAsConstantUnion() + // NV_gpu_shader5 relaxes this limitation and allows for non-constant offsets + && !extensionTurnedOn(E_GL_NV_gpu_shader5)) error(loc, "must be a compile-time constant:", feature, "offsets argument"); break; default: @@ -2540,18 +2567,34 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan case EOpTextureProjLodOffset: case EOpTextureGradOffset: case EOpTextureProjGradOffset: + case EOpSparseTextureOffset: + case EOpSparseTextureFetchOffset: + case EOpSparseTextureLodOffset: + case EOpSparseTextureGradOffset: { // Handle texture-offset limits checking // Pick which argument has to hold constant offsets int arg = -1; switch (callNode.getOp()) { - case EOpTextureOffset: arg = 2; break; - case EOpTextureFetchOffset: arg = (arg0->getType().getSampler().isRect()) ? 2 : 3; break; - case EOpTextureProjOffset: arg = 2; break; - case EOpTextureLodOffset: arg = 3; break; - case EOpTextureProjLodOffset: arg = 3; break; - case EOpTextureGradOffset: arg = 4; break; - case EOpTextureProjGradOffset: arg = 4; break; + case EOpSparseTextureOffset: + case EOpTextureOffset: + case EOpTextureProjOffset: + arg = 2; + break; + case EOpSparseTextureLodOffset: + case EOpTextureLodOffset: + case EOpTextureProjLodOffset: + arg = 3; + break; + case EOpSparseTextureGradOffset: + case EOpTextureGradOffset: + case EOpTextureProjGradOffset: + arg = 4; + break; + case EOpSparseTextureFetchOffset: + case EOpTextureFetchOffset: + arg = (arg0->getType().getSampler().isRect()) ? 2 : 3; + break; default: assert(0); break; @@ -2563,8 +2606,17 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan arg0->getType().getSampler().shadow; if (f16ShadowCompare) ++arg; - if (! (*argp)[arg]->getAsTyped()->getQualifier().isConstant()) - error(loc, "argument must be compile-time constant", "texel offset", ""); + // Allow non-constant offsets for certain texture ops + bool variableOffsetSupport = extensionTurnedOn(E_GL_NV_gpu_shader5) && + (callNode.getOp() == EOpTextureOffset || + callNode.getOp() == EOpTextureFetchOffset || + callNode.getOp() == EOpTextureProjOffset || + callNode.getOp() == EOpTextureLodOffset || + callNode.getOp() == EOpTextureProjLodOffset); + if (! (*argp)[arg]->getAsTyped()->getQualifier().isConstant()) { + if (!extensionTurnedOn(E_GL_EXT_texture_offset_non_const) && !variableOffsetSupport) + error(loc, "argument must be compile-time constant", "texel offset", ""); + } else if ((*argp)[arg]->getAsConstantUnion()) { const TType& type = (*argp)[arg]->getAsTyped()->getType(); for (int c = 0; c < type.getVectorSize(); ++c) { @@ -2575,6 +2627,8 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } } + // This check does not apply to sparse because + // GL_ARB_sparse_texture2 always includes this function. if (callNode.getOp() == EOpTextureOffset) { TSampler s = arg0->getType().getSampler(); if (s.is2D() && s.isArrayed() && s.isShadow()) { @@ -2595,6 +2649,9 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } } + // This check does not apply to sparse because + // GL_ARB_sparse_texture2 does not define sparseTextureLodOffsetARB + // with a sampler2DArrayShadow. if (callNode.getOp() == EOpTextureLodOffset) { TSampler s = arg0->getType().getSampler(); if (s.is2D() && s.isArrayed() && s.isShadow() && @@ -2731,6 +2788,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan case EOpRayQueryGetIntersectionObjectToWorld: case EOpRayQueryGetIntersectionWorldToObject: case EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: + case EOpRayQueryGetIntersectionClusterIdNV: + case EOpRayQueryGetIntersectionSpherePositionNV: + case EOpRayQueryGetIntersectionSphereRadiusNV: + case EOpRayQueryGetIntersectionLSSHitValueNV: + case EOpRayQueryGetIntersectionLSSPositionsNV: + case EOpRayQueryGetIntersectionLSSRadiiNV: if (!(*argp)[1]->getAsConstantUnion()) error(loc, "argument must be compile-time constant", "committed", ""); break; @@ -2939,7 +3002,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan case EOpEmitStreamVertex: case EOpEndStreamPrimitive: if (version == 150) - requireExtensions(loc, 1, &E_GL_ARB_gpu_shader5, "if the version is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5"); + requireExtensions(loc, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, "if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5/GL_NV_gpu_shader5"); intermediate.setMultiStream(); break; @@ -3003,7 +3066,63 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } break; + case EOpLessThan: + case EOpLessThanEqual: + case EOpGreaterThan: + case EOpGreaterThanEqual: + case EOpEqual: + case EOpNotEqual: + if (profile != EEsProfile && version >= 150 && version < 450) { + if ((*argp)[1]->getAsTyped()->getBasicType() == EbtInt64 || + (*argp)[1]->getAsTyped()->getBasicType() == EbtUint64) + requireExtensions(loc, 1, &E_GL_NV_gpu_shader5, fnCandidate.getName().c_str()); + } + break; + case EOpFma: + case EOpFrexp: + case EOpLdexp: + if (profile != EEsProfile && version < 400) { + if ((*argp)[0]->getAsTyped()->getBasicType() == EbtFloat) { + requireExtensions(loc, Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, fnCandidate.getName().c_str()); + } + } + break; + case EOpCooperativeVectorMatMulNV: + case EOpCooperativeVectorMatMulAddNV: + { + int inputInterpIdx = 2; + int matrixInterpIdx = 5; + int biasInterpIdx = 8; + int MIdx = callNode.getOp() == EOpCooperativeVectorMatMulAddNV ? 9 : 6; + int KIdx = callNode.getOp() == EOpCooperativeVectorMatMulAddNV ? 10 : 7; + int matrixLayoutIdx = callNode.getOp() == EOpCooperativeVectorMatMulAddNV ? 11 : 8; + int transposeIdx = callNode.getOp() == EOpCooperativeVectorMatMulAddNV ? 12 : 9; + + if (!(*argp)[inputInterpIdx]->getAsTyped()->getType().getQualifier().isConstant()) + error(loc, "argument must be compile-time constant", "inputInterpretation", ""); + if (!(*argp)[matrixInterpIdx]->getAsTyped()->getType().getQualifier().isConstant()) + error(loc, "argument must be compile-time constant", "matrixInterpretation", ""); + if (callNode.getOp() == EOpCooperativeVectorMatMulAddNV) { + if (!(*argp)[biasInterpIdx]->getAsTyped()->getType().getQualifier().isConstant()) + error(loc, "argument must be compile-time constant", "biasInterpretation", ""); + } + if (!(*argp)[MIdx]->getAsTyped()->getType().getQualifier().isConstant()) + error(loc, "argument must be compile-time constant", "M", ""); + if (!(*argp)[KIdx]->getAsTyped()->getType().getQualifier().isConstant()) + error(loc, "argument must be compile-time constant", "K", ""); + if (!(*argp)[matrixLayoutIdx]->getAsTyped()->getType().getQualifier().isConstant()) + error(loc, "argument must be compile-time constant", "matrixLayout", ""); + if (!(*argp)[transposeIdx]->getAsTyped()->getType().getQualifier().isConstant()) + error(loc, "argument must be compile-time constant", "transpose", ""); + } + break; + case EOpCooperativeVectorOuterProductAccumulateNV: + if (!(*argp)[5]->getAsTyped()->getType().getQualifier().isConstant()) + error(loc, "argument must be compile-time constant", "matrixLayout", ""); + if (!(*argp)[6]->getAsTyped()->getType().getQualifier().isConstant()) + error(loc, "argument must be compile-time constant", "matrixInterpretation", ""); + break; default: break; } @@ -3114,7 +3233,7 @@ void TParseContext::nonOpBuiltInCheck(const TSourceLoc& loc, const TFunction& fn compArg = 3; // check for constant offsets int offsetArg = fnCandidate[0].type->getSampler().shadow ? 3 : 2; - if (! callNode.getSequence()[offsetArg]->getAsConstantUnion()) + if (! callNode.getSequence()[offsetArg]->getAsConstantUnion() && !extensionTurnedOn(E_GL_NV_gpu_shader5)) error(loc, "must be a compile-time constant:", feature, "offsets argument"); } else if (fnCandidate.getName().compare("textureGather") == 0) { // More than two arguments needs gpu_shader5, and rectangular or shadow needs gpu_shader5, @@ -3157,8 +3276,10 @@ void TParseContext::nonOpBuiltInCheck(const TSourceLoc& loc, const TFunction& fn arg = 4; if (arg > 0) { - if (! callNode.getSequence()[arg]->getAsConstantUnion()) - error(loc, "argument must be compile-time constant", "texel offset", ""); + if (! callNode.getSequence()[arg]->getAsConstantUnion()) { + if (!extensionTurnedOn(E_GL_EXT_texture_offset_non_const)) + error(loc, "argument must be compile-time constant", "texel offset", ""); + } else { const TType& type = callNode.getSequence()[arg]->getAsTyped()->getType(); for (int c = 0; c < type.getVectorSize(); ++c) { @@ -4042,10 +4163,16 @@ bool TParseContext::constructorTextureSamplerError(const TSourceLoc& loc, const error(loc, "sampler-constructor first argument must be a scalar *texture* type", token, ""); return true; } + // simulate the first argument's impact on the result type, so it can be compared with the encapsulated operator!=() TSampler texture = function.getType().getSampler(); texture.setCombined(false); texture.shadow = false; + if (function[0].type->getSampler().isTileAttachmentQCOM()) { + //TSampler& texture = const_cast(function).getWritableType().getSampler(); + texture.image = true; + texture.tileQCOM = true; + } if (texture != function[0].type->getSampler()) { error(loc, "sampler-constructor first argument must be a *texture* type" " matching the dimensionality and sampled type of the constructor", token, ""); @@ -4137,7 +4264,7 @@ void TParseContext::samplerCheck(const TSourceLoc& loc, const TType& type, const // if (! initializer) if (type.getSampler().isAttachmentEXT() && type.getQualifier().storage != EvqTileImageEXT) error(loc, "can only be used in tileImageEXT variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str()); - else if (type.getQualifier().storage != EvqTileImageEXT) + else if (type.getQualifier().storage != EvqTileImageEXT) error(loc, "sampler/image types can only be used in uniform variables or function parameters:", type.getBasicTypeString().c_str(), identifier.c_str()); } } @@ -4208,6 +4335,10 @@ void TParseContext::memberQualifierCheck(glslang::TPublicType& publicType) error(publicType.loc, "not allowed on block or structure members", "nonuniformEXT", ""); publicType.qualifier.nonUniform = false; } + if (publicType.qualifier.isPatch()) { + error(publicType.loc, "not allowed on block or structure members", + "patch", ""); + } } // @@ -4348,6 +4479,12 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali if (qualifier.isPatch() && qualifier.isInterpolation()) error(loc, "cannot use interpolation qualifiers with patch", "patch", ""); + // Only "patch in" is supported via GL_NV_gpu_shader5 + if (! symbolTable.atBuiltInLevel() && qualifier.isPatch() && + (language == EShLangGeometry) && qualifier.storage != EvqVaryingIn && + extensionTurnedOn(E_GL_NV_gpu_shader5)) + error(loc, "only 'patch in' is supported in this stage:", "patch", "geometry"); + if (qualifier.isTaskPayload() && publicType.basicType == EbtBlock) error(loc, "taskPayloadSharedEXT variables should not be declared as interface blocks", "taskPayloadSharedEXT", ""); @@ -4365,8 +4502,11 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali requireProfile(loc, ~EEsProfile, "vertex input arrays"); profileRequires(loc, ENoProfile, 150, nullptr, "vertex input arrays"); } - if (publicType.basicType == EbtDouble) - profileRequires(loc, ~EEsProfile, 410, E_GL_ARB_vertex_attrib_64bit, "vertex-shader `double` type input"); + if (publicType.basicType == EbtDouble) { + const char* const float64_attrib[] = {E_GL_NV_gpu_shader5, E_GL_ARB_vertex_attrib_64bit}; + const int Num_float64_attrib = sizeof(float64_attrib) / sizeof(float64_attrib[0]); + profileRequires(loc, ~EEsProfile, 410, Num_float64_attrib, float64_attrib, "vertex-shader `double` type input"); + } if (qualifier.isAuxiliary() || qualifier.isInterpolation() || qualifier.isMemory() || qualifier.invariant) error(loc, "vertex input cannot be further qualified", "", ""); break; @@ -4534,6 +4674,7 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons MERGE_SINGLETON(shadercallcoherent); MERGE_SINGLETON(nonprivate); MERGE_SINGLETON(volatil); + MERGE_SINGLETON(nontemporal); MERGE_SINGLETON(restrict); MERGE_SINGLETON(readonly); MERGE_SINGLETON(writeonly); @@ -4634,7 +4775,7 @@ TPrecisionQualifier TParseContext::getDefaultPrecision(TPublicType& publicType) return defaultPrecision[publicType.basicType]; } -void TParseContext::precisionQualifierCheck(const TSourceLoc& loc, TBasicType baseType, TQualifier& qualifier, bool isCoopMat) +void TParseContext::precisionQualifierCheck(const TSourceLoc& loc, TBasicType baseType, TQualifier& qualifier, bool isCoopMatOrVec) { // Built-in symbols are allowed some ambiguous precisions, to be pinned down // later by context. @@ -4644,7 +4785,7 @@ void TParseContext::precisionQualifierCheck(const TSourceLoc& loc, TBasicType ba if (baseType == EbtAtomicUint && qualifier.precision != EpqNone && qualifier.precision != EpqHigh) error(loc, "atomic counters can only be highp", "atomic_uint", ""); - if (isCoopMat) + if (isCoopMatOrVec) return; if (baseType == EbtFloat || baseType == EbtUint || baseType == EbtInt || baseType == EbtSampler || baseType == EbtAtomicUint) { @@ -5528,6 +5669,7 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali { if (qualifier.isMemory()) { type.getQualifier().volatil = qualifier.volatil; + type.getQualifier().nontemporal = qualifier.nontemporal; type.getQualifier().coherent = qualifier.coherent; type.getQualifier().devicecoherent = qualifier.devicecoherent ; type.getQualifier().queuefamilycoherent = qualifier.queuefamilycoherent; @@ -6175,6 +6317,16 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi publicType.qualifier.layoutFullQuads = true; return; } + if (id == "non_coherent_attachment_readqcom") { + requireExtensions(loc, 1, &E_GL_QCOM_tile_shading, "tile shading QCOM"); + publicType.shaderQualifiers.layoutNonCoherentTileAttachmentReadQCOM = true; + return; + } + if (id == "tile_attachmentqcom") { + requireExtensions(loc, 1, &E_GL_QCOM_tile_shading, "tile shading QCOM"); + publicType.qualifier.layoutTileAttachmentQCOM = true; + return; + } } if (language == EShLangVertex || language == EShLangTessControl || @@ -6216,6 +6368,11 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi return; } } + if (id == "tile_attachmentqcom") { + requireExtensions(loc, 1, &E_GL_QCOM_tile_shading, "tile shading QCOM"); + publicType.qualifier.layoutTileAttachmentQCOM = true; + return; + } } if (id == "primitive_culling") { @@ -6457,7 +6614,9 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi case EShLangGeometry: if (id == "invocations") { - profileRequires(loc, ECompatibilityProfile | ECoreProfile, 400, nullptr, "invocations"); + profileRequires(loc, ECompatibilityProfile | ECoreProfile, 400, + Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5, "invocations"); + if (value == 0) error(loc, "must be at least 1", "invocations", ""); else @@ -6583,6 +6742,38 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi } } } + if (id.compare(0, 18, "shading_rate_xqcom") == 0 || + id.compare(0, 18, "shading_rate_yqcom") == 0 || + id.compare(0, 18, "shading_rate_zqcom") == 0) { + requireExtensions(loc, 1, &E_GL_QCOM_tile_shading, "tile shading QCOM"); + if (nonLiteral) + error(loc, "needs a literal integer", "shading_rate_*QCOM", ""); + if (id.size() == 18 && value == 0) { + error(loc, "must be at least 1", id.c_str(), ""); + return; + } + if (id == "shading_rate_xqcom") { + publicType.shaderQualifiers.layoutTileShadingRateQCOM[0] = value; + publicType.shaderQualifiers.layoutTileShadingRateQCOMNotDefault[0] = true; + if (! IsPow2(value)) + error(loc, "must be a power of 2", id.c_str(), ""); + return; + } + if (id == "shading_rate_yqcom") { + publicType.shaderQualifiers.layoutTileShadingRateQCOM[1] = value; + publicType.shaderQualifiers.layoutTileShadingRateQCOMNotDefault[1] = true; + if (! IsPow2(value)) + error(loc, "must be a power of 2", id.c_str(), ""); + return; + } + if (id == "shading_rate_zqcom") { + publicType.shaderQualifiers.layoutTileShadingRateQCOM[2] = value; + publicType.shaderQualifiers.layoutTileShadingRateQCOMNotDefault[2] = true; + if (value <= 0) + error(loc, "must be a positive value", id.c_str(), ""); + return; + } + } break; default: @@ -6676,6 +6867,7 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie dst.pervertexEXT = true; if (src.layoutHitObjectShaderRecordNV) dst.layoutHitObjectShaderRecordNV = true; + dst.layoutTileAttachmentQCOM |= src.layoutTileAttachmentQCOM; } } @@ -6974,6 +7166,15 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) error(loc, "Push constants blocks can't be an array", "push_constant", ""); } + if (type.getBasicType() == EbtReference) { + if (qualifier.isPipeInput()) + error(loc, "cannot contain any structs with buffer_reference.", "in", + "If you want to interface shader stages with a buffer_reference cast to a uint64 or uvec2 instead."); + if (qualifier.isPipeOutput()) + error(loc, "cannot contain any structs with buffer_reference.", "out", + "If you want to interface shader stages with a buffer_reference cast to a uint64 or uvec2 instead."); + } + if (qualifier.hasBufferReference() && type.getBasicType() != EbtBlock) error(loc, "can only be used with a block", "buffer_reference", ""); @@ -6983,7 +7184,8 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) // input attachment if (type.isSubpass()) { if (extensionTurnedOn(E_GL_EXT_shader_tile_image)) - error(loc, "can not be used with GL_EXT_shader_tile_image enabled", type.getSampler().getString().c_str(), ""); + error(loc, "cannot be used with GL_EXT_shader_tile_image enabled", type.getSampler().getString().c_str(), + ""); if (! qualifier.hasAttachment()) error(loc, "requires an input_attachment_index layout qualifier", "subpass", ""); } else { @@ -7011,6 +7213,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", ""); @@ -7109,8 +7312,8 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier } if (qualifier.hasBinding()) { - if (! qualifier.isUniformOrBuffer() && !qualifier.isTaskMemory()) - error(loc, "requires uniform or buffer storage qualifier", "binding", ""); + if (! qualifier.isUniformOrBuffer() && !qualifier.isTaskMemory() && !qualifier.isTileAttachmentQCOM()) + error(loc, "requires uniform or buffer or tile image storage qualifier", "binding", ""); } if (qualifier.hasStream()) { if (!qualifier.isPipeOutput()) @@ -7215,6 +7418,15 @@ void TParseContext::checkNoShaderLayouts(const TSourceLoc& loc, const TShaderQua error(loc, message, TQualifier::getInterlockOrderingString(shaderQualifiers.interlockOrdering), ""); if (shaderQualifiers.layoutPrimitiveCulling) error(loc, "can only be applied as standalone", "primitive_culling", ""); + + if (shaderQualifiers.layoutNonCoherentTileAttachmentReadQCOM) + error(loc, message, "non_coherent_attachment_readQCOM", ""); + if (shaderQualifiers.layoutTileShadingRateQCOM[0] >= 1) + error(loc, message, "shading_rate_xQCOM", ""); + if (shaderQualifiers.layoutTileShadingRateQCOM[1] >= 1) + error(loc, message, "shading_rate_yQCOM", ""); + if (shaderQualifiers.layoutTileShadingRateQCOM[2] >= 1) + error(loc, message, "shading_rate_zQCOM", ""); } // Correct and/or advance an object's offset layout qualifier. @@ -7304,7 +7516,9 @@ const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunct else if (version < 120) function = findFunctionExact(loc, call, builtIn); else if (version < 400) { - bool needfindFunction400 = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) || extensionTurnedOn(E_GL_ARB_gpu_shader5); + bool needfindFunction400 = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) + || extensionTurnedOn(E_GL_ARB_gpu_shader5) + || extensionTurnedOn(E_GL_NV_gpu_shader5); function = needfindFunction400 ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn); } else if (explicitTypesEnabled) @@ -7460,6 +7674,8 @@ const TFunction* TParseContext::findFunction400(const TSourceLoc& loc, const TFu return true; if (from.getBasicType() == EbtFunction && to.getBasicType() == EbtFunction) return true; + if (from.coopVecParameterOK(to)) + return true; // Allow a sized array to be passed through an unsized array parameter, for coopMatLoad/Store functions if (builtIn && from.isArray() && to.isUnsizedArray()) { TType fromElementType(from, 0); @@ -7477,19 +7693,43 @@ const TFunction* TParseContext::findFunction400(const TSourceLoc& loc, const TFu return false; if (from.isCoopMat() && to.isCoopMat()) return from.sameCoopMatBaseType(to); + if (from.isCoopVecNV() && to.isCoopVecNV()) + return from.sameCoopVecBaseType(to); return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType()); }; // Is 'to2' a better conversion than 'to1'? // Ties should not be considered as better. // Assumes 'convertible' already said true. - const auto better = [](const TType& from, const TType& to1, const TType& to2) -> bool { + const auto better = [&](const TType& from, const TType& to1, const TType& to2) -> bool { // 1. exact match if (from == to2) return from != to1; if (from == to1) return false; - + if (extensionTurnedOn(E_GL_NV_gpu_shader5)) { + // This map refers to the conversion table mentioned under the + // section "Modify Section 6.1, Function Definitions, p. 63" in NV_gpu_shader5 spec + const static std::map> conversionTable = { + {EbtInt8, {EbtInt, EbtInt64}}, + {EbtInt16, {EbtInt, EbtInt64}}, + {EbtInt, {EbtInt64}}, + {EbtUint8, {EbtUint, EbtUint64}}, + {EbtUint16, {EbtUint, EbtUint64}}, + {EbtUint, {EbtUint64}}, + }; + auto source = conversionTable.find(from.getBasicType()); + if (source != conversionTable.end()) { + for (auto destination : source->second) { + if (to2.getBasicType() == destination && + to1.getBasicType() != destination) // to2 is better then to1 + return true; + else if (to1.getBasicType() == destination && + to2.getBasicType() != destination) // This means to1 is better then to2 + return false; + } + } + } // 2. float -> double is better if (from.getBasicType() == EbtFloat) { if (to2.getBasicType() == EbtDouble && to1.getBasicType() != EbtDouble) @@ -7546,6 +7786,8 @@ const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc, return true; if (from.getBasicType() == EbtFunction && to.getBasicType() == EbtFunction) return true; + if (from.coopVecParameterOK(to)) + return true; // Allow a sized array to be passed through an unsized array parameter, for coopMatLoad/Store functions if (builtIn && from.isArray() && to.isUnsizedArray()) { TType fromElementType(from, 0); @@ -7563,6 +7805,8 @@ const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc, return false; if (from.isCoopMat() && to.isCoopMat()) return from.sameCoopMatBaseType(to); + if (from.isCoopVecNV() && to.isCoopVecNV()) + return from.sameCoopVecBaseType(to); return intermediate.canImplicitlyPromote(from.getBasicType(), to.getBasicType()); }; @@ -7698,7 +7942,7 @@ void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType warn(loc, "useless application of layout qualifier", "layout", ""); } -void TParseContext::coopMatTypeParametersCheck(const TSourceLoc& loc, const TPublicType& publicType) +void TParseContext::typeParametersCheck(const TSourceLoc& loc, const TPublicType& publicType) { if (parsingBuiltins) return; @@ -7710,6 +7954,7 @@ void TParseContext::coopMatTypeParametersCheck(const TSourceLoc& loc, const TPub switch (publicType.typeParameters->basicType) { case EbtFloat: case EbtFloat16: + case EbtBFloat16: case EbtInt: case EbtInt8: case EbtInt16: @@ -8155,10 +8400,9 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden intermediate.setUseVulkanMemoryModel(); intermediate.setUseStorageBuffer(); - if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() != 4) { + if (!publicType.typeParameters || !publicType.typeParameters->arraySizes || publicType.typeParameters->arraySizes->getNumDims() != 4) { error(loc, "expected four type parameters", identifier.c_str(), ""); - } - if (publicType.typeParameters) { + } else { if (isTypeFloat(publicType.basicType) && publicType.typeParameters->arraySizes->getDimSize(0) != 16 && publicType.typeParameters->arraySizes->getDimSize(0) != 32 && @@ -8180,6 +8424,15 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() > 7) { error(loc, "expected 1-7 type parameters", identifier.c_str(), ""); } + } else if (type.isCoopVecNV()) { + intermediate.setUseVulkanMemoryModel(); + intermediate.setUseStorageBuffer(); + + if (!publicType.typeParameters || !publicType.typeParameters->arraySizes || publicType.typeParameters->arraySizes->getNumDims() != 1) { + error(loc, "expected two type parameters", identifier.c_str(), ""); + } else if (publicType.typeParameters->arraySizes->getDimSize(0) <= 0) { + error(loc, "expected positive number of components", identifier.c_str(), ""); + } } else { if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() != 0) { error(loc, "unexpected type parameters", identifier.c_str(), ""); @@ -8212,6 +8465,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(); @@ -8882,6 +9138,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: @@ -9023,6 +9286,27 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T return nullptr; } + case EOpConstructCooperativeVectorNV: + if (!node->getType().isCoopVecNV()) { + if (type.getBasicType() != node->getType().getBasicType()) { + node = intermediate.addConversion(type.getBasicType(), node); + if (node == nullptr) + return nullptr; + } + } + if (type.getBasicType() != node->getType().getBasicType()) { + intermediate.buildConvertOp(type.getBasicType(), node->getType().getBasicType(), op); + node = intermediate.addUnaryNode(op, node, node->getLoc(), type); + return node; + } + if (subset) { + return node; + } + + node = intermediate.setAggregateOperator(node, op, type, node->getLoc()); + + return node; + case EOpConstructCooperativeMatrixNV: case EOpConstructCooperativeMatrixKHR: if (node->getType() == type) { @@ -9116,6 +9400,8 @@ void TParseContext::inheritMemoryQualifiers(const TQualifier& from, TQualifier& to.coherent = from.coherent; if (from.volatil) to.volatil = from.volatil; + if (from.nontemporal) + to.nontemporal = from.nontemporal; if (from.restrict) to.restrict = from.restrict; } @@ -9204,6 +9490,9 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con if (memberType.containsCoopMat()) error(memberLoc, "member of block cannot be or contain a cooperative matrix type", typeList[member].type->getFieldName().c_str(), ""); + + if (memberType.containsCoopVec()) + error(memberLoc, "member of block cannot be or contain a cooperative vector type", typeList[member].type->getFieldName().c_str(), ""); } // This might be a redeclaration of a built-in block. If so, redeclareBuiltinBlock() will @@ -10127,6 +10416,12 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con else error(loc, "can only apply to 'in'", "non_coherent_stencil_attachment_readEXT", ""); } + if (publicType.shaderQualifiers.layoutNonCoherentTileAttachmentReadQCOM) { + if (publicType.qualifier.storage == EvqVaryingIn) + intermediate.setNonCoherentTileAttachmentReadQCOM(); + else + error(loc, "can only apply to 'in'", "non_coherent_attachment_readQCOM", ""); + } if (publicType.shaderQualifiers.hasBlendEquation()) { if (publicType.qualifier.storage != EvqVaryingOut) error(loc, "can only apply to 'out'", "blend equation", ""); @@ -10182,7 +10477,7 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con if (publicType.shaderQualifiers.layoutPrimitiveCulling) { if (publicType.qualifier.storage != EvqTemporary) - error(loc, "layout qualifier can not have storage qualifiers", "primitive_culling","", ""); + error(loc, "layout qualifier cannot have storage qualifiers", "primitive_culling", "", ""); else { intermediate.setLayoutPrimitiveCulling(); } @@ -10190,6 +10485,16 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con return; } + for (int i = 0; i < 3; ++i) { + if (publicType.shaderQualifiers.layoutTileShadingRateQCOMNotDefault[i]) { + if (publicType.qualifier.storage == EvqVaryingIn) { + if (! intermediate.setTileShadingRateQCOM(i, publicType.shaderQualifiers.layoutTileShadingRateQCOM[i])) + error(loc, "cannot change previously set size", (i==0?"shading_rate_xQCOM":(i==1?"shading_rate_yQCOM":"shading_rate_zQCOM")), ""); + } else + error(loc, "can only apply to 'in'", (i==0?"shading_rate_xQCOM":(i==1?"shading_rate_yQCOM":"shading_rate_zQCOM")), ""); + } + } + const TQualifier& qualifier = publicType.qualifier; if (qualifier.isAuxiliary() || diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h index 5b192c1..47a7299 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ParseHelper.h @@ -407,7 +407,7 @@ class TParseContext : public TParseContextBase { void setDefaultPrecision(const TSourceLoc&, TPublicType&, TPrecisionQualifier); int computeSamplerTypeIndex(TSampler&); TPrecisionQualifier getDefaultPrecision(TPublicType&); - void precisionQualifierCheck(const TSourceLoc&, TBasicType, TQualifier&, bool isCoopMat); + void precisionQualifierCheck(const TSourceLoc&, TBasicType, TQualifier&, bool isCoopMatOrVec); void parameterTypeCheck(const TSourceLoc&, TStorageQualifier qualifier, const TType& type); bool containsFieldWithBasicType(const TType& type ,TBasicType basicType); TSymbol* redeclareBuiltinVariable(const TSourceLoc&, const TString&, const TQualifier&, const TShaderQualifiers&); @@ -425,7 +425,7 @@ class TParseContext : public TParseContextBase { void inductiveLoopCheck(const TSourceLoc&, TIntermNode* init, TIntermLoop* loop); void arrayLimitCheck(const TSourceLoc&, const TString&, int size); void limitCheck(const TSourceLoc&, int value, const char* limit, const char* feature); - void coopMatTypeParametersCheck(const TSourceLoc&, const TPublicType&); + void typeParametersCheck(const TSourceLoc&, const TPublicType&); void inductiveLoopBodyCheck(TIntermNode*, long long loopIndexId, TSymbolTable&); void constantIndexExpressionCheck(TIntermNode*); diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp index 414251e..4705d93 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Scan.cpp @@ -408,6 +408,7 @@ const std::unordered_map KeywordMap { {"writeonly",WRITEONLY}, {"atomic_uint",ATOMIC_UINT}, {"volatile",VOLATILE}, + {"nontemporal",NONTEMPORAL}, {"patch",PATCH}, {"sample",SAMPLE}, {"subroutine",SUBROUTINE}, @@ -536,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}, @@ -756,6 +762,8 @@ const std::unordered_map KeywordMap { {"__function",FUNCTION}, {"tensorLayoutNV",TENSORLAYOUTNV}, {"tensorViewNV",TENSORVIEWNV}, + + {"coopvecNV",COOPVECNV}, }; const std::unordered_set ReservedSet { "common", @@ -1104,6 +1112,15 @@ int TScanContext::tokenizeIdentifier() (parseContext.version < 420 && ! parseContext.extensionTurnedOn(E_GL_ARB_shader_image_load_store)))) reservedWord(); return keyword; + case NONTEMPORAL: + if (parseContext.symbolTable.atBuiltInLevel()) + return keyword; + if (parseContext.extensionTurnedOn(E_GL_EXT_nontemporal_keyword)) { + if (!parseContext.intermediate.usingVulkanMemoryModel()) + parseContext.warn(loc, "Nontemporal without the Vulkan Memory Model is ignored", tokenText, ""); + return keyword; + } + return identifierOrType(); case PATCH: if (parseContext.symbolTable.atBuiltInLevel() || (parseContext.isEsProfile() && @@ -1114,12 +1131,16 @@ int TScanContext::tokenizeIdentifier() return es30ReservedFromGLSL(400); - case SAMPLE: + case SAMPLE: + { + const int numLayoutExts = 3; + const char* layoutExts[numLayoutExts] = {E_GL_OES_shader_multisample_interpolation, E_GL_ARB_gpu_shader5, + E_GL_NV_gpu_shader5}; if ((parseContext.isEsProfile() && parseContext.version >= 320) || - parseContext.extensionsTurnedOn(1, &E_GL_OES_shader_multisample_interpolation)) + parseContext.extensionsTurnedOn(numLayoutExts, layoutExts)) return keyword; return es30ReservedFromGLSL(400); - + } case SUBROUTINE: return es30ReservedFromGLSL(400); @@ -1311,6 +1332,7 @@ int TScanContext::tokenizeIdentifier() if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_int64) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) || + parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int64)) return keyword; return identifierOrType(); @@ -1327,6 +1349,7 @@ int TScanContext::tokenizeIdentifier() if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) || parseContext.extensionTurnedOn(E_GL_EXT_shader_8bit_storage) || + parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8)) return keyword; return identifierOrType(); @@ -1344,6 +1367,7 @@ int TScanContext::tokenizeIdentifier() parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_int16) || parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) || + parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16)) return keyword; return identifierOrType(); @@ -1358,6 +1382,7 @@ int TScanContext::tokenizeIdentifier() afterType = true; if (parseContext.symbolTable.atBuiltInLevel() || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) || + parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int32)) return keyword; return identifierOrType(); @@ -1365,6 +1390,13 @@ int TScanContext::tokenizeIdentifier() case F32VEC2: case F32VEC3: case F32VEC4: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) || + parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) || + parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float32)) + return keyword; + return identifierOrType(); case F32MAT2: case F32MAT3: case F32MAT4: @@ -1388,6 +1420,14 @@ int TScanContext::tokenizeIdentifier() case F64VEC2: case F64VEC3: case F64VEC4: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) || + (parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) && + parseContext.extensionTurnedOn(E_GL_ARB_gpu_shader_fp64)) || + parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64)) + return keyword; + return identifierOrType(); case F64MAT2: case F64MAT3: case F64MAT4: @@ -1416,6 +1456,7 @@ int TScanContext::tokenizeIdentifier() parseContext.extensionTurnedOn(E_GL_AMD_gpu_shader_half_float) || parseContext.extensionTurnedOn(E_GL_EXT_shader_16bit_storage) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) || + parseContext.extensionTurnedOn(E_GL_NV_gpu_shader5) || parseContext.extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float16)) return keyword; @@ -1442,6 +1483,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: @@ -1450,7 +1502,9 @@ int TScanContext::tokenizeIdentifier() if ((parseContext.isEsProfile() && parseContext.version >= 320) || parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array)) return keyword; - if (parseContext.isEsProfile() || (parseContext.version < 400 && ! parseContext.extensionTurnedOn(E_GL_ARB_texture_cube_map_array))) + if (parseContext.isEsProfile() || (parseContext.version < 400 && + ! parseContext.extensionTurnedOn(E_GL_ARB_texture_cube_map_array) + && ! parseContext.extensionsTurnedOn(Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5))) reservedWord(); return keyword; @@ -1731,7 +1785,9 @@ int TScanContext::tokenizeIdentifier() case PRECISE: if ((parseContext.isEsProfile() && (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) || - (!parseContext.isEsProfile() && parseContext.version >= 400)) + (!parseContext.isEsProfile() && + (parseContext.version >= 400 + || parseContext.extensionsTurnedOn(Num_AEP_core_gpu_shader5, AEP_core_gpu_shader5)))) return keyword; if (parseContext.isEsProfile() && parseContext.version == 310) { reservedWord(); @@ -1776,6 +1832,13 @@ int TScanContext::tokenizeIdentifier() return keyword; return identifierOrType(); + case COOPVECNV: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_NV_cooperative_vector)) + return keyword; + return identifierOrType(); + case DEMOTE: if (parseContext.extensionTurnedOn(E_GL_EXT_demote_to_helper_invocation)) return keyword; diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp index 040b21d..62d7253 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp +++ b/libs/bgfx/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 @@ -2171,6 +2200,7 @@ bool TProgram::buildReflection(int opts) } unsigned TProgram::getLocalSize(int dim) const { return reflection->getLocalSize(dim); } +unsigned TProgram::getTileShadingRateQCOM(int dim) const { return reflection->getTileShadingRateQCOM(dim); } int TProgram::getReflectionIndex(const char* name) const { return reflection->getIndex(name); } int TProgram::getReflectionPipeIOIndex(const char* name, const bool inOrOut) const { return reflection->getPipeIOIndex(name, inOrOut); } diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp index 8036260..fcfa5df 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp @@ -60,6 +60,9 @@ void TType::buildMangledName(TString& mangledName) const else if (isVector()) mangledName += 'v'; + if (isCoopVecNV()) + mangledName += "coopvec"; + switch (basicType) { case EbtFloat: mangledName += 'f'; break; case EbtInt: mangledName += 'i'; break; @@ -67,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; @@ -163,6 +167,23 @@ void TType::buildMangledName(TString& mangledName) const mangledName += static_cast('0' + getMatrixRows()); } + if (typeParameters) { + const int maxSize = 11; + char buf[maxSize]; + for (int i = 0; i < typeParameters->arraySizes->getNumDims(); ++i) { + if (typeParameters->arraySizes->getDimNode(i)) { + if (typeParameters->arraySizes->getDimNode(i)->getAsSymbolNode()) + snprintf(buf, maxSize, "s%lld", typeParameters->arraySizes->getDimNode(i)->getAsSymbolNode()->getId()); + else + snprintf(buf, maxSize, "s%p", typeParameters->arraySizes->getDimNode(i)); + } else + snprintf(buf, maxSize, "%d", typeParameters->arraySizes->getDimSize(i)); + mangledName += '<'; + mangledName += buf; + mangledName += '>'; + } + } + if (arraySizes) { const int maxSize = 11; char buf[maxSize]; diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp index cbfae6c..63ad51a 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.cpp @@ -188,7 +188,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_3DL_array_objects] = EBhDisable; extensionBehavior[E_GL_ARB_shading_language_420pack] = EBhDisable; extensionBehavior[E_GL_ARB_texture_gather] = EBhDisable; - extensionBehavior[E_GL_ARB_gpu_shader5] = EBhDisablePartial; + extensionBehavior[E_GL_ARB_gpu_shader5] = EBhDisable; extensionBehavior[E_GL_ARB_separate_shader_objects] = EBhDisable; extensionBehavior[E_GL_ARB_compute_shader] = EBhDisable; extensionBehavior[E_GL_ARB_tessellation_shader] = EBhDisable; @@ -225,6 +225,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_ARB_shading_language_packing] = EBhDisable; extensionBehavior[E_GL_ARB_texture_query_lod] = EBhDisable; extensionBehavior[E_GL_ARB_vertex_attrib_64bit] = EBhDisable; + extensionBehavior[E_GL_NV_gpu_shader5] = EBhDisable; extensionBehavior[E_GL_ARB_draw_instanced] = EBhDisable; extensionBehavior[E_GL_ARB_bindless_texture] = EBhDisable; extensionBehavior[E_GL_ARB_fragment_coord_conventions] = EBhDisable; @@ -269,6 +270,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_spec_constant_composites] = EBhDisable; extensionBehavior[E_GL_KHR_cooperative_matrix] = EBhDisable; + extensionBehavior[E_GL_NV_cooperative_vector] = EBhDisable; // #line and #include extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhDisable; @@ -312,6 +314,8 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_NV_displacement_micromap] = EBhDisable; extensionBehavior[E_GL_NV_shader_atomic_fp16_vector] = EBhDisable; extensionBehavior[E_GL_NV_cooperative_matrix2] = EBhDisable; + extensionBehavior[E_GL_NV_cluster_acceleration_structure] = EBhDisable; + extensionBehavior[E_GL_NV_linear_swept_spheres] = EBhDisable; // ARM extensionBehavior[E_GL_ARM_shader_core_builtins] = EBhDisable; @@ -319,6 +323,7 @@ void TParseVersions::initializeExtensionBehavior() // QCOM extensionBehavior[E_GL_QCOM_image_processing] = EBhDisable; extensionBehavior[E_GL_QCOM_image_processing2] = EBhDisable; + extensionBehavior[E_GL_QCOM_tile_shading] = EBhDisable; // AEP extensionBehavior[E_GL_ANDROID_extension_pack_es31a] = EBhDisable; @@ -373,6 +378,9 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_texture_shadow_lod] = EBhDisable; extensionBehavior[E_GL_EXT_draw_instanced] = EBhDisable; 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; @@ -396,6 +404,8 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_shader_atomic_float] = EBhDisable; extensionBehavior[E_GL_EXT_shader_atomic_float2] = EBhDisable; + extensionBehavior[E_GL_EXT_integer_dot_product] = EBhDisable; + // Record extensions not for spv. spvUnsupportedExt.push_back(E_GL_ARB_bindless_texture); } @@ -451,6 +461,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_QCOM_image_processing 1\n" "#define GL_QCOM_image_processing2 1\n" + "#define GL_QCOM_tile_shading 1\n" ; if (version >= 300) { @@ -501,6 +512,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_ARB_shader_storage_buffer_object 1\n" "#define GL_ARB_texture_query_lod 1\n" "#define GL_ARB_vertex_attrib_64bit 1\n" + "#define GL_NV_gpu_shader5 1\n" "#define GL_ARB_draw_instanced 1\n" "#define GL_ARB_fragment_coord_conventions 1\n" @@ -580,6 +592,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_QCOM_image_processing 1\n" "#define GL_QCOM_image_processing2 1\n" + "#define GL_QCOM_tile_shading 1\n" "#define GL_EXT_shader_explicit_arithmetic_types 1\n" "#define GL_EXT_shader_explicit_arithmetic_types_int8 1\n" @@ -603,6 +616,9 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_texture_array 1\n" "#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) { @@ -635,6 +651,11 @@ void TParseVersions::getPreamble(std::string& preamble) ; } + if ((!isEsProfile() && version >= 130) || + (isEsProfile() && version >= 300)) { + preamble += "#define GL_EXT_texture_offset_non_const 1\n"; + } + if (version >= 300 /* both ES and non-ES */) { preamble += "#define GL_OVR_multiview 1\n" @@ -1061,6 +1082,9 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_int16, on); else if (strcmp(extension, "GL_AMD_gpu_shader_half_float") == 0) intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_half_float, on); + else if (strcmp(extension, "GL_NV_gpu_shader5") == 0) { + intermediate.updateNumericFeature(TNumericFeatures::nv_gpu_shader5_types, on); + } } void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior) @@ -1188,6 +1212,7 @@ bool TParseVersions::float16Arithmetic() const char* const extensions[] = { E_GL_AMD_gpu_shader_half_float, E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_float16}; return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions); } @@ -1197,6 +1222,7 @@ bool TParseVersions::int16Arithmetic() const char* const extensions[] = { E_GL_AMD_gpu_shader_int16, E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int16}; return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions); } @@ -1205,6 +1231,7 @@ bool TParseVersions::int8Arithmetic() { const char* const extensions[] = { E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int8}; return extensionsTurnedOn(sizeof(extensions)/sizeof(extensions[0]), extensions); } @@ -1219,6 +1246,7 @@ void TParseVersions::requireFloat16Arithmetic(const TSourceLoc& loc, const char* const char* const extensions[] = { E_GL_AMD_gpu_shader_half_float, E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_float16}; requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str()); } @@ -1233,6 +1261,7 @@ void TParseVersions::requireInt16Arithmetic(const TSourceLoc& loc, const char* o const char* const extensions[] = { E_GL_AMD_gpu_shader_int16, E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int16}; requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str()); } @@ -1246,6 +1275,7 @@ void TParseVersions::requireInt8Arithmetic(const TSourceLoc& loc, const char* op const char* const extensions[] = { E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int8}; requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, combined.c_str()); } @@ -1257,18 +1287,30 @@ void TParseVersions::float16ScalarVectorCheck(const TSourceLoc& loc, const char* E_GL_AMD_gpu_shader_half_float, E_GL_EXT_shader_16bit_storage, E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_float16}; requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); } } +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) { if (!builtIn) { - const char* const extensions[2] = {E_GL_EXT_shader_explicit_arithmetic_types, + const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_float32}; - requireExtensions(loc, 2, extensions, op); + requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op); } } @@ -1276,11 +1318,15 @@ void TParseVersions::explicitFloat32Check(const TSourceLoc& loc, const char* op, void TParseVersions::explicitFloat64Check(const TSourceLoc& loc, const char* op, bool builtIn) { if (!builtIn) { - const char* const extensions[2] = {E_GL_EXT_shader_explicit_arithmetic_types, + const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_float64}; - requireExtensions(loc, 2, extensions, op); + requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op); requireProfile(loc, ECoreProfile | ECompatibilityProfile, op); - profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op); + if(extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) && extensionTurnedOn(E_GL_NV_gpu_shader5)) + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 150, nullptr, op); + else + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op); } } @@ -1323,6 +1369,7 @@ void TParseVersions::int16ScalarVectorCheck(const TSourceLoc& loc, const char* o E_GL_AMD_gpu_shader_int16, E_GL_EXT_shader_16bit_storage, E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int16}; requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); } @@ -1334,6 +1381,7 @@ void TParseVersions::int8ScalarVectorCheck(const TSourceLoc& loc, const char* op const char* const extensions[] = { E_GL_EXT_shader_8bit_storage, E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int8}; requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); } @@ -1343,9 +1391,10 @@ void TParseVersions::int8ScalarVectorCheck(const TSourceLoc& loc, const char* op void TParseVersions::explicitInt32Check(const TSourceLoc& loc, const char* op, bool builtIn) { if (! builtIn) { - const char* const extensions[2] = {E_GL_EXT_shader_explicit_arithmetic_types, + const char* const extensions[] = {E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int32}; - requireExtensions(loc, 2, extensions, op); + requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op); } } @@ -1353,11 +1402,15 @@ void TParseVersions::explicitInt32Check(const TSourceLoc& loc, const char* op, b void TParseVersions::int64Check(const TSourceLoc& loc, const char* op, bool builtIn) { if (! builtIn) { - const char* const extensions[3] = {E_GL_ARB_gpu_shader_int64, + const char* const extensions[] = {E_GL_ARB_gpu_shader_int64, E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int64}; - requireExtensions(loc, 3, extensions, op); + requireExtensions(loc, sizeof(extensions) / sizeof(extensions[0]), extensions, op); requireProfile(loc, ECoreProfile | ECompatibilityProfile, op); + if (extensionTurnedOn(E_GL_NV_gpu_shader5)) + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 150, nullptr, op); + else profileRequires(loc, ECoreProfile | ECompatibilityProfile, 400, nullptr, op); } } @@ -1394,6 +1447,22 @@ void TParseVersions::tensorLayoutViewCheck(const TSourceLoc& loc, const char* op } } +void TParseVersions::coopvecCheck(const TSourceLoc& loc, const char* op, bool builtIn) +{ + if (!builtIn) { + const char* const extensions[] = {E_GL_NV_cooperative_vector}; + requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + } +} + +void TParseVersions::intattachmentCheck(const TSourceLoc& loc, const char* op, bool builtIn) +{ + if (!builtIn) { + const char* const extensions[] = {E_GL_QCOM_tile_shading}; + requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op); + } +} + // Call for any operation removed because SPIR-V is in use. void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op) { diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h index 4541381..bf7bfc0 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/Versions.h @@ -4,6 +4,7 @@ // Copyright (C) 2017, 2022-2024 Arm Limited. // Copyright (C) 2015-2018 Google, Inc. // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. +// Modifications Copyright (C) 2024 Valve Corporation. // // All rights reserved. // @@ -223,6 +224,8 @@ const char* const E_GL_EXT_maximal_reconvergence = "GL_EXT_maximal_re const char* const E_GL_EXT_expect_assume = "GL_EXT_expect_assume"; const char* const E_GL_EXT_control_flow_attributes2 = "GL_EXT_control_flow_attributes2"; const char* const E_GL_EXT_spec_constant_composites = "GL_EXT_spec_constant_composites"; +const char* const E_GL_EXT_texture_offset_non_const = "GL_EXT_texture_offset_non_const"; +const char* const E_GL_EXT_nontemporal_keyword = "GL_EXT_nontemporal_keyword"; // Arrays of extensions for the above viewportEXTs duplications @@ -283,6 +286,10 @@ const char* const E_GL_EXT_ray_tracing_position_fetch = "GL_EXT_ray_tr const char* const E_GL_NV_displacement_micromap = "GL_NV_displacement_micromap"; const char* const E_GL_NV_shader_atomic_fp16_vector = "GL_NV_shader_atomic_fp16_vector"; const char* const E_GL_NV_cooperative_matrix2 = "GL_NV_cooperative_matrix2"; +const char* const E_GL_NV_cooperative_vector = "GL_NV_cooperative_vector"; +const char* const E_GL_NV_cluster_acceleration_structure = "GL_NV_cluster_acceleration_structure"; +const char* const E_GL_NV_linear_swept_spheres = "GL_NV_linear_swept_spheres"; +const char* const E_GL_NV_gpu_shader5 = "GL_NV_gpu_shader5"; // ARM const char* const E_GL_ARM_shader_core_builtins = "GL_ARM_shader_core_builtins"; @@ -295,6 +302,7 @@ const int Num_viewportEXTs = sizeof(viewportEXTs) / sizeof(viewportEXTs[0]); const char* const E_GL_QCOM_image_processing = "GL_QCOM_image_processing"; const char* const E_GL_QCOM_image_processing2 = "GL_QCOM_image_processing2"; +const char* const E_GL_QCOM_tile_shading = "GL_QCOM_tile_shading"; // AEP const char* const E_GL_ANDROID_extension_pack_es31a = "GL_ANDROID_extension_pack_es31a"; @@ -348,6 +356,10 @@ const char* const E_GL_EXT_shader_tile_image = "GL_EXT_shader_tile_image"; 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 }; @@ -359,6 +371,9 @@ const int Num_AEP_geometry_point_size = sizeof(AEP_geometry_point_size)/sizeof(A const char* const AEP_gpu_shader5[] = { E_GL_EXT_gpu_shader5, E_GL_OES_gpu_shader5 }; const int Num_AEP_gpu_shader5 = sizeof(AEP_gpu_shader5)/sizeof(AEP_gpu_shader5[0]); +const char* const AEP_core_gpu_shader5[] = { E_GL_ARB_gpu_shader5, E_GL_NV_gpu_shader5}; +const int Num_AEP_core_gpu_shader5 = sizeof(AEP_core_gpu_shader5)/sizeof(AEP_core_gpu_shader5[0]); + const char* const AEP_primitive_bounding_box[] = { E_GL_EXT_primitive_bounding_box, E_GL_OES_primitive_bounding_box }; const int Num_AEP_primitive_bounding_box = sizeof(AEP_primitive_bounding_box)/sizeof(AEP_primitive_bounding_box[0]); diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y index 90ac3c8..006ca16 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang.y +++ b/libs/bgfx/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 @@ -178,6 +179,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token RAYQUERYEXT %token FCOOPMATNV ICOOPMATNV UCOOPMATNV %token COOPMAT +%token COOPVECNV %token HITOBJECTNV HITOBJECTATTRNV %token TENSORLAYOUTNV TENSORVIEWNV @@ -280,7 +282,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV %token PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT %token PATCH SAMPLE NONUNIFORM -%token COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT +%token COHERENT VOLATILE RESTRICT READONLY WRITEONLY NONTEMPORAL DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT %token SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT %token NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXEXT PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV PERPRIMITIVEEXT TASKPAYLOADWORKGROUPEXT %token PRECISE @@ -1105,7 +1107,7 @@ parameter_declaration $$ = $2; if ($1.qualifier.precision != EpqNone) $$.param.type->getQualifier().precision = $1.qualifier.precision; - parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMat()); + parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMatOrVec()); parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type); @@ -1117,7 +1119,7 @@ parameter_declaration parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type); parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type); - parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMat()); + parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMatOrVec()); } // // Without name @@ -1126,7 +1128,7 @@ parameter_declaration $$ = $2; if ($1.qualifier.precision != EpqNone) $$.param.type->getQualifier().precision = $1.qualifier.precision; - parseContext.precisionQualifierCheck($1.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMat()); + parseContext.precisionQualifierCheck($1.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMatOrVec()); parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); parseContext.parameterTypeCheck($2.loc, $1.qualifier.storage, *$$.param.type); @@ -1137,7 +1139,7 @@ parameter_declaration parseContext.parameterTypeCheck($1.loc, EvqIn, *$1.param.type); parseContext.paramCheckFixStorage($1.loc, EvqTemporary, *$$.param.type); - parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMat()); + parseContext.precisionQualifierCheck($$.loc, $$.param.type->getBasicType(), $$.param.type->getQualifier(), $$.param.type->isCoopMatOrVec()); } ; @@ -1212,7 +1214,7 @@ fully_specified_type parseContext.profileRequires($1.loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); parseContext.profileRequires($1.loc, EEsProfile, 300, 0, "arrayed type"); } - parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier, $$.isCoopmat()); + parseContext.precisionQualifierCheck($$.loc, $$.basicType, $$.qualifier, $$.isCoopmatOrvec()); } | type_qualifier type_specifier { parseContext.globalQualifierFixCheck($1.loc, $1.qualifier, false, &$2); @@ -1229,7 +1231,7 @@ fully_specified_type parseContext.checkNoShaderLayouts($2.loc, $1.shaderQualifiers); $2.shaderQualifiers.merge($1.shaderQualifiers); parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); - parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier, $2.isCoopmat()); + parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier, $2.isCoopmatOrvec()); $$ = $2; @@ -1657,6 +1659,10 @@ storage_qualifier $$.init($1.loc); $$.qualifier.writeonly = true; } + | NONTEMPORAL { + $$.init($1.loc); + $$.qualifier.nontemporal = true; + } | SUBROUTINE { parseContext.spvRemoved($1.loc, "subroutine"); parseContext.globalCheck($1.loc, "subroutine"); @@ -1701,7 +1707,7 @@ type_specifier $$ = $1; $$.qualifier.precision = parseContext.getDefaultPrecision($$); $$.typeParameters = $2; - parseContext.coopMatTypeParametersCheck($1.loc, $$); + parseContext.typeParametersCheck($1.loc, $$); } | type_specifier_nonarray type_parameter_specifier_opt array_specifier { @@ -1710,7 +1716,7 @@ type_specifier $$.qualifier.precision = parseContext.getDefaultPrecision($$); $$.typeParameters = $2; $$.arraySizes = $3.arraySizes; - parseContext.coopMatTypeParametersCheck($1.loc, $$); + parseContext.typeParametersCheck($1.loc, $$); } ; @@ -1932,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()); @@ -2011,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()); @@ -3550,6 +3579,12 @@ type_specifier_nonarray $$.init($1.loc); $$.basicType = EbtFunction; } + | COOPVECNV { + parseContext.coopvecCheck($1.loc, "coopvecNV", parseContext.symbolTable.atBuiltInLevel()); + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtCoopvecNV; + $$.coopvecNV = true; + } | spirv_type_specifier { parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier"); $$ = $1; @@ -3651,7 +3686,7 @@ struct_declaration $$ = $2; parseContext.voidErrorCheck($1.loc, (*$2)[0].type->getFieldName(), $1.basicType); - parseContext.precisionQualifierCheck($1.loc, $1.basicType, $1.qualifier, $1.isCoopmat()); + parseContext.precisionQualifierCheck($1.loc, $1.basicType, $1.qualifier, $1.isCoopmatOrvec()); for (unsigned int i = 0; i < $$->size(); ++i) { TType type($1); @@ -3675,7 +3710,7 @@ struct_declaration parseContext.memberQualifierCheck($1); parseContext.voidErrorCheck($2.loc, (*$3)[0].type->getFieldName(), $2.basicType); parseContext.mergeQualifiers($2.loc, $2.qualifier, $1.qualifier, true); - parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier, $2.isCoopmat()); + parseContext.precisionQualifierCheck($2.loc, $2.basicType, $2.qualifier, $2.isCoopmatOrvec()); for (unsigned int i = 0; i < $$->size(); ++i) { TType type($2); diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp index 56e568b..9cc9ac9 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp @@ -184,543 +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_HITOBJECTNV = 167, /* HITOBJECTNV */ - YYSYMBOL_HITOBJECTATTRNV = 168, /* HITOBJECTATTRNV */ - YYSYMBOL_TENSORLAYOUTNV = 169, /* TENSORLAYOUTNV */ - YYSYMBOL_TENSORVIEWNV = 170, /* TENSORVIEWNV */ - YYSYMBOL_SAMPLERCUBEARRAY = 171, /* SAMPLERCUBEARRAY */ - YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 172, /* SAMPLERCUBEARRAYSHADOW */ - YYSYMBOL_ISAMPLERCUBEARRAY = 173, /* ISAMPLERCUBEARRAY */ - YYSYMBOL_USAMPLERCUBEARRAY = 174, /* USAMPLERCUBEARRAY */ - YYSYMBOL_SAMPLER1D = 175, /* SAMPLER1D */ - YYSYMBOL_SAMPLER1DARRAY = 176, /* SAMPLER1DARRAY */ - YYSYMBOL_SAMPLER1DARRAYSHADOW = 177, /* SAMPLER1DARRAYSHADOW */ - YYSYMBOL_ISAMPLER1D = 178, /* ISAMPLER1D */ - YYSYMBOL_SAMPLER1DSHADOW = 179, /* SAMPLER1DSHADOW */ - YYSYMBOL_SAMPLER2DRECT = 180, /* SAMPLER2DRECT */ - YYSYMBOL_SAMPLER2DRECTSHADOW = 181, /* SAMPLER2DRECTSHADOW */ - YYSYMBOL_ISAMPLER2DRECT = 182, /* ISAMPLER2DRECT */ - YYSYMBOL_USAMPLER2DRECT = 183, /* USAMPLER2DRECT */ - YYSYMBOL_SAMPLERBUFFER = 184, /* SAMPLERBUFFER */ - YYSYMBOL_ISAMPLERBUFFER = 185, /* ISAMPLERBUFFER */ - YYSYMBOL_USAMPLERBUFFER = 186, /* USAMPLERBUFFER */ - YYSYMBOL_SAMPLER2DMS = 187, /* SAMPLER2DMS */ - YYSYMBOL_ISAMPLER2DMS = 188, /* ISAMPLER2DMS */ - YYSYMBOL_USAMPLER2DMS = 189, /* USAMPLER2DMS */ - YYSYMBOL_SAMPLER2DMSARRAY = 190, /* SAMPLER2DMSARRAY */ - YYSYMBOL_ISAMPLER2DMSARRAY = 191, /* ISAMPLER2DMSARRAY */ - YYSYMBOL_USAMPLER2DMSARRAY = 192, /* USAMPLER2DMSARRAY */ - YYSYMBOL_SAMPLEREXTERNALOES = 193, /* SAMPLEREXTERNALOES */ - YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 194, /* SAMPLEREXTERNAL2DY2YEXT */ - YYSYMBOL_ISAMPLER1DARRAY = 195, /* ISAMPLER1DARRAY */ - YYSYMBOL_USAMPLER1D = 196, /* USAMPLER1D */ - YYSYMBOL_USAMPLER1DARRAY = 197, /* USAMPLER1DARRAY */ - YYSYMBOL_F16SAMPLER1D = 198, /* F16SAMPLER1D */ - YYSYMBOL_F16SAMPLER2D = 199, /* F16SAMPLER2D */ - YYSYMBOL_F16SAMPLER3D = 200, /* F16SAMPLER3D */ - YYSYMBOL_F16SAMPLER2DRECT = 201, /* F16SAMPLER2DRECT */ - YYSYMBOL_F16SAMPLERCUBE = 202, /* F16SAMPLERCUBE */ - YYSYMBOL_F16SAMPLER1DARRAY = 203, /* F16SAMPLER1DARRAY */ - YYSYMBOL_F16SAMPLER2DARRAY = 204, /* F16SAMPLER2DARRAY */ - YYSYMBOL_F16SAMPLERCUBEARRAY = 205, /* F16SAMPLERCUBEARRAY */ - YYSYMBOL_F16SAMPLERBUFFER = 206, /* F16SAMPLERBUFFER */ - YYSYMBOL_F16SAMPLER2DMS = 207, /* F16SAMPLER2DMS */ - YYSYMBOL_F16SAMPLER2DMSARRAY = 208, /* F16SAMPLER2DMSARRAY */ - YYSYMBOL_F16SAMPLER1DSHADOW = 209, /* F16SAMPLER1DSHADOW */ - YYSYMBOL_F16SAMPLER2DSHADOW = 210, /* F16SAMPLER2DSHADOW */ - YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 211, /* F16SAMPLER1DARRAYSHADOW */ - YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 212, /* F16SAMPLER2DARRAYSHADOW */ - YYSYMBOL_F16SAMPLER2DRECTSHADOW = 213, /* F16SAMPLER2DRECTSHADOW */ - YYSYMBOL_F16SAMPLERCUBESHADOW = 214, /* F16SAMPLERCUBESHADOW */ - YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 215, /* F16SAMPLERCUBEARRAYSHADOW */ - YYSYMBOL_IMAGE1D = 216, /* IMAGE1D */ - YYSYMBOL_IIMAGE1D = 217, /* IIMAGE1D */ - YYSYMBOL_UIMAGE1D = 218, /* UIMAGE1D */ - YYSYMBOL_IMAGE2D = 219, /* IMAGE2D */ - YYSYMBOL_IIMAGE2D = 220, /* IIMAGE2D */ - YYSYMBOL_UIMAGE2D = 221, /* UIMAGE2D */ - YYSYMBOL_IMAGE3D = 222, /* IMAGE3D */ - YYSYMBOL_IIMAGE3D = 223, /* IIMAGE3D */ - YYSYMBOL_UIMAGE3D = 224, /* UIMAGE3D */ - YYSYMBOL_IMAGE2DRECT = 225, /* IMAGE2DRECT */ - YYSYMBOL_IIMAGE2DRECT = 226, /* IIMAGE2DRECT */ - YYSYMBOL_UIMAGE2DRECT = 227, /* UIMAGE2DRECT */ - YYSYMBOL_IMAGECUBE = 228, /* IMAGECUBE */ - YYSYMBOL_IIMAGECUBE = 229, /* IIMAGECUBE */ - YYSYMBOL_UIMAGECUBE = 230, /* UIMAGECUBE */ - YYSYMBOL_IMAGEBUFFER = 231, /* IMAGEBUFFER */ - YYSYMBOL_IIMAGEBUFFER = 232, /* IIMAGEBUFFER */ - YYSYMBOL_UIMAGEBUFFER = 233, /* UIMAGEBUFFER */ - YYSYMBOL_IMAGE1DARRAY = 234, /* IMAGE1DARRAY */ - YYSYMBOL_IIMAGE1DARRAY = 235, /* IIMAGE1DARRAY */ - YYSYMBOL_UIMAGE1DARRAY = 236, /* UIMAGE1DARRAY */ - YYSYMBOL_IMAGE2DARRAY = 237, /* IMAGE2DARRAY */ - YYSYMBOL_IIMAGE2DARRAY = 238, /* IIMAGE2DARRAY */ - YYSYMBOL_UIMAGE2DARRAY = 239, /* UIMAGE2DARRAY */ - YYSYMBOL_IMAGECUBEARRAY = 240, /* IMAGECUBEARRAY */ - YYSYMBOL_IIMAGECUBEARRAY = 241, /* IIMAGECUBEARRAY */ - YYSYMBOL_UIMAGECUBEARRAY = 242, /* UIMAGECUBEARRAY */ - YYSYMBOL_IMAGE2DMS = 243, /* IMAGE2DMS */ - YYSYMBOL_IIMAGE2DMS = 244, /* IIMAGE2DMS */ - YYSYMBOL_UIMAGE2DMS = 245, /* UIMAGE2DMS */ - YYSYMBOL_IMAGE2DMSARRAY = 246, /* IMAGE2DMSARRAY */ - YYSYMBOL_IIMAGE2DMSARRAY = 247, /* IIMAGE2DMSARRAY */ - YYSYMBOL_UIMAGE2DMSARRAY = 248, /* UIMAGE2DMSARRAY */ - YYSYMBOL_F16IMAGE1D = 249, /* F16IMAGE1D */ - YYSYMBOL_F16IMAGE2D = 250, /* F16IMAGE2D */ - YYSYMBOL_F16IMAGE3D = 251, /* F16IMAGE3D */ - YYSYMBOL_F16IMAGE2DRECT = 252, /* F16IMAGE2DRECT */ - YYSYMBOL_F16IMAGECUBE = 253, /* F16IMAGECUBE */ - YYSYMBOL_F16IMAGE1DARRAY = 254, /* F16IMAGE1DARRAY */ - YYSYMBOL_F16IMAGE2DARRAY = 255, /* F16IMAGE2DARRAY */ - YYSYMBOL_F16IMAGECUBEARRAY = 256, /* F16IMAGECUBEARRAY */ - YYSYMBOL_F16IMAGEBUFFER = 257, /* F16IMAGEBUFFER */ - YYSYMBOL_F16IMAGE2DMS = 258, /* F16IMAGE2DMS */ - YYSYMBOL_F16IMAGE2DMSARRAY = 259, /* F16IMAGE2DMSARRAY */ - YYSYMBOL_I64IMAGE1D = 260, /* I64IMAGE1D */ - YYSYMBOL_U64IMAGE1D = 261, /* U64IMAGE1D */ - YYSYMBOL_I64IMAGE2D = 262, /* I64IMAGE2D */ - YYSYMBOL_U64IMAGE2D = 263, /* U64IMAGE2D */ - YYSYMBOL_I64IMAGE3D = 264, /* I64IMAGE3D */ - YYSYMBOL_U64IMAGE3D = 265, /* U64IMAGE3D */ - YYSYMBOL_I64IMAGE2DRECT = 266, /* I64IMAGE2DRECT */ - YYSYMBOL_U64IMAGE2DRECT = 267, /* U64IMAGE2DRECT */ - YYSYMBOL_I64IMAGECUBE = 268, /* I64IMAGECUBE */ - YYSYMBOL_U64IMAGECUBE = 269, /* U64IMAGECUBE */ - YYSYMBOL_I64IMAGEBUFFER = 270, /* I64IMAGEBUFFER */ - YYSYMBOL_U64IMAGEBUFFER = 271, /* U64IMAGEBUFFER */ - YYSYMBOL_I64IMAGE1DARRAY = 272, /* I64IMAGE1DARRAY */ - YYSYMBOL_U64IMAGE1DARRAY = 273, /* U64IMAGE1DARRAY */ - YYSYMBOL_I64IMAGE2DARRAY = 274, /* I64IMAGE2DARRAY */ - YYSYMBOL_U64IMAGE2DARRAY = 275, /* U64IMAGE2DARRAY */ - YYSYMBOL_I64IMAGECUBEARRAY = 276, /* I64IMAGECUBEARRAY */ - YYSYMBOL_U64IMAGECUBEARRAY = 277, /* U64IMAGECUBEARRAY */ - YYSYMBOL_I64IMAGE2DMS = 278, /* I64IMAGE2DMS */ - YYSYMBOL_U64IMAGE2DMS = 279, /* U64IMAGE2DMS */ - YYSYMBOL_I64IMAGE2DMSARRAY = 280, /* I64IMAGE2DMSARRAY */ - YYSYMBOL_U64IMAGE2DMSARRAY = 281, /* U64IMAGE2DMSARRAY */ - YYSYMBOL_TEXTURECUBEARRAY = 282, /* TEXTURECUBEARRAY */ - YYSYMBOL_ITEXTURECUBEARRAY = 283, /* ITEXTURECUBEARRAY */ - YYSYMBOL_UTEXTURECUBEARRAY = 284, /* UTEXTURECUBEARRAY */ - YYSYMBOL_TEXTURE1D = 285, /* TEXTURE1D */ - YYSYMBOL_ITEXTURE1D = 286, /* ITEXTURE1D */ - YYSYMBOL_UTEXTURE1D = 287, /* UTEXTURE1D */ - YYSYMBOL_TEXTURE1DARRAY = 288, /* TEXTURE1DARRAY */ - YYSYMBOL_ITEXTURE1DARRAY = 289, /* ITEXTURE1DARRAY */ - YYSYMBOL_UTEXTURE1DARRAY = 290, /* UTEXTURE1DARRAY */ - YYSYMBOL_TEXTURE2DRECT = 291, /* TEXTURE2DRECT */ - YYSYMBOL_ITEXTURE2DRECT = 292, /* ITEXTURE2DRECT */ - YYSYMBOL_UTEXTURE2DRECT = 293, /* UTEXTURE2DRECT */ - YYSYMBOL_TEXTUREBUFFER = 294, /* TEXTUREBUFFER */ - YYSYMBOL_ITEXTUREBUFFER = 295, /* ITEXTUREBUFFER */ - YYSYMBOL_UTEXTUREBUFFER = 296, /* UTEXTUREBUFFER */ - YYSYMBOL_TEXTURE2DMS = 297, /* TEXTURE2DMS */ - YYSYMBOL_ITEXTURE2DMS = 298, /* ITEXTURE2DMS */ - YYSYMBOL_UTEXTURE2DMS = 299, /* UTEXTURE2DMS */ - YYSYMBOL_TEXTURE2DMSARRAY = 300, /* TEXTURE2DMSARRAY */ - YYSYMBOL_ITEXTURE2DMSARRAY = 301, /* ITEXTURE2DMSARRAY */ - YYSYMBOL_UTEXTURE2DMSARRAY = 302, /* UTEXTURE2DMSARRAY */ - YYSYMBOL_F16TEXTURE1D = 303, /* F16TEXTURE1D */ - YYSYMBOL_F16TEXTURE2D = 304, /* F16TEXTURE2D */ - YYSYMBOL_F16TEXTURE3D = 305, /* F16TEXTURE3D */ - YYSYMBOL_F16TEXTURE2DRECT = 306, /* F16TEXTURE2DRECT */ - YYSYMBOL_F16TEXTURECUBE = 307, /* F16TEXTURECUBE */ - YYSYMBOL_F16TEXTURE1DARRAY = 308, /* F16TEXTURE1DARRAY */ - YYSYMBOL_F16TEXTURE2DARRAY = 309, /* F16TEXTURE2DARRAY */ - YYSYMBOL_F16TEXTURECUBEARRAY = 310, /* F16TEXTURECUBEARRAY */ - YYSYMBOL_F16TEXTUREBUFFER = 311, /* F16TEXTUREBUFFER */ - YYSYMBOL_F16TEXTURE2DMS = 312, /* F16TEXTURE2DMS */ - YYSYMBOL_F16TEXTURE2DMSARRAY = 313, /* F16TEXTURE2DMSARRAY */ - YYSYMBOL_SUBPASSINPUT = 314, /* SUBPASSINPUT */ - YYSYMBOL_SUBPASSINPUTMS = 315, /* SUBPASSINPUTMS */ - YYSYMBOL_ISUBPASSINPUT = 316, /* ISUBPASSINPUT */ - YYSYMBOL_ISUBPASSINPUTMS = 317, /* ISUBPASSINPUTMS */ - YYSYMBOL_USUBPASSINPUT = 318, /* USUBPASSINPUT */ - YYSYMBOL_USUBPASSINPUTMS = 319, /* USUBPASSINPUTMS */ - YYSYMBOL_F16SUBPASSINPUT = 320, /* F16SUBPASSINPUT */ - YYSYMBOL_F16SUBPASSINPUTMS = 321, /* F16SUBPASSINPUTMS */ - YYSYMBOL_SPIRV_INSTRUCTION = 322, /* SPIRV_INSTRUCTION */ - YYSYMBOL_SPIRV_EXECUTION_MODE = 323, /* SPIRV_EXECUTION_MODE */ - YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 324, /* SPIRV_EXECUTION_MODE_ID */ - YYSYMBOL_SPIRV_DECORATE = 325, /* SPIRV_DECORATE */ - YYSYMBOL_SPIRV_DECORATE_ID = 326, /* SPIRV_DECORATE_ID */ - YYSYMBOL_SPIRV_DECORATE_STRING = 327, /* SPIRV_DECORATE_STRING */ - YYSYMBOL_SPIRV_TYPE = 328, /* SPIRV_TYPE */ - YYSYMBOL_SPIRV_STORAGE_CLASS = 329, /* SPIRV_STORAGE_CLASS */ - YYSYMBOL_SPIRV_BY_REFERENCE = 330, /* SPIRV_BY_REFERENCE */ - YYSYMBOL_SPIRV_LITERAL = 331, /* SPIRV_LITERAL */ - YYSYMBOL_ATTACHMENTEXT = 332, /* ATTACHMENTEXT */ - YYSYMBOL_IATTACHMENTEXT = 333, /* IATTACHMENTEXT */ - YYSYMBOL_UATTACHMENTEXT = 334, /* UATTACHMENTEXT */ - YYSYMBOL_LEFT_OP = 335, /* LEFT_OP */ - YYSYMBOL_RIGHT_OP = 336, /* RIGHT_OP */ - YYSYMBOL_INC_OP = 337, /* INC_OP */ - YYSYMBOL_DEC_OP = 338, /* DEC_OP */ - YYSYMBOL_LE_OP = 339, /* LE_OP */ - YYSYMBOL_GE_OP = 340, /* GE_OP */ - YYSYMBOL_EQ_OP = 341, /* EQ_OP */ - YYSYMBOL_NE_OP = 342, /* NE_OP */ - YYSYMBOL_AND_OP = 343, /* AND_OP */ - YYSYMBOL_OR_OP = 344, /* OR_OP */ - YYSYMBOL_XOR_OP = 345, /* XOR_OP */ - YYSYMBOL_MUL_ASSIGN = 346, /* MUL_ASSIGN */ - YYSYMBOL_DIV_ASSIGN = 347, /* DIV_ASSIGN */ - YYSYMBOL_ADD_ASSIGN = 348, /* ADD_ASSIGN */ - YYSYMBOL_MOD_ASSIGN = 349, /* MOD_ASSIGN */ - YYSYMBOL_LEFT_ASSIGN = 350, /* LEFT_ASSIGN */ - YYSYMBOL_RIGHT_ASSIGN = 351, /* RIGHT_ASSIGN */ - YYSYMBOL_AND_ASSIGN = 352, /* AND_ASSIGN */ - YYSYMBOL_XOR_ASSIGN = 353, /* XOR_ASSIGN */ - YYSYMBOL_OR_ASSIGN = 354, /* OR_ASSIGN */ - YYSYMBOL_SUB_ASSIGN = 355, /* SUB_ASSIGN */ - YYSYMBOL_STRING_LITERAL = 356, /* STRING_LITERAL */ - YYSYMBOL_LEFT_PAREN = 357, /* LEFT_PAREN */ - YYSYMBOL_RIGHT_PAREN = 358, /* RIGHT_PAREN */ - YYSYMBOL_LEFT_BRACKET = 359, /* LEFT_BRACKET */ - YYSYMBOL_RIGHT_BRACKET = 360, /* RIGHT_BRACKET */ - YYSYMBOL_LEFT_BRACE = 361, /* LEFT_BRACE */ - YYSYMBOL_RIGHT_BRACE = 362, /* RIGHT_BRACE */ - YYSYMBOL_DOT = 363, /* DOT */ - YYSYMBOL_COMMA = 364, /* COMMA */ - YYSYMBOL_COLON = 365, /* COLON */ - YYSYMBOL_EQUAL = 366, /* EQUAL */ - YYSYMBOL_SEMICOLON = 367, /* SEMICOLON */ - YYSYMBOL_BANG = 368, /* BANG */ - YYSYMBOL_DASH = 369, /* DASH */ - YYSYMBOL_TILDE = 370, /* TILDE */ - YYSYMBOL_PLUS = 371, /* PLUS */ - YYSYMBOL_STAR = 372, /* STAR */ - YYSYMBOL_SLASH = 373, /* SLASH */ - YYSYMBOL_PERCENT = 374, /* PERCENT */ - YYSYMBOL_LEFT_ANGLE = 375, /* LEFT_ANGLE */ - YYSYMBOL_RIGHT_ANGLE = 376, /* RIGHT_ANGLE */ - YYSYMBOL_VERTICAL_BAR = 377, /* VERTICAL_BAR */ - YYSYMBOL_CARET = 378, /* CARET */ - YYSYMBOL_AMPERSAND = 379, /* AMPERSAND */ - YYSYMBOL_QUESTION = 380, /* QUESTION */ - YYSYMBOL_INVARIANT = 381, /* INVARIANT */ - YYSYMBOL_HIGH_PRECISION = 382, /* HIGH_PRECISION */ - YYSYMBOL_MEDIUM_PRECISION = 383, /* MEDIUM_PRECISION */ - YYSYMBOL_LOW_PRECISION = 384, /* LOW_PRECISION */ - YYSYMBOL_PRECISION = 385, /* PRECISION */ - YYSYMBOL_PACKED = 386, /* PACKED */ - YYSYMBOL_RESOURCE = 387, /* RESOURCE */ - YYSYMBOL_SUPERP = 388, /* SUPERP */ - YYSYMBOL_FLOATCONSTANT = 389, /* FLOATCONSTANT */ - YYSYMBOL_INTCONSTANT = 390, /* INTCONSTANT */ - YYSYMBOL_UINTCONSTANT = 391, /* UINTCONSTANT */ - YYSYMBOL_BOOLCONSTANT = 392, /* BOOLCONSTANT */ - YYSYMBOL_IDENTIFIER = 393, /* IDENTIFIER */ - YYSYMBOL_TYPE_NAME = 394, /* TYPE_NAME */ - YYSYMBOL_CENTROID = 395, /* CENTROID */ - YYSYMBOL_IN = 396, /* IN */ - YYSYMBOL_OUT = 397, /* OUT */ - YYSYMBOL_INOUT = 398, /* INOUT */ - YYSYMBOL_STRUCT = 399, /* STRUCT */ - YYSYMBOL_VOID = 400, /* VOID */ - YYSYMBOL_WHILE = 401, /* WHILE */ - YYSYMBOL_BREAK = 402, /* BREAK */ - YYSYMBOL_CONTINUE = 403, /* CONTINUE */ - YYSYMBOL_DO = 404, /* DO */ - YYSYMBOL_ELSE = 405, /* ELSE */ - YYSYMBOL_FOR = 406, /* FOR */ - YYSYMBOL_IF = 407, /* IF */ - YYSYMBOL_DISCARD = 408, /* DISCARD */ - YYSYMBOL_RETURN = 409, /* RETURN */ - YYSYMBOL_SWITCH = 410, /* SWITCH */ - YYSYMBOL_CASE = 411, /* CASE */ - YYSYMBOL_DEFAULT = 412, /* DEFAULT */ - YYSYMBOL_TERMINATE_INVOCATION = 413, /* TERMINATE_INVOCATION */ - YYSYMBOL_TERMINATE_RAY = 414, /* TERMINATE_RAY */ - YYSYMBOL_IGNORE_INTERSECTION = 415, /* IGNORE_INTERSECTION */ - YYSYMBOL_UNIFORM = 416, /* UNIFORM */ - YYSYMBOL_SHARED = 417, /* SHARED */ - YYSYMBOL_BUFFER = 418, /* BUFFER */ - YYSYMBOL_TILEIMAGEEXT = 419, /* TILEIMAGEEXT */ - YYSYMBOL_FLAT = 420, /* FLAT */ - YYSYMBOL_SMOOTH = 421, /* SMOOTH */ - YYSYMBOL_LAYOUT = 422, /* LAYOUT */ - YYSYMBOL_DOUBLECONSTANT = 423, /* DOUBLECONSTANT */ - YYSYMBOL_INT16CONSTANT = 424, /* INT16CONSTANT */ - YYSYMBOL_UINT16CONSTANT = 425, /* UINT16CONSTANT */ - YYSYMBOL_FLOAT16CONSTANT = 426, /* FLOAT16CONSTANT */ - YYSYMBOL_INT32CONSTANT = 427, /* INT32CONSTANT */ - YYSYMBOL_UINT32CONSTANT = 428, /* UINT32CONSTANT */ - YYSYMBOL_INT64CONSTANT = 429, /* INT64CONSTANT */ - YYSYMBOL_UINT64CONSTANT = 430, /* UINT64CONSTANT */ - YYSYMBOL_SUBROUTINE = 431, /* SUBROUTINE */ - YYSYMBOL_DEMOTE = 432, /* DEMOTE */ - YYSYMBOL_FUNCTION = 433, /* FUNCTION */ - YYSYMBOL_PAYLOADNV = 434, /* PAYLOADNV */ - YYSYMBOL_PAYLOADINNV = 435, /* PAYLOADINNV */ - YYSYMBOL_HITATTRNV = 436, /* HITATTRNV */ - YYSYMBOL_CALLDATANV = 437, /* CALLDATANV */ - YYSYMBOL_CALLDATAINNV = 438, /* CALLDATAINNV */ - YYSYMBOL_PAYLOADEXT = 439, /* PAYLOADEXT */ - YYSYMBOL_PAYLOADINEXT = 440, /* PAYLOADINEXT */ - YYSYMBOL_HITATTREXT = 441, /* HITATTREXT */ - YYSYMBOL_CALLDATAEXT = 442, /* CALLDATAEXT */ - YYSYMBOL_CALLDATAINEXT = 443, /* CALLDATAINEXT */ - YYSYMBOL_PATCH = 444, /* PATCH */ - YYSYMBOL_SAMPLE = 445, /* SAMPLE */ - YYSYMBOL_NONUNIFORM = 446, /* NONUNIFORM */ - YYSYMBOL_COHERENT = 447, /* COHERENT */ - YYSYMBOL_VOLATILE = 448, /* VOLATILE */ - YYSYMBOL_RESTRICT = 449, /* RESTRICT */ - YYSYMBOL_READONLY = 450, /* READONLY */ - YYSYMBOL_WRITEONLY = 451, /* WRITEONLY */ - YYSYMBOL_DEVICECOHERENT = 452, /* DEVICECOHERENT */ - YYSYMBOL_QUEUEFAMILYCOHERENT = 453, /* QUEUEFAMILYCOHERENT */ - YYSYMBOL_WORKGROUPCOHERENT = 454, /* WORKGROUPCOHERENT */ - YYSYMBOL_SUBGROUPCOHERENT = 455, /* SUBGROUPCOHERENT */ - YYSYMBOL_NONPRIVATE = 456, /* NONPRIVATE */ - YYSYMBOL_SHADERCALLCOHERENT = 457, /* SHADERCALLCOHERENT */ - YYSYMBOL_NOPERSPECTIVE = 458, /* NOPERSPECTIVE */ - YYSYMBOL_EXPLICITINTERPAMD = 459, /* EXPLICITINTERPAMD */ - YYSYMBOL_PERVERTEXEXT = 460, /* PERVERTEXEXT */ - YYSYMBOL_PERVERTEXNV = 461, /* PERVERTEXNV */ - YYSYMBOL_PERPRIMITIVENV = 462, /* PERPRIMITIVENV */ - YYSYMBOL_PERVIEWNV = 463, /* PERVIEWNV */ - YYSYMBOL_PERTASKNV = 464, /* PERTASKNV */ - YYSYMBOL_PERPRIMITIVEEXT = 465, /* PERPRIMITIVEEXT */ - YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 466, /* TASKPAYLOADWORKGROUPEXT */ - YYSYMBOL_PRECISE = 467, /* PRECISE */ - YYSYMBOL_YYACCEPT = 468, /* $accept */ - YYSYMBOL_variable_identifier = 469, /* variable_identifier */ - YYSYMBOL_primary_expression = 470, /* primary_expression */ - YYSYMBOL_postfix_expression = 471, /* postfix_expression */ - YYSYMBOL_integer_expression = 472, /* integer_expression */ - YYSYMBOL_function_call = 473, /* function_call */ - YYSYMBOL_function_call_or_method = 474, /* function_call_or_method */ - YYSYMBOL_function_call_generic = 475, /* function_call_generic */ - YYSYMBOL_function_call_header_no_parameters = 476, /* function_call_header_no_parameters */ - YYSYMBOL_function_call_header_with_parameters = 477, /* function_call_header_with_parameters */ - YYSYMBOL_function_call_header = 478, /* function_call_header */ - YYSYMBOL_function_identifier = 479, /* function_identifier */ - YYSYMBOL_unary_expression = 480, /* unary_expression */ - YYSYMBOL_unary_operator = 481, /* unary_operator */ - YYSYMBOL_multiplicative_expression = 482, /* multiplicative_expression */ - YYSYMBOL_additive_expression = 483, /* additive_expression */ - YYSYMBOL_shift_expression = 484, /* shift_expression */ - YYSYMBOL_relational_expression = 485, /* relational_expression */ - YYSYMBOL_equality_expression = 486, /* equality_expression */ - YYSYMBOL_and_expression = 487, /* and_expression */ - YYSYMBOL_exclusive_or_expression = 488, /* exclusive_or_expression */ - YYSYMBOL_inclusive_or_expression = 489, /* inclusive_or_expression */ - YYSYMBOL_logical_and_expression = 490, /* logical_and_expression */ - YYSYMBOL_logical_xor_expression = 491, /* logical_xor_expression */ - YYSYMBOL_logical_or_expression = 492, /* logical_or_expression */ - YYSYMBOL_conditional_expression = 493, /* conditional_expression */ - YYSYMBOL_494_1 = 494, /* $@1 */ - YYSYMBOL_assignment_expression = 495, /* assignment_expression */ - YYSYMBOL_assignment_operator = 496, /* assignment_operator */ - YYSYMBOL_expression = 497, /* expression */ - YYSYMBOL_constant_expression = 498, /* constant_expression */ - YYSYMBOL_declaration = 499, /* declaration */ - YYSYMBOL_block_structure = 500, /* block_structure */ - YYSYMBOL_501_2 = 501, /* $@2 */ - YYSYMBOL_identifier_list = 502, /* identifier_list */ - YYSYMBOL_function_prototype = 503, /* function_prototype */ - YYSYMBOL_function_declarator = 504, /* function_declarator */ - YYSYMBOL_function_header_with_parameters = 505, /* function_header_with_parameters */ - YYSYMBOL_function_header = 506, /* function_header */ - YYSYMBOL_parameter_declarator = 507, /* parameter_declarator */ - YYSYMBOL_parameter_declaration = 508, /* parameter_declaration */ - YYSYMBOL_parameter_type_specifier = 509, /* parameter_type_specifier */ - YYSYMBOL_init_declarator_list = 510, /* init_declarator_list */ - YYSYMBOL_single_declaration = 511, /* single_declaration */ - YYSYMBOL_fully_specified_type = 512, /* fully_specified_type */ - YYSYMBOL_invariant_qualifier = 513, /* invariant_qualifier */ - YYSYMBOL_interpolation_qualifier = 514, /* interpolation_qualifier */ - YYSYMBOL_layout_qualifier = 515, /* layout_qualifier */ - YYSYMBOL_layout_qualifier_id_list = 516, /* layout_qualifier_id_list */ - YYSYMBOL_layout_qualifier_id = 517, /* layout_qualifier_id */ - YYSYMBOL_precise_qualifier = 518, /* precise_qualifier */ - YYSYMBOL_type_qualifier = 519, /* type_qualifier */ - YYSYMBOL_single_type_qualifier = 520, /* single_type_qualifier */ - YYSYMBOL_storage_qualifier = 521, /* storage_qualifier */ - YYSYMBOL_non_uniform_qualifier = 522, /* non_uniform_qualifier */ - YYSYMBOL_type_name_list = 523, /* type_name_list */ - YYSYMBOL_type_specifier = 524, /* type_specifier */ - YYSYMBOL_array_specifier = 525, /* array_specifier */ - YYSYMBOL_type_parameter_specifier_opt = 526, /* type_parameter_specifier_opt */ - YYSYMBOL_type_parameter_specifier = 527, /* type_parameter_specifier */ - YYSYMBOL_type_parameter_specifier_list = 528, /* type_parameter_specifier_list */ - YYSYMBOL_type_specifier_nonarray = 529, /* type_specifier_nonarray */ - YYSYMBOL_precision_qualifier = 530, /* precision_qualifier */ - YYSYMBOL_struct_specifier = 531, /* struct_specifier */ - YYSYMBOL_532_3 = 532, /* $@3 */ - YYSYMBOL_533_4 = 533, /* $@4 */ - YYSYMBOL_struct_declaration_list = 534, /* struct_declaration_list */ - YYSYMBOL_struct_declaration = 535, /* struct_declaration */ - YYSYMBOL_struct_declarator_list = 536, /* struct_declarator_list */ - YYSYMBOL_struct_declarator = 537, /* struct_declarator */ - YYSYMBOL_initializer = 538, /* initializer */ - YYSYMBOL_initializer_list = 539, /* initializer_list */ - YYSYMBOL_declaration_statement = 540, /* declaration_statement */ - YYSYMBOL_statement = 541, /* statement */ - YYSYMBOL_simple_statement = 542, /* simple_statement */ - YYSYMBOL_demote_statement = 543, /* demote_statement */ - YYSYMBOL_compound_statement = 544, /* compound_statement */ - YYSYMBOL_545_5 = 545, /* $@5 */ - YYSYMBOL_546_6 = 546, /* $@6 */ - YYSYMBOL_statement_no_new_scope = 547, /* statement_no_new_scope */ - YYSYMBOL_statement_scoped = 548, /* statement_scoped */ - YYSYMBOL_549_7 = 549, /* $@7 */ - YYSYMBOL_550_8 = 550, /* $@8 */ - YYSYMBOL_compound_statement_no_new_scope = 551, /* compound_statement_no_new_scope */ - YYSYMBOL_statement_list = 552, /* statement_list */ - YYSYMBOL_expression_statement = 553, /* expression_statement */ - YYSYMBOL_selection_statement = 554, /* selection_statement */ - YYSYMBOL_selection_statement_nonattributed = 555, /* selection_statement_nonattributed */ - YYSYMBOL_selection_rest_statement = 556, /* selection_rest_statement */ - YYSYMBOL_condition = 557, /* condition */ - YYSYMBOL_switch_statement = 558, /* switch_statement */ - YYSYMBOL_switch_statement_nonattributed = 559, /* switch_statement_nonattributed */ - YYSYMBOL_560_9 = 560, /* $@9 */ - YYSYMBOL_switch_statement_list = 561, /* switch_statement_list */ - YYSYMBOL_case_label = 562, /* case_label */ - YYSYMBOL_iteration_statement = 563, /* iteration_statement */ - YYSYMBOL_iteration_statement_nonattributed = 564, /* iteration_statement_nonattributed */ - YYSYMBOL_565_10 = 565, /* $@10 */ - YYSYMBOL_566_11 = 566, /* $@11 */ - YYSYMBOL_567_12 = 567, /* $@12 */ - YYSYMBOL_for_init_statement = 568, /* for_init_statement */ - YYSYMBOL_conditionopt = 569, /* conditionopt */ - YYSYMBOL_for_rest_statement = 570, /* for_rest_statement */ - YYSYMBOL_jump_statement = 571, /* jump_statement */ - YYSYMBOL_translation_unit = 572, /* translation_unit */ - YYSYMBOL_external_declaration = 573, /* external_declaration */ - YYSYMBOL_function_definition = 574, /* function_definition */ - YYSYMBOL_575_13 = 575, /* $@13 */ - YYSYMBOL_attribute = 576, /* attribute */ - YYSYMBOL_attribute_list = 577, /* attribute_list */ - YYSYMBOL_single_attribute = 578, /* single_attribute */ - YYSYMBOL_spirv_requirements_list = 579, /* spirv_requirements_list */ - YYSYMBOL_spirv_requirements_parameter = 580, /* spirv_requirements_parameter */ - YYSYMBOL_spirv_extension_list = 581, /* spirv_extension_list */ - YYSYMBOL_spirv_capability_list = 582, /* spirv_capability_list */ - YYSYMBOL_spirv_execution_mode_qualifier = 583, /* spirv_execution_mode_qualifier */ - YYSYMBOL_spirv_execution_mode_parameter_list = 584, /* spirv_execution_mode_parameter_list */ - YYSYMBOL_spirv_execution_mode_parameter = 585, /* spirv_execution_mode_parameter */ - YYSYMBOL_spirv_execution_mode_id_parameter_list = 586, /* spirv_execution_mode_id_parameter_list */ - YYSYMBOL_spirv_storage_class_qualifier = 587, /* spirv_storage_class_qualifier */ - YYSYMBOL_spirv_decorate_qualifier = 588, /* spirv_decorate_qualifier */ - YYSYMBOL_spirv_decorate_parameter_list = 589, /* spirv_decorate_parameter_list */ - YYSYMBOL_spirv_decorate_parameter = 590, /* spirv_decorate_parameter */ - YYSYMBOL_spirv_decorate_id_parameter_list = 591, /* spirv_decorate_id_parameter_list */ - YYSYMBOL_spirv_decorate_id_parameter = 592, /* spirv_decorate_id_parameter */ - YYSYMBOL_spirv_decorate_string_parameter_list = 593, /* spirv_decorate_string_parameter_list */ - YYSYMBOL_spirv_type_specifier = 594, /* spirv_type_specifier */ - YYSYMBOL_spirv_type_parameter_list = 595, /* spirv_type_parameter_list */ - YYSYMBOL_spirv_type_parameter = 596, /* spirv_type_parameter */ - YYSYMBOL_spirv_instruction_qualifier = 597, /* spirv_instruction_qualifier */ - YYSYMBOL_spirv_instruction_qualifier_list = 598, /* spirv_instruction_qualifier_list */ - YYSYMBOL_spirv_instruction_qualifier_id = 599 /* 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; @@ -735,7 +741,7 @@ typedef enum yysymbol_kind_t yysymbol_kind_t; extern int yylex(YYSTYPE*, TParseContext&); -#line 739 "MachineIndependent/glslang_tab.cpp" +#line 745 "MachineIndependent/glslang_tab.cpp" #ifdef short @@ -1057,21 +1063,21 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 455 +#define YYFINAL 461 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 12814 +#define YYLAST 12966 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 468 +#define YYNTOKENS 474 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 132 /* YYNRULES -- Number of rules. */ -#define YYNRULES 703 +#define YYNRULES 709 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 949 +#define YYNSTATES 955 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 722 +#define YYMAXUTOK 728 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1157,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 + 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, 356, 356, 362, 365, 370, 373, 376, 380, 383, - 386, 390, 394, 398, 402, 406, 410, 416, 423, 426, - 429, 432, 435, 440, 448, 455, 462, 468, 472, 479, - 482, 488, 506, 531, 539, 544, 571, 579, 585, 589, - 593, 613, 614, 615, 616, 622, 623, 628, 633, 642, - 643, 648, 656, 657, 663, 672, 673, 678, 683, 688, - 696, 697, 706, 718, 719, 728, 729, 738, 739, 748, - 749, 757, 758, 766, 767, 775, 776, 776, 794, 795, - 811, 815, 819, 823, 828, 832, 836, 840, 844, 848, - 852, 859, 862, 873, 880, 885, 892, 897, 902, 909, - 913, 917, 921, 926, 931, 940, 940, 951, 955, 962, - 967, 975, 983, 995, 998, 1005, 1018, 1041, 1064, 1079, - 1104, 1115, 1125, 1135, 1145, 1154, 1157, 1161, 1165, 1170, - 1178, 1183, 1188, 1193, 1198, 1207, 1217, 1244, 1253, 1260, - 1267, 1274, 1281, 1289, 1297, 1307, 1317, 1324, 1334, 1340, - 1343, 1350, 1354, 1358, 1366, 1375, 1378, 1389, 1392, 1395, - 1399, 1403, 1407, 1411, 1414, 1419, 1423, 1428, 1436, 1440, - 1445, 1451, 1457, 1464, 1469, 1474, 1482, 1487, 1499, 1513, - 1519, 1524, 1532, 1540, 1548, 1556, 1564, 1572, 1580, 1588, - 1596, 1603, 1610, 1614, 1619, 1624, 1629, 1634, 1639, 1644, - 1648, 1652, 1656, 1660, 1666, 1672, 1682, 1689, 1692, 1700, - 1707, 1718, 1723, 1731, 1735, 1745, 1748, 1754, 1760, 1766, - 1774, 1784, 1788, 1792, 1796, 1801, 1805, 1810, 1815, 1820, - 1825, 1830, 1835, 1840, 1845, 1850, 1856, 1862, 1868, 1873, - 1878, 1883, 1888, 1893, 1898, 1903, 1908, 1913, 1918, 1923, - 1928, 1935, 1940, 1945, 1950, 1955, 1960, 1965, 1970, 1975, - 1980, 1985, 1990, 1998, 2006, 2014, 2020, 2026, 2032, 2038, - 2044, 2050, 2056, 2062, 2068, 2074, 2080, 2086, 2092, 2098, - 2104, 2110, 2116, 2122, 2128, 2134, 2140, 2146, 2152, 2158, - 2164, 2170, 2176, 2182, 2188, 2194, 2200, 2206, 2212, 2220, - 2228, 2236, 2244, 2252, 2260, 2268, 2276, 2284, 2292, 2300, - 2308, 2314, 2320, 2326, 2332, 2338, 2344, 2350, 2356, 2362, - 2368, 2374, 2380, 2386, 2392, 2398, 2404, 2410, 2416, 2422, - 2428, 2434, 2440, 2446, 2452, 2458, 2464, 2470, 2476, 2482, - 2488, 2494, 2500, 2506, 2512, 2518, 2524, 2528, 2532, 2536, - 2541, 2546, 2551, 2556, 2561, 2566, 2571, 2576, 2581, 2586, - 2591, 2596, 2601, 2606, 2612, 2618, 2624, 2630, 2636, 2642, - 2648, 2654, 2660, 2666, 2672, 2678, 2684, 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, - 2855, 2861, 2866, 2871, 2876, 2882, 2887, 2892, 2897, 2903, - 2908, 2913, 2918, 2924, 2929, 2934, 2939, 2945, 2951, 2957, - 2963, 2968, 2974, 2980, 2986, 2991, 2996, 3001, 3006, 3011, - 3017, 3022, 3027, 3032, 3038, 3043, 3048, 3053, 3059, 3064, - 3069, 3074, 3080, 3085, 3090, 3095, 3101, 3106, 3111, 3116, - 3122, 3127, 3132, 3137, 3143, 3148, 3153, 3158, 3164, 3169, - 3174, 3179, 3185, 3190, 3195, 3200, 3206, 3211, 3216, 3221, - 3227, 3232, 3237, 3242, 3248, 3253, 3258, 3263, 3269, 3274, - 3279, 3284, 3290, 3295, 3300, 3305, 3311, 3316, 3321, 3326, - 3331, 3336, 3341, 3346, 3351, 3356, 3361, 3366, 3371, 3376, - 3381, 3386, 3391, 3396, 3401, 3406, 3411, 3416, 3421, 3426, - 3431, 3437, 3443, 3449, 3455, 3461, 3467, 3473, 3480, 3487, - 3493, 3499, 3505, 3511, 3518, 3525, 3532, 3539, 3544, 3549, - 3553, 3557, 3561, 3566, 3582, 3587, 3592, 3600, 3600, 3617, - 3617, 3627, 3630, 3643, 3665, 3692, 3696, 3702, 3707, 3718, - 3721, 3727, 3733, 3742, 3745, 3751, 3755, 3756, 3762, 3763, - 3764, 3765, 3766, 3767, 3768, 3769, 3773, 3781, 3782, 3786, - 3782, 3800, 3801, 3805, 3805, 3812, 3812, 3826, 3829, 3839, - 3847, 3858, 3859, 3863, 3866, 3873, 3880, 3884, 3892, 3896, - 3909, 3912, 3919, 3919, 3939, 3942, 3948, 3960, 3972, 3975, - 3983, 3983, 3998, 3998, 4016, 4016, 4037, 4040, 4046, 4049, - 4055, 4059, 4066, 4071, 4076, 4083, 4086, 4090, 4094, 4098, - 4107, 4111, 4120, 4123, 4126, 4134, 4134, 4176, 4181, 4184, - 4189, 4192, 4197, 4200, 4205, 4208, 4213, 4216, 4221, 4224, - 4229, 4233, 4238, 4242, 4247, 4251, 4258, 4261, 4266, 4269, - 4272, 4275, 4278, 4283, 4292, 4303, 4308, 4316, 4320, 4325, - 4329, 4334, 4338, 4343, 4347, 4354, 4357, 4362, 4365, 4368, - 4371, 4376, 4379, 4384, 4390, 4393, 4396, 4399, 4404, 4408, - 4413, 4417, 4422, 4426, 4433, 4436, 4441, 4444, 4449, 4452, - 4458, 4461, 4466, 4469 + 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, + 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, 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 @@ -1261,25 +1267,26 @@ 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", + "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", @@ -1348,11 +1355,12 @@ static const char *const yytname[] = "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT", "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT", "PATCH", "SAMPLE", "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", - "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT", - "SUBGROUPCOHERENT", "NONPRIVATE", "SHADERCALLCOHERENT", "NOPERSPECTIVE", - "EXPLICITINTERPAMD", "PERVERTEXEXT", "PERVERTEXNV", "PERPRIMITIVENV", - "PERVIEWNV", "PERTASKNV", "PERPRIMITIVEEXT", "TASKPAYLOADWORKGROUPEXT", - "PRECISE", "$accept", "variable_identifier", "primary_expression", + "NONTEMPORAL", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", + "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", + "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD", + "PERVERTEXEXT", "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", + "PERTASKNV", "PERPRIMITIVEEXT", "TASKPAYLOADWORKGROUPEXT", "PRECISE", + "$accept", "variable_identifier", "primary_expression", "postfix_expression", "integer_expression", "function_call", "function_call_or_method", "function_call_generic", "function_call_header_no_parameters", @@ -1411,12 +1419,12 @@ yysymbol_name (yysymbol_kind_t yysymbol) } #endif -#define YYPACT_NINF (-875) +#define YYPACT_NINF (-878) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-698) +#define YYTABLE_NINF (-704) #define yytable_value_is_error(Yyn) \ 0 @@ -1425,101 +1433,102 @@ yysymbol_name (yysymbol_kind_t yysymbol) STATE-NUM. */ static const yytype_int16 yypact[] = { - 4675, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -289, -274, -235, -138, -118, -95, -84, -82, -875, -875, - -875, -875, -875, -186, -875, -875, -875, -875, -875, -46, - -875, -875, -875, -875, -875, -320, -875, -875, -875, -875, - -875, -875, -875, -69, -62, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -334, -164, -115, -81, 7930, -257, -875, -54, -875, - -875, -875, -875, 5605, -875, -875, -875, -875, -51, -875, - -875, 955, -875, -875, 7930, -36, -875, -875, -875, 6070, - -52, -248, -161, -149, -127, -126, -52, -119, -45, 12381, - -875, -12, -361, -43, -875, -312, -875, -10, -7, 7930, - -875, -875, -875, 7930, -40, -39, -875, -309, -875, -258, - -875, -875, 11052, -4, -875, -875, -875, -2, -33, 7930, - -875, -8, -9, -1, -875, -267, -875, -253, 1, 4, - 5, 7, -246, 8, 11, 13, 14, 15, 16, -243, - 18, 19, 27, -130, -875, -5, 7930, -875, 20, -875, - -241, -875, -875, -239, 9280, -875, -277, 1420, -875, -875, - -875, -875, -875, -4, -270, -875, 9723, -265, -875, -28, - -875, -85, 11052, 11052, -875, 11052, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, -259, -875, -875, -875, 29, - -238, 11495, 28, -875, 11052, -875, 31, -301, 30, -7, - 33, -875, -321, -52, -875, -27, -875, -304, 32, -106, - 11052, -101, -875, -136, -100, -165, -74, 17, -72, -52, - -875, 11938, -875, -70, 11052, 10, -45, -875, 7930, 34, - 6535, -875, 7930, 11052, -875, -361, -875, 35, -875, -875, - -29, -219, -282, -310, -212, -15, 21, 23, 49, 48, - -313, 37, -875, 10166, -875, 36, -875, -875, 45, 38, - 39, -875, 51, 52, 43, 10609, 55, 11052, 57, 65, - 67, 68, 69, -157, -875, -875, -42, -875, -164, 80, - 31, -875, -875, -875, -875, -875, 1885, -875, -875, -875, - -875, -875, -875, -875, -875, -875, 5140, 30, 9723, -264, - 8394, -875, -875, 9723, 7930, -875, 53, -875, -875, -875, - -231, -875, -875, 11052, 54, -875, -875, 11052, 66, -875, - -875, -875, 11052, -875, -875, -875, -328, -875, -875, -227, - 72, -875, -875, -875, -875, -875, -875, -218, -875, -193, - -875, -875, -192, 77, -875, -875, -875, -875, -184, -875, - -183, -875, -875, -875, -875, -875, -182, -875, 78, -875, - -181, 81, -180, 72, -875, -315, -158, -875, 86, 90, - -875, -875, 34, -4, -38, -875, -875, -875, 7000, -875, - -875, -875, 11052, 11052, 11052, 11052, 11052, 11052, 11052, 11052, - 11052, 11052, 11052, 11052, 11052, 11052, 11052, 11052, 11052, 11052, - 11052, -875, -875, -875, 89, -875, 2350, -875, -875, -875, - 2350, -875, 11052, -875, -875, -34, 11052, -201, -875, -875, - -875, -875, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, 11052, 11052, -875, -875, -875, -875, - -875, -875, -875, 9723, -875, -875, -177, -875, 7465, -875, - -875, 94, 92, -875, -875, -875, -875, -875, -129, -122, - -875, -316, -875, -304, -875, -304, -875, 11052, 11052, -875, - -136, -875, -136, -875, -165, -165, -875, 101, 17, -875, - 11938, -875, 11052, -875, -875, -32, 30, 34, -875, -875, - -875, -875, -875, -29, -29, -219, -219, -282, -282, -282, - -282, -310, -310, -212, -15, 21, 23, 49, 48, 11052, - -875, 2350, 4210, 59, 3745, -156, -875, -154, -875, -875, - -875, -875, -875, 8837, -875, -875, -875, 102, -875, 60, - -875, -153, -875, -151, -875, -146, -875, -144, -875, -143, - -142, -875, -875, -875, -114, 99, 92, 70, 104, 107, - -875, -875, 4210, 105, -875, -875, -875, -875, -875, -875, - -875, -875, -875, -875, -875, 11052, -875, 103, 2815, 11052, - -875, 98, 109, 71, 111, 3280, -875, 112, -875, 9723, - -875, -875, -875, -141, 11052, 2815, 105, -875, -875, 2350, - -875, 108, 92, -875, -875, 2350, 115, -875, -875 + 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. @@ -1527,139 +1536,140 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 0, 168, 225, 223, 224, 222, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 226, 227, 228, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, - 351, 352, 353, 354, 355, 356, 357, 377, 378, 379, - 380, 381, 382, 383, 392, 405, 406, 393, 394, 396, - 395, 397, 398, 399, 400, 401, 402, 403, 404, 177, - 178, 251, 252, 250, 253, 260, 261, 258, 259, 256, - 257, 254, 255, 283, 284, 285, 295, 296, 297, 280, - 281, 282, 292, 293, 294, 277, 278, 279, 289, 290, - 291, 274, 275, 276, 286, 287, 288, 262, 263, 264, - 298, 299, 300, 265, 266, 267, 310, 311, 312, 268, - 269, 270, 322, 323, 324, 271, 272, 273, 334, 335, - 336, 301, 302, 303, 304, 305, 306, 307, 308, 309, - 313, 314, 315, 316, 317, 318, 319, 320, 321, 325, - 326, 327, 328, 329, 330, 331, 332, 333, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 349, 346, 347, - 348, 533, 534, 535, 536, 541, 182, 537, 538, 361, - 362, 385, 388, 350, 359, 360, 376, 358, 407, 408, - 411, 412, 413, 415, 416, 417, 419, 420, 421, 423, - 424, 520, 521, 384, 386, 387, 363, 364, 365, 409, - 366, 370, 371, 374, 414, 418, 422, 367, 368, 372, - 373, 410, 369, 375, 454, 456, 457, 458, 460, 461, - 462, 464, 465, 466, 468, 469, 470, 472, 473, 474, - 476, 477, 478, 480, 481, 482, 484, 485, 486, 488, - 489, 490, 492, 493, 494, 496, 497, 455, 459, 463, - 467, 471, 479, 483, 487, 475, 491, 495, 498, 499, - 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 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, + 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, - 389, 390, 391, 425, 434, 436, 430, 435, 437, 438, - 440, 441, 442, 444, 445, 446, 448, 449, 450, 452, - 453, 426, 427, 428, 439, 429, 431, 432, 433, 443, - 447, 451, 525, 526, 529, 530, 531, 532, 527, 528, - 0, 0, 0, 0, 0, 0, 0, 0, 166, 167, - 522, 523, 524, 0, 634, 137, 544, 545, 546, 0, - 543, 172, 170, 171, 169, 0, 221, 173, 175, 176, - 174, 139, 138, 0, 203, 539, 184, 186, 181, 188, - 190, 185, 187, 183, 189, 191, 179, 180, 206, 192, - 199, 200, 201, 202, 193, 194, 195, 196, 197, 198, - 140, 141, 143, 142, 144, 146, 147, 145, 205, 154, - 633, 0, 635, 0, 114, 113, 0, 125, 130, 161, - 160, 158, 162, 0, 155, 157, 163, 135, 216, 159, - 542, 0, 630, 632, 0, 0, 164, 165, 540, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 549, 0, 0, 0, 99, 0, 94, 0, 109, 0, - 121, 115, 123, 0, 124, 0, 97, 131, 102, 0, - 156, 136, 0, 209, 215, 1, 631, 0, 0, 0, - 96, 0, 0, 0, 642, 0, 700, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 640, 0, 638, 0, 0, 547, 151, 153, - 0, 149, 207, 0, 0, 100, 0, 0, 636, 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, 219, 0, 36, 218, 0, 210, 111, - 0, 95, 0, 0, 698, 0, 650, 0, 0, 0, - 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, - 692, 0, 665, 0, 0, 0, 0, 98, 0, 0, - 0, 551, 0, 0, 148, 0, 204, 0, 211, 45, - 49, 52, 55, 60, 63, 65, 67, 69, 71, 73, - 75, 0, 34, 0, 101, 578, 587, 591, 0, 0, - 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 45, 78, 91, 0, 565, 0, 163, - 135, 568, 589, 567, 575, 566, 0, 569, 570, 593, - 571, 600, 572, 573, 608, 574, 0, 119, 0, 127, - 0, 559, 134, 0, 0, 107, 0, 104, 38, 39, - 0, 22, 23, 0, 0, 28, 27, 0, 221, 31, - 33, 40, 0, 217, 112, 702, 0, 703, 643, 0, - 0, 701, 662, 658, 659, 660, 661, 0, 656, 0, - 93, 663, 0, 0, 677, 678, 679, 680, 0, 675, - 0, 684, 685, 686, 687, 683, 0, 681, 0, 688, - 0, 0, 0, 2, 696, 216, 0, 694, 0, 0, - 637, 639, 0, 557, 0, 555, 550, 552, 0, 152, - 150, 208, 0, 0, 0, 0, 0, 0, 0, 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, 76, 212, 213, 0, 577, 0, 610, 623, 622, - 0, 614, 0, 626, 624, 0, 0, 0, 607, 627, - 628, 629, 576, 81, 82, 84, 83, 86, 87, 88, - 89, 90, 85, 80, 0, 0, 592, 588, 590, 594, - 601, 609, 129, 0, 562, 563, 0, 133, 0, 108, - 4, 0, 24, 21, 32, 220, 646, 648, 0, 0, - 699, 0, 652, 0, 651, 0, 654, 0, 0, 669, - 0, 668, 0, 671, 0, 0, 673, 0, 0, 693, - 0, 690, 0, 666, 641, 0, 558, 0, 553, 548, - 46, 47, 48, 51, 50, 53, 54, 58, 59, 56, - 57, 61, 62, 64, 66, 68, 70, 72, 74, 0, - 214, 579, 0, 0, 0, 0, 625, 0, 606, 79, - 92, 128, 560, 0, 106, 19, 644, 0, 645, 0, - 657, 0, 664, 0, 676, 0, 682, 0, 689, 0, - 0, 695, 554, 556, 0, 0, 598, 0, 0, 0, - 617, 616, 619, 585, 602, 561, 564, 647, 649, 653, - 655, 670, 672, 674, 691, 0, 580, 0, 0, 0, - 618, 0, 0, 597, 0, 0, 595, 0, 77, 0, - 582, 611, 581, 0, 620, 0, 585, 584, 586, 604, - 599, 0, 621, 615, 596, 605, 0, 613, 603 + 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[] = { - -875, -548, -875, -875, -875, -875, -875, -875, -875, -875, - -875, -875, -436, -875, -478, -469, -493, -397, -275, -272, - -269, -268, -262, -271, -875, -490, -875, -499, -875, -501, - -537, 9, -875, -875, -875, 6, -401, -875, -875, 40, - 42, 41, -875, -875, -409, -875, -875, -875, -875, -103, - -875, -394, -379, -875, 12, -875, 0, -432, -875, -875, - -875, -560, 146, -875, -875, -875, -555, -558, -234, -348, - -614, -875, -374, -628, -874, -875, -433, -875, -875, -443, - -442, -875, -875, 58, -738, -368, -875, -147, -875, -402, - -875, -145, -875, -875, -875, -875, -140, -875, -875, -875, - -875, -875, -875, -875, -875, 91, -875, -875, 2, -875, - -73, -266, -425, -875, -875, -875, -311, -308, -307, -875, - -875, -306, -305, -318, -314, -303, -875, -317, -302, -875, - -400, -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, 533, 534, 535, 801, 536, 537, 538, 539, 540, - 541, 542, 623, 544, 590, 591, 592, 593, 594, 595, - 596, 597, 598, 599, 600, 624, 859, 625, 784, 626, - 714, 627, 391, 654, 511, 628, 393, 394, 395, 440, - 441, 442, 396, 397, 398, 399, 400, 401, 490, 491, - 402, 403, 404, 405, 545, 493, 602, 496, 453, 454, - 547, 408, 409, 410, 582, 486, 580, 581, 724, 725, - 652, 796, 631, 632, 633, 634, 635, 756, 895, 931, - 923, 924, 925, 932, 636, 637, 638, 639, 926, 898, - 640, 641, 927, 946, 642, 643, 644, 862, 760, 864, - 902, 921, 922, 645, 411, 412, 413, 437, 646, 483, - 484, 463, 464, 808, 809, 415, 687, 688, 692, 416, - 417, 698, 699, 706, 707, 710, 418, 716, 717, 419, - 465, 466 + 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 @@ -1667,195 +1677,291 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 407, 443, 414, 681, 601, 458, 392, 651, 788, 390, - 458, 715, 406, 457, 660, 507, 543, 705, 861, 681, - 459, 548, 727, 691, 450, 459, 479, 728, 806, 739, - 740, 750, 488, 434, 792, 675, 795, 719, 676, 797, - 675, 430, 669, -697, 930, 443, 729, 494, 505, -697, - 494, 938, 682, 737, 738, 495, 489, 506, 589, 435, - 452, 930, 807, 672, 450, 741, 742, 751, 420, 677, - 690, 647, 649, 431, 677, 673, 658, 659, 661, 662, - 450, 690, 603, 421, 690, 683, 684, 685, 686, 494, - 604, 554, 578, 690, 603, 603, 648, 555, -35, 798, - 663, 653, 793, 508, 664, 556, 509, 445, 671, 510, - 446, 557, 562, 754, 765, 570, 767, 584, 563, 586, - 666, 571, 422, 585, 589, 587, 667, 800, 678, 743, - 744, 810, 863, 785, 678, 589, 678, 555, 589, 678, - 812, 678, 467, 678, 678, 468, 813, 589, 678, 651, - 735, 651, 736, 679, 651, 469, 471, 473, 475, 477, - 478, 481, 802, 785, 868, 814, 816, 589, 804, 712, - 727, 815, 817, 428, 819, 821, 823, 826, 829, 871, - 820, 822, 824, 827, 830, 872, 578, 873, 578, 773, - 774, 775, 776, 777, 778, 779, 780, 781, 782, 450, - 831, 945, 903, 436, 904, 909, 832, 910, 785, 783, - 785, 813, 911, 817, 912, 913, 914, 941, 820, 423, - 824, 827, 832, 785, 701, 702, 703, 704, 524, 470, - 575, 876, 468, 788, 576, 877, 805, 458, 878, 424, - 727, 472, 879, 438, 468, 457, 847, 848, 849, 850, - 785, 915, 459, 694, 695, 696, 697, 843, 844, 906, - 578, 865, 425, 474, 476, 867, 468, 468, 845, 846, - 715, 480, 715, 426, 468, 427, 705, 705, 681, 656, - 882, 691, 657, 439, 689, 869, 870, 468, 432, 693, - 700, 836, 468, 468, 651, 433, 840, 841, 842, 589, - 589, 589, 589, 589, 589, 589, 589, 589, 589, 589, - 589, 589, 589, 589, 589, 940, 708, 788, 711, 468, - 718, 468, 785, 468, 452, 786, 837, 690, 690, 838, - 785, 460, 837, 866, 578, 892, 336, 337, 338, 447, - 690, 462, 690, 732, 733, 734, 851, 852, 482, 487, - 492, 497, 333, 503, 504, 494, 549, 552, 894, 551, - 550, 896, 577, 553, 745, 655, 680, 558, 559, 560, - 720, 561, 564, 709, 651, 565, 572, 566, 567, 568, - 569, 589, 589, 573, 574, 670, 583, 665, -34, 603, - 505, 676, 748, 749, 589, 444, 589, 752, 755, 746, - 747, 896, 757, 451, 578, 758, 759, 406, 761, 762, - 763, 407, 766, 414, 407, 406, 928, 392, 933, 407, - 390, 414, 768, 406, -29, 461, 406, 723, 731, 485, - 651, 406, 769, 942, 770, 771, 772, -36, 811, 444, - 499, 818, 825, 444, 833, 828, 799, 803, 834, 860, - 908, 406, 546, 897, 875, 406, 785, 888, 907, 451, - 899, 916, 918, 917, 919, 934, -583, 935, 459, 929, - 853, 406, 605, 939, 854, 947, 936, 948, 855, 858, - 856, 500, 730, 501, 502, 429, 579, 857, 835, 893, - 900, 937, 943, 897, 944, 498, 901, 630, 406, 789, - 920, 790, 456, 721, 881, 880, 791, 887, 459, 629, - 886, 883, 0, 890, 0, 884, 885, 0, 0, 0, - 0, 0, 0, 0, 0, 889, 0, 0, 0, 0, - 891, 0, 0, 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, 674, 0, 0, 0, 0, 0, 0, 0, 0, + 896, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 722, 0, - 579, 0, 579, 0, 0, 0, 0, 0, 0, 0, - 406, 0, 406, 0, 406, 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, + 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, 630, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 407, 0, 629, 0, - 0, 0, 0, 0, 579, 0, 0, 0, 406, 0, - 0, 0, 0, 0, 0, 0, 406, 0, 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, 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, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 406, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 630, 0, 0, 0, - 630, 0, 0, 0, 0, 0, 0, 0, 629, 0, - 0, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 579, 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, - 406, 0, 0, 0, 0, 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, + 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, 630, 630, 0, 630, 0, 414, 0, 0, 0, - 0, 0, 0, 629, 629, 0, 629, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 630, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 629, 0, 0, 0, 630, 0, - 0, 0, 0, 0, 0, 630, 0, 0, 0, 0, - 629, 0, 0, 0, 0, 630, 0, 629, 0, 630, - 0, 0, 0, 0, 0, 630, 0, 629, 0, 0, - 0, 629, 0, 0, 0, 455, 0, 629, 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, + 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, 333, 0, 0, 0, 0, 0, - 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 335, 336, 337, 338, - 339, 0, 0, 0, 0, 0, 0, 0, 0, 340, - 341, 342, 343, 344, 345, 346, 0, 0, 0, 0, + 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, + 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, 347, 348, 349, 350, 351, 352, 353, 0, 0, - 0, 0, 0, 0, 0, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 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, 0, 0, 512, 513, 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, 0, 0, 0, 0, 514, 515, 0, 333, - 0, 605, 606, 0, 0, 0, 0, 607, 516, 517, - 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 335, 336, 337, 338, 339, 0, 0, 0, 520, - 521, 522, 523, 524, 340, 341, 342, 343, 344, 345, - 346, 608, 609, 610, 611, 0, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 347, 348, 349, 350, - 351, 352, 353, 525, 526, 527, 528, 529, 530, 531, - 532, 354, 622, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 1, 2, + 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, 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, 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, + 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, 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, + 34, 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, + 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, @@ -1889,206 +1995,209 @@ static const yytype_int16 yytable[] = 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, - 0, 0, 512, 513, 0, 0, 0, 0, 0, 0, + 333, 334, 335, 336, 337, 0, 0, 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 514, 515, 0, 333, 0, 605, 787, 0, 0, - 0, 0, 607, 516, 517, 518, 519, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 335, 336, 337, 338, - 339, 0, 0, 0, 520, 521, 522, 523, 524, 340, - 341, 342, 343, 344, 345, 346, 608, 609, 610, 611, - 0, 612, 613, 614, 615, 616, 617, 618, 619, 620, - 621, 347, 348, 349, 350, 351, 352, 353, 525, 526, - 527, 528, 529, 530, 531, 532, 354, 622, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 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, 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, 0, 0, 512, 513, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 514, 515, 0, 333, - 0, 605, 0, 0, 0, 0, 0, 607, 516, 517, - 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 335, 336, 337, 338, 339, 0, 0, 0, 520, - 521, 522, 523, 524, 340, 341, 342, 343, 344, 345, - 346, 608, 609, 610, 611, 0, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 347, 348, 349, 350, - 351, 352, 353, 525, 526, 527, 528, 529, 530, 531, - 532, 354, 622, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 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, - 0, 0, 512, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 514, 515, 0, 333, 0, 497, 0, 0, 0, - 0, 0, 607, 516, 517, 518, 519, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 335, 336, 337, 338, - 339, 0, 0, 0, 520, 521, 522, 523, 524, 340, - 341, 342, 343, 344, 345, 346, 608, 609, 610, 611, - 0, 612, 613, 614, 615, 616, 617, 618, 619, 620, - 621, 347, 348, 349, 350, 351, 352, 353, 525, 526, - 527, 528, 529, 530, 531, 532, 354, 622, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 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, 0, 0, 512, 513, 0, + 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, 514, 515, 0, 333, - 0, 0, 0, 0, 0, 0, 0, 607, 516, 517, + 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, 335, 336, 337, 338, 339, 0, 0, 0, 520, - 521, 522, 523, 524, 340, 341, 342, 343, 344, 345, - 346, 608, 609, 610, 611, 0, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 347, 348, 349, 350, - 351, 352, 353, 525, 526, 527, 528, 529, 530, 531, - 532, 354, 622, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 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, - 0, 0, 512, 513, 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, 514, 515, 0, 333, 0, 0, 0, 0, 0, - 0, 0, 607, 516, 517, 518, 519, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 335, 336, 337, 338, - 339, 0, 0, 0, 520, 521, 522, 523, 524, 340, - 341, 342, 343, 344, 345, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 347, 348, 349, 350, 351, 352, 353, 525, 526, - 527, 528, 529, 530, 531, 532, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 1, 2, 3, 4, 5, 6, 7, + 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, @@ -2120,207 +2229,210 @@ static const yytype_int16 yytable[] = 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 0, 0, 0, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 0, 0, 512, 513, 0, + 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, 514, 515, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 516, 517, - 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 335, 336, 337, 338, 0, 0, 0, 0, 520, - 521, 522, 523, 524, 340, 341, 342, 343, 344, 345, - 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 347, 348, 349, 350, - 351, 352, 353, 525, 526, 527, 528, 529, 530, 531, - 532, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 333, 0, 0, 0, 0, 0, - 0, 0, 334, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 335, 336, 337, 338, - 339, 0, 0, 0, 0, 0, 0, 0, 0, 340, - 341, 342, 343, 344, 345, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 347, 348, 349, 350, 351, 352, 353, 0, 0, - 0, 0, 0, 0, 0, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 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, 0, 0, 0, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 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, 335, 336, 337, 338, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 341, 342, 343, 344, 345, - 346, 608, 0, 0, 611, 0, 612, 613, 0, 0, - 616, 0, 0, 0, 0, 0, 347, 348, 349, 350, - 351, 352, 353, 0, 0, 0, 0, 0, 0, 0, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 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, 0, 0, 0, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, + 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, 448, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 335, 336, 337, 338, - 0, 0, 0, 0, 0, 0, 0, 0, 449, 340, - 341, 342, 343, 344, 345, 346, 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, 347, 348, 349, 350, 351, 352, 353, 0, 0, - 0, 0, 0, 0, 0, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 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, 0, 0, 0, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 333, + 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, 335, 336, 337, 338, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 341, 342, 343, 344, 345, - 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 347, 348, 349, 350, - 351, 352, 353, 0, 0, 0, 0, 0, 0, 0, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 1, 2, + 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, @@ -2352,161 +2464,114 @@ static const yytype_int16 yytable[] = 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 316, 317, 318, 319, 0, 0, 0, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 726, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 335, 336, 337, 338, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, - 341, 342, 343, 344, 345, 346, 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, 347, 348, 349, 350, 351, 352, 353, 0, 0, - 0, 0, 0, 0, 0, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 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, 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, 0, 0, 0, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 839, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 335, 336, 337, 338, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 341, 342, 343, 344, 345, - 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 347, 348, 349, 350, - 351, 352, 353, 0, 0, 0, 0, 0, 0, 0, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 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, 0, 0, 0, - 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, 874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 335, 336, 337, 338, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 340, - 341, 342, 343, 344, 345, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 347, 348, 349, 350, 351, 352, 353, 0, 0, - 0, 0, 0, 0, 0, 0, 354, 0, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 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, 0, 0, 0, 323, 324, 325, 326, 327, - 328, 329, 330, 331, 332, 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, 335, 336, 337, 338, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 340, 341, 342, 343, 344, 345, - 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 347, 348, 349, 350, - 351, 352, 353, 0, 0, 0, 0, 0, 0, 0, - 0, 354, 0, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 2, 3, + 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, @@ -2523,7 +2588,7 @@ static const yytype_int16 yytable[] = 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, 0, 167, 168, 169, 170, 171, 172, 173, + 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, @@ -2538,64 +2603,65 @@ static const yytype_int16 yytable[] = 284, 285, 286, 287, 288, 289, 290, 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, 0, 0, 0, 0, - 0, 0, 326, 0, 0, 0, 330, 331, 332, 0, - 0, 512, 513, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 514, 515, 0, 0, 0, 650, 794, 0, 0, 0, - 0, 0, 516, 517, 518, 519, 0, 0, 0, 0, + 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, 520, 521, 522, 523, 524, 340, 0, - 0, 0, 0, 345, 346, 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, 525, 526, 527, - 528, 529, 530, 531, 532, 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 368, 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, 0, 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, 0, - 0, 0, 0, 0, 0, 326, 0, 0, 0, 330, - 331, 332, 0, 0, 512, 513, 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, 514, 515, 0, 0, 0, 650, 905, - 0, 0, 0, 0, 0, 516, 517, 518, 519, 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, 520, 521, 522, 523, - 524, 340, 0, 0, 0, 0, 345, 346, 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, - 525, 526, 527, 528, 529, 530, 531, 532, 0, 0, - 355, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 368, 2, 3, 4, 5, 6, 7, + 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, @@ -2611,8 +2677,8 @@ static const yytype_int16 yytable[] = 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, 0, 167, - 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, + 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, @@ -2627,152 +2693,154 @@ static const yytype_int16 yytable[] = 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, - 318, 319, 0, 0, 0, 0, 0, 0, 326, 0, - 0, 0, 330, 331, 332, 0, 0, 512, 513, 0, + 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, 0, 0, 0, 0, 0, 514, 515, 0, 0, - 588, 0, 0, 0, 0, 0, 0, 0, 516, 517, - 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 520, - 521, 522, 523, 524, 340, 0, 0, 0, 0, 345, - 346, 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, 525, 526, 527, 528, 529, 530, 531, - 532, 0, 0, 355, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 368, 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, 0, 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, 0, 0, 0, 0, 0, - 0, 326, 0, 0, 0, 330, 331, 332, 0, 0, - 512, 513, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, - 515, 0, 0, 0, 650, 0, 0, 0, 0, 0, - 0, 516, 517, 518, 519, 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, 520, 521, 522, 523, 524, 340, 0, 0, - 0, 0, 345, 346, 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, 0, 0, 0, 0, 0, 525, 526, 527, 528, - 529, 530, 531, 532, 0, 0, 355, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 368, - 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, 0, 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, + 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, 0, 0, - 0, 0, 0, 0, 326, 0, 0, 0, 330, 331, - 332, 0, 0, 512, 513, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 514, 515, 0, 0, 753, 0, 0, 0, - 0, 0, 0, 0, 516, 517, 518, 519, 0, 0, + 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, 520, 521, 522, 523, 524, - 340, 0, 0, 0, 0, 345, 346, 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, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 525, - 526, 527, 528, 529, 530, 531, 532, 0, 0, 355, + 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, 368, 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, 0, 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, 0, 0, 0, 0, 0, 0, 326, 0, 0, - 0, 330, 331, 332, 0, 0, 512, 513, 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, 514, 515, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 764, 516, 517, 518, - 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 520, 521, - 522, 523, 524, 340, 0, 0, 0, 0, 345, 346, + 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, 525, 526, 527, 528, 529, 530, 531, 532, - 0, 0, 355, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 368, 2, 3, 4, 5, + 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, @@ -2789,7 +2857,7 @@ static const yytype_int16 yytable[] = 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, - 0, 167, 168, 169, 170, 171, 172, 173, 174, 175, + 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, @@ -2804,583 +2872,71 @@ static const yytype_int16 yytable[] = 286, 287, 288, 289, 290, 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, 0, 0, 0, 0, 0, 0, - 326, 0, 0, 0, 330, 331, 332, 0, 0, 512, - 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 514, 515, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 516, 517, 518, 519, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 520, 521, 522, 523, 524, 340, 0, 0, 0, - 0, 345, 346, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 525, 526, 527, 528, 529, - 530, 531, 532, 0, 0, 355, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 368, 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, 0, 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, 0, 0, 0, - 0, 0, 0, 326, 0, 0, 0, 330, 331, 332, - 0, 0, 512, 513, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 514, 515, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 516, 517, 518, 519, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 520, 521, 522, 523, 524, 340, - 0, 0, 0, 0, 345, 668, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 525, 526, - 527, 528, 529, 530, 531, 532, 0, 0, 355, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 368, 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, 0, 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, - 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, - 330, 331, 332, 0, 0, 512, 513, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 514, 515, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 516, 517, 518, 519, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 520, 521, 522, - 523, 713, 340, 0, 0, 0, 0, 345, 346, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 525, 526, 527, 528, 529, 530, 531, 532, 0, - 0, 355, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 368, 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, 0, - 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, 0, 0, 0, 0, 0, 0, 326, - 0, 0, 0, 330, 331, 332, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 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, - 0, 0, 0, 0, 0, 340, 0, 0, 0, 0, - 345, 346, 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, 0, 0, 0, 355 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 395, 0, 555, 494, 414, 0, 506, 636, 0, - 419, 571, 0, 414, 515, 447, 452, 565, 756, 571, - 414, 453, 580, 560, 403, 419, 426, 582, 356, 339, - 340, 344, 393, 367, 648, 356, 650, 574, 359, 653, - 356, 361, 541, 358, 918, 439, 583, 359, 357, 364, - 359, 925, 356, 335, 336, 367, 417, 366, 494, 393, - 375, 935, 390, 364, 443, 375, 376, 380, 357, 390, - 560, 503, 504, 393, 390, 376, 512, 513, 337, 338, - 459, 571, 359, 357, 574, 389, 390, 391, 392, 359, - 367, 358, 486, 583, 359, 359, 366, 364, 357, 654, - 359, 366, 366, 361, 363, 358, 364, 364, 544, 367, - 367, 364, 358, 603, 615, 358, 617, 358, 364, 358, - 358, 364, 357, 364, 560, 364, 364, 358, 553, 341, - 342, 358, 760, 364, 559, 571, 561, 364, 574, 564, - 358, 566, 390, 568, 569, 393, 364, 583, 573, 648, - 369, 650, 371, 553, 653, 421, 422, 423, 424, 425, - 426, 427, 663, 364, 365, 358, 358, 603, 667, 569, - 728, 364, 364, 359, 358, 358, 358, 358, 358, 793, - 364, 364, 364, 364, 364, 362, 580, 364, 582, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 578, - 358, 939, 358, 367, 358, 358, 364, 358, 364, 366, - 364, 364, 358, 364, 358, 358, 358, 358, 364, 357, - 364, 364, 364, 364, 389, 390, 391, 392, 393, 390, - 360, 360, 393, 861, 364, 364, 672, 646, 360, 357, - 798, 390, 364, 358, 393, 646, 739, 740, 741, 742, - 364, 365, 646, 389, 390, 391, 392, 735, 736, 873, - 654, 762, 357, 390, 390, 766, 393, 393, 737, 738, - 830, 390, 832, 357, 393, 357, 824, 825, 830, 364, - 817, 818, 367, 364, 390, 784, 785, 393, 357, 390, - 390, 723, 393, 393, 793, 357, 732, 733, 734, 735, - 736, 737, 738, 739, 740, 741, 742, 743, 744, 745, - 746, 747, 748, 749, 750, 929, 390, 945, 390, 393, - 390, 393, 364, 393, 375, 367, 364, 817, 818, 367, - 364, 367, 364, 367, 728, 367, 382, 383, 384, 393, - 830, 393, 832, 372, 373, 374, 743, 744, 393, 361, - 393, 361, 359, 393, 393, 359, 358, 366, 859, 367, - 393, 862, 367, 364, 379, 393, 393, 366, 364, 364, - 360, 364, 364, 356, 873, 364, 358, 364, 364, 364, - 364, 817, 818, 364, 357, 357, 366, 358, 357, 359, - 357, 359, 343, 345, 830, 395, 832, 360, 362, 378, - 377, 902, 357, 403, 798, 367, 367, 395, 357, 357, - 367, 411, 357, 411, 414, 403, 915, 411, 919, 419, - 411, 419, 365, 411, 358, 419, 414, 393, 393, 429, - 929, 419, 367, 934, 367, 367, 367, 357, 366, 439, - 438, 364, 364, 443, 358, 364, 393, 393, 358, 360, - 390, 439, 452, 862, 360, 443, 364, 356, 356, 459, - 401, 362, 358, 393, 357, 367, 361, 358, 862, 366, - 745, 459, 361, 361, 746, 367, 405, 362, 747, 750, - 748, 439, 585, 443, 443, 339, 486, 749, 722, 837, - 864, 924, 935, 902, 936, 437, 864, 497, 486, 646, - 902, 646, 411, 576, 815, 813, 646, 825, 902, 497, - 824, 818, -1, 830, -1, 820, 822, -1, -1, -1, - -1, -1, -1, -1, -1, 828, -1, -1, -1, -1, - 832, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 549, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 578, -1, - 580, -1, 582, -1, -1, -1, -1, -1, -1, -1, - 578, -1, 580, -1, 582, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 636, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 646, -1, 636, -1, - -1, -1, -1, -1, 654, -1, -1, -1, 646, -1, - -1, -1, -1, -1, -1, -1, 654, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 728, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 728, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 756, -1, -1, -1, - 760, -1, -1, -1, -1, -1, -1, -1, 756, -1, - -1, -1, 760, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 798, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 798, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 861, 862, -1, 864, -1, 864, -1, -1, -1, - -1, -1, -1, 861, 862, -1, 864, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 902, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 902, -1, -1, -1, 918, -1, - -1, -1, -1, -1, -1, 925, -1, -1, -1, -1, - 918, -1, -1, -1, -1, 935, -1, 925, -1, 939, - -1, -1, -1, -1, -1, 945, -1, 935, -1, -1, - -1, 939, -1, -1, -1, 0, -1, 945, 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, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 359, -1, -1, -1, -1, -1, - -1, -1, 367, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, - 385, -1, -1, -1, -1, -1, -1, -1, -1, 394, - 395, 396, 397, 398, 399, 400, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 416, 417, 418, 419, 420, 421, 422, -1, -1, - -1, -1, -1, -1, -1, -1, 431, -1, 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, 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, -1, -1, 337, 338, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 356, 357, -1, 359, - -1, 361, 362, -1, -1, -1, -1, 367, 368, 369, - 370, 371, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 381, 382, 383, 384, 385, -1, -1, -1, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, -1, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 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, - -1, -1, 337, 338, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 356, 357, -1, 359, -1, 361, 362, -1, -1, - -1, -1, 367, 368, 369, 370, 371, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, - 385, -1, -1, -1, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - -1, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 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, -1, -1, 337, 338, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 356, 357, -1, 359, - -1, 361, -1, -1, -1, -1, -1, 367, 368, 369, - 370, 371, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 381, 382, 383, 384, 385, -1, -1, -1, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, -1, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 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, - -1, -1, 337, 338, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 356, 357, -1, 359, -1, 361, -1, -1, -1, - -1, -1, 367, 368, 369, 370, 371, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, - 385, -1, -1, -1, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - -1, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 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, -1, -1, 337, 338, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 356, 357, -1, 359, - -1, -1, -1, -1, -1, -1, -1, 367, 368, 369, - 370, 371, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 381, 382, 383, 384, 385, -1, -1, -1, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, -1, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 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, - -1, -1, 337, 338, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 356, 357, -1, 359, -1, -1, -1, -1, -1, - -1, -1, 367, 368, 369, 370, 371, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, - 385, -1, -1, -1, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, -1, 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, 3, 4, 5, 6, 7, 8, 9, + 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, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 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, @@ -3391,7 +2947,7 @@ static const yytype_int16 yycheck[] = 140, 141, 142, 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, + 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, @@ -3406,21 +2962,307 @@ static const yytype_int16 yycheck[] = 290, 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, -1, -1, -1, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -1, -1, 337, 338, -1, + 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, - -1, -1, -1, -1, -1, -1, 356, 357, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 368, 369, - 370, 371, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 381, 382, 383, 384, -1, -1, -1, -1, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, -1, 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, 3, 4, + 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, -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, 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, @@ -3454,20 +3296,209 @@ 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, 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, 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, + 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, -1, -1, 359, -1, -1, -1, -1, -1, - -1, -1, 367, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, - 385, -1, -1, -1, -1, -1, -1, -1, -1, 394, - 395, 396, 397, 398, 399, 400, -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, - -1, 416, 417, 418, 419, 420, 421, 422, -1, -1, - -1, -1, -1, -1, -1, -1, 431, -1, 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, 3, 4, 5, 6, 7, 8, 9, + 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, @@ -3499,207 +3530,210 @@ static const yytype_int16 yycheck[] = 290, 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, -1, -1, -1, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -1, -1, -1, -1, -1, + 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, 381, 382, 383, 384, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, - 400, 401, -1, -1, 404, -1, 406, 407, -1, -1, - 410, -1, -1, -1, -1, -1, 416, 417, 418, 419, - 420, 421, 422, -1, -1, -1, -1, -1, -1, -1, - -1, 431, -1, 433, 434, 435, 436, 437, 438, 439, + -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, 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, -1, -1, -1, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 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, 367, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, -1, -1, -1, -1, -1, 393, 394, - 395, 396, 397, 398, 399, 400, -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, 416, 417, 418, 419, 420, 421, 422, -1, -1, - -1, -1, -1, -1, -1, -1, 431, -1, 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, 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, -1, -1, -1, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -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, 359, + -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, -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, 381, 382, 383, 384, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, - 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 416, 417, 418, 419, - 420, 421, 422, -1, -1, -1, -1, -1, -1, -1, - -1, 431, -1, 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, 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, -1, -1, -1, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + -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, 362, -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, -1, -1, 381, 382, 383, 384, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 394, - 395, 396, 397, 398, 399, 400, -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, 416, 417, 418, 419, 420, 421, 422, -1, -1, - -1, -1, -1, -1, -1, -1, 431, -1, 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, 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, -1, -1, -1, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -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, - -1, -1, 362, -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, 381, 382, 383, 384, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, - 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 416, 417, 418, 419, - 420, 421, 422, -1, -1, -1, -1, -1, -1, -1, - -1, 431, -1, 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, 3, 4, + -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, @@ -3731,68 +3765,114 @@ static const yytype_int16 yycheck[] = 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 317, 318, 319, 320, 321, -1, -1, -1, - 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 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, 362, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 394, - 395, 396, 397, 398, 399, 400, -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, 416, 417, 418, 419, 420, 421, 422, -1, -1, - -1, -1, -1, -1, -1, -1, 431, -1, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + -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, 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, -1, -1, -1, 325, 326, 327, 328, 329, - 330, 331, 332, 333, 334, -1, -1, -1, -1, -1, + 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, 381, 382, 383, 384, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, - 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 416, 417, 418, 419, - 420, 421, 422, -1, -1, -1, -1, -1, -1, -1, - -1, 431, -1, 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, 4, 5, + -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, + 34, 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, 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, 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, @@ -3809,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, -1, 169, 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, @@ -3824,64 +3904,65 @@ 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, -1, -1, -1, -1, - -1, -1, 328, -1, -1, -1, 332, 333, 334, -1, - -1, 337, 338, -1, -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, - 356, 357, -1, -1, -1, 361, 362, -1, -1, -1, - -1, -1, 368, 369, 370, 371, -1, -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, 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, 389, 390, 391, 392, 393, 394, -1, - -1, -1, -1, 399, 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 423, 424, 425, - 426, 427, 428, 429, 430, -1, -1, 433, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 446, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, - 33, 34, 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, -1, 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, -1, - -1, -1, -1, -1, -1, 328, -1, -1, -1, 332, - 333, 334, -1, -1, 337, 338, -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, 356, 357, -1, -1, -1, 361, 362, - -1, -1, -1, -1, -1, 368, 369, 370, 371, -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, 389, 390, 391, 392, - 393, 394, -1, -1, -1, -1, 399, 400, -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, - 423, 424, 425, 426, 427, 428, 429, 430, -1, -1, - 433, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 446, 4, 5, 6, 7, 8, 9, + 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, @@ -3897,79 +3978,80 @@ static const yytype_int16 yycheck[] = 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, -1, 169, - 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, + 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, -1, -1, -1, -1, -1, -1, 328, -1, - -1, -1, 332, 333, 334, -1, -1, 337, 338, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 356, 357, -1, -1, - 360, -1, -1, -1, -1, -1, -1, -1, 368, 369, - 370, 371, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 389, - 390, 391, 392, 393, 394, -1, -1, -1, -1, 399, - 400, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 423, 424, 425, 426, 427, 428, 429, - 430, -1, -1, 433, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 446, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 30, 31, 32, 33, 34, 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, -1, 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, -1, -1, -1, -1, -1, - -1, 328, -1, -1, -1, 332, 333, 334, -1, -1, - 337, 338, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 356, - 357, -1, -1, -1, 361, -1, -1, -1, -1, -1, - -1, 368, 369, 370, 371, -1, -1, -1, -1, -1, + 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, 389, 390, 391, 392, 393, 394, -1, -1, - -1, -1, 399, 400, -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, 423, 424, 425, 426, - 427, 428, 429, 430, -1, -1, 433, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 446, + -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, @@ -3986,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, -1, 169, 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, @@ -4001,64 +4083,65 @@ 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, -1, -1, - -1, -1, -1, -1, 328, -1, -1, -1, 332, 333, - 334, -1, -1, 337, 338, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 356, 357, -1, -1, 360, -1, -1, -1, - -1, -1, -1, -1, 368, 369, 370, 371, -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, -1, -1, 389, 390, 391, 392, 393, - 394, -1, -1, -1, -1, 399, 400, -1, -1, -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, -1, -1, -1, 423, - 424, 425, 426, 427, 428, 429, 430, -1, -1, 433, + 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, 446, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 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, -1, 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, -1, -1, -1, -1, -1, -1, 328, -1, -1, - -1, 332, 333, 334, -1, -1, 337, 338, -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, 356, 357, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 367, 368, 369, 370, - 371, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 389, 390, - 391, 392, 393, 394, -1, -1, -1, -1, 399, 400, + -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, 423, 424, 425, 426, 427, 428, 429, 430, - -1, -1, 433, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 446, 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, @@ -4075,7 +4158,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, - -1, 169, 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, @@ -4090,64 +4173,65 @@ 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, -1, -1, -1, -1, -1, -1, - 328, -1, -1, -1, 332, 333, 334, -1, -1, 337, - 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 356, 357, + 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, - 368, 369, 370, 371, -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, 389, 390, 391, 392, 393, 394, -1, -1, -1, - -1, 399, 400, -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, 423, 424, 425, 426, 427, - 428, 429, 430, -1, -1, 433, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 446, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, - 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, -1, 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, -1, -1, -1, - -1, -1, -1, 328, -1, -1, -1, 332, 333, 334, - -1, -1, 337, 338, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 356, 357, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 368, 369, 370, 371, -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, 389, 390, 391, 392, 393, 394, - -1, -1, -1, -1, 399, 400, -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, 423, 424, - 425, 426, 427, 428, 429, 430, -1, -1, 433, -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, 446, 4, 5, 6, 7, 8, 9, 10, 11, + -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, @@ -4163,8 +4247,8 @@ 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, -1, 169, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, + 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, @@ -4179,62 +4263,18 @@ 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, - -1, -1, -1, -1, -1, -1, 328, -1, -1, -1, - 332, 333, 334, -1, -1, 337, 338, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 356, 357, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 368, 369, 370, 371, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 389, 390, 391, - 392, 393, 394, -1, -1, -1, -1, 399, 400, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 423, 424, 425, 426, 427, 428, 429, 430, -1, - -1, 433, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 446, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 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, -1, - 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, -1, -1, -1, -1, -1, -1, 328, - -1, -1, -1, 332, 333, 334, -1, -1, -1, -1, + 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, 394, -1, -1, -1, -1, - 399, 400, -1, -1, -1, -1, -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, 433 + -1, -1, -1, -1, -1, -1, 438 }; /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of @@ -4274,144 +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, 359, 367, 381, 382, 383, 384, 385, - 394, 395, 396, 397, 398, 399, 400, 416, 417, 418, - 419, 420, 421, 422, 431, 433, 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, - 499, 500, 503, 504, 505, 506, 510, 511, 512, 513, - 514, 515, 518, 519, 520, 521, 522, 524, 529, 530, - 531, 572, 573, 574, 576, 583, 587, 588, 594, 597, - 357, 357, 357, 357, 357, 357, 357, 357, 359, 530, - 361, 393, 357, 357, 367, 393, 367, 575, 358, 364, - 507, 508, 509, 519, 524, 364, 367, 393, 367, 393, - 520, 524, 375, 526, 527, 0, 573, 504, 512, 519, - 367, 503, 393, 579, 580, 598, 599, 390, 393, 579, - 390, 579, 390, 579, 390, 579, 390, 579, 579, 598, - 390, 579, 393, 577, 578, 524, 533, 361, 393, 417, - 516, 517, 393, 523, 359, 367, 525, 361, 551, 576, - 508, 507, 509, 393, 393, 357, 366, 525, 361, 364, - 367, 502, 337, 338, 356, 357, 368, 369, 370, 371, - 389, 390, 391, 392, 393, 423, 424, 425, 426, 427, - 428, 429, 430, 469, 470, 471, 473, 474, 475, 476, - 477, 478, 479, 480, 481, 522, 524, 528, 525, 358, - 393, 367, 366, 364, 358, 364, 358, 364, 366, 364, - 364, 364, 358, 364, 364, 364, 364, 364, 364, 364, - 358, 364, 358, 364, 357, 360, 364, 367, 519, 524, - 534, 535, 532, 366, 358, 364, 358, 364, 360, 480, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 524, 359, 367, 361, 362, 367, 401, 402, - 403, 404, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 432, 480, 493, 495, 497, 499, 503, 522, - 524, 540, 541, 542, 543, 544, 552, 553, 554, 555, - 558, 559, 562, 563, 564, 571, 576, 525, 366, 525, - 361, 495, 538, 366, 501, 393, 364, 367, 480, 480, - 497, 337, 338, 359, 363, 358, 358, 364, 400, 495, - 357, 480, 364, 376, 576, 356, 359, 390, 580, 598, - 393, 599, 356, 389, 390, 391, 392, 584, 585, 390, - 493, 498, 586, 390, 389, 390, 391, 392, 589, 590, - 390, 389, 390, 391, 392, 469, 591, 592, 390, 356, - 593, 390, 598, 393, 498, 529, 595, 596, 390, 498, - 360, 578, 524, 393, 536, 537, 362, 535, 534, 498, - 517, 393, 372, 373, 374, 369, 371, 335, 336, 339, - 340, 375, 376, 341, 342, 379, 378, 377, 343, 345, - 344, 380, 360, 360, 493, 362, 545, 357, 367, 367, - 566, 357, 357, 367, 367, 497, 357, 497, 365, 367, - 367, 367, 367, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 366, 496, 364, 367, 362, 541, 555, - 559, 564, 538, 366, 362, 538, 539, 538, 534, 393, - 358, 472, 497, 393, 495, 480, 356, 390, 581, 582, - 358, 366, 358, 364, 358, 364, 358, 364, 364, 358, - 364, 358, 364, 358, 364, 364, 358, 364, 364, 358, - 364, 358, 364, 358, 358, 536, 525, 364, 367, 362, - 480, 480, 480, 482, 482, 483, 483, 484, 484, 484, - 484, 485, 485, 486, 487, 488, 489, 490, 491, 494, - 360, 552, 565, 541, 567, 497, 367, 497, 365, 495, - 495, 538, 362, 364, 362, 360, 360, 364, 360, 364, - 585, 584, 498, 586, 590, 589, 592, 591, 356, 593, - 595, 596, 367, 537, 497, 546, 497, 512, 557, 401, - 540, 553, 568, 358, 358, 362, 538, 356, 390, 358, - 358, 358, 358, 358, 358, 365, 362, 393, 358, 357, - 557, 569, 570, 548, 549, 550, 556, 560, 495, 366, - 542, 547, 551, 497, 367, 358, 405, 544, 542, 361, - 538, 358, 497, 547, 548, 552, 561, 367, 362 + 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, 468, 469, 470, 470, 470, 470, 470, 470, 470, - 470, 470, 470, 470, 470, 470, 470, 470, 471, 471, - 471, 471, 471, 471, 472, 473, 474, 475, 475, 476, - 476, 477, 477, 478, 479, 479, 479, 480, 480, 480, - 480, 481, 481, 481, 481, 482, 482, 482, 482, 483, - 483, 483, 484, 484, 484, 485, 485, 485, 485, 485, - 486, 486, 486, 487, 487, 488, 488, 489, 489, 490, - 490, 491, 491, 492, 492, 493, 494, 493, 495, 495, - 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, - 496, 497, 497, 498, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 501, 500, 502, 502, 503, - 503, 503, 503, 504, 504, 505, 505, 506, 507, 507, - 508, 508, 508, 508, 509, 510, 510, 510, 510, 510, - 511, 511, 511, 511, 511, 512, 512, 513, 514, 514, - 514, 514, 514, 514, 514, 514, 514, 514, 515, 516, - 516, 517, 517, 517, 518, 519, 519, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 521, 521, 522, 523, 523, 524, - 524, 525, 525, 525, 525, 526, 526, 527, 528, 528, - 528, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 529, 530, 530, 530, 532, 531, 533, - 531, 534, 534, 535, 535, 536, 536, 537, 537, 538, - 538, 538, 538, 539, 539, 540, 541, 541, 542, 542, - 542, 542, 542, 542, 542, 542, 543, 544, 545, 546, - 544, 547, 547, 549, 548, 550, 548, 551, 551, 552, - 552, 553, 553, 554, 554, 555, 556, 556, 557, 557, - 558, 558, 560, 559, 561, 561, 562, 562, 563, 563, - 565, 564, 566, 564, 567, 564, 568, 568, 569, 569, - 570, 570, 571, 571, 571, 571, 571, 571, 571, 571, - 572, 572, 573, 573, 573, 575, 574, 576, 577, 577, - 578, 578, 579, 579, 580, 580, 581, 581, 582, 582, - 583, 583, 583, 583, 583, 583, 584, 584, 585, 585, - 585, 585, 585, 586, 586, 587, 587, 588, 588, 588, - 588, 588, 588, 588, 588, 589, 589, 590, 590, 590, - 590, 591, 591, 592, 592, 592, 592, 592, 593, 593, - 594, 594, 594, 594, 595, 595, 596, 596, 597, 597, - 598, 598, 599, 599 + 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. */ @@ -4437,9 +4478,9 @@ 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, 4, 1, 1, 1, 3, 2, - 3, 2, 3, 3, 4, 1, 0, 3, 1, 1, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 4, 1, 1, 1, 3, + 2, 3, 2, 3, 3, 4, 1, 0, 3, 1, + 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -4471,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, 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 }; @@ -5229,260 +5270,260 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); switch (yyn) { case 2: /* variable_identifier: IDENTIFIER */ -#line 356 "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 5237 "MachineIndependent/glslang_tab.cpp" +#line 5278 "MachineIndependent/glslang_tab.cpp" break; case 3: /* primary_expression: variable_identifier */ -#line 362 "MachineIndependent/glslang.y" +#line 364 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5245 "MachineIndependent/glslang_tab.cpp" +#line 5286 "MachineIndependent/glslang_tab.cpp" break; case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */ -#line 365 "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 5255 "MachineIndependent/glslang_tab.cpp" +#line 5296 "MachineIndependent/glslang_tab.cpp" break; case 5: /* primary_expression: FLOATCONSTANT */ -#line 370 "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 5263 "MachineIndependent/glslang_tab.cpp" +#line 5304 "MachineIndependent/glslang_tab.cpp" break; case 6: /* primary_expression: INTCONSTANT */ -#line 373 "MachineIndependent/glslang.y" +#line 375 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 5271 "MachineIndependent/glslang_tab.cpp" +#line 5312 "MachineIndependent/glslang_tab.cpp" break; case 7: /* primary_expression: UINTCONSTANT */ -#line 376 "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 5280 "MachineIndependent/glslang_tab.cpp" +#line 5321 "MachineIndependent/glslang_tab.cpp" break; case 8: /* primary_expression: BOOLCONSTANT */ -#line 380 "MachineIndependent/glslang.y" +#line 382 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 5288 "MachineIndependent/glslang_tab.cpp" +#line 5329 "MachineIndependent/glslang_tab.cpp" break; case 9: /* primary_expression: STRING_LITERAL */ -#line 383 "MachineIndependent/glslang.y" +#line 385 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 5296 "MachineIndependent/glslang_tab.cpp" +#line 5337 "MachineIndependent/glslang_tab.cpp" break; case 10: /* primary_expression: INT32CONSTANT */ -#line 386 "MachineIndependent/glslang.y" +#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 5305 "MachineIndependent/glslang_tab.cpp" +#line 5346 "MachineIndependent/glslang_tab.cpp" break; case 11: /* primary_expression: UINT32CONSTANT */ -#line 390 "MachineIndependent/glslang.y" +#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 5314 "MachineIndependent/glslang_tab.cpp" +#line 5355 "MachineIndependent/glslang_tab.cpp" break; case 12: /* primary_expression: INT64CONSTANT */ -#line 394 "MachineIndependent/glslang.y" +#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 5323 "MachineIndependent/glslang_tab.cpp" +#line 5364 "MachineIndependent/glslang_tab.cpp" break; case 13: /* primary_expression: UINT64CONSTANT */ -#line 398 "MachineIndependent/glslang.y" +#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 5332 "MachineIndependent/glslang_tab.cpp" +#line 5373 "MachineIndependent/glslang_tab.cpp" break; case 14: /* primary_expression: INT16CONSTANT */ -#line 402 "MachineIndependent/glslang.y" +#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 5341 "MachineIndependent/glslang_tab.cpp" +#line 5382 "MachineIndependent/glslang_tab.cpp" break; case 15: /* primary_expression: UINT16CONSTANT */ -#line 406 "MachineIndependent/glslang.y" +#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 5350 "MachineIndependent/glslang_tab.cpp" +#line 5391 "MachineIndependent/glslang_tab.cpp" break; case 16: /* primary_expression: DOUBLECONSTANT */ -#line 410 "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 5361 "MachineIndependent/glslang_tab.cpp" +#line 5402 "MachineIndependent/glslang_tab.cpp" break; case 17: /* primary_expression: FLOAT16CONSTANT */ -#line 416 "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 5370 "MachineIndependent/glslang_tab.cpp" +#line 5411 "MachineIndependent/glslang_tab.cpp" break; case 18: /* postfix_expression: primary_expression */ -#line 423 "MachineIndependent/glslang.y" +#line 425 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5378 "MachineIndependent/glslang_tab.cpp" +#line 5419 "MachineIndependent/glslang_tab.cpp" break; case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ -#line 426 "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 5386 "MachineIndependent/glslang_tab.cpp" +#line 5427 "MachineIndependent/glslang_tab.cpp" break; case 20: /* postfix_expression: function_call */ -#line 429 "MachineIndependent/glslang.y" +#line 431 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5394 "MachineIndependent/glslang_tab.cpp" +#line 5435 "MachineIndependent/glslang_tab.cpp" break; case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER */ -#line 432 "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 5402 "MachineIndependent/glslang_tab.cpp" +#line 5443 "MachineIndependent/glslang_tab.cpp" break; case 22: /* postfix_expression: postfix_expression INC_OP */ -#line 435 "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 5412 "MachineIndependent/glslang_tab.cpp" +#line 5453 "MachineIndependent/glslang_tab.cpp" break; case 23: /* postfix_expression: postfix_expression DEC_OP */ -#line 440 "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 5422 "MachineIndependent/glslang_tab.cpp" +#line 5463 "MachineIndependent/glslang_tab.cpp" break; case 24: /* integer_expression: expression */ -#line 448 "MachineIndependent/glslang.y" +#line 450 "MachineIndependent/glslang.y" { parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5431 "MachineIndependent/glslang_tab.cpp" +#line 5472 "MachineIndependent/glslang_tab.cpp" break; case 25: /* function_call: function_call_or_method */ -#line 455 "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 5440 "MachineIndependent/glslang_tab.cpp" +#line 5481 "MachineIndependent/glslang_tab.cpp" break; case 26: /* function_call_or_method: function_call_generic */ -#line 462 "MachineIndependent/glslang.y" +#line 464 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5448 "MachineIndependent/glslang_tab.cpp" +#line 5489 "MachineIndependent/glslang_tab.cpp" break; case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ -#line 468 "MachineIndependent/glslang.y" +#line 470 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5457 "MachineIndependent/glslang_tab.cpp" +#line 5498 "MachineIndependent/glslang_tab.cpp" break; case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ -#line 472 "MachineIndependent/glslang.y" +#line 474 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5466 "MachineIndependent/glslang_tab.cpp" +#line 5507 "MachineIndependent/glslang_tab.cpp" break; case 29: /* function_call_header_no_parameters: function_call_header VOID */ -#line 479 "MachineIndependent/glslang.y" +#line 481 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 5474 "MachineIndependent/glslang_tab.cpp" +#line 5515 "MachineIndependent/glslang_tab.cpp" break; case 30: /* function_call_header_no_parameters: function_call_header */ -#line 482 "MachineIndependent/glslang.y" +#line 484 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5482 "MachineIndependent/glslang_tab.cpp" +#line 5523 "MachineIndependent/glslang_tab.cpp" break; case 31: /* function_call_header_with_parameters: function_call_header assignment_expression */ -#line 488 "MachineIndependent/glslang.y" +#line 490 "MachineIndependent/glslang.y" { if (parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed @@ -5501,11 +5542,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } } -#line 5505 "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 506 "MachineIndependent/glslang.y" +#line 508 "MachineIndependent/glslang.y" { if (parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed @@ -5528,29 +5569,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); } } -#line 5532 "MachineIndependent/glslang_tab.cpp" +#line 5573 "MachineIndependent/glslang_tab.cpp" break; case 33: /* function_call_header: function_identifier LEFT_PAREN */ -#line 531 "MachineIndependent/glslang.y" +#line 533 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 5540 "MachineIndependent/glslang_tab.cpp" +#line 5581 "MachineIndependent/glslang_tab.cpp" break; case 34: /* function_identifier: type_specifier */ -#line 539 "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 5550 "MachineIndependent/glslang_tab.cpp" +#line 5591 "MachineIndependent/glslang_tab.cpp" break; case 35: /* function_identifier: postfix_expression */ -#line 544 "MachineIndependent/glslang.y" +#line 546 "MachineIndependent/glslang.y" { // // Should be a method or subroutine call, but we haven't recognized the arguments yet. @@ -5578,50 +5619,50 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 5582 "MachineIndependent/glslang_tab.cpp" +#line 5623 "MachineIndependent/glslang_tab.cpp" break; case 36: /* function_identifier: non_uniform_qualifier */ -#line 571 "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 5592 "MachineIndependent/glslang_tab.cpp" +#line 5633 "MachineIndependent/glslang_tab.cpp" break; case 37: /* unary_expression: postfix_expression */ -#line 579 "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 5603 "MachineIndependent/glslang_tab.cpp" +#line 5644 "MachineIndependent/glslang_tab.cpp" break; case 38: /* unary_expression: INC_OP unary_expression */ -#line 585 "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 5612 "MachineIndependent/glslang_tab.cpp" +#line 5653 "MachineIndependent/glslang_tab.cpp" break; case 39: /* unary_expression: DEC_OP unary_expression */ -#line 589 "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 5621 "MachineIndependent/glslang_tab.cpp" +#line 5662 "MachineIndependent/glslang_tab.cpp" break; case 40: /* unary_expression: unary_operator unary_expression */ -#line 593 "MachineIndependent/glslang.y" +#line 595 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm).op != EOpNull) { char errorOp[2] = {0, 0}; @@ -5638,179 +5679,179 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 5642 "MachineIndependent/glslang_tab.cpp" +#line 5683 "MachineIndependent/glslang_tab.cpp" break; case 41: /* unary_operator: PLUS */ -#line 613 "MachineIndependent/glslang.y" +#line 615 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 5648 "MachineIndependent/glslang_tab.cpp" +#line 5689 "MachineIndependent/glslang_tab.cpp" break; case 42: /* unary_operator: DASH */ -#line 614 "MachineIndependent/glslang.y" +#line 616 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 5654 "MachineIndependent/glslang_tab.cpp" +#line 5695 "MachineIndependent/glslang_tab.cpp" break; case 43: /* unary_operator: BANG */ -#line 615 "MachineIndependent/glslang.y" +#line 617 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 5660 "MachineIndependent/glslang_tab.cpp" +#line 5701 "MachineIndependent/glslang_tab.cpp" break; case 44: /* unary_operator: TILDE */ -#line 616 "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 5667 "MachineIndependent/glslang_tab.cpp" +#line 5708 "MachineIndependent/glslang_tab.cpp" break; case 45: /* multiplicative_expression: unary_expression */ -#line 622 "MachineIndependent/glslang.y" +#line 624 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5673 "MachineIndependent/glslang_tab.cpp" +#line 5714 "MachineIndependent/glslang_tab.cpp" break; case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ -#line 623 "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 5683 "MachineIndependent/glslang_tab.cpp" +#line 5724 "MachineIndependent/glslang_tab.cpp" break; case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ -#line 628 "MachineIndependent/glslang.y" +#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 5693 "MachineIndependent/glslang_tab.cpp" +#line 5734 "MachineIndependent/glslang_tab.cpp" break; case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ -#line 633 "MachineIndependent/glslang.y" +#line 635 "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 5704 "MachineIndependent/glslang_tab.cpp" +#line 5745 "MachineIndependent/glslang_tab.cpp" break; case 49: /* additive_expression: multiplicative_expression */ -#line 642 "MachineIndependent/glslang.y" +#line 644 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5710 "MachineIndependent/glslang_tab.cpp" +#line 5751 "MachineIndependent/glslang_tab.cpp" break; case 50: /* additive_expression: additive_expression PLUS multiplicative_expression */ -#line 643 "MachineIndependent/glslang.y" +#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 5720 "MachineIndependent/glslang_tab.cpp" +#line 5761 "MachineIndependent/glslang_tab.cpp" break; case 51: /* additive_expression: additive_expression DASH multiplicative_expression */ -#line 648 "MachineIndependent/glslang.y" +#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 5730 "MachineIndependent/glslang_tab.cpp" +#line 5771 "MachineIndependent/glslang_tab.cpp" break; case 52: /* shift_expression: additive_expression */ -#line 656 "MachineIndependent/glslang.y" +#line 658 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5736 "MachineIndependent/glslang_tab.cpp" +#line 5777 "MachineIndependent/glslang_tab.cpp" break; case 53: /* shift_expression: shift_expression LEFT_OP additive_expression */ -#line 657 "MachineIndependent/glslang.y" +#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 5747 "MachineIndependent/glslang_tab.cpp" +#line 5788 "MachineIndependent/glslang_tab.cpp" break; case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression */ -#line 663 "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 5758 "MachineIndependent/glslang_tab.cpp" +#line 5799 "MachineIndependent/glslang_tab.cpp" break; case 55: /* relational_expression: shift_expression */ -#line 672 "MachineIndependent/glslang.y" +#line 674 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5764 "MachineIndependent/glslang_tab.cpp" +#line 5805 "MachineIndependent/glslang_tab.cpp" break; case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ -#line 673 "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 5774 "MachineIndependent/glslang_tab.cpp" +#line 5815 "MachineIndependent/glslang_tab.cpp" break; case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ -#line 678 "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 5784 "MachineIndependent/glslang_tab.cpp" +#line 5825 "MachineIndependent/glslang_tab.cpp" break; case 58: /* relational_expression: relational_expression LE_OP shift_expression */ -#line 683 "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 5794 "MachineIndependent/glslang_tab.cpp" +#line 5835 "MachineIndependent/glslang_tab.cpp" break; case 59: /* relational_expression: relational_expression GE_OP shift_expression */ -#line 688 "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 5804 "MachineIndependent/glslang_tab.cpp" +#line 5845 "MachineIndependent/glslang_tab.cpp" break; case 60: /* equality_expression: relational_expression */ -#line 696 "MachineIndependent/glslang.y" +#line 698 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5810 "MachineIndependent/glslang_tab.cpp" +#line 5851 "MachineIndependent/glslang_tab.cpp" break; case 61: /* equality_expression: equality_expression EQ_OP relational_expression */ -#line 697 "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(), "=="); @@ -5820,11 +5861,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5824 "MachineIndependent/glslang_tab.cpp" +#line 5865 "MachineIndependent/glslang_tab.cpp" break; case 62: /* equality_expression: equality_expression NE_OP relational_expression */ -#line 706 "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(), "!="); @@ -5834,124 +5875,124 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5838 "MachineIndependent/glslang_tab.cpp" +#line 5879 "MachineIndependent/glslang_tab.cpp" break; case 63: /* and_expression: equality_expression */ -#line 718 "MachineIndependent/glslang.y" +#line 720 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5844 "MachineIndependent/glslang_tab.cpp" +#line 5885 "MachineIndependent/glslang_tab.cpp" break; case 64: /* and_expression: and_expression AMPERSAND equality_expression */ -#line 719 "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 5855 "MachineIndependent/glslang_tab.cpp" +#line 5896 "MachineIndependent/glslang_tab.cpp" break; case 65: /* exclusive_or_expression: and_expression */ -#line 728 "MachineIndependent/glslang.y" +#line 730 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5861 "MachineIndependent/glslang_tab.cpp" +#line 5902 "MachineIndependent/glslang_tab.cpp" break; case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ -#line 729 "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 5872 "MachineIndependent/glslang_tab.cpp" +#line 5913 "MachineIndependent/glslang_tab.cpp" break; case 67: /* inclusive_or_expression: exclusive_or_expression */ -#line 738 "MachineIndependent/glslang.y" +#line 740 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5878 "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 739 "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 5889 "MachineIndependent/glslang_tab.cpp" +#line 5930 "MachineIndependent/glslang_tab.cpp" break; case 69: /* logical_and_expression: inclusive_or_expression */ -#line 748 "MachineIndependent/glslang.y" +#line 750 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5895 "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 749 "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 5905 "MachineIndependent/glslang_tab.cpp" +#line 5946 "MachineIndependent/glslang_tab.cpp" break; case 71: /* logical_xor_expression: logical_and_expression */ -#line 757 "MachineIndependent/glslang.y" +#line 759 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5911 "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 758 "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 5921 "MachineIndependent/glslang_tab.cpp" +#line 5962 "MachineIndependent/glslang_tab.cpp" break; case 73: /* logical_or_expression: logical_xor_expression */ -#line 766 "MachineIndependent/glslang.y" +#line 768 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5927 "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 767 "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 5937 "MachineIndependent/glslang_tab.cpp" +#line 5978 "MachineIndependent/glslang_tab.cpp" break; case 75: /* conditional_expression: logical_or_expression */ -#line 775 "MachineIndependent/glslang.y" +#line 777 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5943 "MachineIndependent/glslang_tab.cpp" +#line 5984 "MachineIndependent/glslang_tab.cpp" break; case 76: /* $@1: %empty */ -#line 776 "MachineIndependent/glslang.y" +#line 778 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 5951 "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 779 "MachineIndependent/glslang.y" +#line 781 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode)); @@ -5964,17 +6005,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5968 "MachineIndependent/glslang_tab.cpp" +#line 6009 "MachineIndependent/glslang_tab.cpp" break; case 78: /* assignment_expression: conditional_expression */ -#line 794 "MachineIndependent/glslang.y" +#line 796 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5974 "MachineIndependent/glslang_tab.cpp" +#line 6015 "MachineIndependent/glslang_tab.cpp" break; case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression */ -#line 795 "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(), "="); @@ -5988,119 +6029,119 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 5992 "MachineIndependent/glslang_tab.cpp" +#line 6033 "MachineIndependent/glslang_tab.cpp" break; case 80: /* assignment_operator: EQUAL */ -#line 811 "MachineIndependent/glslang.y" +#line 813 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 6001 "MachineIndependent/glslang_tab.cpp" +#line 6042 "MachineIndependent/glslang_tab.cpp" break; case 81: /* assignment_operator: MUL_ASSIGN */ -#line 815 "MachineIndependent/glslang.y" +#line 817 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 6010 "MachineIndependent/glslang_tab.cpp" +#line 6051 "MachineIndependent/glslang_tab.cpp" break; case 82: /* assignment_operator: DIV_ASSIGN */ -#line 819 "MachineIndependent/glslang.y" +#line 821 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 6019 "MachineIndependent/glslang_tab.cpp" +#line 6060 "MachineIndependent/glslang_tab.cpp" break; case 83: /* assignment_operator: MOD_ASSIGN */ -#line 823 "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 6029 "MachineIndependent/glslang_tab.cpp" +#line 6070 "MachineIndependent/glslang_tab.cpp" break; case 84: /* assignment_operator: ADD_ASSIGN */ -#line 828 "MachineIndependent/glslang.y" +#line 830 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 6038 "MachineIndependent/glslang_tab.cpp" +#line 6079 "MachineIndependent/glslang_tab.cpp" break; case 85: /* assignment_operator: SUB_ASSIGN */ -#line 832 "MachineIndependent/glslang.y" +#line 834 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 6047 "MachineIndependent/glslang_tab.cpp" +#line 6088 "MachineIndependent/glslang_tab.cpp" break; case 86: /* assignment_operator: LEFT_ASSIGN */ -#line 836 "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 6056 "MachineIndependent/glslang_tab.cpp" +#line 6097 "MachineIndependent/glslang_tab.cpp" break; case 87: /* assignment_operator: RIGHT_ASSIGN */ -#line 840 "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 6065 "MachineIndependent/glslang_tab.cpp" +#line 6106 "MachineIndependent/glslang_tab.cpp" break; case 88: /* assignment_operator: AND_ASSIGN */ -#line 844 "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 6074 "MachineIndependent/glslang_tab.cpp" +#line 6115 "MachineIndependent/glslang_tab.cpp" break; case 89: /* assignment_operator: XOR_ASSIGN */ -#line 848 "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 6083 "MachineIndependent/glslang_tab.cpp" +#line 6124 "MachineIndependent/glslang_tab.cpp" break; case 90: /* assignment_operator: OR_ASSIGN */ -#line 852 "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 6092 "MachineIndependent/glslang_tab.cpp" +#line 6133 "MachineIndependent/glslang_tab.cpp" break; case 91: /* expression: assignment_expression */ -#line 859 "MachineIndependent/glslang.y" +#line 861 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6100 "MachineIndependent/glslang_tab.cpp" +#line 6141 "MachineIndependent/glslang_tab.cpp" break; case 92: /* expression: expression COMMA assignment_expression */ -#line 862 "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); @@ -6109,30 +6150,30 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 6113 "MachineIndependent/glslang_tab.cpp" +#line 6154 "MachineIndependent/glslang_tab.cpp" break; case 93: /* constant_expression: conditional_expression */ -#line 873 "MachineIndependent/glslang.y" +#line 875 "MachineIndependent/glslang.y" { parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6122 "MachineIndependent/glslang_tab.cpp" +#line 6163 "MachineIndependent/glslang_tab.cpp" break; case 94: /* declaration: function_prototype SEMICOLON */ -#line 880 "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 6132 "MachineIndependent/glslang_tab.cpp" +#line 6173 "MachineIndependent/glslang_tab.cpp" break; case 95: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON */ -#line 885 "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 @@ -6140,31 +6181,31 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 6144 "MachineIndependent/glslang_tab.cpp" +#line 6185 "MachineIndependent/glslang_tab.cpp" break; case 96: /* declaration: spirv_execution_mode_qualifier SEMICOLON */ -#line 892 "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 6154 "MachineIndependent/glslang_tab.cpp" +#line 6195 "MachineIndependent/glslang_tab.cpp" break; case 97: /* declaration: init_declarator_list SEMICOLON */ -#line 897 "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 6164 "MachineIndependent/glslang_tab.cpp" +#line 6205 "MachineIndependent/glslang_tab.cpp" break; case 98: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ -#line 902 "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 @@ -6172,75 +6213,75 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 6176 "MachineIndependent/glslang_tab.cpp" +#line 6217 "MachineIndependent/glslang_tab.cpp" break; case 99: /* declaration: block_structure SEMICOLON */ -#line 909 "MachineIndependent/glslang.y" +#line 911 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 6185 "MachineIndependent/glslang_tab.cpp" +#line 6226 "MachineIndependent/glslang_tab.cpp" break; case 100: /* declaration: block_structure IDENTIFIER SEMICOLON */ -#line 913 "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 6194 "MachineIndependent/glslang_tab.cpp" +#line 6235 "MachineIndependent/glslang_tab.cpp" break; case 101: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ -#line 917 "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 6203 "MachineIndependent/glslang_tab.cpp" +#line 6244 "MachineIndependent/glslang_tab.cpp" break; case 102: /* declaration: type_qualifier SEMICOLON */ -#line 921 "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 6213 "MachineIndependent/glslang_tab.cpp" +#line 6254 "MachineIndependent/glslang_tab.cpp" break; case 103: /* declaration: type_qualifier IDENTIFIER SEMICOLON */ -#line 926 "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 6223 "MachineIndependent/glslang_tab.cpp" +#line 6264 "MachineIndependent/glslang_tab.cpp" break; case 104: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON */ -#line 931 "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 6234 "MachineIndependent/glslang_tab.cpp" +#line 6275 "MachineIndependent/glslang_tab.cpp" break; case 105: /* $@2: %empty */ -#line 940 "MachineIndependent/glslang.y" +#line 942 "MachineIndependent/glslang.y" { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 6240 "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 940 "MachineIndependent/glslang.y" +#line 942 "MachineIndependent/glslang.y" { --parseContext.blockNestingLevel; parseContext.blockName = (yyvsp[-4].lex).string; @@ -6250,39 +6291,39 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 6254 "MachineIndependent/glslang_tab.cpp" +#line 6295 "MachineIndependent/glslang_tab.cpp" break; case 107: /* identifier_list: COMMA IDENTIFIER */ -#line 951 "MachineIndependent/glslang.y" +#line 953 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 6263 "MachineIndependent/glslang_tab.cpp" +#line 6304 "MachineIndependent/glslang_tab.cpp" break; case 108: /* identifier_list: identifier_list COMMA IDENTIFIER */ -#line 955 "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 6272 "MachineIndependent/glslang_tab.cpp" +#line 6313 "MachineIndependent/glslang_tab.cpp" break; case 109: /* function_prototype: function_declarator RIGHT_PAREN */ -#line 962 "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 6282 "MachineIndependent/glslang_tab.cpp" +#line 6323 "MachineIndependent/glslang_tab.cpp" break; case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute */ -#line 967 "MachineIndependent/glslang.y" +#line 969 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-2].interm.function); if (parseContext.compileOnly) (yyval.interm).function->setExport(); @@ -6291,11 +6332,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[-1].lex).loc, 2, extensions, "attribute"); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); } -#line 6295 "MachineIndependent/glslang_tab.cpp" +#line 6336 "MachineIndependent/glslang_tab.cpp" break; case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN */ -#line 975 "MachineIndependent/glslang.y" +#line 977 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-1].interm.function); if (parseContext.compileOnly) (yyval.interm).function->setExport(); @@ -6304,11 +6345,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[0].lex).loc, 2, extensions, "attribute"); parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes)); } -#line 6308 "MachineIndependent/glslang_tab.cpp" +#line 6349 "MachineIndependent/glslang_tab.cpp" break; case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute */ -#line 983 "MachineIndependent/glslang.y" +#line 985 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-2].interm.function); if (parseContext.compileOnly) (yyval.interm).function->setExport(); @@ -6318,27 +6359,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes)); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); } -#line 6322 "MachineIndependent/glslang_tab.cpp" +#line 6363 "MachineIndependent/glslang_tab.cpp" break; case 113: /* function_declarator: function_header */ -#line 995 "MachineIndependent/glslang.y" +#line 997 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 6330 "MachineIndependent/glslang_tab.cpp" +#line 6371 "MachineIndependent/glslang_tab.cpp" break; case 114: /* function_declarator: function_header_with_parameters */ -#line 998 "MachineIndependent/glslang.y" +#line 1000 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 6338 "MachineIndependent/glslang_tab.cpp" +#line 6379 "MachineIndependent/glslang_tab.cpp" break; case 115: /* function_header_with_parameters: function_header parameter_declaration */ -#line 1005 "MachineIndependent/glslang.y" +#line 1007 "MachineIndependent/glslang.y" { // Add the parameter (yyval.interm.function) = (yyvsp[-1].interm.function); @@ -6352,11 +6393,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else delete (yyvsp[0].interm).param.type; } -#line 6356 "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 1018 "MachineIndependent/glslang.y" +#line 1020 "MachineIndependent/glslang.y" { // // Only first parameter of one-parameter functions can be void @@ -6377,11 +6418,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-2].interm.function), (yyvsp[0].interm).param); } } -#line 6381 "MachineIndependent/glslang_tab.cpp" +#line 6422 "MachineIndependent/glslang_tab.cpp" break; case 117: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ -#line 1041 "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", @@ -6401,11 +6442,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 6405 "MachineIndependent/glslang_tab.cpp" +#line 6446 "MachineIndependent/glslang_tab.cpp" break; case 118: /* parameter_declarator: type_specifier IDENTIFIER */ -#line 1064 "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"); @@ -6421,11 +6462,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 6425 "MachineIndependent/glslang_tab.cpp" +#line 6466 "MachineIndependent/glslang_tab.cpp" break; case 119: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ -#line 1079 "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"); @@ -6445,173 +6486,173 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 6449 "MachineIndependent/glslang_tab.cpp" +#line 6490 "MachineIndependent/glslang_tab.cpp" break; case 120: /* parameter_declaration: type_qualifier parameter_declarator */ -#line 1104 "MachineIndependent/glslang.y" +#line 1106 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision; - parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->isCoopMat()); + parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->isCoopMatOrVec()); parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers); 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 6465 "MachineIndependent/glslang_tab.cpp" +#line 6506 "MachineIndependent/glslang_tab.cpp" break; case 121: /* parameter_declaration: parameter_declarator */ -#line 1115 "MachineIndependent/glslang.y" +#line 1117 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type); 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->isCoopMat()); + parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->isCoopMatOrVec()); } -#line 6477 "MachineIndependent/glslang_tab.cpp" +#line 6518 "MachineIndependent/glslang_tab.cpp" break; case 122: /* parameter_declaration: type_qualifier parameter_type_specifier */ -#line 1125 "MachineIndependent/glslang.y" +#line 1127 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision; - parseContext.precisionQualifierCheck((yyvsp[-1].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->isCoopMat()); + parseContext.precisionQualifierCheck((yyvsp[-1].interm.type).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->isCoopMatOrVec()); parseContext.checkNoShaderLayouts((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers); 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 6492 "MachineIndependent/glslang_tab.cpp" +#line 6533 "MachineIndependent/glslang_tab.cpp" break; case 123: /* parameter_declaration: parameter_type_specifier */ -#line 1135 "MachineIndependent/glslang.y" +#line 1137 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type); 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->isCoopMat()); + parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier(), (yyval.interm).param.type->isCoopMatOrVec()); } -#line 6504 "MachineIndependent/glslang_tab.cpp" +#line 6545 "MachineIndependent/glslang_tab.cpp" break; case 124: /* parameter_type_specifier: type_specifier */ -#line 1145 "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 6515 "MachineIndependent/glslang_tab.cpp" +#line 6556 "MachineIndependent/glslang_tab.cpp" break; case 125: /* init_declarator_list: single_declaration */ -#line 1154 "MachineIndependent/glslang.y" +#line 1156 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 6523 "MachineIndependent/glslang_tab.cpp" +#line 6564 "MachineIndependent/glslang_tab.cpp" break; case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ -#line 1157 "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 6532 "MachineIndependent/glslang_tab.cpp" +#line 6573 "MachineIndependent/glslang_tab.cpp" break; case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ -#line 1161 "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 6541 "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 1165 "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 6551 "MachineIndependent/glslang_tab.cpp" +#line 6592 "MachineIndependent/glslang_tab.cpp" break; case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ -#line 1170 "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 6561 "MachineIndependent/glslang_tab.cpp" +#line 6602 "MachineIndependent/glslang_tab.cpp" break; case 130: /* single_declaration: fully_specified_type */ -#line 1178 "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 6571 "MachineIndependent/glslang_tab.cpp" +#line 6612 "MachineIndependent/glslang_tab.cpp" break; case 131: /* single_declaration: fully_specified_type IDENTIFIER */ -#line 1183 "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 6581 "MachineIndependent/glslang_tab.cpp" +#line 6622 "MachineIndependent/glslang_tab.cpp" break; case 132: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ -#line 1188 "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 6591 "MachineIndependent/glslang_tab.cpp" +#line 6632 "MachineIndependent/glslang_tab.cpp" break; case 133: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ -#line 1193 "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 6601 "MachineIndependent/glslang_tab.cpp" +#line 6642 "MachineIndependent/glslang_tab.cpp" break; case 134: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 1198 "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 6611 "MachineIndependent/glslang_tab.cpp" +#line 6652 "MachineIndependent/glslang_tab.cpp" break; case 135: /* fully_specified_type: type_specifier */ -#line 1207 "MachineIndependent/glslang.y" +#line 1209 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); @@ -6620,13 +6661,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.profileRequires((yyvsp[0].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); parseContext.profileRequires((yyvsp[0].interm.type).loc, EEsProfile, 300, 0, "arrayed type"); } - parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier, (yyval.interm.type).isCoopmat()); + parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier, (yyval.interm.type).isCoopmatOrvec()); } -#line 6626 "MachineIndependent/glslang_tab.cpp" +#line 6667 "MachineIndependent/glslang_tab.cpp" break; case 136: /* fully_specified_type: type_qualifier type_specifier */ -#line 1217 "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)); @@ -6642,7 +6683,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.checkNoShaderLayouts((yyvsp[0].interm.type).loc, (yyvsp[-1].interm.type).shaderQualifiers); (yyvsp[0].interm.type).shaderQualifiers.merge((yyvsp[-1].interm.type).shaderQualifiers); parseContext.mergeQualifiers((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyvsp[-1].interm.type).qualifier, true); - parseContext.precisionQualifierCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).basicType, (yyvsp[0].interm.type).qualifier, (yyvsp[0].interm.type).isCoopmat()); + parseContext.precisionQualifierCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).basicType, (yyvsp[0].interm.type).qualifier, (yyvsp[0].interm.type).isCoopmatOrvec()); (yyval.interm.type) = (yyvsp[0].interm.type); @@ -6651,22 +6692,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 6655 "MachineIndependent/glslang_tab.cpp" +#line 6696 "MachineIndependent/glslang_tab.cpp" break; case 137: /* invariant_qualifier: INVARIANT */ -#line 1244 "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 6666 "MachineIndependent/glslang_tab.cpp" +#line 6707 "MachineIndependent/glslang_tab.cpp" break; case 138: /* interpolation_qualifier: SMOOTH */ -#line 1253 "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"); @@ -6674,11 +6715,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 6678 "MachineIndependent/glslang_tab.cpp" +#line 6719 "MachineIndependent/glslang_tab.cpp" break; case 139: /* interpolation_qualifier: FLAT */ -#line 1260 "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"); @@ -6686,11 +6727,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 6690 "MachineIndependent/glslang_tab.cpp" +#line 6731 "MachineIndependent/glslang_tab.cpp" break; case 140: /* interpolation_qualifier: NOPERSPECTIVE */ -#line 1267 "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"); @@ -6698,11 +6739,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 6702 "MachineIndependent/glslang_tab.cpp" +#line 6743 "MachineIndependent/glslang_tab.cpp" break; case 141: /* interpolation_qualifier: EXPLICITINTERPAMD */ -#line 1274 "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"); @@ -6710,11 +6751,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 6714 "MachineIndependent/glslang_tab.cpp" +#line 6755 "MachineIndependent/glslang_tab.cpp" break; case 142: /* interpolation_qualifier: PERVERTEXNV */ -#line 1281 "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"); @@ -6723,11 +6764,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 6727 "MachineIndependent/glslang_tab.cpp" +#line 6768 "MachineIndependent/glslang_tab.cpp" break; case 143: /* interpolation_qualifier: PERVERTEXEXT */ -#line 1289 "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"); @@ -6736,11 +6777,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexEXT = true; } -#line 6740 "MachineIndependent/glslang_tab.cpp" +#line 6781 "MachineIndependent/glslang_tab.cpp" break; case 144: /* interpolation_qualifier: PERPRIMITIVENV */ -#line 1297 "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"); @@ -6751,11 +6792,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 6755 "MachineIndependent/glslang_tab.cpp" +#line 6796 "MachineIndependent/glslang_tab.cpp" break; case 145: /* interpolation_qualifier: PERPRIMITIVEEXT */ -#line 1307 "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"); @@ -6766,11 +6807,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 6770 "MachineIndependent/glslang_tab.cpp" +#line 6811 "MachineIndependent/glslang_tab.cpp" break; case 146: /* interpolation_qualifier: PERVIEWNV */ -#line 1317 "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"); @@ -6778,11 +6819,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 6782 "MachineIndependent/glslang_tab.cpp" +#line 6823 "MachineIndependent/glslang_tab.cpp" break; case 147: /* interpolation_qualifier: PERTASKNV */ -#line 1324 "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"); @@ -6790,84 +6831,84 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 6794 "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 1334 "MachineIndependent/glslang.y" +#line 1336 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 6802 "MachineIndependent/glslang_tab.cpp" +#line 6843 "MachineIndependent/glslang_tab.cpp" break; case 149: /* layout_qualifier_id_list: layout_qualifier_id */ -#line 1340 "MachineIndependent/glslang.y" +#line 1342 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6810 "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 1343 "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 6820 "MachineIndependent/glslang_tab.cpp" +#line 6861 "MachineIndependent/glslang_tab.cpp" break; case 151: /* layout_qualifier_id: IDENTIFIER */ -#line 1350 "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 6829 "MachineIndependent/glslang_tab.cpp" +#line 6870 "MachineIndependent/glslang_tab.cpp" break; case 152: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ -#line 1354 "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 6838 "MachineIndependent/glslang_tab.cpp" +#line 6879 "MachineIndependent/glslang_tab.cpp" break; case 153: /* layout_qualifier_id: SHARED */ -#line 1358 "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 6848 "MachineIndependent/glslang_tab.cpp" +#line 6889 "MachineIndependent/glslang_tab.cpp" break; case 154: /* precise_qualifier: PRECISE */ -#line 1366 "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 6859 "MachineIndependent/glslang_tab.cpp" +#line 6900 "MachineIndependent/glslang_tab.cpp" break; case 155: /* type_qualifier: single_type_qualifier */ -#line 1375 "MachineIndependent/glslang.y" +#line 1377 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6867 "MachineIndependent/glslang_tab.cpp" +#line 6908 "MachineIndependent/glslang_tab.cpp" break; case 156: /* type_qualifier: type_qualifier single_type_qualifier */ -#line 1378 "MachineIndependent/glslang.y" +#line 1380 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -6876,151 +6917,151 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 6880 "MachineIndependent/glslang_tab.cpp" +#line 6921 "MachineIndependent/glslang_tab.cpp" break; case 157: /* single_type_qualifier: storage_qualifier */ -#line 1389 "MachineIndependent/glslang.y" +#line 1391 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6888 "MachineIndependent/glslang_tab.cpp" +#line 6929 "MachineIndependent/glslang_tab.cpp" break; case 158: /* single_type_qualifier: layout_qualifier */ -#line 1392 "MachineIndependent/glslang.y" +#line 1394 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6896 "MachineIndependent/glslang_tab.cpp" +#line 6937 "MachineIndependent/glslang_tab.cpp" break; case 159: /* single_type_qualifier: precision_qualifier */ -#line 1395 "MachineIndependent/glslang.y" +#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 6905 "MachineIndependent/glslang_tab.cpp" +#line 6946 "MachineIndependent/glslang_tab.cpp" break; case 160: /* single_type_qualifier: interpolation_qualifier */ -#line 1399 "MachineIndependent/glslang.y" +#line 1401 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6914 "MachineIndependent/glslang_tab.cpp" +#line 6955 "MachineIndependent/glslang_tab.cpp" break; case 161: /* single_type_qualifier: invariant_qualifier */ -#line 1403 "MachineIndependent/glslang.y" +#line 1405 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6923 "MachineIndependent/glslang_tab.cpp" +#line 6964 "MachineIndependent/glslang_tab.cpp" break; case 162: /* single_type_qualifier: precise_qualifier */ -#line 1407 "MachineIndependent/glslang.y" +#line 1409 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6932 "MachineIndependent/glslang_tab.cpp" +#line 6973 "MachineIndependent/glslang_tab.cpp" break; case 163: /* single_type_qualifier: non_uniform_qualifier */ -#line 1411 "MachineIndependent/glslang.y" +#line 1413 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6940 "MachineIndependent/glslang_tab.cpp" +#line 6981 "MachineIndependent/glslang_tab.cpp" break; case 164: /* single_type_qualifier: spirv_storage_class_qualifier */ -#line 1414 "MachineIndependent/glslang.y" +#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 6950 "MachineIndependent/glslang_tab.cpp" +#line 6991 "MachineIndependent/glslang_tab.cpp" break; case 165: /* single_type_qualifier: spirv_decorate_qualifier */ -#line 1419 "MachineIndependent/glslang.y" +#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 6959 "MachineIndependent/glslang_tab.cpp" +#line 7000 "MachineIndependent/glslang_tab.cpp" break; case 166: /* single_type_qualifier: SPIRV_BY_REFERENCE */ -#line 1423 "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 6969 "MachineIndependent/glslang_tab.cpp" +#line 7010 "MachineIndependent/glslang_tab.cpp" break; case 167: /* single_type_qualifier: SPIRV_LITERAL */ -#line 1428 "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 6979 "MachineIndependent/glslang_tab.cpp" +#line 7020 "MachineIndependent/glslang_tab.cpp" break; case 168: /* storage_qualifier: CONST */ -#line 1436 "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 6988 "MachineIndependent/glslang_tab.cpp" +#line 7029 "MachineIndependent/glslang_tab.cpp" break; case 169: /* storage_qualifier: INOUT */ -#line 1440 "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 6998 "MachineIndependent/glslang_tab.cpp" +#line 7039 "MachineIndependent/glslang_tab.cpp" break; case 170: /* storage_qualifier: IN */ -#line 1445 "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 7009 "MachineIndependent/glslang_tab.cpp" +#line 7050 "MachineIndependent/glslang_tab.cpp" break; case 171: /* storage_qualifier: OUT */ -#line 1451 "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 7020 "MachineIndependent/glslang_tab.cpp" +#line 7061 "MachineIndependent/glslang_tab.cpp" break; case 172: /* storage_qualifier: CENTROID */ -#line 1457 "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"); @@ -7028,31 +7069,31 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 7032 "MachineIndependent/glslang_tab.cpp" +#line 7073 "MachineIndependent/glslang_tab.cpp" break; case 173: /* storage_qualifier: UNIFORM */ -#line 1464 "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 7042 "MachineIndependent/glslang_tab.cpp" +#line 7083 "MachineIndependent/glslang_tab.cpp" break; case 174: /* storage_qualifier: TILEIMAGEEXT */ -#line 1469 "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 7052 "MachineIndependent/glslang_tab.cpp" +#line 7093 "MachineIndependent/glslang_tab.cpp" break; case 175: /* storage_qualifier: SHARED */ -#line 1474 "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"); @@ -7061,21 +7102,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 7065 "MachineIndependent/glslang_tab.cpp" +#line 7106 "MachineIndependent/glslang_tab.cpp" break; case 176: /* storage_qualifier: BUFFER */ -#line 1482 "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 7075 "MachineIndependent/glslang_tab.cpp" +#line 7116 "MachineIndependent/glslang_tab.cpp" break; case 177: /* storage_qualifier: ATTRIBUTE */ -#line 1487 "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"); @@ -7088,11 +7129,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 7092 "MachineIndependent/glslang_tab.cpp" +#line 7133 "MachineIndependent/glslang_tab.cpp" break; case 178: /* storage_qualifier: VARYING */ -#line 1499 "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"); @@ -7107,32 +7148,32 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 7111 "MachineIndependent/glslang_tab.cpp" +#line 7152 "MachineIndependent/glslang_tab.cpp" break; case 179: /* storage_qualifier: PATCH */ -#line 1513 "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 7122 "MachineIndependent/glslang_tab.cpp" +#line 7163 "MachineIndependent/glslang_tab.cpp" break; case 180: /* storage_qualifier: SAMPLE */ -#line 1519 "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 7132 "MachineIndependent/glslang_tab.cpp" +#line 7173 "MachineIndependent/glslang_tab.cpp" break; case 181: /* storage_qualifier: HITATTRNV */ -#line 1524 "MachineIndependent/glslang.y" +#line 1526 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -7141,11 +7182,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 7145 "MachineIndependent/glslang_tab.cpp" +#line 7186 "MachineIndependent/glslang_tab.cpp" break; case 182: /* storage_qualifier: HITOBJECTATTRNV */ -#line 1532 "MachineIndependent/glslang.y" +#line 1534 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask @@ -7154,11 +7195,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitObjectAttrNV; } -#line 7158 "MachineIndependent/glslang_tab.cpp" +#line 7199 "MachineIndependent/glslang_tab.cpp" break; case 183: /* storage_qualifier: HITATTREXT */ -#line 1540 "MachineIndependent/glslang.y" +#line 1542 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -7167,11 +7208,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 7171 "MachineIndependent/glslang_tab.cpp" +#line 7212 "MachineIndependent/glslang_tab.cpp" break; case 184: /* storage_qualifier: PAYLOADNV */ -#line 1548 "MachineIndependent/glslang.y" +#line 1550 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -7180,11 +7221,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 7184 "MachineIndependent/glslang_tab.cpp" +#line 7225 "MachineIndependent/glslang_tab.cpp" break; case 185: /* storage_qualifier: PAYLOADEXT */ -#line 1556 "MachineIndependent/glslang.y" +#line 1558 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -7193,11 +7234,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 7197 "MachineIndependent/glslang_tab.cpp" +#line 7238 "MachineIndependent/glslang_tab.cpp" break; case 186: /* storage_qualifier: PAYLOADINNV */ -#line 1564 "MachineIndependent/glslang.y" +#line 1566 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -7206,11 +7247,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 7210 "MachineIndependent/glslang_tab.cpp" +#line 7251 "MachineIndependent/glslang_tab.cpp" break; case 187: /* storage_qualifier: PAYLOADINEXT */ -#line 1572 "MachineIndependent/glslang.y" +#line 1574 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -7219,11 +7260,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 7223 "MachineIndependent/glslang_tab.cpp" +#line 7264 "MachineIndependent/glslang_tab.cpp" break; case 188: /* storage_qualifier: CALLDATANV */ -#line 1580 "MachineIndependent/glslang.y" +#line 1582 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -7232,11 +7273,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 7236 "MachineIndependent/glslang_tab.cpp" +#line 7277 "MachineIndependent/glslang_tab.cpp" break; case 189: /* storage_qualifier: CALLDATAEXT */ -#line 1588 "MachineIndependent/glslang.y" +#line 1590 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -7245,11 +7286,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 7249 "MachineIndependent/glslang_tab.cpp" +#line 7290 "MachineIndependent/glslang_tab.cpp" break; case 190: /* storage_qualifier: CALLDATAINNV */ -#line 1596 "MachineIndependent/glslang.y" +#line 1598 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); @@ -7257,11 +7298,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 7261 "MachineIndependent/glslang_tab.cpp" +#line 7302 "MachineIndependent/glslang_tab.cpp" break; case 191: /* storage_qualifier: CALLDATAINEXT */ -#line 1603 "MachineIndependent/glslang.y" +#line 1605 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); @@ -7269,138 +7310,147 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 7273 "MachineIndependent/glslang_tab.cpp" +#line 7314 "MachineIndependent/glslang_tab.cpp" break; case 192: /* storage_qualifier: COHERENT */ -#line 1610 "MachineIndependent/glslang.y" +#line 1612 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 7282 "MachineIndependent/glslang_tab.cpp" +#line 7323 "MachineIndependent/glslang_tab.cpp" break; case 193: /* storage_qualifier: DEVICECOHERENT */ -#line 1614 "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 7292 "MachineIndependent/glslang_tab.cpp" +#line 7333 "MachineIndependent/glslang_tab.cpp" break; case 194: /* storage_qualifier: QUEUEFAMILYCOHERENT */ -#line 1619 "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 7302 "MachineIndependent/glslang_tab.cpp" +#line 7343 "MachineIndependent/glslang_tab.cpp" break; case 195: /* storage_qualifier: WORKGROUPCOHERENT */ -#line 1624 "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 7312 "MachineIndependent/glslang_tab.cpp" +#line 7353 "MachineIndependent/glslang_tab.cpp" break; case 196: /* storage_qualifier: SUBGROUPCOHERENT */ -#line 1629 "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 7322 "MachineIndependent/glslang_tab.cpp" +#line 7363 "MachineIndependent/glslang_tab.cpp" break; case 197: /* storage_qualifier: NONPRIVATE */ -#line 1634 "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 7332 "MachineIndependent/glslang_tab.cpp" +#line 7373 "MachineIndependent/glslang_tab.cpp" break; case 198: /* storage_qualifier: SHADERCALLCOHERENT */ -#line 1639 "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 7342 "MachineIndependent/glslang_tab.cpp" +#line 7383 "MachineIndependent/glslang_tab.cpp" break; case 199: /* storage_qualifier: VOLATILE */ -#line 1644 "MachineIndependent/glslang.y" +#line 1646 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 7351 "MachineIndependent/glslang_tab.cpp" +#line 7392 "MachineIndependent/glslang_tab.cpp" break; case 200: /* storage_qualifier: RESTRICT */ -#line 1648 "MachineIndependent/glslang.y" +#line 1650 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 7360 "MachineIndependent/glslang_tab.cpp" +#line 7401 "MachineIndependent/glslang_tab.cpp" break; case 201: /* storage_qualifier: READONLY */ -#line 1652 "MachineIndependent/glslang.y" +#line 1654 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 7369 "MachineIndependent/glslang_tab.cpp" +#line 7410 "MachineIndependent/glslang_tab.cpp" break; case 202: /* storage_qualifier: WRITEONLY */ -#line 1656 "MachineIndependent/glslang.y" +#line 1658 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 7378 "MachineIndependent/glslang_tab.cpp" +#line 7419 "MachineIndependent/glslang_tab.cpp" + break; + + case 203: /* storage_qualifier: NONTEMPORAL */ +#line 1662 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[0].lex).loc); + (yyval.interm.type).qualifier.nontemporal = true; + } +#line 7428 "MachineIndependent/glslang_tab.cpp" break; - case 203: /* storage_qualifier: SUBROUTINE */ -#line 1660 "MachineIndependent/glslang.y" + case 204: /* storage_qualifier: SUBROUTINE */ +#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 7389 "MachineIndependent/glslang_tab.cpp" +#line 7439 "MachineIndependent/glslang_tab.cpp" break; - case 204: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ -#line 1666 "MachineIndependent/glslang.y" + case 205: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ +#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 7400 "MachineIndependent/glslang_tab.cpp" +#line 7450 "MachineIndependent/glslang_tab.cpp" break; - case 205: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT */ -#line 1672 "MachineIndependent/glslang.y" + case 206: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT */ +#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"); @@ -7408,73 +7458,73 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqtaskPayloadSharedEXT; } -#line 7412 "MachineIndependent/glslang_tab.cpp" +#line 7462 "MachineIndependent/glslang_tab.cpp" break; - case 206: /* non_uniform_qualifier: NONUNIFORM */ -#line 1682 "MachineIndependent/glslang.y" + case 207: /* non_uniform_qualifier: NONUNIFORM */ +#line 1688 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 7421 "MachineIndependent/glslang_tab.cpp" +#line 7471 "MachineIndependent/glslang_tab.cpp" break; - case 207: /* type_name_list: IDENTIFIER */ -#line 1689 "MachineIndependent/glslang.y" + case 208: /* type_name_list: IDENTIFIER */ +#line 1695 "MachineIndependent/glslang.y" { // TODO } -#line 7429 "MachineIndependent/glslang_tab.cpp" +#line 7479 "MachineIndependent/glslang_tab.cpp" break; - case 208: /* type_name_list: type_name_list COMMA IDENTIFIER */ -#line 1692 "MachineIndependent/glslang.y" + case 209: /* type_name_list: type_name_list COMMA IDENTIFIER */ +#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 7439 "MachineIndependent/glslang_tab.cpp" +#line 7489 "MachineIndependent/glslang_tab.cpp" break; - case 209: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ -#line 1700 "MachineIndependent/glslang.y" + case 210: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ +#line 1706 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); - parseContext.coopMatTypeParametersCheck((yyvsp[-1].interm.type).loc, (yyval.interm.type)); + parseContext.typeParametersCheck((yyvsp[-1].interm.type).loc, (yyval.interm.type)); } -#line 7451 "MachineIndependent/glslang_tab.cpp" +#line 7501 "MachineIndependent/glslang_tab.cpp" break; - case 210: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ -#line 1707 "MachineIndependent/glslang.y" + case 211: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ +#line 1713 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; - parseContext.coopMatTypeParametersCheck((yyvsp[-2].interm.type).loc, (yyval.interm.type)); + parseContext.typeParametersCheck((yyvsp[-2].interm.type).loc, (yyval.interm.type)); } -#line 7464 "MachineIndependent/glslang_tab.cpp" +#line 7514 "MachineIndependent/glslang_tab.cpp" break; - case 211: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ -#line 1718 "MachineIndependent/glslang.y" + case 212: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ +#line 1724 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 7474 "MachineIndependent/glslang_tab.cpp" +#line 7524 "MachineIndependent/glslang_tab.cpp" break; - case 212: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1723 "MachineIndependent/glslang.y" + case 213: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1729 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -7483,20 +7533,20 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 7487 "MachineIndependent/glslang_tab.cpp" +#line 7537 "MachineIndependent/glslang_tab.cpp" break; - case 213: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ -#line 1731 "MachineIndependent/glslang.y" + case 214: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ +#line 1737 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 7496 "MachineIndependent/glslang_tab.cpp" +#line 7546 "MachineIndependent/glslang_tab.cpp" break; - case 214: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1735 "MachineIndependent/glslang.y" + case 215: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1741 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); @@ -7504,46 +7554,46 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 7508 "MachineIndependent/glslang_tab.cpp" +#line 7558 "MachineIndependent/glslang_tab.cpp" break; - case 215: /* type_parameter_specifier_opt: type_parameter_specifier */ -#line 1745 "MachineIndependent/glslang.y" + case 216: /* type_parameter_specifier_opt: type_parameter_specifier */ +#line 1751 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 7516 "MachineIndependent/glslang_tab.cpp" +#line 7566 "MachineIndependent/glslang_tab.cpp" break; - case 216: /* type_parameter_specifier_opt: %empty */ -#line 1748 "MachineIndependent/glslang.y" + case 217: /* type_parameter_specifier_opt: %empty */ +#line 1754 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = 0; } -#line 7524 "MachineIndependent/glslang_tab.cpp" +#line 7574 "MachineIndependent/glslang_tab.cpp" break; - case 217: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ -#line 1754 "MachineIndependent/glslang.y" + case 218: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ +#line 1760 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 7532 "MachineIndependent/glslang_tab.cpp" +#line 7582 "MachineIndependent/glslang_tab.cpp" break; - case 218: /* type_parameter_specifier_list: type_specifier */ -#line 1760 "MachineIndependent/glslang.y" + case 219: /* type_parameter_specifier_list: type_specifier */ +#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 7543 "MachineIndependent/glslang_tab.cpp" +#line 7593 "MachineIndependent/glslang_tab.cpp" break; - case 219: /* type_parameter_specifier_list: unary_expression */ -#line 1766 "MachineIndependent/glslang.y" + case 220: /* type_parameter_specifier_list: unary_expression */ +#line 1772 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = new TTypeParameters; (yyval.interm.typeParameters)->arraySizes = new TArraySizes; @@ -7552,11 +7602,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true); (yyval.interm.typeParameters)->arraySizes->addInnerSize(size); } -#line 7556 "MachineIndependent/glslang_tab.cpp" +#line 7606 "MachineIndependent/glslang_tab.cpp" break; - case 220: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ -#line 1774 "MachineIndependent/glslang.y" + case 221: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ +#line 1780 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); @@ -7564,300 +7614,300 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true); (yyval.interm.typeParameters)->arraySizes->addInnerSize(size); } -#line 7568 "MachineIndependent/glslang_tab.cpp" +#line 7618 "MachineIndependent/glslang_tab.cpp" break; - case 221: /* type_specifier_nonarray: VOID */ -#line 1784 "MachineIndependent/glslang.y" + case 222: /* type_specifier_nonarray: VOID */ +#line 1790 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 7577 "MachineIndependent/glslang_tab.cpp" +#line 7627 "MachineIndependent/glslang_tab.cpp" break; - case 222: /* type_specifier_nonarray: FLOAT */ -#line 1788 "MachineIndependent/glslang.y" + case 223: /* type_specifier_nonarray: FLOAT */ +#line 1794 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7586 "MachineIndependent/glslang_tab.cpp" +#line 7636 "MachineIndependent/glslang_tab.cpp" break; - case 223: /* type_specifier_nonarray: INT */ -#line 1792 "MachineIndependent/glslang.y" + case 224: /* type_specifier_nonarray: INT */ +#line 1798 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7595 "MachineIndependent/glslang_tab.cpp" +#line 7645 "MachineIndependent/glslang_tab.cpp" break; - case 224: /* type_specifier_nonarray: UINT */ -#line 1796 "MachineIndependent/glslang.y" + case 225: /* type_specifier_nonarray: UINT */ +#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 7605 "MachineIndependent/glslang_tab.cpp" +#line 7655 "MachineIndependent/glslang_tab.cpp" break; - case 225: /* type_specifier_nonarray: BOOL */ -#line 1801 "MachineIndependent/glslang.y" + case 226: /* type_specifier_nonarray: BOOL */ +#line 1807 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 7614 "MachineIndependent/glslang_tab.cpp" +#line 7664 "MachineIndependent/glslang_tab.cpp" break; - case 226: /* type_specifier_nonarray: VEC2 */ -#line 1805 "MachineIndependent/glslang.y" + case 227: /* type_specifier_nonarray: VEC2 */ +#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 7624 "MachineIndependent/glslang_tab.cpp" +#line 7674 "MachineIndependent/glslang_tab.cpp" break; - case 227: /* type_specifier_nonarray: VEC3 */ -#line 1810 "MachineIndependent/glslang.y" + case 228: /* type_specifier_nonarray: VEC3 */ +#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 7634 "MachineIndependent/glslang_tab.cpp" +#line 7684 "MachineIndependent/glslang_tab.cpp" break; - case 228: /* type_specifier_nonarray: VEC4 */ -#line 1815 "MachineIndependent/glslang.y" + case 229: /* type_specifier_nonarray: VEC4 */ +#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 7644 "MachineIndependent/glslang_tab.cpp" +#line 7694 "MachineIndependent/glslang_tab.cpp" break; - case 229: /* type_specifier_nonarray: BVEC2 */ -#line 1820 "MachineIndependent/glslang.y" + case 230: /* type_specifier_nonarray: BVEC2 */ +#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 7654 "MachineIndependent/glslang_tab.cpp" +#line 7704 "MachineIndependent/glslang_tab.cpp" break; - case 230: /* type_specifier_nonarray: BVEC3 */ -#line 1825 "MachineIndependent/glslang.y" + case 231: /* type_specifier_nonarray: BVEC3 */ +#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 7664 "MachineIndependent/glslang_tab.cpp" +#line 7714 "MachineIndependent/glslang_tab.cpp" break; - case 231: /* type_specifier_nonarray: BVEC4 */ -#line 1830 "MachineIndependent/glslang.y" + case 232: /* type_specifier_nonarray: BVEC4 */ +#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 7674 "MachineIndependent/glslang_tab.cpp" +#line 7724 "MachineIndependent/glslang_tab.cpp" break; - case 232: /* type_specifier_nonarray: IVEC2 */ -#line 1835 "MachineIndependent/glslang.y" + case 233: /* type_specifier_nonarray: IVEC2 */ +#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 7684 "MachineIndependent/glslang_tab.cpp" +#line 7734 "MachineIndependent/glslang_tab.cpp" break; - case 233: /* type_specifier_nonarray: IVEC3 */ -#line 1840 "MachineIndependent/glslang.y" + case 234: /* type_specifier_nonarray: IVEC3 */ +#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 7694 "MachineIndependent/glslang_tab.cpp" +#line 7744 "MachineIndependent/glslang_tab.cpp" break; - case 234: /* type_specifier_nonarray: IVEC4 */ -#line 1845 "MachineIndependent/glslang.y" + case 235: /* type_specifier_nonarray: IVEC4 */ +#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 7704 "MachineIndependent/glslang_tab.cpp" +#line 7754 "MachineIndependent/glslang_tab.cpp" break; - case 235: /* type_specifier_nonarray: UVEC2 */ -#line 1850 "MachineIndependent/glslang.y" + case 236: /* type_specifier_nonarray: UVEC2 */ +#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 7715 "MachineIndependent/glslang_tab.cpp" +#line 7765 "MachineIndependent/glslang_tab.cpp" break; - case 236: /* type_specifier_nonarray: UVEC3 */ -#line 1856 "MachineIndependent/glslang.y" + case 237: /* type_specifier_nonarray: UVEC3 */ +#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 7726 "MachineIndependent/glslang_tab.cpp" +#line 7776 "MachineIndependent/glslang_tab.cpp" break; - case 237: /* type_specifier_nonarray: UVEC4 */ -#line 1862 "MachineIndependent/glslang.y" + case 238: /* type_specifier_nonarray: UVEC4 */ +#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 7737 "MachineIndependent/glslang_tab.cpp" +#line 7787 "MachineIndependent/glslang_tab.cpp" break; - case 238: /* type_specifier_nonarray: MAT2 */ -#line 1868 "MachineIndependent/glslang.y" + case 239: /* type_specifier_nonarray: MAT2 */ +#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 7747 "MachineIndependent/glslang_tab.cpp" +#line 7797 "MachineIndependent/glslang_tab.cpp" break; - case 239: /* type_specifier_nonarray: MAT3 */ -#line 1873 "MachineIndependent/glslang.y" + case 240: /* type_specifier_nonarray: MAT3 */ +#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 7757 "MachineIndependent/glslang_tab.cpp" +#line 7807 "MachineIndependent/glslang_tab.cpp" break; - case 240: /* type_specifier_nonarray: MAT4 */ -#line 1878 "MachineIndependent/glslang.y" + case 241: /* type_specifier_nonarray: MAT4 */ +#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 7767 "MachineIndependent/glslang_tab.cpp" +#line 7817 "MachineIndependent/glslang_tab.cpp" break; - case 241: /* type_specifier_nonarray: MAT2X2 */ -#line 1883 "MachineIndependent/glslang.y" + case 242: /* type_specifier_nonarray: MAT2X2 */ +#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 7777 "MachineIndependent/glslang_tab.cpp" +#line 7827 "MachineIndependent/glslang_tab.cpp" break; - case 242: /* type_specifier_nonarray: MAT2X3 */ -#line 1888 "MachineIndependent/glslang.y" + case 243: /* type_specifier_nonarray: MAT2X3 */ +#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 7787 "MachineIndependent/glslang_tab.cpp" +#line 7837 "MachineIndependent/glslang_tab.cpp" break; - case 243: /* type_specifier_nonarray: MAT2X4 */ -#line 1893 "MachineIndependent/glslang.y" + case 244: /* type_specifier_nonarray: MAT2X4 */ +#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 7797 "MachineIndependent/glslang_tab.cpp" +#line 7847 "MachineIndependent/glslang_tab.cpp" break; - case 244: /* type_specifier_nonarray: MAT3X2 */ -#line 1898 "MachineIndependent/glslang.y" + case 245: /* type_specifier_nonarray: MAT3X2 */ +#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 7807 "MachineIndependent/glslang_tab.cpp" +#line 7857 "MachineIndependent/glslang_tab.cpp" break; - case 245: /* type_specifier_nonarray: MAT3X3 */ -#line 1903 "MachineIndependent/glslang.y" + case 246: /* type_specifier_nonarray: MAT3X3 */ +#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 7817 "MachineIndependent/glslang_tab.cpp" +#line 7867 "MachineIndependent/glslang_tab.cpp" break; - case 246: /* type_specifier_nonarray: MAT3X4 */ -#line 1908 "MachineIndependent/glslang.y" + case 247: /* type_specifier_nonarray: MAT3X4 */ +#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 7827 "MachineIndependent/glslang_tab.cpp" +#line 7877 "MachineIndependent/glslang_tab.cpp" break; - case 247: /* type_specifier_nonarray: MAT4X2 */ -#line 1913 "MachineIndependent/glslang.y" + case 248: /* type_specifier_nonarray: MAT4X2 */ +#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 7837 "MachineIndependent/glslang_tab.cpp" +#line 7887 "MachineIndependent/glslang_tab.cpp" break; - case 248: /* type_specifier_nonarray: MAT4X3 */ -#line 1918 "MachineIndependent/glslang.y" + case 249: /* type_specifier_nonarray: MAT4X3 */ +#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 7847 "MachineIndependent/glslang_tab.cpp" +#line 7897 "MachineIndependent/glslang_tab.cpp" break; - case 249: /* type_specifier_nonarray: MAT4X4 */ -#line 1923 "MachineIndependent/glslang.y" + case 250: /* type_specifier_nonarray: MAT4X4 */ +#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 7857 "MachineIndependent/glslang_tab.cpp" +#line 7907 "MachineIndependent/glslang_tab.cpp" break; - case 250: /* type_specifier_nonarray: DOUBLE */ -#line 1928 "MachineIndependent/glslang.y" + case 251: /* type_specifier_nonarray: DOUBLE */ +#line 1934 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7865,121 +7915,131 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7869 "MachineIndependent/glslang_tab.cpp" +#line 7919 "MachineIndependent/glslang_tab.cpp" + break; + + 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 251: /* type_specifier_nonarray: FLOAT16_T */ -#line 1935 "MachineIndependent/glslang.y" + 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 7879 "MachineIndependent/glslang_tab.cpp" +#line 7939 "MachineIndependent/glslang_tab.cpp" break; - case 252: /* type_specifier_nonarray: FLOAT32_T */ -#line 1940 "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 7889 "MachineIndependent/glslang_tab.cpp" +#line 7949 "MachineIndependent/glslang_tab.cpp" break; - case 253: /* type_specifier_nonarray: FLOAT64_T */ -#line 1945 "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 7899 "MachineIndependent/glslang_tab.cpp" +#line 7959 "MachineIndependent/glslang_tab.cpp" break; - case 254: /* type_specifier_nonarray: INT8_T */ -#line 1950 "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 7909 "MachineIndependent/glslang_tab.cpp" +#line 7969 "MachineIndependent/glslang_tab.cpp" break; - case 255: /* type_specifier_nonarray: UINT8_T */ -#line 1955 "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 7919 "MachineIndependent/glslang_tab.cpp" +#line 7979 "MachineIndependent/glslang_tab.cpp" break; - case 256: /* type_specifier_nonarray: INT16_T */ -#line 1960 "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 7929 "MachineIndependent/glslang_tab.cpp" +#line 7989 "MachineIndependent/glslang_tab.cpp" break; - case 257: /* type_specifier_nonarray: UINT16_T */ -#line 1965 "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 7939 "MachineIndependent/glslang_tab.cpp" +#line 7999 "MachineIndependent/glslang_tab.cpp" break; - case 258: /* type_specifier_nonarray: INT32_T */ -#line 1970 "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 7949 "MachineIndependent/glslang_tab.cpp" +#line 8009 "MachineIndependent/glslang_tab.cpp" break; - case 259: /* type_specifier_nonarray: UINT32_T */ -#line 1975 "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 7959 "MachineIndependent/glslang_tab.cpp" +#line 8019 "MachineIndependent/glslang_tab.cpp" break; - case 260: /* type_specifier_nonarray: INT64_T */ -#line 1980 "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 7969 "MachineIndependent/glslang_tab.cpp" +#line 8029 "MachineIndependent/glslang_tab.cpp" break; - case 261: /* type_specifier_nonarray: UINT64_T */ -#line 1985 "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 7979 "MachineIndependent/glslang_tab.cpp" +#line 8039 "MachineIndependent/glslang_tab.cpp" break; - case 262: /* type_specifier_nonarray: DVEC2 */ -#line 1990 "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()) @@ -7988,11 +8048,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7992 "MachineIndependent/glslang_tab.cpp" +#line 8052 "MachineIndependent/glslang_tab.cpp" break; - case 263: /* type_specifier_nonarray: DVEC3 */ -#line 1998 "MachineIndependent/glslang.y" + 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()) @@ -8001,11 +8061,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 8005 "MachineIndependent/glslang_tab.cpp" +#line 8065 "MachineIndependent/glslang_tab.cpp" break; - case 264: /* type_specifier_nonarray: DVEC4 */ -#line 2006 "MachineIndependent/glslang.y" + 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()) @@ -8014,374 +8074,407 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 8018 "MachineIndependent/glslang_tab.cpp" +#line 8078 "MachineIndependent/glslang_tab.cpp" + break; + + 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 = EbtBFloat16; + (yyval.interm.type).setVector(2); + } +#line 8089 "MachineIndependent/glslang_tab.cpp" + break; + + 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 265: /* type_specifier_nonarray: F16VEC2 */ -#line 2014 "MachineIndependent/glslang.y" + case 270: /* type_specifier_nonarray: F16VEC2 */ +#line 2043 "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 8029 "MachineIndependent/glslang_tab.cpp" +#line 8122 "MachineIndependent/glslang_tab.cpp" break; - case 266: /* type_specifier_nonarray: F16VEC3 */ -#line 2020 "MachineIndependent/glslang.y" + 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 8040 "MachineIndependent/glslang_tab.cpp" +#line 8133 "MachineIndependent/glslang_tab.cpp" break; - case 267: /* type_specifier_nonarray: F16VEC4 */ -#line 2026 "MachineIndependent/glslang.y" + 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 8051 "MachineIndependent/glslang_tab.cpp" +#line 8144 "MachineIndependent/glslang_tab.cpp" break; - case 268: /* type_specifier_nonarray: F32VEC2 */ -#line 2032 "MachineIndependent/glslang.y" + 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 8062 "MachineIndependent/glslang_tab.cpp" +#line 8155 "MachineIndependent/glslang_tab.cpp" break; - case 269: /* type_specifier_nonarray: F32VEC3 */ -#line 2038 "MachineIndependent/glslang.y" + 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 8073 "MachineIndependent/glslang_tab.cpp" +#line 8166 "MachineIndependent/glslang_tab.cpp" break; - case 270: /* type_specifier_nonarray: F32VEC4 */ -#line 2044 "MachineIndependent/glslang.y" + 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 8084 "MachineIndependent/glslang_tab.cpp" +#line 8177 "MachineIndependent/glslang_tab.cpp" break; - case 271: /* type_specifier_nonarray: F64VEC2 */ -#line 2050 "MachineIndependent/glslang.y" + case 276: /* type_specifier_nonarray: F64VEC2 */ +#line 2079 "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 8095 "MachineIndependent/glslang_tab.cpp" +#line 8188 "MachineIndependent/glslang_tab.cpp" break; - case 272: /* type_specifier_nonarray: F64VEC3 */ -#line 2056 "MachineIndependent/glslang.y" + 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 8106 "MachineIndependent/glslang_tab.cpp" +#line 8199 "MachineIndependent/glslang_tab.cpp" break; - case 273: /* type_specifier_nonarray: F64VEC4 */ -#line 2062 "MachineIndependent/glslang.y" + case 278: /* type_specifier_nonarray: F64VEC4 */ +#line 2091 "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 8117 "MachineIndependent/glslang_tab.cpp" +#line 8210 "MachineIndependent/glslang_tab.cpp" break; - case 274: /* type_specifier_nonarray: I8VEC2 */ -#line 2068 "MachineIndependent/glslang.y" + 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 = EbtInt8; (yyval.interm.type).setVector(2); } -#line 8128 "MachineIndependent/glslang_tab.cpp" +#line 8221 "MachineIndependent/glslang_tab.cpp" break; - case 275: /* type_specifier_nonarray: I8VEC3 */ -#line 2074 "MachineIndependent/glslang.y" + 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 8139 "MachineIndependent/glslang_tab.cpp" +#line 8232 "MachineIndependent/glslang_tab.cpp" break; - case 276: /* type_specifier_nonarray: I8VEC4 */ -#line 2080 "MachineIndependent/glslang.y" + 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 8150 "MachineIndependent/glslang_tab.cpp" +#line 8243 "MachineIndependent/glslang_tab.cpp" break; - case 277: /* type_specifier_nonarray: I16VEC2 */ -#line 2086 "MachineIndependent/glslang.y" + case 282: /* type_specifier_nonarray: I16VEC2 */ +#line 2115 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 8161 "MachineIndependent/glslang_tab.cpp" +#line 8254 "MachineIndependent/glslang_tab.cpp" break; - case 278: /* type_specifier_nonarray: I16VEC3 */ -#line 2092 "MachineIndependent/glslang.y" + 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 8172 "MachineIndependent/glslang_tab.cpp" +#line 8265 "MachineIndependent/glslang_tab.cpp" break; - case 279: /* type_specifier_nonarray: I16VEC4 */ -#line 2098 "MachineIndependent/glslang.y" + 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 8183 "MachineIndependent/glslang_tab.cpp" +#line 8276 "MachineIndependent/glslang_tab.cpp" break; - case 280: /* type_specifier_nonarray: I32VEC2 */ -#line 2104 "MachineIndependent/glslang.y" + 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 8194 "MachineIndependent/glslang_tab.cpp" +#line 8287 "MachineIndependent/glslang_tab.cpp" break; - case 281: /* type_specifier_nonarray: I32VEC3 */ -#line 2110 "MachineIndependent/glslang.y" + 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 8205 "MachineIndependent/glslang_tab.cpp" +#line 8298 "MachineIndependent/glslang_tab.cpp" break; - case 282: /* type_specifier_nonarray: I32VEC4 */ -#line 2116 "MachineIndependent/glslang.y" + 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 8216 "MachineIndependent/glslang_tab.cpp" +#line 8309 "MachineIndependent/glslang_tab.cpp" break; - case 283: /* type_specifier_nonarray: I64VEC2 */ -#line 2122 "MachineIndependent/glslang.y" + case 288: /* type_specifier_nonarray: I64VEC2 */ +#line 2151 "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 8227 "MachineIndependent/glslang_tab.cpp" +#line 8320 "MachineIndependent/glslang_tab.cpp" break; - case 284: /* type_specifier_nonarray: I64VEC3 */ -#line 2128 "MachineIndependent/glslang.y" + 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 8238 "MachineIndependent/glslang_tab.cpp" +#line 8331 "MachineIndependent/glslang_tab.cpp" break; - case 285: /* type_specifier_nonarray: I64VEC4 */ -#line 2134 "MachineIndependent/glslang.y" + case 290: /* type_specifier_nonarray: I64VEC4 */ +#line 2163 "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 8249 "MachineIndependent/glslang_tab.cpp" +#line 8342 "MachineIndependent/glslang_tab.cpp" break; - case 286: /* type_specifier_nonarray: U8VEC2 */ -#line 2140 "MachineIndependent/glslang.y" + 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 = EbtUint8; (yyval.interm.type).setVector(2); } -#line 8260 "MachineIndependent/glslang_tab.cpp" +#line 8353 "MachineIndependent/glslang_tab.cpp" break; - case 287: /* type_specifier_nonarray: U8VEC3 */ -#line 2146 "MachineIndependent/glslang.y" + 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 8271 "MachineIndependent/glslang_tab.cpp" +#line 8364 "MachineIndependent/glslang_tab.cpp" break; - case 288: /* type_specifier_nonarray: U8VEC4 */ -#line 2152 "MachineIndependent/glslang.y" + 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 8282 "MachineIndependent/glslang_tab.cpp" +#line 8375 "MachineIndependent/glslang_tab.cpp" break; - case 289: /* type_specifier_nonarray: U16VEC2 */ -#line 2158 "MachineIndependent/glslang.y" + 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 8293 "MachineIndependent/glslang_tab.cpp" +#line 8386 "MachineIndependent/glslang_tab.cpp" break; - case 290: /* type_specifier_nonarray: U16VEC3 */ -#line 2164 "MachineIndependent/glslang.y" + 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 8304 "MachineIndependent/glslang_tab.cpp" +#line 8397 "MachineIndependent/glslang_tab.cpp" break; - case 291: /* type_specifier_nonarray: U16VEC4 */ -#line 2170 "MachineIndependent/glslang.y" + 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 8315 "MachineIndependent/glslang_tab.cpp" +#line 8408 "MachineIndependent/glslang_tab.cpp" break; - case 292: /* type_specifier_nonarray: U32VEC2 */ -#line 2176 "MachineIndependent/glslang.y" + 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 8326 "MachineIndependent/glslang_tab.cpp" +#line 8419 "MachineIndependent/glslang_tab.cpp" break; - case 293: /* type_specifier_nonarray: U32VEC3 */ -#line 2182 "MachineIndependent/glslang.y" + 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 8337 "MachineIndependent/glslang_tab.cpp" +#line 8430 "MachineIndependent/glslang_tab.cpp" break; - case 294: /* type_specifier_nonarray: U32VEC4 */ -#line 2188 "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 8348 "MachineIndependent/glslang_tab.cpp" +#line 8441 "MachineIndependent/glslang_tab.cpp" break; - case 295: /* type_specifier_nonarray: U64VEC2 */ -#line 2194 "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 8359 "MachineIndependent/glslang_tab.cpp" +#line 8452 "MachineIndependent/glslang_tab.cpp" break; - case 296: /* type_specifier_nonarray: U64VEC3 */ -#line 2200 "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 8370 "MachineIndependent/glslang_tab.cpp" +#line 8463 "MachineIndependent/glslang_tab.cpp" break; - case 297: /* type_specifier_nonarray: U64VEC4 */ -#line 2206 "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 8381 "MachineIndependent/glslang_tab.cpp" +#line 8474 "MachineIndependent/glslang_tab.cpp" break; - case 298: /* type_specifier_nonarray: DMAT2 */ -#line 2212 "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()) @@ -8390,11 +8483,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8394 "MachineIndependent/glslang_tab.cpp" +#line 8487 "MachineIndependent/glslang_tab.cpp" break; - case 299: /* type_specifier_nonarray: DMAT3 */ -#line 2220 "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()) @@ -8403,11 +8496,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8407 "MachineIndependent/glslang_tab.cpp" +#line 8500 "MachineIndependent/glslang_tab.cpp" break; - case 300: /* type_specifier_nonarray: DMAT4 */ -#line 2228 "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()) @@ -8416,11 +8509,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8420 "MachineIndependent/glslang_tab.cpp" +#line 8513 "MachineIndependent/glslang_tab.cpp" break; - case 301: /* type_specifier_nonarray: DMAT2X2 */ -#line 2236 "MachineIndependent/glslang.y" + case 306: /* type_specifier_nonarray: DMAT2X2 */ +#line 2265 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8429,11 +8522,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8433 "MachineIndependent/glslang_tab.cpp" +#line 8526 "MachineIndependent/glslang_tab.cpp" break; - case 302: /* type_specifier_nonarray: DMAT2X3 */ -#line 2244 "MachineIndependent/glslang.y" + case 307: /* type_specifier_nonarray: DMAT2X3 */ +#line 2273 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8442,11 +8535,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 8446 "MachineIndependent/glslang_tab.cpp" +#line 8539 "MachineIndependent/glslang_tab.cpp" break; - case 303: /* type_specifier_nonarray: DMAT2X4 */ -#line 2252 "MachineIndependent/glslang.y" + case 308: /* type_specifier_nonarray: DMAT2X4 */ +#line 2281 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8455,11 +8548,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 8459 "MachineIndependent/glslang_tab.cpp" +#line 8552 "MachineIndependent/glslang_tab.cpp" break; - case 304: /* type_specifier_nonarray: DMAT3X2 */ -#line 2260 "MachineIndependent/glslang.y" + case 309: /* type_specifier_nonarray: DMAT3X2 */ +#line 2289 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8468,11 +8561,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 8472 "MachineIndependent/glslang_tab.cpp" +#line 8565 "MachineIndependent/glslang_tab.cpp" break; - case 305: /* type_specifier_nonarray: DMAT3X3 */ -#line 2268 "MachineIndependent/glslang.y" + case 310: /* type_specifier_nonarray: DMAT3X3 */ +#line 2297 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8481,11 +8574,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8485 "MachineIndependent/glslang_tab.cpp" +#line 8578 "MachineIndependent/glslang_tab.cpp" break; - case 306: /* type_specifier_nonarray: DMAT3X4 */ -#line 2276 "MachineIndependent/glslang.y" + case 311: /* type_specifier_nonarray: DMAT3X4 */ +#line 2305 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8494,11 +8587,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 8498 "MachineIndependent/glslang_tab.cpp" +#line 8591 "MachineIndependent/glslang_tab.cpp" break; - case 307: /* type_specifier_nonarray: DMAT4X2 */ -#line 2284 "MachineIndependent/glslang.y" + 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()) @@ -8507,11 +8600,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 8511 "MachineIndependent/glslang_tab.cpp" +#line 8604 "MachineIndependent/glslang_tab.cpp" break; - case 308: /* type_specifier_nonarray: DMAT4X3 */ -#line 2292 "MachineIndependent/glslang.y" + 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()) @@ -8520,11 +8613,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 8524 "MachineIndependent/glslang_tab.cpp" +#line 8617 "MachineIndependent/glslang_tab.cpp" break; - case 309: /* type_specifier_nonarray: DMAT4X4 */ -#line 2300 "MachineIndependent/glslang.y" + 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()) @@ -8533,2261 +8626,2261 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8537 "MachineIndependent/glslang_tab.cpp" +#line 8630 "MachineIndependent/glslang_tab.cpp" break; - case 310: /* type_specifier_nonarray: F16MAT2 */ -#line 2308 "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 8548 "MachineIndependent/glslang_tab.cpp" +#line 8641 "MachineIndependent/glslang_tab.cpp" break; - case 311: /* type_specifier_nonarray: F16MAT3 */ -#line 2314 "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 8559 "MachineIndependent/glslang_tab.cpp" +#line 8652 "MachineIndependent/glslang_tab.cpp" break; - case 312: /* type_specifier_nonarray: F16MAT4 */ -#line 2320 "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 8570 "MachineIndependent/glslang_tab.cpp" +#line 8663 "MachineIndependent/glslang_tab.cpp" break; - case 313: /* type_specifier_nonarray: F16MAT2X2 */ -#line 2326 "MachineIndependent/glslang.y" + 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(2, 2); } -#line 8581 "MachineIndependent/glslang_tab.cpp" +#line 8674 "MachineIndependent/glslang_tab.cpp" break; - case 314: /* type_specifier_nonarray: F16MAT2X3 */ -#line 2332 "MachineIndependent/glslang.y" + 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(2, 3); } -#line 8592 "MachineIndependent/glslang_tab.cpp" +#line 8685 "MachineIndependent/glslang_tab.cpp" break; - case 315: /* type_specifier_nonarray: F16MAT2X4 */ -#line 2338 "MachineIndependent/glslang.y" + 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(2, 4); } -#line 8603 "MachineIndependent/glslang_tab.cpp" +#line 8696 "MachineIndependent/glslang_tab.cpp" break; - case 316: /* type_specifier_nonarray: F16MAT3X2 */ -#line 2344 "MachineIndependent/glslang.y" + 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(3, 2); } -#line 8614 "MachineIndependent/glslang_tab.cpp" +#line 8707 "MachineIndependent/glslang_tab.cpp" break; - case 317: /* type_specifier_nonarray: F16MAT3X3 */ -#line 2350 "MachineIndependent/glslang.y" + 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 8625 "MachineIndependent/glslang_tab.cpp" +#line 8718 "MachineIndependent/glslang_tab.cpp" break; - case 318: /* type_specifier_nonarray: F16MAT3X4 */ -#line 2356 "MachineIndependent/glslang.y" + 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 8636 "MachineIndependent/glslang_tab.cpp" +#line 8729 "MachineIndependent/glslang_tab.cpp" break; - case 319: /* type_specifier_nonarray: F16MAT4X2 */ -#line 2362 "MachineIndependent/glslang.y" + 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 8647 "MachineIndependent/glslang_tab.cpp" +#line 8740 "MachineIndependent/glslang_tab.cpp" break; - case 320: /* type_specifier_nonarray: F16MAT4X3 */ -#line 2368 "MachineIndependent/glslang.y" + 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 8658 "MachineIndependent/glslang_tab.cpp" +#line 8751 "MachineIndependent/glslang_tab.cpp" break; - case 321: /* type_specifier_nonarray: F16MAT4X4 */ -#line 2374 "MachineIndependent/glslang.y" + 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 8669 "MachineIndependent/glslang_tab.cpp" +#line 8762 "MachineIndependent/glslang_tab.cpp" break; - case 322: /* type_specifier_nonarray: F32MAT2 */ -#line 2380 "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 8680 "MachineIndependent/glslang_tab.cpp" +#line 8773 "MachineIndependent/glslang_tab.cpp" break; - case 323: /* type_specifier_nonarray: F32MAT3 */ -#line 2386 "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 8691 "MachineIndependent/glslang_tab.cpp" +#line 8784 "MachineIndependent/glslang_tab.cpp" break; - case 324: /* type_specifier_nonarray: F32MAT4 */ -#line 2392 "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 8702 "MachineIndependent/glslang_tab.cpp" +#line 8795 "MachineIndependent/glslang_tab.cpp" break; - case 325: /* type_specifier_nonarray: F32MAT2X2 */ -#line 2398 "MachineIndependent/glslang.y" + 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(2, 2); } -#line 8713 "MachineIndependent/glslang_tab.cpp" +#line 8806 "MachineIndependent/glslang_tab.cpp" break; - case 326: /* type_specifier_nonarray: F32MAT2X3 */ -#line 2404 "MachineIndependent/glslang.y" + 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 8724 "MachineIndependent/glslang_tab.cpp" +#line 8817 "MachineIndependent/glslang_tab.cpp" break; - case 327: /* type_specifier_nonarray: F32MAT2X4 */ -#line 2410 "MachineIndependent/glslang.y" + 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 8735 "MachineIndependent/glslang_tab.cpp" +#line 8828 "MachineIndependent/glslang_tab.cpp" break; - case 328: /* type_specifier_nonarray: F32MAT3X2 */ -#line 2416 "MachineIndependent/glslang.y" + 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 8746 "MachineIndependent/glslang_tab.cpp" +#line 8839 "MachineIndependent/glslang_tab.cpp" break; - case 329: /* type_specifier_nonarray: F32MAT3X3 */ -#line 2422 "MachineIndependent/glslang.y" + 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 8757 "MachineIndependent/glslang_tab.cpp" +#line 8850 "MachineIndependent/glslang_tab.cpp" break; - case 330: /* type_specifier_nonarray: F32MAT3X4 */ -#line 2428 "MachineIndependent/glslang.y" + 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 8768 "MachineIndependent/glslang_tab.cpp" +#line 8861 "MachineIndependent/glslang_tab.cpp" break; - case 331: /* type_specifier_nonarray: F32MAT4X2 */ -#line 2434 "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 8779 "MachineIndependent/glslang_tab.cpp" +#line 8872 "MachineIndependent/glslang_tab.cpp" break; - case 332: /* type_specifier_nonarray: F32MAT4X3 */ -#line 2440 "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 8790 "MachineIndependent/glslang_tab.cpp" +#line 8883 "MachineIndependent/glslang_tab.cpp" break; - case 333: /* type_specifier_nonarray: F32MAT4X4 */ -#line 2446 "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 8801 "MachineIndependent/glslang_tab.cpp" +#line 8894 "MachineIndependent/glslang_tab.cpp" break; - case 334: /* type_specifier_nonarray: F64MAT2 */ -#line 2452 "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 8812 "MachineIndependent/glslang_tab.cpp" +#line 8905 "MachineIndependent/glslang_tab.cpp" break; - case 335: /* type_specifier_nonarray: F64MAT3 */ -#line 2458 "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 8823 "MachineIndependent/glslang_tab.cpp" +#line 8916 "MachineIndependent/glslang_tab.cpp" break; - case 336: /* type_specifier_nonarray: F64MAT4 */ -#line 2464 "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 8834 "MachineIndependent/glslang_tab.cpp" +#line 8927 "MachineIndependent/glslang_tab.cpp" break; - case 337: /* type_specifier_nonarray: F64MAT2X2 */ -#line 2470 "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 8845 "MachineIndependent/glslang_tab.cpp" +#line 8938 "MachineIndependent/glslang_tab.cpp" break; - case 338: /* type_specifier_nonarray: F64MAT2X3 */ -#line 2476 "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 8856 "MachineIndependent/glslang_tab.cpp" +#line 8949 "MachineIndependent/glslang_tab.cpp" break; - case 339: /* type_specifier_nonarray: F64MAT2X4 */ -#line 2482 "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 8867 "MachineIndependent/glslang_tab.cpp" +#line 8960 "MachineIndependent/glslang_tab.cpp" break; - case 340: /* type_specifier_nonarray: F64MAT3X2 */ -#line 2488 "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 8878 "MachineIndependent/glslang_tab.cpp" +#line 8971 "MachineIndependent/glslang_tab.cpp" break; - case 341: /* type_specifier_nonarray: F64MAT3X3 */ -#line 2494 "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 8889 "MachineIndependent/glslang_tab.cpp" +#line 8982 "MachineIndependent/glslang_tab.cpp" break; - case 342: /* type_specifier_nonarray: F64MAT3X4 */ -#line 2500 "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 8900 "MachineIndependent/glslang_tab.cpp" +#line 8993 "MachineIndependent/glslang_tab.cpp" break; - case 343: /* type_specifier_nonarray: F64MAT4X2 */ -#line 2506 "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 8911 "MachineIndependent/glslang_tab.cpp" +#line 9004 "MachineIndependent/glslang_tab.cpp" break; - case 344: /* type_specifier_nonarray: F64MAT4X3 */ -#line 2512 "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 8922 "MachineIndependent/glslang_tab.cpp" +#line 9015 "MachineIndependent/glslang_tab.cpp" break; - case 345: /* type_specifier_nonarray: F64MAT4X4 */ -#line 2518 "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 8933 "MachineIndependent/glslang_tab.cpp" +#line 9026 "MachineIndependent/glslang_tab.cpp" break; - case 346: /* type_specifier_nonarray: ACCSTRUCTNV */ -#line 2524 "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 8942 "MachineIndependent/glslang_tab.cpp" +#line 9035 "MachineIndependent/glslang_tab.cpp" break; - case 347: /* type_specifier_nonarray: ACCSTRUCTEXT */ -#line 2528 "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 8951 "MachineIndependent/glslang_tab.cpp" +#line 9044 "MachineIndependent/glslang_tab.cpp" break; - case 348: /* type_specifier_nonarray: RAYQUERYEXT */ -#line 2532 "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 8960 "MachineIndependent/glslang_tab.cpp" +#line 9053 "MachineIndependent/glslang_tab.cpp" break; - case 349: /* type_specifier_nonarray: ATOMIC_UINT */ -#line 2536 "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 8970 "MachineIndependent/glslang_tab.cpp" +#line 9063 "MachineIndependent/glslang_tab.cpp" break; - case 350: /* type_specifier_nonarray: SAMPLER1D */ -#line 2541 "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 8980 "MachineIndependent/glslang_tab.cpp" +#line 9073 "MachineIndependent/glslang_tab.cpp" break; - case 351: /* type_specifier_nonarray: SAMPLER2D */ -#line 2546 "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 8990 "MachineIndependent/glslang_tab.cpp" +#line 9083 "MachineIndependent/glslang_tab.cpp" break; - case 352: /* type_specifier_nonarray: SAMPLER3D */ -#line 2551 "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 9000 "MachineIndependent/glslang_tab.cpp" +#line 9093 "MachineIndependent/glslang_tab.cpp" break; - case 353: /* type_specifier_nonarray: SAMPLERCUBE */ -#line 2556 "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 9010 "MachineIndependent/glslang_tab.cpp" +#line 9103 "MachineIndependent/glslang_tab.cpp" break; - case 354: /* type_specifier_nonarray: SAMPLER2DSHADOW */ -#line 2561 "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 9020 "MachineIndependent/glslang_tab.cpp" +#line 9113 "MachineIndependent/glslang_tab.cpp" break; - case 355: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ -#line 2566 "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 9030 "MachineIndependent/glslang_tab.cpp" +#line 9123 "MachineIndependent/glslang_tab.cpp" break; - case 356: /* type_specifier_nonarray: SAMPLER2DARRAY */ -#line 2571 "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 9040 "MachineIndependent/glslang_tab.cpp" +#line 9133 "MachineIndependent/glslang_tab.cpp" break; - case 357: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ -#line 2576 "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 9050 "MachineIndependent/glslang_tab.cpp" +#line 9143 "MachineIndependent/glslang_tab.cpp" break; - case 358: /* type_specifier_nonarray: SAMPLER1DSHADOW */ -#line 2581 "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 9060 "MachineIndependent/glslang_tab.cpp" +#line 9153 "MachineIndependent/glslang_tab.cpp" break; - case 359: /* type_specifier_nonarray: SAMPLER1DARRAY */ -#line 2586 "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 9070 "MachineIndependent/glslang_tab.cpp" +#line 9163 "MachineIndependent/glslang_tab.cpp" break; - case 360: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ -#line 2591 "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 9080 "MachineIndependent/glslang_tab.cpp" +#line 9173 "MachineIndependent/glslang_tab.cpp" break; - case 361: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ -#line 2596 "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 9090 "MachineIndependent/glslang_tab.cpp" +#line 9183 "MachineIndependent/glslang_tab.cpp" break; - case 362: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ -#line 2601 "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 9100 "MachineIndependent/glslang_tab.cpp" +#line 9193 "MachineIndependent/glslang_tab.cpp" break; - case 363: /* type_specifier_nonarray: F16SAMPLER1D */ -#line 2606 "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 9111 "MachineIndependent/glslang_tab.cpp" +#line 9204 "MachineIndependent/glslang_tab.cpp" break; - case 364: /* type_specifier_nonarray: F16SAMPLER2D */ -#line 2612 "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 9122 "MachineIndependent/glslang_tab.cpp" +#line 9215 "MachineIndependent/glslang_tab.cpp" break; - case 365: /* type_specifier_nonarray: F16SAMPLER3D */ -#line 2618 "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 9133 "MachineIndependent/glslang_tab.cpp" +#line 9226 "MachineIndependent/glslang_tab.cpp" break; - case 366: /* type_specifier_nonarray: F16SAMPLERCUBE */ -#line 2624 "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 9144 "MachineIndependent/glslang_tab.cpp" +#line 9237 "MachineIndependent/glslang_tab.cpp" break; - case 367: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ -#line 2630 "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 9155 "MachineIndependent/glslang_tab.cpp" +#line 9248 "MachineIndependent/glslang_tab.cpp" break; - case 368: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ -#line 2636 "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 9166 "MachineIndependent/glslang_tab.cpp" +#line 9259 "MachineIndependent/glslang_tab.cpp" break; - case 369: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ -#line 2642 "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 9177 "MachineIndependent/glslang_tab.cpp" +#line 9270 "MachineIndependent/glslang_tab.cpp" break; - case 370: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ -#line 2648 "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 9188 "MachineIndependent/glslang_tab.cpp" +#line 9281 "MachineIndependent/glslang_tab.cpp" break; - case 371: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ -#line 2654 "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 9199 "MachineIndependent/glslang_tab.cpp" +#line 9292 "MachineIndependent/glslang_tab.cpp" break; - case 372: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ -#line 2660 "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 9210 "MachineIndependent/glslang_tab.cpp" +#line 9303 "MachineIndependent/glslang_tab.cpp" break; - case 373: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ -#line 2666 "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 9221 "MachineIndependent/glslang_tab.cpp" +#line 9314 "MachineIndependent/glslang_tab.cpp" break; - case 374: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ -#line 2672 "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 9232 "MachineIndependent/glslang_tab.cpp" +#line 9325 "MachineIndependent/glslang_tab.cpp" break; - case 375: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ -#line 2678 "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 9243 "MachineIndependent/glslang_tab.cpp" +#line 9336 "MachineIndependent/glslang_tab.cpp" break; - case 376: /* type_specifier_nonarray: ISAMPLER1D */ -#line 2684 "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 9253 "MachineIndependent/glslang_tab.cpp" +#line 9346 "MachineIndependent/glslang_tab.cpp" break; - case 377: /* type_specifier_nonarray: ISAMPLER2D */ -#line 2689 "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 9263 "MachineIndependent/glslang_tab.cpp" +#line 9356 "MachineIndependent/glslang_tab.cpp" break; - case 378: /* type_specifier_nonarray: ISAMPLER3D */ -#line 2694 "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 9273 "MachineIndependent/glslang_tab.cpp" +#line 9366 "MachineIndependent/glslang_tab.cpp" break; - case 379: /* type_specifier_nonarray: ISAMPLERCUBE */ -#line 2699 "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 9283 "MachineIndependent/glslang_tab.cpp" +#line 9376 "MachineIndependent/glslang_tab.cpp" break; - case 380: /* type_specifier_nonarray: ISAMPLER2DARRAY */ -#line 2704 "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 9293 "MachineIndependent/glslang_tab.cpp" +#line 9386 "MachineIndependent/glslang_tab.cpp" break; - case 381: /* type_specifier_nonarray: USAMPLER2D */ -#line 2709 "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 9303 "MachineIndependent/glslang_tab.cpp" +#line 9396 "MachineIndependent/glslang_tab.cpp" break; - case 382: /* type_specifier_nonarray: USAMPLER3D */ -#line 2714 "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 9313 "MachineIndependent/glslang_tab.cpp" +#line 9406 "MachineIndependent/glslang_tab.cpp" break; - case 383: /* type_specifier_nonarray: USAMPLERCUBE */ -#line 2719 "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 9323 "MachineIndependent/glslang_tab.cpp" +#line 9416 "MachineIndependent/glslang_tab.cpp" break; - case 384: /* type_specifier_nonarray: ISAMPLER1DARRAY */ -#line 2724 "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 9333 "MachineIndependent/glslang_tab.cpp" +#line 9426 "MachineIndependent/glslang_tab.cpp" break; - case 385: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ -#line 2729 "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 9343 "MachineIndependent/glslang_tab.cpp" +#line 9436 "MachineIndependent/glslang_tab.cpp" break; - case 386: /* type_specifier_nonarray: USAMPLER1D */ -#line 2734 "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 9353 "MachineIndependent/glslang_tab.cpp" +#line 9446 "MachineIndependent/glslang_tab.cpp" break; - case 387: /* type_specifier_nonarray: USAMPLER1DARRAY */ -#line 2739 "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 9363 "MachineIndependent/glslang_tab.cpp" +#line 9456 "MachineIndependent/glslang_tab.cpp" break; - case 388: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ -#line 2744 "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 9373 "MachineIndependent/glslang_tab.cpp" +#line 9466 "MachineIndependent/glslang_tab.cpp" break; - case 389: /* type_specifier_nonarray: TEXTURECUBEARRAY */ -#line 2749 "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 9383 "MachineIndependent/glslang_tab.cpp" +#line 9476 "MachineIndependent/glslang_tab.cpp" break; - case 390: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ -#line 2754 "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 9393 "MachineIndependent/glslang_tab.cpp" +#line 9486 "MachineIndependent/glslang_tab.cpp" break; - case 391: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ -#line 2759 "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 9403 "MachineIndependent/glslang_tab.cpp" +#line 9496 "MachineIndependent/glslang_tab.cpp" break; - case 392: /* type_specifier_nonarray: USAMPLER2DARRAY */ -#line 2764 "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 9413 "MachineIndependent/glslang_tab.cpp" +#line 9506 "MachineIndependent/glslang_tab.cpp" break; - case 393: /* type_specifier_nonarray: TEXTURE2D */ -#line 2769 "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 9423 "MachineIndependent/glslang_tab.cpp" +#line 9516 "MachineIndependent/glslang_tab.cpp" break; - case 394: /* type_specifier_nonarray: TEXTURE3D */ -#line 2774 "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 9433 "MachineIndependent/glslang_tab.cpp" +#line 9526 "MachineIndependent/glslang_tab.cpp" break; - case 395: /* type_specifier_nonarray: TEXTURE2DARRAY */ -#line 2779 "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 9443 "MachineIndependent/glslang_tab.cpp" +#line 9536 "MachineIndependent/glslang_tab.cpp" break; - case 396: /* type_specifier_nonarray: TEXTURECUBE */ -#line 2784 "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 9453 "MachineIndependent/glslang_tab.cpp" +#line 9546 "MachineIndependent/glslang_tab.cpp" break; - case 397: /* type_specifier_nonarray: ITEXTURE2D */ -#line 2789 "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 9463 "MachineIndependent/glslang_tab.cpp" +#line 9556 "MachineIndependent/glslang_tab.cpp" break; - case 398: /* type_specifier_nonarray: ITEXTURE3D */ -#line 2794 "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 9473 "MachineIndependent/glslang_tab.cpp" +#line 9566 "MachineIndependent/glslang_tab.cpp" break; - case 399: /* type_specifier_nonarray: ITEXTURECUBE */ -#line 2799 "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 9483 "MachineIndependent/glslang_tab.cpp" +#line 9576 "MachineIndependent/glslang_tab.cpp" break; - case 400: /* type_specifier_nonarray: ITEXTURE2DARRAY */ -#line 2804 "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 9493 "MachineIndependent/glslang_tab.cpp" +#line 9586 "MachineIndependent/glslang_tab.cpp" break; - case 401: /* type_specifier_nonarray: UTEXTURE2D */ -#line 2809 "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 9503 "MachineIndependent/glslang_tab.cpp" +#line 9596 "MachineIndependent/glslang_tab.cpp" break; - case 402: /* type_specifier_nonarray: UTEXTURE3D */ -#line 2814 "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 9513 "MachineIndependent/glslang_tab.cpp" +#line 9606 "MachineIndependent/glslang_tab.cpp" break; - case 403: /* type_specifier_nonarray: UTEXTURECUBE */ -#line 2819 "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 9523 "MachineIndependent/glslang_tab.cpp" +#line 9616 "MachineIndependent/glslang_tab.cpp" break; - case 404: /* type_specifier_nonarray: UTEXTURE2DARRAY */ -#line 2824 "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 9533 "MachineIndependent/glslang_tab.cpp" +#line 9626 "MachineIndependent/glslang_tab.cpp" break; - case 405: /* type_specifier_nonarray: SAMPLER */ -#line 2829 "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 9543 "MachineIndependent/glslang_tab.cpp" +#line 9636 "MachineIndependent/glslang_tab.cpp" break; - case 406: /* type_specifier_nonarray: SAMPLERSHADOW */ -#line 2834 "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 9553 "MachineIndependent/glslang_tab.cpp" +#line 9646 "MachineIndependent/glslang_tab.cpp" break; - case 407: /* type_specifier_nonarray: SAMPLER2DRECT */ -#line 2839 "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 9563 "MachineIndependent/glslang_tab.cpp" +#line 9656 "MachineIndependent/glslang_tab.cpp" break; - case 408: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ -#line 2844 "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 9573 "MachineIndependent/glslang_tab.cpp" +#line 9666 "MachineIndependent/glslang_tab.cpp" break; - case 409: /* type_specifier_nonarray: F16SAMPLER2DRECT */ -#line 2849 "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 9584 "MachineIndependent/glslang_tab.cpp" +#line 9677 "MachineIndependent/glslang_tab.cpp" break; - case 410: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ -#line 2855 "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 9595 "MachineIndependent/glslang_tab.cpp" +#line 9688 "MachineIndependent/glslang_tab.cpp" break; - case 411: /* type_specifier_nonarray: ISAMPLER2DRECT */ -#line 2861 "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 9605 "MachineIndependent/glslang_tab.cpp" +#line 9698 "MachineIndependent/glslang_tab.cpp" break; - case 412: /* type_specifier_nonarray: USAMPLER2DRECT */ -#line 2866 "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 9615 "MachineIndependent/glslang_tab.cpp" +#line 9708 "MachineIndependent/glslang_tab.cpp" break; - case 413: /* type_specifier_nonarray: SAMPLERBUFFER */ -#line 2871 "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 9625 "MachineIndependent/glslang_tab.cpp" +#line 9718 "MachineIndependent/glslang_tab.cpp" break; - case 414: /* type_specifier_nonarray: F16SAMPLERBUFFER */ -#line 2876 "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 9636 "MachineIndependent/glslang_tab.cpp" +#line 9729 "MachineIndependent/glslang_tab.cpp" break; - case 415: /* type_specifier_nonarray: ISAMPLERBUFFER */ -#line 2882 "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 9646 "MachineIndependent/glslang_tab.cpp" +#line 9739 "MachineIndependent/glslang_tab.cpp" break; - case 416: /* type_specifier_nonarray: USAMPLERBUFFER */ -#line 2887 "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 9656 "MachineIndependent/glslang_tab.cpp" +#line 9749 "MachineIndependent/glslang_tab.cpp" break; - case 417: /* type_specifier_nonarray: SAMPLER2DMS */ -#line 2892 "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 9666 "MachineIndependent/glslang_tab.cpp" +#line 9759 "MachineIndependent/glslang_tab.cpp" break; - case 418: /* type_specifier_nonarray: F16SAMPLER2DMS */ -#line 2897 "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 9677 "MachineIndependent/glslang_tab.cpp" +#line 9770 "MachineIndependent/glslang_tab.cpp" break; - case 419: /* type_specifier_nonarray: ISAMPLER2DMS */ -#line 2903 "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 9687 "MachineIndependent/glslang_tab.cpp" +#line 9780 "MachineIndependent/glslang_tab.cpp" break; - case 420: /* type_specifier_nonarray: USAMPLER2DMS */ -#line 2908 "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 9697 "MachineIndependent/glslang_tab.cpp" +#line 9790 "MachineIndependent/glslang_tab.cpp" break; - case 421: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ -#line 2913 "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 9707 "MachineIndependent/glslang_tab.cpp" +#line 9800 "MachineIndependent/glslang_tab.cpp" break; - case 422: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ -#line 2918 "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 9718 "MachineIndependent/glslang_tab.cpp" +#line 9811 "MachineIndependent/glslang_tab.cpp" break; - case 423: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ -#line 2924 "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 9728 "MachineIndependent/glslang_tab.cpp" +#line 9821 "MachineIndependent/glslang_tab.cpp" break; - case 424: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ -#line 2929 "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 9738 "MachineIndependent/glslang_tab.cpp" +#line 9831 "MachineIndependent/glslang_tab.cpp" break; - case 425: /* type_specifier_nonarray: TEXTURE1D */ -#line 2934 "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 9748 "MachineIndependent/glslang_tab.cpp" +#line 9841 "MachineIndependent/glslang_tab.cpp" break; - case 426: /* type_specifier_nonarray: F16TEXTURE1D */ -#line 2939 "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 9759 "MachineIndependent/glslang_tab.cpp" +#line 9852 "MachineIndependent/glslang_tab.cpp" break; - case 427: /* type_specifier_nonarray: F16TEXTURE2D */ -#line 2945 "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 9770 "MachineIndependent/glslang_tab.cpp" +#line 9863 "MachineIndependent/glslang_tab.cpp" break; - case 428: /* type_specifier_nonarray: F16TEXTURE3D */ -#line 2951 "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 9781 "MachineIndependent/glslang_tab.cpp" +#line 9874 "MachineIndependent/glslang_tab.cpp" break; - case 429: /* type_specifier_nonarray: F16TEXTURECUBE */ -#line 2957 "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 9792 "MachineIndependent/glslang_tab.cpp" +#line 9885 "MachineIndependent/glslang_tab.cpp" break; - case 430: /* type_specifier_nonarray: TEXTURE1DARRAY */ -#line 2963 "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 9802 "MachineIndependent/glslang_tab.cpp" +#line 9895 "MachineIndependent/glslang_tab.cpp" break; - case 431: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ -#line 2968 "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 9813 "MachineIndependent/glslang_tab.cpp" +#line 9906 "MachineIndependent/glslang_tab.cpp" break; - case 432: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ -#line 2974 "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 9824 "MachineIndependent/glslang_tab.cpp" +#line 9917 "MachineIndependent/glslang_tab.cpp" break; - case 433: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ -#line 2980 "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 9835 "MachineIndependent/glslang_tab.cpp" +#line 9928 "MachineIndependent/glslang_tab.cpp" break; - case 434: /* type_specifier_nonarray: ITEXTURE1D */ -#line 2986 "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 9845 "MachineIndependent/glslang_tab.cpp" +#line 9938 "MachineIndependent/glslang_tab.cpp" break; - case 435: /* type_specifier_nonarray: ITEXTURE1DARRAY */ -#line 2991 "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 9855 "MachineIndependent/glslang_tab.cpp" +#line 9948 "MachineIndependent/glslang_tab.cpp" break; - case 436: /* type_specifier_nonarray: UTEXTURE1D */ -#line 2996 "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 9865 "MachineIndependent/glslang_tab.cpp" +#line 9958 "MachineIndependent/glslang_tab.cpp" break; - case 437: /* type_specifier_nonarray: UTEXTURE1DARRAY */ -#line 3001 "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 9875 "MachineIndependent/glslang_tab.cpp" +#line 9968 "MachineIndependent/glslang_tab.cpp" break; - case 438: /* type_specifier_nonarray: TEXTURE2DRECT */ -#line 3006 "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 9885 "MachineIndependent/glslang_tab.cpp" +#line 9978 "MachineIndependent/glslang_tab.cpp" break; - case 439: /* type_specifier_nonarray: F16TEXTURE2DRECT */ -#line 3011 "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 9896 "MachineIndependent/glslang_tab.cpp" +#line 9989 "MachineIndependent/glslang_tab.cpp" break; - case 440: /* type_specifier_nonarray: ITEXTURE2DRECT */ -#line 3017 "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 9906 "MachineIndependent/glslang_tab.cpp" +#line 9999 "MachineIndependent/glslang_tab.cpp" break; - case 441: /* type_specifier_nonarray: UTEXTURE2DRECT */ -#line 3022 "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 9916 "MachineIndependent/glslang_tab.cpp" +#line 10009 "MachineIndependent/glslang_tab.cpp" break; - case 442: /* type_specifier_nonarray: TEXTUREBUFFER */ -#line 3027 "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 9926 "MachineIndependent/glslang_tab.cpp" +#line 10019 "MachineIndependent/glslang_tab.cpp" break; - case 443: /* type_specifier_nonarray: F16TEXTUREBUFFER */ -#line 3032 "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 9937 "MachineIndependent/glslang_tab.cpp" +#line 10030 "MachineIndependent/glslang_tab.cpp" break; - case 444: /* type_specifier_nonarray: ITEXTUREBUFFER */ -#line 3038 "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 9947 "MachineIndependent/glslang_tab.cpp" +#line 10040 "MachineIndependent/glslang_tab.cpp" break; - case 445: /* type_specifier_nonarray: UTEXTUREBUFFER */ -#line 3043 "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 9957 "MachineIndependent/glslang_tab.cpp" +#line 10050 "MachineIndependent/glslang_tab.cpp" break; - case 446: /* type_specifier_nonarray: TEXTURE2DMS */ -#line 3048 "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 9967 "MachineIndependent/glslang_tab.cpp" +#line 10060 "MachineIndependent/glslang_tab.cpp" break; - case 447: /* type_specifier_nonarray: F16TEXTURE2DMS */ -#line 3053 "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 9978 "MachineIndependent/glslang_tab.cpp" +#line 10071 "MachineIndependent/glslang_tab.cpp" break; - case 448: /* type_specifier_nonarray: ITEXTURE2DMS */ -#line 3059 "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 9988 "MachineIndependent/glslang_tab.cpp" +#line 10081 "MachineIndependent/glslang_tab.cpp" break; - case 449: /* type_specifier_nonarray: UTEXTURE2DMS */ -#line 3064 "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 9998 "MachineIndependent/glslang_tab.cpp" +#line 10091 "MachineIndependent/glslang_tab.cpp" break; - case 450: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ -#line 3069 "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 10008 "MachineIndependent/glslang_tab.cpp" +#line 10101 "MachineIndependent/glslang_tab.cpp" break; - case 451: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ -#line 3074 "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 10019 "MachineIndependent/glslang_tab.cpp" +#line 10112 "MachineIndependent/glslang_tab.cpp" break; - case 452: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ -#line 3080 "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 10029 "MachineIndependent/glslang_tab.cpp" +#line 10122 "MachineIndependent/glslang_tab.cpp" break; - case 453: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ -#line 3085 "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 10039 "MachineIndependent/glslang_tab.cpp" +#line 10132 "MachineIndependent/glslang_tab.cpp" break; - case 454: /* type_specifier_nonarray: IMAGE1D */ -#line 3090 "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 10049 "MachineIndependent/glslang_tab.cpp" +#line 10142 "MachineIndependent/glslang_tab.cpp" break; - case 455: /* type_specifier_nonarray: F16IMAGE1D */ -#line 3095 "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 10060 "MachineIndependent/glslang_tab.cpp" +#line 10153 "MachineIndependent/glslang_tab.cpp" break; - case 456: /* type_specifier_nonarray: IIMAGE1D */ -#line 3101 "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 10070 "MachineIndependent/glslang_tab.cpp" +#line 10163 "MachineIndependent/glslang_tab.cpp" break; - case 457: /* type_specifier_nonarray: UIMAGE1D */ -#line 3106 "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 10080 "MachineIndependent/glslang_tab.cpp" +#line 10173 "MachineIndependent/glslang_tab.cpp" break; - case 458: /* type_specifier_nonarray: IMAGE2D */ -#line 3111 "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 10090 "MachineIndependent/glslang_tab.cpp" +#line 10183 "MachineIndependent/glslang_tab.cpp" break; - case 459: /* type_specifier_nonarray: F16IMAGE2D */ -#line 3116 "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 10101 "MachineIndependent/glslang_tab.cpp" +#line 10194 "MachineIndependent/glslang_tab.cpp" break; - case 460: /* type_specifier_nonarray: IIMAGE2D */ -#line 3122 "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 10111 "MachineIndependent/glslang_tab.cpp" +#line 10204 "MachineIndependent/glslang_tab.cpp" break; - case 461: /* type_specifier_nonarray: UIMAGE2D */ -#line 3127 "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 10121 "MachineIndependent/glslang_tab.cpp" +#line 10214 "MachineIndependent/glslang_tab.cpp" break; - case 462: /* type_specifier_nonarray: IMAGE3D */ -#line 3132 "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 10131 "MachineIndependent/glslang_tab.cpp" +#line 10224 "MachineIndependent/glslang_tab.cpp" break; - case 463: /* type_specifier_nonarray: F16IMAGE3D */ -#line 3137 "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 10142 "MachineIndependent/glslang_tab.cpp" +#line 10235 "MachineIndependent/glslang_tab.cpp" break; - case 464: /* type_specifier_nonarray: IIMAGE3D */ -#line 3143 "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 10152 "MachineIndependent/glslang_tab.cpp" +#line 10245 "MachineIndependent/glslang_tab.cpp" break; - case 465: /* type_specifier_nonarray: UIMAGE3D */ -#line 3148 "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 10162 "MachineIndependent/glslang_tab.cpp" +#line 10255 "MachineIndependent/glslang_tab.cpp" break; - case 466: /* type_specifier_nonarray: IMAGE2DRECT */ -#line 3153 "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 10172 "MachineIndependent/glslang_tab.cpp" +#line 10265 "MachineIndependent/glslang_tab.cpp" break; - case 467: /* type_specifier_nonarray: F16IMAGE2DRECT */ -#line 3158 "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 10183 "MachineIndependent/glslang_tab.cpp" +#line 10276 "MachineIndependent/glslang_tab.cpp" break; - case 468: /* type_specifier_nonarray: IIMAGE2DRECT */ -#line 3164 "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 10193 "MachineIndependent/glslang_tab.cpp" +#line 10286 "MachineIndependent/glslang_tab.cpp" break; - case 469: /* type_specifier_nonarray: UIMAGE2DRECT */ -#line 3169 "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 10203 "MachineIndependent/glslang_tab.cpp" +#line 10296 "MachineIndependent/glslang_tab.cpp" break; - case 470: /* type_specifier_nonarray: IMAGECUBE */ -#line 3174 "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 10213 "MachineIndependent/glslang_tab.cpp" +#line 10306 "MachineIndependent/glslang_tab.cpp" break; - case 471: /* type_specifier_nonarray: F16IMAGECUBE */ -#line 3179 "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 10224 "MachineIndependent/glslang_tab.cpp" +#line 10317 "MachineIndependent/glslang_tab.cpp" break; - case 472: /* type_specifier_nonarray: IIMAGECUBE */ -#line 3185 "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 10234 "MachineIndependent/glslang_tab.cpp" +#line 10327 "MachineIndependent/glslang_tab.cpp" break; - case 473: /* type_specifier_nonarray: UIMAGECUBE */ -#line 3190 "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 10244 "MachineIndependent/glslang_tab.cpp" +#line 10337 "MachineIndependent/glslang_tab.cpp" break; - case 474: /* type_specifier_nonarray: IMAGEBUFFER */ -#line 3195 "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 10254 "MachineIndependent/glslang_tab.cpp" +#line 10347 "MachineIndependent/glslang_tab.cpp" break; - case 475: /* type_specifier_nonarray: F16IMAGEBUFFER */ -#line 3200 "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 10265 "MachineIndependent/glslang_tab.cpp" +#line 10358 "MachineIndependent/glslang_tab.cpp" break; - case 476: /* type_specifier_nonarray: IIMAGEBUFFER */ -#line 3206 "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 10275 "MachineIndependent/glslang_tab.cpp" +#line 10368 "MachineIndependent/glslang_tab.cpp" break; - case 477: /* type_specifier_nonarray: UIMAGEBUFFER */ -#line 3211 "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 10285 "MachineIndependent/glslang_tab.cpp" +#line 10378 "MachineIndependent/glslang_tab.cpp" break; - case 478: /* type_specifier_nonarray: IMAGE1DARRAY */ -#line 3216 "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 10295 "MachineIndependent/glslang_tab.cpp" +#line 10388 "MachineIndependent/glslang_tab.cpp" break; - case 479: /* type_specifier_nonarray: F16IMAGE1DARRAY */ -#line 3221 "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 10306 "MachineIndependent/glslang_tab.cpp" +#line 10399 "MachineIndependent/glslang_tab.cpp" break; - case 480: /* type_specifier_nonarray: IIMAGE1DARRAY */ -#line 3227 "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 10316 "MachineIndependent/glslang_tab.cpp" +#line 10409 "MachineIndependent/glslang_tab.cpp" break; - case 481: /* type_specifier_nonarray: UIMAGE1DARRAY */ -#line 3232 "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 10326 "MachineIndependent/glslang_tab.cpp" +#line 10419 "MachineIndependent/glslang_tab.cpp" break; - case 482: /* type_specifier_nonarray: IMAGE2DARRAY */ -#line 3237 "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 10336 "MachineIndependent/glslang_tab.cpp" +#line 10429 "MachineIndependent/glslang_tab.cpp" break; - case 483: /* type_specifier_nonarray: F16IMAGE2DARRAY */ -#line 3242 "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 10347 "MachineIndependent/glslang_tab.cpp" +#line 10440 "MachineIndependent/glslang_tab.cpp" break; - case 484: /* type_specifier_nonarray: IIMAGE2DARRAY */ -#line 3248 "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 10357 "MachineIndependent/glslang_tab.cpp" +#line 10450 "MachineIndependent/glslang_tab.cpp" break; - case 485: /* type_specifier_nonarray: UIMAGE2DARRAY */ -#line 3253 "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 10367 "MachineIndependent/glslang_tab.cpp" +#line 10460 "MachineIndependent/glslang_tab.cpp" break; - case 486: /* type_specifier_nonarray: IMAGECUBEARRAY */ -#line 3258 "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 10377 "MachineIndependent/glslang_tab.cpp" +#line 10470 "MachineIndependent/glslang_tab.cpp" break; - case 487: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ -#line 3263 "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 10388 "MachineIndependent/glslang_tab.cpp" +#line 10481 "MachineIndependent/glslang_tab.cpp" break; - case 488: /* type_specifier_nonarray: IIMAGECUBEARRAY */ -#line 3269 "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 10398 "MachineIndependent/glslang_tab.cpp" +#line 10491 "MachineIndependent/glslang_tab.cpp" break; - case 489: /* type_specifier_nonarray: UIMAGECUBEARRAY */ -#line 3274 "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 10408 "MachineIndependent/glslang_tab.cpp" +#line 10501 "MachineIndependent/glslang_tab.cpp" break; - case 490: /* type_specifier_nonarray: IMAGE2DMS */ -#line 3279 "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 10418 "MachineIndependent/glslang_tab.cpp" +#line 10511 "MachineIndependent/glslang_tab.cpp" break; - case 491: /* type_specifier_nonarray: F16IMAGE2DMS */ -#line 3284 "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 10429 "MachineIndependent/glslang_tab.cpp" +#line 10522 "MachineIndependent/glslang_tab.cpp" break; - case 492: /* type_specifier_nonarray: IIMAGE2DMS */ -#line 3290 "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 10439 "MachineIndependent/glslang_tab.cpp" +#line 10532 "MachineIndependent/glslang_tab.cpp" break; - case 493: /* type_specifier_nonarray: UIMAGE2DMS */ -#line 3295 "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 10449 "MachineIndependent/glslang_tab.cpp" +#line 10542 "MachineIndependent/glslang_tab.cpp" break; - case 494: /* type_specifier_nonarray: IMAGE2DMSARRAY */ -#line 3300 "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 10459 "MachineIndependent/glslang_tab.cpp" +#line 10552 "MachineIndependent/glslang_tab.cpp" break; - case 495: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ -#line 3305 "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 10470 "MachineIndependent/glslang_tab.cpp" +#line 10563 "MachineIndependent/glslang_tab.cpp" break; - case 496: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ -#line 3311 "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 10480 "MachineIndependent/glslang_tab.cpp" +#line 10573 "MachineIndependent/glslang_tab.cpp" break; - case 497: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ -#line 3316 "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 10490 "MachineIndependent/glslang_tab.cpp" +#line 10583 "MachineIndependent/glslang_tab.cpp" break; - case 498: /* type_specifier_nonarray: I64IMAGE1D */ -#line 3321 "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 10500 "MachineIndependent/glslang_tab.cpp" +#line 10593 "MachineIndependent/glslang_tab.cpp" break; - case 499: /* type_specifier_nonarray: U64IMAGE1D */ -#line 3326 "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 10510 "MachineIndependent/glslang_tab.cpp" +#line 10603 "MachineIndependent/glslang_tab.cpp" break; - case 500: /* type_specifier_nonarray: I64IMAGE2D */ -#line 3331 "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 10520 "MachineIndependent/glslang_tab.cpp" +#line 10613 "MachineIndependent/glslang_tab.cpp" break; - case 501: /* type_specifier_nonarray: U64IMAGE2D */ -#line 3336 "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 10530 "MachineIndependent/glslang_tab.cpp" +#line 10623 "MachineIndependent/glslang_tab.cpp" break; - case 502: /* type_specifier_nonarray: I64IMAGE3D */ -#line 3341 "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 10540 "MachineIndependent/glslang_tab.cpp" +#line 10633 "MachineIndependent/glslang_tab.cpp" break; - case 503: /* type_specifier_nonarray: U64IMAGE3D */ -#line 3346 "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 10550 "MachineIndependent/glslang_tab.cpp" +#line 10643 "MachineIndependent/glslang_tab.cpp" break; - case 504: /* type_specifier_nonarray: I64IMAGE2DRECT */ -#line 3351 "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 10560 "MachineIndependent/glslang_tab.cpp" +#line 10653 "MachineIndependent/glslang_tab.cpp" break; - case 505: /* type_specifier_nonarray: U64IMAGE2DRECT */ -#line 3356 "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 10570 "MachineIndependent/glslang_tab.cpp" +#line 10663 "MachineIndependent/glslang_tab.cpp" break; - case 506: /* type_specifier_nonarray: I64IMAGECUBE */ -#line 3361 "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 10580 "MachineIndependent/glslang_tab.cpp" +#line 10673 "MachineIndependent/glslang_tab.cpp" break; - case 507: /* type_specifier_nonarray: U64IMAGECUBE */ -#line 3366 "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 10590 "MachineIndependent/glslang_tab.cpp" +#line 10683 "MachineIndependent/glslang_tab.cpp" break; - case 508: /* type_specifier_nonarray: I64IMAGEBUFFER */ -#line 3371 "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 10600 "MachineIndependent/glslang_tab.cpp" +#line 10693 "MachineIndependent/glslang_tab.cpp" break; - case 509: /* type_specifier_nonarray: U64IMAGEBUFFER */ -#line 3376 "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 10610 "MachineIndependent/glslang_tab.cpp" +#line 10703 "MachineIndependent/glslang_tab.cpp" break; - case 510: /* type_specifier_nonarray: I64IMAGE1DARRAY */ -#line 3381 "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 10620 "MachineIndependent/glslang_tab.cpp" +#line 10713 "MachineIndependent/glslang_tab.cpp" break; - case 511: /* type_specifier_nonarray: U64IMAGE1DARRAY */ -#line 3386 "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 10630 "MachineIndependent/glslang_tab.cpp" +#line 10723 "MachineIndependent/glslang_tab.cpp" break; - case 512: /* type_specifier_nonarray: I64IMAGE2DARRAY */ -#line 3391 "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 10640 "MachineIndependent/glslang_tab.cpp" +#line 10733 "MachineIndependent/glslang_tab.cpp" break; - case 513: /* type_specifier_nonarray: U64IMAGE2DARRAY */ -#line 3396 "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 10650 "MachineIndependent/glslang_tab.cpp" +#line 10743 "MachineIndependent/glslang_tab.cpp" break; - case 514: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ -#line 3401 "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 10660 "MachineIndependent/glslang_tab.cpp" +#line 10753 "MachineIndependent/glslang_tab.cpp" break; - case 515: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ -#line 3406 "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 10670 "MachineIndependent/glslang_tab.cpp" +#line 10763 "MachineIndependent/glslang_tab.cpp" break; - case 516: /* type_specifier_nonarray: I64IMAGE2DMS */ -#line 3411 "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 10680 "MachineIndependent/glslang_tab.cpp" +#line 10773 "MachineIndependent/glslang_tab.cpp" break; - case 517: /* type_specifier_nonarray: U64IMAGE2DMS */ -#line 3416 "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 10690 "MachineIndependent/glslang_tab.cpp" +#line 10783 "MachineIndependent/glslang_tab.cpp" break; - case 518: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ -#line 3421 "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 10700 "MachineIndependent/glslang_tab.cpp" +#line 10793 "MachineIndependent/glslang_tab.cpp" break; - case 519: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ -#line 3426 "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 10710 "MachineIndependent/glslang_tab.cpp" +#line 10803 "MachineIndependent/glslang_tab.cpp" break; - case 520: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ -#line 3431 "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 10721 "MachineIndependent/glslang_tab.cpp" +#line 10814 "MachineIndependent/glslang_tab.cpp" break; - case 521: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ -#line 3437 "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 10732 "MachineIndependent/glslang_tab.cpp" +#line 10825 "MachineIndependent/glslang_tab.cpp" break; - case 522: /* type_specifier_nonarray: ATTACHMENTEXT */ -#line 3443 "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 10743 "MachineIndependent/glslang_tab.cpp" +#line 10836 "MachineIndependent/glslang_tab.cpp" break; - case 523: /* type_specifier_nonarray: IATTACHMENTEXT */ -#line 3449 "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 10754 "MachineIndependent/glslang_tab.cpp" +#line 10847 "MachineIndependent/glslang_tab.cpp" break; - case 524: /* type_specifier_nonarray: UATTACHMENTEXT */ -#line 3455 "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 10765 "MachineIndependent/glslang_tab.cpp" +#line 10858 "MachineIndependent/glslang_tab.cpp" break; - case 525: /* type_specifier_nonarray: SUBPASSINPUT */ -#line 3461 "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 10776 "MachineIndependent/glslang_tab.cpp" +#line 10869 "MachineIndependent/glslang_tab.cpp" break; - case 526: /* type_specifier_nonarray: SUBPASSINPUTMS */ -#line 3467 "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 10787 "MachineIndependent/glslang_tab.cpp" +#line 10880 "MachineIndependent/glslang_tab.cpp" break; - case 527: /* type_specifier_nonarray: F16SUBPASSINPUT */ -#line 3473 "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"); @@ -10795,11 +10888,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 10799 "MachineIndependent/glslang_tab.cpp" +#line 10892 "MachineIndependent/glslang_tab.cpp" break; - case 528: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ -#line 3480 "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"); @@ -10807,55 +10900,55 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 10811 "MachineIndependent/glslang_tab.cpp" +#line 10904 "MachineIndependent/glslang_tab.cpp" break; - case 529: /* type_specifier_nonarray: ISUBPASSINPUT */ -#line 3487 "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 10822 "MachineIndependent/glslang_tab.cpp" +#line 10915 "MachineIndependent/glslang_tab.cpp" break; - case 530: /* type_specifier_nonarray: ISUBPASSINPUTMS */ -#line 3493 "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 10833 "MachineIndependent/glslang_tab.cpp" +#line 10926 "MachineIndependent/glslang_tab.cpp" break; - case 531: /* type_specifier_nonarray: USUBPASSINPUT */ -#line 3499 "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 10844 "MachineIndependent/glslang_tab.cpp" +#line 10937 "MachineIndependent/glslang_tab.cpp" break; - case 532: /* type_specifier_nonarray: USUBPASSINPUTMS */ -#line 3505 "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 10855 "MachineIndependent/glslang_tab.cpp" +#line 10948 "MachineIndependent/glslang_tab.cpp" break; - case 533: /* type_specifier_nonarray: FCOOPMATNV */ -#line 3511 "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()); @@ -10863,11 +10956,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).coopmatNV = true; (yyval.interm.type).coopmatKHR = false; } -#line 10867 "MachineIndependent/glslang_tab.cpp" +#line 10960 "MachineIndependent/glslang_tab.cpp" break; - case 534: /* type_specifier_nonarray: ICOOPMATNV */ -#line 3518 "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()); @@ -10875,11 +10968,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).coopmatNV = true; (yyval.interm.type).coopmatKHR = false; } -#line 10879 "MachineIndependent/glslang_tab.cpp" +#line 10972 "MachineIndependent/glslang_tab.cpp" break; - case 535: /* type_specifier_nonarray: UCOOPMATNV */ -#line 3525 "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()); @@ -10887,11 +10980,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).coopmatNV = true; (yyval.interm.type).coopmatKHR = false; } -#line 10891 "MachineIndependent/glslang_tab.cpp" +#line 10984 "MachineIndependent/glslang_tab.cpp" break; - case 536: /* type_specifier_nonarray: COOPMAT */ -#line 3532 "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()); @@ -10899,68 +10992,79 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).coopmatNV = false; (yyval.interm.type).coopmatKHR = true; } -#line 10903 "MachineIndependent/glslang_tab.cpp" +#line 10996 "MachineIndependent/glslang_tab.cpp" break; - case 537: /* type_specifier_nonarray: TENSORLAYOUTNV */ -#line 3539 "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 10913 "MachineIndependent/glslang_tab.cpp" +#line 11006 "MachineIndependent/glslang_tab.cpp" break; - case 538: /* type_specifier_nonarray: TENSORVIEWNV */ -#line 3544 "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 10923 "MachineIndependent/glslang_tab.cpp" +#line 11016 "MachineIndependent/glslang_tab.cpp" break; - case 539: /* type_specifier_nonarray: FUNCTION */ -#line 3549 "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 10932 "MachineIndependent/glslang_tab.cpp" +#line 11025 "MachineIndependent/glslang_tab.cpp" + break; + + 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 11036 "MachineIndependent/glslang_tab.cpp" break; - case 540: /* type_specifier_nonarray: spirv_type_specifier */ -#line 3553 "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 10941 "MachineIndependent/glslang_tab.cpp" +#line 11045 "MachineIndependent/glslang_tab.cpp" break; - case 541: /* type_specifier_nonarray: HITOBJECTNV */ -#line 3557 "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 10950 "MachineIndependent/glslang_tab.cpp" +#line 11054 "MachineIndependent/glslang_tab.cpp" break; - case 542: /* type_specifier_nonarray: struct_specifier */ -#line 3561 "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 10960 "MachineIndependent/glslang_tab.cpp" +#line 11064 "MachineIndependent/glslang_tab.cpp" break; - case 543: /* type_specifier_nonarray: TYPE_NAME */ -#line 3566 "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 @@ -10974,47 +11078,47 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 10978 "MachineIndependent/glslang_tab.cpp" +#line 11082 "MachineIndependent/glslang_tab.cpp" break; - case 544: /* precision_qualifier: HIGH_PRECISION */ -#line 3582 "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 10988 "MachineIndependent/glslang_tab.cpp" +#line 11092 "MachineIndependent/glslang_tab.cpp" break; - case 545: /* precision_qualifier: MEDIUM_PRECISION */ -#line 3587 "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 10998 "MachineIndependent/glslang_tab.cpp" +#line 11102 "MachineIndependent/glslang_tab.cpp" break; - case 546: /* precision_qualifier: LOW_PRECISION */ -#line 3592 "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 11008 "MachineIndependent/glslang_tab.cpp" +#line 11112 "MachineIndependent/glslang_tab.cpp" break; - case 547: /* $@3: %empty */ -#line 3600 "MachineIndependent/glslang.y" + case 553: /* $@3: %empty */ +#line 3635 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 11014 "MachineIndependent/glslang_tab.cpp" +#line 11118 "MachineIndependent/glslang_tab.cpp" break; - case 548: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ -#line 3600 "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); @@ -11032,17 +11136,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 11036 "MachineIndependent/glslang_tab.cpp" +#line 11140 "MachineIndependent/glslang_tab.cpp" break; - case 549: /* $@4: %empty */ -#line 3617 "MachineIndependent/glslang.y" + case 555: /* $@4: %empty */ +#line 3652 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 11042 "MachineIndependent/glslang_tab.cpp" +#line 11146 "MachineIndependent/glslang_tab.cpp" break; - case 550: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ -#line 3617 "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); @@ -11050,19 +11154,19 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 11054 "MachineIndependent/glslang_tab.cpp" +#line 11158 "MachineIndependent/glslang_tab.cpp" break; - case 551: /* struct_declaration_list: struct_declaration */ -#line 3627 "MachineIndependent/glslang.y" + case 557: /* struct_declaration_list: struct_declaration */ +#line 3662 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 11062 "MachineIndependent/glslang_tab.cpp" +#line 11166 "MachineIndependent/glslang_tab.cpp" break; - case 552: /* struct_declaration_list: struct_declaration_list struct_declaration */ -#line 3630 "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) { @@ -11073,11 +11177,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 11077 "MachineIndependent/glslang_tab.cpp" +#line 11181 "MachineIndependent/glslang_tab.cpp" break; - case 553: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ -#line 3643 "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"); @@ -11089,7 +11193,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType); - parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).isCoopmat()); + parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).isCoopmatOrvec()); for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) { TType type((yyvsp[-2].interm.type)); @@ -11100,11 +11204,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 11104 "MachineIndependent/glslang_tab.cpp" +#line 11208 "MachineIndependent/glslang_tab.cpp" break; - case 554: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ -#line 3665 "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"); @@ -11118,7 +11222,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.memberQualifierCheck((yyvsp[-3].interm.type)); parseContext.voidErrorCheck((yyvsp[-2].interm.type).loc, (*(yyvsp[-1].interm.typeList))[0].type->getFieldName(), (yyvsp[-2].interm.type).basicType); parseContext.mergeQualifiers((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, (yyvsp[-3].interm.type).qualifier, true); - parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).isCoopmat()); + parseContext.precisionQualifierCheck((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).basicType, (yyvsp[-2].interm.type).qualifier, (yyvsp[-2].interm.type).isCoopmatOrvec()); for (unsigned int i = 0; i < (yyval.interm.typeList)->size(); ++i) { TType type((yyvsp[-2].interm.type)); @@ -11129,38 +11233,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 11133 "MachineIndependent/glslang_tab.cpp" +#line 11237 "MachineIndependent/glslang_tab.cpp" break; - case 555: /* struct_declarator_list: struct_declarator */ -#line 3692 "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 11142 "MachineIndependent/glslang_tab.cpp" +#line 11246 "MachineIndependent/glslang_tab.cpp" break; - case 556: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ -#line 3696 "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 11150 "MachineIndependent/glslang_tab.cpp" +#line 11254 "MachineIndependent/glslang_tab.cpp" break; - case 557: /* struct_declarator: IDENTIFIER */ -#line 3702 "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 11160 "MachineIndependent/glslang_tab.cpp" +#line 11264 "MachineIndependent/glslang_tab.cpp" break; - case 558: /* struct_declarator: IDENTIFIER array_specifier */ -#line 3707 "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); @@ -11169,168 +11273,168 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 11173 "MachineIndependent/glslang_tab.cpp" +#line 11277 "MachineIndependent/glslang_tab.cpp" break; - case 559: /* initializer: assignment_expression */ -#line 3718 "MachineIndependent/glslang.y" + case 565: /* initializer: assignment_expression */ +#line 3753 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 11181 "MachineIndependent/glslang_tab.cpp" +#line 11285 "MachineIndependent/glslang_tab.cpp" break; - case 560: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ -#line 3721 "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 11192 "MachineIndependent/glslang_tab.cpp" +#line 11296 "MachineIndependent/glslang_tab.cpp" break; - case 561: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ -#line 3727 "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 11203 "MachineIndependent/glslang_tab.cpp" +#line 11307 "MachineIndependent/glslang_tab.cpp" break; - case 562: /* initializer: LEFT_BRACE RIGHT_BRACE */ -#line 3733 "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 11214 "MachineIndependent/glslang_tab.cpp" +#line 11318 "MachineIndependent/glslang_tab.cpp" break; - case 563: /* initializer_list: initializer */ -#line 3742 "MachineIndependent/glslang.y" + 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 11222 "MachineIndependent/glslang_tab.cpp" +#line 11326 "MachineIndependent/glslang_tab.cpp" break; - case 564: /* initializer_list: initializer_list COMMA initializer */ -#line 3745 "MachineIndependent/glslang.y" + case 570: /* initializer_list: initializer_list COMMA initializer */ +#line 3780 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 11230 "MachineIndependent/glslang_tab.cpp" +#line 11334 "MachineIndependent/glslang_tab.cpp" break; - case 565: /* declaration_statement: declaration */ -#line 3751 "MachineIndependent/glslang.y" + case 571: /* declaration_statement: declaration */ +#line 3786 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11236 "MachineIndependent/glslang_tab.cpp" +#line 11340 "MachineIndependent/glslang_tab.cpp" break; - case 566: /* statement: compound_statement */ -#line 3755 "MachineIndependent/glslang.y" + case 572: /* statement: compound_statement */ +#line 3790 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11242 "MachineIndependent/glslang_tab.cpp" +#line 11346 "MachineIndependent/glslang_tab.cpp" break; - case 567: /* statement: simple_statement */ -#line 3756 "MachineIndependent/glslang.y" + case 573: /* statement: simple_statement */ +#line 3791 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11248 "MachineIndependent/glslang_tab.cpp" +#line 11352 "MachineIndependent/glslang_tab.cpp" break; - case 568: /* simple_statement: declaration_statement */ -#line 3762 "MachineIndependent/glslang.y" + case 574: /* simple_statement: declaration_statement */ +#line 3797 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11254 "MachineIndependent/glslang_tab.cpp" +#line 11358 "MachineIndependent/glslang_tab.cpp" break; - case 569: /* simple_statement: expression_statement */ -#line 3763 "MachineIndependent/glslang.y" + case 575: /* simple_statement: expression_statement */ +#line 3798 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11260 "MachineIndependent/glslang_tab.cpp" +#line 11364 "MachineIndependent/glslang_tab.cpp" break; - case 570: /* simple_statement: selection_statement */ -#line 3764 "MachineIndependent/glslang.y" + case 576: /* simple_statement: selection_statement */ +#line 3799 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11266 "MachineIndependent/glslang_tab.cpp" +#line 11370 "MachineIndependent/glslang_tab.cpp" break; - case 571: /* simple_statement: switch_statement */ -#line 3765 "MachineIndependent/glslang.y" + case 577: /* simple_statement: switch_statement */ +#line 3800 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11272 "MachineIndependent/glslang_tab.cpp" +#line 11376 "MachineIndependent/glslang_tab.cpp" break; - case 572: /* simple_statement: case_label */ -#line 3766 "MachineIndependent/glslang.y" + case 578: /* simple_statement: case_label */ +#line 3801 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11278 "MachineIndependent/glslang_tab.cpp" +#line 11382 "MachineIndependent/glslang_tab.cpp" break; - case 573: /* simple_statement: iteration_statement */ -#line 3767 "MachineIndependent/glslang.y" + case 579: /* simple_statement: iteration_statement */ +#line 3802 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11284 "MachineIndependent/glslang_tab.cpp" +#line 11388 "MachineIndependent/glslang_tab.cpp" break; - case 574: /* simple_statement: jump_statement */ -#line 3768 "MachineIndependent/glslang.y" + case 580: /* simple_statement: jump_statement */ +#line 3803 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11290 "MachineIndependent/glslang_tab.cpp" +#line 11394 "MachineIndependent/glslang_tab.cpp" break; - case 575: /* simple_statement: demote_statement */ -#line 3769 "MachineIndependent/glslang.y" + case 581: /* simple_statement: demote_statement */ +#line 3804 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11296 "MachineIndependent/glslang_tab.cpp" +#line 11400 "MachineIndependent/glslang_tab.cpp" break; - case 576: /* demote_statement: DEMOTE SEMICOLON */ -#line 3773 "MachineIndependent/glslang.y" + 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 11306 "MachineIndependent/glslang_tab.cpp" +#line 11410 "MachineIndependent/glslang_tab.cpp" break; - case 577: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ -#line 3781 "MachineIndependent/glslang.y" + case 583: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ +#line 3816 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11312 "MachineIndependent/glslang_tab.cpp" +#line 11416 "MachineIndependent/glslang_tab.cpp" break; - case 578: /* $@5: %empty */ -#line 3782 "MachineIndependent/glslang.y" + case 584: /* $@5: %empty */ +#line 3817 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 11321 "MachineIndependent/glslang_tab.cpp" +#line 11425 "MachineIndependent/glslang_tab.cpp" break; - case 579: /* $@6: %empty */ -#line 3786 "MachineIndependent/glslang.y" + case 585: /* $@6: %empty */ +#line 3821 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 11330 "MachineIndependent/glslang_tab.cpp" +#line 11434 "MachineIndependent/glslang_tab.cpp" break; - case 580: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ -#line 3790 "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); @@ -11338,69 +11442,69 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode); } -#line 11342 "MachineIndependent/glslang_tab.cpp" +#line 11446 "MachineIndependent/glslang_tab.cpp" break; - case 581: /* statement_no_new_scope: compound_statement_no_new_scope */ -#line 3800 "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 11348 "MachineIndependent/glslang_tab.cpp" +#line 11452 "MachineIndependent/glslang_tab.cpp" break; - case 582: /* statement_no_new_scope: simple_statement */ -#line 3801 "MachineIndependent/glslang.y" + case 588: /* statement_no_new_scope: simple_statement */ +#line 3836 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11354 "MachineIndependent/glslang_tab.cpp" +#line 11458 "MachineIndependent/glslang_tab.cpp" break; - case 583: /* $@7: %empty */ -#line 3805 "MachineIndependent/glslang.y" + case 589: /* $@7: %empty */ +#line 3840 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 11362 "MachineIndependent/glslang_tab.cpp" +#line 11466 "MachineIndependent/glslang_tab.cpp" break; - case 584: /* statement_scoped: $@7 compound_statement */ -#line 3808 "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 11371 "MachineIndependent/glslang_tab.cpp" +#line 11475 "MachineIndependent/glslang_tab.cpp" break; - case 585: /* $@8: %empty */ -#line 3812 "MachineIndependent/glslang.y" + case 591: /* $@8: %empty */ +#line 3847 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11381 "MachineIndependent/glslang_tab.cpp" +#line 11485 "MachineIndependent/glslang_tab.cpp" break; - case 586: /* statement_scoped: $@8 simple_statement */ -#line 3817 "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 11392 "MachineIndependent/glslang_tab.cpp" +#line 11496 "MachineIndependent/glslang_tab.cpp" break; - case 587: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ -#line 3826 "MachineIndependent/glslang.y" + case 593: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ +#line 3861 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11400 "MachineIndependent/glslang_tab.cpp" +#line 11504 "MachineIndependent/glslang_tab.cpp" break; - case 588: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ -#line 3829 "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); @@ -11408,11 +11512,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode); } -#line 11412 "MachineIndependent/glslang_tab.cpp" +#line 11516 "MachineIndependent/glslang_tab.cpp" break; - case 589: /* statement_list: statement */ -#line 3839 "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 || @@ -11421,11 +11525,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 11425 "MachineIndependent/glslang_tab.cpp" +#line 11529 "MachineIndependent/glslang_tab.cpp" break; - case 590: /* statement_list: statement_list statement */ -#line 3847 "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)) { @@ -11434,77 +11538,77 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 11438 "MachineIndependent/glslang_tab.cpp" +#line 11542 "MachineIndependent/glslang_tab.cpp" break; - case 591: /* expression_statement: SEMICOLON */ -#line 3858 "MachineIndependent/glslang.y" + case 597: /* expression_statement: SEMICOLON */ +#line 3893 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11444 "MachineIndependent/glslang_tab.cpp" +#line 11548 "MachineIndependent/glslang_tab.cpp" break; - case 592: /* expression_statement: expression SEMICOLON */ -#line 3859 "MachineIndependent/glslang.y" + case 598: /* expression_statement: expression SEMICOLON */ +#line 3894 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 11450 "MachineIndependent/glslang_tab.cpp" +#line 11554 "MachineIndependent/glslang_tab.cpp" break; - case 593: /* selection_statement: selection_statement_nonattributed */ -#line 3863 "MachineIndependent/glslang.y" + case 599: /* selection_statement: selection_statement_nonattributed */ +#line 3898 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11458 "MachineIndependent/glslang_tab.cpp" +#line 11562 "MachineIndependent/glslang_tab.cpp" break; - case 594: /* selection_statement: attribute selection_statement_nonattributed */ -#line 3866 "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 11468 "MachineIndependent/glslang_tab.cpp" +#line 11572 "MachineIndependent/glslang_tab.cpp" break; - case 595: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ -#line 3873 "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 11477 "MachineIndependent/glslang_tab.cpp" +#line 11581 "MachineIndependent/glslang_tab.cpp" break; - case 596: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ -#line 3880 "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 11486 "MachineIndependent/glslang_tab.cpp" +#line 11590 "MachineIndependent/glslang_tab.cpp" break; - case 597: /* selection_rest_statement: statement_scoped */ -#line 3884 "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 11495 "MachineIndependent/glslang_tab.cpp" +#line 11599 "MachineIndependent/glslang_tab.cpp" break; - case 598: /* condition: expression */ -#line 3892 "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 11504 "MachineIndependent/glslang_tab.cpp" +#line 11608 "MachineIndependent/glslang_tab.cpp" break; - case 599: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 3896 "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)); @@ -11515,29 +11619,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermTypedNode) = 0; } -#line 11519 "MachineIndependent/glslang_tab.cpp" +#line 11623 "MachineIndependent/glslang_tab.cpp" break; - case 600: /* switch_statement: switch_statement_nonattributed */ -#line 3909 "MachineIndependent/glslang.y" + case 606: /* switch_statement: switch_statement_nonattributed */ +#line 3944 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11527 "MachineIndependent/glslang_tab.cpp" +#line 11631 "MachineIndependent/glslang_tab.cpp" break; - case 601: /* switch_statement: attribute switch_statement_nonattributed */ -#line 3912 "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 11537 "MachineIndependent/glslang_tab.cpp" +#line 11641 "MachineIndependent/glslang_tab.cpp" break; - case 602: /* $@9: %empty */ -#line 3919 "MachineIndependent/glslang.y" + case 608: /* $@9: %empty */ +#line 3954 "MachineIndependent/glslang.y" { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -11546,11 +11650,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 11550 "MachineIndependent/glslang_tab.cpp" +#line 11654 "MachineIndependent/glslang_tab.cpp" break; - case 603: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ -#line 3927 "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(); @@ -11560,27 +11664,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11564 "MachineIndependent/glslang_tab.cpp" +#line 11668 "MachineIndependent/glslang_tab.cpp" break; - case 604: /* switch_statement_list: %empty */ -#line 3939 "MachineIndependent/glslang.y" + case 610: /* switch_statement_list: %empty */ +#line 3974 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11572 "MachineIndependent/glslang_tab.cpp" +#line 11676 "MachineIndependent/glslang_tab.cpp" break; - case 605: /* switch_statement_list: statement_list */ -#line 3942 "MachineIndependent/glslang.y" + case 611: /* switch_statement_list: statement_list */ +#line 3977 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11580 "MachineIndependent/glslang_tab.cpp" +#line 11684 "MachineIndependent/glslang_tab.cpp" break; - case 606: /* case_label: CASE expression COLON */ -#line 3948 "MachineIndependent/glslang.y" + case 612: /* case_label: CASE expression COLON */ +#line 3983 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -11593,11 +11697,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 11597 "MachineIndependent/glslang_tab.cpp" +#line 11701 "MachineIndependent/glslang_tab.cpp" break; - case 607: /* case_label: DEFAULT COLON */ -#line 3960 "MachineIndependent/glslang.y" + case 613: /* case_label: DEFAULT COLON */ +#line 3995 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -11607,30 +11711,30 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 11611 "MachineIndependent/glslang_tab.cpp" +#line 11715 "MachineIndependent/glslang_tab.cpp" break; - case 608: /* iteration_statement: iteration_statement_nonattributed */ -#line 3972 "MachineIndependent/glslang.y" + case 614: /* iteration_statement: iteration_statement_nonattributed */ +#line 4007 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11619 "MachineIndependent/glslang_tab.cpp" +#line 11723 "MachineIndependent/glslang_tab.cpp" break; - case 609: /* iteration_statement: attribute iteration_statement_nonattributed */ -#line 3975 "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 11630 "MachineIndependent/glslang_tab.cpp" +#line 11734 "MachineIndependent/glslang_tab.cpp" break; - case 610: /* $@10: %empty */ -#line 3983 "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", ""); @@ -11639,11 +11743,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11643 "MachineIndependent/glslang_tab.cpp" +#line 11747 "MachineIndependent/glslang_tab.cpp" break; - case 611: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ -#line 3991 "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); @@ -11651,22 +11755,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11655 "MachineIndependent/glslang_tab.cpp" +#line 11759 "MachineIndependent/glslang_tab.cpp" break; - case 612: /* $@11: %empty */ -#line 3998 "MachineIndependent/glslang.y" + case 618: /* $@11: %empty */ +#line 4033 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11666 "MachineIndependent/glslang_tab.cpp" +#line 11770 "MachineIndependent/glslang_tab.cpp" break; - case 613: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ -#line 4004 "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", ""); @@ -11679,22 +11783,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11683 "MachineIndependent/glslang_tab.cpp" +#line 11787 "MachineIndependent/glslang_tab.cpp" break; - case 614: /* $@12: %empty */ -#line 4016 "MachineIndependent/glslang.y" + case 620: /* $@12: %empty */ +#line 4051 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11694 "MachineIndependent/glslang_tab.cpp" +#line 11798 "MachineIndependent/glslang_tab.cpp" break; - case 615: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ -#line 4022 "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); @@ -11707,81 +11811,81 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11711 "MachineIndependent/glslang_tab.cpp" +#line 11815 "MachineIndependent/glslang_tab.cpp" break; - case 616: /* for_init_statement: expression_statement */ -#line 4037 "MachineIndependent/glslang.y" + case 622: /* for_init_statement: expression_statement */ +#line 4072 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11719 "MachineIndependent/glslang_tab.cpp" +#line 11823 "MachineIndependent/glslang_tab.cpp" break; - case 617: /* for_init_statement: declaration_statement */ -#line 4040 "MachineIndependent/glslang.y" + case 623: /* for_init_statement: declaration_statement */ +#line 4075 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11727 "MachineIndependent/glslang_tab.cpp" +#line 11831 "MachineIndependent/glslang_tab.cpp" break; - case 618: /* conditionopt: condition */ -#line 4046 "MachineIndependent/glslang.y" + case 624: /* conditionopt: condition */ +#line 4081 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 11735 "MachineIndependent/glslang_tab.cpp" +#line 11839 "MachineIndependent/glslang_tab.cpp" break; - case 619: /* conditionopt: %empty */ -#line 4049 "MachineIndependent/glslang.y" + case 625: /* conditionopt: %empty */ +#line 4084 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = 0; } -#line 11743 "MachineIndependent/glslang_tab.cpp" +#line 11847 "MachineIndependent/glslang_tab.cpp" break; - case 620: /* for_rest_statement: conditionopt SEMICOLON */ -#line 4055 "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 11752 "MachineIndependent/glslang_tab.cpp" +#line 11856 "MachineIndependent/glslang_tab.cpp" break; - case 621: /* for_rest_statement: conditionopt SEMICOLON expression */ -#line 4059 "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 11761 "MachineIndependent/glslang_tab.cpp" +#line 11865 "MachineIndependent/glslang_tab.cpp" break; - case 622: /* jump_statement: CONTINUE SEMICOLON */ -#line 4066 "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 11771 "MachineIndependent/glslang_tab.cpp" +#line 11875 "MachineIndependent/glslang_tab.cpp" break; - case 623: /* jump_statement: BREAK SEMICOLON */ -#line 4071 "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 11781 "MachineIndependent/glslang_tab.cpp" +#line 11885 "MachineIndependent/glslang_tab.cpp" break; - case 624: /* jump_statement: RETURN SEMICOLON */ -#line 4076 "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) @@ -11789,101 +11893,101 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 11793 "MachineIndependent/glslang_tab.cpp" +#line 11897 "MachineIndependent/glslang_tab.cpp" break; - case 625: /* jump_statement: RETURN expression SEMICOLON */ -#line 4083 "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 11801 "MachineIndependent/glslang_tab.cpp" +#line 11905 "MachineIndependent/glslang_tab.cpp" break; - case 626: /* jump_statement: DISCARD SEMICOLON */ -#line 4086 "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 11810 "MachineIndependent/glslang_tab.cpp" +#line 11914 "MachineIndependent/glslang_tab.cpp" break; - case 627: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ -#line 4090 "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 11819 "MachineIndependent/glslang_tab.cpp" +#line 11923 "MachineIndependent/glslang_tab.cpp" break; - case 628: /* jump_statement: TERMINATE_RAY SEMICOLON */ -#line 4094 "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 11828 "MachineIndependent/glslang_tab.cpp" +#line 11932 "MachineIndependent/glslang_tab.cpp" break; - case 629: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ -#line 4098 "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 11837 "MachineIndependent/glslang_tab.cpp" +#line 11941 "MachineIndependent/glslang_tab.cpp" break; - case 630: /* translation_unit: external_declaration */ -#line 4107 "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 11846 "MachineIndependent/glslang_tab.cpp" +#line 11950 "MachineIndependent/glslang_tab.cpp" break; - case 631: /* translation_unit: translation_unit external_declaration */ -#line 4111 "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 11857 "MachineIndependent/glslang_tab.cpp" +#line 11961 "MachineIndependent/glslang_tab.cpp" break; - case 632: /* external_declaration: function_definition */ -#line 4120 "MachineIndependent/glslang.y" + case 638: /* external_declaration: function_definition */ +#line 4155 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11865 "MachineIndependent/glslang_tab.cpp" +#line 11969 "MachineIndependent/glslang_tab.cpp" break; - case 633: /* external_declaration: declaration */ -#line 4123 "MachineIndependent/glslang.y" + case 639: /* external_declaration: declaration */ +#line 4158 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11873 "MachineIndependent/glslang_tab.cpp" +#line 11977 "MachineIndependent/glslang_tab.cpp" break; - case 634: /* external_declaration: SEMICOLON */ -#line 4126 "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 11883 "MachineIndependent/glslang_tab.cpp" +#line 11987 "MachineIndependent/glslang_tab.cpp" break; - case 635: /* $@13: %empty */ -#line 4134 "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); @@ -11896,11 +12000,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; } } -#line 11900 "MachineIndependent/glslang_tab.cpp" +#line 12004 "MachineIndependent/glslang_tab.cpp" break; - case 636: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ -#line 4146 "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) @@ -11928,228 +12032,228 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; } } -#line 11932 "MachineIndependent/glslang_tab.cpp" +#line 12036 "MachineIndependent/glslang_tab.cpp" break; - case 637: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ -#line 4176 "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 11940 "MachineIndependent/glslang_tab.cpp" +#line 12044 "MachineIndependent/glslang_tab.cpp" break; - case 638: /* attribute_list: single_attribute */ -#line 4181 "MachineIndependent/glslang.y" + case 644: /* attribute_list: single_attribute */ +#line 4216 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 11948 "MachineIndependent/glslang_tab.cpp" +#line 12052 "MachineIndependent/glslang_tab.cpp" break; - case 639: /* attribute_list: attribute_list COMMA single_attribute */ -#line 4184 "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 11956 "MachineIndependent/glslang_tab.cpp" +#line 12060 "MachineIndependent/glslang_tab.cpp" break; - case 640: /* single_attribute: IDENTIFIER */ -#line 4189 "MachineIndependent/glslang.y" + case 646: /* single_attribute: IDENTIFIER */ +#line 4224 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 11964 "MachineIndependent/glslang_tab.cpp" +#line 12068 "MachineIndependent/glslang_tab.cpp" break; - case 641: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ -#line 4192 "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 11972 "MachineIndependent/glslang_tab.cpp" +#line 12076 "MachineIndependent/glslang_tab.cpp" break; - case 642: /* spirv_requirements_list: spirv_requirements_parameter */ -#line 4197 "MachineIndependent/glslang.y" + case 648: /* spirv_requirements_list: spirv_requirements_parameter */ +#line 4232 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq); } -#line 11980 "MachineIndependent/glslang_tab.cpp" +#line 12084 "MachineIndependent/glslang_tab.cpp" break; - case 643: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ -#line 4200 "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 11988 "MachineIndependent/glslang_tab.cpp" +#line 12092 "MachineIndependent/glslang_tab.cpp" break; - case 644: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ -#line 4205 "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 11996 "MachineIndependent/glslang_tab.cpp" +#line 12100 "MachineIndependent/glslang_tab.cpp" break; - case 645: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ -#line 4208 "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 12004 "MachineIndependent/glslang_tab.cpp" +#line 12108 "MachineIndependent/glslang_tab.cpp" break; - case 646: /* spirv_extension_list: STRING_LITERAL */ -#line 4213 "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 12012 "MachineIndependent/glslang_tab.cpp" +#line 12116 "MachineIndependent/glslang_tab.cpp" break; - case 647: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ -#line 4216 "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 12020 "MachineIndependent/glslang_tab.cpp" +#line 12124 "MachineIndependent/glslang_tab.cpp" break; - case 648: /* spirv_capability_list: INTCONSTANT */ -#line 4221 "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 12028 "MachineIndependent/glslang_tab.cpp" +#line 12132 "MachineIndependent/glslang_tab.cpp" break; - case 649: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ -#line 4224 "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 12036 "MachineIndependent/glslang_tab.cpp" +#line 12140 "MachineIndependent/glslang_tab.cpp" break; - case 650: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4229 "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 12045 "MachineIndependent/glslang_tab.cpp" +#line 12149 "MachineIndependent/glslang_tab.cpp" break; - case 651: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4233 "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 12055 "MachineIndependent/glslang_tab.cpp" +#line 12159 "MachineIndependent/glslang_tab.cpp" break; - case 652: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4238 "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 12064 "MachineIndependent/glslang_tab.cpp" +#line 12168 "MachineIndependent/glslang_tab.cpp" break; - case 653: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4242 "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 12074 "MachineIndependent/glslang_tab.cpp" +#line 12178 "MachineIndependent/glslang_tab.cpp" break; - case 654: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ -#line 4247 "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 12083 "MachineIndependent/glslang_tab.cpp" +#line 12187 "MachineIndependent/glslang_tab.cpp" break; - case 655: /* 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 4251 "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 12093 "MachineIndependent/glslang_tab.cpp" +#line 12197 "MachineIndependent/glslang_tab.cpp" break; - case 656: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ -#line 4258 "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 12101 "MachineIndependent/glslang_tab.cpp" +#line 12205 "MachineIndependent/glslang_tab.cpp" break; - case 657: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ -#line 4261 "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 12109 "MachineIndependent/glslang_tab.cpp" +#line 12213 "MachineIndependent/glslang_tab.cpp" break; - case 658: /* spirv_execution_mode_parameter: FLOATCONSTANT */ -#line 4266 "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 12117 "MachineIndependent/glslang_tab.cpp" +#line 12221 "MachineIndependent/glslang_tab.cpp" break; - case 659: /* spirv_execution_mode_parameter: INTCONSTANT */ -#line 4269 "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 12125 "MachineIndependent/glslang_tab.cpp" +#line 12229 "MachineIndependent/glslang_tab.cpp" break; - case 660: /* spirv_execution_mode_parameter: UINTCONSTANT */ -#line 4272 "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 12133 "MachineIndependent/glslang_tab.cpp" +#line 12237 "MachineIndependent/glslang_tab.cpp" break; - case 661: /* spirv_execution_mode_parameter: BOOLCONSTANT */ -#line 4275 "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 12141 "MachineIndependent/glslang_tab.cpp" +#line 12245 "MachineIndependent/glslang_tab.cpp" break; - case 662: /* spirv_execution_mode_parameter: STRING_LITERAL */ -#line 4278 "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 12149 "MachineIndependent/glslang_tab.cpp" +#line 12253 "MachineIndependent/glslang_tab.cpp" break; - case 663: /* spirv_execution_mode_id_parameter_list: constant_expression */ -#line 4283 "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 && @@ -12159,11 +12263,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 12163 "MachineIndependent/glslang_tab.cpp" +#line 12267 "MachineIndependent/glslang_tab.cpp" break; - case 664: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ -#line 4292 "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 && @@ -12173,351 +12277,351 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 12177 "MachineIndependent/glslang_tab.cpp" +#line 12281 "MachineIndependent/glslang_tab.cpp" break; - case 665: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4303 "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 12187 "MachineIndependent/glslang_tab.cpp" +#line 12291 "MachineIndependent/glslang_tab.cpp" break; - case 666: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4308 "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 12198 "MachineIndependent/glslang_tab.cpp" +#line 12302 "MachineIndependent/glslang_tab.cpp" break; - case 667: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4316 "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 12207 "MachineIndependent/glslang_tab.cpp" +#line 12311 "MachineIndependent/glslang_tab.cpp" break; - case 668: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4320 "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 12217 "MachineIndependent/glslang_tab.cpp" +#line 12321 "MachineIndependent/glslang_tab.cpp" break; - case 669: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4325 "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 12226 "MachineIndependent/glslang_tab.cpp" +#line 12330 "MachineIndependent/glslang_tab.cpp" break; - case 670: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4329 "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 12236 "MachineIndependent/glslang_tab.cpp" +#line 12340 "MachineIndependent/glslang_tab.cpp" break; - case 671: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4334 "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 12245 "MachineIndependent/glslang_tab.cpp" +#line 12349 "MachineIndependent/glslang_tab.cpp" break; - case 672: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4338 "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 12255 "MachineIndependent/glslang_tab.cpp" +#line 12359 "MachineIndependent/glslang_tab.cpp" break; - case 673: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4343 "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 12264 "MachineIndependent/glslang_tab.cpp" +#line 12368 "MachineIndependent/glslang_tab.cpp" break; - case 674: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4347 "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 12274 "MachineIndependent/glslang_tab.cpp" +#line 12378 "MachineIndependent/glslang_tab.cpp" break; - case 675: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ -#line 4354 "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 12282 "MachineIndependent/glslang_tab.cpp" +#line 12386 "MachineIndependent/glslang_tab.cpp" break; - case 676: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ -#line 4357 "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 12290 "MachineIndependent/glslang_tab.cpp" +#line 12394 "MachineIndependent/glslang_tab.cpp" break; - case 677: /* spirv_decorate_parameter: FLOATCONSTANT */ -#line 4362 "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 12298 "MachineIndependent/glslang_tab.cpp" +#line 12402 "MachineIndependent/glslang_tab.cpp" break; - case 678: /* spirv_decorate_parameter: INTCONSTANT */ -#line 4365 "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 12306 "MachineIndependent/glslang_tab.cpp" +#line 12410 "MachineIndependent/glslang_tab.cpp" break; - case 679: /* spirv_decorate_parameter: UINTCONSTANT */ -#line 4368 "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 12314 "MachineIndependent/glslang_tab.cpp" +#line 12418 "MachineIndependent/glslang_tab.cpp" break; - case 680: /* spirv_decorate_parameter: BOOLCONSTANT */ -#line 4371 "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 12322 "MachineIndependent/glslang_tab.cpp" +#line 12426 "MachineIndependent/glslang_tab.cpp" break; - case 681: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter */ -#line 4376 "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 12330 "MachineIndependent/glslang_tab.cpp" +#line 12434 "MachineIndependent/glslang_tab.cpp" break; - case 682: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter */ -#line 4379 "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 12338 "MachineIndependent/glslang_tab.cpp" +#line 12442 "MachineIndependent/glslang_tab.cpp" break; - case 683: /* spirv_decorate_id_parameter: variable_identifier */ -#line 4384 "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 12349 "MachineIndependent/glslang_tab.cpp" +#line 12453 "MachineIndependent/glslang_tab.cpp" break; - case 684: /* spirv_decorate_id_parameter: FLOATCONSTANT */ -#line 4390 "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 12357 "MachineIndependent/glslang_tab.cpp" +#line 12461 "MachineIndependent/glslang_tab.cpp" break; - case 685: /* spirv_decorate_id_parameter: INTCONSTANT */ -#line 4393 "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 12365 "MachineIndependent/glslang_tab.cpp" +#line 12469 "MachineIndependent/glslang_tab.cpp" break; - case 686: /* spirv_decorate_id_parameter: UINTCONSTANT */ -#line 4396 "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 12373 "MachineIndependent/glslang_tab.cpp" +#line 12477 "MachineIndependent/glslang_tab.cpp" break; - case 687: /* spirv_decorate_id_parameter: BOOLCONSTANT */ -#line 4399 "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 12381 "MachineIndependent/glslang_tab.cpp" +#line 12485 "MachineIndependent/glslang_tab.cpp" break; - case 688: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ -#line 4404 "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 12390 "MachineIndependent/glslang_tab.cpp" +#line 12494 "MachineIndependent/glslang_tab.cpp" break; - case 689: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ -#line 4408 "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 12398 "MachineIndependent/glslang_tab.cpp" +#line 12502 "MachineIndependent/glslang_tab.cpp" break; - case 690: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4413 "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 12407 "MachineIndependent/glslang_tab.cpp" +#line 12511 "MachineIndependent/glslang_tab.cpp" break; - case 691: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4417 "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 12417 "MachineIndependent/glslang_tab.cpp" +#line 12521 "MachineIndependent/glslang_tab.cpp" break; - case 692: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4422 "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 12426 "MachineIndependent/glslang_tab.cpp" +#line 12530 "MachineIndependent/glslang_tab.cpp" break; - case 693: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4426 "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 12436 "MachineIndependent/glslang_tab.cpp" +#line 12540 "MachineIndependent/glslang_tab.cpp" break; - case 694: /* spirv_type_parameter_list: spirv_type_parameter */ -#line 4433 "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 12444 "MachineIndependent/glslang_tab.cpp" +#line 12548 "MachineIndependent/glslang_tab.cpp" break; - case 695: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ -#line 4436 "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 12452 "MachineIndependent/glslang_tab.cpp" +#line 12556 "MachineIndependent/glslang_tab.cpp" break; - case 696: /* spirv_type_parameter: constant_expression */ -#line 4441 "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 12460 "MachineIndependent/glslang_tab.cpp" +#line 12564 "MachineIndependent/glslang_tab.cpp" break; - case 697: /* spirv_type_parameter: type_specifier_nonarray */ -#line 4444 "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 12468 "MachineIndependent/glslang_tab.cpp" +#line 12572 "MachineIndependent/glslang_tab.cpp" break; - case 698: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4449 "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 12476 "MachineIndependent/glslang_tab.cpp" +#line 12580 "MachineIndependent/glslang_tab.cpp" break; - case 699: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4452 "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 12485 "MachineIndependent/glslang_tab.cpp" +#line 12589 "MachineIndependent/glslang_tab.cpp" break; - case 700: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ -#line 4458 "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 12493 "MachineIndependent/glslang_tab.cpp" +#line 12597 "MachineIndependent/glslang_tab.cpp" break; - case 701: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ -#line 4461 "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 12501 "MachineIndependent/glslang_tab.cpp" +#line 12605 "MachineIndependent/glslang_tab.cpp" break; - case 702: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ -#line 4466 "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 12509 "MachineIndependent/glslang_tab.cpp" +#line 12613 "MachineIndependent/glslang_tab.cpp" break; - case 703: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ -#line 4469 "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 12517 "MachineIndependent/glslang_tab.cpp" +#line 12621 "MachineIndependent/glslang_tab.cpp" break; -#line 12521 "MachineIndependent/glslang_tab.cpp" +#line 12625 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -12741,5 +12845,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); return yyresult; } -#line 4473 "MachineIndependent/glslang.y" +#line 4508 "MachineIndependent/glslang.y" diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h index 7fcfe3e..2ff6f78 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp.h @@ -114,411 +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 */ - HITOBJECTNV = 422, /* HITOBJECTNV */ - HITOBJECTATTRNV = 423, /* HITOBJECTATTRNV */ - TENSORLAYOUTNV = 424, /* TENSORLAYOUTNV */ - TENSORVIEWNV = 425, /* TENSORVIEWNV */ - SAMPLERCUBEARRAY = 426, /* SAMPLERCUBEARRAY */ - SAMPLERCUBEARRAYSHADOW = 427, /* SAMPLERCUBEARRAYSHADOW */ - ISAMPLERCUBEARRAY = 428, /* ISAMPLERCUBEARRAY */ - USAMPLERCUBEARRAY = 429, /* USAMPLERCUBEARRAY */ - SAMPLER1D = 430, /* SAMPLER1D */ - SAMPLER1DARRAY = 431, /* SAMPLER1DARRAY */ - SAMPLER1DARRAYSHADOW = 432, /* SAMPLER1DARRAYSHADOW */ - ISAMPLER1D = 433, /* ISAMPLER1D */ - SAMPLER1DSHADOW = 434, /* SAMPLER1DSHADOW */ - SAMPLER2DRECT = 435, /* SAMPLER2DRECT */ - SAMPLER2DRECTSHADOW = 436, /* SAMPLER2DRECTSHADOW */ - ISAMPLER2DRECT = 437, /* ISAMPLER2DRECT */ - USAMPLER2DRECT = 438, /* USAMPLER2DRECT */ - SAMPLERBUFFER = 439, /* SAMPLERBUFFER */ - ISAMPLERBUFFER = 440, /* ISAMPLERBUFFER */ - USAMPLERBUFFER = 441, /* USAMPLERBUFFER */ - SAMPLER2DMS = 442, /* SAMPLER2DMS */ - ISAMPLER2DMS = 443, /* ISAMPLER2DMS */ - USAMPLER2DMS = 444, /* USAMPLER2DMS */ - SAMPLER2DMSARRAY = 445, /* SAMPLER2DMSARRAY */ - ISAMPLER2DMSARRAY = 446, /* ISAMPLER2DMSARRAY */ - USAMPLER2DMSARRAY = 447, /* USAMPLER2DMSARRAY */ - SAMPLEREXTERNALOES = 448, /* SAMPLEREXTERNALOES */ - SAMPLEREXTERNAL2DY2YEXT = 449, /* SAMPLEREXTERNAL2DY2YEXT */ - ISAMPLER1DARRAY = 450, /* ISAMPLER1DARRAY */ - USAMPLER1D = 451, /* USAMPLER1D */ - USAMPLER1DARRAY = 452, /* USAMPLER1DARRAY */ - F16SAMPLER1D = 453, /* F16SAMPLER1D */ - F16SAMPLER2D = 454, /* F16SAMPLER2D */ - F16SAMPLER3D = 455, /* F16SAMPLER3D */ - F16SAMPLER2DRECT = 456, /* F16SAMPLER2DRECT */ - F16SAMPLERCUBE = 457, /* F16SAMPLERCUBE */ - F16SAMPLER1DARRAY = 458, /* F16SAMPLER1DARRAY */ - F16SAMPLER2DARRAY = 459, /* F16SAMPLER2DARRAY */ - F16SAMPLERCUBEARRAY = 460, /* F16SAMPLERCUBEARRAY */ - F16SAMPLERBUFFER = 461, /* F16SAMPLERBUFFER */ - F16SAMPLER2DMS = 462, /* F16SAMPLER2DMS */ - F16SAMPLER2DMSARRAY = 463, /* F16SAMPLER2DMSARRAY */ - F16SAMPLER1DSHADOW = 464, /* F16SAMPLER1DSHADOW */ - F16SAMPLER2DSHADOW = 465, /* F16SAMPLER2DSHADOW */ - F16SAMPLER1DARRAYSHADOW = 466, /* F16SAMPLER1DARRAYSHADOW */ - F16SAMPLER2DARRAYSHADOW = 467, /* F16SAMPLER2DARRAYSHADOW */ - F16SAMPLER2DRECTSHADOW = 468, /* F16SAMPLER2DRECTSHADOW */ - F16SAMPLERCUBESHADOW = 469, /* F16SAMPLERCUBESHADOW */ - F16SAMPLERCUBEARRAYSHADOW = 470, /* F16SAMPLERCUBEARRAYSHADOW */ - IMAGE1D = 471, /* IMAGE1D */ - IIMAGE1D = 472, /* IIMAGE1D */ - UIMAGE1D = 473, /* UIMAGE1D */ - IMAGE2D = 474, /* IMAGE2D */ - IIMAGE2D = 475, /* IIMAGE2D */ - UIMAGE2D = 476, /* UIMAGE2D */ - IMAGE3D = 477, /* IMAGE3D */ - IIMAGE3D = 478, /* IIMAGE3D */ - UIMAGE3D = 479, /* UIMAGE3D */ - IMAGE2DRECT = 480, /* IMAGE2DRECT */ - IIMAGE2DRECT = 481, /* IIMAGE2DRECT */ - UIMAGE2DRECT = 482, /* UIMAGE2DRECT */ - IMAGECUBE = 483, /* IMAGECUBE */ - IIMAGECUBE = 484, /* IIMAGECUBE */ - UIMAGECUBE = 485, /* UIMAGECUBE */ - IMAGEBUFFER = 486, /* IMAGEBUFFER */ - IIMAGEBUFFER = 487, /* IIMAGEBUFFER */ - UIMAGEBUFFER = 488, /* UIMAGEBUFFER */ - IMAGE1DARRAY = 489, /* IMAGE1DARRAY */ - IIMAGE1DARRAY = 490, /* IIMAGE1DARRAY */ - UIMAGE1DARRAY = 491, /* UIMAGE1DARRAY */ - IMAGE2DARRAY = 492, /* IMAGE2DARRAY */ - IIMAGE2DARRAY = 493, /* IIMAGE2DARRAY */ - UIMAGE2DARRAY = 494, /* UIMAGE2DARRAY */ - IMAGECUBEARRAY = 495, /* IMAGECUBEARRAY */ - IIMAGECUBEARRAY = 496, /* IIMAGECUBEARRAY */ - UIMAGECUBEARRAY = 497, /* UIMAGECUBEARRAY */ - IMAGE2DMS = 498, /* IMAGE2DMS */ - IIMAGE2DMS = 499, /* IIMAGE2DMS */ - UIMAGE2DMS = 500, /* UIMAGE2DMS */ - IMAGE2DMSARRAY = 501, /* IMAGE2DMSARRAY */ - IIMAGE2DMSARRAY = 502, /* IIMAGE2DMSARRAY */ - UIMAGE2DMSARRAY = 503, /* UIMAGE2DMSARRAY */ - F16IMAGE1D = 504, /* F16IMAGE1D */ - F16IMAGE2D = 505, /* F16IMAGE2D */ - F16IMAGE3D = 506, /* F16IMAGE3D */ - F16IMAGE2DRECT = 507, /* F16IMAGE2DRECT */ - F16IMAGECUBE = 508, /* F16IMAGECUBE */ - F16IMAGE1DARRAY = 509, /* F16IMAGE1DARRAY */ - F16IMAGE2DARRAY = 510, /* F16IMAGE2DARRAY */ - F16IMAGECUBEARRAY = 511, /* F16IMAGECUBEARRAY */ - F16IMAGEBUFFER = 512, /* F16IMAGEBUFFER */ - F16IMAGE2DMS = 513, /* F16IMAGE2DMS */ - F16IMAGE2DMSARRAY = 514, /* F16IMAGE2DMSARRAY */ - I64IMAGE1D = 515, /* I64IMAGE1D */ - U64IMAGE1D = 516, /* U64IMAGE1D */ - I64IMAGE2D = 517, /* I64IMAGE2D */ - U64IMAGE2D = 518, /* U64IMAGE2D */ - I64IMAGE3D = 519, /* I64IMAGE3D */ - U64IMAGE3D = 520, /* U64IMAGE3D */ - I64IMAGE2DRECT = 521, /* I64IMAGE2DRECT */ - U64IMAGE2DRECT = 522, /* U64IMAGE2DRECT */ - I64IMAGECUBE = 523, /* I64IMAGECUBE */ - U64IMAGECUBE = 524, /* U64IMAGECUBE */ - I64IMAGEBUFFER = 525, /* I64IMAGEBUFFER */ - U64IMAGEBUFFER = 526, /* U64IMAGEBUFFER */ - I64IMAGE1DARRAY = 527, /* I64IMAGE1DARRAY */ - U64IMAGE1DARRAY = 528, /* U64IMAGE1DARRAY */ - I64IMAGE2DARRAY = 529, /* I64IMAGE2DARRAY */ - U64IMAGE2DARRAY = 530, /* U64IMAGE2DARRAY */ - I64IMAGECUBEARRAY = 531, /* I64IMAGECUBEARRAY */ - U64IMAGECUBEARRAY = 532, /* U64IMAGECUBEARRAY */ - I64IMAGE2DMS = 533, /* I64IMAGE2DMS */ - U64IMAGE2DMS = 534, /* U64IMAGE2DMS */ - I64IMAGE2DMSARRAY = 535, /* I64IMAGE2DMSARRAY */ - U64IMAGE2DMSARRAY = 536, /* U64IMAGE2DMSARRAY */ - TEXTURECUBEARRAY = 537, /* TEXTURECUBEARRAY */ - ITEXTURECUBEARRAY = 538, /* ITEXTURECUBEARRAY */ - UTEXTURECUBEARRAY = 539, /* UTEXTURECUBEARRAY */ - TEXTURE1D = 540, /* TEXTURE1D */ - ITEXTURE1D = 541, /* ITEXTURE1D */ - UTEXTURE1D = 542, /* UTEXTURE1D */ - TEXTURE1DARRAY = 543, /* TEXTURE1DARRAY */ - ITEXTURE1DARRAY = 544, /* ITEXTURE1DARRAY */ - UTEXTURE1DARRAY = 545, /* UTEXTURE1DARRAY */ - TEXTURE2DRECT = 546, /* TEXTURE2DRECT */ - ITEXTURE2DRECT = 547, /* ITEXTURE2DRECT */ - UTEXTURE2DRECT = 548, /* UTEXTURE2DRECT */ - TEXTUREBUFFER = 549, /* TEXTUREBUFFER */ - ITEXTUREBUFFER = 550, /* ITEXTUREBUFFER */ - UTEXTUREBUFFER = 551, /* UTEXTUREBUFFER */ - TEXTURE2DMS = 552, /* TEXTURE2DMS */ - ITEXTURE2DMS = 553, /* ITEXTURE2DMS */ - UTEXTURE2DMS = 554, /* UTEXTURE2DMS */ - TEXTURE2DMSARRAY = 555, /* TEXTURE2DMSARRAY */ - ITEXTURE2DMSARRAY = 556, /* ITEXTURE2DMSARRAY */ - UTEXTURE2DMSARRAY = 557, /* UTEXTURE2DMSARRAY */ - F16TEXTURE1D = 558, /* F16TEXTURE1D */ - F16TEXTURE2D = 559, /* F16TEXTURE2D */ - F16TEXTURE3D = 560, /* F16TEXTURE3D */ - F16TEXTURE2DRECT = 561, /* F16TEXTURE2DRECT */ - F16TEXTURECUBE = 562, /* F16TEXTURECUBE */ - F16TEXTURE1DARRAY = 563, /* F16TEXTURE1DARRAY */ - F16TEXTURE2DARRAY = 564, /* F16TEXTURE2DARRAY */ - F16TEXTURECUBEARRAY = 565, /* F16TEXTURECUBEARRAY */ - F16TEXTUREBUFFER = 566, /* F16TEXTUREBUFFER */ - F16TEXTURE2DMS = 567, /* F16TEXTURE2DMS */ - F16TEXTURE2DMSARRAY = 568, /* F16TEXTURE2DMSARRAY */ - SUBPASSINPUT = 569, /* SUBPASSINPUT */ - SUBPASSINPUTMS = 570, /* SUBPASSINPUTMS */ - ISUBPASSINPUT = 571, /* ISUBPASSINPUT */ - ISUBPASSINPUTMS = 572, /* ISUBPASSINPUTMS */ - USUBPASSINPUT = 573, /* USUBPASSINPUT */ - USUBPASSINPUTMS = 574, /* USUBPASSINPUTMS */ - F16SUBPASSINPUT = 575, /* F16SUBPASSINPUT */ - F16SUBPASSINPUTMS = 576, /* F16SUBPASSINPUTMS */ - SPIRV_INSTRUCTION = 577, /* SPIRV_INSTRUCTION */ - SPIRV_EXECUTION_MODE = 578, /* SPIRV_EXECUTION_MODE */ - SPIRV_EXECUTION_MODE_ID = 579, /* SPIRV_EXECUTION_MODE_ID */ - SPIRV_DECORATE = 580, /* SPIRV_DECORATE */ - SPIRV_DECORATE_ID = 581, /* SPIRV_DECORATE_ID */ - SPIRV_DECORATE_STRING = 582, /* SPIRV_DECORATE_STRING */ - SPIRV_TYPE = 583, /* SPIRV_TYPE */ - SPIRV_STORAGE_CLASS = 584, /* SPIRV_STORAGE_CLASS */ - SPIRV_BY_REFERENCE = 585, /* SPIRV_BY_REFERENCE */ - SPIRV_LITERAL = 586, /* SPIRV_LITERAL */ - ATTACHMENTEXT = 587, /* ATTACHMENTEXT */ - IATTACHMENTEXT = 588, /* IATTACHMENTEXT */ - UATTACHMENTEXT = 589, /* UATTACHMENTEXT */ - LEFT_OP = 590, /* LEFT_OP */ - RIGHT_OP = 591, /* RIGHT_OP */ - INC_OP = 592, /* INC_OP */ - DEC_OP = 593, /* DEC_OP */ - LE_OP = 594, /* LE_OP */ - GE_OP = 595, /* GE_OP */ - EQ_OP = 596, /* EQ_OP */ - NE_OP = 597, /* NE_OP */ - AND_OP = 598, /* AND_OP */ - OR_OP = 599, /* OR_OP */ - XOR_OP = 600, /* XOR_OP */ - MUL_ASSIGN = 601, /* MUL_ASSIGN */ - DIV_ASSIGN = 602, /* DIV_ASSIGN */ - ADD_ASSIGN = 603, /* ADD_ASSIGN */ - MOD_ASSIGN = 604, /* MOD_ASSIGN */ - LEFT_ASSIGN = 605, /* LEFT_ASSIGN */ - RIGHT_ASSIGN = 606, /* RIGHT_ASSIGN */ - AND_ASSIGN = 607, /* AND_ASSIGN */ - XOR_ASSIGN = 608, /* XOR_ASSIGN */ - OR_ASSIGN = 609, /* OR_ASSIGN */ - SUB_ASSIGN = 610, /* SUB_ASSIGN */ - STRING_LITERAL = 611, /* STRING_LITERAL */ - LEFT_PAREN = 612, /* LEFT_PAREN */ - RIGHT_PAREN = 613, /* RIGHT_PAREN */ - LEFT_BRACKET = 614, /* LEFT_BRACKET */ - RIGHT_BRACKET = 615, /* RIGHT_BRACKET */ - LEFT_BRACE = 616, /* LEFT_BRACE */ - RIGHT_BRACE = 617, /* RIGHT_BRACE */ - DOT = 618, /* DOT */ - COMMA = 619, /* COMMA */ - COLON = 620, /* COLON */ - EQUAL = 621, /* EQUAL */ - SEMICOLON = 622, /* SEMICOLON */ - BANG = 623, /* BANG */ - DASH = 624, /* DASH */ - TILDE = 625, /* TILDE */ - PLUS = 626, /* PLUS */ - STAR = 627, /* STAR */ - SLASH = 628, /* SLASH */ - PERCENT = 629, /* PERCENT */ - LEFT_ANGLE = 630, /* LEFT_ANGLE */ - RIGHT_ANGLE = 631, /* RIGHT_ANGLE */ - VERTICAL_BAR = 632, /* VERTICAL_BAR */ - CARET = 633, /* CARET */ - AMPERSAND = 634, /* AMPERSAND */ - QUESTION = 635, /* QUESTION */ - INVARIANT = 636, /* INVARIANT */ - HIGH_PRECISION = 637, /* HIGH_PRECISION */ - MEDIUM_PRECISION = 638, /* MEDIUM_PRECISION */ - LOW_PRECISION = 639, /* LOW_PRECISION */ - PRECISION = 640, /* PRECISION */ - PACKED = 641, /* PACKED */ - RESOURCE = 642, /* RESOURCE */ - SUPERP = 643, /* SUPERP */ - FLOATCONSTANT = 644, /* FLOATCONSTANT */ - INTCONSTANT = 645, /* INTCONSTANT */ - UINTCONSTANT = 646, /* UINTCONSTANT */ - BOOLCONSTANT = 647, /* BOOLCONSTANT */ - IDENTIFIER = 648, /* IDENTIFIER */ - TYPE_NAME = 649, /* TYPE_NAME */ - CENTROID = 650, /* CENTROID */ - IN = 651, /* IN */ - OUT = 652, /* OUT */ - INOUT = 653, /* INOUT */ - STRUCT = 654, /* STRUCT */ - VOID = 655, /* VOID */ - WHILE = 656, /* WHILE */ - BREAK = 657, /* BREAK */ - CONTINUE = 658, /* CONTINUE */ - DO = 659, /* DO */ - ELSE = 660, /* ELSE */ - FOR = 661, /* FOR */ - IF = 662, /* IF */ - DISCARD = 663, /* DISCARD */ - RETURN = 664, /* RETURN */ - SWITCH = 665, /* SWITCH */ - CASE = 666, /* CASE */ - DEFAULT = 667, /* DEFAULT */ - TERMINATE_INVOCATION = 668, /* TERMINATE_INVOCATION */ - TERMINATE_RAY = 669, /* TERMINATE_RAY */ - IGNORE_INTERSECTION = 670, /* IGNORE_INTERSECTION */ - UNIFORM = 671, /* UNIFORM */ - SHARED = 672, /* SHARED */ - BUFFER = 673, /* BUFFER */ - TILEIMAGEEXT = 674, /* TILEIMAGEEXT */ - FLAT = 675, /* FLAT */ - SMOOTH = 676, /* SMOOTH */ - LAYOUT = 677, /* LAYOUT */ - DOUBLECONSTANT = 678, /* DOUBLECONSTANT */ - INT16CONSTANT = 679, /* INT16CONSTANT */ - UINT16CONSTANT = 680, /* UINT16CONSTANT */ - FLOAT16CONSTANT = 681, /* FLOAT16CONSTANT */ - INT32CONSTANT = 682, /* INT32CONSTANT */ - UINT32CONSTANT = 683, /* UINT32CONSTANT */ - INT64CONSTANT = 684, /* INT64CONSTANT */ - UINT64CONSTANT = 685, /* UINT64CONSTANT */ - SUBROUTINE = 686, /* SUBROUTINE */ - DEMOTE = 687, /* DEMOTE */ - FUNCTION = 688, /* FUNCTION */ - PAYLOADNV = 689, /* PAYLOADNV */ - PAYLOADINNV = 690, /* PAYLOADINNV */ - HITATTRNV = 691, /* HITATTRNV */ - CALLDATANV = 692, /* CALLDATANV */ - CALLDATAINNV = 693, /* CALLDATAINNV */ - PAYLOADEXT = 694, /* PAYLOADEXT */ - PAYLOADINEXT = 695, /* PAYLOADINEXT */ - HITATTREXT = 696, /* HITATTREXT */ - CALLDATAEXT = 697, /* CALLDATAEXT */ - CALLDATAINEXT = 698, /* CALLDATAINEXT */ - PATCH = 699, /* PATCH */ - SAMPLE = 700, /* SAMPLE */ - NONUNIFORM = 701, /* NONUNIFORM */ - COHERENT = 702, /* COHERENT */ - VOLATILE = 703, /* VOLATILE */ - RESTRICT = 704, /* RESTRICT */ - READONLY = 705, /* READONLY */ - WRITEONLY = 706, /* WRITEONLY */ - DEVICECOHERENT = 707, /* DEVICECOHERENT */ - QUEUEFAMILYCOHERENT = 708, /* QUEUEFAMILYCOHERENT */ - WORKGROUPCOHERENT = 709, /* WORKGROUPCOHERENT */ - SUBGROUPCOHERENT = 710, /* SUBGROUPCOHERENT */ - NONPRIVATE = 711, /* NONPRIVATE */ - SHADERCALLCOHERENT = 712, /* SHADERCALLCOHERENT */ - NOPERSPECTIVE = 713, /* NOPERSPECTIVE */ - EXPLICITINTERPAMD = 714, /* EXPLICITINTERPAMD */ - PERVERTEXEXT = 715, /* PERVERTEXEXT */ - PERVERTEXNV = 716, /* PERVERTEXNV */ - PERPRIMITIVENV = 717, /* PERPRIMITIVENV */ - PERVIEWNV = 718, /* PERVIEWNV */ - PERTASKNV = 719, /* PERTASKNV */ - PERPRIMITIVEEXT = 720, /* PERPRIMITIVEEXT */ - TASKPAYLOADWORKGROUPEXT = 721, /* TASKPAYLOADWORKGROUPEXT */ - PRECISE = 722 /* 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 @@ -566,7 +572,7 @@ union YYSTYPE glslang::TTypeParameters* typeParameters; } interm; -#line 570 "MachineIndependent/glslang_tab.cpp.h" +#line 576 "MachineIndependent/glslang_tab.cpp.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp index ccfff38..7ec8ed4 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/intermOut.cpp +++ b/libs/bgfx/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; @@ -643,6 +647,7 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpConstructReference: out.debug << "Construct reference"; break; case EOpConstructCooperativeMatrixNV: out.debug << "Construct cooperative matrix NV"; break; case EOpConstructCooperativeMatrixKHR: out.debug << "Construct cooperative matrix KHR"; break; + case EOpConstructCooperativeVectorNV: out.debug << "Construct cooperative vector NV"; break; case EOpConstructAccStruct: out.debug << "Construct acceleration structure"; break; case EOpLessThan: out.debug << "Compare Less Than"; break; @@ -667,6 +672,9 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpDistance: out.debug << "distance"; break; case EOpDot: out.debug << "dot-product"; break; + case EOpDotPackedEXT: out.debug << "dot-product-packed";break; + case EOpDotAccSatEXT: out.debug << "dot-product-accumulate-saturate";break; + case EOpDotPackedAccSatEXT: out.debug << "dot-product-packed-accumulate-saturate";break; case EOpCross: out.debug << "cross-product"; break; case EOpFaceForward: out.debug << "face-forward"; break; case EOpReflect: out.debug << "reflect"; break; @@ -939,6 +947,14 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpRayQueryGetIntersectionObjectToWorld: out.debug << "rayQueryGetIntersectionObjectToWorldEXT"; break; case EOpRayQueryGetIntersectionWorldToObject: out.debug << "rayQueryGetIntersectionWorldToObjectEXT"; break; case EOpRayQueryGetIntersectionTriangleVertexPositionsEXT: out.debug << "rayQueryGetIntersectionTriangleVertexPositionsEXT"; break; + case EOpRayQueryGetIntersectionClusterIdNV: out.debug << "rayQueryGetIntersectionClusterIdNV"; break; + case EOpRayQueryGetIntersectionSpherePositionNV: out.debug << "rayQueryGetIntersectionSpherePositionNV"; break; + case EOpRayQueryGetIntersectionSphereRadiusNV: out.debug << "rayQueryGetIntersectionSphereRadiusNV"; break; + case EOpRayQueryGetIntersectionLSSHitValueNV: out.debug << "rayQueryGetIntersectionLSSHitValueNV"; break; + case EOpRayQueryGetIntersectionLSSPositionsNV: out.debug << "rayQueryGetIntersectionLSSPositionsNV"; break; + case EOpRayQueryGetIntersectionLSSRadiiNV: out.debug << "rayQueryGetIntersectionLSSRadiiNV"; break; + case EOpRayQueryIsSphereHitNV: out.debug << "rayQueryIsSphereHitNV"; break; + case EOpRayQueryIsLSSHitNV: out.debug << "rayQueryIsLSSHitNV"; break; case EOpCooperativeMatrixLoad: out.debug << "Load cooperative matrix KHR"; break; case EOpCooperativeMatrixStore: out.debug << "Store cooperative matrix KHR"; break; @@ -952,6 +968,13 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpCooperativeMatrixPerElementOpNV: out.debug << "cooperative matrix per element op"; break; case EOpCooperativeMatrixTransposeNV: out.debug << "Transpose cooperative matrix"; break; + case EOpCooperativeVectorMatMulNV: out.debug << "Cooperative vector matrix multiply NV"; break; + case EOpCooperativeVectorMatMulAddNV: out.debug << "Cooperative vector matrix multiply add NV"; break; + case EOpCooperativeVectorLoadNV: out.debug << "Load cooperative vector NV"; break; + case EOpCooperativeVectorStoreNV: out.debug << "Store cooperative vector NV"; break; + case EOpCooperativeVectorOuterProductAccumulateNV: out.debug << "Cooperative vector outer product accumulate NV"; break; + case EOpCooperativeVectorReduceSumAccumulateNV: out.debug << "Cooperative vector reduce sum accumulate NV"; break; + case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break; case EOpDebugPrintf: out.debug << "Debug printf"; break; @@ -985,9 +1008,16 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpHitObjectGetCurrentTimeNV: out.debug << "HitObjectGetCurrentTimeNV"; break; case EOpHitObjectGetShaderBindingTableRecordIndexNV: out.debug << "HitObjectGetShaderBindingTableRecordIndexNV"; break; case EOpHitObjectGetShaderRecordBufferHandleNV: out.debug << "HitObjectReadShaderRecordBufferHandleNV"; break; + case EOpHitObjectGetClusterIdNV: out.debug << "HitObjectGetClusterIdNV"; break; case EOpReorderThreadNV: out.debug << "ReorderThreadNV"; break; case EOpFetchMicroTriangleVertexPositionNV: out.debug << "MicroTriangleVertexPositionNV"; break; case EOpFetchMicroTriangleVertexBarycentricNV: out.debug << "MicroTriangleVertexBarycentricNV"; break; + case EOpHitObjectGetSpherePositionNV: out.debug << "HitObjectGetSpherePositionNV"; break; + case EOpHitObjectGetSphereRadiusNV: out.debug << "HitObjectGetSphereRadiusNV"; break; + case EOpHitObjectGetLSSPositionsNV: out.debug << "HitObjectGetLSSPositionsNV"; break; + case EOpHitObjectGetLSSRadiiNV: out.debug << "HitObjectGetLSSRadiiNV"; break; + case EOpHitObjectIsSphereHitNV: out.debug << "HitObjectIsSphereHitNV"; break; + case EOpHitObjectIsLSSHitNV: out.debug << "HitObjectIsLSSHitNV"; break; case EOpSpirvInst: out.debug << "spirv_instruction"; break; case EOpStencilAttachmentReadEXT: out.debug << "stencilAttachmentReadEXT"; break; @@ -1133,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; @@ -1416,6 +1447,8 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree) infoSink.debug << "using non_coherent_depth_attachment_readEXT\n"; if (nonCoherentStencilAttachmentReadEXT) infoSink.debug << "using non_coherent_stencil_attachment_readEXT\n"; + if (nonCoherentTileAttachmentReadQCOM) + infoSink.debug << "using non_coherent_attachment_readQCOM\n"; if (depthLayout != EldNone) infoSink.debug << "using " << TQualifier::getLayoutDepthString(depthLayout) << "\n"; if (blendEquations != 0) { @@ -1450,6 +1483,13 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree) localSizeSpecId[2] << ")\n"; } } + if (nonCoherentTileAttachmentReadQCOM) + infoSink.debug << "using non_coherent_attachment_readQCOM\n"; + if (isTileShadingRateQCOMSet()) { + infoSink.debug << "shading_rateQCOM = (" << tileShadingRateQCOM[0] << ", " + << tileShadingRateQCOM[1] << ", " + << tileShadingRateQCOM[2] << ")\n"; + } break; default: diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp index 584cc8a..fa0e66e 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/linkValidate.cpp +++ b/libs/bgfx/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,32 +206,171 @@ void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit) { // do matching and error checking mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); - // Check that all of our inputs have matching outputs from the previous stage. - // Only do this for Vulkan, since GL_ARB_separate_shader_objects allows for - // the in/out to not match - if (spvVersion.vulkan > 0) { - for (auto& nextStageInterm : unitLinkerObjects) { - auto* nextStageSymbol = nextStageInterm->getAsSymbolNode(); - bool found = false; - for (auto& curStageInterm : linkerObjects) { - if (isSameSymbol(curStageInterm->getAsSymbolNode(), nextStageSymbol)) { - found = true; - break; + 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; } } - if (!found) { - TString errmsg; - errmsg.append("Input '"); - if (nextStageSymbol->getType().getBasicType() == EbtBlock) - errmsg.append(nextStageSymbol->getType().getTypeName()); - else - errmsg.append(nextStageSymbol->getName()); - errmsg.append("' in ").append(StageName(unit.getStage())); - errmsg.append(" shader has no corresponding output in ").append(StageName(getStage())).append(" shader."); - error(infoSink, errmsg.c_str(), unit.getStage()); - } + } 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) @@ -422,6 +600,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) MERGE_TRUE(nonCoherentColorAttachmentReadEXT); MERGE_TRUE(nonCoherentDepthAttachmentReadEXT); MERGE_TRUE(nonCoherentStencilAttachmentReadEXT); + MERGE_TRUE(nonCoherentTileAttachmentReadQCOM); if (depthLayout == EldNone) depthLayout = unit.depthLayout; @@ -852,15 +1031,10 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin // Error check and merge the linker objects (duplicates should not be created) std::size_t initialNumLinkerObjects = linkerObjects.size(); for (unsigned int unitLinkObj = 0; unitLinkObj < unitLinkerObjects.size(); ++unitLinkObj) { - TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode(); bool merge = true; - - // Don't merge inputs backwards into previous stages - if (getStage() != unitStage && unitSymbol->getQualifier().storage == EvqVaryingIn) - merge = false; - 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)) { @@ -889,11 +1063,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 @@ -1224,6 +1419,10 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy error(infoSink, "Memory volatil qualifier must match:", unitStage); memoryQualifierError = true; } + if (symbol.getQualifier().nontemporal != unitSymbol.getQualifier().nontemporal) { + error(infoSink, "Memory nontemporal qualifier must match:", unitStage); + memoryQualifierError = true; + } if (symbol.getQualifier().restrict != unitSymbol.getQualifier().restrict) { error(infoSink, "Memory restrict qualifier must match:", unitStage); memoryQualifierError = true; @@ -1342,7 +1541,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) { @@ -1503,23 +1703,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); } // @@ -2202,6 +2385,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/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h index 2fae237..0d299bd 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/localintermediate.h @@ -268,6 +268,7 @@ class TNumericFeatures { gpu_shader_fp64 = 1 << 9, gpu_shader_int16 = 1 << 10, gpu_shader_half_float = 1 << 11, + nv_gpu_shader5_types = 1 << 12, } feature; void insert(feature f) { features |= f; } void erase(feature f) { features &= ~f; } @@ -342,6 +343,7 @@ class TIntermediate { numTaskNVBlocks(0), layoutPrimitiveCulling(false), numTaskEXTPayloads(0), + nonCoherentTileAttachmentReadQCOM(false), autoMapBindings(false), autoMapLocations(false), flattenUniformArrays(false), @@ -370,6 +372,12 @@ class TIntermediate { localSizeSpecId[1] = TQualifier::layoutNotSet; localSizeSpecId[2] = TQualifier::layoutNotSet; xfbBuffers.resize(TQualifier::layoutXfbBufferEnd); + tileShadingRateQCOM[0] = 0; + tileShadingRateQCOM[1] = 0; + tileShadingRateQCOM[2] = 0; + tileShadingRateQCOMNotDefault[0] = false; + tileShadingRateQCOMNotDefault[1] = false; + tileShadingRateQCOMNotDefault[2] = false; shiftBinding.fill(0); } @@ -650,6 +658,21 @@ class TIntermediate { bool isEsProfile() const { return profile == EEsProfile; } + bool setTileShadingRateQCOM(int dim, int size) + { + if (tileShadingRateQCOMNotDefault[dim]) + return size == tileShadingRateQCOM[dim]; + tileShadingRateQCOMNotDefault[dim] = true; + tileShadingRateQCOM[dim] = size; + return true; + } + unsigned int getTileShadingRateQCOM(int dim) const { return tileShadingRateQCOM[dim]; } + bool isTileShadingRateQCOMSet() const + { + // Return true if any component has been set (i.e. any component is not default). + return tileShadingRateQCOMNotDefault[0] || tileShadingRateQCOMNotDefault[1] || tileShadingRateQCOMNotDefault[2]; + } + void setShiftBinding(TResourceType res, unsigned int shift) { shiftBinding[res] = shift; @@ -895,6 +918,8 @@ class TIntermediate { bool getNonCoherentDepthAttachmentReadEXT() const { return nonCoherentDepthAttachmentReadEXT; } void setNonCoherentStencilAttachmentReadEXT() { nonCoherentStencilAttachmentReadEXT = true; } bool getNonCoherentStencilAttachmentReadEXT() const { return nonCoherentStencilAttachmentReadEXT; } + void setNonCoherentTileAttachmentReadQCOM() { nonCoherentTileAttachmentReadQCOM = true; } + bool getNonCoherentTileAttachmentReadQCOM() const { return nonCoherentTileAttachmentReadQCOM; } void setPostDepthCoverage() { postDepthCoverage = true; } bool getPostDepthCoverage() const { return postDepthCoverage; } void setEarlyFragmentTests() { earlyFragmentTests = true; } @@ -1035,11 +1060,11 @@ class TIntermediate { #endif bool usingScalarBlockLayout() const { - for (auto extIt = requestedExtensions.begin(); extIt != requestedExtensions.end(); ++extIt) { - if (*extIt == E_GL_EXT_scalar_block_layout) - return true; - } - return false; + return IsRequestedExtension(E_GL_EXT_scalar_block_layout); + } + + bool usingTextureOffsetNonConst() const { + return IsRequestedExtension(E_GL_EXT_texture_offset_non_const); } bool IsRequestedExtension(const char* extension) const @@ -1053,7 +1078,8 @@ class TIntermediate { 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; @@ -1106,17 +1132,20 @@ class TIntermediate { // Certain explicit conversions are allowed conditionally bool getArithemeticInt8Enabled() const { return numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || + numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) || numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int8); } bool getArithemeticInt16Enabled() const { return numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || numericFeatures.contains(TNumericFeatures::gpu_shader_int16) || + numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) || numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int16); } bool getArithemeticFloat16Enabled() const { return numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || numericFeatures.contains(TNumericFeatures::gpu_shader_half_float) || + numericFeatures.contains(TNumericFeatures::nv_gpu_shader5_types) || numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float16); } void updateNumericFeature(TNumericFeatures::feature f, bool on) @@ -1124,8 +1153,14 @@ class TIntermediate { 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&); @@ -1231,6 +1266,10 @@ class TIntermediate { bool layoutPrimitiveCulling; int numTaskEXTPayloads; + bool nonCoherentTileAttachmentReadQCOM; + int tileShadingRateQCOM[3]; + bool tileShadingRateQCOMNotDefault[3]; + // Base shift values std::array shiftBinding; diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h index 6b9bc04..1deb2db 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/parseVersions.h @@ -103,6 +103,7 @@ class TParseVersions { 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); @@ -122,6 +123,8 @@ class TParseVersions { virtual void intcoopmatCheckNV(const TSourceLoc&, const char *op, bool builtIn = false); virtual void coopmatCheck(const TSourceLoc&, const char* op, bool builtIn = false); virtual void tensorLayoutViewCheck(const TSourceLoc&, const char* op, bool builtIn = false); + virtual void coopvecCheck(const TSourceLoc&, const char* op, bool builtIn = false); + virtual void intattachmentCheck(const TSourceLoc&, const char *op, bool builtIn = false); bool relaxedErrors() const { return (messages & EShMsgRelaxedErrors) != 0; } bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; } bool isForwardCompatible() const { return forwardCompatible; } diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp index 49dafa5..df64b7b 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -470,6 +470,7 @@ int TPpContext::tStringInput::scan(TPpToken* ppToken) static const char* const Int64_Extensions[] = { E_GL_ARB_gpu_shader_int64, E_GL_EXT_shader_explicit_arithmetic_types, + E_GL_NV_gpu_shader5, E_GL_EXT_shader_explicit_arithmetic_types_int64 }; static const int Num_Int64_Extensions = sizeof(Int64_Extensions) / sizeof(Int64_Extensions[0]); diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp index 7b5cd03..600541f 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/propagateNoContraction.cpp @@ -174,6 +174,9 @@ bool isArithmeticOperation(glslang::TOperator op) case glslang::EOpMatrixTimesMatrix: case glslang::EOpDot: + case glslang::EOpDotPackedEXT: + case glslang::EOpDotAccSatEXT: + case glslang::EOpDotPackedAccSatEXT: case glslang::EOpPostIncrement: case glslang::EOpPostDecrement: diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp index 7e31609..3afbe3d 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.cpp @@ -1138,8 +1138,10 @@ void TReflection::buildAttributeReflection(EShLanguage stage, const TIntermediat { if (stage == EShLangCompute) { // Remember thread dimensions - for (int dim=0; dim<3; ++dim) + for (int dim=0; dim<3; ++dim) { localSize[dim] = intermediate.getLocalSize(dim); + tileShadingRateQCOM[dim] = intermediate.getTileShadingRateQCOM(dim); + } } } @@ -1270,9 +1272,8 @@ void TReflection::dump() indexToPipeOutput[i].dump(); printf("\n"); + static const char* axis[] = { "X", "Y", "Z" }; if (getLocalSize(0) > 1) { - static const char* axis[] = { "X", "Y", "Z" }; - for (int dim=0; dim<3; ++dim) if (getLocalSize(dim) > 1) printf("Local size %s: %u\n", axis[dim], getLocalSize(dim)); @@ -1280,6 +1281,12 @@ void TReflection::dump() printf("\n"); } + if (getTileShadingRateQCOM(0) > 1 || getTileShadingRateQCOM(1) > 1) { + for (int dim=0; dim<3; ++dim) + printf("Tile shading rate QCOM %s: %u\n", axis[dim], getTileShadingRateQCOM(dim)); + printf("\n"); + } + // printf("Live names\n"); // for (TNameToIndex::const_iterator it = nameToIndex.begin(); it != nameToIndex.end(); ++it) // printf("%s: %d\n", it->first.c_str(), it->second); diff --git a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h index 8315b11..dccb991 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h +++ b/libs/bgfx/3rdparty/glslang/glslang/MachineIndependent/reflection.h @@ -58,8 +58,10 @@ class TReflection { TReflection(EShReflectionOptions opts, EShLanguage first, EShLanguage last) : options(opts), firstStage(first), lastStage(last), badReflection(TObjectReflection::badReflection()) { - for (int dim=0; dim<3; ++dim) + for (int dim=0; dim<3; ++dim) { localSize[dim] = 0; + tileShadingRateQCOM[dim] = 0; + } } virtual ~TReflection() {} @@ -168,6 +170,9 @@ class TReflection { // Thread local size unsigned getLocalSize(int dim) const { return dim <= 2 ? localSize[dim] : 0; } + // Tile shading rate QCOM + unsigned getTileShadingRateQCOM(int dim) const { return dim <= 2 ? tileShadingRateQCOM[dim] : 0; } + void dump(); protected: @@ -213,6 +218,7 @@ class TReflection { TIndices atomicCounterUniformIndices; unsigned int localSize[3]; + unsigned int tileShadingRateQCOM[3]; }; } // end namespace glslang diff --git a/libs/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h b/libs/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h index 1a3a0b2..0536cc5 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/Public/ShaderLang.h +++ b/libs/bgfx/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), }; @@ -894,6 +895,7 @@ class TProgram { // call first, to do liveness analysis, index mapping, etc.; returns false on failure GLSLANG_EXPORT bool buildReflection(int opts = EShReflectionDefault); GLSLANG_EXPORT unsigned getLocalSize(int dim) const; // return dim'th local size + GLSLANG_EXPORT unsigned getTileShadingRateQCOM(int dim) const; // return dim'th tile shading rate QCOM GLSLANG_EXPORT int getReflectionIndex(const char *name) const; GLSLANG_EXPORT int getReflectionPipeIOIndex(const char* name, const bool inOrOut) const; GLSLANG_EXPORT int getNumUniformVariables() const; diff --git a/libs/bgfx/3rdparty/glslang/glslang/stub.cpp b/libs/bgfx/3rdparty/glslang/glslang/stub.cpp index b9aec6d..9c286fb 100644 --- a/libs/bgfx/3rdparty/glslang/glslang/stub.cpp +++ b/libs/bgfx/3rdparty/glslang/glslang/stub.cpp @@ -32,6 +32,20 @@ // POSSIBILITY OF SUCH DAMAGE. // -// This empty source file exists to support building stubbed versions of -// deprecated libraries which have been integrated into the main glslang -// library. It should be deleted once the stub libraries are fully removed. +#ifdef GLSLANG_IS_SHARED_LIBRARY +#ifdef _WIN32 +#ifdef GLSLANG_EXPORTING +#define STUB_EXPORT __declspec(dllexport) +#else +#define STUB_EXPORT __declspec(dllimport) +#endif +#endif +#endif // GLSLANG_IS_SHARED_LIBRARY + +#ifndef STUB_EXPORT +#define STUB_EXPORT +#endif + +// Force stub library to export function to preserve backcompat. +// https://github.com/KhronosGroup/glslang/issues/3882 +STUB_EXPORT int stub_library_function() { return 0; } diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_platform.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_platform.h index 0ecd4f6..18e5ca3 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_platform.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_platform.h @@ -2,7 +2,7 @@ // File: vk_platform.h // /* -** Copyright 2014-2024 The Khronos Group Inc. +** Copyright 2014-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std.h index 8ce283e..347e0d2 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std.h @@ -2,7 +2,7 @@ #define VULKAN_VIDEO_CODEC_AV1STD_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ @@ -132,7 +132,7 @@ typedef enum StdVideoAV1FrameRestorationType { typedef enum StdVideoAV1ColorPrimaries { STD_VIDEO_AV1_COLOR_PRIMARIES_BT_709 = 1, - STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED = 2, + STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED = 2, STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_M = 4, STD_VIDEO_AV1_COLOR_PRIMARIES_BT_470_B_G = 5, STD_VIDEO_AV1_COLOR_PRIMARIES_BT_601 = 6, @@ -144,6 +144,8 @@ typedef enum StdVideoAV1ColorPrimaries { STD_VIDEO_AV1_COLOR_PRIMARIES_SMPTE_432 = 12, STD_VIDEO_AV1_COLOR_PRIMARIES_EBU_3213 = 22, STD_VIDEO_AV1_COLOR_PRIMARIES_INVALID = 0x7FFFFFFF, + // STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED is a deprecated alias + STD_VIDEO_AV1_COLOR_PRIMARIES_BT_UNSPECIFIED = STD_VIDEO_AV1_COLOR_PRIMARIES_UNSPECIFIED, STD_VIDEO_AV1_COLOR_PRIMARIES_MAX_ENUM = 0x7FFFFFFF } StdVideoAV1ColorPrimaries; diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std_decode.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std_decode.h index 6b8130c..522628e 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std_decode.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std_decode.h @@ -2,7 +2,7 @@ #define VULKAN_VIDEO_CODEC_AV1STD_DECODE_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std_encode.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std_encode.h new file mode 100644 index 0000000..ca5f6f4 --- /dev/null +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_av1std_encode.h @@ -0,0 +1,143 @@ +#ifndef VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ +#define VULKAN_VIDEO_CODEC_AV1STD_ENCODE_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_av1std_encode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_av1std_encode 1 +#include "vulkan_video_codec_av1std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_AV1_ENCODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_av1_encode" +typedef struct StdVideoEncodeAV1DecoderModelInfo { + uint8_t buffer_delay_length_minus_1; + uint8_t buffer_removal_time_length_minus_1; + uint8_t frame_presentation_time_length_minus_1; + uint8_t reserved1; + uint32_t num_units_in_decoding_tick; +} StdVideoEncodeAV1DecoderModelInfo; + +typedef struct StdVideoEncodeAV1ExtensionHeader { + uint8_t temporal_id; + uint8_t spatial_id; +} StdVideoEncodeAV1ExtensionHeader; + +typedef struct StdVideoEncodeAV1OperatingPointInfoFlags { + uint32_t decoder_model_present_for_this_op : 1; + uint32_t low_delay_mode_flag : 1; + uint32_t initial_display_delay_present_for_this_op : 1; + uint32_t reserved : 29; +} StdVideoEncodeAV1OperatingPointInfoFlags; + +typedef struct StdVideoEncodeAV1OperatingPointInfo { + StdVideoEncodeAV1OperatingPointInfoFlags flags; + uint16_t operating_point_idc; + uint8_t seq_level_idx; + uint8_t seq_tier; + uint32_t decoder_buffer_delay; + uint32_t encoder_buffer_delay; + uint8_t initial_display_delay_minus_1; +} StdVideoEncodeAV1OperatingPointInfo; + +typedef struct StdVideoEncodeAV1PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t disable_cdf_update : 1; + uint32_t use_superres : 1; + uint32_t render_and_frame_size_different : 1; + uint32_t allow_screen_content_tools : 1; + uint32_t is_filter_switchable : 1; + uint32_t force_integer_mv : 1; + uint32_t frame_size_override_flag : 1; + uint32_t buffer_removal_time_present_flag : 1; + uint32_t allow_intrabc : 1; + uint32_t frame_refs_short_signaling : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t is_motion_mode_switchable : 1; + uint32_t use_ref_frame_mvs : 1; + uint32_t disable_frame_end_update_cdf : 1; + uint32_t allow_warped_motion : 1; + uint32_t reduced_tx_set : 1; + uint32_t skip_mode_present : 1; + uint32_t delta_q_present : 1; + uint32_t delta_lf_present : 1; + uint32_t delta_lf_multi : 1; + uint32_t segmentation_enabled : 1; + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t UsesLr : 1; + uint32_t usesChromaLr : 1; + uint32_t show_frame : 1; + uint32_t showable_frame : 1; + uint32_t reserved : 3; +} StdVideoEncodeAV1PictureInfoFlags; + +typedef struct StdVideoEncodeAV1PictureInfo { + StdVideoEncodeAV1PictureInfoFlags flags; + StdVideoAV1FrameType frame_type; + uint32_t frame_presentation_time; + uint32_t current_frame_id; + uint8_t order_hint; + uint8_t primary_ref_frame; + uint8_t refresh_frame_flags; + uint8_t coded_denom; + uint16_t render_width_minus_1; + uint16_t render_height_minus_1; + StdVideoAV1InterpolationFilter interpolation_filter; + StdVideoAV1TxMode TxMode; + uint8_t delta_q_res; + uint8_t delta_lf_res; + uint8_t ref_order_hint[STD_VIDEO_AV1_NUM_REF_FRAMES]; + int8_t ref_frame_idx[STD_VIDEO_AV1_REFS_PER_FRAME]; + uint8_t reserved1[3]; + uint32_t delta_frame_id_minus_1[STD_VIDEO_AV1_REFS_PER_FRAME]; + const StdVideoAV1TileInfo* pTileInfo; + const StdVideoAV1Quantization* pQuantization; + const StdVideoAV1Segmentation* pSegmentation; + const StdVideoAV1LoopFilter* pLoopFilter; + const StdVideoAV1CDEF* pCDEF; + const StdVideoAV1LoopRestoration* pLoopRestoration; + const StdVideoAV1GlobalMotion* pGlobalMotion; + const StdVideoEncodeAV1ExtensionHeader* pExtensionHeader; + const uint32_t* pBufferRemovalTimes; +} StdVideoEncodeAV1PictureInfo; + +typedef struct StdVideoEncodeAV1ReferenceInfoFlags { + uint32_t disable_frame_end_update_cdf : 1; + uint32_t segmentation_enabled : 1; + uint32_t reserved : 30; +} StdVideoEncodeAV1ReferenceInfoFlags; + +typedef struct StdVideoEncodeAV1ReferenceInfo { + StdVideoEncodeAV1ReferenceInfoFlags flags; + uint32_t RefFrameId; + StdVideoAV1FrameType frame_type; + uint8_t OrderHint; + uint8_t reserved1[3]; + const StdVideoEncodeAV1ExtensionHeader* pExtensionHeader; +} StdVideoEncodeAV1ReferenceInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std.h index 6d27af3..6fd3810 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std.h @@ -2,7 +2,7 @@ #define VULKAN_VIDEO_CODEC_H264STD_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std_decode.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std_decode.h index 439cb88..d6a90b4 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std_decode.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std_decode.h @@ -2,7 +2,7 @@ #define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std_encode.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std_encode.h index 9e24aa5..410b1b2 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std_encode.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h264std_encode.h @@ -2,7 +2,7 @@ #define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std.h index d0a1bac..3eecd60 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std.h @@ -2,7 +2,7 @@ #define VULKAN_VIDEO_CODEC_H265STD_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std_decode.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std_decode.h index 0178793..a9e1a09 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std_decode.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std_decode.h @@ -2,7 +2,7 @@ #define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std_encode.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std_encode.h index ee34491..fe2f28d 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std_encode.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_h265std_encode.h @@ -2,7 +2,7 @@ #define VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_vp9std.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_vp9std.h new file mode 100644 index 0000000..61743cd --- /dev/null +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_vp9std.h @@ -0,0 +1,151 @@ +#ifndef VULKAN_VIDEO_CODEC_VP9STD_H_ +#define VULKAN_VIDEO_CODEC_VP9STD_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_vp9std is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_vp9std 1 +#include "vulkan_video_codecs_common.h" +#define STD_VIDEO_VP9_NUM_REF_FRAMES 8 +#define STD_VIDEO_VP9_REFS_PER_FRAME 3 +#define STD_VIDEO_VP9_MAX_REF_FRAMES 4 +#define STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS 2 +#define STD_VIDEO_VP9_MAX_SEGMENTS 8 +#define STD_VIDEO_VP9_SEG_LVL_MAX 4 +#define STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS 7 +#define STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB 3 + +typedef enum StdVideoVP9Profile { + STD_VIDEO_VP9_PROFILE_0 = 0, + STD_VIDEO_VP9_PROFILE_1 = 1, + STD_VIDEO_VP9_PROFILE_2 = 2, + STD_VIDEO_VP9_PROFILE_3 = 3, + STD_VIDEO_VP9_PROFILE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_PROFILE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9Profile; + +typedef enum StdVideoVP9Level { + STD_VIDEO_VP9_LEVEL_1_0 = 0, + STD_VIDEO_VP9_LEVEL_1_1 = 1, + STD_VIDEO_VP9_LEVEL_2_0 = 2, + STD_VIDEO_VP9_LEVEL_2_1 = 3, + STD_VIDEO_VP9_LEVEL_3_0 = 4, + STD_VIDEO_VP9_LEVEL_3_1 = 5, + STD_VIDEO_VP9_LEVEL_4_0 = 6, + STD_VIDEO_VP9_LEVEL_4_1 = 7, + STD_VIDEO_VP9_LEVEL_5_0 = 8, + STD_VIDEO_VP9_LEVEL_5_1 = 9, + STD_VIDEO_VP9_LEVEL_5_2 = 10, + STD_VIDEO_VP9_LEVEL_6_0 = 11, + STD_VIDEO_VP9_LEVEL_6_1 = 12, + STD_VIDEO_VP9_LEVEL_6_2 = 13, + STD_VIDEO_VP9_LEVEL_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_LEVEL_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9Level; + +typedef enum StdVideoVP9FrameType { + STD_VIDEO_VP9_FRAME_TYPE_KEY = 0, + STD_VIDEO_VP9_FRAME_TYPE_NON_KEY = 1, + STD_VIDEO_VP9_FRAME_TYPE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_FRAME_TYPE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9FrameType; + +typedef enum StdVideoVP9ReferenceName { + STD_VIDEO_VP9_REFERENCE_NAME_INTRA_FRAME = 0, + STD_VIDEO_VP9_REFERENCE_NAME_LAST_FRAME = 1, + STD_VIDEO_VP9_REFERENCE_NAME_GOLDEN_FRAME = 2, + STD_VIDEO_VP9_REFERENCE_NAME_ALTREF_FRAME = 3, + STD_VIDEO_VP9_REFERENCE_NAME_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_REFERENCE_NAME_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9ReferenceName; + +typedef enum StdVideoVP9InterpolationFilter { + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP = 0, + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SMOOTH = 1, + STD_VIDEO_VP9_INTERPOLATION_FILTER_EIGHTTAP_SHARP = 2, + STD_VIDEO_VP9_INTERPOLATION_FILTER_BILINEAR = 3, + STD_VIDEO_VP9_INTERPOLATION_FILTER_SWITCHABLE = 4, + STD_VIDEO_VP9_INTERPOLATION_FILTER_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_INTERPOLATION_FILTER_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9InterpolationFilter; + +typedef enum StdVideoVP9ColorSpace { + STD_VIDEO_VP9_COLOR_SPACE_UNKNOWN = 0, + STD_VIDEO_VP9_COLOR_SPACE_BT_601 = 1, + STD_VIDEO_VP9_COLOR_SPACE_BT_709 = 2, + STD_VIDEO_VP9_COLOR_SPACE_SMPTE_170 = 3, + STD_VIDEO_VP9_COLOR_SPACE_SMPTE_240 = 4, + STD_VIDEO_VP9_COLOR_SPACE_BT_2020 = 5, + STD_VIDEO_VP9_COLOR_SPACE_RESERVED = 6, + STD_VIDEO_VP9_COLOR_SPACE_RGB = 7, + STD_VIDEO_VP9_COLOR_SPACE_INVALID = 0x7FFFFFFF, + STD_VIDEO_VP9_COLOR_SPACE_MAX_ENUM = 0x7FFFFFFF +} StdVideoVP9ColorSpace; +typedef struct StdVideoVP9ColorConfigFlags { + uint32_t color_range : 1; + uint32_t reserved : 31; +} StdVideoVP9ColorConfigFlags; + +typedef struct StdVideoVP9ColorConfig { + StdVideoVP9ColorConfigFlags flags; + uint8_t BitDepth; + uint8_t subsampling_x; + uint8_t subsampling_y; + uint8_t reserved1; + StdVideoVP9ColorSpace color_space; +} StdVideoVP9ColorConfig; + +typedef struct StdVideoVP9LoopFilterFlags { + uint32_t loop_filter_delta_enabled : 1; + uint32_t loop_filter_delta_update : 1; + uint32_t reserved : 30; +} StdVideoVP9LoopFilterFlags; + +typedef struct StdVideoVP9LoopFilter { + StdVideoVP9LoopFilterFlags flags; + uint8_t loop_filter_level; + uint8_t loop_filter_sharpness; + uint8_t update_ref_delta; + int8_t loop_filter_ref_deltas[STD_VIDEO_VP9_MAX_REF_FRAMES]; + uint8_t update_mode_delta; + int8_t loop_filter_mode_deltas[STD_VIDEO_VP9_LOOP_FILTER_ADJUSTMENTS]; +} StdVideoVP9LoopFilter; + +typedef struct StdVideoVP9SegmentationFlags { + uint32_t segmentation_update_map : 1; + uint32_t segmentation_temporal_update : 1; + uint32_t segmentation_update_data : 1; + uint32_t segmentation_abs_or_delta_update : 1; + uint32_t reserved : 28; +} StdVideoVP9SegmentationFlags; + +typedef struct StdVideoVP9Segmentation { + StdVideoVP9SegmentationFlags flags; + uint8_t segmentation_tree_probs[STD_VIDEO_VP9_MAX_SEGMENTATION_TREE_PROBS]; + uint8_t segmentation_pred_prob[STD_VIDEO_VP9_MAX_SEGMENTATION_PRED_PROB]; + uint8_t FeatureEnabled[STD_VIDEO_VP9_MAX_SEGMENTS]; + int16_t FeatureData[STD_VIDEO_VP9_MAX_SEGMENTS][STD_VIDEO_VP9_SEG_LVL_MAX]; +} StdVideoVP9Segmentation; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_vp9std_decode.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_vp9std_decode.h new file mode 100644 index 0000000..42b9bd3 --- /dev/null +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codec_vp9std_decode.h @@ -0,0 +1,68 @@ +#ifndef VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ +#define VULKAN_VIDEO_CODEC_VP9STD_DECODE_H_ 1 + +/* +** Copyright 2015-2025 The Khronos Group Inc. +** +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* +** This header is generated from the Khronos Vulkan XML API Registry. +** +*/ + + +#ifdef __cplusplus +extern "C" { +#endif + + + +// vulkan_video_codec_vp9std_decode is a preprocessor guard. Do not pass it to API calls. +#define vulkan_video_codec_vp9std_decode 1 +#include "vulkan_video_codec_vp9std.h" + +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0 VK_MAKE_VIDEO_STD_VERSION(1, 0, 0) + +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_API_VERSION_1_0_0 +#define VK_STD_VULKAN_VIDEO_CODEC_VP9_DECODE_EXTENSION_NAME "VK_STD_vulkan_video_codec_vp9_decode" +typedef struct StdVideoDecodeVP9PictureInfoFlags { + uint32_t error_resilient_mode : 1; + uint32_t intra_only : 1; + uint32_t allow_high_precision_mv : 1; + uint32_t refresh_frame_context : 1; + uint32_t frame_parallel_decoding_mode : 1; + uint32_t segmentation_enabled : 1; + uint32_t show_frame : 1; + uint32_t UsePrevFrameMvs : 1; + uint32_t reserved : 24; +} StdVideoDecodeVP9PictureInfoFlags; + +typedef struct StdVideoDecodeVP9PictureInfo { + StdVideoDecodeVP9PictureInfoFlags flags; + StdVideoVP9Profile profile; + StdVideoVP9FrameType frame_type; + uint8_t frame_context_idx; + uint8_t reset_frame_context; + uint8_t refresh_frame_flags; + uint8_t ref_frame_sign_bias_mask; + StdVideoVP9InterpolationFilter interpolation_filter; + uint8_t base_q_idx; + int8_t delta_q_y_dc; + int8_t delta_q_uv_dc; + int8_t delta_q_uv_ac; + uint8_t tile_cols_log2; + uint8_t tile_rows_log2; + uint16_t reserved1[3]; + const StdVideoVP9ColorConfig* pColorConfig; + const StdVideoVP9LoopFilter* pLoopFilter; + const StdVideoVP9Segmentation* pSegmentation; +} StdVideoDecodeVP9PictureInfo; + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codecs_common.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codecs_common.h index 5e6ef1d..a5f0f3d 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codecs_common.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vk_video/vulkan_video_codecs_common.h @@ -2,7 +2,7 @@ #define VULKAN_VIDEO_CODECS_COMMON_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan.h index ef94006..9060581 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan.h @@ -2,7 +2,7 @@ #define VULKAN_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_android.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_android.h index 61ff40b..a2ba3ad 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_android.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_android.h @@ -2,7 +2,7 @@ #define VULKAN_ANDROID_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_beta.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_beta.h index f5e9475..4b4826e 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_beta.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_beta.h @@ -2,7 +2,7 @@ #define VULKAN_BETA_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ @@ -174,6 +174,98 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDispatchGraphIndirectCountAMDX( #endif +// VK_NV_cuda_kernel_launch is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cuda_kernel_launch 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaModuleNV) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaFunctionNV) +#define VK_NV_CUDA_KERNEL_LAUNCH_SPEC_VERSION 2 +#define VK_NV_CUDA_KERNEL_LAUNCH_EXTENSION_NAME "VK_NV_cuda_kernel_launch" +typedef struct VkCudaModuleCreateInfoNV { + VkStructureType sType; + const void* pNext; + size_t dataSize; + const void* pData; +} VkCudaModuleCreateInfoNV; + +typedef struct VkCudaFunctionCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkCudaModuleNV module; + const char* pName; +} VkCudaFunctionCreateInfoNV; + +typedef struct VkCudaLaunchInfoNV { + VkStructureType sType; + const void* pNext; + VkCudaFunctionNV function; + uint32_t gridDimX; + uint32_t gridDimY; + uint32_t gridDimZ; + uint32_t blockDimX; + uint32_t blockDimY; + uint32_t blockDimZ; + uint32_t sharedMemBytes; + size_t paramCount; + const void* const * pParams; + size_t extraCount; + const void* const * pExtras; +} VkCudaLaunchInfoNV; + +typedef struct VkPhysicalDeviceCudaKernelLaunchFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cudaKernelLaunchFeatures; +} VkPhysicalDeviceCudaKernelLaunchFeaturesNV; + +typedef struct VkPhysicalDeviceCudaKernelLaunchPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t computeCapabilityMinor; + uint32_t computeCapabilityMajor; +} VkPhysicalDeviceCudaKernelLaunchPropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateCudaModuleNV)(VkDevice device, const VkCudaModuleCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCudaModuleNV* pModule); +typedef VkResult (VKAPI_PTR *PFN_vkGetCudaModuleCacheNV)(VkDevice device, VkCudaModuleNV module, size_t* pCacheSize, void* pCacheData); +typedef VkResult (VKAPI_PTR *PFN_vkCreateCudaFunctionNV)(VkDevice device, const VkCudaFunctionCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCudaFunctionNV* pFunction); +typedef void (VKAPI_PTR *PFN_vkDestroyCudaModuleNV)(VkDevice device, VkCudaModuleNV module, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkDestroyCudaFunctionNV)(VkDevice device, VkCudaFunctionNV function, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkCmdCudaLaunchKernelNV)(VkCommandBuffer commandBuffer, const VkCudaLaunchInfoNV* pLaunchInfo); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCudaModuleNV( + VkDevice device, + const VkCudaModuleCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCudaModuleNV* pModule); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetCudaModuleCacheNV( + VkDevice device, + VkCudaModuleNV module, + size_t* pCacheSize, + void* pCacheData); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateCudaFunctionNV( + VkDevice device, + const VkCudaFunctionCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkCudaFunctionNV* pFunction); + +VKAPI_ATTR void VKAPI_CALL vkDestroyCudaModuleNV( + VkDevice device, + VkCudaModuleNV module, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR void VKAPI_CALL vkDestroyCudaFunctionNV( + VkDevice device, + VkCudaFunctionNV function, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR void VKAPI_CALL vkCmdCudaLaunchKernelNV( + VkCommandBuffer commandBuffer, + const VkCudaLaunchInfoNV* pLaunchInfo); +#endif + + // VK_NV_displacement_micromap is a preprocessor guard. Do not pass it to API calls. #define VK_NV_displacement_micromap 1 #define VK_NV_DISPLACEMENT_MICROMAP_SPEC_VERSION 2 diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_core.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_core.h index 4d9776c..fa027c8 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_core.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_core.h @@ -2,7 +2,7 @@ #define VULKAN_CORE_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ @@ -69,10 +69,10 @@ extern "C" { #define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0 // Version of this file -#define VK_HEADER_VERSION 299 +#define VK_HEADER_VERSION 317 // Complete version of this file -#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION) +#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 4, VK_HEADER_VERSION) // VK_MAKE_VERSION is deprecated, but no reason was given in the API XML // DEPRECATED: This define is deprecated. VK_MAKE_API_VERSION should be used instead. @@ -166,6 +166,7 @@ typedef enum VkResult { VK_ERROR_FRAGMENTATION = -1000161000, VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000, VK_PIPELINE_COMPILE_REQUIRED = 1000297000, + VK_ERROR_NOT_PERMITTED = -1000174001, VK_ERROR_SURFACE_LOST_KHR = -1000000000, VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001, VK_SUBOPTIMAL_KHR = 1000001003, @@ -180,7 +181,6 @@ typedef enum VkResult { VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR = -1000023004, VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR = -1000023005, VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000, - VK_ERROR_NOT_PERMITTED_KHR = -1000174001, VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000, VK_THREAD_IDLE_KHR = 1000268000, VK_THREAD_DONE_KHR = 1000268001, @@ -194,7 +194,8 @@ typedef enum VkResult { VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY, VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE, VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION, - VK_ERROR_NOT_PERMITTED_EXT = VK_ERROR_NOT_PERMITTED_KHR, + VK_ERROR_NOT_PERMITTED_EXT = VK_ERROR_NOT_PERMITTED, + VK_ERROR_NOT_PERMITTED_KHR = VK_ERROR_NOT_PERMITTED, VK_ERROR_INVALID_DEVICE_ADDRESS_EXT = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS, VK_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED, @@ -421,6 +422,56 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES = 1000413001, VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS = 1000413002, VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS = 1000413003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_FEATURES = 55, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_4_PROPERTIES = 56, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO = 1000174000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES = 1000388000, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES = 1000388001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES = 1000416000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES = 1000528000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES = 1000544000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES = 1000259000, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO = 1000259001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES = 1000259002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES = 1000525000, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO = 1000190001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES = 1000190002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES = 1000265000, + VK_STRUCTURE_TYPE_MEMORY_MAP_INFO = 1000271000, + VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO = 1000271001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES = 1000470000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES = 1000470001, + VK_STRUCTURE_TYPE_RENDERING_AREA_INFO = 1000470003, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO = 1000470004, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2 = 1000338002, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2 = 1000338003, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO = 1000470005, + VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO = 1000470006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES = 1000080000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES = 1000232000, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO = 1000232001, + VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO = 1000232002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES = 1000545000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES = 1000545001, + VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS = 1000545002, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO = 1000545003, + VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO = 1000545004, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO = 1000545005, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO = 1000545006, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES = 1000466000, + VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO = 1000068000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES = 1000068001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES = 1000068002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES = 1000270000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES = 1000270001, + VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY = 1000270002, + VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY = 1000270003, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO = 1000270004, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO = 1000270005, + VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO = 1000270006, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO = 1000270007, + VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE = 1000270008, + VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY = 1000270009, VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000, VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001, VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007, @@ -471,6 +522,7 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_CU_MODULE_CREATE_INFO_NVX = 1000029000, VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX = 1000029001, VK_STRUCTURE_TYPE_CU_LAUNCH_INFO_NVX = 1000029002, + VK_STRUCTURE_TYPE_CU_MODULE_TEXTURING_MODE_CREATE_INFO_NVX = 1000029004, VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX = 1000030000, VK_STRUCTURE_TYPE_IMAGE_VIEW_ADDRESS_PROPERTIES_NVX = 1000030001, VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_CAPABILITIES_KHR = 1000038000, @@ -519,9 +571,6 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000, VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = 1000067000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = 1000067001, - VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT = 1000068000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT = 1000068001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT = 1000068002, VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000, VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073001, VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = 1000073002, @@ -536,7 +585,6 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = 1000078003, VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = 1000079000, VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = 1000079001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = 1000080000, VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = 1000081000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = 1000081001, VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = 1000081002, @@ -610,6 +658,7 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_NODE_CREATE_INFO_AMDX = 1000134004, #endif VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD = 1000044008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_BFLOAT16_FEATURES_KHR = 1000141000, VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000, VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001, VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002, @@ -688,9 +737,6 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PROFILE_INFO_KHR = 1000187003, VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_KHR = 1000187004, VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_KHR = 1000187005, - VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR = 1000174000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR = 1000388000, - VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR = 1000388001, VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000, VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = 1000191000, @@ -727,9 +773,6 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000044006, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD = 1000227000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD = 1000229000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR = 1000232000, - VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO_KHR = 1000232001, - VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO_KHR = 1000232002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT = 1000234000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_QUAD_CONTROL_FEATURES_KHR = 1000235000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT = 1000237000, @@ -764,18 +807,6 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INFO_KHR = 1000269003, VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004, VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT = 1000270000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT = 1000270001, - VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT = 1000270002, - VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT = 1000270003, - VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT = 1000270004, - VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT = 1000270005, - VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT = 1000270006, - VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT = 1000270007, - VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT = 1000270008, - VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT = 1000270009, - VK_STRUCTURE_TYPE_MEMORY_MAP_INFO_KHR = 1000271000, - VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO_KHR = 1000271001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_FEATURES_EXT = 1000272000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAP_MEMORY_PLACED_PROPERTIES_EXT = 1000272001, VK_STRUCTURE_TYPE_MEMORY_MAP_PLACED_INFO_EXT = 1000272002, @@ -808,8 +839,6 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT = 1000284000, VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT = 1000284001, VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT = 1000284002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = 1000286000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = 1000286001, VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT = 1000287000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT = 1000287001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT = 1000287002, @@ -832,11 +861,27 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_VIDEO_ENCODE_SESSION_PARAMETERS_FEEDBACK_INFO_KHR = 1000299010, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = 1000300000, VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = 1000300001, +#ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_CUDA_MODULE_CREATE_INFO_NV = 1000307000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_CUDA_FUNCTION_CREATE_INFO_NV = 1000307001, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_CUDA_LAUNCH_INFO_NV = 1000307002, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_FEATURES_NV = 1000307003, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUDA_KERNEL_LAUNCH_PROPERTIES_NV = 1000307004, +#endif + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_FEATURES_QCOM = 1000309000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_SHADING_PROPERTIES_QCOM = 1000309001, + VK_STRUCTURE_TYPE_RENDER_PASS_TILE_SHADING_CREATE_INFO_QCOM = 1000309002, + VK_STRUCTURE_TYPE_PER_TILE_BEGIN_INFO_QCOM = 1000309003, + VK_STRUCTURE_TYPE_PER_TILE_END_INFO_QCOM = 1000309004, + VK_STRUCTURE_TYPE_DISPATCH_TILE_INFO_QCOM = 1000309005, VK_STRUCTURE_TYPE_QUERY_LOW_LATENCY_SUPPORT_NV = 1000310000, VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECT_CREATE_INFO_EXT = 1000311000, VK_STRUCTURE_TYPE_EXPORT_METAL_OBJECTS_INFO_EXT = 1000311001, @@ -970,7 +1015,6 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT = 1000411001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT = 1000412000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_ARM = 1000415000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR = 1000416000, VK_STRUCTURE_TYPE_DEVICE_QUEUE_SHADER_CORE_CONTROL_CREATE_INFO_ARM = 1000417000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_FEATURES_ARM = 1000417001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCHEDULING_CONTROLS_PROPERTIES_ARM = 1000417002, @@ -979,16 +1023,12 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_SET_HOST_MAPPING_FEATURES_VALVE = 1000420000, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_BINDING_REFERENCE_VALVE = 1000420001, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_HOST_MAPPING_INFO_VALVE = 1000420002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT = 1000421000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_NON_SEAMLESS_CUBE_MAP_FEATURES_EXT = 1000422000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_FEATURES_ARM = 1000424000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RENDER_PASS_STRIPED_PROPERTIES_ARM = 1000424001, VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_BEGIN_INFO_ARM = 1000424002, VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_INFO_ARM = 1000424003, VK_STRUCTURE_TYPE_RENDER_PASS_STRIPE_SUBMIT_INFO_ARM = 1000424004, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM = 1000425000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM = 1000425001, - VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM = 1000425002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_FEATURES_NV = 1000426000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COPY_MEMORY_INDIRECT_PROPERTIES_NV = 1000426001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV = 1000427000, @@ -996,6 +1036,9 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_COMPUTE_FEATURES_NV = 1000428000, VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_INDIRECT_BUFFER_INFO_NV = 1000428001, VK_STRUCTURE_TYPE_PIPELINE_INDIRECT_DEVICE_ADDRESS_INFO_NV = 1000428002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_LINEAR_SWEPT_SPHERES_FEATURES_NV = 1000429008, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_LINEAR_SWEPT_SPHERES_DATA_NV = 1000429009, + VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_SPHERES_DATA_NV = 1000429010, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV = 1000430000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MAXIMAL_RECONVERGENCE_FEATURES_KHR = 1000434000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_SWAPCHAIN_FEATURES_EXT = 1000437000, @@ -1013,6 +1056,30 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_RENDER_PASS_SUBPASS_FEEDBACK_CREATE_INFO_EXT = 1000458003, VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_INFO_LUNARG = 1000459000, VK_STRUCTURE_TYPE_DIRECT_DRIVER_LOADING_LIST_LUNARG = 1000459001, + VK_STRUCTURE_TYPE_TENSOR_CREATE_INFO_ARM = 1000460000, + VK_STRUCTURE_TYPE_TENSOR_VIEW_CREATE_INFO_ARM = 1000460001, + VK_STRUCTURE_TYPE_BIND_TENSOR_MEMORY_INFO_ARM = 1000460002, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_TENSOR_ARM = 1000460003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_PROPERTIES_ARM = 1000460004, + VK_STRUCTURE_TYPE_TENSOR_FORMAT_PROPERTIES_ARM = 1000460005, + VK_STRUCTURE_TYPE_TENSOR_DESCRIPTION_ARM = 1000460006, + VK_STRUCTURE_TYPE_TENSOR_MEMORY_REQUIREMENTS_INFO_ARM = 1000460007, + VK_STRUCTURE_TYPE_TENSOR_MEMORY_BARRIER_ARM = 1000460008, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TENSOR_FEATURES_ARM = 1000460009, + VK_STRUCTURE_TYPE_DEVICE_TENSOR_MEMORY_REQUIREMENTS_ARM = 1000460010, + VK_STRUCTURE_TYPE_COPY_TENSOR_INFO_ARM = 1000460011, + VK_STRUCTURE_TYPE_TENSOR_COPY_ARM = 1000460012, + VK_STRUCTURE_TYPE_TENSOR_DEPENDENCY_INFO_ARM = 1000460013, + VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_TENSOR_ARM = 1000460014, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_TENSOR_INFO_ARM = 1000460015, + VK_STRUCTURE_TYPE_EXTERNAL_TENSOR_PROPERTIES_ARM = 1000460016, + VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_TENSOR_CREATE_INFO_ARM = 1000460017, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_FEATURES_ARM = 1000460018, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_BUFFER_TENSOR_PROPERTIES_ARM = 1000460019, + VK_STRUCTURE_TYPE_DESCRIPTOR_GET_TENSOR_INFO_ARM = 1000460020, + VK_STRUCTURE_TYPE_TENSOR_CAPTURE_DESCRIPTOR_DATA_INFO_ARM = 1000460021, + VK_STRUCTURE_TYPE_TENSOR_VIEW_CAPTURE_DESCRIPTOR_DATA_INFO_ARM = 1000460022, + VK_STRUCTURE_TYPE_FRAME_BOUNDARY_TENSORS_ARM = 1000460023, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_FEATURES_EXT = 1000462000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_MODULE_IDENTIFIER_PROPERTIES_EXT = 1000462001, VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_MODULE_IDENTIFIER_CREATE_INFO_EXT = 1000462002, @@ -1026,21 +1093,18 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_OPTICAL_FLOW_EXECUTE_INFO_NV = 1000464005, VK_STRUCTURE_TYPE_OPTICAL_FLOW_SESSION_CREATE_PRIVATE_DATA_INFO_NV = 1000464010, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LEGACY_DITHERING_FEATURES_EXT = 1000465000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT = 1000466000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_FEATURES_ANDROID = 1000468000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FORMAT_RESOLVE_PROPERTIES_ANDROID = 1000468001, VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_RESOLVE_PROPERTIES_ANDROID = 1000468002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR = 1000470000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR = 1000470001, - VK_STRUCTURE_TYPE_RENDERING_AREA_INFO_KHR = 1000470003, - VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO_KHR = 1000470004, - VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_KHR = 1000338002, - VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_KHR = 1000338003, - VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR = 1000470005, - VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR = 1000470006, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ANTI_LAG_FEATURES_AMD = 1000476000, VK_STRUCTURE_TYPE_ANTI_LAG_DATA_AMD = 1000476001, VK_STRUCTURE_TYPE_ANTI_LAG_PRESENTATION_INFO_AMD = 1000476002, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR = 1000479000, + VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR = 1000479001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR = 1000479002, + VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR = 1000480000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR = 1000480001, + VK_STRUCTURE_TYPE_PRESENT_WAIT_2_INFO_KHR = 1000480002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_POSITION_FETCH_FEATURES_KHR = 1000481000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_FEATURES_EXT = 1000482000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_OBJECT_PROPERTIES_EXT = 1000482001, @@ -1062,6 +1126,10 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM = 1000488000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV = 1000490000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_PROPERTIES_NV = 1000490001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_FEATURES_NV = 1000491000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_VECTOR_PROPERTIES_NV = 1000491001, + VK_STRUCTURE_TYPE_COOPERATIVE_VECTOR_PROPERTIES_NV = 1000491002, + VK_STRUCTURE_TYPE_CONVERT_COOPERATIVE_VECTOR_MATRIX_INFO_NV = 1000491004, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_FEATURES_NV = 1000492000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_SPARSE_ADDRESS_SPACE_PROPERTIES_NV = 1000492001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT = 1000351000, @@ -1094,6 +1162,21 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_PROFILE_INFO_KHR = 1000512003, VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000512004, VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_DPB_SLOT_INFO_KHR = 1000512005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_CAPABILITIES_KHR = 1000513000, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000513001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PICTURE_INFO_KHR = 1000513002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_DPB_SLOT_INFO_KHR = 1000513003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_AV1_FEATURES_KHR = 1000513004, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_PROFILE_INFO_KHR = 1000513005, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_INFO_KHR = 1000513006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_RATE_CONTROL_LAYER_INFO_KHR = 1000513007, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUALITY_LEVEL_PROPERTIES_KHR = 1000513008, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_SESSION_CREATE_INFO_KHR = 1000513009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_GOP_REMAINING_FRAME_INFO_KHR = 1000513010, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_DECODE_VP9_FEATURES_KHR = 1000514000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_CAPABILITIES_KHR = 1000514001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PICTURE_INFO_KHR = 1000514002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_VP9_PROFILE_INFO_KHR = 1000514003, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_1_FEATURES_KHR = 1000515000, VK_STRUCTURE_TYPE_VIDEO_INLINE_QUERY_INFO_KHR = 1000515001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PER_STAGE_DESCRIPTOR_SET_FEATURES_NV = 1000516000, @@ -1107,33 +1190,40 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_YCBCR_DEGAMMA_CREATE_INFO_QCOM = 1000520001, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUBIC_CLAMP_FEATURES_QCOM = 1000521000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ATTACHMENT_FEEDBACK_LOOP_DYNAMIC_STATE_FEATURES_EXT = 1000524000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_KHR = 1000525000, - VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_KHR = 1000190001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR = 1000190002, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES_KHR = 1000528000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFIED_IMAGE_LAYOUTS_FEATURES_KHR = 1000527000, + VK_STRUCTURE_TYPE_ATTACHMENT_FEEDBACK_LOOP_INFO_EXT = 1000527001, VK_STRUCTURE_TYPE_SCREEN_BUFFER_PROPERTIES_QNX = 1000529000, VK_STRUCTURE_TYPE_SCREEN_BUFFER_FORMAT_PROPERTIES_QNX = 1000529001, VK_STRUCTURE_TYPE_IMPORT_SCREEN_BUFFER_INFO_QNX = 1000529002, VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_QNX = 1000529003, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_SCREEN_BUFFER_FEATURES_QNX = 1000529004, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_DRIVER_PROPERTIES_MSFT = 1000530000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR = 1000265000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR = 1000259000, - VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_KHR = 1000259001, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_KHR = 1000259002, VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR = 1000184000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR = 1000544000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES_KHR = 1000545000, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES_KHR = 1000545001, - VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS_KHR = 1000545002, - VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO_KHR = 1000545003, - VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO_KHR = 1000545004, - VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO_KHR = 1000545005, - VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO_KHR = 1000545006, VK_STRUCTURE_TYPE_SET_DESCRIPTOR_BUFFER_OFFSETS_INFO_EXT = 1000545007, VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_BUFFER_EMBEDDED_SAMPLERS_INFO_EXT = 1000545008, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_POOL_OVERALLOCATION_FEATURES_NV = 1000546000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_FEATURES_QCOM = 1000547000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TILE_MEMORY_HEAP_PROPERTIES_QCOM = 1000547001, + VK_STRUCTURE_TYPE_TILE_MEMORY_REQUIREMENTS_QCOM = 1000547002, + VK_STRUCTURE_TYPE_TILE_MEMORY_BIND_INFO_QCOM = 1000547003, + VK_STRUCTURE_TYPE_TILE_MEMORY_SIZE_INFO_QCOM = 1000547004, + VK_STRUCTURE_TYPE_DISPLAY_SURFACE_STEREO_CREATE_INFO_NV = 1000551000, + VK_STRUCTURE_TYPE_DISPLAY_MODE_STEREO_PROPERTIES_NV = 1000551001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553000, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553001, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_INFO_KHR = 1000553002, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_QUANTIZATION_MAP_SESSION_PARAMETERS_CREATE_INFO_KHR = 1000553005, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_ENCODE_QUANTIZATION_MAP_FEATURES_KHR = 1000553009, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553003, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553004, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_H265_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553006, + VK_STRUCTURE_TYPE_VIDEO_ENCODE_AV1_QUANTIZATION_MAP_CAPABILITIES_KHR = 1000553007, + VK_STRUCTURE_TYPE_VIDEO_FORMAT_AV1_QUANTIZATION_MAP_PROPERTIES_KHR = 1000553008, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV = 1000555000, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DEVICE_CREATE_INFO_NV = 1000556000, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_CREATE_INFO_NV = 1000556001, + VK_STRUCTURE_TYPE_EXTERNAL_COMPUTE_QUEUE_DATA_PARAMS_NV = 1000556002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_COMPUTE_QUEUE_PROPERTIES_NV = 1000556003, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_RELAXED_EXTENDED_INSTRUCTION_FEATURES_KHR = 1000558000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMMAND_BUFFER_INHERITANCE_FEATURES_NV = 1000559000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_7_FEATURES_KHR = 1000562000, @@ -1143,7 +1233,22 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LAYERED_API_VULKAN_PROPERTIES_KHR = 1000562004, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT16_VECTOR_FEATURES_NV = 1000563000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_REPLICATED_COMPOSITES_FEATURES_EXT = 1000564000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT8_FEATURES_EXT = 1000567000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_VALIDATION_FEATURES_NV = 1000568000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_FEATURES_NV = 1000569000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CLUSTER_ACCELERATION_STRUCTURE_PROPERTIES_NV = 1000569001, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_CLUSTERS_BOTTOM_LEVEL_INPUT_NV = 1000569002, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_TRIANGLE_CLUSTER_INPUT_NV = 1000569003, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_MOVE_OBJECTS_INPUT_NV = 1000569004, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_INPUT_INFO_NV = 1000569005, + VK_STRUCTURE_TYPE_CLUSTER_ACCELERATION_STRUCTURE_COMMANDS_INFO_NV = 1000569006, + VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CLUSTER_ACCELERATION_STRUCTURE_CREATE_INFO_NV = 1000569007, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_FEATURES_NV = 1000570000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PARTITIONED_ACCELERATION_STRUCTURE_PROPERTIES_NV = 1000570001, + VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_PARTITIONED_ACCELERATION_STRUCTURE_NV = 1000570002, + VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCES_INPUT_NV = 1000570003, + VK_STRUCTURE_TYPE_BUILD_PARTITIONED_ACCELERATION_STRUCTURE_INFO_NV = 1000570004, + VK_STRUCTURE_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_FLAGS_NV = 1000570005, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_EXT = 1000572000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_EXT = 1000572001, VK_STRUCTURE_TYPE_GENERATED_COMMANDS_MEMORY_REQUIREMENTS_INFO_EXT = 1000572002, @@ -1158,11 +1263,45 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_INDIRECT_EXECUTION_SET_SHADER_LAYOUT_INFO_EXT = 1000572012, VK_STRUCTURE_TYPE_GENERATED_COMMANDS_PIPELINE_INFO_EXT = 1000572013, VK_STRUCTURE_TYPE_GENERATED_COMMANDS_SHADER_INFO_EXT = 1000572014, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_8_FEATURES_KHR = 1000574000, + VK_STRUCTURE_TYPE_MEMORY_BARRIER_ACCESS_FLAGS_3_KHR = 1000574002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_FEATURES_MESA = 1000575000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ALIGNMENT_CONTROL_PROPERTIES_MESA = 1000575001, VK_STRUCTURE_TYPE_IMAGE_ALIGNMENT_CONTROL_CREATE_INFO_MESA = 1000575002, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_CONTROL_FEATURES_EXT = 1000582000, VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLAMP_CONTROL_CREATE_INFO_EXT = 1000582001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_FEATURES_KHR = 1000584000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_9_PROPERTIES_KHR = 1000584001, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_OWNERSHIP_TRANSFER_PROPERTIES_KHR = 1000584002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_MAINTENANCE_2_FEATURES_KHR = 1000586000, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586001, + VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586002, + VK_STRUCTURE_TYPE_VIDEO_DECODE_AV1_INLINE_SESSION_PARAMETERS_INFO_KHR = 1000586003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HDR_VIVID_FEATURES_HUAWEI = 1000590000, + VK_STRUCTURE_TYPE_HDR_VIVID_DYNAMIC_METADATA_HUAWEI = 1000590001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_FEATURES_NV = 1000593000, + VK_STRUCTURE_TYPE_COOPERATIVE_MATRIX_FLEXIBLE_DIMENSIONS_PROPERTIES_NV = 1000593001, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_2_PROPERTIES_NV = 1000593002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_OPACITY_MICROMAP_FEATURES_ARM = 1000596000, + VK_STRUCTURE_TYPE_IMPORT_MEMORY_METAL_HANDLE_INFO_EXT = 1000602000, + VK_STRUCTURE_TYPE_MEMORY_METAL_HANDLE_PROPERTIES_EXT = 1000602001, + VK_STRUCTURE_TYPE_MEMORY_GET_METAL_HANDLE_INFO_EXT = 1000602002, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR = 1000421000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_ROBUSTNESS_FEATURES_EXT = 1000608000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FORMAT_PACK_FEATURES_ARM = 1000609000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR = 1000286000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR = 1000286001, +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_SET_PRESENT_CONFIG_NV = 1000613000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_METERING_FEATURES_NV = 1000613001, +#endif + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT = 1000425000, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT = 1000425001, + VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT = 1000425002, + VK_STRUCTURE_TYPE_RENDERING_END_INFO_EXT = 1000619003, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_DEVICE_MEMORY_FEATURES_EXT = 1000620000, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, // VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT is a deprecated alias @@ -1192,6 +1331,9 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO, VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_ROBUSTNESS_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES, VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO, @@ -1205,6 +1347,7 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO, VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES, VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES, @@ -1261,13 +1404,16 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES, VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT, - VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES, VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_EXT = VK_STRUCTURE_TYPE_CALIBRATED_TIMESTAMP_INFO_KHR, - VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR, + VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES, @@ -1289,6 +1435,9 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES, VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_LOCAL_READ_FEATURES, + VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_LOCATION_INFO, + VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_INPUT_ATTACHMENT_INDEX_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES, VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT, VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT, @@ -1302,15 +1451,29 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO, VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO, VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR, - VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES, + VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY_EXT = VK_STRUCTURE_TYPE_MEMORY_TO_IMAGE_COPY, + VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY_EXT = VK_STRUCTURE_TYPE_IMAGE_TO_MEMORY_COPY, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO_EXT = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_MEMORY_INFO, + VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO_EXT = VK_STRUCTURE_TYPE_COPY_MEMORY_TO_IMAGE_INFO, + VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO_EXT = VK_STRUCTURE_TYPE_HOST_IMAGE_LAYOUT_TRANSITION_INFO, + VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO_EXT = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_IMAGE_INFO, + VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE, + VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT = VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY, + VK_STRUCTURE_TYPE_MEMORY_MAP_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_MAP_INFO, + VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_UNMAP_INFO, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_KHR, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES, VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO, VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO, @@ -1336,20 +1499,50 @@ typedef enum VkStructureType { VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = VK_STRUCTURE_TYPE_IMAGE_BLIT_2, VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2, VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2, - VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_KHR, - VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_KHR, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_EXT, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_EXT, VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT, VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3, VK_STRUCTURE_TYPE_PIPELINE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_INFO_KHR, - VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR, - VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES, + VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES, VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS, VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_ROTATE_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLAMP_ZERO_ONE_FEATURES_KHR, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_EXT, + VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_EXT, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_PROTECTED_ACCESS_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES, + VK_STRUCTURE_TYPE_RENDERING_AREA_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_AREA_INFO, + VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_SUBRESOURCE_INFO, + VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_KHR = VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2, + VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2, + VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO, + VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO, VK_STRUCTURE_TYPE_SHADER_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES, + VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT_CONTROLS_2_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES, + VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_EXPECT_ASSUME_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES, + VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES, + VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS_KHR = VK_STRUCTURE_TYPE_BIND_MEMORY_STATUS, + VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO_KHR = VK_STRUCTURE_TYPE_BIND_DESCRIPTOR_SETS_INFO, + VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO, + VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO_KHR = VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_WITH_TEMPLATE_INFO, VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF } VkStructureType; @@ -1376,6 +1569,7 @@ typedef enum VkImageLayout { VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003, VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL = 1000314000, VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL = 1000314001, + VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ = 1000232000, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002, VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR = 1000024000, VK_IMAGE_LAYOUT_VIDEO_DECODE_SRC_KHR = 1000024001, @@ -1383,14 +1577,17 @@ typedef enum VkImageLayout { VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = 1000111000, VK_IMAGE_LAYOUT_FRAGMENT_DENSITY_MAP_OPTIMAL_EXT = 1000218000, VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR = 1000164003, - VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR = 1000232000, VK_IMAGE_LAYOUT_VIDEO_ENCODE_DST_KHR = 1000299000, VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR = 1000299001, VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR = 1000299002, VK_IMAGE_LAYOUT_ATTACHMENT_FEEDBACK_LOOP_OPTIMAL_EXT = 1000339000, + VK_IMAGE_LAYOUT_TENSOR_ALIASING_ARM = 1000460000, + VK_IMAGE_LAYOUT_VIDEO_ENCODE_QUANTIZATION_MAP_KHR = 1000553000, + VK_IMAGE_LAYOUT_ZERO_INITIALIZED_EXT = 1000620000, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR, + VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ_KHR = VK_IMAGE_LAYOUT_RENDERING_LOCAL_READ, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL, @@ -1446,13 +1643,20 @@ typedef enum VkObjectType { VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = 1000210000, VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR = 1000268000, VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV = 1000277000, +#ifdef VK_ENABLE_BETA_EXTENSIONS VK_OBJECT_TYPE_CUDA_MODULE_NV = 1000307000, +#endif +#ifdef VK_ENABLE_BETA_EXTENSIONS VK_OBJECT_TYPE_CUDA_FUNCTION_NV = 1000307001, +#endif VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA = 1000366000, VK_OBJECT_TYPE_MICROMAP_EXT = 1000396000, + VK_OBJECT_TYPE_TENSOR_ARM = 1000460000, + VK_OBJECT_TYPE_TENSOR_VIEW_ARM = 1000460001, VK_OBJECT_TYPE_OPTICAL_FLOW_SESSION_NV = 1000464000, VK_OBJECT_TYPE_SHADER_EXT = 1000482000, VK_OBJECT_TYPE_PIPELINE_BINARY_KHR = 1000483000, + VK_OBJECT_TYPE_EXTERNAL_COMPUTE_QUEUE_NV = 1000556000, VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_EXT = 1000572000, VK_OBJECT_TYPE_INDIRECT_EXECUTION_SET_EXT = 1000572001, VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE, @@ -1727,6 +1931,8 @@ typedef enum VkFormat { VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK = 1000066011, VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK = 1000066012, VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK = 1000066013, + VK_FORMAT_A1B5G5R5_UNORM_PACK16 = 1000470000, + VK_FORMAT_A8_UNORM = 1000470001, VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000, VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001, VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002, @@ -1735,9 +1941,22 @@ typedef enum VkFormat { VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005, VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006, VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007, + VK_FORMAT_R8_BOOL_ARM = 1000460000, VK_FORMAT_R16G16_SFIXED5_NV = 1000464000, - VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR = 1000470000, - VK_FORMAT_A8_UNORM_KHR = 1000470001, + VK_FORMAT_R10X6_UINT_PACK16_ARM = 1000609000, + VK_FORMAT_R10X6G10X6_UINT_2PACK16_ARM = 1000609001, + VK_FORMAT_R10X6G10X6B10X6A10X6_UINT_4PACK16_ARM = 1000609002, + VK_FORMAT_R12X4_UINT_PACK16_ARM = 1000609003, + VK_FORMAT_R12X4G12X4_UINT_2PACK16_ARM = 1000609004, + VK_FORMAT_R12X4G12X4B12X4A12X4_UINT_4PACK16_ARM = 1000609005, + VK_FORMAT_R14X2_UINT_PACK16_ARM = 1000609006, + VK_FORMAT_R14X2G14X2_UINT_2PACK16_ARM = 1000609007, + VK_FORMAT_R14X2G14X2B14X2A14X2_UINT_4PACK16_ARM = 1000609008, + VK_FORMAT_R14X2_UNORM_PACK16_ARM = 1000609009, + VK_FORMAT_R14X2G14X2_UNORM_2PACK16_ARM = 1000609010, + VK_FORMAT_R14X2G14X2B14X2A14X2_UNORM_4PACK16_ARM = 1000609011, + VK_FORMAT_G14X2_B14X2R14X2_2PLANE_420_UNORM_3PACK16_ARM = 1000609012, + VK_FORMAT_G14X2_B14X2R14X2_2PLANE_422_UNORM_3PACK16_ARM = 1000609013, VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK, VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK, VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK, @@ -1794,6 +2013,8 @@ typedef enum VkFormat { VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16, // VK_FORMAT_R16G16_S10_5_NV is a deprecated alias VK_FORMAT_R16G16_S10_5_NV = VK_FORMAT_R16G16_SFIXED5_NV, + VK_FORMAT_A1B5G5R5_UNORM_PACK16_KHR = VK_FORMAT_A1B5G5R5_UNORM_PACK16, + VK_FORMAT_A8_UNORM_KHR = VK_FORMAT_A8_UNORM, VK_FORMAT_MAX_ENUM = 0x7FFFFFFF } VkFormat; @@ -1984,6 +2205,7 @@ typedef enum VkDynamicState { VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE = 1000377001, VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE = 1000377002, VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE = 1000377004, + VK_DYNAMIC_STATE_LINE_STIPPLE = 1000259000, VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000, VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000, VK_DYNAMIC_STATE_DISCARD_RECTANGLE_ENABLE_EXT = 1000099001, @@ -2031,9 +2253,8 @@ typedef enum VkDynamicState { VK_DYNAMIC_STATE_REPRESENTATIVE_FRAGMENT_TEST_ENABLE_NV = 1000455031, VK_DYNAMIC_STATE_COVERAGE_REDUCTION_MODE_NV = 1000455032, VK_DYNAMIC_STATE_ATTACHMENT_FEEDBACK_LOOP_ENABLE_EXT = 1000524000, - VK_DYNAMIC_STATE_LINE_STIPPLE_KHR = 1000259000, VK_DYNAMIC_STATE_DEPTH_CLAMP_RANGE_EXT = 1000582000, - VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = VK_DYNAMIC_STATE_LINE_STIPPLE_KHR, + VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = VK_DYNAMIC_STATE_LINE_STIPPLE, VK_DYNAMIC_STATE_CULL_MODE_EXT = VK_DYNAMIC_STATE_CULL_MODE, VK_DYNAMIC_STATE_FRONT_FACE_EXT = VK_DYNAMIC_STATE_FRONT_FACE, VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY, @@ -2049,6 +2270,7 @@ typedef enum VkDynamicState { VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE, VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE, VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE, + VK_DYNAMIC_STATE_LINE_STIPPLE_KHR = VK_DYNAMIC_STATE_LINE_STIPPLE, VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF } VkDynamicState; @@ -2173,7 +2395,9 @@ typedef enum VkDescriptorType { VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000, VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM = 1000440000, VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM = 1000440001, + VK_DESCRIPTOR_TYPE_TENSOR_ARM = 1000460000, VK_DESCRIPTOR_TYPE_MUTABLE_EXT = 1000351000, + VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV = 1000570000, VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK, VK_DESCRIPTOR_TYPE_MUTABLE_VALVE = VK_DESCRIPTOR_TYPE_MUTABLE_EXT, VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF @@ -2183,8 +2407,9 @@ typedef enum VkAttachmentLoadOp { VK_ATTACHMENT_LOAD_OP_LOAD = 0, VK_ATTACHMENT_LOAD_OP_CLEAR = 1, VK_ATTACHMENT_LOAD_OP_DONT_CARE = 2, - VK_ATTACHMENT_LOAD_OP_NONE_KHR = 1000400000, - VK_ATTACHMENT_LOAD_OP_NONE_EXT = VK_ATTACHMENT_LOAD_OP_NONE_KHR, + VK_ATTACHMENT_LOAD_OP_NONE = 1000400000, + VK_ATTACHMENT_LOAD_OP_NONE_EXT = VK_ATTACHMENT_LOAD_OP_NONE, + VK_ATTACHMENT_LOAD_OP_NONE_KHR = VK_ATTACHMENT_LOAD_OP_NONE, VK_ATTACHMENT_LOAD_OP_MAX_ENUM = 0x7FFFFFFF } VkAttachmentLoadOp; @@ -2219,10 +2444,11 @@ typedef enum VkCommandBufferLevel { typedef enum VkIndexType { VK_INDEX_TYPE_UINT16 = 0, VK_INDEX_TYPE_UINT32 = 1, + VK_INDEX_TYPE_UINT8 = 1000265000, VK_INDEX_TYPE_NONE_KHR = 1000165000, - VK_INDEX_TYPE_UINT8_KHR = 1000265000, VK_INDEX_TYPE_NONE_NV = VK_INDEX_TYPE_NONE_KHR, - VK_INDEX_TYPE_UINT8_EXT = VK_INDEX_TYPE_UINT8_KHR, + VK_INDEX_TYPE_UINT8_EXT = VK_INDEX_TYPE_UINT8, + VK_INDEX_TYPE_UINT8_KHR = VK_INDEX_TYPE_UINT8, VK_INDEX_TYPE_MAX_ENUM = 0x7FFFFFFF } VkIndexType; @@ -2262,14 +2488,14 @@ typedef enum VkAccessFlagBits { VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000, VK_ACCESS_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000, VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000, - VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000, - VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000, + VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT = 0x00020000, + VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT = 0x00040000, VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR, VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR, VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR, + VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT, + VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT, VK_ACCESS_NONE_KHR = VK_ACCESS_NONE, - VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_EXT = VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV, - VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_EXT = VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV, VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkAccessFlagBits; typedef VkFlags VkAccessFlags; @@ -2361,14 +2587,15 @@ typedef enum VkImageCreateFlagBits { VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00010000, VK_IMAGE_CREATE_MULTISAMPLED_RENDER_TO_SINGLE_SAMPLED_BIT_EXT = 0x00040000, VK_IMAGE_CREATE_2D_VIEW_COMPATIBLE_BIT_EXT = 0x00020000, - VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM = 0x00008000, VK_IMAGE_CREATE_VIDEO_PROFILE_INDEPENDENT_BIT_KHR = 0x00100000, + VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT = 0x00008000, VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT, VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT, VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT, VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT, VK_IMAGE_CREATE_DISJOINT_BIT_KHR = VK_IMAGE_CREATE_DISJOINT_BIT, VK_IMAGE_CREATE_ALIAS_BIT_KHR = VK_IMAGE_CREATE_ALIAS_BIT, + VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM = VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_EXT, VK_IMAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkImageCreateFlagBits; typedef VkFlags VkImageCreateFlags; @@ -2394,12 +2621,12 @@ typedef enum VkImageUsageFlagBits { VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000020, VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = 0x00000040, VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = 0x00000080, + VK_IMAGE_USAGE_HOST_TRANSFER_BIT = 0x00400000, VK_IMAGE_USAGE_VIDEO_DECODE_DST_BIT_KHR = 0x00000400, VK_IMAGE_USAGE_VIDEO_DECODE_SRC_BIT_KHR = 0x00000800, VK_IMAGE_USAGE_VIDEO_DECODE_DPB_BIT_KHR = 0x00001000, VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x00000200, VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00000100, - VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT = 0x00400000, VK_IMAGE_USAGE_VIDEO_ENCODE_DST_BIT_KHR = 0x00002000, VK_IMAGE_USAGE_VIDEO_ENCODE_SRC_BIT_KHR = 0x00004000, VK_IMAGE_USAGE_VIDEO_ENCODE_DPB_BIT_KHR = 0x00008000, @@ -2407,7 +2634,12 @@ typedef enum VkImageUsageFlagBits { VK_IMAGE_USAGE_INVOCATION_MASK_BIT_HUAWEI = 0x00040000, VK_IMAGE_USAGE_SAMPLE_WEIGHT_BIT_QCOM = 0x00100000, VK_IMAGE_USAGE_SAMPLE_BLOCK_MATCH_BIT_QCOM = 0x00200000, + VK_IMAGE_USAGE_TENSOR_ALIASING_BIT_ARM = 0x00800000, + VK_IMAGE_USAGE_TILE_MEMORY_BIT_QCOM = 0x08000000, + VK_IMAGE_USAGE_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x02000000, + VK_IMAGE_USAGE_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR = 0x04000000, VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV = VK_IMAGE_USAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, + VK_IMAGE_USAGE_HOST_TRANSFER_BIT_EXT = VK_IMAGE_USAGE_HOST_TRANSFER_BIT, VK_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkImageUsageFlagBits; typedef VkFlags VkImageUsageFlags; @@ -2421,6 +2653,7 @@ typedef VkFlags VkInstanceCreateFlags; typedef enum VkMemoryHeapFlagBits { VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = 0x00000001, VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = 0x00000002, + VK_MEMORY_HEAP_TILE_MEMORY_BIT_QCOM = 0x00000008, VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT, VK_MEMORY_HEAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkMemoryHeapFlagBits; @@ -2485,16 +2718,16 @@ typedef enum VkPipelineStageFlagBits { VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR = 0x00200000, VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000, VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000, - VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = 0x00020000, VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT = 0x00080000, VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT = 0x00100000, + VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT = 0x00020000, VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR, VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR, VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV = VK_PIPELINE_STAGE_TASK_SHADER_BIT_EXT, VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV = VK_PIPELINE_STAGE_MESH_SHADER_BIT_EXT, + VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT, VK_PIPELINE_STAGE_NONE_KHR = VK_PIPELINE_STAGE_NONE, - VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_EXT = VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV, VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkPipelineStageFlagBits; typedef VkFlags VkPipelineStageFlags; @@ -2551,6 +2784,11 @@ typedef enum VkQueryPipelineStatisticFlagBits { VK_QUERY_PIPELINE_STATISTIC_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkQueryPipelineStatisticFlagBits; typedef VkFlags VkQueryPipelineStatisticFlags; + +typedef enum VkQueryPoolCreateFlagBits { + VK_QUERY_POOL_CREATE_RESET_BIT_KHR = 0x00000001, + VK_QUERY_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkQueryPoolCreateFlagBits; typedef VkFlags VkQueryPoolCreateFlags; typedef enum VkQueryResultFlagBits { @@ -2606,6 +2844,7 @@ typedef enum VkBufferUsageFlagBits { VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 0x04000000, VK_BUFFER_USAGE_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT = 0x00800000, VK_BUFFER_USAGE_MICROMAP_STORAGE_BIT_EXT = 0x01000000, + VK_BUFFER_USAGE_TILE_MEMORY_BIT_QCOM = 0x08000000, VK_BUFFER_USAGE_RAY_TRACING_BIT_NV = VK_BUFFER_USAGE_SHADER_BINDING_TABLE_BIT_KHR, VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR = VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT, @@ -2625,6 +2864,7 @@ typedef VkFlags VkShaderModuleCreateFlags; typedef enum VkPipelineCacheCreateFlagBits { VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT = 0x00000001, + VK_PIPELINE_CACHE_CREATE_INTERNALLY_SYNCHRONIZED_MERGE_BIT_KHR = 0x00000008, VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT, VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkPipelineCacheCreateFlagBits; @@ -2647,6 +2887,8 @@ typedef enum VkPipelineCreateFlagBits { VK_PIPELINE_CREATE_DISPATCH_BASE_BIT = 0x00000010, VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT = 0x00000100, VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT = 0x00000200, + VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT = 0x08000000, + VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT = 0x40000000, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000, VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000, @@ -2671,17 +2913,20 @@ typedef enum VkPipelineCreateFlagBits { #ifdef VK_ENABLE_BETA_EXTENSIONS VK_PIPELINE_CREATE_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV = 0x10000000, #endif - VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT = 0x08000000, - VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT = 0x40000000, + // VK_PIPELINE_CREATE_DISPATCH_BASE is a deprecated alias VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT, - VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE, + VK_PIPELINE_CREATE_DISPATCH_BASE_BIT_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, + // VK_PIPELINE_CREATE_DISPATCH_BASE_KHR is a deprecated alias + VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT, // VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT is a deprecated alias VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT, // VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR is a deprecated alias VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR, VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT, VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT, + VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT_EXT = VK_PIPELINE_CREATE_NO_PROTECTED_ACCESS_BIT, + VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT_EXT = VK_PIPELINE_CREATE_PROTECTED_ACCESS_ONLY_BIT, VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkPipelineCreateFlagBits; typedef VkFlags VkPipelineCreateFlags; @@ -2789,12 +3034,13 @@ typedef VkFlags VkDescriptorPoolResetFlags; typedef enum VkDescriptorSetLayoutCreateFlagBits { VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT = 0x00000002, - VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = 0x00000001, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT = 0x00000001, VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00000010, VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT = 0x00000020, VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x00000080, VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT = 0x00000004, VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV = 0x00000040, + VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT, VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT, VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT, VK_DESCRIPTOR_SET_LAYOUT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF @@ -2812,6 +3058,8 @@ typedef enum VkDependencyFlagBits { VK_DEPENDENCY_DEVICE_GROUP_BIT = 0x00000004, VK_DEPENDENCY_VIEW_LOCAL_BIT = 0x00000002, VK_DEPENDENCY_FEEDBACK_LOOP_BIT_EXT = 0x00000008, + VK_DEPENDENCY_QUEUE_FAMILY_OWNERSHIP_TRANSFER_USE_ALL_STAGES_BIT_KHR = 0x00000020, + VK_DEPENDENCY_ASYMMETRIC_EVENT_BIT_KHR = 0x00000040, VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT, VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR = VK_DEPENDENCY_DEVICE_GROUP_BIT, VK_DEPENDENCY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF @@ -2836,6 +3084,7 @@ typedef enum VkSubpassDescriptionFlagBits { VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002, VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM = 0x00000004, VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM = 0x00000008, + VK_SUBPASS_DESCRIPTION_TILE_SHADING_APRON_BIT_QCOM = 0x00000100, VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_EXT = 0x00000010, VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT = 0x00000020, VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT = 0x00000040, @@ -5012,7 +5261,8 @@ typedef enum VkChromaLocation { typedef enum VkDescriptorUpdateTemplateType { VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = 0, - VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = 1, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS = 1, + VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS, VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET, VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_MAX_ENUM = 0x7FFFFFFF } VkDescriptorUpdateTemplateType; @@ -5026,9 +5276,11 @@ typedef enum VkSubgroupFeatureFlagBits { VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = 0x00000020, VK_SUBGROUP_FEATURE_CLUSTERED_BIT = 0x00000040, VK_SUBGROUP_FEATURE_QUAD_BIT = 0x00000080, + VK_SUBGROUP_FEATURE_ROTATE_BIT = 0x00000200, + VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT = 0x00000400, VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = 0x00000100, - VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR = 0x00000200, - VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR = 0x00000400, + VK_SUBGROUP_FEATURE_ROTATE_BIT_KHR = VK_SUBGROUP_FEATURE_ROTATE_BIT, + VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT_KHR = VK_SUBGROUP_FEATURE_ROTATE_CLUSTERED_BIT, VK_SUBGROUP_FEATURE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkSubgroupFeatureFlagBits; typedef VkFlags VkSubgroupFeatureFlags; @@ -5050,6 +5302,7 @@ typedef enum VkMemoryAllocateFlagBits { VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = 0x00000001, VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT = 0x00000002, VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT = 0x00000004, + VK_MEMORY_ALLOCATE_ZERO_INITIALIZE_BIT_EXT = 0x00000008, VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT, VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT, VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_CAPTURE_REPLAY_BIT, @@ -5074,6 +5327,9 @@ typedef enum VkExternalMemoryHandleTypeFlagBits { VK_EXTERNAL_MEMORY_HANDLE_TYPE_ZIRCON_VMO_BIT_FUCHSIA = 0x00000800, VK_EXTERNAL_MEMORY_HANDLE_TYPE_RDMA_ADDRESS_BIT_NV = 0x00001000, VK_EXTERNAL_MEMORY_HANDLE_TYPE_SCREEN_BUFFER_BIT_QNX = 0x00004000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLBUFFER_BIT_EXT = 0x00010000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLTEXTURE_BIT_EXT = 0x00020000, + VK_EXTERNAL_MEMORY_HANDLE_TYPE_MTLHEAP_BIT_EXT = 0x00040000, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT, VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT, @@ -5857,7 +6113,7 @@ typedef enum VkDriverId { VK_DRIVER_ID_MESA_NVK = 24, VK_DRIVER_ID_IMAGINATION_OPEN_SOURCE_MESA = 25, VK_DRIVER_ID_MESA_HONEYKRISP = 26, - VK_DRIVER_ID_RESERVED_27 = 27, + VK_DRIVER_ID_VULKAN_SC_EMULATION_ON_VULKAN = 27, VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY, VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE, VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV, @@ -5908,12 +6164,14 @@ typedef enum VkResolveModeFlagBits { VK_RESOLVE_MODE_AVERAGE_BIT = 0x00000002, VK_RESOLVE_MODE_MIN_BIT = 0x00000004, VK_RESOLVE_MODE_MAX_BIT = 0x00000008, - VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID = 0x00000010, + VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID = 0x00000010, VK_RESOLVE_MODE_NONE_KHR = VK_RESOLVE_MODE_NONE, VK_RESOLVE_MODE_SAMPLE_ZERO_BIT_KHR = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT, VK_RESOLVE_MODE_AVERAGE_BIT_KHR = VK_RESOLVE_MODE_AVERAGE_BIT, VK_RESOLVE_MODE_MIN_BIT_KHR = VK_RESOLVE_MODE_MIN_BIT, VK_RESOLVE_MODE_MAX_BIT_KHR = VK_RESOLVE_MODE_MAX_BIT, + // VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID is a deprecated alias + VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_ANDROID = VK_RESOLVE_MODE_EXTERNAL_FORMAT_DOWNSAMPLE_BIT_ANDROID, VK_RESOLVE_MODE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF } VkResolveModeFlagBits; typedef VkFlags VkResolveModeFlags; @@ -6622,59 +6880,59 @@ typedef VkFlags64 VkPipelineStageFlags2; // Flag bits for VkPipelineStageFlagBits2 typedef VkFlags64 VkPipelineStageFlagBits2; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE = 0ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT = 0x00000001ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT = 0x00000002ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT = 0x00000004ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT = 0x00000008ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT = 0x00000040ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT = 0x00000080ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT = 0x00000100ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT = 0x00000200ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT = 0x00000800ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT = 0x00001000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT = 0x00001000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT = 0x00002000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT = 0x00004000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT = 0x00008000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT = 0x00010000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT = 0x100000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT = 0x200000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT = 0x400000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT = 0x800000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT = 0x1000000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT = 0x2000000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT = 0x4000000000ULL; -static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 0x04000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 0x08000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000ULL; @@ -6698,57 +6956,60 @@ static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT = 0x40000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI = 0x20000000000ULL; static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV = 0x20000000ULL; +static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CONVERT_COOPERATIVE_VECTOR_MATRIX_BIT_NV = 0x100000000000ULL; typedef VkFlags64 VkAccessFlags2; // Flag bits for VkAccessFlagBits2 typedef VkFlags64 VkAccessFlagBits2; static const VkAccessFlagBits2 VK_ACCESS_2_NONE = 0ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_NONE_KHR = 0ULL; static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT = 0x00000001ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL; static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT = 0x00000002ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL; static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL; static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT = 0x00000008ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL; static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT = 0x00000010ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL; static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT = 0x00000020ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL; static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT = 0x00000040ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL; static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT = 0x00000080ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL; static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL; static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL; static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL; static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT = 0x00000800ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL; static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT = 0x00001000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT = 0x00002000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT = 0x00004000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT = 0x00008000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT = 0x00010000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT = 0x100000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT = 0x200000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT = 0x400000000ULL; -static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 0x800000000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 0x1000000000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 0x2000000000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 0x4000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_TILE_ATTACHMENT_READ_BIT_QCOM = 0x8000000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_TILE_ATTACHMENT_WRITE_BIT_QCOM = 0x10000000000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_NONE_KHR = 0ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL; +static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000ULL; static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000ULL; @@ -6799,59 +7060,33 @@ typedef VkFlags64 VkFormatFeatureFlags2; // Flag bits for VkFormatFeatureFlagBits2 typedef VkFlags64 VkFormatFeatureFlagBits2; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT = 0x00000001ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR = 0x00000001ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT = 0x00000002ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR = 0x00000002ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR = 0x00000004ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT = 0x00000010ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000010ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR = 0x00000020ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT = 0x00000040ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR = 0x00000040ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT = 0x00000080ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR = 0x00000080ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR = 0x00000100ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR = 0x00000200ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT = 0x00000400ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR = 0x00000400ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT = 0x00000800ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR = 0x00000800ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR = 0x00001000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT = 0x00002000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT = 0x00004000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR = 0x00004000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT = 0x00008000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR = 0x00008000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR = 0x00010000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 0x00020000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 0x00040000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 0x00080000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 0x00100000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 0x00200000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT = 0x00400000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR = 0x00400000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT = 0x00800000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR = 0x00800000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT = 0x80000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR = 0x80000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT = 0x100000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR = 0x100000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT = 0x200000000ULL; -static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR = 0x200000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT = 0x00002000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT = 0x400000000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000ULL; @@ -6860,14 +7095,46 @@ static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_HOST_IMAGE_TRANSFER_BIT_EXT = 0x400000000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR = 0x00000001ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR = 0x00000002ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR = 0x00000004ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000010ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR = 0x00000020ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR = 0x00000040ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR = 0x00000080ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR = 0x00000100ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR = 0x00000200ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR = 0x00000400ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR = 0x00000800ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR = 0x00001000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR = 0x00004000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR = 0x00008000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 0x00020000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 0x00040000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 0x00080000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 0x00100000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 0x00200000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR = 0x00400000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR = 0x00800000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR = 0x80000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR = 0x100000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR = 0x200000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR = 0x00010000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_RADIUS_BUFFER_BIT_NV = 0x8000000000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV = 0x4000000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_IMAGE_BIT_QCOM = 0x400000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_WEIGHT_SAMPLED_IMAGE_BIT_QCOM = 0x800000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLOCK_MATCHING_BIT_QCOM = 0x1000000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BOX_FILTER_SAMPLED_BIT_QCOM = 0x2000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_SHADER_BIT_ARM = 0x8000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TENSOR_IMAGE_ALIASING_BIT_ARM = 0x80000000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_IMAGE_BIT_NV = 0x10000000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_VECTOR_BIT_NV = 0x20000000000ULL; static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_OPTICAL_FLOW_COST_BIT_NV = 0x40000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x2000000000000ULL; +static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_EMPHASIS_MAP_BIT_KHR = 0x4000000000000ULL; typedef struct VkPhysicalDeviceVulkan13Features { VkStructureType sType; @@ -7621,60 +7888,793 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements( #endif -// VK_KHR_surface is a preprocessor guard. Do not pass it to API calls. -#define VK_KHR_surface 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) -#define VK_KHR_SURFACE_SPEC_VERSION 25 -#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface" +// VK_VERSION_1_4 is a preprocessor guard. Do not pass it to API calls. +#define VK_VERSION_1_4 1 +// Vulkan 1.4 version number +#define VK_API_VERSION_1_4 VK_MAKE_API_VERSION(0, 1, 4, 0)// Patch version should always be set to 0 + +#define VK_MAX_GLOBAL_PRIORITY_SIZE 16U + +typedef enum VkPipelineRobustnessBufferBehavior { + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT = 0, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED = 1, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS = 2, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2 = 3, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2, + VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF +} VkPipelineRobustnessBufferBehavior; + +typedef enum VkPipelineRobustnessImageBehavior { + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT = 0, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED = 1, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS = 2, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2 = 3, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2, + VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_MAX_ENUM = 0x7FFFFFFF +} VkPipelineRobustnessImageBehavior; + +typedef enum VkQueueGlobalPriority { + VK_QUEUE_GLOBAL_PRIORITY_LOW = 128, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM = 256, + VK_QUEUE_GLOBAL_PRIORITY_HIGH = 512, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME = 1024, + VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = VK_QUEUE_GLOBAL_PRIORITY_LOW, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM, + VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = VK_QUEUE_GLOBAL_PRIORITY_HIGH, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = VK_QUEUE_GLOBAL_PRIORITY_REALTIME, + VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR = VK_QUEUE_GLOBAL_PRIORITY_LOW, + VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM, + VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR = VK_QUEUE_GLOBAL_PRIORITY_HIGH, + VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR = VK_QUEUE_GLOBAL_PRIORITY_REALTIME, + VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM = 0x7FFFFFFF +} VkQueueGlobalPriority; + +typedef enum VkLineRasterizationMode { + VK_LINE_RASTERIZATION_MODE_DEFAULT = 0, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR = 1, + VK_LINE_RASTERIZATION_MODE_BRESENHAM = 2, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH = 3, + VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = VK_LINE_RASTERIZATION_MODE_DEFAULT, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR, + VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = VK_LINE_RASTERIZATION_MODE_BRESENHAM, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, + VK_LINE_RASTERIZATION_MODE_DEFAULT_KHR = VK_LINE_RASTERIZATION_MODE_DEFAULT, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_KHR = VK_LINE_RASTERIZATION_MODE_RECTANGULAR, + VK_LINE_RASTERIZATION_MODE_BRESENHAM_KHR = VK_LINE_RASTERIZATION_MODE_BRESENHAM, + VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH, + VK_LINE_RASTERIZATION_MODE_MAX_ENUM = 0x7FFFFFFF +} VkLineRasterizationMode; + +typedef enum VkMemoryUnmapFlagBits { + VK_MEMORY_UNMAP_RESERVE_BIT_EXT = 0x00000001, + VK_MEMORY_UNMAP_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkMemoryUnmapFlagBits; +typedef VkFlags VkMemoryUnmapFlags; +typedef VkFlags64 VkPipelineCreateFlags2; + +// Flag bits for VkPipelineCreateFlagBits2 +typedef VkFlags64 VkPipelineCreateFlagBits2; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT = 0x00000001ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT = 0x00000002ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DERIVATIVE_BIT = 0x00000004ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT = 0x00000010ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT = 0x00000100ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT = 0x00000200ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT = 0x08000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT = 0x40000000ULL; +#ifdef VK_ENABLE_BETA_EXTENSIONS +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX = 0x100000000ULL; +#endif +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_BUILT_IN_PRIMITIVES_BIT_KHR = 0x00001000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_SPHERES_AND_LINEAR_SWEPT_SPHERES_BIT_NV = 0x200000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT = 0x400000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT_KHR = 0x00000001ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR = 0x00000002ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR = 0x00000004ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = 0x00000008ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHR = 0x00000010ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NV = 0x00000020ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHR = 0x00000040ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR = 0x00000100ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR = 0x00000200ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT = 0x00000400ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT = 0x00800000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR = 0x00000800ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 0x00001000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHR = 0x00002000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 0x00020000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 0x00080000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NV = 0x00040000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NV = 0x00100000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00200000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00400000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT = 0x01000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x02000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x04000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT = 0x08000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT = 0x40000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV = 0x10000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT = 0x20000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_DISALLOW_OPACITY_MICROMAP_BIT_ARM = 0x2000000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR = 0x80000000ULL; +static const VkPipelineCreateFlagBits2 VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT = 0x4000000000ULL; + +typedef VkFlags64 VkBufferUsageFlags2; + +// Flag bits for VkBufferUsageFlagBits2 +typedef VkFlags64 VkBufferUsageFlagBits2; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT = 0x00000001ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_DST_BIT = 0x00000002ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT = 0x00000004ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT = 0x00000008ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT = 0x00000010ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT = 0x00000020ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT = 0x00000040ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT = 0x00000080ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT = 0x00000100ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT = 0x00020000ULL; +#ifdef VK_ENABLE_BETA_EXTENSIONS +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX = 0x02000000ULL; +#endif +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR = 0x00000001ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR = 0x00000002ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000004ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR = 0x00000010ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR = 0x00000020ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR = 0x00000040ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR = 0x00000080ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR = 0x00000100ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR = 0x00000400ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_RAY_TRACING_BIT_NV = 0x00000400ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR = 0x00004000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR = 0x00020000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 0x00080000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 0x00100000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT = 0x00200000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00400000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 0x04000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT = 0x00800000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT = 0x01000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_TILE_MEMORY_BIT_QCOM = 0x08000000ULL; +static const VkBufferUsageFlagBits2 VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT = 0x80000000ULL; + + +typedef enum VkHostImageCopyFlagBits { + VK_HOST_IMAGE_COPY_MEMCPY_BIT = 0x00000001, + // VK_HOST_IMAGE_COPY_MEMCPY is a deprecated alias + VK_HOST_IMAGE_COPY_MEMCPY = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + VK_HOST_IMAGE_COPY_MEMCPY_BIT_EXT = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + // VK_HOST_IMAGE_COPY_MEMCPY_EXT is a deprecated alias + VK_HOST_IMAGE_COPY_MEMCPY_EXT = VK_HOST_IMAGE_COPY_MEMCPY_BIT, + VK_HOST_IMAGE_COPY_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF +} VkHostImageCopyFlagBits; +typedef VkFlags VkHostImageCopyFlags; +typedef struct VkPhysicalDeviceVulkan14Features { + VkStructureType sType; + void* pNext; + VkBool32 globalPriorityQuery; + VkBool32 shaderSubgroupRotate; + VkBool32 shaderSubgroupRotateClustered; + VkBool32 shaderFloatControls2; + VkBool32 shaderExpectAssume; + VkBool32 rectangularLines; + VkBool32 bresenhamLines; + VkBool32 smoothLines; + VkBool32 stippledRectangularLines; + VkBool32 stippledBresenhamLines; + VkBool32 stippledSmoothLines; + VkBool32 vertexAttributeInstanceRateDivisor; + VkBool32 vertexAttributeInstanceRateZeroDivisor; + VkBool32 indexTypeUint8; + VkBool32 dynamicRenderingLocalRead; + VkBool32 maintenance5; + VkBool32 maintenance6; + VkBool32 pipelineProtectedAccess; + VkBool32 pipelineRobustness; + VkBool32 hostImageCopy; + VkBool32 pushDescriptor; +} VkPhysicalDeviceVulkan14Features; -typedef enum VkPresentModeKHR { - VK_PRESENT_MODE_IMMEDIATE_KHR = 0, - VK_PRESENT_MODE_MAILBOX_KHR = 1, - VK_PRESENT_MODE_FIFO_KHR = 2, - VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3, - VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000, - VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001, - VK_PRESENT_MODE_FIFO_LATEST_READY_EXT = 1000361000, - VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkPresentModeKHR; +typedef struct VkPhysicalDeviceVulkan14Properties { + VkStructureType sType; + void* pNext; + uint32_t lineSubPixelPrecisionBits; + uint32_t maxVertexAttribDivisor; + VkBool32 supportsNonZeroFirstInstance; + uint32_t maxPushDescriptors; + VkBool32 dynamicRenderingLocalReadDepthStencilAttachments; + VkBool32 dynamicRenderingLocalReadMultisampledAttachments; + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting; + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting; + VkBool32 depthStencilSwizzleOneSupport; + VkBool32 polygonModePointSize; + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram; + VkBool32 nonStrictWideLinesUseParallelogram; + VkBool32 blockTexelViewCompatibleMultipleLayers; + uint32_t maxCombinedImageSamplerDescriptorCount; + VkBool32 fragmentShadingRateClampCombinerInputs; + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs; + VkPipelineRobustnessImageBehavior defaultRobustnessImages; + uint32_t copySrcLayoutCount; + VkImageLayout* pCopySrcLayouts; + uint32_t copyDstLayoutCount; + VkImageLayout* pCopyDstLayouts; + uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE]; + VkBool32 identicalMemoryTypeRequirements; +} VkPhysicalDeviceVulkan14Properties; + +typedef struct VkDeviceQueueGlobalPriorityCreateInfo { + VkStructureType sType; + const void* pNext; + VkQueueGlobalPriority globalPriority; +} VkDeviceQueueGlobalPriorityCreateInfo; -typedef enum VkColorSpaceKHR { - VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0, - VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001, - VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002, - VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003, - VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004, - VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005, - VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006, - VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007, - VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008, - // VK_COLOR_SPACE_DOLBYVISION_EXT is deprecated, but no reason was given in the API XML - VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009, - VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010, - VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011, - VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012, - VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013, - VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014, - VK_COLOR_SPACE_DISPLAY_NATIVE_AMD = 1000213000, - // VK_COLORSPACE_SRGB_NONLINEAR_KHR is a deprecated alias - VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, - // VK_COLOR_SPACE_DCI_P3_LINEAR_EXT is a deprecated alias - VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, - VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkColorSpaceKHR; +typedef struct VkPhysicalDeviceGlobalPriorityQueryFeatures { + VkStructureType sType; + void* pNext; + VkBool32 globalPriorityQuery; +} VkPhysicalDeviceGlobalPriorityQueryFeatures; -typedef enum VkSurfaceTransformFlagBitsKHR { - VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001, - VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002, - VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004, - VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008, - VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010, - VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020, - VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040, - VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080, - VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100, - VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkSurfaceTransformFlagBitsKHR; +typedef struct VkQueueFamilyGlobalPriorityProperties { + VkStructureType sType; + void* pNext; + uint32_t priorityCount; + VkQueueGlobalPriority priorities[VK_MAX_GLOBAL_PRIORITY_SIZE]; +} VkQueueFamilyGlobalPriorityProperties; + +typedef struct VkPhysicalDeviceShaderSubgroupRotateFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderSubgroupRotate; + VkBool32 shaderSubgroupRotateClustered; +} VkPhysicalDeviceShaderSubgroupRotateFeatures; + +typedef struct VkPhysicalDeviceShaderFloatControls2Features { + VkStructureType sType; + void* pNext; + VkBool32 shaderFloatControls2; +} VkPhysicalDeviceShaderFloatControls2Features; + +typedef struct VkPhysicalDeviceShaderExpectAssumeFeatures { + VkStructureType sType; + void* pNext; + VkBool32 shaderExpectAssume; +} VkPhysicalDeviceShaderExpectAssumeFeatures; + +typedef struct VkPhysicalDeviceLineRasterizationFeatures { + VkStructureType sType; + void* pNext; + VkBool32 rectangularLines; + VkBool32 bresenhamLines; + VkBool32 smoothLines; + VkBool32 stippledRectangularLines; + VkBool32 stippledBresenhamLines; + VkBool32 stippledSmoothLines; +} VkPhysicalDeviceLineRasterizationFeatures; + +typedef struct VkPhysicalDeviceLineRasterizationProperties { + VkStructureType sType; + void* pNext; + uint32_t lineSubPixelPrecisionBits; +} VkPhysicalDeviceLineRasterizationProperties; + +typedef struct VkPipelineRasterizationLineStateCreateInfo { + VkStructureType sType; + const void* pNext; + VkLineRasterizationMode lineRasterizationMode; + VkBool32 stippledLineEnable; + uint32_t lineStippleFactor; + uint16_t lineStipplePattern; +} VkPipelineRasterizationLineStateCreateInfo; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorProperties { + VkStructureType sType; + void* pNext; + uint32_t maxVertexAttribDivisor; + VkBool32 supportsNonZeroFirstInstance; +} VkPhysicalDeviceVertexAttributeDivisorProperties; + +typedef struct VkVertexInputBindingDivisorDescription { + uint32_t binding; + uint32_t divisor; +} VkVertexInputBindingDivisorDescription; + +typedef struct VkPipelineVertexInputDivisorStateCreateInfo { + VkStructureType sType; + const void* pNext; + uint32_t vertexBindingDivisorCount; + const VkVertexInputBindingDivisorDescription* pVertexBindingDivisors; +} VkPipelineVertexInputDivisorStateCreateInfo; + +typedef struct VkPhysicalDeviceVertexAttributeDivisorFeatures { + VkStructureType sType; + void* pNext; + VkBool32 vertexAttributeInstanceRateDivisor; + VkBool32 vertexAttributeInstanceRateZeroDivisor; +} VkPhysicalDeviceVertexAttributeDivisorFeatures; + +typedef struct VkPhysicalDeviceIndexTypeUint8Features { + VkStructureType sType; + void* pNext; + VkBool32 indexTypeUint8; +} VkPhysicalDeviceIndexTypeUint8Features; + +typedef struct VkMemoryMapInfo { + VkStructureType sType; + const void* pNext; + VkMemoryMapFlags flags; + VkDeviceMemory memory; + VkDeviceSize offset; + VkDeviceSize size; +} VkMemoryMapInfo; + +typedef struct VkMemoryUnmapInfo { + VkStructureType sType; + const void* pNext; + VkMemoryUnmapFlags flags; + VkDeviceMemory memory; +} VkMemoryUnmapInfo; + +typedef struct VkPhysicalDeviceMaintenance5Features { + VkStructureType sType; + void* pNext; + VkBool32 maintenance5; +} VkPhysicalDeviceMaintenance5Features; + +typedef struct VkPhysicalDeviceMaintenance5Properties { + VkStructureType sType; + void* pNext; + VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting; + VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting; + VkBool32 depthStencilSwizzleOneSupport; + VkBool32 polygonModePointSize; + VkBool32 nonStrictSinglePixelWideLinesUseParallelogram; + VkBool32 nonStrictWideLinesUseParallelogram; +} VkPhysicalDeviceMaintenance5Properties; + +typedef struct VkRenderingAreaInfo { + VkStructureType sType; + const void* pNext; + uint32_t viewMask; + uint32_t colorAttachmentCount; + const VkFormat* pColorAttachmentFormats; + VkFormat depthAttachmentFormat; + VkFormat stencilAttachmentFormat; +} VkRenderingAreaInfo; + +typedef struct VkImageSubresource2 { + VkStructureType sType; + void* pNext; + VkImageSubresource imageSubresource; +} VkImageSubresource2; + +typedef struct VkDeviceImageSubresourceInfo { + VkStructureType sType; + const void* pNext; + const VkImageCreateInfo* pCreateInfo; + const VkImageSubresource2* pSubresource; +} VkDeviceImageSubresourceInfo; + +typedef struct VkSubresourceLayout2 { + VkStructureType sType; + void* pNext; + VkSubresourceLayout subresourceLayout; +} VkSubresourceLayout2; + +typedef struct VkPipelineCreateFlags2CreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineCreateFlags2 flags; +} VkPipelineCreateFlags2CreateInfo; + +typedef struct VkBufferUsageFlags2CreateInfo { + VkStructureType sType; + const void* pNext; + VkBufferUsageFlags2 usage; +} VkBufferUsageFlags2CreateInfo; + +typedef struct VkPhysicalDevicePushDescriptorProperties { + VkStructureType sType; + void* pNext; + uint32_t maxPushDescriptors; +} VkPhysicalDevicePushDescriptorProperties; + +typedef struct VkPhysicalDeviceDynamicRenderingLocalReadFeatures { + VkStructureType sType; + void* pNext; + VkBool32 dynamicRenderingLocalRead; +} VkPhysicalDeviceDynamicRenderingLocalReadFeatures; + +typedef struct VkRenderingAttachmentLocationInfo { + VkStructureType sType; + const void* pNext; + uint32_t colorAttachmentCount; + const uint32_t* pColorAttachmentLocations; +} VkRenderingAttachmentLocationInfo; + +typedef struct VkRenderingInputAttachmentIndexInfo { + VkStructureType sType; + const void* pNext; + uint32_t colorAttachmentCount; + const uint32_t* pColorAttachmentInputIndices; + const uint32_t* pDepthInputAttachmentIndex; + const uint32_t* pStencilInputAttachmentIndex; +} VkRenderingInputAttachmentIndexInfo; + +typedef struct VkPhysicalDeviceMaintenance6Features { + VkStructureType sType; + void* pNext; + VkBool32 maintenance6; +} VkPhysicalDeviceMaintenance6Features; + +typedef struct VkPhysicalDeviceMaintenance6Properties { + VkStructureType sType; + void* pNext; + VkBool32 blockTexelViewCompatibleMultipleLayers; + uint32_t maxCombinedImageSamplerDescriptorCount; + VkBool32 fragmentShadingRateClampCombinerInputs; +} VkPhysicalDeviceMaintenance6Properties; + +typedef struct VkBindMemoryStatus { + VkStructureType sType; + const void* pNext; + VkResult* pResult; +} VkBindMemoryStatus; + +typedef struct VkBindDescriptorSetsInfo { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t firstSet; + uint32_t descriptorSetCount; + const VkDescriptorSet* pDescriptorSets; + uint32_t dynamicOffsetCount; + const uint32_t* pDynamicOffsets; +} VkBindDescriptorSetsInfo; + +typedef struct VkPushConstantsInfo { + VkStructureType sType; + const void* pNext; + VkPipelineLayout layout; + VkShaderStageFlags stageFlags; + uint32_t offset; + uint32_t size; + const void* pValues; +} VkPushConstantsInfo; + +typedef struct VkPushDescriptorSetInfo { + VkStructureType sType; + const void* pNext; + VkShaderStageFlags stageFlags; + VkPipelineLayout layout; + uint32_t set; + uint32_t descriptorWriteCount; + const VkWriteDescriptorSet* pDescriptorWrites; +} VkPushDescriptorSetInfo; + +typedef struct VkPushDescriptorSetWithTemplateInfo { + VkStructureType sType; + const void* pNext; + VkDescriptorUpdateTemplate descriptorUpdateTemplate; + VkPipelineLayout layout; + uint32_t set; + const void* pData; +} VkPushDescriptorSetWithTemplateInfo; + +typedef struct VkPhysicalDevicePipelineProtectedAccessFeatures { + VkStructureType sType; + void* pNext; + VkBool32 pipelineProtectedAccess; +} VkPhysicalDevicePipelineProtectedAccessFeatures; + +typedef struct VkPhysicalDevicePipelineRobustnessFeatures { + VkStructureType sType; + void* pNext; + VkBool32 pipelineRobustness; +} VkPhysicalDevicePipelineRobustnessFeatures; + +typedef struct VkPhysicalDevicePipelineRobustnessProperties { + VkStructureType sType; + void* pNext; + VkPipelineRobustnessBufferBehavior defaultRobustnessStorageBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessUniformBuffers; + VkPipelineRobustnessBufferBehavior defaultRobustnessVertexInputs; + VkPipelineRobustnessImageBehavior defaultRobustnessImages; +} VkPhysicalDevicePipelineRobustnessProperties; + +typedef struct VkPipelineRobustnessCreateInfo { + VkStructureType sType; + const void* pNext; + VkPipelineRobustnessBufferBehavior storageBuffers; + VkPipelineRobustnessBufferBehavior uniformBuffers; + VkPipelineRobustnessBufferBehavior vertexInputs; + VkPipelineRobustnessImageBehavior images; +} VkPipelineRobustnessCreateInfo; + +typedef struct VkPhysicalDeviceHostImageCopyFeatures { + VkStructureType sType; + void* pNext; + VkBool32 hostImageCopy; +} VkPhysicalDeviceHostImageCopyFeatures; + +typedef struct VkPhysicalDeviceHostImageCopyProperties { + VkStructureType sType; + void* pNext; + uint32_t copySrcLayoutCount; + VkImageLayout* pCopySrcLayouts; + uint32_t copyDstLayoutCount; + VkImageLayout* pCopyDstLayouts; + uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE]; + VkBool32 identicalMemoryTypeRequirements; +} VkPhysicalDeviceHostImageCopyProperties; + +typedef struct VkMemoryToImageCopy { + VkStructureType sType; + const void* pNext; + const void* pHostPointer; + uint32_t memoryRowLength; + uint32_t memoryImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkMemoryToImageCopy; + +typedef struct VkImageToMemoryCopy { + VkStructureType sType; + const void* pNext; + void* pHostPointer; + uint32_t memoryRowLength; + uint32_t memoryImageHeight; + VkImageSubresourceLayers imageSubresource; + VkOffset3D imageOffset; + VkExtent3D imageExtent; +} VkImageToMemoryCopy; + +typedef struct VkCopyMemoryToImageInfo { + VkStructureType sType; + const void* pNext; + VkHostImageCopyFlags flags; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkMemoryToImageCopy* pRegions; +} VkCopyMemoryToImageInfo; + +typedef struct VkCopyImageToMemoryInfo { + VkStructureType sType; + const void* pNext; + VkHostImageCopyFlags flags; + VkImage srcImage; + VkImageLayout srcImageLayout; + uint32_t regionCount; + const VkImageToMemoryCopy* pRegions; +} VkCopyImageToMemoryInfo; + +typedef struct VkCopyImageToImageInfo { + VkStructureType sType; + const void* pNext; + VkHostImageCopyFlags flags; + VkImage srcImage; + VkImageLayout srcImageLayout; + VkImage dstImage; + VkImageLayout dstImageLayout; + uint32_t regionCount; + const VkImageCopy2* pRegions; +} VkCopyImageToImageInfo; + +typedef struct VkHostImageLayoutTransitionInfo { + VkStructureType sType; + const void* pNext; + VkImage image; + VkImageLayout oldLayout; + VkImageLayout newLayout; + VkImageSubresourceRange subresourceRange; +} VkHostImageLayoutTransitionInfo; + +typedef struct VkSubresourceHostMemcpySize { + VkStructureType sType; + void* pNext; + VkDeviceSize size; +} VkSubresourceHostMemcpySize; + +typedef struct VkHostImageCopyDevicePerformanceQuery { + VkStructureType sType; + void* pNext; + VkBool32 optimalDeviceAccess; + VkBool32 identicalMemoryLayout; +} VkHostImageCopyDevicePerformanceQuery; + +typedef void (VKAPI_PTR *PFN_vkCmdSetLineStipple)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); +typedef VkResult (VKAPI_PTR *PFN_vkMapMemory2)(VkDevice device, const VkMemoryMapInfo* pMemoryMapInfo, void** ppData); +typedef VkResult (VKAPI_PTR *PFN_vkUnmapMemory2)(VkDevice device, const VkMemoryUnmapInfo* pMemoryUnmapInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer2)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType); +typedef void (VKAPI_PTR *PFN_vkGetRenderingAreaGranularity)(VkDevice device, const VkRenderingAreaInfo* pRenderingAreaInfo, VkExtent2D* pGranularity); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSubresourceLayout)(VkDevice device, const VkDeviceImageSubresourceInfo* pInfo, VkSubresourceLayout2* pLayout); +typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2)(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSet)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplate)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData); +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingAttachmentLocations)(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo); +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingInputAttachmentIndices)(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets2)(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushConstants2)(VkCommandBuffer commandBuffer, const VkPushConstantsInfo* pPushConstantsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSet2)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplate2)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToImage)(VkDevice device, const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToMemory)(VkDevice device, const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToImage)(VkDevice device, const VkCopyImageToImageInfo* pCopyImageToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkTransitionImageLayout)(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo* pTransitions); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdSetLineStipple( + VkCommandBuffer commandBuffer, + uint32_t lineStippleFactor, + uint16_t lineStipplePattern); + +VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2( + VkDevice device, + const VkMemoryMapInfo* pMemoryMapInfo, + void** ppData); + +VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2( + VkDevice device, + const VkMemoryUnmapInfo* pMemoryUnmapInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2( + VkCommandBuffer commandBuffer, + VkBuffer buffer, + VkDeviceSize offset, + VkDeviceSize size, + VkIndexType indexType); + +VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularity( + VkDevice device, + const VkRenderingAreaInfo* pRenderingAreaInfo, + VkExtent2D* pGranularity); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayout( + VkDevice device, + const VkDeviceImageSubresourceInfo* pInfo, + VkSubresourceLayout2* pLayout); + +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet( + VkCommandBuffer commandBuffer, + VkPipelineBindPoint pipelineBindPoint, + VkPipelineLayout layout, + uint32_t set, + uint32_t descriptorWriteCount, + const VkWriteDescriptorSet* pDescriptorWrites); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate( + VkCommandBuffer commandBuffer, + VkDescriptorUpdateTemplate descriptorUpdateTemplate, + VkPipelineLayout layout, + uint32_t set, + const void* pData); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocations( + VkCommandBuffer commandBuffer, + const VkRenderingAttachmentLocationInfo* pLocationInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndices( + VkCommandBuffer commandBuffer, + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2( + VkCommandBuffer commandBuffer, + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2( + VkCommandBuffer commandBuffer, + const VkPushConstantsInfo* pPushConstantsInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate2( + VkCommandBuffer commandBuffer, + const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImage( + VkDevice device, + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemory( + VkDevice device, + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImage( + VkDevice device, + const VkCopyImageToImageInfo* pCopyImageToImageInfo); + +VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayout( + VkDevice device, + uint32_t transitionCount, + const VkHostImageLayoutTransitionInfo* pTransitions); +#endif + + +// VK_KHR_surface is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_surface 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) +#define VK_KHR_SURFACE_SPEC_VERSION 25 +#define VK_KHR_SURFACE_EXTENSION_NAME "VK_KHR_surface" + +typedef enum VkPresentModeKHR { + VK_PRESENT_MODE_IMMEDIATE_KHR = 0, + VK_PRESENT_MODE_MAILBOX_KHR = 1, + VK_PRESENT_MODE_FIFO_KHR = 2, + VK_PRESENT_MODE_FIFO_RELAXED_KHR = 3, + VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = 1000111000, + VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = 1000111001, + VK_PRESENT_MODE_FIFO_LATEST_READY_EXT = 1000361000, + VK_PRESENT_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkPresentModeKHR; + +typedef enum VkColorSpaceKHR { + VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = 0, + VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = 1000104001, + VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = 1000104002, + VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT = 1000104003, + VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = 1000104004, + VK_COLOR_SPACE_BT709_LINEAR_EXT = 1000104005, + VK_COLOR_SPACE_BT709_NONLINEAR_EXT = 1000104006, + VK_COLOR_SPACE_BT2020_LINEAR_EXT = 1000104007, + VK_COLOR_SPACE_HDR10_ST2084_EXT = 1000104008, + // VK_COLOR_SPACE_DOLBYVISION_EXT is deprecated, but no reason was given in the API XML + VK_COLOR_SPACE_DOLBYVISION_EXT = 1000104009, + VK_COLOR_SPACE_HDR10_HLG_EXT = 1000104010, + VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = 1000104011, + VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = 1000104012, + VK_COLOR_SPACE_PASS_THROUGH_EXT = 1000104013, + VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = 1000104014, + VK_COLOR_SPACE_DISPLAY_NATIVE_AMD = 1000213000, + // VK_COLORSPACE_SRGB_NONLINEAR_KHR is a deprecated alias + VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR, + // VK_COLOR_SPACE_DCI_P3_LINEAR_EXT is a deprecated alias + VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT, + VK_COLOR_SPACE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkColorSpaceKHR; + +typedef enum VkSurfaceTransformFlagBitsKHR { + VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = 0x00000001, + VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = 0x00000002, + VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = 0x00000004, + VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = 0x00000008, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = 0x00000010, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = 0x00000020, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = 0x00000040, + VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = 0x00000080, + VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = 0x00000100, + VK_SURFACE_TRANSFORM_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkSurfaceTransformFlagBitsKHR; typedef enum VkCompositeAlphaFlagBitsKHR { VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = 0x00000001, @@ -7751,6 +8751,8 @@ typedef enum VkSwapchainCreateFlagBitsKHR { VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = 0x00000002, VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR = 0x00000004, VK_SWAPCHAIN_CREATE_DEFERRED_MEMORY_ALLOCATION_BIT_EXT = 0x00000008, + VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR = 0x00000040, + VK_SWAPCHAIN_CREATE_PRESENT_WAIT_2_BIT_KHR = 0x00000080, VK_SWAPCHAIN_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkSwapchainCreateFlagBitsKHR; typedef VkFlags VkSwapchainCreateFlagsKHR; @@ -8079,6 +9081,8 @@ typedef enum VkVideoCodecOperationFlagBitsKHR { VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_KHR = 0x00000001, VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_KHR = 0x00000002, VK_VIDEO_CODEC_OPERATION_DECODE_AV1_BIT_KHR = 0x00000004, + VK_VIDEO_CODEC_OPERATION_ENCODE_AV1_BIT_KHR = 0x00040000, + VK_VIDEO_CODEC_OPERATION_DECODE_VP9_BIT_KHR = 0x00000008, VK_VIDEO_CODEC_OPERATION_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoCodecOperationFlagBitsKHR; typedef VkFlags VkVideoCodecOperationFlagsKHR; @@ -8113,9 +9117,17 @@ typedef enum VkVideoSessionCreateFlagBitsKHR { VK_VIDEO_SESSION_CREATE_PROTECTED_CONTENT_BIT_KHR = 0x00000001, VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_PARAMETER_OPTIMIZATIONS_BIT_KHR = 0x00000002, VK_VIDEO_SESSION_CREATE_INLINE_QUERIES_BIT_KHR = 0x00000004, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x00000008, + VK_VIDEO_SESSION_CREATE_ALLOW_ENCODE_EMPHASIS_MAP_BIT_KHR = 0x00000010, + VK_VIDEO_SESSION_CREATE_INLINE_SESSION_PARAMETERS_BIT_KHR = 0x00000020, VK_VIDEO_SESSION_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoSessionCreateFlagBitsKHR; typedef VkFlags VkVideoSessionCreateFlagsKHR; + +typedef enum VkVideoSessionParametersCreateFlagBitsKHR { + VK_VIDEO_SESSION_PARAMETERS_CREATE_QUANTIZATION_MAP_COMPATIBLE_BIT_KHR = 0x00000001, + VK_VIDEO_SESSION_PARAMETERS_CREATE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoSessionParametersCreateFlagBitsKHR; typedef VkFlags VkVideoSessionParametersCreateFlagsKHR; typedef VkFlags VkVideoBeginCodingFlagsKHR; typedef VkFlags VkVideoEndCodingFlagsKHR; @@ -8418,6 +9430,7 @@ typedef enum VkVideoEncodeH264CapabilityFlagBitsKHR { VK_VIDEO_ENCODE_H264_CAPABILITY_PER_PICTURE_TYPE_MIN_MAX_QP_BIT_KHR = 0x00000040, VK_VIDEO_ENCODE_H264_CAPABILITY_PER_SLICE_CONSTANT_QP_BIT_KHR = 0x00000080, VK_VIDEO_ENCODE_H264_CAPABILITY_GENERATE_PREFIX_NALU_BIT_KHR = 0x00000100, + VK_VIDEO_ENCODE_H264_CAPABILITY_MB_QP_DIFF_WRAPAROUND_BIT_KHR = 0x00000200, VK_VIDEO_ENCODE_H264_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoEncodeH264CapabilityFlagBitsKHR; typedef VkFlags VkVideoEncodeH264CapabilityFlagsKHR; @@ -8618,6 +9631,7 @@ typedef enum VkVideoEncodeH265CapabilityFlagBitsKHR { VK_VIDEO_ENCODE_H265_CAPABILITY_PER_SLICE_SEGMENT_CONSTANT_QP_BIT_KHR = 0x00000080, VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_TILES_PER_SLICE_SEGMENT_BIT_KHR = 0x00000100, VK_VIDEO_ENCODE_H265_CAPABILITY_MULTIPLE_SLICE_SEGMENTS_PER_TILE_BIT_KHR = 0x00000200, + VK_VIDEO_ENCODE_H265_CAPABILITY_CU_QP_DIFF_WRAPAROUND_BIT_KHR = 0x00000400, VK_VIDEO_ENCODE_H265_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoEncodeH265CapabilityFlagBitsKHR; typedef VkFlags VkVideoEncodeH265CapabilityFlagsKHR; @@ -9258,11 +10272,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreFdKHR( #define VK_KHR_push_descriptor 1 #define VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION 2 #define VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME "VK_KHR_push_descriptor" -typedef struct VkPhysicalDevicePushDescriptorPropertiesKHR { - VkStructureType sType; - void* pNext; - uint32_t maxPushDescriptors; -} VkPhysicalDevicePushDescriptorPropertiesKHR; +typedef VkPhysicalDevicePushDescriptorProperties VkPhysicalDevicePushDescriptorPropertiesKHR; typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetKHR)(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipelineLayout layout, uint32_t set, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites); typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplateKHR)(VkCommandBuffer commandBuffer, VkDescriptorUpdateTemplate descriptorUpdateTemplate, VkPipelineLayout layout, uint32_t set, const void* pData); @@ -9816,6 +10826,20 @@ typedef VkMemoryDedicatedAllocateInfo VkMemoryDedicatedAllocateInfoKHR; #define VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME "VK_KHR_storage_buffer_storage_class" +// VK_KHR_shader_bfloat16 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_shader_bfloat16 1 +#define VK_KHR_SHADER_BFLOAT16_SPEC_VERSION 1 +#define VK_KHR_SHADER_BFLOAT16_EXTENSION_NAME "VK_KHR_shader_bfloat16" +typedef struct VkPhysicalDeviceShaderBfloat16FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 shaderBFloat16Type; + VkBool32 shaderBFloat16DotProduct; + VkBool32 shaderBFloat16CooperativeMatrix; +} VkPhysicalDeviceShaderBfloat16FeaturesKHR; + + + // VK_KHR_relaxed_block_layout is a preprocessor guard. Do not pass it to API calls. #define VK_KHR_relaxed_block_layout 1 #define VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION 1 @@ -10074,39 +11098,16 @@ typedef struct VkVideoDecodeH265DpbSlotInfoKHR { // VK_KHR_global_priority is a preprocessor guard. Do not pass it to API calls. #define VK_KHR_global_priority 1 -#define VK_MAX_GLOBAL_PRIORITY_SIZE_KHR 16U #define VK_KHR_GLOBAL_PRIORITY_SPEC_VERSION 1 #define VK_KHR_GLOBAL_PRIORITY_EXTENSION_NAME "VK_KHR_global_priority" +#define VK_MAX_GLOBAL_PRIORITY_SIZE_KHR VK_MAX_GLOBAL_PRIORITY_SIZE +typedef VkQueueGlobalPriority VkQueueGlobalPriorityKHR; -typedef enum VkQueueGlobalPriorityKHR { - VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR = 128, - VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR = 256, - VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR = 512, - VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR = 1024, - VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR, - VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR, - VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR, - VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR, - VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_KHR = 0x7FFFFFFF -} VkQueueGlobalPriorityKHR; -typedef struct VkDeviceQueueGlobalPriorityCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkQueueGlobalPriorityKHR globalPriority; -} VkDeviceQueueGlobalPriorityCreateInfoKHR; +typedef VkDeviceQueueGlobalPriorityCreateInfo VkDeviceQueueGlobalPriorityCreateInfoKHR; -typedef struct VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 globalPriorityQuery; -} VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR; +typedef VkPhysicalDeviceGlobalPriorityQueryFeatures VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR; -typedef struct VkQueueFamilyGlobalPriorityPropertiesKHR { - VkStructureType sType; - void* pNext; - uint32_t priorityCount; - VkQueueGlobalPriorityKHR priorities[VK_MAX_GLOBAL_PRIORITY_SIZE_KHR]; -} VkQueueFamilyGlobalPriorityPropertiesKHR; +typedef VkQueueFamilyGlobalPriorityProperties VkQueueFamilyGlobalPriorityPropertiesKHR; @@ -10305,39 +11306,23 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetFragmentShadingRateKHR( #define VK_KHR_dynamic_rendering_local_read 1 #define VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_SPEC_VERSION 1 #define VK_KHR_DYNAMIC_RENDERING_LOCAL_READ_EXTENSION_NAME "VK_KHR_dynamic_rendering_local_read" -typedef struct VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 dynamicRenderingLocalRead; -} VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR; +typedef VkPhysicalDeviceDynamicRenderingLocalReadFeatures VkPhysicalDeviceDynamicRenderingLocalReadFeaturesKHR; -typedef struct VkRenderingAttachmentLocationInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t colorAttachmentCount; - const uint32_t* pColorAttachmentLocations; -} VkRenderingAttachmentLocationInfoKHR; +typedef VkRenderingAttachmentLocationInfo VkRenderingAttachmentLocationInfoKHR; -typedef struct VkRenderingInputAttachmentIndexInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t colorAttachmentCount; - const uint32_t* pColorAttachmentInputIndices; - const uint32_t* pDepthInputAttachmentIndex; - const uint32_t* pStencilInputAttachmentIndex; -} VkRenderingInputAttachmentIndexInfoKHR; +typedef VkRenderingInputAttachmentIndexInfo VkRenderingInputAttachmentIndexInfoKHR; -typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingAttachmentLocationsKHR)(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfoKHR* pLocationInfo); -typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingInputAttachmentIndicesKHR)(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfoKHR* pInputAttachmentIndexInfo); +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingAttachmentLocationsKHR)(VkCommandBuffer commandBuffer, const VkRenderingAttachmentLocationInfo* pLocationInfo); +typedef void (VKAPI_PTR *PFN_vkCmdSetRenderingInputAttachmentIndicesKHR)(VkCommandBuffer commandBuffer, const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingAttachmentLocationsKHR( VkCommandBuffer commandBuffer, - const VkRenderingAttachmentLocationInfoKHR* pLocationInfo); + const VkRenderingAttachmentLocationInfo* pLocationInfo); VKAPI_ATTR void VKAPI_CALL vkCmdSetRenderingInputAttachmentIndicesKHR( VkCommandBuffer commandBuffer, - const VkRenderingInputAttachmentIndexInfoKHR* pInputAttachmentIndexInfo); + const VkRenderingInputAttachmentIndexInfo* pInputAttachmentIndexInfo); #endif @@ -10576,40 +11561,26 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR #define VK_KHR_map_memory2 1 #define VK_KHR_MAP_MEMORY_2_SPEC_VERSION 1 #define VK_KHR_MAP_MEMORY_2_EXTENSION_NAME "VK_KHR_map_memory2" +typedef VkMemoryUnmapFlagBits VkMemoryUnmapFlagBitsKHR; -typedef enum VkMemoryUnmapFlagBitsKHR { - VK_MEMORY_UNMAP_RESERVE_BIT_EXT = 0x00000001, - VK_MEMORY_UNMAP_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF -} VkMemoryUnmapFlagBitsKHR; -typedef VkFlags VkMemoryUnmapFlagsKHR; -typedef struct VkMemoryMapInfoKHR { - VkStructureType sType; - const void* pNext; - VkMemoryMapFlags flags; - VkDeviceMemory memory; - VkDeviceSize offset; - VkDeviceSize size; -} VkMemoryMapInfoKHR; +typedef VkMemoryUnmapFlags VkMemoryUnmapFlagsKHR; -typedef struct VkMemoryUnmapInfoKHR { - VkStructureType sType; - const void* pNext; - VkMemoryUnmapFlagsKHR flags; - VkDeviceMemory memory; -} VkMemoryUnmapInfoKHR; +typedef VkMemoryMapInfo VkMemoryMapInfoKHR; + +typedef VkMemoryUnmapInfo VkMemoryUnmapInfoKHR; -typedef VkResult (VKAPI_PTR *PFN_vkMapMemory2KHR)(VkDevice device, const VkMemoryMapInfoKHR* pMemoryMapInfo, void** ppData); -typedef VkResult (VKAPI_PTR *PFN_vkUnmapMemory2KHR)(VkDevice device, const VkMemoryUnmapInfoKHR* pMemoryUnmapInfo); +typedef VkResult (VKAPI_PTR *PFN_vkMapMemory2KHR)(VkDevice device, const VkMemoryMapInfo* pMemoryMapInfo, void** ppData); +typedef VkResult (VKAPI_PTR *PFN_vkUnmapMemory2KHR)(VkDevice device, const VkMemoryUnmapInfo* pMemoryUnmapInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory2KHR( VkDevice device, - const VkMemoryMapInfoKHR* pMemoryMapInfo, + const VkMemoryMapInfo* pMemoryMapInfo, void** ppData); VKAPI_ATTR VkResult VKAPI_CALL vkUnmapMemory2KHR( VkDevice device, - const VkMemoryUnmapInfoKHR* pMemoryUnmapInfo); + const VkMemoryUnmapInfo* pMemoryUnmapInfo); #endif @@ -10674,11 +11645,19 @@ typedef enum VkVideoEncodeTuningModeKHR { VK_VIDEO_ENCODE_TUNING_MODE_LOSSLESS_KHR = 4, VK_VIDEO_ENCODE_TUNING_MODE_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoEncodeTuningModeKHR; + +typedef enum VkVideoEncodeFlagBitsKHR { + VK_VIDEO_ENCODE_WITH_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_WITH_EMPHASIS_MAP_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeFlagBitsKHR; typedef VkFlags VkVideoEncodeFlagsKHR; typedef enum VkVideoEncodeCapabilityFlagBitsKHR { VK_VIDEO_ENCODE_CAPABILITY_PRECEDING_EXTERNALLY_ENCODED_BYTES_BIT_KHR = 0x00000001, VK_VIDEO_ENCODE_CAPABILITY_INSUFFICIENT_BITSTREAM_BUFFER_RANGE_DETECTION_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_CAPABILITY_QUANTIZATION_DELTA_MAP_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_CAPABILITY_EMPHASIS_MAP_BIT_KHR = 0x00000008, VK_VIDEO_ENCODE_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkVideoEncodeCapabilityFlagBitsKHR; typedef VkFlags VkVideoEncodeCapabilityFlagsKHR; @@ -11115,12 +12094,7 @@ VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirementsKHR( #define VK_KHR_shader_subgroup_rotate 1 #define VK_KHR_SHADER_SUBGROUP_ROTATE_SPEC_VERSION 2 #define VK_KHR_SHADER_SUBGROUP_ROTATE_EXTENSION_NAME "VK_KHR_shader_subgroup_rotate" -typedef struct VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 shaderSubgroupRotate; - VkBool32 shaderSubgroupRotateClustered; -} VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR; +typedef VkPhysicalDeviceShaderSubgroupRotateFeatures VkPhysicalDeviceShaderSubgroupRotateFeaturesKHR; @@ -11140,145 +12114,34 @@ typedef struct VkPhysicalDeviceShaderMaximalReconvergenceFeaturesKHR { #define VK_KHR_maintenance5 1 #define VK_KHR_MAINTENANCE_5_SPEC_VERSION 1 #define VK_KHR_MAINTENANCE_5_EXTENSION_NAME "VK_KHR_maintenance5" -typedef VkFlags64 VkPipelineCreateFlags2KHR; +typedef VkPipelineCreateFlags2 VkPipelineCreateFlags2KHR; -// Flag bits for VkPipelineCreateFlagBits2KHR -typedef VkFlags64 VkPipelineCreateFlagBits2KHR; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_DISABLE_OPTIMIZATION_BIT_KHR = 0x00000001ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_ALLOW_DERIVATIVES_BIT_KHR = 0x00000002ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_DERIVATIVE_BIT_KHR = 0x00000004ULL; -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_EXECUTION_GRAPH_BIT_AMDX = 0x100000000ULL; -#endif -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_ENABLE_LEGACY_DITHERING_BIT_EXT = 0x400000000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = 0x00000008ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_DISPATCH_BASE_BIT_KHR = 0x00000010ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_DEFER_COMPILE_BIT_NV = 0x00000020ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_CAPTURE_STATISTICS_BIT_KHR = 0x00000040ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_KHR = 0x00000100ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_EARLY_RETURN_ON_FAILURE_BIT_KHR = 0x00000200ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_LINK_TIME_OPTIMIZATION_BIT_EXT = 0x00000400ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RETAIN_LINK_TIME_OPTIMIZATION_INFO_BIT_EXT = 0x00800000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR = 0x00000800ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR = 0x00001000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RAY_TRACING_SKIP_AABBS_BIT_KHR = 0x00002000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR = 0x00020000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR = 0x00080000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_NV = 0x00040000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RAY_TRACING_ALLOW_MOTION_BIT_NV = 0x00100000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00200000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00400000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RAY_TRACING_OPACITY_MICROMAP_BIT_EXT = 0x01000000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_COLOR_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x02000000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_DEPTH_STENCIL_ATTACHMENT_FEEDBACK_LOOP_BIT_EXT = 0x04000000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_NO_PROTECTED_ACCESS_BIT_EXT = 0x08000000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_PROTECTED_ACCESS_ONLY_BIT_EXT = 0x40000000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_RAY_TRACING_DISPLACEMENT_MICROMAP_BIT_NV = 0x10000000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_DESCRIPTOR_BUFFER_BIT_EXT = 0x20000000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_CAPTURE_DATA_BIT_KHR = 0x80000000ULL; -static const VkPipelineCreateFlagBits2KHR VK_PIPELINE_CREATE_2_INDIRECT_BINDABLE_BIT_EXT = 0x4000000000ULL; - -typedef VkFlags64 VkBufferUsageFlags2KHR; - -// Flag bits for VkBufferUsageFlagBits2KHR -typedef VkFlags64 VkBufferUsageFlagBits2KHR; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_TRANSFER_SRC_BIT_KHR = 0x00000001ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_TRANSFER_DST_BIT_KHR = 0x00000002ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000004ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_UNIFORM_BUFFER_BIT_KHR = 0x00000010ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_STORAGE_BUFFER_BIT_KHR = 0x00000020ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_INDEX_BUFFER_BIT_KHR = 0x00000040ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_VERTEX_BUFFER_BIT_KHR = 0x00000080ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_INDIRECT_BUFFER_BIT_KHR = 0x00000100ULL; -#ifdef VK_ENABLE_BETA_EXTENSIONS -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_EXECUTION_GRAPH_SCRATCH_BIT_AMDX = 0x02000000ULL; -#endif -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00000200ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_SHADER_BINDING_TABLE_BIT_KHR = 0x00000400ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_RAY_TRACING_BIT_NV = 0x00000400ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = 0x00000800ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = 0x00001000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_VIDEO_DECODE_SRC_BIT_KHR = 0x00002000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_VIDEO_DECODE_DST_BIT_KHR = 0x00004000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_VIDEO_ENCODE_DST_BIT_KHR = 0x00008000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_VIDEO_ENCODE_SRC_BIT_KHR = 0x00010000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_SHADER_DEVICE_ADDRESS_BIT_KHR = 0x00020000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_BUILD_INPUT_READ_ONLY_BIT_KHR = 0x00080000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_ACCELERATION_STRUCTURE_STORAGE_BIT_KHR = 0x00100000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT = 0x00200000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00400000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 0x04000000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_MICROMAP_BUILD_INPUT_READ_ONLY_BIT_EXT = 0x00800000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_MICROMAP_STORAGE_BIT_EXT = 0x01000000ULL; -static const VkBufferUsageFlagBits2KHR VK_BUFFER_USAGE_2_PREPROCESS_BUFFER_BIT_EXT = 0x80000000ULL; - -typedef struct VkPhysicalDeviceMaintenance5FeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 maintenance5; -} VkPhysicalDeviceMaintenance5FeaturesKHR; +typedef VkPipelineCreateFlagBits2 VkPipelineCreateFlagBits2KHR; -typedef struct VkPhysicalDeviceMaintenance5PropertiesKHR { - VkStructureType sType; - void* pNext; - VkBool32 earlyFragmentMultisampleCoverageAfterSampleCounting; - VkBool32 earlyFragmentSampleMaskTestBeforeSampleCounting; - VkBool32 depthStencilSwizzleOneSupport; - VkBool32 polygonModePointSize; - VkBool32 nonStrictSinglePixelWideLinesUseParallelogram; - VkBool32 nonStrictWideLinesUseParallelogram; -} VkPhysicalDeviceMaintenance5PropertiesKHR; +typedef VkBufferUsageFlags2 VkBufferUsageFlags2KHR; -typedef struct VkRenderingAreaInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t viewMask; - uint32_t colorAttachmentCount; - const VkFormat* pColorAttachmentFormats; - VkFormat depthAttachmentFormat; - VkFormat stencilAttachmentFormat; -} VkRenderingAreaInfoKHR; +typedef VkBufferUsageFlagBits2 VkBufferUsageFlagBits2KHR; -typedef struct VkImageSubresource2KHR { - VkStructureType sType; - void* pNext; - VkImageSubresource imageSubresource; -} VkImageSubresource2KHR; +typedef VkPhysicalDeviceMaintenance5Features VkPhysicalDeviceMaintenance5FeaturesKHR; -typedef struct VkDeviceImageSubresourceInfoKHR { - VkStructureType sType; - const void* pNext; - const VkImageCreateInfo* pCreateInfo; - const VkImageSubresource2KHR* pSubresource; -} VkDeviceImageSubresourceInfoKHR; +typedef VkPhysicalDeviceMaintenance5Properties VkPhysicalDeviceMaintenance5PropertiesKHR; -typedef struct VkSubresourceLayout2KHR { - VkStructureType sType; - void* pNext; - VkSubresourceLayout subresourceLayout; -} VkSubresourceLayout2KHR; +typedef VkRenderingAreaInfo VkRenderingAreaInfoKHR; -typedef struct VkPipelineCreateFlags2CreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkPipelineCreateFlags2KHR flags; -} VkPipelineCreateFlags2CreateInfoKHR; +typedef VkDeviceImageSubresourceInfo VkDeviceImageSubresourceInfoKHR; -typedef struct VkBufferUsageFlags2CreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkBufferUsageFlags2KHR usage; -} VkBufferUsageFlags2CreateInfoKHR; +typedef VkImageSubresource2 VkImageSubresource2KHR; + +typedef VkSubresourceLayout2 VkSubresourceLayout2KHR; + +typedef VkPipelineCreateFlags2CreateInfo VkPipelineCreateFlags2CreateInfoKHR; + +typedef VkBufferUsageFlags2CreateInfo VkBufferUsageFlags2CreateInfoKHR; typedef void (VKAPI_PTR *PFN_vkCmdBindIndexBuffer2KHR)(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size, VkIndexType indexType); -typedef void (VKAPI_PTR *PFN_vkGetRenderingAreaGranularityKHR)(VkDevice device, const VkRenderingAreaInfoKHR* pRenderingAreaInfo, VkExtent2D* pGranularity); -typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSubresourceLayoutKHR)(VkDevice device, const VkDeviceImageSubresourceInfoKHR* pInfo, VkSubresourceLayout2KHR* pLayout); -typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2KHR)(VkDevice device, VkImage image, const VkImageSubresource2KHR* pSubresource, VkSubresourceLayout2KHR* pLayout); +typedef void (VKAPI_PTR *PFN_vkGetRenderingAreaGranularityKHR)(VkDevice device, const VkRenderingAreaInfo* pRenderingAreaInfo, VkExtent2D* pGranularity); +typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSubresourceLayoutKHR)(VkDevice device, const VkDeviceImageSubresourceInfo* pInfo, VkSubresourceLayout2* pLayout); +typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2KHR)(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2KHR( @@ -11288,21 +12151,79 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer2KHR( VkDeviceSize size, VkIndexType indexType); -VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularityKHR( - VkDevice device, - const VkRenderingAreaInfoKHR* pRenderingAreaInfo, - VkExtent2D* pGranularity); +VKAPI_ATTR void VKAPI_CALL vkGetRenderingAreaGranularityKHR( + VkDevice device, + const VkRenderingAreaInfo* pRenderingAreaInfo, + VkExtent2D* pGranularity); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayoutKHR( + VkDevice device, + const VkDeviceImageSubresourceInfo* pInfo, + VkSubresourceLayout2* pLayout); + +VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2KHR( + VkDevice device, + VkImage image, + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout); +#endif + + +// VK_KHR_present_id2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_id2 1 +#define VK_KHR_PRESENT_ID_2_SPEC_VERSION 1 +#define VK_KHR_PRESENT_ID_2_EXTENSION_NAME "VK_KHR_present_id2" +typedef struct VkSurfaceCapabilitiesPresentId2KHR { + VkStructureType sType; + void* pNext; + VkBool32 presentId2Supported; +} VkSurfaceCapabilitiesPresentId2KHR; + +typedef struct VkPresentId2KHR { + VkStructureType sType; + const void* pNext; + uint32_t swapchainCount; + const uint64_t* pPresentIds; +} VkPresentId2KHR; + +typedef struct VkPhysicalDevicePresentId2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentId2; +} VkPhysicalDevicePresentId2FeaturesKHR; + + + +// VK_KHR_present_wait2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_present_wait2 1 +#define VK_KHR_PRESENT_WAIT_2_SPEC_VERSION 1 +#define VK_KHR_PRESENT_WAIT_2_EXTENSION_NAME "VK_KHR_present_wait2" +typedef struct VkSurfaceCapabilitiesPresentWait2KHR { + VkStructureType sType; + void* pNext; + VkBool32 presentWait2Supported; +} VkSurfaceCapabilitiesPresentWait2KHR; -VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSubresourceLayoutKHR( - VkDevice device, - const VkDeviceImageSubresourceInfoKHR* pInfo, - VkSubresourceLayout2KHR* pLayout); +typedef struct VkPhysicalDevicePresentWait2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 presentWait2; +} VkPhysicalDevicePresentWait2FeaturesKHR; -VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2KHR( +typedef struct VkPresentWait2InfoKHR { + VkStructureType sType; + const void* pNext; + uint64_t presentId; + uint64_t timeout; +} VkPresentWait2InfoKHR; + +typedef VkResult (VKAPI_PTR *PFN_vkWaitForPresent2KHR)(VkDevice device, VkSwapchainKHR swapchain, const VkPresentWait2InfoKHR* pPresentWait2Info); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkWaitForPresent2KHR( VkDevice device, - VkImage image, - const VkImageSubresource2KHR* pSubresource, - VkSubresourceLayout2KHR* pLayout); + VkSwapchainKHR swapchain, + const VkPresentWait2InfoKHR* pPresentWait2Info); #endif @@ -11457,6 +12378,13 @@ typedef enum VkComponentTypeKHR { VK_COMPONENT_TYPE_UINT16_KHR = 8, VK_COMPONENT_TYPE_UINT32_KHR = 9, VK_COMPONENT_TYPE_UINT64_KHR = 10, + VK_COMPONENT_TYPE_BFLOAT16_KHR = 1000141000, + VK_COMPONENT_TYPE_SINT8_PACKED_NV = 1000491000, + VK_COMPONENT_TYPE_UINT8_PACKED_NV = 1000491001, + VK_COMPONENT_TYPE_FLOAT_E4M3_NV = 1000491002, + VK_COMPONENT_TYPE_FLOAT_E5M2_NV = 1000491003, + VK_COMPONENT_TYPE_FLOAT8_E4M3_EXT = 1000567000, + VK_COMPONENT_TYPE_FLOAT8_E5M2_EXT = 1000567001, VK_COMPONENT_TYPE_FLOAT16_NV = VK_COMPONENT_TYPE_FLOAT16_KHR, VK_COMPONENT_TYPE_FLOAT32_NV = VK_COMPONENT_TYPE_FLOAT32_KHR, VK_COMPONENT_TYPE_FLOAT64_NV = VK_COMPONENT_TYPE_FLOAT64_KHR, @@ -11583,6 +12511,237 @@ typedef struct VkVideoDecodeAV1DpbSlotInfoKHR { +// VK_KHR_video_encode_av1 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_av1 1 +#include "vk_video/vulkan_video_codec_av1std_encode.h" +#define VK_KHR_VIDEO_ENCODE_AV1_SPEC_VERSION 1 +#define VK_KHR_VIDEO_ENCODE_AV1_EXTENSION_NAME "VK_KHR_video_encode_av1" + +typedef enum VkVideoEncodeAV1PredictionModeKHR { + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_INTRA_ONLY_KHR = 0, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_SINGLE_REFERENCE_KHR = 1, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_UNIDIRECTIONAL_COMPOUND_KHR = 2, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_BIDIRECTIONAL_COMPOUND_KHR = 3, + VK_VIDEO_ENCODE_AV1_PREDICTION_MODE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1PredictionModeKHR; + +typedef enum VkVideoEncodeAV1RateControlGroupKHR { + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_INTRA_KHR = 0, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_PREDICTIVE_KHR = 1, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_BIPREDICTIVE_KHR = 2, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_GROUP_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1RateControlGroupKHR; + +typedef enum VkVideoEncodeAV1CapabilityFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_CAPABILITY_PER_RATE_CONTROL_GROUP_MIN_MAX_Q_INDEX_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_CAPABILITY_GENERATE_OBU_EXTENSION_HEADER_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_CAPABILITY_PRIMARY_REFERENCE_CDF_ONLY_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_AV1_CAPABILITY_FRAME_SIZE_OVERRIDE_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_AV1_CAPABILITY_MOTION_VECTOR_SCALING_BIT_KHR = 0x00000010, + VK_VIDEO_ENCODE_AV1_CAPABILITY_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1CapabilityFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1CapabilityFlagsKHR; + +typedef enum VkVideoEncodeAV1StdFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_STD_UNIFORM_TILE_SPACING_FLAG_SET_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_STD_SKIP_MODE_PRESENT_UNSET_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_STD_PRIMARY_REF_FRAME_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_AV1_STD_DELTA_Q_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_AV1_STD_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1StdFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1StdFlagsKHR; + +typedef enum VkVideoEncodeAV1SuperblockSizeFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_64_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_128_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_SUPERBLOCK_SIZE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1SuperblockSizeFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1SuperblockSizeFlagsKHR; + +typedef enum VkVideoEncodeAV1RateControlFlagBitsKHR { + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REGULAR_GOP_BIT_KHR = 0x00000001, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_TEMPORAL_LAYER_PATTERN_DYADIC_BIT_KHR = 0x00000002, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_FLAT_BIT_KHR = 0x00000004, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_REFERENCE_PATTERN_DYADIC_BIT_KHR = 0x00000008, + VK_VIDEO_ENCODE_AV1_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF +} VkVideoEncodeAV1RateControlFlagBitsKHR; +typedef VkFlags VkVideoEncodeAV1RateControlFlagsKHR; +typedef struct VkPhysicalDeviceVideoEncodeAV1FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoEncodeAV1; +} VkPhysicalDeviceVideoEncodeAV1FeaturesKHR; + +typedef struct VkVideoEncodeAV1CapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeAV1CapabilityFlagsKHR flags; + StdVideoAV1Level maxLevel; + VkExtent2D codedPictureAlignment; + VkExtent2D maxTiles; + VkExtent2D minTileSize; + VkExtent2D maxTileSize; + VkVideoEncodeAV1SuperblockSizeFlagsKHR superblockSizes; + uint32_t maxSingleReferenceCount; + uint32_t singleReferenceNameMask; + uint32_t maxUnidirectionalCompoundReferenceCount; + uint32_t maxUnidirectionalCompoundGroup1ReferenceCount; + uint32_t unidirectionalCompoundReferenceNameMask; + uint32_t maxBidirectionalCompoundReferenceCount; + uint32_t maxBidirectionalCompoundGroup1ReferenceCount; + uint32_t maxBidirectionalCompoundGroup2ReferenceCount; + uint32_t bidirectionalCompoundReferenceNameMask; + uint32_t maxTemporalLayerCount; + uint32_t maxSpatialLayerCount; + uint32_t maxOperatingPoints; + uint32_t minQIndex; + uint32_t maxQIndex; + VkBool32 prefersGopRemainingFrames; + VkBool32 requiresGopRemainingFrames; + VkVideoEncodeAV1StdFlagsKHR stdSyntaxFlags; +} VkVideoEncodeAV1CapabilitiesKHR; + +typedef struct VkVideoEncodeAV1QIndexKHR { + uint32_t intraQIndex; + uint32_t predictiveQIndex; + uint32_t bipredictiveQIndex; +} VkVideoEncodeAV1QIndexKHR; + +typedef struct VkVideoEncodeAV1QualityLevelPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeAV1RateControlFlagsKHR preferredRateControlFlags; + uint32_t preferredGopFrameCount; + uint32_t preferredKeyFramePeriod; + uint32_t preferredConsecutiveBipredictiveFrameCount; + uint32_t preferredTemporalLayerCount; + VkVideoEncodeAV1QIndexKHR preferredConstantQIndex; + uint32_t preferredMaxSingleReferenceCount; + uint32_t preferredSingleReferenceNameMask; + uint32_t preferredMaxUnidirectionalCompoundReferenceCount; + uint32_t preferredMaxUnidirectionalCompoundGroup1ReferenceCount; + uint32_t preferredUnidirectionalCompoundReferenceNameMask; + uint32_t preferredMaxBidirectionalCompoundReferenceCount; + uint32_t preferredMaxBidirectionalCompoundGroup1ReferenceCount; + uint32_t preferredMaxBidirectionalCompoundGroup2ReferenceCount; + uint32_t preferredBidirectionalCompoundReferenceNameMask; +} VkVideoEncodeAV1QualityLevelPropertiesKHR; + +typedef struct VkVideoEncodeAV1SessionCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMaxLevel; + StdVideoAV1Level maxLevel; +} VkVideoEncodeAV1SessionCreateInfoKHR; + +typedef struct VkVideoEncodeAV1SessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoAV1SequenceHeader* pStdSequenceHeader; + const StdVideoEncodeAV1DecoderModelInfo* pStdDecoderModelInfo; + uint32_t stdOperatingPointCount; + const StdVideoEncodeAV1OperatingPointInfo* pStdOperatingPoints; +} VkVideoEncodeAV1SessionParametersCreateInfoKHR; + +typedef struct VkVideoEncodeAV1PictureInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeAV1PredictionModeKHR predictionMode; + VkVideoEncodeAV1RateControlGroupKHR rateControlGroup; + uint32_t constantQIndex; + const StdVideoEncodeAV1PictureInfo* pStdPictureInfo; + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_AV1_REFERENCES_PER_FRAME_KHR]; + VkBool32 primaryReferenceCdfOnly; + VkBool32 generateObuExtensionHeader; +} VkVideoEncodeAV1PictureInfoKHR; + +typedef struct VkVideoEncodeAV1DpbSlotInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoEncodeAV1ReferenceInfo* pStdReferenceInfo; +} VkVideoEncodeAV1DpbSlotInfoKHR; + +typedef struct VkVideoEncodeAV1ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoAV1Profile stdProfile; +} VkVideoEncodeAV1ProfileInfoKHR; + +typedef struct VkVideoEncodeAV1FrameSizeKHR { + uint32_t intraFrameSize; + uint32_t predictiveFrameSize; + uint32_t bipredictiveFrameSize; +} VkVideoEncodeAV1FrameSizeKHR; + +typedef struct VkVideoEncodeAV1GopRemainingFrameInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useGopRemainingFrames; + uint32_t gopRemainingIntra; + uint32_t gopRemainingPredictive; + uint32_t gopRemainingBipredictive; +} VkVideoEncodeAV1GopRemainingFrameInfoKHR; + +typedef struct VkVideoEncodeAV1RateControlInfoKHR { + VkStructureType sType; + const void* pNext; + VkVideoEncodeAV1RateControlFlagsKHR flags; + uint32_t gopFrameCount; + uint32_t keyFramePeriod; + uint32_t consecutiveBipredictiveFrameCount; + uint32_t temporalLayerCount; +} VkVideoEncodeAV1RateControlInfoKHR; + +typedef struct VkVideoEncodeAV1RateControlLayerInfoKHR { + VkStructureType sType; + const void* pNext; + VkBool32 useMinQIndex; + VkVideoEncodeAV1QIndexKHR minQIndex; + VkBool32 useMaxQIndex; + VkVideoEncodeAV1QIndexKHR maxQIndex; + VkBool32 useMaxFrameSize; + VkVideoEncodeAV1FrameSizeKHR maxFrameSize; +} VkVideoEncodeAV1RateControlLayerInfoKHR; + + + +// VK_KHR_video_decode_vp9 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_decode_vp9 1 +#include "vk_video/vulkan_video_codec_vp9std.h" +#include "vk_video/vulkan_video_codec_vp9std_decode.h" +#define VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR 3U +#define VK_KHR_VIDEO_DECODE_VP9_SPEC_VERSION 1 +#define VK_KHR_VIDEO_DECODE_VP9_EXTENSION_NAME "VK_KHR_video_decode_vp9" +typedef struct VkPhysicalDeviceVideoDecodeVP9FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoDecodeVP9; +} VkPhysicalDeviceVideoDecodeVP9FeaturesKHR; + +typedef struct VkVideoDecodeVP9ProfileInfoKHR { + VkStructureType sType; + const void* pNext; + StdVideoVP9Profile stdProfile; +} VkVideoDecodeVP9ProfileInfoKHR; + +typedef struct VkVideoDecodeVP9CapabilitiesKHR { + VkStructureType sType; + void* pNext; + StdVideoVP9Level maxLevel; +} VkVideoDecodeVP9CapabilitiesKHR; + +typedef struct VkVideoDecodeVP9PictureInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoDecodeVP9PictureInfo* pStdPictureInfo; + int32_t referenceNameSlotIndices[VK_MAX_VIDEO_VP9_REFERENCES_PER_FRAME_KHR]; + uint32_t uncompressedHeaderOffset; + uint32_t compressedHeaderOffset; + uint32_t tilesOffset; +} VkVideoDecodeVP9PictureInfoKHR; + + + // VK_KHR_video_maintenance1 is a preprocessor guard. Do not pass it to API calls. #define VK_KHR_video_maintenance1 1 #define VK_KHR_VIDEO_MAINTENANCE_1_SPEC_VERSION 1 @@ -11607,31 +12766,13 @@ typedef struct VkVideoInlineQueryInfoKHR { #define VK_KHR_vertex_attribute_divisor 1 #define VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION 1 #define VK_KHR_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME "VK_KHR_vertex_attribute_divisor" -typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR { - VkStructureType sType; - void* pNext; - uint32_t maxVertexAttribDivisor; - VkBool32 supportsNonZeroFirstInstance; -} VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR; +typedef VkPhysicalDeviceVertexAttributeDivisorProperties VkPhysicalDeviceVertexAttributeDivisorPropertiesKHR; -typedef struct VkVertexInputBindingDivisorDescriptionKHR { - uint32_t binding; - uint32_t divisor; -} VkVertexInputBindingDivisorDescriptionKHR; +typedef VkVertexInputBindingDivisorDescription VkVertexInputBindingDivisorDescriptionKHR; -typedef struct VkPipelineVertexInputDivisorStateCreateInfoKHR { - VkStructureType sType; - const void* pNext; - uint32_t vertexBindingDivisorCount; - const VkVertexInputBindingDivisorDescriptionKHR* pVertexBindingDivisors; -} VkPipelineVertexInputDivisorStateCreateInfoKHR; +typedef VkPipelineVertexInputDivisorStateCreateInfo VkPipelineVertexInputDivisorStateCreateInfoKHR; -typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 vertexAttributeInstanceRateDivisor; - VkBool32 vertexAttributeInstanceRateZeroDivisor; -} VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR; +typedef VkPhysicalDeviceVertexAttributeDivisorFeatures VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR; @@ -11641,15 +12782,30 @@ typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR { #define VK_KHR_LOAD_STORE_OP_NONE_EXTENSION_NAME "VK_KHR_load_store_op_none" +// VK_KHR_unified_image_layouts is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_unified_image_layouts 1 +#define VK_KHR_UNIFIED_IMAGE_LAYOUTS_SPEC_VERSION 1 +#define VK_KHR_UNIFIED_IMAGE_LAYOUTS_EXTENSION_NAME "VK_KHR_unified_image_layouts" +typedef struct VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 unifiedImageLayouts; + VkBool32 unifiedImageLayoutsVideo; +} VkPhysicalDeviceUnifiedImageLayoutsFeaturesKHR; + +typedef struct VkAttachmentFeedbackLoopInfoEXT { + VkStructureType sType; + const void* pNext; + VkBool32 feedbackLoopEnable; +} VkAttachmentFeedbackLoopInfoEXT; + + + // VK_KHR_shader_float_controls2 is a preprocessor guard. Do not pass it to API calls. #define VK_KHR_shader_float_controls2 1 #define VK_KHR_SHADER_FLOAT_CONTROLS_2_SPEC_VERSION 1 #define VK_KHR_SHADER_FLOAT_CONTROLS_2_EXTENSION_NAME "VK_KHR_shader_float_controls2" -typedef struct VkPhysicalDeviceShaderFloatControls2FeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 shaderFloatControls2; -} VkPhysicalDeviceShaderFloatControls2FeaturesKHR; +typedef VkPhysicalDeviceShaderFloatControls2Features VkPhysicalDeviceShaderFloatControls2FeaturesKHR; @@ -11657,11 +12813,7 @@ typedef struct VkPhysicalDeviceShaderFloatControls2FeaturesKHR { #define VK_KHR_index_type_uint8 1 #define VK_KHR_INDEX_TYPE_UINT8_SPEC_VERSION 1 #define VK_KHR_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_KHR_index_type_uint8" -typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 indexTypeUint8; -} VkPhysicalDeviceIndexTypeUint8FeaturesKHR; +typedef VkPhysicalDeviceIndexTypeUint8Features VkPhysicalDeviceIndexTypeUint8FeaturesKHR; @@ -11669,43 +12821,13 @@ typedef struct VkPhysicalDeviceIndexTypeUint8FeaturesKHR { #define VK_KHR_line_rasterization 1 #define VK_KHR_LINE_RASTERIZATION_SPEC_VERSION 1 #define VK_KHR_LINE_RASTERIZATION_EXTENSION_NAME "VK_KHR_line_rasterization" +typedef VkLineRasterizationMode VkLineRasterizationModeKHR; -typedef enum VkLineRasterizationModeKHR { - VK_LINE_RASTERIZATION_MODE_DEFAULT_KHR = 0, - VK_LINE_RASTERIZATION_MODE_RECTANGULAR_KHR = 1, - VK_LINE_RASTERIZATION_MODE_BRESENHAM_KHR = 2, - VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR = 3, - VK_LINE_RASTERIZATION_MODE_DEFAULT_EXT = VK_LINE_RASTERIZATION_MODE_DEFAULT_KHR, - VK_LINE_RASTERIZATION_MODE_RECTANGULAR_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_KHR, - VK_LINE_RASTERIZATION_MODE_BRESENHAM_EXT = VK_LINE_RASTERIZATION_MODE_BRESENHAM_KHR, - VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_EXT = VK_LINE_RASTERIZATION_MODE_RECTANGULAR_SMOOTH_KHR, - VK_LINE_RASTERIZATION_MODE_MAX_ENUM_KHR = 0x7FFFFFFF -} VkLineRasterizationModeKHR; -typedef struct VkPhysicalDeviceLineRasterizationFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 rectangularLines; - VkBool32 bresenhamLines; - VkBool32 smoothLines; - VkBool32 stippledRectangularLines; - VkBool32 stippledBresenhamLines; - VkBool32 stippledSmoothLines; -} VkPhysicalDeviceLineRasterizationFeaturesKHR; +typedef VkPhysicalDeviceLineRasterizationFeatures VkPhysicalDeviceLineRasterizationFeaturesKHR; -typedef struct VkPhysicalDeviceLineRasterizationPropertiesKHR { - VkStructureType sType; - void* pNext; - uint32_t lineSubPixelPrecisionBits; -} VkPhysicalDeviceLineRasterizationPropertiesKHR; +typedef VkPhysicalDeviceLineRasterizationProperties VkPhysicalDeviceLineRasterizationPropertiesKHR; -typedef struct VkPipelineRasterizationLineStateCreateInfoKHR { - VkStructureType sType; - const void* pNext; - VkLineRasterizationModeKHR lineRasterizationMode; - VkBool32 stippledLineEnable; - uint32_t lineStippleFactor; - uint16_t lineStipplePattern; -} VkPipelineRasterizationLineStateCreateInfoKHR; +typedef VkPipelineRasterizationLineStateCreateInfo VkPipelineRasterizationLineStateCreateInfoKHR; typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleKHR)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); @@ -11761,11 +12883,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetCalibratedTimestampsKHR( #define VK_KHR_shader_expect_assume 1 #define VK_KHR_SHADER_EXPECT_ASSUME_SPEC_VERSION 1 #define VK_KHR_SHADER_EXPECT_ASSUME_EXTENSION_NAME "VK_KHR_shader_expect_assume" -typedef struct VkPhysicalDeviceShaderExpectAssumeFeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 shaderExpectAssume; -} VkPhysicalDeviceShaderExpectAssumeFeaturesKHR; +typedef VkPhysicalDeviceShaderExpectAssumeFeatures VkPhysicalDeviceShaderExpectAssumeFeaturesKHR; @@ -11773,66 +12891,19 @@ typedef struct VkPhysicalDeviceShaderExpectAssumeFeaturesKHR { #define VK_KHR_maintenance6 1 #define VK_KHR_MAINTENANCE_6_SPEC_VERSION 1 #define VK_KHR_MAINTENANCE_6_EXTENSION_NAME "VK_KHR_maintenance6" -typedef struct VkPhysicalDeviceMaintenance6FeaturesKHR { - VkStructureType sType; - void* pNext; - VkBool32 maintenance6; -} VkPhysicalDeviceMaintenance6FeaturesKHR; +typedef VkPhysicalDeviceMaintenance6Features VkPhysicalDeviceMaintenance6FeaturesKHR; -typedef struct VkPhysicalDeviceMaintenance6PropertiesKHR { - VkStructureType sType; - void* pNext; - VkBool32 blockTexelViewCompatibleMultipleLayers; - uint32_t maxCombinedImageSamplerDescriptorCount; - VkBool32 fragmentShadingRateClampCombinerInputs; -} VkPhysicalDeviceMaintenance6PropertiesKHR; +typedef VkPhysicalDeviceMaintenance6Properties VkPhysicalDeviceMaintenance6PropertiesKHR; -typedef struct VkBindMemoryStatusKHR { - VkStructureType sType; - const void* pNext; - VkResult* pResult; -} VkBindMemoryStatusKHR; +typedef VkBindMemoryStatus VkBindMemoryStatusKHR; -typedef struct VkBindDescriptorSetsInfoKHR { - VkStructureType sType; - const void* pNext; - VkShaderStageFlags stageFlags; - VkPipelineLayout layout; - uint32_t firstSet; - uint32_t descriptorSetCount; - const VkDescriptorSet* pDescriptorSets; - uint32_t dynamicOffsetCount; - const uint32_t* pDynamicOffsets; -} VkBindDescriptorSetsInfoKHR; +typedef VkBindDescriptorSetsInfo VkBindDescriptorSetsInfoKHR; -typedef struct VkPushConstantsInfoKHR { - VkStructureType sType; - const void* pNext; - VkPipelineLayout layout; - VkShaderStageFlags stageFlags; - uint32_t offset; - uint32_t size; - const void* pValues; -} VkPushConstantsInfoKHR; +typedef VkPushConstantsInfo VkPushConstantsInfoKHR; -typedef struct VkPushDescriptorSetInfoKHR { - VkStructureType sType; - const void* pNext; - VkShaderStageFlags stageFlags; - VkPipelineLayout layout; - uint32_t set; - uint32_t descriptorWriteCount; - const VkWriteDescriptorSet* pDescriptorWrites; -} VkPushDescriptorSetInfoKHR; +typedef VkPushDescriptorSetInfo VkPushDescriptorSetInfoKHR; -typedef struct VkPushDescriptorSetWithTemplateInfoKHR { - VkStructureType sType; - const void* pNext; - VkDescriptorUpdateTemplate descriptorUpdateTemplate; - VkPipelineLayout layout; - uint32_t set; - const void* pData; -} VkPushDescriptorSetWithTemplateInfoKHR; +typedef VkPushDescriptorSetWithTemplateInfo VkPushDescriptorSetWithTemplateInfoKHR; typedef struct VkSetDescriptorBufferOffsetsInfoEXT { VkStructureType sType; @@ -11853,29 +12924,29 @@ typedef struct VkBindDescriptorBufferEmbeddedSamplersInfoEXT { uint32_t set; } VkBindDescriptorBufferEmbeddedSamplersInfoEXT; -typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets2KHR)(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfoKHR* pBindDescriptorSetsInfo); -typedef void (VKAPI_PTR *PFN_vkCmdPushConstants2KHR)(VkCommandBuffer commandBuffer, const VkPushConstantsInfoKHR* pPushConstantsInfo); -typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSet2KHR)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfoKHR* pPushDescriptorSetInfo); -typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplate2KHR)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfoKHR* pPushDescriptorSetWithTemplateInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorSets2KHR)(VkCommandBuffer commandBuffer, const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushConstants2KHR)(VkCommandBuffer commandBuffer, const VkPushConstantsInfo* pPushConstantsInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSet2KHR)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); +typedef void (VKAPI_PTR *PFN_vkCmdPushDescriptorSetWithTemplate2KHR)(VkCommandBuffer commandBuffer, const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); typedef void (VKAPI_PTR *PFN_vkCmdSetDescriptorBufferOffsets2EXT)(VkCommandBuffer commandBuffer, const VkSetDescriptorBufferOffsetsInfoEXT* pSetDescriptorBufferOffsetsInfo); typedef void (VKAPI_PTR *PFN_vkCmdBindDescriptorBufferEmbeddedSamplers2EXT)(VkCommandBuffer commandBuffer, const VkBindDescriptorBufferEmbeddedSamplersInfoEXT* pBindDescriptorBufferEmbeddedSamplersInfo); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets2KHR( VkCommandBuffer commandBuffer, - const VkBindDescriptorSetsInfoKHR* pBindDescriptorSetsInfo); + const VkBindDescriptorSetsInfo* pBindDescriptorSetsInfo); VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants2KHR( VkCommandBuffer commandBuffer, - const VkPushConstantsInfoKHR* pPushConstantsInfo); + const VkPushConstantsInfo* pPushConstantsInfo); VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSet2KHR( VkCommandBuffer commandBuffer, - const VkPushDescriptorSetInfoKHR* pPushDescriptorSetInfo); + const VkPushDescriptorSetInfo* pPushDescriptorSetInfo); VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplate2KHR( VkCommandBuffer commandBuffer, - const VkPushDescriptorSetWithTemplateInfoKHR* pPushDescriptorSetWithTemplateInfo); + const VkPushDescriptorSetWithTemplateInfo* pPushDescriptorSetWithTemplateInfo); VKAPI_ATTR void VKAPI_CALL vkCmdSetDescriptorBufferOffsets2EXT( VkCommandBuffer commandBuffer, @@ -11887,6 +12958,76 @@ VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorBufferEmbeddedSamplers2EXT( #endif +// VK_KHR_video_encode_quantization_map is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_encode_quantization_map 1 +#define VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_SPEC_VERSION 2 +#define VK_KHR_VIDEO_ENCODE_QUANTIZATION_MAP_EXTENSION_NAME "VK_KHR_video_encode_quantization_map" +typedef struct VkVideoEncodeQuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + VkExtent2D maxQuantizationMapExtent; +} VkVideoEncodeQuantizationMapCapabilitiesKHR; + +typedef struct VkVideoFormatQuantizationMapPropertiesKHR { + VkStructureType sType; + void* pNext; + VkExtent2D quantizationMapTexelSize; +} VkVideoFormatQuantizationMapPropertiesKHR; + +typedef struct VkVideoEncodeQuantizationMapInfoKHR { + VkStructureType sType; + const void* pNext; + VkImageView quantizationMap; + VkExtent2D quantizationMapExtent; +} VkVideoEncodeQuantizationMapInfoKHR; + +typedef struct VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR { + VkStructureType sType; + const void* pNext; + VkExtent2D quantizationMapTexelSize; +} VkVideoEncodeQuantizationMapSessionParametersCreateInfoKHR; + +typedef struct VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoEncodeQuantizationMap; +} VkPhysicalDeviceVideoEncodeQuantizationMapFeaturesKHR; + +typedef struct VkVideoEncodeH264QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + int32_t minQpDelta; + int32_t maxQpDelta; +} VkVideoEncodeH264QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoEncodeH265QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + int32_t minQpDelta; + int32_t maxQpDelta; +} VkVideoEncodeH265QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoFormatH265QuantizationMapPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeH265CtbSizeFlagsKHR compatibleCtbSizes; +} VkVideoFormatH265QuantizationMapPropertiesKHR; + +typedef struct VkVideoEncodeAV1QuantizationMapCapabilitiesKHR { + VkStructureType sType; + void* pNext; + int32_t minQIndexDelta; + int32_t maxQIndexDelta; +} VkVideoEncodeAV1QuantizationMapCapabilitiesKHR; + +typedef struct VkVideoFormatAV1QuantizationMapPropertiesKHR { + VkStructureType sType; + void* pNext; + VkVideoEncodeAV1SuperblockSizeFlagsKHR compatibleSuperblockSizes; +} VkVideoFormatAV1QuantizationMapPropertiesKHR; + + + // VK_KHR_shader_relaxed_extended_instruction is a preprocessor guard. Do not pass it to API calls. #define VK_KHR_shader_relaxed_extended_instruction 1 #define VK_KHR_SHADER_RELAXED_EXTENDED_INSTRUCTION_SPEC_VERSION 1 @@ -11955,6 +13096,128 @@ typedef struct VkPhysicalDeviceLayeredApiVulkanPropertiesKHR { +// VK_KHR_maintenance8 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance8 1 +#define VK_KHR_MAINTENANCE_8_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_8_EXTENSION_NAME "VK_KHR_maintenance8" +typedef VkFlags64 VkAccessFlags3KHR; + +// Flag bits for VkAccessFlagBits3KHR +typedef VkFlags64 VkAccessFlagBits3KHR; +static const VkAccessFlagBits3KHR VK_ACCESS_3_NONE_KHR = 0ULL; + +typedef struct VkPhysicalDeviceMaintenance8FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 maintenance8; +} VkPhysicalDeviceMaintenance8FeaturesKHR; + +typedef struct VkMemoryBarrierAccessFlags3KHR { + VkStructureType sType; + const void* pNext; + VkAccessFlags3KHR srcAccessMask3; + VkAccessFlags3KHR dstAccessMask3; +} VkMemoryBarrierAccessFlags3KHR; + + + +// VK_KHR_maintenance9 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_maintenance9 1 +#define VK_KHR_MAINTENANCE_9_SPEC_VERSION 1 +#define VK_KHR_MAINTENANCE_9_EXTENSION_NAME "VK_KHR_maintenance9" + +typedef enum VkDefaultVertexAttributeValueKHR { + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ZERO_KHR = 0, + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_ZERO_ZERO_ZERO_ONE_KHR = 1, + VK_DEFAULT_VERTEX_ATTRIBUTE_VALUE_MAX_ENUM_KHR = 0x7FFFFFFF +} VkDefaultVertexAttributeValueKHR; +typedef struct VkPhysicalDeviceMaintenance9FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 maintenance9; +} VkPhysicalDeviceMaintenance9FeaturesKHR; + +typedef struct VkPhysicalDeviceMaintenance9PropertiesKHR { + VkStructureType sType; + void* pNext; + VkBool32 image2DViewOf3DSparse; + VkDefaultVertexAttributeValueKHR defaultVertexAttributeValue; +} VkPhysicalDeviceMaintenance9PropertiesKHR; + +typedef struct VkQueueFamilyOwnershipTransferPropertiesKHR { + VkStructureType sType; + void* pNext; + uint32_t optimalImageTransferToQueueFamilies; +} VkQueueFamilyOwnershipTransferPropertiesKHR; + + + +// VK_KHR_video_maintenance2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_video_maintenance2 1 +#define VK_KHR_VIDEO_MAINTENANCE_2_SPEC_VERSION 1 +#define VK_KHR_VIDEO_MAINTENANCE_2_EXTENSION_NAME "VK_KHR_video_maintenance2" +typedef struct VkPhysicalDeviceVideoMaintenance2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 videoMaintenance2; +} VkPhysicalDeviceVideoMaintenance2FeaturesKHR; + +typedef struct VkVideoDecodeH264InlineSessionParametersInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoH264SequenceParameterSet* pStdSPS; + const StdVideoH264PictureParameterSet* pStdPPS; +} VkVideoDecodeH264InlineSessionParametersInfoKHR; + +typedef struct VkVideoDecodeH265InlineSessionParametersInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoH265VideoParameterSet* pStdVPS; + const StdVideoH265SequenceParameterSet* pStdSPS; + const StdVideoH265PictureParameterSet* pStdPPS; +} VkVideoDecodeH265InlineSessionParametersInfoKHR; + +typedef struct VkVideoDecodeAV1InlineSessionParametersInfoKHR { + VkStructureType sType; + const void* pNext; + const StdVideoAV1SequenceHeader* pStdSequenceHeader; +} VkVideoDecodeAV1InlineSessionParametersInfoKHR; + + + +// VK_KHR_depth_clamp_zero_one is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_depth_clamp_zero_one 1 +#define VK_KHR_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION 1 +#define VK_KHR_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME "VK_KHR_depth_clamp_zero_one" +typedef struct VkPhysicalDeviceDepthClampZeroOneFeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 depthClampZeroOne; +} VkPhysicalDeviceDepthClampZeroOneFeaturesKHR; + + + +// VK_KHR_robustness2 is a preprocessor guard. Do not pass it to API calls. +#define VK_KHR_robustness2 1 +#define VK_KHR_ROBUSTNESS_2_SPEC_VERSION 1 +#define VK_KHR_ROBUSTNESS_2_EXTENSION_NAME "VK_KHR_robustness2" +typedef struct VkPhysicalDeviceRobustness2FeaturesKHR { + VkStructureType sType; + void* pNext; + VkBool32 robustBufferAccess2; + VkBool32 robustImageAccess2; + VkBool32 nullDescriptor; +} VkPhysicalDeviceRobustness2FeaturesKHR; + +typedef struct VkPhysicalDeviceRobustness2PropertiesKHR { + VkStructureType sType; + void* pNext; + VkDeviceSize robustStorageBufferAccessSizeAlignment; + VkDeviceSize robustUniformBufferAccessSizeAlignment; +} VkPhysicalDeviceRobustness2PropertiesKHR; + + + // VK_EXT_debug_report is a preprocessor guard. Do not pass it to API calls. #define VK_EXT_debug_report 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkDebugReportCallbackEXT) @@ -12295,7 +13558,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirectByteCountEXT( #define VK_NVX_binary_import 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuModuleNVX) VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCuFunctionNVX) -#define VK_NVX_BINARY_IMPORT_SPEC_VERSION 1 +#define VK_NVX_BINARY_IMPORT_SPEC_VERSION 2 #define VK_NVX_BINARY_IMPORT_EXTENSION_NAME "VK_NVX_binary_import" typedef struct VkCuModuleCreateInfoNVX { VkStructureType sType; @@ -12304,6 +13567,12 @@ typedef struct VkCuModuleCreateInfoNVX { const void* pData; } VkCuModuleCreateInfoNVX; +typedef struct VkCuModuleTexturingModeCreateInfoNVX { + VkStructureType sType; + const void* pNext; + VkBool32 use64bitTexturing; +} VkCuModuleTexturingModeCreateInfoNVX; + typedef struct VkCuFunctionCreateInfoNVX { VkStructureType sType; const void* pNext; @@ -12365,7 +13634,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdCuLaunchKernelNVX( // VK_NVX_image_view_handle is a preprocessor guard. Do not pass it to API calls. #define VK_NVX_image_view_handle 1 -#define VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION 2 +#define VK_NVX_IMAGE_VIEW_HANDLE_SPEC_VERSION 3 #define VK_NVX_IMAGE_VIEW_HANDLE_EXTENSION_NAME "VK_NVX_image_view_handle" typedef struct VkImageViewHandleInfoNVX { VkStructureType sType; @@ -12383,6 +13652,7 @@ typedef struct VkImageViewAddressPropertiesNVX { } VkImageViewAddressPropertiesNVX; typedef uint32_t (VKAPI_PTR *PFN_vkGetImageViewHandleNVX)(VkDevice device, const VkImageViewHandleInfoNVX* pInfo); +typedef uint64_t (VKAPI_PTR *PFN_vkGetImageViewHandle64NVX)(VkDevice device, const VkImageViewHandleInfoNVX* pInfo); typedef VkResult (VKAPI_PTR *PFN_vkGetImageViewAddressNVX)(VkDevice device, VkImageView imageView, VkImageViewAddressPropertiesNVX* pProperties); #ifndef VK_NO_PROTOTYPES @@ -12390,6 +13660,10 @@ VKAPI_ATTR uint32_t VKAPI_CALL vkGetImageViewHandleNVX( VkDevice device, const VkImageViewHandleInfoNVX* pInfo); +VKAPI_ATTR uint64_t VKAPI_CALL vkGetImageViewHandle64NVX( + VkDevice device, + const VkImageViewHandleInfoNVX* pInfo); + VKAPI_ATTR VkResult VKAPI_CALL vkGetImageViewAddressNVX( VkDevice device, VkImageView imageView, @@ -12643,45 +13917,15 @@ typedef struct VkPhysicalDeviceASTCDecodeFeaturesEXT { #define VK_EXT_pipeline_robustness 1 #define VK_EXT_PIPELINE_ROBUSTNESS_SPEC_VERSION 1 #define VK_EXT_PIPELINE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_pipeline_robustness" +typedef VkPipelineRobustnessBufferBehavior VkPipelineRobustnessBufferBehaviorEXT; -typedef enum VkPipelineRobustnessBufferBehaviorEXT { - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT_EXT = 0, - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DISABLED_EXT = 1, - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_EXT = 2, - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT = 3, - VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_MAX_ENUM_EXT = 0x7FFFFFFF -} VkPipelineRobustnessBufferBehaviorEXT; +typedef VkPipelineRobustnessImageBehavior VkPipelineRobustnessImageBehaviorEXT; -typedef enum VkPipelineRobustnessImageBehaviorEXT { - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT_EXT = 0, - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DISABLED_EXT = 1, - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_EXT = 2, - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT = 3, - VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_MAX_ENUM_EXT = 0x7FFFFFFF -} VkPipelineRobustnessImageBehaviorEXT; -typedef struct VkPhysicalDevicePipelineRobustnessFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 pipelineRobustness; -} VkPhysicalDevicePipelineRobustnessFeaturesEXT; +typedef VkPhysicalDevicePipelineRobustnessFeatures VkPhysicalDevicePipelineRobustnessFeaturesEXT; -typedef struct VkPhysicalDevicePipelineRobustnessPropertiesEXT { - VkStructureType sType; - void* pNext; - VkPipelineRobustnessBufferBehaviorEXT defaultRobustnessStorageBuffers; - VkPipelineRobustnessBufferBehaviorEXT defaultRobustnessUniformBuffers; - VkPipelineRobustnessBufferBehaviorEXT defaultRobustnessVertexInputs; - VkPipelineRobustnessImageBehaviorEXT defaultRobustnessImages; -} VkPhysicalDevicePipelineRobustnessPropertiesEXT; - -typedef struct VkPipelineRobustnessCreateInfoEXT { - VkStructureType sType; - const void* pNext; - VkPipelineRobustnessBufferBehaviorEXT storageBuffers; - VkPipelineRobustnessBufferBehaviorEXT uniformBuffers; - VkPipelineRobustnessBufferBehaviorEXT vertexInputs; - VkPipelineRobustnessImageBehaviorEXT images; -} VkPipelineRobustnessCreateInfoEXT; +typedef VkPhysicalDevicePipelineRobustnessProperties VkPhysicalDevicePipelineRobustnessPropertiesEXT; + +typedef VkPipelineRobustnessCreateInfo VkPipelineRobustnessCreateInfoEXT; @@ -13836,6 +15080,8 @@ typedef enum VkGeometryTypeKHR { VK_GEOMETRY_TYPE_TRIANGLES_KHR = 0, VK_GEOMETRY_TYPE_AABBS_KHR = 1, VK_GEOMETRY_TYPE_INSTANCES_KHR = 2, + VK_GEOMETRY_TYPE_SPHERES_NV = 1000429004, + VK_GEOMETRY_TYPE_LINEAR_SWEPT_SPHERES_NV = 1000429005, VK_GEOMETRY_TYPE_TRIANGLES_NV = VK_GEOMETRY_TYPE_TRIANGLES_KHR, VK_GEOMETRY_TYPE_AABBS_NV = VK_GEOMETRY_TYPE_AABBS_KHR, VK_GEOMETRY_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF @@ -13891,13 +15137,17 @@ typedef enum VkGeometryInstanceFlagBitsKHR { VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR = 0x00000002, VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR = 0x00000004, VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR = 0x00000008, - VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT = 0x00000010, - VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT = 0x00000020, + VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_BIT_EXT = 0x00000010, + VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT = 0x00000020, VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR = VK_GEOMETRY_INSTANCE_TRIANGLE_FLIP_FACING_BIT_KHR, VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FACING_CULL_DISABLE_BIT_KHR, VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV = VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_KHR, VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_KHR, VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_NV = VK_GEOMETRY_INSTANCE_FORCE_NO_OPAQUE_BIT_KHR, + // VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT is a deprecated alias + VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_EXT = VK_GEOMETRY_INSTANCE_FORCE_OPACITY_MICROMAP_2_STATE_BIT_EXT, + // VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT is a deprecated alias + VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_EXT = VK_GEOMETRY_INSTANCE_DISABLE_OPACITY_MICROMAPS_BIT_EXT, VK_GEOMETRY_INSTANCE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkGeometryInstanceFlagBitsKHR; typedef VkFlags VkGeometryInstanceFlagsKHR; @@ -13913,18 +15163,30 @@ typedef enum VkBuildAccelerationStructureFlagBitsKHR { VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR = 0x00000008, VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR = 0x00000010, VK_BUILD_ACCELERATION_STRUCTURE_MOTION_BIT_NV = 0x00000020, - VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT = 0x00000040, - VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT = 0x00000080, - VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT = 0x00000100, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_EXT = 0x00000040, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT = 0x00000080, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT = 0x00000100, #ifdef VK_ENABLE_BETA_EXTENSIONS - VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV = 0x00000200, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV = 0x00000200, #endif - VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR = 0x00000800, + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR = 0x00000800, VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR, VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_COMPACTION_BIT_KHR, VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR, VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_NV = VK_BUILD_ACCELERATION_STRUCTURE_LOW_MEMORY_BIT_KHR, + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT is a deprecated alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_UPDATE_BIT_EXT, + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT is a deprecated alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISABLE_OPACITY_MICROMAPS_BIT_EXT, + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT is a deprecated alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_EXT = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_OPACITY_MICROMAP_DATA_UPDATE_BIT_EXT, +#ifdef VK_ENABLE_BETA_EXTENSIONS + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV is a deprecated alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_NV = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DISPLACEMENT_MICROMAP_UPDATE_BIT_NV, +#endif + // VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR is a deprecated alias + VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_BIT_KHR, VK_BUILD_ACCELERATION_STRUCTURE_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF } VkBuildAccelerationStructureFlagBitsKHR; typedef VkFlags VkBuildAccelerationStructureFlagsKHR; @@ -14238,9 +15500,9 @@ typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT { #define VK_EXT_global_priority 1 #define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2 #define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority" -typedef VkQueueGlobalPriorityKHR VkQueueGlobalPriorityEXT; +typedef VkQueueGlobalPriority VkQueueGlobalPriorityEXT; -typedef VkDeviceQueueGlobalPriorityCreateInfoKHR VkDeviceQueueGlobalPriorityCreateInfoEXT; +typedef VkDeviceQueueGlobalPriorityCreateInfo VkDeviceQueueGlobalPriorityCreateInfoEXT; @@ -14399,11 +15661,11 @@ typedef struct VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT { uint32_t maxVertexAttribDivisor; } VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT; -typedef VkVertexInputBindingDivisorDescriptionKHR VkVertexInputBindingDivisorDescriptionEXT; +typedef VkVertexInputBindingDivisorDescription VkVertexInputBindingDivisorDescriptionEXT; -typedef VkPipelineVertexInputDivisorStateCreateInfoKHR VkPipelineVertexInputDivisorStateCreateInfoEXT; +typedef VkPipelineVertexInputDivisorStateCreateInfo VkPipelineVertexInputDivisorStateCreateInfoEXT; -typedef VkPhysicalDeviceVertexAttributeDivisorFeaturesKHR VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT; +typedef VkPhysicalDeviceVertexAttributeDivisorFeatures VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT; @@ -15218,13 +16480,13 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateHeadlessSurfaceEXT( #define VK_EXT_line_rasterization 1 #define VK_EXT_LINE_RASTERIZATION_SPEC_VERSION 1 #define VK_EXT_LINE_RASTERIZATION_EXTENSION_NAME "VK_EXT_line_rasterization" -typedef VkLineRasterizationModeKHR VkLineRasterizationModeEXT; +typedef VkLineRasterizationMode VkLineRasterizationModeEXT; -typedef VkPhysicalDeviceLineRasterizationFeaturesKHR VkPhysicalDeviceLineRasterizationFeaturesEXT; +typedef VkPhysicalDeviceLineRasterizationFeatures VkPhysicalDeviceLineRasterizationFeaturesEXT; -typedef VkPhysicalDeviceLineRasterizationPropertiesKHR VkPhysicalDeviceLineRasterizationPropertiesEXT; +typedef VkPhysicalDeviceLineRasterizationProperties VkPhysicalDeviceLineRasterizationPropertiesEXT; -typedef VkPipelineRasterizationLineStateCreateInfoKHR VkPipelineRasterizationLineStateCreateInfoEXT; +typedef VkPipelineRasterizationLineStateCreateInfo VkPipelineRasterizationLineStateCreateInfoEXT; typedef void (VKAPI_PTR *PFN_vkCmdSetLineStippleEXT)(VkCommandBuffer commandBuffer, uint32_t lineStippleFactor, uint16_t lineStipplePattern); @@ -15280,7 +16542,7 @@ VKAPI_ATTR void VKAPI_CALL vkResetQueryPoolEXT( #define VK_EXT_index_type_uint8 1 #define VK_EXT_INDEX_TYPE_UINT8_SPEC_VERSION 1 #define VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME "VK_EXT_index_type_uint8" -typedef VkPhysicalDeviceIndexTypeUint8FeaturesKHR VkPhysicalDeviceIndexTypeUint8FeaturesEXT; +typedef VkPhysicalDeviceIndexTypeUint8Features VkPhysicalDeviceIndexTypeUint8FeaturesEXT; @@ -15373,138 +16635,63 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOpEXT( #define VK_EXT_host_image_copy 1 #define VK_EXT_HOST_IMAGE_COPY_SPEC_VERSION 1 #define VK_EXT_HOST_IMAGE_COPY_EXTENSION_NAME "VK_EXT_host_image_copy" +typedef VkHostImageCopyFlagBits VkHostImageCopyFlagBitsEXT; -typedef enum VkHostImageCopyFlagBitsEXT { - VK_HOST_IMAGE_COPY_MEMCPY_EXT = 0x00000001, - VK_HOST_IMAGE_COPY_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF -} VkHostImageCopyFlagBitsEXT; -typedef VkFlags VkHostImageCopyFlagsEXT; -typedef struct VkPhysicalDeviceHostImageCopyFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 hostImageCopy; -} VkPhysicalDeviceHostImageCopyFeaturesEXT; +typedef VkHostImageCopyFlags VkHostImageCopyFlagsEXT; + +typedef VkPhysicalDeviceHostImageCopyFeatures VkPhysicalDeviceHostImageCopyFeaturesEXT; + +typedef VkPhysicalDeviceHostImageCopyProperties VkPhysicalDeviceHostImageCopyPropertiesEXT; -typedef struct VkPhysicalDeviceHostImageCopyPropertiesEXT { - VkStructureType sType; - void* pNext; - uint32_t copySrcLayoutCount; - VkImageLayout* pCopySrcLayouts; - uint32_t copyDstLayoutCount; - VkImageLayout* pCopyDstLayouts; - uint8_t optimalTilingLayoutUUID[VK_UUID_SIZE]; - VkBool32 identicalMemoryTypeRequirements; -} VkPhysicalDeviceHostImageCopyPropertiesEXT; +typedef VkMemoryToImageCopy VkMemoryToImageCopyEXT; -typedef struct VkMemoryToImageCopyEXT { - VkStructureType sType; - const void* pNext; - const void* pHostPointer; - uint32_t memoryRowLength; - uint32_t memoryImageHeight; - VkImageSubresourceLayers imageSubresource; - VkOffset3D imageOffset; - VkExtent3D imageExtent; -} VkMemoryToImageCopyEXT; +typedef VkImageToMemoryCopy VkImageToMemoryCopyEXT; -typedef struct VkImageToMemoryCopyEXT { - VkStructureType sType; - const void* pNext; - void* pHostPointer; - uint32_t memoryRowLength; - uint32_t memoryImageHeight; - VkImageSubresourceLayers imageSubresource; - VkOffset3D imageOffset; - VkExtent3D imageExtent; -} VkImageToMemoryCopyEXT; +typedef VkCopyMemoryToImageInfo VkCopyMemoryToImageInfoEXT; -typedef struct VkCopyMemoryToImageInfoEXT { - VkStructureType sType; - const void* pNext; - VkHostImageCopyFlagsEXT flags; - VkImage dstImage; - VkImageLayout dstImageLayout; - uint32_t regionCount; - const VkMemoryToImageCopyEXT* pRegions; -} VkCopyMemoryToImageInfoEXT; - -typedef struct VkCopyImageToMemoryInfoEXT { - VkStructureType sType; - const void* pNext; - VkHostImageCopyFlagsEXT flags; - VkImage srcImage; - VkImageLayout srcImageLayout; - uint32_t regionCount; - const VkImageToMemoryCopyEXT* pRegions; -} VkCopyImageToMemoryInfoEXT; - -typedef struct VkCopyImageToImageInfoEXT { - VkStructureType sType; - const void* pNext; - VkHostImageCopyFlagsEXT flags; - VkImage srcImage; - VkImageLayout srcImageLayout; - VkImage dstImage; - VkImageLayout dstImageLayout; - uint32_t regionCount; - const VkImageCopy2* pRegions; -} VkCopyImageToImageInfoEXT; - -typedef struct VkHostImageLayoutTransitionInfoEXT { - VkStructureType sType; - const void* pNext; - VkImage image; - VkImageLayout oldLayout; - VkImageLayout newLayout; - VkImageSubresourceRange subresourceRange; -} VkHostImageLayoutTransitionInfoEXT; +typedef VkCopyImageToMemoryInfo VkCopyImageToMemoryInfoEXT; -typedef struct VkSubresourceHostMemcpySizeEXT { - VkStructureType sType; - void* pNext; - VkDeviceSize size; -} VkSubresourceHostMemcpySizeEXT; +typedef VkCopyImageToImageInfo VkCopyImageToImageInfoEXT; -typedef struct VkHostImageCopyDevicePerformanceQueryEXT { - VkStructureType sType; - void* pNext; - VkBool32 optimalDeviceAccess; - VkBool32 identicalMemoryLayout; -} VkHostImageCopyDevicePerformanceQueryEXT; +typedef VkHostImageLayoutTransitionInfo VkHostImageLayoutTransitionInfoEXT; + +typedef VkSubresourceHostMemcpySize VkSubresourceHostMemcpySizeEXT; -typedef VkSubresourceLayout2KHR VkSubresourceLayout2EXT; +typedef VkHostImageCopyDevicePerformanceQuery VkHostImageCopyDevicePerformanceQueryEXT; -typedef VkImageSubresource2KHR VkImageSubresource2EXT; +typedef VkSubresourceLayout2 VkSubresourceLayout2EXT; -typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToImageEXT)(VkDevice device, const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo); -typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToMemoryEXT)(VkDevice device, const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo); -typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToImageEXT)(VkDevice device, const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo); -typedef VkResult (VKAPI_PTR *PFN_vkTransitionImageLayoutEXT)(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfoEXT* pTransitions); -typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2EXT)(VkDevice device, VkImage image, const VkImageSubresource2KHR* pSubresource, VkSubresourceLayout2KHR* pLayout); +typedef VkImageSubresource2 VkImageSubresource2EXT; + +typedef VkResult (VKAPI_PTR *PFN_vkCopyMemoryToImageEXT)(VkDevice device, const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToMemoryEXT)(VkDevice device, const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); +typedef VkResult (VKAPI_PTR *PFN_vkCopyImageToImageEXT)(VkDevice device, const VkCopyImageToImageInfo* pCopyImageToImageInfo); +typedef VkResult (VKAPI_PTR *PFN_vkTransitionImageLayoutEXT)(VkDevice device, uint32_t transitionCount, const VkHostImageLayoutTransitionInfo* pTransitions); +typedef void (VKAPI_PTR *PFN_vkGetImageSubresourceLayout2EXT)(VkDevice device, VkImage image, const VkImageSubresource2* pSubresource, VkSubresourceLayout2* pLayout); #ifndef VK_NO_PROTOTYPES VKAPI_ATTR VkResult VKAPI_CALL vkCopyMemoryToImageEXT( VkDevice device, - const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo); + const VkCopyMemoryToImageInfo* pCopyMemoryToImageInfo); VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToMemoryEXT( VkDevice device, - const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo); + const VkCopyImageToMemoryInfo* pCopyImageToMemoryInfo); VKAPI_ATTR VkResult VKAPI_CALL vkCopyImageToImageEXT( VkDevice device, - const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo); + const VkCopyImageToImageInfo* pCopyImageToImageInfo); VKAPI_ATTR VkResult VKAPI_CALL vkTransitionImageLayoutEXT( VkDevice device, uint32_t transitionCount, - const VkHostImageLayoutTransitionInfoEXT* pTransitions); + const VkHostImageLayoutTransitionInfo* pTransitions); VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout2EXT( VkDevice device, VkImage image, - const VkImageSubresource2KHR* pSubresource, - VkSubresourceLayout2KHR* pLayout); + const VkImageSubresource2* pSubresource, + VkSubresourceLayout2* pLayout); #endif @@ -16028,20 +17215,9 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetDrmDisplayEXT( #define VK_EXT_robustness2 1 #define VK_EXT_ROBUSTNESS_2_SPEC_VERSION 1 #define VK_EXT_ROBUSTNESS_2_EXTENSION_NAME "VK_EXT_robustness2" -typedef struct VkPhysicalDeviceRobustness2FeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 robustBufferAccess2; - VkBool32 robustImageAccess2; - VkBool32 nullDescriptor; -} VkPhysicalDeviceRobustness2FeaturesEXT; +typedef VkPhysicalDeviceRobustness2FeaturesKHR VkPhysicalDeviceRobustness2FeaturesEXT; -typedef struct VkPhysicalDeviceRobustness2PropertiesEXT { - VkStructureType sType; - void* pNext; - VkDeviceSize robustStorageBufferAccessSizeAlignment; - VkDeviceSize robustUniformBufferAccessSizeAlignment; -} VkPhysicalDeviceRobustness2PropertiesEXT; +typedef VkPhysicalDeviceRobustness2PropertiesKHR VkPhysicalDeviceRobustness2PropertiesEXT; @@ -16189,95 +17365,83 @@ typedef struct VkDeviceDiagnosticsConfigCreateInfoNV { #define VK_QCOM_RENDER_PASS_STORE_OPS_EXTENSION_NAME "VK_QCOM_render_pass_store_ops" -// VK_NV_cuda_kernel_launch is a preprocessor guard. Do not pass it to API calls. -#define VK_NV_cuda_kernel_launch 1 -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaModuleNV) -VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkCudaFunctionNV) -#define VK_NV_CUDA_KERNEL_LAUNCH_SPEC_VERSION 2 -#define VK_NV_CUDA_KERNEL_LAUNCH_EXTENSION_NAME "VK_NV_cuda_kernel_launch" -typedef struct VkCudaModuleCreateInfoNV { - VkStructureType sType; - const void* pNext; - size_t dataSize; - const void* pData; -} VkCudaModuleCreateInfoNV; +// VK_QCOM_tile_shading is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_tile_shading 1 +#define VK_QCOM_TILE_SHADING_SPEC_VERSION 1 +#define VK_QCOM_TILE_SHADING_EXTENSION_NAME "VK_QCOM_tile_shading" + +typedef enum VkTileShadingRenderPassFlagBitsQCOM { + VK_TILE_SHADING_RENDER_PASS_ENABLE_BIT_QCOM = 0x00000001, + VK_TILE_SHADING_RENDER_PASS_PER_TILE_EXECUTION_BIT_QCOM = 0x00000002, + VK_TILE_SHADING_RENDER_PASS_FLAG_BITS_MAX_ENUM_QCOM = 0x7FFFFFFF +} VkTileShadingRenderPassFlagBitsQCOM; +typedef VkFlags VkTileShadingRenderPassFlagsQCOM; +typedef struct VkPhysicalDeviceTileShadingFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 tileShading; + VkBool32 tileShadingFragmentStage; + VkBool32 tileShadingColorAttachments; + VkBool32 tileShadingDepthAttachments; + VkBool32 tileShadingStencilAttachments; + VkBool32 tileShadingInputAttachments; + VkBool32 tileShadingSampledAttachments; + VkBool32 tileShadingPerTileDraw; + VkBool32 tileShadingPerTileDispatch; + VkBool32 tileShadingDispatchTile; + VkBool32 tileShadingApron; + VkBool32 tileShadingAnisotropicApron; + VkBool32 tileShadingAtomicOps; + VkBool32 tileShadingImageProcessing; +} VkPhysicalDeviceTileShadingFeaturesQCOM; + +typedef struct VkPhysicalDeviceTileShadingPropertiesQCOM { + VkStructureType sType; + void* pNext; + uint32_t maxApronSize; + VkBool32 preferNonCoherent; + VkExtent2D tileGranularity; + VkExtent2D maxTileShadingRate; +} VkPhysicalDeviceTileShadingPropertiesQCOM; + +typedef struct VkRenderPassTileShadingCreateInfoQCOM { + VkStructureType sType; + const void* pNext; + VkTileShadingRenderPassFlagsQCOM flags; + VkExtent2D tileApronSize; +} VkRenderPassTileShadingCreateInfoQCOM; -typedef struct VkCudaFunctionCreateInfoNV { +typedef struct VkPerTileBeginInfoQCOM { VkStructureType sType; const void* pNext; - VkCudaModuleNV module; - const char* pName; -} VkCudaFunctionCreateInfoNV; - -typedef struct VkCudaLaunchInfoNV { - VkStructureType sType; - const void* pNext; - VkCudaFunctionNV function; - uint32_t gridDimX; - uint32_t gridDimY; - uint32_t gridDimZ; - uint32_t blockDimX; - uint32_t blockDimY; - uint32_t blockDimZ; - uint32_t sharedMemBytes; - size_t paramCount; - const void* const * pParams; - size_t extraCount; - const void* const * pExtras; -} VkCudaLaunchInfoNV; +} VkPerTileBeginInfoQCOM; -typedef struct VkPhysicalDeviceCudaKernelLaunchFeaturesNV { +typedef struct VkPerTileEndInfoQCOM { VkStructureType sType; - void* pNext; - VkBool32 cudaKernelLaunchFeatures; -} VkPhysicalDeviceCudaKernelLaunchFeaturesNV; + const void* pNext; +} VkPerTileEndInfoQCOM; -typedef struct VkPhysicalDeviceCudaKernelLaunchPropertiesNV { +typedef struct VkDispatchTileInfoQCOM { VkStructureType sType; - void* pNext; - uint32_t computeCapabilityMinor; - uint32_t computeCapabilityMajor; -} VkPhysicalDeviceCudaKernelLaunchPropertiesNV; + const void* pNext; +} VkDispatchTileInfoQCOM; -typedef VkResult (VKAPI_PTR *PFN_vkCreateCudaModuleNV)(VkDevice device, const VkCudaModuleCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCudaModuleNV* pModule); -typedef VkResult (VKAPI_PTR *PFN_vkGetCudaModuleCacheNV)(VkDevice device, VkCudaModuleNV module, size_t* pCacheSize, void* pCacheData); -typedef VkResult (VKAPI_PTR *PFN_vkCreateCudaFunctionNV)(VkDevice device, const VkCudaFunctionCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkCudaFunctionNV* pFunction); -typedef void (VKAPI_PTR *PFN_vkDestroyCudaModuleNV)(VkDevice device, VkCudaModuleNV module, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkDestroyCudaFunctionNV)(VkDevice device, VkCudaFunctionNV function, const VkAllocationCallbacks* pAllocator); -typedef void (VKAPI_PTR *PFN_vkCmdCudaLaunchKernelNV)(VkCommandBuffer commandBuffer, const VkCudaLaunchInfoNV* pLaunchInfo); +typedef void (VKAPI_PTR *PFN_vkCmdDispatchTileQCOM)(VkCommandBuffer commandBuffer, const VkDispatchTileInfoQCOM* pDispatchTileInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBeginPerTileExecutionQCOM)(VkCommandBuffer commandBuffer, const VkPerTileBeginInfoQCOM* pPerTileBeginInfo); +typedef void (VKAPI_PTR *PFN_vkCmdEndPerTileExecutionQCOM)(VkCommandBuffer commandBuffer, const VkPerTileEndInfoQCOM* pPerTileEndInfo); #ifndef VK_NO_PROTOTYPES -VKAPI_ATTR VkResult VKAPI_CALL vkCreateCudaModuleNV( - VkDevice device, - const VkCudaModuleCreateInfoNV* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkCudaModuleNV* pModule); - -VKAPI_ATTR VkResult VKAPI_CALL vkGetCudaModuleCacheNV( - VkDevice device, - VkCudaModuleNV module, - size_t* pCacheSize, - void* pCacheData); - -VKAPI_ATTR VkResult VKAPI_CALL vkCreateCudaFunctionNV( - VkDevice device, - const VkCudaFunctionCreateInfoNV* pCreateInfo, - const VkAllocationCallbacks* pAllocator, - VkCudaFunctionNV* pFunction); - -VKAPI_ATTR void VKAPI_CALL vkDestroyCudaModuleNV( - VkDevice device, - VkCudaModuleNV module, - const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkCmdDispatchTileQCOM( + VkCommandBuffer commandBuffer, + const VkDispatchTileInfoQCOM* pDispatchTileInfo); -VKAPI_ATTR void VKAPI_CALL vkDestroyCudaFunctionNV( - VkDevice device, - VkCudaFunctionNV function, - const VkAllocationCallbacks* pAllocator); +VKAPI_ATTR void VKAPI_CALL vkCmdBeginPerTileExecutionQCOM( + VkCommandBuffer commandBuffer, + const VkPerTileBeginInfoQCOM* pPerTileBeginInfo); -VKAPI_ATTR void VKAPI_CALL vkCmdCudaLaunchKernelNV( +VKAPI_ATTR void VKAPI_CALL vkCmdEndPerTileExecutionQCOM( VkCommandBuffer commandBuffer, - const VkCudaLaunchInfoNV* pLaunchInfo); + const VkPerTileEndInfoQCOM* pPerTileEndInfo); #endif @@ -17372,10 +18536,10 @@ typedef struct VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT { #define VK_EXT_global_priority_query 1 #define VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION 1 #define VK_EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME "VK_EXT_global_priority_query" -#define VK_MAX_GLOBAL_PRIORITY_SIZE_EXT VK_MAX_GLOBAL_PRIORITY_SIZE_KHR -typedef VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT; +#define VK_MAX_GLOBAL_PRIORITY_SIZE_EXT VK_MAX_GLOBAL_PRIORITY_SIZE +typedef VkPhysicalDeviceGlobalPriorityQueryFeatures VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT; -typedef VkQueueFamilyGlobalPriorityPropertiesKHR VkQueueFamilyGlobalPriorityPropertiesEXT; +typedef VkQueueFamilyGlobalPriorityProperties VkQueueFamilyGlobalPriorityPropertiesEXT; @@ -17520,6 +18684,7 @@ typedef enum VkOpacityMicromapSpecialIndexEXT { VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_OPAQUE_EXT = -2, VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_TRANSPARENT_EXT = -3, VK_OPACITY_MICROMAP_SPECIAL_INDEX_FULLY_UNKNOWN_OPAQUE_EXT = -4, + VK_OPACITY_MICROMAP_SPECIAL_INDEX_CLUSTER_GEOMETRY_DISABLE_OPACITY_MICROMAP_NV = -5, VK_OPACITY_MICROMAP_SPECIAL_INDEX_MAX_ENUM_EXT = 0x7FFFFFFF } VkOpacityMicromapSpecialIndexEXT; @@ -17951,11 +19116,7 @@ VKAPI_ATTR void VKAPI_CALL vkGetDescriptorSetHostMappingVALVE( #define VK_EXT_depth_clamp_zero_one 1 #define VK_EXT_DEPTH_CLAMP_ZERO_ONE_SPEC_VERSION 1 #define VK_EXT_DEPTH_CLAMP_ZERO_ONE_EXTENSION_NAME "VK_EXT_depth_clamp_zero_one" -typedef struct VkPhysicalDeviceDepthClampZeroOneFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 depthClampZeroOne; -} VkPhysicalDeviceDepthClampZeroOneFeaturesEXT; +typedef VkPhysicalDeviceDepthClampZeroOneFeaturesKHR VkPhysicalDeviceDepthClampZeroOneFeaturesEXT; @@ -18012,26 +19173,32 @@ typedef struct VkRenderPassStripeSubmitInfoARM { // VK_QCOM_fragment_density_map_offset is a preprocessor guard. Do not pass it to API calls. #define VK_QCOM_fragment_density_map_offset 1 -#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 2 +#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 3 #define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_QCOM_fragment_density_map_offset" -typedef struct VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM { +typedef struct VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT { VkStructureType sType; void* pNext; VkBool32 fragmentDensityMapOffset; -} VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; +} VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT; -typedef struct VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM { +typedef VkPhysicalDeviceFragmentDensityMapOffsetFeaturesEXT VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM; + +typedef struct VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT { VkStructureType sType; void* pNext; VkExtent2D fragmentDensityOffsetGranularity; -} VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; +} VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT; + +typedef VkPhysicalDeviceFragmentDensityMapOffsetPropertiesEXT VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM; -typedef struct VkSubpassFragmentDensityMapOffsetEndInfoQCOM { +typedef struct VkRenderPassFragmentDensityMapOffsetEndInfoEXT { VkStructureType sType; const void* pNext; uint32_t fragmentDensityOffsetCount; const VkOffset2D* pFragmentDensityOffsets; -} VkSubpassFragmentDensityMapOffsetEndInfoQCOM; +} VkRenderPassFragmentDensityMapOffsetEndInfoEXT; + +typedef VkRenderPassFragmentDensityMapOffsetEndInfoEXT VkSubpassFragmentDensityMapOffsetEndInfoQCOM; @@ -18187,6 +19354,61 @@ VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetPipelineIndirectDeviceAddressNV( #endif +// VK_NV_ray_tracing_linear_swept_spheres is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_ray_tracing_linear_swept_spheres 1 +#define VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_SPEC_VERSION 1 +#define VK_NV_RAY_TRACING_LINEAR_SWEPT_SPHERES_EXTENSION_NAME "VK_NV_ray_tracing_linear_swept_spheres" + +typedef enum VkRayTracingLssIndexingModeNV { + VK_RAY_TRACING_LSS_INDEXING_MODE_LIST_NV = 0, + VK_RAY_TRACING_LSS_INDEXING_MODE_SUCCESSIVE_NV = 1, + VK_RAY_TRACING_LSS_INDEXING_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkRayTracingLssIndexingModeNV; + +typedef enum VkRayTracingLssPrimitiveEndCapsModeNV { + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_NONE_NV = 0, + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_CHAINED_NV = 1, + VK_RAY_TRACING_LSS_PRIMITIVE_END_CAPS_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkRayTracingLssPrimitiveEndCapsModeNV; +typedef struct VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 spheres; + VkBool32 linearSweptSpheres; +} VkPhysicalDeviceRayTracingLinearSweptSpheresFeaturesNV; + +typedef struct VkAccelerationStructureGeometryLinearSweptSpheresDataNV { + VkStructureType sType; + const void* pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + VkFormat radiusFormat; + VkDeviceOrHostAddressConstKHR radiusData; + VkDeviceSize radiusStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceSize indexStride; + VkRayTracingLssIndexingModeNV indexingMode; + VkRayTracingLssPrimitiveEndCapsModeNV endCapsMode; +} VkAccelerationStructureGeometryLinearSweptSpheresDataNV; + +typedef struct VkAccelerationStructureGeometrySpheresDataNV { + VkStructureType sType; + const void* pNext; + VkFormat vertexFormat; + VkDeviceOrHostAddressConstKHR vertexData; + VkDeviceSize vertexStride; + VkFormat radiusFormat; + VkDeviceOrHostAddressConstKHR radiusData; + VkDeviceSize radiusStride; + VkIndexType indexType; + VkDeviceOrHostAddressConstKHR indexData; + VkDeviceSize indexStride; +} VkAccelerationStructureGeometrySpheresDataNV; + + + // VK_NV_linear_color_attachment is a preprocessor guard. Do not pass it to API calls. #define VK_NV_linear_color_attachment 1 #define VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION 1 @@ -18572,35 +19794,335 @@ typedef struct VkRenderPassSubpassFeedbackCreateInfoEXT { -// VK_LUNARG_direct_driver_loading is a preprocessor guard. Do not pass it to API calls. -#define VK_LUNARG_direct_driver_loading 1 -#define VK_LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION 1 -#define VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME "VK_LUNARG_direct_driver_loading" +// VK_LUNARG_direct_driver_loading is a preprocessor guard. Do not pass it to API calls. +#define VK_LUNARG_direct_driver_loading 1 +#define VK_LUNARG_DIRECT_DRIVER_LOADING_SPEC_VERSION 1 +#define VK_LUNARG_DIRECT_DRIVER_LOADING_EXTENSION_NAME "VK_LUNARG_direct_driver_loading" + +typedef enum VkDirectDriverLoadingModeLUNARG { + VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG = 0, + VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG = 1, + VK_DIRECT_DRIVER_LOADING_MODE_MAX_ENUM_LUNARG = 0x7FFFFFFF +} VkDirectDriverLoadingModeLUNARG; +typedef VkFlags VkDirectDriverLoadingFlagsLUNARG; +typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddrLUNARG)( + VkInstance instance, const char* pName); + +typedef struct VkDirectDriverLoadingInfoLUNARG { + VkStructureType sType; + void* pNext; + VkDirectDriverLoadingFlagsLUNARG flags; + PFN_vkGetInstanceProcAddrLUNARG pfnGetInstanceProcAddr; +} VkDirectDriverLoadingInfoLUNARG; + +typedef struct VkDirectDriverLoadingListLUNARG { + VkStructureType sType; + const void* pNext; + VkDirectDriverLoadingModeLUNARG mode; + uint32_t driverCount; + const VkDirectDriverLoadingInfoLUNARG* pDrivers; +} VkDirectDriverLoadingListLUNARG; + + + +// VK_ARM_tensors is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_tensors 1 +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorARM) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkTensorViewARM) +#define VK_ARM_TENSORS_SPEC_VERSION 1 +#define VK_ARM_TENSORS_EXTENSION_NAME "VK_ARM_tensors" + +typedef enum VkTensorTilingARM { + VK_TENSOR_TILING_OPTIMAL_ARM = 0, + VK_TENSOR_TILING_LINEAR_ARM = 1, + VK_TENSOR_TILING_MAX_ENUM_ARM = 0x7FFFFFFF +} VkTensorTilingARM; +typedef VkFlags64 VkTensorCreateFlagsARM; + +// Flag bits for VkTensorCreateFlagBitsARM +typedef VkFlags64 VkTensorCreateFlagBitsARM; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_MUTABLE_FORMAT_BIT_ARM = 0x00000001ULL; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_PROTECTED_BIT_ARM = 0x00000002ULL; +static const VkTensorCreateFlagBitsARM VK_TENSOR_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM = 0x00000004ULL; + +typedef VkFlags64 VkTensorViewCreateFlagsARM; + +// Flag bits for VkTensorViewCreateFlagBitsARM +typedef VkFlags64 VkTensorViewCreateFlagBitsARM; +static const VkTensorViewCreateFlagBitsARM VK_TENSOR_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_ARM = 0x00000001ULL; + +typedef VkFlags64 VkTensorUsageFlagsARM; + +// Flag bits for VkTensorUsageFlagBitsARM +typedef VkFlags64 VkTensorUsageFlagBitsARM; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_SHADER_BIT_ARM = 0x00000002ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_TRANSFER_SRC_BIT_ARM = 0x00000004ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_TRANSFER_DST_BIT_ARM = 0x00000008ULL; +static const VkTensorUsageFlagBitsARM VK_TENSOR_USAGE_IMAGE_ALIASING_BIT_ARM = 0x00000010ULL; + +typedef struct VkTensorDescriptionARM { + VkStructureType sType; + const void* pNext; + VkTensorTilingARM tiling; + VkFormat format; + uint32_t dimensionCount; + const int64_t* pDimensions; + const int64_t* pStrides; + VkTensorUsageFlagsARM usage; +} VkTensorDescriptionARM; + +typedef struct VkTensorCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorCreateFlagsARM flags; + const VkTensorDescriptionARM* pDescription; + VkSharingMode sharingMode; + uint32_t queueFamilyIndexCount; + const uint32_t* pQueueFamilyIndices; +} VkTensorCreateInfoARM; + +typedef struct VkTensorViewCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorViewCreateFlagsARM flags; + VkTensorARM tensor; + VkFormat format; +} VkTensorViewCreateInfoARM; + +typedef struct VkTensorMemoryRequirementsInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; +} VkTensorMemoryRequirementsInfoARM; + +typedef struct VkBindTensorMemoryInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; + VkDeviceMemory memory; + VkDeviceSize memoryOffset; +} VkBindTensorMemoryInfoARM; + +typedef struct VkWriteDescriptorSetTensorARM { + VkStructureType sType; + const void* pNext; + uint32_t tensorViewCount; + const VkTensorViewARM* pTensorViews; +} VkWriteDescriptorSetTensorARM; + +typedef struct VkTensorFormatPropertiesARM { + VkStructureType sType; + const void* pNext; + VkFormatFeatureFlags2 optimalTilingTensorFeatures; + VkFormatFeatureFlags2 linearTilingTensorFeatures; +} VkTensorFormatPropertiesARM; + +typedef struct VkPhysicalDeviceTensorPropertiesARM { + VkStructureType sType; + void* pNext; + uint32_t maxTensorDimensionCount; + uint64_t maxTensorElements; + uint64_t maxPerDimensionTensorElements; + int64_t maxTensorStride; + uint64_t maxTensorSize; + uint32_t maxTensorShaderAccessArrayLength; + uint32_t maxTensorShaderAccessSize; + uint32_t maxDescriptorSetStorageTensors; + uint32_t maxPerStageDescriptorSetStorageTensors; + uint32_t maxDescriptorSetUpdateAfterBindStorageTensors; + uint32_t maxPerStageDescriptorUpdateAfterBindStorageTensors; + VkBool32 shaderStorageTensorArrayNonUniformIndexingNative; + VkShaderStageFlags shaderTensorSupportedStages; +} VkPhysicalDeviceTensorPropertiesARM; + +typedef struct VkTensorMemoryBarrierARM { + VkStructureType sType; + const void* pNext; + VkPipelineStageFlags2 srcStageMask; + VkAccessFlags2 srcAccessMask; + VkPipelineStageFlags2 dstStageMask; + VkAccessFlags2 dstAccessMask; + uint32_t srcQueueFamilyIndex; + uint32_t dstQueueFamilyIndex; + VkTensorARM tensor; +} VkTensorMemoryBarrierARM; + +typedef struct VkTensorDependencyInfoARM { + VkStructureType sType; + const void* pNext; + uint32_t tensorMemoryBarrierCount; + const VkTensorMemoryBarrierARM* pTensorMemoryBarriers; +} VkTensorDependencyInfoARM; + +typedef struct VkPhysicalDeviceTensorFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 tensorNonPacked; + VkBool32 shaderTensorAccess; + VkBool32 shaderStorageTensorArrayDynamicIndexing; + VkBool32 shaderStorageTensorArrayNonUniformIndexing; + VkBool32 descriptorBindingStorageTensorUpdateAfterBind; + VkBool32 tensors; +} VkPhysicalDeviceTensorFeaturesARM; + +typedef struct VkDeviceTensorMemoryRequirementsARM { + VkStructureType sType; + const void* pNext; + const VkTensorCreateInfoARM* pCreateInfo; +} VkDeviceTensorMemoryRequirementsARM; + +typedef struct VkTensorCopyARM { + VkStructureType sType; + const void* pNext; + uint32_t dimensionCount; + const uint64_t* pSrcOffset; + const uint64_t* pDstOffset; + const uint64_t* pExtent; +} VkTensorCopyARM; + +typedef struct VkCopyTensorInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM srcTensor; + VkTensorARM dstTensor; + uint32_t regionCount; + const VkTensorCopyARM* pRegions; +} VkCopyTensorInfoARM; + +typedef struct VkMemoryDedicatedAllocateInfoTensorARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; +} VkMemoryDedicatedAllocateInfoTensorARM; + +typedef struct VkPhysicalDeviceExternalTensorInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorCreateFlagsARM flags; + const VkTensorDescriptionARM* pDescription; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkPhysicalDeviceExternalTensorInfoARM; + +typedef struct VkExternalTensorPropertiesARM { + VkStructureType sType; + const void* pNext; + VkExternalMemoryProperties externalMemoryProperties; +} VkExternalTensorPropertiesARM; + +typedef struct VkExternalMemoryTensorCreateInfoARM { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlags handleTypes; +} VkExternalMemoryTensorCreateInfoARM; + +typedef struct VkPhysicalDeviceDescriptorBufferTensorFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 descriptorBufferTensorDescriptors; +} VkPhysicalDeviceDescriptorBufferTensorFeaturesARM; + +typedef struct VkPhysicalDeviceDescriptorBufferTensorPropertiesARM { + VkStructureType sType; + const void* pNext; + size_t tensorCaptureReplayDescriptorDataSize; + size_t tensorViewCaptureReplayDescriptorDataSize; + size_t tensorDescriptorSize; +} VkPhysicalDeviceDescriptorBufferTensorPropertiesARM; + +typedef struct VkDescriptorGetTensorInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorViewARM tensorView; +} VkDescriptorGetTensorInfoARM; + +typedef struct VkTensorCaptureDescriptorDataInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorARM tensor; +} VkTensorCaptureDescriptorDataInfoARM; + +typedef struct VkTensorViewCaptureDescriptorDataInfoARM { + VkStructureType sType; + const void* pNext; + VkTensorViewARM tensorView; +} VkTensorViewCaptureDescriptorDataInfoARM; + +typedef struct VkFrameBoundaryTensorsARM { + VkStructureType sType; + const void* pNext; + uint32_t tensorCount; + const VkTensorARM* pTensors; +} VkFrameBoundaryTensorsARM; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateTensorARM)(VkDevice device, const VkTensorCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorARM* pTensor); +typedef void (VKAPI_PTR *PFN_vkDestroyTensorARM)(VkDevice device, VkTensorARM tensor, const VkAllocationCallbacks* pAllocator); +typedef VkResult (VKAPI_PTR *PFN_vkCreateTensorViewARM)(VkDevice device, const VkTensorViewCreateInfoARM* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkTensorViewARM* pView); +typedef void (VKAPI_PTR *PFN_vkDestroyTensorViewARM)(VkDevice device, VkTensorViewARM tensorView, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkGetTensorMemoryRequirementsARM)(VkDevice device, const VkTensorMemoryRequirementsInfoARM* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef VkResult (VKAPI_PTR *PFN_vkBindTensorMemoryARM)(VkDevice device, uint32_t bindInfoCount, const VkBindTensorMemoryInfoARM* pBindInfos); +typedef void (VKAPI_PTR *PFN_vkGetDeviceTensorMemoryRequirementsARM)(VkDevice device, const VkDeviceTensorMemoryRequirementsARM* pInfo, VkMemoryRequirements2* pMemoryRequirements); +typedef void (VKAPI_PTR *PFN_vkCmdCopyTensorARM)(VkCommandBuffer commandBuffer, const VkCopyTensorInfoARM* pCopyTensorInfo); +typedef void (VKAPI_PTR *PFN_vkGetPhysicalDeviceExternalTensorPropertiesARM)(VkPhysicalDevice physicalDevice, const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, VkExternalTensorPropertiesARM* pExternalTensorProperties); +typedef VkResult (VKAPI_PTR *PFN_vkGetTensorOpaqueCaptureDescriptorDataARM)(VkDevice device, const VkTensorCaptureDescriptorDataInfoARM* pInfo, void* pData); +typedef VkResult (VKAPI_PTR *PFN_vkGetTensorViewOpaqueCaptureDescriptorDataARM)(VkDevice device, const VkTensorViewCaptureDescriptorDataInfoARM* pInfo, void* pData); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateTensorARM( + VkDevice device, + const VkTensorCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkTensorARM* pTensor); + +VKAPI_ATTR void VKAPI_CALL vkDestroyTensorARM( + VkDevice device, + VkTensorARM tensor, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR VkResult VKAPI_CALL vkCreateTensorViewARM( + VkDevice device, + const VkTensorViewCreateInfoARM* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkTensorViewARM* pView); + +VKAPI_ATTR void VKAPI_CALL vkDestroyTensorViewARM( + VkDevice device, + VkTensorViewARM tensorView, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR void VKAPI_CALL vkGetTensorMemoryRequirementsARM( + VkDevice device, + const VkTensorMemoryRequirementsInfoARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements); + +VKAPI_ATTR VkResult VKAPI_CALL vkBindTensorMemoryARM( + VkDevice device, + uint32_t bindInfoCount, + const VkBindTensorMemoryInfoARM* pBindInfos); + +VKAPI_ATTR void VKAPI_CALL vkGetDeviceTensorMemoryRequirementsARM( + VkDevice device, + const VkDeviceTensorMemoryRequirementsARM* pInfo, + VkMemoryRequirements2* pMemoryRequirements); -typedef enum VkDirectDriverLoadingModeLUNARG { - VK_DIRECT_DRIVER_LOADING_MODE_EXCLUSIVE_LUNARG = 0, - VK_DIRECT_DRIVER_LOADING_MODE_INCLUSIVE_LUNARG = 1, - VK_DIRECT_DRIVER_LOADING_MODE_MAX_ENUM_LUNARG = 0x7FFFFFFF -} VkDirectDriverLoadingModeLUNARG; -typedef VkFlags VkDirectDriverLoadingFlagsLUNARG; -typedef PFN_vkVoidFunction (VKAPI_PTR *PFN_vkGetInstanceProcAddrLUNARG)( - VkInstance instance, const char* pName); +VKAPI_ATTR void VKAPI_CALL vkCmdCopyTensorARM( + VkCommandBuffer commandBuffer, + const VkCopyTensorInfoARM* pCopyTensorInfo); -typedef struct VkDirectDriverLoadingInfoLUNARG { - VkStructureType sType; - void* pNext; - VkDirectDriverLoadingFlagsLUNARG flags; - PFN_vkGetInstanceProcAddrLUNARG pfnGetInstanceProcAddr; -} VkDirectDriverLoadingInfoLUNARG; +VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceExternalTensorPropertiesARM( + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceExternalTensorInfoARM* pExternalTensorInfo, + VkExternalTensorPropertiesARM* pExternalTensorProperties); -typedef struct VkDirectDriverLoadingListLUNARG { - VkStructureType sType; - const void* pNext; - VkDirectDriverLoadingModeLUNARG mode; - uint32_t driverCount; - const VkDirectDriverLoadingInfoLUNARG* pDrivers; -} VkDirectDriverLoadingListLUNARG; +VKAPI_ATTR VkResult VKAPI_CALL vkGetTensorOpaqueCaptureDescriptorDataARM( + VkDevice device, + const VkTensorCaptureDescriptorDataInfoARM* pInfo, + void* pData); +VKAPI_ATTR VkResult VKAPI_CALL vkGetTensorViewOpaqueCaptureDescriptorDataARM( + VkDevice device, + const VkTensorViewCaptureDescriptorDataInfoARM* pInfo, + void* pData); +#endif // VK_EXT_shader_module_identifier is a preprocessor guard. Do not pass it to API calls. @@ -18837,11 +20359,7 @@ typedef struct VkPhysicalDeviceLegacyDitheringFeaturesEXT { #define VK_EXT_pipeline_protected_access 1 #define VK_EXT_PIPELINE_PROTECTED_ACCESS_SPEC_VERSION 1 #define VK_EXT_PIPELINE_PROTECTED_ACCESS_EXTENSION_NAME "VK_EXT_pipeline_protected_access" -typedef struct VkPhysicalDevicePipelineProtectedAccessFeaturesEXT { - VkStructureType sType; - void* pNext; - VkBool32 pipelineProtectedAccess; -} VkPhysicalDevicePipelineProtectedAccessFeaturesEXT; +typedef VkPhysicalDevicePipelineProtectedAccessFeatures VkPhysicalDevicePipelineProtectedAccessFeaturesEXT; @@ -19087,6 +20605,83 @@ typedef struct VkPhysicalDeviceRayTracingInvocationReorderFeaturesNV { +// VK_NV_cooperative_vector is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cooperative_vector 1 +#define VK_NV_COOPERATIVE_VECTOR_SPEC_VERSION 4 +#define VK_NV_COOPERATIVE_VECTOR_EXTENSION_NAME "VK_NV_cooperative_vector" + +typedef enum VkCooperativeVectorMatrixLayoutNV { + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_ROW_MAJOR_NV = 0, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_COLUMN_MAJOR_NV = 1, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_INFERENCING_OPTIMAL_NV = 2, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_TRAINING_OPTIMAL_NV = 3, + VK_COOPERATIVE_VECTOR_MATRIX_LAYOUT_MAX_ENUM_NV = 0x7FFFFFFF +} VkCooperativeVectorMatrixLayoutNV; +typedef struct VkPhysicalDeviceCooperativeVectorPropertiesNV { + VkStructureType sType; + void* pNext; + VkShaderStageFlags cooperativeVectorSupportedStages; + VkBool32 cooperativeVectorTrainingFloat16Accumulation; + VkBool32 cooperativeVectorTrainingFloat32Accumulation; + uint32_t maxCooperativeVectorComponents; +} VkPhysicalDeviceCooperativeVectorPropertiesNV; + +typedef struct VkPhysicalDeviceCooperativeVectorFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cooperativeVector; + VkBool32 cooperativeVectorTraining; +} VkPhysicalDeviceCooperativeVectorFeaturesNV; + +typedef struct VkCooperativeVectorPropertiesNV { + VkStructureType sType; + void* pNext; + VkComponentTypeKHR inputType; + VkComponentTypeKHR inputInterpretation; + VkComponentTypeKHR matrixInterpretation; + VkComponentTypeKHR biasInterpretation; + VkComponentTypeKHR resultType; + VkBool32 transpose; +} VkCooperativeVectorPropertiesNV; + +typedef struct VkConvertCooperativeVectorMatrixInfoNV { + VkStructureType sType; + const void* pNext; + size_t srcSize; + VkDeviceOrHostAddressConstKHR srcData; + size_t* pDstSize; + VkDeviceOrHostAddressKHR dstData; + VkComponentTypeKHR srcComponentType; + VkComponentTypeKHR dstComponentType; + uint32_t numRows; + uint32_t numColumns; + VkCooperativeVectorMatrixLayoutNV srcLayout; + size_t srcStride; + VkCooperativeVectorMatrixLayoutNV dstLayout; + size_t dstStride; +} VkConvertCooperativeVectorMatrixInfoNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeVectorPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeVectorPropertiesNV* pProperties); +typedef VkResult (VKAPI_PTR *PFN_vkConvertCooperativeVectorMatrixNV)(VkDevice device, const VkConvertCooperativeVectorMatrixInfoNV* pInfo); +typedef void (VKAPI_PTR *PFN_vkCmdConvertCooperativeVectorMatrixNV)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkConvertCooperativeVectorMatrixInfoNV* pInfos); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeVectorPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeVectorPropertiesNV* pProperties); + +VKAPI_ATTR VkResult VKAPI_CALL vkConvertCooperativeVectorMatrixNV( + VkDevice device, + const VkConvertCooperativeVectorMatrixInfoNV* pInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdConvertCooperativeVectorMatrixNV( + VkCommandBuffer commandBuffer, + uint32_t infoCount, + const VkConvertCooperativeVectorMatrixInfoNV* pInfos); +#endif + + // VK_NV_extended_sparse_address_space is a preprocessor guard. Do not pass it to API calls. #define VK_NV_extended_sparse_address_space 1 #define VK_NV_EXTENDED_SPARSE_ADDRESS_SPACE_SPEC_VERSION 1 @@ -19515,6 +21110,77 @@ typedef struct VkPhysicalDeviceDescriptorPoolOverallocationFeaturesNV { +// VK_QCOM_tile_memory_heap is a preprocessor guard. Do not pass it to API calls. +#define VK_QCOM_tile_memory_heap 1 +#define VK_QCOM_TILE_MEMORY_HEAP_SPEC_VERSION 1 +#define VK_QCOM_TILE_MEMORY_HEAP_EXTENSION_NAME "VK_QCOM_tile_memory_heap" +typedef struct VkPhysicalDeviceTileMemoryHeapFeaturesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 tileMemoryHeap; +} VkPhysicalDeviceTileMemoryHeapFeaturesQCOM; + +typedef struct VkPhysicalDeviceTileMemoryHeapPropertiesQCOM { + VkStructureType sType; + void* pNext; + VkBool32 queueSubmitBoundary; + VkBool32 tileBufferTransfers; +} VkPhysicalDeviceTileMemoryHeapPropertiesQCOM; + +typedef struct VkTileMemoryRequirementsQCOM { + VkStructureType sType; + void* pNext; + VkDeviceSize size; + VkDeviceSize alignment; +} VkTileMemoryRequirementsQCOM; + +typedef struct VkTileMemoryBindInfoQCOM { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; +} VkTileMemoryBindInfoQCOM; + +typedef struct VkTileMemorySizeInfoQCOM { + VkStructureType sType; + const void* pNext; + VkDeviceSize size; +} VkTileMemorySizeInfoQCOM; + +typedef void (VKAPI_PTR *PFN_vkCmdBindTileMemoryQCOM)(VkCommandBuffer commandBuffer, const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdBindTileMemoryQCOM( + VkCommandBuffer commandBuffer, + const VkTileMemoryBindInfoQCOM* pTileMemoryBindInfo); +#endif + + +// VK_NV_display_stereo is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_display_stereo 1 +#define VK_NV_DISPLAY_STEREO_SPEC_VERSION 1 +#define VK_NV_DISPLAY_STEREO_EXTENSION_NAME "VK_NV_display_stereo" + +typedef enum VkDisplaySurfaceStereoTypeNV { + VK_DISPLAY_SURFACE_STEREO_TYPE_NONE_NV = 0, + VK_DISPLAY_SURFACE_STEREO_TYPE_ONBOARD_DIN_NV = 1, + VK_DISPLAY_SURFACE_STEREO_TYPE_HDMI_3D_NV = 2, + VK_DISPLAY_SURFACE_STEREO_TYPE_INBAND_DISPLAYPORT_NV = 3, + VK_DISPLAY_SURFACE_STEREO_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkDisplaySurfaceStereoTypeNV; +typedef struct VkDisplaySurfaceStereoCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkDisplaySurfaceStereoTypeNV stereoType; +} VkDisplaySurfaceStereoCreateInfoNV; + +typedef struct VkDisplayModeStereoPropertiesNV { + VkStructureType sType; + const void* pNext; + VkBool32 hdmi3DSupported; +} VkDisplayModeStereoPropertiesNV; + + + // VK_NV_raw_access_chains is a preprocessor guard. Do not pass it to API calls. #define VK_NV_raw_access_chains 1 #define VK_NV_RAW_ACCESS_CHAINS_SPEC_VERSION 1 @@ -19527,6 +21193,59 @@ typedef struct VkPhysicalDeviceRawAccessChainsFeaturesNV { +// VK_NV_external_compute_queue is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_external_compute_queue 1 +VK_DEFINE_HANDLE(VkExternalComputeQueueNV) +#define VK_NV_EXTERNAL_COMPUTE_QUEUE_SPEC_VERSION 1 +#define VK_NV_EXTERNAL_COMPUTE_QUEUE_EXTENSION_NAME "VK_NV_external_compute_queue" +typedef struct VkExternalComputeQueueDeviceCreateInfoNV { + VkStructureType sType; + const void* pNext; + uint32_t reservedExternalQueues; +} VkExternalComputeQueueDeviceCreateInfoNV; + +typedef struct VkExternalComputeQueueCreateInfoNV { + VkStructureType sType; + const void* pNext; + VkQueue preferredQueue; +} VkExternalComputeQueueCreateInfoNV; + +typedef struct VkExternalComputeQueueDataParamsNV { + VkStructureType sType; + const void* pNext; + uint32_t deviceIndex; +} VkExternalComputeQueueDataParamsNV; + +typedef struct VkPhysicalDeviceExternalComputeQueuePropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t externalDataSize; + uint32_t maxExternalQueues; +} VkPhysicalDeviceExternalComputeQueuePropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkCreateExternalComputeQueueNV)(VkDevice device, const VkExternalComputeQueueCreateInfoNV* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkExternalComputeQueueNV* pExternalQueue); +typedef void (VKAPI_PTR *PFN_vkDestroyExternalComputeQueueNV)(VkDevice device, VkExternalComputeQueueNV externalQueue, const VkAllocationCallbacks* pAllocator); +typedef void (VKAPI_PTR *PFN_vkGetExternalComputeQueueDataNV)(VkExternalComputeQueueNV externalQueue, VkExternalComputeQueueDataParamsNV* params, void* pData); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkCreateExternalComputeQueueNV( + VkDevice device, + const VkExternalComputeQueueCreateInfoNV* pCreateInfo, + const VkAllocationCallbacks* pAllocator, + VkExternalComputeQueueNV* pExternalQueue); + +VKAPI_ATTR void VKAPI_CALL vkDestroyExternalComputeQueueNV( + VkDevice device, + VkExternalComputeQueueNV externalQueue, + const VkAllocationCallbacks* pAllocator); + +VKAPI_ATTR void VKAPI_CALL vkGetExternalComputeQueueDataNV( + VkExternalComputeQueueNV externalQueue, + VkExternalComputeQueueDataParamsNV* params, + void* pData); +#endif + + // VK_NV_command_buffer_inheritance is a preprocessor guard. Do not pass it to API calls. #define VK_NV_command_buffer_inheritance 1 #define VK_NV_COMMAND_BUFFER_INHERITANCE_SPEC_VERSION 1 @@ -19563,6 +21282,19 @@ typedef struct VkPhysicalDeviceShaderReplicatedCompositesFeaturesEXT { +// VK_EXT_shader_float8 is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_shader_float8 1 +#define VK_EXT_SHADER_FLOAT8_SPEC_VERSION 1 +#define VK_EXT_SHADER_FLOAT8_EXTENSION_NAME "VK_EXT_shader_float8" +typedef struct VkPhysicalDeviceShaderFloat8FeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 shaderFloat8; + VkBool32 shaderFloat8CooperativeMatrix; +} VkPhysicalDeviceShaderFloat8FeaturesEXT; + + + // VK_NV_ray_tracing_validation is a preprocessor guard. Do not pass it to API calls. #define VK_NV_ray_tracing_validation 1 #define VK_NV_RAY_TRACING_VALIDATION_SPEC_VERSION 1 @@ -19575,6 +21307,359 @@ typedef struct VkPhysicalDeviceRayTracingValidationFeaturesNV { +// VK_NV_cluster_acceleration_structure is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cluster_acceleration_structure 1 +#define VK_NV_CLUSTER_ACCELERATION_STRUCTURE_SPEC_VERSION 2 +#define VK_NV_CLUSTER_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_NV_cluster_acceleration_structure" + +typedef enum VkClusterAccelerationStructureTypeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_CLUSTERS_BOTTOM_LEVEL_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_TRIANGLE_CLUSTER_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_TRIANGLE_CLUSTER_TEMPLATE_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureTypeNV; + +typedef enum VkClusterAccelerationStructureOpTypeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MOVE_OBJECTS_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_CLUSTERS_BOTTOM_LEVEL_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_BUILD_TRIANGLE_CLUSTER_TEMPLATE_NV = 3, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_INSTANTIATE_TRIANGLE_CLUSTER_NV = 4, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureOpTypeNV; + +typedef enum VkClusterAccelerationStructureOpModeNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_IMPLICIT_DESTINATIONS_NV = 0, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_EXPLICIT_DESTINATIONS_NV = 1, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_COMPUTE_SIZES_NV = 2, + VK_CLUSTER_ACCELERATION_STRUCTURE_OP_MODE_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureOpModeNV; + +typedef enum VkClusterAccelerationStructureAddressResolutionFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_IMPLICIT_DATA_BIT_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SCRATCH_DATA_BIT_NV = 0x00000002, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_ADDRESS_ARRAY_BIT_NV = 0x00000004, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_DST_SIZES_ARRAY_BIT_NV = 0x00000008, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SRC_INFOS_ARRAY_BIT_NV = 0x00000010, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_INDIRECTED_SRC_INFOS_COUNT_BIT_NV = 0x00000020, + VK_CLUSTER_ACCELERATION_STRUCTURE_ADDRESS_RESOLUTION_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureAddressResolutionFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureAddressResolutionFlagsNV; + +typedef enum VkClusterAccelerationStructureClusterFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_CLUSTER_ALLOW_DISABLE_OPACITY_MICROMAPS_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_CLUSTER_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureClusterFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureClusterFlagsNV; + +typedef enum VkClusterAccelerationStructureGeometryFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_CULL_DISABLE_BIT_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_NO_DUPLICATE_ANYHIT_INVOCATION_BIT_NV = 0x00000002, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_OPAQUE_BIT_NV = 0x00000004, + VK_CLUSTER_ACCELERATION_STRUCTURE_GEOMETRY_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureGeometryFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureGeometryFlagsNV; + +typedef enum VkClusterAccelerationStructureIndexFormatFlagBitsNV { + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_8BIT_NV = 0x00000001, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_16BIT_NV = 0x00000002, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_32BIT_NV = 0x00000004, + VK_CLUSTER_ACCELERATION_STRUCTURE_INDEX_FORMAT_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkClusterAccelerationStructureIndexFormatFlagBitsNV; +typedef VkFlags VkClusterAccelerationStructureIndexFormatFlagsNV; +typedef struct VkPhysicalDeviceClusterAccelerationStructureFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 clusterAccelerationStructure; +} VkPhysicalDeviceClusterAccelerationStructureFeaturesNV; + +typedef struct VkPhysicalDeviceClusterAccelerationStructurePropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxVerticesPerCluster; + uint32_t maxTrianglesPerCluster; + uint32_t clusterScratchByteAlignment; + uint32_t clusterByteAlignment; + uint32_t clusterTemplateByteAlignment; + uint32_t clusterBottomLevelByteAlignment; + uint32_t clusterTemplateBoundsByteAlignment; + uint32_t maxClusterGeometryIndex; +} VkPhysicalDeviceClusterAccelerationStructurePropertiesNV; + +typedef struct VkClusterAccelerationStructureClustersBottomLevelInputNV { + VkStructureType sType; + void* pNext; + uint32_t maxTotalClusterCount; + uint32_t maxClusterCountPerAccelerationStructure; +} VkClusterAccelerationStructureClustersBottomLevelInputNV; + +typedef struct VkClusterAccelerationStructureTriangleClusterInputNV { + VkStructureType sType; + void* pNext; + VkFormat vertexFormat; + uint32_t maxGeometryIndexValue; + uint32_t maxClusterUniqueGeometryCount; + uint32_t maxClusterTriangleCount; + uint32_t maxClusterVertexCount; + uint32_t maxTotalTriangleCount; + uint32_t maxTotalVertexCount; + uint32_t minPositionTruncateBitCount; +} VkClusterAccelerationStructureTriangleClusterInputNV; + +typedef struct VkClusterAccelerationStructureMoveObjectsInputNV { + VkStructureType sType; + void* pNext; + VkClusterAccelerationStructureTypeNV type; + VkBool32 noMoveOverlap; + VkDeviceSize maxMovedBytes; +} VkClusterAccelerationStructureMoveObjectsInputNV; + +typedef union VkClusterAccelerationStructureOpInputNV { + VkClusterAccelerationStructureClustersBottomLevelInputNV* pClustersBottomLevel; + VkClusterAccelerationStructureTriangleClusterInputNV* pTriangleClusters; + VkClusterAccelerationStructureMoveObjectsInputNV* pMoveObjects; +} VkClusterAccelerationStructureOpInputNV; + +typedef struct VkClusterAccelerationStructureInputInfoNV { + VkStructureType sType; + void* pNext; + uint32_t maxAccelerationStructureCount; + VkBuildAccelerationStructureFlagsKHR flags; + VkClusterAccelerationStructureOpTypeNV opType; + VkClusterAccelerationStructureOpModeNV opMode; + VkClusterAccelerationStructureOpInputNV opInput; +} VkClusterAccelerationStructureInputInfoNV; + +typedef struct VkStridedDeviceAddressRegionKHR { + VkDeviceAddress deviceAddress; + VkDeviceSize stride; + VkDeviceSize size; +} VkStridedDeviceAddressRegionKHR; + +typedef struct VkClusterAccelerationStructureCommandsInfoNV { + VkStructureType sType; + void* pNext; + VkClusterAccelerationStructureInputInfoNV input; + VkDeviceAddress dstImplicitData; + VkDeviceAddress scratchData; + VkStridedDeviceAddressRegionKHR dstAddressesArray; + VkStridedDeviceAddressRegionKHR dstSizesArray; + VkStridedDeviceAddressRegionKHR srcInfosArray; + VkDeviceAddress srcInfosCount; + VkClusterAccelerationStructureAddressResolutionFlagsNV addressResolutionFlags; +} VkClusterAccelerationStructureCommandsInfoNV; + +typedef struct VkStridedDeviceAddressNV { + VkDeviceAddress startAddress; + VkDeviceSize strideInBytes; +} VkStridedDeviceAddressNV; + +typedef struct VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV { + uint32_t geometryIndex:24; + uint32_t reserved:5; + uint32_t geometryFlags:3; +} VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV; + +typedef struct VkClusterAccelerationStructureMoveObjectsInfoNV { + VkDeviceAddress srcAccelerationStructure; +} VkClusterAccelerationStructureMoveObjectsInfoNV; + +typedef struct VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV { + uint32_t clusterReferencesCount; + uint32_t clusterReferencesStride; + VkDeviceAddress clusterReferences; +} VkClusterAccelerationStructureBuildClustersBottomLevelInfoNV; + +typedef struct VkClusterAccelerationStructureBuildTriangleClusterInfoNV { + uint32_t clusterID; + VkClusterAccelerationStructureClusterFlagsNV clusterFlags; + uint32_t triangleCount:9; + uint32_t vertexCount:9; + uint32_t positionTruncateBitCount:6; + uint32_t indexType:4; + uint32_t opacityMicromapIndexType:4; + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags; + uint16_t indexBufferStride; + uint16_t vertexBufferStride; + uint16_t geometryIndexAndFlagsBufferStride; + uint16_t opacityMicromapIndexBufferStride; + VkDeviceAddress indexBuffer; + VkDeviceAddress vertexBuffer; + VkDeviceAddress geometryIndexAndFlagsBuffer; + VkDeviceAddress opacityMicromapArray; + VkDeviceAddress opacityMicromapIndexBuffer; +} VkClusterAccelerationStructureBuildTriangleClusterInfoNV; + +typedef struct VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV { + uint32_t clusterID; + VkClusterAccelerationStructureClusterFlagsNV clusterFlags; + uint32_t triangleCount:9; + uint32_t vertexCount:9; + uint32_t positionTruncateBitCount:6; + uint32_t indexType:4; + uint32_t opacityMicromapIndexType:4; + VkClusterAccelerationStructureGeometryIndexAndGeometryFlagsNV baseGeometryIndexAndGeometryFlags; + uint16_t indexBufferStride; + uint16_t vertexBufferStride; + uint16_t geometryIndexAndFlagsBufferStride; + uint16_t opacityMicromapIndexBufferStride; + VkDeviceAddress indexBuffer; + VkDeviceAddress vertexBuffer; + VkDeviceAddress geometryIndexAndFlagsBuffer; + VkDeviceAddress opacityMicromapArray; + VkDeviceAddress opacityMicromapIndexBuffer; + VkDeviceAddress instantiationBoundingBoxLimit; +} VkClusterAccelerationStructureBuildTriangleClusterTemplateInfoNV; + +typedef struct VkClusterAccelerationStructureInstantiateClusterInfoNV { + uint32_t clusterIdOffset; + uint32_t geometryIndexOffset:24; + uint32_t reserved:8; + VkDeviceAddress clusterTemplateAddress; + VkStridedDeviceAddressNV vertexBuffer; +} VkClusterAccelerationStructureInstantiateClusterInfoNV; + +typedef struct VkAccelerationStructureBuildSizesInfoKHR { + VkStructureType sType; + const void* pNext; + VkDeviceSize accelerationStructureSize; + VkDeviceSize updateScratchSize; + VkDeviceSize buildScratchSize; +} VkAccelerationStructureBuildSizesInfoKHR; + +typedef struct VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV { + VkStructureType sType; + void* pNext; + VkBool32 allowClusterAccelerationStructure; +} VkRayTracingPipelineClusterAccelerationStructureCreateInfoNV; + +typedef void (VKAPI_PTR *PFN_vkGetClusterAccelerationStructureBuildSizesNV)(VkDevice device, const VkClusterAccelerationStructureInputInfoNV* pInfo, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBuildClusterAccelerationStructureIndirectNV)(VkCommandBuffer commandBuffer, const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetClusterAccelerationStructureBuildSizesNV( + VkDevice device, + const VkClusterAccelerationStructureInputInfoNV* pInfo, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdBuildClusterAccelerationStructureIndirectNV( + VkCommandBuffer commandBuffer, + const VkClusterAccelerationStructureCommandsInfoNV* pCommandInfos); +#endif + + +// VK_NV_partitioned_acceleration_structure is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_partitioned_acceleration_structure 1 +#define VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_SPEC_VERSION 1 +#define VK_NV_PARTITIONED_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_NV_partitioned_acceleration_structure" +#define VK_PARTITIONED_ACCELERATION_STRUCTURE_PARTITION_INDEX_GLOBAL_NV (~0U) + +typedef enum VkPartitionedAccelerationStructureOpTypeNV { + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_WRITE_INSTANCE_NV = 0, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_UPDATE_INSTANCE_NV = 1, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_WRITE_PARTITION_TRANSLATION_NV = 2, + VK_PARTITIONED_ACCELERATION_STRUCTURE_OP_TYPE_MAX_ENUM_NV = 0x7FFFFFFF +} VkPartitionedAccelerationStructureOpTypeNV; + +typedef enum VkPartitionedAccelerationStructureInstanceFlagBitsNV { + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_TRIANGLE_FACING_CULL_DISABLE_BIT_NV = 0x00000001, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_TRIANGLE_FLIP_FACING_BIT_NV = 0x00000002, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_FORCE_OPAQUE_BIT_NV = 0x00000004, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_FORCE_NO_OPAQUE_BIT_NV = 0x00000008, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_ENABLE_EXPLICIT_BOUNDING_BOX_NV = 0x00000010, + VK_PARTITIONED_ACCELERATION_STRUCTURE_INSTANCE_FLAG_BITS_MAX_ENUM_NV = 0x7FFFFFFF +} VkPartitionedAccelerationStructureInstanceFlagBitsNV; +typedef VkFlags VkPartitionedAccelerationStructureInstanceFlagsNV; +typedef struct VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 partitionedAccelerationStructure; +} VkPhysicalDevicePartitionedAccelerationStructureFeaturesNV; + +typedef struct VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t maxPartitionCount; +} VkPhysicalDevicePartitionedAccelerationStructurePropertiesNV; + +typedef struct VkPartitionedAccelerationStructureFlagsNV { + VkStructureType sType; + void* pNext; + VkBool32 enablePartitionTranslation; +} VkPartitionedAccelerationStructureFlagsNV; + +typedef struct VkBuildPartitionedAccelerationStructureIndirectCommandNV { + VkPartitionedAccelerationStructureOpTypeNV opType; + uint32_t argCount; + VkStridedDeviceAddressNV argData; +} VkBuildPartitionedAccelerationStructureIndirectCommandNV; + +typedef struct VkPartitionedAccelerationStructureWriteInstanceDataNV { + VkTransformMatrixKHR transform; + float explicitAABB[6]; + uint32_t instanceID; + uint32_t instanceMask; + uint32_t instanceContributionToHitGroupIndex; + VkPartitionedAccelerationStructureInstanceFlagsNV instanceFlags; + uint32_t instanceIndex; + uint32_t partitionIndex; + VkDeviceAddress accelerationStructure; +} VkPartitionedAccelerationStructureWriteInstanceDataNV; + +typedef struct VkPartitionedAccelerationStructureUpdateInstanceDataNV { + uint32_t instanceIndex; + uint32_t instanceContributionToHitGroupIndex; + VkDeviceAddress accelerationStructure; +} VkPartitionedAccelerationStructureUpdateInstanceDataNV; + +typedef struct VkPartitionedAccelerationStructureWritePartitionTranslationDataNV { + uint32_t partitionIndex; + float partitionTranslation[3]; +} VkPartitionedAccelerationStructureWritePartitionTranslationDataNV; + +typedef struct VkWriteDescriptorSetPartitionedAccelerationStructureNV { + VkStructureType sType; + void* pNext; + uint32_t accelerationStructureCount; + const VkDeviceAddress* pAccelerationStructures; +} VkWriteDescriptorSetPartitionedAccelerationStructureNV; + +typedef struct VkPartitionedAccelerationStructureInstancesInputNV { + VkStructureType sType; + void* pNext; + VkBuildAccelerationStructureFlagsKHR flags; + uint32_t instanceCount; + uint32_t maxInstancePerPartitionCount; + uint32_t partitionCount; + uint32_t maxInstanceInGlobalPartitionCount; +} VkPartitionedAccelerationStructureInstancesInputNV; + +typedef struct VkBuildPartitionedAccelerationStructureInfoNV { + VkStructureType sType; + void* pNext; + VkPartitionedAccelerationStructureInstancesInputNV input; + VkDeviceAddress srcAccelerationStructureData; + VkDeviceAddress dstAccelerationStructureData; + VkDeviceAddress scratchData; + VkDeviceAddress srcInfos; + VkDeviceAddress srcInfosCount; +} VkBuildPartitionedAccelerationStructureInfoNV; + +typedef void (VKAPI_PTR *PFN_vkGetPartitionedAccelerationStructuresBuildSizesNV)(VkDevice device, const VkPartitionedAccelerationStructureInstancesInputNV* pInfo, VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); +typedef void (VKAPI_PTR *PFN_vkCmdBuildPartitionedAccelerationStructuresNV)(VkCommandBuffer commandBuffer, const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkGetPartitionedAccelerationStructuresBuildSizesNV( + VkDevice device, + const VkPartitionedAccelerationStructureInstancesInputNV* pInfo, + VkAccelerationStructureBuildSizesInfoKHR* pSizeInfo); + +VKAPI_ATTR void VKAPI_CALL vkCmdBuildPartitionedAccelerationStructuresNV( + VkCommandBuffer commandBuffer, + const VkBuildPartitionedAccelerationStructureInfoNV* pBuildInfo); +#endif + + // VK_EXT_device_generated_commands is a preprocessor guard. Do not pass it to API calls. #define VK_EXT_device_generated_commands 1 VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkIndirectExecutionSetEXT) @@ -19898,6 +21983,159 @@ typedef struct VkPipelineViewportDepthClampControlCreateInfoEXT { +// VK_HUAWEI_hdr_vivid is a preprocessor guard. Do not pass it to API calls. +#define VK_HUAWEI_hdr_vivid 1 +#define VK_HUAWEI_HDR_VIVID_SPEC_VERSION 1 +#define VK_HUAWEI_HDR_VIVID_EXTENSION_NAME "VK_HUAWEI_hdr_vivid" +typedef struct VkPhysicalDeviceHdrVividFeaturesHUAWEI { + VkStructureType sType; + void* pNext; + VkBool32 hdrVivid; +} VkPhysicalDeviceHdrVividFeaturesHUAWEI; + +typedef struct VkHdrVividDynamicMetadataHUAWEI { + VkStructureType sType; + const void* pNext; + size_t dynamicMetadataSize; + const void* pDynamicMetadata; +} VkHdrVividDynamicMetadataHUAWEI; + + + +// VK_NV_cooperative_matrix2 is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_cooperative_matrix2 1 +#define VK_NV_COOPERATIVE_MATRIX_2_SPEC_VERSION 1 +#define VK_NV_COOPERATIVE_MATRIX_2_EXTENSION_NAME "VK_NV_cooperative_matrix2" +typedef struct VkCooperativeMatrixFlexibleDimensionsPropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t MGranularity; + uint32_t NGranularity; + uint32_t KGranularity; + VkComponentTypeKHR AType; + VkComponentTypeKHR BType; + VkComponentTypeKHR CType; + VkComponentTypeKHR ResultType; + VkBool32 saturatingAccumulation; + VkScopeKHR scope; + uint32_t workgroupInvocations; +} VkCooperativeMatrixFlexibleDimensionsPropertiesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrix2FeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 cooperativeMatrixWorkgroupScope; + VkBool32 cooperativeMatrixFlexibleDimensions; + VkBool32 cooperativeMatrixReductions; + VkBool32 cooperativeMatrixConversions; + VkBool32 cooperativeMatrixPerElementOperations; + VkBool32 cooperativeMatrixTensorAddressing; + VkBool32 cooperativeMatrixBlockLoads; +} VkPhysicalDeviceCooperativeMatrix2FeaturesNV; + +typedef struct VkPhysicalDeviceCooperativeMatrix2PropertiesNV { + VkStructureType sType; + void* pNext; + uint32_t cooperativeMatrixWorkgroupScopeMaxWorkgroupSize; + uint32_t cooperativeMatrixFlexibleDimensionsMaxDimension; + uint32_t cooperativeMatrixWorkgroupScopeReservedSharedMemory; +} VkPhysicalDeviceCooperativeMatrix2PropertiesNV; + +typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV)(VkPhysicalDevice physicalDevice, uint32_t* pPropertyCount, VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceCooperativeMatrixFlexibleDimensionsPropertiesNV( + VkPhysicalDevice physicalDevice, + uint32_t* pPropertyCount, + VkCooperativeMatrixFlexibleDimensionsPropertiesNV* pProperties); +#endif + + +// VK_ARM_pipeline_opacity_micromap is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_pipeline_opacity_micromap 1 +#define VK_ARM_PIPELINE_OPACITY_MICROMAP_SPEC_VERSION 1 +#define VK_ARM_PIPELINE_OPACITY_MICROMAP_EXTENSION_NAME "VK_ARM_pipeline_opacity_micromap" +typedef struct VkPhysicalDevicePipelineOpacityMicromapFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 pipelineOpacityMicromap; +} VkPhysicalDevicePipelineOpacityMicromapFeaturesARM; + + + +// VK_EXT_vertex_attribute_robustness is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_vertex_attribute_robustness 1 +#define VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_SPEC_VERSION 1 +#define VK_EXT_VERTEX_ATTRIBUTE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_vertex_attribute_robustness" +typedef struct VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 vertexAttributeRobustness; +} VkPhysicalDeviceVertexAttributeRobustnessFeaturesEXT; + + + +// VK_ARM_format_pack is a preprocessor guard. Do not pass it to API calls. +#define VK_ARM_format_pack 1 +#define VK_ARM_FORMAT_PACK_SPEC_VERSION 1 +#define VK_ARM_FORMAT_PACK_EXTENSION_NAME "VK_ARM_format_pack" +typedef struct VkPhysicalDeviceFormatPackFeaturesARM { + VkStructureType sType; + void* pNext; + VkBool32 formatPack; +} VkPhysicalDeviceFormatPackFeaturesARM; + + + +// VK_NV_present_metering is a preprocessor guard. Do not pass it to API calls. +#define VK_NV_present_metering 1 +#define VK_NV_PRESENT_METERING_SPEC_VERSION 1 +#define VK_NV_PRESENT_METERING_EXTENSION_NAME "VK_NV_present_metering" +typedef struct VkSetPresentConfigNV { + VkStructureType sType; + const void* pNext; + uint32_t numFramesPerBatch; + uint32_t presentConfigFeedback; +} VkSetPresentConfigNV; + +typedef struct VkPhysicalDevicePresentMeteringFeaturesNV { + VkStructureType sType; + void* pNext; + VkBool32 presentMetering; +} VkPhysicalDevicePresentMeteringFeaturesNV; + + + +// VK_EXT_fragment_density_map_offset is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_fragment_density_map_offset 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 1 +#define VK_EXT_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_EXT_fragment_density_map_offset" +typedef struct VkRenderingEndInfoEXT { + VkStructureType sType; + const void* pNext; +} VkRenderingEndInfoEXT; + +typedef void (VKAPI_PTR *PFN_vkCmdEndRendering2EXT)(VkCommandBuffer commandBuffer, const VkRenderingEndInfoEXT* pRenderingEndInfo); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering2EXT( + VkCommandBuffer commandBuffer, + const VkRenderingEndInfoEXT* pRenderingEndInfo); +#endif + + +// VK_EXT_zero_initialize_device_memory is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_zero_initialize_device_memory 1 +#define VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_SPEC_VERSION 1 +#define VK_EXT_ZERO_INITIALIZE_DEVICE_MEMORY_EXTENSION_NAME "VK_EXT_zero_initialize_device_memory" +typedef struct VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT { + VkStructureType sType; + void* pNext; + VkBool32 zeroInitializeDeviceMemory; +} VkPhysicalDeviceZeroInitializeDeviceMemoryFeaturesEXT; + + + // VK_KHR_acceleration_structure is a preprocessor guard. Do not pass it to API calls. #define VK_KHR_acceleration_structure 1 #define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 13 @@ -20054,14 +22292,6 @@ typedef struct VkCopyAccelerationStructureInfoKHR { VkCopyAccelerationStructureModeKHR mode; } VkCopyAccelerationStructureInfoKHR; -typedef struct VkAccelerationStructureBuildSizesInfoKHR { - VkStructureType sType; - const void* pNext; - VkDeviceSize accelerationStructureSize; - VkDeviceSize updateScratchSize; - VkDeviceSize buildScratchSize; -} VkAccelerationStructureBuildSizesInfoKHR; - typedef VkResult (VKAPI_PTR *PFN_vkCreateAccelerationStructureKHR)(VkDevice device, const VkAccelerationStructureCreateInfoKHR* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkAccelerationStructureKHR* pAccelerationStructure); typedef void (VKAPI_PTR *PFN_vkDestroyAccelerationStructureKHR)(VkDevice device, VkAccelerationStructureKHR accelerationStructure, const VkAllocationCallbacks* pAllocator); typedef void (VKAPI_PTR *PFN_vkCmdBuildAccelerationStructuresKHR)(VkCommandBuffer commandBuffer, uint32_t infoCount, const VkAccelerationStructureBuildGeometryInfoKHR* pInfos, const VkAccelerationStructureBuildRangeInfoKHR* const* ppBuildRangeInfos); @@ -20244,12 +22474,6 @@ typedef struct VkPhysicalDeviceRayTracingPipelinePropertiesKHR { uint32_t maxRayHitAttributeSize; } VkPhysicalDeviceRayTracingPipelinePropertiesKHR; -typedef struct VkStridedDeviceAddressRegionKHR { - VkDeviceAddress deviceAddress; - VkDeviceSize stride; - VkDeviceSize size; -} VkStridedDeviceAddressRegionKHR; - typedef struct VkTraceRaysIndirectCommandKHR { uint32_t width; uint32_t height; diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_directfb.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_directfb.h index f06f80b..26a4363 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_directfb.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_directfb.h @@ -2,7 +2,7 @@ #define VULKAN_DIRECTFB_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_fuchsia.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_fuchsia.h index f60907d..0af61bd 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_fuchsia.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_fuchsia.h @@ -2,7 +2,7 @@ #define VULKAN_FUCHSIA_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_ggp.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_ggp.h index 0a8863a..4b6affc 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_ggp.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_ggp.h @@ -2,7 +2,7 @@ #define VULKAN_GGP_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_ios.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_ios.h index 22ed2c0..a705dc6 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_ios.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_ios.h @@ -2,7 +2,7 @@ #define VULKAN_IOS_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_macos.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_macos.h index a7f5613..8d5dd05 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_macos.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_macos.h @@ -2,7 +2,7 @@ #define VULKAN_MACOS_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_metal.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_metal.h index 89a5574..7e44f54 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_metal.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_metal.h @@ -2,7 +2,7 @@ #define VULKAN_METAL_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ @@ -188,6 +188,47 @@ VKAPI_ATTR void VKAPI_CALL vkExportMetalObjectsEXT( VkExportMetalObjectsInfoEXT* pMetalObjectsInfo); #endif + +// VK_EXT_external_memory_metal is a preprocessor guard. Do not pass it to API calls. +#define VK_EXT_external_memory_metal 1 +#define VK_EXT_EXTERNAL_MEMORY_METAL_SPEC_VERSION 1 +#define VK_EXT_EXTERNAL_MEMORY_METAL_EXTENSION_NAME "VK_EXT_external_memory_metal" +typedef struct VkImportMemoryMetalHandleInfoEXT { + VkStructureType sType; + const void* pNext; + VkExternalMemoryHandleTypeFlagBits handleType; + void* handle; +} VkImportMemoryMetalHandleInfoEXT; + +typedef struct VkMemoryMetalHandlePropertiesEXT { + VkStructureType sType; + void* pNext; + uint32_t memoryTypeBits; +} VkMemoryMetalHandlePropertiesEXT; + +typedef struct VkMemoryGetMetalHandleInfoEXT { + VkStructureType sType; + const void* pNext; + VkDeviceMemory memory; + VkExternalMemoryHandleTypeFlagBits handleType; +} VkMemoryGetMetalHandleInfoEXT; + +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryMetalHandleEXT)(VkDevice device, const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo, void** pHandle); +typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryMetalHandlePropertiesEXT)(VkDevice device, VkExternalMemoryHandleTypeFlagBits handleType, const void* pHandle, VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties); + +#ifndef VK_NO_PROTOTYPES +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandleEXT( + VkDevice device, + const VkMemoryGetMetalHandleInfoEXT* pGetMetalHandleInfo, + void** pHandle); + +VKAPI_ATTR VkResult VKAPI_CALL vkGetMemoryMetalHandlePropertiesEXT( + VkDevice device, + VkExternalMemoryHandleTypeFlagBits handleType, + const void* pHandle, + VkMemoryMetalHandlePropertiesEXT* pMemoryMetalHandleProperties); +#endif + #ifdef __cplusplus } #endif diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_screen.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_screen.h index 7e84d4d..6c8bfd2 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_screen.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_screen.h @@ -2,7 +2,7 @@ #define VULKAN_SCREEN_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_vi.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_vi.h index c145f4a..a30bfb1 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_vi.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_vi.h @@ -2,7 +2,7 @@ #define VULKAN_VI_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_wayland.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_wayland.h index ec706a1..75bf070 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_wayland.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_wayland.h @@ -2,7 +2,7 @@ #define VULKAN_WAYLAND_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_win32.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_win32.h index d7a0b2b..e66ed1f 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_win32.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_win32.h @@ -2,7 +2,7 @@ #define VULKAN_WIN32_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xcb.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xcb.h index cdf6b52..4e06275 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xcb.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xcb.h @@ -2,7 +2,7 @@ #define VULKAN_XCB_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xlib.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xlib.h index b3c3e27..b581779 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xlib.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xlib.h @@ -2,7 +2,7 @@ #define VULKAN_XLIB_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xlib_xrandr.h b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xlib_xrandr.h index 8e99190..ba88a66 100644 --- a/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xlib_xrandr.h +++ b/libs/bgfx/3rdparty/khronos/vulkan-local/vulkan_xlib_xrandr.h @@ -2,7 +2,7 @@ #define VULKAN_XLIB_XRANDR_H_ 1 /* -** Copyright 2015-2024 The Khronos Group Inc. +** Copyright 2015-2025 The Khronos Group Inc. ** ** SPDX-License-Identifier: Apache-2.0 */ diff --git a/libs/bgfx/3rdparty/spirv-cross/main.cpp b/libs/bgfx/3rdparty/spirv-cross/main.cpp index 6361fc8..ea3ecf4 100644 --- a/libs/bgfx/3rdparty/spirv-cross/main.cpp +++ b/libs/bgfx/3rdparty/spirv-cross/main.cpp @@ -682,6 +682,10 @@ struct CLIArguments bool msl_readwrite_texture_fences = true; bool msl_agx_manual_cube_grad_fixup = false; bool msl_input_attachment_is_ds_attachment = false; + bool msl_disable_rasterization = false; + bool msl_auto_disable_rasterization = false; + bool msl_enable_point_size_default = false; + float msl_default_point_size = 1.0f; const char *msl_combined_sampler_suffix = nullptr; bool glsl_emit_push_constant_as_ubo = false; bool glsl_emit_ubo_as_plain_uniforms = false; @@ -983,7 +987,10 @@ static void print_help_msl() "\t\tAll released Apple Silicon GPUs to date ignore one of the three partial derivatives\n" "\t\tbased on the selected major axis, and expect the remaining derivatives to be\n" "\t\tpartially transformed. This fixup gives correct results on Apple Silicon.\n" - "\t[--msl-combined-sampler-suffix ]:\n\t\tUses a custom suffix for combined samplers.\n"); + "\t[--msl-combined-sampler-suffix ]:\n\t\tUses a custom suffix for combined samplers.\n" + "\t[--msl-disable-rasterization]:\n\t\tDisables rasterization and returns void from vertex-like entry points.\n" + "\t[--msl-auto-disable-rasterization]:\n\t\tDisables rasterization if BuiltInPosition is not written.\n" + "\t[--msl-default-point-size ]:\n\t\tApplies a default value if BuiltInPointSize is not written.\n"); // clang-format on } @@ -1265,6 +1272,10 @@ static string compile_iteration(const CLIArguments &args, std::vector msl_opts.input_attachment_is_ds_attachment = args.msl_input_attachment_is_ds_attachment; msl_opts.readwrite_texture_fences = args.msl_readwrite_texture_fences; msl_opts.agx_manual_cube_grad_fixup = args.msl_agx_manual_cube_grad_fixup; + msl_opts.disable_rasterization = args.msl_disable_rasterization; + msl_opts.auto_disable_rasterization = args.msl_auto_disable_rasterization; + msl_opts.enable_point_size_default = args.msl_enable_point_size_default; + msl_opts.default_point_size = args.msl_default_point_size; msl_comp->set_msl_options(msl_opts); for (auto &v : args.msl_discrete_descriptor_sets) msl_comp->add_discrete_descriptor_set(v); @@ -1830,6 +1841,12 @@ static int main_inner(int argc, char *argv[]) cbs.add("--msl-replace-recursive-inputs", [&args](CLIParser &) { args.msl_replace_recursive_inputs = true; }); cbs.add("--msl-input-attachment-is-ds-attachment", [&args](CLIParser &) { args.msl_input_attachment_is_ds_attachment = true; }); + cbs.add("--msl-disable-rasterization", [&args](CLIParser &) { args.msl_disable_rasterization = true; }); + cbs.add("--msl-auto-disable-rasterization", [&args](CLIParser &) { args.msl_auto_disable_rasterization = true; }); + cbs.add("--msl-default-point-size", [&args](CLIParser &parser) { + args.msl_enable_point_size_default = true; + args.msl_default_point_size = static_cast(parser.next_double()); + }); cbs.add("--extension", [&args](CLIParser &parser) { args.extensions.push_back(parser.next_string()); }); cbs.add("--rename-entry-point", [&args](CLIParser &parser) { auto old_name = parser.next_string(); diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv.h b/libs/bgfx/3rdparty/spirv-cross/spirv.h index 398e6c5..43dd311 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv.h +++ b/libs/bgfx/3rdparty/spirv-cross/spirv.h @@ -13,7 +13,7 @@ ** ** 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/ +** 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, @@ -73,6 +73,12 @@ typedef enum SpvSourceLanguage_ { SpvSourceLanguageHLSL = 5, SpvSourceLanguageCPP_for_OpenCL = 6, SpvSourceLanguageSYCL = 7, + SpvSourceLanguageHERO_C = 8, + SpvSourceLanguageNZSL = 9, + SpvSourceLanguageWGSL = 10, + SpvSourceLanguageSlang = 11, + SpvSourceLanguageZig = 12, + SpvSourceLanguageRust = 13, SpvSourceLanguageMax = 0x7fffffff, } SpvSourceLanguage; @@ -160,6 +166,9 @@ typedef enum SpvExecutionMode_ { SpvExecutionModeSubgroupsPerWorkgroupId = 37, SpvExecutionModeLocalSizeId = 38, SpvExecutionModeLocalSizeHintId = 39, + SpvExecutionModeNonCoherentColorAttachmentReadEXT = 4169, + SpvExecutionModeNonCoherentDepthAttachmentReadEXT = 4170, + SpvExecutionModeNonCoherentStencilAttachmentReadEXT = 4171, SpvExecutionModeSubgroupUniformControlFlowKHR = 4421, SpvExecutionModePostDepthCoverage = 4446, SpvExecutionModeDenormPreserve = 4459, @@ -169,17 +178,28 @@ typedef enum SpvExecutionMode_ { SpvExecutionModeRoundingModeRTZ = 4463, SpvExecutionModeEarlyAndLateFragmentTestsAMD = 5017, SpvExecutionModeStencilRefReplacingEXT = 5027, + SpvExecutionModeCoalescingAMDX = 5069, + SpvExecutionModeIsApiEntryAMDX = 5070, + SpvExecutionModeMaxNodeRecursionAMDX = 5071, + SpvExecutionModeStaticNumWorkgroupsAMDX = 5072, + SpvExecutionModeShaderIndexAMDX = 5073, + SpvExecutionModeMaxNumWorkgroupsAMDX = 5077, SpvExecutionModeStencilRefUnchangedFrontAMD = 5079, SpvExecutionModeStencilRefGreaterFrontAMD = 5080, SpvExecutionModeStencilRefLessFrontAMD = 5081, SpvExecutionModeStencilRefUnchangedBackAMD = 5082, SpvExecutionModeStencilRefGreaterBackAMD = 5083, SpvExecutionModeStencilRefLessBackAMD = 5084, + SpvExecutionModeQuadDerivativesKHR = 5088, + SpvExecutionModeRequireFullQuadsKHR = 5089, + SpvExecutionModeSharesInputWithAMDX = 5102, SpvExecutionModeOutputLinesEXT = 5269, SpvExecutionModeOutputLinesNV = 5269, SpvExecutionModeOutputPrimitivesEXT = 5270, SpvExecutionModeOutputPrimitivesNV = 5270, + SpvExecutionModeDerivativeGroupQuadsKHR = 5289, SpvExecutionModeDerivativeGroupQuadsNV = 5289, + SpvExecutionModeDerivativeGroupLinearKHR = 5290, SpvExecutionModeDerivativeGroupLinearNV = 5290, SpvExecutionModeOutputTrianglesEXT = 5298, SpvExecutionModeOutputTrianglesNV = 5298, @@ -199,7 +219,14 @@ typedef enum SpvExecutionMode_ { SpvExecutionModeNoGlobalOffsetINTEL = 5895, SpvExecutionModeNumSIMDWorkitemsINTEL = 5896, SpvExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, + SpvExecutionModeMaximallyReconvergesKHR = 6023, + SpvExecutionModeFPFastMathDefault = 6028, + SpvExecutionModeStreamingInterfaceINTEL = 6154, + SpvExecutionModeRegisterMapInterfaceINTEL = 6160, SpvExecutionModeNamedBarrierCountINTEL = 6417, + SpvExecutionModeMaximumRegistersINTEL = 6461, + SpvExecutionModeMaximumRegistersIdINTEL = 6462, + SpvExecutionModeNamedMaximumRegistersINTEL = 6463, SpvExecutionModeMax = 0x7fffffff, } SpvExecutionMode; @@ -217,6 +244,8 @@ typedef enum SpvStorageClass_ { SpvStorageClassAtomicCounter = 10, SpvStorageClassImage = 11, SpvStorageClassStorageBuffer = 12, + SpvStorageClassTileImageEXT = 4172, + SpvStorageClassNodePayloadAMDX = 5068, SpvStorageClassCallableDataKHR = 5328, SpvStorageClassCallableDataNV = 5328, SpvStorageClassIncomingCallableDataKHR = 5329, @@ -231,6 +260,7 @@ typedef enum SpvStorageClass_ { SpvStorageClassShaderRecordBufferNV = 5343, SpvStorageClassPhysicalStorageBuffer = 5349, SpvStorageClassPhysicalStorageBufferEXT = 5349, + SpvStorageClassHitObjectAttributeNV = 5385, SpvStorageClassTaskPayloadWorkgroupEXT = 5402, SpvStorageClassCodeSectionINTEL = 5605, SpvStorageClassDeviceOnlyINTEL = 5936, @@ -246,6 +276,7 @@ typedef enum SpvDim_ { SpvDimRect = 4, SpvDimBuffer = 5, SpvDimSubpassData = 6, + SpvDimTileImageDataEXT = 4173, SpvDimMax = 0x7fffffff, } SpvDim; @@ -352,6 +383,15 @@ typedef enum SpvImageChannelDataType_ { SpvImageChannelDataTypeFloat = 14, SpvImageChannelDataTypeUnormInt24 = 15, SpvImageChannelDataTypeUnormInt101010_2 = 16, + SpvImageChannelDataTypeUnormInt10X6EXT = 17, + SpvImageChannelDataTypeUnsignedIntRaw10EXT = 19, + SpvImageChannelDataTypeUnsignedIntRaw12EXT = 20, + SpvImageChannelDataTypeUnormInt2_101010EXT = 21, + SpvImageChannelDataTypeUnsignedInt10X6EXT = 22, + SpvImageChannelDataTypeUnsignedInt12X4EXT = 23, + SpvImageChannelDataTypeUnsignedInt14X2EXT = 24, + SpvImageChannelDataTypeUnormInt12X4EXT = 25, + SpvImageChannelDataTypeUnormInt14X2EXT = 26, SpvImageChannelDataTypeMax = 0x7fffffff, } SpvImageChannelDataType; @@ -409,8 +449,11 @@ typedef enum SpvFPFastMathModeShift_ { SpvFPFastMathModeNSZShift = 2, SpvFPFastMathModeAllowRecipShift = 3, SpvFPFastMathModeFastShift = 4, + SpvFPFastMathModeAllowContractShift = 16, SpvFPFastMathModeAllowContractFastINTELShift = 16, + SpvFPFastMathModeAllowReassocShift = 17, SpvFPFastMathModeAllowReassocINTELShift = 17, + SpvFPFastMathModeAllowTransformShift = 18, SpvFPFastMathModeMax = 0x7fffffff, } SpvFPFastMathModeShift; @@ -421,8 +464,11 @@ typedef enum SpvFPFastMathModeMask_ { SpvFPFastMathModeNSZMask = 0x00000004, SpvFPFastMathModeAllowRecipMask = 0x00000008, SpvFPFastMathModeFastMask = 0x00000010, + SpvFPFastMathModeAllowContractMask = 0x00010000, SpvFPFastMathModeAllowContractFastINTELMask = 0x00010000, + SpvFPFastMathModeAllowReassocMask = 0x00020000, SpvFPFastMathModeAllowReassocINTELMask = 0x00020000, + SpvFPFastMathModeAllowTransformMask = 0x00040000, } SpvFPFastMathModeMask; typedef enum SpvFPRoundingMode_ { @@ -456,6 +502,7 @@ typedef enum SpvFunctionParameterAttribute_ { SpvFunctionParameterAttributeNoCapture = 5, SpvFunctionParameterAttributeNoWrite = 6, SpvFunctionParameterAttributeNoReadWrite = 7, + SpvFunctionParameterAttributeRuntimeAlignedINTEL = 5940, SpvFunctionParameterAttributeMax = 0x7fffffff, } SpvFunctionParameterAttribute; @@ -513,6 +560,14 @@ typedef enum SpvDecoration_ { SpvDecorationBlockMatchTextureQCOM = 4488, SpvDecorationBlockMatchSamplerQCOM = 4499, SpvDecorationExplicitInterpAMD = 4999, + SpvDecorationNodeSharesPayloadLimitsWithAMDX = 5019, + SpvDecorationNodeMaxPayloadsAMDX = 5020, + SpvDecorationTrackFinishWritingAMDX = 5078, + SpvDecorationPayloadNodeNameAMDX = 5091, + SpvDecorationPayloadNodeBaseIndexAMDX = 5098, + SpvDecorationPayloadNodeSparseArrayAMDX = 5099, + SpvDecorationPayloadNodeArraySizeAMDX = 5100, + SpvDecorationPayloadDispatchIndirectAMDX = 5105, SpvDecorationOverrideCoverageNV = 5248, SpvDecorationPassthroughNV = 5250, SpvDecorationViewportRelativeNV = 5252, @@ -529,6 +584,7 @@ typedef enum SpvDecoration_ { SpvDecorationRestrictPointerEXT = 5355, SpvDecorationAliasedPointer = 5356, SpvDecorationAliasedPointerEXT = 5356, + SpvDecorationHitObjectShaderRecordBufferNV = 5386, SpvDecorationBindlessSamplerNV = 5398, SpvDecorationBindlessImageNV = 5399, SpvDecorationBoundSamplerNV = 5400, @@ -561,20 +617,45 @@ typedef enum SpvDecoration_ { SpvDecorationMergeINTEL = 5834, SpvDecorationBankBitsINTEL = 5835, SpvDecorationForcePow2DepthINTEL = 5836, + SpvDecorationStridesizeINTEL = 5883, + SpvDecorationWordsizeINTEL = 5884, + SpvDecorationTrueDualPortINTEL = 5885, SpvDecorationBurstCoalesceINTEL = 5899, SpvDecorationCacheSizeINTEL = 5900, SpvDecorationDontStaticallyCoalesceINTEL = 5901, SpvDecorationPrefetchINTEL = 5902, SpvDecorationStallEnableINTEL = 5905, SpvDecorationFuseLoopsInFunctionINTEL = 5907, + SpvDecorationMathOpDSPModeINTEL = 5909, SpvDecorationAliasScopeINTEL = 5914, SpvDecorationNoAliasINTEL = 5915, + SpvDecorationInitiationIntervalINTEL = 5917, + SpvDecorationMaxConcurrencyINTEL = 5918, + SpvDecorationPipelineEnableINTEL = 5919, SpvDecorationBufferLocationINTEL = 5921, SpvDecorationIOPipeStorageINTEL = 5944, SpvDecorationFunctionFloatingPointModeINTEL = 6080, SpvDecorationSingleElementVectorINTEL = 6085, SpvDecorationVectorComputeCallableFunctionINTEL = 6087, SpvDecorationMediaBlockIOINTEL = 6140, + SpvDecorationStallFreeINTEL = 6151, + SpvDecorationFPMaxErrorDecorationINTEL = 6170, + SpvDecorationLatencyControlLabelINTEL = 6172, + SpvDecorationLatencyControlConstraintINTEL = 6173, + SpvDecorationConduitKernelArgumentINTEL = 6175, + SpvDecorationRegisterMapKernelArgumentINTEL = 6176, + SpvDecorationMMHostInterfaceAddressWidthINTEL = 6177, + SpvDecorationMMHostInterfaceDataWidthINTEL = 6178, + SpvDecorationMMHostInterfaceLatencyINTEL = 6179, + SpvDecorationMMHostInterfaceReadWriteModeINTEL = 6180, + SpvDecorationMMHostInterfaceMaxBurstINTEL = 6181, + SpvDecorationMMHostInterfaceWaitRequestINTEL = 6182, + SpvDecorationStableKernelArgumentINTEL = 6183, + SpvDecorationHostAccessINTEL = 6188, + SpvDecorationInitModeINTEL = 6190, + SpvDecorationImplementInRegisterMapINTEL = 6191, + SpvDecorationCacheControlLoadINTEL = 6442, + SpvDecorationCacheControlStoreINTEL = 6443, SpvDecorationMax = 0x7fffffff, } SpvDecoration; @@ -620,6 +701,11 @@ typedef enum SpvBuiltIn_ { SpvBuiltInSubgroupLocalInvocationId = 41, SpvBuiltInVertexIndex = 42, SpvBuiltInInstanceIndex = 43, + SpvBuiltInCoreIDARM = 4160, + SpvBuiltInCoreCountARM = 4161, + SpvBuiltInCoreMaxIDARM = 4162, + SpvBuiltInWarpIDARM = 4163, + SpvBuiltInWarpMaxIDARM = 4164, SpvBuiltInSubgroupEqMask = 4416, SpvBuiltInSubgroupEqMaskKHR = 4416, SpvBuiltInSubgroupGeMask = 4417, @@ -645,6 +731,8 @@ typedef enum SpvBuiltIn_ { SpvBuiltInBaryCoordSmoothSampleAMD = 4997, SpvBuiltInBaryCoordPullModelAMD = 4998, SpvBuiltInFragStencilRefEXT = 5014, + SpvBuiltInRemainingRecursionLevelsAMDX = 5021, + SpvBuiltInShaderIndexAMDX = 5073, SpvBuiltInViewportMaskNV = 5253, SpvBuiltInSecondaryPositionNV = 5257, SpvBuiltInSecondaryViewportMaskNV = 5258, @@ -697,13 +785,25 @@ typedef enum SpvBuiltIn_ { SpvBuiltInHitKindKHR = 5333, SpvBuiltInHitKindNV = 5333, SpvBuiltInCurrentRayTimeNV = 5334, + SpvBuiltInHitTriangleVertexPositionsKHR = 5335, + SpvBuiltInHitMicroTriangleVertexPositionsNV = 5337, + SpvBuiltInHitMicroTriangleVertexBarycentricsNV = 5344, SpvBuiltInIncomingRayFlagsKHR = 5351, SpvBuiltInIncomingRayFlagsNV = 5351, SpvBuiltInRayGeometryIndexKHR = 5352, + SpvBuiltInHitIsSphereNV = 5359, + SpvBuiltInHitIsLSSNV = 5360, + SpvBuiltInHitSpherePositionNV = 5361, SpvBuiltInWarpsPerSMNV = 5374, SpvBuiltInSMCountNV = 5375, SpvBuiltInWarpIDNV = 5376, SpvBuiltInSMIDNV = 5377, + SpvBuiltInHitLSSPositionsNV = 5396, + SpvBuiltInHitKindFrontFacingMicroTriangleNV = 5405, + SpvBuiltInHitKindBackFacingMicroTriangleNV = 5406, + SpvBuiltInHitSphereRadiusNV = 5420, + SpvBuiltInHitLSSRadiiNV = 5421, + SpvBuiltInClusterIDNV = 5436, SpvBuiltInCullMaskKHR = 6021, SpvBuiltInMax = 0x7fffffff, } SpvBuiltIn; @@ -738,6 +838,8 @@ typedef enum SpvLoopControlShift_ { SpvLoopControlMaxInterleavingINTELShift = 21, SpvLoopControlSpeculatedIterationsINTELShift = 22, SpvLoopControlNoFusionINTELShift = 23, + SpvLoopControlLoopCountINTELShift = 24, + SpvLoopControlMaxReinvocationDelayINTELShift = 25, SpvLoopControlMax = 0x7fffffff, } SpvLoopControlShift; @@ -760,6 +862,8 @@ typedef enum SpvLoopControlMask_ { SpvLoopControlMaxInterleavingINTELMask = 0x00200000, SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000, SpvLoopControlNoFusionINTELMask = 0x00800000, + SpvLoopControlLoopCountINTELMask = 0x01000000, + SpvLoopControlMaxReinvocationDelayINTELMask = 0x02000000, } SpvLoopControlMask; typedef enum SpvFunctionControlShift_ { @@ -767,6 +871,7 @@ typedef enum SpvFunctionControlShift_ { SpvFunctionControlDontInlineShift = 1, SpvFunctionControlPureShift = 2, SpvFunctionControlConstShift = 3, + SpvFunctionControlOptNoneEXTShift = 16, SpvFunctionControlOptNoneINTELShift = 16, SpvFunctionControlMax = 0x7fffffff, } SpvFunctionControlShift; @@ -777,6 +882,7 @@ typedef enum SpvFunctionControlMask_ { SpvFunctionControlDontInlineMask = 0x00000002, SpvFunctionControlPureMask = 0x00000004, SpvFunctionControlConstMask = 0x00000008, + SpvFunctionControlOptNoneEXTMask = 0x00010000, SpvFunctionControlOptNoneINTELMask = 0x00010000, } SpvFunctionControlMask; @@ -963,6 +1069,11 @@ typedef enum SpvCapability_ { SpvCapabilityShaderLayer = 69, SpvCapabilityShaderViewportIndex = 70, SpvCapabilityUniformDecoration = 71, + SpvCapabilityCoreBuiltinsARM = 4165, + SpvCapabilityTileImageColorReadAccessEXT = 4166, + SpvCapabilityTileImageDepthReadAccessEXT = 4167, + SpvCapabilityTileImageStencilReadAccessEXT = 4168, + SpvCapabilityCooperativeMatrixLayoutsARM = 4201, SpvCapabilityFragmentShadingRateKHR = 4422, SpvCapabilitySubgroupBallotKHR = 4423, SpvCapabilityDrawParameters = 4427, @@ -992,6 +1103,7 @@ typedef enum SpvCapability_ { SpvCapabilityRoundingModeRTZ = 4468, SpvCapabilityRayQueryProvisionalKHR = 4471, SpvCapabilityRayQueryKHR = 4472, + SpvCapabilityUntypedPointersKHR = 4473, SpvCapabilityRayTraversalPrimitiveCullingKHR = 4478, SpvCapabilityRayTracingKHR = 4479, SpvCapabilityTextureSampleWeightedQCOM = 4484, @@ -1005,6 +1117,11 @@ typedef enum SpvCapability_ { SpvCapabilityImageReadWriteLodAMD = 5015, SpvCapabilityInt64ImageEXT = 5016, SpvCapabilityShaderClockKHR = 5055, + SpvCapabilityShaderEnqueueAMDX = 5067, + SpvCapabilityQuadControlKHR = 5087, + SpvCapabilityBFloat16TypeKHR = 5116, + SpvCapabilityBFloat16DotProductKHR = 5117, + SpvCapabilityBFloat16CooperativeMatrixKHR = 5118, SpvCapabilitySampleMaskOverrideCoverageNV = 5249, SpvCapabilityGeometryShaderPassthroughNV = 5251, SpvCapabilityShaderViewportIndexLayerEXT = 5254, @@ -1018,6 +1135,7 @@ typedef enum SpvCapability_ { SpvCapabilityMeshShadingEXT = 5283, SpvCapabilityFragmentBarycentricKHR = 5284, SpvCapabilityFragmentBarycentricNV = 5284, + SpvCapabilityComputeDerivativeGroupQuadsKHR = 5288, SpvCapabilityComputeDerivativeGroupQuadsNV = 5288, SpvCapabilityFragmentDensityEXT = 5291, SpvCapabilityShadingRateNV = 5291, @@ -1046,6 +1164,7 @@ typedef enum SpvCapability_ { SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, + SpvCapabilityRayTracingPositionFetchKHR = 5336, SpvCapabilityRayTracingNV = 5340, SpvCapabilityRayTracingMotionBlurNV = 5341, SpvCapabilityVulkanMemoryModel = 5345, @@ -1054,6 +1173,7 @@ typedef enum SpvCapability_ { SpvCapabilityVulkanMemoryModelDeviceScopeKHR = 5346, SpvCapabilityPhysicalStorageBufferAddresses = 5347, SpvCapabilityPhysicalStorageBufferAddressesEXT = 5347, + SpvCapabilityComputeDerivativeGroupLinearKHR = 5350, SpvCapabilityComputeDerivativeGroupLinearNV = 5350, SpvCapabilityRayTracingProvisionalKHR = 5353, SpvCapabilityCooperativeMatrixNV = 5357, @@ -1063,7 +1183,25 @@ typedef enum SpvCapability_ { SpvCapabilityFragmentShaderPixelInterlockEXT = 5378, SpvCapabilityDemoteToHelperInvocation = 5379, SpvCapabilityDemoteToHelperInvocationEXT = 5379, + SpvCapabilityDisplacementMicromapNV = 5380, + SpvCapabilityRayTracingOpacityMicromapEXT = 5381, + SpvCapabilityShaderInvocationReorderNV = 5383, SpvCapabilityBindlessTextureNV = 5390, + SpvCapabilityRayQueryPositionFetchKHR = 5391, + SpvCapabilityCooperativeVectorNV = 5394, + SpvCapabilityAtomicFloat16VectorNV = 5404, + SpvCapabilityRayTracingDisplacementMicromapNV = 5409, + SpvCapabilityRawAccessChainsNV = 5414, + SpvCapabilityRayTracingSpheresGeometryNV = 5418, + SpvCapabilityRayTracingLinearSweptSpheresGeometryNV = 5419, + SpvCapabilityCooperativeMatrixReductionsNV = 5430, + SpvCapabilityCooperativeMatrixConversionsNV = 5431, + SpvCapabilityCooperativeMatrixPerElementOperationsNV = 5432, + SpvCapabilityCooperativeMatrixTensorAddressingNV = 5433, + SpvCapabilityCooperativeMatrixBlockLoadsNV = 5434, + SpvCapabilityCooperativeVectorTrainingNV = 5435, + SpvCapabilityRayTracingClusterAccelerationStructureNV = 5437, + SpvCapabilityTensorAddressingNV = 5439, SpvCapabilitySubgroupShuffleINTEL = 5568, SpvCapabilitySubgroupBufferBlockIOINTEL = 5569, SpvCapabilitySubgroupImageBlockIOINTEL = 5570, @@ -1096,10 +1234,13 @@ typedef enum SpvCapability_ { SpvCapabilityFPGAMemoryAccessesINTEL = 5898, SpvCapabilityFPGAClusterAttributesINTEL = 5904, SpvCapabilityLoopFuseINTEL = 5906, + SpvCapabilityFPGADSPControlINTEL = 5908, SpvCapabilityMemoryAccessAliasingINTEL = 5910, + SpvCapabilityFPGAInvocationPipeliningAttributesINTEL = 5916, SpvCapabilityFPGABufferLocationINTEL = 5920, SpvCapabilityArbitraryPrecisionFixedPointINTEL = 5922, SpvCapabilityUSMStorageClassesINTEL = 5935, + SpvCapabilityRuntimeAlignedAttributeINTEL = 5939, SpvCapabilityIOPipesINTEL = 5943, SpvCapabilityBlockingPipesINTEL = 5945, SpvCapabilityFPGARegINTEL = 5948, @@ -1112,16 +1253,40 @@ typedef enum SpvCapability_ { SpvCapabilityDotProduct = 6019, SpvCapabilityDotProductKHR = 6019, SpvCapabilityRayCullMaskKHR = 6020, + SpvCapabilityCooperativeMatrixKHR = 6022, + SpvCapabilityReplicatedCompositesEXT = 6024, SpvCapabilityBitInstructions = 6025, SpvCapabilityGroupNonUniformRotateKHR = 6026, + SpvCapabilityFloatControls2 = 6029, SpvCapabilityAtomicFloat32AddEXT = 6033, SpvCapabilityAtomicFloat64AddEXT = 6034, - SpvCapabilityLongConstantCompositeINTEL = 6089, + SpvCapabilityLongCompositesINTEL = 6089, + SpvCapabilityOptNoneEXT = 6094, SpvCapabilityOptNoneINTEL = 6094, SpvCapabilityAtomicFloat16AddEXT = 6095, SpvCapabilityDebugInfoModuleINTEL = 6114, + SpvCapabilityBFloat16ConversionINTEL = 6115, SpvCapabilitySplitBarrierINTEL = 6141, + SpvCapabilityArithmeticFenceEXT = 6144, + SpvCapabilityFPGAClusterAttributesV2INTEL = 6150, + SpvCapabilityFPGAKernelAttributesv2INTEL = 6161, + SpvCapabilityTaskSequenceINTEL = 6162, + SpvCapabilityFPMaxErrorINTEL = 6169, + SpvCapabilityFPGALatencyControlINTEL = 6171, + SpvCapabilityFPGAArgumentInterfacesINTEL = 6174, + SpvCapabilityGlobalVariableHostAccessINTEL = 6187, + SpvCapabilityGlobalVariableFPGADecorationsINTEL = 6189, + SpvCapabilitySubgroupBufferPrefetchINTEL = 6220, + SpvCapabilitySubgroup2DBlockIOINTEL = 6228, + SpvCapabilitySubgroup2DBlockTransformINTEL = 6229, + SpvCapabilitySubgroup2DBlockTransposeINTEL = 6230, + SpvCapabilitySubgroupMatrixMultiplyAccumulateINTEL = 6236, + SpvCapabilityTernaryBitwiseFunctionINTEL = 6241, SpvCapabilityGroupUniformArithmeticKHR = 6400, + SpvCapabilityTensorFloat32RoundingINTEL = 6425, + SpvCapabilityMaskedGatherScatterINTEL = 6427, + SpvCapabilityCacheControlsINTEL = 6441, + SpvCapabilityRegisterLimitsINTEL = 6460, SpvCapabilityMax = 0x7fffffff, } SpvCapability; @@ -1134,8 +1299,10 @@ typedef enum SpvRayFlagsShift_ { SpvRayFlagsCullFrontFacingTrianglesKHRShift = 5, SpvRayFlagsCullOpaqueKHRShift = 6, SpvRayFlagsCullNoOpaqueKHRShift = 7, + SpvRayFlagsSkipBuiltinPrimitivesNVShift = 8, SpvRayFlagsSkipTrianglesKHRShift = 8, SpvRayFlagsSkipAABBsKHRShift = 9, + SpvRayFlagsForceOpacityMicromap2StateEXTShift = 10, SpvRayFlagsMax = 0x7fffffff, } SpvRayFlagsShift; @@ -1149,8 +1316,10 @@ typedef enum SpvRayFlagsMask_ { SpvRayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, SpvRayFlagsCullOpaqueKHRMask = 0x00000040, SpvRayFlagsCullNoOpaqueKHRMask = 0x00000080, + SpvRayFlagsSkipBuiltinPrimitivesNVMask = 0x00000100, SpvRayFlagsSkipTrianglesKHRMask = 0x00000100, SpvRayFlagsSkipAABBsKHRMask = 0x00000200, + SpvRayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400, } SpvRayFlagsMask; typedef enum SpvRayQueryIntersection_ { @@ -1226,6 +1395,190 @@ typedef enum SpvPackedVectorFormat_ { SpvPackedVectorFormatMax = 0x7fffffff, } SpvPackedVectorFormat; +typedef enum SpvCooperativeMatrixOperandsShift_ { + SpvCooperativeMatrixOperandsMatrixASignedComponentsKHRShift = 0, + SpvCooperativeMatrixOperandsMatrixBSignedComponentsKHRShift = 1, + SpvCooperativeMatrixOperandsMatrixCSignedComponentsKHRShift = 2, + SpvCooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift = 3, + SpvCooperativeMatrixOperandsSaturatingAccumulationKHRShift = 4, + SpvCooperativeMatrixOperandsMax = 0x7fffffff, +} SpvCooperativeMatrixOperandsShift; + +typedef enum SpvCooperativeMatrixOperandsMask_ { + SpvCooperativeMatrixOperandsMaskNone = 0, + SpvCooperativeMatrixOperandsMatrixASignedComponentsKHRMask = 0x00000001, + SpvCooperativeMatrixOperandsMatrixBSignedComponentsKHRMask = 0x00000002, + SpvCooperativeMatrixOperandsMatrixCSignedComponentsKHRMask = 0x00000004, + SpvCooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask = 0x00000008, + SpvCooperativeMatrixOperandsSaturatingAccumulationKHRMask = 0x00000010, +} SpvCooperativeMatrixOperandsMask; + +typedef enum SpvCooperativeMatrixLayout_ { + SpvCooperativeMatrixLayoutRowMajorKHR = 0, + SpvCooperativeMatrixLayoutColumnMajorKHR = 1, + SpvCooperativeMatrixLayoutRowBlockedInterleavedARM = 4202, + SpvCooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203, + SpvCooperativeMatrixLayoutMax = 0x7fffffff, +} SpvCooperativeMatrixLayout; + +typedef enum SpvCooperativeMatrixUse_ { + SpvCooperativeMatrixUseMatrixAKHR = 0, + SpvCooperativeMatrixUseMatrixBKHR = 1, + SpvCooperativeMatrixUseMatrixAccumulatorKHR = 2, + SpvCooperativeMatrixUseMax = 0x7fffffff, +} SpvCooperativeMatrixUse; + +typedef enum SpvCooperativeMatrixReduceShift_ { + SpvCooperativeMatrixReduceRowShift = 0, + SpvCooperativeMatrixReduceColumnShift = 1, + SpvCooperativeMatrixReduce2x2Shift = 2, + SpvCooperativeMatrixReduceMax = 0x7fffffff, +} SpvCooperativeMatrixReduceShift; + +typedef enum SpvCooperativeMatrixReduceMask_ { + SpvCooperativeMatrixReduceMaskNone = 0, + SpvCooperativeMatrixReduceRowMask = 0x00000001, + SpvCooperativeMatrixReduceColumnMask = 0x00000002, + SpvCooperativeMatrixReduce2x2Mask = 0x00000004, +} SpvCooperativeMatrixReduceMask; + +typedef enum SpvTensorClampMode_ { + SpvTensorClampModeUndefined = 0, + SpvTensorClampModeConstant = 1, + SpvTensorClampModeClampToEdge = 2, + SpvTensorClampModeRepeat = 3, + SpvTensorClampModeRepeatMirrored = 4, + SpvTensorClampModeMax = 0x7fffffff, +} SpvTensorClampMode; + +typedef enum SpvTensorAddressingOperandsShift_ { + SpvTensorAddressingOperandsTensorViewShift = 0, + SpvTensorAddressingOperandsDecodeFuncShift = 1, + SpvTensorAddressingOperandsMax = 0x7fffffff, +} SpvTensorAddressingOperandsShift; + +typedef enum SpvTensorAddressingOperandsMask_ { + SpvTensorAddressingOperandsMaskNone = 0, + SpvTensorAddressingOperandsTensorViewMask = 0x00000001, + SpvTensorAddressingOperandsDecodeFuncMask = 0x00000002, +} SpvTensorAddressingOperandsMask; + +typedef enum SpvInitializationModeQualifier_ { + SpvInitializationModeQualifierInitOnDeviceReprogramINTEL = 0, + SpvInitializationModeQualifierInitOnDeviceResetINTEL = 1, + SpvInitializationModeQualifierMax = 0x7fffffff, +} SpvInitializationModeQualifier; + +typedef enum SpvHostAccessQualifier_ { + SpvHostAccessQualifierNoneINTEL = 0, + SpvHostAccessQualifierReadINTEL = 1, + SpvHostAccessQualifierWriteINTEL = 2, + SpvHostAccessQualifierReadWriteINTEL = 3, + SpvHostAccessQualifierMax = 0x7fffffff, +} SpvHostAccessQualifier; + +typedef enum SpvLoadCacheControl_ { + SpvLoadCacheControlUncachedINTEL = 0, + SpvLoadCacheControlCachedINTEL = 1, + SpvLoadCacheControlStreamingINTEL = 2, + SpvLoadCacheControlInvalidateAfterReadINTEL = 3, + SpvLoadCacheControlConstCachedINTEL = 4, + SpvLoadCacheControlMax = 0x7fffffff, +} SpvLoadCacheControl; + +typedef enum SpvStoreCacheControl_ { + SpvStoreCacheControlUncachedINTEL = 0, + SpvStoreCacheControlWriteThroughINTEL = 1, + SpvStoreCacheControlWriteBackINTEL = 2, + SpvStoreCacheControlStreamingINTEL = 3, + SpvStoreCacheControlMax = 0x7fffffff, +} SpvStoreCacheControl; + +typedef enum SpvNamedMaximumNumberOfRegisters_ { + SpvNamedMaximumNumberOfRegistersAutoINTEL = 0, + SpvNamedMaximumNumberOfRegistersMax = 0x7fffffff, +} SpvNamedMaximumNumberOfRegisters; + +typedef enum SpvMatrixMultiplyAccumulateOperandsShift_ { + SpvMatrixMultiplyAccumulateOperandsMatrixASignedComponentsINTELShift = 0, + SpvMatrixMultiplyAccumulateOperandsMatrixBSignedComponentsINTELShift = 1, + SpvMatrixMultiplyAccumulateOperandsMatrixCBFloat16INTELShift = 2, + SpvMatrixMultiplyAccumulateOperandsMatrixResultBFloat16INTELShift = 3, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt8INTELShift = 4, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt8INTELShift = 5, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt4INTELShift = 6, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt4INTELShift = 7, + SpvMatrixMultiplyAccumulateOperandsMatrixATF32INTELShift = 8, + SpvMatrixMultiplyAccumulateOperandsMatrixBTF32INTELShift = 9, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedFloat16INTELShift = 10, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedFloat16INTELShift = 11, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedBFloat16INTELShift = 12, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedBFloat16INTELShift = 13, + SpvMatrixMultiplyAccumulateOperandsMax = 0x7fffffff, +} SpvMatrixMultiplyAccumulateOperandsShift; + +typedef enum SpvMatrixMultiplyAccumulateOperandsMask_ { + SpvMatrixMultiplyAccumulateOperandsMaskNone = 0, + SpvMatrixMultiplyAccumulateOperandsMatrixASignedComponentsINTELMask = 0x00000001, + SpvMatrixMultiplyAccumulateOperandsMatrixBSignedComponentsINTELMask = 0x00000002, + SpvMatrixMultiplyAccumulateOperandsMatrixCBFloat16INTELMask = 0x00000004, + SpvMatrixMultiplyAccumulateOperandsMatrixResultBFloat16INTELMask = 0x00000008, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt8INTELMask = 0x00000010, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt8INTELMask = 0x00000020, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt4INTELMask = 0x00000040, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt4INTELMask = 0x00000080, + SpvMatrixMultiplyAccumulateOperandsMatrixATF32INTELMask = 0x00000100, + SpvMatrixMultiplyAccumulateOperandsMatrixBTF32INTELMask = 0x00000200, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedFloat16INTELMask = 0x00000400, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedFloat16INTELMask = 0x00000800, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedBFloat16INTELMask = 0x00001000, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedBFloat16INTELMask = 0x00002000, +} SpvMatrixMultiplyAccumulateOperandsMask; + +typedef enum SpvRawAccessChainOperandsShift_ { + SpvRawAccessChainOperandsRobustnessPerComponentNVShift = 0, + SpvRawAccessChainOperandsRobustnessPerElementNVShift = 1, + SpvRawAccessChainOperandsMax = 0x7fffffff, +} SpvRawAccessChainOperandsShift; + +typedef enum SpvRawAccessChainOperandsMask_ { + SpvRawAccessChainOperandsMaskNone = 0, + SpvRawAccessChainOperandsRobustnessPerComponentNVMask = 0x00000001, + SpvRawAccessChainOperandsRobustnessPerElementNVMask = 0x00000002, +} SpvRawAccessChainOperandsMask; + +typedef enum SpvFPEncoding_ { + SpvFPEncodingBFloat16KHR = 0, + SpvFPEncodingMax = 0x7fffffff, +} SpvFPEncoding; + +typedef enum SpvCooperativeVectorMatrixLayout_ { + SpvCooperativeVectorMatrixLayoutRowMajorNV = 0, + SpvCooperativeVectorMatrixLayoutColumnMajorNV = 1, + SpvCooperativeVectorMatrixLayoutInferencingOptimalNV = 2, + SpvCooperativeVectorMatrixLayoutTrainingOptimalNV = 3, + SpvCooperativeVectorMatrixLayoutMax = 0x7fffffff, +} SpvCooperativeVectorMatrixLayout; + +typedef enum SpvComponentType_ { + SpvComponentTypeFloat16NV = 0, + SpvComponentTypeFloat32NV = 1, + SpvComponentTypeFloat64NV = 2, + SpvComponentTypeSignedInt8NV = 3, + SpvComponentTypeSignedInt16NV = 4, + SpvComponentTypeSignedInt32NV = 5, + SpvComponentTypeSignedInt64NV = 6, + SpvComponentTypeUnsignedInt8NV = 7, + SpvComponentTypeUnsignedInt16NV = 8, + SpvComponentTypeUnsignedInt32NV = 9, + SpvComponentTypeUnsignedInt64NV = 10, + SpvComponentTypeSignedInt8PackedNV = 1000491000, + SpvComponentTypeUnsignedInt8PackedNV = 1000491001, + SpvComponentTypeFloatE4M3NV = 1000491002, + SpvComponentTypeFloatE5M2NV = 1000491003, + SpvComponentTypeMax = 0x7fffffff, +} SpvComponentType; + typedef enum SpvOp_ { SpvOpNop = 0, SpvOpUndef = 1, @@ -1571,14 +1924,26 @@ typedef enum SpvOp_ { SpvOpPtrEqual = 401, SpvOpPtrNotEqual = 402, SpvOpPtrDiff = 403, + SpvOpColorAttachmentReadEXT = 4160, + SpvOpDepthAttachmentReadEXT = 4161, + SpvOpStencilAttachmentReadEXT = 4162, SpvOpTerminateInvocation = 4416, + SpvOpTypeUntypedPointerKHR = 4417, + SpvOpUntypedVariableKHR = 4418, + SpvOpUntypedAccessChainKHR = 4419, + SpvOpUntypedInBoundsAccessChainKHR = 4420, SpvOpSubgroupBallotKHR = 4421, SpvOpSubgroupFirstInvocationKHR = 4422, + SpvOpUntypedPtrAccessChainKHR = 4423, + SpvOpUntypedInBoundsPtrAccessChainKHR = 4424, + SpvOpUntypedArrayLengthKHR = 4425, + SpvOpUntypedPrefetchKHR = 4426, SpvOpSubgroupAllKHR = 4428, SpvOpSubgroupAnyKHR = 4429, SpvOpSubgroupAllEqualKHR = 4430, SpvOpGroupNonUniformRotateKHR = 4431, SpvOpSubgroupReadInvocationKHR = 4432, + SpvOpExtInstWithForwardRefsKHR = 4433, SpvOpTraceRayKHR = 4445, SpvOpExecuteCallableKHR = 4446, SpvOpConvertUToAccelerationStructureKHR = 4447, @@ -1596,6 +1961,14 @@ typedef enum SpvOp_ { SpvOpUDotAccSatKHR = 4454, SpvOpSUDotAccSat = 4455, SpvOpSUDotAccSatKHR = 4455, + SpvOpTypeCooperativeMatrixKHR = 4456, + SpvOpCooperativeMatrixLoadKHR = 4457, + SpvOpCooperativeMatrixStoreKHR = 4458, + SpvOpCooperativeMatrixMulAddKHR = 4459, + SpvOpCooperativeMatrixLengthKHR = 4460, + SpvOpConstantCompositeReplicateEXT = 4461, + SpvOpSpecConstantCompositeReplicateEXT = 4462, + SpvOpCompositeConstructReplicateEXT = 4463, SpvOpTypeRayQueryKHR = 4472, SpvOpRayQueryInitializeKHR = 4473, SpvOpRayQueryTerminateKHR = 4474, @@ -1622,11 +1995,64 @@ typedef enum SpvOp_ { SpvOpFragmentMaskFetchAMD = 5011, SpvOpFragmentFetchAMD = 5012, SpvOpReadClockKHR = 5056, + SpvOpAllocateNodePayloadsAMDX = 5074, + SpvOpEnqueueNodePayloadsAMDX = 5075, + SpvOpTypeNodePayloadArrayAMDX = 5076, + SpvOpFinishWritingNodePayloadAMDX = 5078, + SpvOpNodePayloadArrayLengthAMDX = 5090, + SpvOpIsNodePayloadValidAMDX = 5101, + SpvOpConstantStringAMDX = 5103, + SpvOpSpecConstantStringAMDX = 5104, + SpvOpGroupNonUniformQuadAllKHR = 5110, + SpvOpGroupNonUniformQuadAnyKHR = 5111, + SpvOpHitObjectRecordHitMotionNV = 5249, + SpvOpHitObjectRecordHitWithIndexMotionNV = 5250, + SpvOpHitObjectRecordMissMotionNV = 5251, + SpvOpHitObjectGetWorldToObjectNV = 5252, + SpvOpHitObjectGetObjectToWorldNV = 5253, + SpvOpHitObjectGetObjectRayDirectionNV = 5254, + SpvOpHitObjectGetObjectRayOriginNV = 5255, + SpvOpHitObjectTraceRayMotionNV = 5256, + SpvOpHitObjectGetShaderRecordBufferHandleNV = 5257, + SpvOpHitObjectGetShaderBindingTableRecordIndexNV = 5258, + SpvOpHitObjectRecordEmptyNV = 5259, + SpvOpHitObjectTraceRayNV = 5260, + SpvOpHitObjectRecordHitNV = 5261, + SpvOpHitObjectRecordHitWithIndexNV = 5262, + SpvOpHitObjectRecordMissNV = 5263, + SpvOpHitObjectExecuteShaderNV = 5264, + SpvOpHitObjectGetCurrentTimeNV = 5265, + SpvOpHitObjectGetAttributesNV = 5266, + SpvOpHitObjectGetHitKindNV = 5267, + SpvOpHitObjectGetPrimitiveIndexNV = 5268, + SpvOpHitObjectGetGeometryIndexNV = 5269, + SpvOpHitObjectGetInstanceIdNV = 5270, + SpvOpHitObjectGetInstanceCustomIndexNV = 5271, + SpvOpHitObjectGetWorldRayDirectionNV = 5272, + SpvOpHitObjectGetWorldRayOriginNV = 5273, + SpvOpHitObjectGetRayTMaxNV = 5274, + SpvOpHitObjectGetRayTMinNV = 5275, + SpvOpHitObjectIsEmptyNV = 5276, + SpvOpHitObjectIsHitNV = 5277, + SpvOpHitObjectIsMissNV = 5278, + SpvOpReorderThreadWithHitObjectNV = 5279, + SpvOpReorderThreadWithHintNV = 5280, + SpvOpTypeHitObjectNV = 5281, SpvOpImageSampleFootprintNV = 5283, + SpvOpTypeCooperativeVectorNV = 5288, + SpvOpCooperativeVectorMatrixMulNV = 5289, + SpvOpCooperativeVectorOuterProductAccumulateNV = 5290, + SpvOpCooperativeVectorReduceSumAccumulateNV = 5291, + SpvOpCooperativeVectorMatrixMulAddNV = 5292, + SpvOpCooperativeMatrixConvertNV = 5293, SpvOpEmitMeshTasksEXT = 5294, SpvOpSetMeshOutputsEXT = 5295, SpvOpGroupNonUniformPartitionNV = 5296, SpvOpWritePackedPrimitiveIndices4x8NV = 5299, + SpvOpFetchMicroTriangleVertexPositionNV = 5300, + SpvOpFetchMicroTriangleVertexBarycentricNV = 5301, + SpvOpCooperativeVectorLoadNV = 5302, + SpvOpCooperativeVectorStoreNV = 5303, SpvOpReportIntersectionKHR = 5334, SpvOpReportIntersectionNV = 5334, SpvOpIgnoreIntersectionNV = 5335, @@ -1634,9 +2060,12 @@ typedef enum SpvOp_ { SpvOpTraceNV = 5337, SpvOpTraceMotionNV = 5338, SpvOpTraceRayMotionNV = 5339, + SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340, SpvOpTypeAccelerationStructureKHR = 5341, SpvOpTypeAccelerationStructureNV = 5341, SpvOpExecuteCallableNV = 5344, + SpvOpRayQueryGetClusterIdNV = 5345, + SpvOpHitObjectGetClusterIdNV = 5346, SpvOpTypeCooperativeMatrixNV = 5358, SpvOpCooperativeMatrixLoadNV = 5359, SpvOpCooperativeMatrixStoreNV = 5360, @@ -1644,9 +2073,26 @@ typedef enum SpvOp_ { SpvOpCooperativeMatrixLengthNV = 5362, SpvOpBeginInvocationInterlockEXT = 5364, SpvOpEndInvocationInterlockEXT = 5365, + SpvOpCooperativeMatrixReduceNV = 5366, + SpvOpCooperativeMatrixLoadTensorNV = 5367, + SpvOpCooperativeMatrixStoreTensorNV = 5368, + SpvOpCooperativeMatrixPerElementOpNV = 5369, + SpvOpTypeTensorLayoutNV = 5370, + SpvOpTypeTensorViewNV = 5371, + SpvOpCreateTensorLayoutNV = 5372, + SpvOpTensorLayoutSetDimensionNV = 5373, + SpvOpTensorLayoutSetStrideNV = 5374, + SpvOpTensorLayoutSliceNV = 5375, + SpvOpTensorLayoutSetClampValueNV = 5376, + SpvOpCreateTensorViewNV = 5377, + SpvOpTensorViewSetDimensionNV = 5378, + SpvOpTensorViewSetStrideNV = 5379, SpvOpDemoteToHelperInvocation = 5380, SpvOpDemoteToHelperInvocationEXT = 5380, SpvOpIsHelperInvocationEXT = 5381, + SpvOpTensorViewSetClipNV = 5382, + SpvOpTensorLayoutSetBlockSizeNV = 5384, + SpvOpCooperativeMatrixTransposeNV = 5390, SpvOpConvertUToImageNV = 5391, SpvOpConvertUToSamplerNV = 5392, SpvOpConvertImageToUNV = 5393, @@ -1654,6 +2100,20 @@ typedef enum SpvOp_ { SpvOpConvertUToSampledImageNV = 5395, SpvOpConvertSampledImageToUNV = 5396, SpvOpSamplerImageAddressingModeNV = 5397, + SpvOpRawAccessChainNV = 5398, + SpvOpRayQueryGetIntersectionSpherePositionNV = 5427, + SpvOpRayQueryGetIntersectionSphereRadiusNV = 5428, + SpvOpRayQueryGetIntersectionLSSPositionsNV = 5429, + SpvOpRayQueryGetIntersectionLSSRadiiNV = 5430, + SpvOpRayQueryGetIntersectionLSSHitValueNV = 5431, + SpvOpHitObjectGetSpherePositionNV = 5432, + SpvOpHitObjectGetSphereRadiusNV = 5433, + SpvOpHitObjectGetLSSPositionsNV = 5434, + SpvOpHitObjectGetLSSRadiiNV = 5435, + SpvOpHitObjectIsSphereHitNV = 5436, + SpvOpHitObjectIsLSSHitNV = 5437, + SpvOpRayQueryIsSphereHitNV = 5438, + SpvOpRayQueryIsLSSHitNV = 5439, SpvOpSubgroupShuffleINTEL = 5571, SpvOpSubgroupShuffleDownINTEL = 5572, SpvOpSubgroupShuffleUpINTEL = 5573, @@ -1895,8 +2355,25 @@ typedef enum SpvOp_ { SpvOpTypeStructContinuedINTEL = 6090, SpvOpConstantCompositeContinuedINTEL = 6091, SpvOpSpecConstantCompositeContinuedINTEL = 6092, + SpvOpCompositeConstructContinuedINTEL = 6096, + SpvOpConvertFToBF16INTEL = 6116, + SpvOpConvertBF16ToFINTEL = 6117, SpvOpControlBarrierArriveINTEL = 6142, SpvOpControlBarrierWaitINTEL = 6143, + SpvOpArithmeticFenceEXT = 6145, + SpvOpTaskSequenceCreateINTEL = 6163, + SpvOpTaskSequenceAsyncINTEL = 6164, + SpvOpTaskSequenceGetINTEL = 6165, + SpvOpTaskSequenceReleaseINTEL = 6166, + SpvOpTypeTaskSequenceINTEL = 6199, + SpvOpSubgroupBlockPrefetchINTEL = 6221, + SpvOpSubgroup2DBlockLoadINTEL = 6231, + SpvOpSubgroup2DBlockLoadTransformINTEL = 6232, + SpvOpSubgroup2DBlockLoadTransposeINTEL = 6233, + SpvOpSubgroup2DBlockPrefetchINTEL = 6234, + SpvOpSubgroup2DBlockStoreINTEL = 6235, + SpvOpSubgroupMatrixMultiplyAccumulateINTEL = 6237, + SpvOpBitwiseFunctionINTEL = 6242, SpvOpGroupIMulKHR = 6401, SpvOpGroupFMulKHR = 6402, SpvOpGroupBitwiseAndKHR = 6403, @@ -1905,6 +2382,9 @@ typedef enum SpvOp_ { SpvOpGroupLogicalAndKHR = 6406, SpvOpGroupLogicalOrKHR = 6407, SpvOpGroupLogicalXorKHR = 6408, + SpvOpRoundFToTF32INTEL = 6426, + SpvOpMaskedGatherINTEL = 6428, + SpvOpMaskedScatterINTEL = 6429, SpvOpMax = 0x7fffffff, } SpvOp; @@ -2260,14 +2740,26 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpPtrEqual: *hasResult = true; *hasResultType = true; break; case SpvOpPtrNotEqual: *hasResult = true; *hasResultType = true; break; case SpvOpPtrDiff: *hasResult = true; *hasResultType = true; break; + case SpvOpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; + case SpvOpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; + case SpvOpStencilAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; case SpvOpTerminateInvocation: *hasResult = false; *hasResultType = false; break; + case SpvOpTypeUntypedPointerKHR: *hasResult = true; *hasResultType = false; break; + case SpvOpUntypedVariableKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpUntypedAccessChainKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpUntypedInBoundsAccessChainKHR: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpUntypedPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpUntypedInBoundsPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpUntypedArrayLengthKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpUntypedPrefetchKHR: *hasResult = false; *hasResultType = false; break; case SpvOpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; case SpvOpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpExtInstWithForwardRefsKHR: *hasResult = true; *hasResultType = true; break; case SpvOpTraceRayKHR: *hasResult = false; *hasResultType = false; break; case SpvOpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; @@ -2279,6 +2771,14 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpSDotAccSat: *hasResult = true; *hasResultType = true; break; case SpvOpUDotAccSat: *hasResult = true; *hasResultType = true; break; case SpvOpSUDotAccSat: *hasResult = true; *hasResultType = true; break; + case SpvOpTypeCooperativeMatrixKHR: *hasResult = true; *hasResultType = false; break; + case SpvOpCooperativeMatrixLoadKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeMatrixStoreKHR: *hasResult = false; *hasResultType = false; break; + case SpvOpCooperativeMatrixMulAddKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeMatrixLengthKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break; + case SpvOpSpecConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break; + case SpvOpCompositeConstructReplicateEXT: *hasResult = true; *hasResultType = true; break; case SpvOpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; case SpvOpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; @@ -2305,19 +2805,75 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break; case SpvOpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break; case SpvOpReadClockKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpAllocateNodePayloadsAMDX: *hasResult = true; *hasResultType = true; break; + case SpvOpEnqueueNodePayloadsAMDX: *hasResult = false; *hasResultType = false; break; + case SpvOpTypeNodePayloadArrayAMDX: *hasResult = true; *hasResultType = false; break; + case SpvOpFinishWritingNodePayloadAMDX: *hasResult = true; *hasResultType = true; break; + case SpvOpNodePayloadArrayLengthAMDX: *hasResult = true; *hasResultType = true; break; + case SpvOpIsNodePayloadValidAMDX: *hasResult = true; *hasResultType = true; break; + case SpvOpConstantStringAMDX: *hasResult = true; *hasResultType = false; break; + case SpvOpSpecConstantStringAMDX: *hasResult = true; *hasResultType = false; break; + case SpvOpGroupNonUniformQuadAllKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpGroupNonUniformQuadAnyKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectGetWorldToObjectNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetObjectToWorldNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetObjectRayDirectionNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetObjectRayOriginNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectGetShaderRecordBufferHandleNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetShaderBindingTableRecordIndexNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectRecordEmptyNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectTraceRayNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectRecordHitNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectRecordHitWithIndexNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectRecordMissNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectExecuteShaderNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectGetCurrentTimeNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetAttributesNV: *hasResult = false; *hasResultType = false; break; + case SpvOpHitObjectGetHitKindNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetPrimitiveIndexNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetGeometryIndexNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetInstanceIdNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetInstanceCustomIndexNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetWorldRayDirectionNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetWorldRayOriginNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetRayTMaxNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetRayTMinNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectIsEmptyNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectIsHitNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectIsMissNV: *hasResult = true; *hasResultType = true; break; + case SpvOpReorderThreadWithHitObjectNV: *hasResult = false; *hasResultType = false; break; + case SpvOpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break; + case SpvOpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break; case SpvOpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; + case SpvOpTypeCooperativeVectorNV: *hasResult = true; *hasResultType = false; break; + case SpvOpCooperativeVectorMatrixMulNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeVectorOuterProductAccumulateNV: *hasResult = false; *hasResultType = false; break; + case SpvOpCooperativeVectorReduceSumAccumulateNV: *hasResult = false; *hasResultType = false; break; + case SpvOpCooperativeVectorMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeMatrixConvertNV: *hasResult = true; *hasResultType = true; break; case SpvOpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break; case SpvOpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break; case SpvOpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break; case SpvOpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; - case SpvOpReportIntersectionNV: *hasResult = true; *hasResultType = true; break; + case SpvOpFetchMicroTriangleVertexPositionNV: *hasResult = true; *hasResultType = true; break; + case SpvOpFetchMicroTriangleVertexBarycentricNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeVectorLoadNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeVectorStoreNV: *hasResult = false; *hasResultType = false; break; + case SpvOpReportIntersectionKHR: *hasResult = true; *hasResultType = true; break; case SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break; case SpvOpTraceNV: *hasResult = false; *hasResultType = false; break; case SpvOpTraceMotionNV: *hasResult = false; *hasResultType = false; break; case SpvOpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; - case SpvOpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break; + case SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpTypeAccelerationStructureKHR: *hasResult = true; *hasResultType = false; break; case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; + case SpvOpRayQueryGetClusterIdNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetClusterIdNV: *hasResult = true; *hasResultType = true; break; case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; case SpvOpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; case SpvOpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; @@ -2325,8 +2881,25 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; case SpvOpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; case SpvOpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; + case SpvOpCooperativeMatrixReduceNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeMatrixLoadTensorNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeMatrixStoreTensorNV: *hasResult = false; *hasResultType = false; break; + case SpvOpCooperativeMatrixPerElementOpNV: *hasResult = true; *hasResultType = true; break; + case SpvOpTypeTensorLayoutNV: *hasResult = true; *hasResultType = false; break; + case SpvOpTypeTensorViewNV: *hasResult = true; *hasResultType = false; break; + case SpvOpCreateTensorLayoutNV: *hasResult = true; *hasResultType = true; break; + case SpvOpTensorLayoutSetDimensionNV: *hasResult = true; *hasResultType = true; break; + case SpvOpTensorLayoutSetStrideNV: *hasResult = true; *hasResultType = true; break; + case SpvOpTensorLayoutSliceNV: *hasResult = true; *hasResultType = true; break; + case SpvOpTensorLayoutSetClampValueNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCreateTensorViewNV: *hasResult = true; *hasResultType = true; break; + case SpvOpTensorViewSetDimensionNV: *hasResult = true; *hasResultType = true; break; + case SpvOpTensorViewSetStrideNV: *hasResult = true; *hasResultType = true; break; case SpvOpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; case SpvOpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; + case SpvOpTensorViewSetClipNV: *hasResult = true; *hasResultType = true; break; + case SpvOpTensorLayoutSetBlockSizeNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeMatrixTransposeNV: *hasResult = true; *hasResultType = true; break; case SpvOpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; case SpvOpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; case SpvOpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; @@ -2334,6 +2907,20 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; case SpvOpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; case SpvOpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; + case SpvOpRawAccessChainNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryGetIntersectionSpherePositionNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryGetIntersectionSphereRadiusNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryGetIntersectionLSSPositionsNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryGetIntersectionLSSRadiiNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryGetIntersectionLSSHitValueNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetSpherePositionNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetSphereRadiusNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetLSSPositionsNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetLSSRadiiNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectIsSphereHitNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectIsLSSHitNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryIsSphereHitNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryIsLSSHitNV: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; @@ -2360,7 +2947,7 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; case SpvOpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpAsmTargetINTEL: *hasResult = true; *hasResultType = false; break; case SpvOpAsmINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; @@ -2573,8 +3160,25 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; case SpvOpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; case SpvOpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpCompositeConstructContinuedINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpConvertFToBF16INTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpConvertBF16ToFINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break; case SpvOpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpArithmeticFenceEXT: *hasResult = true; *hasResultType = true; break; + case SpvOpTaskSequenceCreateINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpTaskSequenceAsyncINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpTaskSequenceGetINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpTaskSequenceReleaseINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpTypeTaskSequenceINTEL: *hasResult = true; *hasResultType = false; break; + case SpvOpSubgroupBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroup2DBlockLoadINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroup2DBlockLoadTransformINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroup2DBlockLoadTransposeINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroup2DBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroup2DBlockStoreINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroupMatrixMultiplyAccumulateINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpBitwiseFunctionINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; case SpvOpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; case SpvOpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; @@ -2583,8 +3187,1953 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; case SpvOpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; case SpvOpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpRoundFToTF32INTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpMaskedGatherINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpMaskedScatterINTEL: *hasResult = false; *hasResultType = false; break; + } +} +inline const char* SpvSourceLanguageToString(SpvSourceLanguage value) { + switch (value) { + case SpvSourceLanguageUnknown: return "Unknown"; + case SpvSourceLanguageESSL: return "ESSL"; + case SpvSourceLanguageGLSL: return "GLSL"; + case SpvSourceLanguageOpenCL_C: return "OpenCL_C"; + case SpvSourceLanguageOpenCL_CPP: return "OpenCL_CPP"; + case SpvSourceLanguageHLSL: return "HLSL"; + case SpvSourceLanguageCPP_for_OpenCL: return "CPP_for_OpenCL"; + case SpvSourceLanguageSYCL: return "SYCL"; + case SpvSourceLanguageHERO_C: return "HERO_C"; + case SpvSourceLanguageNZSL: return "NZSL"; + case SpvSourceLanguageWGSL: return "WGSL"; + case SpvSourceLanguageSlang: return "Slang"; + case SpvSourceLanguageZig: return "Zig"; + case SpvSourceLanguageRust: return "Rust"; + default: return "Unknown"; + } +} + +inline const char* SpvExecutionModelToString(SpvExecutionModel value) { + switch (value) { + case SpvExecutionModelVertex: return "Vertex"; + case SpvExecutionModelTessellationControl: return "TessellationControl"; + case SpvExecutionModelTessellationEvaluation: return "TessellationEvaluation"; + case SpvExecutionModelGeometry: return "Geometry"; + case SpvExecutionModelFragment: return "Fragment"; + case SpvExecutionModelGLCompute: return "GLCompute"; + case SpvExecutionModelKernel: return "Kernel"; + case SpvExecutionModelTaskNV: return "TaskNV"; + case SpvExecutionModelMeshNV: return "MeshNV"; + case SpvExecutionModelRayGenerationKHR: return "RayGenerationKHR"; + case SpvExecutionModelIntersectionKHR: return "IntersectionKHR"; + case SpvExecutionModelAnyHitKHR: return "AnyHitKHR"; + case SpvExecutionModelClosestHitKHR: return "ClosestHitKHR"; + case SpvExecutionModelMissKHR: return "MissKHR"; + case SpvExecutionModelCallableKHR: return "CallableKHR"; + case SpvExecutionModelTaskEXT: return "TaskEXT"; + case SpvExecutionModelMeshEXT: return "MeshEXT"; + default: return "Unknown"; + } +} + +inline const char* SpvAddressingModelToString(SpvAddressingModel value) { + switch (value) { + case SpvAddressingModelLogical: return "Logical"; + case SpvAddressingModelPhysical32: return "Physical32"; + case SpvAddressingModelPhysical64: return "Physical64"; + case SpvAddressingModelPhysicalStorageBuffer64: return "PhysicalStorageBuffer64"; + default: return "Unknown"; + } +} + +inline const char* SpvMemoryModelToString(SpvMemoryModel value) { + switch (value) { + case SpvMemoryModelSimple: return "Simple"; + case SpvMemoryModelGLSL450: return "GLSL450"; + case SpvMemoryModelOpenCL: return "OpenCL"; + case SpvMemoryModelVulkan: return "Vulkan"; + default: return "Unknown"; + } +} + +inline const char* SpvExecutionModeToString(SpvExecutionMode value) { + switch (value) { + case SpvExecutionModeInvocations: return "Invocations"; + case SpvExecutionModeSpacingEqual: return "SpacingEqual"; + case SpvExecutionModeSpacingFractionalEven: return "SpacingFractionalEven"; + case SpvExecutionModeSpacingFractionalOdd: return "SpacingFractionalOdd"; + case SpvExecutionModeVertexOrderCw: return "VertexOrderCw"; + case SpvExecutionModeVertexOrderCcw: return "VertexOrderCcw"; + case SpvExecutionModePixelCenterInteger: return "PixelCenterInteger"; + case SpvExecutionModeOriginUpperLeft: return "OriginUpperLeft"; + case SpvExecutionModeOriginLowerLeft: return "OriginLowerLeft"; + case SpvExecutionModeEarlyFragmentTests: return "EarlyFragmentTests"; + case SpvExecutionModePointMode: return "PointMode"; + case SpvExecutionModeXfb: return "Xfb"; + case SpvExecutionModeDepthReplacing: return "DepthReplacing"; + case SpvExecutionModeDepthGreater: return "DepthGreater"; + case SpvExecutionModeDepthLess: return "DepthLess"; + case SpvExecutionModeDepthUnchanged: return "DepthUnchanged"; + case SpvExecutionModeLocalSize: return "LocalSize"; + case SpvExecutionModeLocalSizeHint: return "LocalSizeHint"; + case SpvExecutionModeInputPoints: return "InputPoints"; + case SpvExecutionModeInputLines: return "InputLines"; + case SpvExecutionModeInputLinesAdjacency: return "InputLinesAdjacency"; + case SpvExecutionModeTriangles: return "Triangles"; + case SpvExecutionModeInputTrianglesAdjacency: return "InputTrianglesAdjacency"; + case SpvExecutionModeQuads: return "Quads"; + case SpvExecutionModeIsolines: return "Isolines"; + case SpvExecutionModeOutputVertices: return "OutputVertices"; + case SpvExecutionModeOutputPoints: return "OutputPoints"; + case SpvExecutionModeOutputLineStrip: return "OutputLineStrip"; + case SpvExecutionModeOutputTriangleStrip: return "OutputTriangleStrip"; + case SpvExecutionModeVecTypeHint: return "VecTypeHint"; + case SpvExecutionModeContractionOff: return "ContractionOff"; + case SpvExecutionModeInitializer: return "Initializer"; + case SpvExecutionModeFinalizer: return "Finalizer"; + case SpvExecutionModeSubgroupSize: return "SubgroupSize"; + case SpvExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup"; + case SpvExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId"; + case SpvExecutionModeLocalSizeId: return "LocalSizeId"; + case SpvExecutionModeLocalSizeHintId: return "LocalSizeHintId"; + case SpvExecutionModeNonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT"; + case SpvExecutionModeNonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT"; + case SpvExecutionModeNonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT"; + case SpvExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlowKHR"; + case SpvExecutionModePostDepthCoverage: return "PostDepthCoverage"; + case SpvExecutionModeDenormPreserve: return "DenormPreserve"; + case SpvExecutionModeDenormFlushToZero: return "DenormFlushToZero"; + case SpvExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; + case SpvExecutionModeRoundingModeRTE: return "RoundingModeRTE"; + case SpvExecutionModeRoundingModeRTZ: return "RoundingModeRTZ"; + case SpvExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD"; + case SpvExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT"; + case SpvExecutionModeCoalescingAMDX: return "CoalescingAMDX"; + case SpvExecutionModeIsApiEntryAMDX: return "IsApiEntryAMDX"; + case SpvExecutionModeMaxNodeRecursionAMDX: return "MaxNodeRecursionAMDX"; + case SpvExecutionModeStaticNumWorkgroupsAMDX: return "StaticNumWorkgroupsAMDX"; + case SpvExecutionModeShaderIndexAMDX: return "ShaderIndexAMDX"; + case SpvExecutionModeMaxNumWorkgroupsAMDX: return "MaxNumWorkgroupsAMDX"; + case SpvExecutionModeStencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD"; + case SpvExecutionModeStencilRefGreaterFrontAMD: return "StencilRefGreaterFrontAMD"; + case SpvExecutionModeStencilRefLessFrontAMD: return "StencilRefLessFrontAMD"; + case SpvExecutionModeStencilRefUnchangedBackAMD: return "StencilRefUnchangedBackAMD"; + case SpvExecutionModeStencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD"; + case SpvExecutionModeStencilRefLessBackAMD: return "StencilRefLessBackAMD"; + case SpvExecutionModeQuadDerivativesKHR: return "QuadDerivativesKHR"; + case SpvExecutionModeRequireFullQuadsKHR: return "RequireFullQuadsKHR"; + case SpvExecutionModeSharesInputWithAMDX: return "SharesInputWithAMDX"; + case SpvExecutionModeOutputLinesEXT: return "OutputLinesEXT"; + case SpvExecutionModeOutputPrimitivesEXT: return "OutputPrimitivesEXT"; + case SpvExecutionModeDerivativeGroupQuadsKHR: return "DerivativeGroupQuadsKHR"; + case SpvExecutionModeDerivativeGroupLinearKHR: return "DerivativeGroupLinearKHR"; + case SpvExecutionModeOutputTrianglesEXT: return "OutputTrianglesEXT"; + case SpvExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT"; + case SpvExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT"; + case SpvExecutionModeSampleInterlockOrderedEXT: return "SampleInterlockOrderedEXT"; + case SpvExecutionModeSampleInterlockUnorderedEXT: return "SampleInterlockUnorderedEXT"; + case SpvExecutionModeShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT"; + case SpvExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT"; + case SpvExecutionModeSharedLocalMemorySizeINTEL: return "SharedLocalMemorySizeINTEL"; + case SpvExecutionModeRoundingModeRTPINTEL: return "RoundingModeRTPINTEL"; + case SpvExecutionModeRoundingModeRTNINTEL: return "RoundingModeRTNINTEL"; + case SpvExecutionModeFloatingPointModeALTINTEL: return "FloatingPointModeALTINTEL"; + case SpvExecutionModeFloatingPointModeIEEEINTEL: return "FloatingPointModeIEEEINTEL"; + case SpvExecutionModeMaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL"; + case SpvExecutionModeMaxWorkDimINTEL: return "MaxWorkDimINTEL"; + case SpvExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL"; + case SpvExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL"; + case SpvExecutionModeSchedulerTargetFmaxMhzINTEL: return "SchedulerTargetFmaxMhzINTEL"; + case SpvExecutionModeMaximallyReconvergesKHR: return "MaximallyReconvergesKHR"; + case SpvExecutionModeFPFastMathDefault: return "FPFastMathDefault"; + case SpvExecutionModeStreamingInterfaceINTEL: return "StreamingInterfaceINTEL"; + case SpvExecutionModeRegisterMapInterfaceINTEL: return "RegisterMapInterfaceINTEL"; + case SpvExecutionModeNamedBarrierCountINTEL: return "NamedBarrierCountINTEL"; + case SpvExecutionModeMaximumRegistersINTEL: return "MaximumRegistersINTEL"; + case SpvExecutionModeMaximumRegistersIdINTEL: return "MaximumRegistersIdINTEL"; + case SpvExecutionModeNamedMaximumRegistersINTEL: return "NamedMaximumRegistersINTEL"; + default: return "Unknown"; + } +} + +inline const char* SpvStorageClassToString(SpvStorageClass value) { + switch (value) { + case SpvStorageClassUniformConstant: return "UniformConstant"; + case SpvStorageClassInput: return "Input"; + case SpvStorageClassUniform: return "Uniform"; + case SpvStorageClassOutput: return "Output"; + case SpvStorageClassWorkgroup: return "Workgroup"; + case SpvStorageClassCrossWorkgroup: return "CrossWorkgroup"; + case SpvStorageClassPrivate: return "Private"; + case SpvStorageClassFunction: return "Function"; + case SpvStorageClassGeneric: return "Generic"; + case SpvStorageClassPushConstant: return "PushConstant"; + case SpvStorageClassAtomicCounter: return "AtomicCounter"; + case SpvStorageClassImage: return "Image"; + case SpvStorageClassStorageBuffer: return "StorageBuffer"; + case SpvStorageClassTileImageEXT: return "TileImageEXT"; + case SpvStorageClassNodePayloadAMDX: return "NodePayloadAMDX"; + case SpvStorageClassCallableDataKHR: return "CallableDataKHR"; + case SpvStorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR"; + case SpvStorageClassRayPayloadKHR: return "RayPayloadKHR"; + case SpvStorageClassHitAttributeKHR: return "HitAttributeKHR"; + case SpvStorageClassIncomingRayPayloadKHR: return "IncomingRayPayloadKHR"; + case SpvStorageClassShaderRecordBufferKHR: return "ShaderRecordBufferKHR"; + case SpvStorageClassPhysicalStorageBuffer: return "PhysicalStorageBuffer"; + case SpvStorageClassHitObjectAttributeNV: return "HitObjectAttributeNV"; + case SpvStorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT"; + case SpvStorageClassCodeSectionINTEL: return "CodeSectionINTEL"; + case SpvStorageClassDeviceOnlyINTEL: return "DeviceOnlyINTEL"; + case SpvStorageClassHostOnlyINTEL: return "HostOnlyINTEL"; + default: return "Unknown"; + } +} + +inline const char* SpvDimToString(SpvDim value) { + switch (value) { + case SpvDim1D: return "1D"; + case SpvDim2D: return "2D"; + case SpvDim3D: return "3D"; + case SpvDimCube: return "Cube"; + case SpvDimRect: return "Rect"; + case SpvDimBuffer: return "Buffer"; + case SpvDimSubpassData: return "SubpassData"; + case SpvDimTileImageDataEXT: return "TileImageDataEXT"; + default: return "Unknown"; + } +} + +inline const char* SpvSamplerAddressingModeToString(SpvSamplerAddressingMode value) { + switch (value) { + case SpvSamplerAddressingModeNone: return "None"; + case SpvSamplerAddressingModeClampToEdge: return "ClampToEdge"; + case SpvSamplerAddressingModeClamp: return "Clamp"; + case SpvSamplerAddressingModeRepeat: return "Repeat"; + case SpvSamplerAddressingModeRepeatMirrored: return "RepeatMirrored"; + default: return "Unknown"; + } +} + +inline const char* SpvSamplerFilterModeToString(SpvSamplerFilterMode value) { + switch (value) { + case SpvSamplerFilterModeNearest: return "Nearest"; + case SpvSamplerFilterModeLinear: return "Linear"; + default: return "Unknown"; + } +} + +inline const char* SpvImageFormatToString(SpvImageFormat value) { + switch (value) { + case SpvImageFormatUnknown: return "Unknown"; + case SpvImageFormatRgba32f: return "Rgba32f"; + case SpvImageFormatRgba16f: return "Rgba16f"; + case SpvImageFormatR32f: return "R32f"; + case SpvImageFormatRgba8: return "Rgba8"; + case SpvImageFormatRgba8Snorm: return "Rgba8Snorm"; + case SpvImageFormatRg32f: return "Rg32f"; + case SpvImageFormatRg16f: return "Rg16f"; + case SpvImageFormatR11fG11fB10f: return "R11fG11fB10f"; + case SpvImageFormatR16f: return "R16f"; + case SpvImageFormatRgba16: return "Rgba16"; + case SpvImageFormatRgb10A2: return "Rgb10A2"; + case SpvImageFormatRg16: return "Rg16"; + case SpvImageFormatRg8: return "Rg8"; + case SpvImageFormatR16: return "R16"; + case SpvImageFormatR8: return "R8"; + case SpvImageFormatRgba16Snorm: return "Rgba16Snorm"; + case SpvImageFormatRg16Snorm: return "Rg16Snorm"; + case SpvImageFormatRg8Snorm: return "Rg8Snorm"; + case SpvImageFormatR16Snorm: return "R16Snorm"; + case SpvImageFormatR8Snorm: return "R8Snorm"; + case SpvImageFormatRgba32i: return "Rgba32i"; + case SpvImageFormatRgba16i: return "Rgba16i"; + case SpvImageFormatRgba8i: return "Rgba8i"; + case SpvImageFormatR32i: return "R32i"; + case SpvImageFormatRg32i: return "Rg32i"; + case SpvImageFormatRg16i: return "Rg16i"; + case SpvImageFormatRg8i: return "Rg8i"; + case SpvImageFormatR16i: return "R16i"; + case SpvImageFormatR8i: return "R8i"; + case SpvImageFormatRgba32ui: return "Rgba32ui"; + case SpvImageFormatRgba16ui: return "Rgba16ui"; + case SpvImageFormatRgba8ui: return "Rgba8ui"; + case SpvImageFormatR32ui: return "R32ui"; + case SpvImageFormatRgb10a2ui: return "Rgb10a2ui"; + case SpvImageFormatRg32ui: return "Rg32ui"; + case SpvImageFormatRg16ui: return "Rg16ui"; + case SpvImageFormatRg8ui: return "Rg8ui"; + case SpvImageFormatR16ui: return "R16ui"; + case SpvImageFormatR8ui: return "R8ui"; + case SpvImageFormatR64ui: return "R64ui"; + case SpvImageFormatR64i: return "R64i"; + default: return "Unknown"; + } +} + +inline const char* SpvImageChannelOrderToString(SpvImageChannelOrder value) { + switch (value) { + case SpvImageChannelOrderR: return "R"; + case SpvImageChannelOrderA: return "A"; + case SpvImageChannelOrderRG: return "RG"; + case SpvImageChannelOrderRA: return "RA"; + case SpvImageChannelOrderRGB: return "RGB"; + case SpvImageChannelOrderRGBA: return "RGBA"; + case SpvImageChannelOrderBGRA: return "BGRA"; + case SpvImageChannelOrderARGB: return "ARGB"; + case SpvImageChannelOrderIntensity: return "Intensity"; + case SpvImageChannelOrderLuminance: return "Luminance"; + case SpvImageChannelOrderRx: return "Rx"; + case SpvImageChannelOrderRGx: return "RGx"; + case SpvImageChannelOrderRGBx: return "RGBx"; + case SpvImageChannelOrderDepth: return "Depth"; + case SpvImageChannelOrderDepthStencil: return "DepthStencil"; + case SpvImageChannelOrdersRGB: return "sRGB"; + case SpvImageChannelOrdersRGBx: return "sRGBx"; + case SpvImageChannelOrdersRGBA: return "sRGBA"; + case SpvImageChannelOrdersBGRA: return "sBGRA"; + case SpvImageChannelOrderABGR: return "ABGR"; + default: return "Unknown"; + } +} + +inline const char* SpvImageChannelDataTypeToString(SpvImageChannelDataType value) { + switch (value) { + case SpvImageChannelDataTypeSnormInt8: return "SnormInt8"; + case SpvImageChannelDataTypeSnormInt16: return "SnormInt16"; + case SpvImageChannelDataTypeUnormInt8: return "UnormInt8"; + case SpvImageChannelDataTypeUnormInt16: return "UnormInt16"; + case SpvImageChannelDataTypeUnormShort565: return "UnormShort565"; + case SpvImageChannelDataTypeUnormShort555: return "UnormShort555"; + case SpvImageChannelDataTypeUnormInt101010: return "UnormInt101010"; + case SpvImageChannelDataTypeSignedInt8: return "SignedInt8"; + case SpvImageChannelDataTypeSignedInt16: return "SignedInt16"; + case SpvImageChannelDataTypeSignedInt32: return "SignedInt32"; + case SpvImageChannelDataTypeUnsignedInt8: return "UnsignedInt8"; + case SpvImageChannelDataTypeUnsignedInt16: return "UnsignedInt16"; + case SpvImageChannelDataTypeUnsignedInt32: return "UnsignedInt32"; + case SpvImageChannelDataTypeHalfFloat: return "HalfFloat"; + case SpvImageChannelDataTypeFloat: return "Float"; + case SpvImageChannelDataTypeUnormInt24: return "UnormInt24"; + case SpvImageChannelDataTypeUnormInt101010_2: return "UnormInt101010_2"; + case SpvImageChannelDataTypeUnormInt10X6EXT: return "UnormInt10X6EXT"; + case SpvImageChannelDataTypeUnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT"; + case SpvImageChannelDataTypeUnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT"; + case SpvImageChannelDataTypeUnormInt2_101010EXT: return "UnormInt2_101010EXT"; + case SpvImageChannelDataTypeUnsignedInt10X6EXT: return "UnsignedInt10X6EXT"; + case SpvImageChannelDataTypeUnsignedInt12X4EXT: return "UnsignedInt12X4EXT"; + case SpvImageChannelDataTypeUnsignedInt14X2EXT: return "UnsignedInt14X2EXT"; + case SpvImageChannelDataTypeUnormInt12X4EXT: return "UnormInt12X4EXT"; + case SpvImageChannelDataTypeUnormInt14X2EXT: return "UnormInt14X2EXT"; + default: return "Unknown"; + } +} + +inline const char* SpvFPRoundingModeToString(SpvFPRoundingMode value) { + switch (value) { + case SpvFPRoundingModeRTE: return "RTE"; + case SpvFPRoundingModeRTZ: return "RTZ"; + case SpvFPRoundingModeRTP: return "RTP"; + case SpvFPRoundingModeRTN: return "RTN"; + default: return "Unknown"; + } +} + +inline const char* SpvLinkageTypeToString(SpvLinkageType value) { + switch (value) { + case SpvLinkageTypeExport: return "Export"; + case SpvLinkageTypeImport: return "Import"; + case SpvLinkageTypeLinkOnceODR: return "LinkOnceODR"; + default: return "Unknown"; + } +} + +inline const char* SpvAccessQualifierToString(SpvAccessQualifier value) { + switch (value) { + case SpvAccessQualifierReadOnly: return "ReadOnly"; + case SpvAccessQualifierWriteOnly: return "WriteOnly"; + case SpvAccessQualifierReadWrite: return "ReadWrite"; + default: return "Unknown"; + } +} + +inline const char* SpvFunctionParameterAttributeToString(SpvFunctionParameterAttribute value) { + switch (value) { + case SpvFunctionParameterAttributeZext: return "Zext"; + case SpvFunctionParameterAttributeSext: return "Sext"; + case SpvFunctionParameterAttributeByVal: return "ByVal"; + case SpvFunctionParameterAttributeSret: return "Sret"; + case SpvFunctionParameterAttributeNoAlias: return "NoAlias"; + case SpvFunctionParameterAttributeNoCapture: return "NoCapture"; + case SpvFunctionParameterAttributeNoWrite: return "NoWrite"; + case SpvFunctionParameterAttributeNoReadWrite: return "NoReadWrite"; + case SpvFunctionParameterAttributeRuntimeAlignedINTEL: return "RuntimeAlignedINTEL"; + default: return "Unknown"; + } +} + +inline const char* SpvDecorationToString(SpvDecoration value) { + switch (value) { + case SpvDecorationRelaxedPrecision: return "RelaxedPrecision"; + case SpvDecorationSpecId: return "SpecId"; + case SpvDecorationBlock: return "Block"; + case SpvDecorationBufferBlock: return "BufferBlock"; + case SpvDecorationRowMajor: return "RowMajor"; + case SpvDecorationColMajor: return "ColMajor"; + case SpvDecorationArrayStride: return "ArrayStride"; + case SpvDecorationMatrixStride: return "MatrixStride"; + case SpvDecorationGLSLShared: return "GLSLShared"; + case SpvDecorationGLSLPacked: return "GLSLPacked"; + case SpvDecorationCPacked: return "CPacked"; + case SpvDecorationBuiltIn: return "BuiltIn"; + case SpvDecorationNoPerspective: return "NoPerspective"; + case SpvDecorationFlat: return "Flat"; + case SpvDecorationPatch: return "Patch"; + case SpvDecorationCentroid: return "Centroid"; + case SpvDecorationSample: return "Sample"; + case SpvDecorationInvariant: return "Invariant"; + case SpvDecorationRestrict: return "Restrict"; + case SpvDecorationAliased: return "Aliased"; + case SpvDecorationVolatile: return "Volatile"; + case SpvDecorationConstant: return "Constant"; + case SpvDecorationCoherent: return "Coherent"; + case SpvDecorationNonWritable: return "NonWritable"; + case SpvDecorationNonReadable: return "NonReadable"; + case SpvDecorationUniform: return "Uniform"; + case SpvDecorationUniformId: return "UniformId"; + case SpvDecorationSaturatedConversion: return "SaturatedConversion"; + case SpvDecorationStream: return "Stream"; + case SpvDecorationLocation: return "Location"; + case SpvDecorationComponent: return "Component"; + case SpvDecorationIndex: return "Index"; + case SpvDecorationBinding: return "Binding"; + case SpvDecorationDescriptorSet: return "DescriptorSet"; + case SpvDecorationOffset: return "Offset"; + case SpvDecorationXfbBuffer: return "XfbBuffer"; + case SpvDecorationXfbStride: return "XfbStride"; + case SpvDecorationFuncParamAttr: return "FuncParamAttr"; + case SpvDecorationFPRoundingMode: return "FPRoundingMode"; + case SpvDecorationFPFastMathMode: return "FPFastMathMode"; + case SpvDecorationLinkageAttributes: return "LinkageAttributes"; + case SpvDecorationNoContraction: return "NoContraction"; + case SpvDecorationInputAttachmentIndex: return "InputAttachmentIndex"; + case SpvDecorationAlignment: return "Alignment"; + case SpvDecorationMaxByteOffset: return "MaxByteOffset"; + case SpvDecorationAlignmentId: return "AlignmentId"; + case SpvDecorationMaxByteOffsetId: return "MaxByteOffsetId"; + case SpvDecorationNoSignedWrap: return "NoSignedWrap"; + case SpvDecorationNoUnsignedWrap: return "NoUnsignedWrap"; + case SpvDecorationWeightTextureQCOM: return "WeightTextureQCOM"; + case SpvDecorationBlockMatchTextureQCOM: return "BlockMatchTextureQCOM"; + case SpvDecorationBlockMatchSamplerQCOM: return "BlockMatchSamplerQCOM"; + case SpvDecorationExplicitInterpAMD: return "ExplicitInterpAMD"; + case SpvDecorationNodeSharesPayloadLimitsWithAMDX: return "NodeSharesPayloadLimitsWithAMDX"; + case SpvDecorationNodeMaxPayloadsAMDX: return "NodeMaxPayloadsAMDX"; + case SpvDecorationTrackFinishWritingAMDX: return "TrackFinishWritingAMDX"; + case SpvDecorationPayloadNodeNameAMDX: return "PayloadNodeNameAMDX"; + case SpvDecorationPayloadNodeBaseIndexAMDX: return "PayloadNodeBaseIndexAMDX"; + case SpvDecorationPayloadNodeSparseArrayAMDX: return "PayloadNodeSparseArrayAMDX"; + case SpvDecorationPayloadNodeArraySizeAMDX: return "PayloadNodeArraySizeAMDX"; + case SpvDecorationPayloadDispatchIndirectAMDX: return "PayloadDispatchIndirectAMDX"; + case SpvDecorationOverrideCoverageNV: return "OverrideCoverageNV"; + case SpvDecorationPassthroughNV: return "PassthroughNV"; + case SpvDecorationViewportRelativeNV: return "ViewportRelativeNV"; + case SpvDecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV"; + case SpvDecorationPerPrimitiveEXT: return "PerPrimitiveEXT"; + case SpvDecorationPerViewNV: return "PerViewNV"; + case SpvDecorationPerTaskNV: return "PerTaskNV"; + case SpvDecorationPerVertexKHR: return "PerVertexKHR"; + case SpvDecorationNonUniform: return "NonUniform"; + case SpvDecorationRestrictPointer: return "RestrictPointer"; + case SpvDecorationAliasedPointer: return "AliasedPointer"; + case SpvDecorationHitObjectShaderRecordBufferNV: return "HitObjectShaderRecordBufferNV"; + case SpvDecorationBindlessSamplerNV: return "BindlessSamplerNV"; + case SpvDecorationBindlessImageNV: return "BindlessImageNV"; + case SpvDecorationBoundSamplerNV: return "BoundSamplerNV"; + case SpvDecorationBoundImageNV: return "BoundImageNV"; + case SpvDecorationSIMTCallINTEL: return "SIMTCallINTEL"; + case SpvDecorationReferencedIndirectlyINTEL: return "ReferencedIndirectlyINTEL"; + case SpvDecorationClobberINTEL: return "ClobberINTEL"; + case SpvDecorationSideEffectsINTEL: return "SideEffectsINTEL"; + case SpvDecorationVectorComputeVariableINTEL: return "VectorComputeVariableINTEL"; + case SpvDecorationFuncParamIOKindINTEL: return "FuncParamIOKindINTEL"; + case SpvDecorationVectorComputeFunctionINTEL: return "VectorComputeFunctionINTEL"; + case SpvDecorationStackCallINTEL: return "StackCallINTEL"; + case SpvDecorationGlobalVariableOffsetINTEL: return "GlobalVariableOffsetINTEL"; + case SpvDecorationCounterBuffer: return "CounterBuffer"; + case SpvDecorationHlslSemanticGOOGLE: return "HlslSemanticGOOGLE"; + case SpvDecorationUserTypeGOOGLE: return "UserTypeGOOGLE"; + case SpvDecorationFunctionRoundingModeINTEL: return "FunctionRoundingModeINTEL"; + case SpvDecorationFunctionDenormModeINTEL: return "FunctionDenormModeINTEL"; + case SpvDecorationRegisterINTEL: return "RegisterINTEL"; + case SpvDecorationMemoryINTEL: return "MemoryINTEL"; + case SpvDecorationNumbanksINTEL: return "NumbanksINTEL"; + case SpvDecorationBankwidthINTEL: return "BankwidthINTEL"; + case SpvDecorationMaxPrivateCopiesINTEL: return "MaxPrivateCopiesINTEL"; + case SpvDecorationSinglepumpINTEL: return "SinglepumpINTEL"; + case SpvDecorationDoublepumpINTEL: return "DoublepumpINTEL"; + case SpvDecorationMaxReplicatesINTEL: return "MaxReplicatesINTEL"; + case SpvDecorationSimpleDualPortINTEL: return "SimpleDualPortINTEL"; + case SpvDecorationMergeINTEL: return "MergeINTEL"; + case SpvDecorationBankBitsINTEL: return "BankBitsINTEL"; + case SpvDecorationForcePow2DepthINTEL: return "ForcePow2DepthINTEL"; + case SpvDecorationStridesizeINTEL: return "StridesizeINTEL"; + case SpvDecorationWordsizeINTEL: return "WordsizeINTEL"; + case SpvDecorationTrueDualPortINTEL: return "TrueDualPortINTEL"; + case SpvDecorationBurstCoalesceINTEL: return "BurstCoalesceINTEL"; + case SpvDecorationCacheSizeINTEL: return "CacheSizeINTEL"; + case SpvDecorationDontStaticallyCoalesceINTEL: return "DontStaticallyCoalesceINTEL"; + case SpvDecorationPrefetchINTEL: return "PrefetchINTEL"; + case SpvDecorationStallEnableINTEL: return "StallEnableINTEL"; + case SpvDecorationFuseLoopsInFunctionINTEL: return "FuseLoopsInFunctionINTEL"; + case SpvDecorationMathOpDSPModeINTEL: return "MathOpDSPModeINTEL"; + case SpvDecorationAliasScopeINTEL: return "AliasScopeINTEL"; + case SpvDecorationNoAliasINTEL: return "NoAliasINTEL"; + case SpvDecorationInitiationIntervalINTEL: return "InitiationIntervalINTEL"; + case SpvDecorationMaxConcurrencyINTEL: return "MaxConcurrencyINTEL"; + case SpvDecorationPipelineEnableINTEL: return "PipelineEnableINTEL"; + case SpvDecorationBufferLocationINTEL: return "BufferLocationINTEL"; + case SpvDecorationIOPipeStorageINTEL: return "IOPipeStorageINTEL"; + case SpvDecorationFunctionFloatingPointModeINTEL: return "FunctionFloatingPointModeINTEL"; + case SpvDecorationSingleElementVectorINTEL: return "SingleElementVectorINTEL"; + case SpvDecorationVectorComputeCallableFunctionINTEL: return "VectorComputeCallableFunctionINTEL"; + case SpvDecorationMediaBlockIOINTEL: return "MediaBlockIOINTEL"; + case SpvDecorationStallFreeINTEL: return "StallFreeINTEL"; + case SpvDecorationFPMaxErrorDecorationINTEL: return "FPMaxErrorDecorationINTEL"; + case SpvDecorationLatencyControlLabelINTEL: return "LatencyControlLabelINTEL"; + case SpvDecorationLatencyControlConstraintINTEL: return "LatencyControlConstraintINTEL"; + case SpvDecorationConduitKernelArgumentINTEL: return "ConduitKernelArgumentINTEL"; + case SpvDecorationRegisterMapKernelArgumentINTEL: return "RegisterMapKernelArgumentINTEL"; + case SpvDecorationMMHostInterfaceAddressWidthINTEL: return "MMHostInterfaceAddressWidthINTEL"; + case SpvDecorationMMHostInterfaceDataWidthINTEL: return "MMHostInterfaceDataWidthINTEL"; + case SpvDecorationMMHostInterfaceLatencyINTEL: return "MMHostInterfaceLatencyINTEL"; + case SpvDecorationMMHostInterfaceReadWriteModeINTEL: return "MMHostInterfaceReadWriteModeINTEL"; + case SpvDecorationMMHostInterfaceMaxBurstINTEL: return "MMHostInterfaceMaxBurstINTEL"; + case SpvDecorationMMHostInterfaceWaitRequestINTEL: return "MMHostInterfaceWaitRequestINTEL"; + case SpvDecorationStableKernelArgumentINTEL: return "StableKernelArgumentINTEL"; + case SpvDecorationHostAccessINTEL: return "HostAccessINTEL"; + case SpvDecorationInitModeINTEL: return "InitModeINTEL"; + case SpvDecorationImplementInRegisterMapINTEL: return "ImplementInRegisterMapINTEL"; + case SpvDecorationCacheControlLoadINTEL: return "CacheControlLoadINTEL"; + case SpvDecorationCacheControlStoreINTEL: return "CacheControlStoreINTEL"; + default: return "Unknown"; + } +} + +inline const char* SpvBuiltInToString(SpvBuiltIn value) { + switch (value) { + case SpvBuiltInPosition: return "Position"; + case SpvBuiltInPointSize: return "PointSize"; + case SpvBuiltInClipDistance: return "ClipDistance"; + case SpvBuiltInCullDistance: return "CullDistance"; + case SpvBuiltInVertexId: return "VertexId"; + case SpvBuiltInInstanceId: return "InstanceId"; + case SpvBuiltInPrimitiveId: return "PrimitiveId"; + case SpvBuiltInInvocationId: return "InvocationId"; + case SpvBuiltInLayer: return "Layer"; + case SpvBuiltInViewportIndex: return "ViewportIndex"; + case SpvBuiltInTessLevelOuter: return "TessLevelOuter"; + case SpvBuiltInTessLevelInner: return "TessLevelInner"; + case SpvBuiltInTessCoord: return "TessCoord"; + case SpvBuiltInPatchVertices: return "PatchVertices"; + case SpvBuiltInFragCoord: return "FragCoord"; + case SpvBuiltInPointCoord: return "PointCoord"; + case SpvBuiltInFrontFacing: return "FrontFacing"; + case SpvBuiltInSampleId: return "SampleId"; + case SpvBuiltInSamplePosition: return "SamplePosition"; + case SpvBuiltInSampleMask: return "SampleMask"; + case SpvBuiltInFragDepth: return "FragDepth"; + case SpvBuiltInHelperInvocation: return "HelperInvocation"; + case SpvBuiltInNumWorkgroups: return "NumWorkgroups"; + case SpvBuiltInWorkgroupSize: return "WorkgroupSize"; + case SpvBuiltInWorkgroupId: return "WorkgroupId"; + case SpvBuiltInLocalInvocationId: return "LocalInvocationId"; + case SpvBuiltInGlobalInvocationId: return "GlobalInvocationId"; + case SpvBuiltInLocalInvocationIndex: return "LocalInvocationIndex"; + case SpvBuiltInWorkDim: return "WorkDim"; + case SpvBuiltInGlobalSize: return "GlobalSize"; + case SpvBuiltInEnqueuedWorkgroupSize: return "EnqueuedWorkgroupSize"; + case SpvBuiltInGlobalOffset: return "GlobalOffset"; + case SpvBuiltInGlobalLinearId: return "GlobalLinearId"; + case SpvBuiltInSubgroupSize: return "SubgroupSize"; + case SpvBuiltInSubgroupMaxSize: return "SubgroupMaxSize"; + case SpvBuiltInNumSubgroups: return "NumSubgroups"; + case SpvBuiltInNumEnqueuedSubgroups: return "NumEnqueuedSubgroups"; + case SpvBuiltInSubgroupId: return "SubgroupId"; + case SpvBuiltInSubgroupLocalInvocationId: return "SubgroupLocalInvocationId"; + case SpvBuiltInVertexIndex: return "VertexIndex"; + case SpvBuiltInInstanceIndex: return "InstanceIndex"; + case SpvBuiltInCoreIDARM: return "CoreIDARM"; + case SpvBuiltInCoreCountARM: return "CoreCountARM"; + case SpvBuiltInCoreMaxIDARM: return "CoreMaxIDARM"; + case SpvBuiltInWarpIDARM: return "WarpIDARM"; + case SpvBuiltInWarpMaxIDARM: return "WarpMaxIDARM"; + case SpvBuiltInSubgroupEqMask: return "SubgroupEqMask"; + case SpvBuiltInSubgroupGeMask: return "SubgroupGeMask"; + case SpvBuiltInSubgroupGtMask: return "SubgroupGtMask"; + case SpvBuiltInSubgroupLeMask: return "SubgroupLeMask"; + case SpvBuiltInSubgroupLtMask: return "SubgroupLtMask"; + case SpvBuiltInBaseVertex: return "BaseVertex"; + case SpvBuiltInBaseInstance: return "BaseInstance"; + case SpvBuiltInDrawIndex: return "DrawIndex"; + case SpvBuiltInPrimitiveShadingRateKHR: return "PrimitiveShadingRateKHR"; + case SpvBuiltInDeviceIndex: return "DeviceIndex"; + case SpvBuiltInViewIndex: return "ViewIndex"; + case SpvBuiltInShadingRateKHR: return "ShadingRateKHR"; + case SpvBuiltInBaryCoordNoPerspAMD: return "BaryCoordNoPerspAMD"; + case SpvBuiltInBaryCoordNoPerspCentroidAMD: return "BaryCoordNoPerspCentroidAMD"; + case SpvBuiltInBaryCoordNoPerspSampleAMD: return "BaryCoordNoPerspSampleAMD"; + case SpvBuiltInBaryCoordSmoothAMD: return "BaryCoordSmoothAMD"; + case SpvBuiltInBaryCoordSmoothCentroidAMD: return "BaryCoordSmoothCentroidAMD"; + case SpvBuiltInBaryCoordSmoothSampleAMD: return "BaryCoordSmoothSampleAMD"; + case SpvBuiltInBaryCoordPullModelAMD: return "BaryCoordPullModelAMD"; + case SpvBuiltInFragStencilRefEXT: return "FragStencilRefEXT"; + case SpvBuiltInRemainingRecursionLevelsAMDX: return "RemainingRecursionLevelsAMDX"; + case SpvBuiltInShaderIndexAMDX: return "ShaderIndexAMDX"; + case SpvBuiltInViewportMaskNV: return "ViewportMaskNV"; + case SpvBuiltInSecondaryPositionNV: return "SecondaryPositionNV"; + case SpvBuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV"; + case SpvBuiltInPositionPerViewNV: return "PositionPerViewNV"; + case SpvBuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; + case SpvBuiltInFullyCoveredEXT: return "FullyCoveredEXT"; + case SpvBuiltInTaskCountNV: return "TaskCountNV"; + case SpvBuiltInPrimitiveCountNV: return "PrimitiveCountNV"; + case SpvBuiltInPrimitiveIndicesNV: return "PrimitiveIndicesNV"; + case SpvBuiltInClipDistancePerViewNV: return "ClipDistancePerViewNV"; + case SpvBuiltInCullDistancePerViewNV: return "CullDistancePerViewNV"; + case SpvBuiltInLayerPerViewNV: return "LayerPerViewNV"; + case SpvBuiltInMeshViewCountNV: return "MeshViewCountNV"; + case SpvBuiltInMeshViewIndicesNV: return "MeshViewIndicesNV"; + case SpvBuiltInBaryCoordKHR: return "BaryCoordKHR"; + case SpvBuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR"; + case SpvBuiltInFragSizeEXT: return "FragSizeEXT"; + case SpvBuiltInFragInvocationCountEXT: return "FragInvocationCountEXT"; + case SpvBuiltInPrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT"; + case SpvBuiltInPrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT"; + case SpvBuiltInPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT"; + case SpvBuiltInCullPrimitiveEXT: return "CullPrimitiveEXT"; + case SpvBuiltInLaunchIdKHR: return "LaunchIdKHR"; + case SpvBuiltInLaunchSizeKHR: return "LaunchSizeKHR"; + case SpvBuiltInWorldRayOriginKHR: return "WorldRayOriginKHR"; + case SpvBuiltInWorldRayDirectionKHR: return "WorldRayDirectionKHR"; + case SpvBuiltInObjectRayOriginKHR: return "ObjectRayOriginKHR"; + case SpvBuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR"; + case SpvBuiltInRayTminKHR: return "RayTminKHR"; + case SpvBuiltInRayTmaxKHR: return "RayTmaxKHR"; + case SpvBuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR"; + case SpvBuiltInObjectToWorldKHR: return "ObjectToWorldKHR"; + case SpvBuiltInWorldToObjectKHR: return "WorldToObjectKHR"; + case SpvBuiltInHitTNV: return "HitTNV"; + case SpvBuiltInHitKindKHR: return "HitKindKHR"; + case SpvBuiltInCurrentRayTimeNV: return "CurrentRayTimeNV"; + case SpvBuiltInHitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR"; + case SpvBuiltInHitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV"; + case SpvBuiltInHitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV"; + case SpvBuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR"; + case SpvBuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR"; + case SpvBuiltInHitIsSphereNV: return "HitIsSphereNV"; + case SpvBuiltInHitIsLSSNV: return "HitIsLSSNV"; + case SpvBuiltInHitSpherePositionNV: return "HitSpherePositionNV"; + case SpvBuiltInWarpsPerSMNV: return "WarpsPerSMNV"; + case SpvBuiltInSMCountNV: return "SMCountNV"; + case SpvBuiltInWarpIDNV: return "WarpIDNV"; + case SpvBuiltInSMIDNV: return "SMIDNV"; + case SpvBuiltInHitLSSPositionsNV: return "HitLSSPositionsNV"; + case SpvBuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV"; + case SpvBuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV"; + case SpvBuiltInHitSphereRadiusNV: return "HitSphereRadiusNV"; + case SpvBuiltInHitLSSRadiiNV: return "HitLSSRadiiNV"; + case SpvBuiltInClusterIDNV: return "ClusterIDNV"; + case SpvBuiltInCullMaskKHR: return "CullMaskKHR"; + default: return "Unknown"; } } + +inline const char* SpvScopeToString(SpvScope value) { + switch (value) { + case SpvScopeCrossDevice: return "CrossDevice"; + case SpvScopeDevice: return "Device"; + case SpvScopeWorkgroup: return "Workgroup"; + case SpvScopeSubgroup: return "Subgroup"; + case SpvScopeInvocation: return "Invocation"; + case SpvScopeQueueFamily: return "QueueFamily"; + case SpvScopeShaderCallKHR: return "ShaderCallKHR"; + default: return "Unknown"; + } +} + +inline const char* SpvGroupOperationToString(SpvGroupOperation value) { + switch (value) { + case SpvGroupOperationReduce: return "Reduce"; + case SpvGroupOperationInclusiveScan: return "InclusiveScan"; + case SpvGroupOperationExclusiveScan: return "ExclusiveScan"; + case SpvGroupOperationClusteredReduce: return "ClusteredReduce"; + case SpvGroupOperationPartitionedReduceNV: return "PartitionedReduceNV"; + case SpvGroupOperationPartitionedInclusiveScanNV: return "PartitionedInclusiveScanNV"; + case SpvGroupOperationPartitionedExclusiveScanNV: return "PartitionedExclusiveScanNV"; + default: return "Unknown"; + } +} + +inline const char* SpvKernelEnqueueFlagsToString(SpvKernelEnqueueFlags value) { + switch (value) { + case SpvKernelEnqueueFlagsNoWait: return "NoWait"; + case SpvKernelEnqueueFlagsWaitKernel: return "WaitKernel"; + case SpvKernelEnqueueFlagsWaitWorkGroup: return "WaitWorkGroup"; + default: return "Unknown"; + } +} + +inline const char* SpvCapabilityToString(SpvCapability value) { + switch (value) { + case SpvCapabilityMatrix: return "Matrix"; + case SpvCapabilityShader: return "Shader"; + case SpvCapabilityGeometry: return "Geometry"; + case SpvCapabilityTessellation: return "Tessellation"; + case SpvCapabilityAddresses: return "Addresses"; + case SpvCapabilityLinkage: return "Linkage"; + case SpvCapabilityKernel: return "Kernel"; + case SpvCapabilityVector16: return "Vector16"; + case SpvCapabilityFloat16Buffer: return "Float16Buffer"; + case SpvCapabilityFloat16: return "Float16"; + case SpvCapabilityFloat64: return "Float64"; + case SpvCapabilityInt64: return "Int64"; + case SpvCapabilityInt64Atomics: return "Int64Atomics"; + case SpvCapabilityImageBasic: return "ImageBasic"; + case SpvCapabilityImageReadWrite: return "ImageReadWrite"; + case SpvCapabilityImageMipmap: return "ImageMipmap"; + case SpvCapabilityPipes: return "Pipes"; + case SpvCapabilityGroups: return "Groups"; + case SpvCapabilityDeviceEnqueue: return "DeviceEnqueue"; + case SpvCapabilityLiteralSampler: return "LiteralSampler"; + case SpvCapabilityAtomicStorage: return "AtomicStorage"; + case SpvCapabilityInt16: return "Int16"; + case SpvCapabilityTessellationPointSize: return "TessellationPointSize"; + case SpvCapabilityGeometryPointSize: return "GeometryPointSize"; + case SpvCapabilityImageGatherExtended: return "ImageGatherExtended"; + case SpvCapabilityStorageImageMultisample: return "StorageImageMultisample"; + case SpvCapabilityUniformBufferArrayDynamicIndexing: return "UniformBufferArrayDynamicIndexing"; + case SpvCapabilitySampledImageArrayDynamicIndexing: return "SampledImageArrayDynamicIndexing"; + case SpvCapabilityStorageBufferArrayDynamicIndexing: return "StorageBufferArrayDynamicIndexing"; + case SpvCapabilityStorageImageArrayDynamicIndexing: return "StorageImageArrayDynamicIndexing"; + case SpvCapabilityClipDistance: return "ClipDistance"; + case SpvCapabilityCullDistance: return "CullDistance"; + case SpvCapabilityImageCubeArray: return "ImageCubeArray"; + case SpvCapabilitySampleRateShading: return "SampleRateShading"; + case SpvCapabilityImageRect: return "ImageRect"; + case SpvCapabilitySampledRect: return "SampledRect"; + case SpvCapabilityGenericPointer: return "GenericPointer"; + case SpvCapabilityInt8: return "Int8"; + case SpvCapabilityInputAttachment: return "InputAttachment"; + case SpvCapabilitySparseResidency: return "SparseResidency"; + case SpvCapabilityMinLod: return "MinLod"; + case SpvCapabilitySampled1D: return "Sampled1D"; + case SpvCapabilityImage1D: return "Image1D"; + case SpvCapabilitySampledCubeArray: return "SampledCubeArray"; + case SpvCapabilitySampledBuffer: return "SampledBuffer"; + case SpvCapabilityImageBuffer: return "ImageBuffer"; + case SpvCapabilityImageMSArray: return "ImageMSArray"; + case SpvCapabilityStorageImageExtendedFormats: return "StorageImageExtendedFormats"; + case SpvCapabilityImageQuery: return "ImageQuery"; + case SpvCapabilityDerivativeControl: return "DerivativeControl"; + case SpvCapabilityInterpolationFunction: return "InterpolationFunction"; + case SpvCapabilityTransformFeedback: return "TransformFeedback"; + case SpvCapabilityGeometryStreams: return "GeometryStreams"; + case SpvCapabilityStorageImageReadWithoutFormat: return "StorageImageReadWithoutFormat"; + case SpvCapabilityStorageImageWriteWithoutFormat: return "StorageImageWriteWithoutFormat"; + case SpvCapabilityMultiViewport: return "MultiViewport"; + case SpvCapabilitySubgroupDispatch: return "SubgroupDispatch"; + case SpvCapabilityNamedBarrier: return "NamedBarrier"; + case SpvCapabilityPipeStorage: return "PipeStorage"; + case SpvCapabilityGroupNonUniform: return "GroupNonUniform"; + case SpvCapabilityGroupNonUniformVote: return "GroupNonUniformVote"; + case SpvCapabilityGroupNonUniformArithmetic: return "GroupNonUniformArithmetic"; + case SpvCapabilityGroupNonUniformBallot: return "GroupNonUniformBallot"; + case SpvCapabilityGroupNonUniformShuffle: return "GroupNonUniformShuffle"; + case SpvCapabilityGroupNonUniformShuffleRelative: return "GroupNonUniformShuffleRelative"; + case SpvCapabilityGroupNonUniformClustered: return "GroupNonUniformClustered"; + case SpvCapabilityGroupNonUniformQuad: return "GroupNonUniformQuad"; + case SpvCapabilityShaderLayer: return "ShaderLayer"; + case SpvCapabilityShaderViewportIndex: return "ShaderViewportIndex"; + case SpvCapabilityUniformDecoration: return "UniformDecoration"; + case SpvCapabilityCoreBuiltinsARM: return "CoreBuiltinsARM"; + case SpvCapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT"; + case SpvCapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; + case SpvCapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; + case SpvCapabilityCooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; + case SpvCapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR"; + case SpvCapabilitySubgroupBallotKHR: return "SubgroupBallotKHR"; + case SpvCapabilityDrawParameters: return "DrawParameters"; + case SpvCapabilityWorkgroupMemoryExplicitLayoutKHR: return "WorkgroupMemoryExplicitLayoutKHR"; + case SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "WorkgroupMemoryExplicitLayout8BitAccessKHR"; + case SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "WorkgroupMemoryExplicitLayout16BitAccessKHR"; + case SpvCapabilitySubgroupVoteKHR: return "SubgroupVoteKHR"; + case SpvCapabilityStorageBuffer16BitAccess: return "StorageBuffer16BitAccess"; + case SpvCapabilityStorageUniform16: return "StorageUniform16"; + case SpvCapabilityStoragePushConstant16: return "StoragePushConstant16"; + case SpvCapabilityStorageInputOutput16: return "StorageInputOutput16"; + case SpvCapabilityDeviceGroup: return "DeviceGroup"; + case SpvCapabilityMultiView: return "MultiView"; + case SpvCapabilityVariablePointersStorageBuffer: return "VariablePointersStorageBuffer"; + case SpvCapabilityVariablePointers: return "VariablePointers"; + case SpvCapabilityAtomicStorageOps: return "AtomicStorageOps"; + case SpvCapabilitySampleMaskPostDepthCoverage: return "SampleMaskPostDepthCoverage"; + case SpvCapabilityStorageBuffer8BitAccess: return "StorageBuffer8BitAccess"; + case SpvCapabilityUniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess"; + case SpvCapabilityStoragePushConstant8: return "StoragePushConstant8"; + case SpvCapabilityDenormPreserve: return "DenormPreserve"; + case SpvCapabilityDenormFlushToZero: return "DenormFlushToZero"; + case SpvCapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; + case SpvCapabilityRoundingModeRTE: return "RoundingModeRTE"; + case SpvCapabilityRoundingModeRTZ: return "RoundingModeRTZ"; + case SpvCapabilityRayQueryProvisionalKHR: return "RayQueryProvisionalKHR"; + case SpvCapabilityRayQueryKHR: return "RayQueryKHR"; + case SpvCapabilityUntypedPointersKHR: return "UntypedPointersKHR"; + case SpvCapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; + case SpvCapabilityRayTracingKHR: return "RayTracingKHR"; + case SpvCapabilityTextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM"; + case SpvCapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM"; + case SpvCapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM"; + case SpvCapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; + case SpvCapabilityFloat16ImageAMD: return "Float16ImageAMD"; + case SpvCapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD"; + case SpvCapabilityFragmentMaskAMD: return "FragmentMaskAMD"; + case SpvCapabilityStencilExportEXT: return "StencilExportEXT"; + case SpvCapabilityImageReadWriteLodAMD: return "ImageReadWriteLodAMD"; + case SpvCapabilityInt64ImageEXT: return "Int64ImageEXT"; + case SpvCapabilityShaderClockKHR: return "ShaderClockKHR"; + case SpvCapabilityShaderEnqueueAMDX: return "ShaderEnqueueAMDX"; + case SpvCapabilityQuadControlKHR: return "QuadControlKHR"; + case SpvCapabilityBFloat16TypeKHR: return "BFloat16TypeKHR"; + case SpvCapabilityBFloat16DotProductKHR: return "BFloat16DotProductKHR"; + case SpvCapabilityBFloat16CooperativeMatrixKHR: return "BFloat16CooperativeMatrixKHR"; + case SpvCapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV"; + case SpvCapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; + case SpvCapabilityShaderViewportIndexLayerEXT: return "ShaderViewportIndexLayerEXT"; + case SpvCapabilityShaderViewportMaskNV: return "ShaderViewportMaskNV"; + case SpvCapabilityShaderStereoViewNV: return "ShaderStereoViewNV"; + case SpvCapabilityPerViewAttributesNV: return "PerViewAttributesNV"; + case SpvCapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT"; + case SpvCapabilityMeshShadingNV: return "MeshShadingNV"; + case SpvCapabilityImageFootprintNV: return "ImageFootprintNV"; + case SpvCapabilityMeshShadingEXT: return "MeshShadingEXT"; + case SpvCapabilityFragmentBarycentricKHR: return "FragmentBarycentricKHR"; + case SpvCapabilityComputeDerivativeGroupQuadsKHR: return "ComputeDerivativeGroupQuadsKHR"; + case SpvCapabilityFragmentDensityEXT: return "FragmentDensityEXT"; + case SpvCapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV"; + case SpvCapabilityShaderNonUniform: return "ShaderNonUniform"; + case SpvCapabilityRuntimeDescriptorArray: return "RuntimeDescriptorArray"; + case SpvCapabilityInputAttachmentArrayDynamicIndexing: return "InputAttachmentArrayDynamicIndexing"; + case SpvCapabilityUniformTexelBufferArrayDynamicIndexing: return "UniformTexelBufferArrayDynamicIndexing"; + case SpvCapabilityStorageTexelBufferArrayDynamicIndexing: return "StorageTexelBufferArrayDynamicIndexing"; + case SpvCapabilityUniformBufferArrayNonUniformIndexing: return "UniformBufferArrayNonUniformIndexing"; + case SpvCapabilitySampledImageArrayNonUniformIndexing: return "SampledImageArrayNonUniformIndexing"; + case SpvCapabilityStorageBufferArrayNonUniformIndexing: return "StorageBufferArrayNonUniformIndexing"; + case SpvCapabilityStorageImageArrayNonUniformIndexing: return "StorageImageArrayNonUniformIndexing"; + case SpvCapabilityInputAttachmentArrayNonUniformIndexing: return "InputAttachmentArrayNonUniformIndexing"; + case SpvCapabilityUniformTexelBufferArrayNonUniformIndexing: return "UniformTexelBufferArrayNonUniformIndexing"; + case SpvCapabilityStorageTexelBufferArrayNonUniformIndexing: return "StorageTexelBufferArrayNonUniformIndexing"; + case SpvCapabilityRayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR"; + case SpvCapabilityRayTracingNV: return "RayTracingNV"; + case SpvCapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV"; + case SpvCapabilityVulkanMemoryModel: return "VulkanMemoryModel"; + case SpvCapabilityVulkanMemoryModelDeviceScope: return "VulkanMemoryModelDeviceScope"; + case SpvCapabilityPhysicalStorageBufferAddresses: return "PhysicalStorageBufferAddresses"; + case SpvCapabilityComputeDerivativeGroupLinearKHR: return "ComputeDerivativeGroupLinearKHR"; + case SpvCapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; + case SpvCapabilityCooperativeMatrixNV: return "CooperativeMatrixNV"; + case SpvCapabilityFragmentShaderSampleInterlockEXT: return "FragmentShaderSampleInterlockEXT"; + case SpvCapabilityFragmentShaderShadingRateInterlockEXT: return "FragmentShaderShadingRateInterlockEXT"; + case SpvCapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV"; + case SpvCapabilityFragmentShaderPixelInterlockEXT: return "FragmentShaderPixelInterlockEXT"; + case SpvCapabilityDemoteToHelperInvocation: return "DemoteToHelperInvocation"; + case SpvCapabilityDisplacementMicromapNV: return "DisplacementMicromapNV"; + case SpvCapabilityRayTracingOpacityMicromapEXT: return "RayTracingOpacityMicromapEXT"; + case SpvCapabilityShaderInvocationReorderNV: return "ShaderInvocationReorderNV"; + case SpvCapabilityBindlessTextureNV: return "BindlessTextureNV"; + case SpvCapabilityRayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR"; + case SpvCapabilityCooperativeVectorNV: return "CooperativeVectorNV"; + case SpvCapabilityAtomicFloat16VectorNV: return "AtomicFloat16VectorNV"; + case SpvCapabilityRayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV"; + case SpvCapabilityRawAccessChainsNV: return "RawAccessChainsNV"; + case SpvCapabilityRayTracingSpheresGeometryNV: return "RayTracingSpheresGeometryNV"; + case SpvCapabilityRayTracingLinearSweptSpheresGeometryNV: return "RayTracingLinearSweptSpheresGeometryNV"; + case SpvCapabilityCooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV"; + case SpvCapabilityCooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV"; + case SpvCapabilityCooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV"; + case SpvCapabilityCooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV"; + case SpvCapabilityCooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV"; + case SpvCapabilityCooperativeVectorTrainingNV: return "CooperativeVectorTrainingNV"; + case SpvCapabilityRayTracingClusterAccelerationStructureNV: return "RayTracingClusterAccelerationStructureNV"; + case SpvCapabilityTensorAddressingNV: return "TensorAddressingNV"; + case SpvCapabilitySubgroupShuffleINTEL: return "SubgroupShuffleINTEL"; + case SpvCapabilitySubgroupBufferBlockIOINTEL: return "SubgroupBufferBlockIOINTEL"; + case SpvCapabilitySubgroupImageBlockIOINTEL: return "SubgroupImageBlockIOINTEL"; + case SpvCapabilitySubgroupImageMediaBlockIOINTEL: return "SubgroupImageMediaBlockIOINTEL"; + case SpvCapabilityRoundToInfinityINTEL: return "RoundToInfinityINTEL"; + case SpvCapabilityFloatingPointModeINTEL: return "FloatingPointModeINTEL"; + case SpvCapabilityIntegerFunctions2INTEL: return "IntegerFunctions2INTEL"; + case SpvCapabilityFunctionPointersINTEL: return "FunctionPointersINTEL"; + case SpvCapabilityIndirectReferencesINTEL: return "IndirectReferencesINTEL"; + case SpvCapabilityAsmINTEL: return "AsmINTEL"; + case SpvCapabilityAtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT"; + case SpvCapabilityAtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT"; + case SpvCapabilityAtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT"; + case SpvCapabilityVectorComputeINTEL: return "VectorComputeINTEL"; + case SpvCapabilityVectorAnyINTEL: return "VectorAnyINTEL"; + case SpvCapabilityExpectAssumeKHR: return "ExpectAssumeKHR"; + case SpvCapabilitySubgroupAvcMotionEstimationINTEL: return "SubgroupAvcMotionEstimationINTEL"; + case SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL: return "SubgroupAvcMotionEstimationIntraINTEL"; + case SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL: return "SubgroupAvcMotionEstimationChromaINTEL"; + case SpvCapabilityVariableLengthArrayINTEL: return "VariableLengthArrayINTEL"; + case SpvCapabilityFunctionFloatControlINTEL: return "FunctionFloatControlINTEL"; + case SpvCapabilityFPGAMemoryAttributesINTEL: return "FPGAMemoryAttributesINTEL"; + case SpvCapabilityFPFastMathModeINTEL: return "FPFastMathModeINTEL"; + case SpvCapabilityArbitraryPrecisionIntegersINTEL: return "ArbitraryPrecisionIntegersINTEL"; + case SpvCapabilityArbitraryPrecisionFloatingPointINTEL: return "ArbitraryPrecisionFloatingPointINTEL"; + case SpvCapabilityUnstructuredLoopControlsINTEL: return "UnstructuredLoopControlsINTEL"; + case SpvCapabilityFPGALoopControlsINTEL: return "FPGALoopControlsINTEL"; + case SpvCapabilityKernelAttributesINTEL: return "KernelAttributesINTEL"; + case SpvCapabilityFPGAKernelAttributesINTEL: return "FPGAKernelAttributesINTEL"; + case SpvCapabilityFPGAMemoryAccessesINTEL: return "FPGAMemoryAccessesINTEL"; + case SpvCapabilityFPGAClusterAttributesINTEL: return "FPGAClusterAttributesINTEL"; + case SpvCapabilityLoopFuseINTEL: return "LoopFuseINTEL"; + case SpvCapabilityFPGADSPControlINTEL: return "FPGADSPControlINTEL"; + case SpvCapabilityMemoryAccessAliasingINTEL: return "MemoryAccessAliasingINTEL"; + case SpvCapabilityFPGAInvocationPipeliningAttributesINTEL: return "FPGAInvocationPipeliningAttributesINTEL"; + case SpvCapabilityFPGABufferLocationINTEL: return "FPGABufferLocationINTEL"; + case SpvCapabilityArbitraryPrecisionFixedPointINTEL: return "ArbitraryPrecisionFixedPointINTEL"; + case SpvCapabilityUSMStorageClassesINTEL: return "USMStorageClassesINTEL"; + case SpvCapabilityRuntimeAlignedAttributeINTEL: return "RuntimeAlignedAttributeINTEL"; + case SpvCapabilityIOPipesINTEL: return "IOPipesINTEL"; + case SpvCapabilityBlockingPipesINTEL: return "BlockingPipesINTEL"; + case SpvCapabilityFPGARegINTEL: return "FPGARegINTEL"; + case SpvCapabilityDotProductInputAll: return "DotProductInputAll"; + case SpvCapabilityDotProductInput4x8Bit: return "DotProductInput4x8Bit"; + case SpvCapabilityDotProductInput4x8BitPacked: return "DotProductInput4x8BitPacked"; + case SpvCapabilityDotProduct: return "DotProduct"; + case SpvCapabilityRayCullMaskKHR: return "RayCullMaskKHR"; + case SpvCapabilityCooperativeMatrixKHR: return "CooperativeMatrixKHR"; + case SpvCapabilityReplicatedCompositesEXT: return "ReplicatedCompositesEXT"; + case SpvCapabilityBitInstructions: return "BitInstructions"; + case SpvCapabilityGroupNonUniformRotateKHR: return "GroupNonUniformRotateKHR"; + case SpvCapabilityFloatControls2: return "FloatControls2"; + case SpvCapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT"; + case SpvCapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT"; + case SpvCapabilityLongCompositesINTEL: return "LongCompositesINTEL"; + case SpvCapabilityOptNoneEXT: return "OptNoneEXT"; + case SpvCapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT"; + case SpvCapabilityDebugInfoModuleINTEL: return "DebugInfoModuleINTEL"; + case SpvCapabilityBFloat16ConversionINTEL: return "BFloat16ConversionINTEL"; + case SpvCapabilitySplitBarrierINTEL: return "SplitBarrierINTEL"; + case SpvCapabilityArithmeticFenceEXT: return "ArithmeticFenceEXT"; + case SpvCapabilityFPGAClusterAttributesV2INTEL: return "FPGAClusterAttributesV2INTEL"; + case SpvCapabilityFPGAKernelAttributesv2INTEL: return "FPGAKernelAttributesv2INTEL"; + case SpvCapabilityTaskSequenceINTEL: return "TaskSequenceINTEL"; + case SpvCapabilityFPMaxErrorINTEL: return "FPMaxErrorINTEL"; + case SpvCapabilityFPGALatencyControlINTEL: return "FPGALatencyControlINTEL"; + case SpvCapabilityFPGAArgumentInterfacesINTEL: return "FPGAArgumentInterfacesINTEL"; + case SpvCapabilityGlobalVariableHostAccessINTEL: return "GlobalVariableHostAccessINTEL"; + case SpvCapabilityGlobalVariableFPGADecorationsINTEL: return "GlobalVariableFPGADecorationsINTEL"; + case SpvCapabilitySubgroupBufferPrefetchINTEL: return "SubgroupBufferPrefetchINTEL"; + case SpvCapabilitySubgroup2DBlockIOINTEL: return "Subgroup2DBlockIOINTEL"; + case SpvCapabilitySubgroup2DBlockTransformINTEL: return "Subgroup2DBlockTransformINTEL"; + case SpvCapabilitySubgroup2DBlockTransposeINTEL: return "Subgroup2DBlockTransposeINTEL"; + case SpvCapabilitySubgroupMatrixMultiplyAccumulateINTEL: return "SubgroupMatrixMultiplyAccumulateINTEL"; + case SpvCapabilityTernaryBitwiseFunctionINTEL: return "TernaryBitwiseFunctionINTEL"; + case SpvCapabilityGroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR"; + case SpvCapabilityTensorFloat32RoundingINTEL: return "TensorFloat32RoundingINTEL"; + case SpvCapabilityMaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL"; + case SpvCapabilityCacheControlsINTEL: return "CacheControlsINTEL"; + case SpvCapabilityRegisterLimitsINTEL: return "RegisterLimitsINTEL"; + default: return "Unknown"; + } +} + +inline const char* SpvRayQueryIntersectionToString(SpvRayQueryIntersection value) { + switch (value) { + case SpvRayQueryIntersectionRayQueryCandidateIntersectionKHR: return "RayQueryCandidateIntersectionKHR"; + case SpvRayQueryIntersectionRayQueryCommittedIntersectionKHR: return "RayQueryCommittedIntersectionKHR"; + default: return "Unknown"; + } +} + +inline const char* SpvRayQueryCommittedIntersectionTypeToString(SpvRayQueryCommittedIntersectionType value) { + switch (value) { + case SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR: return "RayQueryCommittedIntersectionNoneKHR"; + case SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR: return "RayQueryCommittedIntersectionTriangleKHR"; + case SpvRayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR: return "RayQueryCommittedIntersectionGeneratedKHR"; + default: return "Unknown"; + } +} + +inline const char* SpvRayQueryCandidateIntersectionTypeToString(SpvRayQueryCandidateIntersectionType value) { + switch (value) { + case SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR: return "RayQueryCandidateIntersectionTriangleKHR"; + case SpvRayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR: return "RayQueryCandidateIntersectionAABBKHR"; + default: return "Unknown"; + } +} + +inline const char* SpvFPDenormModeToString(SpvFPDenormMode value) { + switch (value) { + case SpvFPDenormModePreserve: return "Preserve"; + case SpvFPDenormModeFlushToZero: return "FlushToZero"; + default: return "Unknown"; + } +} + +inline const char* SpvFPOperationModeToString(SpvFPOperationMode value) { + switch (value) { + case SpvFPOperationModeIEEE: return "IEEE"; + case SpvFPOperationModeALT: return "ALT"; + default: return "Unknown"; + } +} + +inline const char* SpvQuantizationModesToString(SpvQuantizationModes value) { + switch (value) { + case SpvQuantizationModesTRN: return "TRN"; + case SpvQuantizationModesTRN_ZERO: return "TRN_ZERO"; + case SpvQuantizationModesRND: return "RND"; + case SpvQuantizationModesRND_ZERO: return "RND_ZERO"; + case SpvQuantizationModesRND_INF: return "RND_INF"; + case SpvQuantizationModesRND_MIN_INF: return "RND_MIN_INF"; + case SpvQuantizationModesRND_CONV: return "RND_CONV"; + case SpvQuantizationModesRND_CONV_ODD: return "RND_CONV_ODD"; + default: return "Unknown"; + } +} + +inline const char* SpvOverflowModesToString(SpvOverflowModes value) { + switch (value) { + case SpvOverflowModesWRAP: return "WRAP"; + case SpvOverflowModesSAT: return "SAT"; + case SpvOverflowModesSAT_ZERO: return "SAT_ZERO"; + case SpvOverflowModesSAT_SYM: return "SAT_SYM"; + default: return "Unknown"; + } +} + +inline const char* SpvPackedVectorFormatToString(SpvPackedVectorFormat value) { + switch (value) { + case SpvPackedVectorFormatPackedVectorFormat4x8Bit: return "PackedVectorFormat4x8Bit"; + default: return "Unknown"; + } +} + +inline const char* SpvCooperativeMatrixLayoutToString(SpvCooperativeMatrixLayout value) { + switch (value) { + case SpvCooperativeMatrixLayoutRowMajorKHR: return "RowMajorKHR"; + case SpvCooperativeMatrixLayoutColumnMajorKHR: return "ColumnMajorKHR"; + case SpvCooperativeMatrixLayoutRowBlockedInterleavedARM: return "RowBlockedInterleavedARM"; + case SpvCooperativeMatrixLayoutColumnBlockedInterleavedARM: return "ColumnBlockedInterleavedARM"; + default: return "Unknown"; + } +} + +inline const char* SpvCooperativeMatrixUseToString(SpvCooperativeMatrixUse value) { + switch (value) { + case SpvCooperativeMatrixUseMatrixAKHR: return "MatrixAKHR"; + case SpvCooperativeMatrixUseMatrixBKHR: return "MatrixBKHR"; + case SpvCooperativeMatrixUseMatrixAccumulatorKHR: return "MatrixAccumulatorKHR"; + default: return "Unknown"; + } +} + +inline const char* SpvTensorClampModeToString(SpvTensorClampMode value) { + switch (value) { + case SpvTensorClampModeUndefined: return "Undefined"; + case SpvTensorClampModeConstant: return "Constant"; + case SpvTensorClampModeClampToEdge: return "ClampToEdge"; + case SpvTensorClampModeRepeat: return "Repeat"; + case SpvTensorClampModeRepeatMirrored: return "RepeatMirrored"; + default: return "Unknown"; + } +} + +inline const char* SpvInitializationModeQualifierToString(SpvInitializationModeQualifier value) { + switch (value) { + case SpvInitializationModeQualifierInitOnDeviceReprogramINTEL: return "InitOnDeviceReprogramINTEL"; + case SpvInitializationModeQualifierInitOnDeviceResetINTEL: return "InitOnDeviceResetINTEL"; + default: return "Unknown"; + } +} + +inline const char* SpvHostAccessQualifierToString(SpvHostAccessQualifier value) { + switch (value) { + case SpvHostAccessQualifierNoneINTEL: return "NoneINTEL"; + case SpvHostAccessQualifierReadINTEL: return "ReadINTEL"; + case SpvHostAccessQualifierWriteINTEL: return "WriteINTEL"; + case SpvHostAccessQualifierReadWriteINTEL: return "ReadWriteINTEL"; + default: return "Unknown"; + } +} + +inline const char* SpvLoadCacheControlToString(SpvLoadCacheControl value) { + switch (value) { + case SpvLoadCacheControlUncachedINTEL: return "UncachedINTEL"; + case SpvLoadCacheControlCachedINTEL: return "CachedINTEL"; + case SpvLoadCacheControlStreamingINTEL: return "StreamingINTEL"; + case SpvLoadCacheControlInvalidateAfterReadINTEL: return "InvalidateAfterReadINTEL"; + case SpvLoadCacheControlConstCachedINTEL: return "ConstCachedINTEL"; + default: return "Unknown"; + } +} + +inline const char* SpvStoreCacheControlToString(SpvStoreCacheControl value) { + switch (value) { + case SpvStoreCacheControlUncachedINTEL: return "UncachedINTEL"; + case SpvStoreCacheControlWriteThroughINTEL: return "WriteThroughINTEL"; + case SpvStoreCacheControlWriteBackINTEL: return "WriteBackINTEL"; + case SpvStoreCacheControlStreamingINTEL: return "StreamingINTEL"; + default: return "Unknown"; + } +} + +inline const char* SpvNamedMaximumNumberOfRegistersToString(SpvNamedMaximumNumberOfRegisters value) { + switch (value) { + case SpvNamedMaximumNumberOfRegistersAutoINTEL: return "AutoINTEL"; + default: return "Unknown"; + } +} + +inline const char* SpvFPEncodingToString(SpvFPEncoding value) { + switch (value) { + case SpvFPEncodingBFloat16KHR: return "BFloat16KHR"; + default: return "Unknown"; + } +} + +inline const char* SpvCooperativeVectorMatrixLayoutToString(SpvCooperativeVectorMatrixLayout value) { + switch (value) { + case SpvCooperativeVectorMatrixLayoutRowMajorNV: return "RowMajorNV"; + case SpvCooperativeVectorMatrixLayoutColumnMajorNV: return "ColumnMajorNV"; + case SpvCooperativeVectorMatrixLayoutInferencingOptimalNV: return "InferencingOptimalNV"; + case SpvCooperativeVectorMatrixLayoutTrainingOptimalNV: return "TrainingOptimalNV"; + default: return "Unknown"; + } +} + +inline const char* SpvComponentTypeToString(SpvComponentType value) { + switch (value) { + case SpvComponentTypeFloat16NV: return "Float16NV"; + case SpvComponentTypeFloat32NV: return "Float32NV"; + case SpvComponentTypeFloat64NV: return "Float64NV"; + case SpvComponentTypeSignedInt8NV: return "SignedInt8NV"; + case SpvComponentTypeSignedInt16NV: return "SignedInt16NV"; + case SpvComponentTypeSignedInt32NV: return "SignedInt32NV"; + case SpvComponentTypeSignedInt64NV: return "SignedInt64NV"; + case SpvComponentTypeUnsignedInt8NV: return "UnsignedInt8NV"; + case SpvComponentTypeUnsignedInt16NV: return "UnsignedInt16NV"; + case SpvComponentTypeUnsignedInt32NV: return "UnsignedInt32NV"; + case SpvComponentTypeUnsignedInt64NV: return "UnsignedInt64NV"; + case SpvComponentTypeSignedInt8PackedNV: return "SignedInt8PackedNV"; + case SpvComponentTypeUnsignedInt8PackedNV: return "UnsignedInt8PackedNV"; + case SpvComponentTypeFloatE4M3NV: return "FloatE4M3NV"; + case SpvComponentTypeFloatE5M2NV: return "FloatE5M2NV"; + default: return "Unknown"; + } +} + +inline const char* SpvOpToString(SpvOp value) { + switch (value) { + case SpvOpNop: return "OpNop"; + case SpvOpUndef: return "OpUndef"; + case SpvOpSourceContinued: return "OpSourceContinued"; + case SpvOpSource: return "OpSource"; + case SpvOpSourceExtension: return "OpSourceExtension"; + case SpvOpName: return "OpName"; + case SpvOpMemberName: return "OpMemberName"; + case SpvOpString: return "OpString"; + case SpvOpLine: return "OpLine"; + case SpvOpExtension: return "OpExtension"; + case SpvOpExtInstImport: return "OpExtInstImport"; + case SpvOpExtInst: return "OpExtInst"; + case SpvOpMemoryModel: return "OpMemoryModel"; + case SpvOpEntryPoint: return "OpEntryPoint"; + case SpvOpExecutionMode: return "OpExecutionMode"; + case SpvOpCapability: return "OpCapability"; + case SpvOpTypeVoid: return "OpTypeVoid"; + case SpvOpTypeBool: return "OpTypeBool"; + case SpvOpTypeInt: return "OpTypeInt"; + case SpvOpTypeFloat: return "OpTypeFloat"; + case SpvOpTypeVector: return "OpTypeVector"; + case SpvOpTypeMatrix: return "OpTypeMatrix"; + case SpvOpTypeImage: return "OpTypeImage"; + case SpvOpTypeSampler: return "OpTypeSampler"; + case SpvOpTypeSampledImage: return "OpTypeSampledImage"; + case SpvOpTypeArray: return "OpTypeArray"; + case SpvOpTypeRuntimeArray: return "OpTypeRuntimeArray"; + case SpvOpTypeStruct: return "OpTypeStruct"; + case SpvOpTypeOpaque: return "OpTypeOpaque"; + case SpvOpTypePointer: return "OpTypePointer"; + case SpvOpTypeFunction: return "OpTypeFunction"; + case SpvOpTypeEvent: return "OpTypeEvent"; + case SpvOpTypeDeviceEvent: return "OpTypeDeviceEvent"; + case SpvOpTypeReserveId: return "OpTypeReserveId"; + case SpvOpTypeQueue: return "OpTypeQueue"; + case SpvOpTypePipe: return "OpTypePipe"; + case SpvOpTypeForwardPointer: return "OpTypeForwardPointer"; + case SpvOpConstantTrue: return "OpConstantTrue"; + case SpvOpConstantFalse: return "OpConstantFalse"; + case SpvOpConstant: return "OpConstant"; + case SpvOpConstantComposite: return "OpConstantComposite"; + case SpvOpConstantSampler: return "OpConstantSampler"; + case SpvOpConstantNull: return "OpConstantNull"; + case SpvOpSpecConstantTrue: return "OpSpecConstantTrue"; + case SpvOpSpecConstantFalse: return "OpSpecConstantFalse"; + case SpvOpSpecConstant: return "OpSpecConstant"; + case SpvOpSpecConstantComposite: return "OpSpecConstantComposite"; + case SpvOpSpecConstantOp: return "OpSpecConstantOp"; + case SpvOpFunction: return "OpFunction"; + case SpvOpFunctionParameter: return "OpFunctionParameter"; + case SpvOpFunctionEnd: return "OpFunctionEnd"; + case SpvOpFunctionCall: return "OpFunctionCall"; + case SpvOpVariable: return "OpVariable"; + case SpvOpImageTexelPointer: return "OpImageTexelPointer"; + case SpvOpLoad: return "OpLoad"; + case SpvOpStore: return "OpStore"; + case SpvOpCopyMemory: return "OpCopyMemory"; + case SpvOpCopyMemorySized: return "OpCopyMemorySized"; + case SpvOpAccessChain: return "OpAccessChain"; + case SpvOpInBoundsAccessChain: return "OpInBoundsAccessChain"; + case SpvOpPtrAccessChain: return "OpPtrAccessChain"; + case SpvOpArrayLength: return "OpArrayLength"; + case SpvOpGenericPtrMemSemantics: return "OpGenericPtrMemSemantics"; + case SpvOpInBoundsPtrAccessChain: return "OpInBoundsPtrAccessChain"; + case SpvOpDecorate: return "OpDecorate"; + case SpvOpMemberDecorate: return "OpMemberDecorate"; + case SpvOpDecorationGroup: return "OpDecorationGroup"; + case SpvOpGroupDecorate: return "OpGroupDecorate"; + case SpvOpGroupMemberDecorate: return "OpGroupMemberDecorate"; + case SpvOpVectorExtractDynamic: return "OpVectorExtractDynamic"; + case SpvOpVectorInsertDynamic: return "OpVectorInsertDynamic"; + case SpvOpVectorShuffle: return "OpVectorShuffle"; + case SpvOpCompositeConstruct: return "OpCompositeConstruct"; + case SpvOpCompositeExtract: return "OpCompositeExtract"; + case SpvOpCompositeInsert: return "OpCompositeInsert"; + case SpvOpCopyObject: return "OpCopyObject"; + case SpvOpTranspose: return "OpTranspose"; + case SpvOpSampledImage: return "OpSampledImage"; + case SpvOpImageSampleImplicitLod: return "OpImageSampleImplicitLod"; + case SpvOpImageSampleExplicitLod: return "OpImageSampleExplicitLod"; + case SpvOpImageSampleDrefImplicitLod: return "OpImageSampleDrefImplicitLod"; + case SpvOpImageSampleDrefExplicitLod: return "OpImageSampleDrefExplicitLod"; + case SpvOpImageSampleProjImplicitLod: return "OpImageSampleProjImplicitLod"; + case SpvOpImageSampleProjExplicitLod: return "OpImageSampleProjExplicitLod"; + case SpvOpImageSampleProjDrefImplicitLod: return "OpImageSampleProjDrefImplicitLod"; + case SpvOpImageSampleProjDrefExplicitLod: return "OpImageSampleProjDrefExplicitLod"; + case SpvOpImageFetch: return "OpImageFetch"; + case SpvOpImageGather: return "OpImageGather"; + case SpvOpImageDrefGather: return "OpImageDrefGather"; + case SpvOpImageRead: return "OpImageRead"; + case SpvOpImageWrite: return "OpImageWrite"; + case SpvOpImage: return "OpImage"; + case SpvOpImageQueryFormat: return "OpImageQueryFormat"; + case SpvOpImageQueryOrder: return "OpImageQueryOrder"; + case SpvOpImageQuerySizeLod: return "OpImageQuerySizeLod"; + case SpvOpImageQuerySize: return "OpImageQuerySize"; + case SpvOpImageQueryLod: return "OpImageQueryLod"; + case SpvOpImageQueryLevels: return "OpImageQueryLevels"; + case SpvOpImageQuerySamples: return "OpImageQuerySamples"; + case SpvOpConvertFToU: return "OpConvertFToU"; + case SpvOpConvertFToS: return "OpConvertFToS"; + case SpvOpConvertSToF: return "OpConvertSToF"; + case SpvOpConvertUToF: return "OpConvertUToF"; + case SpvOpUConvert: return "OpUConvert"; + case SpvOpSConvert: return "OpSConvert"; + case SpvOpFConvert: return "OpFConvert"; + case SpvOpQuantizeToF16: return "OpQuantizeToF16"; + case SpvOpConvertPtrToU: return "OpConvertPtrToU"; + case SpvOpSatConvertSToU: return "OpSatConvertSToU"; + case SpvOpSatConvertUToS: return "OpSatConvertUToS"; + case SpvOpConvertUToPtr: return "OpConvertUToPtr"; + case SpvOpPtrCastToGeneric: return "OpPtrCastToGeneric"; + case SpvOpGenericCastToPtr: return "OpGenericCastToPtr"; + case SpvOpGenericCastToPtrExplicit: return "OpGenericCastToPtrExplicit"; + case SpvOpBitcast: return "OpBitcast"; + case SpvOpSNegate: return "OpSNegate"; + case SpvOpFNegate: return "OpFNegate"; + case SpvOpIAdd: return "OpIAdd"; + case SpvOpFAdd: return "OpFAdd"; + case SpvOpISub: return "OpISub"; + case SpvOpFSub: return "OpFSub"; + case SpvOpIMul: return "OpIMul"; + case SpvOpFMul: return "OpFMul"; + case SpvOpUDiv: return "OpUDiv"; + case SpvOpSDiv: return "OpSDiv"; + case SpvOpFDiv: return "OpFDiv"; + case SpvOpUMod: return "OpUMod"; + case SpvOpSRem: return "OpSRem"; + case SpvOpSMod: return "OpSMod"; + case SpvOpFRem: return "OpFRem"; + case SpvOpFMod: return "OpFMod"; + case SpvOpVectorTimesScalar: return "OpVectorTimesScalar"; + case SpvOpMatrixTimesScalar: return "OpMatrixTimesScalar"; + case SpvOpVectorTimesMatrix: return "OpVectorTimesMatrix"; + case SpvOpMatrixTimesVector: return "OpMatrixTimesVector"; + case SpvOpMatrixTimesMatrix: return "OpMatrixTimesMatrix"; + case SpvOpOuterProduct: return "OpOuterProduct"; + case SpvOpDot: return "OpDot"; + case SpvOpIAddCarry: return "OpIAddCarry"; + case SpvOpISubBorrow: return "OpISubBorrow"; + case SpvOpUMulExtended: return "OpUMulExtended"; + case SpvOpSMulExtended: return "OpSMulExtended"; + case SpvOpAny: return "OpAny"; + case SpvOpAll: return "OpAll"; + case SpvOpIsNan: return "OpIsNan"; + case SpvOpIsInf: return "OpIsInf"; + case SpvOpIsFinite: return "OpIsFinite"; + case SpvOpIsNormal: return "OpIsNormal"; + case SpvOpSignBitSet: return "OpSignBitSet"; + case SpvOpLessOrGreater: return "OpLessOrGreater"; + case SpvOpOrdered: return "OpOrdered"; + case SpvOpUnordered: return "OpUnordered"; + case SpvOpLogicalEqual: return "OpLogicalEqual"; + case SpvOpLogicalNotEqual: return "OpLogicalNotEqual"; + case SpvOpLogicalOr: return "OpLogicalOr"; + case SpvOpLogicalAnd: return "OpLogicalAnd"; + case SpvOpLogicalNot: return "OpLogicalNot"; + case SpvOpSelect: return "OpSelect"; + case SpvOpIEqual: return "OpIEqual"; + case SpvOpINotEqual: return "OpINotEqual"; + case SpvOpUGreaterThan: return "OpUGreaterThan"; + case SpvOpSGreaterThan: return "OpSGreaterThan"; + case SpvOpUGreaterThanEqual: return "OpUGreaterThanEqual"; + case SpvOpSGreaterThanEqual: return "OpSGreaterThanEqual"; + case SpvOpULessThan: return "OpULessThan"; + case SpvOpSLessThan: return "OpSLessThan"; + case SpvOpULessThanEqual: return "OpULessThanEqual"; + case SpvOpSLessThanEqual: return "OpSLessThanEqual"; + case SpvOpFOrdEqual: return "OpFOrdEqual"; + case SpvOpFUnordEqual: return "OpFUnordEqual"; + case SpvOpFOrdNotEqual: return "OpFOrdNotEqual"; + case SpvOpFUnordNotEqual: return "OpFUnordNotEqual"; + case SpvOpFOrdLessThan: return "OpFOrdLessThan"; + case SpvOpFUnordLessThan: return "OpFUnordLessThan"; + case SpvOpFOrdGreaterThan: return "OpFOrdGreaterThan"; + case SpvOpFUnordGreaterThan: return "OpFUnordGreaterThan"; + case SpvOpFOrdLessThanEqual: return "OpFOrdLessThanEqual"; + case SpvOpFUnordLessThanEqual: return "OpFUnordLessThanEqual"; + case SpvOpFOrdGreaterThanEqual: return "OpFOrdGreaterThanEqual"; + case SpvOpFUnordGreaterThanEqual: return "OpFUnordGreaterThanEqual"; + case SpvOpShiftRightLogical: return "OpShiftRightLogical"; + case SpvOpShiftRightArithmetic: return "OpShiftRightArithmetic"; + case SpvOpShiftLeftLogical: return "OpShiftLeftLogical"; + case SpvOpBitwiseOr: return "OpBitwiseOr"; + case SpvOpBitwiseXor: return "OpBitwiseXor"; + case SpvOpBitwiseAnd: return "OpBitwiseAnd"; + case SpvOpNot: return "OpNot"; + case SpvOpBitFieldInsert: return "OpBitFieldInsert"; + case SpvOpBitFieldSExtract: return "OpBitFieldSExtract"; + case SpvOpBitFieldUExtract: return "OpBitFieldUExtract"; + case SpvOpBitReverse: return "OpBitReverse"; + case SpvOpBitCount: return "OpBitCount"; + case SpvOpDPdx: return "OpDPdx"; + case SpvOpDPdy: return "OpDPdy"; + case SpvOpFwidth: return "OpFwidth"; + case SpvOpDPdxFine: return "OpDPdxFine"; + case SpvOpDPdyFine: return "OpDPdyFine"; + case SpvOpFwidthFine: return "OpFwidthFine"; + case SpvOpDPdxCoarse: return "OpDPdxCoarse"; + case SpvOpDPdyCoarse: return "OpDPdyCoarse"; + case SpvOpFwidthCoarse: return "OpFwidthCoarse"; + case SpvOpEmitVertex: return "OpEmitVertex"; + case SpvOpEndPrimitive: return "OpEndPrimitive"; + case SpvOpEmitStreamVertex: return "OpEmitStreamVertex"; + case SpvOpEndStreamPrimitive: return "OpEndStreamPrimitive"; + case SpvOpControlBarrier: return "OpControlBarrier"; + case SpvOpMemoryBarrier: return "OpMemoryBarrier"; + case SpvOpAtomicLoad: return "OpAtomicLoad"; + case SpvOpAtomicStore: return "OpAtomicStore"; + case SpvOpAtomicExchange: return "OpAtomicExchange"; + case SpvOpAtomicCompareExchange: return "OpAtomicCompareExchange"; + case SpvOpAtomicCompareExchangeWeak: return "OpAtomicCompareExchangeWeak"; + case SpvOpAtomicIIncrement: return "OpAtomicIIncrement"; + case SpvOpAtomicIDecrement: return "OpAtomicIDecrement"; + case SpvOpAtomicIAdd: return "OpAtomicIAdd"; + case SpvOpAtomicISub: return "OpAtomicISub"; + case SpvOpAtomicSMin: return "OpAtomicSMin"; + case SpvOpAtomicUMin: return "OpAtomicUMin"; + case SpvOpAtomicSMax: return "OpAtomicSMax"; + case SpvOpAtomicUMax: return "OpAtomicUMax"; + case SpvOpAtomicAnd: return "OpAtomicAnd"; + case SpvOpAtomicOr: return "OpAtomicOr"; + case SpvOpAtomicXor: return "OpAtomicXor"; + case SpvOpPhi: return "OpPhi"; + case SpvOpLoopMerge: return "OpLoopMerge"; + case SpvOpSelectionMerge: return "OpSelectionMerge"; + case SpvOpLabel: return "OpLabel"; + case SpvOpBranch: return "OpBranch"; + case SpvOpBranchConditional: return "OpBranchConditional"; + case SpvOpSwitch: return "OpSwitch"; + case SpvOpKill: return "OpKill"; + case SpvOpReturn: return "OpReturn"; + case SpvOpReturnValue: return "OpReturnValue"; + case SpvOpUnreachable: return "OpUnreachable"; + case SpvOpLifetimeStart: return "OpLifetimeStart"; + case SpvOpLifetimeStop: return "OpLifetimeStop"; + case SpvOpGroupAsyncCopy: return "OpGroupAsyncCopy"; + case SpvOpGroupWaitEvents: return "OpGroupWaitEvents"; + case SpvOpGroupAll: return "OpGroupAll"; + case SpvOpGroupAny: return "OpGroupAny"; + case SpvOpGroupBroadcast: return "OpGroupBroadcast"; + case SpvOpGroupIAdd: return "OpGroupIAdd"; + case SpvOpGroupFAdd: return "OpGroupFAdd"; + case SpvOpGroupFMin: return "OpGroupFMin"; + case SpvOpGroupUMin: return "OpGroupUMin"; + case SpvOpGroupSMin: return "OpGroupSMin"; + case SpvOpGroupFMax: return "OpGroupFMax"; + case SpvOpGroupUMax: return "OpGroupUMax"; + case SpvOpGroupSMax: return "OpGroupSMax"; + case SpvOpReadPipe: return "OpReadPipe"; + case SpvOpWritePipe: return "OpWritePipe"; + case SpvOpReservedReadPipe: return "OpReservedReadPipe"; + case SpvOpReservedWritePipe: return "OpReservedWritePipe"; + case SpvOpReserveReadPipePackets: return "OpReserveReadPipePackets"; + case SpvOpReserveWritePipePackets: return "OpReserveWritePipePackets"; + case SpvOpCommitReadPipe: return "OpCommitReadPipe"; + case SpvOpCommitWritePipe: return "OpCommitWritePipe"; + case SpvOpIsValidReserveId: return "OpIsValidReserveId"; + case SpvOpGetNumPipePackets: return "OpGetNumPipePackets"; + case SpvOpGetMaxPipePackets: return "OpGetMaxPipePackets"; + case SpvOpGroupReserveReadPipePackets: return "OpGroupReserveReadPipePackets"; + case SpvOpGroupReserveWritePipePackets: return "OpGroupReserveWritePipePackets"; + case SpvOpGroupCommitReadPipe: return "OpGroupCommitReadPipe"; + case SpvOpGroupCommitWritePipe: return "OpGroupCommitWritePipe"; + case SpvOpEnqueueMarker: return "OpEnqueueMarker"; + case SpvOpEnqueueKernel: return "OpEnqueueKernel"; + case SpvOpGetKernelNDrangeSubGroupCount: return "OpGetKernelNDrangeSubGroupCount"; + case SpvOpGetKernelNDrangeMaxSubGroupSize: return "OpGetKernelNDrangeMaxSubGroupSize"; + case SpvOpGetKernelWorkGroupSize: return "OpGetKernelWorkGroupSize"; + case SpvOpGetKernelPreferredWorkGroupSizeMultiple: return "OpGetKernelPreferredWorkGroupSizeMultiple"; + case SpvOpRetainEvent: return "OpRetainEvent"; + case SpvOpReleaseEvent: return "OpReleaseEvent"; + case SpvOpCreateUserEvent: return "OpCreateUserEvent"; + case SpvOpIsValidEvent: return "OpIsValidEvent"; + case SpvOpSetUserEventStatus: return "OpSetUserEventStatus"; + case SpvOpCaptureEventProfilingInfo: return "OpCaptureEventProfilingInfo"; + case SpvOpGetDefaultQueue: return "OpGetDefaultQueue"; + case SpvOpBuildNDRange: return "OpBuildNDRange"; + case SpvOpImageSparseSampleImplicitLod: return "OpImageSparseSampleImplicitLod"; + case SpvOpImageSparseSampleExplicitLod: return "OpImageSparseSampleExplicitLod"; + case SpvOpImageSparseSampleDrefImplicitLod: return "OpImageSparseSampleDrefImplicitLod"; + case SpvOpImageSparseSampleDrefExplicitLod: return "OpImageSparseSampleDrefExplicitLod"; + case SpvOpImageSparseSampleProjImplicitLod: return "OpImageSparseSampleProjImplicitLod"; + case SpvOpImageSparseSampleProjExplicitLod: return "OpImageSparseSampleProjExplicitLod"; + case SpvOpImageSparseSampleProjDrefImplicitLod: return "OpImageSparseSampleProjDrefImplicitLod"; + case SpvOpImageSparseSampleProjDrefExplicitLod: return "OpImageSparseSampleProjDrefExplicitLod"; + case SpvOpImageSparseFetch: return "OpImageSparseFetch"; + case SpvOpImageSparseGather: return "OpImageSparseGather"; + case SpvOpImageSparseDrefGather: return "OpImageSparseDrefGather"; + case SpvOpImageSparseTexelsResident: return "OpImageSparseTexelsResident"; + case SpvOpNoLine: return "OpNoLine"; + case SpvOpAtomicFlagTestAndSet: return "OpAtomicFlagTestAndSet"; + case SpvOpAtomicFlagClear: return "OpAtomicFlagClear"; + case SpvOpImageSparseRead: return "OpImageSparseRead"; + case SpvOpSizeOf: return "OpSizeOf"; + case SpvOpTypePipeStorage: return "OpTypePipeStorage"; + case SpvOpConstantPipeStorage: return "OpConstantPipeStorage"; + case SpvOpCreatePipeFromPipeStorage: return "OpCreatePipeFromPipeStorage"; + case SpvOpGetKernelLocalSizeForSubgroupCount: return "OpGetKernelLocalSizeForSubgroupCount"; + case SpvOpGetKernelMaxNumSubgroups: return "OpGetKernelMaxNumSubgroups"; + case SpvOpTypeNamedBarrier: return "OpTypeNamedBarrier"; + case SpvOpNamedBarrierInitialize: return "OpNamedBarrierInitialize"; + case SpvOpMemoryNamedBarrier: return "OpMemoryNamedBarrier"; + case SpvOpModuleProcessed: return "OpModuleProcessed"; + case SpvOpExecutionModeId: return "OpExecutionModeId"; + case SpvOpDecorateId: return "OpDecorateId"; + case SpvOpGroupNonUniformElect: return "OpGroupNonUniformElect"; + case SpvOpGroupNonUniformAll: return "OpGroupNonUniformAll"; + case SpvOpGroupNonUniformAny: return "OpGroupNonUniformAny"; + case SpvOpGroupNonUniformAllEqual: return "OpGroupNonUniformAllEqual"; + case SpvOpGroupNonUniformBroadcast: return "OpGroupNonUniformBroadcast"; + case SpvOpGroupNonUniformBroadcastFirst: return "OpGroupNonUniformBroadcastFirst"; + case SpvOpGroupNonUniformBallot: return "OpGroupNonUniformBallot"; + case SpvOpGroupNonUniformInverseBallot: return "OpGroupNonUniformInverseBallot"; + case SpvOpGroupNonUniformBallotBitExtract: return "OpGroupNonUniformBallotBitExtract"; + case SpvOpGroupNonUniformBallotBitCount: return "OpGroupNonUniformBallotBitCount"; + case SpvOpGroupNonUniformBallotFindLSB: return "OpGroupNonUniformBallotFindLSB"; + case SpvOpGroupNonUniformBallotFindMSB: return "OpGroupNonUniformBallotFindMSB"; + case SpvOpGroupNonUniformShuffle: return "OpGroupNonUniformShuffle"; + case SpvOpGroupNonUniformShuffleXor: return "OpGroupNonUniformShuffleXor"; + case SpvOpGroupNonUniformShuffleUp: return "OpGroupNonUniformShuffleUp"; + case SpvOpGroupNonUniformShuffleDown: return "OpGroupNonUniformShuffleDown"; + case SpvOpGroupNonUniformIAdd: return "OpGroupNonUniformIAdd"; + case SpvOpGroupNonUniformFAdd: return "OpGroupNonUniformFAdd"; + case SpvOpGroupNonUniformIMul: return "OpGroupNonUniformIMul"; + case SpvOpGroupNonUniformFMul: return "OpGroupNonUniformFMul"; + case SpvOpGroupNonUniformSMin: return "OpGroupNonUniformSMin"; + case SpvOpGroupNonUniformUMin: return "OpGroupNonUniformUMin"; + case SpvOpGroupNonUniformFMin: return "OpGroupNonUniformFMin"; + case SpvOpGroupNonUniformSMax: return "OpGroupNonUniformSMax"; + case SpvOpGroupNonUniformUMax: return "OpGroupNonUniformUMax"; + case SpvOpGroupNonUniformFMax: return "OpGroupNonUniformFMax"; + case SpvOpGroupNonUniformBitwiseAnd: return "OpGroupNonUniformBitwiseAnd"; + case SpvOpGroupNonUniformBitwiseOr: return "OpGroupNonUniformBitwiseOr"; + case SpvOpGroupNonUniformBitwiseXor: return "OpGroupNonUniformBitwiseXor"; + case SpvOpGroupNonUniformLogicalAnd: return "OpGroupNonUniformLogicalAnd"; + case SpvOpGroupNonUniformLogicalOr: return "OpGroupNonUniformLogicalOr"; + case SpvOpGroupNonUniformLogicalXor: return "OpGroupNonUniformLogicalXor"; + case SpvOpGroupNonUniformQuadBroadcast: return "OpGroupNonUniformQuadBroadcast"; + case SpvOpGroupNonUniformQuadSwap: return "OpGroupNonUniformQuadSwap"; + case SpvOpCopyLogical: return "OpCopyLogical"; + case SpvOpPtrEqual: return "OpPtrEqual"; + case SpvOpPtrNotEqual: return "OpPtrNotEqual"; + case SpvOpPtrDiff: return "OpPtrDiff"; + case SpvOpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT"; + case SpvOpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT"; + case SpvOpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT"; + case SpvOpTerminateInvocation: return "OpTerminateInvocation"; + case SpvOpTypeUntypedPointerKHR: return "OpTypeUntypedPointerKHR"; + case SpvOpUntypedVariableKHR: return "OpUntypedVariableKHR"; + case SpvOpUntypedAccessChainKHR: return "OpUntypedAccessChainKHR"; + case SpvOpUntypedInBoundsAccessChainKHR: return "OpUntypedInBoundsAccessChainKHR"; + case SpvOpSubgroupBallotKHR: return "OpSubgroupBallotKHR"; + case SpvOpSubgroupFirstInvocationKHR: return "OpSubgroupFirstInvocationKHR"; + case SpvOpUntypedPtrAccessChainKHR: return "OpUntypedPtrAccessChainKHR"; + case SpvOpUntypedInBoundsPtrAccessChainKHR: return "OpUntypedInBoundsPtrAccessChainKHR"; + case SpvOpUntypedArrayLengthKHR: return "OpUntypedArrayLengthKHR"; + case SpvOpUntypedPrefetchKHR: return "OpUntypedPrefetchKHR"; + case SpvOpSubgroupAllKHR: return "OpSubgroupAllKHR"; + case SpvOpSubgroupAnyKHR: return "OpSubgroupAnyKHR"; + case SpvOpSubgroupAllEqualKHR: return "OpSubgroupAllEqualKHR"; + case SpvOpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR"; + case SpvOpSubgroupReadInvocationKHR: return "OpSubgroupReadInvocationKHR"; + case SpvOpExtInstWithForwardRefsKHR: return "OpExtInstWithForwardRefsKHR"; + case SpvOpTraceRayKHR: return "OpTraceRayKHR"; + case SpvOpExecuteCallableKHR: return "OpExecuteCallableKHR"; + case SpvOpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR"; + case SpvOpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR"; + case SpvOpTerminateRayKHR: return "OpTerminateRayKHR"; + case SpvOpSDot: return "OpSDot"; + case SpvOpUDot: return "OpUDot"; + case SpvOpSUDot: return "OpSUDot"; + case SpvOpSDotAccSat: return "OpSDotAccSat"; + case SpvOpUDotAccSat: return "OpUDotAccSat"; + case SpvOpSUDotAccSat: return "OpSUDotAccSat"; + case SpvOpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR"; + case SpvOpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR"; + case SpvOpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR"; + case SpvOpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR"; + case SpvOpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR"; + case SpvOpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT"; + case SpvOpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT"; + case SpvOpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT"; + case SpvOpTypeRayQueryKHR: return "OpTypeRayQueryKHR"; + case SpvOpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR"; + case SpvOpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR"; + case SpvOpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR"; + case SpvOpRayQueryConfirmIntersectionKHR: return "OpRayQueryConfirmIntersectionKHR"; + case SpvOpRayQueryProceedKHR: return "OpRayQueryProceedKHR"; + case SpvOpRayQueryGetIntersectionTypeKHR: return "OpRayQueryGetIntersectionTypeKHR"; + case SpvOpImageSampleWeightedQCOM: return "OpImageSampleWeightedQCOM"; + case SpvOpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM"; + case SpvOpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM"; + case SpvOpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM"; + case SpvOpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM"; + case SpvOpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM"; + case SpvOpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM"; + case SpvOpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM"; + case SpvOpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD"; + case SpvOpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD"; + case SpvOpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD"; + case SpvOpGroupUMinNonUniformAMD: return "OpGroupUMinNonUniformAMD"; + case SpvOpGroupSMinNonUniformAMD: return "OpGroupSMinNonUniformAMD"; + case SpvOpGroupFMaxNonUniformAMD: return "OpGroupFMaxNonUniformAMD"; + case SpvOpGroupUMaxNonUniformAMD: return "OpGroupUMaxNonUniformAMD"; + case SpvOpGroupSMaxNonUniformAMD: return "OpGroupSMaxNonUniformAMD"; + case SpvOpFragmentMaskFetchAMD: return "OpFragmentMaskFetchAMD"; + case SpvOpFragmentFetchAMD: return "OpFragmentFetchAMD"; + case SpvOpReadClockKHR: return "OpReadClockKHR"; + case SpvOpAllocateNodePayloadsAMDX: return "OpAllocateNodePayloadsAMDX"; + case SpvOpEnqueueNodePayloadsAMDX: return "OpEnqueueNodePayloadsAMDX"; + case SpvOpTypeNodePayloadArrayAMDX: return "OpTypeNodePayloadArrayAMDX"; + case SpvOpFinishWritingNodePayloadAMDX: return "OpFinishWritingNodePayloadAMDX"; + case SpvOpNodePayloadArrayLengthAMDX: return "OpNodePayloadArrayLengthAMDX"; + case SpvOpIsNodePayloadValidAMDX: return "OpIsNodePayloadValidAMDX"; + case SpvOpConstantStringAMDX: return "OpConstantStringAMDX"; + case SpvOpSpecConstantStringAMDX: return "OpSpecConstantStringAMDX"; + case SpvOpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR"; + case SpvOpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR"; + case SpvOpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV"; + case SpvOpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV"; + case SpvOpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV"; + case SpvOpHitObjectGetWorldToObjectNV: return "OpHitObjectGetWorldToObjectNV"; + case SpvOpHitObjectGetObjectToWorldNV: return "OpHitObjectGetObjectToWorldNV"; + case SpvOpHitObjectGetObjectRayDirectionNV: return "OpHitObjectGetObjectRayDirectionNV"; + case SpvOpHitObjectGetObjectRayOriginNV: return "OpHitObjectGetObjectRayOriginNV"; + case SpvOpHitObjectTraceRayMotionNV: return "OpHitObjectTraceRayMotionNV"; + case SpvOpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV"; + case SpvOpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV"; + case SpvOpHitObjectRecordEmptyNV: return "OpHitObjectRecordEmptyNV"; + case SpvOpHitObjectTraceRayNV: return "OpHitObjectTraceRayNV"; + case SpvOpHitObjectRecordHitNV: return "OpHitObjectRecordHitNV"; + case SpvOpHitObjectRecordHitWithIndexNV: return "OpHitObjectRecordHitWithIndexNV"; + case SpvOpHitObjectRecordMissNV: return "OpHitObjectRecordMissNV"; + case SpvOpHitObjectExecuteShaderNV: return "OpHitObjectExecuteShaderNV"; + case SpvOpHitObjectGetCurrentTimeNV: return "OpHitObjectGetCurrentTimeNV"; + case SpvOpHitObjectGetAttributesNV: return "OpHitObjectGetAttributesNV"; + case SpvOpHitObjectGetHitKindNV: return "OpHitObjectGetHitKindNV"; + case SpvOpHitObjectGetPrimitiveIndexNV: return "OpHitObjectGetPrimitiveIndexNV"; + case SpvOpHitObjectGetGeometryIndexNV: return "OpHitObjectGetGeometryIndexNV"; + case SpvOpHitObjectGetInstanceIdNV: return "OpHitObjectGetInstanceIdNV"; + case SpvOpHitObjectGetInstanceCustomIndexNV: return "OpHitObjectGetInstanceCustomIndexNV"; + case SpvOpHitObjectGetWorldRayDirectionNV: return "OpHitObjectGetWorldRayDirectionNV"; + case SpvOpHitObjectGetWorldRayOriginNV: return "OpHitObjectGetWorldRayOriginNV"; + case SpvOpHitObjectGetRayTMaxNV: return "OpHitObjectGetRayTMaxNV"; + case SpvOpHitObjectGetRayTMinNV: return "OpHitObjectGetRayTMinNV"; + case SpvOpHitObjectIsEmptyNV: return "OpHitObjectIsEmptyNV"; + case SpvOpHitObjectIsHitNV: return "OpHitObjectIsHitNV"; + case SpvOpHitObjectIsMissNV: return "OpHitObjectIsMissNV"; + case SpvOpReorderThreadWithHitObjectNV: return "OpReorderThreadWithHitObjectNV"; + case SpvOpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV"; + case SpvOpTypeHitObjectNV: return "OpTypeHitObjectNV"; + case SpvOpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; + case SpvOpTypeCooperativeVectorNV: return "OpTypeCooperativeVectorNV"; + case SpvOpCooperativeVectorMatrixMulNV: return "OpCooperativeVectorMatrixMulNV"; + case SpvOpCooperativeVectorOuterProductAccumulateNV: return "OpCooperativeVectorOuterProductAccumulateNV"; + case SpvOpCooperativeVectorReduceSumAccumulateNV: return "OpCooperativeVectorReduceSumAccumulateNV"; + case SpvOpCooperativeVectorMatrixMulAddNV: return "OpCooperativeVectorMatrixMulAddNV"; + case SpvOpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV"; + case SpvOpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT"; + case SpvOpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT"; + case SpvOpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV"; + case SpvOpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; + case SpvOpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV"; + case SpvOpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV"; + case SpvOpCooperativeVectorLoadNV: return "OpCooperativeVectorLoadNV"; + case SpvOpCooperativeVectorStoreNV: return "OpCooperativeVectorStoreNV"; + case SpvOpReportIntersectionKHR: return "OpReportIntersectionKHR"; + case SpvOpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV"; + case SpvOpTerminateRayNV: return "OpTerminateRayNV"; + case SpvOpTraceNV: return "OpTraceNV"; + case SpvOpTraceMotionNV: return "OpTraceMotionNV"; + case SpvOpTraceRayMotionNV: return "OpTraceRayMotionNV"; + case SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR"; + case SpvOpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR"; + case SpvOpExecuteCallableNV: return "OpExecuteCallableNV"; + case SpvOpRayQueryGetClusterIdNV: return "OpRayQueryGetClusterIdNV"; + case SpvOpHitObjectGetClusterIdNV: return "OpHitObjectGetClusterIdNV"; + case SpvOpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV"; + case SpvOpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV"; + case SpvOpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV"; + case SpvOpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV"; + case SpvOpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV"; + case SpvOpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT"; + case SpvOpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT"; + case SpvOpCooperativeMatrixReduceNV: return "OpCooperativeMatrixReduceNV"; + case SpvOpCooperativeMatrixLoadTensorNV: return "OpCooperativeMatrixLoadTensorNV"; + case SpvOpCooperativeMatrixStoreTensorNV: return "OpCooperativeMatrixStoreTensorNV"; + case SpvOpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV"; + case SpvOpTypeTensorLayoutNV: return "OpTypeTensorLayoutNV"; + case SpvOpTypeTensorViewNV: return "OpTypeTensorViewNV"; + case SpvOpCreateTensorLayoutNV: return "OpCreateTensorLayoutNV"; + case SpvOpTensorLayoutSetDimensionNV: return "OpTensorLayoutSetDimensionNV"; + case SpvOpTensorLayoutSetStrideNV: return "OpTensorLayoutSetStrideNV"; + case SpvOpTensorLayoutSliceNV: return "OpTensorLayoutSliceNV"; + case SpvOpTensorLayoutSetClampValueNV: return "OpTensorLayoutSetClampValueNV"; + case SpvOpCreateTensorViewNV: return "OpCreateTensorViewNV"; + case SpvOpTensorViewSetDimensionNV: return "OpTensorViewSetDimensionNV"; + case SpvOpTensorViewSetStrideNV: return "OpTensorViewSetStrideNV"; + case SpvOpDemoteToHelperInvocation: return "OpDemoteToHelperInvocation"; + case SpvOpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT"; + case SpvOpTensorViewSetClipNV: return "OpTensorViewSetClipNV"; + case SpvOpTensorLayoutSetBlockSizeNV: return "OpTensorLayoutSetBlockSizeNV"; + case SpvOpCooperativeMatrixTransposeNV: return "OpCooperativeMatrixTransposeNV"; + case SpvOpConvertUToImageNV: return "OpConvertUToImageNV"; + case SpvOpConvertUToSamplerNV: return "OpConvertUToSamplerNV"; + case SpvOpConvertImageToUNV: return "OpConvertImageToUNV"; + case SpvOpConvertSamplerToUNV: return "OpConvertSamplerToUNV"; + case SpvOpConvertUToSampledImageNV: return "OpConvertUToSampledImageNV"; + case SpvOpConvertSampledImageToUNV: return "OpConvertSampledImageToUNV"; + case SpvOpSamplerImageAddressingModeNV: return "OpSamplerImageAddressingModeNV"; + case SpvOpRawAccessChainNV: return "OpRawAccessChainNV"; + case SpvOpRayQueryGetIntersectionSpherePositionNV: return "OpRayQueryGetIntersectionSpherePositionNV"; + case SpvOpRayQueryGetIntersectionSphereRadiusNV: return "OpRayQueryGetIntersectionSphereRadiusNV"; + case SpvOpRayQueryGetIntersectionLSSPositionsNV: return "OpRayQueryGetIntersectionLSSPositionsNV"; + case SpvOpRayQueryGetIntersectionLSSRadiiNV: return "OpRayQueryGetIntersectionLSSRadiiNV"; + case SpvOpRayQueryGetIntersectionLSSHitValueNV: return "OpRayQueryGetIntersectionLSSHitValueNV"; + case SpvOpHitObjectGetSpherePositionNV: return "OpHitObjectGetSpherePositionNV"; + case SpvOpHitObjectGetSphereRadiusNV: return "OpHitObjectGetSphereRadiusNV"; + case SpvOpHitObjectGetLSSPositionsNV: return "OpHitObjectGetLSSPositionsNV"; + case SpvOpHitObjectGetLSSRadiiNV: return "OpHitObjectGetLSSRadiiNV"; + case SpvOpHitObjectIsSphereHitNV: return "OpHitObjectIsSphereHitNV"; + case SpvOpHitObjectIsLSSHitNV: return "OpHitObjectIsLSSHitNV"; + case SpvOpRayQueryIsSphereHitNV: return "OpRayQueryIsSphereHitNV"; + case SpvOpRayQueryIsLSSHitNV: return "OpRayQueryIsLSSHitNV"; + case SpvOpSubgroupShuffleINTEL: return "OpSubgroupShuffleINTEL"; + case SpvOpSubgroupShuffleDownINTEL: return "OpSubgroupShuffleDownINTEL"; + case SpvOpSubgroupShuffleUpINTEL: return "OpSubgroupShuffleUpINTEL"; + case SpvOpSubgroupShuffleXorINTEL: return "OpSubgroupShuffleXorINTEL"; + case SpvOpSubgroupBlockReadINTEL: return "OpSubgroupBlockReadINTEL"; + case SpvOpSubgroupBlockWriteINTEL: return "OpSubgroupBlockWriteINTEL"; + case SpvOpSubgroupImageBlockReadINTEL: return "OpSubgroupImageBlockReadINTEL"; + case SpvOpSubgroupImageBlockWriteINTEL: return "OpSubgroupImageBlockWriteINTEL"; + case SpvOpSubgroupImageMediaBlockReadINTEL: return "OpSubgroupImageMediaBlockReadINTEL"; + case SpvOpSubgroupImageMediaBlockWriteINTEL: return "OpSubgroupImageMediaBlockWriteINTEL"; + case SpvOpUCountLeadingZerosINTEL: return "OpUCountLeadingZerosINTEL"; + case SpvOpUCountTrailingZerosINTEL: return "OpUCountTrailingZerosINTEL"; + case SpvOpAbsISubINTEL: return "OpAbsISubINTEL"; + case SpvOpAbsUSubINTEL: return "OpAbsUSubINTEL"; + case SpvOpIAddSatINTEL: return "OpIAddSatINTEL"; + case SpvOpUAddSatINTEL: return "OpUAddSatINTEL"; + case SpvOpIAverageINTEL: return "OpIAverageINTEL"; + case SpvOpUAverageINTEL: return "OpUAverageINTEL"; + case SpvOpIAverageRoundedINTEL: return "OpIAverageRoundedINTEL"; + case SpvOpUAverageRoundedINTEL: return "OpUAverageRoundedINTEL"; + case SpvOpISubSatINTEL: return "OpISubSatINTEL"; + case SpvOpUSubSatINTEL: return "OpUSubSatINTEL"; + case SpvOpIMul32x16INTEL: return "OpIMul32x16INTEL"; + case SpvOpUMul32x16INTEL: return "OpUMul32x16INTEL"; + case SpvOpConstantFunctionPointerINTEL: return "OpConstantFunctionPointerINTEL"; + case SpvOpFunctionPointerCallINTEL: return "OpFunctionPointerCallINTEL"; + case SpvOpAsmTargetINTEL: return "OpAsmTargetINTEL"; + case SpvOpAsmINTEL: return "OpAsmINTEL"; + case SpvOpAsmCallINTEL: return "OpAsmCallINTEL"; + case SpvOpAtomicFMinEXT: return "OpAtomicFMinEXT"; + case SpvOpAtomicFMaxEXT: return "OpAtomicFMaxEXT"; + case SpvOpAssumeTrueKHR: return "OpAssumeTrueKHR"; + case SpvOpExpectKHR: return "OpExpectKHR"; + case SpvOpDecorateString: return "OpDecorateString"; + case SpvOpMemberDecorateString: return "OpMemberDecorateString"; + case SpvOpVmeImageINTEL: return "OpVmeImageINTEL"; + case SpvOpTypeVmeImageINTEL: return "OpTypeVmeImageINTEL"; + case SpvOpTypeAvcImePayloadINTEL: return "OpTypeAvcImePayloadINTEL"; + case SpvOpTypeAvcRefPayloadINTEL: return "OpTypeAvcRefPayloadINTEL"; + case SpvOpTypeAvcSicPayloadINTEL: return "OpTypeAvcSicPayloadINTEL"; + case SpvOpTypeAvcMcePayloadINTEL: return "OpTypeAvcMcePayloadINTEL"; + case SpvOpTypeAvcMceResultINTEL: return "OpTypeAvcMceResultINTEL"; + case SpvOpTypeAvcImeResultINTEL: return "OpTypeAvcImeResultINTEL"; + case SpvOpTypeAvcImeResultSingleReferenceStreamoutINTEL: return "OpTypeAvcImeResultSingleReferenceStreamoutINTEL"; + case SpvOpTypeAvcImeResultDualReferenceStreamoutINTEL: return "OpTypeAvcImeResultDualReferenceStreamoutINTEL"; + case SpvOpTypeAvcImeSingleReferenceStreaminINTEL: return "OpTypeAvcImeSingleReferenceStreaminINTEL"; + case SpvOpTypeAvcImeDualReferenceStreaminINTEL: return "OpTypeAvcImeDualReferenceStreaminINTEL"; + case SpvOpTypeAvcRefResultINTEL: return "OpTypeAvcRefResultINTEL"; + case SpvOpTypeAvcSicResultINTEL: return "OpTypeAvcSicResultINTEL"; + case SpvOpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL"; + case SpvOpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL"; + case SpvOpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL"; + case SpvOpSubgroupAvcMceSetInterShapePenaltyINTEL: return "OpSubgroupAvcMceSetInterShapePenaltyINTEL"; + case SpvOpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL"; + case SpvOpSubgroupAvcMceSetInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceSetInterDirectionPenaltyINTEL"; + case SpvOpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL"; + case SpvOpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: return "OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL"; + case SpvOpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL"; + case SpvOpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL"; + case SpvOpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL"; + case SpvOpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: return "OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL"; + case SpvOpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL"; + case SpvOpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL"; + case SpvOpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL"; + case SpvOpSubgroupAvcMceSetAcOnlyHaarINTEL: return "OpSubgroupAvcMceSetAcOnlyHaarINTEL"; + case SpvOpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL"; + case SpvOpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL"; + case SpvOpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL"; + case SpvOpSubgroupAvcMceConvertToImePayloadINTEL: return "OpSubgroupAvcMceConvertToImePayloadINTEL"; + case SpvOpSubgroupAvcMceConvertToImeResultINTEL: return "OpSubgroupAvcMceConvertToImeResultINTEL"; + case SpvOpSubgroupAvcMceConvertToRefPayloadINTEL: return "OpSubgroupAvcMceConvertToRefPayloadINTEL"; + case SpvOpSubgroupAvcMceConvertToRefResultINTEL: return "OpSubgroupAvcMceConvertToRefResultINTEL"; + case SpvOpSubgroupAvcMceConvertToSicPayloadINTEL: return "OpSubgroupAvcMceConvertToSicPayloadINTEL"; + case SpvOpSubgroupAvcMceConvertToSicResultINTEL: return "OpSubgroupAvcMceConvertToSicResultINTEL"; + case SpvOpSubgroupAvcMceGetMotionVectorsINTEL: return "OpSubgroupAvcMceGetMotionVectorsINTEL"; + case SpvOpSubgroupAvcMceGetInterDistortionsINTEL: return "OpSubgroupAvcMceGetInterDistortionsINTEL"; + case SpvOpSubgroupAvcMceGetBestInterDistortionsINTEL: return "OpSubgroupAvcMceGetBestInterDistortionsINTEL"; + case SpvOpSubgroupAvcMceGetInterMajorShapeINTEL: return "OpSubgroupAvcMceGetInterMajorShapeINTEL"; + case SpvOpSubgroupAvcMceGetInterMinorShapeINTEL: return "OpSubgroupAvcMceGetInterMinorShapeINTEL"; + case SpvOpSubgroupAvcMceGetInterDirectionsINTEL: return "OpSubgroupAvcMceGetInterDirectionsINTEL"; + case SpvOpSubgroupAvcMceGetInterMotionVectorCountINTEL: return "OpSubgroupAvcMceGetInterMotionVectorCountINTEL"; + case SpvOpSubgroupAvcMceGetInterReferenceIdsINTEL: return "OpSubgroupAvcMceGetInterReferenceIdsINTEL"; + case SpvOpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL"; + case SpvOpSubgroupAvcImeInitializeINTEL: return "OpSubgroupAvcImeInitializeINTEL"; + case SpvOpSubgroupAvcImeSetSingleReferenceINTEL: return "OpSubgroupAvcImeSetSingleReferenceINTEL"; + case SpvOpSubgroupAvcImeSetDualReferenceINTEL: return "OpSubgroupAvcImeSetDualReferenceINTEL"; + case SpvOpSubgroupAvcImeRefWindowSizeINTEL: return "OpSubgroupAvcImeRefWindowSizeINTEL"; + case SpvOpSubgroupAvcImeAdjustRefOffsetINTEL: return "OpSubgroupAvcImeAdjustRefOffsetINTEL"; + case SpvOpSubgroupAvcImeConvertToMcePayloadINTEL: return "OpSubgroupAvcImeConvertToMcePayloadINTEL"; + case SpvOpSubgroupAvcImeSetMaxMotionVectorCountINTEL: return "OpSubgroupAvcImeSetMaxMotionVectorCountINTEL"; + case SpvOpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: return "OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL"; + case SpvOpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: return "OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL"; + case SpvOpSubgroupAvcImeSetWeightedSadINTEL: return "OpSubgroupAvcImeSetWeightedSadINTEL"; + case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL"; + case SpvOpSubgroupAvcImeEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceINTEL"; + case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL"; + case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL"; + case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL"; + case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL"; + case SpvOpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL"; + case SpvOpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL"; + case SpvOpSubgroupAvcImeConvertToMceResultINTEL: return "OpSubgroupAvcImeConvertToMceResultINTEL"; + case SpvOpSubgroupAvcImeGetSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeGetSingleReferenceStreaminINTEL"; + case SpvOpSubgroupAvcImeGetDualReferenceStreaminINTEL: return "OpSubgroupAvcImeGetDualReferenceStreaminINTEL"; + case SpvOpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL"; + case SpvOpSubgroupAvcImeStripDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripDualReferenceStreamoutINTEL"; + case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL"; + case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL"; + case SpvOpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL"; + case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL"; + case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL"; + case SpvOpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL"; + case SpvOpSubgroupAvcImeGetBorderReachedINTEL: return "OpSubgroupAvcImeGetBorderReachedINTEL"; + case SpvOpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: return "OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL"; + case SpvOpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: return "OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL"; + case SpvOpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL"; + case SpvOpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL"; + case SpvOpSubgroupAvcFmeInitializeINTEL: return "OpSubgroupAvcFmeInitializeINTEL"; + case SpvOpSubgroupAvcBmeInitializeINTEL: return "OpSubgroupAvcBmeInitializeINTEL"; + case SpvOpSubgroupAvcRefConvertToMcePayloadINTEL: return "OpSubgroupAvcRefConvertToMcePayloadINTEL"; + case SpvOpSubgroupAvcRefSetBidirectionalMixDisableINTEL: return "OpSubgroupAvcRefSetBidirectionalMixDisableINTEL"; + case SpvOpSubgroupAvcRefSetBilinearFilterEnableINTEL: return "OpSubgroupAvcRefSetBilinearFilterEnableINTEL"; + case SpvOpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL"; + case SpvOpSubgroupAvcRefEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithDualReferenceINTEL"; + case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL"; + case SpvOpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL"; + case SpvOpSubgroupAvcRefConvertToMceResultINTEL: return "OpSubgroupAvcRefConvertToMceResultINTEL"; + case SpvOpSubgroupAvcSicInitializeINTEL: return "OpSubgroupAvcSicInitializeINTEL"; + case SpvOpSubgroupAvcSicConfigureSkcINTEL: return "OpSubgroupAvcSicConfigureSkcINTEL"; + case SpvOpSubgroupAvcSicConfigureIpeLumaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaINTEL"; + case SpvOpSubgroupAvcSicConfigureIpeLumaChromaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaChromaINTEL"; + case SpvOpSubgroupAvcSicGetMotionVectorMaskINTEL: return "OpSubgroupAvcSicGetMotionVectorMaskINTEL"; + case SpvOpSubgroupAvcSicConvertToMcePayloadINTEL: return "OpSubgroupAvcSicConvertToMcePayloadINTEL"; + case SpvOpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL"; + case SpvOpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL"; + case SpvOpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL"; + case SpvOpSubgroupAvcSicSetBilinearFilterEnableINTEL: return "OpSubgroupAvcSicSetBilinearFilterEnableINTEL"; + case SpvOpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: return "OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL"; + case SpvOpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: return "OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL"; + case SpvOpSubgroupAvcSicEvaluateIpeINTEL: return "OpSubgroupAvcSicEvaluateIpeINTEL"; + case SpvOpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL"; + case SpvOpSubgroupAvcSicEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithDualReferenceINTEL"; + case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL"; + case SpvOpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL"; + case SpvOpSubgroupAvcSicConvertToMceResultINTEL: return "OpSubgroupAvcSicConvertToMceResultINTEL"; + case SpvOpSubgroupAvcSicGetIpeLumaShapeINTEL: return "OpSubgroupAvcSicGetIpeLumaShapeINTEL"; + case SpvOpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL"; + case SpvOpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL"; + case SpvOpSubgroupAvcSicGetPackedIpeLumaModesINTEL: return "OpSubgroupAvcSicGetPackedIpeLumaModesINTEL"; + case SpvOpSubgroupAvcSicGetIpeChromaModeINTEL: return "OpSubgroupAvcSicGetIpeChromaModeINTEL"; + case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL"; + case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL"; + case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: return "OpSubgroupAvcSicGetInterRawSadsINTEL"; + case SpvOpVariableLengthArrayINTEL: return "OpVariableLengthArrayINTEL"; + case SpvOpSaveMemoryINTEL: return "OpSaveMemoryINTEL"; + case SpvOpRestoreMemoryINTEL: return "OpRestoreMemoryINTEL"; + case SpvOpArbitraryFloatSinCosPiINTEL: return "OpArbitraryFloatSinCosPiINTEL"; + case SpvOpArbitraryFloatCastINTEL: return "OpArbitraryFloatCastINTEL"; + case SpvOpArbitraryFloatCastFromIntINTEL: return "OpArbitraryFloatCastFromIntINTEL"; + case SpvOpArbitraryFloatCastToIntINTEL: return "OpArbitraryFloatCastToIntINTEL"; + case SpvOpArbitraryFloatAddINTEL: return "OpArbitraryFloatAddINTEL"; + case SpvOpArbitraryFloatSubINTEL: return "OpArbitraryFloatSubINTEL"; + case SpvOpArbitraryFloatMulINTEL: return "OpArbitraryFloatMulINTEL"; + case SpvOpArbitraryFloatDivINTEL: return "OpArbitraryFloatDivINTEL"; + case SpvOpArbitraryFloatGTINTEL: return "OpArbitraryFloatGTINTEL"; + case SpvOpArbitraryFloatGEINTEL: return "OpArbitraryFloatGEINTEL"; + case SpvOpArbitraryFloatLTINTEL: return "OpArbitraryFloatLTINTEL"; + case SpvOpArbitraryFloatLEINTEL: return "OpArbitraryFloatLEINTEL"; + case SpvOpArbitraryFloatEQINTEL: return "OpArbitraryFloatEQINTEL"; + case SpvOpArbitraryFloatRecipINTEL: return "OpArbitraryFloatRecipINTEL"; + case SpvOpArbitraryFloatRSqrtINTEL: return "OpArbitraryFloatRSqrtINTEL"; + case SpvOpArbitraryFloatCbrtINTEL: return "OpArbitraryFloatCbrtINTEL"; + case SpvOpArbitraryFloatHypotINTEL: return "OpArbitraryFloatHypotINTEL"; + case SpvOpArbitraryFloatSqrtINTEL: return "OpArbitraryFloatSqrtINTEL"; + case SpvOpArbitraryFloatLogINTEL: return "OpArbitraryFloatLogINTEL"; + case SpvOpArbitraryFloatLog2INTEL: return "OpArbitraryFloatLog2INTEL"; + case SpvOpArbitraryFloatLog10INTEL: return "OpArbitraryFloatLog10INTEL"; + case SpvOpArbitraryFloatLog1pINTEL: return "OpArbitraryFloatLog1pINTEL"; + case SpvOpArbitraryFloatExpINTEL: return "OpArbitraryFloatExpINTEL"; + case SpvOpArbitraryFloatExp2INTEL: return "OpArbitraryFloatExp2INTEL"; + case SpvOpArbitraryFloatExp10INTEL: return "OpArbitraryFloatExp10INTEL"; + case SpvOpArbitraryFloatExpm1INTEL: return "OpArbitraryFloatExpm1INTEL"; + case SpvOpArbitraryFloatSinINTEL: return "OpArbitraryFloatSinINTEL"; + case SpvOpArbitraryFloatCosINTEL: return "OpArbitraryFloatCosINTEL"; + case SpvOpArbitraryFloatSinCosINTEL: return "OpArbitraryFloatSinCosINTEL"; + case SpvOpArbitraryFloatSinPiINTEL: return "OpArbitraryFloatSinPiINTEL"; + case SpvOpArbitraryFloatCosPiINTEL: return "OpArbitraryFloatCosPiINTEL"; + case SpvOpArbitraryFloatASinINTEL: return "OpArbitraryFloatASinINTEL"; + case SpvOpArbitraryFloatASinPiINTEL: return "OpArbitraryFloatASinPiINTEL"; + case SpvOpArbitraryFloatACosINTEL: return "OpArbitraryFloatACosINTEL"; + case SpvOpArbitraryFloatACosPiINTEL: return "OpArbitraryFloatACosPiINTEL"; + case SpvOpArbitraryFloatATanINTEL: return "OpArbitraryFloatATanINTEL"; + case SpvOpArbitraryFloatATanPiINTEL: return "OpArbitraryFloatATanPiINTEL"; + case SpvOpArbitraryFloatATan2INTEL: return "OpArbitraryFloatATan2INTEL"; + case SpvOpArbitraryFloatPowINTEL: return "OpArbitraryFloatPowINTEL"; + case SpvOpArbitraryFloatPowRINTEL: return "OpArbitraryFloatPowRINTEL"; + case SpvOpArbitraryFloatPowNINTEL: return "OpArbitraryFloatPowNINTEL"; + case SpvOpLoopControlINTEL: return "OpLoopControlINTEL"; + case SpvOpAliasDomainDeclINTEL: return "OpAliasDomainDeclINTEL"; + case SpvOpAliasScopeDeclINTEL: return "OpAliasScopeDeclINTEL"; + case SpvOpAliasScopeListDeclINTEL: return "OpAliasScopeListDeclINTEL"; + case SpvOpFixedSqrtINTEL: return "OpFixedSqrtINTEL"; + case SpvOpFixedRecipINTEL: return "OpFixedRecipINTEL"; + case SpvOpFixedRsqrtINTEL: return "OpFixedRsqrtINTEL"; + case SpvOpFixedSinINTEL: return "OpFixedSinINTEL"; + case SpvOpFixedCosINTEL: return "OpFixedCosINTEL"; + case SpvOpFixedSinCosINTEL: return "OpFixedSinCosINTEL"; + case SpvOpFixedSinPiINTEL: return "OpFixedSinPiINTEL"; + case SpvOpFixedCosPiINTEL: return "OpFixedCosPiINTEL"; + case SpvOpFixedSinCosPiINTEL: return "OpFixedSinCosPiINTEL"; + case SpvOpFixedLogINTEL: return "OpFixedLogINTEL"; + case SpvOpFixedExpINTEL: return "OpFixedExpINTEL"; + case SpvOpPtrCastToCrossWorkgroupINTEL: return "OpPtrCastToCrossWorkgroupINTEL"; + case SpvOpCrossWorkgroupCastToPtrINTEL: return "OpCrossWorkgroupCastToPtrINTEL"; + case SpvOpReadPipeBlockingINTEL: return "OpReadPipeBlockingINTEL"; + case SpvOpWritePipeBlockingINTEL: return "OpWritePipeBlockingINTEL"; + case SpvOpFPGARegINTEL: return "OpFPGARegINTEL"; + case SpvOpRayQueryGetRayTMinKHR: return "OpRayQueryGetRayTMinKHR"; + case SpvOpRayQueryGetRayFlagsKHR: return "OpRayQueryGetRayFlagsKHR"; + case SpvOpRayQueryGetIntersectionTKHR: return "OpRayQueryGetIntersectionTKHR"; + case SpvOpRayQueryGetIntersectionInstanceCustomIndexKHR: return "OpRayQueryGetIntersectionInstanceCustomIndexKHR"; + case SpvOpRayQueryGetIntersectionInstanceIdKHR: return "OpRayQueryGetIntersectionInstanceIdKHR"; + case SpvOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR"; + case SpvOpRayQueryGetIntersectionGeometryIndexKHR: return "OpRayQueryGetIntersectionGeometryIndexKHR"; + case SpvOpRayQueryGetIntersectionPrimitiveIndexKHR: return "OpRayQueryGetIntersectionPrimitiveIndexKHR"; + case SpvOpRayQueryGetIntersectionBarycentricsKHR: return "OpRayQueryGetIntersectionBarycentricsKHR"; + case SpvOpRayQueryGetIntersectionFrontFaceKHR: return "OpRayQueryGetIntersectionFrontFaceKHR"; + case SpvOpRayQueryGetIntersectionCandidateAABBOpaqueKHR: return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR"; + case SpvOpRayQueryGetIntersectionObjectRayDirectionKHR: return "OpRayQueryGetIntersectionObjectRayDirectionKHR"; + case SpvOpRayQueryGetIntersectionObjectRayOriginKHR: return "OpRayQueryGetIntersectionObjectRayOriginKHR"; + case SpvOpRayQueryGetWorldRayDirectionKHR: return "OpRayQueryGetWorldRayDirectionKHR"; + case SpvOpRayQueryGetWorldRayOriginKHR: return "OpRayQueryGetWorldRayOriginKHR"; + case SpvOpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR"; + case SpvOpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR"; + case SpvOpAtomicFAddEXT: return "OpAtomicFAddEXT"; + case SpvOpTypeBufferSurfaceINTEL: return "OpTypeBufferSurfaceINTEL"; + case SpvOpTypeStructContinuedINTEL: return "OpTypeStructContinuedINTEL"; + case SpvOpConstantCompositeContinuedINTEL: return "OpConstantCompositeContinuedINTEL"; + case SpvOpSpecConstantCompositeContinuedINTEL: return "OpSpecConstantCompositeContinuedINTEL"; + case SpvOpCompositeConstructContinuedINTEL: return "OpCompositeConstructContinuedINTEL"; + case SpvOpConvertFToBF16INTEL: return "OpConvertFToBF16INTEL"; + case SpvOpConvertBF16ToFINTEL: return "OpConvertBF16ToFINTEL"; + case SpvOpControlBarrierArriveINTEL: return "OpControlBarrierArriveINTEL"; + case SpvOpControlBarrierWaitINTEL: return "OpControlBarrierWaitINTEL"; + case SpvOpArithmeticFenceEXT: return "OpArithmeticFenceEXT"; + case SpvOpTaskSequenceCreateINTEL: return "OpTaskSequenceCreateINTEL"; + case SpvOpTaskSequenceAsyncINTEL: return "OpTaskSequenceAsyncINTEL"; + case SpvOpTaskSequenceGetINTEL: return "OpTaskSequenceGetINTEL"; + case SpvOpTaskSequenceReleaseINTEL: return "OpTaskSequenceReleaseINTEL"; + case SpvOpTypeTaskSequenceINTEL: return "OpTypeTaskSequenceINTEL"; + case SpvOpSubgroupBlockPrefetchINTEL: return "OpSubgroupBlockPrefetchINTEL"; + case SpvOpSubgroup2DBlockLoadINTEL: return "OpSubgroup2DBlockLoadINTEL"; + case SpvOpSubgroup2DBlockLoadTransformINTEL: return "OpSubgroup2DBlockLoadTransformINTEL"; + case SpvOpSubgroup2DBlockLoadTransposeINTEL: return "OpSubgroup2DBlockLoadTransposeINTEL"; + case SpvOpSubgroup2DBlockPrefetchINTEL: return "OpSubgroup2DBlockPrefetchINTEL"; + case SpvOpSubgroup2DBlockStoreINTEL: return "OpSubgroup2DBlockStoreINTEL"; + case SpvOpSubgroupMatrixMultiplyAccumulateINTEL: return "OpSubgroupMatrixMultiplyAccumulateINTEL"; + case SpvOpBitwiseFunctionINTEL: return "OpBitwiseFunctionINTEL"; + case SpvOpGroupIMulKHR: return "OpGroupIMulKHR"; + case SpvOpGroupFMulKHR: return "OpGroupFMulKHR"; + case SpvOpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR"; + case SpvOpGroupBitwiseOrKHR: return "OpGroupBitwiseOrKHR"; + case SpvOpGroupBitwiseXorKHR: return "OpGroupBitwiseXorKHR"; + case SpvOpGroupLogicalAndKHR: return "OpGroupLogicalAndKHR"; + case SpvOpGroupLogicalOrKHR: return "OpGroupLogicalOrKHR"; + case SpvOpGroupLogicalXorKHR: return "OpGroupLogicalXorKHR"; + case SpvOpRoundFToTF32INTEL: return "OpRoundFToTF32INTEL"; + case SpvOpMaskedGatherINTEL: return "OpMaskedGatherINTEL"; + case SpvOpMaskedScatterINTEL: return "OpMaskedScatterINTEL"; + default: return "Unknown"; + } +} + #endif /* SPV_ENABLE_UTILITY_CODE */ #endif diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv.hpp b/libs/bgfx/3rdparty/spirv-cross/spirv.hpp index 5047b9b..5fbba32 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv.hpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv.hpp @@ -12,7 +12,7 @@ // // 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/ +// 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, @@ -69,6 +69,12 @@ enum SourceLanguage { SourceLanguageHLSL = 5, SourceLanguageCPP_for_OpenCL = 6, SourceLanguageSYCL = 7, + SourceLanguageHERO_C = 8, + SourceLanguageNZSL = 9, + SourceLanguageWGSL = 10, + SourceLanguageSlang = 11, + SourceLanguageZig = 12, + SourceLanguageRust = 13, SourceLanguageMax = 0x7fffffff, }; @@ -156,6 +162,9 @@ enum ExecutionMode { ExecutionModeSubgroupsPerWorkgroupId = 37, ExecutionModeLocalSizeId = 38, ExecutionModeLocalSizeHintId = 39, + ExecutionModeNonCoherentColorAttachmentReadEXT = 4169, + ExecutionModeNonCoherentDepthAttachmentReadEXT = 4170, + ExecutionModeNonCoherentStencilAttachmentReadEXT = 4171, ExecutionModeSubgroupUniformControlFlowKHR = 4421, ExecutionModePostDepthCoverage = 4446, ExecutionModeDenormPreserve = 4459, @@ -165,17 +174,28 @@ enum ExecutionMode { 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, @@ -195,7 +215,14 @@ enum ExecutionMode { ExecutionModeNoGlobalOffsetINTEL = 5895, ExecutionModeNumSIMDWorkitemsINTEL = 5896, ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, + ExecutionModeMaximallyReconvergesKHR = 6023, + ExecutionModeFPFastMathDefault = 6028, + ExecutionModeStreamingInterfaceINTEL = 6154, + ExecutionModeRegisterMapInterfaceINTEL = 6160, ExecutionModeNamedBarrierCountINTEL = 6417, + ExecutionModeMaximumRegistersINTEL = 6461, + ExecutionModeMaximumRegistersIdINTEL = 6462, + ExecutionModeNamedMaximumRegistersINTEL = 6463, ExecutionModeMax = 0x7fffffff, }; @@ -213,6 +240,8 @@ enum StorageClass { StorageClassAtomicCounter = 10, StorageClassImage = 11, StorageClassStorageBuffer = 12, + StorageClassTileImageEXT = 4172, + StorageClassNodePayloadAMDX = 5068, StorageClassCallableDataKHR = 5328, StorageClassCallableDataNV = 5328, StorageClassIncomingCallableDataKHR = 5329, @@ -227,6 +256,7 @@ enum StorageClass { StorageClassShaderRecordBufferNV = 5343, StorageClassPhysicalStorageBuffer = 5349, StorageClassPhysicalStorageBufferEXT = 5349, + StorageClassHitObjectAttributeNV = 5385, StorageClassTaskPayloadWorkgroupEXT = 5402, StorageClassCodeSectionINTEL = 5605, StorageClassDeviceOnlyINTEL = 5936, @@ -242,6 +272,7 @@ enum Dim { DimRect = 4, DimBuffer = 5, DimSubpassData = 6, + DimTileImageDataEXT = 4173, DimMax = 0x7fffffff, }; @@ -348,6 +379,15 @@ enum ImageChannelDataType { ImageChannelDataTypeFloat = 14, ImageChannelDataTypeUnormInt24 = 15, ImageChannelDataTypeUnormInt101010_2 = 16, + ImageChannelDataTypeUnormInt10X6EXT = 17, + ImageChannelDataTypeUnsignedIntRaw10EXT = 19, + ImageChannelDataTypeUnsignedIntRaw12EXT = 20, + ImageChannelDataTypeUnormInt2_101010EXT = 21, + ImageChannelDataTypeUnsignedInt10X6EXT = 22, + ImageChannelDataTypeUnsignedInt12X4EXT = 23, + ImageChannelDataTypeUnsignedInt14X2EXT = 24, + ImageChannelDataTypeUnormInt12X4EXT = 25, + ImageChannelDataTypeUnormInt14X2EXT = 26, ImageChannelDataTypeMax = 0x7fffffff, }; @@ -405,8 +445,11 @@ enum FPFastMathModeShift { FPFastMathModeNSZShift = 2, FPFastMathModeAllowRecipShift = 3, FPFastMathModeFastShift = 4, + FPFastMathModeAllowContractShift = 16, FPFastMathModeAllowContractFastINTELShift = 16, + FPFastMathModeAllowReassocShift = 17, FPFastMathModeAllowReassocINTELShift = 17, + FPFastMathModeAllowTransformShift = 18, FPFastMathModeMax = 0x7fffffff, }; @@ -417,8 +460,11 @@ enum FPFastMathModeMask { FPFastMathModeNSZMask = 0x00000004, FPFastMathModeAllowRecipMask = 0x00000008, FPFastMathModeFastMask = 0x00000010, + FPFastMathModeAllowContractMask = 0x00010000, FPFastMathModeAllowContractFastINTELMask = 0x00010000, + FPFastMathModeAllowReassocMask = 0x00020000, FPFastMathModeAllowReassocINTELMask = 0x00020000, + FPFastMathModeAllowTransformMask = 0x00040000, }; enum FPRoundingMode { @@ -452,6 +498,7 @@ enum FunctionParameterAttribute { FunctionParameterAttributeNoCapture = 5, FunctionParameterAttributeNoWrite = 6, FunctionParameterAttributeNoReadWrite = 7, + FunctionParameterAttributeRuntimeAlignedINTEL = 5940, FunctionParameterAttributeMax = 0x7fffffff, }; @@ -509,6 +556,14 @@ enum Decoration { 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, @@ -525,6 +580,7 @@ enum Decoration { DecorationRestrictPointerEXT = 5355, DecorationAliasedPointer = 5356, DecorationAliasedPointerEXT = 5356, + DecorationHitObjectShaderRecordBufferNV = 5386, DecorationBindlessSamplerNV = 5398, DecorationBindlessImageNV = 5399, DecorationBoundSamplerNV = 5400, @@ -557,20 +613,45 @@ enum Decoration { 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, }; @@ -616,6 +697,11 @@ enum BuiltIn { BuiltInSubgroupLocalInvocationId = 41, BuiltInVertexIndex = 42, BuiltInInstanceIndex = 43, + BuiltInCoreIDARM = 4160, + BuiltInCoreCountARM = 4161, + BuiltInCoreMaxIDARM = 4162, + BuiltInWarpIDARM = 4163, + BuiltInWarpMaxIDARM = 4164, BuiltInSubgroupEqMask = 4416, BuiltInSubgroupEqMaskKHR = 4416, BuiltInSubgroupGeMask = 4417, @@ -641,6 +727,8 @@ enum BuiltIn { BuiltInBaryCoordSmoothSampleAMD = 4997, BuiltInBaryCoordPullModelAMD = 4998, BuiltInFragStencilRefEXT = 5014, + BuiltInRemainingRecursionLevelsAMDX = 5021, + BuiltInShaderIndexAMDX = 5073, BuiltInViewportMaskNV = 5253, BuiltInSecondaryPositionNV = 5257, BuiltInSecondaryViewportMaskNV = 5258, @@ -693,13 +781,25 @@ enum BuiltIn { 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, }; @@ -734,6 +834,8 @@ enum LoopControlShift { LoopControlMaxInterleavingINTELShift = 21, LoopControlSpeculatedIterationsINTELShift = 22, LoopControlNoFusionINTELShift = 23, + LoopControlLoopCountINTELShift = 24, + LoopControlMaxReinvocationDelayINTELShift = 25, LoopControlMax = 0x7fffffff, }; @@ -756,6 +858,8 @@ enum LoopControlMask { LoopControlMaxInterleavingINTELMask = 0x00200000, LoopControlSpeculatedIterationsINTELMask = 0x00400000, LoopControlNoFusionINTELMask = 0x00800000, + LoopControlLoopCountINTELMask = 0x01000000, + LoopControlMaxReinvocationDelayINTELMask = 0x02000000, }; enum FunctionControlShift { @@ -763,6 +867,7 @@ enum FunctionControlShift { FunctionControlDontInlineShift = 1, FunctionControlPureShift = 2, FunctionControlConstShift = 3, + FunctionControlOptNoneEXTShift = 16, FunctionControlOptNoneINTELShift = 16, FunctionControlMax = 0x7fffffff, }; @@ -773,6 +878,7 @@ enum FunctionControlMask { FunctionControlDontInlineMask = 0x00000002, FunctionControlPureMask = 0x00000004, FunctionControlConstMask = 0x00000008, + FunctionControlOptNoneEXTMask = 0x00010000, FunctionControlOptNoneINTELMask = 0x00010000, }; @@ -959,6 +1065,11 @@ enum Capability { CapabilityShaderLayer = 69, CapabilityShaderViewportIndex = 70, CapabilityUniformDecoration = 71, + CapabilityCoreBuiltinsARM = 4165, + CapabilityTileImageColorReadAccessEXT = 4166, + CapabilityTileImageDepthReadAccessEXT = 4167, + CapabilityTileImageStencilReadAccessEXT = 4168, + CapabilityCooperativeMatrixLayoutsARM = 4201, CapabilityFragmentShadingRateKHR = 4422, CapabilitySubgroupBallotKHR = 4423, CapabilityDrawParameters = 4427, @@ -988,6 +1099,7 @@ enum Capability { CapabilityRoundingModeRTZ = 4468, CapabilityRayQueryProvisionalKHR = 4471, CapabilityRayQueryKHR = 4472, + CapabilityUntypedPointersKHR = 4473, CapabilityRayTraversalPrimitiveCullingKHR = 4478, CapabilityRayTracingKHR = 4479, CapabilityTextureSampleWeightedQCOM = 4484, @@ -1001,6 +1113,11 @@ enum Capability { CapabilityImageReadWriteLodAMD = 5015, CapabilityInt64ImageEXT = 5016, CapabilityShaderClockKHR = 5055, + CapabilityShaderEnqueueAMDX = 5067, + CapabilityQuadControlKHR = 5087, + CapabilityBFloat16TypeKHR = 5116, + CapabilityBFloat16DotProductKHR = 5117, + CapabilityBFloat16CooperativeMatrixKHR = 5118, CapabilitySampleMaskOverrideCoverageNV = 5249, CapabilityGeometryShaderPassthroughNV = 5251, CapabilityShaderViewportIndexLayerEXT = 5254, @@ -1014,6 +1131,7 @@ enum Capability { CapabilityMeshShadingEXT = 5283, CapabilityFragmentBarycentricKHR = 5284, CapabilityFragmentBarycentricNV = 5284, + CapabilityComputeDerivativeGroupQuadsKHR = 5288, CapabilityComputeDerivativeGroupQuadsNV = 5288, CapabilityFragmentDensityEXT = 5291, CapabilityShadingRateNV = 5291, @@ -1042,6 +1160,7 @@ enum Capability { CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, + CapabilityRayTracingPositionFetchKHR = 5336, CapabilityRayTracingNV = 5340, CapabilityRayTracingMotionBlurNV = 5341, CapabilityVulkanMemoryModel = 5345, @@ -1050,6 +1169,7 @@ enum Capability { CapabilityVulkanMemoryModelDeviceScopeKHR = 5346, CapabilityPhysicalStorageBufferAddresses = 5347, CapabilityPhysicalStorageBufferAddressesEXT = 5347, + CapabilityComputeDerivativeGroupLinearKHR = 5350, CapabilityComputeDerivativeGroupLinearNV = 5350, CapabilityRayTracingProvisionalKHR = 5353, CapabilityCooperativeMatrixNV = 5357, @@ -1059,7 +1179,25 @@ enum Capability { 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, @@ -1092,10 +1230,13 @@ enum Capability { 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, @@ -1108,16 +1249,40 @@ enum Capability { CapabilityDotProduct = 6019, CapabilityDotProductKHR = 6019, CapabilityRayCullMaskKHR = 6020, + CapabilityCooperativeMatrixKHR = 6022, + CapabilityReplicatedCompositesEXT = 6024, CapabilityBitInstructions = 6025, CapabilityGroupNonUniformRotateKHR = 6026, + CapabilityFloatControls2 = 6029, CapabilityAtomicFloat32AddEXT = 6033, CapabilityAtomicFloat64AddEXT = 6034, - CapabilityLongConstantCompositeINTEL = 6089, + CapabilityLongCompositesINTEL = 6089, + CapabilityOptNoneEXT = 6094, CapabilityOptNoneINTEL = 6094, CapabilityAtomicFloat16AddEXT = 6095, CapabilityDebugInfoModuleINTEL = 6114, + CapabilityBFloat16ConversionINTEL = 6115, CapabilitySplitBarrierINTEL = 6141, + CapabilityArithmeticFenceEXT = 6144, + CapabilityFPGAClusterAttributesV2INTEL = 6150, + CapabilityFPGAKernelAttributesv2INTEL = 6161, + CapabilityTaskSequenceINTEL = 6162, + CapabilityFPMaxErrorINTEL = 6169, + CapabilityFPGALatencyControlINTEL = 6171, + CapabilityFPGAArgumentInterfacesINTEL = 6174, + CapabilityGlobalVariableHostAccessINTEL = 6187, + CapabilityGlobalVariableFPGADecorationsINTEL = 6189, + CapabilitySubgroupBufferPrefetchINTEL = 6220, + CapabilitySubgroup2DBlockIOINTEL = 6228, + CapabilitySubgroup2DBlockTransformINTEL = 6229, + CapabilitySubgroup2DBlockTransposeINTEL = 6230, + CapabilitySubgroupMatrixMultiplyAccumulateINTEL = 6236, + CapabilityTernaryBitwiseFunctionINTEL = 6241, CapabilityGroupUniformArithmeticKHR = 6400, + CapabilityTensorFloat32RoundingINTEL = 6425, + CapabilityMaskedGatherScatterINTEL = 6427, + CapabilityCacheControlsINTEL = 6441, + CapabilityRegisterLimitsINTEL = 6460, CapabilityMax = 0x7fffffff, }; @@ -1130,8 +1295,10 @@ enum RayFlagsShift { RayFlagsCullFrontFacingTrianglesKHRShift = 5, RayFlagsCullOpaqueKHRShift = 6, RayFlagsCullNoOpaqueKHRShift = 7, + RayFlagsSkipBuiltinPrimitivesNVShift = 8, RayFlagsSkipTrianglesKHRShift = 8, RayFlagsSkipAABBsKHRShift = 9, + RayFlagsForceOpacityMicromap2StateEXTShift = 10, RayFlagsMax = 0x7fffffff, }; @@ -1145,8 +1312,10 @@ enum RayFlagsMask { RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, RayFlagsCullOpaqueKHRMask = 0x00000040, RayFlagsCullNoOpaqueKHRMask = 0x00000080, + RayFlagsSkipBuiltinPrimitivesNVMask = 0x00000100, RayFlagsSkipTrianglesKHRMask = 0x00000100, RayFlagsSkipAABBsKHRMask = 0x00000200, + RayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400, }; enum RayQueryIntersection { @@ -1222,6 +1391,190 @@ enum PackedVectorFormat { PackedVectorFormatMax = 0x7fffffff, }; +enum CooperativeMatrixOperandsShift { + CooperativeMatrixOperandsMatrixASignedComponentsKHRShift = 0, + CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift = 1, + CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift = 2, + CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift = 3, + CooperativeMatrixOperandsSaturatingAccumulationKHRShift = 4, + CooperativeMatrixOperandsMax = 0x7fffffff, +}; + +enum CooperativeMatrixOperandsMask { + 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 { + 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 { + 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 MatrixMultiplyAccumulateOperandsShift { + MatrixMultiplyAccumulateOperandsMatrixASignedComponentsINTELShift = 0, + MatrixMultiplyAccumulateOperandsMatrixBSignedComponentsINTELShift = 1, + MatrixMultiplyAccumulateOperandsMatrixCBFloat16INTELShift = 2, + MatrixMultiplyAccumulateOperandsMatrixResultBFloat16INTELShift = 3, + MatrixMultiplyAccumulateOperandsMatrixAPackedInt8INTELShift = 4, + MatrixMultiplyAccumulateOperandsMatrixBPackedInt8INTELShift = 5, + MatrixMultiplyAccumulateOperandsMatrixAPackedInt4INTELShift = 6, + MatrixMultiplyAccumulateOperandsMatrixBPackedInt4INTELShift = 7, + MatrixMultiplyAccumulateOperandsMatrixATF32INTELShift = 8, + MatrixMultiplyAccumulateOperandsMatrixBTF32INTELShift = 9, + MatrixMultiplyAccumulateOperandsMatrixAPackedFloat16INTELShift = 10, + MatrixMultiplyAccumulateOperandsMatrixBPackedFloat16INTELShift = 11, + MatrixMultiplyAccumulateOperandsMatrixAPackedBFloat16INTELShift = 12, + MatrixMultiplyAccumulateOperandsMatrixBPackedBFloat16INTELShift = 13, + MatrixMultiplyAccumulateOperandsMax = 0x7fffffff, +}; + +enum MatrixMultiplyAccumulateOperandsMask { + MatrixMultiplyAccumulateOperandsMaskNone = 0, + MatrixMultiplyAccumulateOperandsMatrixASignedComponentsINTELMask = 0x00000001, + MatrixMultiplyAccumulateOperandsMatrixBSignedComponentsINTELMask = 0x00000002, + MatrixMultiplyAccumulateOperandsMatrixCBFloat16INTELMask = 0x00000004, + MatrixMultiplyAccumulateOperandsMatrixResultBFloat16INTELMask = 0x00000008, + MatrixMultiplyAccumulateOperandsMatrixAPackedInt8INTELMask = 0x00000010, + MatrixMultiplyAccumulateOperandsMatrixBPackedInt8INTELMask = 0x00000020, + MatrixMultiplyAccumulateOperandsMatrixAPackedInt4INTELMask = 0x00000040, + MatrixMultiplyAccumulateOperandsMatrixBPackedInt4INTELMask = 0x00000080, + MatrixMultiplyAccumulateOperandsMatrixATF32INTELMask = 0x00000100, + MatrixMultiplyAccumulateOperandsMatrixBTF32INTELMask = 0x00000200, + MatrixMultiplyAccumulateOperandsMatrixAPackedFloat16INTELMask = 0x00000400, + MatrixMultiplyAccumulateOperandsMatrixBPackedFloat16INTELMask = 0x00000800, + MatrixMultiplyAccumulateOperandsMatrixAPackedBFloat16INTELMask = 0x00001000, + MatrixMultiplyAccumulateOperandsMatrixBPackedBFloat16INTELMask = 0x00002000, +}; + +enum RawAccessChainOperandsShift { + RawAccessChainOperandsRobustnessPerComponentNVShift = 0, + RawAccessChainOperandsRobustnessPerElementNVShift = 1, + RawAccessChainOperandsMax = 0x7fffffff, +}; + +enum RawAccessChainOperandsMask { + RawAccessChainOperandsMaskNone = 0, + RawAccessChainOperandsRobustnessPerComponentNVMask = 0x00000001, + RawAccessChainOperandsRobustnessPerElementNVMask = 0x00000002, +}; + +enum FPEncoding { + FPEncodingBFloat16KHR = 0, + 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, @@ -1567,14 +1920,26 @@ enum Op { 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, @@ -1592,6 +1957,14 @@ enum Op { 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, @@ -1618,11 +1991,64 @@ enum Op { 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, @@ -1630,9 +2056,12 @@ enum Op { OpTraceNV = 5337, OpTraceMotionNV = 5338, OpTraceRayMotionNV = 5339, + OpRayQueryGetIntersectionTriangleVertexPositionsKHR = 5340, OpTypeAccelerationStructureKHR = 5341, OpTypeAccelerationStructureNV = 5341, OpExecuteCallableNV = 5344, + OpRayQueryGetClusterIdNV = 5345, + OpHitObjectGetClusterIdNV = 5346, OpTypeCooperativeMatrixNV = 5358, OpCooperativeMatrixLoadNV = 5359, OpCooperativeMatrixStoreNV = 5360, @@ -1640,9 +2069,26 @@ enum Op { 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, @@ -1650,6 +2096,20 @@ enum Op { 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, @@ -1891,8 +2351,25 @@ enum Op { OpTypeStructContinuedINTEL = 6090, OpConstantCompositeContinuedINTEL = 6091, OpSpecConstantCompositeContinuedINTEL = 6092, + OpCompositeConstructContinuedINTEL = 6096, + OpConvertFToBF16INTEL = 6116, + OpConvertBF16ToFINTEL = 6117, OpControlBarrierArriveINTEL = 6142, OpControlBarrierWaitINTEL = 6143, + OpArithmeticFenceEXT = 6145, + OpTaskSequenceCreateINTEL = 6163, + OpTaskSequenceAsyncINTEL = 6164, + OpTaskSequenceGetINTEL = 6165, + OpTaskSequenceReleaseINTEL = 6166, + OpTypeTaskSequenceINTEL = 6199, + OpSubgroupBlockPrefetchINTEL = 6221, + OpSubgroup2DBlockLoadINTEL = 6231, + OpSubgroup2DBlockLoadTransformINTEL = 6232, + OpSubgroup2DBlockLoadTransposeINTEL = 6233, + OpSubgroup2DBlockPrefetchINTEL = 6234, + OpSubgroup2DBlockStoreINTEL = 6235, + OpSubgroupMatrixMultiplyAccumulateINTEL = 6237, + OpBitwiseFunctionINTEL = 6242, OpGroupIMulKHR = 6401, OpGroupFMulKHR = 6402, OpGroupBitwiseAndKHR = 6403, @@ -1901,6 +2378,9 @@ enum Op { OpGroupLogicalAndKHR = 6406, OpGroupLogicalOrKHR = 6407, OpGroupLogicalXorKHR = 6408, + OpRoundFToTF32INTEL = 6426, + OpMaskedGatherINTEL = 6428, + OpMaskedScatterINTEL = 6429, OpMax = 0x7fffffff, }; @@ -2256,14 +2736,26 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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; @@ -2275,6 +2767,14 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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; @@ -2301,19 +2801,75 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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 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 OpReportIntersectionNV: *hasResult = true; *hasResultType = true; 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 OpTypeAccelerationStructureNV: *hasResult = true; *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 OpRayQueryGetClusterIdNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetClusterIdNV: *hasResult = true; *hasResultType = true; break; case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; case OpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; @@ -2321,8 +2877,25 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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; @@ -2330,6 +2903,20 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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 OpRayQueryGetIntersectionSpherePositionNV: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionSphereRadiusNV: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionLSSPositionsNV: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionLSSRadiiNV: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionLSSHitValueNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetSpherePositionNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetSphereRadiusNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetLSSPositionsNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectGetLSSRadiiNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectIsSphereHitNV: *hasResult = true; *hasResultType = true; break; + case OpHitObjectIsLSSHitNV: *hasResult = true; *hasResultType = true; break; + case OpRayQueryIsSphereHitNV: *hasResult = true; *hasResultType = true; break; + case OpRayQueryIsLSSHitNV: *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; @@ -2356,7 +2943,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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 OpAsmTargetINTEL: *hasResult = true; *hasResultType = false; break; case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; @@ -2569,8 +3156,25 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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 OpTaskSequenceCreateINTEL: *hasResult = true; *hasResultType = true; break; + case OpTaskSequenceAsyncINTEL: *hasResult = false; *hasResultType = false; break; + case OpTaskSequenceGetINTEL: *hasResult = true; *hasResultType = true; break; + case OpTaskSequenceReleaseINTEL: *hasResult = false; *hasResultType = false; break; + case OpTypeTaskSequenceINTEL: *hasResult = true; *hasResultType = false; break; + case OpSubgroupBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break; + case OpSubgroup2DBlockLoadINTEL: *hasResult = false; *hasResultType = false; break; + case OpSubgroup2DBlockLoadTransformINTEL: *hasResult = false; *hasResultType = false; break; + case OpSubgroup2DBlockLoadTransposeINTEL: *hasResult = false; *hasResultType = false; break; + case OpSubgroup2DBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break; + case OpSubgroup2DBlockStoreINTEL: *hasResult = false; *hasResultType = false; break; + case OpSubgroupMatrixMultiplyAccumulateINTEL: *hasResult = true; *hasResultType = true; break; + case OpBitwiseFunctionINTEL: *hasResult = true; *hasResultType = true; break; case OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; case OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; case OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; @@ -2579,22 +3183,2017 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; case OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; case OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; + case OpRoundFToTF32INTEL: *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"; + case SourceLanguageRust: return "Rust"; + 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 ImageChannelDataTypeUnormInt10X6EXT: return "UnormInt10X6EXT"; + case ImageChannelDataTypeUnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT"; + case ImageChannelDataTypeUnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT"; + case ImageChannelDataTypeUnormInt2_101010EXT: return "UnormInt2_101010EXT"; + case ImageChannelDataTypeUnsignedInt10X6EXT: return "UnsignedInt10X6EXT"; + case ImageChannelDataTypeUnsignedInt12X4EXT: return "UnsignedInt12X4EXT"; + case ImageChannelDataTypeUnsignedInt14X2EXT: return "UnsignedInt14X2EXT"; + case ImageChannelDataTypeUnormInt12X4EXT: return "UnormInt12X4EXT"; + case ImageChannelDataTypeUnormInt14X2EXT: return "UnormInt14X2EXT"; + 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 BuiltInHitIsSphereNV: return "HitIsSphereNV"; + case BuiltInHitIsLSSNV: return "HitIsLSSNV"; + case BuiltInHitSpherePositionNV: return "HitSpherePositionNV"; + case BuiltInWarpsPerSMNV: return "WarpsPerSMNV"; + case BuiltInSMCountNV: return "SMCountNV"; + case BuiltInWarpIDNV: return "WarpIDNV"; + case BuiltInSMIDNV: return "SMIDNV"; + case BuiltInHitLSSPositionsNV: return "HitLSSPositionsNV"; + case BuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV"; + case BuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV"; + case BuiltInHitSphereRadiusNV: return "HitSphereRadiusNV"; + case BuiltInHitLSSRadiiNV: return "HitLSSRadiiNV"; + case BuiltInClusterIDNV: return "ClusterIDNV"; + 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 CapabilityBFloat16TypeKHR: return "BFloat16TypeKHR"; + case CapabilityBFloat16DotProductKHR: return "BFloat16DotProductKHR"; + case CapabilityBFloat16CooperativeMatrixKHR: return "BFloat16CooperativeMatrixKHR"; + 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 CapabilityRayTracingSpheresGeometryNV: return "RayTracingSpheresGeometryNV"; + case CapabilityRayTracingLinearSweptSpheresGeometryNV: return "RayTracingLinearSweptSpheresGeometryNV"; + 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 CapabilityRayTracingClusterAccelerationStructureNV: return "RayTracingClusterAccelerationStructureNV"; + 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 CapabilityTaskSequenceINTEL: return "TaskSequenceINTEL"; + 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 CapabilitySubgroup2DBlockIOINTEL: return "Subgroup2DBlockIOINTEL"; + case CapabilitySubgroup2DBlockTransformINTEL: return "Subgroup2DBlockTransformINTEL"; + case CapabilitySubgroup2DBlockTransposeINTEL: return "Subgroup2DBlockTransposeINTEL"; + case CapabilitySubgroupMatrixMultiplyAccumulateINTEL: return "SubgroupMatrixMultiplyAccumulateINTEL"; + case CapabilityTernaryBitwiseFunctionINTEL: return "TernaryBitwiseFunctionINTEL"; + case CapabilityGroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR"; + case CapabilityTensorFloat32RoundingINTEL: return "TensorFloat32RoundingINTEL"; + 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) { + case FPEncodingBFloat16KHR: return "BFloat16KHR"; + 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 OpRayQueryGetClusterIdNV: return "OpRayQueryGetClusterIdNV"; + case OpHitObjectGetClusterIdNV: return "OpHitObjectGetClusterIdNV"; + 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 OpRayQueryGetIntersectionSpherePositionNV: return "OpRayQueryGetIntersectionSpherePositionNV"; + case OpRayQueryGetIntersectionSphereRadiusNV: return "OpRayQueryGetIntersectionSphereRadiusNV"; + case OpRayQueryGetIntersectionLSSPositionsNV: return "OpRayQueryGetIntersectionLSSPositionsNV"; + case OpRayQueryGetIntersectionLSSRadiiNV: return "OpRayQueryGetIntersectionLSSRadiiNV"; + case OpRayQueryGetIntersectionLSSHitValueNV: return "OpRayQueryGetIntersectionLSSHitValueNV"; + 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 OpRayQueryIsSphereHitNV: return "OpRayQueryIsSphereHitNV"; + case OpRayQueryIsLSSHitNV: return "OpRayQueryIsLSSHitNV"; + 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 OpTaskSequenceCreateINTEL: return "OpTaskSequenceCreateINTEL"; + case OpTaskSequenceAsyncINTEL: return "OpTaskSequenceAsyncINTEL"; + case OpTaskSequenceGetINTEL: return "OpTaskSequenceGetINTEL"; + case OpTaskSequenceReleaseINTEL: return "OpTaskSequenceReleaseINTEL"; + case OpTypeTaskSequenceINTEL: return "OpTypeTaskSequenceINTEL"; + case OpSubgroupBlockPrefetchINTEL: return "OpSubgroupBlockPrefetchINTEL"; + case OpSubgroup2DBlockLoadINTEL: return "OpSubgroup2DBlockLoadINTEL"; + case OpSubgroup2DBlockLoadTransformINTEL: return "OpSubgroup2DBlockLoadTransformINTEL"; + case OpSubgroup2DBlockLoadTransposeINTEL: return "OpSubgroup2DBlockLoadTransposeINTEL"; + case OpSubgroup2DBlockPrefetchINTEL: return "OpSubgroup2DBlockPrefetchINTEL"; + case OpSubgroup2DBlockStoreINTEL: return "OpSubgroup2DBlockStoreINTEL"; + case OpSubgroupMatrixMultiplyAccumulateINTEL: return "OpSubgroupMatrixMultiplyAccumulateINTEL"; + case OpBitwiseFunctionINTEL: return "OpBitwiseFunctionINTEL"; + 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 OpRoundFToTF32INTEL: return "OpRoundFToTF32INTEL"; + case OpMaskedGatherINTEL: return "OpMaskedGatherINTEL"; + case OpMaskedScatterINTEL: return "OpMaskedScatterINTEL"; + default: return "Unknown"; + } +} + #endif /* SPV_ENABLE_UTILITY_CODE */ -// Overload operator| for mask bit combining +// 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 MatrixMultiplyAccumulateOperandsMask operator|(MatrixMultiplyAccumulateOperandsMask a, MatrixMultiplyAccumulateOperandsMask b) { return MatrixMultiplyAccumulateOperandsMask(unsigned(a) | unsigned(b)); } +inline MatrixMultiplyAccumulateOperandsMask operator&(MatrixMultiplyAccumulateOperandsMask a, MatrixMultiplyAccumulateOperandsMask b) { return MatrixMultiplyAccumulateOperandsMask(unsigned(a) & unsigned(b)); } +inline MatrixMultiplyAccumulateOperandsMask operator^(MatrixMultiplyAccumulateOperandsMask a, MatrixMultiplyAccumulateOperandsMask b) { return MatrixMultiplyAccumulateOperandsMask(unsigned(a) ^ unsigned(b)); } +inline MatrixMultiplyAccumulateOperandsMask operator~(MatrixMultiplyAccumulateOperandsMask a) { return MatrixMultiplyAccumulateOperandsMask(~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 diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_common.hpp b/libs/bgfx/3rdparty/spirv-cross/spirv_common.hpp index b70536d..a4778c2 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_common.hpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_common.hpp @@ -580,7 +580,8 @@ struct SPIRType : IVariant Interpolant, Char, // MSL specific type, that is used by 'object'(analog of 'task' from glsl) shader. - MeshGridProperties + MeshGridProperties, + BFloat16 }; // Scalar/vector/matrix support. @@ -605,6 +606,14 @@ struct SPIRType : IVariant bool pointer = false; bool forward_pointer = false; + struct + { + uint32_t use_id = 0; + uint32_t rows_id = 0; + uint32_t columns_id = 0; + uint32_t scope_id = 0; + } cooperative; + spv::StorageClass storage = spv::StorageClassGeneric; SmallVector member_types; @@ -1026,6 +1035,9 @@ struct SPIRFunction : IVariant // consider arrays value types. SmallVector constant_arrays_needed_on_stack; + // Does this function (or any function called by it), emit geometry? + bool emits_geometry = false; + bool active = false; bool flush_undeclared = true; bool do_combined_parameters = true; @@ -1266,6 +1278,14 @@ struct SPIRConstant : IVariant return f16_to_f32(scalar_u16(col, row)); } + inline float scalar_bf16(uint32_t col = 0, uint32_t row = 0) const + { + uint32_t v = scalar_u16(col, row) << 16; + float fp32; + memcpy(&fp32, &v, sizeof(float)); + return fp32; + } + inline float scalar_f32(uint32_t col = 0, uint32_t row = 0) const { return m.c[col].r[row].f32; @@ -1410,6 +1430,10 @@ struct SPIRConstant : IVariant // If true, this is a LUT, and should always be declared in the outer scope. bool is_used_as_lut = false; + // If this is a null constant of array type with specialized length. + // May require special handling in initializer + bool is_null_array_specialized_length = false; + // For composites which are constant arrays, etc. SmallVector subconstants; diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_cross.cpp b/libs/bgfx/3rdparty/spirv-cross/spirv_cross.cpp index 3492f0b..8aa4e5e 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_cross.cpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_cross.cpp @@ -82,7 +82,7 @@ bool Compiler::variable_storage_is_aliased(const SPIRVariable &v) ir.meta[type.self].decoration.decoration_flags.get(DecorationBufferBlock); bool image = type.basetype == SPIRType::Image; bool counter = type.basetype == SPIRType::AtomicCounter; - bool buffer_reference = type.storage == StorageClassPhysicalStorageBufferEXT; + bool buffer_reference = type.storage == StorageClassPhysicalStorageBuffer; bool is_restrict; if (ssbo) @@ -171,6 +171,7 @@ bool Compiler::block_is_control_dependent(const SPIRBlock &block) case OpGroupNonUniformLogicalXor: case OpGroupNonUniformQuadBroadcast: case OpGroupNonUniformQuadSwap: + case OpGroupNonUniformRotateKHR: // Control barriers case OpControlBarrier: @@ -210,6 +211,7 @@ bool Compiler::block_is_pure(const SPIRBlock &block) case OpCopyMemory: case OpStore: + case OpCooperativeMatrixStoreKHR: { auto &type = expression_type(ops[0]); if (type.storage != StorageClassFunction) @@ -370,6 +372,7 @@ void Compiler::register_global_read_dependencies(const SPIRBlock &block, uint32_ } case OpLoad: + case OpCooperativeMatrixLoadKHR: case OpImageRead: { // If we're in a storage class which does not get invalidated, adding dependencies here is no big deal. @@ -481,7 +484,7 @@ void Compiler::register_write(uint32_t chain) } } - if (type.storage == StorageClassPhysicalStorageBufferEXT || variable_storage_is_aliased(*var)) + if (type.storage == StorageClassPhysicalStorageBuffer || variable_storage_is_aliased(*var)) flush_all_aliased_variables(); else if (var) flush_dependees(*var); @@ -587,6 +590,7 @@ const SPIRType &Compiler::expression_type(uint32_t id) const bool Compiler::expression_is_lvalue(uint32_t id) const { auto &type = expression_type(id); + switch (type.basetype) { case SPIRType::SampledImage: @@ -818,6 +822,7 @@ bool Compiler::InterfaceVariableAccessHandler::handle(Op opcode, const uint32_t case OpAtomicStore: case OpStore: + case OpCooperativeMatrixStoreKHR: // Invalid SPIR-V. if (length < 1) return false; @@ -910,6 +915,7 @@ bool Compiler::InterfaceVariableAccessHandler::handle(Op opcode, const uint32_t case OpInBoundsAccessChain: case OpPtrAccessChain: case OpLoad: + case OpCooperativeMatrixLoadKHR: case OpCopyObject: case OpImageTexelPointer: case OpAtomicLoad: @@ -3461,6 +3467,7 @@ bool Compiler::AnalyzeVariableScopeAccessHandler::handle(spv::Op op, const uint3 switch (op) { case OpStore: + case OpCooperativeMatrixStoreKHR: { if (length < 2) return false; @@ -3581,6 +3588,7 @@ bool Compiler::AnalyzeVariableScopeAccessHandler::handle(spv::Op op, const uint3 } case OpLoad: + case OpCooperativeMatrixLoadKHR: { if (length < 3) return false; @@ -3800,6 +3808,7 @@ bool Compiler::StaticExpressionAccessHandler::handle(spv::Op op, const uint32_t switch (op) { case OpStore: + case OpCooperativeMatrixStoreKHR: if (length < 2) return false; if (args[0] == variable_id) @@ -3810,6 +3819,7 @@ bool Compiler::StaticExpressionAccessHandler::handle(spv::Op op, const uint32_t break; case OpLoad: + case OpCooperativeMatrixLoadKHR: if (length < 3) return false; if (args[2] == variable_id && static_expression == 0) // Tried to read from variable before it was initialized. @@ -4285,6 +4295,7 @@ bool Compiler::may_read_undefined_variable_in_block(const SPIRBlock &block, uint switch (op.op) { case OpStore: + case OpCooperativeMatrixStoreKHR: case OpCopyMemory: if (ops[0] == var) return false; @@ -4323,6 +4334,7 @@ bool Compiler::may_read_undefined_variable_in_block(const SPIRBlock &block, uint case OpCopyObject: case OpLoad: + case OpCooperativeMatrixLoadKHR: if (ops[2] == var) return true; break; @@ -4350,6 +4362,39 @@ bool Compiler::may_read_undefined_variable_in_block(const SPIRBlock &block, uint return true; } +bool Compiler::GeometryEmitDisocveryHandler::handle(spv::Op opcode, const uint32_t *, uint32_t) +{ + if (opcode == OpEmitVertex || opcode == OpEndPrimitive) + { + for (auto *func : function_stack) + func->emits_geometry = true; + } + + return true; +} + +bool Compiler::GeometryEmitDisocveryHandler::begin_function_scope(const uint32_t *stream, uint32_t) +{ + auto &callee = compiler.get(stream[2]); + function_stack.push_back(&callee); + return true; +} + +bool Compiler::GeometryEmitDisocveryHandler::end_function_scope([[maybe_unused]] const uint32_t *stream, uint32_t) +{ + assert(function_stack.back() == &compiler.get(stream[2])); + function_stack.pop_back(); + + return true; +} + +void Compiler::discover_geometry_emitters() +{ + GeometryEmitDisocveryHandler handler(*this); + + traverse_all_reachable_opcodes(get(ir.default_entry_point), handler); +} + Bitset Compiler::get_buffer_block_flags(VariableID id) const { return ir.get_buffer_block_flags(get(id)); @@ -4462,6 +4507,7 @@ bool Compiler::ActiveBuiltinHandler::handle(spv::Op opcode, const uint32_t *args switch (opcode) { case OpStore: + case OpCooperativeMatrixStoreKHR: if (length < 1) return false; @@ -4478,6 +4524,7 @@ bool Compiler::ActiveBuiltinHandler::handle(spv::Op opcode, const uint32_t *args case OpCopyObject: case OpLoad: + case OpCooperativeMatrixLoadKHR: if (length < 3) return false; @@ -4910,13 +4957,16 @@ void Compiler::make_constant_null(uint32_t id, uint32_t type) uint32_t parent_id = ir.increase_bound_by(1); make_constant_null(parent_id, constant_type.parent_type); - if (!constant_type.array_size_literal.back()) - SPIRV_CROSS_THROW("Array size of OpConstantNull must be a literal."); - - SmallVector elements(constant_type.array.back()); - for (uint32_t i = 0; i < constant_type.array.back(); i++) + // The array size of OpConstantNull can be either literal or specialization constant. + // In the latter case, we cannot take the value as-is, as it can be changed to anything. + // Rather, we assume it to be *one* for the sake of initializer. + bool is_literal_array_size = constant_type.array_size_literal.back(); + uint32_t count = is_literal_array_size ? constant_type.array.back() : 1; + SmallVector elements(count); + for (uint32_t i = 0; i < count; i++) elements[i] = parent_id; - set(id, type, elements.data(), uint32_t(elements.size()), false); + auto &constant = set(id, type, elements.data(), uint32_t(elements.size()), false); + constant.is_null_array_specialized_length = !is_literal_array_size; } else if (!constant_type.member_types.empty()) { @@ -5177,7 +5227,7 @@ bool Compiler::PhysicalStorageBufferPointerHandler::type_is_bda_block_entry(uint uint32_t Compiler::PhysicalStorageBufferPointerHandler::get_minimum_scalar_alignment(const SPIRType &type) const { - if (type.storage == spv::StorageClassPhysicalStorageBufferEXT) + if (type.storage == spv::StorageClassPhysicalStorageBuffer) return 8; else if (type.basetype == SPIRType::Struct) { @@ -5252,6 +5302,13 @@ bool Compiler::PhysicalStorageBufferPointerHandler::handle(Op op, const uint32_t break; } + case OpCooperativeMatrixLoadKHR: + case OpCooperativeMatrixStoreKHR: + { + // TODO: Can we meaningfully deal with this? + break; + } + default: break; } @@ -5274,6 +5331,10 @@ uint32_t Compiler::PhysicalStorageBufferPointerHandler::get_base_non_block_type_ void Compiler::PhysicalStorageBufferPointerHandler::analyze_non_block_types_from_block(const SPIRType &type) { + if (analyzed_type_ids.count(type.self)) + return; + analyzed_type_ids.insert(type.self); + for (auto &member : type.member_types) { auto &subtype = compiler.get(member); @@ -5407,6 +5468,7 @@ bool Compiler::InterlockedResourceAccessHandler::handle(Op opcode, const uint32_ switch (opcode) { case OpLoad: + case OpCooperativeMatrixLoadKHR: { if (length < 3) return false; @@ -5484,6 +5546,7 @@ bool Compiler::InterlockedResourceAccessHandler::handle(Op opcode, const uint32_ case OpStore: case OpImageWrite: case OpAtomicStore: + case OpCooperativeMatrixStoreKHR: { if (length < 1) return false; diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_cross.hpp b/libs/bgfx/3rdparty/spirv-cross/spirv_cross.hpp index e9062b4..b65b5ac 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_cross.hpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_cross.hpp @@ -1054,6 +1054,7 @@ class Compiler std::unordered_set non_block_types; std::unordered_map physical_block_type_meta; std::unordered_map access_chain_to_physical_block; + std::unordered_set analyzed_type_ids; void mark_aligned_access(uint32_t id, const uint32_t *args, uint32_t length); PhysicalBlockMeta *find_block_meta(uint32_t id) const; @@ -1072,6 +1073,22 @@ class Compiler bool single_function); bool may_read_undefined_variable_in_block(const SPIRBlock &block, uint32_t var); + struct GeometryEmitDisocveryHandler : OpcodeHandler + { + explicit GeometryEmitDisocveryHandler(Compiler &compiler_) + : compiler(compiler_) + { + } + Compiler &compiler; + + bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) override; + bool begin_function_scope(const uint32_t *, uint32_t) override; + bool end_function_scope(const uint32_t *, uint32_t) override; + SmallVector function_stack; + }; + + void discover_geometry_emitters(); + // Finds all resources that are written to from inside the critical section, if present. // The critical section is delimited by OpBeginInvocationInterlockEXT and // OpEndInvocationInterlockEXT instructions. In MSL and HLSL, any resources written diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_cross_c.cpp b/libs/bgfx/3rdparty/spirv-cross/spirv_cross_c.cpp index 71bc7b5..6827f61 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_cross_c.cpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_cross_c.cpp @@ -55,6 +55,7 @@ #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4996) +#pragma warning(disable : 4065) // switch with 'default' but not 'case'. #endif #ifndef SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS @@ -565,10 +566,18 @@ spvc_result spvc_compiler_options_set_uint(spvc_compiler_options options, spvc_c options->msl.enable_point_size_builtin = value != 0; break; + case SPVC_COMPILER_OPTION_MSL_ENABLE_POINT_SIZE_DEFAULT: + options->msl.enable_point_size_default = value != 0; + break; + case SPVC_COMPILER_OPTION_MSL_DISABLE_RASTERIZATION: options->msl.disable_rasterization = value != 0; break; + case SPVC_COMPILER_OPTION_MSL_AUTO_DISABLE_RASTERIZATION: + options->msl.auto_disable_rasterization = value != 0; + break; + case SPVC_COMPILER_OPTION_MSL_CAPTURE_OUTPUT_TO_BUFFER: options->msl.capture_output_to_buffer = value != 0; break; diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_cross_c.h b/libs/bgfx/3rdparty/spirv-cross/spirv_cross_c.h index a414c46..4eab922 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_cross_c.h +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_cross_c.h @@ -40,7 +40,7 @@ extern "C" { /* Bumped if ABI or API breaks backwards compatibility. */ #define SPVC_C_API_VERSION_MAJOR 0 /* Bumped if APIs or enumerations are added in a backwards compatible way. */ -#define SPVC_C_API_VERSION_MINOR 64 +#define SPVC_C_API_VERSION_MINOR 66 /* Bumped if internal implementation details change. */ #define SPVC_C_API_VERSION_PATCH 0 @@ -748,6 +748,10 @@ typedef enum spvc_compiler_option SPVC_COMPILER_OPTION_HLSL_USE_ENTRY_POINT_NAME = 90 | SPVC_COMPILER_OPTION_HLSL_BIT, SPVC_COMPILER_OPTION_HLSL_PRESERVE_STRUCTURED_BUFFERS = 91 | SPVC_COMPILER_OPTION_HLSL_BIT, + SPVC_COMPILER_OPTION_MSL_AUTO_DISABLE_RASTERIZATION = 92 | SPVC_COMPILER_OPTION_MSL_BIT, + + SPVC_COMPILER_OPTION_MSL_ENABLE_POINT_SIZE_DEFAULT = 93 | SPVC_COMPILER_OPTION_MSL_BIT, + SPVC_COMPILER_OPTION_INT_MAX = 0x7fffffff } spvc_compiler_option; diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_cross_parsed_ir.cpp b/libs/bgfx/3rdparty/spirv-cross/spirv_cross_parsed_ir.cpp index b05afeb..397e40f 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_cross_parsed_ir.cpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_cross_parsed_ir.cpp @@ -1050,16 +1050,21 @@ void ParsedIR::make_constant_null(uint32_t id, uint32_t type, bool add_to_typed_ uint32_t parent_id = increase_bound_by(1); make_constant_null(parent_id, constant_type.parent_type, add_to_typed_id_set); - if (!constant_type.array_size_literal.back()) - SPIRV_CROSS_THROW("Array size of OpConstantNull must be a literal."); - - SmallVector elements(constant_type.array.back()); - for (uint32_t i = 0; i < constant_type.array.back(); i++) + // The array size of OpConstantNull can be either literal or specialization constant. + // In the latter case, we cannot take the value as-is, as it can be changed to anything. + // Rather, we assume it to be *one* for the sake of initializer. + bool is_literal_array_size = constant_type.array_size_literal.back(); + uint32_t count = is_literal_array_size ? constant_type.array.back() : 1; + + SmallVector elements(count); + for (uint32_t i = 0; i < count; i++) elements[i] = parent_id; if (add_to_typed_id_set) add_typed_id(TypeConstant, id); - variant_set(ids[id], type, elements.data(), uint32_t(elements.size()), false).self = id; + auto& constant = variant_set(ids[id], type, elements.data(), uint32_t(elements.size()), false); + constant.self = id; + constant.is_null_array_specialized_length = !is_literal_array_size; } else if (!constant_type.member_types.empty()) { diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp b/libs/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp index 6c1d520..ca9d030 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_glsl.cpp @@ -545,7 +545,7 @@ void CompilerGLSL::find_static_extensions() if (options.separate_shader_objects && !options.es && options.version < 410) require_extension_internal("GL_ARB_separate_shader_objects"); - if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64EXT) + if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64) { if (!options.vulkan_semantics) SPIRV_CROSS_THROW("GL_EXT_buffer_reference is only supported in Vulkan GLSL."); @@ -557,7 +557,7 @@ void CompilerGLSL::find_static_extensions() } else if (ir.addressing_model != AddressingModelLogical) { - SPIRV_CROSS_THROW("Only Logical and PhysicalStorageBuffer64EXT addressing models are supported."); + SPIRV_CROSS_THROW("Only Logical and PhysicalStorageBuffer64 addressing models are supported."); } // Check for nonuniform qualifier and passthrough. @@ -631,6 +631,12 @@ void CompilerGLSL::find_static_extensions() require_extension_internal("GL_OVR_multiview2"); } + if (execution.flags.get(ExecutionModeQuadDerivativesKHR) || + (execution.flags.get(ExecutionModeRequireFullQuadsKHR) && get_execution_model() == ExecutionModelFragment)) + { + require_extension_internal("GL_EXT_shader_quad_control"); + } + // KHR one is likely to get promoted at some point, so if we don't see an explicit SPIR-V extension, assume KHR. for (auto &ext : ir.declared_extensions) if (ext == "SPV_NV_fragment_shader_barycentric") @@ -681,6 +687,8 @@ string CompilerGLSL::compile() backend.requires_relaxed_precision_analysis = options.es || options.vulkan_semantics; backend.support_precise_qualifier = (!options.es && options.version >= 400) || (options.es && options.version >= 320); + backend.constant_null_initializer = "{ }"; + backend.requires_matching_array_initializer = true; if (is_legacy_es()) backend.support_case_fallthrough = false; @@ -700,7 +708,7 @@ string CompilerGLSL::compile() // Shaders might cast unrelated data to pointers of non-block types. // Find all such instances and make sure we can cast the pointers to a synthesized block type. - if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64EXT) + if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64) analyze_non_block_pointer_types(); uint32_t pass_count = 0; @@ -1191,6 +1199,9 @@ void CompilerGLSL::emit_header() else if (!options.es && execution.flags.get(ExecutionModeDepthLess)) statement("layout(depth_less) out float gl_FragDepth;"); + if (execution.flags.get(ExecutionModeRequireFullQuadsKHR)) + statement("layout(full_quads) in;"); + break; default: @@ -1201,6 +1212,9 @@ void CompilerGLSL::emit_header() if (cap == CapabilityRayTraversalPrimitiveCullingKHR) statement("layout(primitive_culling);"); + if (execution.flags.get(ExecutionModeQuadDerivativesKHR)) + statement("layout(quad_derivatives) in;"); + if (!inputs.empty()) statement("layout(", merge(inputs), ") in;"); if (!outputs.empty()) @@ -1528,14 +1542,14 @@ uint32_t CompilerGLSL::type_to_packed_base_size(const SPIRType &type, BufferPack uint32_t CompilerGLSL::type_to_packed_alignment(const SPIRType &type, const Bitset &flags, BufferPackingStandard packing) { - // If using PhysicalStorageBufferEXT storage class, this is a pointer, + // If using PhysicalStorageBuffer storage class, this is a pointer, // and is 64-bit. if (is_physical_pointer(type)) { if (!type.pointer) - SPIRV_CROSS_THROW("Types in PhysicalStorageBufferEXT must be pointers."); + SPIRV_CROSS_THROW("Types in PhysicalStorageBuffer must be pointers."); - if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64EXT) + if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64) { if (packing_is_vec4_padded(packing) && type_is_array_of_pointers(type)) return 16; @@ -1543,7 +1557,7 @@ uint32_t CompilerGLSL::type_to_packed_alignment(const SPIRType &type, const Bits return 8; } else - SPIRV_CROSS_THROW("AddressingModelPhysicalStorageBuffer64EXT must be used for PhysicalStorageBufferEXT."); + SPIRV_CROSS_THROW("AddressingModelPhysicalStorageBuffer64 must be used for PhysicalStorageBuffer."); } else if (is_array(type)) { @@ -1651,17 +1665,17 @@ uint32_t CompilerGLSL::type_to_packed_array_stride(const SPIRType &type, const B uint32_t CompilerGLSL::type_to_packed_size(const SPIRType &type, const Bitset &flags, BufferPackingStandard packing) { - // If using PhysicalStorageBufferEXT storage class, this is a pointer, + // If using PhysicalStorageBuffer storage class, this is a pointer, // and is 64-bit. if (is_physical_pointer(type)) { if (!type.pointer) - SPIRV_CROSS_THROW("Types in PhysicalStorageBufferEXT must be pointers."); + SPIRV_CROSS_THROW("Types in PhysicalStorageBuffer must be pointers."); - if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64EXT) + if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64) return 8; else - SPIRV_CROSS_THROW("AddressingModelPhysicalStorageBuffer64EXT must be used for PhysicalStorageBufferEXT."); + SPIRV_CROSS_THROW("AddressingModelPhysicalStorageBuffer64 must be used for PhysicalStorageBuffer."); } else if (is_array(type)) { @@ -2841,7 +2855,7 @@ void CompilerGLSL::emit_uniform(const SPIRVariable &var) statement(layout_for_variable(var), variable_decl(var), ";"); } -string CompilerGLSL::constant_value_macro_name(uint32_t id) +string CompilerGLSL::constant_value_macro_name(uint32_t id) const { return join("SPIRV_CROSS_CONSTANT_ID_", id); } @@ -3624,6 +3638,36 @@ void CompilerGLSL::emit_resources() bool emitted = false; + if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64) + { + // Output buffer reference block forward declarations. + ir.for_each_typed_id([&](uint32_t id, SPIRType &type) + { + if (is_physical_pointer(type)) + { + bool emit_type = true; + if (!is_physical_pointer_to_buffer_block(type)) + { + // Only forward-declare if we intend to emit it in the non_block_pointer types. + // Otherwise, these are just "benign" pointer types that exist as a result of access chains. + emit_type = std::find(physical_storage_non_block_pointer_types.begin(), + physical_storage_non_block_pointer_types.end(), + id) != physical_storage_non_block_pointer_types.end(); + } + + if (emit_type) + { + emit_buffer_reference_block(id, true); + emitted = true; + } + } + }); + } + + if (emitted) + statement(""); + emitted = false; + // If emitted Vulkan GLSL, // emit specialization constants as actual floats, // spec op expressions will redirect to the constant name. @@ -3733,30 +3777,10 @@ void CompilerGLSL::emit_resources() emitted = false; - if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64EXT) + if (ir.addressing_model == AddressingModelPhysicalStorageBuffer64) { // Output buffer reference blocks. - // Do this in two stages, one with forward declaration, - // and one without. Buffer reference blocks can reference themselves - // to support things like linked lists. - ir.for_each_typed_id([&](uint32_t id, SPIRType &type) { - if (is_physical_pointer(type)) - { - bool emit_type = true; - if (!is_physical_pointer_to_buffer_block(type)) - { - // Only forward-declare if we intend to emit it in the non_block_pointer types. - // Otherwise, these are just "benign" pointer types that exist as a result of access chains. - emit_type = std::find(physical_storage_non_block_pointer_types.begin(), - physical_storage_non_block_pointer_types.end(), - id) != physical_storage_non_block_pointer_types.end(); - } - - if (emit_type) - emit_buffer_reference_block(id, true); - } - }); - + // Buffer reference blocks can reference themselves to support things like linked lists. for (auto type : physical_storage_non_block_pointer_types) emit_buffer_reference_block(type, false); @@ -4955,12 +4979,16 @@ void CompilerGLSL::emit_polyfills(uint32_t polyfills, bool relaxed) // Subclasses may override to modify the return value. string CompilerGLSL::to_func_call_arg(const SPIRFunction::Parameter &, uint32_t id) { + // BDA expects pointers through function interface. + if (is_physical_pointer(expression_type(id))) + return to_pointer_expression(id); + // Make sure that we use the name of the original variable, and not the parameter alias. uint32_t name_id = id; auto *var = maybe_get(id); if (var && var->basevariable) name_id = var->basevariable; - return to_expression(name_id); + return to_unpacked_expression(name_id); } void CompilerGLSL::force_temporary_and_recompile(uint32_t id) @@ -5391,6 +5419,15 @@ string CompilerGLSL::to_non_uniform_aware_expression(uint32_t id) return expr; } +string CompilerGLSL::to_atomic_ptr_expression(uint32_t id) +{ + string expr = to_non_uniform_aware_expression(id); + // If we have naked pointer to POD, we need to dereference to get the proper ".value" resolve. + if (should_dereference(id)) + expr = dereference_expression(expression_type(id), expr); + return expr; +} + string CompilerGLSL::to_expression(uint32_t id, bool register_expression_read) { auto itr = invalid_expressions.find(id); @@ -5898,6 +5935,11 @@ string CompilerGLSL::constant_expression(const SPIRConstant &c, { return backend.null_pointer_literal; } + else if (c.is_null_array_specialized_length && backend.requires_matching_array_initializer) + { + require_extension_internal("GL_EXT_null_initializer"); + return backend.constant_null_initializer; + } else if (!c.subconstants.empty()) { // Handles Arrays and structures. @@ -6003,7 +6045,7 @@ string CompilerGLSL::constant_expression(const SPIRConstant &c, else return join(type_to_glsl(type), "(0)"); } - else if (c.columns() == 1) + else if (c.columns() == 1 && type.op != spv::OpTypeCooperativeMatrixKHR) { auto res = constant_expression_vector(c, 0); @@ -6091,7 +6133,9 @@ string CompilerGLSL::convert_half_to_string(const SPIRConstant &c, uint32_t col, string CompilerGLSL::convert_float_to_string(const SPIRConstant &c, uint32_t col, uint32_t row) { string res; - float float_value = c.scalar_f32(col, row); + + bool is_bfloat16 = get(c.constant_type).basetype == SPIRType::BFloat16; + float float_value = is_bfloat16 ? c.scalar_bf16(col, row) : c.scalar_f32(col, row); if (std::isnan(float_value) || std::isinf(float_value)) { @@ -6155,6 +6199,9 @@ string CompilerGLSL::convert_float_to_string(const SPIRConstant &c, uint32_t col res += "f"; } + if (is_bfloat16) + res = join("bfloat16_t(", res, ")"); + return res; } @@ -6333,6 +6380,7 @@ string CompilerGLSL::constant_expression_vector(const SPIRConstant &c, uint32_t } break; + case SPIRType::BFloat16: case SPIRType::Float: if (splat || swizzle_splat) { @@ -6988,9 +7036,12 @@ void CompilerGLSL::emit_atomic_func_op(uint32_t result_type, uint32_t result_id, require_extension_internal("GL_EXT_shader_atomic_float"); } + if (type.basetype == SPIRType::UInt64 || type.basetype == SPIRType::Int64) + require_extension_internal("GL_EXT_shader_atomic_int64"); + forced_temporaries.insert(result_id); emit_op(result_type, result_id, - join(op, "(", to_non_uniform_aware_expression(op0), ", ", + join(op, "(", to_atomic_ptr_expression(op0), ", ", to_unpacked_expression(op1), ")"), false); flush_all_atomic_capable_variables(); } @@ -9358,6 +9409,10 @@ void CompilerGLSL::emit_subgroup_op(const Instruction &i) require_extension_internal("GL_KHR_shader_subgroup_shuffle_relative"); break; + case OpGroupNonUniformRotateKHR: + require_extension_internal("GL_KHR_shader_subgroup_rotate"); + break; + case OpGroupNonUniformAll: case OpGroupNonUniformAny: case OpGroupNonUniformAllEqual: @@ -9429,6 +9484,13 @@ void CompilerGLSL::emit_subgroup_op(const Instruction &i) require_extension_internal("GL_KHR_shader_subgroup_quad"); break; + case OpGroupNonUniformQuadAllKHR: + case OpGroupNonUniformQuadAnyKHR: + // Require both extensions to be enabled. + require_extension_internal("GL_KHR_shader_subgroup_vote"); + require_extension_internal("GL_EXT_shader_quad_control"); + break; + default: SPIRV_CROSS_THROW("Invalid opcode for subgroup."); } @@ -9436,9 +9498,13 @@ void CompilerGLSL::emit_subgroup_op(const Instruction &i) uint32_t result_type = ops[0]; uint32_t id = ops[1]; - auto scope = static_cast(evaluate_constant_u32(ops[2])); - if (scope != ScopeSubgroup) - SPIRV_CROSS_THROW("Only subgroup scope is supported."); + // These quad ops do not have a scope parameter. + if (op != OpGroupNonUniformQuadAllKHR && op != OpGroupNonUniformQuadAnyKHR) + { + auto scope = static_cast(evaluate_constant_u32(ops[2])); + if (scope != ScopeSubgroup) + SPIRV_CROSS_THROW("Only subgroup scope is supported."); + } switch (op) { @@ -9504,6 +9570,13 @@ void CompilerGLSL::emit_subgroup_op(const Instruction &i) emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupShuffleDown"); break; + case OpGroupNonUniformRotateKHR: + if (i.length > 5) + emit_trinary_func_op(result_type, id, ops[3], ops[4], ops[5], "subgroupClusteredRotate"); + else + emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupRotate"); + break; + case OpGroupNonUniformAll: emit_unary_func_op(result_type, id, ops[3], "subgroupAll"); break; @@ -9591,6 +9664,14 @@ case OpGroupNonUniform##op: \ break; } + case OpGroupNonUniformQuadAllKHR: + emit_unary_func_op(result_type, id, ops[2], "subgroupQuadAll"); + break; + + case OpGroupNonUniformQuadAnyKHR: + emit_unary_func_op(result_type, id, ops[2], "subgroupQuadAny"); + break; + default: SPIRV_CROSS_THROW("Invalid opcode for subgroup."); } @@ -9706,6 +9787,14 @@ string CompilerGLSL::bitcast_glsl_op(const SPIRType &out_type, const SPIRType &i return "packUint4x16"; else if (out_type.basetype == SPIRType::UShort && in_type.basetype == SPIRType::UInt64 && in_type.vecsize == 1) return "unpackUint4x16"; + else if (out_type.basetype == SPIRType::BFloat16 && in_type.basetype == SPIRType::UShort) + return "uintBitsToBFloat16EXT"; + else if (out_type.basetype == SPIRType::BFloat16 && in_type.basetype == SPIRType::Short) + return "intBitsToBFloat16EXT"; + else if (out_type.basetype == SPIRType::UShort && in_type.basetype == SPIRType::BFloat16) + return "bfloat16BitsToUintEXT"; + else if (out_type.basetype == SPIRType::Short && in_type.basetype == SPIRType::BFloat16) + return "bfloat16BitsToIntEXT"; return ""; } @@ -9824,7 +9913,17 @@ string CompilerGLSL::builtin_to_glsl(BuiltIn builtin, StorageClass storage) case BuiltInInvocationId: return "gl_InvocationID"; case BuiltInLayer: + { + auto model = get_execution_model(); + if (model == ExecutionModelVertex || model == ExecutionModelTessellationEvaluation) + { + if (options.es) + require_extension_internal("GL_NV_viewport_array2"); + else + require_extension_internal("GL_ARB_shader_viewport_layer_array"); + } return "gl_Layer"; + } case BuiltInViewportIndex: return "gl_ViewportIndex"; case BuiltInTessLevelOuter: @@ -10228,7 +10327,8 @@ string CompilerGLSL::access_chain_internal(uint32_t base, const uint32_t *indice if (!is_ptr_chain) mod_flags &= ~ACCESS_CHAIN_PTR_CHAIN_BIT; access_chain_internal_append_index(expr, base, type, mod_flags, access_chain_is_arrayed, index); - check_physical_type_cast(expr, type, physical_type); + if (check_physical_type_cast(expr, type, physical_type)) + physical_type = 0; }; for (uint32_t i = 0; i < count; i++) @@ -10572,7 +10672,7 @@ string CompilerGLSL::access_chain_internal(uint32_t base, const uint32_t *indice type = &get(type_id); } // Vector -> Scalar - else if (type->vecsize > 1) + else if (type->op == OpTypeCooperativeMatrixKHR || type->vecsize > 1) { string deferred_index; if (row_major_matrix_needs_conversion) @@ -10634,9 +10734,9 @@ string CompilerGLSL::access_chain_internal(uint32_t base, const uint32_t *indice if (is_literal) { - bool out_of_bounds = (index >= type->vecsize); + bool out_of_bounds = index >= type->vecsize && type->op != OpTypeCooperativeMatrixKHR; - if (!is_packed && !row_major_matrix_needs_conversion) + if (!is_packed && !row_major_matrix_needs_conversion && type->op != OpTypeCooperativeMatrixKHR) { expr += "."; expr += index_to_swizzle(out_of_bounds ? 0 : index); @@ -10736,8 +10836,9 @@ string CompilerGLSL::access_chain_internal(uint32_t base, const uint32_t *indice return expr; } -void CompilerGLSL::check_physical_type_cast(std::string &, const SPIRType *, uint32_t) +bool CompilerGLSL::check_physical_type_cast(std::string &, const SPIRType *, uint32_t) { + return false; } bool CompilerGLSL::prepare_access_chain_for_scalar_access(std::string &, const SPIRType &, spv::StorageClass, bool &) @@ -11239,7 +11340,7 @@ bool CompilerGLSL::should_dereference(uint32_t id) { const auto &type = expression_type(id); // Non-pointer expressions don't need to be dereferenced. - if (!type.pointer) + if (!is_pointer(type)) return false; // Handles shouldn't be dereferenced either. @@ -11247,8 +11348,9 @@ bool CompilerGLSL::should_dereference(uint32_t id) return false; // If id is a variable but not a phi variable, we should not dereference it. + // BDA passed around as parameters are always pointers. if (auto *var = maybe_get(id)) - return var->phi_variable; + return (var->parameter && is_physical_pointer(type)) || var->phi_variable; if (auto *expr = maybe_get(id)) { @@ -11281,6 +11383,16 @@ bool CompilerGLSL::should_dereference(uint32_t id) return true; } +bool CompilerGLSL::should_dereference_caller_param(uint32_t id) +{ + const auto &type = expression_type(id); + // BDA is always passed around as pointers. + if (is_physical_pointer(type)) + return false; + + return should_dereference(id); +} + bool CompilerGLSL::should_forward(uint32_t id) const { // If id is a variable we will try to forward it regardless of force_temporary check below @@ -11575,7 +11687,8 @@ string CompilerGLSL::build_composite_combiner(uint32_t return_type, const uint32 // Can only merge swizzles for vectors. auto &type = get(return_type); - bool can_apply_swizzle_opt = type.basetype != SPIRType::Struct && type.array.empty() && type.columns == 1; + bool can_apply_swizzle_opt = type.basetype != SPIRType::Struct && type.array.empty() && type.columns == 1 && + type.op != spv::OpTypeCooperativeMatrixKHR; bool swizzle_optimization = false; for (uint32_t i = 0; i < length; i++) @@ -12132,6 +12245,33 @@ CompilerGLSL::TemporaryCopy CompilerGLSL::handle_instruction_precision(const Ins return {}; } +static pair split_coopmat_pointer(const string &expr) +{ + auto ptr_expr = expr; + string index_expr; + + if (ptr_expr.back() != ']') + SPIRV_CROSS_THROW("Access chain for coopmat must be indexed into an array."); + + // Strip the access chain. + ptr_expr.pop_back(); + uint32_t counter = 1; + while (counter && !ptr_expr.empty()) + { + if (ptr_expr.back() == ']') + counter++; + else if (ptr_expr.back() == '[') + counter--; + ptr_expr.pop_back(); + } + + if (ptr_expr.empty()) + SPIRV_CROSS_THROW("Invalid pointer expression for coopmat."); + + index_expr = expr.substr(ptr_expr.size() + 1, expr.size() - (ptr_expr.size() + 1) - 1); + return { std::move(ptr_expr), std::move(index_expr) }; +} + void CompilerGLSL::emit_instruction(const Instruction &instruction) { auto ops = stream(instruction); @@ -12675,6 +12815,9 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) if (composite_type_is_complex) allow_base_expression = false; + if (composite_type.op == spv::OpTypeCooperativeMatrixKHR) + allow_base_expression = false; + // Packed expressions or physical ID mapped expressions cannot be split up. if (has_extended_decoration(ops[2], SPIRVCrossDecorationPhysicalTypePacked) || has_extended_decoration(ops[2], SPIRVCrossDecorationPhysicalTypeID)) @@ -13843,8 +13986,11 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) const char *increment = unsigned_type ? "0u" : "0"; emit_op(ops[0], ops[1], join(op, "(", - to_non_uniform_aware_expression(ops[2]), ", ", increment, ")"), false); + to_atomic_ptr_expression(ops[2]), ", ", increment, ")"), false); flush_all_atomic_capable_variables(); + + if (type.basetype == SPIRType::UInt64 || type.basetype == SPIRType::Int64) + require_extension_internal("GL_EXT_shader_atomic_int64"); break; } @@ -13856,8 +14002,12 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) // Ignore semantics for now, probably only relevant to CL. uint32_t val = ops[3]; const char *op = check_atomic_image(ptr) ? "imageAtomicExchange" : "atomicExchange"; - statement(op, "(", to_non_uniform_aware_expression(ptr), ", ", to_expression(val), ");"); + statement(op, "(", to_atomic_ptr_expression(ptr), ", ", to_expression(val), ");"); flush_all_atomic_capable_variables(); + + auto &type = expression_type(ptr); + if (type.basetype == SPIRType::UInt64 || type.basetype == SPIRType::Int64) + require_extension_internal("GL_EXT_shader_atomic_int64"); break; } @@ -13892,7 +14042,10 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) increment = "-1"; emit_op(ops[0], ops[1], - join(op, "(", to_non_uniform_aware_expression(ops[2]), ", ", increment, ")"), false); + join(op, "(", to_atomic_ptr_expression(ops[2]), ", ", increment, ")"), false); + + if (type.basetype == SPIRType::UInt64 || type.basetype == SPIRType::Int64) + require_extension_internal("GL_EXT_shader_atomic_int64"); } flush_all_atomic_capable_variables(); @@ -13911,9 +14064,13 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) { const char *op = check_atomic_image(ops[2]) ? "imageAtomicAdd" : "atomicAdd"; forced_temporaries.insert(ops[1]); - auto expr = join(op, "(", to_non_uniform_aware_expression(ops[2]), ", -", to_enclosed_expression(ops[5]), ")"); + auto expr = join(op, "(", to_atomic_ptr_expression(ops[2]), ", -", to_enclosed_expression(ops[5]), ")"); emit_op(ops[0], ops[1], expr, should_forward(ops[2]) && should_forward(ops[5])); flush_all_atomic_capable_variables(); + + auto &type = get(ops[0]); + if (type.basetype == SPIRType::UInt64 || type.basetype == SPIRType::Int64) + require_extension_internal("GL_EXT_shader_atomic_int64"); break; } @@ -14717,6 +14874,20 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) break; } + case OpExtInstWithForwardRefsKHR: + { + uint32_t extension_set = ops[2]; + auto ext = get(extension_set).ext; + if (ext != SPIRExtension::SPV_debug_info && + ext != SPIRExtension::NonSemanticShaderDebugInfo && + ext != SPIRExtension::NonSemanticGeneric) + { + SPIRV_CROSS_THROW("Unexpected use of ExtInstWithForwardRefsKHR."); + } + + break; + } + case OpExtInst: { uint32_t extension_set = ops[2]; @@ -14757,7 +14928,7 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) SPIRV_CROSS_THROW("Debug printf is only supported in Vulkan GLSL.\n"); require_extension_internal("GL_EXT_debug_printf"); auto &format_string = get(ops[4]).str; - string expr = join("debugPrintfEXT(\"", format_string, "\""); + string expr = join(backend.printf_function, "(\"", format_string, "\""); for (uint32_t i = 5; i < length; i++) { expr += ", "; @@ -14956,6 +15127,9 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) case OpGroupNonUniformLogicalXor: case OpGroupNonUniformQuadSwap: case OpGroupNonUniformQuadBroadcast: + case OpGroupNonUniformQuadAllKHR: + case OpGroupNonUniformQuadAnyKHR: + case OpGroupNonUniformRotateKHR: emit_subgroup_op(instruction); break; @@ -15175,8 +15349,8 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) case OpConvertUToPtr: { auto &type = get(ops[0]); - if (type.storage != StorageClassPhysicalStorageBufferEXT) - SPIRV_CROSS_THROW("Only StorageClassPhysicalStorageBufferEXT is supported by OpConvertUToPtr."); + if (type.storage != StorageClassPhysicalStorageBuffer) + SPIRV_CROSS_THROW("Only StorageClassPhysicalStorageBuffer is supported by OpConvertUToPtr."); auto &in_type = expression_type(ops[2]); if (in_type.vecsize == 2) @@ -15191,8 +15365,8 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) { auto &type = get(ops[0]); auto &ptr_type = expression_type(ops[2]); - if (ptr_type.storage != StorageClassPhysicalStorageBufferEXT) - SPIRV_CROSS_THROW("Only StorageClassPhysicalStorageBufferEXT is supported by OpConvertPtrToU."); + if (ptr_type.storage != StorageClassPhysicalStorageBuffer) + SPIRV_CROSS_THROW("Only StorageClassPhysicalStorageBuffer is supported by OpConvertPtrToU."); if (type.vecsize == 2) require_extension_internal("GL_EXT_buffer_reference_uvec2"); @@ -15291,6 +15465,124 @@ void CompilerGLSL::emit_instruction(const Instruction &instruction) break; } + case OpCooperativeMatrixLengthKHR: + { + // Need to synthesize a dummy temporary, since the SPIR-V opcode is based on the type. + uint32_t result_type = ops[0]; + uint32_t id = ops[1]; + set( + id, join(type_to_glsl(get(result_type)), + "(", type_to_glsl(get(ops[2])), "(0).length())"), + result_type, true); + break; + } + + case OpCooperativeMatrixLoadKHR: + { + // Spec contradicts itself if stride is optional or not. + if (length < 5) + SPIRV_CROSS_THROW("Stride is not provided."); + + uint32_t result_type = ops[0]; + uint32_t id = ops[1]; + emit_uninitialized_temporary_expression(result_type, id); + + auto expr = to_expression(ops[2]); + pair split_expr; + if (!is_forcing_recompilation()) + split_expr = split_coopmat_pointer(expr); + + string layout_expr; + if (const auto *layout = maybe_get(ops[3])) + { + if (!layout->specialization) + { + if (layout->scalar() == spv::CooperativeMatrixLayoutColumnMajorKHR) + layout_expr = "gl_CooperativeMatrixLayoutColumnMajor"; + else + layout_expr = "gl_CooperativeMatrixLayoutRowMajor"; + } + } + + if (layout_expr.empty()) + layout_expr = join("int(", to_expression(ops[3]), ")"); + + statement("coopMatLoad(", + to_expression(id), ", ", + split_expr.first, ", ", + split_expr.second, ", ", + to_expression(ops[4]), ", ", + layout_expr, ");"); + + register_read(id, ops[2], false); + break; + } + + case OpCooperativeMatrixStoreKHR: + { + // Spec contradicts itself if stride is optional or not. + if (length < 4) + SPIRV_CROSS_THROW("Stride is not provided."); + + // SPIR-V and GLSL don't agree how to pass the expression. + // In SPIR-V it's a pointer, but in GLSL it's reference to array + index. + + auto expr = to_expression(ops[0]); + pair split_expr; + if (!is_forcing_recompilation()) + split_expr = split_coopmat_pointer(expr); + + string layout_expr; + if (const auto *layout = maybe_get(ops[2])) + { + if (!layout->specialization) + { + if (layout->scalar() == spv::CooperativeMatrixLayoutColumnMajorKHR) + layout_expr = "gl_CooperativeMatrixLayoutColumnMajor"; + else + layout_expr = "gl_CooperativeMatrixLayoutRowMajor"; + } + } + + if (layout_expr.empty()) + layout_expr = join("int(", to_expression(ops[2]), ")"); + + statement("coopMatStore(", + to_expression(ops[1]), ", ", + split_expr.first, ", ", + split_expr.second, ", ", + to_expression(ops[3]), ", ", + layout_expr, ");"); + + // TODO: Do we care about memory operands? + + register_write(ops[0]); + break; + } + + case OpCooperativeMatrixMulAddKHR: + { + uint32_t result_type = ops[0]; + uint32_t id = ops[1]; + uint32_t A = ops[2]; + uint32_t B = ops[3]; + uint32_t C = ops[4]; + bool forward = should_forward(A) && should_forward(B) && should_forward(C); + emit_op(result_type, id, + join("coopMatMulAdd(", + to_unpacked_expression(A), ", ", + to_unpacked_expression(B), ", ", + to_unpacked_expression(C), ", ", + (length >= 6 ? ops[5] : 0), + ")"), + forward); + + inherit_expression_dependencies(id, A); + inherit_expression_dependencies(id, B); + inherit_expression_dependencies(id, C); + break; + } + default: statement("// unimplemented op ", instruction.op); break; @@ -15689,7 +15981,10 @@ string CompilerGLSL::argument_decl(const SPIRFunction::Parameter &arg) auto &type = expression_type(arg.id); const char *direction = ""; - if (type.pointer) + if (is_pointer(type) && + (type.storage == StorageClassFunction || + type.storage == StorageClassPrivate || + type.storage == StorageClassOutput)) { // If we're passing around block types to function, we really mean reference in a pointer sense, // but DXC does not like inout for mesh blocks, so workaround that. out is technically not correct, @@ -15763,13 +16058,24 @@ string CompilerGLSL::variable_decl(const SPIRVariable &variable) else if (options.force_zero_initialized_variables && type_can_zero_initialize(type)) res += join(" = ", to_zero_initialized_expression(get_variable_data_type_id(variable))); } - else if (variable.initializer && !variable_decl_is_remapped_storage(variable, StorageClassWorkgroup)) + else if (variable.initializer) { - uint32_t expr = variable.initializer; - if (ir.ids[expr].get_type() != TypeUndef) - res += join(" = ", to_initializer_expression(variable)); - else if (options.force_zero_initialized_variables && type_can_zero_initialize(type)) - res += join(" = ", to_zero_initialized_expression(get_variable_data_type_id(variable))); + if (!variable_decl_is_remapped_storage(variable, StorageClassWorkgroup)) + { + uint32_t expr = variable.initializer; + if (ir.ids[expr].get_type() != TypeUndef) + res += join(" = ", to_initializer_expression(variable)); + else if (options.force_zero_initialized_variables && type_can_zero_initialize(type)) + res += join(" = ", to_zero_initialized_expression(get_variable_data_type_id(variable))); + } + else + { + // Workgroup memory requires special handling. First, it can only be Null-Initialized. + // GLSL will handle this with null initializer, while others require more work after the decl + require_extension_internal("GL_EXT_null_initializer"); + if (!backend.constant_null_initializer.empty()) + res += join(" = ", backend.constant_null_initializer); + } } return res; @@ -15849,7 +16155,7 @@ string CompilerGLSL::to_array_size(const SPIRType &type, uint32_t index) string CompilerGLSL::type_to_array_glsl(const SPIRType &type, uint32_t) { - if (type.pointer && type.storage == StorageClassPhysicalStorageBufferEXT && type.basetype != SPIRType::Struct) + if (type.pointer && type.storage == StorageClassPhysicalStorageBuffer && type.basetype != SPIRType::Struct) { // We are using a wrapped pointer type, and we should not emit any array declarations here. return ""; @@ -16124,6 +16430,61 @@ string CompilerGLSL::type_to_glsl(const SPIRType &type, uint32_t id) require_extension_internal("GL_ARB_shader_atomic_counters"); } + const SPIRType *coop_type = &type; + while (is_pointer(*coop_type) || is_array(*coop_type)) + coop_type = &get(coop_type->parent_type); + + if (coop_type->op == spv::OpTypeCooperativeMatrixKHR) + { + require_extension_internal("GL_KHR_cooperative_matrix"); + if (!options.vulkan_semantics) + SPIRV_CROSS_THROW("Cooperative matrix only available in Vulkan."); + // GLSL doesn't support this as spec constant, which makes sense ... + uint32_t use_type = get(coop_type->cooperative.use_id).scalar(); + + const char *use = nullptr; + switch (use_type) + { + case CooperativeMatrixUseMatrixAKHR: + use = "gl_MatrixUseA"; + break; + + case CooperativeMatrixUseMatrixBKHR: + use = "gl_MatrixUseB"; + break; + + case CooperativeMatrixUseMatrixAccumulatorKHR: + use = "gl_MatrixUseAccumulator"; + break; + + default: + SPIRV_CROSS_THROW("Invalid matrix use."); + } + + string scope_expr; + if (const auto *scope = maybe_get(coop_type->cooperative.scope_id)) + { + if (!scope->specialization) + { + require_extension_internal("GL_KHR_memory_scope_semantics"); + if (scope->scalar() == spv::ScopeSubgroup) + scope_expr = "gl_ScopeSubgroup"; + else if (scope->scalar() == spv::ScopeWorkgroup) + scope_expr = "gl_ScopeWorkgroup"; + else + SPIRV_CROSS_THROW("Invalid scope for cooperative matrix."); + } + } + + if (scope_expr.empty()) + scope_expr = to_expression(coop_type->cooperative.scope_id); + + return join("coopmat<", type_to_glsl(get(coop_type->parent_type)), ", ", + scope_expr, ", ", + to_expression(coop_type->cooperative.rows_id), ", ", + to_expression(coop_type->cooperative.columns_id), ", ", use, ">"); + } + if (type.vecsize == 1 && type.columns == 1) // Scalar builtin { switch (type.basetype) @@ -16146,6 +16507,11 @@ string CompilerGLSL::type_to_glsl(const SPIRType &type, uint32_t id) return "atomic_uint"; case SPIRType::Half: return "float16_t"; + case SPIRType::BFloat16: + if (!options.vulkan_semantics) + SPIRV_CROSS_THROW("bfloat16 requires Vulkan semantics."); + require_extension_internal("GL_EXT_bfloat16"); + return "bfloat16_t"; case SPIRType::Float: return "float"; case SPIRType::Double: @@ -16178,6 +16544,11 @@ string CompilerGLSL::type_to_glsl(const SPIRType &type, uint32_t id) return join("uvec", type.vecsize); case SPIRType::Half: return join("f16vec", type.vecsize); + case SPIRType::BFloat16: + if (!options.vulkan_semantics) + SPIRV_CROSS_THROW("bfloat16 requires Vulkan semantics."); + require_extension_internal("GL_EXT_bfloat16"); + return join("bf16vec", type.vecsize); case SPIRType::Float: return join("vec", type.vecsize); case SPIRType::Double: @@ -16353,6 +16724,11 @@ void CompilerGLSL::add_function_overload(const SPIRFunction &func) // but that will not change the signature in GLSL/HLSL, // so strip the pointer type before hashing. uint32_t type_id = get_pointee_type_id(arg.type); + + // Workaround glslang bug. It seems to only consider the base type when resolving overloads. + if (get(type_id).op == spv::OpTypeCooperativeMatrixKHR) + type_id = get(type_id).parent_type; + auto &type = get(type_id); if (!combined_image_samplers.empty()) @@ -16492,6 +16868,7 @@ void CompilerGLSL::emit_function(SPIRFunction &func, const Bitset &return_flags) { // Recursively emit functions which are called. uint32_t id = ops[2]; + emit_function(get(id), ir.meta[ops[1]].decoration.decoration_flags); } } @@ -16530,6 +16907,12 @@ void CompilerGLSL::emit_function(SPIRFunction &func, const Bitset &return_flags) // Comes from MSL which can push global variables as local variables in main function. add_local_variable_name(var.self); statement(variable_decl(var), ";"); + + // "Real" workgroup variables in compute shaders needs extra caretaking. + // They need to be initialized with an extra routine as they come in arbitrary form. + if (var.storage == StorageClassWorkgroup && var.initializer) + emit_workgroup_initialization(var); + var.deferred_declaration = false; } else if (var.storage == StorageClassPrivate) @@ -16636,6 +17019,10 @@ void CompilerGLSL::emit_fixup() } } +void CompilerGLSL::emit_workgroup_initialization(const SPIRVariable &) +{ +} + void CompilerGLSL::flush_phi(BlockID from, BlockID to) { auto &child = get(to); @@ -17869,6 +18256,14 @@ void CompilerGLSL::emit_block_chain(SPIRBlock &block) case SPIRBlock::Unreachable: { + // If the entry point ends with unreachable and has a return value, insert a return + // statement to avoid potential compiler errors from non-void functions without a return value. + if (block.return_value) + { + statement("return ", to_unpacked_expression(block.return_value), ";"); + break; + } + // Avoid emitting false fallthrough, which can happen for // if (cond) break; else discard; inside a case label. // Discard is not always implementable as a terminator. diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_glsl.hpp b/libs/bgfx/3rdparty/spirv-cross/spirv_glsl.hpp index 8a00263..cea150f 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_glsl.hpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_glsl.hpp @@ -297,6 +297,9 @@ class CompilerGLSL : public Compiler float_formatter = formatter; } + // Returns the macro name corresponding to constant id + std::string constant_value_macro_name(uint32_t id) const; + protected: struct ShaderSubgroupSupportHelper { @@ -450,6 +453,7 @@ class CompilerGLSL : public Compiler virtual std::string variable_decl(const SPIRType &type, const std::string &name, uint32_t id = 0); virtual bool variable_decl_is_remapped_storage(const SPIRVariable &var, spv::StorageClass storage) const; virtual std::string to_func_call_arg(const SPIRFunction::Parameter &arg, uint32_t id); + virtual void emit_workgroup_initialization(const SPIRVariable &var); struct TextureFunctionBaseArguments { @@ -622,6 +626,8 @@ class CompilerGLSL : public Compiler const char *uint16_t_literal_suffix = "us"; const char *nonuniform_qualifier = "nonuniformEXT"; const char *boolean_mix_function = "mix"; + const char *printf_function = "debugPrintfEXT"; + std::string constant_null_initializer = ""; SPIRType::BaseType boolean_in_struct_remapped_type = SPIRType::Boolean; bool swizzle_is_function = false; bool shared_is_implied = false; @@ -629,6 +635,7 @@ class CompilerGLSL : public Compiler bool explicit_struct_type = false; bool use_initializer_list = false; bool use_typed_initializer_list = false; + bool requires_matching_array_initializer = false; bool can_declare_struct_inline = true; bool can_declare_arrays_inline = true; bool native_row_major_matrix = true; @@ -679,7 +686,6 @@ class CompilerGLSL : public Compiler const SmallVector &indices); void emit_block_chain(SPIRBlock &block); void emit_hoisted_temporaries(SmallVector> &temporaries); - std::string constant_value_macro_name(uint32_t id); int get_constant_mapping_to_workgroup_component(const SPIRConstant &constant) const; void emit_constant(const SPIRConstant &constant); void emit_specialization_constant_op(const SPIRConstantOp &constant); @@ -695,6 +701,7 @@ class CompilerGLSL : public Compiler void emit_variable_temporary_copies(const SPIRVariable &var); bool should_dereference(uint32_t id); + bool should_dereference_caller_param(uint32_t id); bool should_forward(uint32_t id) const; bool should_suppress_usage_tracking(uint32_t id) const; void emit_mix_op(uint32_t result_type, uint32_t id, uint32_t left, uint32_t right, uint32_t lerp); @@ -762,7 +769,7 @@ class CompilerGLSL : public Compiler spv::StorageClass get_expression_effective_storage_class(uint32_t ptr); virtual bool access_chain_needs_stage_io_builtin_translation(uint32_t base); - virtual void check_physical_type_cast(std::string &expr, const SPIRType *type, uint32_t physical_type); + virtual bool check_physical_type_cast(std::string &expr, const SPIRType *type, uint32_t physical_type); virtual bool prepare_access_chain_for_scalar_access(std::string &expr, const SPIRType &type, spv::StorageClass storage, bool &is_packed); @@ -792,8 +799,9 @@ class CompilerGLSL : public Compiler std::string declare_temporary(uint32_t type, uint32_t id); void emit_uninitialized_temporary(uint32_t type, uint32_t id); SPIRExpression &emit_uninitialized_temporary_expression(uint32_t type, uint32_t id); - void append_global_func_args(const SPIRFunction &func, uint32_t index, SmallVector &arglist); + virtual void append_global_func_args(const SPIRFunction &func, uint32_t index, SmallVector &arglist); std::string to_non_uniform_aware_expression(uint32_t id); + std::string to_atomic_ptr_expression(uint32_t id); std::string to_expression(uint32_t id, bool register_expression_read = true); std::string to_composite_constructor_expression(const SPIRType &parent_type, uint32_t id, bool block_like_type); std::string to_rerolled_array_expression(const SPIRType &parent_type, const std::string &expr, const SPIRType &type); diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_hlsl.cpp b/libs/bgfx/3rdparty/spirv-cross/spirv_hlsl.cpp index de37087..1ec4cb7 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_hlsl.cpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_hlsl.cpp @@ -1117,7 +1117,9 @@ void CompilerHLSL::emit_interface_block_in_struct(const SPIRVariable &var, unord else { auto decl_type = type; - if (execution.model == ExecutionModelMeshEXT || has_decoration(var.self, DecorationPerVertexKHR)) + if (execution.model == ExecutionModelMeshEXT || + (execution.model == ExecutionModelGeometry && var.storage == StorageClassInput) || + has_decoration(var.self, DecorationPerVertexKHR)) { decl_type.array.erase(decl_type.array.begin()); decl_type.array_size_literal.erase(decl_type.array_size_literal.begin()); @@ -1834,7 +1836,7 @@ void CompilerHLSL::emit_resources() if (!output_variables.empty() || !active_output_builtins.empty()) { sort(output_variables.begin(), output_variables.end(), variable_compare); - require_output = !is_mesh_shader; + require_output = !(is_mesh_shader || execution.model == ExecutionModelGeometry); statement(is_mesh_shader ? "struct gl_MeshPerVertexEXT" : "struct SPIRV_Cross_Output"); begin_scope(); @@ -2476,12 +2478,14 @@ void CompilerHLSL::analyze_meshlet_writes() set_decoration(op_type, DecorationPerPrimitiveEXT); auto &arr = set(op_arr, type); + arr.op = OpTypeArray; arr.parent_type = type.self; arr.array.push_back(per_primitive ? execution.output_primitives : execution.output_vertices); arr.array_size_literal.push_back(true); auto &ptr = set(op_ptr, arr); ptr.parent_type = arr.self; + ptr.op = OpTypePointer; ptr.pointer = true; ptr.pointer_depth++; ptr.storage = StorageClassOutput; @@ -2676,6 +2680,83 @@ void CompilerHLSL::emit_mesh_tasks(SPIRBlock &block) } } +void CompilerHLSL::emit_geometry_stream_append() +{ + begin_scope(); + statement("SPIRV_Cross_Output stage_output;"); + + active_output_builtins.for_each_bit( + [&](uint32_t i) + { + if (i == BuiltInPointSize && hlsl_options.shader_model > 30) + return; + switch (static_cast(i)) + { + case BuiltInClipDistance: + for (uint32_t clip = 0; clip < clip_distance_count; clip++) + statement("stage_output.gl_ClipDistance", clip / 4, ".", "xyzw"[clip & 3], " = gl_ClipDistance[", + clip, "];"); + break; + case BuiltInCullDistance: + for (uint32_t cull = 0; cull < cull_distance_count; cull++) + statement("stage_output.gl_CullDistance", cull / 4, ".", "xyzw"[cull & 3], " = gl_CullDistance[", + cull, "];"); + break; + case BuiltInSampleMask: + statement("stage_output.gl_SampleMask = gl_SampleMask[0];"); + break; + default: + { + auto builtin_expr = builtin_to_glsl(static_cast(i), StorageClassOutput); + statement("stage_output.", builtin_expr, " = ", builtin_expr, ";"); + } + break; + } + }); + + ir.for_each_typed_id( + [&](uint32_t, SPIRVariable &var) + { + auto &type = this->get(var.basetype); + bool block = has_decoration(type.self, DecorationBlock); + + if (var.storage != StorageClassOutput) + return; + + if (!var.remapped_variable && type.pointer && !is_builtin_variable(var) && + interface_variable_exists_in_entry_point(var.self)) + { + if (block) + { + auto type_name = to_name(type.self); + auto var_name = to_name(var.self); + for (uint32_t mbr_idx = 0; mbr_idx < uint32_t(type.member_types.size()); mbr_idx++) + { + auto mbr_name = to_member_name(type, mbr_idx); + auto flat_name = join(type_name, "_", mbr_name); + statement("stage_output.", flat_name, " = ", var_name, ".", mbr_name, ";"); + } + } + else + { + auto name = to_name(var.self); + if (hlsl_options.shader_model <= 30 && get_entry_point().model == ExecutionModelFragment) + { + string output_filler; + for (uint32_t size = type.vecsize; size < 4; ++size) + output_filler += ", 0.0"; + statement("stage_output.", name, " = float4(", name, output_filler, ");"); + } + else + statement("stage_output.", name, " = ", name, ";"); + } + } + }); + + statement("geometry_stream.Append(stage_output);"); + end_scope(); +} + void CompilerHLSL::emit_buffer_block(const SPIRVariable &var) { auto &type = get(var.basetype); @@ -2938,6 +3019,8 @@ string CompilerHLSL::get_inner_entry_point_name() const return "frag_main"; else if (execution.model == ExecutionModelGLCompute) return "comp_main"; + else if (execution.model == ExecutionModelGeometry) + return "geom_main"; else if (execution.model == ExecutionModelMeshEXT) return "mesh_main"; else if (execution.model == ExecutionModelTaskEXT) @@ -2946,6 +3029,25 @@ string CompilerHLSL::get_inner_entry_point_name() const SPIRV_CROSS_THROW("Unsupported execution model."); } +uint32_t CompilerHLSL::input_vertices_from_execution_mode(spirv_cross::SPIREntryPoint &execution) const +{ + uint32_t input_vertices = 1; + + if (execution.flags.get(ExecutionModeInputLines)) + input_vertices = 2; + else if (execution.flags.get(ExecutionModeInputLinesAdjacency)) + input_vertices = 4; + else if (execution.flags.get(ExecutionModeInputTrianglesAdjacency)) + input_vertices = 6; + else if (execution.flags.get(ExecutionModeTriangles)) + input_vertices = 3; + else if (execution.flags.get(ExecutionModeInputPoints)) + input_vertices = 1; + else + SPIRV_CROSS_THROW("Unsupported execution model."); + return input_vertices; +} + void CompilerHLSL::emit_function_prototype(SPIRFunction &func, const Bitset &return_flags) { if (func.self != ir.default_entry_point) @@ -3039,6 +3141,38 @@ void CompilerHLSL::emit_function_prototype(SPIRFunction &func, const Bitset &ret var->parameter = &arg; } + if ((func.self == ir.default_entry_point || func.emits_geometry) && + get_entry_point().model == ExecutionModelGeometry) + { + auto &execution = get_entry_point(); + + uint32_t input_vertices = input_vertices_from_execution_mode(execution); + + const char *prim; + if (execution.flags.get(ExecutionModeInputLinesAdjacency)) + prim = "lineadj"; + else if (execution.flags.get(ExecutionModeInputLines)) + prim = "line"; + else if (execution.flags.get(ExecutionModeInputTrianglesAdjacency)) + prim = "triangleadj"; + else if (execution.flags.get(ExecutionModeTriangles)) + prim = "triangle"; + else + prim = "point"; + + const char *stream_type; + if (execution.flags.get(ExecutionModeOutputPoints)) + stream_type = "PointStream"; + else if (execution.flags.get(ExecutionModeOutputLineStrip)) + stream_type = "LineStream"; + else + stream_type = "TriangleStream"; + + if (func.self == ir.default_entry_point) + arglist.push_back(join(prim, " SPIRV_Cross_Input stage_input[", input_vertices, "]")); + arglist.push_back(join("inout ", stream_type, " ", "geometry_stream")); + } + decl += merge(arglist); decl += ")"; statement(decl); @@ -3048,13 +3182,50 @@ void CompilerHLSL::emit_hlsl_entry_point() { SmallVector arguments; - if (require_input) + if (require_input && get_entry_point().model != ExecutionModelGeometry) arguments.push_back("SPIRV_Cross_Input stage_input"); auto &execution = get_entry_point(); + uint32_t input_vertices = 1; + switch (execution.model) { + case ExecutionModelGeometry: + { + input_vertices = input_vertices_from_execution_mode(execution); + + string prim; + if (execution.flags.get(ExecutionModeInputLinesAdjacency)) + prim = "lineadj"; + else if (execution.flags.get(ExecutionModeInputLines)) + prim = "line"; + else if (execution.flags.get(ExecutionModeInputTrianglesAdjacency)) + prim = "triangleadj"; + else if (execution.flags.get(ExecutionModeTriangles)) + prim = "triangle"; + else + prim = "point"; + + string stream_type; + if (execution.flags.get(ExecutionModeOutputPoints)) + { + stream_type = "PointStream"; + } + else if (execution.flags.get(ExecutionModeOutputLineStrip)) + { + stream_type = "LineStream"; + } + else + { + stream_type = "TriangleStream"; + } + + statement("[maxvertexcount(", execution.output_vertices, ")]"); + arguments.push_back(join(prim, " SPIRV_Cross_Input stage_input[", input_vertices, "]")); + arguments.push_back(join("inout ", stream_type, " ", "geometry_stream")); + break; + } case ExecutionModelTaskEXT: case ExecutionModelMeshEXT: case ExecutionModelGLCompute: @@ -3357,18 +3528,24 @@ void CompilerHLSL::emit_hlsl_entry_point() } else { - statement(name, " = stage_input.", name, ";"); + if (execution.model == ExecutionModelGeometry) + { + statement("for (int i = 0; i < ", input_vertices, "; i++)"); + begin_scope(); + statement(name, "[i] = stage_input[i].", name, ";"); + end_scope(); + } + else + statement(name, " = stage_input.", name, ";"); } } } }); // Run the shader. - if (execution.model == ExecutionModelVertex || - execution.model == ExecutionModelFragment || - execution.model == ExecutionModelGLCompute || - execution.model == ExecutionModelMeshEXT || - execution.model == ExecutionModelTaskEXT) + if (execution.model == ExecutionModelVertex || execution.model == ExecutionModelFragment || + execution.model == ExecutionModelGLCompute || execution.model == ExecutionModelMeshEXT || + execution.model == ExecutionModelGeometry || execution.model == ExecutionModelTaskEXT) { // For mesh shaders, we receive special arguments that we must pass down as function arguments. // HLSL does not support proper reference types for passing these IO blocks, @@ -3376,8 +3553,16 @@ void CompilerHLSL::emit_hlsl_entry_point() SmallVector arglist; auto &func = get(ir.default_entry_point); // The arguments are marked out, avoid detecting reads and emitting inout. + for (auto &arg : func.arguments) arglist.push_back(to_expression(arg.id, false)); + + if (execution.model == ExecutionModelGeometry) + { + arglist.push_back("stage_input"); + arglist.push_back("geometry_stream"); + } + statement(get_inner_entry_point_name(), "(", merge(arglist), ");"); } else @@ -4204,6 +4389,14 @@ bool CompilerHLSL::emit_complex_bitcast(uint32_t, uint32_t, uint32_t) return false; } +void CompilerHLSL::append_global_func_args(const SPIRFunction &func, uint32_t index, SmallVector &arglist) +{ + CompilerGLSL::append_global_func_args(func, index, arglist); + + if (func.emits_geometry) + arglist.push_back("geometry_stream"); +} + string CompilerHLSL::bitcast_glsl_op(const SPIRType &out_type, const SPIRType &in_type) { if (out_type.basetype == SPIRType::UInt && in_type.basetype == SPIRType::Int) @@ -6592,6 +6785,16 @@ void CompilerHLSL::emit_instruction(const Instruction &instruction) statement("SetMeshOutputCounts(", to_unpacked_expression(ops[0]), ", ", to_unpacked_expression(ops[1]), ");"); break; } + case OpEmitVertex: + { + emit_geometry_stream_append(); + break; + } + case OpEndPrimitive: + { + statement("geometry_stream.RestartStrip();"); + break; + } default: CompilerGLSL::emit_instruction(instruction); break; @@ -6810,6 +7013,9 @@ string CompilerHLSL::compile() if (get_execution_model() == ExecutionModelMeshEXT) analyze_meshlet_writes(); + if (get_execution_model() == ExecutionModelGeometry) + discover_geometry_emitters(); + // Subpass input needs SV_Position. if (need_subpass_input) active_input_builtins.set(BuiltInFragCoord); diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_hlsl.hpp b/libs/bgfx/3rdparty/spirv-cross/spirv_hlsl.hpp index 3dc89cc..4303bb7 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_hlsl.hpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_hlsl.hpp @@ -231,6 +231,7 @@ class CompilerHLSL : public CompilerGLSL std::string image_type_hlsl(const SPIRType &type, uint32_t id); std::string image_type_hlsl_modern(const SPIRType &type, uint32_t id); std::string image_type_hlsl_legacy(const SPIRType &type, uint32_t id); + uint32_t input_vertices_from_execution_mode(SPIREntryPoint &execution) const; void emit_function_prototype(SPIRFunction &func, const Bitset &return_flags) override; void emit_hlsl_entry_point(); void emit_header() override; @@ -259,6 +260,8 @@ class CompilerHLSL : public CompilerGLSL std::string to_interpolation_qualifiers(const Bitset &flags) override; std::string bitcast_glsl_op(const SPIRType &result_type, const SPIRType &argument_type) override; bool emit_complex_bitcast(uint32_t result_type, uint32_t id, uint32_t op0) override; + void append_global_func_args(const SPIRFunction &func, uint32_t index, SmallVector &arglist) override; + std::string to_func_call_arg(const SPIRFunction::Parameter &arg, uint32_t id) override; std::string to_sampler_expression(uint32_t id); std::string to_resource_binding(const SPIRVariable &var); @@ -286,6 +289,7 @@ class CompilerHLSL : public CompilerGLSL uint32_t base_offset = 0) override; void emit_rayquery_function(const char *commited, const char *candidate, const uint32_t *ops); void emit_mesh_tasks(SPIRBlock &block) override; + void emit_geometry_stream_append(); const char *to_storage_qualifiers_glsl(const SPIRVariable &var) override; void replace_illegal_names() override; diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_msl.cpp b/libs/bgfx/3rdparty/spirv-cross/spirv_msl.cpp index 50b215e..53f74f1 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_msl.cpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_msl.cpp @@ -272,16 +272,22 @@ void CompilerMSL::build_implicit_builtins() (active_input_builtins.get(BuiltInVertexId) || active_input_builtins.get(BuiltInVertexIndex) || active_input_builtins.get(BuiltInBaseVertex) || active_input_builtins.get(BuiltInInstanceId) || active_input_builtins.get(BuiltInInstanceIndex) || active_input_builtins.get(BuiltInBaseInstance)); - bool need_local_invocation_index = (msl_options.emulate_subgroups && active_input_builtins.get(BuiltInSubgroupId)) || is_mesh_shader(); + bool need_local_invocation_index = + (msl_options.emulate_subgroups && active_input_builtins.get(BuiltInSubgroupId)) || is_mesh_shader() || + needs_workgroup_zero_init || needs_local_invocation_index; bool need_workgroup_size = msl_options.emulate_subgroups && active_input_builtins.get(BuiltInNumSubgroups); bool force_frag_depth_passthrough = get_execution_model() == ExecutionModelFragment && !uses_explicit_early_fragment_test() && need_subpass_input && msl_options.enable_frag_depth_builtin && msl_options.input_attachment_is_ds_attachment; + bool need_point_size = + msl_options.enable_point_size_builtin && msl_options.enable_point_size_default && + get_execution_model() == ExecutionModelVertex; if (need_subpass_input || need_sample_pos || need_subgroup_mask || need_vertex_params || need_tesc_params || need_tese_params || need_multiview || need_dispatch_base || need_vertex_base_params || need_grid_params || needs_sample_id || needs_subgroup_invocation_id || needs_subgroup_size || needs_helper_invocation || - has_additional_fixed_sample_mask() || need_local_invocation_index || need_workgroup_size || force_frag_depth_passthrough || is_mesh_shader()) + has_additional_fixed_sample_mask() || need_local_invocation_index || need_workgroup_size || + force_frag_depth_passthrough || need_point_size || is_mesh_shader()) { bool has_frag_coord = false; bool has_sample_id = false; @@ -299,6 +305,7 @@ void CompilerMSL::build_implicit_builtins() bool has_local_invocation_index = false; bool has_workgroup_size = false; bool has_frag_depth = false; + bool has_point_size = false; uint32_t workgroup_id_type = 0; ir.for_each_typed_id([&](uint32_t, SPIRVariable &var) { @@ -306,6 +313,22 @@ void CompilerMSL::build_implicit_builtins() return; if (!interface_variable_exists_in_entry_point(var.self)) return; + + auto &type = this->get(var.basetype); + if (need_point_size && has_decoration(type.self, DecorationBlock)) + { + const auto member_count = static_cast(type.member_types.size()); + for (uint32_t i = 0; i < member_count; i++) + { + if (get_member_decoration(type.self, i, DecorationBuiltIn) == BuiltInPointSize) + { + has_point_size = true; + active_output_builtins.set(BuiltInPointSize); + break; + } + } + } + if (!has_decoration(var.self, DecorationBuiltIn)) return; @@ -328,6 +351,12 @@ void CompilerMSL::build_implicit_builtins() } } + if (builtin == BuiltInPointSize) + { + has_point_size = true; + active_output_builtins.set(BuiltInPointSize); + } + if (builtin == BuiltInPrimitivePointIndicesEXT || builtin == BuiltInPrimitiveLineIndicesEXT || builtin == BuiltInPrimitiveTriangleIndicesEXT) @@ -953,6 +982,34 @@ void CompilerMSL::build_implicit_builtins() mark_implicit_builtin(StorageClassOutput, BuiltInFragDepth, var_id); active_output_builtins.set(BuiltInFragDepth); } + + if (!has_point_size && need_point_size) + { + uint32_t offset = ir.increase_bound_by(3); + uint32_t type_id = offset; + uint32_t type_ptr_id = offset + 1; + uint32_t var_id = offset + 2; + + // Create gl_PointSize + SPIRType float_type { OpTypeFloat }; + float_type.basetype = SPIRType::Float; + float_type.width = 32; + float_type.vecsize = 1; + set(type_id, float_type); + + SPIRType float_type_ptr_in = float_type; + float_type_ptr_in.op = spv::OpTypePointer; + float_type_ptr_in.pointer = true; + float_type_ptr_in.pointer_depth++; + float_type_ptr_in.parent_type = type_id; + float_type_ptr_in.storage = StorageClassOutput; + + auto &ptr_in_type = set(type_ptr_id, float_type_ptr_in); + ptr_in_type.self = type_id; + set(var_id, type_ptr_id, StorageClassOutput); + set_decoration(var_id, DecorationBuiltIn, BuiltInPointSize); + mark_implicit_builtin(StorageClassOutput, BuiltInPointSize, var_id); + } } if (needs_swizzle_buffer_def) @@ -1003,6 +1060,7 @@ void CompilerMSL::build_implicit_builtins() // If we're returning a struct from a vertex-like entry point, we must return a position attribute. bool need_position = (get_execution_model() == ExecutionModelVertex || is_tese_shader()) && !capture_output_to_buffer && !get_is_rasterization_disabled() && + !msl_options.auto_disable_rasterization && !active_output_builtins.get(BuiltInPosition); if (need_position) @@ -1039,6 +1097,10 @@ void CompilerMSL::build_implicit_builtins() }); need_position = has_output && !active_output_builtins.get(BuiltInPosition); } + else if (!active_output_builtins.get(BuiltInPosition) && msl_options.auto_disable_rasterization) + { + is_rasterization_disabled = true; + } if (need_position) { @@ -1593,6 +1655,7 @@ string CompilerMSL::compile() backend.basic_int16_type = "short"; backend.basic_uint16_type = "ushort"; backend.boolean_mix_function = "select"; + backend.printf_function = "os_log_default.log"; backend.swizzle_is_function = false; backend.shared_is_implied = false; backend.use_initializer_list = true; @@ -1606,7 +1669,7 @@ string CompilerMSL::compile() backend.nonuniform_qualifier = ""; backend.support_small_type_sampling_result = true; backend.force_merged_mesh_block = false; - backend.force_gl_in_out_block = get_execution_model() == ExecutionModelMeshEXT; + backend.force_gl_in_out_block = false; backend.supports_empty_struct = true; backend.support_64bit_switch = true; backend.boolean_in_struct_remapped_type = SPIRType::Short; @@ -1644,6 +1707,7 @@ string CompilerMSL::compile() analyze_image_and_sampler_usage(); analyze_sampled_image_usage(); analyze_interlocked_resource_usage(); + analyze_workgroup_variables(); preprocess_op_codes(); build_implicit_builtins(); @@ -1794,6 +1858,8 @@ void CompilerMSL::preprocess_op_codes() capture_output_to_buffer = true; } + if (preproc.needs_local_invocation_index) + needs_local_invocation_index = true; if (preproc.needs_subgroup_invocation_id) needs_subgroup_invocation_id = true; if (preproc.needs_subgroup_size) @@ -2147,6 +2213,36 @@ void CompilerMSL::extract_global_variables_from_function(uint32_t func_id, std:: break; } + case OpGroupNonUniformRotateKHR: + { + // Add the correct invocation ID for calculating clustered rotate case. + if (i.length > 5) + added_arg_ids.insert(static_cast(evaluate_constant_u32(ops[2])) == ScopeSubgroup + ? builtin_subgroup_invocation_id_id : builtin_local_invocation_index_id); + break; + } + + case OpGroupNonUniformFAdd: + case OpGroupNonUniformFMul: + case OpGroupNonUniformFMin: + case OpGroupNonUniformFMax: + case OpGroupNonUniformIAdd: + case OpGroupNonUniformIMul: + case OpGroupNonUniformSMin: + case OpGroupNonUniformSMax: + case OpGroupNonUniformUMin: + case OpGroupNonUniformUMax: + case OpGroupNonUniformBitwiseAnd: + case OpGroupNonUniformBitwiseOr: + case OpGroupNonUniformBitwiseXor: + case OpGroupNonUniformLogicalAnd: + case OpGroupNonUniformLogicalOr: + case OpGroupNonUniformLogicalXor: + if ((get_execution_model() != ExecutionModelFragment || msl_options.supports_msl_version(2, 2)) && + ops[3] == GroupOperationClusteredReduce) + added_arg_ids.insert(builtin_subgroup_invocation_id_id); + break; + case OpDemoteToHelperInvocation: if (needs_manual_helper_invocation_updates() && needs_helper_invocation) added_arg_ids.insert(builtin_helper_invocation_id); @@ -2317,7 +2413,14 @@ void CompilerMSL::extract_global_variables_from_function(uint32_t func_id, std:: v.storage = StorageClassWorkgroup; // Ensure the existing variable has a valid name and the new variable has all the same meta info - set_name(arg_id, ensure_valid_name(to_name(arg_id), "v")); + if (ir.meta[arg_id].decoration.builtin) + { + set_name(arg_id, builtin_to_glsl(bi_type, var.storage)); + } + else + { + set_name(arg_id, ensure_valid_name(to_name(arg_id), "v")); + } ir.meta[next_id] = ir.meta[arg_id]; } else if (is_builtin && has_decoration(p_type->self, DecorationBlock)) @@ -3182,41 +3285,62 @@ void CompilerMSL::add_composite_member_variable_to_interface_block(StorageClass string mbr_name = ensure_valid_name(append_member_name(mbr_name_qual, var_type, mbr_idx) + (mbr_is_indexable ? join("_", i) : ""), "m"); set_member_name(ib_type.self, ib_mbr_idx, mbr_name); + // The SPIRV location of interface variable, used to obtain the initial + // MSL location (the location variable) and interface matching + uint32_t ir_location = UINT32_MAX; + bool has_member_loc_decor = has_member_decoration(var_type.self, mbr_idx, DecorationLocation); + bool has_var_loc_decor = has_decoration(var.self, DecorationLocation); + uint32_t orig_vecsize = UINT32_MAX; + + // If we haven't established a location base yet, do so here. + if (location == UINT32_MAX) + { + if (has_member_loc_decor) + ir_location = get_member_decoration(var_type.self, mbr_idx, DecorationLocation); + else if (has_var_loc_decor) + ir_location = get_accumulated_member_location(var, mbr_idx, meta.strip_array); + else if (is_builtin) + { + if (is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin)) + ir_location = inputs_by_builtin[builtin].location; + else if (capture_output_to_buffer && storage == StorageClassOutput && outputs_by_builtin.count(builtin)) + ir_location = outputs_by_builtin[builtin].location; + } + } + // Once we determine the location of the first member within nested structures, // from a var of the topmost structure, the remaining flattened members of // the nested structures will have consecutive location values. At this point, // we've recursively tunnelled into structs, arrays, and matrices, and are // down to a single location for each member now. - if (!is_builtin && location != UINT32_MAX) - { - set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location); - mark_location_as_used_by_shader(location, *usable_type, storage); - location++; - } - else if (has_member_decoration(var_type.self, mbr_idx, DecorationLocation)) - { - location = get_member_decoration(var_type.self, mbr_idx, DecorationLocation) + i; - set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location); - mark_location_as_used_by_shader(location, *usable_type, storage); - location++; - } - else if (has_decoration(var.self, DecorationLocation)) - { - location = get_accumulated_member_location(var, mbr_idx, meta.strip_array) + i; - set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location); - mark_location_as_used_by_shader(location, *usable_type, storage); - location++; - } - else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin)) + if (location == UINT32_MAX && ir_location != UINT32_MAX) + location = ir_location + i; + + if (storage == StorageClassInput && (has_member_loc_decor || has_var_loc_decor)) { - location = inputs_by_builtin[builtin].location + i; - set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location); - mark_location_as_used_by_shader(location, *usable_type, storage); - location++; + uint32_t component = 0; + uint32_t orig_mbr_type_id = usable_type->self; + + if (has_member_loc_decor) + component = get_member_decoration(var_type.self, mbr_idx, DecorationComponent); + + var.basetype = ensure_correct_input_type(var.basetype, location, component, 0, meta.strip_array); + mbr_type_id = ensure_correct_input_type(usable_type->self, location, component, 0, meta.strip_array); + + // For members of the composite interface block, we only change the interface block type + // when interface matching happens. In the meantime, we store the original vector size + // and insert a swizzle when loading from metal interface block (see fixup below) + if (mbr_type_id != orig_mbr_type_id) + orig_vecsize = get(orig_mbr_type_id).vecsize; + + if (storage == StorageClassInput && pull_model_inputs.count(var.self)) + ib_type.member_types[ib_mbr_idx] = build_msl_interpolant_type(mbr_type_id, is_noperspective); + else + ib_type.member_types[ib_mbr_idx] = mbr_type_id; } - else if (is_builtin && capture_output_to_buffer && storage == StorageClassOutput && outputs_by_builtin.count(builtin)) + + if ((!is_builtin && location != UINT32_MAX) || (is_builtin && ir_location != UINT32_MAX)) { - location = outputs_by_builtin[builtin].location + i; set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location); mark_location_as_used_by_shader(location, *usable_type, storage); location++; @@ -3256,6 +3380,7 @@ void CompilerMSL::add_composite_member_variable_to_interface_block(StorageClass case StorageClassInput: entry_func.fixup_hooks_in.push_back([=, &var]() { string lerp_call; + string swizzle; if (pull_model_inputs.count(var.self)) { if (is_centroid) @@ -3265,7 +3390,9 @@ void CompilerMSL::add_composite_member_variable_to_interface_block(StorageClass else lerp_call = ".interpolate_at_center()"; } - statement(var_chain, " = ", ib_var_ref, ".", mbr_name, lerp_call, ";"); + if (orig_vecsize != UINT32_MAX) + swizzle = vector_swizzle(orig_vecsize, 0); + statement(var_chain, " = ", ib_var_ref, ".", mbr_name, lerp_call, swizzle, ";"); }); break; @@ -3333,6 +3460,55 @@ void CompilerMSL::add_plain_member_variable_to_interface_block(StorageClass stor qual_var_name += ".interpolate_at_center()"; } + // The SPIRV location of interface variable, used to obtain the initial + // MSL location (the location variable) and interface matching + uint32_t ir_location = UINT32_MAX; + bool has_member_loc_decor = has_member_decoration(var_type.self, mbr_idx, DecorationLocation); + bool has_var_loc_decor = has_decoration(var.self, DecorationLocation); + uint32_t orig_vecsize = UINT32_MAX; + + if (has_member_loc_decor) + ir_location = get_member_decoration(var_type.self, mbr_idx, DecorationLocation); + else if (has_var_loc_decor) + ir_location = get_accumulated_member_location(var, mbr_idx, meta.strip_array); + else if (is_builtin) + { + if (is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin)) + ir_location = inputs_by_builtin[builtin].location; + else if (capture_output_to_buffer && storage == StorageClassOutput && outputs_by_builtin.count(builtin)) + ir_location = outputs_by_builtin[builtin].location; + } + + // Once we determine the location of the first member within nested structures, + // from a var of the topmost structure, the remaining flattened members of + // the nested structures will have consecutive location values. At this point, + // we've recursively tunnelled into structs, arrays, and matrices, and are + // down to a single location for each member now. + if (location == UINT32_MAX && ir_location != UINT32_MAX) + location = ir_location; + + if (storage == StorageClassInput && (has_member_loc_decor || has_var_loc_decor)) + { + uint32_t component = 0; + uint32_t orig_mbr_type_id = mbr_type_id; + + if (has_member_loc_decor) + component = get_member_decoration(var_type.self, mbr_idx, DecorationComponent); + + mbr_type_id = ensure_correct_input_type(mbr_type_id, location, component, 0, meta.strip_array); + + // For members of the composite interface block, we only change the interface block type + // when interface matching happens. In the meantime, we store the original vector size + // and insert a swizzle when loading from metal interface block (see fixup below) + if (mbr_type_id != orig_mbr_type_id) + orig_vecsize = get(orig_mbr_type_id).vecsize; + + if (storage == StorageClassInput && pull_model_inputs.count(var.self)) + ib_type.member_types[ib_mbr_idx] = build_msl_interpolant_type(mbr_type_id, is_noperspective); + else + ib_type.member_types[ib_mbr_idx] = mbr_type_id; + } + bool flatten_stage_out = false; string var_chain = var_chain_qual + "." + to_member_name(var_type, mbr_idx); if (is_builtin && !meta.strip_array) @@ -3348,7 +3524,11 @@ void CompilerMSL::add_plain_member_variable_to_interface_block(StorageClass stor { case StorageClassInput: entry_func.fixup_hooks_in.push_back([=]() { - statement(var_chain, " = ", qual_var_name, ";"); + string swizzle; + // Insert swizzle for widened interface block vector from interface matching + if (orig_vecsize != UINT32_MAX) + swizzle = vector_swizzle(orig_vecsize, 0); + statement(var_chain, " = ", qual_var_name, swizzle, ";"); }); break; @@ -3364,60 +3544,8 @@ void CompilerMSL::add_plain_member_variable_to_interface_block(StorageClass stor } } - // Once we determine the location of the first member within nested structures, - // from a var of the topmost structure, the remaining flattened members of - // the nested structures will have consecutive location values. At this point, - // we've recursively tunnelled into structs, arrays, and matrices, and are - // down to a single location for each member now. - if (!is_builtin && location != UINT32_MAX) - { - set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location); - mark_location_as_used_by_shader(location, get(mbr_type_id), storage); - location += type_to_location_count(get(mbr_type_id)); - } - else if (has_member_decoration(var_type.self, mbr_idx, DecorationLocation)) + if ((!is_builtin && location != UINT32_MAX) || (is_builtin && ir_location != UINT32_MAX)) { - location = get_member_decoration(var_type.self, mbr_idx, DecorationLocation); - uint32_t comp = get_member_decoration(var_type.self, mbr_idx, DecorationComponent); - if (storage == StorageClassInput) - { - mbr_type_id = ensure_correct_input_type(mbr_type_id, location, comp, 0, meta.strip_array); - var_type.member_types[mbr_idx] = mbr_type_id; - if (storage == StorageClassInput && pull_model_inputs.count(var.self)) - ib_type.member_types[ib_mbr_idx] = build_msl_interpolant_type(mbr_type_id, is_noperspective); - else - ib_type.member_types[ib_mbr_idx] = mbr_type_id; - } - set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location); - mark_location_as_used_by_shader(location, get(mbr_type_id), storage); - location += type_to_location_count(get(mbr_type_id)); - } - else if (has_decoration(var.self, DecorationLocation)) - { - location = get_accumulated_member_location(var, mbr_idx, meta.strip_array); - if (storage == StorageClassInput) - { - mbr_type_id = ensure_correct_input_type(mbr_type_id, location, 0, 0, meta.strip_array); - var_type.member_types[mbr_idx] = mbr_type_id; - if (storage == StorageClassInput && pull_model_inputs.count(var.self)) - ib_type.member_types[ib_mbr_idx] = build_msl_interpolant_type(mbr_type_id, is_noperspective); - else - ib_type.member_types[ib_mbr_idx] = mbr_type_id; - } - set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location); - mark_location_as_used_by_shader(location, get(mbr_type_id), storage); - location += type_to_location_count(get(mbr_type_id)); - } - else if (is_builtin && is_tessellation_shader() && storage == StorageClassInput && inputs_by_builtin.count(builtin)) - { - location = inputs_by_builtin[builtin].location; - set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location); - mark_location_as_used_by_shader(location, get(mbr_type_id), storage); - location += type_to_location_count(get(mbr_type_id)); - } - else if (is_builtin && capture_output_to_buffer && storage == StorageClassOutput && outputs_by_builtin.count(builtin)) - { - location = outputs_by_builtin[builtin].location; set_member_decoration(ib_type.self, ib_mbr_idx, DecorationLocation, location); mark_location_as_used_by_shader(location, get(mbr_type_id), storage); location += type_to_location_count(get(mbr_type_id)); @@ -3720,6 +3848,20 @@ void CompilerMSL::add_variable_to_interface_block(StorageClass storage, const st return; } + // Tesselation stages pass I/O via buffer content which may contain nested structs. + // Ensure the vector sizes of any nested struct members within these input variables match + // the vector sizes of the corresponding output variables from the previous pipeline stage. + // This adjustment is handled here instead of ensure_correct_input_type() in order to + // perform the necessary recursive processing. + if (storage == StorageClassInput && var_type.basetype == SPIRType::Struct && + ((is_tesc_shader() && msl_options.multi_patch_workgroup) || + (is_tese_shader() && msl_options.raw_buffer_tese_input)) && + has_decoration(var.self, DecorationLocation)) + { + uint32_t locn = get_decoration(var.self, DecorationLocation); + ensure_struct_members_valid_vecsizes(get_variable_data_type(var), locn); + } + if (storage == StorageClassInput && has_decoration(var.self, DecorationPerVertexKHR)) SPIRV_CROSS_THROW("PerVertexKHR decoration is not supported in MSL."); @@ -3915,6 +4057,43 @@ void CompilerMSL::add_variable_to_interface_block(StorageClass storage, const st } } +// Recursively iterate into the input struct type, and adjust the vecsize +// of any nested members, based on location info provided through the API. +// The location parameter is modified recursively. +void CompilerMSL::ensure_struct_members_valid_vecsizes(SPIRType &struct_type, uint32_t &location) +{ + assert(struct_type.basetype == SPIRType::Struct); + + auto mbr_cnt = struct_type.member_types.size(); + for (size_t mbr_idx = 0; mbr_idx < mbr_cnt; mbr_idx++) + { + auto mbr_type_id = struct_type.member_types[mbr_idx]; + auto &mbr_type = get(mbr_type_id); + + if (mbr_type.basetype == SPIRType::Struct) + ensure_struct_members_valid_vecsizes(mbr_type, location); + else + { + auto p_va = inputs_by_location.find({location, 0}); + if (p_va != end(inputs_by_location) && p_va->second.vecsize > mbr_type.vecsize) + { + // Set a new member type into the struct type, and all its parent types. + auto new_mbr_type_id = build_extended_vector_type(mbr_type_id, p_va->second.vecsize); + for (auto *p_type = &struct_type; p_type; p_type = maybe_get(p_type->parent_type)) + p_type->member_types[mbr_idx] = new_mbr_type_id; + } + + // Calc location of next member + uint32_t loc_cnt = mbr_type.columns; + auto dim_cnt = mbr_type.array.size(); + for (uint32_t i = 0; i < dim_cnt; i++) + loc_cnt *= to_array_size_literal(mbr_type, i); + + location += loc_cnt; + } + } +} + // Fix up the mapping of variables to interface member indices, which is used to compile access chains // for per-vertex variables in a tessellation control shader. void CompilerMSL::fix_up_interface_member_indices(StorageClass storage, uint32_t ib_type_id) @@ -4219,8 +4398,9 @@ uint32_t CompilerMSL::add_interface_block(StorageClass storage, bool patch) // If the entry point should return the output struct, set the entry function // to return the output interface struct, otherwise to return nothing. // Watch out for the rare case where the terminator of the last entry point block is a - // Kill, instead of a Return. Based on SPIR-V's block-domination rules, we assume that - // any block that has a Kill will also have a terminating Return, except the last block. + // Kill or Unreachable, instead of a Return. Based on SPIR-V's block-domination rules, + // we assume that any block that has a Kill will also have a terminating Return, except + // the last block. // Indicate the output var requires early initialization. bool ep_should_return_output = !get_is_rasterization_disabled(); uint32_t rtn_id = ep_should_return_output ? ib_var_id : 0; @@ -4230,7 +4410,8 @@ uint32_t CompilerMSL::add_interface_block(StorageClass storage, bool patch) for (auto &blk_id : entry_func.blocks) { auto &blk = get(blk_id); - if (blk.terminator == SPIRBlock::Return || (blk.terminator == SPIRBlock::Kill && blk_id == entry_func.blocks.back())) + auto last_blk_return = blk.terminator == SPIRBlock::Kill || blk.terminator == SPIRBlock::Unreachable; + if (blk.terminator == SPIRBlock::Return || (last_blk_return && blk_id == entry_func.blocks.back())) blk.return_value = rtn_id; } vars_needing_early_declaration.push_back(ib_var_id); @@ -5543,6 +5724,10 @@ void CompilerMSL::emit_header() if (suppress_incompatible_pointer_types_discard_qualifiers) statement("#pragma clang diagnostic ignored \"-Wincompatible-pointer-types-discards-qualifiers\""); + // Disable warning about "sometimes unitialized" when zero-initializing simple threadgroup variables + if (suppress_sometimes_unitialized) + statement("#pragma clang diagnostic ignored \"-Wsometimes-uninitialized\""); + // Disable warning about missing braces for array template to make arrays a value type if (spv_function_implementations.count(SPVFuncImplUnsafeArray) != 0) statement("#pragma clang diagnostic ignored \"-Wmissing-braces\""); @@ -5789,7 +5974,6 @@ void CompilerMSL::emit_custom_functions() if (!msl_options.supports_msl_version(2)) SPIRV_CROSS_THROW( "spvDynamicImageSampler requires default-constructible texture objects, which require MSL 2.0."); - spv_function_implementations.insert(SPVFuncImplForwardArgs); spv_function_implementations.insert(SPVFuncImplTextureSwizzle); if (msl_options.swizzle_texture_samples) spv_function_implementations.insert(SPVFuncImplGatherSwizzle); @@ -5803,16 +5987,22 @@ void CompilerMSL::emit_custom_functions() spv_function_implementations.insert(SPVFuncImplConvertYCbCrBT2020); } - for (uint32_t i = SPVFuncImplChromaReconstructNearest2Plane; - i <= SPVFuncImplChromaReconstructLinear420XMidpointYMidpoint3Plane; i++) - if (spv_function_implementations.count(static_cast(i))) - spv_function_implementations.insert(SPVFuncImplForwardArgs); + if (spv_function_implementations.count(SPVFuncImplGatherSwizzle) || + spv_function_implementations.count(SPVFuncImplGatherConstOffsets)) + { + spv_function_implementations.insert(SPVFuncImplGatherReturn); + } + + if (spv_function_implementations.count(SPVFuncImplGatherCompareSwizzle) || + spv_function_implementations.count(SPVFuncImplGatherCompareConstOffsets)) + { + spv_function_implementations.insert(SPVFuncImplGatherCompareReturn); + } if (spv_function_implementations.count(SPVFuncImplTextureSwizzle) || spv_function_implementations.count(SPVFuncImplGatherSwizzle) || spv_function_implementations.count(SPVFuncImplGatherCompareSwizzle)) { - spv_function_implementations.insert(SPVFuncImplForwardArgs); spv_function_implementations.insert(SPVFuncImplGetSwizzle); } @@ -5820,6 +6010,17 @@ void CompilerMSL::emit_custom_functions() { switch (spv_func) { + case SPVFuncImplSMod: + statement("// Implementation of signed integer mod accurate to SPIR-V specification"); + statement("template"); + statement("inline Tx spvSMod(Tx x, Ty y)"); + begin_scope(); + statement("Tx remainder = x - y * (x / y);"); + statement("return select(Tx(remainder + y), remainder, remainder == 0 || (x >= 0) == (y >= 0));"); + end_scope(); + statement(""); + break; + case SPVFuncImplMod: statement("// Implementation of the GLSL mod() function, which is slightly different than Metal fmod()"); statement("template"); @@ -6282,23 +6483,6 @@ void CompilerMSL::emit_custom_functions() statement(""); break; - case SPVFuncImplForwardArgs: - statement("template struct spvRemoveReference { typedef T type; };"); - statement("template struct spvRemoveReference { typedef T type; };"); - statement("template struct spvRemoveReference { typedef T type; };"); - statement("template inline constexpr thread T&& spvForward(thread typename " - "spvRemoveReference::type& x)"); - begin_scope(); - statement("return static_cast(x);"); - end_scope(); - statement("template inline constexpr thread T&& spvForward(thread typename " - "spvRemoveReference::type&& x)"); - begin_scope(); - statement("return static_cast(x);"); - end_scope(); - statement(""); - break; - case SPVFuncImplGetSwizzle: statement("enum class spvSwizzle : uint"); begin_scope(); @@ -6356,11 +6540,22 @@ void CompilerMSL::emit_custom_functions() statement(""); break; + case SPVFuncImplGatherReturn: + statement("template"); + statement("using spvGatherReturn = decltype(declval().gather(declval(), declval()...));"); + statement(""); + break; + + case SPVFuncImplGatherCompareReturn: + statement("template"); + statement("using spvGatherCompareReturn = decltype(declval().gather_compare(declval(), declval()...));"); + statement(""); + break; + case SPVFuncImplGatherSwizzle: statement("// Wrapper function that swizzles texture gathers."); - statement("template class Tex, " - "typename... Ts>"); - statement("inline vec spvGatherSwizzle(const thread Tex& t, sampler s, " + statement("template"); + statement("inline spvGatherReturn spvGatherSwizzle(const thread Tex& t, sampler s, " "uint sw, component c, Ts... params) METAL_CONST_ARG(c)"); begin_scope(); statement("if (sw)"); @@ -6370,17 +6565,17 @@ void CompilerMSL::emit_custom_functions() statement("case spvSwizzle::none:"); statement(" break;"); statement("case spvSwizzle::zero:"); - statement(" return vec(0, 0, 0, 0);"); + statement(" return spvGatherReturn(0, 0, 0, 0);"); statement("case spvSwizzle::one:"); - statement(" return vec(1, 1, 1, 1);"); + statement(" return spvGatherReturn(1, 1, 1, 1);"); statement("case spvSwizzle::red:"); - statement(" return t.gather(s, spvForward(params)..., component::x);"); + statement(" return t.gather(s, params..., component::x);"); statement("case spvSwizzle::green:"); - statement(" return t.gather(s, spvForward(params)..., component::y);"); + statement(" return t.gather(s, params..., component::y);"); statement("case spvSwizzle::blue:"); - statement(" return t.gather(s, spvForward(params)..., component::z);"); + statement(" return t.gather(s, params..., component::z);"); statement("case spvSwizzle::alpha:"); - statement(" return t.gather(s, spvForward(params)..., component::w);"); + statement(" return t.gather(s, params..., component::w);"); end_scope(); end_scope(); // texture::gather insists on its component parameter being a constant @@ -6388,13 +6583,13 @@ void CompilerMSL::emit_custom_functions() statement("switch (c)"); begin_scope(); statement("case component::x:"); - statement(" return t.gather(s, spvForward(params)..., component::x);"); + statement(" return t.gather(s, params..., component::x);"); statement("case component::y:"); - statement(" return t.gather(s, spvForward(params)..., component::y);"); + statement(" return t.gather(s, params..., component::y);"); statement("case component::z:"); - statement(" return t.gather(s, spvForward(params)..., component::z);"); + statement(" return t.gather(s, params..., component::z);"); statement("case component::w:"); - statement(" return t.gather(s, spvForward(params)..., component::w);"); + statement(" return t.gather(s, params..., component::w);"); end_scope(); end_scope(); statement(""); @@ -6402,10 +6597,8 @@ void CompilerMSL::emit_custom_functions() case SPVFuncImplGatherCompareSwizzle: statement("// Wrapper function that swizzles depth texture gathers."); - statement("template class Tex, " - "typename... Ts>"); - statement("inline vec spvGatherCompareSwizzle(const thread Tex& t, sampler " - "s, uint sw, Ts... params) "); + statement("template"); + statement("inline spvGatherCompareReturn spvGatherCompareSwizzle(const thread Tex& t, sampler s, uint sw, Ts... params)"); begin_scope(); statement("if (sw)"); begin_scope(); @@ -6418,12 +6611,12 @@ void CompilerMSL::emit_custom_functions() statement("case spvSwizzle::green:"); statement("case spvSwizzle::blue:"); statement("case spvSwizzle::alpha:"); - statement(" return vec(0, 0, 0, 0);"); + statement(" return spvGatherCompareReturn(0, 0, 0, 0);"); statement("case spvSwizzle::one:"); - statement(" return vec(1, 1, 1, 1);"); + statement(" return spvGatherCompareReturn(1, 1, 1, 1);"); end_scope(); end_scope(); - statement("return t.gather_compare(s, spvForward(params)...);"); + statement("return t.gather_compare(s, params...);"); end_scope(); statement(""); break; @@ -6433,33 +6626,32 @@ void CompilerMSL::emit_custom_functions() for (uint32_t i = 0; i < texture_addr_space_count; i++) { statement("// Wrapper function that processes a ", texture_addr_spaces[i], " texture gather with a constant offset array."); - statement("template class Tex, " - "typename Toff, typename... Tp>"); - statement("inline vec spvGatherConstOffsets(const ", texture_addr_spaces[i], " Tex& t, sampler s, " + statement("template"); + statement("inline spvGatherReturn spvGatherConstOffsets(const ", texture_addr_spaces[i], " Tex& t, sampler s, " "Toff coffsets, component c, Tp... params) METAL_CONST_ARG(c)"); begin_scope(); - statement("vec rslts[4];"); + statement("spvGatherReturn rslts[4];"); statement("for (uint i = 0; i < 4; i++)"); begin_scope(); statement("switch (c)"); begin_scope(); // Work around texture::gather() requiring its component parameter to be a constant expression statement("case component::x:"); - statement(" rslts[i] = t.gather(s, spvForward(params)..., coffsets[i], component::x);"); + statement(" rslts[i] = t.gather(s, params..., coffsets[i], component::x);"); statement(" break;"); statement("case component::y:"); - statement(" rslts[i] = t.gather(s, spvForward(params)..., coffsets[i], component::y);"); + statement(" rslts[i] = t.gather(s, params..., coffsets[i], component::y);"); statement(" break;"); statement("case component::z:"); - statement(" rslts[i] = t.gather(s, spvForward(params)..., coffsets[i], component::z);"); + statement(" rslts[i] = t.gather(s, params..., coffsets[i], component::z);"); statement(" break;"); statement("case component::w:"); - statement(" rslts[i] = t.gather(s, spvForward(params)..., coffsets[i], component::w);"); + statement(" rslts[i] = t.gather(s, params..., coffsets[i], component::w);"); statement(" break;"); end_scope(); end_scope(); // Pull all values from the i0j0 component of each gather footprint - statement("return vec(rslts[0].w, rslts[1].w, rslts[2].w, rslts[3].w);"); + statement("return spvGatherReturn(rslts[0].w, rslts[1].w, rslts[2].w, rslts[3].w);"); end_scope(); statement(""); } @@ -6470,18 +6662,17 @@ void CompilerMSL::emit_custom_functions() for (uint32_t i = 0; i < texture_addr_space_count; i++) { statement("// Wrapper function that processes a ", texture_addr_spaces[i], " texture gather with a constant offset array."); - statement("template class Tex, " - "typename Toff, typename... Tp>"); - statement("inline vec spvGatherCompareConstOffsets(const ", texture_addr_spaces[i], " Tex& t, sampler s, " + statement("template"); + statement("inline spvGatherCompareReturn spvGatherCompareConstOffsets(const ", texture_addr_spaces[i], " Tex& t, sampler s, " "Toff coffsets, Tp... params)"); begin_scope(); - statement("vec rslts[4];"); + statement("spvGatherCompareReturn rslts[4];"); statement("for (uint i = 0; i < 4; i++)"); begin_scope(); - statement(" rslts[i] = t.gather_compare(s, spvForward(params)..., coffsets[i]);"); + statement(" rslts[i] = t.gather_compare(s, params..., coffsets[i]);"); end_scope(); // Pull all values from the i0j0 component of each gather footprint - statement("return vec(rslts[0].w, rslts[1].w, rslts[2].w, rslts[3].w);"); + statement("return spvGatherCompareReturn(rslts[0].w, rslts[1].w, rslts[2].w, rslts[3].w);"); end_scope(); statement(""); } @@ -6826,6 +7017,135 @@ void CompilerMSL::emit_custom_functions() statement(""); break; + case SPVFuncImplSubgroupRotate: + statement("template"); + statement("inline T spvSubgroupRotate(T value, ushort delta)"); + begin_scope(); + if (msl_options.use_quadgroup_operation()) + statement("return quad_shuffle_rotate_down(value, delta);"); + else + statement("return simd_shuffle_rotate_down(value, delta);"); + end_scope(); + statement(""); + statement("template<>"); + statement("inline bool spvSubgroupRotate(bool value, ushort delta)"); + begin_scope(); + if (msl_options.use_quadgroup_operation()) + statement("return !!quad_shuffle_rotate_down((ushort)value, delta);"); + else + statement("return !!simd_shuffle_rotate_down((ushort)value, delta);"); + end_scope(); + statement(""); + statement("template"); + statement("inline vec spvSubgroupRotate(vec value, ushort delta)"); + begin_scope(); + if (msl_options.use_quadgroup_operation()) + statement("return (vec)quad_shuffle_rotate_down((vec)value, delta);"); + else + statement("return (vec)simd_shuffle_rotate_down((vec)value, delta);"); + end_scope(); + statement(""); + break; + + // C++ disallows partial specializations of function templates, + // hence the use of a struct. + // clang-format off +#define FUNC_SUBGROUP_CLUSTERED(spv, msl, combine, op, ident) \ + case SPVFuncImplSubgroupClustered##spv: \ + statement("template"); \ + statement("struct spvClustered" #spv "Detail;"); \ + statement(""); \ + statement("// Base cases"); \ + statement("template<>"); \ + statement("struct spvClustered" #spv "Detail<1, 0>"); \ + begin_scope(); \ + statement("template"); \ + statement("static T op(T value, uint)"); \ + begin_scope(); \ + statement("return value;"); \ + end_scope(); \ + end_scope_decl(); \ + statement(""); \ + statement("template"); \ + statement("struct spvClustered" #spv "Detail<1, offset>"); \ + begin_scope(); \ + statement("template"); \ + statement("static T op(T value, uint lid)"); \ + begin_scope(); \ + statement("// If the target lane is inactive, then return identity."); \ + if (msl_options.use_quadgroup_operation()) \ + statement("if (!extract_bits((quad_vote::vote_t)quad_active_threads_mask(), (lid ^ offset), 1))"); \ + else \ + statement("if (!extract_bits(as_type((simd_vote::vote_t)simd_active_threads_mask())[(lid ^ offset) / 32], (lid ^ offset) % 32, 1))"); \ + statement(" return " #ident ";"); \ + if (msl_options.use_quadgroup_operation()) \ + statement("return quad_shuffle_xor(value, offset);"); \ + else \ + statement("return simd_shuffle_xor(value, offset);"); \ + end_scope(); \ + end_scope_decl(); \ + statement(""); \ + statement("template<>"); \ + statement("struct spvClustered" #spv "Detail<4, 0>"); \ + begin_scope(); \ + statement("template"); \ + statement("static T op(T value, uint)"); \ + begin_scope(); \ + statement("return quad_" #msl "(value);"); \ + end_scope(); \ + end_scope_decl(); \ + statement(""); \ + statement("template"); \ + statement("struct spvClustered" #spv "Detail<4, offset>"); \ + begin_scope(); \ + statement("template"); \ + statement("static T op(T value, uint lid)"); \ + begin_scope(); \ + statement("// Here, we care if any of the lanes in the quad are active."); \ + statement("uint quad_mask = extract_bits(as_type((simd_vote::vote_t)simd_active_threads_mask())[(lid ^ offset) / 32], ((lid ^ offset) % 32) & ~3, 4);"); \ + statement("if (!quad_mask)"); \ + statement(" return " #ident ";"); \ + statement("// But we need to make sure we shuffle from an active lane."); \ + if (msl_options.use_quadgroup_operation()) \ + SPIRV_CROSS_THROW("Subgroup size with quadgroup operation cannot exceed 4."); \ + else \ + statement("return simd_shuffle(quad_" #msl "(value), ((lid ^ offset) & ~3) | ctz(quad_mask));"); \ + end_scope(); \ + end_scope_decl(); \ + statement(""); \ + statement("// General case"); \ + statement("template"); \ + statement("struct spvClustered" #spv "Detail"); \ + begin_scope(); \ + statement("template"); \ + statement("static T op(T value, uint lid)"); \ + begin_scope(); \ + statement("return " combine(msl, op, "spvClustered" #spv "Detail::op(value, lid)", "spvClustered" #spv "Detail::op(value, lid)") ";"); \ + end_scope(); \ + end_scope_decl(); \ + statement(""); \ + statement("template"); \ + statement("T spvClustered_" #msl "(T value, uint lid)"); \ + begin_scope(); \ + statement("return spvClustered" #spv "Detail::op(value, lid);"); \ + end_scope(); \ + statement(""); \ + break +#define BINOP(msl, op, l, r) l " " #op " " r +#define BINFUNC(msl, op, l, r) #msl "(" l ", " r ")" + + FUNC_SUBGROUP_CLUSTERED(Add, sum, BINOP, +, 0); + FUNC_SUBGROUP_CLUSTERED(Mul, product, BINOP, *, 1); + FUNC_SUBGROUP_CLUSTERED(Min, min, BINFUNC, , numeric_limits::max()); + FUNC_SUBGROUP_CLUSTERED(Max, max, BINFUNC, , numeric_limits::min()); + FUNC_SUBGROUP_CLUSTERED(And, and, BINOP, &, ~T(0)); + FUNC_SUBGROUP_CLUSTERED(Or, or, BINOP, |, 0); + FUNC_SUBGROUP_CLUSTERED(Xor, xor, BINOP, ^, 0); + // clang-format on +#undef FUNC_SUBGROUP_CLUSTERED +#undef BINOP +#undef BINFUNC + case SPVFuncImplQuadBroadcast: statement("template"); statement("inline T spvQuadBroadcast(T value, uint lane)"); @@ -6925,8 +7245,8 @@ void CompilerMSL::emit_custom_functions() "samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); - statement("ycbcr.br = plane1.sample(samp, coord, spvForward(options)...).rg;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); + statement("ycbcr.br = plane1.sample(samp, coord, options...).rg;"); statement("return ycbcr;"); end_scope(); statement(""); @@ -6938,9 +7258,9 @@ void CompilerMSL::emit_custom_functions() "texture2d plane2, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); - statement("ycbcr.b = plane1.sample(samp, coord, spvForward(options)...).r;"); - statement("ycbcr.r = plane2.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); + statement("ycbcr.b = plane1.sample(samp, coord, options...).r;"); + statement("ycbcr.r = plane2.sample(samp, coord, options...).r;"); statement("return ycbcr;"); end_scope(); statement(""); @@ -6952,15 +7272,15 @@ void CompilerMSL::emit_custom_functions() "plane1, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("if (fract(coord.x * plane1.get_width()) != 0.0)"); begin_scope(); - statement("ycbcr.br = vec(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 0)), 0.5).rg);"); + statement("ycbcr.br = vec(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., int2(1, 0)), 0.5).rg);"); end_scope(); statement("else"); begin_scope(); - statement("ycbcr.br = plane1.sample(samp, coord, spvForward(options)...).rg;"); + statement("ycbcr.br = plane1.sample(samp, coord, options...).rg;"); end_scope(); statement("return ycbcr;"); end_scope(); @@ -6973,18 +7293,18 @@ void CompilerMSL::emit_custom_functions() "plane1, texture2d plane2, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("if (fract(coord.x * plane1.get_width()) != 0.0)"); begin_scope(); - statement("ycbcr.b = T(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 0)), 0.5).r);"); - statement("ycbcr.r = T(mix(plane2.sample(samp, coord, spvForward(options)...), " - "plane2.sample(samp, coord, spvForward(options)..., int2(1, 0)), 0.5).r);"); + statement("ycbcr.b = T(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., int2(1, 0)), 0.5).r);"); + statement("ycbcr.r = T(mix(plane2.sample(samp, coord, options...), " + "plane2.sample(samp, coord, options..., int2(1, 0)), 0.5).r);"); end_scope(); statement("else"); begin_scope(); - statement("ycbcr.b = plane1.sample(samp, coord, spvForward(options)...).r;"); - statement("ycbcr.r = plane2.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.b = plane1.sample(samp, coord, options...).r;"); + statement("ycbcr.r = plane2.sample(samp, coord, options...).r;"); end_scope(); statement("return ycbcr;"); end_scope(); @@ -6997,10 +7317,10 @@ void CompilerMSL::emit_custom_functions() "plane1, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("int2 offs = int2(fract(coord.x * plane1.get_width()) != 0.0 ? 1 : -1, 0);"); - statement("ycbcr.br = vec(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., offs), 0.25).rg);"); + statement("ycbcr.br = vec(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., offs), 0.25).rg);"); statement("return ycbcr;"); end_scope(); statement(""); @@ -7012,12 +7332,12 @@ void CompilerMSL::emit_custom_functions() "plane1, texture2d plane2, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("int2 offs = int2(fract(coord.x * plane1.get_width()) != 0.0 ? 1 : -1, 0);"); - statement("ycbcr.b = T(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., offs), 0.25).r);"); - statement("ycbcr.r = T(mix(plane2.sample(samp, coord, spvForward(options)...), " - "plane2.sample(samp, coord, spvForward(options)..., offs), 0.25).r);"); + statement("ycbcr.b = T(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., offs), 0.25).r);"); + statement("ycbcr.r = T(mix(plane2.sample(samp, coord, options...), " + "plane2.sample(samp, coord, options..., offs), 0.25).r);"); statement("return ycbcr;"); end_scope(); statement(""); @@ -7029,12 +7349,12 @@ void CompilerMSL::emit_custom_functions() "texture2d plane1, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("float2 ab = fract(round(coord * float2(plane0.get_width(), plane0.get_height())) * 0.5);"); - statement("ycbcr.br = vec(mix(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane1.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).rg);"); + statement("ycbcr.br = vec(mix(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane1.sample(samp, coord, options..., int2(0, 1)), " + "plane1.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).rg);"); statement("return ycbcr;"); end_scope(); statement(""); @@ -7046,16 +7366,16 @@ void CompilerMSL::emit_custom_functions() "texture2d plane1, texture2d plane2, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("float2 ab = fract(round(coord * float2(plane0.get_width(), plane0.get_height())) * 0.5);"); - statement("ycbcr.b = T(mix(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane1.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).r);"); - statement("ycbcr.r = T(mix(mix(plane2.sample(samp, coord, spvForward(options)...), " - "plane2.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane2.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane2.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).r);"); + statement("ycbcr.b = T(mix(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane1.sample(samp, coord, options..., int2(0, 1)), " + "plane1.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).r);"); + statement("ycbcr.r = T(mix(mix(plane2.sample(samp, coord, options...), " + "plane2.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane2.sample(samp, coord, options..., int2(0, 1)), " + "plane2.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).r);"); statement("return ycbcr;"); end_scope(); statement(""); @@ -7067,13 +7387,13 @@ void CompilerMSL::emit_custom_functions() "texture2d plane1, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("float2 ab = fract((round(coord * float2(plane0.get_width(), plane0.get_height())) - float2(0.5, " "0)) * 0.5);"); - statement("ycbcr.br = vec(mix(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane1.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).rg);"); + statement("ycbcr.br = vec(mix(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane1.sample(samp, coord, options..., int2(0, 1)), " + "plane1.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).rg);"); statement("return ycbcr;"); end_scope(); statement(""); @@ -7085,17 +7405,17 @@ void CompilerMSL::emit_custom_functions() "texture2d plane1, texture2d plane2, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("float2 ab = fract((round(coord * float2(plane0.get_width(), plane0.get_height())) - float2(0.5, " "0)) * 0.5);"); - statement("ycbcr.b = T(mix(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane1.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).r);"); - statement("ycbcr.r = T(mix(mix(plane2.sample(samp, coord, spvForward(options)...), " - "plane2.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane2.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane2.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).r);"); + statement("ycbcr.b = T(mix(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane1.sample(samp, coord, options..., int2(0, 1)), " + "plane1.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).r);"); + statement("ycbcr.r = T(mix(mix(plane2.sample(samp, coord, options...), " + "plane2.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane2.sample(samp, coord, options..., int2(0, 1)), " + "plane2.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).r);"); statement("return ycbcr;"); end_scope(); statement(""); @@ -7107,13 +7427,13 @@ void CompilerMSL::emit_custom_functions() "texture2d plane1, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("float2 ab = fract((round(coord * float2(plane0.get_width(), plane0.get_height())) - float2(0, " "0.5)) * 0.5);"); - statement("ycbcr.br = vec(mix(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane1.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).rg);"); + statement("ycbcr.br = vec(mix(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane1.sample(samp, coord, options..., int2(0, 1)), " + "plane1.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).rg);"); statement("return ycbcr;"); end_scope(); statement(""); @@ -7125,17 +7445,17 @@ void CompilerMSL::emit_custom_functions() "texture2d plane1, texture2d plane2, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("float2 ab = fract((round(coord * float2(plane0.get_width(), plane0.get_height())) - float2(0, " "0.5)) * 0.5);"); - statement("ycbcr.b = T(mix(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane1.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).r);"); - statement("ycbcr.r = T(mix(mix(plane2.sample(samp, coord, spvForward(options)...), " - "plane2.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane2.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane2.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).r);"); + statement("ycbcr.b = T(mix(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane1.sample(samp, coord, options..., int2(0, 1)), " + "plane1.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).r);"); + statement("ycbcr.r = T(mix(mix(plane2.sample(samp, coord, options...), " + "plane2.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane2.sample(samp, coord, options..., int2(0, 1)), " + "plane2.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).r);"); statement("return ycbcr;"); end_scope(); statement(""); @@ -7147,13 +7467,13 @@ void CompilerMSL::emit_custom_functions() "texture2d plane1, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("float2 ab = fract((round(coord * float2(plane0.get_width(), plane0.get_height())) - float2(0.5, " "0.5)) * 0.5);"); - statement("ycbcr.br = vec(mix(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane1.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).rg);"); + statement("ycbcr.br = vec(mix(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane1.sample(samp, coord, options..., int2(0, 1)), " + "plane1.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).rg);"); statement("return ycbcr;"); end_scope(); statement(""); @@ -7165,17 +7485,17 @@ void CompilerMSL::emit_custom_functions() "texture2d plane1, texture2d plane2, sampler samp, float2 coord, LodOptions... options)"); begin_scope(); statement("vec ycbcr = vec(0, 0, 0, 1);"); - statement("ycbcr.g = plane0.sample(samp, coord, spvForward(options)...).r;"); + statement("ycbcr.g = plane0.sample(samp, coord, options...).r;"); statement("float2 ab = fract((round(coord * float2(plane0.get_width(), plane0.get_height())) - float2(0.5, " "0.5)) * 0.5);"); - statement("ycbcr.b = T(mix(mix(plane1.sample(samp, coord, spvForward(options)...), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane1.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane1.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).r);"); - statement("ycbcr.r = T(mix(mix(plane2.sample(samp, coord, spvForward(options)...), " - "plane2.sample(samp, coord, spvForward(options)..., int2(1, 0)), ab.x), " - "mix(plane2.sample(samp, coord, spvForward(options)..., int2(0, 1)), " - "plane2.sample(samp, coord, spvForward(options)..., int2(1, 1)), ab.x), ab.y).r);"); + statement("ycbcr.b = T(mix(mix(plane1.sample(samp, coord, options...), " + "plane1.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane1.sample(samp, coord, options..., int2(0, 1)), " + "plane1.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).r);"); + statement("ycbcr.r = T(mix(mix(plane2.sample(samp, coord, options...), " + "plane2.sample(samp, coord, options..., int2(1, 0)), ab.x), " + "mix(plane2.sample(samp, coord, options..., int2(0, 1)), " + "plane2.sample(samp, coord, options..., int2(1, 1)), ab.x), ab.y).r);"); statement("return ycbcr;"); end_scope(); statement(""); @@ -7457,10 +7777,8 @@ void CompilerMSL::emit_custom_functions() statement(" ycbcr_samp.get_chroma_filter() == spvChromaFilter::nearest)"); begin_scope(); statement("if (!is_null_texture(plane2))"); - statement(" return spvChromaReconstructNearest(plane0, plane1, plane2, samp, coord,"); - statement(" spvForward(options)...);"); - statement( - "return spvChromaReconstructNearest(plane0, plane1, samp, coord, spvForward(options)...);"); + statement(" return spvChromaReconstructNearest(plane0, plane1, plane2, samp, coord, options...);"); + statement("return spvChromaReconstructNearest(plane0, plane1, samp, coord, options...);"); end_scope(); // if (resolution == 422 || chroma_filter == nearest) statement("switch (ycbcr_samp.get_resolution())"); begin_scope(); @@ -7473,18 +7791,18 @@ void CompilerMSL::emit_custom_functions() statement(" if (!is_null_texture(plane2))"); statement(" return spvChromaReconstructLinear422CositedEven("); statement(" plane0, plane1, plane2, samp,"); - statement(" coord, spvForward(options)...);"); + statement(" coord, options...);"); statement(" return spvChromaReconstructLinear422CositedEven("); statement(" plane0, plane1, samp, coord,"); - statement(" spvForward(options)...);"); + statement(" options...);"); statement("case spvXChromaLocation::midpoint:"); statement(" if (!is_null_texture(plane2))"); statement(" return spvChromaReconstructLinear422Midpoint("); statement(" plane0, plane1, plane2, samp,"); - statement(" coord, spvForward(options)...);"); + statement(" coord, options...);"); statement(" return spvChromaReconstructLinear422Midpoint("); statement(" plane0, plane1, samp, coord,"); - statement(" spvForward(options)...);"); + statement(" options...);"); end_scope(); // switch (x_chroma_offset) end_scope(); // case 422: statement("case spvFormatResolution::_420:"); @@ -7499,18 +7817,18 @@ void CompilerMSL::emit_custom_functions() statement(" if (!is_null_texture(plane2))"); statement(" return spvChromaReconstructLinear420XCositedEvenYCositedEven("); statement(" plane0, plane1, plane2, samp,"); - statement(" coord, spvForward(options)...);"); + statement(" coord, options...);"); statement(" return spvChromaReconstructLinear420XCositedEvenYCositedEven("); statement(" plane0, plane1, samp, coord,"); - statement(" spvForward(options)...);"); + statement(" options...);"); statement("case spvYChromaLocation::midpoint:"); statement(" if (!is_null_texture(plane2))"); statement(" return spvChromaReconstructLinear420XCositedEvenYMidpoint("); statement(" plane0, plane1, plane2, samp,"); - statement(" coord, spvForward(options)...);"); + statement(" coord, options...);"); statement(" return spvChromaReconstructLinear420XCositedEvenYMidpoint("); statement(" plane0, plane1, samp, coord,"); - statement(" spvForward(options)...);"); + statement(" options...);"); end_scope(); // switch (y_chroma_offset) end_scope(); // case x::cosited_even: statement("case spvXChromaLocation::midpoint:"); @@ -7521,31 +7839,30 @@ void CompilerMSL::emit_custom_functions() statement(" if (!is_null_texture(plane2))"); statement(" return spvChromaReconstructLinear420XMidpointYCositedEven("); statement(" plane0, plane1, plane2, samp,"); - statement(" coord, spvForward(options)...);"); + statement(" coord, options...);"); statement(" return spvChromaReconstructLinear420XMidpointYCositedEven("); statement(" plane0, plane1, samp, coord,"); - statement(" spvForward(options)...);"); + statement(" options...);"); statement("case spvYChromaLocation::midpoint:"); statement(" if (!is_null_texture(plane2))"); statement(" return spvChromaReconstructLinear420XMidpointYMidpoint("); statement(" plane0, plane1, plane2, samp,"); - statement(" coord, spvForward(options)...);"); + statement(" coord, options...);"); statement(" return spvChromaReconstructLinear420XMidpointYMidpoint("); statement(" plane0, plane1, samp, coord,"); - statement(" spvForward(options)...);"); + statement(" options...);"); end_scope(); // switch (y_chroma_offset) end_scope(); // case x::midpoint end_scope(); // switch (x_chroma_offset) end_scope(); // case 420: end_scope(); // switch (resolution) end_scope(); // if (multiplanar) - statement("return plane0.sample(samp, coord, spvForward(options)...);"); + statement("return plane0.sample(samp, coord, options...);"); end_scope(); // do_sample() statement("template "); statement("vec sample(float2 coord, LodOptions... options) const thread"); begin_scope(); - statement( - "vec s = spvTextureSwizzle(do_sample(coord, spvForward(options)...), swizzle);"); + statement("vec s = spvTextureSwizzle(do_sample(coord, options...), swizzle);"); statement("if (ycbcr_samp.get_ycbcr_model() == spvYCbCrModelConversion::rgb_identity)"); statement(" return s;"); statement(""); @@ -7784,6 +8101,26 @@ void CompilerMSL::emit_custom_functions() statement(""); break; + case SPVFuncImplAssume: + statement_no_indent("#if defined(__has_builtin)"); + statement_no_indent("#if !defined(SPV_ASSUME) && __has_builtin(__builtin_assume)"); + statement_no_indent("#define SPV_ASSUME(x) __builtin_assume(x);"); + statement_no_indent("#endif"); + statement_no_indent("#if !defined(SPV_EXPECT) && __has_builtin(__builtin_expect)"); + statement_no_indent("#define SPV_EXPECT(x, y) __builtin_expect(x, y);"); + statement_no_indent("#endif"); + statement_no_indent("#endif"); + + statement_no_indent("#ifndef SPV_ASSUME"); + statement_no_indent("#define SPV_ASSUME(x)"); + statement_no_indent("#endif"); + + statement_no_indent("#ifndef SPV_EXPECT"); + statement_no_indent("#define SPV_EXPECT(x, y) x"); + statement_no_indent("#endif"); + + break; + default: break; } @@ -7909,8 +8246,16 @@ void CompilerMSL::emit_specialization_constants_and_structs() { SpecializationConstant wg_x, wg_y, wg_z; ID workgroup_size_id = get_work_group_size_specialization_constants(wg_x, wg_y, wg_z); - bool emitted = false; + if (workgroup_size_id == 0 && is_mesh_shader()) + { + auto &execution = get_entry_point(); + statement("constant uint3 ", builtin_to_glsl(BuiltInWorkgroupSize, StorageClassWorkgroup), + " [[maybe_unused]] = ", "uint3(", execution.workgroup_size.x, ", ", execution.workgroup_size.y, ", ", + execution.workgroup_size.z, ");"); + statement(""); + } + bool emitted = false; unordered_set declared_structs; unordered_set aligned_structs; @@ -8015,14 +8360,18 @@ void CompilerMSL::emit_specialization_constants_and_structs() else if (has_decoration(c.self, DecorationSpecId)) { // Fallback to macro overrides. + uint32_t constant_id = get_decoration(c.self, DecorationSpecId); c.specialization_constant_macro_name = - constant_value_macro_name(get_decoration(c.self, DecorationSpecId)); + constant_value_macro_name(constant_id); statement("#ifndef ", c.specialization_constant_macro_name); statement("#define ", c.specialization_constant_macro_name, " ", constant_expression(c)); statement("#endif"); statement("constant ", sc_type_name, " ", sc_name, " = ", c.specialization_constant_macro_name, ";"); + + // Record the usage of macro + constant_macro_ids.insert(constant_id); } else { @@ -8897,7 +9246,7 @@ void CompilerMSL::fix_up_interpolant_access_chain(const uint32_t *ops, uint32_t // If the physical type of a physical buffer pointer has been changed // to a ulong or ulongn vector, add a cast back to the pointer type. -void CompilerMSL::check_physical_type_cast(std::string &expr, const SPIRType *type, uint32_t physical_type) +bool CompilerMSL::check_physical_type_cast(std::string &expr, const SPIRType *type, uint32_t physical_type) { auto *p_physical_type = maybe_get(physical_type); if (p_physical_type && @@ -8908,7 +9257,10 @@ void CompilerMSL::check_physical_type_cast(std::string &expr, const SPIRType *ty expr += ".x"; expr = join("((", type_to_glsl(*type), ")", expr, ")"); + return true; } + + return false; } // Override for MSL-specific syntax instructions @@ -9124,6 +9476,10 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) break; } + case OpSMod: + MSL_BFOP(spvSMod); + break; + case OpFRem: MSL_BFOP(fmod); break; @@ -9594,6 +9950,9 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) if (needs_frag_discard_checks() && (type.storage == StorageClassStorageBuffer || type.storage == StorageClassUniform)) end_scope(); + if (has_decoration(ops[0], DecorationBuiltIn) && get_decoration(ops[0], DecorationBuiltIn) == BuiltInPointSize) + writes_to_point_size = true; + break; } @@ -9604,9 +9963,9 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) case OpControlBarrier: // In GLSL a memory barrier is often followed by a control barrier. - // But in MSL, memory barriers are also control barriers, so don't + // But in MSL, memory barriers are also control barriers (before MSL 3.2), so don't // emit a simple control barrier if a memory barrier has just been emitted. - if (previous_instruction_opcode != OpMemoryBarrier) + if (previous_instruction_opcode != OpMemoryBarrier || msl_options.supports_msl_version(3, 2)) emit_barrier(ops[0], ops[1], ops[2]); break; @@ -9971,11 +10330,11 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) auto &type = get(ops[0]); auto &input_type = expression_type(ops[2]); - if (opcode != OpBitcast || type.pointer || input_type.pointer) + if (opcode != OpBitcast || is_pointer(type) || is_pointer(input_type)) { string op; - if (type.vecsize == 1 && input_type.vecsize == 1) + if ((type.vecsize == 1 || is_pointer(type)) && (input_type.vecsize == 1 || is_pointer(input_type))) op = join("reinterpret_cast<", type_to_glsl(type), ">(", to_unpacked_expression(ops[2]), ")"); else if (input_type.vecsize == 2) op = join("reinterpret_cast<", type_to_glsl(type), ">(as_type(", to_unpacked_expression(ops[2]), "))"); @@ -10125,6 +10484,27 @@ void CompilerMSL::emit_instruction(const Instruction &instruction) break; } + case OpAssumeTrueKHR: + { + auto condition = ops[0]; + statement(join("SPV_ASSUME(", to_unpacked_expression(condition), ")")); + break; + } + + case OpExpectKHR: + { + auto result_type = ops[0]; + auto ret = ops[1]; + auto value = ops[2]; + auto exp_value = ops[3]; + + auto exp = join("SPV_EXPECT(", to_unpacked_expression(value), ", ", to_unpacked_expression(exp_value), ")"); + emit_op(result_type, ret, exp, should_forward(value), should_forward(exp_value)); + inherit_expression_dependencies(ret, value); + inherit_expression_dependencies(ret, exp_value); + break; + } + default: CompilerGLSL::emit_instruction(instruction); break; @@ -10184,10 +10564,20 @@ void CompilerMSL::emit_barrier(uint32_t id_exe_scope, uint32_t id_mem_scope, uin return; string bar_stmt; - if ((msl_options.is_ios() && msl_options.supports_msl_version(1, 2)) || msl_options.supports_msl_version(2)) - bar_stmt = exe_scope < ScopeSubgroup ? "threadgroup_barrier" : "simdgroup_barrier"; + + if (!id_exe_scope && msl_options.supports_msl_version(3, 2)) + { + // Just took 10 years to get a proper barrier, but hey! + bar_stmt = "atomic_thread_fence"; + } else - bar_stmt = "threadgroup_barrier"; + { + if ((msl_options.is_ios() && msl_options.supports_msl_version(1, 2)) || msl_options.supports_msl_version(2)) + bar_stmt = exe_scope < ScopeSubgroup ? "threadgroup_barrier" : "simdgroup_barrier"; + else + bar_stmt = "threadgroup_barrier"; + } + bar_stmt += "("; uint32_t mem_sem = id_mem_sem ? evaluate_constant_u32(id_mem_sem) : uint32_t(MemorySemanticsMaskNone); @@ -10195,7 +10585,8 @@ void CompilerMSL::emit_barrier(uint32_t id_exe_scope, uint32_t id_mem_scope, uin // Use the | operator to combine flags if we can. if (msl_options.supports_msl_version(1, 2)) { - string mem_flags = ""; + string mem_flags; + // For tesc shaders, this also affects objects in the Output storage class. // Since in Metal, these are placed in a device buffer, we have to sync device memory here. if (is_tesc_shader() || @@ -10236,6 +10627,55 @@ void CompilerMSL::emit_barrier(uint32_t id_exe_scope, uint32_t id_mem_scope, uin bar_stmt += "mem_flags::mem_none"; } + if (!id_exe_scope && msl_options.supports_msl_version(3, 2)) + { + // If there's no device-related memory in the barrier, demote to workgroup scope. + // glslang seems to emit device scope even for memoryBarrierShared(). + if (mem_scope == ScopeDevice && + (mem_sem & (MemorySemanticsUniformMemoryMask | + MemorySemanticsImageMemoryMask | + MemorySemanticsCrossWorkgroupMemoryMask)) == 0) + { + mem_scope = ScopeWorkgroup; + } + + // MSL 3.2 only supports seq_cst or relaxed. + if (mem_sem & (MemorySemanticsAcquireReleaseMask | + MemorySemanticsAcquireMask | + MemorySemanticsReleaseMask | + MemorySemanticsSequentiallyConsistentMask)) + { + bar_stmt += ", memory_order_seq_cst"; + } + else + { + bar_stmt += ", memory_order_relaxed"; + } + + switch (mem_scope) + { + case ScopeDevice: + bar_stmt += ", thread_scope_device"; + break; + + case ScopeWorkgroup: + bar_stmt += ", thread_scope_threadgroup"; + break; + + case ScopeSubgroup: + bar_stmt += ", thread_scope_subgroup"; + break; + + case ScopeInvocation: + bar_stmt += ", thread_scope_thread"; + break; + + default: + // The default argument is device, which is conservative. + break; + } + } + bar_stmt += ");"; statement(bar_stmt); @@ -11337,7 +11777,6 @@ string CompilerMSL::to_function_name(const TextureFunctionNameArguments &args) { bool is_compare = comparison_ids.count(img); add_spv_func_and_recompile(is_compare ? SPVFuncImplGatherCompareConstOffsets : SPVFuncImplGatherConstOffsets); - add_spv_func_and_recompile(SPVFuncImplForwardArgs); return is_compare ? "spvGatherCompareConstOffsets" : "spvGatherConstOffsets"; } @@ -12310,7 +12749,7 @@ string CompilerMSL::to_func_call_arg(const SPIRFunction::Parameter &arg, uint32_ } // Dereference pointer variables where needed. // FIXME: This dereference is actually backwards. We should really just support passing pointer variables between functions. - else if (should_dereference(id)) + else if (should_dereference_caller_param(id)) arg_str += dereference_expression(type, CompilerGLSL::to_func_call_arg(arg, id)); else arg_str += CompilerGLSL::to_func_call_arg(arg, id); @@ -12564,6 +13003,9 @@ void CompilerMSL::emit_fixup() { if (is_vertex_like_shader() && stage_out_var_id && !qual_pos_var_name.empty() && !capture_output_to_buffer) { + if (msl_options.enable_point_size_default && !writes_to_point_size) + statement(builtin_to_glsl(BuiltInPointSize, StorageClassOutput), " = ", format_float(msl_options.default_point_size), ";"); + if (options.vertex.fixup_clipspace) statement(qual_pos_var_name, ".z = (", qual_pos_var_name, ".z + ", qual_pos_var_name, ".w) * 0.5; // Adjust clip-space for Metal"); @@ -13398,12 +13840,23 @@ bool CompilerMSL::uses_explicit_early_fragment_test() string CompilerMSL::get_argument_address_space(const SPIRVariable &argument) { const auto &type = get(argument.basetype); + // BDA is always passed around by value. There is no storage class for the argument itself. + if (is_physical_pointer(type)) + return ""; return get_type_address_space(type, argument.self, true); } -bool CompilerMSL::decoration_flags_signal_volatile(const Bitset &flags) +bool CompilerMSL::decoration_flags_signal_volatile(const Bitset &flags) const { - return flags.get(DecorationVolatile) || flags.get(DecorationCoherent); + // Using volatile for coherent pre-3.2 is definitely not correct, but it's something. + // MSL 3.2 adds actual coherent qualifiers. + return flags.get(DecorationVolatile) || + (flags.get(DecorationCoherent) && !msl_options.supports_msl_version(3, 2)); +} + +bool CompilerMSL::decoration_flags_signal_coherent(const Bitset &flags) const +{ + return flags.get(DecorationCoherent) && msl_options.supports_msl_version(3, 2); } string CompilerMSL::get_type_address_space(const SPIRType &type, uint32_t id, bool argument) @@ -13415,8 +13868,17 @@ string CompilerMSL::get_type_address_space(const SPIRType &type, uint32_t id, bo (has_decoration(type.self, DecorationBlock) || has_decoration(type.self, DecorationBufferBlock))) flags = get_buffer_block_flags(id); else + { flags = get_decoration_bitset(id); + if (type.basetype == SPIRType::Struct && + (has_decoration(type.self, DecorationBlock) || + has_decoration(type.self, DecorationBufferBlock))) + { + flags.merge_or(ir.get_buffer_block_type_flags(type)); + } + } + const char *addr_space = nullptr; switch (type.storage) { @@ -13425,7 +13887,6 @@ string CompilerMSL::get_type_address_space(const SPIRType &type, uint32_t id, bo break; case StorageClassStorageBuffer: - case StorageClassPhysicalStorageBuffer: { // For arguments from variable pointers, we use the write count deduction, so // we should not assume any constness here. Only for global SSBOs. @@ -13433,10 +13894,19 @@ string CompilerMSL::get_type_address_space(const SPIRType &type, uint32_t id, bo if (!var || has_decoration(type.self, DecorationBlock)) readonly = flags.get(DecorationNonWritable); + if (decoration_flags_signal_coherent(flags)) + readonly = false; + addr_space = readonly ? "const device" : "device"; break; } + case StorageClassPhysicalStorageBuffer: + // We cannot fully trust NonWritable coming from glslang due to a bug in buffer_reference handling. + // There isn't much gain in emitting const in C++ languages anyway. + addr_space = "device"; + break; + case StorageClassUniform: case StorageClassUniformConstant: case StorageClassPushConstant: @@ -13525,7 +13995,9 @@ string CompilerMSL::get_type_address_space(const SPIRType &type, uint32_t id, bo addr_space = type.pointer || (argument && type.basetype == SPIRType::ControlPointArray) ? "thread" : ""; } - if (decoration_flags_signal_volatile(flags) && 0 != strcmp(addr_space, "thread")) + if (decoration_flags_signal_coherent(flags) && strcmp(addr_space, "device") == 0) + return join("coherent device"); + else if (decoration_flags_signal_volatile(flags) && strcmp(addr_space, "thread") != 0) return join("volatile ", addr_space); else return addr_space; @@ -15133,19 +15605,24 @@ const char *CompilerMSL::descriptor_address_space(uint32_t id, StorageClass stor string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg) { auto &var = get(arg.id); - auto &type = get_variable_data_type(var); auto &var_type = get(arg.type); StorageClass type_storage = var_type.storage; + // Physical pointer types are passed by pointer, not reference. + auto &data_type = get_variable_data_type(var); + bool passed_by_value = is_physical_pointer(var_type); + auto &type = passed_by_value ? var_type : data_type; + // If we need to modify the name of the variable, make sure we use the original variable. // Our alias is just a shadow variable. uint32_t name_id = var.self; if (arg.alias_global_variable && var.basevariable) name_id = var.basevariable; - bool constref = !arg.alias_global_variable && is_pointer(var_type) && arg.write_count == 0; + bool constref = !arg.alias_global_variable && !passed_by_value && is_pointer(var_type) && arg.write_count == 0; // Framebuffer fetch is plain value, const looks out of place, but it is not wrong. - if (type_is_msl_framebuffer_fetch(type)) + // readonly coming from glslang is not reliable in all cases. + if (type_is_msl_framebuffer_fetch(type) || type_storage == StorageClassPhysicalStorageBuffer) constref = false; else if (type_storage == StorageClassUniformConstant) constref = true; @@ -15174,8 +15651,7 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg) if (var.basevariable && (var.basevariable == stage_in_ptr_var_id || var.basevariable == stage_out_ptr_var_id)) decl = join(cv_qualifier, type_to_glsl(type, arg.id)); - else if (builtin && builtin_type != spv::BuiltInPrimitiveTriangleIndicesEXT && - builtin_type != spv::BuiltInPrimitiveLineIndicesEXT && builtin_type != spv::BuiltInPrimitivePointIndicesEXT) + else if (builtin && !is_mesh_shader()) { // Only use templated array for Clip/Cull distance when feasible. // In other scenarios, we need need to override array length for tess levels (if used as outputs), @@ -15227,7 +15703,7 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg) else { // The type is a pointer type we need to emit cv_qualifier late. - if (is_pointer(type)) + if (is_pointer(data_type)) { decl = type_to_glsl(type, arg.id); if (*cv_qualifier != '\0') @@ -15239,8 +15715,8 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg) } } - if (!builtin && !is_pointer(var_type) && - (type_storage == StorageClassFunction || type_storage == StorageClassGeneric)) + if (passed_by_value || (!builtin && !is_pointer(var_type) && + (type_storage == StorageClassFunction || type_storage == StorageClassGeneric))) { // If the argument is a pure value and not an opaque type, we will pass by value. if (msl_options.force_native_arrays && is_array(type)) @@ -15341,7 +15817,7 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg) // for the reference has to go before the '&', but after the '*'. if (!address_space.empty()) { - if (is_pointer(type)) + if (is_pointer(data_type)) { if (*cv_qualifier == '\0') decl += ' '; @@ -15350,6 +15826,7 @@ string CompilerMSL::argument_decl(const SPIRFunction::Parameter &arg) else decl = join(address_space, " ", decl); } + decl += "&"; decl += " "; decl += to_restrict(name_id, true); @@ -15584,6 +16061,9 @@ const std::unordered_set &CompilerMSL::get_illegal_func_names() { static const unordered_set illegal_func_names = { "main", + "fragment", + "vertex", + "kernel", "saturate", "assert", "fmin3", @@ -16091,6 +16571,9 @@ string CompilerMSL::constant_op_expression(const SPIRConstantOp &cop) { switch (cop.opcode) { + case OpSMod: + add_spv_func_and_recompile(SPVFuncImplSMod); + return join("spvSMod(", to_expression(cop.arguments[0]), ", ", to_expression(cop.arguments[1]), ")"); case OpQuantizeToF16: add_spv_func_and_recompile(SPVFuncImplQuantizeToF16); return join("spvQuantizeToF16(", to_expression(cop.arguments[0]), ")"); @@ -16367,6 +16850,10 @@ string CompilerMSL::image_type_glsl(const SPIRType &type, uint32_t id, bool memb // Otherwise it may be set based on whether the image is read from or written to within the shader. if (type.basetype == SPIRType::Image && type.image.sampled == 2 && type.image.dim != DimSubpassData) { + auto *p_var = maybe_get_backing_variable(id); + if (p_var && p_var->basevariable) + p_var = maybe_get(p_var->basevariable); + switch (img_type.access) { case AccessQualifierReadOnly: @@ -16383,9 +16870,6 @@ string CompilerMSL::image_type_glsl(const SPIRType &type, uint32_t id, bool memb default: { - auto *p_var = maybe_get_backing_variable(id); - if (p_var && p_var->basevariable) - p_var = maybe_get(p_var->basevariable); if (p_var && !has_decoration(p_var->self, DecorationNonWritable)) { img_type_name += ", access::"; @@ -16398,6 +16882,9 @@ string CompilerMSL::image_type_glsl(const SPIRType &type, uint32_t id, bool memb break; } } + + if (p_var && has_decoration(p_var->self, DecorationCoherent) && msl_options.supports_msl_version(3, 2)) + img_type_name += ", memory_coherence_device"; } img_type_name += ">"; @@ -16465,6 +16952,10 @@ void CompilerMSL::emit_subgroup_op(const Instruction &i) if (!msl_options.supports_msl_version(2, 2)) SPIRV_CROSS_THROW("Ballot ops on iOS requires Metal 2.2 and up."); break; + case OpGroupNonUniformRotateKHR: + if (!msl_options.supports_msl_version(2, 2)) + SPIRV_CROSS_THROW("Rotate on iOS requires Metal 2.2 and up."); + break; case OpGroupNonUniformBroadcast: case OpGroupNonUniformShuffle: case OpGroupNonUniformShuffleXor: @@ -16500,13 +16991,16 @@ void CompilerMSL::emit_subgroup_op(const Instruction &i) Scope scope; switch (op) { + // These earlier instructions don't have the scope operand. case OpSubgroupBallotKHR: case OpSubgroupFirstInvocationKHR: case OpSubgroupReadInvocationKHR: case OpSubgroupAllKHR: case OpSubgroupAnyKHR: case OpSubgroupAllEqualKHR: - // These earlier instructions don't have the scope operand. + // These instructions are always quad-scoped and thus do not have a scope operand. + case OpGroupNonUniformQuadAllKHR: + case OpGroupNonUniformQuadAnyKHR: scope = ScopeSubgroup; break; default: @@ -16594,6 +17088,23 @@ void CompilerMSL::emit_subgroup_op(const Instruction &i) emit_binary_func_op(result_type, id, ops[op_idx], ops[op_idx + 1], "spvSubgroupShuffleDown"); break; + case OpGroupNonUniformRotateKHR: + { + if (i.length > 5) + { + // MSL does not have a cluster size parameter, so calculate the invocation ID manually and using a shuffle. + auto delta_expr = enclose_expression(to_unpacked_expression(ops[op_idx + 1])); + auto cluster_size_minus_one = evaluate_constant_u32(ops[op_idx + 2]) - 1; + auto local_id_expr = to_unpacked_expression(scope == ScopeSubgroup + ? builtin_subgroup_invocation_id_id : builtin_local_invocation_index_id); + auto shuffle_idx = join("((", local_id_expr, " + ", delta_expr, ")", " & ", std::to_string(cluster_size_minus_one), + ") + (", local_id_expr, " & ", std::to_string(~cluster_size_minus_one), ")"); + emit_op(result_type, id, join("spvSubgroupShuffle(", to_unpacked_expression(ops[op_idx]), ", ", shuffle_idx, ")"), false); + } else + emit_binary_func_op(result_type, id, ops[op_idx], ops[op_idx + 1], "spvSubgroupRotate"); + break; + } + case OpGroupNonUniformAll: case OpSubgroupAllKHR: if (msl_options.use_quadgroup_operation()) @@ -16628,11 +17139,10 @@ case OpGroupNonUniform##op: \ emit_unary_func_op(result_type, id, ops[op_idx], "simd_prefix_exclusive_" #msl_op); \ else if (operation == GroupOperationClusteredReduce) \ { \ - /* Only cluster sizes of 4 are supported. */ \ uint32_t cluster_size = evaluate_constant_u32(ops[op_idx + 1]); \ - if (cluster_size != 4) \ - SPIRV_CROSS_THROW("Metal only supports quad ClusteredReduce."); \ - emit_unary_func_op(result_type, id, ops[op_idx], "quad_" #msl_op); \ + if (get_execution_model() != ExecutionModelFragment || msl_options.supports_msl_version(2, 2)) \ + add_spv_func_and_recompile(SPVFuncImplSubgroupClustered##op); \ + emit_subgroup_cluster_op(result_type, id, cluster_size, ops[op_idx], #msl_op); \ } \ else \ SPIRV_CROSS_THROW("Invalid group operation."); \ @@ -16657,11 +17167,10 @@ case OpGroupNonUniform##op: \ SPIRV_CROSS_THROW("Metal doesn't support ExclusiveScan for OpGroupNonUniform" #op "."); \ else if (operation == GroupOperationClusteredReduce) \ { \ - /* Only cluster sizes of 4 are supported. */ \ uint32_t cluster_size = evaluate_constant_u32(ops[op_idx + 1]); \ - if (cluster_size != 4) \ - SPIRV_CROSS_THROW("Metal only supports quad ClusteredReduce."); \ - emit_unary_func_op(result_type, id, ops[op_idx], "quad_" #msl_op); \ + if (get_execution_model() != ExecutionModelFragment || msl_options.supports_msl_version(2, 2)) \ + add_spv_func_and_recompile(SPVFuncImplSubgroupClustered##op); \ + emit_subgroup_cluster_op(result_type, id, cluster_size, ops[op_idx], #msl_op); \ } \ else \ SPIRV_CROSS_THROW("Invalid group operation."); \ @@ -16680,11 +17189,10 @@ case OpGroupNonUniform##op: \ SPIRV_CROSS_THROW("Metal doesn't support ExclusiveScan for OpGroupNonUniform" #op "."); \ else if (operation == GroupOperationClusteredReduce) \ { \ - /* Only cluster sizes of 4 are supported. */ \ uint32_t cluster_size = evaluate_constant_u32(ops[op_idx + 1]); \ - if (cluster_size != 4) \ - SPIRV_CROSS_THROW("Metal only supports quad ClusteredReduce."); \ - emit_unary_func_op_cast(result_type, id, ops[op_idx], "quad_" #msl_op, type, type); \ + if (get_execution_model() != ExecutionModelFragment || msl_options.supports_msl_version(2, 2)) \ + add_spv_func_and_recompile(SPVFuncImplSubgroupClustered##op); \ + emit_subgroup_cluster_op_cast(result_type, id, cluster_size, ops[op_idx], #msl_op, type, type); \ } \ else \ SPIRV_CROSS_THROW("Invalid group operation."); \ @@ -16700,9 +17208,11 @@ case OpGroupNonUniform##op: \ MSL_GROUP_OP(BitwiseAnd, and) MSL_GROUP_OP(BitwiseOr, or) MSL_GROUP_OP(BitwiseXor, xor) - MSL_GROUP_OP(LogicalAnd, and) - MSL_GROUP_OP(LogicalOr, or) - MSL_GROUP_OP(LogicalXor, xor) + // Metal doesn't support boolean types in SIMD-group operations, so we + // have to emit some casts. + MSL_GROUP_OP_CAST(LogicalAnd, and, SPIRType::UShort) + MSL_GROUP_OP_CAST(LogicalOr, or, SPIRType::UShort) + MSL_GROUP_OP_CAST(LogicalXor, xor, SPIRType::UShort) // clang-format on #undef MSL_GROUP_OP #undef MSL_GROUP_OP_CAST @@ -16715,6 +17225,14 @@ case OpGroupNonUniform##op: \ emit_binary_func_op(result_type, id, ops[op_idx], ops[op_idx + 1], "spvQuadBroadcast"); break; + case OpGroupNonUniformQuadAllKHR: + emit_unary_func_op(result_type, id, ops[op_idx], "quad_all"); + break; + + case OpGroupNonUniformQuadAnyKHR: + emit_unary_func_op(result_type, id, ops[op_idx], "quad_any"); + break; + default: SPIRV_CROSS_THROW("Invalid opcode for subgroup."); } @@ -16722,6 +17240,83 @@ case OpGroupNonUniform##op: \ register_control_dependent_expression(id); } +void CompilerMSL::emit_subgroup_cluster_op(uint32_t result_type, uint32_t result_id, uint32_t cluster_size, + uint32_t op0, const char *op) +{ + if (get_execution_model() == ExecutionModelFragment && !msl_options.supports_msl_version(2, 2)) + { + if (cluster_size == 4) + { + emit_unary_func_op(result_type, result_id, op0, join("quad_", op).c_str()); + return; + } + SPIRV_CROSS_THROW("Cluster sizes other than 4 in fragment shaders require MSL 2.2."); + } + bool forward = should_forward(op0); + emit_op(result_type, result_id, + join("spvClustered_", op, "<", cluster_size, ">(", to_unpacked_expression(op0), ", ", + to_expression(builtin_subgroup_invocation_id_id), ")"), + forward); + inherit_expression_dependencies(result_id, op0); +} + +void CompilerMSL::emit_subgroup_cluster_op_cast(uint32_t result_type, uint32_t result_id, uint32_t cluster_size, + uint32_t op0, const char *op, SPIRType::BaseType input_type, + SPIRType::BaseType expected_result_type) +{ + if (get_execution_model() == ExecutionModelFragment && !msl_options.supports_msl_version(2, 2)) + { + if (cluster_size == 4) + { + emit_unary_func_op_cast(result_type, result_id, op0, join("quad_", op).c_str(), input_type, + expected_result_type); + return; + } + SPIRV_CROSS_THROW("Cluster sizes other than 4 in fragment shaders require MSL 2.2."); + } + + auto &out_type = get(result_type); + auto &expr_type = expression_type(op0); + auto expected_type = out_type; + + // Bit-widths might be different in unary cases because we use it for SConvert/UConvert and friends. + expected_type.basetype = input_type; + expected_type.width = expr_type.width; + + string cast_op; + if (expr_type.basetype != input_type) + { + if (expr_type.basetype == SPIRType::Boolean) + cast_op = join(type_to_glsl(expected_type), "(", to_unpacked_expression(op0), ")"); + else + cast_op = bitcast_glsl(expected_type, op0); + } + else + cast_op = to_unpacked_expression(op0); + + string sg_op = join("spvClustered_", op, "<", cluster_size, ">"); + string expr; + if (out_type.basetype != expected_result_type) + { + expected_type.basetype = expected_result_type; + expected_type.width = out_type.width; + if (out_type.basetype == SPIRType::Boolean) + expr = type_to_glsl(out_type); + else + expr = bitcast_glsl_op(out_type, expected_type); + expr += '('; + expr += join(sg_op, "(", cast_op, ", ", to_expression(builtin_subgroup_invocation_id_id), ")"); + expr += ')'; + } + else + { + expr += join(sg_op, "(", cast_op, ", ", to_expression(builtin_subgroup_invocation_id_id), ")"); + } + + emit_op(result_type, result_id, expr, should_forward(op0)); + inherit_expression_dependencies(result_id, op0); +} + string CompilerMSL::bitcast_glsl_op(const SPIRType &out_type, const SPIRType &in_type) { if (out_type.basetype == in_type.basetype) @@ -17598,6 +18193,23 @@ void CompilerMSL::analyze_sampled_image_usage() } } +void CompilerMSL::analyze_workgroup_variables() +{ + ir.for_each_typed_id([&](uint32_t, SPIRVariable &var) { + // If workgroup variables have initializer, it can only be ConstantNull (zero init) + if (var.storage == StorageClassWorkgroup && var.initializer) + { + needs_workgroup_zero_init = true; + + // MSL compiler does not like the routine to initialize simple threadgroup variables, + // falsely claiming it is "sometimes uninitialized". Suppress it. + auto &type = get_variable_data_type(var); + if (type.array.empty() && type.member_types.empty()) + suppress_sometimes_unitialized = true; + } + }); +} + bool CompilerMSL::SampledImageScanner::handle(spv::Op opcode, const uint32_t *args, uint32_t length) { switch (opcode) @@ -17658,7 +18270,7 @@ bool CompilerMSL::OpCodePreprocessor::handle(Op opcode, const uint32_t *args, ui // suppress_missing_prototypes to suppress compiler warnings of missing function prototypes. // Mark if the input requires the implementation of an SPIR-V function that does not exist in Metal. - SPVFuncImpl spv_func = get_spv_func_impl(opcode, args); + SPVFuncImpl spv_func = get_spv_func_impl(opcode, args, length); if (spv_func != SPVFuncImplNone) { compiler.spv_function_implementations.insert(spv_func); @@ -17765,6 +18377,39 @@ bool CompilerMSL::OpCodePreprocessor::handle(Op opcode, const uint32_t *args, ui needs_subgroup_invocation_id = true; break; + case OpGroupNonUniformRotateKHR: + // Add the correct invocation ID for calculating clustered rotate case. + if (length > 5) + { + if (static_cast(compiler.evaluate_constant_u32(args[2])) == ScopeSubgroup) + needs_subgroup_invocation_id = true; + else + needs_local_invocation_index = true; + } + break; + + case OpGroupNonUniformFAdd: + case OpGroupNonUniformFMul: + case OpGroupNonUniformFMin: + case OpGroupNonUniformFMax: + case OpGroupNonUniformIAdd: + case OpGroupNonUniformIMul: + case OpGroupNonUniformSMin: + case OpGroupNonUniformSMax: + case OpGroupNonUniformUMin: + case OpGroupNonUniformUMax: + case OpGroupNonUniformBitwiseAnd: + case OpGroupNonUniformBitwiseOr: + case OpGroupNonUniformBitwiseXor: + case OpGroupNonUniformLogicalAnd: + case OpGroupNonUniformLogicalOr: + case OpGroupNonUniformLogicalXor: + if ((compiler.get_execution_model() != ExecutionModelFragment || + compiler.msl_options.supports_msl_version(2, 2)) && + args[3] == GroupOperationClusteredReduce) + needs_subgroup_invocation_id = true; + break; + case OpArrayLength: { auto *var = compiler.maybe_get_backing_variable(args[2]); @@ -17794,7 +18439,8 @@ bool CompilerMSL::OpCodePreprocessor::handle(Op opcode, const uint32_t *args, ui case OpExtInst: { uint32_t extension_set = args[2]; - if (compiler.get(extension_set).ext == SPIRExtension::GLSL) + SPIRExtension::Extension ext = compiler.get(extension_set).ext; + if (ext == SPIRExtension::GLSL) { auto op_450 = static_cast(args[3]); switch (op_450) @@ -17837,6 +18483,12 @@ bool CompilerMSL::OpCodePreprocessor::handle(Op opcode, const uint32_t *args, ui break; } } + else if (ext == SPIRExtension::NonSemanticDebugPrintf) + { + // Operation 1 is printf. + if (args[3] == 1 && !compiler.msl_options.supports_msl_version(3, 2)) + SPIRV_CROSS_THROW("Debug printf requires MSL 3.2."); + } break; } @@ -17867,10 +18519,13 @@ void CompilerMSL::OpCodePreprocessor::check_resource_write(uint32_t var_id) } // Returns an enumeration of a SPIR-V function that needs to be output for certain Op codes. -CompilerMSL::SPVFuncImpl CompilerMSL::OpCodePreprocessor::get_spv_func_impl(Op opcode, const uint32_t *args) +CompilerMSL::SPVFuncImpl CompilerMSL::OpCodePreprocessor::get_spv_func_impl(Op opcode, const uint32_t *args, uint32_t length) { switch (opcode) { + case OpSMod: + return SPVFuncImplSMod; + case OpFMod: return SPVFuncImplMod; @@ -18049,6 +18704,12 @@ CompilerMSL::SPVFuncImpl CompilerMSL::OpCodePreprocessor::get_spv_func_impl(Op o case OpGroupNonUniformShuffleDown: return SPVFuncImplSubgroupShuffleDown; + case OpGroupNonUniformRotateKHR: + // Clustered rotate is performed using shuffle. + if (length > 5) + return SPVFuncImplSubgroupShuffle; + return SPVFuncImplSubgroupRotate; + case OpGroupNonUniformQuadBroadcast: return SPVFuncImplQuadBroadcast; @@ -18067,6 +18728,10 @@ CompilerMSL::SPVFuncImpl CompilerMSL::OpCodePreprocessor::get_spv_func_impl(Op o case OpUMulExtended: return SPVFuncImplMulExtended; + case OpAssumeTrueKHR: + case OpExpectKHR: + return SPVFuncImplAssume; + default: break; } @@ -18997,7 +19662,7 @@ void CompilerMSL::analyze_argument_buffers() set_extended_member_decoration(buffer_type.self, member_index, SPIRVCrossDecorationOverlappingBinding); member_index++; } - + if (msl_options.replace_recursive_inputs && type_contains_recursion(buffer_type)) { recursive_inputs.insert(type_id); @@ -19157,6 +19822,11 @@ const char *CompilerMSL::get_combined_sampler_suffix() const return sampler_name_suffix.c_str(); } +bool CompilerMSL::specialization_constant_is_macro(uint32_t const_id) const +{ + return constant_macro_ids.find(const_id) != constant_macro_ids.end(); +} + void CompilerMSL::emit_block_hints(const SPIRBlock &) { } @@ -19379,6 +20049,70 @@ void CompilerMSL::emit_mesh_tasks(SPIRBlock &block) statement("return;"); } +void CompilerMSL::emit_workgroup_initialization(const SPIRVariable &var) +{ + auto &type = get_variable_data_type(var); + + begin_scope(); + + if (type.array.empty() && type.member_types.empty()) + { + // For simple shared variables, we just initialize it in thread 0 of the block + // We use short to represent bool for threadgroup variable to workaround compiler bug, + // so we do a temporary fixup here. Alas. (see the type_to_glsl method) + bool is_boolean = type.basetype == SPIRType::Boolean; + if (is_boolean) + type.basetype = SPIRType::Short; + + statement("if (gl_LocalInvocationIndex == 0)"); + begin_scope(); + statement(to_name(var.self), " = ", to_initializer_expression(var), ";"); + end_scope(); + + if (is_boolean) + type.basetype = SPIRType::Boolean; + } + else + { + // Otherwise, we use a loop to cooperatively initialize the memory within the group + + // First, we define a few variable names; + string var_name = to_name(var.self); + string var_ptr_name = join(var_name, "_ptr"); + string var_size_name = join(var_name, "_sz"); + string var_pos_name = join(var_name, "_pos"); + string var_stride_name = join(var_name, "_stride"); + string var_ptr2_name = join(var_name, "_ptr2"); + + statement("threadgroup uint *", var_ptr_name, " = (threadgroup uint *)&", var_name, ";"); + statement("uint ", var_size_name, " = ", "sizeof(", var_name, ");"); + statement("uint ", var_pos_name, " = gl_LocalInvocationIndex;"); + statement("uint ", var_stride_name, " = gl_WorkGroupSize.x * gl_WorkGroupSize.y * gl_WorkGroupSize.z;"); + + statement("while (sizeof(uint) * ", var_pos_name, " < ", var_size_name, ")"); + begin_scope(); + statement(var_ptr_name, "[", var_pos_name, "] = 0u;"); + statement(var_pos_name, " += ", var_stride_name, ";"); + end_scope(); + + statement("if (gl_LocalInvocationIndex == 0)"); + begin_scope(); + statement(var_pos_name, " = (", var_size_name, " / sizeof(uint)) * sizeof(uint);"); + statement("threadgroup uchar *", var_ptr2_name, " = (threadgroup uchar *)&", var_name, ";"); + + statement("while (", var_pos_name, " < ", var_size_name, ")"); + begin_scope(); + statement(var_ptr2_name, "[", var_pos_name, "] = '\\0';"); + statement(var_pos_name, "++;"); + end_scope(); + end_scope(); + } + + statement("threadgroup_barrier(mem_flags::mem_threadgroup);"); + + end_scope(); +} + string CompilerMSL::additional_fixed_sample_mask_str() const { char print_buffer[32]; diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_msl.hpp b/libs/bgfx/3rdparty/spirv-cross/spirv_msl.hpp index 4aaad01..a3d08bf 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_msl.hpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_msl.hpp @@ -324,6 +324,8 @@ class CompilerMSL : public CompilerGLSL // of the shader with the additional fixed sample mask. uint32_t additional_fixed_sample_mask = 0xffffffff; bool enable_point_size_builtin = true; + bool enable_point_size_default = false; + float default_point_size = 1.0f; bool enable_frag_depth_builtin = true; bool enable_frag_stencil_ref_builtin = true; bool disable_rasterization = false; @@ -536,6 +538,10 @@ class CompilerMSL : public CompilerGLSL // if the fragment does not modify the depth value. bool input_attachment_is_ds_attachment = false; + // If BuiltInPosition is not written, automatically disable rasterization. + // The result can be queried with get_is_rasterization_disabled. + bool auto_disable_rasterization = false; + bool is_ios() const { return platform == iOS; @@ -756,6 +762,11 @@ class CompilerMSL : public CompilerGLSL void set_combined_sampler_suffix(const char *suffix); const char *get_combined_sampler_suffix() const; + // Information about specialization constants that are translated into MSL macros + // instead of using function constant + // These must only be called after a successful call to CompilerMSL::compile(). + bool specialization_constant_is_macro(uint32_t constant_id) const; + protected: // An enum of SPIR-V functions that are implemented in additional // source code that is added to the shader if necessary. @@ -763,6 +774,7 @@ class CompilerMSL : public CompilerGLSL { SPVFuncImplNone, SPVFuncImplMod, + SPVFuncImplSMod, SPVFuncImplRadians, SPVFuncImplDegrees, SPVFuncImplFindILsb, @@ -784,12 +796,11 @@ class CompilerMSL : public CompilerGLSL SPVFuncImplInverse4x4, SPVFuncImplInverse3x3, SPVFuncImplInverse2x2, - // It is very important that this come before *Swizzle and ChromaReconstruct*, to ensure it's - // emitted before them. - SPVFuncImplForwardArgs, - // Likewise, this must come before *Swizzle. + // It is very important that this come before *Swizzle, to ensure it's emitted before them. SPVFuncImplGetSwizzle, SPVFuncImplTextureSwizzle, + SPVFuncImplGatherReturn, + SPVFuncImplGatherCompareReturn, SPVFuncImplGatherSwizzle, SPVFuncImplGatherCompareSwizzle, SPVFuncImplGatherConstOffsets, @@ -806,6 +817,30 @@ class CompilerMSL : public CompilerGLSL SPVFuncImplSubgroupShuffleXor, SPVFuncImplSubgroupShuffleUp, SPVFuncImplSubgroupShuffleDown, + SPVFuncImplSubgroupRotate, + SPVFuncImplSubgroupClusteredAdd, + SPVFuncImplSubgroupClusteredFAdd = SPVFuncImplSubgroupClusteredAdd, + SPVFuncImplSubgroupClusteredIAdd = SPVFuncImplSubgroupClusteredAdd, + SPVFuncImplSubgroupClusteredMul, + SPVFuncImplSubgroupClusteredFMul = SPVFuncImplSubgroupClusteredMul, + SPVFuncImplSubgroupClusteredIMul = SPVFuncImplSubgroupClusteredMul, + SPVFuncImplSubgroupClusteredMin, + SPVFuncImplSubgroupClusteredFMin = SPVFuncImplSubgroupClusteredMin, + SPVFuncImplSubgroupClusteredSMin = SPVFuncImplSubgroupClusteredMin, + SPVFuncImplSubgroupClusteredUMin = SPVFuncImplSubgroupClusteredMin, + SPVFuncImplSubgroupClusteredMax, + SPVFuncImplSubgroupClusteredFMax = SPVFuncImplSubgroupClusteredMax, + SPVFuncImplSubgroupClusteredSMax = SPVFuncImplSubgroupClusteredMax, + SPVFuncImplSubgroupClusteredUMax = SPVFuncImplSubgroupClusteredMax, + SPVFuncImplSubgroupClusteredAnd, + SPVFuncImplSubgroupClusteredBitwiseAnd = SPVFuncImplSubgroupClusteredAnd, + SPVFuncImplSubgroupClusteredLogicalAnd = SPVFuncImplSubgroupClusteredAnd, + SPVFuncImplSubgroupClusteredOr, + SPVFuncImplSubgroupClusteredBitwiseOr = SPVFuncImplSubgroupClusteredOr, + SPVFuncImplSubgroupClusteredLogicalOr = SPVFuncImplSubgroupClusteredOr, + SPVFuncImplSubgroupClusteredXor, + SPVFuncImplSubgroupClusteredBitwiseXor = SPVFuncImplSubgroupClusteredXor, + SPVFuncImplSubgroupClusteredLogicalXor = SPVFuncImplSubgroupClusteredXor, SPVFuncImplQuadBroadcast, SPVFuncImplQuadSwap, SPVFuncImplReflectScalar, @@ -841,6 +876,7 @@ class CompilerMSL : public CompilerGLSL SPVFuncImplTextureCast, SPVFuncImplMulExtended, SPVFuncImplSetMeshOutputsEXT, + SPVFuncImplAssume, }; // If the underlying resource has been used for comparison then duplicate loads of that resource must be too @@ -858,6 +894,11 @@ class CompilerMSL : public CompilerGLSL void emit_function_prototype(SPIRFunction &func, const Bitset &return_flags) override; void emit_sampled_image_op(uint32_t result_type, uint32_t result_id, uint32_t image_id, uint32_t samp_id) override; void emit_subgroup_op(const Instruction &i) override; + void emit_subgroup_cluster_op(uint32_t result_type, uint32_t result_id, uint32_t cluster_size, uint32_t op0, + const char *op); + void emit_subgroup_cluster_op_cast(uint32_t result_type, uint32_t result_id, uint32_t cluster_size, uint32_t op0, + const char *op, SPIRType::BaseType input_type, + SPIRType::BaseType expected_result_type); std::string to_texture_op(const Instruction &i, bool sparse, bool *forward, SmallVector &inherited_expressions) override; void emit_fixup() override; @@ -872,6 +913,7 @@ class CompilerMSL : public CompilerGLSL void emit_mesh_entry_point(); void emit_mesh_outputs(); void emit_mesh_tasks(SPIRBlock &block) override; + void emit_workgroup_initialization(const SPIRVariable &var) override; // Allow Metal to use the array template to make arrays a value type std::string type_to_array_glsl(const SPIRType &type, uint32_t variable_id) override; @@ -985,6 +1027,7 @@ class CompilerMSL : public CompilerGLSL void add_tess_level_input_to_interface_block(const std::string &ib_var_ref, SPIRType &ib_type, SPIRVariable &var); void add_tess_level_input(const std::string &base_ref, const std::string &mbr_name, SPIRVariable &var); + void ensure_struct_members_valid_vecsizes(SPIRType &struct_type, uint32_t &location); void fix_up_interface_member_indices(spv::StorageClass storage, uint32_t ib_type_id); void mark_location_as_used_by_shader(uint32_t location, const SPIRType &type, @@ -1069,7 +1112,8 @@ class CompilerMSL : public CompilerGLSL bool validate_member_packing_rules_msl(const SPIRType &type, uint32_t index) const; std::string get_argument_address_space(const SPIRVariable &argument); std::string get_type_address_space(const SPIRType &type, uint32_t id, bool argument = false); - static bool decoration_flags_signal_volatile(const Bitset &flags); + bool decoration_flags_signal_volatile(const Bitset &flags) const; + bool decoration_flags_signal_coherent(const Bitset &flags) const; const char *to_restrict(uint32_t id, bool space); SPIRType &get_stage_in_struct_type(); SPIRType &get_stage_out_struct_type(); @@ -1133,12 +1177,13 @@ class CompilerMSL : public CompilerGLSL void emit_store_statement(uint32_t lhs_expression, uint32_t rhs_expression) override; void analyze_sampled_image_usage(); + void analyze_workgroup_variables(); bool access_chain_needs_stage_io_builtin_translation(uint32_t base) override; bool prepare_access_chain_for_scalar_access(std::string &expr, const SPIRType &type, spv::StorageClass storage, bool &is_packed) override; void fix_up_interpolant_access_chain(const uint32_t *ops, uint32_t length); - void check_physical_type_cast(std::string &expr, const SPIRType *type, uint32_t physical_type) override; + bool check_physical_type_cast(std::string &expr, const SPIRType *type, uint32_t physical_type) override; bool emit_tessellation_access_chain(const uint32_t *ops, uint32_t length); bool emit_tessellation_io_load(uint32_t result_type, uint32_t id, uint32_t ptr); @@ -1167,6 +1212,7 @@ class CompilerMSL : public CompilerGLSL std::set pragma_lines; std::set typedef_lines; SmallVector vars_needing_early_declaration; + std::unordered_set constant_macro_ids; std::unordered_map, InternalHasher> resource_bindings; std::unordered_map resource_arg_buff_idx_to_binding_number; @@ -1210,11 +1256,14 @@ class CompilerMSL : public CompilerGLSL bool needs_swizzle_buffer_def = false; bool used_swizzle_buffer = false; bool added_builtin_tess_level = false; + bool needs_local_invocation_index = false; bool needs_subgroup_invocation_id = false; bool needs_subgroup_size = false; bool needs_sample_id = false; bool needs_helper_invocation = false; + bool needs_workgroup_zero_init = false; bool writes_to_depth = false; + bool writes_to_point_size = false; std::string qual_pos_var_name; std::string stage_in_var_name = "in"; std::string stage_out_var_name = "out"; @@ -1276,6 +1325,7 @@ class CompilerMSL : public CompilerGLSL bool suppress_missing_prototypes = false; bool suppress_incompatible_pointer_types_discard_qualifiers = false; + bool suppress_sometimes_unitialized = false; void add_spv_func_and_recompile(SPVFuncImpl spv_func); @@ -1308,7 +1358,7 @@ class CompilerMSL : public CompilerGLSL } bool handle(spv::Op opcode, const uint32_t *args, uint32_t length) override; - CompilerMSL::SPVFuncImpl get_spv_func_impl(spv::Op opcode, const uint32_t *args); + CompilerMSL::SPVFuncImpl get_spv_func_impl(spv::Op opcode, const uint32_t *args, uint32_t length); void check_resource_write(uint32_t var_id); CompilerMSL &compiler; @@ -1319,6 +1369,7 @@ class CompilerMSL : public CompilerGLSL bool uses_image_write = false; bool uses_buffer_write = false; bool uses_discard = false; + bool needs_local_invocation_index = false; bool needs_subgroup_invocation_id = false; bool needs_subgroup_size = false; bool needs_sample_id = false; diff --git a/libs/bgfx/3rdparty/spirv-cross/spirv_parser.cpp b/libs/bgfx/3rdparty/spirv-cross/spirv_parser.cpp index 6108dbb..745ab6e 100644 --- a/libs/bgfx/3rdparty/spirv-cross/spirv_parser.cpp +++ b/libs/bgfx/3rdparty/spirv-cross/spirv_parser.cpp @@ -305,6 +305,7 @@ void Parser::parse(const Instruction &instruction) } case OpExtInst: + case OpExtInstWithForwardRefsKHR: { // The SPIR-V debug information extended instructions might come at global scope. if (current_block) @@ -536,12 +537,26 @@ void Parser::parse(const Instruction &instruction) uint32_t id = ops[0]; uint32_t width = ops[1]; auto &type = set(id, op); + + if (width != 16 && length > 2) + SPIRV_CROSS_THROW("Unrecognized FP encoding mode for OpTypeFloat."); + if (width == 64) type.basetype = SPIRType::Double; else if (width == 32) type.basetype = SPIRType::Float; else if (width == 16) - type.basetype = SPIRType::Half; + { + if (length > 2) + { + if (ops[2] == spv::FPEncodingBFloat16KHR) + type.basetype = SPIRType::BFloat16; + else + SPIRV_CROSS_THROW("Unrecognized encoding for OpTypeFloat 16."); + } + else + type.basetype = SPIRType::Half; + } else SPIRV_CROSS_THROW("Unrecognized bit-width of floating point type."); type.width = width; @@ -592,6 +607,22 @@ void Parser::parse(const Instruction &instruction) break; } + case OpTypeCooperativeMatrixKHR: + { + uint32_t id = ops[0]; + auto &base = get(ops[1]); + auto &matrixbase = set(id, base); + + matrixbase.op = op; + matrixbase.cooperative.scope_id = ops[2]; + matrixbase.cooperative.rows_id = ops[3]; + matrixbase.cooperative.columns_id = ops[4]; + matrixbase.cooperative.use_id = ops[5]; + matrixbase.self = id; + matrixbase.parent_type = ops[1]; + break; + } + case OpTypeArray: { uint32_t id = ops[0]; diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/GLSL.std.450.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/GLSL.std.450.h index 54cc00e..16ae294 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/GLSL.std.450.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/GLSL.std.450.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2014-2016 The Khronos Group Inc. +** SPDX-FileCopyrightText: 2014-2016 The Khronos Group Inc. +** SPDX-License-Identifier: MIT ** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +** KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +** SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +** https://www.khronos.org/registry/ */ #ifndef GLSLstd450_H diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/OpenCL.std.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/OpenCL.std.h index 19a6688..5f9ea69 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/OpenCL.std.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/OpenCL.std.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2015-2017 The Khronos Group Inc. +** SPDX-FileCopyrightText: 2015-2017 The Khronos Group Inc. +** SPDX-License-Identifier: MIT ** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +** KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +** SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +** https://www.khronos.org/registry/ */ namespace OpenCLLIB { diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/extinst.glsl.std.450.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/extinst.glsl.std.450.grammar.json index 3d9f39e..609014f 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/extinst.glsl.std.450.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/extinst.glsl.std.450.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2014-2016 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.", + "Copyright: 2014-2016 The Khronos Group Inc.", + "License: MIT", "", "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." + "" ], "version" : 100, "revision" : 2, diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/extinst.opencl.std.100.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/extinst.opencl.std.100.grammar.json index 4fe4506..12245e5 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/extinst.opencl.std.100.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/extinst.opencl.std.100.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2014-2016 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.", + "Copyright: 2014-2016 The Khronos Group Inc.", + "License: MIT", "", "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." + "" ], "version" : 100, "revision" : 2, diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.core.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.core.grammar.json index f3cfc4c..7bad5a2 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.core.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.core.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2014-2016 The Khronos Group Inc.", + "Copyright: 2014-2016 The Khronos Group Inc.", + "License: MIT", "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and/or associated documentation files (the \"Materials\"),", - "to deal in the Materials without restriction, including without limitation", - "the rights to use, copy, modify, merge, publish, distribute, sublicense,", - "and/or sell copies of the Materials, and to permit persons to whom the", - "Materials are furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Materials.", - "", - "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", - "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", - "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ", - "", - "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", - "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", - "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", - "IN THE MATERIALS." + "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS", + "KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS", + "SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT", + "https://www.khronos.org/registry/" ], "magic_number" : "0x07230203", "major_version" : 1, diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.h index bd5a9b9..5a90568 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2014-2018 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. +** Copyright: 2014-2018 The Khronos Group Inc. +** License: MIT +** +** 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/ */ /* diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.hpp11 b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.hpp11 index 8896e81..fc7958c 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.hpp11 +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.hpp11 @@ -1,26 +1,10 @@ -// Copyright (c) 2014-2018 The Khronos Group Inc. +// Copyright: 2014-2018 The Khronos Group Inc. +// License: MIT // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +// KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +// SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +// https://www.khronos.org/registry/ // This header is automatically generated by the same tool that creates // the Binary Section of the SPIR-V specification. diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.json index 9b0a8f3..8ec9f8d 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.0/spirv.json @@ -6,29 +6,13 @@ "Comment": [ [ - "Copyright (c) 2014-2018 The Khronos Group Inc.", + "Copyright: 2014-2018 The Khronos Group Inc.", + "License: MIT", "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and/or associated documentation files (the \"Materials\"),", - "to deal in the Materials without restriction, including without limitation", - "the rights to use, copy, modify, merge, publish, distribute, sublicense,", - "and/or sell copies of the Materials, and to permit persons to whom the", - "Materials are furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Materials.", - "", - "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", - "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", - "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ", - "", - "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", - "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", - "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", - "IN THE MATERIALS." + "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS", + "KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS", + "SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT", + "https://www.khronos.org/registry/" ], [ "This header is automatically generated by the same tool that creates", diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/GLSL.std.450.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/GLSL.std.450.h index 54cc00e..16ae294 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/GLSL.std.450.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/GLSL.std.450.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2014-2016 The Khronos Group Inc. +** SPDX-FileCopyrightText: 2014-2016 The Khronos Group Inc. +** SPDX-License-Identifier: MIT ** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +** KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +** SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +** https://www.khronos.org/registry/ */ #ifndef GLSLstd450_H diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/OpenCL.std.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/OpenCL.std.h index 19a6688..5f9ea69 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/OpenCL.std.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/OpenCL.std.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2015-2017 The Khronos Group Inc. +** SPDX-FileCopyrightText: 2015-2017 The Khronos Group Inc. +** SPDX-License-Identifier: MIT ** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +** KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +** SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +** https://www.khronos.org/registry/ */ namespace OpenCLLIB { diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/extinst.glsl.std.450.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/extinst.glsl.std.450.grammar.json index 3d9f39e..24792f2 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/extinst.glsl.std.450.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/extinst.glsl.std.450.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2014-2016 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.", + "Copyright: 2014-2016 The Khronos Group Inc.", + "License: MIT", "", "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." + "" ], "version" : 100, "revision" : 2, diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/extinst.opencl.std.100.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/extinst.opencl.std.100.grammar.json index 4fe4506..f85d41e 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/extinst.opencl.std.100.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/extinst.opencl.std.100.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2014-2016 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.", + "Copyright: 2014-2016 The Khronos Group Inc.", + "License: MIT", "", "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." + "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/", + "" ], "version" : 100, "revision" : 2, diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.core.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.core.grammar.json index c142e60..b2e2c46 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.core.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.core.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2014-2016 The Khronos Group Inc.", + "Copyright: 2014-2016 The Khronos Group Inc.", + "License: MIT", "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and/or associated documentation files (the \"Materials\"),", - "to deal in the Materials without restriction, including without limitation", - "the rights to use, copy, modify, merge, publish, distribute, sublicense,", - "and/or sell copies of the Materials, and to permit persons to whom the", - "Materials are furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Materials.", - "", - "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", - "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", - "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ", - "", - "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", - "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", - "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", - "IN THE MATERIALS." + "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS", + "KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS", + "SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT", + "https://www.khronos.org/registry/" ], "magic_number" : "0x07230203", "major_version" : 1, diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.h index 971c3be..b445137 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2014-2018 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. +** Copyright: 2014-2018 The Khronos Group Inc. +** License: MIT +** +** 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/ */ /* diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.hpp11 b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.hpp11 index 992d43b..745b5ce 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.hpp11 +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.hpp11 @@ -1,26 +1,10 @@ -// Copyright (c) 2014-2018 The Khronos Group Inc. +// Copyright: 2014-2018 The Khronos Group Inc. +// License: MIT // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +// KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +// SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +// https://www.khronos.org/registry/ // This header is automatically generated by the same tool that creates // the Binary Section of the SPIR-V specification. diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.json index 4c18e01..db1acf5 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.1/spirv.json @@ -6,29 +6,13 @@ "Comment": [ [ - "Copyright (c) 2014-2018 The Khronos Group Inc.", + "Copyright: 2014-2018 The Khronos Group Inc.", + "License: MIT", "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and/or associated documentation files (the \"Materials\"),", - "to deal in the Materials without restriction, including without limitation", - "the rights to use, copy, modify, merge, publish, distribute, sublicense,", - "and/or sell copies of the Materials, and to permit persons to whom the", - "Materials are furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Materials.", - "", - "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", - "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", - "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ", - "", - "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", - "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", - "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", - "IN THE MATERIALS." + "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS", + "KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS", + "SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT", + "https://www.khronos.org/registry/" ], [ "This header is automatically generated by the same tool that creates", diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/GLSL.std.450.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/GLSL.std.450.h index 54cc00e..16ae294 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/GLSL.std.450.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/GLSL.std.450.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2014-2016 The Khronos Group Inc. +** SPDX-FileCopyrightText: 2014-2016 The Khronos Group Inc. +** SPDX-License-Identifier: MIT ** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +** KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +** SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +** https://www.khronos.org/registry/ */ #ifndef GLSLstd450_H diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/OpenCL.std.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/OpenCL.std.h index 19a6688..5f9ea69 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/OpenCL.std.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/OpenCL.std.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2015-2017 The Khronos Group Inc. +** SPDX-FileCopyrightText: 2015-2017 The Khronos Group Inc. +** SPDX-License-Identifier: MIT ** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +** KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +** SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +** https://www.khronos.org/registry/ */ namespace OpenCLLIB { diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/extinst.glsl.std.450.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/extinst.glsl.std.450.grammar.json index 3d9f39e..24792f2 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/extinst.glsl.std.450.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/extinst.glsl.std.450.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2014-2016 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.", + "Copyright: 2014-2016 The Khronos Group Inc.", + "License: MIT", "", "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." + "" ], "version" : 100, "revision" : 2, diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/extinst.opencl.std.100.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/extinst.opencl.std.100.grammar.json index 4fe4506..12245e5 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/extinst.opencl.std.100.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/extinst.opencl.std.100.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2014-2016 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.", + "Copyright: 2014-2016 The Khronos Group Inc.", + "License: MIT", "", "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." + "" ], "version" : 100, "revision" : 2, diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.core.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.core.grammar.json index 393ee3c..fe1a919 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.core.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.core.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2014-2016 The Khronos Group Inc.", + "Copyright: 2014-2016 The Khronos Group Inc.", + "License: MIT", "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and/or associated documentation files (the \"Materials\"),", - "to deal in the Materials without restriction, including without limitation", - "the rights to use, copy, modify, merge, publish, distribute, sublicense,", - "and/or sell copies of the Materials, and to permit persons to whom the", - "Materials are furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Materials.", - "", - "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", - "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", - "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ", - "", - "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", - "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", - "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", - "IN THE MATERIALS." + "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS", + "KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS", + "SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT", + "https://www.khronos.org/registry/" ], "magic_number" : "0x07230203", "major_version" : 1, diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.h index 7c6d884..7ddf2f8 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2014-2018 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. +** Copyright: 2014-2018 The Khronos Group Inc. +** License: MIT +** +** 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/ */ /* diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.hpp11 b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.hpp11 index 7a875fd..23f5e5d 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.hpp11 +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.hpp11 @@ -1,26 +1,10 @@ -// Copyright (c) 2014-2018 The Khronos Group Inc. +// Copyright: 2014-2018 The Khronos Group Inc. +// License: MIT // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +// KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +// SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +// https://www.khronos.org/registry/ // This header is automatically generated by the same tool that creates // the Binary Section of the SPIR-V specification. diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.json index 9c0ff0a..ff7ad9b 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/1.2/spirv.json @@ -6,29 +6,13 @@ "Comment": [ [ - "Copyright (c) 2014-2018 The Khronos Group Inc.", + "Copyright: 2014-2018 The Khronos Group Inc.", + "License: MIT", "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and/or associated documentation files (the \"Materials\"),", - "to deal in the Materials without restriction, including without limitation", - "the rights to use, copy, modify, merge, publish, distribute, sublicense,", - "and/or sell copies of the Materials, and to permit persons to whom the", - "Materials are furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Materials.", - "", - "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", - "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", - "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ", - "", - "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", - "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", - "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", - "IN THE MATERIALS." + "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS", + "KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS", + "SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT", + "https://www.khronos.org/registry/" ], [ "This header is automatically generated by the same tool that creates", diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/spir-v.xml b/libs/bgfx/3rdparty/spirv-headers/include/spirv/spir-v.xml index 01d1512..b7c7947 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/spir-v.xml +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/spir-v.xml @@ -1,26 +1,8 @@ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_gcn_shader.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_gcn_shader.h index e626a7a..2c42abf 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_gcn_shader.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_gcn_shader.h @@ -1,28 +1,11 @@ -// Copyright (c) 2020-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. +// SPDX-FileCopyrightText: 2020-2024 The Khronos Group Inc. +// SPDX-License-Identifier: MIT // // 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. // #ifndef SPIRV_UNIFIED1_AMD_gcn_shader_H_ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_ballot.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_ballot.h index 563c0b6..7c33421 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_ballot.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_ballot.h @@ -1,28 +1,11 @@ -// Copyright (c) 2020-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. +// SPDX-FileCopyrightText: 2020-2024 The Khronos Group Inc. +// SPDX-License-Identifier: MIT // // 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. // #ifndef SPIRV_UNIFIED1_AMD_shader_ballot_H_ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_explicit_vertex_parameter.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_explicit_vertex_parameter.h index e663330..2e3e573 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_explicit_vertex_parameter.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_explicit_vertex_parameter.h @@ -1,28 +1,11 @@ -// Copyright (c) 2020-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. +// SPDX-FileCopyrightText: 2020-2024 The Khronos Group Inc. +// SPDX-License-Identifier: MIT // // 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. // #ifndef SPIRV_UNIFIED1_AMD_shader_explicit_vertex_parameter_H_ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_trinary_minmax.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_trinary_minmax.h index dd51c5f..f7acf71 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_trinary_minmax.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/AMD_shader_trinary_minmax.h @@ -1,28 +1,11 @@ -// Copyright (c) 2020-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. +// SPDX-FileCopyrightText: 2020-2024 The Khronos Group Inc. +// SPDX-License-Identifier: MIT // // 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. // #ifndef SPIRV_UNIFIED1_AMD_shader_trinary_minmax_H_ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/DebugInfo.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/DebugInfo.h index a3c0af4..81880f1 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/DebugInfo.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/DebugInfo.h @@ -1,26 +1,10 @@ -// Copyright (c) 2017-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. +// Copyright: 2017-2024 The Khronos Group Inc. +// License: MIT // // 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. #ifndef SPIRV_UNIFIED1_DebugInfo_H_ #define SPIRV_UNIFIED1_DebugInfo_H_ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/GLSL.std.450.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/GLSL.std.450.h index 0594f90..fb8c01e 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/GLSL.std.450.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/GLSL.std.450.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2014-2024 The Khronos Group Inc. +** SPDX-FileCopyrightText: 2014-2024 The Khronos Group Inc. +** SPDX-License-Identifier: MIT ** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +** KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +** SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +** https://www.khronos.org/registry/ */ #ifndef GLSLstd450_H diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticClspvReflection.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticClspvReflection.h index b6c27fa..10eda0e 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticClspvReflection.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticClspvReflection.h @@ -1,28 +1,11 @@ -// Copyright (c) 2020-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. +// SPDX-FileCopyrightText: 2020-2024 The Khronos Group Inc. +// SPDX-License-Identifier: MIT // // 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. // #ifndef SPIRV_UNIFIED1_NonSemanticClspvReflection_H_ @@ -33,7 +16,7 @@ extern "C" { #endif enum { - NonSemanticClspvReflectionRevision = 6, + NonSemanticClspvReflectionRevision = 7, NonSemanticClspvReflectionRevision_BitWidthPadding = 0x7fffffff }; @@ -79,6 +62,7 @@ enum NonSemanticClspvReflectionInstructions { NonSemanticClspvReflectionPrintfBufferStorageBuffer = 39, NonSemanticClspvReflectionPrintfBufferPointerPushConstant = 40, NonSemanticClspvReflectionNormalizedSamplerMaskPushConstant = 41, + NonSemanticClspvReflectionWorkgroupVariableSize = 42, NonSemanticClspvReflectionInstructionsMax = 0x7fffffff }; diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticDebugBreak.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticDebugBreak.h index 8604fe7..62b3333 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticDebugBreak.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticDebugBreak.h @@ -1,28 +1,11 @@ -// Copyright (c) 2020-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. +// SPDX-FileCopyrightText: 2020-2024 The Khronos Group Inc. +// SPDX-License-Identifier: MIT // // 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. // #ifndef SPIRV_UNIFIED1_NonSemanticDebugBreak_H_ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticDebugPrintf.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticDebugPrintf.h index bc24683..7a62f05 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticDebugPrintf.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticDebugPrintf.h @@ -1,28 +1,11 @@ -// Copyright (c) 2020-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. +// SPDX-FileCopyrightText: 2020-2024 The Khronos Group Inc. +// SPDX-License-Identifier: MIT // // 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. // #ifndef SPIRV_UNIFIED1_NonSemanticDebugPrintf_H_ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticShaderDebugInfo100.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticShaderDebugInfo100.h index b276b56..c095e28 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticShaderDebugInfo100.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticShaderDebugInfo100.h @@ -1,26 +1,10 @@ -// Copyright (c) 2018-2024 The Khronos Group Inc. +// SPDX-FileCopyrightText: 2018-2024 The Khronos Group Inc. +// SPDX-License-Identifier: MIT // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +// KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +// SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +// https://www.khronos.org/registry/ #ifndef SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_ #define SPIRV_UNIFIED1_NonSemanticShaderDebugInfo100_H_ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticVkspReflection.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticVkspReflection.h index af4a556..227a9c1 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticVkspReflection.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/NonSemanticVkspReflection.h @@ -1,28 +1,11 @@ -// Copyright (c) 2020-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. +// SPDX-FileCopyrightText: 2020-2024 The Khronos Group Inc. +// SPDX-License-Identifier: MIT // // 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. // #ifndef SPIRV_UNIFIED1_NonSemanticVkspReflection_H_ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/OpenCL.std.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/OpenCL.std.h index ed74f20..5382de1 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/OpenCL.std.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/OpenCL.std.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2015-2024 The Khronos Group Inc. +** SPDX-FileCopyrightText: 2015-2024 The Khronos Group Inc. +** SPDX-License-Identifier: MIT ** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +** KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +** SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +** https://www.khronos.org/registry/ */ #ifndef OPENCLstd_H diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/OpenCLDebugInfo100.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/OpenCLDebugInfo100.h index ffbd16f..39f596f 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/OpenCLDebugInfo100.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/OpenCLDebugInfo100.h @@ -1,26 +1,10 @@ -// Copyright (c) 2018-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. +// Copyright: 2018-2024 The Khronos Group Inc. +// License: MIT // // 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. #ifndef SPIRV_UNIFIED1_OpenCLDebugInfo100_H_ #define SPIRV_UNIFIED1_OpenCLDebugInfo100_H_ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.debuginfo.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.debuginfo.grammar.json index 918a9e5..d723d61 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.debuginfo.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.debuginfo.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2017-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.", + "Copyright: 2017-2024 The Khronos Group Inc.", + "License: MIT", "", "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." + "" ], "version" : 100, "revision" : 1, @@ -35,253 +19,253 @@ "opname" : "DebugCompilationUnit", "opcode" : 1, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Version'" }, - { "kind" : "LiteralInteger", "name" : "'DWARF Version'" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Version" }, + { "kind" : "LiteralInteger", "name" : "DWARF Version" } ] }, { "opname" : "DebugTypeBasic", "opcode" : 2, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "DebugBaseTypeAttributeEncoding", "name" : "'Encoding'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "DebugBaseTypeAttributeEncoding", "name" : "Encoding" } ] }, { "opname" : "DebugTypePointer", "opcode" : 3, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "StorageClass", "name" : "'Storage Class'" }, - { "kind" : "DebugInfoFlags", "name" : "'Literal Flags'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "StorageClass", "name" : "Storage Class" }, + { "kind" : "DebugInfoFlags", "name" : "Literal Flags" } ] }, { "opname" : "DebugTypeQualifier", "opcode" : 4, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "DebugTypeQualifier", "name" : "'Type Qualifier'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "DebugTypeQualifier", "name" : "Type Qualifier" } ] }, { "opname" : "DebugTypeArray", "opcode" : 5, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Component Counts'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Component Counts", "quantifier" : "*" } ] }, { "opname" : "DebugTypeVector", "opcode" : 6, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "LiteralInteger", "name" : "'Component Count'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "LiteralInteger", "name" : "Component Count" } ] }, { "opname" : "DebugTypedef", "opcode" : 7, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugTypeFunction", "opcode" : 8, "operands" : [ - { "kind" : "IdRef", "name" : "'Return Type'" }, - { "kind" : "IdRef", "name" : "'Paramter Types'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Return Type" }, + { "kind" : "IdRef", "name" : "Paramter Types", "quantifier" : "*" } ] }, { "opname" : "DebugTypeEnum", "opcode" : 9, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Underlying Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "PairIdRefIdRef", "name" : "'Value, Name, Value, Name, ...'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Underlying Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "PairIdRefIdRef", "name" : "Value, Name, Value, Name, ...", "quantifier" : "*" } ] }, { "opname" : "DebugTypeComposite", "opcode" : 10, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "DebugCompositeType", "name" : "'Tag'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Members'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "DebugCompositeType", "name" : "Tag" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Members", "quantifier" : "*" } ] }, { "opname" : "DebugTypeMember", "opcode" : 11, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Offset'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Value'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Value", "quantifier" : "?" } ] }, { "opname" : "DebugTypeInheritance", "opcode" : 12, "operands" : [ - { "kind" : "IdRef", "name" : "'Child'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Offset'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" } + { "kind" : "IdRef", "name" : "Child" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" } ] }, { "opname" : "DebugTypePtrToMember", "opcode" : 13, "operands" : [ - { "kind" : "IdRef", "name" : "'Member Type'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Member Type" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugTypeTemplate", "opcode" : 14, "operands" : [ - { "kind" : "IdRef", "name" : "'Target'" }, - { "kind" : "IdRef", "name" : "'Parameters'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Target" }, + { "kind" : "IdRef", "name" : "Parameters", "quantifier" : "*" } ] }, { "opname" : "DebugTypeTemplateParameter", "opcode" : 15, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Actual Type'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Actual Type" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" } ] }, { "opname" : "DebugTypeTemplateTemplateParameter", "opcode" : 16, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Template Name'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Template Name" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" } ] }, { "opname" : "DebugTypeTemplateParameterPack", "opcode" : 17, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Template Parameters'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Template Parameters", "quantifier" : "*" } ] }, { "opname" : "DebugGlobalVariable", "opcode" : 18, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "IdRef", "name" : "'Variable'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Static Member Declaration'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "IdRef", "name" : "Variable" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Static Member Declaration", "quantifier" : "?" } ] }, { "opname" : "DebugFunctionDeclaration", "opcode" : 19, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" } ] }, { "opname" : "DebugFunction", "opcode" : 20, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "LiteralInteger", "name" : "'Scope Line'" }, - { "kind" : "IdRef", "name" : "'Function'" }, - { "kind" : "IdRef", "name" : "'Declaration'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "LiteralInteger", "name" : "Scope Line" }, + { "kind" : "IdRef", "name" : "Function" }, + { "kind" : "IdRef", "name" : "Declaration", "quantifier" : "?" } ] }, { "opname" : "DebugLexicalBlock", "opcode" : 21, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Name'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Name", "quantifier" : "?" } ] }, { "opname" : "DebugLexicalBlockDiscriminator", "opcode" : 22, "operands" : [ - { "kind" : "IdRef", "name" : "'Scope'" }, - { "kind" : "LiteralInteger", "name" : "'Discriminator'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Scope" }, + { "kind" : "LiteralInteger", "name" : "Discriminator" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugScope", "opcode" : 23, "operands" : [ - { "kind" : "IdRef", "name" : "'Scope'" }, - { "kind" : "IdRef", "name" : "'Inlined At'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Scope" }, + { "kind" : "IdRef", "name" : "Inlined At", "quantifier" : "?" } ] }, { @@ -292,82 +276,82 @@ "opname" : "DebugInlinedAt", "opcode" : 25, "operands" : [ - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Scope'" }, - { "kind" : "IdRef", "name" : "'Inlined'", "quantifier" : "?" } + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Scope" }, + { "kind" : "IdRef", "name" : "Inlined", "quantifier" : "?" } ] }, { "opname" : "DebugLocalVariable", "opcode" : 26, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "LiteralInteger", "name" : "'Arg Number'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "LiteralInteger", "name" : "Arg Number", "quantifier" : "?" } ] }, { "opname" : "DebugInlinedVariable", "opcode" : 27, "operands" : [ - { "kind" : "IdRef", "name" : "'Variable'" }, - { "kind" : "IdRef", "name" : "'Inlined'" } + { "kind" : "IdRef", "name" : "Variable" }, + { "kind" : "IdRef", "name" : "Inlined" } ] }, { "opname" : "DebugDeclare", "opcode" : 28, "operands" : [ - { "kind" : "IdRef", "name" : "'Local Variable'" }, - { "kind" : "IdRef", "name" : "'Variable'" }, - { "kind" : "IdRef", "name" : "'Expression'" } + { "kind" : "IdRef", "name" : "Local Variable" }, + { "kind" : "IdRef", "name" : "Variable" }, + { "kind" : "IdRef", "name" : "Expression" } ] }, { "opname" : "DebugValue", "opcode" : 29, "operands" : [ - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Expression'" }, - { "kind" : "IdRef", "name" : "'Indexes'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Expression" }, + { "kind" : "IdRef", "name" : "Indexes", "quantifier" : "*" } ] }, { "opname" : "DebugOperation", "opcode" : 30, "operands" : [ - { "kind" : "DebugOperation", "name" : "'OpCode'" }, - { "kind" : "LiteralInteger", "name" : "'Operands ...'", "quantifier" : "*" } + { "kind" : "DebugOperation", "name" : "OpCode" }, + { "kind" : "LiteralInteger", "name" : "Operands ...", "quantifier" : "*" } ] }, { "opname" : "DebugExpression", "opcode" : 31, "operands" : [ - { "kind" : "IdRef", "name" : "'Operands ...'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Operands ...", "quantifier" : "*" } ] }, { "opname" : "DebugMacroDef", "opcode" : 32, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Value'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Value", "quantifier" : "?" } ] }, { "opname" : "DebugMacroUndef", "opcode" : 33, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Macro'" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Macro" } ] } ], diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json index ac8fc6d..89338c9 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.glsl.std.450.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ "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.", + "License: MIT", "", "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." + "" ], "version" : 100, "revision" : 2, @@ -31,439 +15,439 @@ "opname" : "Round", "opcode" : 1, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "RoundEven", "opcode" : 2, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Trunc", "opcode" : 3, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "FAbs", "opcode" : 4, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "SAbs", "opcode" : 5, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "FSign", "opcode" : 6, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "SSign", "opcode" : 7, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Floor", "opcode" : 8, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Ceil", "opcode" : 9, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Fract", "opcode" : 10, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Radians", "opcode" : 11, "operands" : [ - { "kind" : "IdRef", "name" : "'degrees'" } + { "kind" : "IdRef", "name" : "degrees" } ] }, { "opname" : "Degrees", "opcode" : 12, "operands" : [ - { "kind" : "IdRef", "name" : "'radians'" } + { "kind" : "IdRef", "name" : "radians" } ] }, { "opname" : "Sin", "opcode" : 13, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Cos", "opcode" : 14, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Tan", "opcode" : 15, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Asin", "opcode" : 16, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Acos", "opcode" : 17, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Atan", "opcode" : 18, "operands" : [ - { "kind" : "IdRef", "name" : "'y_over_x'" } + { "kind" : "IdRef", "name" : "y_over_x" } ] }, { "opname" : "Sinh", "opcode" : 19, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Cosh", "opcode" : 20, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Tanh", "opcode" : 21, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Asinh", "opcode" : 22, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Acosh", "opcode" : 23, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Atanh", "opcode" : 24, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Atan2", "opcode" : 25, "operands" : [ - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Pow", "opcode" : 26, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "Exp", "opcode" : 27, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Log", "opcode" : 28, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Exp2", "opcode" : 29, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Log2", "opcode" : 30, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Sqrt", "opcode" : 31, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "InverseSqrt", "opcode" : 32, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Determinant", "opcode" : 33, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "MatrixInverse", "opcode" : 34, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Modf", "opcode" : 35, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'i'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "i" } ] }, { "opname" : "ModfStruct", "opcode" : 36, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "FMin", "opcode" : 37, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "UMin", "opcode" : 38, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "SMin", "opcode" : 39, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "FMax", "opcode" : 40, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "UMax", "opcode" : 41, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "SMax", "opcode" : 42, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "FClamp", "opcode" : 43, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'minVal'" }, - { "kind" : "IdRef", "name" : "'maxVal'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "minVal" }, + { "kind" : "IdRef", "name" : "maxVal" } ] }, { "opname" : "UClamp", "opcode" : 44, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'minVal'" }, - { "kind" : "IdRef", "name" : "'maxVal'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "minVal" }, + { "kind" : "IdRef", "name" : "maxVal" } ] }, { "opname" : "SClamp", "opcode" : 45, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'minVal'" }, - { "kind" : "IdRef", "name" : "'maxVal'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "minVal" }, + { "kind" : "IdRef", "name" : "maxVal" } ] }, { "opname" : "FMix", "opcode" : 46, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'a'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "a" } ] }, { "opname" : "IMix", "opcode" : 47, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'a'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "a" } ] }, { "opname" : "Step", "opcode" : 48, "operands" : [ - { "kind" : "IdRef", "name" : "'edge'" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "edge" }, + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "SmoothStep", "opcode" : 49, "operands" : [ - { "kind" : "IdRef", "name" : "'edge0'" }, - { "kind" : "IdRef", "name" : "'edge1'" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "edge0" }, + { "kind" : "IdRef", "name" : "edge1" }, + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Fma", "opcode" : 50, "operands" : [ - { "kind" : "IdRef", "name" : "'a'" }, - { "kind" : "IdRef", "name" : "'b'" }, - { "kind" : "IdRef", "name" : "'c'" } + { "kind" : "IdRef", "name" : "a" }, + { "kind" : "IdRef", "name" : "b" }, + { "kind" : "IdRef", "name" : "c" } ] }, { "opname" : "Frexp", "opcode" : 51, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'exp'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "exp" } ] }, { "opname" : "FrexpStruct", "opcode" : 52, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Ldexp", "opcode" : 53, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'exp'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "exp" } ] }, { "opname" : "PackSnorm4x8", "opcode" : 54, "operands" : [ - { "kind" : "IdRef", "name" : "'v'" } + { "kind" : "IdRef", "name" : "v" } ] }, { "opname" : "PackUnorm4x8", "opcode" : 55, "operands" : [ - { "kind" : "IdRef", "name" : "'v'" } + { "kind" : "IdRef", "name" : "v" } ] }, { "opname" : "PackSnorm2x16", "opcode" : 56, "operands" : [ - { "kind" : "IdRef", "name" : "'v'" } + { "kind" : "IdRef", "name" : "v" } ] }, { "opname" : "PackUnorm2x16", "opcode" : 57, "operands" : [ - { "kind" : "IdRef", "name" : "'v'" } + { "kind" : "IdRef", "name" : "v" } ] }, { "opname" : "PackHalf2x16", "opcode" : 58, "operands" : [ - { "kind" : "IdRef", "name" : "'v'" } + { "kind" : "IdRef", "name" : "v" } ] }, { "opname" : "PackDouble2x32", "opcode" : 59, "operands" : [ - { "kind" : "IdRef", "name" : "'v'" } + { "kind" : "IdRef", "name" : "v" } ], "capabilities" : [ "Float64" ] }, @@ -471,42 +455,42 @@ "opname" : "UnpackSnorm2x16", "opcode" : 60, "operands" : [ - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "UnpackUnorm2x16", "opcode" : 61, "operands" : [ - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "UnpackHalf2x16", "opcode" : 62, "operands" : [ - { "kind" : "IdRef", "name" : "'v'" } + { "kind" : "IdRef", "name" : "v" } ] }, { "opname" : "UnpackSnorm4x8", "opcode" : 63, "operands" : [ - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "UnpackUnorm4x8", "opcode" : 64, "operands" : [ - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "UnpackDouble2x32", "opcode" : 65, "operands" : [ - { "kind" : "IdRef", "name" : "'v'" } + { "kind" : "IdRef", "name" : "v" } ], "capabilities" : [ "Float64" ] }, @@ -514,84 +498,84 @@ "opname" : "Length", "opcode" : 66, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "Distance", "opcode" : 67, "operands" : [ - { "kind" : "IdRef", "name" : "'p0'" }, - { "kind" : "IdRef", "name" : "'p1'" } + { "kind" : "IdRef", "name" : "p0" }, + { "kind" : "IdRef", "name" : "p1" } ] }, { "opname" : "Cross", "opcode" : 68, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "Normalize", "opcode" : 69, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "FaceForward", "opcode" : 70, "operands" : [ - { "kind" : "IdRef", "name" : "'N'" }, - { "kind" : "IdRef", "name" : "'I'" }, - { "kind" : "IdRef", "name" : "'Nref'" } + { "kind" : "IdRef", "name" : "N" }, + { "kind" : "IdRef", "name" : "I" }, + { "kind" : "IdRef", "name" : "Nref" } ] }, { "opname" : "Reflect", "opcode" : 71, "operands" : [ - { "kind" : "IdRef", "name" : "'I'" }, - { "kind" : "IdRef", "name" : "'N'" } + { "kind" : "IdRef", "name" : "I" }, + { "kind" : "IdRef", "name" : "N" } ] }, { "opname" : "Refract", "opcode" : 72, "operands" : [ - { "kind" : "IdRef", "name" : "'I'" }, - { "kind" : "IdRef", "name" : "'N'" }, - { "kind" : "IdRef", "name" : "'eta'" } + { "kind" : "IdRef", "name" : "I" }, + { "kind" : "IdRef", "name" : "N" }, + { "kind" : "IdRef", "name" : "eta" } ] }, { "opname" : "FindILsb", "opcode" : 73, "operands" : [ - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Value" } ] }, { "opname" : "FindSMsb", "opcode" : 74, "operands" : [ - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Value" } ] }, { "opname" : "FindUMsb", "opcode" : 75, "operands" : [ - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Value" } ] }, { "opname" : "InterpolateAtCentroid", "opcode" : 76, "operands" : [ - { "kind" : "IdRef", "name" : "'interpolant'" } + { "kind" : "IdRef", "name" : "interpolant" } ], "capabilities" : [ "InterpolationFunction" ] }, @@ -599,8 +583,8 @@ "opname" : "InterpolateAtSample", "opcode" : 77, "operands" : [ - { "kind" : "IdRef", "name" : "'interpolant'" }, - { "kind" : "IdRef", "name" : "'sample'" } + { "kind" : "IdRef", "name" : "interpolant" }, + { "kind" : "IdRef", "name" : "sample" } ], "capabilities" : [ "InterpolationFunction" ] }, @@ -608,8 +592,8 @@ "opname" : "InterpolateAtOffset", "opcode" : 78, "operands" : [ - { "kind" : "IdRef", "name" : "'interpolant'" }, - { "kind" : "IdRef", "name" : "'offset'" } + { "kind" : "IdRef", "name" : "interpolant" }, + { "kind" : "IdRef", "name" : "offset" } ], "capabilities" : [ "InterpolationFunction" ] }, @@ -617,25 +601,25 @@ "opname" : "NMin", "opcode" : 79, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "NMax", "opcode" : 80, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "NClamp", "opcode" : 81, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'minVal'" }, - { "kind" : "IdRef", "name" : "'maxVal'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "minVal" }, + { "kind" : "IdRef", "name" : "maxVal" } ] } ] diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.clspvreflection.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.clspvreflection.grammar.json index cfccc80..bd8dfd1 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.clspvreflection.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.clspvreflection.grammar.json @@ -1,5 +1,5 @@ { - "revision" : 6, + "revision" : 7, "instructions" : [ { "opname" : "Kernel", @@ -405,6 +405,14 @@ { "kind" : "IdRef", "name" : "Offset" }, { "kind" : "IdRef", "name" : "Size" } ] + }, + { + "opname" : "WorkgroupVariableSize", + "opcode" : 42, + "operands" : [ + { "kind" : "IdRef", "name" : "Variable" }, + { "kind" : "IdRef", "name" : "Size" } + ] } ], "operand_kinds" : [ diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.debugprintf.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.debugprintf.grammar.json index 71fa711..710214c 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.debugprintf.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.debugprintf.grammar.json @@ -5,7 +5,7 @@ "opname" : "DebugPrintf", "opcode" : 1, "operands" : [ - { "kind" : "IdRef", "name" : "'Format'" }, + { "kind" : "IdRef", "name" : "Format" }, { "kind" : "IdRef", "quantifier" : "*" } ] } diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.shader.debuginfo.100.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.shader.debuginfo.100.grammar.json index 1eb2859..effbdd3 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.shader.debuginfo.100.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.nonsemantic.shader.debuginfo.100.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2018-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.", + "Copyright: 2018-2024 The Khronos Group Inc.", + "License: MIT", "", "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." + "" ], "version" : 100, "revision" : 6, @@ -35,254 +19,254 @@ "opname" : "DebugCompilationUnit", "opcode" : 1, "operands" : [ - { "kind" : "IdRef", "name" : "'Version'" }, - { "kind" : "IdRef", "name" : "'DWARF Version'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Language'" } + { "kind" : "IdRef", "name" : "Version" }, + { "kind" : "IdRef", "name" : "DWARF Version" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Language" } ] }, { "opname" : "DebugTypeBasic", "opcode" : 2, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "IdRef", "name" : "'Encoding'" }, - { "kind" : "IdRef", "name" : "'Flags'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "IdRef", "name" : "Encoding" }, + { "kind" : "IdRef", "name" : "Flags" } ] }, { "opname" : "DebugTypePointer", "opcode" : 3, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Storage Class'" }, - { "kind" : "IdRef", "name" : "'Flags'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Storage Class" }, + { "kind" : "IdRef", "name" : "Flags" } ] }, { "opname" : "DebugTypeQualifier", "opcode" : 4, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Type Qualifier'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Type Qualifier" } ] }, { "opname" : "DebugTypeArray", "opcode" : 5, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Component Counts'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Component Counts", "quantifier" : "*" } ] }, { "opname" : "DebugTypeVector", "opcode" : 6, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Component Count'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Component Count" } ] }, { "opname" : "DebugTypedef", "opcode" : 7, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugTypeFunction", "opcode" : 8, "operands" : [ - { "kind" : "IdRef", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Return Type'" }, - { "kind" : "IdRef", "name" : "'Parameter Types'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Return Type" }, + { "kind" : "IdRef", "name" : "Parameter Types", "quantifier" : "*" } ] }, { "opname" : "DebugTypeEnum", "opcode" : 9, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Underlying Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "IdRef", "name" : "'Flags'" }, - { "kind" : "PairIdRefIdRef", "name" : "'Value, Name, Value, Name, ...'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Underlying Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "IdRef", "name" : "Flags" }, + { "kind" : "PairIdRefIdRef", "name" : "Value, Name, Value, Name, ...", "quantifier" : "*" } ] }, { "opname" : "DebugTypeComposite", "opcode" : 10, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Tag'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "IdRef", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Members'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Tag" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "IdRef", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Members", "quantifier" : "*" } ] }, { "opname" : "DebugTypeMember", "opcode" : 11, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Offset'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "IdRef", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Value'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "IdRef", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Value", "quantifier" : "?" } ] }, { "opname" : "DebugTypeInheritance", "opcode" : 12, "operands" : [ - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Offset'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "IdRef", "name" : "'Flags'" } + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "IdRef", "name" : "Flags" } ] }, { "opname" : "DebugTypePtrToMember", "opcode" : 13, "operands" : [ - { "kind" : "IdRef", "name" : "'Member Type'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Member Type" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugTypeTemplate", "opcode" : 14, "operands" : [ - { "kind" : "IdRef", "name" : "'Target'" }, - { "kind" : "IdRef", "name" : "'Parameters'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Target" }, + { "kind" : "IdRef", "name" : "Parameters", "quantifier" : "*" } ] }, { "opname" : "DebugTypeTemplateParameter", "opcode" : 15, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Actual Type'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Actual Type" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" } ] }, { "opname" : "DebugTypeTemplateTemplateParameter", "opcode" : 16, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Template Name'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Template Name" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" } ] }, { "opname" : "DebugTypeTemplateParameterPack", "opcode" : 17, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Template Parameters'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Template Parameters", "quantifier" : "*" } ] }, { "opname" : "DebugGlobalVariable", "opcode" : 18, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "IdRef", "name" : "'Variable'" }, - { "kind" : "IdRef", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Static Member Declaration'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "IdRef", "name" : "Variable" }, + { "kind" : "IdRef", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Static Member Declaration", "quantifier" : "?" } ] }, { "opname" : "DebugFunctionDeclaration", "opcode" : 19, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "IdRef", "name" : "'Flags'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "IdRef", "name" : "Flags" } ] }, { "opname" : "DebugFunction", "opcode" : 20, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "IdRef", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Scope Line'" }, - { "kind" : "IdRef", "name" : "'Declaration'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "IdRef", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Scope Line" }, + { "kind" : "IdRef", "name" : "Declaration", "quantifier" : "?" } ] }, { "opname" : "DebugLexicalBlock", "opcode" : 21, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Name'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Name", "quantifier" : "?" } ] }, { "opname" : "DebugLexicalBlockDiscriminator", "opcode" : 22, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Discriminator'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Discriminator" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugScope", "opcode" : 23, "operands" : [ - { "kind" : "IdRef", "name" : "'Scope'" }, - { "kind" : "IdRef", "name" : "'Inlined At'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Scope" }, + { "kind" : "IdRef", "name" : "Inlined At", "quantifier" : "?" } ] }, { @@ -293,132 +277,132 @@ "opname" : "DebugInlinedAt", "opcode" : 25, "operands" : [ - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Scope'" }, - { "kind" : "IdRef", "name" : "'Inlined'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Scope" }, + { "kind" : "IdRef", "name" : "Inlined", "quantifier" : "?" } ] }, { "opname" : "DebugLocalVariable", "opcode" : 26, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Arg Number'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Arg Number", "quantifier" : "?" } ] }, { "opname" : "DebugInlinedVariable", "opcode" : 27, "operands" : [ - { "kind" : "IdRef", "name" : "'Variable'" }, - { "kind" : "IdRef", "name" : "'Inlined'" } + { "kind" : "IdRef", "name" : "Variable" }, + { "kind" : "IdRef", "name" : "Inlined" } ] }, { "opname" : "DebugDeclare", "opcode" : 28, "operands" : [ - { "kind" : "IdRef", "name" : "'Local Variable'" }, - { "kind" : "IdRef", "name" : "'Variable'" }, - { "kind" : "IdRef", "name" : "'Expression'" }, - { "kind" : "IdRef", "name" : "'Indexes'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Local Variable" }, + { "kind" : "IdRef", "name" : "Variable" }, + { "kind" : "IdRef", "name" : "Expression" }, + { "kind" : "IdRef", "name" : "Indexes", "quantifier" : "*" } ] }, { "opname" : "DebugValue", "opcode" : 29, "operands" : [ - { "kind" : "IdRef", "name" : "'Local Variable'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Expression'" }, - { "kind" : "IdRef", "name" : "'Indexes'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Local Variable" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Expression" }, + { "kind" : "IdRef", "name" : "Indexes", "quantifier" : "*" } ] }, { "opname" : "DebugOperation", "opcode" : 30, "operands" : [ - { "kind" : "IdRef", "name" : "'OpCode'" }, - { "kind" : "IdRef", "name" : "'Operands ...'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "OpCode" }, + { "kind" : "IdRef", "name" : "Operands ...", "quantifier" : "*" } ] }, { "opname" : "DebugExpression", "opcode" : 31, "operands" : [ - { "kind" : "IdRef", "name" : "'Operands ...'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Operands ...", "quantifier" : "*" } ] }, { "opname" : "DebugMacroDef", "opcode" : 32, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Value'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Value", "quantifier" : "?" } ] }, { "opname" : "DebugMacroUndef", "opcode" : 33, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Macro'" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Macro" } ] }, { "opname" : "DebugImportedEntity", "opcode" : 34, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Tag'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Entity'" }, - { "kind" : "IdRef", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Tag" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Entity" }, + { "kind" : "IdRef", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugSource", "opcode" : 35, "operands" : [ - { "kind" : "IdRef", "name" : "'File'" }, - { "kind" : "IdRef", "name" : "'Text'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "File" }, + { "kind" : "IdRef", "name" : "Text", "quantifier" : "?" } ] }, { "opname" : "DebugFunctionDefinition", "opcode" : 101, "operands" : [ - { "kind" : "IdRef", "name" : "'Function'" }, - { "kind" : "IdRef", "name" : "'Definition'" } + { "kind" : "IdRef", "name" : "Function" }, + { "kind" : "IdRef", "name" : "Definition" } ] }, { "opname" : "DebugSourceContinued", "opcode" : 102, "operands" : [ - { "kind" : "IdRef", "name" : "'Text'" } + { "kind" : "IdRef", "name" : "Text" } ] }, { "opname" : "DebugLine", "opcode" : 103, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Line Start'" }, - { "kind" : "IdRef", "name" : "'Line End'" }, - { "kind" : "IdRef", "name" : "'Column Start'" }, - { "kind" : "IdRef", "name" : "'Column End'" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Line Start" }, + { "kind" : "IdRef", "name" : "Line End" }, + { "kind" : "IdRef", "name" : "Column Start" }, + { "kind" : "IdRef", "name" : "Column End" } ] }, { @@ -429,34 +413,34 @@ "opname" : "DebugBuildIdentifier", "opcode" : 105, "operands" : [ - { "kind" : "IdRef", "name" : "'Identifier'" }, - { "kind" : "IdRef", "name" : "'Flags'" } + { "kind" : "IdRef", "name" : "Identifier" }, + { "kind" : "IdRef", "name" : "Flags" } ] }, { "opname" : "DebugStoragePath", "opcode" : 106, "operands" : [ - { "kind" : "IdRef", "name" : "'Path'" } + { "kind" : "IdRef", "name" : "Path" } ] }, { "opname" : "DebugEntryPoint", "opcode" : 107, "operands" : [ - { "kind" : "IdRef", "name" : "'Entry Point'" }, - { "kind" : "IdRef", "name" : "'Compilation Unit'" }, - { "kind" : "IdRef", "name" : "'Compiler Signature'" }, - { "kind" : "IdRef", "name" : "'Command-line Arguments'" } + { "kind" : "IdRef", "name" : "Entry Point" }, + { "kind" : "IdRef", "name" : "Compilation Unit" }, + { "kind" : "IdRef", "name" : "Compiler Signature" }, + { "kind" : "IdRef", "name" : "Command-line Arguments" } ] }, { "opname" : "DebugTypeMatrix", "opcode" : 108, "operands" : [ - { "kind" : "IdRef", "name" : "'Vector Type'" }, - { "kind" : "IdRef", "name" : "'Vector Count'" }, - { "kind" : "IdRef", "name" : "'Column Major'" } + { "kind" : "IdRef", "name" : "Vector Type" }, + { "kind" : "IdRef", "name" : "Vector Count" }, + { "kind" : "IdRef", "name" : "Column Major" } ] } ], diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.opencl.debuginfo.100.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.opencl.debuginfo.100.grammar.json index 53b001c..6d4d6e3 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.opencl.debuginfo.100.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.opencl.debuginfo.100.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2018-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.", + "Copyright: 2018-2024 The Khronos Group Inc.", + "License: MIT", "", "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." + "" ], "version" : 200, "revision" : 2, @@ -35,256 +19,256 @@ "opname" : "DebugCompilationUnit", "opcode" : 1, "operands" : [ - { "kind" : "LiteralInteger", "name" : "'Version'" }, - { "kind" : "LiteralInteger", "name" : "'DWARF Version'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "SourceLanguage", "name" : "'Language'" } + { "kind" : "LiteralInteger", "name" : "Version" }, + { "kind" : "LiteralInteger", "name" : "DWARF Version" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "SourceLanguage", "name" : "Language" } ] }, { "opname" : "DebugTypeBasic", "opcode" : 2, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "DebugBaseTypeAttributeEncoding", "name" : "'Encoding'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "DebugBaseTypeAttributeEncoding", "name" : "Encoding" } ] }, { "opname" : "DebugTypePointer", "opcode" : 3, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "StorageClass", "name" : "'Storage Class'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "StorageClass", "name" : "Storage Class" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" } ] }, { "opname" : "DebugTypeQualifier", "opcode" : 4, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "DebugTypeQualifier", "name" : "'Type Qualifier'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "DebugTypeQualifier", "name" : "Type Qualifier" } ] }, { "opname" : "DebugTypeArray", "opcode" : 5, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Component Counts'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Component Counts", "quantifier" : "*" } ] }, { "opname" : "DebugTypeVector", "opcode" : 6, "operands" : [ - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "LiteralInteger", "name" : "'Component Count'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "LiteralInteger", "name" : "Component Count" } ] }, { "opname" : "DebugTypedef", "opcode" : 7, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugTypeFunction", "opcode" : 8, "operands" : [ - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Return Type'" }, - { "kind" : "IdRef", "name" : "'Parameter Types'", "quantifier" : "*" } + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Return Type" }, + { "kind" : "IdRef", "name" : "Parameter Types", "quantifier" : "*" } ] }, { "opname" : "DebugTypeEnum", "opcode" : 9, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Underlying Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "PairIdRefIdRef", "name" : "'Value, Name, Value, Name, ...'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Underlying Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "PairIdRefIdRef", "name" : "Value, Name, Value, Name, ...", "quantifier" : "*" } ] }, { "opname" : "DebugTypeComposite", "opcode" : 10, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "DebugCompositeType", "name" : "'Tag'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Members'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "DebugCompositeType", "name" : "Tag" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Members", "quantifier" : "*" } ] }, { "opname" : "DebugTypeMember", "opcode" : 11, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Offset'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Value'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Value", "quantifier" : "?" } ] }, { "opname" : "DebugTypeInheritance", "opcode" : 12, "operands" : [ - { "kind" : "IdRef", "name" : "'Child'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Offset'" }, - { "kind" : "IdRef", "name" : "'Size'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" } + { "kind" : "IdRef", "name" : "Child" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "Size" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" } ] }, { "opname" : "DebugTypePtrToMember", "opcode" : 13, "operands" : [ - { "kind" : "IdRef", "name" : "'Member Type'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Member Type" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugTypeTemplate", "opcode" : 14, "operands" : [ - { "kind" : "IdRef", "name" : "'Target'" }, - { "kind" : "IdRef", "name" : "'Parameters'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Target" }, + { "kind" : "IdRef", "name" : "Parameters", "quantifier" : "*" } ] }, { "opname" : "DebugTypeTemplateParameter", "opcode" : 15, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Actual Type'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Actual Type" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" } ] }, { "opname" : "DebugTypeTemplateTemplateParameter", "opcode" : 16, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Template Name'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Template Name" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" } ] }, { "opname" : "DebugTypeTemplateParameterPack", "opcode" : 17, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Template Parameters'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Template Parameters", "quantifier" : "*" } ] }, { "opname" : "DebugGlobalVariable", "opcode" : 18, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "IdRef", "name" : "'Variable'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'Static Member Declaration'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "IdRef", "name" : "Variable" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "Static Member Declaration", "quantifier" : "?" } ] }, { "opname" : "DebugFunctionDeclaration", "opcode" : 19, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" } ] }, { "opname" : "DebugFunction", "opcode" : 20, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Linkage Name'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "LiteralInteger", "name" : "'Scope Line'" }, - { "kind" : "IdRef", "name" : "'Function'" }, - { "kind" : "IdRef", "name" : "'Declaration'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Linkage Name" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "LiteralInteger", "name" : "Scope Line" }, + { "kind" : "IdRef", "name" : "Function" }, + { "kind" : "IdRef", "name" : "Declaration", "quantifier" : "?" } ] }, { "opname" : "DebugLexicalBlock", "opcode" : 21, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "IdRef", "name" : "'Name'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "IdRef", "name" : "Name", "quantifier" : "?" } ] }, { "opname" : "DebugLexicalBlockDiscriminator", "opcode" : 22, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Discriminator'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Discriminator" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugScope", "opcode" : 23, "operands" : [ - { "kind" : "IdRef", "name" : "'Scope'" }, - { "kind" : "IdRef", "name" : "'Inlined At'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Scope" }, + { "kind" : "IdRef", "name" : "Inlined At", "quantifier" : "?" } ] }, { @@ -295,119 +279,119 @@ "opname" : "DebugInlinedAt", "opcode" : 25, "operands" : [ - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Scope'" }, - { "kind" : "IdRef", "name" : "'Inlined'", "quantifier" : "?" } + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Scope" }, + { "kind" : "IdRef", "name" : "Inlined", "quantifier" : "?" } ] }, { "opname" : "DebugLocalVariable", "opcode" : 26, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "DebugInfoFlags", "name" : "'Flags'" }, - { "kind" : "LiteralInteger", "name" : "'Arg Number'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "DebugInfoFlags", "name" : "Flags" }, + { "kind" : "LiteralInteger", "name" : "Arg Number", "quantifier" : "?" } ] }, { "opname" : "DebugInlinedVariable", "opcode" : 27, "operands" : [ - { "kind" : "IdRef", "name" : "'Variable'" }, - { "kind" : "IdRef", "name" : "'Inlined'" } + { "kind" : "IdRef", "name" : "Variable" }, + { "kind" : "IdRef", "name" : "Inlined" } ] }, { "opname" : "DebugDeclare", "opcode" : 28, "operands" : [ - { "kind" : "IdRef", "name" : "'Local Variable'" }, - { "kind" : "IdRef", "name" : "'Variable'" }, - { "kind" : "IdRef", "name" : "'Expression'" } + { "kind" : "IdRef", "name" : "Local Variable" }, + { "kind" : "IdRef", "name" : "Variable" }, + { "kind" : "IdRef", "name" : "Expression" } ] }, { "opname" : "DebugValue", "opcode" : 29, "operands" : [ - { "kind" : "IdRef", "name" : "'Local Variable'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Expression'" }, - { "kind" : "IdRef", "name" : "'Indexes'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Local Variable" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Expression" }, + { "kind" : "IdRef", "name" : "Indexes", "quantifier" : "*" } ] }, { "opname" : "DebugOperation", "opcode" : 30, "operands" : [ - { "kind" : "DebugOperation", "name" : "'OpCode'" }, - { "kind" : "LiteralInteger", "name" : "'Operands ...'", "quantifier" : "*" } + { "kind" : "DebugOperation", "name" : "OpCode" }, + { "kind" : "LiteralInteger", "name" : "Operands ...", "quantifier" : "*" } ] }, { "opname" : "DebugExpression", "opcode" : 31, "operands" : [ - { "kind" : "IdRef", "name" : "'Operands ...'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "Operands ...", "quantifier" : "*" } ] }, { "opname" : "DebugMacroDef", "opcode" : 32, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Value'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Value", "quantifier" : "?" } ] }, { "opname" : "DebugMacroUndef", "opcode" : 33, "operands" : [ - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'Macro'" } + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "IdRef", "name" : "Macro" } ] }, { "opname" : "DebugImportedEntity", "opcode" : 34, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "DebugImportedEntity", "name" : "'Tag'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Entity'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" }, - { "kind" : "IdRef", "name" : "'Parent'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "DebugImportedEntity", "name" : "Tag" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Entity" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" }, + { "kind" : "IdRef", "name" : "Parent" } ] }, { "opname" : "DebugSource", "opcode" : 35, "operands" : [ - { "kind" : "IdRef", "name" : "'File'" }, - { "kind" : "IdRef", "name" : "'Text'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "File" }, + { "kind" : "IdRef", "name" : "Text", "quantifier" : "?" } ] }, { "opname" : "DebugModuleINTEL", "opcode" : 36, "operands" : [ - { "kind" : "IdRef", "name" : "'Name'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Parent'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "IdRef", "name" : "'ConfigurationMacros'" }, - { "kind" : "IdRef", "name" : "'IncludePath'" }, - { "kind" : "IdRef", "name" : "'APINotesFile'" }, - { "kind" : "LiteralInteger", "name" : "'IsDeclaration'" } + { "kind" : "IdRef", "name" : "Name" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Parent" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "IdRef", "name" : "ConfigurationMacros" }, + { "kind" : "IdRef", "name" : "IncludePath" }, + { "kind" : "IdRef", "name" : "APINotesFile" }, + { "kind" : "LiteralInteger", "name" : "IsDeclaration" } ], "capability" : "DebugInfoModuleINTEL" } diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json index 21b7876..79394dd 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.opencl.std.100.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "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.", + "Copyright: 2014-2024 The Khronos Group Inc.", + "License: MIT", "", "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." + "" ], "version" : 100, "revision" : 2, @@ -31,1248 +15,1248 @@ "opname" : "acos", "opcode" : 0, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "acosh", "opcode" : 1, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "acospi", "opcode" : 2, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "asin", "opcode" : 3, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "asinh", "opcode" : 4, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "asinpi", "opcode" : 5, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "atan", "opcode" : 6, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "atan2", "opcode" : 7, "operands" : [ - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "atanh", "opcode" : 8, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "atanpi", "opcode" : 9, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "atan2pi", "opcode" : 10, "operands" : [ - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "cbrt", "opcode" : 11, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "ceil", "opcode" : 12, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "copysign", "opcode" : 13, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "cos", "opcode" : 14, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "cosh", "opcode" : 15, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "cospi", "opcode" : 16, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "erfc", "opcode" : 17, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "erf", "opcode" : 18, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "exp", "opcode" : 19, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "exp2", "opcode" : 20, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "exp10", "opcode" : 21, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "expm1", "opcode" : 22, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "fabs", "opcode" : 23, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "fdim", "opcode" : 24, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "floor", "opcode" : 25, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "fma", "opcode" : 26, "operands" : [ - { "kind" : "IdRef", "name" : "'a'" }, - { "kind" : "IdRef", "name" : "'b'" }, - { "kind" : "IdRef", "name" : "'c'" } + { "kind" : "IdRef", "name" : "a" }, + { "kind" : "IdRef", "name" : "b" }, + { "kind" : "IdRef", "name" : "c" } ] }, { "opname" : "fmax", "opcode" : 27, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "fmin", "opcode" : 28, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "fmod", "opcode" : 29, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "fract", "opcode" : 30, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'ptr'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "ptr" } ] }, { "opname" : "frexp", "opcode" : 31, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'exp'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "exp" } ] }, { "opname" : "hypot", "opcode" : 32, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "ilogb", "opcode" : 33, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "ldexp", "opcode" : 34, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'k'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "k" } ] }, { "opname" : "lgamma", "opcode" : 35, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "lgamma_r", "opcode" : 36, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'signp'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "signp" } ] }, { "opname" : "log", "opcode" : 37, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "log2", "opcode" : 38, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "log10", "opcode" : 39, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "log1p", "opcode" : 40, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "logb", "opcode" : 41, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "mad", "opcode" : 42, "operands" : [ - { "kind" : "IdRef", "name" : "'a'" }, - { "kind" : "IdRef", "name" : "'b'" }, - { "kind" : "IdRef", "name" : "'c'" } + { "kind" : "IdRef", "name" : "a" }, + { "kind" : "IdRef", "name" : "b" }, + { "kind" : "IdRef", "name" : "c" } ] }, { "opname" : "maxmag", "opcode" : 43, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "minmag", "opcode" : 44, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "modf", "opcode" : 45, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'iptr'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "iptr" } ] }, { "opname" : "nan", "opcode" : 46, "operands" : [ - { "kind" : "IdRef", "name" : "'nancode'" } + { "kind" : "IdRef", "name" : "nancode" } ] }, { "opname" : "nextafter", "opcode" : 47, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "pow", "opcode" : 48, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "pown", "opcode" : 49, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "powr", "opcode" : 50, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "remainder", "opcode" : 51, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "remquo", "opcode" : 52, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'quo'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "quo" } ] }, { "opname" : "rint", "opcode" : 53, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "rootn", "opcode" : 54, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "round", "opcode" : 55, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "rsqrt", "opcode" : 56, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "sin", "opcode" : 57, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "sincos", "opcode" : 58, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'cosval'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "cosval" } ] }, { "opname" : "sinh", "opcode" : 59, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "sinpi", "opcode" : 60, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "sqrt", "opcode" : 61, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "tan", "opcode" : 62, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "tanh", "opcode" : 63, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "tanpi", "opcode" : 64, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "tgamma", "opcode" : 65, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "trunc", "opcode" : 66, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_cos", "opcode" : 67, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_divide", "opcode" : 68, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "half_exp", "opcode" : 69, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_exp2", "opcode" : 70, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_exp10", "opcode" : 71, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_log", "opcode" : 72, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_log2", "opcode" : 73, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_log10", "opcode" : 74, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_powr", "opcode" : 75, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "half_recip", "opcode" : 76, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_rsqrt", "opcode" : 77, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_sin", "opcode" : 78, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_sqrt", "opcode" : 79, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "half_tan", "opcode" : 80, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_cos", "opcode" : 81, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_divide", "opcode" : 82, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "native_exp", "opcode" : 83, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_exp2", "opcode" : 84, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_exp10", "opcode" : 85, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_log", "opcode" : 86, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_log2", "opcode" : 87, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_log10", "opcode" : 88, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_powr", "opcode" : 89, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "native_recip", "opcode" : 90, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_rsqrt", "opcode" : 91, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_sin", "opcode" : 92, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_sqrt", "opcode" : 93, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "native_tan", "opcode" : 94, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "s_abs", "opcode" : 141, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "s_abs_diff", "opcode" : 142, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "s_add_sat", "opcode" : 143, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_add_sat", "opcode" : 144, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "s_hadd", "opcode" : 145, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_hadd", "opcode" : 146, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "s_rhadd", "opcode" : 147, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_rhadd", "opcode" : 148, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "s_clamp", "opcode" : 149, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'minval'" }, - { "kind" : "IdRef", "name" : "'maxval'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "minval" }, + { "kind" : "IdRef", "name" : "maxval" } ] }, { "opname" : "u_clamp", "opcode" : 150, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'minval'" }, - { "kind" : "IdRef", "name" : "'maxval'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "minval" }, + { "kind" : "IdRef", "name" : "maxval" } ] }, { "opname" : "clz", "opcode" : 151, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "ctz", "opcode" : 152, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "s_mad_hi", "opcode" : 153, "operands" : [ - { "kind" : "IdRef", "name" : "'a'" }, - { "kind" : "IdRef", "name" : "'b'" }, - { "kind" : "IdRef", "name" : "'c'" } + { "kind" : "IdRef", "name" : "a" }, + { "kind" : "IdRef", "name" : "b" }, + { "kind" : "IdRef", "name" : "c" } ] }, { "opname" : "u_mad_sat", "opcode" : 154, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ] }, { "opname" : "s_mad_sat", "opcode" : 155, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ] }, { "opname" : "s_max", "opcode" : 156, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_max", "opcode" : 157, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "s_min", "opcode" : 158, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_min", "opcode" : 159, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "s_mul_hi", "opcode" : 160, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "rotate", "opcode" : 161, "operands" : [ - { "kind" : "IdRef", "name" : "'v'" }, - { "kind" : "IdRef", "name" : "'i'" } + { "kind" : "IdRef", "name" : "v" }, + { "kind" : "IdRef", "name" : "i" } ] }, { "opname" : "s_sub_sat", "opcode" : 162, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_sub_sat", "opcode" : 163, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_upsample", "opcode" : 164, "operands" : [ - { "kind" : "IdRef", "name" : "'hi'" }, - { "kind" : "IdRef", "name" : "'lo'" } + { "kind" : "IdRef", "name" : "hi" }, + { "kind" : "IdRef", "name" : "lo" } ] }, { "opname" : "s_upsample", "opcode" : 165, "operands" : [ - { "kind" : "IdRef", "name" : "'hi'" }, - { "kind" : "IdRef", "name" : "'lo'" } + { "kind" : "IdRef", "name" : "hi" }, + { "kind" : "IdRef", "name" : "lo" } ] }, { "opname" : "popcount", "opcode" : 166, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "s_mad24", "opcode" : 167, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ] }, { "opname" : "u_mad24", "opcode" : 168, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ] }, { "opname" : "s_mul24", "opcode" : 169, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_mul24", "opcode" : 170, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_abs", "opcode" : 201, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "u_abs_diff", "opcode" : 202, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_mul_hi", "opcode" : 203, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "u_mad_hi", "opcode" : 204, "operands" : [ - { "kind" : "IdRef", "name" : "'a'" }, - { "kind" : "IdRef", "name" : "'b'" }, - { "kind" : "IdRef", "name" : "'c'" } + { "kind" : "IdRef", "name" : "a" }, + { "kind" : "IdRef", "name" : "b" }, + { "kind" : "IdRef", "name" : "c" } ] }, { "opname" : "fclamp", "opcode" : 95, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'minval'" }, - { "kind" : "IdRef", "name" : "'maxval'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "minval" }, + { "kind" : "IdRef", "name" : "maxval" } ] }, { "opname" : "degrees", "opcode" :96, "operands" : [ - { "kind" : "IdRef", "name" : "'radians'" } + { "kind" : "IdRef", "name" : "radians" } ] }, { "opname" : "fmax_common", "opcode" : 97, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "fmin_common", "opcode" : 98, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ] }, { "opname" : "mix", "opcode" : 99, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'a'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "a" } ] }, { "opname" : "radians", "opcode" : 100, "operands" : [ - { "kind" : "IdRef", "name" : "'degrees'" } + { "kind" : "IdRef", "name" : "degrees" } ] }, { "opname" : "step", "opcode" : 101, "operands" : [ - { "kind" : "IdRef", "name" : "'edge'" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "edge" }, + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "smoothstep", "opcode" : 102, "operands" : [ - { "kind" : "IdRef", "name" : "'edge0'" }, - { "kind" : "IdRef", "name" : "'edge1'" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "edge0" }, + { "kind" : "IdRef", "name" : "edge1" }, + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "sign", "opcode" : 103, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ] }, { "opname" : "cross", "opcode" : 104, "operands" : [ - { "kind" : "IdRef", "name" : "'p0'" }, - { "kind" : "IdRef", "name" : "'p1'" } + { "kind" : "IdRef", "name" : "p0" }, + { "kind" : "IdRef", "name" : "p1" } ] }, { "opname" : "distance", "opcode" : 105, "operands" : [ - { "kind" : "IdRef", "name" : "'p0'" }, - { "kind" : "IdRef", "name" : "'p1'" } + { "kind" : "IdRef", "name" : "p0" }, + { "kind" : "IdRef", "name" : "p1" } ] }, { "opname" : "length", "opcode" : 106, "operands" : [ - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "normalize", "opcode" : 107, "operands" : [ - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "fast_distance", "opcode" : 108, "operands" : [ - { "kind" : "IdRef", "name" : "'p0'" }, - { "kind" : "IdRef", "name" : "'p1'" } + { "kind" : "IdRef", "name" : "p0" }, + { "kind" : "IdRef", "name" : "p1" } ] }, { "opname" : "fast_length", "opcode" : 109, "operands" : [ - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "fast_normalize", "opcode" : 110, "operands" : [ - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "bitselect", "opcode" : 186, "operands" : [ - { "kind" : "IdRef", "name" : "'a'" }, - { "kind" : "IdRef", "name" : "'b'" }, - { "kind" : "IdRef", "name" : "'c'" } + { "kind" : "IdRef", "name" : "a" }, + { "kind" : "IdRef", "name" : "b" }, + { "kind" : "IdRef", "name" : "c" } ] }, { "opname" : "select", "opcode" : 187, "operands" : [ - { "kind" : "IdRef", "name" : "'a'" }, - { "kind" : "IdRef", "name" : "'b'" }, - { "kind" : "IdRef", "name" : "'c'" } + { "kind" : "IdRef", "name" : "a" }, + { "kind" : "IdRef", "name" : "b" }, + { "kind" : "IdRef", "name" : "c" } ] }, { "opname" : "vloadn", "opcode" : 171, "operands" : [ - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" }, - { "kind" : "LiteralInteger", "name" : "'n'" } + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" }, + { "kind" : "LiteralInteger", "name" : "n" } ] }, { "opname" : "vstoren", "opcode" : 172, "operands" : [ - { "kind" : "IdRef", "name" : "'data'" }, - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "data" }, + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "vload_half", "opcode" : 173, "operands" : [ - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "vload_halfn", "opcode" : 174, "operands" : [ - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" }, - { "kind" : "LiteralInteger", "name" : "'n'" } + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" }, + { "kind" : "LiteralInteger", "name" : "n" } ] }, { "opname" : "vstore_half", "opcode" : 175, "operands" : [ - { "kind" : "IdRef", "name" : "'data'" }, - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "data" }, + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "vstore_half_r", "opcode" : 176, "operands" : [ - { "kind" : "IdRef", "name" : "'data'" }, - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" }, - { "kind" : "FPRoundingMode", "name" : "'mode'" } + { "kind" : "IdRef", "name" : "data" }, + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" }, + { "kind" : "FPRoundingMode", "name" : "mode" } ] }, { "opname" : "vstore_halfn", "opcode" : 177, "operands" : [ - { "kind" : "IdRef", "name" : "'data'" }, - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "data" }, + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "vstore_halfn_r", "opcode" : 178, "operands" : [ - { "kind" : "IdRef", "name" : "'data'" }, - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" }, - { "kind" : "FPRoundingMode", "name" : "'mode'" } + { "kind" : "IdRef", "name" : "data" }, + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" }, + { "kind" : "FPRoundingMode", "name" : "mode" } ] }, { "opname" : "vloada_halfn", "opcode" : 179, "operands" : [ - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" }, - { "kind" : "LiteralInteger", "name" : "'n'" } + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" }, + { "kind" : "LiteralInteger", "name" : "n" } ] }, { "opname" : "vstorea_halfn", "opcode" : 180, "operands" : [ - { "kind" : "IdRef", "name" : "'data'" }, - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" } + { "kind" : "IdRef", "name" : "data" }, + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" } ] }, { "opname" : "vstorea_halfn_r", "opcode" : 181, "operands" : [ - { "kind" : "IdRef", "name" : "'data'" }, - { "kind" : "IdRef", "name" : "'offset'" }, - { "kind" : "IdRef", "name" : "'p'" }, - { "kind" : "FPRoundingMode", "name" : "'mode'" } + { "kind" : "IdRef", "name" : "data" }, + { "kind" : "IdRef", "name" : "offset" }, + { "kind" : "IdRef", "name" : "p" }, + { "kind" : "FPRoundingMode", "name" : "mode" } ] }, { "opname" : "shuffle", "opcode" : 182, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'shuffle mask'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "shuffle mask" } ] }, { "opname" : "shuffle2", "opcode" : 183, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'shuffle mask'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "shuffle mask" } ] }, { "opname" : "printf", "opcode" : 184, "operands" : [ - { "kind" : "IdRef", "name" : "'format'" }, - { "kind" : "IdRef", "name" : "'additional arguments'", "quantifier" : "*" } + { "kind" : "IdRef", "name" : "format" }, + { "kind" : "IdRef", "name" : "additional arguments", "quantifier" : "*" } ] }, { "opname" : "prefetch", "opcode" : 185, "operands" : [ - { "kind" : "IdRef", "name" : "'ptr'" }, - { "kind" : "IdRef", "name" : "'num elements'" } + { "kind" : "IdRef", "name" : "ptr" }, + { "kind" : "IdRef", "name" : "num elements" } ] } ] diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-gcn-shader.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-gcn-shader.grammar.json index e18251b..ed43f95 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-gcn-shader.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-gcn-shader.grammar.json @@ -5,7 +5,7 @@ "opname" : "CubeFaceIndexAMD", "opcode" : 1, "operands" : [ - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "extensions" : [ "SPV_AMD_gcn_shader" ] }, @@ -13,7 +13,7 @@ "opname" : "CubeFaceCoordAMD", "opcode" : 2, "operands" : [ - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "extensions" : [ "SPV_AMD_gcn_shader" ] }, diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-ballot.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-ballot.grammar.json index 62a470e..936fd4e 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-ballot.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-ballot.grammar.json @@ -5,8 +5,8 @@ "opname" : "SwizzleInvocationsAMD", "opcode" : 1, "operands" : [ - { "kind" : "IdRef", "name" : "'data'" }, - { "kind" : "IdRef", "name" : "'offset'" } + { "kind" : "IdRef", "name" : "data" }, + { "kind" : "IdRef", "name" : "offset" } ], "extensions" : [ "SPV_AMD_shader_ballot" ] }, @@ -14,8 +14,8 @@ "opname" : "SwizzleInvocationsMaskedAMD", "opcode" : 2, "operands" : [ - { "kind" : "IdRef", "name" : "'data'" }, - { "kind" : "IdRef", "name" : "'mask'" } + { "kind" : "IdRef", "name" : "data" }, + { "kind" : "IdRef", "name" : "mask" } ], "extensions" : [ "SPV_AMD_shader_ballot" ] }, @@ -23,9 +23,9 @@ "opname" : "WriteInvocationAMD", "opcode" : 3, "operands" : [ - { "kind" : "IdRef", "name" : "'inputValue'" }, - { "kind" : "IdRef", "name" : "'writeValue'" }, - { "kind" : "IdRef", "name" : "'invocationIndex'" } + { "kind" : "IdRef", "name" : "inputValue" }, + { "kind" : "IdRef", "name" : "writeValue" }, + { "kind" : "IdRef", "name" : "invocationIndex" } ], "extensions" : [ "SPV_AMD_shader_ballot" ] }, @@ -33,7 +33,7 @@ "opname" : "MbcntAMD", "opcode" : 4, "operands" : [ - { "kind" : "IdRef", "name" : "'mask'" } + { "kind" : "IdRef", "name" : "mask" } ], "extensions" : [ "SPV_AMD_shader_ballot" ] } diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json index e156b1b..e5a8a01 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-explicit-vertex-parameter.grammar.json @@ -5,8 +5,8 @@ "opname" : "InterpolateAtVertexAMD", "opcode" : 1, "operands" : [ - { "kind" : "IdRef", "name" : "'interpolant'" }, - { "kind" : "IdRef", "name" : "'vertexIdx'" } + { "kind" : "IdRef", "name" : "interpolant" }, + { "kind" : "IdRef", "name" : "vertexIdx" } ], "extensions" : [ "SPV_AMD_shader_explicit_vertex_parameter" ] } diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-trinary-minmax.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-trinary-minmax.grammar.json index c681976..0c7bf7d 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-trinary-minmax.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/extinst.spv-amd-shader-trinary-minmax.grammar.json @@ -5,9 +5,9 @@ "opname" : "FMin3AMD", "opcode" : 1, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ], "extensions" : [ "SPV_AMD_shader_trinary_minmax" ] }, @@ -15,9 +15,9 @@ "opname" : "UMin3AMD", "opcode" : 2, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ], "extensions" : [ "SPV_AMD_shader_trinary_minmax" ] }, @@ -25,9 +25,9 @@ "opname" : "SMin3AMD", "opcode" : 3, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ], "extensions" : [ "SPV_AMD_shader_trinary_minmax" ] }, @@ -35,9 +35,9 @@ "opname" : "FMax3AMD", "opcode" : 4, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ], "extensions" : [ "SPV_AMD_shader_trinary_minmax" ] }, @@ -45,9 +45,9 @@ "opname" : "UMax3AMD", "opcode" : 5, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ], "extensions" : [ "SPV_AMD_shader_trinary_minmax" ] }, @@ -55,9 +55,9 @@ "opname" : "SMax3AMD", "opcode" : 6, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ], "extensions" : [ "SPV_AMD_shader_trinary_minmax" ] }, @@ -65,9 +65,9 @@ "opname" : "FMid3AMD", "opcode" : 7, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ], "extensions" : [ "SPV_AMD_shader_trinary_minmax" ] }, @@ -75,9 +75,9 @@ "opname" : "UMid3AMD", "opcode" : 8, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ], "extensions" : [ "SPV_AMD_shader_trinary_minmax" ] }, @@ -85,9 +85,9 @@ "opname" : "SMid3AMD", "opcode" : 9, "operands" : [ - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" }, - { "kind" : "IdRef", "name" : "'z'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" }, + { "kind" : "IdRef", "name" : "z" } ], "extensions" : [ "SPV_AMD_shader_trinary_minmax" ] } diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.core.grammar.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.core.grammar.json index dde0114..b7df252 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.core.grammar.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.core.grammar.json @@ -1,28 +1,12 @@ { "copyright" : [ - "Copyright (c) 2014-2024 The Khronos Group Inc.", + "Copyright: 2014-2024 The Khronos Group Inc.", + "License: MIT", "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and/or associated documentation files (the \"Materials\"),", - "to deal in the Materials without restriction, including without limitation", - "the rights to use, copy, modify, merge, publish, distribute, sublicense,", - "and/or sell copies of the Materials, and to permit persons to whom the", - "Materials are furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Materials.", - "", - "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", - "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", - "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ ", - "", - "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", - "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", - "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", - "IN THE MATERIALS." + "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS", + "KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS", + "SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT", + "https://www.khronos.org/registry/" ], "magic_number" : "0x07230203", "major_version" : 1, @@ -128,6 +112,10 @@ "tag" : "Non-Uniform", "heading" : "Non-Uniform Instructions" }, + { + "tag" : "Tensor", + "heading" : "Tensor Instructions" + }, { "tag" : "Reserved", "heading" : "Reserved Instructions" @@ -155,7 +143,7 @@ "class" : "Debug", "opcode" : 2, "operands" : [ - { "kind" : "LiteralString", "name" : "'Continued Source'" } + { "kind" : "LiteralString", "name" : "Continued Source" } ], "version": "1.0" }, @@ -165,9 +153,9 @@ "opcode" : 3, "operands" : [ { "kind" : "SourceLanguage" }, - { "kind" : "LiteralInteger", "name" : "'Version'" }, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'File'" }, - { "kind" : "LiteralString", "quantifier" : "?", "name" : "'Source'" } + { "kind" : "LiteralInteger", "name" : "Version" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "File" }, + { "kind" : "LiteralString", "quantifier" : "?", "name" : "Source" } ], "version": "1.0" }, @@ -176,7 +164,7 @@ "class" : "Debug", "opcode" : 4, "operands" : [ - { "kind" : "LiteralString", "name" : "'Extension'" } + { "kind" : "LiteralString", "name" : "Extension" } ], "version": "1.0" }, @@ -185,8 +173,8 @@ "class" : "Debug", "opcode" : 5, "operands" : [ - { "kind" : "IdRef", "name" : "'Target'" }, - { "kind" : "LiteralString", "name" : "'Name'" } + { "kind" : "IdRef", "name" : "Target" }, + { "kind" : "LiteralString", "name" : "Name" } ], "version": "1.0" }, @@ -195,9 +183,9 @@ "class" : "Debug", "opcode" : 6, "operands" : [ - { "kind" : "IdRef", "name" : "'Type'" }, - { "kind" : "LiteralInteger", "name" : "'Member'" }, - { "kind" : "LiteralString", "name" : "'Name'" } + { "kind" : "IdRef", "name" : "Type" }, + { "kind" : "LiteralInteger", "name" : "Member" }, + { "kind" : "LiteralString", "name" : "Name" } ], "version": "1.0" }, @@ -207,7 +195,7 @@ "opcode" : 7, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "LiteralString", "name" : "'String'" } + { "kind" : "LiteralString", "name" : "String" } ], "version": "1.0" }, @@ -216,9 +204,9 @@ "class" : "Debug", "opcode" : 8, "operands" : [ - { "kind" : "IdRef", "name" : "'File'" }, - { "kind" : "LiteralInteger", "name" : "'Line'" }, - { "kind" : "LiteralInteger", "name" : "'Column'" } + { "kind" : "IdRef", "name" : "File" }, + { "kind" : "LiteralInteger", "name" : "Line" }, + { "kind" : "LiteralInteger", "name" : "Column" } ], "version": "1.0" }, @@ -227,7 +215,7 @@ "class" : "Extension", "opcode" : 10, "operands" : [ - { "kind" : "LiteralString", "name" : "'Name'" } + { "kind" : "LiteralString", "name" : "Name" } ], "version": "1.0" }, @@ -237,7 +225,7 @@ "opcode" : 11, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "LiteralString", "name" : "'Name'" } + { "kind" : "LiteralString", "name" : "Name" } ], "version": "1.0" }, @@ -248,9 +236,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Set'" }, - { "kind" : "LiteralExtInstInteger", "name" : "'Instruction'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Operand 1', +\n'Operand 2', +\n..." } + { "kind" : "IdRef", "name" : "Set" }, + { "kind" : "LiteralExtInstInteger", "name" : "Instruction" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Operand 1, Operand 2, ..." } ], "version": "1.0" }, @@ -270,9 +258,9 @@ "opcode" : 15, "operands" : [ { "kind" : "ExecutionModel" }, - { "kind" : "IdRef", "name" : "'Entry Point'" }, - { "kind" : "LiteralString", "name" : "'Name'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Interface'" } + { "kind" : "IdRef", "name" : "Entry Point" }, + { "kind" : "LiteralString", "name" : "Name" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Interface" } ], "version": "1.0" }, @@ -281,8 +269,8 @@ "class" : "Mode-Setting", "opcode" : 16, "operands" : [ - { "kind" : "IdRef", "name" : "'Entry Point'" }, - { "kind" : "ExecutionMode", "name" : "'Mode'" } + { "kind" : "IdRef", "name" : "Entry Point" }, + { "kind" : "ExecutionMode", "name" : "Mode" } ], "version": "1.0" }, @@ -291,7 +279,7 @@ "class" : "Mode-Setting", "opcode" : 17, "operands" : [ - { "kind" : "Capability", "name" : "'Capability'" } + { "kind" : "Capability", "name" : "Capability" } ], "version": "1.0" }, @@ -319,8 +307,8 @@ "opcode" : 21, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "LiteralInteger", "name" : "'Width'" }, - { "kind" : "LiteralInteger", "name" : "'Signedness'" } + { "kind" : "LiteralInteger", "name" : "Width" }, + { "kind" : "LiteralInteger", "name" : "Signedness" } ], "version": "1.0" }, @@ -330,8 +318,8 @@ "opcode" : 22, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "LiteralInteger", "name" : "'Width'" }, - { "kind" : "FPEncoding", "quantifier" : "?", "name" : "'Floating Point Encoding'" } + { "kind" : "LiteralInteger", "name" : "Width" }, + { "kind" : "FPEncoding", "quantifier" : "?", "name" : "Floating Point Encoding" } ], "version": "1.0" }, @@ -341,8 +329,8 @@ "opcode" : 23, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Component Type'" }, - { "kind" : "LiteralInteger", "name" : "'Component Count'" } + { "kind" : "IdRef", "name" : "Component Type" }, + { "kind" : "LiteralInteger", "name" : "Component Count" } ], "version": "1.0" }, @@ -352,8 +340,8 @@ "opcode" : 24, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Column Type'" }, - { "kind" : "LiteralInteger", "name" : "'Column Count'" } + { "kind" : "IdRef", "name" : "Column Type" }, + { "kind" : "LiteralInteger", "name" : "Column Count" } ], "capabilities" : [ "Matrix" ], "version": "1.0" @@ -364,12 +352,12 @@ "opcode" : 25, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Type'" }, + { "kind" : "IdRef", "name" : "Sampled Type" }, { "kind" : "Dim" }, - { "kind" : "LiteralInteger", "name" : "'Depth'" }, - { "kind" : "LiteralInteger", "name" : "'Arrayed'" }, - { "kind" : "LiteralInteger", "name" : "'MS'" }, - { "kind" : "LiteralInteger", "name" : "'Sampled'" }, + { "kind" : "LiteralInteger", "name" : "Depth" }, + { "kind" : "LiteralInteger", "name" : "Arrayed" }, + { "kind" : "LiteralInteger", "name" : "MS" }, + { "kind" : "LiteralInteger", "name" : "Sampled" }, { "kind" : "ImageFormat" }, { "kind" : "AccessQualifier", "quantifier" : "?" } ], @@ -390,7 +378,7 @@ "opcode" : 27, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image Type'" } + { "kind" : "IdRef", "name" : "Image Type" } ], "version": "1.0" }, @@ -400,8 +388,8 @@ "opcode" : 28, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Element Type'" }, - { "kind" : "IdRef", "name" : "'Length'" } + { "kind" : "IdRef", "name" : "Element Type" }, + { "kind" : "IdRef", "name" : "Length" } ], "version": "1.0" }, @@ -411,7 +399,7 @@ "opcode" : 29, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Element Type'" } + { "kind" : "IdRef", "name" : "Element Type" } ], "capabilities" : [ "Shader" ], "version": "1.0" @@ -422,7 +410,7 @@ "opcode" : 30, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Member 0 type', +\n'member 1 type', +\n..." } + { "kind" : "IdRef", "quantifier" : "*", "name" : "Member 0 type, member 1 type, ..." } ], "version": "1.0" }, @@ -444,7 +432,7 @@ "operands" : [ { "kind" : "IdResult" }, { "kind" : "StorageClass" }, - { "kind" : "IdRef", "name" : "'Type'" } + { "kind" : "IdRef", "name" : "Type" } ], "version": "1.0" }, @@ -454,8 +442,8 @@ "opcode" : 33, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Return Type'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Parameter 0 Type', +\n'Parameter 1 Type', +\n..." } + { "kind" : "IdRef", "name" : "Return Type" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Parameter 0 Type, Parameter 1 Type, ..." } ], "version": "1.0" }, @@ -505,7 +493,7 @@ "opcode" : 38, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "AccessQualifier", "name" : "'Qualifier'" } + { "kind" : "AccessQualifier", "name" : "Qualifier" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -515,7 +503,7 @@ "class" : "Type-Declaration", "opcode" : 39, "operands" : [ - { "kind" : "IdRef", "name" : "'Pointer Type'" }, + { "kind" : "IdRef", "name" : "Pointer Type" }, { "kind" : "StorageClass" } ], "capabilities" : [ @@ -551,7 +539,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "LiteralContextDependentNumber", "name" : "'Value'" } + { "kind" : "LiteralContextDependentNumber", "name" : "Value" } ], "version": "1.0" }, @@ -562,7 +550,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Constituents'" } + { "kind" : "IdRef", "quantifier" : "*", "name" : "Constituents" } ], "version": "1.0" }, @@ -574,7 +562,7 @@ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, { "kind" : "SamplerAddressingMode" }, - { "kind" : "LiteralInteger", "name" : "'Param'" }, + { "kind" : "LiteralInteger", "name" : "Param" }, { "kind" : "SamplerFilterMode" } ], "capabilities" : [ "LiteralSampler" ], @@ -617,7 +605,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "LiteralContextDependentNumber", "name" : "'Value'" } + { "kind" : "LiteralContextDependentNumber", "name" : "Value" } ], "version": "1.0" }, @@ -628,7 +616,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Constituents'" } + { "kind" : "IdRef", "quantifier" : "*", "name" : "Constituents" } ], "version": "1.0" }, @@ -639,7 +627,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "LiteralSpecConstantOpInteger", "name" : "'Opcode'" } + { "kind" : "LiteralSpecConstantOpInteger", "name" : "Opcode" } ], "version": "1.0" }, @@ -651,7 +639,7 @@ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, { "kind" : "FunctionControl" }, - { "kind" : "IdRef", "name" : "'Function Type'" } + { "kind" : "IdRef", "name" : "Function Type" } ], "version": "1.0" }, @@ -678,8 +666,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Function'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Argument 0', +\n'Argument 1', +\n..." } + { "kind" : "IdRef", "name" : "Function" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Argument 0, Argument 1, ..."} ], "version": "1.0" }, @@ -691,7 +679,7 @@ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, { "kind" : "StorageClass" }, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'Initializer'" } + { "kind" : "IdRef", "quantifier" : "?", "name" : "Initializer" } ], "version": "1.0" }, @@ -702,9 +690,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'Sample'" } + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Sample" } ], "version": "1.0" }, @@ -715,7 +703,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, + { "kind" : "IdRef", "name" : "Pointer" }, { "kind" : "MemoryAccess", "quantifier" : "?" } ], "version": "1.0" @@ -725,8 +713,8 @@ "class" : "Memory", "opcode" : 62, "operands" : [ - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'Object'" }, + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Object" }, { "kind" : "MemoryAccess", "quantifier" : "?" } ], "version": "1.0" @@ -736,8 +724,8 @@ "class" : "Memory", "opcode" : 63, "operands" : [ - { "kind" : "IdRef", "name" : "'Target'" }, - { "kind" : "IdRef", "name" : "'Source'" }, + { "kind" : "IdRef", "name" : "Target" }, + { "kind" : "IdRef", "name" : "Source" }, { "kind" : "MemoryAccess", "quantifier" : "?" }, { "kind" : "MemoryAccess", "quantifier" : "?" } ], @@ -748,9 +736,9 @@ "class" : "Memory", "opcode" : 64, "operands" : [ - { "kind" : "IdRef", "name" : "'Target'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Size'" }, + { "kind" : "IdRef", "name" : "Target" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Size" }, { "kind" : "MemoryAccess", "quantifier" : "?" }, { "kind" : "MemoryAccess", "quantifier" : "?" } ], @@ -767,8 +755,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Indexes" } ], "version": "1.0" }, @@ -779,8 +767,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Indexes" } ], "version": "1.0" }, @@ -791,9 +779,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Element'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Element" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Indexes" } ], "capabilities" : [ "Addresses", @@ -810,8 +798,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Structure'" }, - { "kind" : "LiteralInteger", "name" : "'Array member'" } + { "kind" : "IdRef", "name" : "Structure" }, + { "kind" : "LiteralInteger", "name" : "Array member" } ], "capabilities" : [ "Shader" ], "version": "1.0" @@ -823,7 +811,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" } + { "kind" : "IdRef", "name" : "Pointer" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -835,9 +823,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Element'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Element" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Indexes" } ], "capabilities" : [ "Addresses" ], "version": "1.0" @@ -847,7 +835,7 @@ "class" : "Annotation", "opcode" : 71, "operands" : [ - { "kind" : "IdRef", "name" : "'Target'" }, + { "kind" : "IdRef", "name" : "Target" }, { "kind" : "Decoration" } ], "version": "1.0" @@ -857,8 +845,8 @@ "class" : "Annotation", "opcode" : 72, "operands" : [ - { "kind" : "IdRef", "name" : "'Structure Type'" }, - { "kind" : "LiteralInteger", "name" : "'Member'" }, + { "kind" : "IdRef", "name" : "Structure Type" }, + { "kind" : "LiteralInteger", "name" : "Member" }, { "kind" : "Decoration" } ], "version": "1.0" @@ -877,8 +865,8 @@ "class" : "Annotation", "opcode" : 74, "operands" : [ - { "kind" : "IdRef", "name" : "'Decoration Group'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Targets'" } + { "kind" : "IdRef", "name" : "Decoration Group" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Targets" } ], "version": "1.0" }, @@ -887,8 +875,8 @@ "class" : "Annotation", "opcode" : 75, "operands" : [ - { "kind" : "IdRef", "name" : "'Decoration Group'" }, - { "kind" : "PairIdRefLiteralInteger", "quantifier" : "*", "name" : "'Targets'" } + { "kind" : "IdRef", "name" : "Decoration Group" }, + { "kind" : "PairIdRefLiteralInteger", "quantifier" : "*", "name" : "Targets" } ], "version": "1.0" }, @@ -899,8 +887,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector'" }, - { "kind" : "IdRef", "name" : "'Index'" } + { "kind" : "IdRef", "name" : "Vector" }, + { "kind" : "IdRef", "name" : "Index" } ], "version": "1.0" }, @@ -911,9 +899,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector'" }, - { "kind" : "IdRef", "name" : "'Component'" }, - { "kind" : "IdRef", "name" : "'Index'" } + { "kind" : "IdRef", "name" : "Vector" }, + { "kind" : "IdRef", "name" : "Component" }, + { "kind" : "IdRef", "name" : "Index" } ], "version": "1.0" }, @@ -924,9 +912,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "'Components'" } + { "kind" : "IdRef", "name" : "Vector 1" }, + { "kind" : "IdRef", "name" : "Vector 2" }, + { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "Components" } ], "version": "1.0" }, @@ -937,7 +925,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Constituents'" } + { "kind" : "IdRef", "quantifier" : "*", "name" : "Constituents" } ], "version": "1.0" }, @@ -948,8 +936,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Composite'" }, - { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "'Indexes'" } + { "kind" : "IdRef", "name" : "Composite" }, + { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "Indexes" } ], "version": "1.0" }, @@ -960,9 +948,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Object'" }, - { "kind" : "IdRef", "name" : "'Composite'" }, - { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "'Indexes'" } + { "kind" : "IdRef", "name" : "Object" }, + { "kind" : "IdRef", "name" : "Composite" }, + { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "Indexes" } ], "version": "1.0" }, @@ -973,7 +961,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "version": "1.0" }, @@ -984,7 +972,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Matrix'" } + { "kind" : "IdRef", "name" : "Matrix" } ], "capabilities" : [ "Matrix" ], "version": "1.0" @@ -996,8 +984,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Sampler'" } + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Sampler" } ], "version": "1.0" }, @@ -1008,8 +996,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "Shader" ], @@ -1022,8 +1010,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands" } ], "version": "1.0" @@ -1035,9 +1023,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'D~ref~'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "D~ref~" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "Shader" ], @@ -1050,9 +1038,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'D~ref~'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "D~ref~" }, { "kind" : "ImageOperands" } ], "capabilities" : [ "Shader" ], @@ -1065,8 +1053,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "Shader" ], @@ -1079,8 +1067,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands" } ], "capabilities" : [ "Shader" ], @@ -1093,9 +1081,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'D~ref~'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "D~ref~" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "Shader" ], @@ -1108,9 +1096,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'D~ref~'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "D~ref~" }, { "kind" : "ImageOperands" } ], "capabilities" : [ "Shader" ], @@ -1123,8 +1111,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "version": "1.0" @@ -1136,9 +1124,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'Component'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Component" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "Shader" ], @@ -1151,9 +1139,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'D~ref~'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "D~ref~" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "Shader" ], @@ -1166,8 +1154,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "version": "1.0" @@ -1177,9 +1165,9 @@ "class" : "Image", "opcode" : 99, "operands" : [ - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'Texel'" }, + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Texel" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "version": "1.0" @@ -1191,7 +1179,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" } + { "kind" : "IdRef", "name" : "Sampled Image" } ], "version": "1.0" }, @@ -1202,7 +1190,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" } + { "kind" : "IdRef", "name" : "Image" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1214,7 +1202,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" } + { "kind" : "IdRef", "name" : "Image" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1226,8 +1214,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Level of Detail'" } + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Level of Detail" } ], "capabilities" : [ "Kernel", "ImageQuery" ], "version": "1.0" @@ -1239,7 +1227,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" } + { "kind" : "IdRef", "name" : "Image" } ], "capabilities" : [ "Kernel", "ImageQuery" ], "version": "1.0" @@ -1251,8 +1239,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" } + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" } ], "capabilities" : [ "ImageQuery" ], "version": "1.0" @@ -1264,7 +1252,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" } + { "kind" : "IdRef", "name" : "Image" } ], "capabilities" : [ "Kernel", "ImageQuery" ], "version": "1.0" @@ -1276,7 +1264,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" } + { "kind" : "IdRef", "name" : "Image" } ], "capabilities" : [ "Kernel", "ImageQuery" ], "version": "1.0" @@ -1288,7 +1276,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Float Value'" } + { "kind" : "IdRef", "name" : "Float Value" } ], "version": "1.0" }, @@ -1299,7 +1287,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Float Value'" } + { "kind" : "IdRef", "name" : "Float Value" } ], "version": "1.0" }, @@ -1310,7 +1298,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Signed Value'" } + { "kind" : "IdRef", "name" : "Signed Value" } ], "version": "1.0" }, @@ -1321,7 +1309,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Unsigned Value'" } + { "kind" : "IdRef", "name" : "Unsigned Value" } ], "version": "1.0" }, @@ -1332,7 +1320,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Unsigned Value'" } + { "kind" : "IdRef", "name" : "Unsigned Value" } ], "version": "1.0" }, @@ -1343,7 +1331,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Signed Value'" } + { "kind" : "IdRef", "name" : "Signed Value" } ], "version": "1.0" }, @@ -1354,7 +1342,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Float Value'" } + { "kind" : "IdRef", "name" : "Float Value" } ], "version": "1.0" }, @@ -1365,7 +1353,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -1376,7 +1364,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" } + { "kind" : "IdRef", "name" : "Pointer" } ], "capabilities" : [ "Addresses", @@ -1391,7 +1379,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Signed Value'" } + { "kind" : "IdRef", "name" : "Signed Value" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1403,7 +1391,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Unsigned Value'" } + { "kind" : "IdRef", "name" : "Unsigned Value" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1415,7 +1403,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Integer Value'" } + { "kind" : "IdRef", "name" : "Integer Value" } ], "capabilities" : [ "Addresses", @@ -1430,7 +1418,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" } + { "kind" : "IdRef", "name" : "Pointer" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1442,7 +1430,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" } + { "kind" : "IdRef", "name" : "Pointer" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1454,8 +1442,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "StorageClass", "name" : "'Storage'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "StorageClass", "name" : "Storage" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1467,7 +1455,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "version": "1.0" }, @@ -1478,7 +1466,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "version": "1.0" }, @@ -1489,7 +1477,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "version": "1.0" }, @@ -1500,8 +1488,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1512,8 +1500,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1524,8 +1512,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1536,8 +1524,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1548,8 +1536,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1560,8 +1548,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1572,8 +1560,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1584,8 +1572,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1596,8 +1584,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1608,8 +1596,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1620,8 +1608,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1632,8 +1620,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1644,8 +1632,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1656,8 +1644,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1668,8 +1656,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector'" }, - { "kind" : "IdRef", "name" : "'Scalar'" } + { "kind" : "IdRef", "name" : "Vector" }, + { "kind" : "IdRef", "name" : "Scalar" } ], "version": "1.0" }, @@ -1680,8 +1668,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Matrix'" }, - { "kind" : "IdRef", "name" : "'Scalar'" } + { "kind" : "IdRef", "name" : "Matrix" }, + { "kind" : "IdRef", "name" : "Scalar" } ], "capabilities" : [ "Matrix" ], "version": "1.0" @@ -1693,8 +1681,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector'" }, - { "kind" : "IdRef", "name" : "'Matrix'" } + { "kind" : "IdRef", "name" : "Vector" }, + { "kind" : "IdRef", "name" : "Matrix" } ], "capabilities" : [ "Matrix" ], "version": "1.0" @@ -1706,8 +1694,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Matrix'" }, - { "kind" : "IdRef", "name" : "'Vector'" } + { "kind" : "IdRef", "name" : "Matrix" }, + { "kind" : "IdRef", "name" : "Vector" } ], "capabilities" : [ "Matrix" ], "version": "1.0" @@ -1719,8 +1707,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'LeftMatrix'" }, - { "kind" : "IdRef", "name" : "'RightMatrix'" } + { "kind" : "IdRef", "name" : "LeftMatrix" }, + { "kind" : "IdRef", "name" : "RightMatrix" } ], "capabilities" : [ "Matrix" ], "version": "1.0" @@ -1732,8 +1720,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" } + { "kind" : "IdRef", "name" : "Vector 1" }, + { "kind" : "IdRef", "name" : "Vector 2" } ], "capabilities" : [ "Matrix" ], "version": "1.0" @@ -1745,8 +1733,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" } + { "kind" : "IdRef", "name" : "Vector 1" }, + { "kind" : "IdRef", "name" : "Vector 2" } ], "version": "1.0" }, @@ -1757,8 +1745,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1769,8 +1757,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1781,8 +1769,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1793,8 +1781,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1805,7 +1793,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector'" } + { "kind" : "IdRef", "name" : "Vector" } ], "version": "1.0" }, @@ -1816,7 +1804,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector'" } + { "kind" : "IdRef", "name" : "Vector" } ], "version": "1.0" }, @@ -1827,7 +1815,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ], "version": "1.0" }, @@ -1838,7 +1826,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ], "version": "1.0" }, @@ -1849,7 +1837,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1861,7 +1849,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1873,7 +1861,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'x'" } + { "kind" : "IdRef", "name" : "x" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1885,8 +1873,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ], "capabilities" : [ "Kernel" ], "version" : "1.0", @@ -1899,8 +1887,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1912,8 +1900,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'x'" }, - { "kind" : "IdRef", "name" : "'y'" } + { "kind" : "IdRef", "name" : "x" }, + { "kind" : "IdRef", "name" : "y" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -1925,8 +1913,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1937,8 +1925,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1949,8 +1937,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -1961,8 +1949,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version" : "1.0" }, @@ -1973,7 +1961,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "version": "1.0" }, @@ -1984,9 +1972,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Condition'" }, - { "kind" : "IdRef", "name" : "'Object 1'" }, - { "kind" : "IdRef", "name" : "'Object 2'" } + { "kind" : "IdRef", "name" : "Condition" }, + { "kind" : "IdRef", "name" : "Object 1" }, + { "kind" : "IdRef", "name" : "Object 2" } ], "version": "1.0" }, @@ -1997,8 +1985,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2009,8 +1997,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2021,8 +2009,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2033,8 +2021,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2045,8 +2033,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2057,8 +2045,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2069,8 +2057,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2081,8 +2069,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2093,8 +2081,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2105,8 +2093,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2117,8 +2105,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2129,8 +2117,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2141,8 +2129,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2153,8 +2141,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2165,8 +2153,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2177,8 +2165,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2189,8 +2177,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2201,8 +2189,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2213,8 +2201,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2225,8 +2213,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2237,8 +2225,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2249,8 +2237,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2261,8 +2249,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Shift'" } + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Shift" } ], "version": "1.0" }, @@ -2273,8 +2261,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Shift'" } + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Shift" } ], "version": "1.0" }, @@ -2285,8 +2273,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Shift'" } + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Shift" } ], "version": "1.0" }, @@ -2297,8 +2285,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2309,8 +2297,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2321,8 +2309,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version": "1.0" }, @@ -2333,7 +2321,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "version": "1.0" }, @@ -2344,10 +2332,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Insert'" }, - { "kind" : "IdRef", "name" : "'Offset'" }, - { "kind" : "IdRef", "name" : "'Count'" } + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Insert" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "Count" } ], "capabilities" : [ "Shader", "BitInstructions" ], "version": "1.0" @@ -2359,9 +2347,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Offset'" }, - { "kind" : "IdRef", "name" : "'Count'" } + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "Count" } ], "capabilities" : [ "Shader", "BitInstructions" ], "version": "1.0" @@ -2373,9 +2361,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Offset'" }, - { "kind" : "IdRef", "name" : "'Count'" } + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "Count" } ], "capabilities" : [ "Shader", "BitInstructions" ], "version": "1.0" @@ -2387,7 +2375,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" } + { "kind" : "IdRef", "name" : "Base" } ], "capabilities" : [ "Shader", "BitInstructions" ], "version": "1.0" @@ -2399,7 +2387,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" } + { "kind" : "IdRef", "name" : "Base" } ], "version": "1.0" }, @@ -2410,7 +2398,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "capabilities" : [ "Shader" ], "version": "1.0" @@ -2422,7 +2410,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "capabilities" : [ "Shader" ], "version": "1.0" @@ -2434,7 +2422,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "capabilities" : [ "Shader" ], "version": "1.0" @@ -2446,7 +2434,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "capabilities" : [ "DerivativeControl" ], "version": "1.0" @@ -2458,7 +2446,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "capabilities" : [ "DerivativeControl" ], "version": "1.0" @@ -2470,7 +2458,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "capabilities" : [ "DerivativeControl" ], "version": "1.0" @@ -2482,7 +2470,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "capabilities" : [ "DerivativeControl" ], "version": "1.0" @@ -2494,7 +2482,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "capabilities" : [ "DerivativeControl" ], "version": "1.0" @@ -2506,7 +2494,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'P'" } + { "kind" : "IdRef", "name" : "P" } ], "capabilities" : [ "DerivativeControl" ], "version": "1.0" @@ -2530,7 +2518,7 @@ "class" : "Primitive", "opcode" : 220, "operands" : [ - { "kind" : "IdRef", "name" : "'Stream'" } + { "kind" : "IdRef", "name" : "Stream" } ], "capabilities" : [ "GeometryStreams" ], "version": "1.0" @@ -2540,7 +2528,7 @@ "class" : "Primitive", "opcode" : 221, "operands" : [ - { "kind" : "IdRef", "name" : "'Stream'" } + { "kind" : "IdRef", "name" : "Stream" } ], "capabilities" : [ "GeometryStreams" ], "version": "1.0" @@ -2550,9 +2538,9 @@ "class" : "Barrier", "opcode" : 224, "operands" : [ - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" } ], "version": "1.0" }, @@ -2561,8 +2549,8 @@ "class" : "Barrier", "opcode" : 225, "operands" : [ - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" } + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" } ], "version": "1.0" }, @@ -2573,9 +2561,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" } ], "version": "1.0" }, @@ -2584,10 +2572,10 @@ "class" : "Atomic", "opcode" : 228, "operands" : [ - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2598,10 +2586,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2612,12 +2600,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Equal'" }, - { "kind" : "IdMemorySemantics", "name" : "'Unequal'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Comparator'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Equal" }, + { "kind" : "IdMemorySemantics", "name" : "Unequal" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Comparator" } ], "version": "1.0" }, @@ -2628,12 +2616,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Equal'" }, - { "kind" : "IdMemorySemantics", "name" : "'Unequal'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Comparator'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Equal" }, + { "kind" : "IdMemorySemantics", "name" : "Unequal" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Comparator" } ], "capabilities" : [ "Kernel" ], "version" : "1.0", @@ -2646,9 +2634,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" } ], "version": "1.0" }, @@ -2659,9 +2647,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" } ], "version": "1.0" }, @@ -2672,10 +2660,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2686,10 +2674,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2700,10 +2688,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2714,10 +2702,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2728,10 +2716,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2742,10 +2730,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2756,10 +2744,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2770,10 +2758,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2784,10 +2772,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2798,7 +2786,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "PairIdRefIdRef", "quantifier" : "*", "name" : "'Variable, Parent, ...'" } + { "kind" : "PairIdRefIdRef", "quantifier" : "*", "name" : "Variable, Parent, ..." } ], "version": "1.0" }, @@ -2807,8 +2795,8 @@ "class" : "Control-Flow", "opcode" : 246, "operands" : [ - { "kind" : "IdRef", "name" : "'Merge Block'" }, - { "kind" : "IdRef", "name" : "'Continue Target'" }, + { "kind" : "IdRef", "name" : "Merge Block" }, + { "kind" : "IdRef", "name" : "Continue Target" }, { "kind" : "LoopControl" } ], "version": "1.0" @@ -2818,7 +2806,7 @@ "class" : "Control-Flow", "opcode" : 247, "operands" : [ - { "kind" : "IdRef", "name" : "'Merge Block'" }, + { "kind" : "IdRef", "name" : "Merge Block" }, { "kind" : "SelectionControl" } ], "version": "1.0" @@ -2837,7 +2825,7 @@ "class" : "Control-Flow", "opcode" : 249, "operands" : [ - { "kind" : "IdRef", "name" : "'Target Label'" } + { "kind" : "IdRef", "name" : "Target Label" } ], "version": "1.0" }, @@ -2846,10 +2834,10 @@ "class" : "Control-Flow", "opcode" : 250, "operands" : [ - { "kind" : "IdRef", "name" : "'Condition'" }, - { "kind" : "IdRef", "name" : "'True Label'" }, - { "kind" : "IdRef", "name" : "'False Label'" }, - { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "'Branch weights'" } + { "kind" : "IdRef", "name" : "Condition" }, + { "kind" : "IdRef", "name" : "True Label" }, + { "kind" : "IdRef", "name" : "False Label" }, + { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "Branch weights" } ], "version": "1.0" }, @@ -2858,9 +2846,9 @@ "class" : "Control-Flow", "opcode" : 251, "operands" : [ - { "kind" : "IdRef", "name" : "'Selector'" }, - { "kind" : "IdRef", "name" : "'Default'" }, - { "kind" : "PairLiteralIntegerIdRef", "quantifier" : "*", "name" : "'Target'" } + { "kind" : "IdRef", "name" : "Selector" }, + { "kind" : "IdRef", "name" : "Default" }, + { "kind" : "PairLiteralIntegerIdRef", "quantifier" : "*", "name" : "Target" } ], "version": "1.0" }, @@ -2882,7 +2870,7 @@ "class" : "Control-Flow", "opcode" : 254, "operands" : [ - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Value" } ], "version": "1.0" }, @@ -2897,8 +2885,8 @@ "class" : "Control-Flow", "opcode" : 256, "operands" : [ - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "LiteralInteger", "name" : "'Size'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "LiteralInteger", "name" : "Size" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -2908,8 +2896,8 @@ "class" : "Control-Flow", "opcode" : 257, "operands" : [ - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "LiteralInteger", "name" : "'Size'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "LiteralInteger", "name" : "Size" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -2921,12 +2909,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Destination'" }, - { "kind" : "IdRef", "name" : "'Source'" }, - { "kind" : "IdRef", "name" : "'Num Elements'" }, - { "kind" : "IdRef", "name" : "'Stride'" }, - { "kind" : "IdRef", "name" : "'Event'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Destination" }, + { "kind" : "IdRef", "name" : "Source" }, + { "kind" : "IdRef", "name" : "Num Elements" }, + { "kind" : "IdRef", "name" : "Stride" }, + { "kind" : "IdRef", "name" : "Event" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -2936,9 +2924,9 @@ "class" : "Group", "opcode" : 260, "operands" : [ - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Num Events'" }, - { "kind" : "IdRef", "name" : "'Events List'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Num Events" }, + { "kind" : "IdRef", "name" : "Events List" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -2950,8 +2938,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Predicate" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -2963,8 +2951,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Predicate" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -2976,9 +2964,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'LocalId'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "LocalId" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -2990,9 +2978,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -3004,9 +2992,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -3018,9 +3006,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -3032,9 +3020,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -3046,9 +3034,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -3060,9 +3048,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -3074,9 +3062,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -3088,9 +3076,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "version": "1.0" @@ -3102,10 +3090,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3117,10 +3105,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3132,12 +3120,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Reserve Id'" }, - { "kind" : "IdRef", "name" : "'Index'" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Reserve Id" }, + { "kind" : "IdRef", "name" : "Index" }, + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3149,12 +3137,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Reserve Id'" }, - { "kind" : "IdRef", "name" : "'Index'" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Reserve Id" }, + { "kind" : "IdRef", "name" : "Index" }, + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3166,10 +3154,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Num Packets'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Num Packets" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3181,10 +3169,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Num Packets'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Num Packets" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3194,10 +3182,10 @@ "class" : "Pipe", "opcode" : 280, "operands" : [ - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Reserve Id'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Reserve Id" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3207,10 +3195,10 @@ "class" : "Pipe", "opcode" : 281, "operands" : [ - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Reserve Id'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Reserve Id" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3222,7 +3210,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Reserve Id'" } + { "kind" : "IdRef", "name" : "Reserve Id" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3234,9 +3222,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3248,9 +3236,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3262,11 +3250,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Num Packets'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Num Packets" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3278,11 +3266,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Num Packets'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Num Packets" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3292,11 +3280,11 @@ "class" : "Pipe", "opcode" : 287, "operands" : [ - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Reserve Id'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Reserve Id" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3306,11 +3294,11 @@ "class" : "Pipe", "opcode" : 288, "operands" : [ - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Pipe'" }, - { "kind" : "IdRef", "name" : "'Reserve Id'" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Pipe" }, + { "kind" : "IdRef", "name" : "Reserve Id" }, + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "Pipes" ], "version": "1.0" @@ -3322,10 +3310,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Queue'" }, - { "kind" : "IdRef", "name" : "'Num Events'" }, - { "kind" : "IdRef", "name" : "'Wait Events'" }, - { "kind" : "IdRef", "name" : "'Ret Event'" } + { "kind" : "IdRef", "name" : "Queue" }, + { "kind" : "IdRef", "name" : "Num Events" }, + { "kind" : "IdRef", "name" : "Wait Events" }, + { "kind" : "IdRef", "name" : "Ret Event" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3337,17 +3325,17 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Queue'" }, - { "kind" : "IdRef", "name" : "'Flags'" }, - { "kind" : "IdRef", "name" : "'ND Range'" }, - { "kind" : "IdRef", "name" : "'Num Events'" }, - { "kind" : "IdRef", "name" : "'Wait Events'" }, - { "kind" : "IdRef", "name" : "'Ret Event'" }, - { "kind" : "IdRef", "name" : "'Invoke'" }, - { "kind" : "IdRef", "name" : "'Param'" }, - { "kind" : "IdRef", "name" : "'Param Size'" }, - { "kind" : "IdRef", "name" : "'Param Align'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Local Size'" } + { "kind" : "IdRef", "name" : "Queue" }, + { "kind" : "IdRef", "name" : "Flags" }, + { "kind" : "IdRef", "name" : "ND Range" }, + { "kind" : "IdRef", "name" : "Num Events" }, + { "kind" : "IdRef", "name" : "Wait Events" }, + { "kind" : "IdRef", "name" : "Ret Event" }, + { "kind" : "IdRef", "name" : "Invoke" }, + { "kind" : "IdRef", "name" : "Param" }, + { "kind" : "IdRef", "name" : "Param Size" }, + { "kind" : "IdRef", "name" : "Param Align" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Local Size" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3359,11 +3347,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'ND Range'" }, - { "kind" : "IdRef", "name" : "'Invoke'" }, - { "kind" : "IdRef", "name" : "'Param'" }, - { "kind" : "IdRef", "name" : "'Param Size'" }, - { "kind" : "IdRef", "name" : "'Param Align'" } + { "kind" : "IdRef", "name" : "ND Range" }, + { "kind" : "IdRef", "name" : "Invoke" }, + { "kind" : "IdRef", "name" : "Param" }, + { "kind" : "IdRef", "name" : "Param Size" }, + { "kind" : "IdRef", "name" : "Param Align" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3375,11 +3363,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'ND Range'" }, - { "kind" : "IdRef", "name" : "'Invoke'" }, - { "kind" : "IdRef", "name" : "'Param'" }, - { "kind" : "IdRef", "name" : "'Param Size'" }, - { "kind" : "IdRef", "name" : "'Param Align'" } + { "kind" : "IdRef", "name" : "ND Range" }, + { "kind" : "IdRef", "name" : "Invoke" }, + { "kind" : "IdRef", "name" : "Param" }, + { "kind" : "IdRef", "name" : "Param Size" }, + { "kind" : "IdRef", "name" : "Param Align" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3391,10 +3379,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Invoke'" }, - { "kind" : "IdRef", "name" : "'Param'" }, - { "kind" : "IdRef", "name" : "'Param Size'" }, - { "kind" : "IdRef", "name" : "'Param Align'" } + { "kind" : "IdRef", "name" : "Invoke" }, + { "kind" : "IdRef", "name" : "Param" }, + { "kind" : "IdRef", "name" : "Param Size" }, + { "kind" : "IdRef", "name" : "Param Align" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3406,10 +3394,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Invoke'" }, - { "kind" : "IdRef", "name" : "'Param'" }, - { "kind" : "IdRef", "name" : "'Param Size'" }, - { "kind" : "IdRef", "name" : "'Param Align'" } + { "kind" : "IdRef", "name" : "Invoke" }, + { "kind" : "IdRef", "name" : "Param" }, + { "kind" : "IdRef", "name" : "Param Size" }, + { "kind" : "IdRef", "name" : "Param Align" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3419,7 +3407,7 @@ "class" : "Device-Side_Enqueue", "opcode" : 297, "operands" : [ - { "kind" : "IdRef", "name" : "'Event'" } + { "kind" : "IdRef", "name" : "Event" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3429,7 +3417,7 @@ "class" : "Device-Side_Enqueue", "opcode" : 298, "operands" : [ - { "kind" : "IdRef", "name" : "'Event'" } + { "kind" : "IdRef", "name" : "Event" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3452,7 +3440,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Event'" } + { "kind" : "IdRef", "name" : "Event" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3462,8 +3450,8 @@ "class" : "Device-Side_Enqueue", "opcode" : 301, "operands" : [ - { "kind" : "IdRef", "name" : "'Event'" }, - { "kind" : "IdRef", "name" : "'Status'" } + { "kind" : "IdRef", "name" : "Event" }, + { "kind" : "IdRef", "name" : "Status" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3473,9 +3461,9 @@ "class" : "Device-Side_Enqueue", "opcode" : 302, "operands" : [ - { "kind" : "IdRef", "name" : "'Event'" }, - { "kind" : "IdRef", "name" : "'Profiling Info'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Event" }, + { "kind" : "IdRef", "name" : "Profiling Info" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3498,9 +3486,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'GlobalWorkSize'" }, - { "kind" : "IdRef", "name" : "'LocalWorkSize'" }, - { "kind" : "IdRef", "name" : "'GlobalWorkOffset'" } + { "kind" : "IdRef", "name" : "GlobalWorkSize" }, + { "kind" : "IdRef", "name" : "LocalWorkSize" }, + { "kind" : "IdRef", "name" : "GlobalWorkOffset" } ], "capabilities" : [ "DeviceEnqueue" ], "version": "1.0" @@ -3512,8 +3500,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "SparseResidency" ], @@ -3526,8 +3514,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands" } ], "capabilities" : [ "SparseResidency" ], @@ -3540,9 +3528,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'D~ref~'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "D~ref~" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "SparseResidency" ], @@ -3555,9 +3543,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'D~ref~'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "D~ref~" }, { "kind" : "ImageOperands" } ], "capabilities" : [ "SparseResidency" ], @@ -3570,8 +3558,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "SparseResidency" ], @@ -3584,8 +3572,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands" } ], "capabilities" : [ "SparseResidency" ], @@ -3598,9 +3586,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'D~ref~'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "D~ref~" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "SparseResidency" ], @@ -3613,9 +3601,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'D~ref~'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "D~ref~" }, { "kind" : "ImageOperands" } ], "capabilities" : [ "SparseResidency" ], @@ -3628,8 +3616,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "SparseResidency" ], @@ -3642,9 +3630,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'Component'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Component" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "SparseResidency" ], @@ -3657,9 +3645,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'D~ref~'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "D~ref~" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "SparseResidency" ], @@ -3672,7 +3660,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Resident Code'" } + { "kind" : "IdRef", "name" : "Resident Code" } ], "capabilities" : [ "SparseResidency" ], "version": "1.0" @@ -3690,9 +3678,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -3702,9 +3690,9 @@ "class" : "Atomic", "opcode" : 319, "operands" : [ - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" } ], "capabilities" : [ "Kernel" ], "version": "1.0" @@ -3716,8 +3704,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "SparseResidency" ], @@ -3730,7 +3718,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" } + { "kind" : "IdRef", "name" : "Pointer" } ], "capabilities" : [ "Addresses" ], "version" : "1.1" @@ -3752,9 +3740,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "LiteralInteger", "name" : "'Packet Size'" }, - { "kind" : "LiteralInteger", "name" : "'Packet Alignment'" }, - { "kind" : "LiteralInteger", "name" : "'Capacity'" } + { "kind" : "LiteralInteger", "name" : "Packet Size" }, + { "kind" : "LiteralInteger", "name" : "Packet Alignment" }, + { "kind" : "LiteralInteger", "name" : "Capacity" } ], "capabilities" : [ "PipeStorage" ], "version" : "1.1" @@ -3766,7 +3754,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pipe Storage'" } + { "kind" : "IdRef", "name" : "Pipe Storage" } ], "capabilities" : [ "PipeStorage" ], "version" : "1.1" @@ -3778,11 +3766,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Subgroup Count'" }, - { "kind" : "IdRef", "name" : "'Invoke'" }, - { "kind" : "IdRef", "name" : "'Param'" }, - { "kind" : "IdRef", "name" : "'Param Size'" }, - { "kind" : "IdRef", "name" : "'Param Align'" } + { "kind" : "IdRef", "name" : "Subgroup Count" }, + { "kind" : "IdRef", "name" : "Invoke" }, + { "kind" : "IdRef", "name" : "Param" }, + { "kind" : "IdRef", "name" : "Param Size" }, + { "kind" : "IdRef", "name" : "Param Align" } ], "capabilities" : [ "SubgroupDispatch" ], "version" : "1.1" @@ -3794,10 +3782,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Invoke'" }, - { "kind" : "IdRef", "name" : "'Param'" }, - { "kind" : "IdRef", "name" : "'Param Size'" }, - { "kind" : "IdRef", "name" : "'Param Align'" } + { "kind" : "IdRef", "name" : "Invoke" }, + { "kind" : "IdRef", "name" : "Param" }, + { "kind" : "IdRef", "name" : "Param Size" }, + { "kind" : "IdRef", "name" : "Param Align" } ], "capabilities" : [ "SubgroupDispatch" ], "version" : "1.1" @@ -3819,7 +3807,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Subgroup Count'" } + { "kind" : "IdRef", "name" : "Subgroup Count" } ], "capabilities" : [ "NamedBarrier" ], "version" : "1.1" @@ -3829,9 +3817,9 @@ "class" : "Barrier", "opcode" : 329, "operands" : [ - { "kind" : "IdRef", "name" : "'Named Barrier'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" } + { "kind" : "IdRef", "name" : "Named Barrier" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" } ], "capabilities" : [ "NamedBarrier" ], "version" : "1.1" @@ -3841,7 +3829,7 @@ "class" : "Debug", "opcode" : 330, "operands" : [ - { "kind" : "LiteralString", "name" : "'Process'" } + { "kind" : "LiteralString", "name" : "Process" } ], "version" : "1.1" }, @@ -3850,8 +3838,8 @@ "class" : "Mode-Setting", "opcode" : 331, "operands" : [ - { "kind" : "IdRef", "name" : "'Entry Point'" }, - { "kind" : "ExecutionMode", "name" : "'Mode'" } + { "kind" : "IdRef", "name" : "Entry Point" }, + { "kind" : "ExecutionMode", "name" : "Mode" } ], "version" : "1.2" }, @@ -3860,7 +3848,7 @@ "class" : "Annotation", "opcode" : 332, "operands" : [ - { "kind" : "IdRef", "name" : "'Target'" }, + { "kind" : "IdRef", "name" : "Target" }, { "kind" : "Decoration" } ], "extensions" : [ "SPV_GOOGLE_hlsl_functionality1" ], @@ -3873,7 +3861,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" } + { "kind" : "IdScope", "name" : "Execution" } ], "capabilities" : [ "GroupNonUniform" ], "version" : "1.3" @@ -3885,8 +3873,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Predicate" } ], "capabilities" : [ "GroupNonUniformVote" ], "version" : "1.3" @@ -3898,8 +3886,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Predicate" } ], "capabilities" : [ "GroupNonUniformVote" ], "version" : "1.3" @@ -3911,8 +3899,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "GroupNonUniformVote" ], "version" : "1.3" @@ -3924,9 +3912,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Id'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Id" } ], "capabilities" : [ "GroupNonUniformBallot" ], "version" : "1.3" @@ -3938,8 +3926,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "GroupNonUniformBallot" ], "version" : "1.3" @@ -3951,8 +3939,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Predicate" } ], "capabilities" : [ "GroupNonUniformBallot" ], "version" : "1.3" @@ -3964,8 +3952,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "GroupNonUniformBallot" ], "version" : "1.3" @@ -3977,9 +3965,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Index'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Index" } ], "capabilities" : [ "GroupNonUniformBallot" ], "version" : "1.3" @@ -3991,9 +3979,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "GroupNonUniformBallot" ], "version" : "1.3" @@ -4005,8 +3993,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "GroupNonUniformBallot" ], "version" : "1.3" @@ -4018,8 +4006,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "GroupNonUniformBallot" ], "version" : "1.3" @@ -4031,9 +4019,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Id'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Id" } ], "capabilities" : [ "GroupNonUniformShuffle" ], "version" : "1.3" @@ -4045,9 +4033,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Mask'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Mask" } ], "capabilities" : [ "GroupNonUniformShuffle" ], "version" : "1.3" @@ -4059,9 +4047,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Delta'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Delta" } ], "capabilities" : [ "GroupNonUniformShuffleRelative" ], "version" : "1.3" @@ -4073,9 +4061,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Delta'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Delta" } ], "capabilities" : [ "GroupNonUniformShuffleRelative" ], "version" : "1.3" @@ -4087,10 +4075,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4102,10 +4090,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4117,10 +4105,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4132,10 +4120,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4147,10 +4135,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4162,10 +4150,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4177,10 +4165,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4192,10 +4180,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4207,10 +4195,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4222,10 +4210,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4237,10 +4225,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4252,10 +4240,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4267,10 +4255,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4282,10 +4270,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4297,10 +4285,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4312,10 +4300,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformArithmetic", "GroupNonUniformClustered", "GroupNonUniformPartitionedNV" ], "version" : "1.3" @@ -4327,9 +4315,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Index'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Index" } ], "capabilities" : [ "GroupNonUniformQuad" ], "version" : "1.3" @@ -4341,9 +4329,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Direction'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Direction" } ], "capabilities" : [ "GroupNonUniformQuad" ], "version" : "1.3" @@ -4355,7 +4343,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "version" : "1.4" }, @@ -4366,8 +4354,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version" : "1.4" }, @@ -4378,8 +4366,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "version" : "1.4" }, @@ -4390,8 +4378,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "Addresses", "VariablePointers", "VariablePointersStorageBuffer" ], "version" : "1.4" @@ -4403,8 +4391,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Attachment'" }, - { "kind" : "IdRef", "name" : "'Sample'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Attachment" }, + { "kind" : "IdRef", "name" : "Sample", "quantifier" : "?" } ], "capabilities": [ "TileImageColorReadAccessEXT" ], "version" : "None" @@ -4416,7 +4404,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sample'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Sample", "quantifier" : "?" } ], "capabilities" : [ "TileImageDepthReadAccessEXT" ], "version" : "None" @@ -4428,11 +4416,64 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sample'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Sample", "quantifier" : "?" } ], "capabilities" : [ "TileImageStencilReadAccessEXT" ], "version" : "None" }, + { + "opname" : "OpTypeTensorARM", + "class" : "Type-Declaration", + "opcode" : 4163, + "operands" : [ + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Element Type" }, + { "kind" : "IdRef", "name" : "Rank", "quantifier" : "?" }, + { "kind" : "IdRef", "name" : "Shape", "quantifier" : "?" } + ], + "capabilities" : [ "TensorsARM" ], + "version" : "None" + }, + { + "opname" : "OpTensorReadARM", + "class" : "Tensor", + "opcode" : 4164, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Tensor" }, + { "kind" : "IdRef", "name" : "Coordinates" }, + { "kind" : "TensorOperands", "quantifier" : "?" } + ], + "capabilities" : [ "TensorsARM" ], + "version" : "None" + }, + { + "opname" : "OpTensorWriteARM", + "class" : "Tensor", + "opcode" : 4165, + "operands" : [ + { "kind" : "IdRef", "name" : "Tensor" }, + { "kind" : "IdRef", "name" : "Coordinates" }, + { "kind" : "IdRef", "name" : "Object" }, + { "kind" : "TensorOperands", "quantifier" : "?" } + ], + "capabilities" : [ "TensorsARM" ], + "version" : "None" + }, + { + "opname" : "OpTensorQuerySizeARM", + "class" : "Tensor", + "opcode" : 4166, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Tensor" }, + { "kind" : "IdRef", "name" : "Dimension" } + ], + "capabilities" : [ "TensorsARM" ], + "version" : "None" + }, { "opname" : "OpTerminateInvocation", "class" : "Control-Flow", @@ -4468,8 +4509,8 @@ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, { "kind" : "StorageClass" }, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'Data Type'" }, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'Initializer'" } + { "kind" : "IdRef", "quantifier" : "?", "name" : "Data Type" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "Initializer" } ] }, { @@ -4482,9 +4523,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Indexes" } ] }, { @@ -4497,9 +4538,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Indexes" } ] }, { @@ -4509,7 +4550,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdRef", "name" : "Predicate" } ], "capabilities" : [ "SubgroupBallotKHR" ], "extensions" : [ "SPV_KHR_shader_ballot" ], @@ -4522,7 +4563,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "SubgroupBallotKHR" ], "extensions" : [ "SPV_KHR_shader_ballot" ], @@ -4538,10 +4579,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Element'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Element" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Indexes" } ] }, { @@ -4554,10 +4595,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base Type'" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Element'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Indexes'" } + { "kind" : "IdRef", "name" : "Base Type" }, + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Element" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Indexes" } ] }, { @@ -4570,9 +4611,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Structure'" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "LiteralInteger", "name" : "'Array member'" } + { "kind" : "IdRef", "name" : "Structure" }, + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "LiteralInteger", "name" : "Array member" } ] }, { @@ -4583,11 +4624,11 @@ "provisional" : true, "version" : "None", "operands" : [ - { "kind" : "IdRef", "name" : "'Pointer Type'" }, - { "kind" : "IdRef", "name" : "'Num Bytes'" }, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'RW'" }, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'Locality'" }, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'Cache Type'" } + { "kind" : "IdRef", "name" : "Pointer Type" }, + { "kind" : "IdRef", "name" : "Num Bytes" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "RW" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "Locality" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "Cache Type" } ] }, { @@ -4597,7 +4638,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdRef", "name" : "Predicate" } ], "extensions" : [ "SPV_KHR_subgroup_vote" @@ -4612,7 +4653,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdRef", "name" : "Predicate" } ], "extensions" : [ "SPV_KHR_subgroup_vote" @@ -4627,7 +4668,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdRef", "name" : "Predicate" } ], "extensions" : [ "SPV_KHR_subgroup_vote" @@ -4642,10 +4683,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Delta'" }, - { "kind" : "IdRef", "name" : "'ClusterSize'", "quantifier" : "?" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Delta" }, + { "kind" : "IdRef", "name" : "ClusterSize", "quantifier" : "?" } ], "capabilities" : [ "GroupNonUniformRotateKHR" ], "version" : "None" @@ -4657,8 +4698,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'Index'" } + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "Index" } ], "capabilities" : [ "SubgroupBallotKHR" ], "extensions" : [ "SPV_KHR_shader_ballot" ], @@ -4671,9 +4712,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Set'" }, - { "kind" : "LiteralExtInstInteger", "name" : "'Instruction'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Operand 1', +\n'Operand 2', +\n..." } + { "kind" : "IdRef", "name" : "Set" }, + { "kind" : "LiteralExtInstInteger", "name" : "Instruction" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Operand 1, Operand 2, ..." } ], "extensions" : [ "SPV_KHR_relaxed_extended_instruction" ], "version": "None" @@ -4684,17 +4725,17 @@ "opcode" : 4445, "operands" : [ - { "kind" : "IdRef", "name" : "'Accel'" }, - { "kind" : "IdRef", "name" : "'Ray Flags'" }, - { "kind" : "IdRef", "name" : "'Cull Mask'" }, - { "kind" : "IdRef", "name" : "'SBT Offset'" }, - { "kind" : "IdRef", "name" : "'SBT Stride'" }, - { "kind" : "IdRef", "name" : "'Miss Index'" }, - { "kind" : "IdRef", "name" : "'Ray Origin'" }, - { "kind" : "IdRef", "name" : "'Ray Tmin'" }, - { "kind" : "IdRef", "name" : "'Ray Direction'" }, - { "kind" : "IdRef", "name" : "'Ray Tmax'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Accel" }, + { "kind" : "IdRef", "name" : "Ray Flags" }, + { "kind" : "IdRef", "name" : "Cull Mask" }, + { "kind" : "IdRef", "name" : "SBT Offset" }, + { "kind" : "IdRef", "name" : "SBT Stride" }, + { "kind" : "IdRef", "name" : "Miss Index" }, + { "kind" : "IdRef", "name" : "Ray Origin" }, + { "kind" : "IdRef", "name" : "Ray Tmin" }, + { "kind" : "IdRef", "name" : "Ray Direction" }, + { "kind" : "IdRef", "name" : "Ray Tmax" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "RayTracingKHR" ], "extensions" : [ "SPV_KHR_ray_tracing" ], @@ -4706,8 +4747,8 @@ "opcode" : 4446, "operands" : [ - { "kind" : "IdRef", "name" : "'SBT Index'" }, - { "kind" : "IdRef", "name" : "'Callable Data'" } + { "kind" : "IdRef", "name" : "SBT Index" }, + { "kind" : "IdRef", "name" : "Callable Data" } ], "capabilities" : [ "RayTracingKHR" ], "extensions" : [ "SPV_KHR_ray_tracing" ], @@ -4720,7 +4761,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Accel'" } + { "kind" : "IdRef", "name" : "Accel" } ], "capabilities" : [ "RayTracingKHR", "RayQueryKHR" ], "extensions" : [ "SPV_KHR_ray_tracing", "SPV_KHR_ray_query" ], @@ -4750,9 +4791,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Vector 1" }, + { "kind" : "IdRef", "name" : "Vector 2" }, + { "kind" : "PackedVectorFormat", "name" : "Packed Vector Format", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], @@ -4766,9 +4807,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Vector 1" }, + { "kind" : "IdRef", "name" : "Vector 2" }, + { "kind" : "PackedVectorFormat", "name" : "Packed Vector Format", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], @@ -4782,9 +4823,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Vector 1" }, + { "kind" : "IdRef", "name" : "Vector 2" }, + { "kind" : "PackedVectorFormat", "name" : "Packed Vector Format", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], @@ -4798,10 +4839,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "IdRef", "name" : "'Accumulator'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Vector 1" }, + { "kind" : "IdRef", "name" : "Vector 2" }, + { "kind" : "IdRef", "name" : "Accumulator" }, + { "kind" : "PackedVectorFormat", "name" : "Packed Vector Format", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], @@ -4815,10 +4856,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "IdRef", "name" : "'Accumulator'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Vector 1" }, + { "kind" : "IdRef", "name" : "Vector 2" }, + { "kind" : "IdRef", "name" : "Accumulator" }, + { "kind" : "PackedVectorFormat", "name" : "Packed Vector Format", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], @@ -4832,10 +4873,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Vector 1'" }, - { "kind" : "IdRef", "name" : "'Vector 2'" }, - { "kind" : "IdRef", "name" : "'Accumulator'" }, - { "kind" : "PackedVectorFormat", "name" : "'Packed Vector Format'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Vector 1" }, + { "kind" : "IdRef", "name" : "Vector 2" }, + { "kind" : "IdRef", "name" : "Accumulator" }, + { "kind" : "PackedVectorFormat", "name" : "Packed Vector Format", "quantifier" : "?" } ], "capabilities" : [ "DotProduct" ], "extensions" : [ "SPV_KHR_integer_dot_product" ], @@ -4847,11 +4888,11 @@ "opcode" : 4456, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Component Type'" }, - { "kind" : "IdScope", "name" : "'Scope'" }, - { "kind" : "IdRef", "name" : "'Rows'" }, - { "kind" : "IdRef", "name" : "'Columns'" }, - { "kind" : "IdRef", "name" : "'Use'" } + { "kind" : "IdRef", "name" : "Component Type" }, + { "kind" : "IdScope", "name" : "Scope" }, + { "kind" : "IdRef", "name" : "Rows" }, + { "kind" : "IdRef", "name" : "Columns" }, + { "kind" : "IdRef", "name" : "Use" } ], "capabilities" : [ "CooperativeMatrixKHR" ], "version" : "None" @@ -4863,10 +4904,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'MemoryLayout'" }, - { "kind" : "IdRef", "name" : "'Stride'", "quantifier": "?" }, - { "kind" : "MemoryAccess", "name" : "'Memory Operand'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "MemoryLayout" }, + { "kind" : "IdRef", "name" : "Stride", "quantifier": "?" }, + { "kind" : "MemoryAccess", "name" : "Memory Operand", "quantifier" : "?" } ], "capabilities" : [ "CooperativeMatrixKHR" ], "version" : "None" @@ -4876,11 +4917,11 @@ "class" : "Memory", "opcode" : 4458, "operands" : [ - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'Object'" }, - { "kind" : "IdRef", "name" : "'MemoryLayout'" }, - { "kind" : "IdRef", "name" : "'Stride'", "quantifier": "?" }, - { "kind" : "MemoryAccess", "name" : "'Memory Operand'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Object" }, + { "kind" : "IdRef", "name" : "MemoryLayout" }, + { "kind" : "IdRef", "name" : "Stride", "quantifier": "?" }, + { "kind" : "MemoryAccess", "name" : "Memory Operand", "quantifier" : "?" } ], "capabilities" : [ "CooperativeMatrixKHR" ], "version" : "None" @@ -4892,10 +4933,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "IdRef", "name" : "'C'" }, - { "kind" : "CooperativeMatrixOperands", "name" : "'Cooperative Matrix Operands'", "quantifier" : "?" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "IdRef", "name" : "C" }, + { "kind" : "CooperativeMatrixOperands", "name" : "Cooperative Matrix Operands", "quantifier" : "?" } ], "capabilities" : [ "CooperativeMatrixKHR" ], "version" : "None" @@ -4907,7 +4948,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Type'" } + { "kind" : "IdRef", "name" : "Type" } ], "capabilities" : [ "CooperativeMatrixKHR" ], "version" : "None" @@ -4919,7 +4960,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "ReplicatedCompositesEXT" ], "version" : "None" @@ -4931,7 +4972,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "ReplicatedCompositesEXT" ], "version" : "None" @@ -4943,7 +4984,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "ReplicatedCompositesEXT" ], "version" : "None" @@ -4966,35 +5007,35 @@ "operands" : [ { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Accel'" + "name" : "Accel" }, { "kind" : "IdRef", - "name" : "'RayFlags'" + "name" : "RayFlags" }, { "kind" : "IdRef", - "name" : "'CullMask'" + "name" : "CullMask" }, { "kind" : "IdRef", - "name" : "'RayOrigin'" + "name" : "RayOrigin" }, { "kind" : "IdRef", - "name" : "'RayTMin'" + "name" : "RayTMin" }, { "kind" : "IdRef", - "name" : "'RayDirection'" + "name" : "RayDirection" }, { "kind" : "IdRef", - "name" : "'RayTMax'" + "name" : "RayTMax" } ], @@ -5009,7 +5050,7 @@ "operands" : [ { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" } ], "capabilities" : [ "RayQueryKHR" ], @@ -5023,11 +5064,11 @@ "operands" : [ { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'HitT'" + "name" : "HitT" } ], "capabilities" : [ "RayQueryKHR" ], @@ -5041,7 +5082,7 @@ "operands" : [ { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" } ], "capabilities" : [ "RayQueryKHR" ], @@ -5057,7 +5098,7 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" } ], "capabilities" : [ "RayQueryKHR" ], @@ -5073,11 +5114,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -5091,9 +5132,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Texture'" }, - { "kind" : "IdRef", "name" : "'Coordinates'" }, - { "kind" : "IdRef", "name" : "'Weights'" } + { "kind" : "IdRef", "name" : "Texture" }, + { "kind" : "IdRef", "name" : "Coordinates" }, + { "kind" : "IdRef", "name" : "Weights" } ], "capabilities" : [ "TextureSampleWeightedQCOM" ], "version" : "None" @@ -5105,9 +5146,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Texture'" }, - { "kind" : "IdRef", "name" : "'Coordinates'" }, - { "kind" : "IdRef", "name" : "'Box Size'" } + { "kind" : "IdRef", "name" : "Texture" }, + { "kind" : "IdRef", "name" : "Coordinates" }, + { "kind" : "IdRef", "name" : "Box Size" } ], "capabilities" : [ "TextureBoxFilterQCOM" ], "version" : "None" @@ -5119,11 +5160,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Target'" }, - { "kind" : "IdRef", "name" : "'Target Coordinates'" }, - { "kind" : "IdRef", "name" : "'Reference'" }, - { "kind" : "IdRef", "name" : "'Reference Coordinates'" }, - { "kind" : "IdRef", "name" : "'Block Size'" } + { "kind" : "IdRef", "name" : "Target" }, + { "kind" : "IdRef", "name" : "Target Coordinates" }, + { "kind" : "IdRef", "name" : "Reference" }, + { "kind" : "IdRef", "name" : "Reference Coordinates" }, + { "kind" : "IdRef", "name" : "Block Size" } ], "capabilities" : [ "TextureBlockMatchQCOM" ], "version" : "None" @@ -5135,11 +5176,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Target'" }, - { "kind" : "IdRef", "name" : "'Target Coordinates'" }, - { "kind" : "IdRef", "name" : "'Reference'" }, - { "kind" : "IdRef", "name" : "'Reference Coordinates'" }, - { "kind" : "IdRef", "name" : "'Block Size'" } + { "kind" : "IdRef", "name" : "Target" }, + { "kind" : "IdRef", "name" : "Target Coordinates" }, + { "kind" : "IdRef", "name" : "Reference" }, + { "kind" : "IdRef", "name" : "Reference Coordinates" }, + { "kind" : "IdRef", "name" : "Block Size" } ], "capabilities" : [ "TextureBlockMatchQCOM" ], "version" : "None" @@ -5151,11 +5192,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Target Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Target Coordinates'" }, - { "kind" : "IdRef", "name" : "'Reference Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Reference Coordinates'" }, - { "kind" : "IdRef", "name" : "'Block Size'" } + { "kind" : "IdRef", "name" : "Target Sampled Image" }, + { "kind" : "IdRef", "name" : "Target Coordinates" }, + { "kind" : "IdRef", "name" : "Reference Sampled Image" }, + { "kind" : "IdRef", "name" : "Reference Coordinates" }, + { "kind" : "IdRef", "name" : "Block Size" } ], "capabilities" : [ "TextureBlockMatch2QCOM" ], "version" : "None" @@ -5167,11 +5208,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Target Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Target Coordinates'" }, - { "kind" : "IdRef", "name" : "'Reference Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Reference Coordinates'" }, - { "kind" : "IdRef", "name" : "'Block Size'" } + { "kind" : "IdRef", "name" : "Target Sampled Image" }, + { "kind" : "IdRef", "name" : "Target Coordinates" }, + { "kind" : "IdRef", "name" : "Reference Sampled Image" }, + { "kind" : "IdRef", "name" : "Reference Coordinates" }, + { "kind" : "IdRef", "name" : "Block Size" } ], "capabilities" : [ "TextureBlockMatch2QCOM" ], "version" : "None" @@ -5183,11 +5224,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Target Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Target Coordinates'" }, - { "kind" : "IdRef", "name" : "'Reference Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Reference Coordinates'" }, - { "kind" : "IdRef", "name" : "'Block Size'" } + { "kind" : "IdRef", "name" : "Target Sampled Image" }, + { "kind" : "IdRef", "name" : "Target Coordinates" }, + { "kind" : "IdRef", "name" : "Reference Sampled Image" }, + { "kind" : "IdRef", "name" : "Reference Coordinates" }, + { "kind" : "IdRef", "name" : "Block Size" } ], "capabilities" : [ "TextureBlockMatch2QCOM" ], "version" : "None" @@ -5199,11 +5240,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Target Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Target Coordinates'" }, - { "kind" : "IdRef", "name" : "'Reference Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Reference Coordinates'" }, - { "kind" : "IdRef", "name" : "'Block Size'" } + { "kind" : "IdRef", "name" : "Target Sampled Image" }, + { "kind" : "IdRef", "name" : "Target Coordinates" }, + { "kind" : "IdRef", "name" : "Reference Sampled Image" }, + { "kind" : "IdRef", "name" : "Reference Coordinates" }, + { "kind" : "IdRef", "name" : "Block Size" } ], "capabilities" : [ "TextureBlockMatch2QCOM" ], "version" : "None" @@ -5215,9 +5256,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "extensions" : [ "SPV_AMD_shader_ballot" ], @@ -5230,9 +5271,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "extensions" : [ "SPV_AMD_shader_ballot" ], @@ -5245,9 +5286,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "extensions" : [ "SPV_AMD_shader_ballot" ], @@ -5260,9 +5301,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "extensions" : [ "SPV_AMD_shader_ballot" ], @@ -5275,9 +5316,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "extensions" : [ "SPV_AMD_shader_ballot" ], @@ -5290,9 +5331,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "extensions" : [ "SPV_AMD_shader_ballot" ], @@ -5305,9 +5346,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "extensions" : [ "SPV_AMD_shader_ballot" ], @@ -5320,9 +5361,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "Groups" ], "extensions" : [ "SPV_AMD_shader_ballot" ], @@ -5335,8 +5376,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" } + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" } ], "capabilities" : [ "FragmentMaskAMD" ], "extensions" : [ "SPV_AMD_shader_fragment_mask" ], @@ -5349,9 +5390,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'Fragment Index'" } + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Fragment Index" } ], "capabilities" : [ "FragmentMaskAMD" ], "extensions" : [ "SPV_AMD_shader_fragment_mask" ], @@ -5364,7 +5405,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Scope'" } + { "kind" : "IdScope", "name" : "Scope" } ], "capabilities" : [ "ShaderClockKHR" ], "version" : "None" @@ -5376,9 +5417,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Visibility'" }, - { "kind" : "IdRef", "name": "'Payload Count'" }, - { "kind" : "IdRef", "name": "'Node Index'" } + { "kind" : "IdScope", "name" : "Visibility" }, + { "kind" : "IdRef", "name": "Payload Count" }, + { "kind" : "IdRef", "name": "Node Index" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], "provisional" : true, @@ -5389,7 +5430,7 @@ "class" : "Reserved", "opcode" : 5075, "operands" : [ - { "kind" : "IdRef", "name": "'Payload Array'" } + { "kind" : "IdRef", "name": "Payload Array" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], "provisional" : true, @@ -5401,7 +5442,7 @@ "opcode" : 5076, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name": "'Payload Type'" } + { "kind" : "IdRef", "name": "Payload Type" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], "provisional" : true, @@ -5414,7 +5455,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name": "'Payload'" } + { "kind" : "IdRef", "name": "Payload" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], "provisional" : true, @@ -5427,7 +5468,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name": "'Payload Array'" } + { "kind" : "IdRef", "name": "Payload Array" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], "provisional" : true, @@ -5440,8 +5481,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name": "'Payload Type'" }, - { "kind" : "IdRef", "name": "'Node Index'" } + { "kind" : "IdRef", "name": "Payload Type" }, + { "kind" : "IdRef", "name": "Node Index" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], "provisional" : true, @@ -5453,7 +5494,7 @@ "opcode" : 5103, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "LiteralString", "name": "'Literal String'" } + { "kind" : "LiteralString", "name": "Literal String" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], "provisional" : true, @@ -5465,7 +5506,7 @@ "opcode" : 5104, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "LiteralString", "name": "'Literal String'" } + { "kind" : "LiteralString", "name": "Literal String" } ], "capabilities" : [ "ShaderEnqueueAMDX" ], "provisional" : true, @@ -5478,7 +5519,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdRef", "name" : "Predicate" } ], "capabilities" : [ "QuadControlKHR" ], "version" : "None" @@ -5490,7 +5531,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Predicate'" } + { "kind" : "IdRef", "name" : "Predicate" } ], "capabilities" : [ "QuadControlKHR" ], "version" : "None" @@ -5500,20 +5541,20 @@ "class" : "Reserved", "opcode" : 5249, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "name" : "'Acceleration Structure'" }, - { "kind" : "IdRef", "name" : "'InstanceId'" }, - { "kind" : "IdRef", "name" : "'PrimitiveId'" }, - { "kind" : "IdRef", "name" : "'GeometryIndex'" }, - { "kind" : "IdRef", "name" : "'Hit Kind'" }, - { "kind" : "IdRef", "name" : "'SBT Record Offset'" }, - { "kind" : "IdRef", "name" : "'SBT Record Stride'" }, - { "kind" : "IdRef", "name" : "'Origin'" }, - { "kind" : "IdRef", "name" : "'TMin'" }, - { "kind" : "IdRef", "name" : "'Direction'" }, - { "kind" : "IdRef", "name" : "'TMax'" }, - { "kind" : "IdRef", "name" : "'Current Time'" }, - { "kind" : "IdRef", "name" : "'HitObject Attributes'" } + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "name" : "Acceleration Structure" }, + { "kind" : "IdRef", "name" : "InstanceId" }, + { "kind" : "IdRef", "name" : "PrimitiveId" }, + { "kind" : "IdRef", "name" : "GeometryIndex" }, + { "kind" : "IdRef", "name" : "Hit Kind" }, + { "kind" : "IdRef", "name" : "SBT Record Offset" }, + { "kind" : "IdRef", "name" : "SBT Record Stride" }, + { "kind" : "IdRef", "name" : "Origin" }, + { "kind" : "IdRef", "name" : "TMin" }, + { "kind" : "IdRef", "name" : "Direction" }, + { "kind" : "IdRef", "name" : "TMax" }, + { "kind" : "IdRef", "name" : "Current Time" }, + { "kind" : "IdRef", "name" : "HitObject Attributes" } ], "capabilities" : [ "ShaderInvocationReorderNV", "RayTracingMotionBlurNV" ], "version" : "None" @@ -5523,19 +5564,19 @@ "class" : "Reserved", "opcode" : 5250, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "name" : "'Acceleration Structure'" }, - { "kind" : "IdRef", "name" : "'InstanceId'" }, - { "kind" : "IdRef", "name" : "'PrimitiveId'" }, - { "kind" : "IdRef", "name" : "'GeometryIndex'" }, - { "kind" : "IdRef", "name" : "'Hit Kind'" }, - { "kind" : "IdRef", "name" : "'SBT Record Index'" }, - { "kind" : "IdRef", "name" : "'Origin'" }, - { "kind" : "IdRef", "name" : "'TMin'" }, - { "kind" : "IdRef", "name" : "'Direction'" }, - { "kind" : "IdRef", "name" : "'TMax'" }, - { "kind" : "IdRef", "name" : "'Current Time'" }, - { "kind" : "IdRef", "name" : "'HitObject Attributes'" } + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "name" : "Acceleration Structure" }, + { "kind" : "IdRef", "name" : "InstanceId" }, + { "kind" : "IdRef", "name" : "PrimitiveId" }, + { "kind" : "IdRef", "name" : "GeometryIndex" }, + { "kind" : "IdRef", "name" : "Hit Kind" }, + { "kind" : "IdRef", "name" : "SBT Record Index" }, + { "kind" : "IdRef", "name" : "Origin" }, + { "kind" : "IdRef", "name" : "TMin" }, + { "kind" : "IdRef", "name" : "Direction" }, + { "kind" : "IdRef", "name" : "TMax" }, + { "kind" : "IdRef", "name" : "Current Time" }, + { "kind" : "IdRef", "name" : "HitObject Attributes" } ], "capabilities" : [ "ShaderInvocationReorderNV", "RayTracingMotionBlurNV" ], "version" : "None" @@ -5545,13 +5586,13 @@ "class" : "Reserved", "opcode" : 5251, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "name" : "'SBT Index'" }, - { "kind" : "IdRef", "name" : "'Origin'" }, - { "kind" : "IdRef", "name" : "'TMin'" }, - { "kind" : "IdRef", "name" : "'Direction'" }, - { "kind" : "IdRef", "name" : "'TMax'" }, - { "kind" : "IdRef", "name" : "'Current Time'" } + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "name" : "SBT Index" }, + { "kind" : "IdRef", "name" : "Origin" }, + { "kind" : "IdRef", "name" : "TMin" }, + { "kind" : "IdRef", "name" : "Direction" }, + { "kind" : "IdRef", "name" : "TMax" }, + { "kind" : "IdRef", "name" : "Current Time" } ], "capabilities" : [ "ShaderInvocationReorderNV", "RayTracingMotionBlurNV" ], "version" : "None" @@ -5563,7 +5604,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5575,7 +5616,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5587,7 +5628,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5599,7 +5640,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5609,19 +5650,19 @@ "class" : "Reserved", "opcode" : 5256, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "name" : "'Acceleration Structure'"}, - { "kind" : "IdRef", "name" : "'RayFlags'"}, - { "kind" : "IdRef", "name" : "'Cullmask'"}, - { "kind" : "IdRef", "name" : "'SBT Record Offset'"}, - { "kind" : "IdRef", "name" : "'SBT Record Stride'"}, - { "kind" : "IdRef", "name" : "'Miss Index'"}, - { "kind" : "IdRef", "name" : "'Origin'"}, - { "kind" : "IdRef", "name" : "'TMin'"}, - { "kind" : "IdRef", "name" : "'Direction'"}, - { "kind" : "IdRef", "name" : "'TMax'"}, - { "kind" : "IdRef", "name" : "'Time'"}, - { "kind" : "IdRef", "name" : "'Payload'"} + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "name" : "Acceleration Structure"}, + { "kind" : "IdRef", "name" : "RayFlags"}, + { "kind" : "IdRef", "name" : "Cullmask"}, + { "kind" : "IdRef", "name" : "SBT Record Offset"}, + { "kind" : "IdRef", "name" : "SBT Record Stride"}, + { "kind" : "IdRef", "name" : "Miss Index"}, + { "kind" : "IdRef", "name" : "Origin"}, + { "kind" : "IdRef", "name" : "TMin"}, + { "kind" : "IdRef", "name" : "Direction"}, + { "kind" : "IdRef", "name" : "TMax"}, + { "kind" : "IdRef", "name" : "Time"}, + { "kind" : "IdRef", "name" : "Payload"} ], "capabilities" : [ "ShaderInvocationReorderNV", "RayTracingMotionBlurNV" ], "version" : "None" @@ -5633,7 +5674,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5645,7 +5686,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5655,7 +5696,7 @@ "class" : "Reserved", "opcode" : 5259, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5665,18 +5706,18 @@ "class" : "Reserved", "opcode" : 5260, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "name" : "'Acceleration Structure'"}, - { "kind" : "IdRef", "name" : "'RayFlags'"}, - { "kind" : "IdRef", "name" : "'Cullmask'"}, - { "kind" : "IdRef", "name" : "'SBT Record Offset'"}, - { "kind" : "IdRef", "name" : "'SBT Record Stride'"}, - { "kind" : "IdRef", "name" : "'Miss Index'"}, - { "kind" : "IdRef", "name" : "'Origin'"}, - { "kind" : "IdRef", "name" : "'TMin'"}, - { "kind" : "IdRef", "name" : "'Direction'"}, - { "kind" : "IdRef", "name" : "'TMax'"}, - { "kind" : "IdRef", "name" : "'Payload'"} + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "name" : "Acceleration Structure"}, + { "kind" : "IdRef", "name" : "RayFlags"}, + { "kind" : "IdRef", "name" : "Cullmask"}, + { "kind" : "IdRef", "name" : "SBT Record Offset"}, + { "kind" : "IdRef", "name" : "SBT Record Stride"}, + { "kind" : "IdRef", "name" : "Miss Index"}, + { "kind" : "IdRef", "name" : "Origin"}, + { "kind" : "IdRef", "name" : "TMin"}, + { "kind" : "IdRef", "name" : "Direction"}, + { "kind" : "IdRef", "name" : "TMax"}, + { "kind" : "IdRef", "name" : "Payload"} ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5686,19 +5727,19 @@ "class" : "Reserved", "opcode" : 5261, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "name" : "'Acceleration Structure'" }, - { "kind" : "IdRef", "name" : "'InstanceId'" }, - { "kind" : "IdRef", "name" : "'PrimitiveId'" }, - { "kind" : "IdRef", "name" : "'GeometryIndex'" }, - { "kind" : "IdRef", "name" : "'Hit Kind'" }, - { "kind" : "IdRef", "name" : "'SBT Record Offset'" }, - { "kind" : "IdRef", "name" : "'SBT Record Stride'" }, - { "kind" : "IdRef", "name" : "'Origin'" }, - { "kind" : "IdRef", "name" : "'TMin'" }, - { "kind" : "IdRef", "name" : "'Direction'" }, - { "kind" : "IdRef", "name" : "'TMax'" }, - { "kind" : "IdRef", "name" : "'HitObject Attributes'" } + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "name" : "Acceleration Structure" }, + { "kind" : "IdRef", "name" : "InstanceId" }, + { "kind" : "IdRef", "name" : "PrimitiveId" }, + { "kind" : "IdRef", "name" : "GeometryIndex" }, + { "kind" : "IdRef", "name" : "Hit Kind" }, + { "kind" : "IdRef", "name" : "SBT Record Offset" }, + { "kind" : "IdRef", "name" : "SBT Record Stride" }, + { "kind" : "IdRef", "name" : "Origin" }, + { "kind" : "IdRef", "name" : "TMin" }, + { "kind" : "IdRef", "name" : "Direction" }, + { "kind" : "IdRef", "name" : "TMax" }, + { "kind" : "IdRef", "name" : "HitObject Attributes" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5708,18 +5749,18 @@ "class" : "Reserved", "opcode" : 5262, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "name" : "'Acceleration Structure'" }, - { "kind" : "IdRef", "name" : "'InstanceId'" }, - { "kind" : "IdRef", "name" : "'PrimitiveId'" }, - { "kind" : "IdRef", "name" : "'GeometryIndex'" }, - { "kind" : "IdRef", "name" : "'Hit Kind'" }, - { "kind" : "IdRef", "name" : "'SBT Record Index'" }, - { "kind" : "IdRef", "name" : "'Origin'" }, - { "kind" : "IdRef", "name" : "'TMin'" }, - { "kind" : "IdRef", "name" : "'Direction'" }, - { "kind" : "IdRef", "name" : "'TMax'" }, - { "kind" : "IdRef", "name" : "'HitObject Attributes'" } + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "name" : "Acceleration Structure" }, + { "kind" : "IdRef", "name" : "InstanceId" }, + { "kind" : "IdRef", "name" : "PrimitiveId" }, + { "kind" : "IdRef", "name" : "GeometryIndex" }, + { "kind" : "IdRef", "name" : "Hit Kind" }, + { "kind" : "IdRef", "name" : "SBT Record Index" }, + { "kind" : "IdRef", "name" : "Origin" }, + { "kind" : "IdRef", "name" : "TMin" }, + { "kind" : "IdRef", "name" : "Direction" }, + { "kind" : "IdRef", "name" : "TMax" }, + { "kind" : "IdRef", "name" : "HitObject Attributes" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5729,12 +5770,12 @@ "class" : "Reserved", "opcode" : 5263, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "name" : "'SBT Index'" }, - { "kind" : "IdRef", "name" : "'Origin'" }, - { "kind" : "IdRef", "name" : "'TMin'" }, - { "kind" : "IdRef", "name" : "'Direction'" }, - { "kind" : "IdRef", "name" : "'TMax'" } + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "name" : "SBT Index" }, + { "kind" : "IdRef", "name" : "Origin" }, + { "kind" : "IdRef", "name" : "TMin" }, + { "kind" : "IdRef", "name" : "Direction" }, + { "kind" : "IdRef", "name" : "TMax" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5744,8 +5785,8 @@ "class" : "Reserved", "opcode" : 5264, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5757,7 +5798,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5767,8 +5808,8 @@ "class" : "Reserved", "opcode" : 5266, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "name" : "'Hit Object Attribute'" } + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "name" : "Hit Object Attribute" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5780,7 +5821,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5792,7 +5833,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5804,7 +5845,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5816,7 +5857,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5828,7 +5869,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5840,7 +5881,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5852,7 +5893,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5864,7 +5905,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5876,7 +5917,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5888,7 +5929,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5900,7 +5941,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5912,7 +5953,7 @@ "operands" : [ { "kind" : "IdResultType"}, { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Hit Object'" } + { "kind" : "IdRef", "name" : "Hit Object" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5922,9 +5963,9 @@ "class" : "Reserved", "opcode" : 5279, "operands" : [ - { "kind" : "IdRef", "name" : "'Hit Object'" }, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'Hint'" }, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'Bits'" } + { "kind" : "IdRef", "name" : "Hit Object" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "Hint" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "Bits" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5934,8 +5975,8 @@ "class" : "Reserved", "opcode" : 5280, "operands" : [ - { "kind" : "IdRef", "name" : "'Hint'" }, - { "kind" : "IdRef", "name" : "'Bits'" } + { "kind" : "IdRef", "name" : "Hint" }, + { "kind" : "IdRef", "name" : "Bits" } ], "capabilities" : [ "ShaderInvocationReorderNV" ], "version" : "None" @@ -5957,16 +5998,103 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Sampled Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'Granularity'" }, - { "kind" : "IdRef", "name" : "'Coarse'" }, + { "kind" : "IdRef", "name" : "Sampled Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Granularity" }, + { "kind" : "IdRef", "name" : "Coarse" }, { "kind" : "ImageOperands", "quantifier" : "?" } ], "capabilities" : [ "ImageFootprintNV" ], "extensions" : [ "SPV_NV_shader_image_footprint" ], "version" : "None" }, + { + "opname" : "OpTypeCooperativeVectorNV", + "class" : "Type-Declaration", + "opcode" : 5288, + "operands" : [ + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Component Type" }, + { "kind" : "IdRef", "name" : "Component Count" } + ], + "capabilities" : [ "CooperativeVectorNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeVectorMatrixMulNV", + "class" : "Reserved", + "opcode" : 5289, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "IdRef", "name" : "InputInterpretation" }, + { "kind" : "IdRef", "name" : "Matrix" }, + { "kind" : "IdRef", "name" : "MatrixOffset" }, + { "kind" : "IdRef", "name" : "MatrixInterpretation" }, + { "kind" : "IdRef", "name" : "M" }, + { "kind" : "IdRef", "name" : "K" }, + { "kind" : "IdRef", "name" : "MemoryLayout" }, + { "kind" : "IdRef", "name" : "Transpose" }, + { "kind" : "IdRef", "name" : "MatrixStride", "quantifier": "?" }, + { "kind" : "CooperativeMatrixOperands", "quantifier" : "?" } + ], + "capabilities" : [ "CooperativeVectorNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeVectorOuterProductAccumulateNV", + "class" : "Reserved", + "opcode" : 5290, + "operands" : [ + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "IdRef", "name" : "MemoryLayout" }, + { "kind" : "IdRef", "name" : "MatrixInterpretation" }, + { "kind" : "IdRef", "name" : "MatrixStride", "quantifier": "?" } + ], + "capabilities" : [ "CooperativeVectorTrainingNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeVectorReduceSumAccumulateNV", + "class" : "Reserved", + "opcode" : 5291, + "operands" : [ + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "V" } + ], + "capabilities" : [ "CooperativeVectorTrainingNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeVectorMatrixMulAddNV", + "class" : "Reserved", + "opcode" : 5292, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "IdRef", "name" : "InputInterpretation" }, + { "kind" : "IdRef", "name" : "Matrix" }, + { "kind" : "IdRef", "name" : "MatrixOffset" }, + { "kind" : "IdRef", "name" : "MatrixInterpretation" }, + { "kind" : "IdRef", "name" : "Bias" }, + { "kind" : "IdRef", "name" : "BiasOffset" }, + { "kind" : "IdRef", "name" : "BiasInterpretation" }, + { "kind" : "IdRef", "name" : "M" }, + { "kind" : "IdRef", "name" : "K" }, + { "kind" : "IdRef", "name" : "MemoryLayout" }, + { "kind" : "IdRef", "name" : "Transpose" }, + { "kind" : "IdRef", "name" : "MatrixStride", "quantifier": "?" }, + { "kind" : "CooperativeMatrixOperands", "quantifier" : "?" } + ], + "capabilities" : [ "CooperativeVectorNV" ], + "version" : "None" + }, { "opname" : "OpCooperativeMatrixConvertNV", "class" : "Conversion", @@ -5974,7 +6102,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Matrix'" } + { "kind" : "IdRef", "name" : "Matrix" } ], "capabilities" : [ "CooperativeMatrixConversionsNV" ], "version" : "None" @@ -5984,10 +6112,10 @@ "class" : "Reserved", "opcode" : 5294, "operands" : [ - { "kind" : "IdRef", "name" : "'Group Count X'" }, - { "kind" : "IdRef", "name" : "'Group Count Y'" }, - { "kind" : "IdRef", "name" : "'Group Count Z'" }, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Group Count X" }, + { "kind" : "IdRef", "name" : "Group Count Y" }, + { "kind" : "IdRef", "name" : "Group Count Z" }, + { "kind" : "IdRef", "quantifier" : "?", "name" : "Payload" } ], "capabilities" : [ "MeshShadingEXT" ], "version" : "None" @@ -5997,8 +6125,8 @@ "class" : "Reserved", "opcode" : 5295, "operands" : [ - { "kind" : "IdRef", "name" : "'Vertex Count'" }, - { "kind" : "IdRef", "name" : "'Primitive Count'" } + { "kind" : "IdRef", "name" : "Vertex Count" }, + { "kind" : "IdRef", "name" : "Primitive Count" } ], "capabilities" : [ "MeshShadingEXT" ], "version" : "None" @@ -6010,7 +6138,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "GroupNonUniformPartitionedNV" ], "extensions" : [ "SPV_NV_shader_subgroup_partitioned" ], @@ -6021,8 +6149,8 @@ "class" : "Reserved", "opcode" : 5299, "operands" : [ - { "kind" : "IdRef", "name" : "'Index Offset'" }, - { "kind" : "IdRef", "name" : "'Packed Indices'" } + { "kind" : "IdRef", "name" : "Index Offset" }, + { "kind" : "IdRef", "name" : "Packed Indices" } ], "capabilities" : [ "MeshShadingNV" ], "extensions" : [ "SPV_NV_mesh_shader" ], @@ -6035,11 +6163,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Accel'" }, - { "kind" : "IdRef", "name" : "'Instance Id'" }, - { "kind" : "IdRef", "name" : "'Geometry Index'" }, - { "kind" : "IdRef", "name" : "'Primitive Index'" }, - { "kind" : "IdRef", "name" : "'Barycentric'" } + { "kind" : "IdRef", "name" : "Accel" }, + { "kind" : "IdRef", "name" : "Instance Id" }, + { "kind" : "IdRef", "name" : "Geometry Index" }, + { "kind" : "IdRef", "name" : "Primitive Index" }, + { "kind" : "IdRef", "name" : "Barycentric" } ], "capabilities" : [ "DisplacementMicromapNV" ], "version" : "None" @@ -6051,15 +6179,42 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Accel'" }, - { "kind" : "IdRef", "name" : "'Instance Id'" }, - { "kind" : "IdRef", "name" : "'Geometry Index'" }, - { "kind" : "IdRef", "name" : "'Primitive Index'" }, - { "kind" : "IdRef", "name" : "'Barycentric'" } + { "kind" : "IdRef", "name" : "Accel" }, + { "kind" : "IdRef", "name" : "Instance Id" }, + { "kind" : "IdRef", "name" : "Geometry Index" }, + { "kind" : "IdRef", "name" : "Primitive Index" }, + { "kind" : "IdRef", "name" : "Barycentric" } ], "capabilities" : [ "DisplacementMicromapNV" ], "version" : "None" }, + { + "opname" : "OpCooperativeVectorLoadNV", + "class" : "Memory", + "opcode" : 5302, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "MemoryAccess", "quantifier" : "?" } + ], + "capabilities" : [ "CooperativeVectorNV" ], + "version" : "None" + }, + { + "opname" : "OpCooperativeVectorStoreNV", + "class" : "Memory", + "opcode" : 5303, + "operands" : [ + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Offset" }, + { "kind" : "IdRef", "name" : "Object" }, + { "kind" : "MemoryAccess", "quantifier" : "?" } + ], + "capabilities" : [ "CooperativeVectorNV" ], + "version" : "None" + }, { "opname" : "OpReportIntersectionKHR", "class" : "Reserved", @@ -6068,8 +6223,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Hit'" }, - { "kind" : "IdRef", "name" : "'HitKind'" } + { "kind" : "IdRef", "name" : "Hit" }, + { "kind" : "IdRef", "name" : "HitKind" } ], "capabilities" : [ "RayTracingNV" , "RayTracingKHR" ], "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing" ], @@ -6097,17 +6252,17 @@ "opcode" : 5337, "operands" : [ - { "kind" : "IdRef", "name" : "'Accel'" }, - { "kind" : "IdRef", "name" : "'Ray Flags'" }, - { "kind" : "IdRef", "name" : "'Cull Mask'" }, - { "kind" : "IdRef", "name" : "'SBT Offset'" }, - { "kind" : "IdRef", "name" : "'SBT Stride'" }, - { "kind" : "IdRef", "name" : "'Miss Index'" }, - { "kind" : "IdRef", "name" : "'Ray Origin'" }, - { "kind" : "IdRef", "name" : "'Ray Tmin'" }, - { "kind" : "IdRef", "name" : "'Ray Direction'" }, - { "kind" : "IdRef", "name" : "'Ray Tmax'" }, - { "kind" : "IdRef", "name" : "'PayloadId'" } + { "kind" : "IdRef", "name" : "Accel" }, + { "kind" : "IdRef", "name" : "Ray Flags" }, + { "kind" : "IdRef", "name" : "Cull Mask" }, + { "kind" : "IdRef", "name" : "SBT Offset" }, + { "kind" : "IdRef", "name" : "SBT Stride" }, + { "kind" : "IdRef", "name" : "Miss Index" }, + { "kind" : "IdRef", "name" : "Ray Origin" }, + { "kind" : "IdRef", "name" : "Ray Tmin" }, + { "kind" : "IdRef", "name" : "Ray Direction" }, + { "kind" : "IdRef", "name" : "Ray Tmax" }, + { "kind" : "IdRef", "name" : "PayloadId" } ], "capabilities" : [ "RayTracingNV" ], "extensions" : [ "SPV_NV_ray_tracing" ], @@ -6119,18 +6274,18 @@ "opcode" : 5338, "operands" : [ - { "kind" : "IdRef", "name" : "'Accel'" }, - { "kind" : "IdRef", "name" : "'Ray Flags'" }, - { "kind" : "IdRef", "name" : "'Cull Mask'" }, - { "kind" : "IdRef", "name" : "'SBT Offset'" }, - { "kind" : "IdRef", "name" : "'SBT Stride'" }, - { "kind" : "IdRef", "name" : "'Miss Index'" }, - { "kind" : "IdRef", "name" : "'Ray Origin'" }, - { "kind" : "IdRef", "name" : "'Ray Tmin'" }, - { "kind" : "IdRef", "name" : "'Ray Direction'" }, - { "kind" : "IdRef", "name" : "'Ray Tmax'" }, - { "kind" : "IdRef", "name" : "'Time'" }, - { "kind" : "IdRef", "name" : "'PayloadId'" } + { "kind" : "IdRef", "name" : "Accel" }, + { "kind" : "IdRef", "name" : "Ray Flags" }, + { "kind" : "IdRef", "name" : "Cull Mask" }, + { "kind" : "IdRef", "name" : "SBT Offset" }, + { "kind" : "IdRef", "name" : "SBT Stride" }, + { "kind" : "IdRef", "name" : "Miss Index" }, + { "kind" : "IdRef", "name" : "Ray Origin" }, + { "kind" : "IdRef", "name" : "Ray Tmin" }, + { "kind" : "IdRef", "name" : "Ray Direction" }, + { "kind" : "IdRef", "name" : "Ray Tmax" }, + { "kind" : "IdRef", "name" : "Time" }, + { "kind" : "IdRef", "name" : "PayloadId" } ], "capabilities" : [ "RayTracingMotionBlurNV" ], "extensions" : [ "SPV_NV_ray_tracing_motion_blur" ], @@ -6142,18 +6297,18 @@ "opcode" : 5339, "operands" : [ - { "kind" : "IdRef", "name" : "'Accel'" }, - { "kind" : "IdRef", "name" : "'Ray Flags'" }, - { "kind" : "IdRef", "name" : "'Cull Mask'" }, - { "kind" : "IdRef", "name" : "'SBT Offset'" }, - { "kind" : "IdRef", "name" : "'SBT Stride'" }, - { "kind" : "IdRef", "name" : "'Miss Index'" }, - { "kind" : "IdRef", "name" : "'Ray Origin'" }, - { "kind" : "IdRef", "name" : "'Ray Tmin'" }, - { "kind" : "IdRef", "name" : "'Ray Direction'" }, - { "kind" : "IdRef", "name" : "'Ray Tmax'" }, - { "kind" : "IdRef", "name" : "'Time'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Accel" }, + { "kind" : "IdRef", "name" : "Ray Flags" }, + { "kind" : "IdRef", "name" : "Cull Mask" }, + { "kind" : "IdRef", "name" : "SBT Offset" }, + { "kind" : "IdRef", "name" : "SBT Stride" }, + { "kind" : "IdRef", "name" : "Miss Index" }, + { "kind" : "IdRef", "name" : "Ray Origin" }, + { "kind" : "IdRef", "name" : "Ray Tmin" }, + { "kind" : "IdRef", "name" : "Ray Direction" }, + { "kind" : "IdRef", "name" : "Ray Tmax" }, + { "kind" : "IdRef", "name" : "Time" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "RayTracingMotionBlurNV" ], "extensions" : [ "SPV_NV_ray_tracing_motion_blur" ], @@ -6168,11 +6323,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryPositionFetchKHR" ], @@ -6186,8 +6341,8 @@ "operands" : [ { "kind" : "IdResult" } ], - "capabilities" : [ "RayTracingNV" , "RayTracingKHR", "RayQueryKHR" ], - "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing", "SPV_KHR_ray_query" ], + "capabilities" : [ "RayTracingNV" , "RayTracingKHR", "RayQueryKHR", "DisplacementMicromapNV" ], + "extensions" : [ "SPV_NV_ray_tracing" , "SPV_KHR_ray_tracing", "SPV_KHR_ray_query", "SPV_NV_displacement_micromap" ], "version" : "None" }, { @@ -6196,23 +6351,54 @@ "opcode" : 5344, "operands" : [ - { "kind" : "IdRef", "name" : "'SBT Index'" }, - { "kind" : "IdRef", "name" : "'Callable DataId'" } + { "kind" : "IdRef", "name" : "SBT Index" }, + { "kind" : "IdRef", "name" : "Callable DataId" } ], "capabilities" : [ "RayTracingNV" ], "extensions" : [ "SPV_NV_ray_tracing" ], "version" : "None" }, + { + "opname" : "OpRayQueryGetClusterIdNV", + "class" : "Reserved", + "opcode" : 5345, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "RayQuery" + }, + { + "kind" : "IdRef", + "name" : "Intersection" + } + ], + "capabilities" : [ "RayTracingClusterAccelerationStructureNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetClusterIdNV", + "class" : "Reserved", + "opcode" : 5346, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Hit Object" } + ], + "capabilities" : [ "RayTracingClusterAccelerationStructureNV" ], + "version" : "None" + }, { "opname" : "OpTypeCooperativeMatrixNV", "class" : "Type-Declaration", "opcode" : 5358, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Component Type'" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdRef", "name" : "'Rows'" }, - { "kind" : "IdRef", "name" : "'Columns'" } + { "kind" : "IdRef", "name" : "Component Type" }, + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdRef", "name" : "Rows" }, + { "kind" : "IdRef", "name" : "Columns" } ], "capabilities" : [ "CooperativeMatrixNV" ], "extensions" : [ "SPV_NV_cooperative_matrix" ], @@ -6225,9 +6411,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'Stride'" }, - { "kind" : "IdRef", "name" : "'Column Major'" }, + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Stride" }, + { "kind" : "IdRef", "name" : "Column Major" }, { "kind" : "MemoryAccess", "quantifier" : "?" } ], "capabilities" : [ "CooperativeMatrixNV" ], @@ -6239,10 +6425,10 @@ "class" : "Reserved", "opcode" : 5360, "operands" : [ - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'Object'" }, - { "kind" : "IdRef", "name" : "'Stride'" }, - { "kind" : "IdRef", "name" : "'Column Major'" }, + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Object" }, + { "kind" : "IdRef", "name" : "Stride" }, + { "kind" : "IdRef", "name" : "Column Major" }, { "kind" : "MemoryAccess", "quantifier" : "?" } ], "capabilities" : [ "CooperativeMatrixNV" ], @@ -6256,9 +6442,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "IdRef", "name" : "'C'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "IdRef", "name" : "C" } ], "capabilities" : [ "CooperativeMatrixNV" ], "extensions" : [ "SPV_NV_cooperative_matrix" ], @@ -6271,7 +6457,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Type'" } + { "kind" : "IdRef", "name" : "Type" } ], "capabilities" : [ "CooperativeMatrixNV" ], "extensions" : [ "SPV_NV_cooperative_matrix" ], @@ -6300,9 +6486,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Matrix'" }, - { "kind" : "CooperativeMatrixReduce", "name" : "'Reduce'" }, - { "kind" : "IdRef", "name" : "'CombineFunc'" } + { "kind" : "IdRef", "name" : "Matrix" }, + { "kind" : "CooperativeMatrixReduce", "name" : "Reduce" }, + { "kind" : "IdRef", "name" : "CombineFunc" } ], "capabilities" : [ "CooperativeMatrixReductionsNV" ], "version" : "None" @@ -6314,11 +6500,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'Object'" }, - { "kind" : "IdRef", "name" : "'TensorLayout'" }, - { "kind" : "MemoryAccess", "name" : "'Memory Operand'"}, - { "kind" : "TensorAddressingOperands", "name" : "'Tensor Addressing Operands'"} + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Object" }, + { "kind" : "IdRef", "name" : "TensorLayout" }, + { "kind" : "MemoryAccess", "name" : "Memory Operand"}, + { "kind" : "TensorAddressingOperands", "name" : "Tensor Addressing Operands"} ], "capabilities" : [ "CooperativeMatrixTensorAddressingNV" ], "version" : "None" @@ -6328,11 +6514,11 @@ "class" : "Memory", "opcode" : 5368, "operands" : [ - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdRef", "name" : "'Object'" }, - { "kind" : "IdRef", "name" : "'TensorLayout'" }, - { "kind" : "MemoryAccess", "name" : "'Memory Operand'"}, - { "kind" : "TensorAddressingOperands", "name" : "'Tensor Addressing Operands'"} + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdRef", "name" : "Object" }, + { "kind" : "IdRef", "name" : "TensorLayout" }, + { "kind" : "MemoryAccess", "name" : "Memory Operand"}, + { "kind" : "TensorAddressingOperands", "name" : "Tensor Addressing Operands"} ], "capabilities" : [ "CooperativeMatrixTensorAddressingNV" ], "version" : "None" @@ -6344,9 +6530,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Matrix'" }, - { "kind" : "IdRef", "name" : "'Func'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Operands'" } + { "kind" : "IdRef", "name" : "Matrix" }, + { "kind" : "IdRef", "name" : "Func" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Operands" } ], "capabilities" : [ "CooperativeMatrixPerElementOperationsNV" ], "version" : "None" @@ -6357,8 +6543,8 @@ "opcode" : 5370, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Dim'" }, - { "kind" : "IdRef", "name" : "'ClampMode'" } + { "kind" : "IdRef", "name" : "Dim" }, + { "kind" : "IdRef", "name" : "ClampMode" } ], "capabilities" : [ "TensorAddressingNV" ], "version" : "None" @@ -6369,9 +6555,9 @@ "opcode" : 5371, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Dim'" }, - { "kind" : "IdRef", "name" : "'HasDimensions'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'p'" } + { "kind" : "IdRef", "name" : "Dim" }, + { "kind" : "IdRef", "name" : "HasDimensions" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "p" } ], "capabilities" : [ "TensorAddressingNV" ], "version" : "None" @@ -6394,8 +6580,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'TensorLayout'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Dim'" } + { "kind" : "IdRef", "name" : "TensorLayout" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Dim" } ], "capabilities" : [ "TensorAddressingNV" ], @@ -6408,8 +6594,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'TensorLayout'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Stride'" } + { "kind" : "IdRef", "name" : "TensorLayout" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Stride" } ], "capabilities" : [ "TensorAddressingNV" ], @@ -6422,8 +6608,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'TensorLayout'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Operands'" } + { "kind" : "IdRef", "name" : "TensorLayout" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Operands" } ], "capabilities" : [ "TensorAddressingNV" ], @@ -6436,8 +6622,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'TensorLayout'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "TensorLayout" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "TensorAddressingNV" ], @@ -6461,8 +6647,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'TensorView'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Dim'" } + { "kind" : "IdRef", "name" : "TensorView" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Dim" } ], "capabilities" : [ "TensorAddressingNV" ], @@ -6475,8 +6661,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'TensorView'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Stride'" } + { "kind" : "IdRef", "name" : "TensorView" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Stride" } ], "capabilities" : [ "TensorAddressingNV" ], @@ -6509,11 +6695,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'TensorView'" }, - { "kind" : "IdRef", "name" : "'ClipRowOffset'" }, - { "kind" : "IdRef", "name" : "'ClipRowSpan'" }, - { "kind" : "IdRef", "name" : "'ClipColOffset'" }, - { "kind" : "IdRef", "name" : "'ClipColSpan'" } + { "kind" : "IdRef", "name" : "TensorView" }, + { "kind" : "IdRef", "name" : "ClipRowOffset" }, + { "kind" : "IdRef", "name" : "ClipRowSpan" }, + { "kind" : "IdRef", "name" : "ClipColOffset" }, + { "kind" : "IdRef", "name" : "ClipColSpan" } ], "capabilities" : [ "TensorAddressingNV" ], "version" : "None" @@ -6525,8 +6711,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'TensorLayout'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'BlockSize'" } + { "kind" : "IdRef", "name" : "TensorLayout" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "BlockSize" } ], "capabilities" : [ "TensorAddressingNV" ], @@ -6539,7 +6725,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Matrix'" } + { "kind" : "IdRef", "name" : "Matrix" } ], "capabilities" : [ "CooperativeMatrixConversionsNV" ], "version" : "None" @@ -6551,7 +6737,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "capabilities" : [ "BindlessTextureNV" ], "version" : "None" @@ -6563,7 +6749,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "capabilities" : [ "BindlessTextureNV" ], "version" : "None" @@ -6575,7 +6761,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "capabilities" : [ "BindlessTextureNV" ], "version" : "None" @@ -6587,7 +6773,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "capabilities" : [ "BindlessTextureNV" ], "version" : "None" @@ -6599,7 +6785,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "capabilities" : [ "BindlessTextureNV" ], "version" : "None" @@ -6611,7 +6797,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "capabilities" : [ "BindlessTextureNV" ], "version" : "None" @@ -6621,7 +6807,7 @@ "class" : "Reserved", "opcode" : 5397, "operands" : [ - { "kind" : "LiteralInteger", "name" : "'Bit Width'" } + { "kind" : "LiteralInteger", "name" : "Bit Width" } ], "capabilities" : [ "BindlessTextureNV" ], "version" : "None" @@ -6633,10 +6819,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Base'" }, - { "kind" : "IdRef", "name" : "'Byte stride'" }, - { "kind" : "IdRef", "name" : "'Element index'" }, - { "kind" : "IdRef", "name" : "'Byte offset'" }, + { "kind" : "IdRef", "name" : "Base" }, + { "kind" : "IdRef", "name" : "Byte stride" }, + { "kind" : "IdRef", "name" : "Element index" }, + { "kind" : "IdRef", "name" : "Byte offset" }, { "kind" : "RawAccessChainOperands", "quantifier" : "?" } ], "capabilities" : [ @@ -6644,6 +6830,211 @@ ], "version" : "None" }, + { + "opname" : "OpRayQueryGetIntersectionSpherePositionNV", + "class" : "Reserved", + "opcode" : 5427, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "RayQuery" + }, + { + "kind" : "IdRef", + "name" : "Intersection" + } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionSphereRadiusNV", + "class" : "Reserved", + "opcode" : 5428, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "RayQuery" + }, + { + "kind" : "IdRef", + "name" : "Intersection" + } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionLSSPositionsNV", + "class" : "Reserved", + "opcode" : 5429, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "RayQuery" + }, + { + "kind" : "IdRef", + "name" : "Intersection" + } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionLSSRadiiNV", + "class" : "Reserved", + "opcode" : 5430, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "RayQuery" + }, + { + "kind" : "IdRef", + "name" : "Intersection" + } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV"], + "version" : "None" + }, + { + "opname" : "OpRayQueryGetIntersectionLSSHitValueNV", + "class" : "Reserved", + "opcode" : 5431, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "RayQuery" + }, + { + "kind" : "IdRef", + "name" : "Intersection" + } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetSpherePositionNV", + "class" : "Reserved", + "opcode" : 5432, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "Hit Object" } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetSphereRadiusNV", + "class" : "Reserved", + "opcode" : 5433, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "Hit Object" } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetLSSPositionsNV", + "class" : "Reserved", + "opcode" : 5434, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "Hit Object" } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectGetLSSRadiiNV", + "class" : "Reserved", + "opcode" : 5435, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "Hit Object" } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectIsSphereHitNV", + "class" : "Reserved", + "opcode" : 5436, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "Hit Object" } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpHitObjectIsLSSHitNV", + "class" : "Reserved", + "opcode" : 5437, + "operands" : [ + { "kind" : "IdResultType"}, + { "kind" : "IdResult"}, + { "kind" : "IdRef", "name" : "Hit Object" } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryIsSphereHitNV", + "class" : "Reserved", + "opcode" : 5438, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "RayQuery" + }, + { + "kind" : "IdRef", + "name" : "Intersection" + } + ], + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "version" : "None" + }, + { + "opname" : "OpRayQueryIsLSSHitNV", + "class" : "Reserved", + "opcode" : 5439, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { + "kind" : "IdRef", + "name" : "RayQuery" + }, + { + "kind" : "IdRef", + "name" : "Intersection" + } + ], + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "version" : "None" + }, { "opname" : "OpSubgroupShuffleINTEL", "class" : "Group", @@ -6651,8 +7042,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Data'" }, - { "kind" : "IdRef", "name" : "'InvocationId'" } + { "kind" : "IdRef", "name" : "Data" }, + { "kind" : "IdRef", "name" : "InvocationId" } ], "capabilities" : [ "SubgroupShuffleINTEL" ], "version" : "None" @@ -6664,9 +7055,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Current'" }, - { "kind" : "IdRef", "name" : "'Next'" }, - { "kind" : "IdRef", "name" : "'Delta'" } + { "kind" : "IdRef", "name" : "Current" }, + { "kind" : "IdRef", "name" : "Next" }, + { "kind" : "IdRef", "name" : "Delta" } ], "capabilities" : [ "SubgroupShuffleINTEL" ], "version" : "None" @@ -6678,9 +7069,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Previous'" }, - { "kind" : "IdRef", "name" : "'Current'" }, - { "kind" : "IdRef", "name" : "'Delta'" } + { "kind" : "IdRef", "name" : "Previous" }, + { "kind" : "IdRef", "name" : "Current" }, + { "kind" : "IdRef", "name" : "Delta" } ], "capabilities" : [ "SubgroupShuffleINTEL" ], "version" : "None" @@ -6692,8 +7083,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Data'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Data" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "SubgroupShuffleINTEL" ], "version" : "None" @@ -6705,7 +7096,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Ptr'" } + { "kind" : "IdRef", "name" : "Ptr" } ], "capabilities" : [ "SubgroupBufferBlockIOINTEL" ], "version" : "None" @@ -6715,8 +7106,8 @@ "class" : "Group", "opcode" : 5576, "operands" : [ - { "kind" : "IdRef", "name" : "'Ptr'" }, - { "kind" : "IdRef", "name" : "'Data'" } + { "kind" : "IdRef", "name" : "Ptr" }, + { "kind" : "IdRef", "name" : "Data" } ], "capabilities" : [ "SubgroupBufferBlockIOINTEL" ], "version" : "None" @@ -6728,8 +7119,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" } + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" } ], "capabilities" : [ "SubgroupImageBlockIOINTEL" ], "version" : "None" @@ -6739,9 +7130,9 @@ "class" : "Group", "opcode" : 5578, "operands" : [ - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'Data'" } + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Data" } ], "capabilities" : [ "SubgroupImageBlockIOINTEL" ], "version" : "None" @@ -6753,10 +7144,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'Width'" }, - { "kind" : "IdRef", "name" : "'Height'" } + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Width" }, + { "kind" : "IdRef", "name" : "Height" } ], "capabilities" : [ "SubgroupImageMediaBlockIOINTEL" ], "version" : "None" @@ -6766,11 +7157,11 @@ "class" : "Group", "opcode" : 5581, "operands" : [ - { "kind" : "IdRef", "name" : "'Image'" }, - { "kind" : "IdRef", "name" : "'Coordinate'" }, - { "kind" : "IdRef", "name" : "'Width'" }, - { "kind" : "IdRef", "name" : "'Height'" }, - { "kind" : "IdRef", "name" : "'Data'" } + { "kind" : "IdRef", "name" : "Image" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Width" }, + { "kind" : "IdRef", "name" : "Height" }, + { "kind" : "IdRef", "name" : "Data" } ], "capabilities" : [ "SubgroupImageMediaBlockIOINTEL" ], "version" : "None" @@ -6782,7 +7173,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6794,7 +7185,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand'" } + { "kind" : "IdRef", "name" : "Operand" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6806,8 +7197,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6819,8 +7210,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6832,8 +7223,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6845,8 +7236,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6858,8 +7249,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6871,8 +7262,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6884,8 +7275,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6897,8 +7288,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6910,8 +7301,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6923,8 +7314,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6936,8 +7327,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6949,8 +7340,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Operand 1'" }, - { "kind" : "IdRef", "name" : "'Operand 2'" } + { "kind" : "IdRef", "name" : "Operand 1" }, + { "kind" : "IdRef", "name" : "Operand 2" } ], "capabilities" : [ "IntegerFunctions2INTEL" ], "version" : "None" @@ -6962,7 +7353,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Function'" } + { "kind" : "IdRef", "name" : "Function" } ], "capabilities" : [ "FunctionPointersINTEL" ], "extensions" : [ "SPV_INTEL_function_pointers" ], @@ -6975,7 +7366,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Operand 1'" } + { "kind" : "IdRef", "quantifier" : "*", "name" : "Operand 1" } ], "capabilities" : [ "FunctionPointersINTEL" ], "extensions" : [ "SPV_INTEL_function_pointers" ], @@ -6986,9 +7377,8 @@ "class" : "@exclude", "opcode" : 5609, "operands" : [ - { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "LiteralString", "name" : "'Asm target'" } + { "kind" : "LiteralString", "name" : "Asm target" } ], "capabilities" : [ "AsmINTEL" ], "version" : "None" @@ -7000,10 +7390,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Asm type'" }, - { "kind" : "IdRef", "name" : "'Target'" }, - { "kind" : "LiteralString", "name" : "'Asm instructions'" }, - { "kind" : "LiteralString", "name" : "'Constraints'" } + { "kind" : "IdRef", "name" : "Asm type" }, + { "kind" : "IdRef", "name" : "Target" }, + { "kind" : "LiteralString", "name" : "Asm instructions" }, + { "kind" : "LiteralString", "name" : "Constraints" } ], "capabilities" : [ "AsmINTEL" ], "version" : "None" @@ -7015,8 +7405,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Asm'" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Argument 0'" } + { "kind" : "IdRef", "name" : "Asm" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Argument" } ], "capabilities" : [ "AsmINTEL" ], "version" : "None" @@ -7028,10 +7418,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "AtomicFloat16MinMaxEXT", "AtomicFloat32MinMaxEXT", "AtomicFloat64MinMaxEXT", "AtomicFloat16VectorNV" ], "version" : "None" @@ -7043,10 +7433,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "AtomicFloat16MinMaxEXT", "AtomicFloat32MinMaxEXT", "AtomicFloat64MinMaxEXT", "AtomicFloat16VectorNV" ], "version" : "None" @@ -7056,7 +7446,7 @@ "class" : "Miscellaneous", "opcode" : 5630, "operands" : [ - { "kind" : "IdRef", "name" : "'Condition'" } + { "kind" : "IdRef", "name" : "Condition" } ], "capabilities" : [ "ExpectAssumeKHR" ], "extensions" : [ "SPV_KHR_expect_assume" ], @@ -7069,8 +7459,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Value'" }, - { "kind" : "IdRef", "name" : "'ExpectedValue'" } + { "kind" : "IdRef", "name" : "Value" }, + { "kind" : "IdRef", "name" : "ExpectedValue" } ], "capabilities" : [ "ExpectAssumeKHR" ], "extensions" : [ "SPV_KHR_expect_assume" ], @@ -7082,7 +7472,7 @@ "aliases" : ["OpDecorateStringGOOGLE"], "opcode" : 5632, "operands" : [ - { "kind" : "IdRef", "name" : "'Target'" }, + { "kind" : "IdRef", "name" : "Target" }, { "kind" : "Decoration" } ], "extensions" : [ "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1" ], @@ -7094,8 +7484,8 @@ "aliases" : ["OpMemberDecorateStringGOOGLE"], "opcode" : 5633, "operands" : [ - { "kind" : "IdRef", "name" : "'Struct Type'" }, - { "kind" : "LiteralInteger", "name" : "'Member'" }, + { "kind" : "IdRef", "name" : "Struct Type" }, + { "kind" : "LiteralInteger", "name" : "Member" }, { "kind" : "Decoration" } ], "extensions" : [ "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1" ], @@ -7108,8 +7498,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image Type'" }, - { "kind" : "IdRef", "name" : "'Sampler'" } + { "kind" : "IdRef", "name" : "Image Type" }, + { "kind" : "IdRef", "name" : "Sampler" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7120,7 +7510,7 @@ "opcode" : 5700, "operands" : [ { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image Type'" } + { "kind" : "IdRef", "name" : "Image Type" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7252,8 +7642,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Slice Type'" }, - { "kind" : "IdRef", "name" : "'Qp'" } + { "kind" : "IdRef", "name" : "Slice Type" }, + { "kind" : "IdRef", "name" : "Qp" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7265,8 +7655,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Reference Base Penalty'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Reference Base Penalty" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7278,8 +7668,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Slice Type'" }, - { "kind" : "IdRef", "name" : "'Qp'" } + { "kind" : "IdRef", "name" : "Slice Type" }, + { "kind" : "IdRef", "name" : "Qp" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7291,8 +7681,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Packed Shape Penalty'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Packed Shape Penalty" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7304,8 +7694,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Slice Type'" }, - { "kind" : "IdRef", "name" : "'Qp'" } + { "kind" : "IdRef", "name" : "Slice Type" }, + { "kind" : "IdRef", "name" : "Qp" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7317,8 +7707,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Direction Cost'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Direction Cost" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7330,8 +7720,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Slice Type'" }, - { "kind" : "IdRef", "name" : "'Qp'" } + { "kind" : "IdRef", "name" : "Slice Type" }, + { "kind" : "IdRef", "name" : "Qp" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationIntraINTEL" ], "version" : "None" @@ -7343,8 +7733,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Slice Type'" }, - { "kind" : "IdRef", "name" : "'Qp'" } + { "kind" : "IdRef", "name" : "Slice Type" }, + { "kind" : "IdRef", "name" : "Qp" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7389,10 +7779,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Packed Cost Center Delta'" }, - { "kind" : "IdRef", "name" : "'Packed Cost Table'" }, - { "kind" : "IdRef", "name" : "'Cost Precision'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Packed Cost Center Delta" }, + { "kind" : "IdRef", "name" : "Packed Cost Table" }, + { "kind" : "IdRef", "name" : "Cost Precision" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7404,8 +7794,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Slice Type'" }, - { "kind" : "IdRef", "name" : "'Qp'" } + { "kind" : "IdRef", "name" : "Slice Type" }, + { "kind" : "IdRef", "name" : "Qp" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationIntraINTEL" ], "version" : "None" @@ -7439,7 +7829,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7451,8 +7841,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Source Field Polarity'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Source Field Polarity" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7464,8 +7854,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Reference Field Polarity'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Reference Field Polarity" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7477,9 +7867,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Forward Reference Field Polarity'" }, - { "kind" : "IdRef", "name" : "'Backward Reference Field Polarity'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Forward Reference Field Polarity" }, + { "kind" : "IdRef", "name" : "Backward Reference Field Polarity" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7491,7 +7881,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7503,7 +7893,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7515,7 +7905,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7527,7 +7917,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7539,7 +7929,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7551,7 +7941,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7563,7 +7953,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7575,7 +7965,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7587,7 +7977,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7599,7 +7989,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7611,7 +8001,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7623,7 +8013,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7635,7 +8025,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7647,7 +8037,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7659,9 +8049,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Packed Reference Ids'" }, - { "kind" : "IdRef", "name" : "'Packed Reference Parameter Field Polarities'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Packed Reference Ids" }, + { "kind" : "IdRef", "name" : "Packed Reference Parameter Field Polarities" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7673,9 +8063,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Coord'" }, - { "kind" : "IdRef", "name" : "'Partition Mask'" }, - { "kind" : "IdRef", "name" : "'SAD Adjustment'" } + { "kind" : "IdRef", "name" : "Src Coord" }, + { "kind" : "IdRef", "name" : "Partition Mask" }, + { "kind" : "IdRef", "name" : "SAD Adjustment" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7687,9 +8077,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Ref Offset'" }, - { "kind" : "IdRef", "name" : "'Search Window Config'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Ref Offset" }, + { "kind" : "IdRef", "name" : "Search Window Config" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7701,10 +8091,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Fwd Ref Offset'" }, - { "kind" : "IdRef", "name" : "'Bwd Ref Offset'" }, - { "kind" : "IdRef", "name" : "'id> Search Window Config'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Fwd Ref Offset" }, + { "kind" : "IdRef", "name" : "Bwd Ref Offset" }, + { "kind" : "IdRef", "name" : "id> Search Window Config" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7716,8 +8106,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Search Window Config'" }, - { "kind" : "IdRef", "name" : "'Dual Ref'" } + { "kind" : "IdRef", "name" : "Search Window Config" }, + { "kind" : "IdRef", "name" : "Dual Ref" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7729,10 +8119,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Ref Offset'" }, - { "kind" : "IdRef", "name" : "'Src Coord'" }, - { "kind" : "IdRef", "name" : "'Ref Window Size'" }, - { "kind" : "IdRef", "name" : "'Image Size'" } + { "kind" : "IdRef", "name" : "Ref Offset" }, + { "kind" : "IdRef", "name" : "Src Coord" }, + { "kind" : "IdRef", "name" : "Ref Window Size" }, + { "kind" : "IdRef", "name" : "Image Size" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7744,7 +8134,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7756,8 +8146,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Max Motion Vector Count'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Max Motion Vector Count" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7769,7 +8159,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7781,8 +8171,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Threshold'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Threshold" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7794,8 +8184,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Packed Sad Weights'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Packed Sad Weights" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7807,9 +8197,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7821,10 +8211,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Fwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Bwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Fwd Ref Image" }, + { "kind" : "IdRef", "name" : "Bwd Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7836,10 +8226,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" }, - { "kind" : "IdRef", "name" : "'Streamin Components'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" }, + { "kind" : "IdRef", "name" : "Streamin Components" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7851,11 +8241,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Fwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Bwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" }, - { "kind" : "IdRef", "name" : "'Streamin Components'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Fwd Ref Image" }, + { "kind" : "IdRef", "name" : "Bwd Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" }, + { "kind" : "IdRef", "name" : "Streamin Components" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7867,9 +8257,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7881,10 +8271,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Fwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Bwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Fwd Ref Image" }, + { "kind" : "IdRef", "name" : "Bwd Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7896,10 +8286,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" }, - { "kind" : "IdRef", "name" : "'Streamin Components'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" }, + { "kind" : "IdRef", "name" : "Streamin Components" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7911,11 +8301,11 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Fwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Bwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" }, - { "kind" : "IdRef", "name" : "'Streamin Components'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Fwd Ref Image" }, + { "kind" : "IdRef", "name" : "Bwd Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" }, + { "kind" : "IdRef", "name" : "Streamin Components" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7927,7 +8317,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7939,7 +8329,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7951,7 +8341,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7963,7 +8353,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7975,7 +8365,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -7987,8 +8377,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" }, - { "kind" : "IdRef", "name" : "'Major Shape'" } + { "kind" : "IdRef", "name" : "Payload" }, + { "kind" : "IdRef", "name" : "Major Shape" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8000,8 +8390,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" }, - { "kind" : "IdRef", "name" : "'Major Shape'" } + { "kind" : "IdRef", "name" : "Payload" }, + { "kind" : "IdRef", "name" : "Major Shape" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8013,8 +8403,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" }, - { "kind" : "IdRef", "name" : "'Major Shape'" } + { "kind" : "IdRef", "name" : "Payload" }, + { "kind" : "IdRef", "name" : "Major Shape" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8026,9 +8416,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" }, - { "kind" : "IdRef", "name" : "'Major Shape'" }, - { "kind" : "IdRef", "name" : "'Direction'" } + { "kind" : "IdRef", "name" : "Payload" }, + { "kind" : "IdRef", "name" : "Major Shape" }, + { "kind" : "IdRef", "name" : "Direction" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8040,9 +8430,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" }, - { "kind" : "IdRef", "name" : "'Major Shape'" }, - { "kind" : "IdRef", "name" : "'Direction'" } + { "kind" : "IdRef", "name" : "Payload" }, + { "kind" : "IdRef", "name" : "Major Shape" }, + { "kind" : "IdRef", "name" : "Direction" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8054,9 +8444,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" }, - { "kind" : "IdRef", "name" : "'Major Shape'" }, - { "kind" : "IdRef", "name" : "'Direction'" } + { "kind" : "IdRef", "name" : "Payload" }, + { "kind" : "IdRef", "name" : "Major Shape" }, + { "kind" : "IdRef", "name" : "Direction" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8068,8 +8458,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Image Select'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Image Select" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8081,7 +8471,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8093,7 +8483,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8105,7 +8495,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8117,7 +8507,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8129,13 +8519,13 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Coord'" }, - { "kind" : "IdRef", "name" : "'Motion Vectors'" }, - { "kind" : "IdRef", "name" : "'Major Shapes'" }, - { "kind" : "IdRef", "name" : "'Minor Shapes'" }, - { "kind" : "IdRef", "name" : "'Direction'" }, - { "kind" : "IdRef", "name" : "'Pixel Resolution'" }, - { "kind" : "IdRef", "name" : "'Sad Adjustment'" } + { "kind" : "IdRef", "name" : "Src Coord" }, + { "kind" : "IdRef", "name" : "Motion Vectors" }, + { "kind" : "IdRef", "name" : "Major Shapes" }, + { "kind" : "IdRef", "name" : "Minor Shapes" }, + { "kind" : "IdRef", "name" : "Direction" }, + { "kind" : "IdRef", "name" : "Pixel Resolution" }, + { "kind" : "IdRef", "name" : "Sad Adjustment" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8147,14 +8537,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Coord'" }, - { "kind" : "IdRef", "name" : "'Motion Vectors'" }, - { "kind" : "IdRef", "name" : "'Major Shapes'" }, - { "kind" : "IdRef", "name" : "'Minor Shapes'" }, - { "kind" : "IdRef", "name" : "'Direction'" }, - { "kind" : "IdRef", "name" : "'Pixel Resolution'" }, - { "kind" : "IdRef", "name" : "'Bidirectional Weight'" }, - { "kind" : "IdRef", "name" : "'Sad Adjustment'" } + { "kind" : "IdRef", "name" : "Src Coord" }, + { "kind" : "IdRef", "name" : "Motion Vectors" }, + { "kind" : "IdRef", "name" : "Major Shapes" }, + { "kind" : "IdRef", "name" : "Minor Shapes" }, + { "kind" : "IdRef", "name" : "Direction" }, + { "kind" : "IdRef", "name" : "Pixel Resolution" }, + { "kind" : "IdRef", "name" : "Bidirectional Weight" }, + { "kind" : "IdRef", "name" : "Sad Adjustment" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8166,7 +8556,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8178,7 +8568,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8190,7 +8580,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8202,9 +8592,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8216,10 +8606,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Fwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Bwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Fwd Ref Image" }, + { "kind" : "IdRef", "name" : "Bwd Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8231,9 +8621,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Packed Reference Ids'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Packed Reference Ids" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8245,10 +8635,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Packed Reference Ids'" }, - { "kind" : "IdRef", "name" : "'Packed Reference Field Polarities'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Packed Reference Ids" }, + { "kind" : "IdRef", "name" : "Packed Reference Field Polarities" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8260,7 +8650,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8272,7 +8662,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Coord'" } + { "kind" : "IdRef", "name" : "Src Coord" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8284,12 +8674,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Skip Block Partition Type'" }, - { "kind" : "IdRef", "name" : "'Skip Motion Vector Mask'" }, - { "kind" : "IdRef", "name" : "'Motion Vectors'" }, - { "kind" : "IdRef", "name" : "'Bidirectional Weight'" }, - { "kind" : "IdRef", "name" : "'Sad Adjustment'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Skip Block Partition Type" }, + { "kind" : "IdRef", "name" : "Skip Motion Vector Mask" }, + { "kind" : "IdRef", "name" : "Motion Vectors" }, + { "kind" : "IdRef", "name" : "Bidirectional Weight" }, + { "kind" : "IdRef", "name" : "Sad Adjustment" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8301,14 +8691,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Luma Intra Partition Mask'" }, - { "kind" : "IdRef", "name" : "'Intra Neighbour Availabilty'" }, - { "kind" : "IdRef", "name" : "'Left Edge Luma Pixels'" }, - { "kind" : "IdRef", "name" : "'Upper Left Corner Luma Pixel'" }, - { "kind" : "IdRef", "name" : "'Upper Edge Luma Pixels'" }, - { "kind" : "IdRef", "name" : "'Upper Right Edge Luma Pixels'" }, - { "kind" : "IdRef", "name" : "'Sad Adjustment'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Luma Intra Partition Mask" }, + { "kind" : "IdRef", "name" : "Intra Neighbour Availabilty" }, + { "kind" : "IdRef", "name" : "Left Edge Luma Pixels" }, + { "kind" : "IdRef", "name" : "Upper Left Corner Luma Pixel" }, + { "kind" : "IdRef", "name" : "Upper Edge Luma Pixels" }, + { "kind" : "IdRef", "name" : "Upper Right Edge Luma Pixels" }, + { "kind" : "IdRef", "name" : "Sad Adjustment" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationIntraINTEL" ], "version" : "None" @@ -8320,17 +8710,17 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Luma Intra Partition Mask'" }, - { "kind" : "IdRef", "name" : "'Intra Neighbour Availabilty'" }, - { "kind" : "IdRef", "name" : "'Left Edge Luma Pixels'" }, - { "kind" : "IdRef", "name" : "'Upper Left Corner Luma Pixel'" }, - { "kind" : "IdRef", "name" : "'Upper Edge Luma Pixels'" }, - { "kind" : "IdRef", "name" : "'Upper Right Edge Luma Pixels'" }, - { "kind" : "IdRef", "name" : "'Left Edge Chroma Pixels'" }, - { "kind" : "IdRef", "name" : "'Upper Left Corner Chroma Pixel'" }, - { "kind" : "IdRef", "name" : "'Upper Edge Chroma Pixels'" }, - { "kind" : "IdRef", "name" : "'Sad Adjustment'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Luma Intra Partition Mask" }, + { "kind" : "IdRef", "name" : "Intra Neighbour Availabilty" }, + { "kind" : "IdRef", "name" : "Left Edge Luma Pixels" }, + { "kind" : "IdRef", "name" : "Upper Left Corner Luma Pixel" }, + { "kind" : "IdRef", "name" : "Upper Edge Luma Pixels" }, + { "kind" : "IdRef", "name" : "Upper Right Edge Luma Pixels" }, + { "kind" : "IdRef", "name" : "Left Edge Chroma Pixels" }, + { "kind" : "IdRef", "name" : "Upper Left Corner Chroma Pixel" }, + { "kind" : "IdRef", "name" : "Upper Edge Chroma Pixels" }, + { "kind" : "IdRef", "name" : "Sad Adjustment" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationChromaINTEL" ], "version" : "None" @@ -8342,8 +8732,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Skip Block Partition Type'" }, - { "kind" : "IdRef", "name" : "'Direction'" } + { "kind" : "IdRef", "name" : "Skip Block Partition Type" }, + { "kind" : "IdRef", "name" : "Direction" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8355,7 +8745,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8367,8 +8757,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Packed Shape Penalty'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Packed Shape Penalty" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8380,10 +8770,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Luma Mode Penalty'" }, - { "kind" : "IdRef", "name" : "'Luma Packed Neighbor Modes'" }, - { "kind" : "IdRef", "name" : "'Luma Packed Non Dc Penalty'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Luma Mode Penalty" }, + { "kind" : "IdRef", "name" : "Luma Packed Neighbor Modes" }, + { "kind" : "IdRef", "name" : "Luma Packed Non Dc Penalty" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationIntraINTEL" ], "version" : "None" @@ -8395,8 +8785,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Chroma Mode Base Penalty'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Chroma Mode Base Penalty" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationChromaINTEL" ], "version" : "None" @@ -8408,7 +8798,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8420,8 +8810,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Packed Sad Coefficients'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Packed Sad Coefficients" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8433,8 +8823,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Block Based Skip Type'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Block Based Skip Type" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8446,8 +8836,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationIntraINTEL" ], "version" : "None" @@ -8459,9 +8849,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8473,10 +8863,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Fwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Bwd Ref Image'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Fwd Ref Image" }, + { "kind" : "IdRef", "name" : "Bwd Ref Image" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8488,9 +8878,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Packed Reference Ids'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Packed Reference Ids" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8502,10 +8892,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Src Image'" }, - { "kind" : "IdRef", "name" : "'Packed Reference Ids'" }, - { "kind" : "IdRef", "name" : "'Packed Reference Field Polarities'" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Src Image" }, + { "kind" : "IdRef", "name" : "Packed Reference Ids" }, + { "kind" : "IdRef", "name" : "Packed Reference Field Polarities" }, + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8517,7 +8907,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8529,7 +8919,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationIntraINTEL" ], "version" : "None" @@ -8541,7 +8931,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationIntraINTEL" ], "version" : "None" @@ -8553,7 +8943,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8565,7 +8955,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationIntraINTEL" ], "version" : "None" @@ -8577,7 +8967,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationChromaINTEL" ], "version" : "None" @@ -8589,7 +8979,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationIntraINTEL" ], "version" : "None" @@ -8601,7 +8991,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL", "SubgroupAvcMotionEstimationIntraINTEL" ], "version" : "None" @@ -8613,7 +9003,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Payload'" } + { "kind" : "IdRef", "name" : "Payload" } ], "capabilities" : [ "SubgroupAvcMotionEstimationINTEL" ], "version" : "None" @@ -8625,7 +9015,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Lenght'" } + { "kind" : "IdRef", "name" : "Lenght" } ], "capabilities" : [ "VariableLengthArrayINTEL" ], "version" : "None" @@ -8646,7 +9036,7 @@ "class" : "@exclude", "opcode" : 5820, "operands" : [ - { "kind" : "IdRef", "name" : "'Ptr'" } + { "kind" : "IdRef", "name" : "Ptr" } ], "capabilities" : [ "VariableLengthArrayINTEL" ], "version" : "None" @@ -8658,13 +9048,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'FromSign'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "MResult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "RoundingAccuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8676,12 +9065,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8693,12 +9082,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'FromSign'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "FromSign" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8710,11 +9099,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "ToSign" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8726,14 +9116,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" }, + { "kind" : "LiteralInteger", "name" : "MResult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8745,14 +9135,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8764,14 +9154,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8783,14 +9173,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8802,10 +9192,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8817,10 +9207,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8832,10 +9222,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8847,10 +9237,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8862,10 +9252,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8877,12 +9267,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8894,12 +9284,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8911,12 +9301,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8928,14 +9318,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8947,12 +9337,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8964,12 +9354,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8981,12 +9371,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -8998,12 +9388,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9015,12 +9405,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9032,12 +9422,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9049,12 +9439,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9066,12 +9456,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9083,12 +9473,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9100,12 +9490,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9117,12 +9507,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9134,12 +9524,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9151,12 +9541,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9168,12 +9558,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9185,12 +9575,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9202,12 +9592,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9219,12 +9609,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "M1" }, + { "kind" : "LiteralInteger", "name" : "Mout" }, + { "kind" : "LiteralInteger", "name" : "EnableSubnormals" }, + { "kind" : "LiteralInteger", "name" : "RoundingMode" }, + { "kind" : "LiteralInteger", "name" : "RoundingAccuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9236,12 +9626,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9253,12 +9643,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9270,12 +9660,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9287,14 +9677,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9306,14 +9696,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9325,14 +9715,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'M2'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "Mb" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9344,13 +9734,14 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'A'" }, - { "kind" : "LiteralInteger", "name" : "'M1'" }, - { "kind" : "IdRef", "name" : "'B'" }, - { "kind" : "LiteralInteger", "name" : "'Mout'" }, - { "kind" : "LiteralInteger", "name" : "'EnableSubnormals'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingMode'" }, - { "kind" : "LiteralInteger", "name" : "'RoundingAccuracy'" } + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "LiteralInteger", "name" : "Ma" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "LiteralInteger", "name" : "SignOfB" }, + { "kind" : "LiteralInteger", "name" : "Mresult" }, + { "kind" : "LiteralInteger", "name" : "Subnormal" }, + { "kind" : "LiteralInteger", "name" : "Rounding" }, + { "kind" : "LiteralInteger", "name" : "Accuracy" } ], "capabilities" : [ "ArbitraryPrecisionFloatingPointINTEL" ], "version" : "None" @@ -9360,7 +9751,7 @@ "class" : "Reserved", "opcode" : 5887, "operands" : [ - { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "'Loop Control Parameters'" } + { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "Loop Control Parameters" } ], "capabilities" : [ "UnstructuredLoopControlsINTEL" ], "extensions" : [ "SPV_INTEL_unstructured_loop_controls" ], @@ -9372,7 +9763,7 @@ "opcode" : 5911, "operands" : [ { "kind" : "IdResult"}, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'Name'" } + { "kind" : "IdRef", "quantifier" : "?", "name" : "Name" } ], "capabilities" : [ "MemoryAccessAliasingINTEL" ], "extensions" : [ "SPV_INTEL_memory_access_aliasing" ], @@ -9384,8 +9775,8 @@ "opcode" : 5912, "operands" : [ { "kind" : "IdResult"}, - { "kind" : "IdRef", "name" : "'Alias Domain'"}, - { "kind" : "IdRef", "quantifier" : "?", "name" : "'Name'" } + { "kind" : "IdRef", "name" : "Alias Domain"}, + { "kind" : "IdRef", "quantifier" : "?", "name" : "Name" } ], "capabilities" : [ "MemoryAccessAliasingINTEL" ], "extensions" : [ "SPV_INTEL_memory_access_aliasing" ], @@ -9397,7 +9788,7 @@ "opcode" : 5913, "operands" : [ { "kind" : "IdResult"}, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'AliasScope1, AliasScope2, ...'" } + { "kind" : "IdRef", "quantifier" : "*", "name" : "AliasScope 1, AliasScope 2, ..." } ], "capabilities" : [ "MemoryAccessAliasingINTEL" ], "extensions" : [ "SPV_INTEL_memory_access_aliasing" ], @@ -9410,13 +9801,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9428,13 +9818,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9446,13 +9835,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9464,13 +9852,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9482,13 +9869,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9500,13 +9886,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9518,13 +9903,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9536,13 +9920,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9554,13 +9937,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9572,13 +9954,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9590,13 +9971,12 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Input Type'" }, - { "kind" : "IdRef", "name" : "'Input'" }, - { "kind" : "LiteralInteger", "name" : "'S'" }, - { "kind" : "LiteralInteger", "name" : "'I'" }, - { "kind" : "LiteralInteger", "name" : "'rI'" }, - { "kind" : "LiteralInteger", "name" : "'Q'" }, - { "kind" : "LiteralInteger", "name" : "'O'" } + { "kind" : "IdRef", "name" : "Input" }, + { "kind" : "LiteralInteger", "name" : "S" }, + { "kind" : "LiteralInteger", "name" : "I" }, + { "kind" : "LiteralInteger", "name" : "rI" }, + { "kind" : "LiteralInteger", "name" : "Q" }, + { "kind" : "LiteralInteger", "name" : "O" } ], "capabilities" : [ "ArbitraryPrecisionFixedPointINTEL" ], "version" : "None" @@ -9608,7 +9988,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" } + { "kind" : "IdRef", "name" : "Pointer" } ], "capabilities" : [ "USMStorageClassesINTEL" ], "version" : "None" @@ -9620,7 +10000,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" } + { "kind" : "IdRef", "name" : "Pointer" } ], "capabilities" : [ "USMStorageClassesINTEL" ], "version" : "None" @@ -9632,8 +10012,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "BlockingPipesINTEL" ], "extensions" : [ "SPV_INTEL_blocking_pipes" ], @@ -9646,8 +10026,8 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Packet Size'" }, - { "kind" : "IdRef", "name" : "'Packet Alignment'" } + { "kind" : "IdRef", "name" : "Packet Size" }, + { "kind" : "IdRef", "name" : "Packet Alignment" } ], "capabilities" : [ "BlockingPipesINTEL" ], "extensions" : [ "SPV_INTEL_blocking_pipes" ], @@ -9660,8 +10040,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Result'" }, - { "kind" : "IdRef", "name" : "'Input'" } + { "kind" : "IdRef", "name" : "Input" } ], "capabilities" : [ "FPGARegINTEL" ], "extensions" : [ "SPV_INTEL_fpga_reg" ], @@ -9676,7 +10055,7 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9692,7 +10071,7 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9708,11 +10087,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9728,11 +10107,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9748,11 +10127,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9768,11 +10147,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9788,11 +10167,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9808,11 +10187,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9828,11 +10207,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9848,11 +10227,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9868,7 +10247,7 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9884,11 +10263,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9904,11 +10283,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9924,7 +10303,7 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9940,7 +10319,7 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9956,11 +10335,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9976,11 +10355,11 @@ { "kind" : "IdResult" }, { "kind" : "IdRef", - "name" : "'RayQuery'" + "name" : "RayQuery" }, { "kind" : "IdRef", - "name" : "'Intersection'" + "name" : "Intersection" } ], "capabilities" : [ "RayQueryKHR" ], @@ -9994,10 +10373,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Pointer'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" }, - { "kind" : "IdRef", "name" : "'Value'" } + { "kind" : "IdRef", "name" : "Pointer" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" }, + { "kind" : "IdRef", "name" : "Value" } ], "capabilities" : [ "AtomicFloat16AddEXT", "AtomicFloat32AddEXT", "AtomicFloat64AddEXT", "AtomicFloat16VectorNV" ], "extensions" : [ "SPV_EXT_shader_atomic_float_add" ], @@ -10011,7 +10390,7 @@ { "kind" : "IdResult" }, { "kind" : "AccessQualifier", - "name" : "'AccessQualifier'" + "name" : "AccessQualifier" } ], "capabilities" : [ "VectorComputeINTEL" ], @@ -10022,7 +10401,7 @@ "class" : "Type-Declaration", "opcode" : 6090, "operands" : [ - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Member 0 type', +\n'member 1 type', +\n..." } + { "kind" : "IdRef", "quantifier" : "*", "name" : "Member 0 type, member 1 type, ..." } ], "capabilities" : [ "LongCompositesINTEL" ], "version" : "None" @@ -10032,7 +10411,7 @@ "class" : "Constant-Creation", "opcode" : 6091, "operands" : [ - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Constituents'" } + { "kind" : "IdRef", "quantifier" : "*", "name" : "Constituents" } ], "capabilities" : [ "LongCompositesINTEL" ], "version" : "None" @@ -10042,7 +10421,7 @@ "class" : "Constant-Creation", "opcode" : 6092, "operands" : [ - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Constituents'" } + { "kind" : "IdRef", "quantifier" : "*", "name" : "Constituents" } ], "capabilities" : [ "LongCompositesINTEL" ], "version" : "None" @@ -10054,7 +10433,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "quantifier" : "*", "name" : "'Constituents'" } + { "kind" : "IdRef", "quantifier" : "*", "name" : "Constituents" } ], "capabilities" : [ "LongCompositesINTEL" ], "version": "None" @@ -10066,7 +10445,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Float Value'" } + { "kind" : "IdRef", "name" : "Float Value" } ], "capabilities" : [ "BFloat16ConversionINTEL" ], "version" : "None" @@ -10078,7 +10457,7 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'BFloat16 Value'" } + { "kind" : "IdRef", "name" : "BFloat16 Value" } ], "capabilities" : [ "BFloat16ConversionINTEL" ], "version" : "None" @@ -10088,9 +10467,9 @@ "class" : "Barrier", "opcode" : 6142, "operands" : [ - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" } ], "capabilities" : [ "SplitBarrierINTEL" ], "version" : "None" @@ -10100,9 +10479,9 @@ "class" : "Barrier", "opcode" : 6143, "operands" : [ - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "IdScope", "name" : "'Memory'" }, - { "kind" : "IdMemorySemantics", "name" : "'Semantics'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "IdScope", "name" : "Memory" }, + { "kind" : "IdMemorySemantics", "name" : "Semantics" } ], "capabilities" : [ "SplitBarrierINTEL" ], "version" : "None" @@ -10114,47 +10493,231 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'Target '" } + { "kind" : "IdRef", "name" : "Target" } ], "capabilities" : [ "ArithmeticFenceEXT" ], "version" : "None" }, { - "opname" : "OpSubgroupBlockPrefetchINTEL", - "class" : "Group", - "opcode" : 6221, + "opname" : "OpTaskSequenceCreateINTEL", + "class" : "Reserved", + "opcode" : 6163, "operands" : [ - { "kind" : "IdRef", "name" : "'Ptr'" }, - { "kind" : "IdRef", "name" : "'NumBytes'" }, - { "kind" : "MemoryAccess", "quantifier" : "?" } + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Function" }, + { "kind" : "LiteralInteger", "name" : "Pipelined" }, + { "kind" : "LiteralInteger", "name" : "UseStallEnableClusters" }, + { "kind" : "LiteralInteger", "name" : "GetCapacity" }, + { "kind" : "LiteralInteger", "name" : "AsyncCapacity" } ], - "capabilities" : [ "SubgroupBufferPrefetchINTEL" ], + "capabilities" : [ "TaskSequenceINTEL" ], "version" : "None" }, { - "opname" : "OpGroupIMulKHR", - "class" : "Group", - "opcode" : 6401, + "opname" : "OpTaskSequenceAsyncINTEL", + "class" : "Reserved", + "opcode" : 6164, "operands" : [ - { "kind" : "IdResultType" }, - { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdRef", "name" : "Sequence" }, + { "kind" : "IdRef", "quantifier" : "*", "name" : "Arguments" } ], - "capabilities" : [ "GroupUniformArithmeticKHR" ], + "capabilities" : [ "TaskSequenceINTEL" ], "version" : "None" }, { - "opname" : "OpGroupFMulKHR", - "class" : "Group", + "opname" : "OpTaskSequenceGetINTEL", + "class" : "Reserved", + "opcode" : 6165, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Sequence" } + ], + "capabilities" : [ "TaskSequenceINTEL" ], + "version" : "None" + }, + { + "opname" : "OpTaskSequenceReleaseINTEL", + "class" : "Reserved", + "opcode" : 6166, + "operands" : [ + { "kind" : "IdRef", "name" : "Sequence" } + ], + "capabilities" : [ "TaskSequenceINTEL" ], + "version" : "None" + }, + { + "opname" : "OpTypeTaskSequenceINTEL", + "class" : "Type-Declaration", + "opcode" : 6199, + "operands" : [ + { "kind" : "IdResult" } + ], + "capabilities" : [ "TaskSequenceINTEL" ], + "version": "None" + }, + { + "opname" : "OpSubgroupBlockPrefetchINTEL", + "class" : "Group", + "opcode" : 6221, + "operands" : [ + { "kind" : "IdRef", "name" : "Ptr" }, + { "kind" : "IdRef", "name" : "NumBytes" }, + { "kind" : "MemoryAccess", "quantifier" : "?" } + ], + "capabilities" : [ "SubgroupBufferPrefetchINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroup2DBlockLoadINTEL", + "class" : "Group", + "opcode" : 6231, + "operands" : [ + { "kind" : "IdRef", "name" : "Element Size" }, + { "kind" : "IdRef", "name" : "Block Width" }, + { "kind" : "IdRef", "name" : "Block Height" }, + { "kind" : "IdRef", "name" : "Block Count" }, + { "kind" : "IdRef", "name" : "Src Base Pointer" }, + { "kind" : "IdRef", "name" : "Memory Width" }, + { "kind" : "IdRef", "name" : "Memory Height" }, + { "kind" : "IdRef", "name" : "Memory Pitch" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Dst Pointer" } + ], + "capabilities" : [ "Subgroup2DBlockIOINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroup2DBlockLoadTransformINTEL", + "class" : "Group", + "opcode" : 6232, + "operands" : [ + { "kind" : "IdRef", "name" : "Element Size" }, + { "kind" : "IdRef", "name" : "Block Width" }, + { "kind" : "IdRef", "name" : "Block Height" }, + { "kind" : "IdRef", "name" : "Block Count" }, + { "kind" : "IdRef", "name" : "Src Base Pointer" }, + { "kind" : "IdRef", "name" : "Memory Width" }, + { "kind" : "IdRef", "name" : "Memory Height" }, + { "kind" : "IdRef", "name" : "Memory Pitch" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Dst Pointer" } + ], + "capabilities" : [ "Subgroup2DBlockTransformINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroup2DBlockLoadTransposeINTEL", + "class" : "Group", + "opcode" : 6233, + "operands" : [ + { "kind" : "IdRef", "name" : "Element Size" }, + { "kind" : "IdRef", "name" : "Block Width" }, + { "kind" : "IdRef", "name" : "Block Height" }, + { "kind" : "IdRef", "name" : "Block Count" }, + { "kind" : "IdRef", "name" : "Src Base Pointer" }, + { "kind" : "IdRef", "name" : "Memory Width" }, + { "kind" : "IdRef", "name" : "Memory Height" }, + { "kind" : "IdRef", "name" : "Memory Pitch" }, + { "kind" : "IdRef", "name" : "Coordinate" }, + { "kind" : "IdRef", "name" : "Dst Pointer" } + ], + "capabilities" : [ "Subgroup2DBlockTransposeINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroup2DBlockPrefetchINTEL", + "class" : "Group", + "opcode" : 6234, + "operands" : [ + { "kind" : "IdRef", "name" : "Element Size" }, + { "kind" : "IdRef", "name" : "Block Width" }, + { "kind" : "IdRef", "name" : "Block Height" }, + { "kind" : "IdRef", "name" : "Block Count" }, + { "kind" : "IdRef", "name" : "Src Base Pointer" }, + { "kind" : "IdRef", "name" : "Memory Width" }, + { "kind" : "IdRef", "name" : "Memory Height" }, + { "kind" : "IdRef", "name" : "Memory Pitch" }, + { "kind" : "IdRef", "name" : "Coordinate" } + ], + "capabilities" : [ "Subgroup2DBlockIOINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroup2DBlockStoreINTEL", + "class" : "Group", + "opcode" : 6235, + "operands" : [ + { "kind" : "IdRef", "name" : "Element Size" }, + { "kind" : "IdRef", "name" : "Block Width" }, + { "kind" : "IdRef", "name" : "Block Height" }, + { "kind" : "IdRef", "name" : "Block Count" }, + { "kind" : "IdRef", "name" : "Src Pointer" }, + { "kind" : "IdRef", "name" : "Dst Base Pointer" }, + { "kind" : "IdRef", "name" : "Memory Width" }, + { "kind" : "IdRef", "name" : "Memory Height" }, + { "kind" : "IdRef", "name" : "Memory Pitch" }, + { "kind" : "IdRef", "name" : "Coordinate" } + ], + "capabilities" : [ "Subgroup2DBlockIOINTEL" ], + "version" : "None" + }, + { + "opname" : "OpSubgroupMatrixMultiplyAccumulateINTEL", + "class" : "Group", + "opcode" : 6237, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "K Dim" }, + { "kind" : "IdRef", "name" : "Matrix A" }, + { "kind" : "IdRef", "name" : "Matrix B" }, + { "kind" : "IdRef", "name" : "Matrix C" }, + { "kind" : "MatrixMultiplyAccumulateOperands", "quantifier" : "?" } + ], + "capabilities" : [ "SubgroupMatrixMultiplyAccumulateINTEL" ], + "version" : "None" + }, + { + "opname" : "OpBitwiseFunctionINTEL", + "class" : "Bit", + "opcode" : 6242, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "A" }, + { "kind" : "IdRef", "name" : "B" }, + { "kind" : "IdRef", "name" : "C" }, + { "kind" : "IdRef", "name" : "LUTIndex" } + ], + "capabilities" : [ "TernaryBitwiseFunctionINTEL" ], + "version" : "None" + }, + { + "opname" : "OpGroupIMulKHR", + "class" : "Group", + "opcode" : 6401, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } + ], + "capabilities" : [ "GroupUniformArithmeticKHR" ], + "version" : "None" + }, + { + "opname" : "OpGroupFMulKHR", + "class" : "Group", "opcode" : 6402, "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "GroupUniformArithmeticKHR" ], "version" : "None" @@ -10166,9 +10729,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "GroupUniformArithmeticKHR" ], "version" : "None" @@ -10180,9 +10743,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "GroupUniformArithmeticKHR" ], "version" : "None" @@ -10194,9 +10757,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "GroupUniformArithmeticKHR" ], "version" : "None" @@ -10208,9 +10771,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "GroupUniformArithmeticKHR" ], "version" : "None" @@ -10222,9 +10785,9 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "GroupUniformArithmeticKHR" ], "version" : "None" @@ -10236,13 +10799,25 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdScope", "name" : "'Execution'" }, - { "kind" : "GroupOperation", "name" : "'Operation'" }, - { "kind" : "IdRef", "name" : "'X'" } + { "kind" : "IdScope", "name" : "Execution" }, + { "kind" : "GroupOperation", "name" : "Operation" }, + { "kind" : "IdRef", "name" : "X" } ], "capabilities" : [ "GroupUniformArithmeticKHR" ], "version" : "None" }, + { + "opname" : "OpRoundFToTF32INTEL", + "class" : "Conversion", + "opcode" : 6426, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Float Value" } + ], + "capabilities" : [ "TensorFloat32RoundingINTEL" ], + "version" : "None" + }, { "opname" : "OpMaskedGatherINTEL", "class" : "Memory", @@ -10250,10 +10825,10 @@ "operands" : [ { "kind" : "IdResultType" }, { "kind" : "IdResult" }, - { "kind" : "IdRef", "name" : "'PtrVector'" }, - { "kind" : "LiteralInteger", "name" : "'Alignment'" }, - { "kind" : "IdRef", "name" : "'Mask'" }, - { "kind" : "IdRef", "name" : "'FillEmpty'" } + { "kind" : "IdRef", "name" : "PtrVector" }, + { "kind" : "LiteralInteger", "name" : "Alignment" }, + { "kind" : "IdRef", "name" : "Mask" }, + { "kind" : "IdRef", "name" : "FillEmpty" } ], "capabilities" : [ "MaskedGatherScatterINTEL" ], "version" : "None" @@ -10263,13 +10838,52 @@ "class" : "Memory", "opcode" : 6429, "operands" : [ - { "kind" : "IdRef", "name" : "'InputVector'" }, - { "kind" : "IdRef", "name" : "'PtrVector'" }, - { "kind" : "LiteralInteger", "name" : "'Alignment'" }, - { "kind" : "IdRef", "name" : "'Mask'" } + { "kind" : "IdRef", "name" : "InputVector" }, + { "kind" : "IdRef", "name" : "PtrVector" }, + { "kind" : "LiteralInteger", "name" : "Alignment" }, + { "kind" : "IdRef", "name" : "Mask" } ], "capabilities" : [ "MaskedGatherScatterINTEL" ], "version" : "None" + }, + { + "opname" : "OpConvertHandleToImageINTEL", + "class" : "Image", + "opcode" : 6529, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Operand" } + ], + "capabilities" : [ "BindlessImagesINTEL" ], + "provisional" : true, + "version" : "None" + }, + { + "opname" : "OpConvertHandleToSamplerINTEL", + "class" : "Image", + "opcode" : 6530, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Operand" } + ], + "capabilities" : [ "BindlessImagesINTEL" ], + "provisional" : true, + "version" : "None" + }, + { + "opname" : "OpConvertHandleToSampledImageINTEL", + "class" : "Image", + "opcode" : 6531, + "operands" : [ + { "kind" : "IdResultType" }, + { "kind" : "IdResult" }, + { "kind" : "IdRef", "name" : "Operand" } + ], + "capabilities" : [ "BindlessImagesINTEL" ], + "provisional" : true, + "version" : "None" } ], "operand_kinds" : [ @@ -10940,6 +11554,7 @@ }, { "enumerant" : "SkipTrianglesKHR", + "aliases" : ["SkipBuiltinPrimitivesNV"], "value" : "0x0100", "capabilities" : [ "RayTraversalPrimitiveCullingKHR" ], "version" : "None" @@ -11078,6 +11693,11 @@ "enumerant" : "Zig", "value" : 12, "version" : "1.0" + }, + { + "enumerant" : "Rust", + "value" : 13, + "version" : "1.0" } ] }, @@ -11267,7 +11887,7 @@ "value" : 0, "capabilities" : [ "Geometry" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Number of <>'" } + { "kind" : "LiteralInteger", "name" : "Number of <>" } ], "version": "1.0" }, @@ -11365,9 +11985,9 @@ "enumerant" : "LocalSize", "value" : 17, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'x size'" }, - { "kind" : "LiteralInteger", "name" : "'y size'" }, - { "kind" : "LiteralInteger", "name" : "'z size'" } + { "kind" : "LiteralInteger", "name" : "x size" }, + { "kind" : "LiteralInteger", "name" : "y size" }, + { "kind" : "LiteralInteger", "name" : "z size" } ], "version": "1.0" }, @@ -11376,9 +11996,9 @@ "value" : 18, "capabilities" : [ "Kernel" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'x size'" }, - { "kind" : "LiteralInteger", "name" : "'y size'" }, - { "kind" : "LiteralInteger", "name" : "'z size'" } + { "kind" : "LiteralInteger", "name" : "x size" }, + { "kind" : "LiteralInteger", "name" : "y size" }, + { "kind" : "LiteralInteger", "name" : "z size" } ], "version": "1.0" }, @@ -11429,7 +12049,7 @@ "value" : 26, "capabilities" : [ "Geometry", "Tessellation", "MeshShadingNV", "MeshShadingEXT" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Vertex count'" } + { "kind" : "LiteralInteger", "name" : "Vertex count" } ], "version": "1.0" }, @@ -11456,7 +12076,7 @@ "value" : 30, "capabilities" : [ "Kernel" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Vector type'" } + { "kind" : "LiteralInteger", "name" : "Vector type" } ], "version": "1.0" }, @@ -11483,7 +12103,7 @@ "value" : 35, "capabilities" : [ "SubgroupDispatch" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Subgroup Size'" } + { "kind" : "LiteralInteger", "name" : "Subgroup Size" } ], "version" : "1.1" }, @@ -11492,7 +12112,7 @@ "value" : 36, "capabilities" : [ "SubgroupDispatch" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Subgroups Per Workgroup'" } + { "kind" : "LiteralInteger", "name" : "Subgroups Per Workgroup" } ], "version" : "1.1" }, @@ -11501,7 +12121,7 @@ "value" : 37, "capabilities" : [ "SubgroupDispatch" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Subgroups Per Workgroup'" } + { "kind" : "IdRef", "name" : "Subgroups Per Workgroup" } ], "version" : "1.2" }, @@ -11509,9 +12129,9 @@ "enumerant" : "LocalSizeId", "value" : 38, "parameters" : [ - { "kind" : "IdRef", "name" : "'x size'" }, - { "kind" : "IdRef", "name" : "'y size'" }, - { "kind" : "IdRef", "name" : "'z size'" } + { "kind" : "IdRef", "name" : "x size" }, + { "kind" : "IdRef", "name" : "y size" }, + { "kind" : "IdRef", "name" : "z size" } ], "version" : "1.2" }, @@ -11520,9 +12140,9 @@ "value" : 39, "capabilities" : [ "Kernel" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'x size hint'" }, - { "kind" : "IdRef", "name" : "'y size hint'" }, - { "kind" : "IdRef", "name" : "'z size hint'" } + { "kind" : "IdRef", "name" : "x size hint" }, + { "kind" : "IdRef", "name" : "y size hint" }, + { "kind" : "IdRef", "name" : "z size hint" } ], "version" : "1.2" }, @@ -11564,7 +12184,7 @@ "capabilities" : [ "DenormPreserve" ], "extensions" : [ "SPV_KHR_float_controls" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" } + { "kind" : "LiteralInteger", "name" : "Target Width" } ], "version" : "1.4" }, @@ -11574,7 +12194,7 @@ "capabilities" : [ "DenormFlushToZero" ], "extensions" : [ "SPV_KHR_float_controls" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" } + { "kind" : "LiteralInteger", "name" : "Target Width" } ], "version" : "1.4" }, @@ -11584,7 +12204,7 @@ "capabilities" : [ "SignedZeroInfNanPreserve" ], "extensions" : [ "SPV_KHR_float_controls" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" } + { "kind" : "LiteralInteger", "name" : "Target Width" } ], "version" : "1.4" }, @@ -11594,7 +12214,7 @@ "capabilities" : [ "RoundingModeRTE" ], "extensions" : [ "SPV_KHR_float_controls" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" } + { "kind" : "LiteralInteger", "name" : "Target Width" } ], "version" : "1.4" }, @@ -11604,10 +12224,27 @@ "capabilities" : [ "RoundingModeRTZ" ], "extensions" : [ "SPV_KHR_float_controls" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" } + { "kind" : "LiteralInteger", "name" : "Target Width" } ], "version" : "1.4" }, + { + "enumerant" : "NonCoherentTileAttachmentReadQCOM", + "value" : 4489, + "capabilities" : [ "TileShadingQCOM" ], + "version" : "None" + }, + { + "enumerant" : "TileShadingRateQCOM", + "value" : 4490, + "parameters" : [ + { "kind" : "LiteralInteger", "name" : "x rate" }, + { "kind" : "LiteralInteger", "name" : "y rate" }, + { "kind" : "LiteralInteger", "name" : "z rate" } + ], + "capabilities" : [ "TileShadingQCOM" ], + "version": "None" + }, { "enumerant": "EarlyAndLateFragmentTestsAMD", "value": 5017, @@ -11634,7 +12271,7 @@ "value" : 5070, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Is Entry'" } + { "kind" : "IdRef", "name" : "Is Entry" } ], "provisional" : true, "version" : "None" @@ -11644,7 +12281,7 @@ "value" : 5071, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Number of recursions'" } + { "kind" : "IdRef", "name" : "Number of recursions" } ], "provisional" : true, "version" : "None" @@ -11654,9 +12291,9 @@ "value" : 5072, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'x size'" }, - { "kind" : "IdRef", "name" : "'y size'" }, - { "kind" : "IdRef", "name" : "'z size'" } + { "kind" : "IdRef", "name" : "x size" }, + { "kind" : "IdRef", "name" : "y size" }, + { "kind" : "IdRef", "name" : "z size" } ], "provisional" : true, "version" : "None" @@ -11666,7 +12303,7 @@ "value" : 5073, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Shader Index'" } + { "kind" : "IdRef", "name" : "Shader Index" } ], "provisional" : true, "version" : "None" @@ -11676,9 +12313,9 @@ "value" : 5077, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'x size'" }, - { "kind" : "IdRef", "name" : "'y size'" }, - { "kind" : "IdRef", "name" : "'z size'" } + { "kind" : "IdRef", "name" : "x size" }, + { "kind" : "IdRef", "name" : "y size" }, + { "kind" : "IdRef", "name" : "z size" } ], "provisional" : true, "version" : "None" @@ -11742,8 +12379,8 @@ "value" : 5102, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Node Name'" }, - { "kind" : "IdRef", "name" : "'Shader Index'" } + { "kind" : "IdRef", "name" : "Node Name" }, + { "kind" : "IdRef", "name" : "Shader Index" } ], "provisional" : true, "version" : "None" @@ -11762,7 +12399,7 @@ "value" : 5270, "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Primitive count'" } + { "kind" : "LiteralInteger", "name" : "Primitive count" } ], "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ], "version" : "None" @@ -11837,7 +12474,7 @@ "enumerant" : "SharedLocalMemorySizeINTEL", "value" : 5618, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Size'" } + { "kind" : "LiteralInteger", "name" : "Size" } ], "capabilities" : [ "VectorComputeINTEL" ], "version" : "None" @@ -11846,7 +12483,7 @@ "enumerant" : "RoundingModeRTPINTEL", "value" : 5620, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" } + { "kind" : "LiteralInteger", "name" : "Target Width" } ], "capabilities" : [ "RoundToInfinityINTEL" ], "version" : "None" @@ -11855,7 +12492,7 @@ "enumerant" : "RoundingModeRTNINTEL", "value" : 5621, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" } + { "kind" : "LiteralInteger", "name" : "Target Width" } ], "capabilities" : [ "RoundToInfinityINTEL" ], "version" : "None" @@ -11864,7 +12501,7 @@ "enumerant" : "FloatingPointModeALTINTEL", "value" : 5622, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" } + { "kind" : "LiteralInteger", "name" : "Target Width" } ], "capabilities" : [ "RoundToInfinityINTEL" ], "version" : "None" @@ -11873,7 +12510,7 @@ "enumerant" : "FloatingPointModeIEEEINTEL", "value" : 5623, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" } + { "kind" : "LiteralInteger", "name" : "Target Width" } ], "capabilities" : [ "RoundToInfinityINTEL" ], "version" : "None" @@ -11882,9 +12519,9 @@ "enumerant" : "MaxWorkgroupSizeINTEL", "value" : 5893, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'max_x_size'" }, - { "kind" : "LiteralInteger", "name" : "'max_y_size'" }, - { "kind" : "LiteralInteger", "name" : "'max_z_size'" } + { "kind" : "LiteralInteger", "name" : "max_x_size" }, + { "kind" : "LiteralInteger", "name" : "max_y_size" }, + { "kind" : "LiteralInteger", "name" : "max_z_size" } ], "capabilities" : [ "KernelAttributesINTEL" ], "extensions" : [ "SPV_INTEL_kernel_attributes" ], @@ -11894,7 +12531,7 @@ "enumerant" : "MaxWorkDimINTEL", "value" : 5894, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'max_dimensions'" } + { "kind" : "LiteralInteger", "name" : "max_dimensions" } ], "capabilities" : [ "KernelAttributesINTEL" ], "extensions" : [ "SPV_INTEL_kernel_attributes" ], @@ -11911,7 +12548,7 @@ "enumerant" : "NumSIMDWorkitemsINTEL", "value" : 5896, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'vector_width'" } + { "kind" : "LiteralInteger", "name" : "vector_width" } ], "capabilities" : [ "FPGAKernelAttributesINTEL" ], "extensions" : [ "SPV_INTEL_kernel_attributes" ], @@ -11921,7 +12558,7 @@ "enumerant" : "SchedulerTargetFmaxMhzINTEL", "value" : 5903, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'target_fmax'" } + { "kind" : "LiteralInteger", "name" : "target_fmax" } ], "capabilities" : [ "FPGAKernelAttributesINTEL" ], "version" : "None" @@ -11932,22 +12569,22 @@ "capabilities" : [ "Shader" ], "extensions" : [ "SPV_KHR_maximal_reconvergence" ], "version" : "None" - }, - { + }, + { "enumerant" : "FPFastMathDefault", "value" : 6028, "parameters" : [ - { "kind" : "IdRef", "name" : "'Target Type'" }, - { "kind" : "IdRef", "name" : "'Fast-Math Mode'" } - ], + { "kind" : "IdRef", "name" : "Target Type" }, + { "kind" : "IdRef", "name" : "Fast-Math Mode" } + ], "capabilities" : [ "FloatControls2" ], "version" : "None" - }, - { + }, + { "enumerant" : "StreamingInterfaceINTEL", "value" : 6154, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'StallFreeReturn'" } + { "kind" : "LiteralInteger", "name" : "StallFreeReturn" } ], "capabilities" : [ "FPGAKernelAttributesINTEL" ], "version" : "None" @@ -11956,7 +12593,7 @@ "enumerant" : "RegisterMapInterfaceINTEL", "value" : 6160, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'WaitForDoneWrite'" } + { "kind" : "LiteralInteger", "name" : "WaitForDoneWrite" } ], "capabilities" : [ "FPGAKernelAttributesv2INTEL" ], "version" : "None" @@ -11965,7 +12602,7 @@ "enumerant" : "NamedBarrierCountINTEL", "value" : 6417, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Barrier Count'" } + { "kind" : "LiteralInteger", "name" : "Barrier Count" } ], "capabilities" : [ "VectorComputeINTEL" ], "version" : "None" @@ -11974,7 +12611,7 @@ "enumerant" : "MaximumRegistersINTEL", "value" : 6461, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Number of Registers'" } + { "kind" : "LiteralInteger", "name" : "Number of Registers" } ], "capabilities" : [ "RegisterLimitsINTEL" ], "version" : "None" @@ -11983,7 +12620,7 @@ "enumerant" : "MaximumRegistersIdINTEL", "value" : 6462, "parameters" : [ - { "kind" : "IdRef", "name" : "'Number of Registers'" } + { "kind" : "IdRef", "name" : "Number of Registers" } ], "capabilities" : [ "RegisterLimitsINTEL" ], "version" : "None" @@ -11992,7 +12629,7 @@ "enumerant" : "NamedMaximumRegistersINTEL", "value" : 6463, "parameters" : [ - { "kind" : "NamedMaximumNumberOfRegisters", "name" : "'Named Maximum Number of Registers'" } + { "kind" : "NamedMaximumNumberOfRegisters", "name" : "Named Maximum Number of Registers" } ], "capabilities" : [ "RegisterLimitsINTEL" ], "version" : "None" @@ -12085,6 +12722,12 @@ "capabilities" : [ "TileImageColorReadAccessEXT" ], "version" : "None" }, + { + "enumerant" : "TileAttachmentQCOM", + "value" : 4491, + "capabilities" : [ "TileShadingQCOM" ], + "version" : "None" + }, { "enumerant" : "NodePayloadAMDX", "value" : 5068, @@ -12739,6 +13382,11 @@ "value" : 16, "version": "1.0" }, + { + "enumerant" : "UnormInt10X6EXT", + "value" : 17, + "version": "1.0" + }, { "enumerant" : "UnsignedIntRaw10EXT", "value" : 19, @@ -12753,6 +13401,31 @@ "enumerant" : "UnormInt2_101010EXT", "value" : 21, "version": "1.0" + }, + { + "enumerant" : "UnsignedInt10X6EXT", + "value" : 22, + "version": "1.0" + }, + { + "enumerant" : "UnsignedInt12X4EXT", + "value" : 23, + "version": "1.0" + }, + { + "enumerant" : "UnsignedInt14X2EXT", + "value" : 24, + "version": "1.0" + }, + { + "enumerant" : "UnormInt12X4EXT", + "value" : 25, + "version": "1.0" + }, + { + "enumerant" : "UnormInt14X2EXT", + "value" : 26, + "version": "1.0" } ] }, @@ -13056,7 +13729,7 @@ "value" : 1, "capabilities" : [ "Shader", "Kernel" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Specialization Constant ID'" } + { "kind" : "LiteralInteger", "name" : "Specialization Constant ID" } ], "version": "1.0" }, @@ -13090,7 +13763,7 @@ "value" : 6, "capabilities" : [ "Shader" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Array Stride'" } + { "kind" : "LiteralInteger", "name" : "Array Stride" } ], "version": "1.0" }, @@ -13099,7 +13772,7 @@ "value" : 7, "capabilities" : [ "Matrix" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Matrix Stride'" } + { "kind" : "LiteralInteger", "name" : "Matrix Stride" } ], "version": "1.0" }, @@ -13212,7 +13885,7 @@ "value" : 27, "capabilities" : [ "Shader", "UniformDecoration" ], "parameters" : [ - { "kind" : "IdScope", "name" : "'Execution'" } + { "kind" : "IdScope", "name" : "Execution" } ], "version" : "1.4" }, @@ -13227,7 +13900,7 @@ "value" : 29, "capabilities" : [ "GeometryStreams" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Stream Number'" } + { "kind" : "LiteralInteger", "name" : "Stream Number" } ], "version": "1.0" }, @@ -13236,7 +13909,7 @@ "value" : 30, "capabilities" : [ "Shader" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Location'" } + { "kind" : "LiteralInteger", "name" : "Location" } ], "version": "1.0" }, @@ -13245,7 +13918,7 @@ "value" : 31, "capabilities" : [ "Shader" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Component'" } + { "kind" : "LiteralInteger", "name" : "Component" } ], "version": "1.0" }, @@ -13254,7 +13927,7 @@ "value" : 32, "capabilities" : [ "Shader" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Index'" } + { "kind" : "LiteralInteger", "name" : "Index" } ], "version": "1.0" }, @@ -13263,7 +13936,7 @@ "value" : 33, "capabilities" : [ "Shader" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Binding Point'" } + { "kind" : "LiteralInteger", "name" : "Binding Point" } ], "version": "1.0" }, @@ -13272,7 +13945,7 @@ "value" : 34, "capabilities" : [ "Shader" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Descriptor Set'" } + { "kind" : "LiteralInteger", "name" : "Descriptor Set" } ], "version": "1.0" }, @@ -13281,7 +13954,7 @@ "value" : 35, "capabilities" : [ "Shader" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Byte Offset'" } + { "kind" : "LiteralInteger", "name" : "Byte Offset" } ], "version": "1.0" }, @@ -13290,7 +13963,7 @@ "value" : 36, "capabilities" : [ "TransformFeedback" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'XFB Buffer Number'" } + { "kind" : "LiteralInteger", "name" : "XFB Buffer Number" } ], "version": "1.0" }, @@ -13299,7 +13972,7 @@ "value" : 37, "capabilities" : [ "TransformFeedback" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'XFB Stride'" } + { "kind" : "LiteralInteger", "name" : "XFB Stride" } ], "version": "1.0" }, @@ -13308,7 +13981,7 @@ "value" : 38, "capabilities" : [ "Kernel" ], "parameters" : [ - { "kind" : "FunctionParameterAttribute", "name" : "'Function Parameter Attribute'" } + { "kind" : "FunctionParameterAttribute", "name" : "Function Parameter Attribute" } ], "version": "1.0" }, @@ -13316,7 +13989,7 @@ "enumerant" : "FPRoundingMode", "value" : 39, "parameters" : [ - { "kind" : "FPRoundingMode", "name" : "'Floating-Point Rounding Mode'" } + { "kind" : "FPRoundingMode", "name" : "Floating-Point Rounding Mode" } ], "version": "1.0" }, @@ -13325,7 +13998,7 @@ "value" : 40, "capabilities" : [ "Kernel", "FloatControls2" ], "parameters" : [ - { "kind" : "FPFastMathMode", "name" : "'Fast-Math Mode'" } + { "kind" : "FPFastMathMode", "name" : "Fast-Math Mode" } ], "version": "1.0" }, @@ -13334,8 +14007,8 @@ "value" : 41, "capabilities" : [ "Linkage" ], "parameters" : [ - { "kind" : "LiteralString", "name" : "'Name'" }, - { "kind" : "LinkageType", "name" : "'Linkage Type'" } + { "kind" : "LiteralString", "name" : "Name" }, + { "kind" : "LinkageType", "name" : "Linkage Type" } ], "version": "1.0" }, @@ -13350,7 +14023,7 @@ "value" : 43, "capabilities" : [ "InputAttachment" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Attachment Index'" } + { "kind" : "LiteralInteger", "name" : "Attachment Index" } ], "version": "1.0" }, @@ -13359,7 +14032,7 @@ "value" : 44, "capabilities" : [ "Kernel" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Alignment'" } + { "kind" : "LiteralInteger", "name" : "Alignment" } ], "version": "1.0" }, @@ -13368,7 +14041,7 @@ "value" : 45, "capabilities" : [ "Addresses" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Max Byte Offset'" } + { "kind" : "LiteralInteger", "name" : "Max Byte Offset" } ], "version" : "1.1" }, @@ -13377,7 +14050,7 @@ "value" : 46, "capabilities" : [ "Kernel" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Alignment'" } + { "kind" : "IdRef", "name" : "Alignment" } ], "version" : "1.2" }, @@ -13386,10 +14059,16 @@ "value" : 47, "capabilities" : [ "Addresses" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Max Byte Offset'" } + { "kind" : "IdRef", "name" : "Max Byte Offset" } ], "version" : "1.2" }, + { + "enumerant" : "SaturatedToLargestFloat8NormalConversionEXT", + "value" : 4216, + "capabilities" : [ "Float8EXT" ], + "version": "None" + }, { "enumerant" : "NoSignedWrap", "value" : 4469, @@ -13431,7 +14110,7 @@ "value" : 5019, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Payload Type'" } + { "kind" : "IdRef", "name" : "Payload Type" } ], "provisional" : true, "version" : "None" @@ -13441,7 +14120,7 @@ "value" : 5020, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Max number of payloads'" } + { "kind" : "IdRef", "name" : "Max number of payloads" } ], "provisional" : true, "version" : "None" @@ -13458,7 +14137,7 @@ "value" : 5091, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Node Name'" } + { "kind" : "IdRef", "name" : "Node Name" } ], "provisional" : true, "version" : "None" @@ -13468,7 +14147,7 @@ "value" : 5098, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Base Index'" } + { "kind" : "IdRef", "name" : "Base Index" } ], "provisional" : true, "version" : "None" @@ -13485,7 +14164,7 @@ "value" : 5100, "capabilities" : [ "ShaderEnqueueAMDX" ], "parameters" : [ - { "kind" : "IdRef", "name" : "'Array Size'" } + { "kind" : "IdRef", "name" : "Array Size" } ], "provisional" : true, "version" : "None" @@ -13524,7 +14203,7 @@ "extensions" : [ "SPV_NV_stereo_view_rendering" ], "version" : "None", "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Offset'" } + { "kind" : "LiteralInteger", "name" : "Offset" } ] }, { @@ -13545,8 +14224,8 @@ { "enumerant" : "PerTaskNV", "value" : 5273, - "capabilities" : [ "MeshShadingNV", "MeshShadingEXT" ], - "extensions" : [ "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader" ], + "capabilities" : [ "MeshShadingNV" ], + "extensions" : [ "SPV_NV_mesh_shader" ], "version" : "None" }, { @@ -13615,7 +14294,7 @@ "enumerant" : "SIMTCallINTEL", "value" : 5599, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'N'" } + { "kind" : "LiteralInteger", "name" : "N" } ], "capabilities" : [ "VectorComputeINTEL" ], "version" : "None" @@ -13631,7 +14310,7 @@ "enumerant" : "ClobberINTEL", "value" : 5607, "parameters" : [ - { "kind" : "LiteralString", "name" : "'Register'" } + { "kind" : "LiteralString", "name" : "Register" } ], "capabilities" : [ "AsmINTEL" ], "version" : "None" @@ -13652,7 +14331,7 @@ "enumerant" : "FuncParamIOKindINTEL", "value" : 5625, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Kind'" } + { "kind" : "LiteralInteger", "name" : "Kind" } ], "capabilities" : [ "VectorComputeINTEL" ], "version" : "None" @@ -13673,7 +14352,7 @@ "enumerant" : "GlobalVariableOffsetINTEL", "value" : 5628, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Offset'" } + { "kind" : "LiteralInteger", "name" : "Offset" } ], "capabilities" : [ "VectorComputeINTEL" ], "version" : "None" @@ -13683,7 +14362,7 @@ "aliases" : ["HlslCounterBufferGOOGLE"], "value" : 5634, "parameters" : [ - { "kind" : "IdRef", "name" : "'Counter Buffer'" } + { "kind" : "IdRef", "name" : "Counter Buffer" } ], "extensions" : [ "SPV_GOOGLE_hlsl_functionality1" ], "version" : "1.4" @@ -13693,7 +14372,7 @@ "aliases" : ["HlslSemanticGOOGLE"], "value" : 5635, "parameters" : [ - { "kind" : "LiteralString", "name" : "'Semantic'" } + { "kind" : "LiteralString", "name" : "Semantic" } ], "extensions" : [ "SPV_GOOGLE_hlsl_functionality1" ], "version" : "1.4" @@ -13702,7 +14381,7 @@ "enumerant" : "UserTypeGOOGLE", "value" : 5636, "parameters" : [ - { "kind" : "LiteralString", "name" : "'User Type'" } + { "kind" : "LiteralString", "name" : "User Type" } ], "extensions" : [ "SPV_GOOGLE_user_type" ], "version" : "None" @@ -13711,8 +14390,8 @@ "enumerant" : "FunctionRoundingModeINTEL", "value" : 5822, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" }, - { "kind" : "FPRoundingMode", "name" : "'FP Rounding Mode'" } + { "kind" : "LiteralInteger", "name" : "Target Width" }, + { "kind" : "FPRoundingMode", "name" : "FP Rounding Mode" } ], "capabilities" : [ "FunctionFloatControlINTEL" ], "version" : "None" @@ -13721,8 +14400,8 @@ "enumerant" : "FunctionDenormModeINTEL", "value" : 5823, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" }, - { "kind" : "FPDenormMode", "name" : "'FP Denorm Mode'" } + { "kind" : "LiteralInteger", "name" : "Target Width" }, + { "kind" : "FPDenormMode", "name" : "FP Denorm Mode" } ], "capabilities" : [ "FunctionFloatControlINTEL" ], "version" : "None" @@ -13738,7 +14417,7 @@ "enumerant" : "MemoryINTEL", "value" : 5826, "parameters" : [ - { "kind" : "LiteralString", "name" : "'Memory Type'" } + { "kind" : "LiteralString", "name" : "Memory Type" } ], "capabilities" : [ "FPGAMemoryAttributesINTEL" ], "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], @@ -13748,7 +14427,7 @@ "enumerant" : "NumbanksINTEL", "value" : 5827, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Banks'" } + { "kind" : "LiteralInteger", "name" : "Banks" } ], "capabilities" : [ "FPGAMemoryAttributesINTEL" ], "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], @@ -13758,7 +14437,7 @@ "enumerant" : "BankwidthINTEL", "value" : 5828, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Bank Width'" } + { "kind" : "LiteralInteger", "name" : "Bank Width" } ], "capabilities" : [ "FPGAMemoryAttributesINTEL" ], "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], @@ -13768,7 +14447,7 @@ "enumerant" : "MaxPrivateCopiesINTEL", "value" : 5829, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Maximum Copies'" } + { "kind" : "LiteralInteger", "name" : "Maximum Copies" } ], "capabilities" : [ "FPGAMemoryAttributesINTEL" ], "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], @@ -13792,7 +14471,7 @@ "enumerant" : "MaxReplicatesINTEL", "value" : 5832, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Maximum Replicates'" } + { "kind" : "LiteralInteger", "name" : "Maximum Replicates" } ], "capabilities" : [ "FPGAMemoryAttributesINTEL" ], "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], @@ -13809,8 +14488,8 @@ "enumerant" : "MergeINTEL", "value" : 5834, "parameters" : [ - { "kind" : "LiteralString", "name" : "'Merge Key'" }, - { "kind" : "LiteralString", "name" : "'Merge Type'" } + { "kind" : "LiteralString", "name" : "Merge Key" }, + { "kind" : "LiteralString", "name" : "Merge Type" } ], "capabilities" : [ "FPGAMemoryAttributesINTEL" ], "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], @@ -13820,7 +14499,7 @@ "enumerant" : "BankBitsINTEL", "value" : 5835, "parameters" : [ - { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "'Bank Bits'" } + { "kind" : "LiteralInteger", "quantifier" : "*", "name" : "Bank Bits" } ], "capabilities" : [ "FPGAMemoryAttributesINTEL" ], "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], @@ -13830,7 +14509,7 @@ "enumerant" : "ForcePow2DepthINTEL", "value" : 5836, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Force Key'" } + { "kind" : "LiteralInteger", "name" : "Force Key" } ], "capabilities" : [ "FPGAMemoryAttributesINTEL" ], "extensions" : [ "SPV_INTEL_fpga_memory_attributes" ], @@ -13840,7 +14519,7 @@ "enumerant" : "StridesizeINTEL", "value" : 5883, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Stride Size'" } + { "kind" : "LiteralInteger", "name" : "Stride Size" } ], "capabilities" : [ "FPGAMemoryAttributesINTEL" ], "version" : "None" @@ -13849,7 +14528,7 @@ "enumerant" : "WordsizeINTEL", "value" : 5884, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Word Size'" } + { "kind" : "LiteralInteger", "name" : "Word Size" } ], "capabilities" : [ "FPGAMemoryAttributesINTEL" ], "version" : "None" @@ -13870,7 +14549,7 @@ "enumerant" : "CacheSizeINTEL", "value" : 5900, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Cache Size in bytes'" } + { "kind" : "LiteralInteger", "name" : "Cache Size in bytes" } ], "capabilities" : [ "FPGAMemoryAccessesINTEL" ], "version" : "None" @@ -13885,7 +14564,7 @@ "enumerant" : "PrefetchINTEL", "value" : 5902, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Prefetcher Size in bytes'" } + { "kind" : "LiteralInteger", "name" : "Prefetcher Size in bytes" } ], "capabilities" : [ "FPGAMemoryAccessesINTEL" ], "version" : "None" @@ -13906,8 +14585,8 @@ "enumerant" : "MathOpDSPModeINTEL", "value" : 5909, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Mode'" }, - { "kind" : "LiteralInteger", "name" : "'Propagate'" } + { "kind" : "LiteralInteger", "name" : "Mode" }, + { "kind" : "LiteralInteger", "name" : "Propagate" } ], "capabilities" : [ "FPGADSPControlINTEL" ], "version" : "None" @@ -13916,7 +14595,7 @@ "enumerant" : "AliasScopeINTEL", "value" : 5914, "parameters" : [ - { "kind" : "IdRef", "name" : "'Aliasing Scopes List'" } + { "kind" : "IdRef", "name" : "Aliasing Scopes List" } ], "capabilities" : [ "MemoryAccessAliasingINTEL" ], "version" : "None" @@ -13925,7 +14604,7 @@ "enumerant" : "NoAliasINTEL", "value" : 5915, "parameters" : [ - { "kind" : "IdRef", "name" : "'Aliasing Scopes List'" } + { "kind" : "IdRef", "name" : "Aliasing Scopes List" } ], "capabilities" : [ "MemoryAccessAliasingINTEL" ], "version" : "None" @@ -13934,7 +14613,7 @@ "enumerant" : "InitiationIntervalINTEL", "value" : 5917, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Cycles'" } + { "kind" : "LiteralInteger", "name" : "Cycles" } ], "capabilities" : [ "FPGAInvocationPipeliningAttributesINTEL" ], "version" : "None" @@ -13943,7 +14622,7 @@ "enumerant" : "MaxConcurrencyINTEL", "value" : 5918, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Invocations'" } + { "kind" : "LiteralInteger", "name" : "Invocations" } ], "capabilities" : [ "FPGAInvocationPipeliningAttributesINTEL" ], "version" : "None" @@ -13952,7 +14631,7 @@ "enumerant" : "PipelineEnableINTEL", "value" : 5919, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Enable'" } + { "kind" : "LiteralInteger", "name" : "Enable" } ], "capabilities" : [ "FPGAInvocationPipeliningAttributesINTEL" ], "version" : "None" @@ -13961,7 +14640,7 @@ "enumerant" : "BufferLocationINTEL", "value" : 5921, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Buffer Location ID'" } + { "kind" : "LiteralInteger", "name" : "Buffer Location ID" } ], "capabilities" : [ "FPGABufferLocationINTEL" ], "version" : "None" @@ -13970,7 +14649,7 @@ "enumerant" : "IOPipeStorageINTEL", "value" : 5944, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'IO Pipe ID'" } + { "kind" : "LiteralInteger", "name" : "IO Pipe ID" } ], "capabilities" : [ "IOPipesINTEL" ], "version" : "None" @@ -13979,8 +14658,8 @@ "enumerant" : "FunctionFloatingPointModeINTEL", "value" : 6080, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Target Width'" }, - { "kind" : "FPOperationMode", "name" : "'FP Operation Mode'" } + { "kind" : "LiteralInteger", "name" : "Target Width" }, + { "kind" : "FPOperationMode", "name" : "FP Operation Mode" } ], "capabilities" : [ "FunctionFloatControlINTEL" ], "version" : "None" @@ -14013,7 +14692,7 @@ "enumerant" : "FPMaxErrorDecorationINTEL", "value" : 6170, "parameters" : [ - { "kind" : "LiteralFloat", "name" : "'Max Error'" } + { "kind" : "LiteralFloat", "name" : "Max Error" } ], "capabilities" : [ "FPMaxErrorINTEL" ], "version" : "None" @@ -14022,7 +14701,7 @@ "enumerant" : "LatencyControlLabelINTEL", "value" : 6172, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Latency Label'" } + { "kind" : "LiteralInteger", "name" : "Latency Label" } ], "capabilities" : [ "FPGALatencyControlINTEL" ], "version" : "None" @@ -14031,9 +14710,9 @@ "enumerant" : "LatencyControlConstraintINTEL", "value" : 6173, "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Relative To'" }, - { "kind" : "LiteralInteger", "name" : "'Control Type'" }, - { "kind" : "LiteralInteger", "name" : "'Relative Cycle'" } + { "kind" : "LiteralInteger", "name" : "Relative To" }, + { "kind" : "LiteralInteger", "name" : "Control Type" }, + { "kind" : "LiteralInteger", "name" : "Relative Cycle" } ], "capabilities" : [ "FPGALatencyControlINTEL" ], "version" : "None" @@ -14055,7 +14734,7 @@ "value" : 6177, "capabilities" : [ "FPGAArgumentInterfacesINTEL" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'AddressWidth'" } + { "kind" : "LiteralInteger", "name" : "AddressWidth" } ], "version" : "None" }, @@ -14064,7 +14743,7 @@ "value" : 6178, "capabilities" : [ "FPGAArgumentInterfacesINTEL" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'DataWidth'" } + { "kind" : "LiteralInteger", "name" : "DataWidth" } ], "version" : "None" }, @@ -14073,7 +14752,7 @@ "value" : 6179, "capabilities" : [ "FPGAArgumentInterfacesINTEL" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Latency'" } + { "kind" : "LiteralInteger", "name" : "Latency" } ], "version" : "None" }, @@ -14082,7 +14761,7 @@ "value" : 6180, "capabilities" : [ "FPGAArgumentInterfacesINTEL" ], "parameters" : [ - { "kind" : "AccessQualifier", "name" : "'ReadWriteMode'" } + { "kind" : "AccessQualifier", "name" : "ReadWriteMode" } ], "version" : "None" }, @@ -14091,7 +14770,7 @@ "value" : 6181, "capabilities" : [ "FPGAArgumentInterfacesINTEL" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'MaxBurstCount'" } + { "kind" : "LiteralInteger", "name" : "MaxBurstCount" } ], "version" : "None" }, @@ -14100,7 +14779,7 @@ "value" : 6182, "capabilities" : [ "FPGAArgumentInterfacesINTEL" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Waitrequest'" } + { "kind" : "LiteralInteger", "name" : "Waitrequest" } ], "version" : "None" }, @@ -14114,8 +14793,8 @@ "enumerant" : "HostAccessINTEL", "value" : 6188, "parameters": [ - { "kind" : "HostAccessQualifier", "name" : "'Access'" }, - { "kind" : "LiteralString", "name" : "'Name'" } + { "kind" : "HostAccessQualifier", "name" : "Access" }, + { "kind" : "LiteralString", "name" : "Name" } ], "capabilities" : [ "GlobalVariableHostAccessINTEL" ], "version" : "None" @@ -14124,7 +14803,7 @@ "enumerant" : "InitModeINTEL", "value" : 6190, "parameters": [ - { "kind" : "InitializationModeQualifier", "name" : "'Trigger'" } + { "kind" : "InitializationModeQualifier", "name" : "Trigger" } ], "capabilities" : [ "GlobalVariableFPGADecorationsINTEL" ], "version" : "None" @@ -14143,8 +14822,8 @@ "value" : 6442, "capabilities" : [ "CacheControlsINTEL" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Cache Level'" }, - { "kind" : "LoadCacheControl", "name" : "'Cache Control'" } + { "kind" : "LiteralInteger", "name" : "Cache Level" }, + { "kind" : "LoadCacheControl", "name" : "Cache Control" } ], "version" : "None" }, @@ -14153,8 +14832,8 @@ "value" : 6443, "capabilities" : [ "CacheControlsINTEL" ], "parameters" : [ - { "kind" : "LiteralInteger", "name" : "'Cache Level'" }, - { "kind" : "StoreCacheControl", "name" : "'Cache Control'" } + { "kind" : "LiteralInteger", "name" : "Cache Level" }, + { "kind" : "StoreCacheControl", "name" : "Cache Control" } ], "version" : "None" } @@ -14523,6 +15202,24 @@ "extensions" : [ "SPV_KHR_fragment_shading_rate" ], "version" : "None" }, + { + "enumerant" : "TileOffsetQCOM", + "value" : 4492, + "capabilities" : [ "TileShadingQCOM" ], + "version" : "None" + }, + { + "enumerant" : "TileDimensionQCOM", + "value" : 4493, + "capabilities" : [ "TileShadingQCOM" ], + "version" : "None" + }, + { + "enumerant" : "TileApronSizeQCOM", + "value" : 4494, + "capabilities" : [ "TileShadingQCOM" ], + "version" : "None" + }, { "enumerant" : "BaryCoordNoPerspAMD", "value" : 4992, @@ -14887,6 +15584,27 @@ "extensions" : [ "SPV_KHR_ray_tracing" ], "version" : "None" }, + { + "enumerant" : "HitIsSphereNV", + "value" : 5359, + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "HitIsLSSNV", + "value" : 5360, + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "HitSpherePositionNV", + "value" : 5361, + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, { "enumerant" : "WarpsPerSMNV", "value" : 5374, @@ -14915,6 +15633,13 @@ "extensions" : [ "SPV_NV_shader_sm_builtins" ], "version" : "None" }, + { + "enumerant" : "HitLSSPositionsNV", + "value" : 5396, + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, { "enumerant" : "HitKindFrontFacingMicroTriangleNV", "value" : 5405, @@ -14927,6 +15652,27 @@ "capabilities" : [ "RayTracingDisplacementMicromapNV" ], "version" : "None" }, + { + "enumerant" : "HitSphereRadiusNV", + "value" : 5420, + "capabilities" : [ "RayTracingSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "HitLSSRadiiNV", + "value" : 5421, + "capabilities" : [ "RayTracingLinearSweptSpheresGeometryNV" ], + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "ClusterIDNV", + "value" : 5436, + "capabilities" : [ "RayTracingClusterAccelerationStructureNV" ], + "extensions" : [ "SPV_NV_cluster_acceleration_structure" ], + "version" : "None" + }, { "enumerant" : "CullMaskKHR", "value" : 6021, @@ -15488,12 +16234,42 @@ "extensions" : [ "SPV_EXT_shader_tile_image" ], "version" : "None" }, + { + "enumerant" : "TensorsARM", + "value" : 4174, + "extensions" : [ "SPV_ARM_tensors"], + "version" : "None" + }, + { + "enumerant" : "StorageTensorArrayDynamicIndexingARM", + "value" : 4175, + "extensions" : [ "SPV_ARM_tensors"], + "version" : "None" + }, + { + "enumerant" : "StorageTensorArrayNonUniformIndexingARM", + "value" : 4176, + "extensions" : [ "SPV_ARM_tensors"], + "version" : "None" + }, { "enumerant" : "CooperativeMatrixLayoutsARM", "value" : 4201, "extensions" : [ "SPV_ARM_cooperative_matrix_layouts" ], "version" : "None" }, + { + "enumerant" : "Float8EXT", + "value" : 4212, + "extensions" : [ "SPV_EXT_float8"], + "version" : "None" + }, + { + "enumerant" : "Float8CooperativeMatrixEXT", + "value" : 4213, + "extensions" : [ "SPV_EXT_float8"], + "version" : "None" + }, { "enumerant" : "FragmentShadingRateKHR", "value" : 4422, @@ -15598,6 +16374,7 @@ { "enumerant" : "AtomicStorageOps", "value" : 4445, + "capabilities" : [ "AtomicStorage" ], "extensions" : [ "SPV_KHR_shader_atomic_counter_ops" ], "version" : "None" }, @@ -15709,6 +16486,13 @@ "extensions" : [ "SPV_QCOM_image_processing" ], "version" : "None" }, + { + "enumerant" : "TileShadingQCOM", + "value" : 4495, + "capabilities" : [ "Shader" ], + "extensions" : [ "SPV_QCOM_tile_shading" ], + "version" : "None" + }, { "enumerant" : "TextureBlockMatch2QCOM", "value" : 4498, @@ -15777,6 +16561,39 @@ "extensions" : [ "SPV_KHR_quad_control" ], "version" : "None" }, + { + "enumerant" : "Int4TypeINTEL", + "value" : 5112, + "extensions" : [ "SPV_INTEL_int4" ], + "version" : "None" + }, + { + "enumerant" : "Int4CooperativeMatrixINTEL", + "value" : 5114, + "capabilities" : [ "Int4TypeINTEL", "CooperativeMatrixKHR" ], + "extensions" : [ "SPV_INTEL_int4" ], + "version" : "None" + }, + { + "enumerant" : "BFloat16TypeKHR", + "value" : 5116, + "extensions" : [ "SPV_KHR_bfloat16" ], + "version" : "None" + }, + { + "enumerant" : "BFloat16DotProductKHR", + "value" : 5117, + "capabilities" : [ "BFloat16TypeKHR" ], + "extensions" : [ "SPV_KHR_bfloat16" ], + "version" : "None" + }, + { + "enumerant" : "BFloat16CooperativeMatrixKHR", + "value" : 5118, + "capabilities" : [ "BFloat16TypeKHR", "CooperativeMatrixKHR" ], + "extensions" : [ "SPV_KHR_bfloat16" ], + "version" : "None" + }, { "enumerant" : "SampleMaskOverrideCoverageNV", "value" : 5249, @@ -16083,7 +16900,7 @@ { "enumerant" : "RayTracingOpacityMicromapEXT", "value" : 5381, - "capabilities" : [ "RayQueryKHR","RayTracingKHR" ], + "capabilities" : [ "Shader" ], "extensions" : [ "SPV_EXT_opacity_micromap" ], "version" : "None" }, @@ -16107,6 +16924,12 @@ "extensions" : [ "SPV_KHR_ray_tracing_position_fetch" ], "version" : "None" }, + { + "enumerant" : "CooperativeVectorNV", + "value" : 5394, + "extensions" : [ "SPV_NV_cooperative_vector" ], + "version" : "None" + }, { "enumerant" : "AtomicFloat16VectorNV", "value" : 5404, @@ -16126,6 +16949,18 @@ "extensions" : [ "SPV_NV_raw_access_chains" ], "version" : "None" }, + { + "enumerant" : "RayTracingSpheresGeometryNV", + "value" : 5418, + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, + { + "enumerant" : "RayTracingLinearSweptSpheresGeometryNV", + "value" : 5419, + "extensions" : [ "SPV_NV_linear_swept_spheres" ], + "version" : "None" + }, { "enumerant" : "CooperativeMatrixReductionsNV", "value" : 5430, @@ -16156,6 +16991,19 @@ "extensions" : [ "SPV_NV_cooperative_matrix2" ], "version" : "None" }, + { + "enumerant" : "CooperativeVectorTrainingNV", + "value" : 5435, + "extensions" : [ "SPV_NV_cooperative_vector" ], + "version" : "None" + }, + { + "enumerant" : "RayTracingClusterAccelerationStructureNV", + "value" : 5437, + "capabilities" : [ "RayTracingKHR" ], + "extensions" : [ "SPV_NV_cluster_acceleration_structure" ], + "version" : "None" + }, { "enumerant" : "TensorAddressingNV", "value" : 5439, @@ -16201,7 +17049,6 @@ { "enumerant" : "IntegerFunctions2INTEL", "value" : 5584, - "capabilities" : [ "Shader" ], "extensions" : [ "SPV_INTEL_shader_integer_functions2" ], "version" : "None" }, @@ -16552,6 +17399,12 @@ "extensions" : [ "SPV_INTEL_kernel_attributes" ], "version" : "None" }, + { + "enumerant" : "TaskSequenceINTEL", + "value" : 6162, + "extensions" : [ "SPV_INTEL_task_sequence" ], + "version" : "None" + }, { "enumerant" : "FPMaxErrorINTEL", "value" : 6169, @@ -16588,17 +17441,55 @@ "extensions": [ "SPV_INTEL_subgroup_buffer_prefetch" ], "version" : "None" }, + { + "enumerant" : "Subgroup2DBlockIOINTEL", + "value" : 6228, + "extensions": [ "SPV_INTEL_2d_block_io" ], + "version" : "None" + }, + { + "enumerant" : "Subgroup2DBlockTransformINTEL", + "value" : 6229, + "capabilities" : [ "Subgroup2DBlockIOINTEL" ], + "extensions": [ "SPV_INTEL_2d_block_io" ], + "version" : "None" + }, + { + "enumerant" : "Subgroup2DBlockTransposeINTEL", + "value" : 6230, + "capabilities" : [ "Subgroup2DBlockIOINTEL" ], + "extensions": [ "SPV_INTEL_2d_block_io" ], + "version" : "None" + }, + { + "enumerant" : "SubgroupMatrixMultiplyAccumulateINTEL", + "value" : 6236, + "extensions": [ "SPV_INTEL_subgroup_matrix_multiply_accumulate" ], + "version" : "None" + }, + { + "enumerant" : "TernaryBitwiseFunctionINTEL", + "value" : 6241, + "extensions" : [ "SPV_INTEL_ternary_bitwise_function"], + "version" : "None" + }, { "enumerant" : "GroupUniformArithmeticKHR", "value" : 6400, "extensions" : [ "SPV_KHR_uniform_group_instructions"], "version" : "None" }, + { + "enumerant" : "TensorFloat32RoundingINTEL", + "value" : 6425, + "extensions" : [ "SPV_INTEL_tensor_float32_conversion" ], + "version" : "None" + }, { "enumerant" : "MaskedGatherScatterINTEL", - "value" : 6427, - "extensions" : [ "SPV_INTEL_masked_gather_scatter"], - "version" : "None" + "value" : 6427, + "extensions" : [ "SPV_INTEL_masked_gather_scatter"], + "version" : "None" }, { "enumerant" : "CacheControlsINTEL", @@ -16611,6 +17502,13 @@ "value" : 6460, "extensions" : [ "SPV_INTEL_maximum_registers" ], "version" : "None" + }, + { + "enumerant" : "BindlessImagesINTEL", + "value" : 6528, + "extensions" : [ "SPV_INTEL_bindless_images" ], + "provisional" : true, + "version" : "None" } ] }, @@ -16947,10 +17845,216 @@ } ] }, + { + "category" : "BitEnum", + "kind" : "MatrixMultiplyAccumulateOperands", + "enumerants" : [ + { + "enumerant" : "None", + "value" : "0x0", + "version" : "None" + }, + { + "enumerant" : "MatrixASignedComponentsINTEL", + "value" : "0x1", + "version" : "None" + }, + { + "enumerant" : "MatrixBSignedComponentsINTEL", + "value" : "0x2", + "version" : "None" + }, + { + "enumerant" : "MatrixCBFloat16INTEL", + "value" : "0x4", + "version" : "None" + }, + { + "enumerant" : "MatrixResultBFloat16INTEL", + "value" : "0x8", + "version" : "None" + }, + { + "enumerant" : "MatrixAPackedInt8INTEL", + "value" : "0x10", + "version" : "None" + }, + { + "enumerant" : "MatrixBPackedInt8INTEL", + "value" : "0x20", + "version" : "None" + }, + { + "enumerant" : "MatrixAPackedInt4INTEL", + "value" : "0x40", + "version" : "None" + }, + { + "enumerant" : "MatrixBPackedInt4INTEL", + "value" : "0x80", + "version" : "None" + }, + { + "enumerant" : "MatrixATF32INTEL", + "value" : "0x100", + "version" : "None" + }, + { + "enumerant" : "MatrixBTF32INTEL", + "value" : "0x200", + "version" : "None" + }, + { + "enumerant" : "MatrixAPackedFloat16INTEL", + "value" : "0x400", + "version" : "None" + }, + { + "enumerant" : "MatrixBPackedFloat16INTEL", + "value" : "0x800", + "version" : "None" + }, + { + "enumerant" : "MatrixAPackedBFloat16INTEL", + "value" : "0x1000", + "version" : "None" + }, + { + "enumerant" : "MatrixBPackedBFloat16INTEL", + "value" : "0x2000", + "version" : "None" + } + ] + }, { "category" : "ValueEnum", "kind" : "FPEncoding", "enumerants" : [ + { + "enumerant" : "BFloat16KHR", + "value" : 0, + "capabilities" : [ "BFloat16TypeKHR" ], + "version" : "None" + }, + { + "enumerant" : "Float8E4M3EXT", + "value" : 4214, + "capabilities" : [ "Float8EXT" ], + "version" : "None" + }, + { + "enumerant" : "Float8E5M2EXT", + "value" : 4215, + "capabilities" : [ "Float8EXT" ], + "version" : "None" + } + ] + }, + { + "category" : "ValueEnum", + "kind" : "CooperativeVectorMatrixLayout", + "enumerants" : [ + { + "enumerant" : "RowMajorNV", + "value" : 0, + "version" : "None" + }, + { + "enumerant" : "ColumnMajorNV", + "value" : 1, + "version" : "None" + }, + { + "enumerant" : "InferencingOptimalNV", + "value" : 2, + "version" : "None" + }, + { + "enumerant" : "TrainingOptimalNV", + "value" : 3, + "version" : "None" + } + ] + }, + { + "category" : "ValueEnum", + "kind" : "ComponentType", + "enumerants" : [ + { + "enumerant" : "Float16NV", + "value" : 0, + "version" : "None" + }, + { + "enumerant" : "Float32NV", + "value" : 1, + "version" : "None" + }, + { + "enumerant" : "Float64NV", + "value" : 2, + "version" : "None" + }, + { + "enumerant" : "SignedInt8NV", + "value" : 3, + "version" : "None" + }, + { + "enumerant" : "SignedInt16NV", + "value" : 4, + "version" : "None" + }, + { + "enumerant" : "SignedInt32NV", + "value" : 5, + "version" : "None" + }, + { + "enumerant" : "SignedInt64NV", + "value" : 6, + "version" : "None" + }, + { + "enumerant" : "UnsignedInt8NV", + "value" : 7, + "version" : "None" + }, + { + "enumerant" : "UnsignedInt16NV", + "value" : 8, + "version" : "None" + }, + { + "enumerant" : "UnsignedInt32NV", + "value" : 9, + "version" : "None" + }, + { + "enumerant" : "UnsignedInt64NV", + "value" : 10, + "version" : "None" + }, + { + "enumerant" : "SignedInt8PackedNV", + "value" : 1000491000, + "version" : "None" + }, + { + "enumerant" : "UnsignedInt8PackedNV", + "value" : 1000491001, + "version" : "None" + }, + { + "enumerant" : "FloatE4M3NV", + "value" : 1000491002, + "version" : "None" + }, + { + "enumerant" : "FloatE5M2NV", + "value" : 1000491003, + "version" : "None" + } ] }, { @@ -17022,6 +18126,57 @@ "category" : "Composite", "kind" : "PairIdRefIdRef", "bases" : [ "IdRef", "IdRef" ] + }, + { + "category" : "BitEnum", + "kind" : "TensorOperands", + "enumerants" : [ + { + "enumerant" : "NoneARM", + "value" : "0x0000", + "capabilities" : [ "TensorsARM" ], + "version" : "None" + }, + { + "enumerant" : "NontemporalARM", + "value" : "0x0001", + "capabilities" : [ "TensorsARM" ], + "version" : "None" + }, + { + "enumerant" : "OutOfBoundsValueARM", + "value" : "0x0002", + "capabilities" : [ "TensorsARM" ], + "parameters" : [ + { "kind" : "IdRef" } + ], + "version" : "None" + }, + { + "enumerant" : "MakeElementAvailableARM", + "value" : "0x0004", + "capabilities" : [ "TensorsARM" ], + "parameters" : [ + { "kind" : "IdRef" } + ], + "version" : "None" + }, + { + "enumerant" : "MakeElementVisibleARM", + "value" : "0x0008", + "capabilities" : [ "TensorsARM" ], + "parameters" : [ + { "kind" : "IdRef" } + ], + "version" : "None" + }, + { + "enumerant" : "NonPrivateElementARM", + "value" : "0x0010", + "capabilities" : [ "TensorsARM" ], + "version" : "None" + } + ] } ] } diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.h b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.h index 9b1793c..4128040 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.h +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.h @@ -1,27 +1,11 @@ /* -** Copyright (c) 2014-2024 The Khronos Group Inc. +** Copyright: 2014-2024 The Khronos Group Inc. +** License: MIT ** -** Permission is hereby granted, free of charge, to any person obtaining a copy -** of this software and/or associated documentation files (the "Materials"), -** to deal in the Materials without restriction, including without limitation -** the rights to use, copy, modify, merge, publish, distribute, sublicense, -** and/or sell copies of the Materials, and to permit persons to whom the -** Materials are furnished to do so, subject to the following conditions: -** -** The above copyright notice and this permission notice shall be included in -** all copies or substantial portions of the Materials. -** -** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -** -** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -** IN THE MATERIALS. +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +** KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +** SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +** https://www.khronos.org/registry/ */ /* @@ -78,6 +62,7 @@ typedef enum SpvSourceLanguage_ { SpvSourceLanguageWGSL = 10, SpvSourceLanguageSlang = 11, SpvSourceLanguageZig = 12, + SpvSourceLanguageRust = 13, SpvSourceLanguageMax = 0x7fffffff, } SpvSourceLanguage; @@ -175,6 +160,8 @@ typedef enum SpvExecutionMode_ { SpvExecutionModeSignedZeroInfNanPreserve = 4461, SpvExecutionModeRoundingModeRTE = 4462, SpvExecutionModeRoundingModeRTZ = 4463, + SpvExecutionModeNonCoherentTileAttachmentReadQCOM = 4489, + SpvExecutionModeTileShadingRateQCOM = 4490, SpvExecutionModeEarlyAndLateFragmentTestsAMD = 5017, SpvExecutionModeStencilRefReplacingEXT = 5027, SpvExecutionModeCoalescingAMDX = 5069, @@ -244,6 +231,7 @@ typedef enum SpvStorageClass_ { SpvStorageClassImage = 11, SpvStorageClassStorageBuffer = 12, SpvStorageClassTileImageEXT = 4172, + SpvStorageClassTileAttachmentQCOM = 4491, SpvStorageClassNodePayloadAMDX = 5068, SpvStorageClassCallableDataKHR = 5328, SpvStorageClassCallableDataNV = 5328, @@ -382,9 +370,15 @@ typedef enum SpvImageChannelDataType_ { SpvImageChannelDataTypeFloat = 14, SpvImageChannelDataTypeUnormInt24 = 15, SpvImageChannelDataTypeUnormInt101010_2 = 16, + SpvImageChannelDataTypeUnormInt10X6EXT = 17, SpvImageChannelDataTypeUnsignedIntRaw10EXT = 19, SpvImageChannelDataTypeUnsignedIntRaw12EXT = 20, SpvImageChannelDataTypeUnormInt2_101010EXT = 21, + SpvImageChannelDataTypeUnsignedInt10X6EXT = 22, + SpvImageChannelDataTypeUnsignedInt12X4EXT = 23, + SpvImageChannelDataTypeUnsignedInt14X2EXT = 24, + SpvImageChannelDataTypeUnormInt12X4EXT = 25, + SpvImageChannelDataTypeUnormInt14X2EXT = 26, SpvImageChannelDataTypeMax = 0x7fffffff, } SpvImageChannelDataType; @@ -547,6 +541,7 @@ typedef enum SpvDecoration_ { SpvDecorationMaxByteOffset = 45, SpvDecorationAlignmentId = 46, SpvDecorationMaxByteOffsetId = 47, + SpvDecorationSaturatedToLargestFloat8NormalConversionEXT = 4216, SpvDecorationNoSignedWrap = 4469, SpvDecorationNoUnsignedWrap = 4470, SpvDecorationWeightTextureQCOM = 4487, @@ -716,6 +711,9 @@ typedef enum SpvBuiltIn_ { SpvBuiltInDeviceIndex = 4438, SpvBuiltInViewIndex = 4440, SpvBuiltInShadingRateKHR = 4444, + SpvBuiltInTileOffsetQCOM = 4492, + SpvBuiltInTileDimensionQCOM = 4493, + SpvBuiltInTileApronSizeQCOM = 4494, SpvBuiltInBaryCoordNoPerspAMD = 4992, SpvBuiltInBaryCoordNoPerspCentroidAMD = 4993, SpvBuiltInBaryCoordNoPerspSampleAMD = 4994, @@ -784,12 +782,19 @@ typedef enum SpvBuiltIn_ { SpvBuiltInIncomingRayFlagsKHR = 5351, SpvBuiltInIncomingRayFlagsNV = 5351, SpvBuiltInRayGeometryIndexKHR = 5352, + SpvBuiltInHitIsSphereNV = 5359, + SpvBuiltInHitIsLSSNV = 5360, + SpvBuiltInHitSpherePositionNV = 5361, SpvBuiltInWarpsPerSMNV = 5374, SpvBuiltInSMCountNV = 5375, SpvBuiltInWarpIDNV = 5376, SpvBuiltInSMIDNV = 5377, + SpvBuiltInHitLSSPositionsNV = 5396, SpvBuiltInHitKindFrontFacingMicroTriangleNV = 5405, SpvBuiltInHitKindBackFacingMicroTriangleNV = 5406, + SpvBuiltInHitSphereRadiusNV = 5420, + SpvBuiltInHitLSSRadiiNV = 5421, + SpvBuiltInClusterIDNV = 5436, SpvBuiltInCullMaskKHR = 6021, SpvBuiltInMax = 0x7fffffff, } SpvBuiltIn; @@ -1059,7 +1064,12 @@ typedef enum SpvCapability_ { SpvCapabilityTileImageColorReadAccessEXT = 4166, SpvCapabilityTileImageDepthReadAccessEXT = 4167, SpvCapabilityTileImageStencilReadAccessEXT = 4168, + SpvCapabilityTensorsARM = 4174, + SpvCapabilityStorageTensorArrayDynamicIndexingARM = 4175, + SpvCapabilityStorageTensorArrayNonUniformIndexingARM = 4176, SpvCapabilityCooperativeMatrixLayoutsARM = 4201, + SpvCapabilityFloat8EXT = 4212, + SpvCapabilityFloat8CooperativeMatrixEXT = 4213, SpvCapabilityFragmentShadingRateKHR = 4422, SpvCapabilitySubgroupBallotKHR = 4423, SpvCapabilityDrawParameters = 4427, @@ -1095,6 +1105,7 @@ typedef enum SpvCapability_ { SpvCapabilityTextureSampleWeightedQCOM = 4484, SpvCapabilityTextureBoxFilterQCOM = 4485, SpvCapabilityTextureBlockMatchQCOM = 4486, + SpvCapabilityTileShadingQCOM = 4495, SpvCapabilityTextureBlockMatch2QCOM = 4498, SpvCapabilityFloat16ImageAMD = 5008, SpvCapabilityImageGatherBiasLodAMD = 5009, @@ -1105,6 +1116,11 @@ typedef enum SpvCapability_ { SpvCapabilityShaderClockKHR = 5055, SpvCapabilityShaderEnqueueAMDX = 5067, SpvCapabilityQuadControlKHR = 5087, + SpvCapabilityInt4TypeINTEL = 5112, + SpvCapabilityInt4CooperativeMatrixINTEL = 5114, + SpvCapabilityBFloat16TypeKHR = 5116, + SpvCapabilityBFloat16DotProductKHR = 5117, + SpvCapabilityBFloat16CooperativeMatrixKHR = 5118, SpvCapabilitySampleMaskOverrideCoverageNV = 5249, SpvCapabilityGeometryShaderPassthroughNV = 5251, SpvCapabilityShaderViewportIndexLayerEXT = 5254, @@ -1171,14 +1187,19 @@ typedef enum SpvCapability_ { SpvCapabilityShaderInvocationReorderNV = 5383, SpvCapabilityBindlessTextureNV = 5390, SpvCapabilityRayQueryPositionFetchKHR = 5391, + SpvCapabilityCooperativeVectorNV = 5394, SpvCapabilityAtomicFloat16VectorNV = 5404, SpvCapabilityRayTracingDisplacementMicromapNV = 5409, SpvCapabilityRawAccessChainsNV = 5414, + SpvCapabilityRayTracingSpheresGeometryNV = 5418, + SpvCapabilityRayTracingLinearSweptSpheresGeometryNV = 5419, SpvCapabilityCooperativeMatrixReductionsNV = 5430, SpvCapabilityCooperativeMatrixConversionsNV = 5431, SpvCapabilityCooperativeMatrixPerElementOperationsNV = 5432, SpvCapabilityCooperativeMatrixTensorAddressingNV = 5433, SpvCapabilityCooperativeMatrixBlockLoadsNV = 5434, + SpvCapabilityCooperativeVectorTrainingNV = 5435, + SpvCapabilityRayTracingClusterAccelerationStructureNV = 5437, SpvCapabilityTensorAddressingNV = 5439, SpvCapabilitySubgroupShuffleINTEL = 5568, SpvCapabilitySubgroupBufferBlockIOINTEL = 5569, @@ -1248,16 +1269,24 @@ typedef enum SpvCapability_ { SpvCapabilityArithmeticFenceEXT = 6144, SpvCapabilityFPGAClusterAttributesV2INTEL = 6150, SpvCapabilityFPGAKernelAttributesv2INTEL = 6161, + SpvCapabilityTaskSequenceINTEL = 6162, SpvCapabilityFPMaxErrorINTEL = 6169, SpvCapabilityFPGALatencyControlINTEL = 6171, SpvCapabilityFPGAArgumentInterfacesINTEL = 6174, SpvCapabilityGlobalVariableHostAccessINTEL = 6187, SpvCapabilityGlobalVariableFPGADecorationsINTEL = 6189, SpvCapabilitySubgroupBufferPrefetchINTEL = 6220, + SpvCapabilitySubgroup2DBlockIOINTEL = 6228, + SpvCapabilitySubgroup2DBlockTransformINTEL = 6229, + SpvCapabilitySubgroup2DBlockTransposeINTEL = 6230, + SpvCapabilitySubgroupMatrixMultiplyAccumulateINTEL = 6236, + SpvCapabilityTernaryBitwiseFunctionINTEL = 6241, SpvCapabilityGroupUniformArithmeticKHR = 6400, + SpvCapabilityTensorFloat32RoundingINTEL = 6425, SpvCapabilityMaskedGatherScatterINTEL = 6427, SpvCapabilityCacheControlsINTEL = 6441, SpvCapabilityRegisterLimitsINTEL = 6460, + SpvCapabilityBindlessImagesINTEL = 6528, SpvCapabilityMax = 0x7fffffff, } SpvCapability; @@ -1270,6 +1299,7 @@ typedef enum SpvRayFlagsShift_ { SpvRayFlagsCullFrontFacingTrianglesKHRShift = 5, SpvRayFlagsCullOpaqueKHRShift = 6, SpvRayFlagsCullNoOpaqueKHRShift = 7, + SpvRayFlagsSkipBuiltinPrimitivesNVShift = 8, SpvRayFlagsSkipTrianglesKHRShift = 8, SpvRayFlagsSkipAABBsKHRShift = 9, SpvRayFlagsForceOpacityMicromap2StateEXTShift = 10, @@ -1286,6 +1316,7 @@ typedef enum SpvRayFlagsMask_ { SpvRayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, SpvRayFlagsCullOpaqueKHRMask = 0x00000040, SpvRayFlagsCullNoOpaqueKHRMask = 0x00000080, + SpvRayFlagsSkipBuiltinPrimitivesNVMask = 0x00000100, SpvRayFlagsSkipTrianglesKHRMask = 0x00000100, SpvRayFlagsSkipAABBsKHRMask = 0x00000200, SpvRayFlagsForceOpacityMicromap2StateEXTMask = 0x00000400, @@ -1432,6 +1463,24 @@ typedef enum SpvTensorAddressingOperandsMask_ { SpvTensorAddressingOperandsDecodeFuncMask = 0x00000002, } SpvTensorAddressingOperandsMask; +typedef enum SpvTensorOperandsShift_ { + SpvTensorOperandsNontemporalARMShift = 0, + SpvTensorOperandsOutOfBoundsValueARMShift = 1, + SpvTensorOperandsMakeElementAvailableARMShift = 2, + SpvTensorOperandsMakeElementVisibleARMShift = 3, + SpvTensorOperandsNonPrivateElementARMShift = 4, + SpvTensorOperandsMax = 0x7fffffff, +} SpvTensorOperandsShift; + +typedef enum SpvTensorOperandsMask_ { + SpvTensorOperandsMaskNone = 0, + SpvTensorOperandsNontemporalARMMask = 0x00000001, + SpvTensorOperandsOutOfBoundsValueARMMask = 0x00000002, + SpvTensorOperandsMakeElementAvailableARMMask = 0x00000004, + SpvTensorOperandsMakeElementVisibleARMMask = 0x00000008, + SpvTensorOperandsNonPrivateElementARMMask = 0x00000010, +} SpvTensorOperandsMask; + typedef enum SpvInitializationModeQualifier_ { SpvInitializationModeQualifierInitOnDeviceReprogramINTEL = 0, SpvInitializationModeQualifierInitOnDeviceResetINTEL = 1, @@ -1468,6 +1517,42 @@ typedef enum SpvNamedMaximumNumberOfRegisters_ { SpvNamedMaximumNumberOfRegistersMax = 0x7fffffff, } SpvNamedMaximumNumberOfRegisters; +typedef enum SpvMatrixMultiplyAccumulateOperandsShift_ { + SpvMatrixMultiplyAccumulateOperandsMatrixASignedComponentsINTELShift = 0, + SpvMatrixMultiplyAccumulateOperandsMatrixBSignedComponentsINTELShift = 1, + SpvMatrixMultiplyAccumulateOperandsMatrixCBFloat16INTELShift = 2, + SpvMatrixMultiplyAccumulateOperandsMatrixResultBFloat16INTELShift = 3, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt8INTELShift = 4, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt8INTELShift = 5, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt4INTELShift = 6, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt4INTELShift = 7, + SpvMatrixMultiplyAccumulateOperandsMatrixATF32INTELShift = 8, + SpvMatrixMultiplyAccumulateOperandsMatrixBTF32INTELShift = 9, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedFloat16INTELShift = 10, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedFloat16INTELShift = 11, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedBFloat16INTELShift = 12, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedBFloat16INTELShift = 13, + SpvMatrixMultiplyAccumulateOperandsMax = 0x7fffffff, +} SpvMatrixMultiplyAccumulateOperandsShift; + +typedef enum SpvMatrixMultiplyAccumulateOperandsMask_ { + SpvMatrixMultiplyAccumulateOperandsMaskNone = 0, + SpvMatrixMultiplyAccumulateOperandsMatrixASignedComponentsINTELMask = 0x00000001, + SpvMatrixMultiplyAccumulateOperandsMatrixBSignedComponentsINTELMask = 0x00000002, + SpvMatrixMultiplyAccumulateOperandsMatrixCBFloat16INTELMask = 0x00000004, + SpvMatrixMultiplyAccumulateOperandsMatrixResultBFloat16INTELMask = 0x00000008, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt8INTELMask = 0x00000010, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt8INTELMask = 0x00000020, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedInt4INTELMask = 0x00000040, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedInt4INTELMask = 0x00000080, + SpvMatrixMultiplyAccumulateOperandsMatrixATF32INTELMask = 0x00000100, + SpvMatrixMultiplyAccumulateOperandsMatrixBTF32INTELMask = 0x00000200, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedFloat16INTELMask = 0x00000400, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedFloat16INTELMask = 0x00000800, + SpvMatrixMultiplyAccumulateOperandsMatrixAPackedBFloat16INTELMask = 0x00001000, + SpvMatrixMultiplyAccumulateOperandsMatrixBPackedBFloat16INTELMask = 0x00002000, +} SpvMatrixMultiplyAccumulateOperandsMask; + typedef enum SpvRawAccessChainOperandsShift_ { SpvRawAccessChainOperandsRobustnessPerComponentNVShift = 0, SpvRawAccessChainOperandsRobustnessPerElementNVShift = 1, @@ -1481,9 +1566,39 @@ typedef enum SpvRawAccessChainOperandsMask_ { } SpvRawAccessChainOperandsMask; typedef enum SpvFPEncoding_ { + SpvFPEncodingBFloat16KHR = 0, + SpvFPEncodingFloat8E4M3EXT = 4214, + SpvFPEncodingFloat8E5M2EXT = 4215, SpvFPEncodingMax = 0x7fffffff, } SpvFPEncoding; +typedef enum SpvCooperativeVectorMatrixLayout_ { + SpvCooperativeVectorMatrixLayoutRowMajorNV = 0, + SpvCooperativeVectorMatrixLayoutColumnMajorNV = 1, + SpvCooperativeVectorMatrixLayoutInferencingOptimalNV = 2, + SpvCooperativeVectorMatrixLayoutTrainingOptimalNV = 3, + SpvCooperativeVectorMatrixLayoutMax = 0x7fffffff, +} SpvCooperativeVectorMatrixLayout; + +typedef enum SpvComponentType_ { + SpvComponentTypeFloat16NV = 0, + SpvComponentTypeFloat32NV = 1, + SpvComponentTypeFloat64NV = 2, + SpvComponentTypeSignedInt8NV = 3, + SpvComponentTypeSignedInt16NV = 4, + SpvComponentTypeSignedInt32NV = 5, + SpvComponentTypeSignedInt64NV = 6, + SpvComponentTypeUnsignedInt8NV = 7, + SpvComponentTypeUnsignedInt16NV = 8, + SpvComponentTypeUnsignedInt32NV = 9, + SpvComponentTypeUnsignedInt64NV = 10, + SpvComponentTypeSignedInt8PackedNV = 1000491000, + SpvComponentTypeUnsignedInt8PackedNV = 1000491001, + SpvComponentTypeFloatE4M3NV = 1000491002, + SpvComponentTypeFloatE5M2NV = 1000491003, + SpvComponentTypeMax = 0x7fffffff, +} SpvComponentType; + typedef enum SpvOp_ { SpvOpNop = 0, SpvOpUndef = 1, @@ -1832,6 +1947,10 @@ typedef enum SpvOp_ { SpvOpColorAttachmentReadEXT = 4160, SpvOpDepthAttachmentReadEXT = 4161, SpvOpStencilAttachmentReadEXT = 4162, + SpvOpTypeTensorARM = 4163, + SpvOpTensorReadARM = 4164, + SpvOpTensorWriteARM = 4165, + SpvOpTensorQuerySizeARM = 4166, SpvOpTerminateInvocation = 4416, SpvOpTypeUntypedPointerKHR = 4417, SpvOpUntypedVariableKHR = 4418, @@ -1944,6 +2063,11 @@ typedef enum SpvOp_ { SpvOpReorderThreadWithHintNV = 5280, SpvOpTypeHitObjectNV = 5281, SpvOpImageSampleFootprintNV = 5283, + SpvOpTypeCooperativeVectorNV = 5288, + SpvOpCooperativeVectorMatrixMulNV = 5289, + SpvOpCooperativeVectorOuterProductAccumulateNV = 5290, + SpvOpCooperativeVectorReduceSumAccumulateNV = 5291, + SpvOpCooperativeVectorMatrixMulAddNV = 5292, SpvOpCooperativeMatrixConvertNV = 5293, SpvOpEmitMeshTasksEXT = 5294, SpvOpSetMeshOutputsEXT = 5295, @@ -1951,6 +2075,8 @@ typedef enum SpvOp_ { SpvOpWritePackedPrimitiveIndices4x8NV = 5299, SpvOpFetchMicroTriangleVertexPositionNV = 5300, SpvOpFetchMicroTriangleVertexBarycentricNV = 5301, + SpvOpCooperativeVectorLoadNV = 5302, + SpvOpCooperativeVectorStoreNV = 5303, SpvOpReportIntersectionKHR = 5334, SpvOpReportIntersectionNV = 5334, SpvOpIgnoreIntersectionNV = 5335, @@ -1962,6 +2088,8 @@ typedef enum SpvOp_ { SpvOpTypeAccelerationStructureKHR = 5341, SpvOpTypeAccelerationStructureNV = 5341, SpvOpExecuteCallableNV = 5344, + SpvOpRayQueryGetClusterIdNV = 5345, + SpvOpHitObjectGetClusterIdNV = 5346, SpvOpTypeCooperativeMatrixNV = 5358, SpvOpCooperativeMatrixLoadNV = 5359, SpvOpCooperativeMatrixStoreNV = 5360, @@ -1997,6 +2125,19 @@ typedef enum SpvOp_ { SpvOpConvertSampledImageToUNV = 5396, SpvOpSamplerImageAddressingModeNV = 5397, SpvOpRawAccessChainNV = 5398, + SpvOpRayQueryGetIntersectionSpherePositionNV = 5427, + SpvOpRayQueryGetIntersectionSphereRadiusNV = 5428, + SpvOpRayQueryGetIntersectionLSSPositionsNV = 5429, + SpvOpRayQueryGetIntersectionLSSRadiiNV = 5430, + SpvOpRayQueryGetIntersectionLSSHitValueNV = 5431, + SpvOpHitObjectGetSpherePositionNV = 5432, + SpvOpHitObjectGetSphereRadiusNV = 5433, + SpvOpHitObjectGetLSSPositionsNV = 5434, + SpvOpHitObjectGetLSSRadiiNV = 5435, + SpvOpHitObjectIsSphereHitNV = 5436, + SpvOpHitObjectIsLSSHitNV = 5437, + SpvOpRayQueryIsSphereHitNV = 5438, + SpvOpRayQueryIsLSSHitNV = 5439, SpvOpSubgroupShuffleINTEL = 5571, SpvOpSubgroupShuffleDownINTEL = 5572, SpvOpSubgroupShuffleUpINTEL = 5573, @@ -2244,7 +2385,19 @@ typedef enum SpvOp_ { SpvOpControlBarrierArriveINTEL = 6142, SpvOpControlBarrierWaitINTEL = 6143, SpvOpArithmeticFenceEXT = 6145, + SpvOpTaskSequenceCreateINTEL = 6163, + SpvOpTaskSequenceAsyncINTEL = 6164, + SpvOpTaskSequenceGetINTEL = 6165, + SpvOpTaskSequenceReleaseINTEL = 6166, + SpvOpTypeTaskSequenceINTEL = 6199, SpvOpSubgroupBlockPrefetchINTEL = 6221, + SpvOpSubgroup2DBlockLoadINTEL = 6231, + SpvOpSubgroup2DBlockLoadTransformINTEL = 6232, + SpvOpSubgroup2DBlockLoadTransposeINTEL = 6233, + SpvOpSubgroup2DBlockPrefetchINTEL = 6234, + SpvOpSubgroup2DBlockStoreINTEL = 6235, + SpvOpSubgroupMatrixMultiplyAccumulateINTEL = 6237, + SpvOpBitwiseFunctionINTEL = 6242, SpvOpGroupIMulKHR = 6401, SpvOpGroupFMulKHR = 6402, SpvOpGroupBitwiseAndKHR = 6403, @@ -2253,8 +2406,12 @@ typedef enum SpvOp_ { SpvOpGroupLogicalAndKHR = 6406, SpvOpGroupLogicalOrKHR = 6407, SpvOpGroupLogicalXorKHR = 6408, + SpvOpRoundFToTF32INTEL = 6426, SpvOpMaskedGatherINTEL = 6428, SpvOpMaskedScatterINTEL = 6429, + SpvOpConvertHandleToImageINTEL = 6529, + SpvOpConvertHandleToSamplerINTEL = 6530, + SpvOpConvertHandleToSampledImageINTEL = 6531, SpvOpMax = 0x7fffffff, } SpvOp; @@ -2613,6 +2770,10 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpColorAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; case SpvOpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; case SpvOpStencilAttachmentReadEXT: *hasResult = true; *hasResultType = true; break; + case SpvOpTypeTensorARM: *hasResult = true; *hasResultType = false; break; + case SpvOpTensorReadARM: *hasResult = true; *hasResultType = true; break; + case SpvOpTensorWriteARM: *hasResult = false; *hasResultType = false; break; + case SpvOpTensorQuerySizeARM: *hasResult = true; *hasResultType = true; break; case SpvOpTerminateInvocation: *hasResult = false; *hasResultType = false; break; case SpvOpTypeUntypedPointerKHR: *hasResult = true; *hasResultType = false; break; case SpvOpUntypedVariableKHR: *hasResult = true; *hasResultType = true; break; @@ -2719,6 +2880,11 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break; case SpvOpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break; case SpvOpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; + case SpvOpTypeCooperativeVectorNV: *hasResult = true; *hasResultType = false; break; + case SpvOpCooperativeVectorMatrixMulNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeVectorOuterProductAccumulateNV: *hasResult = false; *hasResultType = false; break; + case SpvOpCooperativeVectorReduceSumAccumulateNV: *hasResult = false; *hasResultType = false; break; + case SpvOpCooperativeVectorMatrixMulAddNV: *hasResult = true; *hasResultType = true; break; case SpvOpCooperativeMatrixConvertNV: *hasResult = true; *hasResultType = true; break; case SpvOpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break; case SpvOpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break; @@ -2726,6 +2892,8 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break; case SpvOpFetchMicroTriangleVertexPositionNV: *hasResult = true; *hasResultType = true; break; case SpvOpFetchMicroTriangleVertexBarycentricNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeVectorLoadNV: *hasResult = true; *hasResultType = true; break; + case SpvOpCooperativeVectorStoreNV: *hasResult = false; *hasResultType = false; break; case SpvOpReportIntersectionKHR: *hasResult = true; *hasResultType = true; break; case SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break; @@ -2735,6 +2903,8 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break; case SpvOpTypeAccelerationStructureKHR: *hasResult = true; *hasResultType = false; break; case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; + case SpvOpRayQueryGetClusterIdNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetClusterIdNV: *hasResult = true; *hasResultType = true; break; case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; case SpvOpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; case SpvOpCooperativeMatrixStoreNV: *hasResult = false; *hasResultType = false; break; @@ -2769,6 +2939,19 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; case SpvOpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; case SpvOpRawAccessChainNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryGetIntersectionSpherePositionNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryGetIntersectionSphereRadiusNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryGetIntersectionLSSPositionsNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryGetIntersectionLSSRadiiNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryGetIntersectionLSSHitValueNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetSpherePositionNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetSphereRadiusNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetLSSPositionsNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectGetLSSRadiiNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectIsSphereHitNV: *hasResult = true; *hasResultType = true; break; + case SpvOpHitObjectIsLSSHitNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryIsSphereHitNV: *hasResult = true; *hasResultType = true; break; + case SpvOpRayQueryIsLSSHitNV: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; @@ -2795,7 +2978,7 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; case SpvOpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; - case SpvOpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpAsmTargetINTEL: *hasResult = true; *hasResultType = false; break; case SpvOpAsmINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; @@ -3014,7 +3197,19 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break; case SpvOpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break; case SpvOpArithmeticFenceEXT: *hasResult = true; *hasResultType = true; break; + case SpvOpTaskSequenceCreateINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpTaskSequenceAsyncINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpTaskSequenceGetINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpTaskSequenceReleaseINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpTypeTaskSequenceINTEL: *hasResult = true; *hasResultType = false; break; case SpvOpSubgroupBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroup2DBlockLoadINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroup2DBlockLoadTransformINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroup2DBlockLoadTransposeINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroup2DBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroup2DBlockStoreINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpSubgroupMatrixMultiplyAccumulateINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpBitwiseFunctionINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpGroupIMulKHR: *hasResult = true; *hasResultType = true; break; case SpvOpGroupFMulKHR: *hasResult = true; *hasResultType = true; break; case SpvOpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break; @@ -3023,8 +3218,12 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy case SpvOpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; case SpvOpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; case SpvOpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; + case SpvOpRoundFToTF32INTEL: *hasResult = true; *hasResultType = true; break; case SpvOpMaskedGatherINTEL: *hasResult = true; *hasResultType = true; break; case SpvOpMaskedScatterINTEL: *hasResult = false; *hasResultType = false; break; + case SpvOpConvertHandleToImageINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpConvertHandleToSamplerINTEL: *hasResult = true; *hasResultType = true; break; + case SpvOpConvertHandleToSampledImageINTEL: *hasResult = true; *hasResultType = true; break; } } inline const char* SpvSourceLanguageToString(SpvSourceLanguage value) { @@ -3042,6 +3241,7 @@ inline const char* SpvSourceLanguageToString(SpvSourceLanguage value) { case SpvSourceLanguageWGSL: return "WGSL"; case SpvSourceLanguageSlang: return "Slang"; case SpvSourceLanguageZig: return "Zig"; + case SpvSourceLanguageRust: return "Rust"; default: return "Unknown"; } } @@ -3139,6 +3339,8 @@ inline const char* SpvExecutionModeToString(SpvExecutionMode value) { case SpvExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; case SpvExecutionModeRoundingModeRTE: return "RoundingModeRTE"; case SpvExecutionModeRoundingModeRTZ: return "RoundingModeRTZ"; + case SpvExecutionModeNonCoherentTileAttachmentReadQCOM: return "NonCoherentTileAttachmentReadQCOM"; + case SpvExecutionModeTileShadingRateQCOM: return "TileShadingRateQCOM"; case SpvExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD"; case SpvExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT"; case SpvExecutionModeCoalescingAMDX: return "CoalescingAMDX"; @@ -3205,6 +3407,7 @@ inline const char* SpvStorageClassToString(SpvStorageClass value) { case SpvStorageClassImage: return "Image"; case SpvStorageClassStorageBuffer: return "StorageBuffer"; case SpvStorageClassTileImageEXT: return "TileImageEXT"; + case SpvStorageClassTileAttachmentQCOM: return "TileAttachmentQCOM"; case SpvStorageClassNodePayloadAMDX: return "NodePayloadAMDX"; case SpvStorageClassCallableDataKHR: return "CallableDataKHR"; case SpvStorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR"; @@ -3348,9 +3551,15 @@ inline const char* SpvImageChannelDataTypeToString(SpvImageChannelDataType value case SpvImageChannelDataTypeFloat: return "Float"; case SpvImageChannelDataTypeUnormInt24: return "UnormInt24"; case SpvImageChannelDataTypeUnormInt101010_2: return "UnormInt101010_2"; + case SpvImageChannelDataTypeUnormInt10X6EXT: return "UnormInt10X6EXT"; case SpvImageChannelDataTypeUnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT"; case SpvImageChannelDataTypeUnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT"; case SpvImageChannelDataTypeUnormInt2_101010EXT: return "UnormInt2_101010EXT"; + case SpvImageChannelDataTypeUnsignedInt10X6EXT: return "UnsignedInt10X6EXT"; + case SpvImageChannelDataTypeUnsignedInt12X4EXT: return "UnsignedInt12X4EXT"; + case SpvImageChannelDataTypeUnsignedInt14X2EXT: return "UnsignedInt14X2EXT"; + case SpvImageChannelDataTypeUnormInt12X4EXT: return "UnormInt12X4EXT"; + case SpvImageChannelDataTypeUnormInt14X2EXT: return "UnormInt14X2EXT"; default: return "Unknown"; } } @@ -3447,6 +3656,7 @@ inline const char* SpvDecorationToString(SpvDecoration value) { case SpvDecorationMaxByteOffset: return "MaxByteOffset"; case SpvDecorationAlignmentId: return "AlignmentId"; case SpvDecorationMaxByteOffsetId: return "MaxByteOffsetId"; + case SpvDecorationSaturatedToLargestFloat8NormalConversionEXT: return "SaturatedToLargestFloat8NormalConversionEXT"; case SpvDecorationNoSignedWrap: return "NoSignedWrap"; case SpvDecorationNoUnsignedWrap: return "NoUnsignedWrap"; case SpvDecorationWeightTextureQCOM: return "WeightTextureQCOM"; @@ -3606,6 +3816,9 @@ inline const char* SpvBuiltInToString(SpvBuiltIn value) { case SpvBuiltInDeviceIndex: return "DeviceIndex"; case SpvBuiltInViewIndex: return "ViewIndex"; case SpvBuiltInShadingRateKHR: return "ShadingRateKHR"; + case SpvBuiltInTileOffsetQCOM: return "TileOffsetQCOM"; + case SpvBuiltInTileDimensionQCOM: return "TileDimensionQCOM"; + case SpvBuiltInTileApronSizeQCOM: return "TileApronSizeQCOM"; case SpvBuiltInBaryCoordNoPerspAMD: return "BaryCoordNoPerspAMD"; case SpvBuiltInBaryCoordNoPerspCentroidAMD: return "BaryCoordNoPerspCentroidAMD"; case SpvBuiltInBaryCoordNoPerspSampleAMD: return "BaryCoordNoPerspSampleAMD"; @@ -3657,12 +3870,19 @@ inline const char* SpvBuiltInToString(SpvBuiltIn value) { case SpvBuiltInHitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV"; case SpvBuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR"; case SpvBuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR"; + case SpvBuiltInHitIsSphereNV: return "HitIsSphereNV"; + case SpvBuiltInHitIsLSSNV: return "HitIsLSSNV"; + case SpvBuiltInHitSpherePositionNV: return "HitSpherePositionNV"; case SpvBuiltInWarpsPerSMNV: return "WarpsPerSMNV"; case SpvBuiltInSMCountNV: return "SMCountNV"; case SpvBuiltInWarpIDNV: return "WarpIDNV"; case SpvBuiltInSMIDNV: return "SMIDNV"; + case SpvBuiltInHitLSSPositionsNV: return "HitLSSPositionsNV"; case SpvBuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV"; case SpvBuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV"; + case SpvBuiltInHitSphereRadiusNV: return "HitSphereRadiusNV"; + case SpvBuiltInHitLSSRadiiNV: return "HitLSSRadiiNV"; + case SpvBuiltInClusterIDNV: return "ClusterIDNV"; case SpvBuiltInCullMaskKHR: return "CullMaskKHR"; default: return "Unknown"; } @@ -3779,7 +3999,12 @@ inline const char* SpvCapabilityToString(SpvCapability value) { case SpvCapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT"; case SpvCapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; case SpvCapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; + case SpvCapabilityTensorsARM: return "TensorsARM"; + case SpvCapabilityStorageTensorArrayDynamicIndexingARM: return "StorageTensorArrayDynamicIndexingARM"; + case SpvCapabilityStorageTensorArrayNonUniformIndexingARM: return "StorageTensorArrayNonUniformIndexingARM"; case SpvCapabilityCooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; + case SpvCapabilityFloat8EXT: return "Float8EXT"; + case SpvCapabilityFloat8CooperativeMatrixEXT: return "Float8CooperativeMatrixEXT"; case SpvCapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR"; case SpvCapabilitySubgroupBallotKHR: return "SubgroupBallotKHR"; case SpvCapabilityDrawParameters: return "DrawParameters"; @@ -3813,6 +4038,7 @@ inline const char* SpvCapabilityToString(SpvCapability value) { case SpvCapabilityTextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM"; case SpvCapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM"; case SpvCapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM"; + case SpvCapabilityTileShadingQCOM: return "TileShadingQCOM"; case SpvCapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; case SpvCapabilityFloat16ImageAMD: return "Float16ImageAMD"; case SpvCapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD"; @@ -3823,6 +4049,11 @@ inline const char* SpvCapabilityToString(SpvCapability value) { case SpvCapabilityShaderClockKHR: return "ShaderClockKHR"; case SpvCapabilityShaderEnqueueAMDX: return "ShaderEnqueueAMDX"; case SpvCapabilityQuadControlKHR: return "QuadControlKHR"; + case SpvCapabilityInt4TypeINTEL: return "Int4TypeINTEL"; + case SpvCapabilityInt4CooperativeMatrixINTEL: return "Int4CooperativeMatrixINTEL"; + case SpvCapabilityBFloat16TypeKHR: return "BFloat16TypeKHR"; + case SpvCapabilityBFloat16DotProductKHR: return "BFloat16DotProductKHR"; + case SpvCapabilityBFloat16CooperativeMatrixKHR: return "BFloat16CooperativeMatrixKHR"; case SpvCapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV"; case SpvCapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; case SpvCapabilityShaderViewportIndexLayerEXT: return "ShaderViewportIndexLayerEXT"; @@ -3868,14 +4099,19 @@ inline const char* SpvCapabilityToString(SpvCapability value) { case SpvCapabilityShaderInvocationReorderNV: return "ShaderInvocationReorderNV"; case SpvCapabilityBindlessTextureNV: return "BindlessTextureNV"; case SpvCapabilityRayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR"; + case SpvCapabilityCooperativeVectorNV: return "CooperativeVectorNV"; case SpvCapabilityAtomicFloat16VectorNV: return "AtomicFloat16VectorNV"; case SpvCapabilityRayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV"; case SpvCapabilityRawAccessChainsNV: return "RawAccessChainsNV"; + case SpvCapabilityRayTracingSpheresGeometryNV: return "RayTracingSpheresGeometryNV"; + case SpvCapabilityRayTracingLinearSweptSpheresGeometryNV: return "RayTracingLinearSweptSpheresGeometryNV"; case SpvCapabilityCooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV"; case SpvCapabilityCooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV"; case SpvCapabilityCooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV"; case SpvCapabilityCooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV"; case SpvCapabilityCooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV"; + case SpvCapabilityCooperativeVectorTrainingNV: return "CooperativeVectorTrainingNV"; + case SpvCapabilityRayTracingClusterAccelerationStructureNV: return "RayTracingClusterAccelerationStructureNV"; case SpvCapabilityTensorAddressingNV: return "TensorAddressingNV"; case SpvCapabilitySubgroupShuffleINTEL: return "SubgroupShuffleINTEL"; case SpvCapabilitySubgroupBufferBlockIOINTEL: return "SubgroupBufferBlockIOINTEL"; @@ -3940,16 +4176,24 @@ inline const char* SpvCapabilityToString(SpvCapability value) { case SpvCapabilityArithmeticFenceEXT: return "ArithmeticFenceEXT"; case SpvCapabilityFPGAClusterAttributesV2INTEL: return "FPGAClusterAttributesV2INTEL"; case SpvCapabilityFPGAKernelAttributesv2INTEL: return "FPGAKernelAttributesv2INTEL"; + case SpvCapabilityTaskSequenceINTEL: return "TaskSequenceINTEL"; case SpvCapabilityFPMaxErrorINTEL: return "FPMaxErrorINTEL"; case SpvCapabilityFPGALatencyControlINTEL: return "FPGALatencyControlINTEL"; case SpvCapabilityFPGAArgumentInterfacesINTEL: return "FPGAArgumentInterfacesINTEL"; case SpvCapabilityGlobalVariableHostAccessINTEL: return "GlobalVariableHostAccessINTEL"; case SpvCapabilityGlobalVariableFPGADecorationsINTEL: return "GlobalVariableFPGADecorationsINTEL"; case SpvCapabilitySubgroupBufferPrefetchINTEL: return "SubgroupBufferPrefetchINTEL"; + case SpvCapabilitySubgroup2DBlockIOINTEL: return "Subgroup2DBlockIOINTEL"; + case SpvCapabilitySubgroup2DBlockTransformINTEL: return "Subgroup2DBlockTransformINTEL"; + case SpvCapabilitySubgroup2DBlockTransposeINTEL: return "Subgroup2DBlockTransposeINTEL"; + case SpvCapabilitySubgroupMatrixMultiplyAccumulateINTEL: return "SubgroupMatrixMultiplyAccumulateINTEL"; + case SpvCapabilityTernaryBitwiseFunctionINTEL: return "TernaryBitwiseFunctionINTEL"; case SpvCapabilityGroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR"; + case SpvCapabilityTensorFloat32RoundingINTEL: return "TensorFloat32RoundingINTEL"; case SpvCapabilityMaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL"; case SpvCapabilityCacheControlsINTEL: return "CacheControlsINTEL"; case SpvCapabilityRegisterLimitsINTEL: return "RegisterLimitsINTEL"; + case SpvCapabilityBindlessImagesINTEL: return "BindlessImagesINTEL"; default: return "Unknown"; } } @@ -4104,6 +4348,40 @@ inline const char* SpvNamedMaximumNumberOfRegistersToString(SpvNamedMaximumNumbe inline const char* SpvFPEncodingToString(SpvFPEncoding value) { switch (value) { + case SpvFPEncodingBFloat16KHR: return "BFloat16KHR"; + case SpvFPEncodingFloat8E4M3EXT: return "Float8E4M3EXT"; + case SpvFPEncodingFloat8E5M2EXT: return "Float8E5M2EXT"; + default: return "Unknown"; + } +} + +inline const char* SpvCooperativeVectorMatrixLayoutToString(SpvCooperativeVectorMatrixLayout value) { + switch (value) { + case SpvCooperativeVectorMatrixLayoutRowMajorNV: return "RowMajorNV"; + case SpvCooperativeVectorMatrixLayoutColumnMajorNV: return "ColumnMajorNV"; + case SpvCooperativeVectorMatrixLayoutInferencingOptimalNV: return "InferencingOptimalNV"; + case SpvCooperativeVectorMatrixLayoutTrainingOptimalNV: return "TrainingOptimalNV"; + default: return "Unknown"; + } +} + +inline const char* SpvComponentTypeToString(SpvComponentType value) { + switch (value) { + case SpvComponentTypeFloat16NV: return "Float16NV"; + case SpvComponentTypeFloat32NV: return "Float32NV"; + case SpvComponentTypeFloat64NV: return "Float64NV"; + case SpvComponentTypeSignedInt8NV: return "SignedInt8NV"; + case SpvComponentTypeSignedInt16NV: return "SignedInt16NV"; + case SpvComponentTypeSignedInt32NV: return "SignedInt32NV"; + case SpvComponentTypeSignedInt64NV: return "SignedInt64NV"; + case SpvComponentTypeUnsignedInt8NV: return "UnsignedInt8NV"; + case SpvComponentTypeUnsignedInt16NV: return "UnsignedInt16NV"; + case SpvComponentTypeUnsignedInt32NV: return "UnsignedInt32NV"; + case SpvComponentTypeUnsignedInt64NV: return "UnsignedInt64NV"; + case SpvComponentTypeSignedInt8PackedNV: return "SignedInt8PackedNV"; + case SpvComponentTypeUnsignedInt8PackedNV: return "UnsignedInt8PackedNV"; + case SpvComponentTypeFloatE4M3NV: return "FloatE4M3NV"; + case SpvComponentTypeFloatE5M2NV: return "FloatE5M2NV"; default: return "Unknown"; } } @@ -4457,6 +4735,10 @@ inline const char* SpvOpToString(SpvOp value) { case SpvOpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT"; case SpvOpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT"; case SpvOpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT"; + case SpvOpTypeTensorARM: return "OpTypeTensorARM"; + case SpvOpTensorReadARM: return "OpTensorReadARM"; + case SpvOpTensorWriteARM: return "OpTensorWriteARM"; + case SpvOpTensorQuerySizeARM: return "OpTensorQuerySizeARM"; case SpvOpTerminateInvocation: return "OpTerminateInvocation"; case SpvOpTypeUntypedPointerKHR: return "OpTypeUntypedPointerKHR"; case SpvOpUntypedVariableKHR: return "OpUntypedVariableKHR"; @@ -4563,6 +4845,11 @@ inline const char* SpvOpToString(SpvOp value) { case SpvOpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV"; case SpvOpTypeHitObjectNV: return "OpTypeHitObjectNV"; case SpvOpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; + case SpvOpTypeCooperativeVectorNV: return "OpTypeCooperativeVectorNV"; + case SpvOpCooperativeVectorMatrixMulNV: return "OpCooperativeVectorMatrixMulNV"; + case SpvOpCooperativeVectorOuterProductAccumulateNV: return "OpCooperativeVectorOuterProductAccumulateNV"; + case SpvOpCooperativeVectorReduceSumAccumulateNV: return "OpCooperativeVectorReduceSumAccumulateNV"; + case SpvOpCooperativeVectorMatrixMulAddNV: return "OpCooperativeVectorMatrixMulAddNV"; case SpvOpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV"; case SpvOpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT"; case SpvOpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT"; @@ -4570,6 +4857,8 @@ inline const char* SpvOpToString(SpvOp value) { case SpvOpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; case SpvOpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV"; case SpvOpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV"; + case SpvOpCooperativeVectorLoadNV: return "OpCooperativeVectorLoadNV"; + case SpvOpCooperativeVectorStoreNV: return "OpCooperativeVectorStoreNV"; case SpvOpReportIntersectionKHR: return "OpReportIntersectionKHR"; case SpvOpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV"; case SpvOpTerminateRayNV: return "OpTerminateRayNV"; @@ -4579,6 +4868,8 @@ inline const char* SpvOpToString(SpvOp value) { case SpvOpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR"; case SpvOpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR"; case SpvOpExecuteCallableNV: return "OpExecuteCallableNV"; + case SpvOpRayQueryGetClusterIdNV: return "OpRayQueryGetClusterIdNV"; + case SpvOpHitObjectGetClusterIdNV: return "OpHitObjectGetClusterIdNV"; case SpvOpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV"; case SpvOpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV"; case SpvOpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV"; @@ -4613,6 +4904,19 @@ inline const char* SpvOpToString(SpvOp value) { case SpvOpConvertSampledImageToUNV: return "OpConvertSampledImageToUNV"; case SpvOpSamplerImageAddressingModeNV: return "OpSamplerImageAddressingModeNV"; case SpvOpRawAccessChainNV: return "OpRawAccessChainNV"; + case SpvOpRayQueryGetIntersectionSpherePositionNV: return "OpRayQueryGetIntersectionSpherePositionNV"; + case SpvOpRayQueryGetIntersectionSphereRadiusNV: return "OpRayQueryGetIntersectionSphereRadiusNV"; + case SpvOpRayQueryGetIntersectionLSSPositionsNV: return "OpRayQueryGetIntersectionLSSPositionsNV"; + case SpvOpRayQueryGetIntersectionLSSRadiiNV: return "OpRayQueryGetIntersectionLSSRadiiNV"; + case SpvOpRayQueryGetIntersectionLSSHitValueNV: return "OpRayQueryGetIntersectionLSSHitValueNV"; + case SpvOpHitObjectGetSpherePositionNV: return "OpHitObjectGetSpherePositionNV"; + case SpvOpHitObjectGetSphereRadiusNV: return "OpHitObjectGetSphereRadiusNV"; + case SpvOpHitObjectGetLSSPositionsNV: return "OpHitObjectGetLSSPositionsNV"; + case SpvOpHitObjectGetLSSRadiiNV: return "OpHitObjectGetLSSRadiiNV"; + case SpvOpHitObjectIsSphereHitNV: return "OpHitObjectIsSphereHitNV"; + case SpvOpHitObjectIsLSSHitNV: return "OpHitObjectIsLSSHitNV"; + case SpvOpRayQueryIsSphereHitNV: return "OpRayQueryIsSphereHitNV"; + case SpvOpRayQueryIsLSSHitNV: return "OpRayQueryIsLSSHitNV"; case SpvOpSubgroupShuffleINTEL: return "OpSubgroupShuffleINTEL"; case SpvOpSubgroupShuffleDownINTEL: return "OpSubgroupShuffleDownINTEL"; case SpvOpSubgroupShuffleUpINTEL: return "OpSubgroupShuffleUpINTEL"; @@ -4858,7 +5162,19 @@ inline const char* SpvOpToString(SpvOp value) { case SpvOpControlBarrierArriveINTEL: return "OpControlBarrierArriveINTEL"; case SpvOpControlBarrierWaitINTEL: return "OpControlBarrierWaitINTEL"; case SpvOpArithmeticFenceEXT: return "OpArithmeticFenceEXT"; + case SpvOpTaskSequenceCreateINTEL: return "OpTaskSequenceCreateINTEL"; + case SpvOpTaskSequenceAsyncINTEL: return "OpTaskSequenceAsyncINTEL"; + case SpvOpTaskSequenceGetINTEL: return "OpTaskSequenceGetINTEL"; + case SpvOpTaskSequenceReleaseINTEL: return "OpTaskSequenceReleaseINTEL"; + case SpvOpTypeTaskSequenceINTEL: return "OpTypeTaskSequenceINTEL"; case SpvOpSubgroupBlockPrefetchINTEL: return "OpSubgroupBlockPrefetchINTEL"; + case SpvOpSubgroup2DBlockLoadINTEL: return "OpSubgroup2DBlockLoadINTEL"; + case SpvOpSubgroup2DBlockLoadTransformINTEL: return "OpSubgroup2DBlockLoadTransformINTEL"; + case SpvOpSubgroup2DBlockLoadTransposeINTEL: return "OpSubgroup2DBlockLoadTransposeINTEL"; + case SpvOpSubgroup2DBlockPrefetchINTEL: return "OpSubgroup2DBlockPrefetchINTEL"; + case SpvOpSubgroup2DBlockStoreINTEL: return "OpSubgroup2DBlockStoreINTEL"; + case SpvOpSubgroupMatrixMultiplyAccumulateINTEL: return "OpSubgroupMatrixMultiplyAccumulateINTEL"; + case SpvOpBitwiseFunctionINTEL: return "OpBitwiseFunctionINTEL"; case SpvOpGroupIMulKHR: return "OpGroupIMulKHR"; case SpvOpGroupFMulKHR: return "OpGroupFMulKHR"; case SpvOpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR"; @@ -4867,8 +5183,12 @@ inline const char* SpvOpToString(SpvOp value) { case SpvOpGroupLogicalAndKHR: return "OpGroupLogicalAndKHR"; case SpvOpGroupLogicalOrKHR: return "OpGroupLogicalOrKHR"; case SpvOpGroupLogicalXorKHR: return "OpGroupLogicalXorKHR"; + case SpvOpRoundFToTF32INTEL: return "OpRoundFToTF32INTEL"; case SpvOpMaskedGatherINTEL: return "OpMaskedGatherINTEL"; case SpvOpMaskedScatterINTEL: return "OpMaskedScatterINTEL"; + case SpvOpConvertHandleToImageINTEL: return "OpConvertHandleToImageINTEL"; + case SpvOpConvertHandleToSamplerINTEL: return "OpConvertHandleToSamplerINTEL"; + case SpvOpConvertHandleToSampledImageINTEL: return "OpConvertHandleToSampledImageINTEL"; default: return "Unknown"; } } diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.hpp11 b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.hpp11 index a549d03..f77374a 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.hpp11 +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.hpp11 @@ -1,26 +1,10 @@ -// Copyright (c) 2014-2024 The Khronos Group Inc. +// Copyright: 2014-2024 The Khronos Group Inc. +// License: MIT // -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS +// KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS +// SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT +// https://www.khronos.org/registry/ // This header is automatically generated by the same tool that creates // the Binary Section of the SPIR-V specification. @@ -74,6 +58,7 @@ enum class SourceLanguage : unsigned { WGSL = 10, Slang = 11, Zig = 12, + Rust = 13, Max = 0x7fffffff, }; @@ -171,6 +156,8 @@ enum class ExecutionMode : unsigned { SignedZeroInfNanPreserve = 4461, RoundingModeRTE = 4462, RoundingModeRTZ = 4463, + NonCoherentTileAttachmentReadQCOM = 4489, + TileShadingRateQCOM = 4490, EarlyAndLateFragmentTestsAMD = 5017, StencilRefReplacingEXT = 5027, CoalescingAMDX = 5069, @@ -240,6 +227,7 @@ enum class StorageClass : unsigned { Image = 11, StorageBuffer = 12, TileImageEXT = 4172, + TileAttachmentQCOM = 4491, NodePayloadAMDX = 5068, CallableDataKHR = 5328, CallableDataNV = 5328, @@ -378,9 +366,15 @@ enum class ImageChannelDataType : unsigned { Float = 14, UnormInt24 = 15, UnormInt101010_2 = 16, + UnormInt10X6EXT = 17, UnsignedIntRaw10EXT = 19, UnsignedIntRaw12EXT = 20, UnormInt2_101010EXT = 21, + UnsignedInt10X6EXT = 22, + UnsignedInt12X4EXT = 23, + UnsignedInt14X2EXT = 24, + UnormInt12X4EXT = 25, + UnormInt14X2EXT = 26, Max = 0x7fffffff, }; @@ -543,6 +537,7 @@ enum class Decoration : unsigned { MaxByteOffset = 45, AlignmentId = 46, MaxByteOffsetId = 47, + SaturatedToLargestFloat8NormalConversionEXT = 4216, NoSignedWrap = 4469, NoUnsignedWrap = 4470, WeightTextureQCOM = 4487, @@ -712,6 +707,9 @@ enum class BuiltIn : unsigned { DeviceIndex = 4438, ViewIndex = 4440, ShadingRateKHR = 4444, + TileOffsetQCOM = 4492, + TileDimensionQCOM = 4493, + TileApronSizeQCOM = 4494, BaryCoordNoPerspAMD = 4992, BaryCoordNoPerspCentroidAMD = 4993, BaryCoordNoPerspSampleAMD = 4994, @@ -780,12 +778,19 @@ enum class BuiltIn : unsigned { 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, }; @@ -1055,7 +1060,12 @@ enum class Capability : unsigned { TileImageColorReadAccessEXT = 4166, TileImageDepthReadAccessEXT = 4167, TileImageStencilReadAccessEXT = 4168, + TensorsARM = 4174, + StorageTensorArrayDynamicIndexingARM = 4175, + StorageTensorArrayNonUniformIndexingARM = 4176, CooperativeMatrixLayoutsARM = 4201, + Float8EXT = 4212, + Float8CooperativeMatrixEXT = 4213, FragmentShadingRateKHR = 4422, SubgroupBallotKHR = 4423, DrawParameters = 4427, @@ -1091,6 +1101,7 @@ enum class Capability : unsigned { TextureSampleWeightedQCOM = 4484, TextureBoxFilterQCOM = 4485, TextureBlockMatchQCOM = 4486, + TileShadingQCOM = 4495, TextureBlockMatch2QCOM = 4498, Float16ImageAMD = 5008, ImageGatherBiasLodAMD = 5009, @@ -1101,6 +1112,11 @@ enum class Capability : unsigned { ShaderClockKHR = 5055, ShaderEnqueueAMDX = 5067, QuadControlKHR = 5087, + Int4TypeINTEL = 5112, + Int4CooperativeMatrixINTEL = 5114, + BFloat16TypeKHR = 5116, + BFloat16DotProductKHR = 5117, + BFloat16CooperativeMatrixKHR = 5118, SampleMaskOverrideCoverageNV = 5249, GeometryShaderPassthroughNV = 5251, ShaderViewportIndexLayerEXT = 5254, @@ -1167,14 +1183,19 @@ enum class Capability : unsigned { 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, @@ -1244,16 +1265,24 @@ enum class Capability : unsigned { ArithmeticFenceEXT = 6144, FPGAClusterAttributesV2INTEL = 6150, FPGAKernelAttributesv2INTEL = 6161, + TaskSequenceINTEL = 6162, FPMaxErrorINTEL = 6169, FPGALatencyControlINTEL = 6171, FPGAArgumentInterfacesINTEL = 6174, GlobalVariableHostAccessINTEL = 6187, GlobalVariableFPGADecorationsINTEL = 6189, SubgroupBufferPrefetchINTEL = 6220, + Subgroup2DBlockIOINTEL = 6228, + Subgroup2DBlockTransformINTEL = 6229, + Subgroup2DBlockTransposeINTEL = 6230, + SubgroupMatrixMultiplyAccumulateINTEL = 6236, + TernaryBitwiseFunctionINTEL = 6241, GroupUniformArithmeticKHR = 6400, + TensorFloat32RoundingINTEL = 6425, MaskedGatherScatterINTEL = 6427, CacheControlsINTEL = 6441, RegisterLimitsINTEL = 6460, + BindlessImagesINTEL = 6528, Max = 0x7fffffff, }; @@ -1266,6 +1295,7 @@ enum class RayFlagsShift : unsigned { CullFrontFacingTrianglesKHR = 5, CullOpaqueKHR = 6, CullNoOpaqueKHR = 7, + SkipBuiltinPrimitivesNV = 8, SkipTrianglesKHR = 8, SkipAABBsKHR = 9, ForceOpacityMicromap2StateEXT = 10, @@ -1282,6 +1312,7 @@ enum class RayFlagsMask : unsigned { CullFrontFacingTrianglesKHR = 0x00000020, CullOpaqueKHR = 0x00000040, CullNoOpaqueKHR = 0x00000080, + SkipBuiltinPrimitivesNV = 0x00000100, SkipTrianglesKHR = 0x00000100, SkipAABBsKHR = 0x00000200, ForceOpacityMicromap2StateEXT = 0x00000400, @@ -1428,6 +1459,24 @@ enum class TensorAddressingOperandsMask : unsigned { DecodeFunc = 0x00000002, }; +enum class TensorOperandsShift : unsigned { + NontemporalARM = 0, + OutOfBoundsValueARM = 1, + MakeElementAvailableARM = 2, + MakeElementVisibleARM = 3, + NonPrivateElementARM = 4, + Max = 0x7fffffff, +}; + +enum class TensorOperandsMask : unsigned { + MaskNone = 0, + NontemporalARM = 0x00000001, + OutOfBoundsValueARM = 0x00000002, + MakeElementAvailableARM = 0x00000004, + MakeElementVisibleARM = 0x00000008, + NonPrivateElementARM = 0x00000010, +}; + enum class InitializationModeQualifier : unsigned { InitOnDeviceReprogramINTEL = 0, InitOnDeviceResetINTEL = 1, @@ -1464,6 +1513,42 @@ enum class NamedMaximumNumberOfRegisters : unsigned { 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, @@ -1477,6 +1562,36 @@ enum class RawAccessChainOperandsMask : unsigned { }; enum class FPEncoding : unsigned { + BFloat16KHR = 0, + Float8E4M3EXT = 4214, + Float8E5M2EXT = 4215, + 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, }; @@ -1828,6 +1943,10 @@ enum class Op : unsigned { OpColorAttachmentReadEXT = 4160, OpDepthAttachmentReadEXT = 4161, OpStencilAttachmentReadEXT = 4162, + OpTypeTensorARM = 4163, + OpTensorReadARM = 4164, + OpTensorWriteARM = 4165, + OpTensorQuerySizeARM = 4166, OpTerminateInvocation = 4416, OpTypeUntypedPointerKHR = 4417, OpUntypedVariableKHR = 4418, @@ -1940,6 +2059,11 @@ enum class Op : unsigned { OpReorderThreadWithHintNV = 5280, OpTypeHitObjectNV = 5281, OpImageSampleFootprintNV = 5283, + OpTypeCooperativeVectorNV = 5288, + OpCooperativeVectorMatrixMulNV = 5289, + OpCooperativeVectorOuterProductAccumulateNV = 5290, + OpCooperativeVectorReduceSumAccumulateNV = 5291, + OpCooperativeVectorMatrixMulAddNV = 5292, OpCooperativeMatrixConvertNV = 5293, OpEmitMeshTasksEXT = 5294, OpSetMeshOutputsEXT = 5295, @@ -1947,6 +2071,8 @@ enum class Op : unsigned { OpWritePackedPrimitiveIndices4x8NV = 5299, OpFetchMicroTriangleVertexPositionNV = 5300, OpFetchMicroTriangleVertexBarycentricNV = 5301, + OpCooperativeVectorLoadNV = 5302, + OpCooperativeVectorStoreNV = 5303, OpReportIntersectionKHR = 5334, OpReportIntersectionNV = 5334, OpIgnoreIntersectionNV = 5335, @@ -1958,6 +2084,8 @@ enum class Op : unsigned { OpTypeAccelerationStructureKHR = 5341, OpTypeAccelerationStructureNV = 5341, OpExecuteCallableNV = 5344, + OpRayQueryGetClusterIdNV = 5345, + OpHitObjectGetClusterIdNV = 5346, OpTypeCooperativeMatrixNV = 5358, OpCooperativeMatrixLoadNV = 5359, OpCooperativeMatrixStoreNV = 5360, @@ -1993,6 +2121,19 @@ enum class Op : unsigned { 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, @@ -2240,7 +2381,19 @@ enum class Op : unsigned { OpControlBarrierArriveINTEL = 6142, OpControlBarrierWaitINTEL = 6143, OpArithmeticFenceEXT = 6145, + OpTaskSequenceCreateINTEL = 6163, + OpTaskSequenceAsyncINTEL = 6164, + OpTaskSequenceGetINTEL = 6165, + OpTaskSequenceReleaseINTEL = 6166, + OpTypeTaskSequenceINTEL = 6199, OpSubgroupBlockPrefetchINTEL = 6221, + OpSubgroup2DBlockLoadINTEL = 6231, + OpSubgroup2DBlockLoadTransformINTEL = 6232, + OpSubgroup2DBlockLoadTransposeINTEL = 6233, + OpSubgroup2DBlockPrefetchINTEL = 6234, + OpSubgroup2DBlockStoreINTEL = 6235, + OpSubgroupMatrixMultiplyAccumulateINTEL = 6237, + OpBitwiseFunctionINTEL = 6242, OpGroupIMulKHR = 6401, OpGroupFMulKHR = 6402, OpGroupBitwiseAndKHR = 6403, @@ -2249,8 +2402,12 @@ enum class Op : unsigned { OpGroupLogicalAndKHR = 6406, OpGroupLogicalOrKHR = 6407, OpGroupLogicalXorKHR = 6408, + OpRoundFToTF32INTEL = 6426, OpMaskedGatherINTEL = 6428, OpMaskedScatterINTEL = 6429, + OpConvertHandleToImageINTEL = 6529, + OpConvertHandleToSamplerINTEL = 6530, + OpConvertHandleToSampledImageINTEL = 6531, Max = 0x7fffffff, }; @@ -2609,6 +2766,10 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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::OpTypeTensorARM: *hasResult = true; *hasResultType = false; break; + case Op::OpTensorReadARM: *hasResult = true; *hasResultType = true; break; + case Op::OpTensorWriteARM: *hasResult = false; *hasResultType = false; break; + case Op::OpTensorQuerySizeARM: *hasResult = true; *hasResultType = true; break; case Op::OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; case Op::OpTypeUntypedPointerKHR: *hasResult = true; *hasResultType = false; break; case Op::OpUntypedVariableKHR: *hasResult = true; *hasResultType = true; break; @@ -2715,6 +2876,11 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break; case Op::OpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break; case Op::OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break; + case Op::OpTypeCooperativeVectorNV: *hasResult = true; *hasResultType = false; break; + case Op::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; @@ -2722,6 +2888,8 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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; @@ -2731,6 +2899,8 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break; case Op::OpTypeAccelerationStructureKHR: *hasResult = true; *hasResultType = false; break; case Op::OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; + case Op::OpRayQueryGetClusterIdNV: *hasResult = true; *hasResultType = true; break; + case Op::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; @@ -2765,6 +2935,19 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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; @@ -2791,7 +2974,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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 = 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; @@ -3010,7 +3193,19 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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::OpTaskSequenceCreateINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpTaskSequenceAsyncINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpTaskSequenceGetINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpTaskSequenceReleaseINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpTypeTaskSequenceINTEL: *hasResult = true; *hasResultType = false; break; case Op::OpSubgroupBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpSubgroup2DBlockLoadINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpSubgroup2DBlockLoadTransformINTEL: *hasResult = false; *hasResultType = false; break; + 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::OpBitwiseFunctionINTEL: *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; @@ -3019,8 +3214,12 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case Op::OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break; case Op::OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break; case Op::OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break; + case Op::OpRoundFToTF32INTEL: *hasResult = true; *hasResultType = true; break; case Op::OpMaskedGatherINTEL: *hasResult = true; *hasResultType = true; break; case Op::OpMaskedScatterINTEL: *hasResult = false; *hasResultType = false; break; + case Op::OpConvertHandleToImageINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertHandleToSamplerINTEL: *hasResult = true; *hasResultType = true; break; + case Op::OpConvertHandleToSampledImageINTEL: *hasResult = true; *hasResultType = true; break; } } inline const char* SourceLanguageToString(SourceLanguage value) { @@ -3038,6 +3237,7 @@ inline const char* SourceLanguageToString(SourceLanguage value) { case SourceLanguage::WGSL: return "WGSL"; case SourceLanguage::Slang: return "Slang"; case SourceLanguage::Zig: return "Zig"; + case SourceLanguage::Rust: return "Rust"; default: return "Unknown"; } } @@ -3135,6 +3335,8 @@ inline const char* ExecutionModeToString(ExecutionMode value) { case ExecutionMode::SignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; case ExecutionMode::RoundingModeRTE: return "RoundingModeRTE"; case ExecutionMode::RoundingModeRTZ: return "RoundingModeRTZ"; + case ExecutionMode::NonCoherentTileAttachmentReadQCOM: return "NonCoherentTileAttachmentReadQCOM"; + case ExecutionMode::TileShadingRateQCOM: return "TileShadingRateQCOM"; case ExecutionMode::EarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD"; case ExecutionMode::StencilRefReplacingEXT: return "StencilRefReplacingEXT"; case ExecutionMode::CoalescingAMDX: return "CoalescingAMDX"; @@ -3201,6 +3403,7 @@ inline const char* StorageClassToString(StorageClass value) { case StorageClass::Image: return "Image"; case StorageClass::StorageBuffer: return "StorageBuffer"; case StorageClass::TileImageEXT: return "TileImageEXT"; + case StorageClass::TileAttachmentQCOM: return "TileAttachmentQCOM"; case StorageClass::NodePayloadAMDX: return "NodePayloadAMDX"; case StorageClass::CallableDataKHR: return "CallableDataKHR"; case StorageClass::IncomingCallableDataKHR: return "IncomingCallableDataKHR"; @@ -3344,9 +3547,15 @@ inline const char* ImageChannelDataTypeToString(ImageChannelDataType value) { case ImageChannelDataType::Float: return "Float"; case ImageChannelDataType::UnormInt24: return "UnormInt24"; case ImageChannelDataType::UnormInt101010_2: return "UnormInt101010_2"; + case ImageChannelDataType::UnormInt10X6EXT: return "UnormInt10X6EXT"; case ImageChannelDataType::UnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT"; case ImageChannelDataType::UnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT"; case ImageChannelDataType::UnormInt2_101010EXT: return "UnormInt2_101010EXT"; + case ImageChannelDataType::UnsignedInt10X6EXT: return "UnsignedInt10X6EXT"; + case ImageChannelDataType::UnsignedInt12X4EXT: return "UnsignedInt12X4EXT"; + case ImageChannelDataType::UnsignedInt14X2EXT: return "UnsignedInt14X2EXT"; + case ImageChannelDataType::UnormInt12X4EXT: return "UnormInt12X4EXT"; + case ImageChannelDataType::UnormInt14X2EXT: return "UnormInt14X2EXT"; default: return "Unknown"; } } @@ -3443,6 +3652,7 @@ inline const char* DecorationToString(Decoration value) { case Decoration::MaxByteOffset: return "MaxByteOffset"; case Decoration::AlignmentId: return "AlignmentId"; case Decoration::MaxByteOffsetId: return "MaxByteOffsetId"; + case Decoration::SaturatedToLargestFloat8NormalConversionEXT: return "SaturatedToLargestFloat8NormalConversionEXT"; case Decoration::NoSignedWrap: return "NoSignedWrap"; case Decoration::NoUnsignedWrap: return "NoUnsignedWrap"; case Decoration::WeightTextureQCOM: return "WeightTextureQCOM"; @@ -3602,6 +3812,9 @@ inline const char* BuiltInToString(BuiltIn value) { case BuiltIn::DeviceIndex: return "DeviceIndex"; case BuiltIn::ViewIndex: return "ViewIndex"; case BuiltIn::ShadingRateKHR: return "ShadingRateKHR"; + case BuiltIn::TileOffsetQCOM: return "TileOffsetQCOM"; + case BuiltIn::TileDimensionQCOM: return "TileDimensionQCOM"; + case BuiltIn::TileApronSizeQCOM: return "TileApronSizeQCOM"; case BuiltIn::BaryCoordNoPerspAMD: return "BaryCoordNoPerspAMD"; case BuiltIn::BaryCoordNoPerspCentroidAMD: return "BaryCoordNoPerspCentroidAMD"; case BuiltIn::BaryCoordNoPerspSampleAMD: return "BaryCoordNoPerspSampleAMD"; @@ -3653,12 +3866,19 @@ inline const char* BuiltInToString(BuiltIn value) { 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"; } @@ -3775,7 +3995,12 @@ inline const char* CapabilityToString(Capability value) { case Capability::TileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT"; case Capability::TileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT"; case Capability::TileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT"; + case Capability::TensorsARM: return "TensorsARM"; + case Capability::StorageTensorArrayDynamicIndexingARM: return "StorageTensorArrayDynamicIndexingARM"; + case Capability::StorageTensorArrayNonUniformIndexingARM: return "StorageTensorArrayNonUniformIndexingARM"; case Capability::CooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM"; + case Capability::Float8EXT: return "Float8EXT"; + case Capability::Float8CooperativeMatrixEXT: return "Float8CooperativeMatrixEXT"; case Capability::FragmentShadingRateKHR: return "FragmentShadingRateKHR"; case Capability::SubgroupBallotKHR: return "SubgroupBallotKHR"; case Capability::DrawParameters: return "DrawParameters"; @@ -3809,6 +4034,7 @@ inline const char* CapabilityToString(Capability value) { case Capability::TextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM"; case Capability::TextureBoxFilterQCOM: return "TextureBoxFilterQCOM"; case Capability::TextureBlockMatchQCOM: return "TextureBlockMatchQCOM"; + case Capability::TileShadingQCOM: return "TileShadingQCOM"; case Capability::TextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM"; case Capability::Float16ImageAMD: return "Float16ImageAMD"; case Capability::ImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD"; @@ -3819,6 +4045,11 @@ inline const char* CapabilityToString(Capability value) { case Capability::ShaderClockKHR: return "ShaderClockKHR"; case Capability::ShaderEnqueueAMDX: return "ShaderEnqueueAMDX"; case Capability::QuadControlKHR: return "QuadControlKHR"; + case Capability::Int4TypeINTEL: return "Int4TypeINTEL"; + case Capability::Int4CooperativeMatrixINTEL: return "Int4CooperativeMatrixINTEL"; + case Capability::BFloat16TypeKHR: return "BFloat16TypeKHR"; + case Capability::BFloat16DotProductKHR: return "BFloat16DotProductKHR"; + case Capability::BFloat16CooperativeMatrixKHR: return "BFloat16CooperativeMatrixKHR"; case Capability::SampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV"; case Capability::GeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV"; case Capability::ShaderViewportIndexLayerEXT: return "ShaderViewportIndexLayerEXT"; @@ -3864,14 +4095,19 @@ inline const char* CapabilityToString(Capability value) { 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"; @@ -3936,16 +4172,24 @@ inline const char* CapabilityToString(Capability value) { case Capability::ArithmeticFenceEXT: return "ArithmeticFenceEXT"; case Capability::FPGAClusterAttributesV2INTEL: return "FPGAClusterAttributesV2INTEL"; case Capability::FPGAKernelAttributesv2INTEL: return "FPGAKernelAttributesv2INTEL"; + case Capability::TaskSequenceINTEL: return "TaskSequenceINTEL"; 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::TernaryBitwiseFunctionINTEL: return "TernaryBitwiseFunctionINTEL"; case Capability::GroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR"; + case Capability::TensorFloat32RoundingINTEL: return "TensorFloat32RoundingINTEL"; case Capability::MaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL"; case Capability::CacheControlsINTEL: return "CacheControlsINTEL"; case Capability::RegisterLimitsINTEL: return "RegisterLimitsINTEL"; + case Capability::BindlessImagesINTEL: return "BindlessImagesINTEL"; default: return "Unknown"; } } @@ -4100,6 +4344,40 @@ inline const char* NamedMaximumNumberOfRegistersToString(NamedMaximumNumberOfReg inline const char* FPEncodingToString(FPEncoding value) { switch (value) { + case FPEncoding::BFloat16KHR: return "BFloat16KHR"; + case FPEncoding::Float8E4M3EXT: return "Float8E4M3EXT"; + case FPEncoding::Float8E5M2EXT: return "Float8E5M2EXT"; + 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"; } } @@ -4453,6 +4731,10 @@ inline const char* OpToString(Op value) { case Op::OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT"; case Op::OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT"; case Op::OpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT"; + case Op::OpTypeTensorARM: return "OpTypeTensorARM"; + case Op::OpTensorReadARM: return "OpTensorReadARM"; + case Op::OpTensorWriteARM: return "OpTensorWriteARM"; + case Op::OpTensorQuerySizeARM: return "OpTensorQuerySizeARM"; case Op::OpTerminateInvocation: return "OpTerminateInvocation"; case Op::OpTypeUntypedPointerKHR: return "OpTypeUntypedPointerKHR"; case Op::OpUntypedVariableKHR: return "OpUntypedVariableKHR"; @@ -4559,6 +4841,11 @@ inline const char* OpToString(Op value) { 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"; @@ -4566,6 +4853,8 @@ inline const char* OpToString(Op value) { 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"; @@ -4575,6 +4864,8 @@ inline const char* OpToString(Op value) { 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"; @@ -4609,6 +4900,19 @@ inline const char* OpToString(Op value) { 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"; @@ -4854,7 +5158,19 @@ inline const char* OpToString(Op value) { case Op::OpControlBarrierArriveINTEL: return "OpControlBarrierArriveINTEL"; case Op::OpControlBarrierWaitINTEL: return "OpControlBarrierWaitINTEL"; case Op::OpArithmeticFenceEXT: return "OpArithmeticFenceEXT"; + case Op::OpTaskSequenceCreateINTEL: return "OpTaskSequenceCreateINTEL"; + case Op::OpTaskSequenceAsyncINTEL: return "OpTaskSequenceAsyncINTEL"; + case Op::OpTaskSequenceGetINTEL: return "OpTaskSequenceGetINTEL"; + case Op::OpTaskSequenceReleaseINTEL: return "OpTaskSequenceReleaseINTEL"; + case Op::OpTypeTaskSequenceINTEL: return "OpTypeTaskSequenceINTEL"; 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::OpBitwiseFunctionINTEL: return "OpBitwiseFunctionINTEL"; case Op::OpGroupIMulKHR: return "OpGroupIMulKHR"; case Op::OpGroupFMulKHR: return "OpGroupFMulKHR"; case Op::OpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR"; @@ -4863,8 +5179,12 @@ inline const char* OpToString(Op value) { case Op::OpGroupLogicalAndKHR: return "OpGroupLogicalAndKHR"; case Op::OpGroupLogicalOrKHR: return "OpGroupLogicalOrKHR"; case Op::OpGroupLogicalXorKHR: return "OpGroupLogicalXorKHR"; + case Op::OpRoundFToTF32INTEL: return "OpRoundFToTF32INTEL"; case Op::OpMaskedGatherINTEL: return "OpMaskedGatherINTEL"; case Op::OpMaskedScatterINTEL: return "OpMaskedScatterINTEL"; + case Op::OpConvertHandleToImageINTEL: return "OpConvertHandleToImageINTEL"; + case Op::OpConvertHandleToSamplerINTEL: return "OpConvertHandleToSamplerINTEL"; + case Op::OpConvertHandleToSampledImageINTEL: return "OpConvertHandleToSampledImageINTEL"; default: return "Unknown"; } } @@ -4925,6 +5245,14 @@ constexpr TensorAddressingOperandsMask operator|(TensorAddressingOperandsMask 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) { return TensorAddressingOperandsMask(~unsigned(a)); } +constexpr TensorOperandsMask operator|(TensorOperandsMask a, TensorOperandsMask b) { return TensorOperandsMask(unsigned(a) | unsigned(b)); } +constexpr TensorOperandsMask operator&(TensorOperandsMask a, TensorOperandsMask b) { return TensorOperandsMask(unsigned(a) & unsigned(b)); } +constexpr TensorOperandsMask operator^(TensorOperandsMask a, TensorOperandsMask b) { return TensorOperandsMask(unsigned(a) ^ unsigned(b)); } +constexpr TensorOperandsMask operator~(TensorOperandsMask a) { return TensorOperandsMask(~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)); } diff --git a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.json b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.json index e9cbf74..db7ae25 100644 --- a/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.json +++ b/libs/bgfx/3rdparty/spirv-headers/include/spirv/unified1/spirv.json @@ -6,29 +6,13 @@ "Comment": [ [ - "Copyright (c) 2014-2024 The Khronos Group Inc.", + "Copyright: 2014-2024 The Khronos Group Inc.", + "License: MIT", "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and/or associated documentation files (the \"Materials\"),", - "to deal in the Materials without restriction, including without limitation", - "the rights to use, copy, modify, merge, publish, distribute, sublicense,", - "and/or sell copies of the Materials, and to permit persons to whom the", - "Materials are furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included in", - "all copies or substantial portions of the Materials.", - "", - "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS", - "STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND", - "HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/", - "", - "THE MATERIALS ARE PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS", - "OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL", - "THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING", - "FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS", - "IN THE MATERIALS." + "MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS", + "KHRONOS STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS", + "SPECIFICATIONS AND HEADER INFORMATION ARE LOCATED AT", + "https://www.khronos.org/registry/" ], [ "This header is automatically generated by the same tool that creates", @@ -80,7 +64,8 @@ "NZSL": 9, "WGSL": 10, "Slang": 11, - "Zig": 12 + "Zig": 12, + "Rust": 13 } }, { @@ -190,6 +175,8 @@ "SignedZeroInfNanPreserve": 4461, "RoundingModeRTE": 4462, "RoundingModeRTZ": 4463, + "NonCoherentTileAttachmentReadQCOM": 4489, + "TileShadingRateQCOM": 4490, "EarlyAndLateFragmentTestsAMD": 5017, "StencilRefReplacingEXT": 5027, "CoalescingAMDX": 5069, @@ -262,6 +249,7 @@ "Image": 11, "StorageBuffer": 12, "TileImageEXT": 4172, + "TileAttachmentQCOM": 4491, "NodePayloadAMDX": 5068, "CallableDataKHR": 5328, "CallableDataNV": 5328, @@ -418,9 +406,15 @@ "Float": 14, "UnormInt24": 15, "UnormInt101010_2": 16, + "UnormInt10X6EXT": 17, "UnsignedIntRaw10EXT": 19, "UnsignedIntRaw12EXT": 20, - "UnormInt2_101010EXT": 21 + "UnormInt2_101010EXT": 21, + "UnsignedInt10X6EXT": 22, + "UnsignedInt12X4EXT": 23, + "UnsignedInt14X2EXT": 24, + "UnormInt12X4EXT": 25, + "UnormInt14X2EXT": 26 } }, { @@ -566,6 +560,7 @@ "MaxByteOffset": 45, "AlignmentId": 46, "MaxByteOffsetId": 47, + "SaturatedToLargestFloat8NormalConversionEXT": 4216, "NoSignedWrap": 4469, "NoUnsignedWrap": 4470, "WeightTextureQCOM": 4487, @@ -738,6 +733,9 @@ "DeviceIndex": 4438, "ViewIndex": 4440, "ShadingRateKHR": 4444, + "TileOffsetQCOM": 4492, + "TileDimensionQCOM": 4493, + "TileApronSizeQCOM": 4494, "BaryCoordNoPerspAMD": 4992, "BaryCoordNoPerspCentroidAMD": 4993, "BaryCoordNoPerspSampleAMD": 4994, @@ -806,12 +804,19 @@ "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 } }, @@ -1031,7 +1036,12 @@ "TileImageColorReadAccessEXT": 4166, "TileImageDepthReadAccessEXT": 4167, "TileImageStencilReadAccessEXT": 4168, + "TensorsARM": 4174, + "StorageTensorArrayDynamicIndexingARM": 4175, + "StorageTensorArrayNonUniformIndexingARM": 4176, "CooperativeMatrixLayoutsARM": 4201, + "Float8EXT": 4212, + "Float8CooperativeMatrixEXT": 4213, "FragmentShadingRateKHR": 4422, "SubgroupBallotKHR": 4423, "DrawParameters": 4427, @@ -1067,6 +1077,7 @@ "TextureSampleWeightedQCOM": 4484, "TextureBoxFilterQCOM": 4485, "TextureBlockMatchQCOM": 4486, + "TileShadingQCOM": 4495, "TextureBlockMatch2QCOM": 4498, "Float16ImageAMD": 5008, "ImageGatherBiasLodAMD": 5009, @@ -1077,6 +1088,11 @@ "ShaderClockKHR": 5055, "ShaderEnqueueAMDX": 5067, "QuadControlKHR": 5087, + "Int4TypeINTEL": 5112, + "Int4CooperativeMatrixINTEL": 5114, + "BFloat16TypeKHR": 5116, + "BFloat16DotProductKHR": 5117, + "BFloat16CooperativeMatrixKHR": 5118, "SampleMaskOverrideCoverageNV": 5249, "GeometryShaderPassthroughNV": 5251, "ShaderViewportIndexLayerEXT": 5254, @@ -1143,14 +1159,19 @@ "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, @@ -1220,16 +1241,24 @@ "ArithmeticFenceEXT": 6144, "FPGAClusterAttributesV2INTEL": 6150, "FPGAKernelAttributesv2INTEL": 6161, + "TaskSequenceINTEL": 6162, "FPMaxErrorINTEL": 6169, "FPGALatencyControlINTEL": 6171, "FPGAArgumentInterfacesINTEL": 6174, "GlobalVariableHostAccessINTEL": 6187, "GlobalVariableFPGADecorationsINTEL": 6189, "SubgroupBufferPrefetchINTEL": 6220, + "Subgroup2DBlockIOINTEL": 6228, + "Subgroup2DBlockTransformINTEL": 6229, + "Subgroup2DBlockTransposeINTEL": 6230, + "SubgroupMatrixMultiplyAccumulateINTEL": 6236, + "TernaryBitwiseFunctionINTEL": 6241, "GroupUniformArithmeticKHR": 6400, + "TensorFloat32RoundingINTEL": 6425, "MaskedGatherScatterINTEL": 6427, "CacheControlsINTEL": 6441, - "RegisterLimitsINTEL": 6460 + "RegisterLimitsINTEL": 6460, + "BindlessImagesINTEL": 6528 } }, { @@ -1245,6 +1274,7 @@ "CullFrontFacingTrianglesKHR": 5, "CullOpaqueKHR": 6, "CullNoOpaqueKHR": 7, + "SkipBuiltinPrimitivesNV": 8, "SkipTrianglesKHR": 8, "SkipAABBsKHR": 9, "ForceOpacityMicromap2StateEXT": 10 @@ -1406,6 +1436,18 @@ "DecodeFunc": 1 } }, + { + "Name": "TensorOperands", + "Type": "Bit", + "Values": + { + "NontemporalARM": 0, + "OutOfBoundsValueARM": 1, + "MakeElementAvailableARM": 2, + "MakeElementVisibleARM": 3, + "NonPrivateElementARM": 4 + } + }, { "Name": "InitializationModeQualifier", "Type": "Value", @@ -1457,6 +1499,27 @@ "AutoINTEL": 0 } }, + { + "Name": "MatrixMultiplyAccumulateOperands", + "Type": "Bit", + "Values": + { + "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 + } + }, { "Name": "RawAccessChainOperands", "Type": "Bit", @@ -1471,6 +1534,42 @@ "Type": "Value", "Values": { + "BFloat16KHR": 0, + "Float8E4M3EXT": 4214, + "Float8E5M2EXT": 4215 + } + }, + { + "Name": "CooperativeVectorMatrixLayout", + "Type": "Value", + "Values": + { + "RowMajorNV": 0, + "ColumnMajorNV": 1, + "InferencingOptimalNV": 2, + "TrainingOptimalNV": 3 + } + }, + { + "Name": "ComponentType", + "Type": "Value", + "Values": + { + "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 } }, { @@ -1825,6 +1924,10 @@ "OpColorAttachmentReadEXT": 4160, "OpDepthAttachmentReadEXT": 4161, "OpStencilAttachmentReadEXT": 4162, + "OpTypeTensorARM": 4163, + "OpTensorReadARM": 4164, + "OpTensorWriteARM": 4165, + "OpTensorQuerySizeARM": 4166, "OpTerminateInvocation": 4416, "OpTypeUntypedPointerKHR": 4417, "OpUntypedVariableKHR": 4418, @@ -1937,6 +2040,11 @@ "OpReorderThreadWithHintNV": 5280, "OpTypeHitObjectNV": 5281, "OpImageSampleFootprintNV": 5283, + "OpTypeCooperativeVectorNV": 5288, + "OpCooperativeVectorMatrixMulNV": 5289, + "OpCooperativeVectorOuterProductAccumulateNV": 5290, + "OpCooperativeVectorReduceSumAccumulateNV": 5291, + "OpCooperativeVectorMatrixMulAddNV": 5292, "OpCooperativeMatrixConvertNV": 5293, "OpEmitMeshTasksEXT": 5294, "OpSetMeshOutputsEXT": 5295, @@ -1944,6 +2052,8 @@ "OpWritePackedPrimitiveIndices4x8NV": 5299, "OpFetchMicroTriangleVertexPositionNV": 5300, "OpFetchMicroTriangleVertexBarycentricNV": 5301, + "OpCooperativeVectorLoadNV": 5302, + "OpCooperativeVectorStoreNV": 5303, "OpReportIntersectionKHR": 5334, "OpReportIntersectionNV": 5334, "OpIgnoreIntersectionNV": 5335, @@ -1955,6 +2065,8 @@ "OpTypeAccelerationStructureKHR": 5341, "OpTypeAccelerationStructureNV": 5341, "OpExecuteCallableNV": 5344, + "OpRayQueryGetClusterIdNV": 5345, + "OpHitObjectGetClusterIdNV": 5346, "OpTypeCooperativeMatrixNV": 5358, "OpCooperativeMatrixLoadNV": 5359, "OpCooperativeMatrixStoreNV": 5360, @@ -1990,6 +2102,19 @@ "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, @@ -2237,7 +2362,19 @@ "OpControlBarrierArriveINTEL": 6142, "OpControlBarrierWaitINTEL": 6143, "OpArithmeticFenceEXT": 6145, + "OpTaskSequenceCreateINTEL": 6163, + "OpTaskSequenceAsyncINTEL": 6164, + "OpTaskSequenceGetINTEL": 6165, + "OpTaskSequenceReleaseINTEL": 6166, + "OpTypeTaskSequenceINTEL": 6199, "OpSubgroupBlockPrefetchINTEL": 6221, + "OpSubgroup2DBlockLoadINTEL": 6231, + "OpSubgroup2DBlockLoadTransformINTEL": 6232, + "OpSubgroup2DBlockLoadTransposeINTEL": 6233, + "OpSubgroup2DBlockPrefetchINTEL": 6234, + "OpSubgroup2DBlockStoreINTEL": 6235, + "OpSubgroupMatrixMultiplyAccumulateINTEL": 6237, + "OpBitwiseFunctionINTEL": 6242, "OpGroupIMulKHR": 6401, "OpGroupFMulKHR": 6402, "OpGroupBitwiseAndKHR": 6403, @@ -2246,8 +2383,12 @@ "OpGroupLogicalAndKHR": 6406, "OpGroupLogicalOrKHR": 6407, "OpGroupLogicalXorKHR": 6408, + "OpRoundFToTF32INTEL": 6426, "OpMaskedGatherINTEL": 6428, - "OpMaskedScatterINTEL": 6429 + "OpMaskedScatterINTEL": 6429, + "OpConvertHandleToImageINTEL": 6529, + "OpConvertHandleToSamplerINTEL": 6530, + "OpConvertHandleToSampledImageINTEL": 6531 } } ] diff --git a/libs/bgfx/3rdparty/spirv-tools/include/generated/DebugInfo.h b/libs/bgfx/3rdparty/spirv-tools/include/generated/DebugInfo.h index a37e3a9..01cf969 100644 --- a/libs/bgfx/3rdparty/spirv-tools/include/generated/DebugInfo.h +++ b/libs/bgfx/3rdparty/spirv-tools/include/generated/DebugInfo.h @@ -1,26 +1,10 @@ -// Copyright (c) 2017-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. +// Copyright: 2017-2024 The Khronos Group Inc. +// License: MIT // // 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. #ifndef SPIRV_EXTINST_DebugInfo_H_ #define SPIRV_EXTINST_DebugInfo_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/include/generated/NonSemanticShaderDebugInfo100.h b/libs/bgfx/3rdparty/spirv-tools/include/generated/NonSemanticShaderDebugInfo100.h index e09368e..00e967c 100644 --- a/libs/bgfx/3rdparty/spirv-tools/include/generated/NonSemanticShaderDebugInfo100.h +++ b/libs/bgfx/3rdparty/spirv-tools/include/generated/NonSemanticShaderDebugInfo100.h @@ -1,26 +1,10 @@ -// Copyright (c) 2018-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. +// Copyright: 2018-2024 The Khronos Group Inc. +// License: MIT // // 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. #ifndef SPIRV_EXTINST_NonSemanticShaderDebugInfo100_H_ #define SPIRV_EXTINST_NonSemanticShaderDebugInfo100_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/include/generated/OpenCLDebugInfo100.h b/libs/bgfx/3rdparty/spirv-tools/include/generated/OpenCLDebugInfo100.h index 1da0099..1e2f91c 100644 --- a/libs/bgfx/3rdparty/spirv-tools/include/generated/OpenCLDebugInfo100.h +++ b/libs/bgfx/3rdparty/spirv-tools/include/generated/OpenCLDebugInfo100.h @@ -1,26 +1,10 @@ -// Copyright (c) 2018-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. +// Copyright: 2018-2024 The Khronos Group Inc. +// License: MIT // // 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. #ifndef SPIRV_EXTINST_OpenCLDebugInfo100_H_ #define SPIRV_EXTINST_OpenCLDebugInfo100_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/include/generated/build-version.inc b/libs/bgfx/3rdparty/spirv-tools/include/generated/build-version.inc index 5940312..acbd6d5 100644 --- a/libs/bgfx/3rdparty/spirv-tools/include/generated/build-version.inc +++ b/libs/bgfx/3rdparty/spirv-tools/include/generated/build-version.inc @@ -1 +1 @@ -"v2024.4", "SPIRV-Tools v2024.4 v2024.4.rc2-10-g7812970d" +"v2025.2", "SPIRV-Tools v2025.2 v2025.2.rc2-58-g007a1f89" diff --git a/libs/bgfx/3rdparty/spirv-tools/include/generated/core_tables_body.inc b/libs/bgfx/3rdparty/spirv-tools/include/generated/core_tables_body.inc new file mode 100644 index 0000000..7de02d5 --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/include/generated/core_tables_body.inc @@ -0,0 +1,9736 @@ +// Returns the name of an extension, as an index into kStrings +IndexRange ExtensionToIndexRange(Extension extension) { + switch(extension) { + case Extension::kSPV_AMDX_shader_enqueue: return IR(0, 24); + case Extension::kSPV_AMD_gcn_shader: return IR(24, 19); + case Extension::kSPV_AMD_gpu_shader_half_float: return IR(43, 30); + case Extension::kSPV_AMD_gpu_shader_half_float_fetch: return IR(73, 36); + case Extension::kSPV_AMD_gpu_shader_int16: return IR(109, 25); + case Extension::kSPV_AMD_shader_ballot: return IR(134, 22); + case Extension::kSPV_AMD_shader_early_and_late_fragment_tests: return IR(156, 45); + case Extension::kSPV_AMD_shader_explicit_vertex_parameter: return IR(201, 41); + case Extension::kSPV_AMD_shader_fragment_mask: return IR(242, 29); + case Extension::kSPV_AMD_shader_image_load_store_lod: return IR(271, 36); + case Extension::kSPV_AMD_shader_trinary_minmax: return IR(307, 30); + case Extension::kSPV_AMD_texture_gather_bias_lod: return IR(337, 32); + case Extension::kSPV_ARM_cooperative_matrix_layouts: return IR(369, 35); + case Extension::kSPV_ARM_core_builtins: return IR(404, 22); + case Extension::kSPV_ARM_tensors: return IR(426, 16); + case Extension::kSPV_EXT_arithmetic_fence: return IR(442, 25); + case Extension::kSPV_EXT_demote_to_helper_invocation: return IR(467, 36); + case Extension::kSPV_EXT_descriptor_indexing: return IR(503, 28); + case Extension::kSPV_EXT_float8: return IR(531, 15); + case Extension::kSPV_EXT_fragment_fully_covered: return IR(546, 31); + case Extension::kSPV_EXT_fragment_invocation_density: return IR(577, 36); + case Extension::kSPV_EXT_fragment_shader_interlock: return IR(613, 34); + case Extension::kSPV_EXT_mesh_shader: return IR(647, 20); + case Extension::kSPV_EXT_opacity_micromap: return IR(667, 25); + case Extension::kSPV_EXT_optnone: return IR(692, 16); + case Extension::kSPV_EXT_physical_storage_buffer: return IR(708, 32); + case Extension::kSPV_EXT_relaxed_printf_string_address_space: return IR(740, 44); + case Extension::kSPV_EXT_replicated_composites: return IR(784, 30); + case Extension::kSPV_EXT_shader_atomic_float16_add: return IR(814, 34); + case Extension::kSPV_EXT_shader_atomic_float_add: return IR(848, 32); + case Extension::kSPV_EXT_shader_atomic_float_min_max: return IR(880, 36); + case Extension::kSPV_EXT_shader_image_int64: return IR(916, 27); + case Extension::kSPV_EXT_shader_stencil_export: return IR(943, 30); + case Extension::kSPV_EXT_shader_tile_image: return IR(973, 26); + case Extension::kSPV_EXT_shader_viewport_index_layer: return IR(999, 36); + case Extension::kSPV_GOOGLE_decorate_string: return IR(1035, 27); + case Extension::kSPV_GOOGLE_hlsl_functionality1: return IR(1062, 31); + case Extension::kSPV_GOOGLE_user_type: return IR(1093, 21); + case Extension::kSPV_INTEL_2d_block_io: return IR(1114, 22); + case Extension::kSPV_INTEL_arbitrary_precision_fixed_point: return IR(1136, 42); + case Extension::kSPV_INTEL_arbitrary_precision_floating_point: return IR(1178, 45); + case Extension::kSPV_INTEL_arbitrary_precision_integers: return IR(1223, 39); + case Extension::kSPV_INTEL_bfloat16_conversion: return IR(1262, 30); + case Extension::kSPV_INTEL_bindless_images: return IR(1292, 26); + case Extension::kSPV_INTEL_blocking_pipes: return IR(1318, 25); + case Extension::kSPV_INTEL_cache_controls: return IR(1343, 25); + case Extension::kSPV_INTEL_debug_module: return IR(1368, 23); + case Extension::kSPV_INTEL_device_side_avc_motion_estimation: return IR(1391, 44); + case Extension::kSPV_INTEL_float_controls2: return IR(1435, 26); + case Extension::kSPV_INTEL_fp_fast_math_mode: return IR(1461, 28); + case Extension::kSPV_INTEL_fp_max_error: return IR(1489, 23); + case Extension::kSPV_INTEL_fpga_argument_interfaces: return IR(1512, 35); + case Extension::kSPV_INTEL_fpga_buffer_location: return IR(1547, 31); + case Extension::kSPV_INTEL_fpga_cluster_attributes: return IR(1578, 34); + case Extension::kSPV_INTEL_fpga_dsp_control: return IR(1612, 27); + case Extension::kSPV_INTEL_fpga_invocation_pipelining_attributes: return IR(1639, 48); + case Extension::kSPV_INTEL_fpga_latency_control: return IR(1687, 31); + case Extension::kSPV_INTEL_fpga_loop_controls: return IR(1718, 29); + case Extension::kSPV_INTEL_fpga_memory_accesses: return IR(1747, 31); + case Extension::kSPV_INTEL_fpga_memory_attributes: return IR(1778, 33); + case Extension::kSPV_INTEL_fpga_reg: return IR(1811, 19); + case Extension::kSPV_INTEL_function_pointers: return IR(1830, 28); + case Extension::kSPV_INTEL_global_variable_fpga_decorations: return IR(1858, 43); + case Extension::kSPV_INTEL_global_variable_host_access: return IR(1901, 38); + case Extension::kSPV_INTEL_inline_assembly: return IR(1939, 26); + case Extension::kSPV_INTEL_int4: return IR(1965, 15); + case Extension::kSPV_INTEL_io_pipes: return IR(1980, 19); + case Extension::kSPV_INTEL_kernel_attributes: return IR(1999, 28); + case Extension::kSPV_INTEL_long_composites: return IR(2027, 26); + case Extension::kSPV_INTEL_loop_fuse: return IR(2053, 20); + case Extension::kSPV_INTEL_masked_gather_scatter: return IR(2073, 32); + case Extension::kSPV_INTEL_maximum_registers: return IR(2105, 28); + case Extension::kSPV_INTEL_media_block_io: return IR(2133, 25); + case Extension::kSPV_INTEL_memory_access_aliasing: return IR(2158, 33); + case Extension::kSPV_INTEL_optnone: return IR(2191, 18); + case Extension::kSPV_INTEL_runtime_aligned: return IR(2209, 26); + case Extension::kSPV_INTEL_shader_integer_functions2: return IR(2235, 36); + case Extension::kSPV_INTEL_split_barrier: return IR(2271, 24); + case Extension::kSPV_INTEL_subgroup_buffer_prefetch: return IR(2295, 35); + case Extension::kSPV_INTEL_subgroup_matrix_multiply_accumulate: return IR(2330, 46); + case Extension::kSPV_INTEL_subgroups: return IR(2376, 20); + case Extension::kSPV_INTEL_task_sequence: return IR(2396, 24); + case Extension::kSPV_INTEL_tensor_float32_conversion: return IR(2420, 36); + case Extension::kSPV_INTEL_ternary_bitwise_function: return IR(2456, 35); + case Extension::kSPV_INTEL_unstructured_loop_controls: return IR(2491, 37); + case Extension::kSPV_INTEL_usm_storage_classes: return IR(2528, 30); + case Extension::kSPV_INTEL_variable_length_array: return IR(2558, 32); + case Extension::kSPV_INTEL_vector_compute: return IR(2590, 25); + case Extension::kSPV_KHR_16bit_storage: return IR(2615, 22); + case Extension::kSPV_KHR_8bit_storage: return IR(2637, 21); + case Extension::kSPV_KHR_bfloat16: return IR(2658, 17); + case Extension::kSPV_KHR_bit_instructions: return IR(2675, 25); + case Extension::kSPV_KHR_compute_shader_derivatives: return IR(2700, 35); + case Extension::kSPV_KHR_cooperative_matrix: return IR(2735, 27); + case Extension::kSPV_KHR_device_group: return IR(2762, 21); + case Extension::kSPV_KHR_expect_assume: return IR(2783, 22); + case Extension::kSPV_KHR_float_controls: return IR(2805, 23); + case Extension::kSPV_KHR_float_controls2: return IR(2828, 24); + case Extension::kSPV_KHR_fragment_shader_barycentric: return IR(2852, 36); + case Extension::kSPV_KHR_fragment_shading_rate: return IR(2888, 30); + case Extension::kSPV_KHR_integer_dot_product: return IR(2918, 28); + case Extension::kSPV_KHR_linkonce_odr: return IR(2946, 21); + case Extension::kSPV_KHR_maximal_reconvergence: return IR(2967, 30); + case Extension::kSPV_KHR_multiview: return IR(2997, 18); + case Extension::kSPV_KHR_no_integer_wrap_decoration: return IR(3015, 35); + case Extension::kSPV_KHR_non_semantic_info: return IR(3050, 26); + case Extension::kSPV_KHR_physical_storage_buffer: return IR(3076, 32); + case Extension::kSPV_KHR_post_depth_coverage: return IR(3108, 28); + case Extension::kSPV_KHR_quad_control: return IR(3136, 21); + case Extension::kSPV_KHR_ray_cull_mask: return IR(3157, 22); + case Extension::kSPV_KHR_ray_query: return IR(3179, 18); + case Extension::kSPV_KHR_ray_tracing: return IR(3197, 20); + case Extension::kSPV_KHR_ray_tracing_position_fetch: return IR(3217, 35); + case Extension::kSPV_KHR_relaxed_extended_instruction: return IR(3252, 37); + case Extension::kSPV_KHR_shader_atomic_counter_ops: return IR(3289, 34); + case Extension::kSPV_KHR_shader_ballot: return IR(3323, 22); + case Extension::kSPV_KHR_shader_clock: return IR(3345, 21); + case Extension::kSPV_KHR_shader_draw_parameters: return IR(3366, 31); + case Extension::kSPV_KHR_storage_buffer_storage_class: return IR(3397, 37); + case Extension::kSPV_KHR_subgroup_rotate: return IR(3434, 24); + case Extension::kSPV_KHR_subgroup_uniform_control_flow: return IR(3458, 38); + case Extension::kSPV_KHR_subgroup_vote: return IR(3496, 22); + case Extension::kSPV_KHR_terminate_invocation: return IR(3518, 29); + case Extension::kSPV_KHR_uniform_group_instructions: return IR(3547, 35); + case Extension::kSPV_KHR_untyped_pointers: return IR(3582, 25); + case Extension::kSPV_KHR_variable_pointers: return IR(3607, 26); + case Extension::kSPV_KHR_vulkan_memory_model: return IR(3633, 28); + case Extension::kSPV_KHR_workgroup_memory_explicit_layout: return IR(3661, 41); + case Extension::kSPV_NVX_multiview_per_view_attributes: return IR(3702, 38); + case Extension::kSPV_NV_bindless_texture: return IR(3740, 24); + case Extension::kSPV_NV_cluster_acceleration_structure: return IR(3764, 38); + case Extension::kSPV_NV_compute_shader_derivatives: return IR(3802, 34); + case Extension::kSPV_NV_cooperative_matrix: return IR(3836, 26); + case Extension::kSPV_NV_cooperative_matrix2: return IR(3862, 27); + case Extension::kSPV_NV_cooperative_vector: return IR(3889, 26); + case Extension::kSPV_NV_displacement_micromap: return IR(3915, 29); + case Extension::kSPV_NV_fragment_shader_barycentric: return IR(3944, 35); + case Extension::kSPV_NV_geometry_shader_passthrough: return IR(3979, 35); + case Extension::kSPV_NV_linear_swept_spheres: return IR(4014, 28); + case Extension::kSPV_NV_mesh_shader: return IR(4042, 19); + case Extension::kSPV_NV_raw_access_chains: return IR(4061, 25); + case Extension::kSPV_NV_ray_tracing: return IR(4086, 19); + case Extension::kSPV_NV_ray_tracing_motion_blur: return IR(4105, 31); + case Extension::kSPV_NV_sample_mask_override_coverage: return IR(4136, 37); + case Extension::kSPV_NV_shader_atomic_fp16_vector: return IR(4173, 33); + case Extension::kSPV_NV_shader_image_footprint: return IR(4206, 30); + case Extension::kSPV_NV_shader_invocation_reorder: return IR(4236, 33); + case Extension::kSPV_NV_shader_sm_builtins: return IR(4269, 26); + case Extension::kSPV_NV_shader_subgroup_partitioned: return IR(4295, 35); + case Extension::kSPV_NV_shading_rate: return IR(4330, 20); + case Extension::kSPV_NV_stereo_view_rendering: return IR(4350, 29); + case Extension::kSPV_NV_tensor_addressing: return IR(4379, 25); + case Extension::kSPV_NV_viewport_array2: return IR(4404, 23); + case Extension::kSPV_QCOM_image_processing: return IR(4427, 26); + case Extension::kSPV_QCOM_image_processing2: return IR(4453, 27); + case Extension::kSPV_QCOM_tile_shading: return IR(4480, 22); + case Extension::kSPV_VALIDATOR_ignore_type_decl_unique: return IR(4502, 38); + default: break; + } + return {}; +} + +// Extension names and values, ordered by name +// The fields in order are: +// name, indexing into kStrings +// enum value +static const std::array kExtensionNames{{ + {IR(0, 24), static_cast(kSPV_AMDX_shader_enqueue)}, + {IR(24, 19), static_cast(kSPV_AMD_gcn_shader)}, + {IR(43, 30), static_cast(kSPV_AMD_gpu_shader_half_float)}, + {IR(73, 36), static_cast(kSPV_AMD_gpu_shader_half_float_fetch)}, + {IR(109, 25), static_cast(kSPV_AMD_gpu_shader_int16)}, + {IR(134, 22), static_cast(kSPV_AMD_shader_ballot)}, + {IR(156, 45), static_cast(kSPV_AMD_shader_early_and_late_fragment_tests)}, + {IR(201, 41), static_cast(kSPV_AMD_shader_explicit_vertex_parameter)}, + {IR(242, 29), static_cast(kSPV_AMD_shader_fragment_mask)}, + {IR(271, 36), static_cast(kSPV_AMD_shader_image_load_store_lod)}, + {IR(307, 30), static_cast(kSPV_AMD_shader_trinary_minmax)}, + {IR(337, 32), static_cast(kSPV_AMD_texture_gather_bias_lod)}, + {IR(369, 35), static_cast(kSPV_ARM_cooperative_matrix_layouts)}, + {IR(404, 22), static_cast(kSPV_ARM_core_builtins)}, + {IR(426, 16), static_cast(kSPV_ARM_tensors)}, + {IR(442, 25), static_cast(kSPV_EXT_arithmetic_fence)}, + {IR(467, 36), static_cast(kSPV_EXT_demote_to_helper_invocation)}, + {IR(503, 28), static_cast(kSPV_EXT_descriptor_indexing)}, + {IR(531, 15), static_cast(kSPV_EXT_float8)}, + {IR(546, 31), static_cast(kSPV_EXT_fragment_fully_covered)}, + {IR(577, 36), static_cast(kSPV_EXT_fragment_invocation_density)}, + {IR(613, 34), static_cast(kSPV_EXT_fragment_shader_interlock)}, + {IR(647, 20), static_cast(kSPV_EXT_mesh_shader)}, + {IR(667, 25), static_cast(kSPV_EXT_opacity_micromap)}, + {IR(692, 16), static_cast(kSPV_EXT_optnone)}, + {IR(708, 32), static_cast(kSPV_EXT_physical_storage_buffer)}, + {IR(740, 44), static_cast(kSPV_EXT_relaxed_printf_string_address_space)}, + {IR(784, 30), static_cast(kSPV_EXT_replicated_composites)}, + {IR(814, 34), static_cast(kSPV_EXT_shader_atomic_float16_add)}, + {IR(848, 32), static_cast(kSPV_EXT_shader_atomic_float_add)}, + {IR(880, 36), static_cast(kSPV_EXT_shader_atomic_float_min_max)}, + {IR(916, 27), static_cast(kSPV_EXT_shader_image_int64)}, + {IR(943, 30), static_cast(kSPV_EXT_shader_stencil_export)}, + {IR(973, 26), static_cast(kSPV_EXT_shader_tile_image)}, + {IR(999, 36), static_cast(kSPV_EXT_shader_viewport_index_layer)}, + {IR(1035, 27), static_cast(kSPV_GOOGLE_decorate_string)}, + {IR(1062, 31), static_cast(kSPV_GOOGLE_hlsl_functionality1)}, + {IR(1093, 21), static_cast(kSPV_GOOGLE_user_type)}, + {IR(1114, 22), static_cast(kSPV_INTEL_2d_block_io)}, + {IR(1136, 42), static_cast(kSPV_INTEL_arbitrary_precision_fixed_point)}, + {IR(1178, 45), static_cast(kSPV_INTEL_arbitrary_precision_floating_point)}, + {IR(1223, 39), static_cast(kSPV_INTEL_arbitrary_precision_integers)}, + {IR(1262, 30), static_cast(kSPV_INTEL_bfloat16_conversion)}, + {IR(1292, 26), static_cast(kSPV_INTEL_bindless_images)}, + {IR(1318, 25), static_cast(kSPV_INTEL_blocking_pipes)}, + {IR(1343, 25), static_cast(kSPV_INTEL_cache_controls)}, + {IR(1368, 23), static_cast(kSPV_INTEL_debug_module)}, + {IR(1391, 44), static_cast(kSPV_INTEL_device_side_avc_motion_estimation)}, + {IR(1435, 26), static_cast(kSPV_INTEL_float_controls2)}, + {IR(1461, 28), static_cast(kSPV_INTEL_fp_fast_math_mode)}, + {IR(1489, 23), static_cast(kSPV_INTEL_fp_max_error)}, + {IR(1512, 35), static_cast(kSPV_INTEL_fpga_argument_interfaces)}, + {IR(1547, 31), static_cast(kSPV_INTEL_fpga_buffer_location)}, + {IR(1578, 34), static_cast(kSPV_INTEL_fpga_cluster_attributes)}, + {IR(1612, 27), static_cast(kSPV_INTEL_fpga_dsp_control)}, + {IR(1639, 48), static_cast(kSPV_INTEL_fpga_invocation_pipelining_attributes)}, + {IR(1687, 31), static_cast(kSPV_INTEL_fpga_latency_control)}, + {IR(1718, 29), static_cast(kSPV_INTEL_fpga_loop_controls)}, + {IR(1747, 31), static_cast(kSPV_INTEL_fpga_memory_accesses)}, + {IR(1778, 33), static_cast(kSPV_INTEL_fpga_memory_attributes)}, + {IR(1811, 19), static_cast(kSPV_INTEL_fpga_reg)}, + {IR(1830, 28), static_cast(kSPV_INTEL_function_pointers)}, + {IR(1858, 43), static_cast(kSPV_INTEL_global_variable_fpga_decorations)}, + {IR(1901, 38), static_cast(kSPV_INTEL_global_variable_host_access)}, + {IR(1939, 26), static_cast(kSPV_INTEL_inline_assembly)}, + {IR(1965, 15), static_cast(kSPV_INTEL_int4)}, + {IR(1980, 19), static_cast(kSPV_INTEL_io_pipes)}, + {IR(1999, 28), static_cast(kSPV_INTEL_kernel_attributes)}, + {IR(2027, 26), static_cast(kSPV_INTEL_long_composites)}, + {IR(2053, 20), static_cast(kSPV_INTEL_loop_fuse)}, + {IR(2073, 32), static_cast(kSPV_INTEL_masked_gather_scatter)}, + {IR(2105, 28), static_cast(kSPV_INTEL_maximum_registers)}, + {IR(2133, 25), static_cast(kSPV_INTEL_media_block_io)}, + {IR(2158, 33), static_cast(kSPV_INTEL_memory_access_aliasing)}, + {IR(2191, 18), static_cast(kSPV_INTEL_optnone)}, + {IR(2209, 26), static_cast(kSPV_INTEL_runtime_aligned)}, + {IR(2235, 36), static_cast(kSPV_INTEL_shader_integer_functions2)}, + {IR(2271, 24), static_cast(kSPV_INTEL_split_barrier)}, + {IR(2295, 35), static_cast(kSPV_INTEL_subgroup_buffer_prefetch)}, + {IR(2330, 46), static_cast(kSPV_INTEL_subgroup_matrix_multiply_accumulate)}, + {IR(2376, 20), static_cast(kSPV_INTEL_subgroups)}, + {IR(2396, 24), static_cast(kSPV_INTEL_task_sequence)}, + {IR(2420, 36), static_cast(kSPV_INTEL_tensor_float32_conversion)}, + {IR(2456, 35), static_cast(kSPV_INTEL_ternary_bitwise_function)}, + {IR(2491, 37), static_cast(kSPV_INTEL_unstructured_loop_controls)}, + {IR(2528, 30), static_cast(kSPV_INTEL_usm_storage_classes)}, + {IR(2558, 32), static_cast(kSPV_INTEL_variable_length_array)}, + {IR(2590, 25), static_cast(kSPV_INTEL_vector_compute)}, + {IR(2615, 22), static_cast(kSPV_KHR_16bit_storage)}, + {IR(2637, 21), static_cast(kSPV_KHR_8bit_storage)}, + {IR(2658, 17), static_cast(kSPV_KHR_bfloat16)}, + {IR(2675, 25), static_cast(kSPV_KHR_bit_instructions)}, + {IR(2700, 35), static_cast(kSPV_KHR_compute_shader_derivatives)}, + {IR(2735, 27), static_cast(kSPV_KHR_cooperative_matrix)}, + {IR(2762, 21), static_cast(kSPV_KHR_device_group)}, + {IR(2783, 22), static_cast(kSPV_KHR_expect_assume)}, + {IR(2805, 23), static_cast(kSPV_KHR_float_controls)}, + {IR(2828, 24), static_cast(kSPV_KHR_float_controls2)}, + {IR(2852, 36), static_cast(kSPV_KHR_fragment_shader_barycentric)}, + {IR(2888, 30), static_cast(kSPV_KHR_fragment_shading_rate)}, + {IR(2918, 28), static_cast(kSPV_KHR_integer_dot_product)}, + {IR(2946, 21), static_cast(kSPV_KHR_linkonce_odr)}, + {IR(2967, 30), static_cast(kSPV_KHR_maximal_reconvergence)}, + {IR(2997, 18), static_cast(kSPV_KHR_multiview)}, + {IR(3015, 35), static_cast(kSPV_KHR_no_integer_wrap_decoration)}, + {IR(3050, 26), static_cast(kSPV_KHR_non_semantic_info)}, + {IR(3076, 32), static_cast(kSPV_KHR_physical_storage_buffer)}, + {IR(3108, 28), static_cast(kSPV_KHR_post_depth_coverage)}, + {IR(3136, 21), static_cast(kSPV_KHR_quad_control)}, + {IR(3157, 22), static_cast(kSPV_KHR_ray_cull_mask)}, + {IR(3179, 18), static_cast(kSPV_KHR_ray_query)}, + {IR(3197, 20), static_cast(kSPV_KHR_ray_tracing)}, + {IR(3217, 35), static_cast(kSPV_KHR_ray_tracing_position_fetch)}, + {IR(3252, 37), static_cast(kSPV_KHR_relaxed_extended_instruction)}, + {IR(3289, 34), static_cast(kSPV_KHR_shader_atomic_counter_ops)}, + {IR(3323, 22), static_cast(kSPV_KHR_shader_ballot)}, + {IR(3345, 21), static_cast(kSPV_KHR_shader_clock)}, + {IR(3366, 31), static_cast(kSPV_KHR_shader_draw_parameters)}, + {IR(3397, 37), static_cast(kSPV_KHR_storage_buffer_storage_class)}, + {IR(3434, 24), static_cast(kSPV_KHR_subgroup_rotate)}, + {IR(3458, 38), static_cast(kSPV_KHR_subgroup_uniform_control_flow)}, + {IR(3496, 22), static_cast(kSPV_KHR_subgroup_vote)}, + {IR(3518, 29), static_cast(kSPV_KHR_terminate_invocation)}, + {IR(3547, 35), static_cast(kSPV_KHR_uniform_group_instructions)}, + {IR(3582, 25), static_cast(kSPV_KHR_untyped_pointers)}, + {IR(3607, 26), static_cast(kSPV_KHR_variable_pointers)}, + {IR(3633, 28), static_cast(kSPV_KHR_vulkan_memory_model)}, + {IR(3661, 41), static_cast(kSPV_KHR_workgroup_memory_explicit_layout)}, + {IR(3702, 38), static_cast(kSPV_NVX_multiview_per_view_attributes)}, + {IR(3740, 24), static_cast(kSPV_NV_bindless_texture)}, + {IR(3764, 38), static_cast(kSPV_NV_cluster_acceleration_structure)}, + {IR(3802, 34), static_cast(kSPV_NV_compute_shader_derivatives)}, + {IR(3836, 26), static_cast(kSPV_NV_cooperative_matrix)}, + {IR(3862, 27), static_cast(kSPV_NV_cooperative_matrix2)}, + {IR(3889, 26), static_cast(kSPV_NV_cooperative_vector)}, + {IR(3915, 29), static_cast(kSPV_NV_displacement_micromap)}, + {IR(3944, 35), static_cast(kSPV_NV_fragment_shader_barycentric)}, + {IR(3979, 35), static_cast(kSPV_NV_geometry_shader_passthrough)}, + {IR(4014, 28), static_cast(kSPV_NV_linear_swept_spheres)}, + {IR(4042, 19), static_cast(kSPV_NV_mesh_shader)}, + {IR(4061, 25), static_cast(kSPV_NV_raw_access_chains)}, + {IR(4086, 19), static_cast(kSPV_NV_ray_tracing)}, + {IR(4105, 31), static_cast(kSPV_NV_ray_tracing_motion_blur)}, + {IR(4136, 37), static_cast(kSPV_NV_sample_mask_override_coverage)}, + {IR(4173, 33), static_cast(kSPV_NV_shader_atomic_fp16_vector)}, + {IR(4206, 30), static_cast(kSPV_NV_shader_image_footprint)}, + {IR(4236, 33), static_cast(kSPV_NV_shader_invocation_reorder)}, + {IR(4269, 26), static_cast(kSPV_NV_shader_sm_builtins)}, + {IR(4295, 35), static_cast(kSPV_NV_shader_subgroup_partitioned)}, + {IR(4330, 20), static_cast(kSPV_NV_shading_rate)}, + {IR(4350, 29), static_cast(kSPV_NV_stereo_view_rendering)}, + {IR(4379, 25), static_cast(kSPV_NV_tensor_addressing)}, + {IR(4404, 23), static_cast(kSPV_NV_viewport_array2)}, + {IR(4427, 26), static_cast(kSPV_QCOM_image_processing)}, + {IR(4453, 27), static_cast(kSPV_QCOM_image_processing2)}, + {IR(4480, 22), static_cast(kSPV_QCOM_tile_shading)}, + {IR(4502, 38), static_cast(kSPV_VALIDATOR_ignore_type_decl_unique)}, +}}; + +// Operand descriptions, ordered by (operand kind, operand enum value). +// The fields in order are: +// enum value +// operands, an IndexRange into kOperandSpans +// name, a character-counting IndexRange into kStrings +// aliases, an IndexRange into kAliasSpans +// capabilities, an IndexRange into kCapabilitySpans +// extensions, as an IndexRange into kExtensionSpans +// version, first version of SPIR-V that has it +// lastVersion, last version of SPIR-V that has it +static const std::array kOperandsByValue{{ + {0,IR(0, 0),IR(4540, 9)/* ReadOnly */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_ACCESS_QUALIFIER + {1,IR(0, 0),IR(4556, 10)/* WriteOnly */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_ACCESS_QUALIFIER + {2,IR(0, 0),IR(4566, 10)/* ReadWrite */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_ACCESS_QUALIFIER + {0,IR(0, 0),IR(4576, 8)/* Logical */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_ADDRESSING_MODEL + {1,IR(0, 0),IR(4584, 11)/* Physical32 */,IR(0, 0),IR(1, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_ADDRESSING_MODEL + {2,IR(0, 0),IR(4605, 11)/* Physical64 */,IR(0, 0),IR(1, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_ADDRESSING_MODEL + {5348,IR(0, 0),IR(4616, 24)/* PhysicalStorageBuffer64 */,IR(0, 1),IR(2, 1),IR(0, 2),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_ADDRESSING_MODEL + {0,IR(0, 0),IR(4698, 9)/* Position */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {1,IR(0, 0),IR(4714, 10)/* PointSize */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {3,IR(0, 0),IR(4724, 13)/* ClipDistance */,IR(0, 0),IR(4, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4,IR(0, 0),IR(4737, 13)/* CullDistance */,IR(0, 0),IR(5, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5,IR(0, 0),IR(4750, 9)/* VertexId */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {6,IR(0, 0),IR(4759, 11)/* InstanceId */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {7,IR(0, 0),IR(4770, 12)/* PrimitiveId */,IR(0, 0),IR(6, 6),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {8,IR(0, 0),IR(4860, 13)/* InvocationId */,IR(0, 0),IR(12, 2),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {9,IR(0, 0),IR(4873, 6)/* Layer */,IR(0, 0),IR(14, 5),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {10,IR(0, 0),IR(4919, 14)/* ViewportIndex */,IR(0, 0),IR(19, 5),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {11,IR(0, 0),IR(4967, 15)/* TessLevelOuter */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {12,IR(0, 0),IR(4982, 15)/* TessLevelInner */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {13,IR(0, 0),IR(4997, 10)/* TessCoord */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {14,IR(0, 0),IR(5007, 14)/* PatchVertices */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {15,IR(0, 0),IR(5021, 10)/* FragCoord */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {16,IR(0, 0),IR(5031, 11)/* PointCoord */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {17,IR(0, 0),IR(5042, 12)/* FrontFacing */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {18,IR(0, 0),IR(5054, 9)/* SampleId */,IR(0, 0),IR(25, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {19,IR(0, 0),IR(5081, 15)/* SamplePosition */,IR(0, 0),IR(25, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {20,IR(0, 0),IR(5096, 11)/* SampleMask */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {22,IR(0, 0),IR(5107, 10)/* FragDepth */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {23,IR(0, 0),IR(5117, 17)/* HelperInvocation */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {24,IR(0, 0),IR(5134, 14)/* NumWorkgroups */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {25,IR(0, 0),IR(5148, 14)/* WorkgroupSize */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {26,IR(0, 0),IR(5162, 12)/* WorkgroupId */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {27,IR(0, 0),IR(5174, 18)/* LocalInvocationId */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {28,IR(0, 0),IR(5192, 19)/* GlobalInvocationId */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {29,IR(0, 0),IR(5211, 21)/* LocalInvocationIndex */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {30,IR(0, 0),IR(5232, 8)/* WorkDim */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {31,IR(0, 0),IR(5240, 11)/* GlobalSize */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {32,IR(0, 0),IR(5251, 22)/* EnqueuedWorkgroupSize */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {33,IR(0, 0),IR(5273, 13)/* GlobalOffset */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {34,IR(0, 0),IR(5286, 15)/* GlobalLinearId */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {36,IR(0, 0),IR(5301, 13)/* SubgroupSize */,IR(0, 0),IR(26, 3),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {37,IR(0, 0),IR(5348, 16)/* SubgroupMaxSize */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {38,IR(0, 0),IR(5364, 13)/* NumSubgroups */,IR(0, 0),IR(29, 2),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {39,IR(0, 0),IR(5377, 21)/* NumEnqueuedSubgroups */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {40,IR(0, 0),IR(5398, 11)/* SubgroupId */,IR(0, 0),IR(29, 2),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {41,IR(0, 0),IR(5409, 26)/* SubgroupLocalInvocationId */,IR(0, 0),IR(26, 3),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {42,IR(0, 0),IR(5435, 12)/* VertexIndex */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {43,IR(0, 0),IR(5447, 14)/* InstanceIndex */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4160,IR(0, 0),IR(5461, 10)/* CoreIDARM */,IR(0, 0),IR(31, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4161,IR(0, 0),IR(5487, 13)/* CoreCountARM */,IR(0, 0),IR(31, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4162,IR(0, 0),IR(5500, 13)/* CoreMaxIDARM */,IR(0, 0),IR(31, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4163,IR(0, 0),IR(5513, 10)/* WarpIDARM */,IR(0, 0),IR(31, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4164,IR(0, 0),IR(5523, 13)/* WarpMaxIDARM */,IR(0, 0),IR(31, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4416,IR(0, 0),IR(5536, 15)/* SubgroupEqMask */,IR(1, 1),IR(32, 2),IR(2, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4417,IR(0, 0),IR(5591, 15)/* SubgroupGeMask */,IR(2, 1),IR(32, 2),IR(2, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4418,IR(0, 0),IR(5624, 15)/* SubgroupGtMask */,IR(3, 1),IR(32, 2),IR(2, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4419,IR(0, 0),IR(5657, 15)/* SubgroupLeMask */,IR(4, 1),IR(32, 2),IR(2, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4420,IR(0, 0),IR(5690, 15)/* SubgroupLtMask */,IR(5, 1),IR(32, 2),IR(2, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4424,IR(0, 0),IR(5723, 11)/* BaseVertex */,IR(0, 0),IR(34, 1),IR(3, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4425,IR(0, 0),IR(5749, 13)/* BaseInstance */,IR(0, 0),IR(34, 1),IR(3, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4426,IR(0, 0),IR(5762, 10)/* DrawIndex */,IR(0, 0),IR(35, 3),IR(4, 3),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4432,IR(0, 0),IR(5772, 24)/* PrimitiveShadingRateKHR */,IR(0, 0),IR(38, 1),IR(7, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4438,IR(0, 0),IR(5819, 12)/* DeviceIndex */,IR(0, 0),IR(39, 1),IR(8, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4440,IR(0, 0),IR(5843, 10)/* ViewIndex */,IR(0, 0),IR(40, 1),IR(9, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4444,IR(0, 0),IR(5863, 15)/* ShadingRateKHR */,IR(0, 0),IR(38, 1),IR(7, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4492,IR(0, 0),IR(5878, 15)/* TileOffsetQCOM */,IR(0, 0),IR(41, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4493,IR(0, 0),IR(5909, 18)/* TileDimensionQCOM */,IR(0, 0),IR(41, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4494,IR(0, 0),IR(5927, 18)/* TileApronSizeQCOM */,IR(0, 0),IR(41, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4992,IR(0, 0),IR(5945, 20)/* BaryCoordNoPerspAMD */,IR(0, 0),IR(1, 0),IR(10, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4993,IR(0, 0),IR(5965, 28)/* BaryCoordNoPerspCentroidAMD */,IR(0, 0),IR(1, 0),IR(10, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4994,IR(0, 0),IR(5993, 26)/* BaryCoordNoPerspSampleAMD */,IR(0, 0),IR(1, 0),IR(10, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4995,IR(0, 0),IR(6019, 19)/* BaryCoordSmoothAMD */,IR(0, 0),IR(1, 0),IR(10, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4996,IR(0, 0),IR(6038, 27)/* BaryCoordSmoothCentroidAMD */,IR(0, 0),IR(1, 0),IR(10, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4997,IR(0, 0),IR(6065, 25)/* BaryCoordSmoothSampleAMD */,IR(0, 0),IR(1, 0),IR(10, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {4998,IR(0, 0),IR(6090, 22)/* BaryCoordPullModelAMD */,IR(0, 0),IR(1, 0),IR(10, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5014,IR(0, 0),IR(6112, 18)/* FragStencilRefEXT */,IR(0, 0),IR(42, 1),IR(11, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5021,IR(0, 0),IR(6147, 29)/* RemainingRecursionLevelsAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5073,IR(0, 0),IR(6194, 16)/* ShaderIndexAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5253,IR(0, 0),IR(6210, 15)/* ViewportMaskNV */,IR(0, 0),IR(44, 2),IR(12, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5257,IR(0, 0),IR(6246, 20)/* SecondaryPositionNV */,IR(0, 0),IR(46, 1),IR(14, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5258,IR(0, 0),IR(6285, 24)/* SecondaryViewportMaskNV */,IR(0, 0),IR(46, 1),IR(14, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5261,IR(0, 0),IR(6309, 18)/* PositionPerViewNV */,IR(0, 0),IR(47, 2),IR(15, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5262,IR(0, 0),IR(6347, 22)/* ViewportMaskPerViewNV */,IR(0, 0),IR(47, 2),IR(15, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5264,IR(0, 0),IR(6369, 16)/* FullyCoveredEXT */,IR(0, 0),IR(49, 1),IR(17, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5274,IR(0, 0),IR(6409, 12)/* TaskCountNV */,IR(0, 0),IR(50, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5275,IR(0, 0),IR(6421, 17)/* PrimitiveCountNV */,IR(0, 0),IR(50, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5276,IR(0, 0),IR(6438, 19)/* PrimitiveIndicesNV */,IR(0, 0),IR(50, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5277,IR(0, 0),IR(6457, 22)/* ClipDistancePerViewNV */,IR(0, 0),IR(50, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5278,IR(0, 0),IR(6479, 22)/* CullDistancePerViewNV */,IR(0, 0),IR(50, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5279,IR(0, 0),IR(6501, 15)/* LayerPerViewNV */,IR(0, 0),IR(50, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5280,IR(0, 0),IR(6516, 16)/* MeshViewCountNV */,IR(0, 0),IR(50, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5281,IR(0, 0),IR(6532, 18)/* MeshViewIndicesNV */,IR(0, 0),IR(50, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5286,IR(0, 0),IR(6550, 13)/* BaryCoordKHR */,IR(6, 1),IR(51, 1),IR(19, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5287,IR(0, 0),IR(6598, 20)/* BaryCoordNoPerspKHR */,IR(7, 1),IR(51, 1),IR(19, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5292,IR(0, 0),IR(6637, 12)/* FragSizeEXT */,IR(8, 1),IR(52, 1),IR(21, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5293,IR(0, 0),IR(6683, 23)/* FragInvocationCountEXT */,IR(9, 1),IR(52, 1),IR(21, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5294,IR(0, 0),IR(6728, 25)/* PrimitivePointIndicesEXT */,IR(0, 0),IR(53, 1),IR(23, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5295,IR(0, 0),IR(6753, 24)/* PrimitiveLineIndicesEXT */,IR(0, 0),IR(53, 1),IR(23, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5296,IR(0, 0),IR(6777, 28)/* PrimitiveTriangleIndicesEXT */,IR(0, 0),IR(53, 1),IR(23, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5299,IR(0, 0),IR(6805, 17)/* CullPrimitiveEXT */,IR(0, 0),IR(53, 1),IR(23, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5319,IR(0, 0),IR(6822, 12)/* LaunchIdKHR */,IR(10, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5320,IR(0, 0),IR(6845, 14)/* LaunchSizeKHR */,IR(11, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5321,IR(0, 0),IR(6872, 18)/* WorldRayOriginKHR */,IR(12, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5322,IR(0, 0),IR(6907, 21)/* WorldRayDirectionKHR */,IR(13, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5323,IR(0, 0),IR(6948, 19)/* ObjectRayOriginKHR */,IR(14, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5324,IR(0, 0),IR(6985, 22)/* ObjectRayDirectionKHR */,IR(15, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5325,IR(0, 0),IR(7028, 11)/* RayTminKHR */,IR(16, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5326,IR(0, 0),IR(7049, 11)/* RayTmaxKHR */,IR(17, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5327,IR(0, 0),IR(7070, 23)/* InstanceCustomIndexKHR */,IR(18, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5330,IR(0, 0),IR(7115, 17)/* ObjectToWorldKHR */,IR(19, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5331,IR(0, 0),IR(7148, 17)/* WorldToObjectKHR */,IR(20, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5332,IR(0, 0),IR(7181, 7)/* HitTNV */,IR(0, 0),IR(56, 1),IR(26, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5333,IR(0, 0),IR(7188, 11)/* HitKindKHR */,IR(21, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5334,IR(0, 0),IR(7209, 17)/* CurrentRayTimeNV */,IR(0, 0),IR(57, 1),IR(27, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5335,IR(0, 0),IR(7249, 30)/* HitTriangleVertexPositionsKHR */,IR(0, 0),IR(58, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5337,IR(0, 0),IR(7306, 34)/* HitMicroTriangleVertexPositionsNV */,IR(0, 0),IR(59, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5344,IR(0, 0),IR(7373, 37)/* HitMicroTriangleVertexBarycentricsNV */,IR(0, 0),IR(59, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5351,IR(0, 0),IR(7410, 20)/* IncomingRayFlagsKHR */,IR(22, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5352,IR(0, 0),IR(7449, 20)/* RayGeometryIndexKHR */,IR(0, 0),IR(60, 1),IR(28, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5359,IR(0, 0),IR(7469, 14)/* HitIsSphereNV */,IR(0, 0),IR(61, 1),IR(29, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5360,IR(0, 0),IR(7511, 11)/* HitIsLSSNV */,IR(0, 0),IR(62, 1),IR(29, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5361,IR(0, 0),IR(7561, 20)/* HitSpherePositionNV */,IR(0, 0),IR(61, 1),IR(29, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5374,IR(0, 0),IR(7581, 13)/* WarpsPerSMNV */,IR(0, 0),IR(63, 1),IR(30, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5375,IR(0, 0),IR(7613, 10)/* SMCountNV */,IR(0, 0),IR(63, 1),IR(30, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5376,IR(0, 0),IR(7623, 9)/* WarpIDNV */,IR(0, 0),IR(63, 1),IR(30, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5377,IR(0, 0),IR(7632, 7)/* SMIDNV */,IR(0, 0),IR(63, 1),IR(30, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5396,IR(0, 0),IR(7639, 18)/* HitLSSPositionsNV */,IR(0, 0),IR(62, 1),IR(29, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5405,IR(0, 0),IR(7657, 34)/* HitKindFrontFacingMicroTriangleNV */,IR(0, 0),IR(59, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5406,IR(0, 0),IR(7691, 33)/* HitKindBackFacingMicroTriangleNV */,IR(0, 0),IR(59, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5420,IR(0, 0),IR(7724, 18)/* HitSphereRadiusNV */,IR(0, 0),IR(61, 1),IR(29, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5421,IR(0, 0),IR(7742, 14)/* HitLSSRadiiNV */,IR(0, 0),IR(62, 1),IR(29, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {5436,IR(0, 0),IR(7756, 12)/* ClusterIDNV */,IR(0, 0),IR(64, 1),IR(31, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {6021,IR(0, 0),IR(7809, 12)/* CullMaskKHR */,IR(0, 0),IR(65, 1),IR(32, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_BUILT_IN + {0,IR(0, 0),IR(7836, 7)/* Matrix */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {1,IR(0, 0),IR(4707, 7)/* Shader */,IR(0, 0),IR(66, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {2,IR(0, 0),IR(4782, 9)/* Geometry */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {3,IR(0, 0),IR(4791, 13)/* Tessellation */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4,IR(0, 0),IR(4595, 10)/* Addresses */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5,IR(0, 0),IR(7843, 8)/* Linkage */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6,IR(0, 0),IR(4549, 7)/* Kernel */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {7,IR(0, 0),IR(7851, 9)/* Vector16 */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {8,IR(0, 0),IR(7860, 14)/* Float16Buffer */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {9,IR(0, 0),IR(7874, 8)/* Float16 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {10,IR(0, 0),IR(7882, 8)/* Float64 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {11,IR(0, 0),IR(7890, 6)/* Int64 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {12,IR(0, 0),IR(7896, 13)/* Int64Atomics */,IR(0, 0),IR(67, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {13,IR(0, 0),IR(7909, 11)/* ImageBasic */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {14,IR(0, 0),IR(7920, 15)/* ImageReadWrite */,IR(0, 0),IR(68, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {15,IR(0, 0),IR(7935, 12)/* ImageMipmap */,IR(0, 0),IR(68, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {17,IR(0, 0),IR(7947, 6)/* Pipes */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {18,IR(0, 0),IR(7953, 7)/* Groups */,IR(0, 0),IR(1, 0),IR(33, 1),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {19,IR(0, 0),IR(7960, 14)/* DeviceEnqueue */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {20,IR(0, 0),IR(7974, 15)/* LiteralSampler */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {21,IR(0, 0),IR(7989, 14)/* AtomicStorage */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {22,IR(0, 0),IR(8003, 6)/* Int16 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {23,IR(0, 0),IR(8009, 22)/* TessellationPointSize */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {24,IR(0, 0),IR(8031, 18)/* GeometryPointSize */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {25,IR(0, 0),IR(8049, 20)/* ImageGatherExtended */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {27,IR(0, 0),IR(8069, 24)/* StorageImageMultisample */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {28,IR(0, 0),IR(8093, 34)/* UniformBufferArrayDynamicIndexing */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {29,IR(0, 0),IR(8127, 33)/* SampledImageArrayDynamicIndexing */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {30,IR(0, 0),IR(8160, 34)/* StorageBufferArrayDynamicIndexing */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {31,IR(0, 0),IR(8194, 33)/* StorageImageArrayDynamicIndexing */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {32,IR(0, 0),IR(4724, 13)/* ClipDistance */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {33,IR(0, 0),IR(4737, 13)/* CullDistance */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {34,IR(0, 0),IR(8227, 15)/* ImageCubeArray */,IR(0, 0),IR(70, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {35,IR(0, 0),IR(5063, 18)/* SampleRateShading */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {36,IR(0, 0),IR(8259, 10)/* ImageRect */,IR(0, 0),IR(71, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {37,IR(0, 0),IR(8269, 12)/* SampledRect */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {38,IR(0, 0),IR(8281, 15)/* GenericPointer */,IR(0, 0),IR(1, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {39,IR(0, 0),IR(8296, 5)/* Int8 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {40,IR(0, 0),IR(8301, 16)/* InputAttachment */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {41,IR(0, 0),IR(8317, 16)/* SparseResidency */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {42,IR(0, 0),IR(8333, 7)/* MinLod */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {43,IR(0, 0),IR(8340, 10)/* Sampled1D */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {44,IR(0, 0),IR(8350, 8)/* Image1D */,IR(0, 0),IR(72, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {45,IR(0, 0),IR(8242, 17)/* SampledCubeArray */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {46,IR(0, 0),IR(8358, 14)/* SampledBuffer */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {47,IR(0, 0),IR(8372, 12)/* ImageBuffer */,IR(0, 0),IR(73, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {48,IR(0, 0),IR(8384, 13)/* ImageMSArray */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {49,IR(0, 0),IR(8397, 28)/* StorageImageExtendedFormats */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {50,IR(0, 0),IR(8425, 11)/* ImageQuery */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {51,IR(0, 0),IR(8436, 18)/* DerivativeControl */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {52,IR(0, 0),IR(8454, 22)/* InterpolationFunction */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {53,IR(0, 0),IR(8476, 18)/* TransformFeedback */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {54,IR(0, 0),IR(8494, 16)/* GeometryStreams */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {55,IR(0, 0),IR(8510, 30)/* StorageImageReadWithoutFormat */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {56,IR(0, 0),IR(8540, 31)/* StorageImageWriteWithoutFormat */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {57,IR(0, 0),IR(4933, 14)/* MultiViewport */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {58,IR(0, 0),IR(8571, 17)/* SubgroupDispatch */,IR(0, 0),IR(74, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,1),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {59,IR(0, 0),IR(8588, 13)/* NamedBarrier */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,1),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {60,IR(0, 0),IR(8601, 12)/* PipeStorage */,IR(0, 0),IR(75, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,1),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {61,IR(0, 0),IR(5314, 16)/* GroupNonUniform */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {62,IR(0, 0),IR(8613, 20)/* GroupNonUniformVote */,IR(0, 0),IR(76, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {63,IR(0, 0),IR(8633, 26)/* GroupNonUniformArithmetic */,IR(0, 0),IR(76, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {64,IR(0, 0),IR(5569, 22)/* GroupNonUniformBallot */,IR(0, 0),IR(76, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {65,IR(0, 0),IR(8659, 23)/* GroupNonUniformShuffle */,IR(0, 0),IR(76, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {66,IR(0, 0),IR(8682, 31)/* GroupNonUniformShuffleRelative */,IR(0, 0),IR(76, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {67,IR(0, 0),IR(8713, 25)/* GroupNonUniformClustered */,IR(0, 0),IR(76, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {68,IR(0, 0),IR(8738, 20)/* GroupNonUniformQuad */,IR(0, 0),IR(76, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {69,IR(0, 0),IR(4879, 12)/* ShaderLayer */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {70,IR(0, 0),IR(4947, 20)/* ShaderViewportIndex */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {71,IR(0, 0),IR(8758, 18)/* UniformDecoration */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,6),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4165,IR(0, 0),IR(5471, 16)/* CoreBuiltinsARM */,IR(0, 0),IR(1, 0),IR(34, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4166,IR(0, 0),IR(8776, 28)/* TileImageColorReadAccessEXT */,IR(0, 0),IR(1, 0),IR(35, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4167,IR(0, 0),IR(8804, 28)/* TileImageDepthReadAccessEXT */,IR(0, 0),IR(1, 0),IR(35, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4168,IR(0, 0),IR(8832, 30)/* TileImageStencilReadAccessEXT */,IR(0, 0),IR(1, 0),IR(35, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4174,IR(0, 0),IR(8862, 11)/* TensorsARM */,IR(0, 0),IR(1, 0),IR(36, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4175,IR(0, 0),IR(8873, 37)/* StorageTensorArrayDynamicIndexingARM */,IR(0, 0),IR(1, 0),IR(36, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4176,IR(0, 0),IR(8910, 40)/* StorageTensorArrayNonUniformIndexingARM */,IR(0, 0),IR(1, 0),IR(36, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4201,IR(0, 0),IR(8950, 28)/* CooperativeMatrixLayoutsARM */,IR(0, 0),IR(1, 0),IR(37, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4212,IR(0, 0),IR(8978, 10)/* Float8EXT */,IR(0, 0),IR(1, 0),IR(38, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4213,IR(0, 0),IR(8988, 27)/* Float8CooperativeMatrixEXT */,IR(0, 0),IR(1, 0),IR(38, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4422,IR(0, 0),IR(5796, 23)/* FragmentShadingRateKHR */,IR(0, 0),IR(3, 1),IR(7, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4423,IR(0, 0),IR(5330, 18)/* SubgroupBallotKHR */,IR(0, 0),IR(1, 0),IR(2, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4427,IR(0, 0),IR(5734, 15)/* DrawParameters */,IR(0, 0),IR(3, 1),IR(3, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4428,IR(0, 0),IR(9015, 33)/* WorkgroupMemoryExplicitLayoutKHR */,IR(0, 0),IR(3, 1),IR(39, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4429,IR(0, 0),IR(9048, 43)/* WorkgroupMemoryExplicitLayout8BitAccessKHR */,IR(0, 0),IR(77, 1),IR(39, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4430,IR(0, 0),IR(9091, 44)/* WorkgroupMemoryExplicitLayout16BitAccessKHR */,IR(0, 0),IR(77, 1),IR(39, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4431,IR(0, 0),IR(9135, 16)/* SubgroupVoteKHR */,IR(0, 0),IR(1, 0),IR(40, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4433,IR(0, 0),IR(9151, 25)/* StorageBuffer16BitAccess */,IR(23, 1),IR(1, 0),IR(41, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4434,IR(0, 0),IR(9204, 35)/* UniformAndStorageBuffer16BitAccess */,IR(24, 1),IR(78, 1),IR(41, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4435,IR(0, 0),IR(9256, 22)/* StoragePushConstant16 */,IR(0, 0),IR(1, 0),IR(41, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4436,IR(0, 0),IR(9278, 21)/* StorageInputOutput16 */,IR(0, 0),IR(1, 0),IR(41, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4437,IR(0, 0),IR(5831, 12)/* DeviceGroup */,IR(0, 0),IR(1, 0),IR(8, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4439,IR(0, 0),IR(5853, 10)/* MultiView */,IR(0, 0),IR(3, 1),IR(9, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4441,IR(0, 0),IR(9299, 30)/* VariablePointersStorageBuffer */,IR(0, 0),IR(3, 1),IR(42, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4442,IR(0, 0),IR(9329, 17)/* VariablePointers */,IR(0, 0),IR(79, 1),IR(42, 1),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4445,IR(0, 0),IR(9346, 17)/* AtomicStorageOps */,IR(0, 0),IR(80, 1),IR(43, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4447,IR(0, 0),IR(9363, 28)/* SampleMaskPostDepthCoverage */,IR(0, 0),IR(1, 0),IR(44, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4448,IR(0, 0),IR(9391, 24)/* StorageBuffer8BitAccess */,IR(0, 0),IR(1, 0),IR(45, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4449,IR(0, 0),IR(9415, 34)/* UniformAndStorageBuffer8BitAccess */,IR(0, 0),IR(81, 1),IR(45, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4450,IR(0, 0),IR(9449, 21)/* StoragePushConstant8 */,IR(0, 0),IR(1, 0),IR(45, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4464,IR(0, 0),IR(9470, 15)/* DenormPreserve */,IR(0, 0),IR(1, 0),IR(46, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4465,IR(0, 0),IR(9485, 18)/* DenormFlushToZero */,IR(0, 0),IR(1, 0),IR(46, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4466,IR(0, 0),IR(9503, 25)/* SignedZeroInfNanPreserve */,IR(0, 0),IR(1, 0),IR(46, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4467,IR(0, 0),IR(9528, 16)/* RoundingModeRTE */,IR(0, 0),IR(1, 0),IR(46, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4468,IR(0, 0),IR(9544, 16)/* RoundingModeRTZ */,IR(0, 0),IR(1, 0),IR(46, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4471,IR(0, 0),IR(9560, 23)/* RayQueryProvisionalKHR */,IR(0, 0),IR(3, 1),IR(47, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4472,IR(0, 0),IR(9583, 12)/* RayQueryKHR */,IR(0, 0),IR(3, 1),IR(47, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4473,IR(0, 0),IR(9595, 19)/* UntypedPointersKHR */,IR(0, 0),IR(1, 0),IR(48, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4478,IR(0, 0),IR(9614, 32)/* RayTraversalPrimitiveCullingKHR */,IR(0, 0),IR(82, 2),IR(49, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4479,IR(0, 0),IR(4817, 14)/* RayTracingKHR */,IR(0, 0),IR(3, 1),IR(28, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4484,IR(0, 0),IR(9646, 26)/* TextureSampleWeightedQCOM */,IR(0, 0),IR(1, 0),IR(51, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4485,IR(0, 0),IR(9672, 21)/* TextureBoxFilterQCOM */,IR(0, 0),IR(1, 0),IR(51, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4486,IR(0, 0),IR(9693, 22)/* TextureBlockMatchQCOM */,IR(0, 0),IR(1, 0),IR(51, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4495,IR(0, 0),IR(5893, 16)/* TileShadingQCOM */,IR(0, 0),IR(3, 1),IR(52, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {4498,IR(0, 0),IR(9715, 23)/* TextureBlockMatch2QCOM */,IR(0, 0),IR(1, 0),IR(53, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5008,IR(0, 0),IR(9738, 16)/* Float16ImageAMD */,IR(0, 0),IR(3, 1),IR(54, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5009,IR(0, 0),IR(9754, 22)/* ImageGatherBiasLodAMD */,IR(0, 0),IR(3, 1),IR(55, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5010,IR(0, 0),IR(9776, 16)/* FragmentMaskAMD */,IR(0, 0),IR(3, 1),IR(56, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5013,IR(0, 0),IR(6130, 17)/* StencilExportEXT */,IR(0, 0),IR(3, 1),IR(11, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5015,IR(0, 0),IR(9792, 21)/* ImageReadWriteLodAMD */,IR(0, 0),IR(3, 1),IR(57, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5016,IR(0, 0),IR(9813, 14)/* Int64ImageEXT */,IR(0, 0),IR(3, 1),IR(58, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5055,IR(0, 0),IR(9827, 15)/* ShaderClockKHR */,IR(0, 0),IR(1, 0),IR(59, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5067,IR(0, 0),IR(6176, 18)/* ShaderEnqueueAMDX */,IR(0, 0),IR(3, 1),IR(60, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5087,IR(0, 0),IR(9842, 15)/* QuadControlKHR */,IR(0, 0),IR(1, 0),IR(61, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5112,IR(0, 0),IR(9857, 14)/* Int4TypeINTEL */,IR(0, 0),IR(1, 0),IR(62, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5114,IR(0, 0),IR(9871, 27)/* Int4CooperativeMatrixINTEL */,IR(0, 0),IR(84, 2),IR(62, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5116,IR(0, 0),IR(9919, 16)/* BFloat16TypeKHR */,IR(0, 0),IR(1, 0),IR(63, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5117,IR(0, 0),IR(9935, 22)/* BFloat16DotProductKHR */,IR(0, 0),IR(86, 1),IR(63, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5118,IR(0, 0),IR(9957, 29)/* BFloat16CooperativeMatrixKHR */,IR(0, 0),IR(87, 2),IR(63, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5249,IR(0, 0),IR(9986, 29)/* SampleMaskOverrideCoverageNV */,IR(0, 0),IR(25, 1),IR(64, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5251,IR(0, 0),IR(10015, 28)/* GeometryShaderPassthroughNV */,IR(0, 0),IR(69, 1),IR(65, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5254,IR(0, 0),IR(4891, 28)/* ShaderViewportIndexLayerEXT */,IR(25, 1),IR(89, 1),IR(66, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5255,IR(0, 0),IR(6225, 21)/* ShaderViewportMaskNV */,IR(0, 0),IR(90, 1),IR(68, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5259,IR(0, 0),IR(6266, 19)/* ShaderStereoViewNV */,IR(0, 0),IR(91, 1),IR(14, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5260,IR(0, 0),IR(6327, 20)/* PerViewAttributesNV */,IR(0, 0),IR(40, 1),IR(69, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5265,IR(0, 0),IR(6385, 24)/* FragmentFullyCoveredEXT */,IR(0, 0),IR(3, 1),IR(17, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5266,IR(0, 0),IR(4831, 14)/* MeshShadingNV */,IR(0, 0),IR(3, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5282,IR(0, 0),IR(10070, 17)/* ImageFootprintNV */,IR(0, 0),IR(1, 0),IR(70, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5283,IR(0, 0),IR(4845, 15)/* MeshShadingEXT */,IR(0, 0),IR(3, 1),IR(23, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5284,IR(0, 0),IR(6575, 23)/* FragmentBarycentricKHR */,IR(26, 1),IR(1, 0),IR(19, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5288,IR(0, 0),IR(10109, 31)/* ComputeDerivativeGroupQuadsKHR */,IR(27, 1),IR(3, 1),IR(71, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5291,IR(0, 0),IR(6664, 19)/* FragmentDensityEXT */,IR(28, 1),IR(3, 1),IR(21, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5297,IR(0, 0),IR(10184, 29)/* GroupNonUniformPartitionedNV */,IR(0, 0),IR(1, 0),IR(73, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5301,IR(0, 0),IR(10213, 17)/* ShaderNonUniform */,IR(29, 1),IR(3, 1),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5302,IR(0, 0),IR(10250, 23)/* RuntimeDescriptorArray */,IR(30, 1),IR(3, 1),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5303,IR(0, 0),IR(10299, 36)/* InputAttachmentArrayDynamicIndexing */,IR(31, 1),IR(92, 1),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5304,IR(0, 0),IR(10374, 39)/* UniformTexelBufferArrayDynamicIndexing */,IR(32, 1),IR(73, 1),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5305,IR(0, 0),IR(10455, 39)/* StorageTexelBufferArrayDynamicIndexing */,IR(33, 1),IR(93, 1),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5306,IR(0, 0),IR(10536, 37)/* UniformBufferArrayNonUniformIndexing */,IR(34, 1),IR(94, 1),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5307,IR(0, 0),IR(10613, 36)/* SampledImageArrayNonUniformIndexing */,IR(35, 1),IR(94, 1),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5308,IR(0, 0),IR(10688, 37)/* StorageBufferArrayNonUniformIndexing */,IR(36, 1),IR(94, 1),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5309,IR(0, 0),IR(10765, 36)/* StorageImageArrayNonUniformIndexing */,IR(37, 1),IR(94, 1),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5310,IR(0, 0),IR(10840, 39)/* InputAttachmentArrayNonUniformIndexing */,IR(38, 1),IR(95, 2),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5311,IR(0, 0),IR(10921, 42)/* UniformTexelBufferArrayNonUniformIndexing */,IR(39, 1),IR(97, 2),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5312,IR(0, 0),IR(11008, 42)/* StorageTexelBufferArrayNonUniformIndexing */,IR(40, 1),IR(99, 2),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5336,IR(0, 0),IR(7279, 27)/* RayTracingPositionFetchKHR */,IR(0, 0),IR(3, 1),IR(75, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5340,IR(0, 0),IR(4804, 13)/* RayTracingNV */,IR(0, 0),IR(3, 1),IR(26, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5341,IR(0, 0),IR(7226, 23)/* RayTracingMotionBlurNV */,IR(0, 0),IR(3, 1),IR(27, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5345,IR(0, 0),IR(11095, 18)/* VulkanMemoryModel */,IR(41, 1),IR(1, 0),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5346,IR(0, 0),IR(11134, 29)/* VulkanMemoryModelDeviceScope */,IR(42, 1),IR(1, 0),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5347,IR(0, 0),IR(4667, 31)/* PhysicalStorageBufferAddresses */,IR(43, 1),IR(3, 1),IR(0, 2),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5350,IR(0, 0),IR(11229, 32)/* ComputeDerivativeGroupLinearKHR */,IR(44, 1),IR(3, 1),IR(71, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5353,IR(0, 0),IR(11292, 25)/* RayTracingProvisionalKHR */,IR(0, 0),IR(3, 1),IR(28, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5357,IR(0, 0),IR(11317, 20)/* CooperativeMatrixNV */,IR(0, 0),IR(3, 1),IR(77, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5363,IR(0, 0),IR(11337, 33)/* FragmentShaderSampleInterlockEXT */,IR(0, 0),IR(3, 1),IR(78, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5372,IR(0, 0),IR(11370, 38)/* FragmentShaderShadingRateInterlockEXT */,IR(0, 0),IR(3, 1),IR(78, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5373,IR(0, 0),IR(7594, 19)/* ShaderSMBuiltinsNV */,IR(0, 0),IR(3, 1),IR(30, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5378,IR(0, 0),IR(11408, 32)/* FragmentShaderPixelInterlockEXT */,IR(0, 0),IR(3, 1),IR(78, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5379,IR(0, 0),IR(11440, 25)/* DemoteToHelperInvocation */,IR(45, 1),IR(3, 1),IR(79, 1),SPV_SPIRV_VERSION_WORD(1,6),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5380,IR(0, 0),IR(11493, 23)/* DisplacementMicromapNV */,IR(0, 0),IR(3, 1),IR(80, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5381,IR(0, 0),IR(11516, 29)/* RayTracingOpacityMicromapEXT */,IR(0, 0),IR(3, 1),IR(81, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5383,IR(0, 0),IR(11545, 26)/* ShaderInvocationReorderNV */,IR(0, 0),IR(60, 1),IR(82, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5390,IR(0, 0),IR(11571, 18)/* BindlessTextureNV */,IR(0, 0),IR(1, 0),IR(83, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5391,IR(0, 0),IR(11589, 25)/* RayQueryPositionFetchKHR */,IR(0, 0),IR(3, 1),IR(75, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5394,IR(0, 0),IR(11614, 20)/* CooperativeVectorNV */,IR(0, 0),IR(1, 0),IR(84, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5404,IR(0, 0),IR(11634, 22)/* AtomicFloat16VectorNV */,IR(0, 0),IR(1, 0),IR(85, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5409,IR(0, 0),IR(7340, 33)/* RayTracingDisplacementMicromapNV */,IR(0, 0),IR(60, 1),IR(80, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5414,IR(0, 0),IR(11656, 18)/* RawAccessChainsNV */,IR(0, 0),IR(1, 0),IR(86, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5418,IR(0, 0),IR(7483, 28)/* RayTracingSpheresGeometryNV */,IR(0, 0),IR(1, 0),IR(29, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5419,IR(0, 0),IR(7522, 39)/* RayTracingLinearSweptSpheresGeometryNV */,IR(0, 0),IR(1, 0),IR(29, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5430,IR(0, 0),IR(11674, 30)/* CooperativeMatrixReductionsNV */,IR(0, 0),IR(1, 0),IR(87, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5431,IR(0, 0),IR(11704, 31)/* CooperativeMatrixConversionsNV */,IR(0, 0),IR(1, 0),IR(87, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5432,IR(0, 0),IR(11735, 40)/* CooperativeMatrixPerElementOperationsNV */,IR(0, 0),IR(1, 0),IR(87, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5433,IR(0, 0),IR(11775, 36)/* CooperativeMatrixTensorAddressingNV */,IR(0, 0),IR(1, 0),IR(87, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5434,IR(0, 0),IR(11811, 30)/* CooperativeMatrixBlockLoadsNV */,IR(0, 0),IR(1, 0),IR(87, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5435,IR(0, 0),IR(11841, 28)/* CooperativeVectorTrainingNV */,IR(0, 0),IR(1, 0),IR(84, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5437,IR(0, 0),IR(7768, 41)/* RayTracingClusterAccelerationStructureNV */,IR(0, 0),IR(60, 1),IR(31, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5439,IR(0, 0),IR(11869, 19)/* TensorAddressingNV */,IR(0, 0),IR(1, 0),IR(88, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5568,IR(0, 0),IR(11888, 21)/* SubgroupShuffleINTEL */,IR(0, 0),IR(1, 0),IR(89, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5569,IR(0, 0),IR(11909, 27)/* SubgroupBufferBlockIOINTEL */,IR(0, 0),IR(1, 0),IR(89, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5570,IR(0, 0),IR(11936, 26)/* SubgroupImageBlockIOINTEL */,IR(0, 0),IR(1, 0),IR(89, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5579,IR(0, 0),IR(11962, 31)/* SubgroupImageMediaBlockIOINTEL */,IR(0, 0),IR(1, 0),IR(90, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5582,IR(0, 0),IR(11993, 21)/* RoundToInfinityINTEL */,IR(0, 0),IR(1, 0),IR(91, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5583,IR(0, 0),IR(12014, 23)/* FloatingPointModeINTEL */,IR(0, 0),IR(1, 0),IR(91, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5584,IR(0, 0),IR(12037, 23)/* IntegerFunctions2INTEL */,IR(0, 0),IR(1, 0),IR(92, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5603,IR(0, 0),IR(12060, 22)/* FunctionPointersINTEL */,IR(0, 0),IR(1, 0),IR(93, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5604,IR(0, 0),IR(12082, 24)/* IndirectReferencesINTEL */,IR(0, 0),IR(1, 0),IR(93, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5606,IR(0, 0),IR(12106, 9)/* AsmINTEL */,IR(0, 0),IR(1, 0),IR(94, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5612,IR(0, 0),IR(12115, 23)/* AtomicFloat32MinMaxEXT */,IR(0, 0),IR(1, 0),IR(95, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5613,IR(0, 0),IR(12138, 23)/* AtomicFloat64MinMaxEXT */,IR(0, 0),IR(1, 0),IR(95, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5616,IR(0, 0),IR(12161, 23)/* AtomicFloat16MinMaxEXT */,IR(0, 0),IR(1, 0),IR(95, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5617,IR(0, 0),IR(12184, 19)/* VectorComputeINTEL */,IR(0, 0),IR(101, 1),IR(96, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5619,IR(0, 0),IR(12203, 15)/* VectorAnyINTEL */,IR(0, 0),IR(1, 0),IR(96, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5629,IR(0, 0),IR(12218, 16)/* ExpectAssumeKHR */,IR(0, 0),IR(1, 0),IR(97, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5696,IR(0, 0),IR(12234, 33)/* SubgroupAvcMotionEstimationINTEL */,IR(0, 0),IR(1, 0),IR(98, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5697,IR(0, 0),IR(12267, 38)/* SubgroupAvcMotionEstimationIntraINTEL */,IR(0, 0),IR(1, 0),IR(98, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5698,IR(0, 0),IR(12305, 39)/* SubgroupAvcMotionEstimationChromaINTEL */,IR(0, 0),IR(1, 0),IR(98, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5817,IR(0, 0),IR(12344, 25)/* VariableLengthArrayINTEL */,IR(0, 0),IR(1, 0),IR(99, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5821,IR(0, 0),IR(12369, 26)/* FunctionFloatControlINTEL */,IR(0, 0),IR(1, 0),IR(91, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5824,IR(0, 0),IR(12395, 26)/* FPGAMemoryAttributesINTEL */,IR(0, 0),IR(1, 0),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5837,IR(0, 0),IR(12421, 20)/* FPFastMathModeINTEL */,IR(0, 0),IR(0, 1),IR(101, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5844,IR(0, 0),IR(12441, 32)/* ArbitraryPrecisionIntegersINTEL */,IR(0, 0),IR(1, 0),IR(102, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5845,IR(0, 0),IR(12473, 37)/* ArbitraryPrecisionFloatingPointINTEL */,IR(0, 0),IR(1, 0),IR(103, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5886,IR(0, 0),IR(12510, 30)/* UnstructuredLoopControlsINTEL */,IR(0, 0),IR(1, 0),IR(104, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5888,IR(0, 0),IR(12540, 22)/* FPGALoopControlsINTEL */,IR(0, 0),IR(1, 0),IR(105, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5892,IR(0, 0),IR(12562, 22)/* KernelAttributesINTEL */,IR(0, 0),IR(1, 0),IR(106, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5897,IR(0, 0),IR(12584, 26)/* FPGAKernelAttributesINTEL */,IR(0, 0),IR(1, 0),IR(106, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5898,IR(0, 0),IR(12610, 24)/* FPGAMemoryAccessesINTEL */,IR(0, 0),IR(1, 0),IR(107, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5904,IR(0, 0),IR(12634, 27)/* FPGAClusterAttributesINTEL */,IR(0, 0),IR(1, 0),IR(108, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5906,IR(0, 0),IR(12661, 14)/* LoopFuseINTEL */,IR(0, 0),IR(1, 0),IR(109, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5908,IR(0, 0),IR(12675, 20)/* FPGADSPControlINTEL */,IR(0, 0),IR(1, 0),IR(110, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5910,IR(0, 0),IR(12695, 26)/* MemoryAccessAliasingINTEL */,IR(0, 0),IR(1, 0),IR(111, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5916,IR(0, 0),IR(12721, 40)/* FPGAInvocationPipeliningAttributesINTEL */,IR(0, 0),IR(1, 0),IR(112, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5920,IR(0, 0),IR(12761, 24)/* FPGABufferLocationINTEL */,IR(0, 0),IR(1, 0),IR(113, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5922,IR(0, 0),IR(12785, 34)/* ArbitraryPrecisionFixedPointINTEL */,IR(0, 0),IR(1, 0),IR(114, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5935,IR(0, 0),IR(12819, 23)/* USMStorageClassesINTEL */,IR(0, 0),IR(1, 0),IR(115, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5939,IR(0, 0),IR(12842, 29)/* RuntimeAlignedAttributeINTEL */,IR(0, 0),IR(1, 0),IR(116, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5943,IR(0, 0),IR(12871, 13)/* IOPipesINTEL */,IR(0, 0),IR(1, 0),IR(117, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5945,IR(0, 0),IR(12884, 19)/* BlockingPipesINTEL */,IR(0, 0),IR(1, 0),IR(118, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {5948,IR(0, 0),IR(12903, 13)/* FPGARegINTEL */,IR(0, 0),IR(1, 0),IR(119, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6016,IR(0, 0),IR(12916, 19)/* DotProductInputAll */,IR(46, 1),IR(1, 0),IR(120, 1),SPV_SPIRV_VERSION_WORD(1,6),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6017,IR(0, 0),IR(12957, 22)/* DotProductInput4x8Bit */,IR(47, 1),IR(102, 1),IR(120, 1),SPV_SPIRV_VERSION_WORD(1,6),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6018,IR(0, 0),IR(13004, 28)/* DotProductInput4x8BitPacked */,IR(48, 1),IR(1, 0),IR(120, 1),SPV_SPIRV_VERSION_WORD(1,6),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6019,IR(0, 0),IR(13063, 11)/* DotProduct */,IR(49, 1),IR(1, 0),IR(120, 1),SPV_SPIRV_VERSION_WORD(1,6),0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6020,IR(0, 0),IR(7821, 15)/* RayCullMaskKHR */,IR(0, 0),IR(1, 0),IR(32, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6022,IR(0, 0),IR(9898, 21)/* CooperativeMatrixKHR */,IR(0, 0),IR(1, 0),IR(121, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6024,IR(0, 0),IR(13088, 24)/* ReplicatedCompositesEXT */,IR(0, 0),IR(1, 0),IR(122, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6025,IR(0, 0),IR(13112, 16)/* BitInstructions */,IR(0, 0),IR(1, 0),IR(123, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6026,IR(0, 0),IR(13128, 25)/* GroupNonUniformRotateKHR */,IR(0, 0),IR(76, 1),IR(124, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6029,IR(0, 0),IR(13153, 15)/* FloatControls2 */,IR(0, 0),IR(1, 0),IR(125, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6033,IR(0, 0),IR(13168, 20)/* AtomicFloat32AddEXT */,IR(0, 0),IR(1, 0),IR(126, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6034,IR(0, 0),IR(13188, 20)/* AtomicFloat64AddEXT */,IR(0, 0),IR(1, 0),IR(126, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6089,IR(0, 0),IR(13208, 20)/* LongCompositesINTEL */,IR(0, 0),IR(1, 0),IR(127, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6094,IR(0, 0),IR(13228, 11)/* OptNoneEXT */,IR(50, 1),IR(1, 0),IR(128, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6095,IR(0, 0),IR(13252, 20)/* AtomicFloat16AddEXT */,IR(0, 0),IR(1, 0),IR(130, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6114,IR(0, 0),IR(13272, 21)/* DebugInfoModuleINTEL */,IR(0, 0),IR(1, 0),IR(131, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6115,IR(0, 0),IR(13293, 24)/* BFloat16ConversionINTEL */,IR(0, 0),IR(1, 0),IR(132, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6141,IR(0, 0),IR(13317, 18)/* SplitBarrierINTEL */,IR(0, 0),IR(1, 0),IR(133, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6144,IR(0, 0),IR(13335, 19)/* ArithmeticFenceEXT */,IR(0, 0),IR(1, 0),IR(134, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6150,IR(0, 0),IR(13354, 29)/* FPGAClusterAttributesV2INTEL */,IR(0, 0),IR(103, 1),IR(108, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6161,IR(0, 0),IR(13383, 28)/* FPGAKernelAttributesv2INTEL */,IR(0, 0),IR(104, 1),IR(106, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6162,IR(0, 0),IR(13411, 18)/* TaskSequenceINTEL */,IR(0, 0),IR(1, 0),IR(135, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6169,IR(0, 0),IR(13429, 16)/* FPMaxErrorINTEL */,IR(0, 0),IR(1, 0),IR(136, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6171,IR(0, 0),IR(13445, 24)/* FPGALatencyControlINTEL */,IR(0, 0),IR(1, 0),IR(137, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6174,IR(0, 0),IR(13469, 28)/* FPGAArgumentInterfacesINTEL */,IR(0, 0),IR(1, 0),IR(138, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6187,IR(0, 0),IR(13497, 30)/* GlobalVariableHostAccessINTEL */,IR(0, 0),IR(1, 0),IR(139, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6189,IR(0, 0),IR(13527, 35)/* GlobalVariableFPGADecorationsINTEL */,IR(0, 0),IR(1, 0),IR(140, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6220,IR(0, 0),IR(13562, 28)/* SubgroupBufferPrefetchINTEL */,IR(0, 0),IR(1, 0),IR(141, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6228,IR(0, 0),IR(13590, 23)/* Subgroup2DBlockIOINTEL */,IR(0, 0),IR(1, 0),IR(142, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6229,IR(0, 0),IR(13613, 30)/* Subgroup2DBlockTransformINTEL */,IR(0, 0),IR(105, 1),IR(142, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6230,IR(0, 0),IR(13643, 30)/* Subgroup2DBlockTransposeINTEL */,IR(0, 0),IR(105, 1),IR(142, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6236,IR(0, 0),IR(13673, 38)/* SubgroupMatrixMultiplyAccumulateINTEL */,IR(0, 0),IR(1, 0),IR(143, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6241,IR(0, 0),IR(13711, 28)/* TernaryBitwiseFunctionINTEL */,IR(0, 0),IR(1, 0),IR(144, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6400,IR(0, 0),IR(13739, 26)/* GroupUniformArithmeticKHR */,IR(0, 0),IR(1, 0),IR(145, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6425,IR(0, 0),IR(13765, 27)/* TensorFloat32RoundingINTEL */,IR(0, 0),IR(1, 0),IR(146, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6427,IR(0, 0),IR(13792, 25)/* MaskedGatherScatterINTEL */,IR(0, 0),IR(1, 0),IR(147, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6441,IR(0, 0),IR(13817, 19)/* CacheControlsINTEL */,IR(0, 0),IR(1, 0),IR(148, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6460,IR(0, 0),IR(13836, 20)/* RegisterLimitsINTEL */,IR(0, 0),IR(1, 0),IR(149, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {6528,IR(0, 0),IR(13856, 20)/* BindlessImagesINTEL */,IR(0, 0),IR(1, 0),IR(150, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_CAPABILITY + {0,IR(0, 0),IR(13876, 12)/* Unspecified */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {1,IR(0, 0),IR(13888, 8)/* Address */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {2,IR(0, 0),IR(13896, 8)/* Boolean */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {3,IR(0, 0),IR(13904, 6)/* Float */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {4,IR(0, 0),IR(13910, 7)/* Signed */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {5,IR(0, 0),IR(13917, 11)/* SignedChar */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {6,IR(0, 0),IR(13928, 9)/* Unsigned */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {7,IR(0, 0),IR(13937, 13)/* UnsignedChar */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {0,IR(0, 0),IR(13950, 6)/* Class */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE + {1,IR(0, 0),IR(13956, 10)/* Structure */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE + {2,IR(0, 0),IR(13966, 6)/* Union */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE + {0,IR(0, 0),IR(13972, 15)/* ImportedModule */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY + {1,IR(0, 0),IR(13987, 20)/* ImportedDeclaration */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {1,IR(0, 0),IR(14012, 16)/* FlagIsProtected */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {2,IR(0, 0),IR(14028, 14)/* FlagIsPrivate */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {3,IR(0, 0),IR(14042, 13)/* FlagIsPublic */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {4,IR(0, 0),IR(14055, 12)/* FlagIsLocal */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {8,IR(0, 0),IR(14067, 17)/* FlagIsDefinition */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {16,IR(0, 0),IR(14084, 12)/* FlagFwdDecl */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {32,IR(0, 0),IR(14096, 15)/* FlagArtificial */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {64,IR(0, 0),IR(14111, 13)/* FlagExplicit */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {128,IR(0, 0),IR(14124, 15)/* FlagPrototyped */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {256,IR(0, 0),IR(14139, 18)/* FlagObjectPointer */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {512,IR(0, 0),IR(14157, 17)/* FlagStaticMember */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {1024,IR(0, 0),IR(14174, 21)/* FlagIndirectVariable */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {2048,IR(0, 0),IR(14195, 20)/* FlagLValueReference */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {4096,IR(0, 0),IR(14215, 20)/* FlagRValueReference */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {8192,IR(0, 0),IR(14235, 16)/* FlagIsOptimized */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {16384,IR(0, 0),IR(14251, 16)/* FlagIsEnumClass */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {32768,IR(0, 0),IR(14267, 20)/* FlagTypePassByValue */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {65536,IR(0, 0),IR(14287, 24)/* FlagTypePassByReference */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {0,IR(0, 0),IR(14311, 6)/* Deref */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {1,IR(0, 0),IR(14317, 5)/* Plus */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {2,IR(0, 0),IR(14322, 6)/* Minus */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {3,IR(0, 1),IR(14361, 11)/* PlusUconst */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {4,IR(1, 2),IR(14372, 9)/* BitPiece */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {5,IR(0, 0),IR(14381, 5)/* Swap */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {6,IR(0, 0),IR(14386, 7)/* Xderef */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {7,IR(0, 0),IR(14393, 11)/* StackValue */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {8,IR(0, 1),IR(14404, 7)/* Constu */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {9,IR(1, 2),IR(14411, 9)/* Fragment */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {0,IR(0, 0),IR(14420, 10)/* ConstType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER + {1,IR(0, 0),IR(14430, 13)/* VolatileType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER + {2,IR(0, 0),IR(14443, 13)/* RestrictType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER + {3,IR(0, 0),IR(14456, 11)/* AtomicType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER + {0,IR(0, 0),IR(14467, 10)/* Float16NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {1,IR(0, 0),IR(14477, 10)/* Float32NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {2,IR(0, 0),IR(14487, 10)/* Float64NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {3,IR(0, 0),IR(14497, 13)/* SignedInt8NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {4,IR(0, 0),IR(14510, 14)/* SignedInt16NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {5,IR(0, 0),IR(14524, 14)/* SignedInt32NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {6,IR(0, 0),IR(14538, 14)/* SignedInt64NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {7,IR(0, 0),IR(14552, 15)/* UnsignedInt8NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {8,IR(0, 0),IR(14567, 16)/* UnsignedInt16NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {9,IR(0, 0),IR(14583, 16)/* UnsignedInt32NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {10,IR(0, 0),IR(14599, 16)/* UnsignedInt64NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {1000491000,IR(0, 0),IR(14615, 19)/* SignedInt8PackedNV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {1000491001,IR(0, 0),IR(14634, 21)/* UnsignedInt8PackedNV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {1000491002,IR(0, 0),IR(14655, 12)/* FloatE4M3NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {1000491003,IR(0, 0),IR(14667, 12)/* FloatE5M2NV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COMPONENT_TYPE + {0,IR(0, 0),IR(14679, 12)/* RowMajorKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT + {1,IR(0, 0),IR(14691, 15)/* ColumnMajorKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT + {4202,IR(0, 0),IR(14706, 25)/* RowBlockedInterleavedARM */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT + {4203,IR(0, 0),IR(14731, 28)/* ColumnBlockedInterleavedARM */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT + {0,IR(0, 0),IR(14759, 8)/* NoneKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {1,IR(0, 0),IR(14767, 27)/* MatrixASignedComponentsKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {2,IR(0, 0),IR(14794, 27)/* MatrixBSignedComponentsKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {4,IR(0, 0),IR(14821, 27)/* MatrixCSignedComponentsKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {8,IR(0, 0),IR(14848, 32)/* MatrixResultSignedComponentsKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {16,IR(0, 0),IR(14880, 26)/* SaturatingAccumulationKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {1,IR(0, 0),IR(14906, 4)/* Row */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE + {2,IR(0, 0),IR(14910, 7)/* Column */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE + {4,IR(0, 0),IR(14917, 4)/* 2x2 */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE + {0,IR(0, 0),IR(14921, 11)/* MatrixAKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_USE + {1,IR(0, 0),IR(14932, 11)/* MatrixBKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_USE + {2,IR(0, 0),IR(14943, 21)/* MatrixAccumulatorKHR */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_USE + {0,IR(0, 0),IR(14964, 11)/* RowMajorNV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT + {1,IR(0, 0),IR(14975, 14)/* ColumnMajorNV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT + {2,IR(0, 0),IR(14989, 21)/* InferencingOptimalNV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT + {3,IR(0, 0),IR(15010, 18)/* TrainingOptimalNV */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT + {0,IR(0, 0),IR(13876, 12)/* Unspecified */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {1,IR(0, 0),IR(13888, 8)/* Address */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {2,IR(0, 0),IR(13896, 8)/* Boolean */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {4,IR(0, 0),IR(13904, 6)/* Float */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {5,IR(0, 0),IR(13910, 7)/* Signed */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {6,IR(0, 0),IR(13917, 11)/* SignedChar */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {7,IR(0, 0),IR(13928, 9)/* Unsigned */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {8,IR(0, 0),IR(13937, 13)/* UnsignedChar */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {0,IR(0, 0),IR(13950, 6)/* Class */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE + {1,IR(0, 0),IR(13956, 10)/* Structure */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE + {2,IR(0, 0),IR(13966, 6)/* Union */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {1,IR(0, 0),IR(14012, 16)/* FlagIsProtected */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {2,IR(0, 0),IR(14028, 14)/* FlagIsPrivate */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {3,IR(0, 0),IR(14042, 13)/* FlagIsPublic */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {4,IR(0, 0),IR(14055, 12)/* FlagIsLocal */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {8,IR(0, 0),IR(14067, 17)/* FlagIsDefinition */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {16,IR(0, 0),IR(14084, 12)/* FlagFwdDecl */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {32,IR(0, 0),IR(14096, 15)/* FlagArtificial */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {64,IR(0, 0),IR(14111, 13)/* FlagExplicit */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {128,IR(0, 0),IR(14124, 15)/* FlagPrototyped */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {256,IR(0, 0),IR(14139, 18)/* FlagObjectPointer */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {512,IR(0, 0),IR(14157, 17)/* FlagStaticMember */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {1024,IR(0, 0),IR(14174, 21)/* FlagIndirectVariable */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {2048,IR(0, 0),IR(14195, 20)/* FlagLValueReference */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {4096,IR(0, 0),IR(14215, 20)/* FlagRValueReference */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {8192,IR(0, 0),IR(14235, 16)/* FlagIsOptimized */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {0,IR(0, 0),IR(14311, 6)/* Deref */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_OPERATION + {1,IR(0, 0),IR(14317, 5)/* Plus */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_OPERATION + {2,IR(0, 0),IR(14322, 6)/* Minus */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_OPERATION + {3,IR(0, 1),IR(14361, 11)/* PlusUconst */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_OPERATION + {4,IR(1, 2),IR(14372, 9)/* BitPiece */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_OPERATION + {5,IR(0, 0),IR(14381, 5)/* Swap */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_OPERATION + {6,IR(0, 0),IR(14386, 7)/* Xderef */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_OPERATION + {7,IR(0, 0),IR(14393, 11)/* StackValue */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_OPERATION + {8,IR(0, 1),IR(14404, 7)/* Constu */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_OPERATION + {0,IR(0, 0),IR(14420, 10)/* ConstType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER + {1,IR(0, 0),IR(14430, 13)/* VolatileType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER + {2,IR(0, 0),IR(14443, 13)/* RestrictType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER + {0,IR(0, 0),IR(15028, 17)/* RelaxedPrecision */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {1,IR(0, 1),IR(15045, 7)/* SpecId */,IR(0, 0),IR(106, 2),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {2,IR(0, 0),IR(15052, 6)/* Block */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {3,IR(0, 0),IR(15058, 12)/* BufferBlock */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),SPV_SPIRV_VERSION_WORD(1,3)}, // SPV_OPERAND_TYPE_DECORATION + {4,IR(0, 0),IR(15070, 9)/* RowMajor */,IR(0, 0),IR(66, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5,IR(0, 0),IR(15079, 9)/* ColMajor */,IR(0, 0),IR(66, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6,IR(0, 1),IR(15088, 12)/* ArrayStride */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {7,IR(0, 1),IR(15100, 13)/* MatrixStride */,IR(0, 0),IR(66, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {8,IR(0, 0),IR(15113, 11)/* GLSLShared */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {9,IR(0, 0),IR(15124, 11)/* GLSLPacked */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {10,IR(0, 0),IR(15135, 8)/* CPacked */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {11,IR(3, 1),IR(15169, 8)/* BuiltIn */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {13,IR(0, 0),IR(15177, 14)/* NoPerspective */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {14,IR(0, 0),IR(15191, 5)/* Flat */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {15,IR(0, 0),IR(15196, 6)/* Patch */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {16,IR(0, 0),IR(15202, 9)/* Centroid */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {17,IR(0, 0),IR(15211, 7)/* Sample */,IR(0, 0),IR(25, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {18,IR(0, 0),IR(15218, 10)/* Invariant */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {19,IR(0, 0),IR(15228, 9)/* Restrict */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {20,IR(0, 0),IR(15237, 8)/* Aliased */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {21,IR(0, 0),IR(15245, 9)/* Volatile */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {22,IR(0, 0),IR(15254, 9)/* Constant */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {23,IR(0, 0),IR(15263, 9)/* Coherent */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {24,IR(0, 0),IR(15272, 12)/* NonWritable */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {25,IR(0, 0),IR(15284, 12)/* NonReadable */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {26,IR(0, 0),IR(15296, 8)/* Uniform */,IR(0, 0),IR(108, 2),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {27,IR(4, 1),IR(15330, 10)/* UniformId */,IR(0, 0),IR(108, 2),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {28,IR(0, 0),IR(15340, 20)/* SaturatedConversion */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {29,IR(0, 1),IR(15360, 7)/* Stream */,IR(0, 0),IR(110, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {30,IR(0, 1),IR(15367, 9)/* Location */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {31,IR(0, 1),IR(15376, 10)/* Component */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {32,IR(0, 1),IR(15386, 6)/* Index */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {33,IR(0, 1),IR(15392, 8)/* Binding */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {34,IR(0, 1),IR(15400, 14)/* DescriptorSet */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {35,IR(0, 1),IR(15414, 7)/* Offset */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {36,IR(0, 1),IR(15421, 10)/* XfbBuffer */,IR(0, 0),IR(111, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {37,IR(0, 1),IR(15431, 10)/* XfbStride */,IR(0, 0),IR(111, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {38,IR(5, 1),IR(15487, 14)/* FuncParamAttr */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {39,IR(6, 1),IR(15535, 15)/* FPRoundingMode */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {40,IR(7, 1),IR(15585, 15)/* FPFastMathMode */,IR(0, 0),IR(112, 2),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {41,IR(8, 2),IR(15662, 18)/* LinkageAttributes */,IR(0, 0),IR(114, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {42,IR(0, 0),IR(15680, 14)/* NoContraction */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {43,IR(0, 1),IR(15694, 21)/* InputAttachmentIndex */,IR(0, 0),IR(92, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {44,IR(0, 1),IR(15715, 10)/* Alignment */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {45,IR(0, 1),IR(15725, 14)/* MaxByteOffset */,IR(0, 0),IR(1, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,1),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {46,IR(10, 1),IR(15759, 12)/* AlignmentId */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,2),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {47,IR(10, 1),IR(15771, 16)/* MaxByteOffsetId */,IR(0, 0),IR(1, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,2),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {4216,IR(0, 0),IR(15787, 44)/* SaturatedToLargestFloat8NormalConversionEXT */,IR(0, 0),IR(115, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {4469,IR(0, 0),IR(15831, 13)/* NoSignedWrap */,IR(0, 0),IR(1, 0),IR(151, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {4470,IR(0, 0),IR(15844, 15)/* NoUnsignedWrap */,IR(0, 0),IR(1, 0),IR(151, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {4487,IR(0, 0),IR(15859, 18)/* WeightTextureQCOM */,IR(0, 0),IR(1, 0),IR(51, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {4488,IR(0, 0),IR(15877, 22)/* BlockMatchTextureQCOM */,IR(0, 0),IR(1, 0),IR(51, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {4499,IR(0, 0),IR(15899, 22)/* BlockMatchSamplerQCOM */,IR(0, 0),IR(1, 0),IR(53, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {4999,IR(0, 0),IR(15921, 18)/* ExplicitInterpAMD */,IR(0, 0),IR(1, 0),IR(10, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5019,IR(10, 1),IR(15939, 32)/* NodeSharesPayloadLimitsWithAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5020,IR(10, 1),IR(15971, 20)/* NodeMaxPayloadsAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5078,IR(0, 0),IR(15991, 23)/* TrackFinishWritingAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5091,IR(10, 1),IR(16014, 20)/* PayloadNodeNameAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5098,IR(10, 1),IR(16034, 25)/* PayloadNodeBaseIndexAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5099,IR(0, 0),IR(16059, 27)/* PayloadNodeSparseArrayAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5100,IR(10, 1),IR(16086, 25)/* PayloadNodeArraySizeAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5105,IR(0, 0),IR(16111, 28)/* PayloadDispatchIndirectAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5248,IR(0, 0),IR(16139, 19)/* OverrideCoverageNV */,IR(0, 0),IR(116, 1),IR(64, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5250,IR(0, 0),IR(16158, 14)/* PassthroughNV */,IR(0, 0),IR(117, 1),IR(65, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5252,IR(0, 0),IR(16172, 19)/* ViewportRelativeNV */,IR(0, 0),IR(91, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5256,IR(0, 1),IR(16191, 28)/* SecondaryViewportRelativeNV */,IR(0, 0),IR(46, 1),IR(14, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5271,IR(0, 0),IR(16219, 16)/* PerPrimitiveEXT */,IR(51, 1),IR(118, 2),IR(152, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5272,IR(0, 0),IR(16250, 10)/* PerViewNV */,IR(0, 0),IR(50, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5273,IR(0, 0),IR(16260, 10)/* PerTaskNV */,IR(0, 0),IR(50, 1),IR(18, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5285,IR(0, 0),IR(16270, 13)/* PerVertexKHR */,IR(52, 1),IR(51, 1),IR(19, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5300,IR(0, 0),IR(16295, 11)/* NonUniform */,IR(53, 1),IR(94, 1),IR(74, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5355,IR(0, 0),IR(16320, 16)/* RestrictPointer */,IR(54, 1),IR(2, 1),IR(0, 2),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5356,IR(0, 0),IR(16355, 15)/* AliasedPointer */,IR(55, 1),IR(2, 1),IR(0, 2),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5386,IR(0, 0),IR(16388, 30)/* HitObjectShaderRecordBufferNV */,IR(0, 0),IR(120, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5398,IR(0, 0),IR(16418, 18)/* BindlessSamplerNV */,IR(0, 0),IR(121, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5399,IR(0, 0),IR(16436, 16)/* BindlessImageNV */,IR(0, 0),IR(121, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5400,IR(0, 0),IR(16452, 15)/* BoundSamplerNV */,IR(0, 0),IR(121, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5401,IR(0, 0),IR(16467, 13)/* BoundImageNV */,IR(0, 0),IR(121, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5599,IR(0, 1),IR(16480, 14)/* SIMTCallINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5602,IR(0, 0),IR(16494, 26)/* ReferencedIndirectlyINTEL */,IR(0, 0),IR(123, 1),IR(93, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5607,IR(11, 1),IR(16520, 13)/* ClobberINTEL */,IR(0, 0),IR(124, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5608,IR(0, 0),IR(16533, 17)/* SideEffectsINTEL */,IR(0, 0),IR(124, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5624,IR(0, 0),IR(16550, 27)/* VectorComputeVariableINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5625,IR(0, 1),IR(16577, 21)/* FuncParamIOKindINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5626,IR(0, 0),IR(16598, 27)/* VectorComputeFunctionINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5627,IR(0, 0),IR(16625, 15)/* StackCallINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5628,IR(0, 1),IR(16640, 26)/* GlobalVariableOffsetINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5634,IR(10, 1),IR(16666, 14)/* CounterBuffer */,IR(56, 1),IR(1, 0),IR(154, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5635,IR(11, 1),IR(16704, 13)/* UserSemantic */,IR(57, 1),IR(1, 0),IR(154, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5636,IR(11, 1),IR(16736, 15)/* UserTypeGOOGLE */,IR(0, 0),IR(1, 0),IR(155, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5822,IR(12, 2),IR(16751, 26)/* FunctionRoundingModeINTEL */,IR(0, 0),IR(125, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5823,IR(14, 2),IR(16808, 24)/* FunctionDenormModeINTEL */,IR(0, 0),IR(125, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5825,IR(0, 0),IR(16832, 14)/* RegisterINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5826,IR(11, 1),IR(16846, 12)/* MemoryINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5827,IR(0, 1),IR(16858, 14)/* NumbanksINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5828,IR(0, 1),IR(16872, 15)/* BankwidthINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5829,IR(0, 1),IR(16887, 22)/* MaxPrivateCopiesINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5830,IR(0, 0),IR(16909, 16)/* SinglepumpINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5831,IR(0, 0),IR(16925, 16)/* DoublepumpINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5832,IR(0, 1),IR(16941, 19)/* MaxReplicatesINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5833,IR(0, 0),IR(16960, 20)/* SimpleDualPortINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5834,IR(16, 2),IR(16980, 11)/* MergeINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5835,IR(18, 1),IR(17033, 14)/* BankBitsINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5836,IR(0, 1),IR(17047, 20)/* ForcePow2DepthINTEL */,IR(0, 0),IR(126, 1),IR(100, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5883,IR(0, 1),IR(17067, 16)/* StridesizeINTEL */,IR(0, 0),IR(126, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5884,IR(0, 1),IR(17083, 14)/* WordsizeINTEL */,IR(0, 0),IR(126, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5885,IR(0, 0),IR(17097, 18)/* TrueDualPortINTEL */,IR(0, 0),IR(126, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5899,IR(0, 0),IR(17115, 19)/* BurstCoalesceINTEL */,IR(0, 0),IR(127, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5900,IR(0, 1),IR(17134, 15)/* CacheSizeINTEL */,IR(0, 0),IR(127, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5901,IR(0, 0),IR(17149, 28)/* DontStaticallyCoalesceINTEL */,IR(0, 0),IR(127, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5902,IR(0, 1),IR(17177, 14)/* PrefetchINTEL */,IR(0, 0),IR(127, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5905,IR(0, 0),IR(17191, 17)/* StallEnableINTEL */,IR(0, 0),IR(103, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5907,IR(0, 0),IR(17208, 25)/* FuseLoopsInFunctionINTEL */,IR(0, 0),IR(128, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5909,IR(1, 2),IR(17233, 19)/* MathOpDSPModeINTEL */,IR(0, 0),IR(129, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5914,IR(10, 1),IR(17252, 16)/* AliasScopeINTEL */,IR(0, 0),IR(130, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5915,IR(10, 1),IR(17268, 13)/* NoAliasINTEL */,IR(0, 0),IR(130, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5917,IR(0, 1),IR(17281, 24)/* InitiationIntervalINTEL */,IR(0, 0),IR(131, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5918,IR(0, 1),IR(17305, 20)/* MaxConcurrencyINTEL */,IR(0, 0),IR(131, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5919,IR(0, 1),IR(17325, 20)/* PipelineEnableINTEL */,IR(0, 0),IR(131, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5921,IR(0, 1),IR(17345, 20)/* BufferLocationINTEL */,IR(0, 0),IR(132, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {5944,IR(0, 1),IR(17365, 19)/* IOPipeStorageINTEL */,IR(0, 0),IR(133, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6080,IR(19, 2),IR(17418, 31)/* FunctionFloatingPointModeINTEL */,IR(0, 0),IR(125, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6085,IR(0, 0),IR(17449, 25)/* SingleElementVectorINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6087,IR(0, 0),IR(17474, 35)/* VectorComputeCallableFunctionINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6140,IR(0, 0),IR(17509, 18)/* MediaBlockIOINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6151,IR(0, 0),IR(17527, 15)/* StallFreeINTEL */,IR(0, 0),IR(134, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6170,IR(21, 1),IR(17573, 26)/* FPMaxErrorDecorationINTEL */,IR(0, 0),IR(135, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6172,IR(0, 1),IR(17599, 25)/* LatencyControlLabelINTEL */,IR(0, 0),IR(136, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6173,IR(22, 3),IR(17624, 30)/* LatencyControlConstraintINTEL */,IR(0, 0),IR(136, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6175,IR(0, 0),IR(17654, 27)/* ConduitKernelArgumentINTEL */,IR(0, 0),IR(137, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6176,IR(0, 0),IR(17681, 31)/* RegisterMapKernelArgumentINTEL */,IR(0, 0),IR(137, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6177,IR(0, 1),IR(17712, 33)/* MMHostInterfaceAddressWidthINTEL */,IR(0, 0),IR(137, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6178,IR(0, 1),IR(17745, 30)/* MMHostInterfaceDataWidthINTEL */,IR(0, 0),IR(137, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6179,IR(0, 1),IR(17775, 28)/* MMHostInterfaceLatencyINTEL */,IR(0, 0),IR(137, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6180,IR(25, 1),IR(17837, 34)/* MMHostInterfaceReadWriteModeINTEL */,IR(0, 0),IR(137, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6181,IR(0, 1),IR(17871, 29)/* MMHostInterfaceMaxBurstINTEL */,IR(0, 0),IR(137, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6182,IR(0, 1),IR(17900, 32)/* MMHostInterfaceWaitRequestINTEL */,IR(0, 0),IR(137, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6183,IR(0, 0),IR(17932, 26)/* StableKernelArgumentINTEL */,IR(0, 0),IR(137, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6188,IR(26, 2),IR(17997, 16)/* HostAccessINTEL */,IR(0, 0),IR(138, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6190,IR(28, 1),IR(18060, 14)/* InitModeINTEL */,IR(0, 0),IR(139, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6191,IR(0, 1),IR(18074, 28)/* ImplementInRegisterMapINTEL */,IR(0, 0),IR(139, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6442,IR(29, 2),IR(18138, 22)/* CacheControlLoadINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {6443,IR(31, 2),IR(18197, 23)/* CacheControlStoreINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DECORATION + {0,IR(0, 0),IR(18220, 3)/* 1D */,IR(0, 0),IR(72, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DIMENSIONALITY + {1,IR(0, 0),IR(18223, 3)/* 2D */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DIMENSIONALITY + {2,IR(0, 0),IR(18226, 3)/* 3D */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DIMENSIONALITY + {3,IR(0, 0),IR(18229, 5)/* Cube */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DIMENSIONALITY + {4,IR(0, 0),IR(18234, 5)/* Rect */,IR(0, 0),IR(71, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DIMENSIONALITY + {5,IR(0, 0),IR(18239, 7)/* Buffer */,IR(0, 0),IR(73, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DIMENSIONALITY + {6,IR(0, 0),IR(18246, 12)/* SubpassData */,IR(0, 0),IR(92, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_DIMENSIONALITY + {4173,IR(0, 0),IR(18258, 17)/* TileImageDataEXT */,IR(0, 0),IR(141, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_DIMENSIONALITY + {0,IR(0, 1),IR(18275, 12)/* Invocations */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {1,IR(0, 0),IR(18287, 13)/* SpacingEqual */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {2,IR(0, 0),IR(18300, 22)/* SpacingFractionalEven */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {3,IR(0, 0),IR(18322, 21)/* SpacingFractionalOdd */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4,IR(0, 0),IR(18343, 14)/* VertexOrderCw */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5,IR(0, 0),IR(18357, 15)/* VertexOrderCcw */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {6,IR(0, 0),IR(18372, 19)/* PixelCenterInteger */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {7,IR(0, 0),IR(18391, 16)/* OriginUpperLeft */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {8,IR(0, 0),IR(18407, 16)/* OriginLowerLeft */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {9,IR(0, 0),IR(18423, 19)/* EarlyFragmentTests */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {10,IR(0, 0),IR(18442, 10)/* PointMode */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {11,IR(0, 0),IR(18452, 4)/* Xfb */,IR(0, 0),IR(111, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {12,IR(0, 0),IR(18456, 15)/* DepthReplacing */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {14,IR(0, 0),IR(18471, 13)/* DepthGreater */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {15,IR(0, 0),IR(18484, 10)/* DepthLess */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {16,IR(0, 0),IR(18494, 15)/* DepthUnchanged */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {17,IR(22, 3),IR(18509, 10)/* LocalSize */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {18,IR(22, 3),IR(18519, 14)/* LocalSizeHint */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {19,IR(0, 0),IR(18533, 12)/* InputPoints */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {20,IR(0, 0),IR(18545, 11)/* InputLines */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {21,IR(0, 0),IR(18556, 20)/* InputLinesAdjacency */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {22,IR(0, 0),IR(18576, 10)/* Triangles */,IR(0, 0),IR(12, 2),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {23,IR(0, 0),IR(18586, 24)/* InputTrianglesAdjacency */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {24,IR(0, 0),IR(18610, 6)/* Quads */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {25,IR(0, 0),IR(18616, 9)/* Isolines */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {26,IR(0, 1),IR(18625, 15)/* OutputVertices */,IR(0, 0),IR(142, 4),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {27,IR(0, 0),IR(18640, 13)/* OutputPoints */,IR(0, 0),IR(146, 3),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {28,IR(0, 0),IR(18653, 16)/* OutputLineStrip */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {29,IR(0, 0),IR(18669, 20)/* OutputTriangleStrip */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {30,IR(0, 1),IR(18689, 12)/* VecTypeHint */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {31,IR(0, 0),IR(18701, 15)/* ContractionOff */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {33,IR(0, 0),IR(18716, 12)/* Initializer */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,1),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {34,IR(0, 0),IR(18728, 10)/* Finalizer */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,1),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {35,IR(0, 1),IR(5301, 13)/* SubgroupSize */,IR(0, 0),IR(149, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,1),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {36,IR(0, 1),IR(18738, 22)/* SubgroupsPerWorkgroup */,IR(0, 0),IR(149, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,1),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {37,IR(10, 1),IR(18760, 24)/* SubgroupsPerWorkgroupId */,IR(0, 0),IR(149, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,2),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {38,IR(33, 3),IR(18784, 12)/* LocalSizeId */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,2),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {39,IR(33, 3),IR(18796, 16)/* LocalSizeHintId */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,2),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4169,IR(0, 0),IR(18812, 34)/* NonCoherentColorAttachmentReadEXT */,IR(0, 0),IR(141, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4170,IR(0, 0),IR(18846, 34)/* NonCoherentDepthAttachmentReadEXT */,IR(0, 0),IR(150, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4171,IR(0, 0),IR(18880, 36)/* NonCoherentStencilAttachmentReadEXT */,IR(0, 0),IR(151, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4421,IR(0, 0),IR(18916, 30)/* SubgroupUniformControlFlowKHR */,IR(0, 0),IR(3, 1),IR(156, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4446,IR(0, 0),IR(18946, 18)/* PostDepthCoverage */,IR(0, 0),IR(152, 1),IR(44, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4459,IR(0, 1),IR(9470, 15)/* DenormPreserve */,IR(0, 0),IR(153, 1),IR(46, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4460,IR(0, 1),IR(9485, 18)/* DenormFlushToZero */,IR(0, 0),IR(154, 1),IR(46, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4461,IR(0, 1),IR(9503, 25)/* SignedZeroInfNanPreserve */,IR(0, 0),IR(155, 1),IR(46, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4462,IR(0, 1),IR(9528, 16)/* RoundingModeRTE */,IR(0, 0),IR(156, 1),IR(46, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4463,IR(0, 1),IR(9544, 16)/* RoundingModeRTZ */,IR(0, 0),IR(157, 1),IR(46, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4489,IR(0, 0),IR(18964, 34)/* NonCoherentTileAttachmentReadQCOM */,IR(0, 0),IR(41, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {4490,IR(22, 3),IR(18998, 20)/* TileShadingRateQCOM */,IR(0, 0),IR(41, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5017,IR(0, 0),IR(19018, 29)/* EarlyAndLateFragmentTestsAMD */,IR(0, 0),IR(3, 1),IR(157, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5027,IR(0, 0),IR(19047, 23)/* StencilRefReplacingEXT */,IR(0, 0),IR(42, 1),IR(11, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5069,IR(0, 0),IR(19070, 15)/* CoalescingAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5070,IR(10, 1),IR(19085, 15)/* IsApiEntryAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5071,IR(10, 1),IR(19100, 21)/* MaxNodeRecursionAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5072,IR(33, 3),IR(19121, 24)/* StaticNumWorkgroupsAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5073,IR(10, 1),IR(6194, 16)/* ShaderIndexAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5077,IR(33, 3),IR(19145, 21)/* MaxNumWorkgroupsAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5079,IR(0, 0),IR(19166, 28)/* StencilRefUnchangedFrontAMD */,IR(0, 0),IR(42, 1),IR(158, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5080,IR(0, 0),IR(19194, 26)/* StencilRefGreaterFrontAMD */,IR(0, 0),IR(42, 1),IR(158, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5081,IR(0, 0),IR(19220, 23)/* StencilRefLessFrontAMD */,IR(0, 0),IR(42, 1),IR(158, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5082,IR(0, 0),IR(19243, 27)/* StencilRefUnchangedBackAMD */,IR(0, 0),IR(42, 1),IR(158, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5083,IR(0, 0),IR(19270, 25)/* StencilRefGreaterBackAMD */,IR(0, 0),IR(42, 1),IR(158, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5084,IR(0, 0),IR(19295, 22)/* StencilRefLessBackAMD */,IR(0, 0),IR(42, 1),IR(158, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5088,IR(0, 0),IR(19317, 19)/* QuadDerivativesKHR */,IR(0, 0),IR(158, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5089,IR(0, 0),IR(19336, 20)/* RequireFullQuadsKHR */,IR(0, 0),IR(158, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5102,IR(36, 2),IR(19356, 20)/* SharesInputWithAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5269,IR(0, 0),IR(19376, 15)/* OutputLinesEXT */,IR(58, 1),IR(118, 2),IR(152, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5270,IR(0, 1),IR(19405, 20)/* OutputPrimitivesEXT */,IR(59, 1),IR(118, 2),IR(152, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5289,IR(0, 0),IR(19444, 24)/* DerivativeGroupQuadsKHR */,IR(60, 1),IR(159, 2),IR(71, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5290,IR(0, 0),IR(19491, 25)/* DerivativeGroupLinearKHR */,IR(61, 1),IR(161, 2),IR(71, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5298,IR(0, 0),IR(19540, 19)/* OutputTrianglesEXT */,IR(62, 1),IR(118, 2),IR(152, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5366,IR(0, 0),IR(19577, 25)/* PixelInterlockOrderedEXT */,IR(0, 0),IR(163, 1),IR(78, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5367,IR(0, 0),IR(19602, 27)/* PixelInterlockUnorderedEXT */,IR(0, 0),IR(163, 1),IR(78, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5368,IR(0, 0),IR(19629, 26)/* SampleInterlockOrderedEXT */,IR(0, 0),IR(164, 1),IR(78, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5369,IR(0, 0),IR(19655, 28)/* SampleInterlockUnorderedEXT */,IR(0, 0),IR(164, 1),IR(78, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5370,IR(0, 0),IR(19683, 31)/* ShadingRateInterlockOrderedEXT */,IR(0, 0),IR(165, 1),IR(78, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5371,IR(0, 0),IR(19714, 33)/* ShadingRateInterlockUnorderedEXT */,IR(0, 0),IR(165, 1),IR(78, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5618,IR(0, 1),IR(19747, 27)/* SharedLocalMemorySizeINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5620,IR(0, 1),IR(19774, 21)/* RoundingModeRTPINTEL */,IR(0, 0),IR(166, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5621,IR(0, 1),IR(19795, 21)/* RoundingModeRTNINTEL */,IR(0, 0),IR(166, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5622,IR(0, 1),IR(19816, 26)/* FloatingPointModeALTINTEL */,IR(0, 0),IR(166, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5623,IR(0, 1),IR(19842, 27)/* FloatingPointModeIEEEINTEL */,IR(0, 0),IR(166, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5893,IR(22, 3),IR(19869, 22)/* MaxWorkgroupSizeINTEL */,IR(0, 0),IR(167, 1),IR(106, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5894,IR(0, 1),IR(19891, 16)/* MaxWorkDimINTEL */,IR(0, 0),IR(167, 1),IR(106, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5895,IR(0, 0),IR(19907, 20)/* NoGlobalOffsetINTEL */,IR(0, 0),IR(167, 1),IR(106, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5896,IR(0, 1),IR(19927, 22)/* NumSIMDWorkitemsINTEL */,IR(0, 0),IR(104, 1),IR(106, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {5903,IR(0, 1),IR(19949, 28)/* SchedulerTargetFmaxMhzINTEL */,IR(0, 0),IR(104, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {6023,IR(0, 0),IR(19977, 24)/* MaximallyReconvergesKHR */,IR(0, 0),IR(3, 1),IR(160, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {6028,IR(36, 2),IR(20001, 18)/* FPFastMathDefault */,IR(0, 0),IR(168, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {6154,IR(0, 1),IR(20019, 24)/* StreamingInterfaceINTEL */,IR(0, 0),IR(104, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {6160,IR(0, 1),IR(20043, 26)/* RegisterMapInterfaceINTEL */,IR(0, 0),IR(169, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {6417,IR(0, 1),IR(20069, 23)/* NamedBarrierCountINTEL */,IR(0, 0),IR(122, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {6461,IR(0, 1),IR(20092, 22)/* MaximumRegistersINTEL */,IR(0, 0),IR(170, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {6462,IR(10, 1),IR(20114, 24)/* MaximumRegistersIdINTEL */,IR(0, 0),IR(170, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {6463,IR(38, 1),IR(20189, 27)/* NamedMaximumRegistersINTEL */,IR(0, 0),IR(170, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODE + {0,IR(0, 0),IR(20216, 7)/* Vertex */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {1,IR(0, 0),IR(20223, 20)/* TessellationControl */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {2,IR(0, 0),IR(20243, 23)/* TessellationEvaluation */,IR(0, 0),IR(24, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {3,IR(0, 0),IR(4782, 9)/* Geometry */,IR(0, 0),IR(69, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {4,IR(0, 0),IR(14411, 9)/* Fragment */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5,IR(0, 0),IR(20266, 10)/* GLCompute */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {6,IR(0, 0),IR(4549, 7)/* Kernel */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5267,IR(0, 0),IR(20276, 7)/* TaskNV */,IR(0, 0),IR(50, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5268,IR(0, 0),IR(20283, 7)/* MeshNV */,IR(0, 0),IR(50, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5313,IR(0, 0),IR(20290, 17)/* RayGenerationKHR */,IR(63, 1),IR(54, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5314,IR(0, 0),IR(20323, 16)/* IntersectionKHR */,IR(64, 1),IR(54, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5315,IR(0, 0),IR(20354, 10)/* AnyHitKHR */,IR(65, 1),IR(54, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5316,IR(0, 0),IR(20373, 14)/* ClosestHitKHR */,IR(66, 1),IR(54, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5317,IR(0, 0),IR(20400, 8)/* MissKHR */,IR(67, 1),IR(54, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5318,IR(0, 0),IR(20415, 12)/* CallableKHR */,IR(68, 1),IR(54, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5364,IR(0, 0),IR(20438, 8)/* TaskEXT */,IR(0, 0),IR(53, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {5365,IR(0, 0),IR(20446, 8)/* MeshEXT */,IR(0, 0),IR(53, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_EXECUTION_MODEL + {0,IR(0, 0),IR(20454, 9)/* Preserve */,IR(0, 0),IR(125, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FPDENORM_MODE + {1,IR(0, 0),IR(20463, 12)/* FlushToZero */,IR(0, 0),IR(125, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FPDENORM_MODE + {0,IR(0, 0),IR(20475, 12)/* BFloat16KHR */,IR(0, 0),IR(86, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FPENCODING + {4214,IR(0, 0),IR(20487, 14)/* Float8E4M3EXT */,IR(0, 0),IR(115, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FPENCODING + {4215,IR(0, 0),IR(20501, 14)/* Float8E5M2EXT */,IR(0, 0),IR(115, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FPENCODING + {0,IR(0, 0),IR(20515, 5)/* IEEE */,IR(0, 0),IR(125, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FPOPERATION_MODE + {1,IR(0, 0),IR(20520, 4)/* ALT */,IR(0, 0),IR(125, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FPOPERATION_MODE + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {1,IR(0, 0),IR(20524, 7)/* NotNaN */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {2,IR(0, 0),IR(20531, 7)/* NotInf */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {4,IR(0, 0),IR(20538, 4)/* NSZ */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {8,IR(0, 0),IR(20542, 11)/* AllowRecip */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {16,IR(0, 0),IR(20553, 5)/* Fast */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {65536,IR(0, 0),IR(20558, 14)/* AllowContract */,IR(69, 1),IR(171, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {131072,IR(0, 0),IR(20595, 13)/* AllowReassoc */,IR(70, 1),IR(171, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {262144,IR(0, 0),IR(20626, 15)/* AllowTransform */,IR(0, 0),IR(168, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {0,IR(0, 0),IR(20641, 4)/* RTE */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FP_ROUNDING_MODE + {1,IR(0, 0),IR(20645, 4)/* RTZ */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FP_ROUNDING_MODE + {2,IR(0, 0),IR(20649, 4)/* RTP */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FP_ROUNDING_MODE + {3,IR(0, 0),IR(20653, 4)/* RTN */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FP_ROUNDING_MODE + {1,IR(0, 0),IR(20657, 16)/* Vertical2Pixels */,IR(0, 0),IR(38, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE + {2,IR(0, 0),IR(20673, 16)/* Vertical4Pixels */,IR(0, 0),IR(38, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE + {4,IR(0, 0),IR(20689, 18)/* Horizontal2Pixels */,IR(0, 0),IR(38, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE + {8,IR(0, 0),IR(20707, 18)/* Horizontal4Pixels */,IR(0, 0),IR(38, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_CONTROL + {1,IR(0, 0),IR(20725, 7)/* Inline */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_CONTROL + {2,IR(0, 0),IR(20732, 11)/* DontInline */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_CONTROL + {4,IR(0, 0),IR(20743, 5)/* Pure */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_CONTROL + {8,IR(0, 0),IR(20748, 6)/* Const */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_CONTROL + {65536,IR(0, 0),IR(13228, 11)/* OptNoneEXT */,IR(50, 1),IR(173, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_CONTROL + {0,IR(0, 0),IR(20754, 5)/* Zext */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {1,IR(0, 0),IR(20759, 5)/* Sext */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {2,IR(0, 0),IR(20764, 6)/* ByVal */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {3,IR(0, 0),IR(20770, 5)/* Sret */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {4,IR(0, 0),IR(20775, 8)/* NoAlias */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {5,IR(0, 0),IR(20783, 10)/* NoCapture */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {6,IR(0, 0),IR(20793, 8)/* NoWrite */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {7,IR(0, 0),IR(20801, 12)/* NoReadWrite */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {5940,IR(0, 0),IR(20813, 20)/* RuntimeAlignedINTEL */,IR(0, 0),IR(174, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {0,IR(0, 0),IR(20833, 7)/* Reduce */,IR(0, 0),IR(175, 3),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_GROUP_OPERATION + {1,IR(0, 0),IR(20840, 14)/* InclusiveScan */,IR(0, 0),IR(175, 3),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_GROUP_OPERATION + {2,IR(0, 0),IR(20854, 14)/* ExclusiveScan */,IR(0, 0),IR(175, 3),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_GROUP_OPERATION + {3,IR(0, 0),IR(20868, 16)/* ClusteredReduce */,IR(0, 0),IR(178, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_GROUP_OPERATION + {6,IR(0, 0),IR(20884, 20)/* PartitionedReduceNV */,IR(0, 0),IR(179, 1),IR(73, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_GROUP_OPERATION + {7,IR(0, 0),IR(20904, 27)/* PartitionedInclusiveScanNV */,IR(0, 0),IR(179, 1),IR(73, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_GROUP_OPERATION + {8,IR(0, 0),IR(20931, 27)/* PartitionedExclusiveScanNV */,IR(0, 0),IR(179, 1),IR(73, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_GROUP_OPERATION + {0,IR(0, 0),IR(20958, 10)/* NoneINTEL */,IR(0, 0),IR(138, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER + {1,IR(0, 0),IR(20968, 10)/* ReadINTEL */,IR(0, 0),IR(138, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER + {2,IR(0, 0),IR(20978, 11)/* WriteINTEL */,IR(0, 0),IR(138, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER + {3,IR(0, 0),IR(20989, 15)/* ReadWriteINTEL */,IR(0, 0),IR(138, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {1,IR(10, 1),IR(21004, 5)/* Bias */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {2,IR(10, 1),IR(21009, 4)/* Lod */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {4,IR(36, 2),IR(21013, 5)/* Grad */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {8,IR(10, 1),IR(21018, 12)/* ConstOffset */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {16,IR(10, 1),IR(15414, 7)/* Offset */,IR(0, 0),IR(180, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {32,IR(10, 1),IR(21030, 13)/* ConstOffsets */,IR(0, 0),IR(180, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {64,IR(10, 1),IR(15211, 7)/* Sample */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {128,IR(10, 1),IR(8333, 7)/* MinLod */,IR(0, 0),IR(181, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {256,IR(4, 1),IR(21043, 19)/* MakeTexelAvailable */,IR(71, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {512,IR(4, 1),IR(21084, 17)/* MakeTexelVisible */,IR(72, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {1024,IR(0, 0),IR(21121, 16)/* NonPrivateTexel */,IR(73, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {2048,IR(0, 0),IR(21156, 14)/* VolatileTexel */,IR(74, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {4096,IR(0, 0),IR(21187, 11)/* SignExtend */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {8192,IR(0, 0),IR(21198, 11)/* ZeroExtend */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {16384,IR(0, 0),IR(21209, 12)/* Nontemporal */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,6),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {65536,IR(10, 1),IR(21221, 8)/* Offsets */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE + {0,IR(0, 0),IR(21229, 10)/* SnormInt8 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {1,IR(0, 0),IR(21239, 11)/* SnormInt16 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {2,IR(0, 0),IR(21250, 10)/* UnormInt8 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {3,IR(0, 0),IR(21260, 11)/* UnormInt16 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {4,IR(0, 0),IR(21271, 14)/* UnormShort565 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {5,IR(0, 0),IR(21285, 14)/* UnormShort555 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {6,IR(0, 0),IR(21299, 15)/* UnormInt101010 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {7,IR(0, 0),IR(21314, 11)/* SignedInt8 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {8,IR(0, 0),IR(21325, 12)/* SignedInt16 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {9,IR(0, 0),IR(21337, 12)/* SignedInt32 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {10,IR(0, 0),IR(21349, 13)/* UnsignedInt8 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {11,IR(0, 0),IR(21362, 14)/* UnsignedInt16 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {12,IR(0, 0),IR(21376, 14)/* UnsignedInt32 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {13,IR(0, 0),IR(21390, 10)/* HalfFloat */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {14,IR(0, 0),IR(13904, 6)/* Float */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {15,IR(0, 0),IR(21400, 11)/* UnormInt24 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {16,IR(0, 0),IR(21411, 17)/* UnormInt101010_2 */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {17,IR(0, 0),IR(21428, 16)/* UnormInt10X6EXT */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {19,IR(0, 0),IR(21444, 20)/* UnsignedIntRaw10EXT */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {20,IR(0, 0),IR(21464, 20)/* UnsignedIntRaw12EXT */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {21,IR(0, 0),IR(21484, 20)/* UnormInt2_101010EXT */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {22,IR(0, 0),IR(21504, 19)/* UnsignedInt10X6EXT */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {23,IR(0, 0),IR(21523, 19)/* UnsignedInt12X4EXT */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {24,IR(0, 0),IR(21542, 19)/* UnsignedInt14X2EXT */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {25,IR(0, 0),IR(21561, 16)/* UnormInt12X4EXT */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {26,IR(0, 0),IR(21577, 16)/* UnormInt14X2EXT */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {0,IR(0, 0),IR(21593, 2)/* R */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {1,IR(0, 0),IR(21595, 2)/* A */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {2,IR(0, 0),IR(21597, 3)/* RG */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {3,IR(0, 0),IR(21600, 3)/* RA */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {4,IR(0, 0),IR(21603, 4)/* RGB */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {5,IR(0, 0),IR(21607, 5)/* RGBA */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {6,IR(0, 0),IR(21612, 5)/* BGRA */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {7,IR(0, 0),IR(21617, 5)/* ARGB */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {8,IR(0, 0),IR(21622, 10)/* Intensity */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {9,IR(0, 0),IR(21632, 10)/* Luminance */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {10,IR(0, 0),IR(21642, 3)/* Rx */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {11,IR(0, 0),IR(21645, 4)/* RGx */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {12,IR(0, 0),IR(21649, 5)/* RGBx */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {13,IR(0, 0),IR(21654, 6)/* Depth */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {14,IR(0, 0),IR(21660, 13)/* DepthStencil */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {15,IR(0, 0),IR(21673, 5)/* sRGB */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {16,IR(0, 0),IR(21678, 6)/* sRGBx */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {17,IR(0, 0),IR(21684, 6)/* sRGBA */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {18,IR(0, 0),IR(21690, 6)/* sBGRA */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {19,IR(0, 0),IR(21696, 5)/* ABGR */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {0,IR(0, 0),IR(21701, 27)/* InitOnDeviceReprogramINTEL */,IR(0, 0),IR(139, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_INITIALIZATION_MODE_QUALIFIER + {1,IR(0, 0),IR(21728, 23)/* InitOnDeviceResetINTEL */,IR(0, 0),IR(139, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_INITIALIZATION_MODE_QUALIFIER + {0,IR(0, 0),IR(21751, 7)/* NoWait */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS + {1,IR(0, 0),IR(21758, 11)/* WaitKernel */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS + {2,IR(0, 0),IR(21769, 14)/* WaitWorkGroup */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO + {1,IR(0, 0),IR(21783, 12)/* CmdExecTime */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS + {1,IR(0, 0),IR(21795, 13)/* MayUsePrintf */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS + {0,IR(0, 0),IR(21808, 7)/* Export */,IR(0, 0),IR(114, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_LINKAGE_TYPE + {1,IR(0, 0),IR(21815, 7)/* Import */,IR(0, 0),IR(114, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_LINKAGE_TYPE + {2,IR(0, 0),IR(21822, 12)/* LinkOnceODR */,IR(0, 0),IR(114, 1),IR(161, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LINKAGE_TYPE + {0,IR(0, 0),IR(21834, 14)/* UncachedINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL + {1,IR(0, 0),IR(21848, 12)/* CachedINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL + {2,IR(0, 0),IR(21860, 15)/* StreamingINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL + {3,IR(0, 0),IR(21875, 25)/* InvalidateAfterReadINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL + {4,IR(0, 0),IR(21900, 17)/* ConstCachedINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {1,IR(0, 0),IR(21917, 7)/* Unroll */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {2,IR(0, 0),IR(21924, 11)/* DontUnroll */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {4,IR(0, 0),IR(21935, 19)/* DependencyInfinite */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,1),0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {8,IR(0, 1),IR(21954, 17)/* DependencyLength */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,1),0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {16,IR(0, 1),IR(21971, 14)/* MinIterations */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {32,IR(0, 1),IR(21985, 14)/* MaxIterations */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {64,IR(0, 1),IR(21999, 18)/* IterationMultiple */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {128,IR(0, 1),IR(22017, 10)/* PeelCount */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {256,IR(0, 1),IR(22027, 13)/* PartialCount */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {65536,IR(0, 1),IR(17281, 24)/* InitiationIntervalINTEL */,IR(0, 0),IR(183, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {131072,IR(0, 1),IR(17305, 20)/* MaxConcurrencyINTEL */,IR(0, 0),IR(183, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {262144,IR(0, 1),IR(22040, 21)/* DependencyArrayINTEL */,IR(0, 0),IR(183, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {524288,IR(0, 1),IR(17325, 20)/* PipelineEnableINTEL */,IR(0, 0),IR(183, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {1048576,IR(0, 1),IR(22061, 18)/* LoopCoalesceINTEL */,IR(0, 0),IR(183, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {2097152,IR(0, 1),IR(22079, 21)/* MaxInterleavingINTEL */,IR(0, 0),IR(183, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {4194304,IR(0, 1),IR(22100, 26)/* SpeculatedIterationsINTEL */,IR(0, 0),IR(183, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {8388608,IR(0, 0),IR(22126, 14)/* NoFusionINTEL */,IR(0, 0),IR(183, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {16777216,IR(0, 1),IR(22140, 15)/* LoopCountINTEL */,IR(0, 0),IR(183, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {33554432,IR(0, 1),IR(22155, 26)/* MaxReinvocationDelayINTEL */,IR(0, 0),IR(183, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_LOOP_CONTROL + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {1,IR(0, 0),IR(22181, 29)/* MatrixASignedComponentsINTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {2,IR(0, 0),IR(22210, 29)/* MatrixBSignedComponentsINTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {4,IR(0, 0),IR(22239, 21)/* MatrixCBFloat16INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {8,IR(0, 0),IR(22260, 26)/* MatrixResultBFloat16INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {16,IR(0, 0),IR(22286, 23)/* MatrixAPackedInt8INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {32,IR(0, 0),IR(22309, 23)/* MatrixBPackedInt8INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {64,IR(0, 0),IR(22332, 23)/* MatrixAPackedInt4INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {128,IR(0, 0),IR(22355, 23)/* MatrixBPackedInt4INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {256,IR(0, 0),IR(22378, 17)/* MatrixATF32INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {512,IR(0, 0),IR(22395, 17)/* MatrixBTF32INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {1024,IR(0, 0),IR(22412, 26)/* MatrixAPackedFloat16INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {2048,IR(0, 0),IR(22438, 26)/* MatrixBPackedFloat16INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {4096,IR(0, 0),IR(22464, 27)/* MatrixAPackedBFloat16INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {8192,IR(0, 0),IR(22491, 27)/* MatrixBPackedBFloat16INTEL */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_ACCESS + {1,IR(0, 0),IR(15245, 9)/* Volatile */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_ACCESS + {2,IR(0, 1),IR(22518, 8)/* Aligned */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_ACCESS + {4,IR(0, 0),IR(21209, 12)/* Nontemporal */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_ACCESS + {8,IR(4, 1),IR(22526, 21)/* MakePointerAvailable */,IR(75, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_ACCESS + {16,IR(4, 1),IR(22571, 19)/* MakePointerVisible */,IR(76, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_ACCESS + {32,IR(0, 0),IR(22612, 18)/* NonPrivatePointer */,IR(77, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_ACCESS + {65536,IR(10, 1),IR(22651, 20)/* AliasScopeINTELMask */,IR(0, 0),IR(130, 1),IR(111, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_ACCESS + {131072,IR(10, 1),IR(22671, 17)/* NoAliasINTELMask */,IR(0, 0),IR(130, 1),IR(111, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_ACCESS + {0,IR(0, 0),IR(22688, 7)/* Simple */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_MODEL + {1,IR(0, 0),IR(22695, 8)/* GLSL450 */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_MODEL + {2,IR(0, 0),IR(22703, 7)/* OpenCL */,IR(0, 0),IR(0, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_MODEL + {3,IR(0, 0),IR(22710, 7)/* Vulkan */,IR(78, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_MODEL + {0,IR(0, 0),IR(22727, 8)/* Relaxed */,IR(79, 1),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {2,IR(0, 0),IR(22735, 8)/* Acquire */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {4,IR(0, 0),IR(22743, 8)/* Release */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {8,IR(0, 0),IR(22751, 15)/* AcquireRelease */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {16,IR(0, 0),IR(22766, 23)/* SequentiallyConsistent */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {64,IR(0, 0),IR(22789, 14)/* UniformMemory */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {128,IR(0, 0),IR(22803, 15)/* SubgroupMemory */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {256,IR(0, 0),IR(22818, 16)/* WorkgroupMemory */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {512,IR(0, 0),IR(22834, 21)/* CrossWorkgroupMemory */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {1024,IR(0, 0),IR(22855, 20)/* AtomicCounterMemory */,IR(0, 0),IR(80, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {2048,IR(0, 0),IR(22875, 12)/* ImageMemory */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {4096,IR(0, 0),IR(22887, 13)/* OutputMemory */,IR(80, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {8192,IR(0, 0),IR(22916, 14)/* MakeAvailable */,IR(81, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {16384,IR(0, 0),IR(22947, 12)/* MakeVisible */,IR(82, 1),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {32768,IR(0, 0),IR(15245, 9)/* Volatile */,IR(0, 0),IR(182, 1),IR(76, 1),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {0,IR(0, 0),IR(22974, 10)/* AutoINTEL */,IR(0, 0),IR(170, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_NAMED_MAXIMUM_NUMBER_OF_REGISTERS + {0,IR(0, 0),IR(22984, 5)/* WRAP */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_OVERFLOW_MODES + {1,IR(0, 0),IR(22989, 4)/* SAT */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_OVERFLOW_MODES + {2,IR(0, 0),IR(22993, 9)/* SAT_ZERO */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_OVERFLOW_MODES + {3,IR(0, 0),IR(23002, 8)/* SAT_SYM */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_OVERFLOW_MODES + {0,IR(0, 0),IR(23010, 25)/* PackedVectorFormat4x8Bit */,IR(83, 1),IR(1, 0),IR(120, 1),SPV_SPIRV_VERSION_WORD(1,6),0xffffffffu}, // SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT + {0,IR(0, 0),IR(23063, 4)/* TRN */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_QUANTIZATION_MODES + {1,IR(0, 0),IR(23067, 9)/* TRN_ZERO */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_QUANTIZATION_MODES + {2,IR(0, 0),IR(23076, 4)/* RND */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_QUANTIZATION_MODES + {3,IR(0, 0),IR(23080, 9)/* RND_ZERO */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_QUANTIZATION_MODES + {4,IR(0, 0),IR(23089, 8)/* RND_INF */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_QUANTIZATION_MODES + {5,IR(0, 0),IR(23097, 12)/* RND_MIN_INF */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_QUANTIZATION_MODES + {6,IR(0, 0),IR(23109, 9)/* RND_CONV */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_QUANTIZATION_MODES + {7,IR(0, 0),IR(23118, 13)/* RND_CONV_ODD */,IR(0, 0),IR(184, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_QUANTIZATION_MODES + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS + {1,IR(0, 0),IR(23131, 25)/* RobustnessPerComponentNV */,IR(0, 0),IR(185, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS + {2,IR(0, 0),IR(23156, 23)/* RobustnessPerElementNV */,IR(0, 0),IR(185, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS + {0,IR(0, 0),IR(14759, 8)/* NoneKHR */,IR(0, 0),IR(82, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {1,IR(0, 0),IR(23179, 10)/* OpaqueKHR */,IR(0, 0),IR(82, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {2,IR(0, 0),IR(23189, 12)/* NoOpaqueKHR */,IR(0, 0),IR(82, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {4,IR(0, 0),IR(23201, 23)/* TerminateOnFirstHitKHR */,IR(0, 0),IR(82, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {8,IR(0, 0),IR(23224, 24)/* SkipClosestHitShaderKHR */,IR(0, 0),IR(82, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {16,IR(0, 0),IR(23248, 27)/* CullBackFacingTrianglesKHR */,IR(0, 0),IR(82, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {32,IR(0, 0),IR(23275, 28)/* CullFrontFacingTrianglesKHR */,IR(0, 0),IR(82, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {64,IR(0, 0),IR(23303, 14)/* CullOpaqueKHR */,IR(0, 0),IR(82, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {128,IR(0, 0),IR(23317, 16)/* CullNoOpaqueKHR */,IR(0, 0),IR(82, 2),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {256,IR(0, 0),IR(23333, 17)/* SkipTrianglesKHR */,IR(84, 1),IR(186, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {512,IR(0, 0),IR(23374, 13)/* SkipAABBsKHR */,IR(0, 0),IR(186, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {1024,IR(0, 0),IR(23387, 30)/* ForceOpacityMicromap2StateEXT */,IR(0, 0),IR(187, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_FLAGS + {0,IR(0, 0),IR(23417, 41)/* RayQueryCandidateIntersectionTriangleKHR */,IR(0, 0),IR(188, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE + {1,IR(0, 0),IR(23458, 37)/* RayQueryCandidateIntersectionAABBKHR */,IR(0, 0),IR(188, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE + {0,IR(0, 0),IR(23495, 37)/* RayQueryCommittedIntersectionNoneKHR */,IR(0, 0),IR(188, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE + {1,IR(0, 0),IR(23532, 41)/* RayQueryCommittedIntersectionTriangleKHR */,IR(0, 0),IR(188, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE + {2,IR(0, 0),IR(23573, 42)/* RayQueryCommittedIntersectionGeneratedKHR */,IR(0, 0),IR(188, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE + {0,IR(0, 0),IR(23615, 33)/* RayQueryCandidateIntersectionKHR */,IR(0, 0),IR(188, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION + {1,IR(0, 0),IR(23648, 33)/* RayQueryCommittedIntersectionKHR */,IR(0, 0),IR(188, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE + {1,IR(0, 0),IR(23681, 12)/* ClampToEdge */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE + {2,IR(0, 0),IR(23693, 6)/* Clamp */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE + {3,IR(0, 0),IR(23699, 7)/* Repeat */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE + {4,IR(0, 0),IR(23706, 15)/* RepeatMirrored */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE + {0,IR(0, 0),IR(23721, 8)/* Nearest */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE + {1,IR(0, 0),IR(23729, 7)/* Linear */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE + {0,IR(0, 0),IR(23736, 8)/* Unknown */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {1,IR(0, 0),IR(23744, 8)/* Rgba32f */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {2,IR(0, 0),IR(23752, 8)/* Rgba16f */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {3,IR(0, 0),IR(23760, 5)/* R32f */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {4,IR(0, 0),IR(23765, 6)/* Rgba8 */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {5,IR(0, 0),IR(23771, 11)/* Rgba8Snorm */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {6,IR(0, 0),IR(23782, 6)/* Rg32f */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {7,IR(0, 0),IR(23788, 6)/* Rg16f */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {8,IR(0, 0),IR(23794, 13)/* R11fG11fB10f */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {9,IR(0, 0),IR(23807, 5)/* R16f */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {10,IR(0, 0),IR(23812, 7)/* Rgba16 */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {11,IR(0, 0),IR(23819, 8)/* Rgb10A2 */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {12,IR(0, 0),IR(23827, 5)/* Rg16 */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {13,IR(0, 0),IR(23832, 4)/* Rg8 */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {14,IR(0, 0),IR(23836, 4)/* R16 */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {15,IR(0, 0),IR(23840, 3)/* R8 */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {16,IR(0, 0),IR(23843, 12)/* Rgba16Snorm */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {17,IR(0, 0),IR(23855, 10)/* Rg16Snorm */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {18,IR(0, 0),IR(23865, 9)/* Rg8Snorm */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {19,IR(0, 0),IR(23874, 9)/* R16Snorm */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {20,IR(0, 0),IR(23883, 8)/* R8Snorm */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {21,IR(0, 0),IR(23891, 8)/* Rgba32i */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {22,IR(0, 0),IR(23899, 8)/* Rgba16i */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {23,IR(0, 0),IR(23907, 7)/* Rgba8i */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {24,IR(0, 0),IR(23914, 5)/* R32i */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {25,IR(0, 0),IR(23919, 6)/* Rg32i */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {26,IR(0, 0),IR(23925, 6)/* Rg16i */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {27,IR(0, 0),IR(23931, 5)/* Rg8i */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {28,IR(0, 0),IR(23936, 5)/* R16i */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {29,IR(0, 0),IR(23941, 4)/* R8i */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {30,IR(0, 0),IR(23945, 9)/* Rgba32ui */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {31,IR(0, 0),IR(23954, 9)/* Rgba16ui */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {32,IR(0, 0),IR(23963, 8)/* Rgba8ui */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {33,IR(0, 0),IR(23971, 6)/* R32ui */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {34,IR(0, 0),IR(23977, 10)/* Rgb10a2ui */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {35,IR(0, 0),IR(23987, 7)/* Rg32ui */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {36,IR(0, 0),IR(23994, 7)/* Rg16ui */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {37,IR(0, 0),IR(24001, 6)/* Rg8ui */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {38,IR(0, 0),IR(24007, 6)/* R16ui */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {39,IR(0, 0),IR(24013, 5)/* R8ui */,IR(0, 0),IR(189, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {40,IR(0, 0),IR(24018, 6)/* R64ui */,IR(0, 0),IR(190, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {41,IR(0, 0),IR(24024, 5)/* R64i */,IR(0, 0),IR(190, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {0,IR(0, 0),IR(24029, 12)/* CrossDevice */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SCOPE_ID + {1,IR(0, 0),IR(24041, 7)/* Device */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SCOPE_ID + {2,IR(0, 0),IR(24048, 10)/* Workgroup */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SCOPE_ID + {3,IR(0, 0),IR(24058, 9)/* Subgroup */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SCOPE_ID + {4,IR(0, 0),IR(24067, 11)/* Invocation */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SCOPE_ID + {5,IR(0, 0),IR(24078, 12)/* QueueFamily */,IR(85, 1),IR(182, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_SCOPE_ID + {6,IR(0, 0),IR(24105, 14)/* ShaderCallKHR */,IR(0, 0),IR(60, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_SCOPE_ID + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SELECTION_CONTROL + {1,IR(0, 0),IR(24119, 8)/* Flatten */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SELECTION_CONTROL + {2,IR(0, 0),IR(24127, 12)/* DontFlatten */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SELECTION_CONTROL + {1,IR(0, 0),IR(24139, 29)/* IdentifierPossibleDuplicates */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_BUILD_IDENTIFIER_FLAGS + {0,IR(0, 0),IR(13876, 12)/* Unspecified */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {1,IR(0, 0),IR(13888, 8)/* Address */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {2,IR(0, 0),IR(13896, 8)/* Boolean */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {3,IR(0, 0),IR(13904, 6)/* Float */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {4,IR(0, 0),IR(13910, 7)/* Signed */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {5,IR(0, 0),IR(13917, 11)/* SignedChar */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {6,IR(0, 0),IR(13928, 9)/* Unsigned */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {7,IR(0, 0),IR(13937, 13)/* UnsignedChar */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {0,IR(0, 0),IR(13950, 6)/* Class */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE + {1,IR(0, 0),IR(13956, 10)/* Structure */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE + {2,IR(0, 0),IR(13966, 6)/* Union */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE + {0,IR(0, 0),IR(13972, 15)/* ImportedModule */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY + {1,IR(0, 0),IR(13987, 20)/* ImportedDeclaration */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {1,IR(0, 0),IR(14012, 16)/* FlagIsProtected */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {2,IR(0, 0),IR(14028, 14)/* FlagIsPrivate */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {3,IR(0, 0),IR(14042, 13)/* FlagIsPublic */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {4,IR(0, 0),IR(14055, 12)/* FlagIsLocal */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {8,IR(0, 0),IR(14067, 17)/* FlagIsDefinition */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {16,IR(0, 0),IR(14084, 12)/* FlagFwdDecl */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {32,IR(0, 0),IR(14096, 15)/* FlagArtificial */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {64,IR(0, 0),IR(14111, 13)/* FlagExplicit */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {128,IR(0, 0),IR(14124, 15)/* FlagPrototyped */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {256,IR(0, 0),IR(14139, 18)/* FlagObjectPointer */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {512,IR(0, 0),IR(14157, 17)/* FlagStaticMember */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {1024,IR(0, 0),IR(14174, 21)/* FlagIndirectVariable */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {2048,IR(0, 0),IR(14195, 20)/* FlagLValueReference */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {4096,IR(0, 0),IR(14215, 20)/* FlagRValueReference */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {8192,IR(0, 0),IR(14235, 16)/* FlagIsOptimized */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {16384,IR(0, 0),IR(14251, 16)/* FlagIsEnumClass */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {32768,IR(0, 0),IR(14267, 20)/* FlagTypePassByValue */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {65536,IR(0, 0),IR(14287, 24)/* FlagTypePassByReference */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {131072,IR(0, 0),IR(24168, 26)/* FlagUnknownPhysicalLayout */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {0,IR(0, 0),IR(14311, 6)/* Deref */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {1,IR(0, 0),IR(14317, 5)/* Plus */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {2,IR(0, 0),IR(14322, 6)/* Minus */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {3,IR(10, 1),IR(14361, 11)/* PlusUconst */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {4,IR(36, 2),IR(14372, 9)/* BitPiece */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {5,IR(0, 0),IR(14381, 5)/* Swap */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {6,IR(0, 0),IR(14386, 7)/* Xderef */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {7,IR(0, 0),IR(14393, 11)/* StackValue */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {8,IR(10, 1),IR(14404, 7)/* Constu */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {9,IR(36, 2),IR(14411, 9)/* Fragment */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {0,IR(0, 0),IR(14420, 10)/* ConstType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER + {1,IR(0, 0),IR(14430, 13)/* VolatileType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER + {2,IR(0, 0),IR(14443, 13)/* RestrictType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER + {3,IR(0, 0),IR(14456, 11)/* AtomicType */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1, 0),0xffffffffu}, // SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER + {0,IR(0, 0),IR(23736, 8)/* Unknown */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {1,IR(0, 0),IR(24194, 5)/* ESSL */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {2,IR(0, 0),IR(24199, 5)/* GLSL */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {3,IR(0, 0),IR(24204, 9)/* OpenCL_C */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {4,IR(0, 0),IR(24213, 11)/* OpenCL_CPP */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {5,IR(0, 0),IR(24224, 5)/* HLSL */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {6,IR(0, 0),IR(24229, 15)/* CPP_for_OpenCL */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {7,IR(0, 0),IR(24244, 5)/* SYCL */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {8,IR(0, 0),IR(24249, 7)/* HERO_C */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {9,IR(0, 0),IR(24256, 5)/* NZSL */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {10,IR(0, 0),IR(24261, 5)/* WGSL */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {11,IR(0, 0),IR(24266, 6)/* Slang */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {12,IR(0, 0),IR(24272, 4)/* Zig */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {13,IR(0, 0),IR(24276, 5)/* Rust */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {0,IR(0, 0),IR(24281, 16)/* UniformConstant */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {1,IR(0, 0),IR(24297, 6)/* Input */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {2,IR(0, 0),IR(15296, 8)/* Uniform */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {3,IR(0, 0),IR(24303, 7)/* Output */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {4,IR(0, 0),IR(24048, 10)/* Workgroup */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5,IR(0, 0),IR(24310, 15)/* CrossWorkgroup */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {6,IR(0, 0),IR(24325, 8)/* Private */,IR(0, 0),IR(191, 2),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {7,IR(0, 0),IR(24333, 9)/* Function */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {8,IR(0, 0),IR(24342, 8)/* Generic */,IR(0, 0),IR(193, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {9,IR(0, 0),IR(24350, 13)/* PushConstant */,IR(0, 0),IR(3, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {10,IR(0, 0),IR(24363, 14)/* AtomicCounter */,IR(0, 0),IR(80, 1),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {11,IR(0, 0),IR(24377, 6)/* Image */,IR(0, 0),IR(1, 0),IR(0, 0),SPV_SPIRV_VERSION_WORD(1,0),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {12,IR(0, 0),IR(24383, 14)/* StorageBuffer */,IR(0, 0),IR(3, 1),IR(162, 2),SPV_SPIRV_VERSION_WORD(1,3),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {4172,IR(0, 0),IR(24397, 13)/* TileImageEXT */,IR(0, 0),IR(141, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {4491,IR(0, 0),IR(24410, 19)/* TileAttachmentQCOM */,IR(0, 0),IR(41, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5068,IR(0, 0),IR(24429, 16)/* NodePayloadAMDX */,IR(0, 0),IR(43, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5328,IR(0, 0),IR(24445, 16)/* CallableDataKHR */,IR(86, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5329,IR(0, 0),IR(24476, 24)/* IncomingCallableDataKHR */,IR(87, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5338,IR(0, 0),IR(24523, 14)/* RayPayloadKHR */,IR(88, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5339,IR(0, 0),IR(24550, 16)/* HitAttributeKHR */,IR(89, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5342,IR(0, 0),IR(24581, 22)/* IncomingRayPayloadKHR */,IR(90, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5343,IR(0, 0),IR(24624, 22)/* ShaderRecordBufferKHR */,IR(91, 1),IR(54, 2),IR(24, 2),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5349,IR(0, 0),IR(24667, 22)/* PhysicalStorageBuffer */,IR(92, 1),IR(2, 1),IR(0, 2),SPV_SPIRV_VERSION_WORD(1,5),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5385,IR(0, 0),IR(24714, 21)/* HitObjectAttributeNV */,IR(0, 0),IR(120, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5402,IR(0, 0),IR(24735, 24)/* TaskPayloadWorkgroupEXT */,IR(0, 0),IR(53, 1),IR(23, 1),SPV_SPIRV_VERSION_WORD(1,4),0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5605,IR(0, 0),IR(24759, 17)/* CodeSectionINTEL */,IR(0, 0),IR(194, 1),IR(93, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5936,IR(0, 0),IR(24776, 16)/* DeviceOnlyINTEL */,IR(0, 0),IR(195, 1),IR(115, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {5937,IR(0, 0),IR(24792, 14)/* HostOnlyINTEL */,IR(0, 0),IR(195, 1),IR(115, 1),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORAGE_CLASS + {0,IR(0, 0),IR(21834, 14)/* UncachedINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORE_CACHE_CONTROL + {1,IR(0, 0),IR(24806, 18)/* WriteThroughINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORE_CACHE_CONTROL + {2,IR(0, 0),IR(24824, 15)/* WriteBackINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORE_CACHE_CONTROL + {3,IR(0, 0),IR(21860, 15)/* StreamingINTEL */,IR(0, 0),IR(140, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_STORE_CACHE_CONTROL + {0,IR(0, 0),IR(14007, 5)/* None */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS + {1,IR(10, 1),IR(24839, 11)/* TensorView */,IR(0, 0),IR(196, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS + {2,IR(10, 1),IR(24850, 11)/* DecodeFunc */,IR(0, 0),IR(197, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS + {0,IR(0, 0),IR(24861, 10)/* Undefined */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE + {1,IR(0, 0),IR(15254, 9)/* Constant */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE + {2,IR(0, 0),IR(23681, 12)/* ClampToEdge */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE + {3,IR(0, 0),IR(23699, 7)/* Repeat */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE + {4,IR(0, 0),IR(23706, 15)/* RepeatMirrored */,IR(0, 0),IR(1, 0),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE + {0,IR(0, 0),IR(24871, 8)/* NoneARM */,IR(0, 0),IR(198, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_OPERANDS + {1,IR(0, 0),IR(24879, 15)/* NontemporalARM */,IR(0, 0),IR(198, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_OPERANDS + {2,IR(10, 1),IR(24894, 20)/* OutOfBoundsValueARM */,IR(0, 0),IR(198, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_OPERANDS + {4,IR(10, 1),IR(24914, 24)/* MakeElementAvailableARM */,IR(0, 0),IR(198, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_OPERANDS + {8,IR(10, 1),IR(24938, 22)/* MakeElementVisibleARM */,IR(0, 0),IR(198, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_OPERANDS + {16,IR(0, 0),IR(24960, 21)/* NonPrivateElementARM */,IR(0, 0),IR(198, 1),IR(0, 0),0xffffffffu,0xffffffffu}, // SPV_OPERAND_TYPE_TENSOR_OPERANDS +}}; + +// Maps an operand kind to possible operands for that kind. +// The result is an IndexRange into kOperandsByValue, and the operands +// are sorted by value within that span. +// An optional variant of a kind maps to the details for the corresponding +// concrete operand kind. +IndexRange OperandByValueRangeForKind(spv_operand_type_t type) { + switch(type) { + case SPV_OPERAND_TYPE_ACCESS_QUALIFIER: return IR(0, 3); + case SPV_OPERAND_TYPE_ADDRESSING_MODEL: return IR(3, 4); + case SPV_OPERAND_TYPE_BUILT_IN: return IR(7, 126); + case SPV_OPERAND_TYPE_CAPABILITY: return IR(133, 269); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING: return IR(402, 8); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE: return IR(410, 3); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY: return IR(413, 2); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS: return IR(415, 19); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION: return IR(434, 10); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER: return IR(444, 4); + case SPV_OPERAND_TYPE_COMPONENT_TYPE: return IR(448, 15); + case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT: return IR(463, 4); + case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS: return IR(467, 6); + case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE: return IR(473, 3); + case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_USE: return IR(476, 3); + case SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT: return IR(479, 4); + case SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING: return IR(483, 8); + case SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE: return IR(491, 3); + case SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS: return IR(494, 16); + case SPV_OPERAND_TYPE_DEBUG_OPERATION: return IR(510, 9); + case SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER: return IR(519, 3); + case SPV_OPERAND_TYPE_DECORATION: return IR(522, 143); + case SPV_OPERAND_TYPE_DIMENSIONALITY: return IR(665, 8); + case SPV_OPERAND_TYPE_EXECUTION_MODE: return IR(673, 96); + case SPV_OPERAND_TYPE_EXECUTION_MODEL: return IR(769, 17); + case SPV_OPERAND_TYPE_FPDENORM_MODE: return IR(786, 2); + case SPV_OPERAND_TYPE_FPENCODING: return IR(788, 3); + case SPV_OPERAND_TYPE_FPOPERATION_MODE: return IR(791, 2); + case SPV_OPERAND_TYPE_FP_FAST_MATH_MODE: return IR(793, 9); + case SPV_OPERAND_TYPE_FP_ROUNDING_MODE: return IR(802, 4); + case SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE: return IR(806, 4); + case SPV_OPERAND_TYPE_FUNCTION_CONTROL: return IR(810, 6); + case SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE: return IR(816, 9); + case SPV_OPERAND_TYPE_GROUP_OPERATION: return IR(825, 7); + case SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER: return IR(832, 4); + case SPV_OPERAND_TYPE_IMAGE: return IR(836, 17); + case SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE: return IR(853, 26); + case SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER: return IR(879, 20); + case SPV_OPERAND_TYPE_INITIALIZATION_MODE_QUALIFIER: return IR(899, 2); + case SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS: return IR(901, 3); + case SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO: return IR(904, 2); + case SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS: return IR(906, 2); + case SPV_OPERAND_TYPE_LINKAGE_TYPE: return IR(908, 3); + case SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL: return IR(911, 5); + case SPV_OPERAND_TYPE_LOOP_CONTROL: return IR(916, 20); + case SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: return IR(936, 15); + case SPV_OPERAND_TYPE_MEMORY_ACCESS: return IR(951, 9); + case SPV_OPERAND_TYPE_MEMORY_MODEL: return IR(960, 4); + case SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID: return IR(964, 15); + case SPV_OPERAND_TYPE_NAMED_MAXIMUM_NUMBER_OF_REGISTERS: return IR(979, 1); + case SPV_OPERAND_TYPE_OVERFLOW_MODES: return IR(980, 4); + case SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT: return IR(984, 1); + case SPV_OPERAND_TYPE_QUANTIZATION_MODES: return IR(985, 8); + case SPV_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS: return IR(993, 3); + case SPV_OPERAND_TYPE_RAY_FLAGS: return IR(996, 12); + case SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE: return IR(1008, 2); + case SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE: return IR(1010, 3); + case SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION: return IR(1013, 2); + case SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE: return IR(1015, 5); + case SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE: return IR(1020, 2); + case SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT: return IR(1022, 42); + case SPV_OPERAND_TYPE_SCOPE_ID: return IR(1064, 7); + case SPV_OPERAND_TYPE_SELECTION_CONTROL: return IR(1071, 3); + case SPV_OPERAND_TYPE_SHDEBUG100_BUILD_IDENTIFIER_FLAGS: return IR(1074, 1); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING: return IR(1075, 8); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE: return IR(1083, 3); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY: return IR(1086, 2); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS: return IR(1088, 20); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION: return IR(1108, 10); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER: return IR(1118, 4); + case SPV_OPERAND_TYPE_SOURCE_LANGUAGE: return IR(1122, 14); + case SPV_OPERAND_TYPE_STORAGE_CLASS: return IR(1136, 28); + case SPV_OPERAND_TYPE_STORE_CACHE_CONTROL: return IR(1164, 4); + case SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS: return IR(1168, 3); + case SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE: return IR(1171, 5); + case SPV_OPERAND_TYPE_TENSOR_OPERANDS: return IR(1176, 6); + case SPV_OPERAND_TYPE_OPTIONAL_IMAGE: return IR(836, 17); + case SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER: return IR(0, 3); + case SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS: return IR(951, 9); + case SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT: return IR(984, 1); + case SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS: return IR(467, 6); + case SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: return IR(936, 15); + case SPV_OPERAND_TYPE_OPTIONAL_RAW_ACCESS_CHAIN_OPERANDS: return IR(993, 3); + case SPV_OPERAND_TYPE_OPTIONAL_FPENCODING: return IR(788, 3); + case SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS: return IR(1176, 6); + default: break; + } + return IR(0,0); +} + +// Operand names and index into kOperandsByValue, ordered by (operand kind, name) +// The fields in order are: +// name, either the primary name or an alias, indexing into kStrings +// index into the kOperandsByValue array +static const std::array kOperandNames{{ + {IR(4540, 9), 0}, // 0 ReadOnly in SPV_OPERAND_TYPE_ACCESS_QUALIFIER + {IR(4566, 10), 2}, // 1 ReadWrite in SPV_OPERAND_TYPE_ACCESS_QUALIFIER + {IR(4556, 10), 1}, // 2 WriteOnly in SPV_OPERAND_TYPE_ACCESS_QUALIFIER + {IR(4576, 8), 3}, // 3 Logical in SPV_OPERAND_TYPE_ADDRESSING_MODEL + {IR(4584, 11), 4}, // 4 Physical32 in SPV_OPERAND_TYPE_ADDRESSING_MODEL + {IR(4605, 11), 5}, // 5 Physical64 in SPV_OPERAND_TYPE_ADDRESSING_MODEL + {IR(4616, 24), 6}, // 6 PhysicalStorageBuffer64 in SPV_OPERAND_TYPE_ADDRESSING_MODEL + {IR(4640, 27), 6}, // 7 PhysicalStorageBuffer64EXT in SPV_OPERAND_TYPE_ADDRESSING_MODEL + {IR(6550, 13), 92}, // 8 BaryCoordKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(6563, 12), 92}, // 9 BaryCoordNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5945, 20), 68}, // 10 BaryCoordNoPerspAMD in SPV_OPERAND_TYPE_BUILT_IN + {IR(5965, 28), 69}, // 11 BaryCoordNoPerspCentroidAMD in SPV_OPERAND_TYPE_BUILT_IN + {IR(6598, 20), 93}, // 12 BaryCoordNoPerspKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(6618, 19), 93}, // 13 BaryCoordNoPerspNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5993, 26), 70}, // 14 BaryCoordNoPerspSampleAMD in SPV_OPERAND_TYPE_BUILT_IN + {IR(6090, 22), 74}, // 15 BaryCoordPullModelAMD in SPV_OPERAND_TYPE_BUILT_IN + {IR(6019, 19), 71}, // 16 BaryCoordSmoothAMD in SPV_OPERAND_TYPE_BUILT_IN + {IR(6038, 27), 72}, // 17 BaryCoordSmoothCentroidAMD in SPV_OPERAND_TYPE_BUILT_IN + {IR(6065, 25), 73}, // 18 BaryCoordSmoothSampleAMD in SPV_OPERAND_TYPE_BUILT_IN + {IR(5749, 13), 59}, // 19 BaseInstance in SPV_OPERAND_TYPE_BUILT_IN + {IR(5723, 11), 58}, // 20 BaseVertex in SPV_OPERAND_TYPE_BUILT_IN + {IR(4724, 13), 9}, // 21 ClipDistance in SPV_OPERAND_TYPE_BUILT_IN + {IR(6457, 22), 87}, // 22 ClipDistancePerViewNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7756, 12), 131}, // 23 ClusterIDNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5487, 13), 49}, // 24 CoreCountARM in SPV_OPERAND_TYPE_BUILT_IN + {IR(5461, 10), 48}, // 25 CoreIDARM in SPV_OPERAND_TYPE_BUILT_IN + {IR(5500, 13), 50}, // 26 CoreMaxIDARM in SPV_OPERAND_TYPE_BUILT_IN + {IR(4737, 13), 10}, // 27 CullDistance in SPV_OPERAND_TYPE_BUILT_IN + {IR(6479, 22), 88}, // 28 CullDistancePerViewNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7809, 12), 132}, // 29 CullMaskKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(6805, 17), 99}, // 30 CullPrimitiveEXT in SPV_OPERAND_TYPE_BUILT_IN + {IR(7209, 17), 113}, // 31 CurrentRayTimeNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5819, 12), 62}, // 32 DeviceIndex in SPV_OPERAND_TYPE_BUILT_IN + {IR(5762, 10), 60}, // 33 DrawIndex in SPV_OPERAND_TYPE_BUILT_IN + {IR(5251, 22), 37}, // 34 EnqueuedWorkgroupSize in SPV_OPERAND_TYPE_BUILT_IN + {IR(5021, 10), 21}, // 35 FragCoord in SPV_OPERAND_TYPE_BUILT_IN + {IR(5107, 10), 27}, // 36 FragDepth in SPV_OPERAND_TYPE_BUILT_IN + {IR(6683, 23), 95}, // 37 FragInvocationCountEXT in SPV_OPERAND_TYPE_BUILT_IN + {IR(6637, 12), 94}, // 38 FragSizeEXT in SPV_OPERAND_TYPE_BUILT_IN + {IR(6112, 18), 75}, // 39 FragStencilRefEXT in SPV_OPERAND_TYPE_BUILT_IN + {IR(6649, 15), 94}, // 40 FragmentSizeNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5042, 12), 23}, // 41 FrontFacing in SPV_OPERAND_TYPE_BUILT_IN + {IR(6369, 16), 83}, // 42 FullyCoveredEXT in SPV_OPERAND_TYPE_BUILT_IN + {IR(5192, 19), 33}, // 43 GlobalInvocationId in SPV_OPERAND_TYPE_BUILT_IN + {IR(5286, 15), 39}, // 44 GlobalLinearId in SPV_OPERAND_TYPE_BUILT_IN + {IR(5273, 13), 38}, // 45 GlobalOffset in SPV_OPERAND_TYPE_BUILT_IN + {IR(5240, 11), 36}, // 46 GlobalSize in SPV_OPERAND_TYPE_BUILT_IN + {IR(5117, 17), 28}, // 47 HelperInvocation in SPV_OPERAND_TYPE_BUILT_IN + {IR(7511, 11), 120}, // 48 HitIsLSSNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7469, 14), 119}, // 49 HitIsSphereNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7691, 33), 128}, // 50 HitKindBackFacingMicroTriangleNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7657, 34), 127}, // 51 HitKindFrontFacingMicroTriangleNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7188, 11), 112}, // 52 HitKindKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(7199, 10), 112}, // 53 HitKindNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7639, 18), 126}, // 54 HitLSSPositionsNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7742, 14), 130}, // 55 HitLSSRadiiNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7373, 37), 116}, // 56 HitMicroTriangleVertexBarycentricsNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7306, 34), 115}, // 57 HitMicroTriangleVertexPositionsNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7561, 20), 121}, // 58 HitSpherePositionNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7724, 18), 129}, // 59 HitSphereRadiusNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7181, 7), 111}, // 60 HitTNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7249, 30), 114}, // 61 HitTriangleVertexPositionsKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(7410, 20), 117}, // 62 IncomingRayFlagsKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(7430, 19), 117}, // 63 IncomingRayFlagsNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7070, 23), 108}, // 64 InstanceCustomIndexKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(7093, 22), 108}, // 65 InstanceCustomIndexNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(4759, 11), 12}, // 66 InstanceId in SPV_OPERAND_TYPE_BUILT_IN + {IR(5447, 14), 47}, // 67 InstanceIndex in SPV_OPERAND_TYPE_BUILT_IN + {IR(4860, 13), 14}, // 68 InvocationId in SPV_OPERAND_TYPE_BUILT_IN + {IR(6706, 22), 95}, // 69 InvocationsPerPixelNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6822, 12), 100}, // 70 LaunchIdKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(6834, 11), 100}, // 71 LaunchIdNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6845, 14), 101}, // 72 LaunchSizeKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(6859, 13), 101}, // 73 LaunchSizeNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(4873, 6), 15}, // 74 Layer in SPV_OPERAND_TYPE_BUILT_IN + {IR(6501, 15), 89}, // 75 LayerPerViewNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5174, 18), 32}, // 76 LocalInvocationId in SPV_OPERAND_TYPE_BUILT_IN + {IR(5211, 21), 34}, // 77 LocalInvocationIndex in SPV_OPERAND_TYPE_BUILT_IN + {IR(6516, 16), 90}, // 78 MeshViewCountNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6532, 18), 91}, // 79 MeshViewIndicesNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5377, 21), 43}, // 80 NumEnqueuedSubgroups in SPV_OPERAND_TYPE_BUILT_IN + {IR(5364, 13), 42}, // 81 NumSubgroups in SPV_OPERAND_TYPE_BUILT_IN + {IR(5134, 14), 29}, // 82 NumWorkgroups in SPV_OPERAND_TYPE_BUILT_IN + {IR(6985, 22), 105}, // 83 ObjectRayDirectionKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(7007, 21), 105}, // 84 ObjectRayDirectionNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6948, 19), 104}, // 85 ObjectRayOriginKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(6967, 18), 104}, // 86 ObjectRayOriginNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7115, 17), 109}, // 87 ObjectToWorldKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(7132, 16), 109}, // 88 ObjectToWorldNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5007, 14), 20}, // 89 PatchVertices in SPV_OPERAND_TYPE_BUILT_IN + {IR(5031, 11), 22}, // 90 PointCoord in SPV_OPERAND_TYPE_BUILT_IN + {IR(4714, 10), 8}, // 91 PointSize in SPV_OPERAND_TYPE_BUILT_IN + {IR(4698, 9), 7}, // 92 Position in SPV_OPERAND_TYPE_BUILT_IN + {IR(6309, 18), 81}, // 93 PositionPerViewNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6421, 17), 85}, // 94 PrimitiveCountNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(4770, 12), 13}, // 95 PrimitiveId in SPV_OPERAND_TYPE_BUILT_IN + {IR(6438, 19), 86}, // 96 PrimitiveIndicesNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6753, 24), 97}, // 97 PrimitiveLineIndicesEXT in SPV_OPERAND_TYPE_BUILT_IN + {IR(6728, 25), 96}, // 98 PrimitivePointIndicesEXT in SPV_OPERAND_TYPE_BUILT_IN + {IR(5772, 24), 61}, // 99 PrimitiveShadingRateKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(6777, 28), 98}, // 100 PrimitiveTriangleIndicesEXT in SPV_OPERAND_TYPE_BUILT_IN + {IR(7449, 20), 118}, // 101 RayGeometryIndexKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(7049, 11), 107}, // 102 RayTmaxKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(7060, 10), 107}, // 103 RayTmaxNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7028, 11), 106}, // 104 RayTminKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(7039, 10), 106}, // 105 RayTminNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6147, 29), 76}, // 106 RemainingRecursionLevelsAMDX in SPV_OPERAND_TYPE_BUILT_IN + {IR(7613, 10), 123}, // 107 SMCountNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7632, 7), 125}, // 108 SMIDNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5054, 9), 24}, // 109 SampleId in SPV_OPERAND_TYPE_BUILT_IN + {IR(5096, 11), 26}, // 110 SampleMask in SPV_OPERAND_TYPE_BUILT_IN + {IR(5081, 15), 25}, // 111 SamplePosition in SPV_OPERAND_TYPE_BUILT_IN + {IR(6246, 20), 79}, // 112 SecondaryPositionNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6285, 24), 80}, // 113 SecondaryViewportMaskNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6194, 16), 77}, // 114 ShaderIndexAMDX in SPV_OPERAND_TYPE_BUILT_IN + {IR(5863, 15), 64}, // 115 ShadingRateKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(5536, 15), 53}, // 116 SubgroupEqMask in SPV_OPERAND_TYPE_BUILT_IN + {IR(5551, 18), 53}, // 117 SubgroupEqMaskKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(5591, 15), 54}, // 118 SubgroupGeMask in SPV_OPERAND_TYPE_BUILT_IN + {IR(5606, 18), 54}, // 119 SubgroupGeMaskKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(5624, 15), 55}, // 120 SubgroupGtMask in SPV_OPERAND_TYPE_BUILT_IN + {IR(5639, 18), 55}, // 121 SubgroupGtMaskKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(5398, 11), 44}, // 122 SubgroupId in SPV_OPERAND_TYPE_BUILT_IN + {IR(5657, 15), 56}, // 123 SubgroupLeMask in SPV_OPERAND_TYPE_BUILT_IN + {IR(5672, 18), 56}, // 124 SubgroupLeMaskKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(5409, 26), 45}, // 125 SubgroupLocalInvocationId in SPV_OPERAND_TYPE_BUILT_IN + {IR(5690, 15), 57}, // 126 SubgroupLtMask in SPV_OPERAND_TYPE_BUILT_IN + {IR(5705, 18), 57}, // 127 SubgroupLtMaskKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(5348, 16), 41}, // 128 SubgroupMaxSize in SPV_OPERAND_TYPE_BUILT_IN + {IR(5301, 13), 40}, // 129 SubgroupSize in SPV_OPERAND_TYPE_BUILT_IN + {IR(6409, 12), 84}, // 130 TaskCountNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(4997, 10), 19}, // 131 TessCoord in SPV_OPERAND_TYPE_BUILT_IN + {IR(4982, 15), 18}, // 132 TessLevelInner in SPV_OPERAND_TYPE_BUILT_IN + {IR(4967, 15), 17}, // 133 TessLevelOuter in SPV_OPERAND_TYPE_BUILT_IN + {IR(5927, 18), 67}, // 134 TileApronSizeQCOM in SPV_OPERAND_TYPE_BUILT_IN + {IR(5909, 18), 66}, // 135 TileDimensionQCOM in SPV_OPERAND_TYPE_BUILT_IN + {IR(5878, 15), 65}, // 136 TileOffsetQCOM in SPV_OPERAND_TYPE_BUILT_IN + {IR(4750, 9), 11}, // 137 VertexId in SPV_OPERAND_TYPE_BUILT_IN + {IR(5435, 12), 46}, // 138 VertexIndex in SPV_OPERAND_TYPE_BUILT_IN + {IR(5843, 10), 63}, // 139 ViewIndex in SPV_OPERAND_TYPE_BUILT_IN + {IR(4919, 14), 16}, // 140 ViewportIndex in SPV_OPERAND_TYPE_BUILT_IN + {IR(6210, 15), 78}, // 141 ViewportMaskNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6347, 22), 82}, // 142 ViewportMaskPerViewNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5513, 10), 51}, // 143 WarpIDARM in SPV_OPERAND_TYPE_BUILT_IN + {IR(7623, 9), 124}, // 144 WarpIDNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5523, 13), 52}, // 145 WarpMaxIDARM in SPV_OPERAND_TYPE_BUILT_IN + {IR(7581, 13), 122}, // 146 WarpsPerSMNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(5232, 8), 35}, // 147 WorkDim in SPV_OPERAND_TYPE_BUILT_IN + {IR(5162, 12), 31}, // 148 WorkgroupId in SPV_OPERAND_TYPE_BUILT_IN + {IR(5148, 14), 30}, // 149 WorkgroupSize in SPV_OPERAND_TYPE_BUILT_IN + {IR(6907, 21), 103}, // 150 WorldRayDirectionKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(6928, 20), 103}, // 151 WorldRayDirectionNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(6872, 18), 102}, // 152 WorldRayOriginKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(6890, 17), 102}, // 153 WorldRayOriginNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(7148, 17), 110}, // 154 WorldToObjectKHR in SPV_OPERAND_TYPE_BUILT_IN + {IR(7165, 16), 110}, // 155 WorldToObjectNV in SPV_OPERAND_TYPE_BUILT_IN + {IR(4595, 10), 137}, // 156 Addresses in SPV_OPERAND_TYPE_CAPABILITY + {IR(12785, 34), 357}, // 157 ArbitraryPrecisionFixedPointINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12473, 37), 345}, // 158 ArbitraryPrecisionFloatingPointINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12441, 32), 344}, // 159 ArbitraryPrecisionIntegersINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13335, 19), 381}, // 160 ArithmeticFenceEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(12106, 9), 330}, // 161 AsmINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13252, 20), 377}, // 162 AtomicFloat16AddEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(12161, 23), 333}, // 163 AtomicFloat16MinMaxEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(11634, 22), 308}, // 164 AtomicFloat16VectorNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(13168, 20), 373}, // 165 AtomicFloat32AddEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(12115, 23), 331}, // 166 AtomicFloat32MinMaxEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(13188, 20), 374}, // 167 AtomicFloat64AddEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(12138, 23), 332}, // 168 AtomicFloat64MinMaxEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(7989, 14), 153}, // 169 AtomicStorage in SPV_OPERAND_TYPE_CAPABILITY + {IR(9346, 17), 228}, // 170 AtomicStorageOps in SPV_OPERAND_TYPE_CAPABILITY + {IR(13293, 24), 379}, // 171 BFloat16ConversionINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(9957, 29), 261}, // 172 BFloat16CooperativeMatrixKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(9935, 22), 260}, // 173 BFloat16DotProductKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(9919, 16), 259}, // 174 BFloat16TypeKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(13856, 20), 401}, // 175 BindlessImagesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(11571, 18), 305}, // 176 BindlessTextureNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(13112, 16), 370}, // 177 BitInstructions in SPV_OPERAND_TYPE_CAPABILITY + {IR(12884, 19), 361}, // 178 BlockingPipesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13817, 19), 399}, // 179 CacheControlsINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(4724, 13), 163}, // 180 ClipDistance in SPV_OPERAND_TYPE_CAPABILITY + {IR(11229, 32), 294}, // 181 ComputeDerivativeGroupLinearKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(11261, 31), 294}, // 182 ComputeDerivativeGroupLinearNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(10109, 31), 273}, // 183 ComputeDerivativeGroupQuadsKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(10140, 30), 273}, // 184 ComputeDerivativeGroupQuadsNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(11811, 30), 317}, // 185 CooperativeMatrixBlockLoadsNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(11704, 31), 314}, // 186 CooperativeMatrixConversionsNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(9898, 21), 368}, // 187 CooperativeMatrixKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(8950, 28), 210}, // 188 CooperativeMatrixLayoutsARM in SPV_OPERAND_TYPE_CAPABILITY + {IR(11317, 20), 296}, // 189 CooperativeMatrixNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(11735, 40), 315}, // 190 CooperativeMatrixPerElementOperationsNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(11674, 30), 313}, // 191 CooperativeMatrixReductionsNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(11775, 36), 316}, // 192 CooperativeMatrixTensorAddressingNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(11614, 20), 307}, // 193 CooperativeVectorNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(11841, 28), 318}, // 194 CooperativeVectorTrainingNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(5471, 16), 203}, // 195 CoreBuiltinsARM in SPV_OPERAND_TYPE_CAPABILITY + {IR(4737, 13), 164}, // 196 CullDistance in SPV_OPERAND_TYPE_CAPABILITY + {IR(13272, 21), 378}, // 197 DebugInfoModuleINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(11440, 25), 301}, // 198 DemoteToHelperInvocation in SPV_OPERAND_TYPE_CAPABILITY + {IR(11465, 28), 301}, // 199 DemoteToHelperInvocationEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(9485, 18), 234}, // 200 DenormFlushToZero in SPV_OPERAND_TYPE_CAPABILITY + {IR(9470, 15), 233}, // 201 DenormPreserve in SPV_OPERAND_TYPE_CAPABILITY + {IR(8436, 18), 182}, // 202 DerivativeControl in SPV_OPERAND_TYPE_CAPABILITY + {IR(7960, 14), 151}, // 203 DeviceEnqueue in SPV_OPERAND_TYPE_CAPABILITY + {IR(5831, 12), 224}, // 204 DeviceGroup in SPV_OPERAND_TYPE_CAPABILITY + {IR(11493, 23), 302}, // 205 DisplacementMicromapNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(13063, 11), 366}, // 206 DotProduct in SPV_OPERAND_TYPE_CAPABILITY + {IR(12957, 22), 364}, // 207 DotProductInput4x8Bit in SPV_OPERAND_TYPE_CAPABILITY + {IR(12979, 25), 364}, // 208 DotProductInput4x8BitKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(13004, 28), 365}, // 209 DotProductInput4x8BitPacked in SPV_OPERAND_TYPE_CAPABILITY + {IR(13032, 31), 365}, // 210 DotProductInput4x8BitPackedKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(12916, 19), 363}, // 211 DotProductInputAll in SPV_OPERAND_TYPE_CAPABILITY + {IR(12935, 22), 363}, // 212 DotProductInputAllKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(13074, 14), 366}, // 213 DotProductKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(5734, 15), 215}, // 214 DrawParameters in SPV_OPERAND_TYPE_CAPABILITY + {IR(12218, 16), 336}, // 215 ExpectAssumeKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(12421, 20), 343}, // 216 FPFastMathModeINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13469, 28), 387}, // 217 FPGAArgumentInterfacesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12761, 24), 356}, // 218 FPGABufferLocationINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12634, 27), 351}, // 219 FPGAClusterAttributesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13354, 29), 382}, // 220 FPGAClusterAttributesV2INTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12675, 20), 353}, // 221 FPGADSPControlINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12721, 40), 355}, // 222 FPGAInvocationPipeliningAttributesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12584, 26), 349}, // 223 FPGAKernelAttributesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13383, 28), 383}, // 224 FPGAKernelAttributesv2INTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13445, 24), 386}, // 225 FPGALatencyControlINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12540, 22), 347}, // 226 FPGALoopControlsINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12610, 24), 350}, // 227 FPGAMemoryAccessesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12395, 26), 342}, // 228 FPGAMemoryAttributesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12903, 13), 362}, // 229 FPGARegINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13429, 16), 385}, // 230 FPMaxErrorINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(7874, 8), 142}, // 231 Float16 in SPV_OPERAND_TYPE_CAPABILITY + {IR(7860, 14), 141}, // 232 Float16Buffer in SPV_OPERAND_TYPE_CAPABILITY + {IR(9738, 16), 248}, // 233 Float16ImageAMD in SPV_OPERAND_TYPE_CAPABILITY + {IR(7882, 8), 143}, // 234 Float64 in SPV_OPERAND_TYPE_CAPABILITY + {IR(8988, 27), 212}, // 235 Float8CooperativeMatrixEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(8978, 10), 211}, // 236 Float8EXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(13153, 15), 372}, // 237 FloatControls2 in SPV_OPERAND_TYPE_CAPABILITY + {IR(12014, 23), 326}, // 238 FloatingPointModeINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(6575, 23), 272}, // 239 FragmentBarycentricKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(10087, 22), 272}, // 240 FragmentBarycentricNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(6664, 19), 274}, // 241 FragmentDensityEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(6385, 24), 268}, // 242 FragmentFullyCoveredEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(9776, 16), 250}, // 243 FragmentMaskAMD in SPV_OPERAND_TYPE_CAPABILITY + {IR(11408, 32), 300}, // 244 FragmentShaderPixelInterlockEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(11337, 33), 297}, // 245 FragmentShaderSampleInterlockEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(11370, 38), 298}, // 246 FragmentShaderShadingRateInterlockEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(5796, 23), 213}, // 247 FragmentShadingRateKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(12369, 26), 341}, // 248 FunctionFloatControlINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12060, 22), 328}, // 249 FunctionPointersINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(8281, 15), 169}, // 250 GenericPointer in SPV_OPERAND_TYPE_CAPABILITY + {IR(4782, 9), 135}, // 251 Geometry in SPV_OPERAND_TYPE_CAPABILITY + {IR(8031, 18), 156}, // 252 GeometryPointSize in SPV_OPERAND_TYPE_CAPABILITY + {IR(10015, 28), 263}, // 253 GeometryShaderPassthroughNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(8494, 16), 185}, // 254 GeometryStreams in SPV_OPERAND_TYPE_CAPABILITY + {IR(13527, 35), 389}, // 255 GlobalVariableFPGADecorationsINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13497, 30), 388}, // 256 GlobalVariableHostAccessINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(5314, 16), 192}, // 257 GroupNonUniform in SPV_OPERAND_TYPE_CAPABILITY + {IR(8633, 26), 194}, // 258 GroupNonUniformArithmetic in SPV_OPERAND_TYPE_CAPABILITY + {IR(5569, 22), 195}, // 259 GroupNonUniformBallot in SPV_OPERAND_TYPE_CAPABILITY + {IR(8713, 25), 198}, // 260 GroupNonUniformClustered in SPV_OPERAND_TYPE_CAPABILITY + {IR(10184, 29), 275}, // 261 GroupNonUniformPartitionedNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(8738, 20), 199}, // 262 GroupNonUniformQuad in SPV_OPERAND_TYPE_CAPABILITY + {IR(13128, 25), 371}, // 263 GroupNonUniformRotateKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(8659, 23), 196}, // 264 GroupNonUniformShuffle in SPV_OPERAND_TYPE_CAPABILITY + {IR(8682, 31), 197}, // 265 GroupNonUniformShuffleRelative in SPV_OPERAND_TYPE_CAPABILITY + {IR(8613, 20), 193}, // 266 GroupNonUniformVote in SPV_OPERAND_TYPE_CAPABILITY + {IR(13739, 26), 396}, // 267 GroupUniformArithmeticKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(7953, 7), 150}, // 268 Groups in SPV_OPERAND_TYPE_CAPABILITY + {IR(12871, 13), 360}, // 269 IOPipesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(8350, 8), 175}, // 270 Image1D in SPV_OPERAND_TYPE_CAPABILITY + {IR(7909, 11), 146}, // 271 ImageBasic in SPV_OPERAND_TYPE_CAPABILITY + {IR(8372, 12), 178}, // 272 ImageBuffer in SPV_OPERAND_TYPE_CAPABILITY + {IR(8227, 15), 165}, // 273 ImageCubeArray in SPV_OPERAND_TYPE_CAPABILITY + {IR(10070, 17), 270}, // 274 ImageFootprintNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(9754, 22), 249}, // 275 ImageGatherBiasLodAMD in SPV_OPERAND_TYPE_CAPABILITY + {IR(8049, 20), 157}, // 276 ImageGatherExtended in SPV_OPERAND_TYPE_CAPABILITY + {IR(8384, 13), 179}, // 277 ImageMSArray in SPV_OPERAND_TYPE_CAPABILITY + {IR(7935, 12), 148}, // 278 ImageMipmap in SPV_OPERAND_TYPE_CAPABILITY + {IR(8425, 11), 181}, // 279 ImageQuery in SPV_OPERAND_TYPE_CAPABILITY + {IR(7920, 15), 147}, // 280 ImageReadWrite in SPV_OPERAND_TYPE_CAPABILITY + {IR(9792, 21), 252}, // 281 ImageReadWriteLodAMD in SPV_OPERAND_TYPE_CAPABILITY + {IR(8259, 10), 167}, // 282 ImageRect in SPV_OPERAND_TYPE_CAPABILITY + {IR(12082, 24), 329}, // 283 IndirectReferencesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(8301, 16), 171}, // 284 InputAttachment in SPV_OPERAND_TYPE_CAPABILITY + {IR(10299, 36), 278}, // 285 InputAttachmentArrayDynamicIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10335, 39), 278}, // 286 InputAttachmentArrayDynamicIndexingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(10840, 39), 285}, // 287 InputAttachmentArrayNonUniformIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10879, 42), 285}, // 288 InputAttachmentArrayNonUniformIndexingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(8003, 6), 154}, // 289 Int16 in SPV_OPERAND_TYPE_CAPABILITY + {IR(9871, 27), 258}, // 290 Int4CooperativeMatrixINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(9857, 14), 257}, // 291 Int4TypeINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(7890, 6), 144}, // 292 Int64 in SPV_OPERAND_TYPE_CAPABILITY + {IR(7896, 13), 145}, // 293 Int64Atomics in SPV_OPERAND_TYPE_CAPABILITY + {IR(9813, 14), 253}, // 294 Int64ImageEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(8296, 5), 170}, // 295 Int8 in SPV_OPERAND_TYPE_CAPABILITY + {IR(12037, 23), 327}, // 296 IntegerFunctions2INTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(8454, 22), 183}, // 297 InterpolationFunction in SPV_OPERAND_TYPE_CAPABILITY + {IR(4549, 7), 139}, // 298 Kernel in SPV_OPERAND_TYPE_CAPABILITY + {IR(12562, 22), 348}, // 299 KernelAttributesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(7843, 8), 138}, // 300 Linkage in SPV_OPERAND_TYPE_CAPABILITY + {IR(7974, 15), 152}, // 301 LiteralSampler in SPV_OPERAND_TYPE_CAPABILITY + {IR(13208, 20), 375}, // 302 LongCompositesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12661, 14), 352}, // 303 LoopFuseINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13792, 25), 398}, // 304 MaskedGatherScatterINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(7836, 7), 133}, // 305 Matrix in SPV_OPERAND_TYPE_CAPABILITY + {IR(12695, 26), 354}, // 306 MemoryAccessAliasingINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(4845, 15), 271}, // 307 MeshShadingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(4831, 14), 269}, // 308 MeshShadingNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(8333, 7), 173}, // 309 MinLod in SPV_OPERAND_TYPE_CAPABILITY + {IR(5853, 10), 225}, // 310 MultiView in SPV_OPERAND_TYPE_CAPABILITY + {IR(4933, 14), 188}, // 311 MultiViewport in SPV_OPERAND_TYPE_CAPABILITY + {IR(8588, 13), 190}, // 312 NamedBarrier in SPV_OPERAND_TYPE_CAPABILITY + {IR(13228, 11), 376}, // 313 OptNoneEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(13239, 13), 376}, // 314 OptNoneINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(6327, 20), 267}, // 315 PerViewAttributesNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(4667, 31), 293}, // 316 PhysicalStorageBufferAddresses in SPV_OPERAND_TYPE_CAPABILITY + {IR(11195, 34), 293}, // 317 PhysicalStorageBufferAddressesEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(8601, 12), 191}, // 318 PipeStorage in SPV_OPERAND_TYPE_CAPABILITY + {IR(7947, 6), 149}, // 319 Pipes in SPV_OPERAND_TYPE_CAPABILITY + {IR(9842, 15), 256}, // 320 QuadControlKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(11656, 18), 310}, // 321 RawAccessChainsNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(7821, 15), 367}, // 322 RayCullMaskKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(9583, 12), 239}, // 323 RayQueryKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(11589, 25), 306}, // 324 RayQueryPositionFetchKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(9560, 23), 238}, // 325 RayQueryProvisionalKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(7768, 41), 319}, // 326 RayTracingClusterAccelerationStructureNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(7340, 33), 309}, // 327 RayTracingDisplacementMicromapNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(4817, 14), 242}, // 328 RayTracingKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(7522, 39), 312}, // 329 RayTracingLinearSweptSpheresGeometryNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(7226, 23), 290}, // 330 RayTracingMotionBlurNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(4804, 13), 289}, // 331 RayTracingNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(11516, 29), 303}, // 332 RayTracingOpacityMicromapEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(7279, 27), 288}, // 333 RayTracingPositionFetchKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(11292, 25), 295}, // 334 RayTracingProvisionalKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(7483, 28), 311}, // 335 RayTracingSpheresGeometryNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(9614, 32), 241}, // 336 RayTraversalPrimitiveCullingKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(13836, 20), 400}, // 337 RegisterLimitsINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13088, 24), 369}, // 338 ReplicatedCompositesEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(11993, 21), 325}, // 339 RoundToInfinityINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(9528, 16), 236}, // 340 RoundingModeRTE in SPV_OPERAND_TYPE_CAPABILITY + {IR(9544, 16), 237}, // 341 RoundingModeRTZ in SPV_OPERAND_TYPE_CAPABILITY + {IR(12842, 29), 359}, // 342 RuntimeAlignedAttributeINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(10250, 23), 277}, // 343 RuntimeDescriptorArray in SPV_OPERAND_TYPE_CAPABILITY + {IR(10273, 26), 277}, // 344 RuntimeDescriptorArrayEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(9986, 29), 262}, // 345 SampleMaskOverrideCoverageNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(9363, 28), 229}, // 346 SampleMaskPostDepthCoverage in SPV_OPERAND_TYPE_CAPABILITY + {IR(5063, 18), 166}, // 347 SampleRateShading in SPV_OPERAND_TYPE_CAPABILITY + {IR(8340, 10), 174}, // 348 Sampled1D in SPV_OPERAND_TYPE_CAPABILITY + {IR(8358, 14), 177}, // 349 SampledBuffer in SPV_OPERAND_TYPE_CAPABILITY + {IR(8242, 17), 176}, // 350 SampledCubeArray in SPV_OPERAND_TYPE_CAPABILITY + {IR(8127, 33), 160}, // 351 SampledImageArrayDynamicIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10613, 36), 282}, // 352 SampledImageArrayNonUniformIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10649, 39), 282}, // 353 SampledImageArrayNonUniformIndexingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(8269, 12), 168}, // 354 SampledRect in SPV_OPERAND_TYPE_CAPABILITY + {IR(4707, 7), 134}, // 355 Shader in SPV_OPERAND_TYPE_CAPABILITY + {IR(9827, 15), 254}, // 356 ShaderClockKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(6176, 18), 255}, // 357 ShaderEnqueueAMDX in SPV_OPERAND_TYPE_CAPABILITY + {IR(11545, 26), 304}, // 358 ShaderInvocationReorderNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(4879, 12), 200}, // 359 ShaderLayer in SPV_OPERAND_TYPE_CAPABILITY + {IR(10213, 17), 276}, // 360 ShaderNonUniform in SPV_OPERAND_TYPE_CAPABILITY + {IR(10230, 20), 276}, // 361 ShaderNonUniformEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(7594, 19), 299}, // 362 ShaderSMBuiltinsNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(6266, 19), 266}, // 363 ShaderStereoViewNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(4947, 20), 201}, // 364 ShaderViewportIndex in SPV_OPERAND_TYPE_CAPABILITY + {IR(4891, 28), 264}, // 365 ShaderViewportIndexLayerEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(10043, 27), 264}, // 366 ShaderViewportIndexLayerNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(6225, 21), 265}, // 367 ShaderViewportMaskNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(10170, 14), 274}, // 368 ShadingRateNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(9503, 25), 235}, // 369 SignedZeroInfNanPreserve in SPV_OPERAND_TYPE_CAPABILITY + {IR(8317, 16), 172}, // 370 SparseResidency in SPV_OPERAND_TYPE_CAPABILITY + {IR(13317, 18), 380}, // 371 SplitBarrierINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(6130, 17), 251}, // 372 StencilExportEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(9151, 25), 220}, // 373 StorageBuffer16BitAccess in SPV_OPERAND_TYPE_CAPABILITY + {IR(9391, 24), 230}, // 374 StorageBuffer8BitAccess in SPV_OPERAND_TYPE_CAPABILITY + {IR(8160, 34), 161}, // 375 StorageBufferArrayDynamicIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10688, 37), 283}, // 376 StorageBufferArrayNonUniformIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10725, 40), 283}, // 377 StorageBufferArrayNonUniformIndexingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(8194, 33), 162}, // 378 StorageImageArrayDynamicIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10765, 36), 284}, // 379 StorageImageArrayNonUniformIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10801, 39), 284}, // 380 StorageImageArrayNonUniformIndexingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(8397, 28), 180}, // 381 StorageImageExtendedFormats in SPV_OPERAND_TYPE_CAPABILITY + {IR(8069, 24), 158}, // 382 StorageImageMultisample in SPV_OPERAND_TYPE_CAPABILITY + {IR(8510, 30), 186}, // 383 StorageImageReadWithoutFormat in SPV_OPERAND_TYPE_CAPABILITY + {IR(8540, 31), 187}, // 384 StorageImageWriteWithoutFormat in SPV_OPERAND_TYPE_CAPABILITY + {IR(9278, 21), 223}, // 385 StorageInputOutput16 in SPV_OPERAND_TYPE_CAPABILITY + {IR(9256, 22), 222}, // 386 StoragePushConstant16 in SPV_OPERAND_TYPE_CAPABILITY + {IR(9449, 21), 232}, // 387 StoragePushConstant8 in SPV_OPERAND_TYPE_CAPABILITY + {IR(8873, 37), 208}, // 388 StorageTensorArrayDynamicIndexingARM in SPV_OPERAND_TYPE_CAPABILITY + {IR(8910, 40), 209}, // 389 StorageTensorArrayNonUniformIndexingARM in SPV_OPERAND_TYPE_CAPABILITY + {IR(10455, 39), 280}, // 390 StorageTexelBufferArrayDynamicIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10494, 42), 280}, // 391 StorageTexelBufferArrayDynamicIndexingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(11008, 42), 287}, // 392 StorageTexelBufferArrayNonUniformIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(11050, 45), 287}, // 393 StorageTexelBufferArrayNonUniformIndexingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(9239, 17), 221}, // 394 StorageUniform16 in SPV_OPERAND_TYPE_CAPABILITY + {IR(9176, 28), 220}, // 395 StorageUniformBufferBlock16 in SPV_OPERAND_TYPE_CAPABILITY + {IR(13590, 23), 391}, // 396 Subgroup2DBlockIOINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13613, 30), 392}, // 397 Subgroup2DBlockTransformINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13643, 30), 393}, // 398 Subgroup2DBlockTransposeINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12305, 39), 339}, // 399 SubgroupAvcMotionEstimationChromaINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12234, 33), 337}, // 400 SubgroupAvcMotionEstimationINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12267, 38), 338}, // 401 SubgroupAvcMotionEstimationIntraINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(5330, 18), 214}, // 402 SubgroupBallotKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(11909, 27), 322}, // 403 SubgroupBufferBlockIOINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13562, 28), 390}, // 404 SubgroupBufferPrefetchINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(8571, 17), 189}, // 405 SubgroupDispatch in SPV_OPERAND_TYPE_CAPABILITY + {IR(11936, 26), 323}, // 406 SubgroupImageBlockIOINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(11962, 31), 324}, // 407 SubgroupImageMediaBlockIOINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(13673, 38), 394}, // 408 SubgroupMatrixMultiplyAccumulateINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(11888, 21), 321}, // 409 SubgroupShuffleINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(9135, 16), 219}, // 410 SubgroupVoteKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(13411, 18), 384}, // 411 TaskSequenceINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(11869, 19), 320}, // 412 TensorAddressingNV in SPV_OPERAND_TYPE_CAPABILITY + {IR(13765, 27), 397}, // 413 TensorFloat32RoundingINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(8862, 11), 207}, // 414 TensorsARM in SPV_OPERAND_TYPE_CAPABILITY + {IR(13711, 28), 395}, // 415 TernaryBitwiseFunctionINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(4791, 13), 136}, // 416 Tessellation in SPV_OPERAND_TYPE_CAPABILITY + {IR(8009, 22), 155}, // 417 TessellationPointSize in SPV_OPERAND_TYPE_CAPABILITY + {IR(9715, 23), 247}, // 418 TextureBlockMatch2QCOM in SPV_OPERAND_TYPE_CAPABILITY + {IR(9693, 22), 245}, // 419 TextureBlockMatchQCOM in SPV_OPERAND_TYPE_CAPABILITY + {IR(9672, 21), 244}, // 420 TextureBoxFilterQCOM in SPV_OPERAND_TYPE_CAPABILITY + {IR(9646, 26), 243}, // 421 TextureSampleWeightedQCOM in SPV_OPERAND_TYPE_CAPABILITY + {IR(8776, 28), 204}, // 422 TileImageColorReadAccessEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(8804, 28), 205}, // 423 TileImageDepthReadAccessEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(8832, 30), 206}, // 424 TileImageStencilReadAccessEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(5893, 16), 246}, // 425 TileShadingQCOM in SPV_OPERAND_TYPE_CAPABILITY + {IR(8476, 18), 184}, // 426 TransformFeedback in SPV_OPERAND_TYPE_CAPABILITY + {IR(12819, 23), 358}, // 427 USMStorageClassesINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(9204, 35), 221}, // 428 UniformAndStorageBuffer16BitAccess in SPV_OPERAND_TYPE_CAPABILITY + {IR(9415, 34), 231}, // 429 UniformAndStorageBuffer8BitAccess in SPV_OPERAND_TYPE_CAPABILITY + {IR(8093, 34), 159}, // 430 UniformBufferArrayDynamicIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10536, 37), 281}, // 431 UniformBufferArrayNonUniformIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10573, 40), 281}, // 432 UniformBufferArrayNonUniformIndexingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(8758, 18), 202}, // 433 UniformDecoration in SPV_OPERAND_TYPE_CAPABILITY + {IR(10374, 39), 279}, // 434 UniformTexelBufferArrayDynamicIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10413, 42), 279}, // 435 UniformTexelBufferArrayDynamicIndexingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(10921, 42), 286}, // 436 UniformTexelBufferArrayNonUniformIndexing in SPV_OPERAND_TYPE_CAPABILITY + {IR(10963, 45), 286}, // 437 UniformTexelBufferArrayNonUniformIndexingEXT in SPV_OPERAND_TYPE_CAPABILITY + {IR(12510, 30), 346}, // 438 UnstructuredLoopControlsINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(9595, 19), 240}, // 439 UntypedPointersKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(12344, 25), 340}, // 440 VariableLengthArrayINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(9329, 17), 227}, // 441 VariablePointers in SPV_OPERAND_TYPE_CAPABILITY + {IR(9299, 30), 226}, // 442 VariablePointersStorageBuffer in SPV_OPERAND_TYPE_CAPABILITY + {IR(7851, 9), 140}, // 443 Vector16 in SPV_OPERAND_TYPE_CAPABILITY + {IR(12203, 15), 335}, // 444 VectorAnyINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(12184, 19), 334}, // 445 VectorComputeINTEL in SPV_OPERAND_TYPE_CAPABILITY + {IR(11095, 18), 291}, // 446 VulkanMemoryModel in SPV_OPERAND_TYPE_CAPABILITY + {IR(11134, 29), 292}, // 447 VulkanMemoryModelDeviceScope in SPV_OPERAND_TYPE_CAPABILITY + {IR(11163, 32), 292}, // 448 VulkanMemoryModelDeviceScopeKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(11113, 21), 291}, // 449 VulkanMemoryModelKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(9091, 44), 218}, // 450 WorkgroupMemoryExplicitLayout16BitAccessKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(9048, 43), 217}, // 451 WorkgroupMemoryExplicitLayout8BitAccessKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(9015, 33), 216}, // 452 WorkgroupMemoryExplicitLayoutKHR in SPV_OPERAND_TYPE_CAPABILITY + {IR(13888, 8), 403}, // 453 Address in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13896, 8), 404}, // 454 Boolean in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13904, 6), 405}, // 455 Float in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13910, 7), 406}, // 456 Signed in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13917, 11), 407}, // 457 SignedChar in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13928, 9), 408}, // 458 Unsigned in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13937, 13), 409}, // 459 UnsignedChar in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13876, 12), 402}, // 460 Unspecified in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13950, 6), 410}, // 461 Class in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE + {IR(13956, 10), 411}, // 462 Structure in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE + {IR(13966, 6), 412}, // 463 Union in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE + {IR(13987, 20), 414}, // 464 ImportedDeclaration in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY + {IR(13972, 15), 413}, // 465 ImportedModule in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY + {IR(14096, 15), 422}, // 466 FlagArtificial in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14111, 13), 423}, // 467 FlagExplicit in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14084, 12), 421}, // 468 FlagFwdDecl in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14174, 21), 427}, // 469 FlagIndirectVariable in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14067, 17), 420}, // 470 FlagIsDefinition in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14251, 16), 431}, // 471 FlagIsEnumClass in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14055, 12), 419}, // 472 FlagIsLocal in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14235, 16), 430}, // 473 FlagIsOptimized in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14028, 14), 417}, // 474 FlagIsPrivate in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14012, 16), 416}, // 475 FlagIsProtected in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14042, 13), 418}, // 476 FlagIsPublic in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14195, 20), 428}, // 477 FlagLValueReference in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14139, 18), 425}, // 478 FlagObjectPointer in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14124, 15), 424}, // 479 FlagPrototyped in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14215, 20), 429}, // 480 FlagRValueReference in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14157, 17), 426}, // 481 FlagStaticMember in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14287, 24), 433}, // 482 FlagTypePassByReference in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14267, 20), 432}, // 483 FlagTypePassByValue in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14007, 5), 415}, // 484 None in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS + {IR(14372, 9), 438}, // 485 BitPiece in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {IR(14404, 7), 442}, // 486 Constu in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {IR(14311, 6), 434}, // 487 Deref in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {IR(14411, 9), 443}, // 488 Fragment in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {IR(14322, 6), 436}, // 489 Minus in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {IR(14317, 5), 435}, // 490 Plus in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {IR(14361, 11), 437}, // 491 PlusUconst in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {IR(14393, 11), 441}, // 492 StackValue in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {IR(14381, 5), 439}, // 493 Swap in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {IR(14386, 7), 440}, // 494 Xderef in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION + {IR(14456, 11), 447}, // 495 AtomicType in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER + {IR(14420, 10), 444}, // 496 ConstType in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER + {IR(14443, 13), 446}, // 497 RestrictType in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER + {IR(14430, 13), 445}, // 498 VolatileType in SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER + {IR(14467, 10), 448}, // 499 Float16NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14477, 10), 449}, // 500 Float32NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14487, 10), 450}, // 501 Float64NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14655, 12), 461}, // 502 FloatE4M3NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14667, 12), 462}, // 503 FloatE5M2NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14510, 14), 452}, // 504 SignedInt16NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14524, 14), 453}, // 505 SignedInt32NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14538, 14), 454}, // 506 SignedInt64NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14497, 13), 451}, // 507 SignedInt8NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14615, 19), 459}, // 508 SignedInt8PackedNV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14567, 16), 456}, // 509 UnsignedInt16NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14583, 16), 457}, // 510 UnsignedInt32NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14599, 16), 458}, // 511 UnsignedInt64NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14552, 15), 455}, // 512 UnsignedInt8NV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14634, 21), 460}, // 513 UnsignedInt8PackedNV in SPV_OPERAND_TYPE_COMPONENT_TYPE + {IR(14731, 28), 466}, // 514 ColumnBlockedInterleavedARM in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT + {IR(14691, 15), 464}, // 515 ColumnMajorKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT + {IR(14706, 25), 465}, // 516 RowBlockedInterleavedARM in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT + {IR(14679, 12), 463}, // 517 RowMajorKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT + {IR(14767, 27), 468}, // 518 MatrixASignedComponentsKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {IR(14794, 27), 469}, // 519 MatrixBSignedComponentsKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {IR(14821, 27), 470}, // 520 MatrixCSignedComponentsKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {IR(14848, 32), 471}, // 521 MatrixResultSignedComponentsKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {IR(14759, 8), 467}, // 522 NoneKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {IR(14880, 26), 472}, // 523 SaturatingAccumulationKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS + {IR(14917, 4), 475}, // 524 2x2 in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE + {IR(14910, 7), 474}, // 525 Column in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE + {IR(14906, 4), 473}, // 526 Row in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE + {IR(14921, 11), 476}, // 527 MatrixAKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_USE + {IR(14943, 21), 478}, // 528 MatrixAccumulatorKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_USE + {IR(14932, 11), 477}, // 529 MatrixBKHR in SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_USE + {IR(14975, 14), 480}, // 530 ColumnMajorNV in SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT + {IR(14989, 21), 481}, // 531 InferencingOptimalNV in SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT + {IR(14964, 11), 479}, // 532 RowMajorNV in SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT + {IR(15010, 18), 482}, // 533 TrainingOptimalNV in SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT + {IR(13888, 8), 484}, // 534 Address in SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13896, 8), 485}, // 535 Boolean in SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13904, 6), 486}, // 536 Float in SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13910, 7), 487}, // 537 Signed in SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13917, 11), 488}, // 538 SignedChar in SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13928, 9), 489}, // 539 Unsigned in SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13937, 13), 490}, // 540 UnsignedChar in SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13876, 12), 483}, // 541 Unspecified in SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13950, 6), 491}, // 542 Class in SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE + {IR(13956, 10), 492}, // 543 Structure in SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE + {IR(13966, 6), 493}, // 544 Union in SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE + {IR(14096, 15), 501}, // 545 FlagArtificial in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14111, 13), 502}, // 546 FlagExplicit in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14084, 12), 500}, // 547 FlagFwdDecl in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14174, 21), 506}, // 548 FlagIndirectVariable in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14067, 17), 499}, // 549 FlagIsDefinition in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14055, 12), 498}, // 550 FlagIsLocal in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14235, 16), 509}, // 551 FlagIsOptimized in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14028, 14), 496}, // 552 FlagIsPrivate in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14012, 16), 495}, // 553 FlagIsProtected in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14042, 13), 497}, // 554 FlagIsPublic in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14195, 20), 507}, // 555 FlagLValueReference in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14139, 18), 504}, // 556 FlagObjectPointer in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14124, 15), 503}, // 557 FlagPrototyped in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14215, 20), 508}, // 558 FlagRValueReference in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14157, 17), 505}, // 559 FlagStaticMember in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14007, 5), 494}, // 560 None in SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS + {IR(14372, 9), 514}, // 561 BitPiece in SPV_OPERAND_TYPE_DEBUG_OPERATION + {IR(14404, 7), 518}, // 562 Constu in SPV_OPERAND_TYPE_DEBUG_OPERATION + {IR(14311, 6), 510}, // 563 Deref in SPV_OPERAND_TYPE_DEBUG_OPERATION + {IR(14322, 6), 512}, // 564 Minus in SPV_OPERAND_TYPE_DEBUG_OPERATION + {IR(14317, 5), 511}, // 565 Plus in SPV_OPERAND_TYPE_DEBUG_OPERATION + {IR(14361, 11), 513}, // 566 PlusUconst in SPV_OPERAND_TYPE_DEBUG_OPERATION + {IR(14393, 11), 517}, // 567 StackValue in SPV_OPERAND_TYPE_DEBUG_OPERATION + {IR(14381, 5), 515}, // 568 Swap in SPV_OPERAND_TYPE_DEBUG_OPERATION + {IR(14386, 7), 516}, // 569 Xderef in SPV_OPERAND_TYPE_DEBUG_OPERATION + {IR(14420, 10), 519}, // 570 ConstType in SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER + {IR(14443, 13), 521}, // 571 RestrictType in SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER + {IR(14430, 13), 520}, // 572 VolatileType in SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER + {IR(17252, 16), 636}, // 573 AliasScopeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15237, 8), 541}, // 574 Aliased in SPV_OPERAND_TYPE_DECORATION + {IR(16355, 15), 594}, // 575 AliasedPointer in SPV_OPERAND_TYPE_DECORATION + {IR(16370, 18), 594}, // 576 AliasedPointerEXT in SPV_OPERAND_TYPE_DECORATION + {IR(15715, 10), 565}, // 577 Alignment in SPV_OPERAND_TYPE_DECORATION + {IR(15759, 12), 567}, // 578 AlignmentId in SPV_OPERAND_TYPE_DECORATION + {IR(15088, 12), 528}, // 579 ArrayStride in SPV_OPERAND_TYPE_DECORATION + {IR(17033, 14), 624}, // 580 BankBitsINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16872, 15), 617}, // 581 BankwidthINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15392, 8), 554}, // 582 Binding in SPV_OPERAND_TYPE_DECORATION + {IR(16436, 16), 597}, // 583 BindlessImageNV in SPV_OPERAND_TYPE_DECORATION + {IR(16418, 18), 596}, // 584 BindlessSamplerNV in SPV_OPERAND_TYPE_DECORATION + {IR(15052, 6), 524}, // 585 Block in SPV_OPERAND_TYPE_DECORATION + {IR(15899, 22), 574}, // 586 BlockMatchSamplerQCOM in SPV_OPERAND_TYPE_DECORATION + {IR(15877, 22), 573}, // 587 BlockMatchTextureQCOM in SPV_OPERAND_TYPE_DECORATION + {IR(16467, 13), 599}, // 588 BoundImageNV in SPV_OPERAND_TYPE_DECORATION + {IR(16452, 15), 598}, // 589 BoundSamplerNV in SPV_OPERAND_TYPE_DECORATION + {IR(15058, 12), 525}, // 590 BufferBlock in SPV_OPERAND_TYPE_DECORATION + {IR(17345, 20), 641}, // 591 BufferLocationINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15169, 8), 533}, // 592 BuiltIn in SPV_OPERAND_TYPE_DECORATION + {IR(17115, 19), 629}, // 593 BurstCoalesceINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15135, 8), 532}, // 594 CPacked in SPV_OPERAND_TYPE_DECORATION + {IR(18138, 22), 663}, // 595 CacheControlLoadINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(18197, 23), 664}, // 596 CacheControlStoreINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17134, 15), 630}, // 597 CacheSizeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15202, 9), 537}, // 598 Centroid in SPV_OPERAND_TYPE_DECORATION + {IR(16520, 13), 602}, // 599 ClobberINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15263, 9), 544}, // 600 Coherent in SPV_OPERAND_TYPE_DECORATION + {IR(15079, 9), 527}, // 601 ColMajor in SPV_OPERAND_TYPE_DECORATION + {IR(15376, 10), 552}, // 602 Component in SPV_OPERAND_TYPE_DECORATION + {IR(17654, 27), 651}, // 603 ConduitKernelArgumentINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15254, 9), 543}, // 604 Constant in SPV_OPERAND_TYPE_DECORATION + {IR(16666, 14), 609}, // 605 CounterBuffer in SPV_OPERAND_TYPE_DECORATION + {IR(15400, 14), 555}, // 606 DescriptorSet in SPV_OPERAND_TYPE_DECORATION + {IR(17149, 28), 631}, // 607 DontStaticallyCoalesceINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16925, 16), 620}, // 608 DoublepumpINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15921, 18), 575}, // 609 ExplicitInterpAMD in SPV_OPERAND_TYPE_DECORATION + {IR(15585, 15), 561}, // 610 FPFastMathMode in SPV_OPERAND_TYPE_DECORATION + {IR(17573, 26), 648}, // 611 FPMaxErrorDecorationINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15535, 15), 560}, // 612 FPRoundingMode in SPV_OPERAND_TYPE_DECORATION + {IR(15191, 5), 535}, // 613 Flat in SPV_OPERAND_TYPE_DECORATION + {IR(17047, 20), 625}, // 614 ForcePow2DepthINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15487, 14), 559}, // 615 FuncParamAttr in SPV_OPERAND_TYPE_DECORATION + {IR(16577, 21), 605}, // 616 FuncParamIOKindINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16808, 24), 613}, // 617 FunctionDenormModeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17418, 31), 643}, // 618 FunctionFloatingPointModeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16751, 26), 612}, // 619 FunctionRoundingModeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17208, 25), 634}, // 620 FuseLoopsInFunctionINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15124, 11), 531}, // 621 GLSLPacked in SPV_OPERAND_TYPE_DECORATION + {IR(15113, 11), 530}, // 622 GLSLShared in SPV_OPERAND_TYPE_DECORATION + {IR(16640, 26), 608}, // 623 GlobalVariableOffsetINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16388, 30), 595}, // 624 HitObjectShaderRecordBufferNV in SPV_OPERAND_TYPE_DECORATION + {IR(16680, 24), 609}, // 625 HlslCounterBufferGOOGLE in SPV_OPERAND_TYPE_DECORATION + {IR(16717, 19), 610}, // 626 HlslSemanticGOOGLE in SPV_OPERAND_TYPE_DECORATION + {IR(17997, 16), 660}, // 627 HostAccessINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17365, 19), 642}, // 628 IOPipeStorageINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(18074, 28), 662}, // 629 ImplementInRegisterMapINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15386, 6), 553}, // 630 Index in SPV_OPERAND_TYPE_DECORATION + {IR(18060, 14), 661}, // 631 InitModeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17281, 24), 638}, // 632 InitiationIntervalINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15694, 21), 564}, // 633 InputAttachmentIndex in SPV_OPERAND_TYPE_DECORATION + {IR(15218, 10), 539}, // 634 Invariant in SPV_OPERAND_TYPE_DECORATION + {IR(17624, 30), 650}, // 635 LatencyControlConstraintINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17599, 25), 649}, // 636 LatencyControlLabelINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15662, 18), 562}, // 637 LinkageAttributes in SPV_OPERAND_TYPE_DECORATION + {IR(15367, 9), 551}, // 638 Location in SPV_OPERAND_TYPE_DECORATION + {IR(17712, 33), 653}, // 639 MMHostInterfaceAddressWidthINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17745, 30), 654}, // 640 MMHostInterfaceDataWidthINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17775, 28), 655}, // 641 MMHostInterfaceLatencyINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17871, 29), 657}, // 642 MMHostInterfaceMaxBurstINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17837, 34), 656}, // 643 MMHostInterfaceReadWriteModeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17900, 32), 658}, // 644 MMHostInterfaceWaitRequestINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17233, 19), 635}, // 645 MathOpDSPModeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15100, 13), 529}, // 646 MatrixStride in SPV_OPERAND_TYPE_DECORATION + {IR(15725, 14), 566}, // 647 MaxByteOffset in SPV_OPERAND_TYPE_DECORATION + {IR(15771, 16), 568}, // 648 MaxByteOffsetId in SPV_OPERAND_TYPE_DECORATION + {IR(17305, 20), 639}, // 649 MaxConcurrencyINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16887, 22), 618}, // 650 MaxPrivateCopiesINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16941, 19), 621}, // 651 MaxReplicatesINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17509, 18), 646}, // 652 MediaBlockIOINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16846, 12), 615}, // 653 MemoryINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16980, 11), 623}, // 654 MergeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17268, 13), 637}, // 655 NoAliasINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15680, 14), 563}, // 656 NoContraction in SPV_OPERAND_TYPE_DECORATION + {IR(15177, 14), 534}, // 657 NoPerspective in SPV_OPERAND_TYPE_DECORATION + {IR(15831, 13), 570}, // 658 NoSignedWrap in SPV_OPERAND_TYPE_DECORATION + {IR(15844, 15), 571}, // 659 NoUnsignedWrap in SPV_OPERAND_TYPE_DECORATION + {IR(15971, 20), 577}, // 660 NodeMaxPayloadsAMDX in SPV_OPERAND_TYPE_DECORATION + {IR(15939, 32), 576}, // 661 NodeSharesPayloadLimitsWithAMDX in SPV_OPERAND_TYPE_DECORATION + {IR(15284, 12), 546}, // 662 NonReadable in SPV_OPERAND_TYPE_DECORATION + {IR(16295, 11), 592}, // 663 NonUniform in SPV_OPERAND_TYPE_DECORATION + {IR(16306, 14), 592}, // 664 NonUniformEXT in SPV_OPERAND_TYPE_DECORATION + {IR(15272, 12), 545}, // 665 NonWritable in SPV_OPERAND_TYPE_DECORATION + {IR(16858, 14), 616}, // 666 NumbanksINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15414, 7), 556}, // 667 Offset in SPV_OPERAND_TYPE_DECORATION + {IR(16139, 19), 584}, // 668 OverrideCoverageNV in SPV_OPERAND_TYPE_DECORATION + {IR(16158, 14), 585}, // 669 PassthroughNV in SPV_OPERAND_TYPE_DECORATION + {IR(15196, 6), 536}, // 670 Patch in SPV_OPERAND_TYPE_DECORATION + {IR(16111, 28), 583}, // 671 PayloadDispatchIndirectAMDX in SPV_OPERAND_TYPE_DECORATION + {IR(16086, 25), 582}, // 672 PayloadNodeArraySizeAMDX in SPV_OPERAND_TYPE_DECORATION + {IR(16034, 25), 580}, // 673 PayloadNodeBaseIndexAMDX in SPV_OPERAND_TYPE_DECORATION + {IR(16014, 20), 579}, // 674 PayloadNodeNameAMDX in SPV_OPERAND_TYPE_DECORATION + {IR(16059, 27), 581}, // 675 PayloadNodeSparseArrayAMDX in SPV_OPERAND_TYPE_DECORATION + {IR(16219, 16), 588}, // 676 PerPrimitiveEXT in SPV_OPERAND_TYPE_DECORATION + {IR(16235, 15), 588}, // 677 PerPrimitiveNV in SPV_OPERAND_TYPE_DECORATION + {IR(16260, 10), 590}, // 678 PerTaskNV in SPV_OPERAND_TYPE_DECORATION + {IR(16270, 13), 591}, // 679 PerVertexKHR in SPV_OPERAND_TYPE_DECORATION + {IR(16283, 12), 591}, // 680 PerVertexNV in SPV_OPERAND_TYPE_DECORATION + {IR(16250, 10), 589}, // 681 PerViewNV in SPV_OPERAND_TYPE_DECORATION + {IR(17325, 20), 640}, // 682 PipelineEnableINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17177, 14), 632}, // 683 PrefetchINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16494, 26), 601}, // 684 ReferencedIndirectlyINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16832, 14), 614}, // 685 RegisterINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17681, 31), 652}, // 686 RegisterMapKernelArgumentINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15028, 17), 522}, // 687 RelaxedPrecision in SPV_OPERAND_TYPE_DECORATION + {IR(15228, 9), 540}, // 688 Restrict in SPV_OPERAND_TYPE_DECORATION + {IR(16320, 16), 593}, // 689 RestrictPointer in SPV_OPERAND_TYPE_DECORATION + {IR(16336, 19), 593}, // 690 RestrictPointerEXT in SPV_OPERAND_TYPE_DECORATION + {IR(15070, 9), 526}, // 691 RowMajor in SPV_OPERAND_TYPE_DECORATION + {IR(16480, 14), 600}, // 692 SIMTCallINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15211, 7), 538}, // 693 Sample in SPV_OPERAND_TYPE_DECORATION + {IR(15340, 20), 549}, // 694 SaturatedConversion in SPV_OPERAND_TYPE_DECORATION + {IR(15787, 44), 569}, // 695 SaturatedToLargestFloat8NormalConversionEXT in SPV_OPERAND_TYPE_DECORATION + {IR(16191, 28), 587}, // 696 SecondaryViewportRelativeNV in SPV_OPERAND_TYPE_DECORATION + {IR(16533, 17), 603}, // 697 SideEffectsINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16960, 20), 622}, // 698 SimpleDualPortINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17449, 25), 644}, // 699 SingleElementVectorINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16909, 16), 619}, // 700 SinglepumpINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15045, 7), 523}, // 701 SpecId in SPV_OPERAND_TYPE_DECORATION + {IR(17932, 26), 659}, // 702 StableKernelArgumentINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16625, 15), 607}, // 703 StackCallINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17191, 17), 633}, // 704 StallEnableINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(17527, 15), 647}, // 705 StallFreeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15360, 7), 550}, // 706 Stream in SPV_OPERAND_TYPE_DECORATION + {IR(17067, 16), 626}, // 707 StridesizeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15991, 23), 578}, // 708 TrackFinishWritingAMDX in SPV_OPERAND_TYPE_DECORATION + {IR(17097, 18), 628}, // 709 TrueDualPortINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15296, 8), 547}, // 710 Uniform in SPV_OPERAND_TYPE_DECORATION + {IR(15330, 10), 548}, // 711 UniformId in SPV_OPERAND_TYPE_DECORATION + {IR(16704, 13), 610}, // 712 UserSemantic in SPV_OPERAND_TYPE_DECORATION + {IR(16736, 15), 611}, // 713 UserTypeGOOGLE in SPV_OPERAND_TYPE_DECORATION + {IR(17474, 35), 645}, // 714 VectorComputeCallableFunctionINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16598, 27), 606}, // 715 VectorComputeFunctionINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16550, 27), 604}, // 716 VectorComputeVariableINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(16172, 19), 586}, // 717 ViewportRelativeNV in SPV_OPERAND_TYPE_DECORATION + {IR(15245, 9), 542}, // 718 Volatile in SPV_OPERAND_TYPE_DECORATION + {IR(15859, 18), 572}, // 719 WeightTextureQCOM in SPV_OPERAND_TYPE_DECORATION + {IR(17083, 14), 627}, // 720 WordsizeINTEL in SPV_OPERAND_TYPE_DECORATION + {IR(15421, 10), 557}, // 721 XfbBuffer in SPV_OPERAND_TYPE_DECORATION + {IR(15431, 10), 558}, // 722 XfbStride in SPV_OPERAND_TYPE_DECORATION + {IR(18220, 3), 665}, // 723 1D in SPV_OPERAND_TYPE_DIMENSIONALITY + {IR(18223, 3), 666}, // 724 2D in SPV_OPERAND_TYPE_DIMENSIONALITY + {IR(18226, 3), 667}, // 725 3D in SPV_OPERAND_TYPE_DIMENSIONALITY + {IR(18239, 7), 670}, // 726 Buffer in SPV_OPERAND_TYPE_DIMENSIONALITY + {IR(18229, 5), 668}, // 727 Cube in SPV_OPERAND_TYPE_DIMENSIONALITY + {IR(18234, 5), 669}, // 728 Rect in SPV_OPERAND_TYPE_DIMENSIONALITY + {IR(18246, 12), 671}, // 729 SubpassData in SPV_OPERAND_TYPE_DIMENSIONALITY + {IR(18258, 17), 672}, // 730 TileImageDataEXT in SPV_OPERAND_TYPE_DIMENSIONALITY + {IR(19070, 15), 725}, // 731 CoalescingAMDX in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18701, 15), 703}, // 732 ContractionOff in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(9485, 18), 717}, // 733 DenormFlushToZero in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(9470, 15), 716}, // 734 DenormPreserve in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18471, 13), 686}, // 735 DepthGreater in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18484, 10), 687}, // 736 DepthLess in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18456, 15), 685}, // 737 DepthReplacing in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18494, 15), 688}, // 738 DepthUnchanged in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19491, 25), 743}, // 739 DerivativeGroupLinearKHR in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19516, 24), 743}, // 740 DerivativeGroupLinearNV in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19444, 24), 742}, // 741 DerivativeGroupQuadsKHR in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19468, 23), 742}, // 742 DerivativeGroupQuadsNV in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19018, 29), 723}, // 743 EarlyAndLateFragmentTestsAMD in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18423, 19), 682}, // 744 EarlyFragmentTests in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(20001, 18), 762}, // 745 FPFastMathDefault in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18728, 10), 705}, // 746 Finalizer in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19816, 26), 754}, // 747 FloatingPointModeALTINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19842, 27), 755}, // 748 FloatingPointModeIEEEINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18716, 12), 704}, // 749 Initializer in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18545, 11), 692}, // 750 InputLines in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18556, 20), 693}, // 751 InputLinesAdjacency in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18533, 12), 691}, // 752 InputPoints in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18586, 24), 695}, // 753 InputTrianglesAdjacency in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18275, 12), 673}, // 754 Invocations in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19085, 15), 726}, // 755 IsApiEntryAMDX in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18616, 9), 697}, // 756 Isolines in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18509, 10), 689}, // 757 LocalSize in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18519, 14), 690}, // 758 LocalSizeHint in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18796, 16), 710}, // 759 LocalSizeHintId in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18784, 12), 709}, // 760 LocalSizeId in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19100, 21), 727}, // 761 MaxNodeRecursionAMDX in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19145, 21), 730}, // 762 MaxNumWorkgroupsAMDX in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19891, 16), 757}, // 763 MaxWorkDimINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19869, 22), 756}, // 764 MaxWorkgroupSizeINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19977, 24), 761}, // 765 MaximallyReconvergesKHR in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(20092, 22), 766}, // 766 MaximumRegistersINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(20114, 24), 767}, // 767 MaximumRegistersIdINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(20069, 23), 765}, // 768 NamedBarrierCountINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(20189, 27), 768}, // 769 NamedMaximumRegistersINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19907, 20), 758}, // 770 NoGlobalOffsetINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18812, 34), 711}, // 771 NonCoherentColorAttachmentReadEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18846, 34), 712}, // 772 NonCoherentDepthAttachmentReadEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18880, 36), 713}, // 773 NonCoherentStencilAttachmentReadEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18964, 34), 721}, // 774 NonCoherentTileAttachmentReadQCOM in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19927, 22), 759}, // 775 NumSIMDWorkitemsINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18407, 16), 681}, // 776 OriginLowerLeft in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18391, 16), 680}, // 777 OriginUpperLeft in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18653, 16), 700}, // 778 OutputLineStrip in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19376, 15), 740}, // 779 OutputLinesEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19391, 14), 740}, // 780 OutputLinesNV in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18640, 13), 699}, // 781 OutputPoints in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19405, 20), 741}, // 782 OutputPrimitivesEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19425, 19), 741}, // 783 OutputPrimitivesNV in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18669, 20), 701}, // 784 OutputTriangleStrip in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19540, 19), 744}, // 785 OutputTrianglesEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19559, 18), 744}, // 786 OutputTrianglesNV in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18625, 15), 698}, // 787 OutputVertices in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18372, 19), 679}, // 788 PixelCenterInteger in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19577, 25), 745}, // 789 PixelInterlockOrderedEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19602, 27), 746}, // 790 PixelInterlockUnorderedEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18442, 10), 683}, // 791 PointMode in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18946, 18), 715}, // 792 PostDepthCoverage in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19317, 19), 737}, // 793 QuadDerivativesKHR in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18610, 6), 696}, // 794 Quads in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(20043, 26), 764}, // 795 RegisterMapInterfaceINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19336, 20), 738}, // 796 RequireFullQuadsKHR in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(9528, 16), 719}, // 797 RoundingModeRTE in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19795, 21), 753}, // 798 RoundingModeRTNINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19774, 21), 752}, // 799 RoundingModeRTPINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(9544, 16), 720}, // 800 RoundingModeRTZ in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19629, 26), 747}, // 801 SampleInterlockOrderedEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19655, 28), 748}, // 802 SampleInterlockUnorderedEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19949, 28), 760}, // 803 SchedulerTargetFmaxMhzINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(6194, 16), 729}, // 804 ShaderIndexAMDX in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19683, 31), 749}, // 805 ShadingRateInterlockOrderedEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19714, 33), 750}, // 806 ShadingRateInterlockUnorderedEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19747, 27), 751}, // 807 SharedLocalMemorySizeINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19356, 20), 739}, // 808 SharesInputWithAMDX in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(9503, 25), 718}, // 809 SignedZeroInfNanPreserve in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18287, 13), 674}, // 810 SpacingEqual in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18300, 22), 675}, // 811 SpacingFractionalEven in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18322, 21), 676}, // 812 SpacingFractionalOdd in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19121, 24), 728}, // 813 StaticNumWorkgroupsAMDX in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19270, 25), 735}, // 814 StencilRefGreaterBackAMD in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19194, 26), 732}, // 815 StencilRefGreaterFrontAMD in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19295, 22), 736}, // 816 StencilRefLessBackAMD in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19220, 23), 733}, // 817 StencilRefLessFrontAMD in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19047, 23), 724}, // 818 StencilRefReplacingEXT in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19243, 27), 734}, // 819 StencilRefUnchangedBackAMD in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(19166, 28), 731}, // 820 StencilRefUnchangedFrontAMD in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(20019, 24), 763}, // 821 StreamingInterfaceINTEL in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(5301, 13), 706}, // 822 SubgroupSize in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18916, 30), 714}, // 823 SubgroupUniformControlFlowKHR in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18738, 22), 707}, // 824 SubgroupsPerWorkgroup in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18760, 24), 708}, // 825 SubgroupsPerWorkgroupId in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18998, 20), 722}, // 826 TileShadingRateQCOM in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18576, 10), 694}, // 827 Triangles in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18689, 12), 702}, // 828 VecTypeHint in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18357, 15), 678}, // 829 VertexOrderCcw in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18343, 14), 677}, // 830 VertexOrderCw in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(18452, 4), 684}, // 831 Xfb in SPV_OPERAND_TYPE_EXECUTION_MODE + {IR(20354, 10), 780}, // 832 AnyHitKHR in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20364, 9), 780}, // 833 AnyHitNV in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20415, 12), 783}, // 834 CallableKHR in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20427, 11), 783}, // 835 CallableNV in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20373, 14), 781}, // 836 ClosestHitKHR in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20387, 13), 781}, // 837 ClosestHitNV in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(14411, 9), 773}, // 838 Fragment in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20266, 10), 774}, // 839 GLCompute in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(4782, 9), 772}, // 840 Geometry in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20323, 16), 779}, // 841 IntersectionKHR in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20339, 15), 779}, // 842 IntersectionNV in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(4549, 7), 775}, // 843 Kernel in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20446, 8), 785}, // 844 MeshEXT in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20283, 7), 777}, // 845 MeshNV in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20400, 8), 782}, // 846 MissKHR in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20408, 7), 782}, // 847 MissNV in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20290, 17), 778}, // 848 RayGenerationKHR in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20307, 16), 778}, // 849 RayGenerationNV in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20438, 8), 784}, // 850 TaskEXT in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20276, 7), 776}, // 851 TaskNV in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20223, 20), 770}, // 852 TessellationControl in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20243, 23), 771}, // 853 TessellationEvaluation in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20216, 7), 769}, // 854 Vertex in SPV_OPERAND_TYPE_EXECUTION_MODEL + {IR(20463, 12), 787}, // 855 FlushToZero in SPV_OPERAND_TYPE_FPDENORM_MODE + {IR(20454, 9), 786}, // 856 Preserve in SPV_OPERAND_TYPE_FPDENORM_MODE + {IR(20475, 12), 788}, // 857 BFloat16KHR in SPV_OPERAND_TYPE_FPENCODING + {IR(20487, 14), 789}, // 858 Float8E4M3EXT in SPV_OPERAND_TYPE_FPENCODING + {IR(20501, 14), 790}, // 859 Float8E5M2EXT in SPV_OPERAND_TYPE_FPENCODING + {IR(20520, 4), 792}, // 860 ALT in SPV_OPERAND_TYPE_FPOPERATION_MODE + {IR(20515, 5), 791}, // 861 IEEE in SPV_OPERAND_TYPE_FPOPERATION_MODE + {IR(20558, 14), 799}, // 862 AllowContract in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(20572, 23), 799}, // 863 AllowContractFastINTEL in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(20595, 13), 800}, // 864 AllowReassoc in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(20608, 18), 800}, // 865 AllowReassocINTEL in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(20542, 11), 797}, // 866 AllowRecip in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(20626, 15), 801}, // 867 AllowTransform in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(20553, 5), 798}, // 868 Fast in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(20538, 4), 796}, // 869 NSZ in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(14007, 5), 793}, // 870 None in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(20531, 7), 795}, // 871 NotInf in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(20524, 7), 794}, // 872 NotNaN in SPV_OPERAND_TYPE_FP_FAST_MATH_MODE + {IR(20641, 4), 802}, // 873 RTE in SPV_OPERAND_TYPE_FP_ROUNDING_MODE + {IR(20653, 4), 805}, // 874 RTN in SPV_OPERAND_TYPE_FP_ROUNDING_MODE + {IR(20649, 4), 804}, // 875 RTP in SPV_OPERAND_TYPE_FP_ROUNDING_MODE + {IR(20645, 4), 803}, // 876 RTZ in SPV_OPERAND_TYPE_FP_ROUNDING_MODE + {IR(20689, 18), 808}, // 877 Horizontal2Pixels in SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE + {IR(20707, 18), 809}, // 878 Horizontal4Pixels in SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE + {IR(20657, 16), 806}, // 879 Vertical2Pixels in SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE + {IR(20673, 16), 807}, // 880 Vertical4Pixels in SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE + {IR(20748, 6), 814}, // 881 Const in SPV_OPERAND_TYPE_FUNCTION_CONTROL + {IR(20732, 11), 812}, // 882 DontInline in SPV_OPERAND_TYPE_FUNCTION_CONTROL + {IR(20725, 7), 811}, // 883 Inline in SPV_OPERAND_TYPE_FUNCTION_CONTROL + {IR(14007, 5), 810}, // 884 None in SPV_OPERAND_TYPE_FUNCTION_CONTROL + {IR(13228, 11), 815}, // 885 OptNoneEXT in SPV_OPERAND_TYPE_FUNCTION_CONTROL + {IR(13239, 13), 815}, // 886 OptNoneINTEL in SPV_OPERAND_TYPE_FUNCTION_CONTROL + {IR(20743, 5), 813}, // 887 Pure in SPV_OPERAND_TYPE_FUNCTION_CONTROL + {IR(20764, 6), 818}, // 888 ByVal in SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {IR(20775, 8), 820}, // 889 NoAlias in SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {IR(20783, 10), 821}, // 890 NoCapture in SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {IR(20801, 12), 823}, // 891 NoReadWrite in SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {IR(20793, 8), 822}, // 892 NoWrite in SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {IR(20813, 20), 824}, // 893 RuntimeAlignedINTEL in SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {IR(20759, 5), 817}, // 894 Sext in SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {IR(20770, 5), 819}, // 895 Sret in SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {IR(20754, 5), 816}, // 896 Zext in SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE + {IR(20868, 16), 828}, // 897 ClusteredReduce in SPV_OPERAND_TYPE_GROUP_OPERATION + {IR(20854, 14), 827}, // 898 ExclusiveScan in SPV_OPERAND_TYPE_GROUP_OPERATION + {IR(20840, 14), 826}, // 899 InclusiveScan in SPV_OPERAND_TYPE_GROUP_OPERATION + {IR(20931, 27), 831}, // 900 PartitionedExclusiveScanNV in SPV_OPERAND_TYPE_GROUP_OPERATION + {IR(20904, 27), 830}, // 901 PartitionedInclusiveScanNV in SPV_OPERAND_TYPE_GROUP_OPERATION + {IR(20884, 20), 829}, // 902 PartitionedReduceNV in SPV_OPERAND_TYPE_GROUP_OPERATION + {IR(20833, 7), 825}, // 903 Reduce in SPV_OPERAND_TYPE_GROUP_OPERATION + {IR(20958, 10), 832}, // 904 NoneINTEL in SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER + {IR(20968, 10), 833}, // 905 ReadINTEL in SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER + {IR(20989, 15), 835}, // 906 ReadWriteINTEL in SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER + {IR(20978, 11), 834}, // 907 WriteINTEL in SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER + {IR(21004, 5), 837}, // 908 Bias in SPV_OPERAND_TYPE_IMAGE + {IR(21018, 12), 840}, // 909 ConstOffset in SPV_OPERAND_TYPE_IMAGE + {IR(21030, 13), 842}, // 910 ConstOffsets in SPV_OPERAND_TYPE_IMAGE + {IR(21013, 5), 839}, // 911 Grad in SPV_OPERAND_TYPE_IMAGE + {IR(21009, 4), 838}, // 912 Lod in SPV_OPERAND_TYPE_IMAGE + {IR(21043, 19), 845}, // 913 MakeTexelAvailable in SPV_OPERAND_TYPE_IMAGE + {IR(21062, 22), 845}, // 914 MakeTexelAvailableKHR in SPV_OPERAND_TYPE_IMAGE + {IR(21084, 17), 846}, // 915 MakeTexelVisible in SPV_OPERAND_TYPE_IMAGE + {IR(21101, 20), 846}, // 916 MakeTexelVisibleKHR in SPV_OPERAND_TYPE_IMAGE + {IR(8333, 7), 844}, // 917 MinLod in SPV_OPERAND_TYPE_IMAGE + {IR(21121, 16), 847}, // 918 NonPrivateTexel in SPV_OPERAND_TYPE_IMAGE + {IR(21137, 19), 847}, // 919 NonPrivateTexelKHR in SPV_OPERAND_TYPE_IMAGE + {IR(14007, 5), 836}, // 920 None in SPV_OPERAND_TYPE_IMAGE + {IR(21209, 12), 851}, // 921 Nontemporal in SPV_OPERAND_TYPE_IMAGE + {IR(15414, 7), 841}, // 922 Offset in SPV_OPERAND_TYPE_IMAGE + {IR(21221, 8), 852}, // 923 Offsets in SPV_OPERAND_TYPE_IMAGE + {IR(15211, 7), 843}, // 924 Sample in SPV_OPERAND_TYPE_IMAGE + {IR(21187, 11), 849}, // 925 SignExtend in SPV_OPERAND_TYPE_IMAGE + {IR(21156, 14), 848}, // 926 VolatileTexel in SPV_OPERAND_TYPE_IMAGE + {IR(21170, 17), 848}, // 927 VolatileTexelKHR in SPV_OPERAND_TYPE_IMAGE + {IR(21198, 11), 850}, // 928 ZeroExtend in SPV_OPERAND_TYPE_IMAGE + {IR(13904, 6), 867}, // 929 Float in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21390, 10), 866}, // 930 HalfFloat in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21325, 12), 861}, // 931 SignedInt16 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21337, 12), 862}, // 932 SignedInt32 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21314, 11), 860}, // 933 SignedInt8 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21239, 11), 854}, // 934 SnormInt16 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21229, 10), 853}, // 935 SnormInt8 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21299, 15), 859}, // 936 UnormInt101010 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21411, 17), 869}, // 937 UnormInt101010_2 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21428, 16), 870}, // 938 UnormInt10X6EXT in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21561, 16), 877}, // 939 UnormInt12X4EXT in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21577, 16), 878}, // 940 UnormInt14X2EXT in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21260, 11), 856}, // 941 UnormInt16 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21400, 11), 868}, // 942 UnormInt24 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21484, 20), 873}, // 943 UnormInt2_101010EXT in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21250, 10), 855}, // 944 UnormInt8 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21285, 14), 858}, // 945 UnormShort555 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21271, 14), 857}, // 946 UnormShort565 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21504, 19), 874}, // 947 UnsignedInt10X6EXT in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21523, 19), 875}, // 948 UnsignedInt12X4EXT in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21542, 19), 876}, // 949 UnsignedInt14X2EXT in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21362, 14), 864}, // 950 UnsignedInt16 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21376, 14), 865}, // 951 UnsignedInt32 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21349, 13), 863}, // 952 UnsignedInt8 in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21444, 20), 871}, // 953 UnsignedIntRaw10EXT in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21464, 20), 872}, // 954 UnsignedIntRaw12EXT in SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE + {IR(21595, 2), 880}, // 955 A in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21696, 5), 898}, // 956 ABGR in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21617, 5), 886}, // 957 ARGB in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21612, 5), 885}, // 958 BGRA in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21654, 6), 892}, // 959 Depth in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21660, 13), 893}, // 960 DepthStencil in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21622, 10), 887}, // 961 Intensity in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21632, 10), 888}, // 962 Luminance in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21593, 2), 879}, // 963 R in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21600, 3), 882}, // 964 RA in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21597, 3), 881}, // 965 RG in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21603, 4), 883}, // 966 RGB in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21607, 5), 884}, // 967 RGBA in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21649, 5), 891}, // 968 RGBx in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21645, 4), 890}, // 969 RGx in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21642, 3), 889}, // 970 Rx in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21690, 6), 897}, // 971 sBGRA in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21673, 5), 894}, // 972 sRGB in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21684, 6), 896}, // 973 sRGBA in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21678, 6), 895}, // 974 sRGBx in SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER + {IR(21701, 27), 899}, // 975 InitOnDeviceReprogramINTEL in SPV_OPERAND_TYPE_INITIALIZATION_MODE_QUALIFIER + {IR(21728, 23), 900}, // 976 InitOnDeviceResetINTEL in SPV_OPERAND_TYPE_INITIALIZATION_MODE_QUALIFIER + {IR(21751, 7), 901}, // 977 NoWait in SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS + {IR(21758, 11), 902}, // 978 WaitKernel in SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS + {IR(21769, 14), 903}, // 979 WaitWorkGroup in SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS + {IR(21783, 12), 905}, // 980 CmdExecTime in SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO + {IR(14007, 5), 904}, // 981 None in SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO + {IR(21795, 13), 907}, // 982 MayUsePrintf in SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS + {IR(14007, 5), 906}, // 983 None in SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS + {IR(21808, 7), 908}, // 984 Export in SPV_OPERAND_TYPE_LINKAGE_TYPE + {IR(21815, 7), 909}, // 985 Import in SPV_OPERAND_TYPE_LINKAGE_TYPE + {IR(21822, 12), 910}, // 986 LinkOnceODR in SPV_OPERAND_TYPE_LINKAGE_TYPE + {IR(21848, 12), 912}, // 987 CachedINTEL in SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL + {IR(21900, 17), 915}, // 988 ConstCachedINTEL in SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL + {IR(21875, 25), 914}, // 989 InvalidateAfterReadINTEL in SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL + {IR(21860, 15), 913}, // 990 StreamingINTEL in SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL + {IR(21834, 14), 911}, // 991 UncachedINTEL in SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL + {IR(22040, 21), 928}, // 992 DependencyArrayINTEL in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(21935, 19), 919}, // 993 DependencyInfinite in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(21954, 17), 920}, // 994 DependencyLength in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(21924, 11), 918}, // 995 DontUnroll in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(17281, 24), 926}, // 996 InitiationIntervalINTEL in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(21999, 18), 923}, // 997 IterationMultiple in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(22061, 18), 930}, // 998 LoopCoalesceINTEL in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(22140, 15), 934}, // 999 LoopCountINTEL in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(17305, 20), 927}, // 1000 MaxConcurrencyINTEL in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(22079, 21), 931}, // 1001 MaxInterleavingINTEL in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(21985, 14), 922}, // 1002 MaxIterations in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(22155, 26), 935}, // 1003 MaxReinvocationDelayINTEL in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(21971, 14), 921}, // 1004 MinIterations in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(22126, 14), 933}, // 1005 NoFusionINTEL in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(14007, 5), 916}, // 1006 None in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(22027, 13), 925}, // 1007 PartialCount in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(22017, 10), 924}, // 1008 PeelCount in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(17325, 20), 929}, // 1009 PipelineEnableINTEL in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(22100, 26), 932}, // 1010 SpeculatedIterationsINTEL in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(21917, 7), 917}, // 1011 Unroll in SPV_OPERAND_TYPE_LOOP_CONTROL + {IR(22464, 27), 949}, // 1012 MatrixAPackedBFloat16INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22412, 26), 947}, // 1013 MatrixAPackedFloat16INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22332, 23), 943}, // 1014 MatrixAPackedInt4INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22286, 23), 941}, // 1015 MatrixAPackedInt8INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22181, 29), 937}, // 1016 MatrixASignedComponentsINTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22378, 17), 945}, // 1017 MatrixATF32INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22491, 27), 950}, // 1018 MatrixBPackedBFloat16INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22438, 26), 948}, // 1019 MatrixBPackedFloat16INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22355, 23), 944}, // 1020 MatrixBPackedInt4INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22309, 23), 942}, // 1021 MatrixBPackedInt8INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22210, 29), 938}, // 1022 MatrixBSignedComponentsINTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22395, 17), 946}, // 1023 MatrixBTF32INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22239, 21), 939}, // 1024 MatrixCBFloat16INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22260, 26), 940}, // 1025 MatrixResultBFloat16INTEL in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(14007, 5), 936}, // 1026 None in SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS + {IR(22651, 20), 958}, // 1027 AliasScopeINTELMask in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(22518, 8), 953}, // 1028 Aligned in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(22526, 21), 955}, // 1029 MakePointerAvailable in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(22547, 24), 955}, // 1030 MakePointerAvailableKHR in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(22571, 19), 956}, // 1031 MakePointerVisible in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(22590, 22), 956}, // 1032 MakePointerVisibleKHR in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(22671, 17), 959}, // 1033 NoAliasINTELMask in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(22612, 18), 957}, // 1034 NonPrivatePointer in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(22630, 21), 957}, // 1035 NonPrivatePointerKHR in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(14007, 5), 951}, // 1036 None in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(21209, 12), 954}, // 1037 Nontemporal in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(15245, 9), 952}, // 1038 Volatile in SPV_OPERAND_TYPE_MEMORY_ACCESS + {IR(22695, 8), 961}, // 1039 GLSL450 in SPV_OPERAND_TYPE_MEMORY_MODEL + {IR(22703, 7), 962}, // 1040 OpenCL in SPV_OPERAND_TYPE_MEMORY_MODEL + {IR(22688, 7), 960}, // 1041 Simple in SPV_OPERAND_TYPE_MEMORY_MODEL + {IR(22710, 7), 963}, // 1042 Vulkan in SPV_OPERAND_TYPE_MEMORY_MODEL + {IR(22717, 10), 963}, // 1043 VulkanKHR in SPV_OPERAND_TYPE_MEMORY_MODEL + {IR(22735, 8), 965}, // 1044 Acquire in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22751, 15), 967}, // 1045 AcquireRelease in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22855, 20), 973}, // 1046 AtomicCounterMemory in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22834, 21), 972}, // 1047 CrossWorkgroupMemory in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22875, 12), 974}, // 1048 ImageMemory in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22916, 14), 976}, // 1049 MakeAvailable in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22930, 17), 976}, // 1050 MakeAvailableKHR in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22947, 12), 977}, // 1051 MakeVisible in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22959, 15), 977}, // 1052 MakeVisibleKHR in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(14007, 5), 964}, // 1053 None in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22887, 13), 975}, // 1054 OutputMemory in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22900, 16), 975}, // 1055 OutputMemoryKHR in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22727, 8), 964}, // 1056 Relaxed in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22743, 8), 966}, // 1057 Release in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22766, 23), 968}, // 1058 SequentiallyConsistent in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22803, 15), 970}, // 1059 SubgroupMemory in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22789, 14), 969}, // 1060 UniformMemory in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(15245, 9), 978}, // 1061 Volatile in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22818, 16), 971}, // 1062 WorkgroupMemory in SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID + {IR(22974, 10), 979}, // 1063 AutoINTEL in SPV_OPERAND_TYPE_NAMED_MAXIMUM_NUMBER_OF_REGISTERS + {IR(22989, 4), 981}, // 1064 SAT in SPV_OPERAND_TYPE_OVERFLOW_MODES + {IR(23002, 8), 983}, // 1065 SAT_SYM in SPV_OPERAND_TYPE_OVERFLOW_MODES + {IR(22993, 9), 982}, // 1066 SAT_ZERO in SPV_OPERAND_TYPE_OVERFLOW_MODES + {IR(22984, 5), 980}, // 1067 WRAP in SPV_OPERAND_TYPE_OVERFLOW_MODES + {IR(23010, 25), 984}, // 1068 PackedVectorFormat4x8Bit in SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT + {IR(23035, 28), 984}, // 1069 PackedVectorFormat4x8BitKHR in SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT + {IR(23076, 4), 987}, // 1070 RND in SPV_OPERAND_TYPE_QUANTIZATION_MODES + {IR(23109, 9), 991}, // 1071 RND_CONV in SPV_OPERAND_TYPE_QUANTIZATION_MODES + {IR(23118, 13), 992}, // 1072 RND_CONV_ODD in SPV_OPERAND_TYPE_QUANTIZATION_MODES + {IR(23089, 8), 989}, // 1073 RND_INF in SPV_OPERAND_TYPE_QUANTIZATION_MODES + {IR(23097, 12), 990}, // 1074 RND_MIN_INF in SPV_OPERAND_TYPE_QUANTIZATION_MODES + {IR(23080, 9), 988}, // 1075 RND_ZERO in SPV_OPERAND_TYPE_QUANTIZATION_MODES + {IR(23063, 4), 985}, // 1076 TRN in SPV_OPERAND_TYPE_QUANTIZATION_MODES + {IR(23067, 9), 986}, // 1077 TRN_ZERO in SPV_OPERAND_TYPE_QUANTIZATION_MODES + {IR(14007, 5), 993}, // 1078 None in SPV_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS + {IR(23131, 25), 994}, // 1079 RobustnessPerComponentNV in SPV_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS + {IR(23156, 23), 995}, // 1080 RobustnessPerElementNV in SPV_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS + {IR(23248, 27), 1001}, // 1081 CullBackFacingTrianglesKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23275, 28), 1002}, // 1082 CullFrontFacingTrianglesKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23317, 16), 1004}, // 1083 CullNoOpaqueKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23303, 14), 1003}, // 1084 CullOpaqueKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23387, 30), 1007}, // 1085 ForceOpacityMicromap2StateEXT in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23189, 12), 998}, // 1086 NoOpaqueKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(14759, 8), 996}, // 1087 NoneKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23179, 10), 997}, // 1088 OpaqueKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23374, 13), 1006}, // 1089 SkipAABBsKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23350, 24), 1005}, // 1090 SkipBuiltinPrimitivesNV in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23224, 24), 1000}, // 1091 SkipClosestHitShaderKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23333, 17), 1005}, // 1092 SkipTrianglesKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23201, 23), 999}, // 1093 TerminateOnFirstHitKHR in SPV_OPERAND_TYPE_RAY_FLAGS + {IR(23458, 37), 1009}, // 1094 RayQueryCandidateIntersectionAABBKHR in SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE + {IR(23417, 41), 1008}, // 1095 RayQueryCandidateIntersectionTriangleKHR in SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE + {IR(23573, 42), 1012}, // 1096 RayQueryCommittedIntersectionGeneratedKHR in SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE + {IR(23495, 37), 1010}, // 1097 RayQueryCommittedIntersectionNoneKHR in SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE + {IR(23532, 41), 1011}, // 1098 RayQueryCommittedIntersectionTriangleKHR in SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE + {IR(23615, 33), 1013}, // 1099 RayQueryCandidateIntersectionKHR in SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION + {IR(23648, 33), 1014}, // 1100 RayQueryCommittedIntersectionKHR in SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION + {IR(23693, 6), 1017}, // 1101 Clamp in SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE + {IR(23681, 12), 1016}, // 1102 ClampToEdge in SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE + {IR(14007, 5), 1015}, // 1103 None in SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE + {IR(23699, 7), 1018}, // 1104 Repeat in SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE + {IR(23706, 15), 1019}, // 1105 RepeatMirrored in SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE + {IR(23729, 7), 1021}, // 1106 Linear in SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE + {IR(23721, 8), 1020}, // 1107 Nearest in SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE + {IR(23794, 13), 1030}, // 1108 R11fG11fB10f in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23836, 4), 1036}, // 1109 R16 in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23874, 9), 1041}, // 1110 R16Snorm in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23807, 5), 1031}, // 1111 R16f in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23936, 5), 1050}, // 1112 R16i in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(24007, 6), 1060}, // 1113 R16ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23760, 5), 1025}, // 1114 R32f in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23914, 5), 1046}, // 1115 R32i in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23971, 6), 1055}, // 1116 R32ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(24024, 5), 1063}, // 1117 R64i in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(24018, 6), 1062}, // 1118 R64ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23840, 3), 1037}, // 1119 R8 in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23883, 8), 1042}, // 1120 R8Snorm in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23941, 4), 1051}, // 1121 R8i in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(24013, 5), 1061}, // 1122 R8ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23827, 5), 1034}, // 1123 Rg16 in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23855, 10), 1039}, // 1124 Rg16Snorm in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23788, 6), 1029}, // 1125 Rg16f in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23925, 6), 1048}, // 1126 Rg16i in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23994, 7), 1058}, // 1127 Rg16ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23782, 6), 1028}, // 1128 Rg32f in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23919, 6), 1047}, // 1129 Rg32i in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23987, 7), 1057}, // 1130 Rg32ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23832, 4), 1035}, // 1131 Rg8 in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23865, 9), 1040}, // 1132 Rg8Snorm in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23931, 5), 1049}, // 1133 Rg8i in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(24001, 6), 1059}, // 1134 Rg8ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23819, 8), 1033}, // 1135 Rgb10A2 in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23977, 10), 1056}, // 1136 Rgb10a2ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23812, 7), 1032}, // 1137 Rgba16 in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23843, 12), 1038}, // 1138 Rgba16Snorm in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23752, 8), 1024}, // 1139 Rgba16f in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23899, 8), 1044}, // 1140 Rgba16i in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23954, 9), 1053}, // 1141 Rgba16ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23744, 8), 1023}, // 1142 Rgba32f in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23891, 8), 1043}, // 1143 Rgba32i in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23945, 9), 1052}, // 1144 Rgba32ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23765, 6), 1026}, // 1145 Rgba8 in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23771, 11), 1027}, // 1146 Rgba8Snorm in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23907, 7), 1045}, // 1147 Rgba8i in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23963, 8), 1054}, // 1148 Rgba8ui in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(23736, 8), 1022}, // 1149 Unknown in SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT + {IR(24029, 12), 1064}, // 1150 CrossDevice in SPV_OPERAND_TYPE_SCOPE_ID + {IR(24041, 7), 1065}, // 1151 Device in SPV_OPERAND_TYPE_SCOPE_ID + {IR(24067, 11), 1068}, // 1152 Invocation in SPV_OPERAND_TYPE_SCOPE_ID + {IR(24078, 12), 1069}, // 1153 QueueFamily in SPV_OPERAND_TYPE_SCOPE_ID + {IR(24090, 15), 1069}, // 1154 QueueFamilyKHR in SPV_OPERAND_TYPE_SCOPE_ID + {IR(24105, 14), 1070}, // 1155 ShaderCallKHR in SPV_OPERAND_TYPE_SCOPE_ID + {IR(24058, 9), 1067}, // 1156 Subgroup in SPV_OPERAND_TYPE_SCOPE_ID + {IR(24048, 10), 1066}, // 1157 Workgroup in SPV_OPERAND_TYPE_SCOPE_ID + {IR(24127, 12), 1073}, // 1158 DontFlatten in SPV_OPERAND_TYPE_SELECTION_CONTROL + {IR(24119, 8), 1072}, // 1159 Flatten in SPV_OPERAND_TYPE_SELECTION_CONTROL + {IR(14007, 5), 1071}, // 1160 None in SPV_OPERAND_TYPE_SELECTION_CONTROL + {IR(24139, 29), 1074}, // 1161 IdentifierPossibleDuplicates in SPV_OPERAND_TYPE_SHDEBUG100_BUILD_IDENTIFIER_FLAGS + {IR(13888, 8), 1076}, // 1162 Address in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13896, 8), 1077}, // 1163 Boolean in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13904, 6), 1078}, // 1164 Float in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13910, 7), 1079}, // 1165 Signed in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13917, 11), 1080}, // 1166 SignedChar in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13928, 9), 1081}, // 1167 Unsigned in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13937, 13), 1082}, // 1168 UnsignedChar in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13876, 12), 1075}, // 1169 Unspecified in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING + {IR(13950, 6), 1083}, // 1170 Class in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE + {IR(13956, 10), 1084}, // 1171 Structure in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE + {IR(13966, 6), 1085}, // 1172 Union in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE + {IR(13987, 20), 1087}, // 1173 ImportedDeclaration in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY + {IR(13972, 15), 1086}, // 1174 ImportedModule in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY + {IR(14096, 15), 1095}, // 1175 FlagArtificial in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14111, 13), 1096}, // 1176 FlagExplicit in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14084, 12), 1094}, // 1177 FlagFwdDecl in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14174, 21), 1100}, // 1178 FlagIndirectVariable in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14067, 17), 1093}, // 1179 FlagIsDefinition in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14251, 16), 1104}, // 1180 FlagIsEnumClass in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14055, 12), 1092}, // 1181 FlagIsLocal in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14235, 16), 1103}, // 1182 FlagIsOptimized in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14028, 14), 1090}, // 1183 FlagIsPrivate in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14012, 16), 1089}, // 1184 FlagIsProtected in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14042, 13), 1091}, // 1185 FlagIsPublic in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14195, 20), 1101}, // 1186 FlagLValueReference in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14139, 18), 1098}, // 1187 FlagObjectPointer in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14124, 15), 1097}, // 1188 FlagPrototyped in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14215, 20), 1102}, // 1189 FlagRValueReference in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14157, 17), 1099}, // 1190 FlagStaticMember in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14287, 24), 1106}, // 1191 FlagTypePassByReference in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14267, 20), 1105}, // 1192 FlagTypePassByValue in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(24168, 26), 1107}, // 1193 FlagUnknownPhysicalLayout in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14007, 5), 1088}, // 1194 None in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS + {IR(14372, 9), 1112}, // 1195 BitPiece in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {IR(14404, 7), 1116}, // 1196 Constu in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {IR(14311, 6), 1108}, // 1197 Deref in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {IR(14411, 9), 1117}, // 1198 Fragment in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {IR(14322, 6), 1110}, // 1199 Minus in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {IR(14317, 5), 1109}, // 1200 Plus in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {IR(14361, 11), 1111}, // 1201 PlusUconst in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {IR(14393, 11), 1115}, // 1202 StackValue in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {IR(14381, 5), 1113}, // 1203 Swap in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {IR(14386, 7), 1114}, // 1204 Xderef in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION + {IR(14456, 11), 1121}, // 1205 AtomicType in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER + {IR(14420, 10), 1118}, // 1206 ConstType in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER + {IR(14443, 13), 1120}, // 1207 RestrictType in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER + {IR(14430, 13), 1119}, // 1208 VolatileType in SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER + {IR(24229, 15), 1128}, // 1209 CPP_for_OpenCL in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24194, 5), 1123}, // 1210 ESSL in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24199, 5), 1124}, // 1211 GLSL in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24249, 7), 1130}, // 1212 HERO_C in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24224, 5), 1127}, // 1213 HLSL in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24256, 5), 1131}, // 1214 NZSL in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24204, 9), 1125}, // 1215 OpenCL_C in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24213, 11), 1126}, // 1216 OpenCL_CPP in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24276, 5), 1135}, // 1217 Rust in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24244, 5), 1129}, // 1218 SYCL in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24266, 6), 1133}, // 1219 Slang in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(23736, 8), 1122}, // 1220 Unknown in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24261, 5), 1132}, // 1221 WGSL in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24272, 4), 1134}, // 1222 Zig in SPV_OPERAND_TYPE_SOURCE_LANGUAGE + {IR(24363, 14), 1146}, // 1223 AtomicCounter in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24445, 16), 1152}, // 1224 CallableDataKHR in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24461, 15), 1152}, // 1225 CallableDataNV in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24759, 17), 1161}, // 1226 CodeSectionINTEL in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24310, 15), 1141}, // 1227 CrossWorkgroup in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24776, 16), 1162}, // 1228 DeviceOnlyINTEL in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24333, 9), 1143}, // 1229 Function in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24342, 8), 1144}, // 1230 Generic in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24550, 16), 1155}, // 1231 HitAttributeKHR in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24566, 15), 1155}, // 1232 HitAttributeNV in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24714, 21), 1159}, // 1233 HitObjectAttributeNV in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24792, 14), 1163}, // 1234 HostOnlyINTEL in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24377, 6), 1147}, // 1235 Image in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24476, 24), 1153}, // 1236 IncomingCallableDataKHR in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24500, 23), 1153}, // 1237 IncomingCallableDataNV in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24581, 22), 1156}, // 1238 IncomingRayPayloadKHR in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24603, 21), 1156}, // 1239 IncomingRayPayloadNV in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24297, 6), 1137}, // 1240 Input in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24429, 16), 1151}, // 1241 NodePayloadAMDX in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24303, 7), 1139}, // 1242 Output in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24667, 22), 1158}, // 1243 PhysicalStorageBuffer in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24689, 25), 1158}, // 1244 PhysicalStorageBufferEXT in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24325, 8), 1142}, // 1245 Private in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24350, 13), 1145}, // 1246 PushConstant in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24523, 14), 1154}, // 1247 RayPayloadKHR in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24537, 13), 1154}, // 1248 RayPayloadNV in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24624, 22), 1157}, // 1249 ShaderRecordBufferKHR in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24646, 21), 1157}, // 1250 ShaderRecordBufferNV in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24383, 14), 1148}, // 1251 StorageBuffer in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24735, 24), 1160}, // 1252 TaskPayloadWorkgroupEXT in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24410, 19), 1150}, // 1253 TileAttachmentQCOM in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24397, 13), 1149}, // 1254 TileImageEXT in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(15296, 8), 1138}, // 1255 Uniform in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24281, 16), 1136}, // 1256 UniformConstant in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(24048, 10), 1140}, // 1257 Workgroup in SPV_OPERAND_TYPE_STORAGE_CLASS + {IR(21860, 15), 1167}, // 1258 StreamingINTEL in SPV_OPERAND_TYPE_STORE_CACHE_CONTROL + {IR(21834, 14), 1164}, // 1259 UncachedINTEL in SPV_OPERAND_TYPE_STORE_CACHE_CONTROL + {IR(24824, 15), 1166}, // 1260 WriteBackINTEL in SPV_OPERAND_TYPE_STORE_CACHE_CONTROL + {IR(24806, 18), 1165}, // 1261 WriteThroughINTEL in SPV_OPERAND_TYPE_STORE_CACHE_CONTROL + {IR(24850, 11), 1170}, // 1262 DecodeFunc in SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS + {IR(14007, 5), 1168}, // 1263 None in SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS + {IR(24839, 11), 1169}, // 1264 TensorView in SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS + {IR(23681, 12), 1173}, // 1265 ClampToEdge in SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE + {IR(15254, 9), 1172}, // 1266 Constant in SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE + {IR(23699, 7), 1174}, // 1267 Repeat in SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE + {IR(23706, 15), 1175}, // 1268 RepeatMirrored in SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE + {IR(24861, 10), 1171}, // 1269 Undefined in SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE + {IR(24914, 24), 1179}, // 1270 MakeElementAvailableARM in SPV_OPERAND_TYPE_TENSOR_OPERANDS + {IR(24938, 22), 1180}, // 1271 MakeElementVisibleARM in SPV_OPERAND_TYPE_TENSOR_OPERANDS + {IR(24960, 21), 1181}, // 1272 NonPrivateElementARM in SPV_OPERAND_TYPE_TENSOR_OPERANDS + {IR(24871, 8), 1176}, // 1273 NoneARM in SPV_OPERAND_TYPE_TENSOR_OPERANDS + {IR(24879, 15), 1177}, // 1274 NontemporalARM in SPV_OPERAND_TYPE_TENSOR_OPERANDS + {IR(24894, 20), 1178}, // 1275 OutOfBoundsValueARM in SPV_OPERAND_TYPE_TENSOR_OPERANDS +}}; + +IndexRange OperandNameRangeForKind(spv_operand_type_t type) { + switch(type) { + case SPV_OPERAND_TYPE_ACCESS_QUALIFIER: return IR(0, 3); + case SPV_OPERAND_TYPE_ADDRESSING_MODEL: return IR(3, 5); + case SPV_OPERAND_TYPE_BUILT_IN: return IR(8, 148); + case SPV_OPERAND_TYPE_CAPABILITY: return IR(156, 297); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING: return IR(453, 8); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE: return IR(461, 3); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY: return IR(464, 2); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS: return IR(466, 19); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION: return IR(485, 10); + case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER: return IR(495, 4); + case SPV_OPERAND_TYPE_COMPONENT_TYPE: return IR(499, 15); + case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_LAYOUT: return IR(514, 4); + case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS: return IR(518, 6); + case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE: return IR(524, 3); + case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_USE: return IR(527, 3); + case SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT: return IR(530, 4); + case SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING: return IR(534, 8); + case SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE: return IR(542, 3); + case SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS: return IR(545, 16); + case SPV_OPERAND_TYPE_DEBUG_OPERATION: return IR(561, 9); + case SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER: return IR(570, 3); + case SPV_OPERAND_TYPE_DECORATION: return IR(573, 150); + case SPV_OPERAND_TYPE_DIMENSIONALITY: return IR(723, 8); + case SPV_OPERAND_TYPE_EXECUTION_MODE: return IR(731, 101); + case SPV_OPERAND_TYPE_EXECUTION_MODEL: return IR(832, 23); + case SPV_OPERAND_TYPE_FPDENORM_MODE: return IR(855, 2); + case SPV_OPERAND_TYPE_FPENCODING: return IR(857, 3); + case SPV_OPERAND_TYPE_FPOPERATION_MODE: return IR(860, 2); + case SPV_OPERAND_TYPE_FP_FAST_MATH_MODE: return IR(862, 11); + case SPV_OPERAND_TYPE_FP_ROUNDING_MODE: return IR(873, 4); + case SPV_OPERAND_TYPE_FRAGMENT_SHADING_RATE: return IR(877, 4); + case SPV_OPERAND_TYPE_FUNCTION_CONTROL: return IR(881, 7); + case SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE: return IR(888, 9); + case SPV_OPERAND_TYPE_GROUP_OPERATION: return IR(897, 7); + case SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER: return IR(904, 4); + case SPV_OPERAND_TYPE_IMAGE: return IR(908, 21); + case SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE: return IR(929, 26); + case SPV_OPERAND_TYPE_IMAGE_CHANNEL_ORDER: return IR(955, 20); + case SPV_OPERAND_TYPE_INITIALIZATION_MODE_QUALIFIER: return IR(975, 2); + case SPV_OPERAND_TYPE_KERNEL_ENQ_FLAGS: return IR(977, 3); + case SPV_OPERAND_TYPE_KERNEL_PROFILING_INFO: return IR(980, 2); + case SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS: return IR(982, 2); + case SPV_OPERAND_TYPE_LINKAGE_TYPE: return IR(984, 3); + case SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL: return IR(987, 5); + case SPV_OPERAND_TYPE_LOOP_CONTROL: return IR(992, 20); + case SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: return IR(1012, 15); + case SPV_OPERAND_TYPE_MEMORY_ACCESS: return IR(1027, 12); + case SPV_OPERAND_TYPE_MEMORY_MODEL: return IR(1039, 5); + case SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID: return IR(1044, 19); + case SPV_OPERAND_TYPE_NAMED_MAXIMUM_NUMBER_OF_REGISTERS: return IR(1063, 1); + case SPV_OPERAND_TYPE_OVERFLOW_MODES: return IR(1064, 4); + case SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT: return IR(1068, 2); + case SPV_OPERAND_TYPE_QUANTIZATION_MODES: return IR(1070, 8); + case SPV_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS: return IR(1078, 3); + case SPV_OPERAND_TYPE_RAY_FLAGS: return IR(1081, 13); + case SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE: return IR(1094, 2); + case SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE: return IR(1096, 3); + case SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION: return IR(1099, 2); + case SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE: return IR(1101, 5); + case SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE: return IR(1106, 2); + case SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT: return IR(1108, 42); + case SPV_OPERAND_TYPE_SCOPE_ID: return IR(1150, 8); + case SPV_OPERAND_TYPE_SELECTION_CONTROL: return IR(1158, 3); + case SPV_OPERAND_TYPE_SHDEBUG100_BUILD_IDENTIFIER_FLAGS: return IR(1161, 1); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING: return IR(1162, 8); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE: return IR(1170, 3); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY: return IR(1173, 2); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS: return IR(1175, 20); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION: return IR(1195, 10); + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER: return IR(1205, 4); + case SPV_OPERAND_TYPE_SOURCE_LANGUAGE: return IR(1209, 14); + case SPV_OPERAND_TYPE_STORAGE_CLASS: return IR(1223, 35); + case SPV_OPERAND_TYPE_STORE_CACHE_CONTROL: return IR(1258, 4); + case SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS: return IR(1262, 3); + case SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE: return IR(1265, 5); + case SPV_OPERAND_TYPE_TENSOR_OPERANDS: return IR(1270, 6); + case SPV_OPERAND_TYPE_OPTIONAL_IMAGE: return IR(908, 21); + case SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER: return IR(0, 3); + case SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS: return IR(1027, 12); + case SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT: return IR(1068, 2); + case SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS: return IR(518, 6); + case SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: return IR(1012, 15); + case SPV_OPERAND_TYPE_OPTIONAL_RAW_ACCESS_CHAIN_OPERANDS: return IR(1078, 3); + case SPV_OPERAND_TYPE_OPTIONAL_FPENCODING: return IR(857, 3); + case SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS: return IR(1270, 6); + default: break; + } + return IR(0,0); +} + +// Instruction descriptions, ordered by opcode. +// The fields in order are: +// opcode +// a boolean indicating if the instruction produces a result ID +// a boolean indicating if the instruction result ID has a type +// operands, an IndexRange into kOperandSpans +// opcode name (without the 'Op' prefix), a character-counting IndexRange into kStrings +// aliases, an IndexRange into kAliasSpans +// capabilities, an IndexRange into kCapabilitySpans +// extensions, as an IndexRange into kExtensionSpans +// version, first version of SPIR-V that has it +// lastVersion, last version of SPIR-V that has it +static const std::array kInstructionDesc{{ + {spv::Op::OpNop, false, false, IR(0, 0), IR(24981, 4), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMiscellaneous}, + {spv::Op::OpUndef, true, true, IR(39, 2), IR(25037, 6), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMiscellaneous}, + {spv::Op::OpSourceContinued, false, false, IR(11, 1), IR(25043, 16), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDebug}, + {spv::Op::OpSource, false, false, IR(41, 4), IR(25162, 7), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDebug}, + {spv::Op::OpSourceExtension, false, false, IR(11, 1), IR(25169, 16), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDebug}, + {spv::Op::OpName, false, false, IR(45, 2), IR(25185, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDebug}, + {spv::Op::OpMemberName, false, false, IR(47, 3), IR(25190, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDebug}, + {spv::Op::OpString, true, false, IR(50, 2), IR(25201, 7), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDebug}, + {spv::Op::OpLine, false, false, IR(52, 3), IR(25208, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDebug}, + {spv::Op::OpExtension, false, false, IR(11, 1), IR(25213, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kExtension}, + {spv::Op::OpExtInstImport, true, false, IR(50, 2), IR(25223, 14), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kExtension}, + {spv::Op::OpExtInst, true, true, IR(55, 4), IR(25283, 8), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kExtension}, + {spv::Op::OpMemoryModel, false, false, IR(59, 2), IR(25355, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMode_Setting}, + {spv::Op::OpEntryPoint, false, false, IR(61, 4), IR(25429, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMode_Setting}, + {spv::Op::OpExecutionMode, false, false, IR(65, 2), IR(25472, 14), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMode_Setting}, + {spv::Op::OpCapability, false, false, IR(67, 1), IR(25514, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMode_Setting}, + {spv::Op::OpTypeVoid, true, false, IR(68, 1), IR(25525, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeBool, true, false, IR(68, 1), IR(25534, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeInt, true, false, IR(69, 3), IR(25543, 8), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeFloat, true, false, IR(72, 3), IR(25588, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeVector, true, false, IR(75, 3), IR(25598, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeMatrix, true, false, IR(75, 3), IR(25609, 11), IR(0, 0), IR(66, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeImage, true, false, IR(78, 9), IR(25733, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeSampler, true, false, IR(68, 1), IR(25743, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeSampledImage, true, false, IR(87, 2), IR(25755, 17), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeArray, true, false, IR(89, 3), IR(25772, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeRuntimeArray, true, false, IR(87, 2), IR(25782, 17), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeStruct, true, false, IR(92, 2), IR(25799, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeOpaque, true, false, IR(50, 2), IR(25810, 11), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypePointer, true, false, IR(94, 3), IR(25852, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeFunction, true, false, IR(97, 3), IR(25864, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeEvent, true, false, IR(68, 1), IR(25877, 10), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeDeviceEvent, true, false, IR(68, 1), IR(25887, 16), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeReserveId, true, false, IR(68, 1), IR(25903, 14), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeQueue, true, false, IR(68, 1), IR(25917, 10), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypePipe, true, false, IR(100, 2), IR(25927, 9), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeForwardPointer, false, false, IR(102, 2), IR(25936, 19), IR(0, 0), IR(199, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpConstantTrue, true, true, IR(39, 2), IR(25955, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpConstantFalse, true, true, IR(39, 2), IR(25968, 14), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpConstant, true, true, IR(104, 3), IR(15254, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpConstantComposite, true, true, IR(107, 3), IR(26020, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpConstantSampler, true, true, IR(110, 5), IR(26116, 16), IR(0, 0), IR(201, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpConstantNull, true, true, IR(39, 2), IR(26132, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpSpecConstantTrue, true, true, IR(39, 2), IR(26145, 17), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpSpecConstantFalse, true, true, IR(39, 2), IR(26162, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpSpecConstant, true, true, IR(104, 3), IR(26180, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpSpecConstantComposite, true, true, IR(107, 3), IR(26193, 22), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpSpecConstantOp, true, true, IR(115, 3), IR(26256, 15), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpFunction, true, true, IR(118, 4), IR(24333, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kFunction}, + {spv::Op::OpFunctionParameter, true, true, IR(39, 2), IR(26305, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kFunction}, + {spv::Op::OpFunctionEnd, false, false, IR(0, 0), IR(26323, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kFunction}, + {spv::Op::OpFunctionCall, true, true, IR(122, 4), IR(26335, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kFunction}, + {spv::Op::OpVariable, true, true, IR(126, 4), IR(26348, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpImageTexelPointer, true, true, IR(130, 5), IR(26357, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpLoad, true, true, IR(135, 4), IR(26415, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpStore, false, false, IR(139, 3), IR(26420, 6), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpCopyMemory, false, false, IR(142, 4), IR(26426, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpCopyMemorySized, false, false, IR(146, 5), IR(26437, 16), IR(0, 0), IR(202, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpAccessChain, true, true, IR(122, 4), IR(26453, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpInBoundsAccessChain, true, true, IR(122, 4), IR(26465, 20), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpPtrAccessChain, true, true, IR(151, 5), IR(26485, 15), IR(0, 0), IR(204, 4), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpArrayLength, true, true, IR(156, 4), IR(26500, 12), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpGenericPtrMemSemantics, true, true, IR(160, 3), IR(26512, 23), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpInBoundsPtrAccessChain, true, true, IR(151, 5), IR(26535, 23), IR(0, 0), IR(1, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpDecorate, false, false, IR(163, 2), IR(26586, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAnnotation}, + {spv::Op::OpMemberDecorate, false, false, IR(165, 3), IR(26595, 15), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAnnotation}, + {spv::Op::OpDecorationGroup, true, false, IR(68, 1), IR(26610, 16), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAnnotation}, + {spv::Op::OpGroupDecorate, false, false, IR(168, 2), IR(26626, 14), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAnnotation}, + {spv::Op::OpGroupMemberDecorate, false, false, IR(170, 2), IR(26685, 20), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAnnotation}, + {spv::Op::OpVectorExtractDynamic, true, true, IR(172, 4), IR(26705, 21), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpVectorInsertDynamic, true, true, IR(130, 5), IR(26726, 20), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpVectorShuffle, true, true, IR(176, 5), IR(26746, 14), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpCompositeConstruct, true, true, IR(107, 3), IR(26760, 19), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpCompositeExtract, true, true, IR(181, 4), IR(26779, 17), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpCompositeInsert, true, true, IR(176, 5), IR(26796, 16), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpCopyObject, true, true, IR(160, 3), IR(26812, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpTranspose, true, true, IR(160, 3), IR(26823, 10), IR(0, 0), IR(66, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpSampledImage, true, true, IR(172, 4), IR(26833, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSampleImplicitLod, true, true, IR(185, 5), IR(26878, 23), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSampleExplicitLod, true, true, IR(190, 5), IR(26924, 23), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSampleDrefImplicitLod, true, true, IR(195, 6), IR(26947, 27), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSampleDrefExplicitLod, true, true, IR(201, 6), IR(26974, 27), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSampleProjImplicitLod, true, true, IR(185, 5), IR(27001, 27), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSampleProjExplicitLod, true, true, IR(190, 5), IR(27028, 27), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSampleProjDrefImplicitLod, true, true, IR(195, 6), IR(27055, 31), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSampleProjDrefExplicitLod, true, true, IR(201, 6), IR(27086, 31), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageFetch, true, true, IR(185, 5), IR(27117, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageGather, true, true, IR(195, 6), IR(27128, 12), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageDrefGather, true, true, IR(195, 6), IR(27140, 16), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageRead, true, true, IR(185, 5), IR(27156, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageWrite, false, false, IR(207, 4), IR(27166, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImage, true, true, IR(160, 3), IR(24377, 6), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageQueryFormat, true, true, IR(160, 3), IR(27177, 17), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageQueryOrder, true, true, IR(160, 3), IR(27194, 16), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageQuerySizeLod, true, true, IR(172, 4), IR(27210, 18), IR(0, 0), IR(208, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageQuerySize, true, true, IR(160, 3), IR(27228, 15), IR(0, 0), IR(208, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageQueryLod, true, true, IR(172, 4), IR(27243, 14), IR(0, 0), IR(210, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageQueryLevels, true, true, IR(160, 3), IR(27257, 17), IR(0, 0), IR(208, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageQuerySamples, true, true, IR(160, 3), IR(27274, 18), IR(0, 0), IR(208, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpConvertFToU, true, true, IR(160, 3), IR(27292, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpConvertFToS, true, true, IR(160, 3), IR(27304, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpConvertSToF, true, true, IR(160, 3), IR(27316, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpConvertUToF, true, true, IR(160, 3), IR(27328, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpUConvert, true, true, IR(160, 3), IR(27340, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpSConvert, true, true, IR(160, 3), IR(27349, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpFConvert, true, true, IR(160, 3), IR(27358, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpQuantizeToF16, true, true, IR(160, 3), IR(27367, 14), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpConvertPtrToU, true, true, IR(160, 3), IR(27381, 14), IR(0, 0), IR(199, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpSatConvertSToU, true, true, IR(160, 3), IR(27395, 15), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpSatConvertUToS, true, true, IR(160, 3), IR(27410, 15), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpConvertUToPtr, true, true, IR(160, 3), IR(27425, 14), IR(0, 0), IR(199, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpPtrCastToGeneric, true, true, IR(160, 3), IR(27439, 17), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpGenericCastToPtr, true, true, IR(160, 3), IR(27456, 17), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpGenericCastToPtrExplicit, true, true, IR(211, 4), IR(27473, 25), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpBitcast, true, true, IR(160, 3), IR(27498, 8), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpSNegate, true, true, IR(160, 3), IR(27506, 8), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpFNegate, true, true, IR(160, 3), IR(27514, 8), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpIAdd, true, true, IR(172, 4), IR(27522, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpFAdd, true, true, IR(172, 4), IR(27527, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpISub, true, true, IR(172, 4), IR(27532, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpFSub, true, true, IR(172, 4), IR(27537, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpIMul, true, true, IR(172, 4), IR(27542, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpFMul, true, true, IR(172, 4), IR(27547, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpUDiv, true, true, IR(172, 4), IR(27552, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpSDiv, true, true, IR(172, 4), IR(27557, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpFDiv, true, true, IR(172, 4), IR(27562, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpUMod, true, true, IR(172, 4), IR(27567, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpSRem, true, true, IR(172, 4), IR(27572, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpSMod, true, true, IR(172, 4), IR(27577, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpFRem, true, true, IR(172, 4), IR(27582, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpFMod, true, true, IR(172, 4), IR(27587, 5), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpVectorTimesScalar, true, true, IR(172, 4), IR(27592, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpMatrixTimesScalar, true, true, IR(172, 4), IR(27610, 18), IR(0, 0), IR(66, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpVectorTimesMatrix, true, true, IR(172, 4), IR(27628, 18), IR(0, 0), IR(66, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpMatrixTimesVector, true, true, IR(172, 4), IR(27646, 18), IR(0, 0), IR(66, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpMatrixTimesMatrix, true, true, IR(172, 4), IR(27664, 18), IR(0, 0), IR(66, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpOuterProduct, true, true, IR(172, 4), IR(27682, 13), IR(0, 0), IR(66, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpDot, true, true, IR(172, 4), IR(27695, 4), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpIAddCarry, true, true, IR(172, 4), IR(27699, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpISubBorrow, true, true, IR(172, 4), IR(27709, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpUMulExtended, true, true, IR(172, 4), IR(27720, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpSMulExtended, true, true, IR(172, 4), IR(27733, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpAny, true, true, IR(160, 3), IR(27746, 4), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpAll, true, true, IR(160, 3), IR(27750, 4), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpIsNan, true, true, IR(160, 3), IR(27754, 6), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpIsInf, true, true, IR(160, 3), IR(27760, 6), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpIsFinite, true, true, IR(160, 3), IR(27766, 9), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpIsNormal, true, true, IR(160, 3), IR(27775, 9), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpSignBitSet, true, true, IR(160, 3), IR(27784, 11), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpLessOrGreater, true, true, IR(172, 4), IR(27795, 14), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), SPV_SPIRV_VERSION_WORD(1,5), PrintingClass::kRelational_and_Logical}, + {spv::Op::OpOrdered, true, true, IR(172, 4), IR(27809, 8), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpUnordered, true, true, IR(172, 4), IR(27817, 10), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpLogicalEqual, true, true, IR(172, 4), IR(27827, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpLogicalNotEqual, true, true, IR(172, 4), IR(27840, 16), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpLogicalOr, true, true, IR(172, 4), IR(27856, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpLogicalAnd, true, true, IR(172, 4), IR(27866, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpLogicalNot, true, true, IR(160, 3), IR(27877, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpSelect, true, true, IR(130, 5), IR(27888, 7), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpIEqual, true, true, IR(172, 4), IR(27895, 7), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpINotEqual, true, true, IR(172, 4), IR(27902, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpUGreaterThan, true, true, IR(172, 4), IR(27912, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpSGreaterThan, true, true, IR(172, 4), IR(27925, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpUGreaterThanEqual, true, true, IR(172, 4), IR(27938, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpSGreaterThanEqual, true, true, IR(172, 4), IR(27956, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpULessThan, true, true, IR(172, 4), IR(27974, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpSLessThan, true, true, IR(172, 4), IR(27984, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpULessThanEqual, true, true, IR(172, 4), IR(27994, 15), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpSLessThanEqual, true, true, IR(172, 4), IR(28009, 15), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFOrdEqual, true, true, IR(172, 4), IR(28024, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFUnordEqual, true, true, IR(172, 4), IR(28034, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFOrdNotEqual, true, true, IR(172, 4), IR(28046, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFUnordNotEqual, true, true, IR(172, 4), IR(28059, 15), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFOrdLessThan, true, true, IR(172, 4), IR(28074, 13), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFUnordLessThan, true, true, IR(172, 4), IR(28087, 15), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFOrdGreaterThan, true, true, IR(172, 4), IR(28102, 16), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFUnordGreaterThan, true, true, IR(172, 4), IR(28118, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFOrdLessThanEqual, true, true, IR(172, 4), IR(28136, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFUnordLessThanEqual, true, true, IR(172, 4), IR(28154, 20), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFOrdGreaterThanEqual, true, true, IR(172, 4), IR(28174, 21), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpFUnordGreaterThanEqual, true, true, IR(172, 4), IR(28195, 23), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kRelational_and_Logical}, + {spv::Op::OpShiftRightLogical, true, true, IR(172, 4), IR(28218, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpShiftRightArithmetic, true, true, IR(172, 4), IR(28236, 21), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpShiftLeftLogical, true, true, IR(172, 4), IR(28257, 17), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpBitwiseOr, true, true, IR(172, 4), IR(28274, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpBitwiseXor, true, true, IR(172, 4), IR(28284, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpBitwiseAnd, true, true, IR(172, 4), IR(28295, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpNot, true, true, IR(160, 3), IR(28306, 4), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpBitFieldInsert, true, true, IR(215, 6), IR(28310, 15), IR(0, 0), IR(211, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpBitFieldSExtract, true, true, IR(130, 5), IR(28325, 17), IR(0, 0), IR(211, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpBitFieldUExtract, true, true, IR(130, 5), IR(28342, 17), IR(0, 0), IR(211, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpBitReverse, true, true, IR(160, 3), IR(28359, 11), IR(0, 0), IR(211, 2), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpBitCount, true, true, IR(160, 3), IR(28370, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpDPdx, true, true, IR(160, 3), IR(28379, 5), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDerivative}, + {spv::Op::OpDPdy, true, true, IR(160, 3), IR(28384, 5), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDerivative}, + {spv::Op::OpFwidth, true, true, IR(160, 3), IR(28389, 7), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDerivative}, + {spv::Op::OpDPdxFine, true, true, IR(160, 3), IR(28396, 9), IR(0, 0), IR(213, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDerivative}, + {spv::Op::OpDPdyFine, true, true, IR(160, 3), IR(28405, 9), IR(0, 0), IR(213, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDerivative}, + {spv::Op::OpFwidthFine, true, true, IR(160, 3), IR(28414, 11), IR(0, 0), IR(213, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDerivative}, + {spv::Op::OpDPdxCoarse, true, true, IR(160, 3), IR(28425, 11), IR(0, 0), IR(213, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDerivative}, + {spv::Op::OpDPdyCoarse, true, true, IR(160, 3), IR(28436, 11), IR(0, 0), IR(213, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDerivative}, + {spv::Op::OpFwidthCoarse, true, true, IR(160, 3), IR(28447, 13), IR(0, 0), IR(213, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDerivative}, + {spv::Op::OpEmitVertex, false, false, IR(0, 0), IR(28460, 11), IR(0, 0), IR(69, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPrimitive}, + {spv::Op::OpEndPrimitive, false, false, IR(0, 0), IR(28471, 13), IR(0, 0), IR(69, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPrimitive}, + {spv::Op::OpEmitStreamVertex, false, false, IR(10, 1), IR(28484, 17), IR(0, 0), IR(110, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPrimitive}, + {spv::Op::OpEndStreamPrimitive, false, false, IR(10, 1), IR(28501, 19), IR(0, 0), IR(110, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPrimitive}, + {spv::Op::OpControlBarrier, false, false, IR(221, 3), IR(28557, 15), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBarrier}, + {spv::Op::OpMemoryBarrier, false, false, IR(224, 2), IR(28572, 14), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kBarrier}, + {spv::Op::OpAtomicLoad, true, true, IR(226, 5), IR(28586, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicStore, false, false, IR(231, 4), IR(28597, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicExchange, true, true, IR(235, 6), IR(28609, 15), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicCompareExchange, true, true, IR(241, 8), IR(28624, 22), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicCompareExchangeWeak, true, true, IR(241, 8), IR(28646, 26), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), SPV_SPIRV_VERSION_WORD(1,3), PrintingClass::kAtomic}, + {spv::Op::OpAtomicIIncrement, true, true, IR(226, 5), IR(28672, 17), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicIDecrement, true, true, IR(226, 5), IR(28689, 17), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicIAdd, true, true, IR(235, 6), IR(28706, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicISub, true, true, IR(235, 6), IR(28717, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicSMin, true, true, IR(235, 6), IR(28728, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicUMin, true, true, IR(235, 6), IR(28739, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicSMax, true, true, IR(235, 6), IR(28750, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicUMax, true, true, IR(235, 6), IR(28761, 11), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicAnd, true, true, IR(235, 6), IR(28772, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicOr, true, true, IR(235, 6), IR(28782, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicXor, true, true, IR(235, 6), IR(28791, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpPhi, true, true, IR(107, 3), IR(28801, 4), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpLoopMerge, false, false, IR(249, 3), IR(28835, 10), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpSelectionMerge, false, false, IR(252, 2), IR(28880, 15), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpLabel, true, false, IR(68, 1), IR(28895, 6), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpBranch, false, false, IR(10, 1), IR(28901, 7), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpBranchConditional, false, false, IR(254, 4), IR(28908, 18), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpSwitch, false, false, IR(258, 3), IR(28971, 7), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpKill, false, false, IR(0, 0), IR(28978, 5), IR(0, 0), IR(3, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpReturn, false, false, IR(0, 0), IR(28983, 7), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpReturnValue, false, false, IR(10, 1), IR(28990, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpUnreachable, false, false, IR(0, 0), IR(29002, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpLifetimeStart, false, false, IR(261, 2), IR(29014, 14), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpLifetimeStop, false, false, IR(261, 2), IR(29028, 13), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpGroupAsyncCopy, true, true, IR(263, 8), IR(29041, 15), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupWaitEvents, false, false, IR(271, 3), IR(29056, 16), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupAll, true, true, IR(274, 4), IR(29072, 9), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupAny, true, true, IR(274, 4), IR(29081, 9), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupBroadcast, true, true, IR(278, 5), IR(29090, 15), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupIAdd, true, true, IR(283, 5), IR(29138, 10), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupFAdd, true, true, IR(283, 5), IR(29148, 10), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupFMin, true, true, IR(283, 5), IR(29158, 10), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupUMin, true, true, IR(283, 5), IR(29168, 10), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupSMin, true, true, IR(283, 5), IR(29178, 10), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupFMax, true, true, IR(283, 5), IR(29188, 10), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupUMax, true, true, IR(283, 5), IR(29198, 10), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupSMax, true, true, IR(283, 5), IR(29208, 10), IR(0, 0), IR(214, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpReadPipe, true, true, IR(215, 6), IR(29218, 9), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpWritePipe, true, true, IR(215, 6), IR(29227, 10), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpReservedReadPipe, true, true, IR(288, 8), IR(29237, 17), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpReservedWritePipe, true, true, IR(288, 8), IR(29254, 18), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpReserveReadPipePackets, true, true, IR(215, 6), IR(29272, 23), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpReserveWritePipePackets, true, true, IR(215, 6), IR(29295, 24), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpCommitReadPipe, false, false, IR(296, 4), IR(29319, 15), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpCommitWritePipe, false, false, IR(296, 4), IR(29334, 16), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpIsValidReserveId, true, true, IR(160, 3), IR(29350, 17), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpGetNumPipePackets, true, true, IR(130, 5), IR(29367, 18), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpGetMaxPipePackets, true, true, IR(130, 5), IR(29385, 18), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpGroupReserveReadPipePackets, true, true, IR(300, 7), IR(29403, 28), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpGroupReserveWritePipePackets, true, true, IR(300, 7), IR(29431, 29), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpGroupCommitReadPipe, false, false, IR(307, 5), IR(29460, 20), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpGroupCommitWritePipe, false, false, IR(307, 5), IR(29480, 21), IR(0, 0), IR(75, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpEnqueueMarker, true, true, IR(215, 6), IR(29501, 14), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpEnqueueKernel, true, true, IR(312, 13), IR(29515, 14), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpGetKernelNDrangeSubGroupCount, true, true, IR(325, 7), IR(29529, 30), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpGetKernelNDrangeMaxSubGroupSize, true, true, IR(325, 7), IR(29559, 32), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpGetKernelWorkGroupSize, true, true, IR(215, 6), IR(29591, 23), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpGetKernelPreferredWorkGroupSizeMultiple, true, true, IR(215, 6), IR(29614, 40), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpRetainEvent, false, false, IR(10, 1), IR(29654, 12), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpReleaseEvent, false, false, IR(10, 1), IR(29666, 13), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpCreateUserEvent, true, true, IR(39, 2), IR(29679, 16), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpIsValidEvent, true, true, IR(160, 3), IR(29695, 13), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpSetUserEventStatus, false, false, IR(36, 2), IR(29708, 19), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpCaptureEventProfilingInfo, false, false, IR(33, 3), IR(29727, 26), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpGetDefaultQueue, true, true, IR(39, 2), IR(29753, 16), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpBuildNDRange, true, true, IR(130, 5), IR(29769, 13), IR(0, 0), IR(74, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpImageSparseSampleImplicitLod, true, true, IR(185, 5), IR(29782, 29), IR(0, 0), IR(215, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseSampleExplicitLod, true, true, IR(190, 5), IR(29811, 29), IR(0, 0), IR(215, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseSampleDrefImplicitLod, true, true, IR(195, 6), IR(29840, 33), IR(0, 0), IR(215, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseSampleDrefExplicitLod, true, true, IR(201, 6), IR(29873, 33), IR(0, 0), IR(215, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseSampleProjImplicitLod, true, true, IR(185, 5), IR(29906, 33), IR(0, 0), IR(215, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseSampleProjExplicitLod, true, true, IR(190, 5), IR(29939, 33), IR(0, 0), IR(215, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseSampleProjDrefImplicitLod, true, true, IR(195, 6), IR(29972, 37), IR(0, 0), IR(215, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseSampleProjDrefExplicitLod, true, true, IR(201, 6), IR(30009, 37), IR(0, 0), IR(215, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseFetch, true, true, IR(185, 5), IR(30046, 17), IR(0, 0), IR(215, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseGather, true, true, IR(195, 6), IR(30063, 18), IR(0, 0), IR(215, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseDrefGather, true, true, IR(195, 6), IR(30081, 22), IR(0, 0), IR(215, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageSparseTexelsResident, true, true, IR(160, 3), IR(30103, 26), IR(0, 0), IR(215, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpNoLine, false, false, IR(0, 0), IR(30129, 7), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kDebug}, + {spv::Op::OpAtomicFlagTestAndSet, true, true, IR(226, 5), IR(30136, 21), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicFlagClear, false, false, IR(332, 3), IR(30157, 16), IR(0, 0), IR(0, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpImageSparseRead, true, true, IR(185, 5), IR(30173, 16), IR(0, 0), IR(215, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,0), 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpSizeOf, true, true, IR(160, 3), IR(30189, 7), IR(0, 0), IR(1, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu, PrintingClass::kMiscellaneous}, + {spv::Op::OpTypePipeStorage, true, false, IR(68, 1), IR(30196, 16), IR(0, 0), IR(216, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpConstantPipeStorage, true, true, IR(335, 5), IR(30212, 20), IR(0, 0), IR(216, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpCreatePipeFromPipeStorage, true, true, IR(160, 3), IR(30232, 26), IR(0, 0), IR(216, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpGetKernelLocalSizeForSubgroupCount, true, true, IR(325, 7), IR(30258, 35), IR(0, 0), IR(149, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpGetKernelMaxNumSubgroups, true, true, IR(215, 6), IR(30293, 25), IR(0, 0), IR(149, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu, PrintingClass::kDevice_Side_Enqueue}, + {spv::Op::OpTypeNamedBarrier, true, false, IR(68, 1), IR(30318, 17), IR(0, 0), IR(217, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpNamedBarrierInitialize, true, true, IR(160, 3), IR(30335, 23), IR(0, 0), IR(217, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu, PrintingClass::kBarrier}, + {spv::Op::OpMemoryNamedBarrier, false, false, IR(332, 3), IR(30358, 19), IR(0, 0), IR(217, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu, PrintingClass::kBarrier}, + {spv::Op::OpModuleProcessed, false, false, IR(11, 1), IR(30377, 16), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu, PrintingClass::kDebug}, + {spv::Op::OpExecutionModeId, false, false, IR(65, 2), IR(30393, 16), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu, PrintingClass::kMode_Setting}, + {spv::Op::OpDecorateId, false, false, IR(163, 2), IR(30409, 11), IR(0, 0), IR(1, 0), IR(154, 1), SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu, PrintingClass::kAnnotation}, + {spv::Op::OpGroupNonUniformElect, true, true, IR(340, 3), IR(30420, 21), IR(0, 0), IR(76, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformAll, true, true, IR(274, 4), IR(30441, 19), IR(0, 0), IR(218, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformAny, true, true, IR(274, 4), IR(30460, 19), IR(0, 0), IR(218, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformAllEqual, true, true, IR(274, 4), IR(30479, 24), IR(0, 0), IR(218, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformBroadcast, true, true, IR(278, 5), IR(30503, 25), IR(0, 0), IR(219, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformBroadcastFirst, true, true, IR(274, 4), IR(30528, 30), IR(0, 0), IR(219, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformBallot, true, true, IR(274, 4), IR(5569, 22), IR(0, 0), IR(219, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformInverseBallot, true, true, IR(274, 4), IR(30558, 29), IR(0, 0), IR(219, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformBallotBitExtract, true, true, IR(278, 5), IR(30587, 32), IR(0, 0), IR(219, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformBallotBitCount, true, true, IR(283, 5), IR(30619, 30), IR(0, 0), IR(219, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformBallotFindLSB, true, true, IR(274, 4), IR(30649, 29), IR(0, 0), IR(219, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformBallotFindMSB, true, true, IR(274, 4), IR(30678, 29), IR(0, 0), IR(219, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformShuffle, true, true, IR(278, 5), IR(8659, 23), IR(0, 0), IR(220, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformShuffleXor, true, true, IR(278, 5), IR(30707, 26), IR(0, 0), IR(220, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformShuffleUp, true, true, IR(278, 5), IR(30733, 25), IR(0, 0), IR(221, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformShuffleDown, true, true, IR(278, 5), IR(30758, 27), IR(0, 0), IR(221, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformIAdd, true, true, IR(343, 6), IR(30785, 20), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformFAdd, true, true, IR(343, 6), IR(30805, 20), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformIMul, true, true, IR(343, 6), IR(30825, 20), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformFMul, true, true, IR(343, 6), IR(30845, 20), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformSMin, true, true, IR(343, 6), IR(30865, 20), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformUMin, true, true, IR(343, 6), IR(30885, 20), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformFMin, true, true, IR(343, 6), IR(30905, 20), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformSMax, true, true, IR(343, 6), IR(30925, 20), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformUMax, true, true, IR(343, 6), IR(30945, 20), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformFMax, true, true, IR(343, 6), IR(30965, 20), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformBitwiseAnd, true, true, IR(343, 6), IR(30985, 26), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformBitwiseOr, true, true, IR(343, 6), IR(31011, 25), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformBitwiseXor, true, true, IR(343, 6), IR(31036, 26), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformLogicalAnd, true, true, IR(343, 6), IR(31062, 26), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformLogicalOr, true, true, IR(343, 6), IR(31088, 25), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformLogicalXor, true, true, IR(343, 6), IR(31113, 26), IR(0, 0), IR(222, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformQuadBroadcast, true, true, IR(278, 5), IR(31139, 29), IR(0, 0), IR(225, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformQuadSwap, true, true, IR(278, 5), IR(31168, 24), IR(0, 0), IR(225, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,3), 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpCopyLogical, true, true, IR(160, 3), IR(31192, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpPtrEqual, true, true, IR(172, 4), IR(31204, 9), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpPtrNotEqual, true, true, IR(172, 4), IR(31213, 12), IR(0, 0), IR(1, 0), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpPtrDiff, true, true, IR(172, 4), IR(31225, 8), IR(0, 0), IR(226, 3), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpColorAttachmentReadEXT, true, true, IR(349, 4), IR(31233, 23), IR(0, 0), IR(141, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpDepthAttachmentReadEXT, true, true, IR(353, 3), IR(31256, 23), IR(0, 0), IR(150, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpStencilAttachmentReadEXT, true, true, IR(353, 3), IR(31279, 25), IR(0, 0), IR(151, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpTypeTensorARM, true, false, IR(356, 4), IR(31304, 14), IR(0, 0), IR(198, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTensorReadARM, true, true, IR(360, 5), IR(31360, 14), IR(0, 0), IR(198, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kTensor}, + {spv::Op::OpTensorWriteARM, false, false, IR(365, 4), IR(31374, 15), IR(0, 0), IR(198, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kTensor}, + {spv::Op::OpTensorQuerySizeARM, true, true, IR(172, 4), IR(31389, 19), IR(0, 0), IR(198, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kTensor}, + {spv::Op::OpTerminateInvocation, false, false, IR(0, 0), IR(31408, 20), IR(0, 0), IR(3, 1), IR(164, 1), SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpTypeUntypedPointerKHR, true, false, IR(369, 2), IR(31428, 22), IR(0, 0), IR(229, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpUntypedVariableKHR, true, true, IR(371, 5), IR(31450, 19), IR(0, 0), IR(229, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpUntypedAccessChainKHR, true, true, IR(151, 5), IR(31469, 22), IR(0, 0), IR(229, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpUntypedInBoundsAccessChainKHR, true, true, IR(151, 5), IR(31491, 30), IR(0, 0), IR(229, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpSubgroupBallotKHR, true, true, IR(160, 3), IR(5330, 18), IR(0, 0), IR(230, 1), IR(2, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupFirstInvocationKHR, true, true, IR(160, 3), IR(31521, 27), IR(0, 0), IR(230, 1), IR(2, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpUntypedPtrAccessChainKHR, true, true, IR(376, 6), IR(31548, 25), IR(0, 0), IR(229, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpUntypedInBoundsPtrAccessChainKHR, true, true, IR(376, 6), IR(31573, 33), IR(0, 0), IR(229, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpUntypedArrayLengthKHR, true, true, IR(382, 5), IR(31606, 22), IR(0, 0), IR(229, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpUntypedPrefetchKHR, false, false, IR(387, 5), IR(31628, 19), IR(0, 0), IR(229, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpSubgroupAllKHR, true, true, IR(160, 3), IR(31647, 15), IR(0, 0), IR(231, 1), IR(40, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupAnyKHR, true, true, IR(160, 3), IR(31662, 15), IR(0, 0), IR(231, 1), IR(40, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupAllEqualKHR, true, true, IR(160, 3), IR(31677, 20), IR(0, 0), IR(231, 1), IR(40, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupNonUniformRotateKHR, true, true, IR(392, 6), IR(13128, 25), IR(0, 0), IR(232, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupReadInvocationKHR, true, true, IR(172, 4), IR(31697, 26), IR(0, 0), IR(230, 1), IR(2, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpExtInstWithForwardRefsKHR, true, true, IR(398, 5), IR(31723, 26), IR(0, 0), IR(1, 0), IR(165, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kExtension}, + {spv::Op::OpTraceRayKHR, false, false, IR(403, 11), IR(31749, 12), IR(0, 0), IR(60, 1), IR(28, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpExecuteCallableKHR, false, false, IR(36, 2), IR(31761, 19), IR(0, 0), IR(60, 1), IR(28, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpConvertUToAccelerationStructureKHR, true, true, IR(160, 3), IR(31780, 35), IR(0, 0), IR(233, 2), IR(166, 2), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpIgnoreIntersectionKHR, false, false, IR(0, 0), IR(31815, 22), IR(0, 0), IR(60, 1), IR(28, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTerminateRayKHR, false, false, IR(0, 0), IR(31837, 16), IR(0, 0), IR(60, 1), IR(28, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpSDot, true, true, IR(414, 5), IR(31900, 5), IR(93, 1), IR(235, 1), IR(120, 1), SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpUDot, true, true, IR(414, 5), IR(31913, 5), IR(94, 1), IR(235, 1), IR(120, 1), SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpSUDot, true, true, IR(414, 5), IR(31926, 6), IR(95, 1), IR(235, 1), IR(120, 1), SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpSDotAccSat, true, true, IR(419, 6), IR(31941, 11), IR(96, 1), IR(235, 1), IR(120, 1), SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpUDotAccSat, true, true, IR(419, 6), IR(31966, 11), IR(97, 1), IR(235, 1), IR(120, 1), SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpSUDotAccSat, true, true, IR(419, 6), IR(31991, 12), IR(98, 1), IR(235, 1), IR(120, 1), SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpTypeCooperativeMatrixKHR, true, false, IR(425, 6), IR(32018, 25), IR(0, 0), IR(236, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpCooperativeMatrixLoadKHR, true, true, IR(431, 6), IR(32043, 25), IR(0, 0), IR(236, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpCooperativeMatrixStoreKHR, false, false, IR(437, 5), IR(32068, 26), IR(0, 0), IR(236, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpCooperativeMatrixMulAddKHR, true, true, IR(442, 6), IR(32148, 27), IR(0, 0), IR(236, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpCooperativeMatrixLengthKHR, true, true, IR(160, 3), IR(32175, 27), IR(0, 0), IR(236, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMiscellaneous}, + {spv::Op::OpConstantCompositeReplicateEXT, true, true, IR(160, 3), IR(32202, 30), IR(0, 0), IR(237, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpSpecConstantCompositeReplicateEXT, true, true, IR(160, 3), IR(32232, 34), IR(0, 0), IR(237, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpCompositeConstructReplicateEXT, true, true, IR(160, 3), IR(32266, 31), IR(0, 0), IR(237, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpTypeRayQueryKHR, true, false, IR(68, 1), IR(32297, 16), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpRayQueryInitializeKHR, false, false, IR(448, 8), IR(32313, 22), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryTerminateKHR, false, false, IR(10, 1), IR(32335, 21), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGenerateIntersectionKHR, false, false, IR(36, 2), IR(32356, 32), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryConfirmIntersectionKHR, false, false, IR(10, 1), IR(32388, 31), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryProceedKHR, true, true, IR(160, 3), IR(32419, 19), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionTypeKHR, true, true, IR(172, 4), IR(32438, 31), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpImageSampleWeightedQCOM, true, true, IR(130, 5), IR(32469, 24), IR(0, 0), IR(238, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageBoxFilterQCOM, true, true, IR(130, 5), IR(32493, 19), IR(0, 0), IR(239, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageBlockMatchSSDQCOM, true, true, IR(325, 7), IR(32512, 23), IR(0, 0), IR(240, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageBlockMatchSADQCOM, true, true, IR(325, 7), IR(32535, 23), IR(0, 0), IR(240, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageBlockMatchWindowSSDQCOM, true, true, IR(325, 7), IR(32558, 29), IR(0, 0), IR(241, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageBlockMatchWindowSADQCOM, true, true, IR(325, 7), IR(32587, 29), IR(0, 0), IR(241, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageBlockMatchGatherSSDQCOM, true, true, IR(325, 7), IR(32616, 29), IR(0, 0), IR(241, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpImageBlockMatchGatherSADQCOM, true, true, IR(325, 7), IR(32645, 29), IR(0, 0), IR(241, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpGroupIAddNonUniformAMD, true, true, IR(283, 5), IR(32674, 23), IR(0, 0), IR(214, 1), IR(33, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupFAddNonUniformAMD, true, true, IR(283, 5), IR(32697, 23), IR(0, 0), IR(214, 1), IR(33, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupFMinNonUniformAMD, true, true, IR(283, 5), IR(32720, 23), IR(0, 0), IR(214, 1), IR(33, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupUMinNonUniformAMD, true, true, IR(283, 5), IR(32743, 23), IR(0, 0), IR(214, 1), IR(33, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupSMinNonUniformAMD, true, true, IR(283, 5), IR(32766, 23), IR(0, 0), IR(214, 1), IR(33, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupFMaxNonUniformAMD, true, true, IR(283, 5), IR(32789, 23), IR(0, 0), IR(214, 1), IR(33, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupUMaxNonUniformAMD, true, true, IR(283, 5), IR(32812, 23), IR(0, 0), IR(214, 1), IR(33, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupSMaxNonUniformAMD, true, true, IR(283, 5), IR(32835, 23), IR(0, 0), IR(214, 1), IR(33, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpFragmentMaskFetchAMD, true, true, IR(172, 4), IR(32858, 21), IR(0, 0), IR(242, 1), IR(56, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpFragmentFetchAMD, true, true, IR(130, 5), IR(32879, 17), IR(0, 0), IR(242, 1), IR(56, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpReadClockKHR, true, true, IR(340, 3), IR(32896, 13), IR(0, 0), IR(243, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpAllocateNodePayloadsAMDX, true, true, IR(278, 5), IR(32909, 25), IR(0, 0), IR(43, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpEnqueueNodePayloadsAMDX, false, false, IR(10, 1), IR(32934, 24), IR(0, 0), IR(43, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTypeNodePayloadArrayAMDX, true, false, IR(87, 2), IR(32958, 25), IR(0, 0), IR(43, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpFinishWritingNodePayloadAMDX, true, true, IR(160, 3), IR(32983, 29), IR(0, 0), IR(43, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpNodePayloadArrayLengthAMDX, true, true, IR(160, 3), IR(33012, 27), IR(0, 0), IR(43, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpIsNodePayloadValidAMDX, true, true, IR(172, 4), IR(33039, 23), IR(0, 0), IR(43, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpConstantStringAMDX, true, false, IR(50, 2), IR(33062, 19), IR(0, 0), IR(43, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpSpecConstantStringAMDX, true, false, IR(50, 2), IR(33081, 23), IR(0, 0), IR(43, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpGroupNonUniformQuadAllKHR, true, true, IR(160, 3), IR(33104, 26), IR(0, 0), IR(158, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpGroupNonUniformQuadAnyKHR, true, true, IR(160, 3), IR(33130, 26), IR(0, 0), IR(158, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpHitObjectRecordHitMotionNV, false, false, IR(456, 14), IR(33156, 27), IR(0, 0), IR(244, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectRecordHitWithIndexMotionNV, false, false, IR(470, 13), IR(33183, 36), IR(0, 0), IR(244, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectRecordMissMotionNV, false, false, IR(483, 7), IR(33219, 28), IR(0, 0), IR(244, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetWorldToObjectNV, true, true, IR(160, 3), IR(33247, 28), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetObjectToWorldNV, true, true, IR(160, 3), IR(33275, 28), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetObjectRayDirectionNV, true, true, IR(160, 3), IR(33303, 33), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetObjectRayOriginNV, true, true, IR(160, 3), IR(33336, 30), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectTraceRayMotionNV, false, false, IR(470, 13), IR(33366, 26), IR(0, 0), IR(244, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetShaderRecordBufferHandleNV, true, true, IR(160, 3), IR(33392, 39), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetShaderBindingTableRecordIndexNV, true, true, IR(160, 3), IR(33431, 44), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectRecordEmptyNV, false, false, IR(10, 1), IR(33475, 23), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectTraceRayNV, false, false, IR(490, 12), IR(33498, 20), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectRecordHitNV, false, false, IR(470, 13), IR(33518, 21), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectRecordHitWithIndexNV, false, false, IR(490, 12), IR(33539, 30), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectRecordMissNV, false, false, IR(502, 6), IR(33569, 22), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectExecuteShaderNV, false, false, IR(36, 2), IR(33591, 25), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetCurrentTimeNV, true, true, IR(160, 3), IR(33616, 26), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetAttributesNV, false, false, IR(36, 2), IR(33642, 25), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetHitKindNV, true, true, IR(160, 3), IR(33667, 22), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetPrimitiveIndexNV, true, true, IR(160, 3), IR(33689, 29), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetGeometryIndexNV, true, true, IR(160, 3), IR(33718, 28), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetInstanceIdNV, true, true, IR(160, 3), IR(33746, 25), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetInstanceCustomIndexNV, true, true, IR(160, 3), IR(33771, 34), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetWorldRayDirectionNV, true, true, IR(160, 3), IR(33805, 32), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetWorldRayOriginNV, true, true, IR(160, 3), IR(33837, 29), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetRayTMaxNV, true, true, IR(160, 3), IR(33866, 22), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetRayTMinNV, true, true, IR(160, 3), IR(33888, 22), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectIsEmptyNV, true, true, IR(160, 3), IR(33910, 19), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectIsHitNV, true, true, IR(160, 3), IR(33929, 17), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectIsMissNV, true, true, IR(160, 3), IR(33946, 18), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpReorderThreadWithHitObjectNV, false, false, IR(508, 3), IR(33964, 29), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpReorderThreadWithHintNV, false, false, IR(36, 2), IR(33993, 24), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTypeHitObjectNV, true, false, IR(68, 1), IR(34017, 16), IR(0, 0), IR(120, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpImageSampleFootprintNV, true, true, IR(511, 7), IR(34033, 23), IR(0, 0), IR(246, 1), IR(70, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpTypeCooperativeVectorNV, true, false, IR(89, 3), IR(34056, 24), IR(0, 0), IR(247, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpCooperativeVectorMatrixMulNV, true, true, IR(518, 13), IR(34080, 29), IR(0, 0), IR(247, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCooperativeVectorOuterProductAccumulateNV, false, false, IR(531, 7), IR(34109, 42), IR(0, 0), IR(248, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCooperativeVectorReduceSumAccumulateNV, false, false, IR(33, 3), IR(34151, 39), IR(0, 0), IR(248, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCooperativeVectorMatrixMulAddNV, true, true, IR(538, 16), IR(34190, 32), IR(0, 0), IR(247, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCooperativeMatrixConvertNV, true, true, IR(160, 3), IR(34222, 27), IR(0, 0), IR(249, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpEmitMeshTasksEXT, false, false, IR(554, 4), IR(34249, 17), IR(0, 0), IR(53, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpSetMeshOutputsEXT, false, false, IR(36, 2), IR(34266, 18), IR(0, 0), IR(53, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpGroupNonUniformPartitionNV, true, true, IR(160, 3), IR(34284, 27), IR(0, 0), IR(179, 1), IR(73, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kNon_Uniform}, + {spv::Op::OpWritePackedPrimitiveIndices4x8NV, false, false, IR(36, 2), IR(34311, 33), IR(0, 0), IR(50, 1), IR(18, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpFetchMicroTriangleVertexPositionNV, true, true, IR(325, 7), IR(34344, 35), IR(0, 0), IR(250, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpFetchMicroTriangleVertexBarycentricNV, true, true, IR(325, 7), IR(34379, 38), IR(0, 0), IR(250, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCooperativeVectorLoadNV, true, true, IR(558, 5), IR(34417, 24), IR(0, 0), IR(247, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpCooperativeVectorStoreNV, false, false, IR(563, 4), IR(34441, 25), IR(0, 0), IR(247, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpReportIntersectionKHR, true, true, IR(172, 4), IR(34466, 22), IR(99, 1), IR(54, 2), IR(24, 2), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpIgnoreIntersectionNV, false, false, IR(0, 0), IR(34509, 21), IR(0, 0), IR(56, 1), IR(26, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTerminateRayNV, false, false, IR(0, 0), IR(34530, 15), IR(0, 0), IR(56, 1), IR(26, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTraceNV, false, false, IR(403, 11), IR(34545, 8), IR(0, 0), IR(56, 1), IR(26, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTraceMotionNV, false, false, IR(490, 12), IR(34553, 14), IR(0, 0), IR(57, 1), IR(27, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTraceRayMotionNV, false, false, IR(490, 12), IR(34567, 17), IR(0, 0), IR(57, 1), IR(27, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionTriangleVertexPositionsKHR, true, true, IR(172, 4), IR(34584, 50), IR(0, 0), IR(251, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTypeAccelerationStructureKHR, true, false, IR(68, 1), IR(34634, 29), IR(100, 1), IR(252, 4), IR(168, 4), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpExecuteCallableNV, false, false, IR(36, 2), IR(34691, 18), IR(0, 0), IR(56, 1), IR(26, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetClusterIdNV, true, true, IR(172, 4), IR(34709, 23), IR(0, 0), IR(64, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetClusterIdNV, true, true, IR(160, 3), IR(34732, 24), IR(0, 0), IR(64, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTypeCooperativeMatrixNV, true, false, IR(567, 5), IR(34756, 24), IR(0, 0), IR(256, 1), IR(77, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpCooperativeMatrixLoadNV, true, true, IR(572, 6), IR(34780, 24), IR(0, 0), IR(256, 1), IR(77, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCooperativeMatrixStoreNV, false, false, IR(578, 5), IR(34804, 25), IR(0, 0), IR(256, 1), IR(77, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCooperativeMatrixMulAddNV, true, true, IR(130, 5), IR(34829, 26), IR(0, 0), IR(256, 1), IR(77, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCooperativeMatrixLengthNV, true, true, IR(160, 3), IR(34855, 26), IR(0, 0), IR(256, 1), IR(77, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpBeginInvocationInterlockEXT, false, false, IR(0, 0), IR(34881, 28), IR(0, 0), IR(257, 3), IR(78, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpEndInvocationInterlockEXT, false, false, IR(0, 0), IR(34909, 26), IR(0, 0), IR(257, 3), IR(78, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCooperativeMatrixReduceNV, true, true, IR(583, 5), IR(34978, 26), IR(0, 0), IR(260, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kArithmetic}, + {spv::Op::OpCooperativeMatrixLoadTensorNV, true, true, IR(588, 7), IR(35079, 30), IR(0, 0), IR(196, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpCooperativeMatrixStoreTensorNV, false, false, IR(595, 5), IR(35109, 31), IR(0, 0), IR(196, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpCooperativeMatrixPerElementOpNV, true, true, IR(151, 5), IR(35140, 32), IR(0, 0), IR(261, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kFunction}, + {spv::Op::OpTypeTensorLayoutNV, true, false, IR(89, 3), IR(35172, 19), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeTensorViewNV, true, false, IR(600, 4), IR(35191, 17), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpCreateTensorLayoutNV, true, true, IR(39, 2), IR(35208, 21), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTensorLayoutSetDimensionNV, true, true, IR(122, 4), IR(35229, 27), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTensorLayoutSetStrideNV, true, true, IR(122, 4), IR(35256, 24), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTensorLayoutSliceNV, true, true, IR(122, 4), IR(35280, 20), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTensorLayoutSetClampValueNV, true, true, IR(172, 4), IR(35300, 28), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCreateTensorViewNV, true, true, IR(39, 2), IR(35328, 19), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTensorViewSetDimensionNV, true, true, IR(122, 4), IR(35347, 25), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTensorViewSetStrideNV, true, true, IR(122, 4), IR(35372, 22), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpDemoteToHelperInvocation, false, false, IR(0, 0), IR(11440, 25), IR(45, 1), IR(263, 1), IR(0, 0), SPV_SPIRV_VERSION_WORD(1,6), 0xffffffffu, PrintingClass::kControl_Flow}, + {spv::Op::OpIsHelperInvocationEXT, true, true, IR(39, 2), IR(35394, 22), IR(0, 0), IR(263, 1), IR(79, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTensorViewSetClipNV, true, true, IR(325, 7), IR(35416, 20), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTensorLayoutSetBlockSizeNV, true, true, IR(122, 4), IR(35436, 27), IR(0, 0), IR(262, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpCooperativeMatrixTransposeNV, true, true, IR(160, 3), IR(35463, 29), IR(0, 0), IR(249, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpConvertUToImageNV, true, true, IR(160, 3), IR(35492, 18), IR(0, 0), IR(121, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpConvertUToSamplerNV, true, true, IR(160, 3), IR(35510, 20), IR(0, 0), IR(121, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpConvertImageToUNV, true, true, IR(160, 3), IR(35530, 18), IR(0, 0), IR(121, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpConvertSamplerToUNV, true, true, IR(160, 3), IR(35548, 20), IR(0, 0), IR(121, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpConvertUToSampledImageNV, true, true, IR(160, 3), IR(35568, 25), IR(0, 0), IR(121, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpConvertSampledImageToUNV, true, true, IR(160, 3), IR(35593, 25), IR(0, 0), IR(121, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpSamplerImageAddressingModeNV, false, false, IR(0, 1), IR(35618, 29), IR(0, 0), IR(121, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRawAccessChainNV, true, true, IR(604, 7), IR(35699, 17), IR(0, 0), IR(185, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpRayQueryGetIntersectionSpherePositionNV, true, true, IR(172, 4), IR(35716, 40), IR(0, 0), IR(61, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionSphereRadiusNV, true, true, IR(172, 4), IR(35756, 38), IR(0, 0), IR(61, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionLSSPositionsNV, true, true, IR(172, 4), IR(35794, 38), IR(0, 0), IR(62, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionLSSRadiiNV, true, true, IR(172, 4), IR(35832, 34), IR(0, 0), IR(62, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionLSSHitValueNV, true, true, IR(172, 4), IR(35866, 37), IR(0, 0), IR(62, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetSpherePositionNV, true, true, IR(160, 3), IR(35903, 29), IR(0, 0), IR(61, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetSphereRadiusNV, true, true, IR(160, 3), IR(35932, 27), IR(0, 0), IR(61, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetLSSPositionsNV, true, true, IR(160, 3), IR(35959, 27), IR(0, 0), IR(62, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectGetLSSRadiiNV, true, true, IR(160, 3), IR(35986, 23), IR(0, 0), IR(62, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectIsSphereHitNV, true, true, IR(160, 3), IR(36009, 23), IR(0, 0), IR(61, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpHitObjectIsLSSHitNV, true, true, IR(160, 3), IR(36032, 20), IR(0, 0), IR(62, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryIsSphereHitNV, true, true, IR(172, 4), IR(36052, 22), IR(0, 0), IR(61, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryIsLSSHitNV, true, true, IR(172, 4), IR(36074, 19), IR(0, 0), IR(62, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpSubgroupShuffleINTEL, true, true, IR(172, 4), IR(11888, 21), IR(0, 0), IR(264, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupShuffleDownINTEL, true, true, IR(130, 5), IR(36093, 25), IR(0, 0), IR(264, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupShuffleUpINTEL, true, true, IR(130, 5), IR(36118, 23), IR(0, 0), IR(264, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupShuffleXorINTEL, true, true, IR(172, 4), IR(36141, 24), IR(0, 0), IR(264, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupBlockReadINTEL, true, true, IR(160, 3), IR(36165, 23), IR(0, 0), IR(265, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupBlockWriteINTEL, false, false, IR(36, 2), IR(36188, 24), IR(0, 0), IR(265, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupImageBlockReadINTEL, true, true, IR(172, 4), IR(36212, 28), IR(0, 0), IR(266, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupImageBlockWriteINTEL, false, false, IR(33, 3), IR(36240, 29), IR(0, 0), IR(266, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupImageMediaBlockReadINTEL, true, true, IR(215, 6), IR(36269, 33), IR(0, 0), IR(267, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupImageMediaBlockWriteINTEL, false, false, IR(611, 5), IR(36302, 34), IR(0, 0), IR(267, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpUCountLeadingZerosINTEL, true, true, IR(160, 3), IR(36336, 24), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpUCountTrailingZerosINTEL, true, true, IR(160, 3), IR(36360, 25), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpAbsISubINTEL, true, true, IR(172, 4), IR(36385, 13), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpAbsUSubINTEL, true, true, IR(172, 4), IR(36398, 13), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpIAddSatINTEL, true, true, IR(172, 4), IR(36411, 13), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpUAddSatINTEL, true, true, IR(172, 4), IR(36424, 13), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpIAverageINTEL, true, true, IR(172, 4), IR(36437, 14), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpUAverageINTEL, true, true, IR(172, 4), IR(36451, 14), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpIAverageRoundedINTEL, true, true, IR(172, 4), IR(36465, 21), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpUAverageRoundedINTEL, true, true, IR(172, 4), IR(36486, 21), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpISubSatINTEL, true, true, IR(172, 4), IR(36507, 13), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpUSubSatINTEL, true, true, IR(172, 4), IR(36520, 13), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpIMul32x16INTEL, true, true, IR(172, 4), IR(36533, 15), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpUMul32x16INTEL, true, true, IR(172, 4), IR(36548, 15), IR(0, 0), IR(268, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpConstantFunctionPointerINTEL, true, true, IR(160, 3), IR(36563, 29), IR(0, 0), IR(194, 1), IR(93, 1), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFunctionPointerCallINTEL, true, true, IR(107, 3), IR(36592, 25), IR(0, 0), IR(194, 1), IR(93, 1), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpAsmTargetINTEL, true, false, IR(50, 2), IR(36617, 15), IR(0, 0), IR(124, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpAsmINTEL, true, true, IR(616, 6), IR(12106, 9), IR(0, 0), IR(124, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpAsmCallINTEL, true, true, IR(122, 4), IR(36632, 13), IR(0, 0), IR(124, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpAtomicFMinEXT, true, true, IR(235, 6), IR(36645, 14), IR(0, 0), IR(269, 4), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAtomicFMaxEXT, true, true, IR(235, 6), IR(36659, 14), IR(0, 0), IR(269, 4), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpAssumeTrueKHR, false, false, IR(10, 1), IR(36673, 14), IR(0, 0), IR(273, 1), IR(97, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kMiscellaneous}, + {spv::Op::OpExpectKHR, true, true, IR(172, 4), IR(36687, 10), IR(0, 0), IR(273, 1), IR(97, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kMiscellaneous}, + {spv::Op::OpDecorateString, false, false, IR(163, 2), IR(36697, 15), IR(101, 1), IR(1, 0), IR(172, 2), SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu, PrintingClass::kAnnotation}, + {spv::Op::OpMemberDecorateString, false, false, IR(165, 3), IR(36733, 21), IR(102, 1), IR(1, 0), IR(172, 2), SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu, PrintingClass::kAnnotation}, + {spv::Op::OpVmeImageINTEL, true, true, IR(172, 4), IR(36781, 14), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeVmeImageINTEL, true, false, IR(87, 2), IR(36795, 18), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcImePayloadINTEL, true, false, IR(68, 1), IR(36813, 23), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcRefPayloadINTEL, true, false, IR(68, 1), IR(36836, 23), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcSicPayloadINTEL, true, false, IR(68, 1), IR(36859, 23), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcMcePayloadINTEL, true, false, IR(68, 1), IR(36882, 23), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcMceResultINTEL, true, false, IR(68, 1), IR(36905, 22), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcImeResultINTEL, true, false, IR(68, 1), IR(36927, 22), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcImeResultSingleReferenceStreamoutINTEL, true, false, IR(68, 1), IR(36949, 46), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcImeResultDualReferenceStreamoutINTEL, true, false, IR(68, 1), IR(36995, 44), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcImeSingleReferenceStreaminINTEL, true, false, IR(68, 1), IR(37039, 39), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcImeDualReferenceStreaminINTEL, true, false, IR(68, 1), IR(37078, 37), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcRefResultINTEL, true, false, IR(68, 1), IR(37115, 22), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpTypeAvcSicResultINTEL, true, false, IR(68, 1), IR(37137, 22), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL, true, true, IR(172, 4), IR(37159, 60), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL, true, true, IR(172, 4), IR(37219, 53), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL, true, true, IR(172, 4), IR(37272, 47), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceSetInterShapePenaltyINTEL, true, true, IR(172, 4), IR(37319, 40), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL, true, true, IR(172, 4), IR(37359, 51), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceSetInterDirectionPenaltyINTEL, true, true, IR(172, 4), IR(37410, 44), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL, true, true, IR(172, 4), IR(37454, 51), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL, true, true, IR(172, 4), IR(37505, 56), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL, true, true, IR(39, 2), IR(37561, 50), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL, true, true, IR(39, 2), IR(37611, 52), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL, true, true, IR(39, 2), IR(37663, 49), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL, true, true, IR(215, 6), IR(37712, 47), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL, true, true, IR(172, 4), IR(37759, 50), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL, true, true, IR(39, 2), IR(37809, 51), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL, true, true, IR(39, 2), IR(37860, 56), IR(0, 0), IR(277, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceSetAcOnlyHaarINTEL, true, true, IR(160, 3), IR(37916, 33), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL, true, true, IR(172, 4), IR(37949, 52), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL, true, true, IR(172, 4), IR(38001, 61), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL, true, true, IR(130, 5), IR(38062, 61), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceConvertToImePayloadINTEL, true, true, IR(160, 3), IR(38123, 39), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceConvertToImeResultINTEL, true, true, IR(160, 3), IR(38162, 38), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceConvertToRefPayloadINTEL, true, true, IR(160, 3), IR(38200, 39), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceConvertToRefResultINTEL, true, true, IR(160, 3), IR(38239, 38), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceConvertToSicPayloadINTEL, true, true, IR(160, 3), IR(38277, 39), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceConvertToSicResultINTEL, true, true, IR(160, 3), IR(38316, 38), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetMotionVectorsINTEL, true, true, IR(160, 3), IR(38354, 36), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetInterDistortionsINTEL, true, true, IR(160, 3), IR(38390, 39), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetBestInterDistortionsINTEL, true, true, IR(160, 3), IR(38429, 43), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetInterMajorShapeINTEL, true, true, IR(160, 3), IR(38472, 38), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetInterMinorShapeINTEL, true, true, IR(160, 3), IR(38510, 38), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetInterDirectionsINTEL, true, true, IR(160, 3), IR(38548, 38), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetInterMotionVectorCountINTEL, true, true, IR(160, 3), IR(38586, 45), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetInterReferenceIdsINTEL, true, true, IR(160, 3), IR(38631, 40), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL, true, true, IR(130, 5), IR(38671, 62), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeInitializeINTEL, true, true, IR(130, 5), IR(38733, 30), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeSetSingleReferenceINTEL, true, true, IR(130, 5), IR(38763, 38), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeSetDualReferenceINTEL, true, true, IR(215, 6), IR(38801, 36), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeRefWindowSizeINTEL, true, true, IR(172, 4), IR(38837, 33), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeAdjustRefOffsetINTEL, true, true, IR(215, 6), IR(38870, 35), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeConvertToMcePayloadINTEL, true, true, IR(160, 3), IR(38905, 39), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeSetMaxMotionVectorCountINTEL, true, true, IR(172, 4), IR(38944, 43), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL, true, true, IR(160, 3), IR(38987, 47), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL, true, true, IR(172, 4), IR(39034, 54), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeSetWeightedSadINTEL, true, true, IR(172, 4), IR(39088, 34), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL, true, true, IR(130, 5), IR(39122, 47), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeEvaluateWithDualReferenceINTEL, true, true, IR(215, 6), IR(39169, 45), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL, true, true, IR(215, 6), IR(39214, 55), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL, true, true, IR(325, 7), IR(39269, 53), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL, true, true, IR(130, 5), IR(39322, 56), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL, true, true, IR(215, 6), IR(39378, 54), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL, true, true, IR(215, 6), IR(39432, 58), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL, true, true, IR(325, 7), IR(39490, 56), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeConvertToMceResultINTEL, true, true, IR(160, 3), IR(39546, 38), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetSingleReferenceStreaminINTEL, true, true, IR(160, 3), IR(39584, 46), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetDualReferenceStreaminINTEL, true, true, IR(160, 3), IR(39630, 44), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL, true, true, IR(160, 3), IR(39674, 49), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeStripDualReferenceStreamoutINTEL, true, true, IR(160, 3), IR(39723, 47), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL, true, true, IR(172, 4), IR(39770, 70), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL, true, true, IR(172, 4), IR(39840, 68), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL, true, true, IR(172, 4), IR(39908, 69), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL, true, true, IR(130, 5), IR(39977, 68), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL, true, true, IR(130, 5), IR(40045, 66), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL, true, true, IR(130, 5), IR(40111, 67), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetBorderReachedINTEL, true, true, IR(172, 4), IR(40178, 36), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL, true, true, IR(160, 3), IR(40214, 48), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL, true, true, IR(160, 3), IR(40262, 59), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL, true, true, IR(160, 3), IR(40321, 58), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL, true, true, IR(160, 3), IR(40379, 56), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcFmeInitializeINTEL, true, true, IR(622, 9), IR(40435, 30), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcBmeInitializeINTEL, true, true, IR(631, 10), IR(40465, 30), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcRefConvertToMcePayloadINTEL, true, true, IR(160, 3), IR(40495, 39), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcRefSetBidirectionalMixDisableINTEL, true, true, IR(160, 3), IR(40534, 46), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcRefSetBilinearFilterEnableINTEL, true, true, IR(160, 3), IR(40580, 43), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL, true, true, IR(130, 5), IR(40623, 47), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcRefEvaluateWithDualReferenceINTEL, true, true, IR(215, 6), IR(40670, 45), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL, true, true, IR(130, 5), IR(40715, 46), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL, true, true, IR(215, 6), IR(40761, 56), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcRefConvertToMceResultINTEL, true, true, IR(160, 3), IR(40817, 38), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicInitializeINTEL, true, true, IR(160, 3), IR(40855, 30), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicConfigureSkcINTEL, true, true, IR(288, 8), IR(40885, 32), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicConfigureIpeLumaINTEL, true, true, IR(631, 10), IR(40917, 36), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicConfigureIpeLumaChromaINTEL, true, true, IR(641, 13), IR(40953, 42), IR(0, 0), IR(277, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicGetMotionVectorMaskINTEL, true, true, IR(172, 4), IR(40995, 39), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicConvertToMcePayloadINTEL, true, true, IR(160, 3), IR(41034, 39), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL, true, true, IR(172, 4), IR(41073, 44), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL, true, true, IR(215, 6), IR(41117, 48), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL, true, true, IR(172, 4), IR(41165, 50), IR(0, 0), IR(277, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicSetBilinearFilterEnableINTEL, true, true, IR(160, 3), IR(41215, 43), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL, true, true, IR(172, 4), IR(41258, 48), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL, true, true, IR(172, 4), IR(41306, 43), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicEvaluateIpeINTEL, true, true, IR(172, 4), IR(41349, 31), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL, true, true, IR(130, 5), IR(41380, 47), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicEvaluateWithDualReferenceINTEL, true, true, IR(215, 6), IR(41427, 45), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL, true, true, IR(130, 5), IR(41472, 46), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL, true, true, IR(215, 6), IR(41518, 56), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicConvertToMceResultINTEL, true, true, IR(160, 3), IR(41574, 38), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicGetIpeLumaShapeINTEL, true, true, IR(160, 3), IR(41612, 35), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL, true, true, IR(160, 3), IR(41647, 44), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL, true, true, IR(160, 3), IR(41691, 46), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicGetPackedIpeLumaModesINTEL, true, true, IR(160, 3), IR(41737, 41), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicGetIpeChromaModeINTEL, true, true, IR(160, 3), IR(41778, 36), IR(0, 0), IR(277, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL, true, true, IR(160, 3), IR(41814, 50), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL, true, true, IR(160, 3), IR(41864, 48), IR(0, 0), IR(275, 2), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSubgroupAvcSicGetInterRawSadsINTEL, true, true, IR(160, 3), IR(41912, 35), IR(0, 0), IR(274, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpVariableLengthArrayINTEL, true, true, IR(160, 3), IR(12344, 25), IR(0, 0), IR(279, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpSaveMemoryINTEL, true, true, IR(39, 2), IR(41947, 16), IR(0, 0), IR(279, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpRestoreMemoryINTEL, false, false, IR(10, 1), IR(41963, 19), IR(0, 0), IR(279, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatSinCosPiINTEL, true, true, IR(654, 8), IR(41982, 28), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatCastINTEL, true, true, IR(654, 8), IR(42010, 24), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatCastFromIntINTEL, true, true, IR(654, 8), IR(42034, 31), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatCastToIntINTEL, true, true, IR(654, 8), IR(42065, 29), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatAddINTEL, true, true, IR(662, 10), IR(42094, 23), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatSubINTEL, true, true, IR(662, 10), IR(42117, 23), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatMulINTEL, true, true, IR(662, 10), IR(42140, 23), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatDivINTEL, true, true, IR(662, 10), IR(42163, 23), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatGTINTEL, true, true, IR(672, 6), IR(42186, 22), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatGEINTEL, true, true, IR(672, 6), IR(42208, 22), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatLTINTEL, true, true, IR(672, 6), IR(42230, 22), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatLEINTEL, true, true, IR(672, 6), IR(42252, 22), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatEQINTEL, true, true, IR(672, 6), IR(42274, 22), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatRecipINTEL, true, true, IR(654, 8), IR(42296, 25), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatRSqrtINTEL, true, true, IR(654, 8), IR(42321, 25), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatCbrtINTEL, true, true, IR(654, 8), IR(42346, 24), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatHypotINTEL, true, true, IR(662, 10), IR(42370, 25), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatSqrtINTEL, true, true, IR(654, 8), IR(42395, 24), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatLogINTEL, true, true, IR(654, 8), IR(42419, 23), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatLog2INTEL, true, true, IR(654, 8), IR(42442, 24), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatLog10INTEL, true, true, IR(654, 8), IR(42466, 25), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatLog1pINTEL, true, true, IR(654, 8), IR(42491, 25), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatExpINTEL, true, true, IR(654, 8), IR(42516, 23), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatExp2INTEL, true, true, IR(654, 8), IR(42539, 24), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatExp10INTEL, true, true, IR(654, 8), IR(42563, 25), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatExpm1INTEL, true, true, IR(654, 8), IR(42588, 25), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatSinINTEL, true, true, IR(654, 8), IR(42613, 23), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatCosINTEL, true, true, IR(654, 8), IR(42636, 23), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatSinCosINTEL, true, true, IR(654, 8), IR(42659, 26), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatSinPiINTEL, true, true, IR(654, 8), IR(42685, 25), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatCosPiINTEL, true, true, IR(654, 8), IR(42710, 25), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatASinINTEL, true, true, IR(654, 8), IR(42735, 24), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatASinPiINTEL, true, true, IR(654, 8), IR(42759, 26), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatACosINTEL, true, true, IR(654, 8), IR(42785, 24), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatACosPiINTEL, true, true, IR(654, 8), IR(42809, 26), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatATanINTEL, true, true, IR(654, 8), IR(42835, 24), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatATanPiINTEL, true, true, IR(654, 8), IR(42859, 26), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatATan2INTEL, true, true, IR(662, 10), IR(42885, 25), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatPowINTEL, true, true, IR(662, 10), IR(42910, 23), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatPowRINTEL, true, true, IR(662, 10), IR(42933, 24), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpArbitraryFloatPowNINTEL, true, true, IR(662, 10), IR(42957, 24), IR(0, 0), IR(280, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpLoopControlINTEL, false, false, IR(18, 1), IR(42981, 17), IR(0, 0), IR(281, 1), IR(104, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpAliasDomainDeclINTEL, true, false, IR(678, 2), IR(42998, 21), IR(0, 0), IR(130, 1), IR(111, 1), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpAliasScopeDeclINTEL, true, false, IR(680, 3), IR(43019, 20), IR(0, 0), IR(130, 1), IR(111, 1), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpAliasScopeListDeclINTEL, true, false, IR(92, 2), IR(43039, 24), IR(0, 0), IR(130, 1), IR(111, 1), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedSqrtINTEL, true, true, IR(654, 8), IR(43063, 15), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedRecipINTEL, true, true, IR(654, 8), IR(43078, 16), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedRsqrtINTEL, true, true, IR(654, 8), IR(43094, 16), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedSinINTEL, true, true, IR(654, 8), IR(43110, 14), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedCosINTEL, true, true, IR(654, 8), IR(43124, 14), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedSinCosINTEL, true, true, IR(654, 8), IR(43138, 17), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedSinPiINTEL, true, true, IR(654, 8), IR(43155, 16), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedCosPiINTEL, true, true, IR(654, 8), IR(43171, 16), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedSinCosPiINTEL, true, true, IR(654, 8), IR(43187, 19), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedLogINTEL, true, true, IR(654, 8), IR(43206, 14), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpFixedExpINTEL, true, true, IR(654, 8), IR(43220, 14), IR(0, 0), IR(184, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpPtrCastToCrossWorkgroupINTEL, true, true, IR(160, 3), IR(43234, 29), IR(0, 0), IR(195, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpCrossWorkgroupCastToPtrINTEL, true, true, IR(160, 3), IR(43263, 29), IR(0, 0), IR(195, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::k_exclude}, + {spv::Op::OpReadPipeBlockingINTEL, true, true, IR(172, 4), IR(43292, 22), IR(0, 0), IR(282, 1), IR(118, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpWritePipeBlockingINTEL, true, true, IR(172, 4), IR(43314, 23), IR(0, 0), IR(282, 1), IR(118, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kPipe}, + {spv::Op::OpFPGARegINTEL, true, true, IR(160, 3), IR(12903, 13), IR(0, 0), IR(283, 1), IR(119, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetRayTMinKHR, true, true, IR(160, 3), IR(43337, 22), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetRayFlagsKHR, true, true, IR(160, 3), IR(43359, 23), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionTKHR, true, true, IR(172, 4), IR(43382, 28), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionInstanceCustomIndexKHR, true, true, IR(172, 4), IR(43410, 46), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionInstanceIdKHR, true, true, IR(172, 4), IR(43456, 37), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR, true, true, IR(172, 4), IR(43493, 65), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionGeometryIndexKHR, true, true, IR(172, 4), IR(43558, 40), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionPrimitiveIndexKHR, true, true, IR(172, 4), IR(43598, 41), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionBarycentricsKHR, true, true, IR(172, 4), IR(43639, 39), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionFrontFaceKHR, true, true, IR(172, 4), IR(43678, 36), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionCandidateAABBOpaqueKHR, true, true, IR(160, 3), IR(43714, 46), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionObjectRayDirectionKHR, true, true, IR(172, 4), IR(43760, 45), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionObjectRayOriginKHR, true, true, IR(172, 4), IR(43805, 42), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetWorldRayDirectionKHR, true, true, IR(160, 3), IR(43847, 32), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetWorldRayOriginKHR, true, true, IR(160, 3), IR(43879, 29), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionObjectToWorldKHR, true, true, IR(172, 4), IR(43908, 40), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpRayQueryGetIntersectionWorldToObjectKHR, true, true, IR(172, 4), IR(43948, 40), IR(0, 0), IR(188, 1), IR(47, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpAtomicFAddEXT, true, true, IR(235, 6), IR(43988, 14), IR(0, 0), IR(284, 4), IR(126, 1), 0xffffffffu, 0xffffffffu, PrintingClass::kAtomic}, + {spv::Op::OpTypeBufferSurfaceINTEL, true, false, IR(100, 2), IR(44002, 23), IR(0, 0), IR(122, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpTypeStructContinuedINTEL, false, false, IR(683, 1), IR(44025, 25), IR(0, 0), IR(288, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpConstantCompositeContinuedINTEL, false, false, IR(683, 1), IR(44050, 32), IR(0, 0), IR(288, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpSpecConstantCompositeContinuedINTEL, false, false, IR(683, 1), IR(44082, 36), IR(0, 0), IR(288, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kConstant_Creation}, + {spv::Op::OpCompositeConstructContinuedINTEL, true, true, IR(107, 3), IR(44118, 33), IR(0, 0), IR(288, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kComposite}, + {spv::Op::OpConvertFToBF16INTEL, true, true, IR(160, 3), IR(44151, 20), IR(0, 0), IR(289, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpConvertBF16ToFINTEL, true, true, IR(160, 3), IR(44171, 20), IR(0, 0), IR(289, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpControlBarrierArriveINTEL, false, false, IR(221, 3), IR(44191, 26), IR(0, 0), IR(290, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kBarrier}, + {spv::Op::OpControlBarrierWaitINTEL, false, false, IR(221, 3), IR(44217, 24), IR(0, 0), IR(290, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kBarrier}, + {spv::Op::OpArithmeticFenceEXT, true, true, IR(160, 3), IR(13335, 19), IR(0, 0), IR(291, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMiscellaneous}, + {spv::Op::OpTaskSequenceCreateINTEL, true, true, IR(684, 7), IR(44241, 24), IR(0, 0), IR(292, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTaskSequenceAsyncINTEL, false, false, IR(168, 2), IR(44265, 23), IR(0, 0), IR(292, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTaskSequenceGetINTEL, true, true, IR(160, 3), IR(44288, 21), IR(0, 0), IR(292, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTaskSequenceReleaseINTEL, false, false, IR(10, 1), IR(44309, 25), IR(0, 0), IR(292, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kReserved}, + {spv::Op::OpTypeTaskSequenceINTEL, true, false, IR(68, 1), IR(44334, 22), IR(0, 0), IR(292, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kType_Declaration}, + {spv::Op::OpSubgroupBlockPrefetchINTEL, false, false, IR(139, 3), IR(44356, 27), IR(0, 0), IR(293, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroup2DBlockLoadINTEL, false, false, IR(691, 10), IR(44383, 25), IR(0, 0), IR(105, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroup2DBlockLoadTransformINTEL, false, false, IR(691, 10), IR(44408, 34), IR(0, 0), IR(294, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroup2DBlockLoadTransposeINTEL, false, false, IR(691, 10), IR(44442, 34), IR(0, 0), IR(295, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroup2DBlockPrefetchINTEL, false, false, IR(701, 9), IR(44476, 29), IR(0, 0), IR(105, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroup2DBlockStoreINTEL, false, false, IR(691, 10), IR(44505, 26), IR(0, 0), IR(105, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpSubgroupMatrixMultiplyAccumulateINTEL, true, true, IR(710, 7), IR(13673, 38), IR(0, 0), IR(296, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpBitwiseFunctionINTEL, true, true, IR(215, 6), IR(44593, 21), IR(0, 0), IR(297, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kBit}, + {spv::Op::OpGroupIMulKHR, true, true, IR(283, 5), IR(44614, 13), IR(0, 0), IR(298, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupFMulKHR, true, true, IR(283, 5), IR(44627, 13), IR(0, 0), IR(298, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupBitwiseAndKHR, true, true, IR(283, 5), IR(44640, 19), IR(0, 0), IR(298, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupBitwiseOrKHR, true, true, IR(283, 5), IR(44659, 18), IR(0, 0), IR(298, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupBitwiseXorKHR, true, true, IR(283, 5), IR(44677, 19), IR(0, 0), IR(298, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupLogicalAndKHR, true, true, IR(283, 5), IR(44696, 19), IR(0, 0), IR(298, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupLogicalOrKHR, true, true, IR(283, 5), IR(44715, 18), IR(0, 0), IR(298, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpGroupLogicalXorKHR, true, true, IR(283, 5), IR(44733, 19), IR(0, 0), IR(298, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kGroup}, + {spv::Op::OpRoundFToTF32INTEL, true, true, IR(160, 3), IR(44752, 18), IR(0, 0), IR(299, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kConversion}, + {spv::Op::OpMaskedGatherINTEL, true, true, IR(717, 6), IR(44770, 18), IR(0, 0), IR(300, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpMaskedScatterINTEL, false, false, IR(723, 4), IR(44788, 19), IR(0, 0), IR(300, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kMemory}, + {spv::Op::OpConvertHandleToImageINTEL, true, true, IR(160, 3), IR(44807, 26), IR(0, 0), IR(301, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpConvertHandleToSamplerINTEL, true, true, IR(160, 3), IR(44833, 28), IR(0, 0), IR(301, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, + {spv::Op::OpConvertHandleToSampledImageINTEL, true, true, IR(160, 3), IR(44861, 33), IR(0, 0), IR(301, 1), IR(0, 0), 0xffffffffu, 0xffffffffu, PrintingClass::kImage}, +}}; + +// Opcode strings (without the 'Op' prefix) and opcode values, ordered by name. +// The fields in order are: +// name, either the primary name or an alias, indexing into kStrings +// index into kInstructionDesc +static const std::array kInstructionNames{{ + {IR(36385, 13), 541}, // 0 AbsISubINTEL + {IR(36398, 13), 542}, // 1 AbsUSubINTEL + {IR(26453, 12), 58}, // 2 AccessChain + {IR(42998, 21), 727}, // 3 AliasDomainDeclINTEL + {IR(43019, 20), 728}, // 4 AliasScopeDeclINTEL + {IR(43039, 24), 729}, // 5 AliasScopeListDeclINTEL + {IR(27750, 4), 143}, // 6 All + {IR(32909, 25), 413}, // 7 AllocateNodePayloadsAMDX + {IR(27746, 4), 142}, // 8 Any + {IR(42785, 24), 718}, // 9 ArbitraryFloatACosINTEL + {IR(42809, 26), 719}, // 10 ArbitraryFloatACosPiINTEL + {IR(42735, 24), 716}, // 11 ArbitraryFloatASinINTEL + {IR(42759, 26), 717}, // 12 ArbitraryFloatASinPiINTEL + {IR(42885, 25), 722}, // 13 ArbitraryFloatATan2INTEL + {IR(42835, 24), 720}, // 14 ArbitraryFloatATanINTEL + {IR(42859, 26), 721}, // 15 ArbitraryFloatATanPiINTEL + {IR(42094, 23), 689}, // 16 ArbitraryFloatAddINTEL + {IR(42034, 31), 687}, // 17 ArbitraryFloatCastFromIntINTEL + {IR(42010, 24), 686}, // 18 ArbitraryFloatCastINTEL + {IR(42065, 29), 688}, // 19 ArbitraryFloatCastToIntINTEL + {IR(42346, 24), 700}, // 20 ArbitraryFloatCbrtINTEL + {IR(42636, 23), 712}, // 21 ArbitraryFloatCosINTEL + {IR(42710, 25), 715}, // 22 ArbitraryFloatCosPiINTEL + {IR(42163, 23), 692}, // 23 ArbitraryFloatDivINTEL + {IR(42274, 22), 697}, // 24 ArbitraryFloatEQINTEL + {IR(42563, 25), 709}, // 25 ArbitraryFloatExp10INTEL + {IR(42539, 24), 708}, // 26 ArbitraryFloatExp2INTEL + {IR(42516, 23), 707}, // 27 ArbitraryFloatExpINTEL + {IR(42588, 25), 710}, // 28 ArbitraryFloatExpm1INTEL + {IR(42208, 22), 694}, // 29 ArbitraryFloatGEINTEL + {IR(42186, 22), 693}, // 30 ArbitraryFloatGTINTEL + {IR(42370, 25), 701}, // 31 ArbitraryFloatHypotINTEL + {IR(42252, 22), 696}, // 32 ArbitraryFloatLEINTEL + {IR(42230, 22), 695}, // 33 ArbitraryFloatLTINTEL + {IR(42466, 25), 705}, // 34 ArbitraryFloatLog10INTEL + {IR(42491, 25), 706}, // 35 ArbitraryFloatLog1pINTEL + {IR(42442, 24), 704}, // 36 ArbitraryFloatLog2INTEL + {IR(42419, 23), 703}, // 37 ArbitraryFloatLogINTEL + {IR(42140, 23), 691}, // 38 ArbitraryFloatMulINTEL + {IR(42910, 23), 723}, // 39 ArbitraryFloatPowINTEL + {IR(42957, 24), 725}, // 40 ArbitraryFloatPowNINTEL + {IR(42933, 24), 724}, // 41 ArbitraryFloatPowRINTEL + {IR(42321, 25), 699}, // 42 ArbitraryFloatRSqrtINTEL + {IR(42296, 25), 698}, // 43 ArbitraryFloatRecipINTEL + {IR(42659, 26), 713}, // 44 ArbitraryFloatSinCosINTEL + {IR(41982, 28), 685}, // 45 ArbitraryFloatSinCosPiINTEL + {IR(42613, 23), 711}, // 46 ArbitraryFloatSinINTEL + {IR(42685, 25), 714}, // 47 ArbitraryFloatSinPiINTEL + {IR(42395, 24), 702}, // 48 ArbitraryFloatSqrtINTEL + {IR(42117, 23), 690}, // 49 ArbitraryFloatSubINTEL + {IR(13335, 19), 773}, // 50 ArithmeticFenceEXT + {IR(26500, 12), 61}, // 51 ArrayLength + {IR(36632, 13), 557}, // 52 AsmCallINTEL + {IR(12106, 9), 556}, // 53 AsmINTEL + {IR(36617, 15), 555}, // 54 AsmTargetINTEL + {IR(36673, 14), 560}, // 55 AssumeTrueKHR + {IR(28772, 10), 220}, // 56 AtomicAnd + {IR(28624, 22), 210}, // 57 AtomicCompareExchange + {IR(28646, 26), 211}, // 58 AtomicCompareExchangeWeak + {IR(28609, 15), 209}, // 59 AtomicExchange + {IR(43988, 14), 763}, // 60 AtomicFAddEXT + {IR(36659, 14), 559}, // 61 AtomicFMaxEXT + {IR(36645, 14), 558}, // 62 AtomicFMinEXT + {IR(30157, 16), 292}, // 63 AtomicFlagClear + {IR(30136, 21), 291}, // 64 AtomicFlagTestAndSet + {IR(28706, 11), 214}, // 65 AtomicIAdd + {IR(28689, 17), 213}, // 66 AtomicIDecrement + {IR(28672, 17), 212}, // 67 AtomicIIncrement + {IR(28717, 11), 215}, // 68 AtomicISub + {IR(28586, 11), 207}, // 69 AtomicLoad + {IR(28782, 9), 221}, // 70 AtomicOr + {IR(28750, 11), 218}, // 71 AtomicSMax + {IR(28728, 11), 216}, // 72 AtomicSMin + {IR(28597, 12), 208}, // 73 AtomicStore + {IR(28761, 11), 219}, // 74 AtomicUMax + {IR(28739, 11), 217}, // 75 AtomicUMin + {IR(28791, 10), 222}, // 76 AtomicXor + {IR(34881, 28), 487}, // 77 BeginInvocationInterlockEXT + {IR(28370, 9), 191}, // 78 BitCount + {IR(28310, 15), 187}, // 79 BitFieldInsert + {IR(28325, 17), 188}, // 80 BitFieldSExtract + {IR(28342, 17), 189}, // 81 BitFieldUExtract + {IR(28359, 11), 190}, // 82 BitReverse + {IR(27498, 8), 114}, // 83 Bitcast + {IR(28295, 11), 185}, // 84 BitwiseAnd + {IR(44593, 21), 786}, // 85 BitwiseFunctionINTEL + {IR(28274, 10), 183}, // 86 BitwiseOr + {IR(28284, 11), 184}, // 87 BitwiseXor + {IR(28901, 7), 227}, // 88 Branch + {IR(28908, 18), 228}, // 89 BranchConditional + {IR(29769, 13), 277}, // 90 BuildNDRange + {IR(25514, 11), 15}, // 91 Capability + {IR(29727, 26), 275}, // 92 CaptureEventProfilingInfo + {IR(31233, 23), 344}, // 93 ColorAttachmentReadEXT + {IR(29319, 15), 255}, // 94 CommitReadPipe + {IR(29334, 16), 256}, // 95 CommitWritePipe + {IR(26760, 19), 72}, // 96 CompositeConstruct + {IR(44118, 33), 768}, // 97 CompositeConstructContinuedINTEL + {IR(32266, 31), 386}, // 98 CompositeConstructReplicateEXT + {IR(26779, 17), 73}, // 99 CompositeExtract + {IR(26796, 16), 74}, // 100 CompositeInsert + {IR(15254, 9), 39}, // 101 Constant + {IR(26020, 18), 40}, // 102 ConstantComposite + {IR(44050, 32), 766}, // 103 ConstantCompositeContinuedINTEL + {IR(32202, 30), 384}, // 104 ConstantCompositeReplicateEXT + {IR(25968, 14), 38}, // 105 ConstantFalse + {IR(36563, 29), 553}, // 106 ConstantFunctionPointerINTEL + {IR(26132, 13), 42}, // 107 ConstantNull + {IR(30212, 20), 296}, // 108 ConstantPipeStorage + {IR(26116, 16), 41}, // 109 ConstantSampler + {IR(33062, 19), 419}, // 110 ConstantStringAMDX + {IR(25955, 13), 37}, // 111 ConstantTrue + {IR(28557, 15), 205}, // 112 ControlBarrier + {IR(44191, 26), 771}, // 113 ControlBarrierArriveINTEL + {IR(44217, 24), 772}, // 114 ControlBarrierWaitINTEL + {IR(44171, 20), 770}, // 115 ConvertBF16ToFINTEL + {IR(44151, 20), 769}, // 116 ConvertFToBF16INTEL + {IR(27304, 12), 100}, // 117 ConvertFToS + {IR(27292, 12), 99}, // 118 ConvertFToU + {IR(44807, 26), 798}, // 119 ConvertHandleToImageINTEL + {IR(44861, 33), 800}, // 120 ConvertHandleToSampledImageINTEL + {IR(44833, 28), 799}, // 121 ConvertHandleToSamplerINTEL + {IR(35530, 18), 510}, // 122 ConvertImageToUNV + {IR(27381, 14), 107}, // 123 ConvertPtrToU + {IR(27316, 12), 101}, // 124 ConvertSToF + {IR(35593, 25), 513}, // 125 ConvertSampledImageToUNV + {IR(35548, 20), 511}, // 126 ConvertSamplerToUNV + {IR(31780, 35), 370}, // 127 ConvertUToAccelerationStructureKHR + {IR(27328, 12), 102}, // 128 ConvertUToF + {IR(35492, 18), 508}, // 129 ConvertUToImageNV + {IR(27425, 14), 110}, // 130 ConvertUToPtr + {IR(35568, 25), 512}, // 131 ConvertUToSampledImageNV + {IR(35510, 20), 509}, // 132 ConvertUToSamplerNV + {IR(34222, 27), 462}, // 133 CooperativeMatrixConvertNV + {IR(32175, 27), 383}, // 134 CooperativeMatrixLengthKHR + {IR(34855, 26), 486}, // 135 CooperativeMatrixLengthNV + {IR(32043, 25), 380}, // 136 CooperativeMatrixLoadKHR + {IR(34780, 24), 483}, // 137 CooperativeMatrixLoadNV + {IR(35079, 30), 490}, // 138 CooperativeMatrixLoadTensorNV + {IR(32148, 27), 382}, // 139 CooperativeMatrixMulAddKHR + {IR(34829, 26), 485}, // 140 CooperativeMatrixMulAddNV + {IR(35140, 32), 492}, // 141 CooperativeMatrixPerElementOpNV + {IR(34978, 26), 489}, // 142 CooperativeMatrixReduceNV + {IR(32068, 26), 381}, // 143 CooperativeMatrixStoreKHR + {IR(34804, 25), 484}, // 144 CooperativeMatrixStoreNV + {IR(35109, 31), 491}, // 145 CooperativeMatrixStoreTensorNV + {IR(35463, 29), 507}, // 146 CooperativeMatrixTransposeNV + {IR(34417, 24), 469}, // 147 CooperativeVectorLoadNV + {IR(34190, 32), 461}, // 148 CooperativeVectorMatrixMulAddNV + {IR(34080, 29), 458}, // 149 CooperativeVectorMatrixMulNV + {IR(34109, 42), 459}, // 150 CooperativeVectorOuterProductAccumulateNV + {IR(34151, 39), 460}, // 151 CooperativeVectorReduceSumAccumulateNV + {IR(34441, 25), 470}, // 152 CooperativeVectorStoreNV + {IR(31192, 12), 340}, // 153 CopyLogical + {IR(26426, 11), 56}, // 154 CopyMemory + {IR(26437, 16), 57}, // 155 CopyMemorySized + {IR(26812, 11), 75}, // 156 CopyObject + {IR(30232, 26), 297}, // 157 CreatePipeFromPipeStorage + {IR(35208, 21), 495}, // 158 CreateTensorLayoutNV + {IR(35328, 19), 500}, // 159 CreateTensorViewNV + {IR(29679, 16), 272}, // 160 CreateUserEvent + {IR(43263, 29), 742}, // 161 CrossWorkgroupCastToPtrINTEL + {IR(28379, 5), 192}, // 162 DPdx + {IR(28425, 11), 198}, // 163 DPdxCoarse + {IR(28396, 9), 195}, // 164 DPdxFine + {IR(28384, 5), 193}, // 165 DPdy + {IR(28436, 11), 199}, // 166 DPdyCoarse + {IR(28405, 9), 196}, // 167 DPdyFine + {IR(26586, 9), 64}, // 168 Decorate + {IR(30409, 11), 305}, // 169 DecorateId + {IR(36697, 15), 562}, // 170 DecorateString + {IR(36712, 21), 562}, // 171 DecorateStringGOOGLE + {IR(26610, 16), 66}, // 172 DecorationGroup + {IR(11440, 25), 503}, // 173 DemoteToHelperInvocation + {IR(11465, 28), 503}, // 174 DemoteToHelperInvocationEXT + {IR(31256, 23), 345}, // 175 DepthAttachmentReadEXT + {IR(27695, 4), 137}, // 176 Dot + {IR(34249, 17), 463}, // 177 EmitMeshTasksEXT + {IR(28484, 17), 203}, // 178 EmitStreamVertex + {IR(28460, 11), 201}, // 179 EmitVertex + {IR(34909, 26), 488}, // 180 EndInvocationInterlockEXT + {IR(28471, 13), 202}, // 181 EndPrimitive + {IR(28501, 19), 204}, // 182 EndStreamPrimitive + {IR(29515, 14), 265}, // 183 EnqueueKernel + {IR(29501, 14), 264}, // 184 EnqueueMarker + {IR(32934, 24), 414}, // 185 EnqueueNodePayloadsAMDX + {IR(25429, 11), 13}, // 186 EntryPoint + {IR(31761, 19), 369}, // 187 ExecuteCallableKHR + {IR(34691, 18), 479}, // 188 ExecuteCallableNV + {IR(25472, 14), 14}, // 189 ExecutionMode + {IR(30393, 16), 304}, // 190 ExecutionModeId + {IR(36687, 10), 561}, // 191 ExpectKHR + {IR(25283, 8), 11}, // 192 ExtInst + {IR(25223, 14), 10}, // 193 ExtInstImport + {IR(31723, 26), 367}, // 194 ExtInstWithForwardRefsKHR + {IR(25213, 10), 9}, // 195 Extension + {IR(27527, 5), 118}, // 196 FAdd + {IR(27358, 9), 105}, // 197 FConvert + {IR(27562, 5), 125}, // 198 FDiv + {IR(27587, 5), 130}, // 199 FMod + {IR(27547, 5), 122}, // 200 FMul + {IR(27514, 8), 116}, // 201 FNegate + {IR(28024, 10), 168}, // 202 FOrdEqual + {IR(28102, 16), 174}, // 203 FOrdGreaterThan + {IR(28174, 21), 178}, // 204 FOrdGreaterThanEqual + {IR(28074, 13), 172}, // 205 FOrdLessThan + {IR(28136, 18), 176}, // 206 FOrdLessThanEqual + {IR(28046, 13), 170}, // 207 FOrdNotEqual + {IR(12903, 13), 745}, // 208 FPGARegINTEL + {IR(27582, 5), 129}, // 209 FRem + {IR(27537, 5), 120}, // 210 FSub + {IR(28034, 12), 169}, // 211 FUnordEqual + {IR(28118, 18), 175}, // 212 FUnordGreaterThan + {IR(28195, 23), 179}, // 213 FUnordGreaterThanEqual + {IR(28087, 15), 173}, // 214 FUnordLessThan + {IR(28154, 20), 177}, // 215 FUnordLessThanEqual + {IR(28059, 15), 171}, // 216 FUnordNotEqual + {IR(34379, 38), 468}, // 217 FetchMicroTriangleVertexBarycentricNV + {IR(34344, 35), 467}, // 218 FetchMicroTriangleVertexPositionNV + {IR(32983, 29), 416}, // 219 FinishWritingNodePayloadAMDX + {IR(43124, 14), 734}, // 220 FixedCosINTEL + {IR(43171, 16), 737}, // 221 FixedCosPiINTEL + {IR(43220, 14), 740}, // 222 FixedExpINTEL + {IR(43206, 14), 739}, // 223 FixedLogINTEL + {IR(43078, 16), 731}, // 224 FixedRecipINTEL + {IR(43094, 16), 732}, // 225 FixedRsqrtINTEL + {IR(43138, 17), 735}, // 226 FixedSinCosINTEL + {IR(43187, 19), 738}, // 227 FixedSinCosPiINTEL + {IR(43110, 14), 733}, // 228 FixedSinINTEL + {IR(43155, 16), 736}, // 229 FixedSinPiINTEL + {IR(43063, 15), 730}, // 230 FixedSqrtINTEL + {IR(32879, 17), 411}, // 231 FragmentFetchAMD + {IR(32858, 21), 410}, // 232 FragmentMaskFetchAMD + {IR(24333, 9), 48}, // 233 Function + {IR(26335, 13), 51}, // 234 FunctionCall + {IR(26323, 12), 50}, // 235 FunctionEnd + {IR(26305, 18), 49}, // 236 FunctionParameter + {IR(36592, 25), 554}, // 237 FunctionPointerCallINTEL + {IR(28389, 7), 194}, // 238 Fwidth + {IR(28447, 13), 200}, // 239 FwidthCoarse + {IR(28414, 11), 197}, // 240 FwidthFine + {IR(27456, 17), 112}, // 241 GenericCastToPtr + {IR(27473, 25), 113}, // 242 GenericCastToPtrExplicit + {IR(26512, 23), 62}, // 243 GenericPtrMemSemantics + {IR(29753, 16), 276}, // 244 GetDefaultQueue + {IR(30258, 35), 298}, // 245 GetKernelLocalSizeForSubgroupCount + {IR(30293, 25), 299}, // 246 GetKernelMaxNumSubgroups + {IR(29559, 32), 267}, // 247 GetKernelNDrangeMaxSubGroupSize + {IR(29529, 30), 266}, // 248 GetKernelNDrangeSubGroupCount + {IR(29614, 40), 269}, // 249 GetKernelPreferredWorkGroupSizeMultiple + {IR(29591, 23), 268}, // 250 GetKernelWorkGroupSize + {IR(29385, 18), 259}, // 251 GetMaxPipePackets + {IR(29367, 18), 258}, // 252 GetNumPipePackets + {IR(29072, 9), 238}, // 253 GroupAll + {IR(29081, 9), 239}, // 254 GroupAny + {IR(29041, 15), 236}, // 255 GroupAsyncCopy + {IR(44640, 19), 789}, // 256 GroupBitwiseAndKHR + {IR(44659, 18), 790}, // 257 GroupBitwiseOrKHR + {IR(44677, 19), 791}, // 258 GroupBitwiseXorKHR + {IR(29090, 15), 240}, // 259 GroupBroadcast + {IR(29460, 20), 262}, // 260 GroupCommitReadPipe + {IR(29480, 21), 263}, // 261 GroupCommitWritePipe + {IR(26626, 14), 67}, // 262 GroupDecorate + {IR(29148, 10), 242}, // 263 GroupFAdd + {IR(32697, 23), 403}, // 264 GroupFAddNonUniformAMD + {IR(29188, 10), 246}, // 265 GroupFMax + {IR(32789, 23), 407}, // 266 GroupFMaxNonUniformAMD + {IR(29158, 10), 243}, // 267 GroupFMin + {IR(32720, 23), 404}, // 268 GroupFMinNonUniformAMD + {IR(44627, 13), 788}, // 269 GroupFMulKHR + {IR(29138, 10), 241}, // 270 GroupIAdd + {IR(32674, 23), 402}, // 271 GroupIAddNonUniformAMD + {IR(44614, 13), 787}, // 272 GroupIMulKHR + {IR(44696, 19), 792}, // 273 GroupLogicalAndKHR + {IR(44715, 18), 793}, // 274 GroupLogicalOrKHR + {IR(44733, 19), 794}, // 275 GroupLogicalXorKHR + {IR(26685, 20), 68}, // 276 GroupMemberDecorate + {IR(30441, 19), 307}, // 277 GroupNonUniformAll + {IR(30479, 24), 309}, // 278 GroupNonUniformAllEqual + {IR(30460, 19), 308}, // 279 GroupNonUniformAny + {IR(5569, 22), 312}, // 280 GroupNonUniformBallot + {IR(30619, 30), 315}, // 281 GroupNonUniformBallotBitCount + {IR(30587, 32), 314}, // 282 GroupNonUniformBallotBitExtract + {IR(30649, 29), 316}, // 283 GroupNonUniformBallotFindLSB + {IR(30678, 29), 317}, // 284 GroupNonUniformBallotFindMSB + {IR(30985, 26), 332}, // 285 GroupNonUniformBitwiseAnd + {IR(31011, 25), 333}, // 286 GroupNonUniformBitwiseOr + {IR(31036, 26), 334}, // 287 GroupNonUniformBitwiseXor + {IR(30503, 25), 310}, // 288 GroupNonUniformBroadcast + {IR(30528, 30), 311}, // 289 GroupNonUniformBroadcastFirst + {IR(30420, 21), 306}, // 290 GroupNonUniformElect + {IR(30805, 20), 323}, // 291 GroupNonUniformFAdd + {IR(30965, 20), 331}, // 292 GroupNonUniformFMax + {IR(30905, 20), 328}, // 293 GroupNonUniformFMin + {IR(30845, 20), 325}, // 294 GroupNonUniformFMul + {IR(30785, 20), 322}, // 295 GroupNonUniformIAdd + {IR(30825, 20), 324}, // 296 GroupNonUniformIMul + {IR(30558, 29), 313}, // 297 GroupNonUniformInverseBallot + {IR(31062, 26), 335}, // 298 GroupNonUniformLogicalAnd + {IR(31088, 25), 336}, // 299 GroupNonUniformLogicalOr + {IR(31113, 26), 337}, // 300 GroupNonUniformLogicalXor + {IR(34284, 27), 465}, // 301 GroupNonUniformPartitionNV + {IR(33104, 26), 421}, // 302 GroupNonUniformQuadAllKHR + {IR(33130, 26), 422}, // 303 GroupNonUniformQuadAnyKHR + {IR(31139, 29), 338}, // 304 GroupNonUniformQuadBroadcast + {IR(31168, 24), 339}, // 305 GroupNonUniformQuadSwap + {IR(13128, 25), 365}, // 306 GroupNonUniformRotateKHR + {IR(30925, 20), 329}, // 307 GroupNonUniformSMax + {IR(30865, 20), 326}, // 308 GroupNonUniformSMin + {IR(8659, 23), 318}, // 309 GroupNonUniformShuffle + {IR(30758, 27), 321}, // 310 GroupNonUniformShuffleDown + {IR(30733, 25), 320}, // 311 GroupNonUniformShuffleUp + {IR(30707, 26), 319}, // 312 GroupNonUniformShuffleXor + {IR(30945, 20), 330}, // 313 GroupNonUniformUMax + {IR(30885, 20), 327}, // 314 GroupNonUniformUMin + {IR(29403, 28), 260}, // 315 GroupReserveReadPipePackets + {IR(29431, 29), 261}, // 316 GroupReserveWritePipePackets + {IR(29208, 10), 248}, // 317 GroupSMax + {IR(32835, 23), 409}, // 318 GroupSMaxNonUniformAMD + {IR(29178, 10), 245}, // 319 GroupSMin + {IR(32766, 23), 406}, // 320 GroupSMinNonUniformAMD + {IR(29198, 10), 247}, // 321 GroupUMax + {IR(32812, 23), 408}, // 322 GroupUMaxNonUniformAMD + {IR(29168, 10), 244}, // 323 GroupUMin + {IR(32743, 23), 405}, // 324 GroupUMinNonUniformAMD + {IR(29056, 16), 237}, // 325 GroupWaitEvents + {IR(33591, 25), 438}, // 326 HitObjectExecuteShaderNV + {IR(33642, 25), 440}, // 327 HitObjectGetAttributesNV + {IR(34732, 24), 481}, // 328 HitObjectGetClusterIdNV + {IR(33616, 26), 439}, // 329 HitObjectGetCurrentTimeNV + {IR(33718, 28), 443}, // 330 HitObjectGetGeometryIndexNV + {IR(33667, 22), 441}, // 331 HitObjectGetHitKindNV + {IR(33771, 34), 445}, // 332 HitObjectGetInstanceCustomIndexNV + {IR(33746, 25), 444}, // 333 HitObjectGetInstanceIdNV + {IR(35959, 27), 523}, // 334 HitObjectGetLSSPositionsNV + {IR(35986, 23), 524}, // 335 HitObjectGetLSSRadiiNV + {IR(33303, 33), 428}, // 336 HitObjectGetObjectRayDirectionNV + {IR(33336, 30), 429}, // 337 HitObjectGetObjectRayOriginNV + {IR(33275, 28), 427}, // 338 HitObjectGetObjectToWorldNV + {IR(33689, 29), 442}, // 339 HitObjectGetPrimitiveIndexNV + {IR(33866, 22), 448}, // 340 HitObjectGetRayTMaxNV + {IR(33888, 22), 449}, // 341 HitObjectGetRayTMinNV + {IR(33431, 44), 432}, // 342 HitObjectGetShaderBindingTableRecordIndexNV + {IR(33392, 39), 431}, // 343 HitObjectGetShaderRecordBufferHandleNV + {IR(35903, 29), 521}, // 344 HitObjectGetSpherePositionNV + {IR(35932, 27), 522}, // 345 HitObjectGetSphereRadiusNV + {IR(33805, 32), 446}, // 346 HitObjectGetWorldRayDirectionNV + {IR(33837, 29), 447}, // 347 HitObjectGetWorldRayOriginNV + {IR(33247, 28), 426}, // 348 HitObjectGetWorldToObjectNV + {IR(33910, 19), 450}, // 349 HitObjectIsEmptyNV + {IR(33929, 17), 451}, // 350 HitObjectIsHitNV + {IR(36032, 20), 526}, // 351 HitObjectIsLSSHitNV + {IR(33946, 18), 452}, // 352 HitObjectIsMissNV + {IR(36009, 23), 525}, // 353 HitObjectIsSphereHitNV + {IR(33475, 23), 433}, // 354 HitObjectRecordEmptyNV + {IR(33156, 27), 423}, // 355 HitObjectRecordHitMotionNV + {IR(33518, 21), 435}, // 356 HitObjectRecordHitNV + {IR(33183, 36), 424}, // 357 HitObjectRecordHitWithIndexMotionNV + {IR(33539, 30), 436}, // 358 HitObjectRecordHitWithIndexNV + {IR(33219, 28), 425}, // 359 HitObjectRecordMissMotionNV + {IR(33569, 22), 437}, // 360 HitObjectRecordMissNV + {IR(33366, 26), 430}, // 361 HitObjectTraceRayMotionNV + {IR(33498, 20), 434}, // 362 HitObjectTraceRayNV + {IR(27522, 5), 117}, // 363 IAdd + {IR(27699, 10), 138}, // 364 IAddCarry + {IR(36411, 13), 543}, // 365 IAddSatINTEL + {IR(36437, 14), 545}, // 366 IAverageINTEL + {IR(36465, 21), 547}, // 367 IAverageRoundedINTEL + {IR(27895, 7), 158}, // 368 IEqual + {IR(27542, 5), 121}, // 369 IMul + {IR(36533, 15), 551}, // 370 IMul32x16INTEL + {IR(27902, 10), 159}, // 371 INotEqual + {IR(27532, 5), 119}, // 372 ISub + {IR(27709, 11), 139}, // 373 ISubBorrow + {IR(36507, 13), 549}, // 374 ISubSatINTEL + {IR(31815, 22), 371}, // 375 IgnoreIntersectionKHR + {IR(34509, 21), 472}, // 376 IgnoreIntersectionNV + {IR(24377, 6), 91}, // 377 Image + {IR(32645, 29), 401}, // 378 ImageBlockMatchGatherSADQCOM + {IR(32616, 29), 400}, // 379 ImageBlockMatchGatherSSDQCOM + {IR(32535, 23), 397}, // 380 ImageBlockMatchSADQCOM + {IR(32512, 23), 396}, // 381 ImageBlockMatchSSDQCOM + {IR(32587, 29), 399}, // 382 ImageBlockMatchWindowSADQCOM + {IR(32558, 29), 398}, // 383 ImageBlockMatchWindowSSDQCOM + {IR(32493, 19), 395}, // 384 ImageBoxFilterQCOM + {IR(27140, 16), 88}, // 385 ImageDrefGather + {IR(27117, 11), 86}, // 386 ImageFetch + {IR(27128, 12), 87}, // 387 ImageGather + {IR(27177, 17), 92}, // 388 ImageQueryFormat + {IR(27257, 17), 97}, // 389 ImageQueryLevels + {IR(27243, 14), 96}, // 390 ImageQueryLod + {IR(27194, 16), 93}, // 391 ImageQueryOrder + {IR(27274, 18), 98}, // 392 ImageQuerySamples + {IR(27228, 15), 95}, // 393 ImageQuerySize + {IR(27210, 18), 94}, // 394 ImageQuerySizeLod + {IR(27156, 10), 89}, // 395 ImageRead + {IR(26974, 27), 81}, // 396 ImageSampleDrefExplicitLod + {IR(26947, 27), 80}, // 397 ImageSampleDrefImplicitLod + {IR(26924, 23), 79}, // 398 ImageSampleExplicitLod + {IR(34033, 23), 456}, // 399 ImageSampleFootprintNV + {IR(26878, 23), 78}, // 400 ImageSampleImplicitLod + {IR(27086, 31), 85}, // 401 ImageSampleProjDrefExplicitLod + {IR(27055, 31), 84}, // 402 ImageSampleProjDrefImplicitLod + {IR(27028, 27), 83}, // 403 ImageSampleProjExplicitLod + {IR(27001, 27), 82}, // 404 ImageSampleProjImplicitLod + {IR(32469, 24), 394}, // 405 ImageSampleWeightedQCOM + {IR(30081, 22), 288}, // 406 ImageSparseDrefGather + {IR(30046, 17), 286}, // 407 ImageSparseFetch + {IR(30063, 18), 287}, // 408 ImageSparseGather + {IR(30173, 16), 293}, // 409 ImageSparseRead + {IR(29873, 33), 281}, // 410 ImageSparseSampleDrefExplicitLod + {IR(29840, 33), 280}, // 411 ImageSparseSampleDrefImplicitLod + {IR(29811, 29), 279}, // 412 ImageSparseSampleExplicitLod + {IR(29782, 29), 278}, // 413 ImageSparseSampleImplicitLod + {IR(30009, 37), 285}, // 414 ImageSparseSampleProjDrefExplicitLod + {IR(29972, 37), 284}, // 415 ImageSparseSampleProjDrefImplicitLod + {IR(29939, 33), 283}, // 416 ImageSparseSampleProjExplicitLod + {IR(29906, 33), 282}, // 417 ImageSparseSampleProjImplicitLod + {IR(30103, 26), 289}, // 418 ImageSparseTexelsResident + {IR(26357, 18), 53}, // 419 ImageTexelPointer + {IR(27166, 11), 90}, // 420 ImageWrite + {IR(26465, 20), 59}, // 421 InBoundsAccessChain + {IR(26535, 23), 63}, // 422 InBoundsPtrAccessChain + {IR(27766, 9), 146}, // 423 IsFinite + {IR(35394, 22), 504}, // 424 IsHelperInvocationEXT + {IR(27760, 6), 145}, // 425 IsInf + {IR(27754, 6), 144}, // 426 IsNan + {IR(33039, 23), 418}, // 427 IsNodePayloadValidAMDX + {IR(27775, 9), 147}, // 428 IsNormal + {IR(29695, 13), 273}, // 429 IsValidEvent + {IR(29350, 17), 257}, // 430 IsValidReserveId + {IR(28978, 5), 230}, // 431 Kill + {IR(28895, 6), 226}, // 432 Label + {IR(27795, 14), 149}, // 433 LessOrGreater + {IR(29014, 14), 234}, // 434 LifetimeStart + {IR(29028, 13), 235}, // 435 LifetimeStop + {IR(25208, 5), 8}, // 436 Line + {IR(26415, 5), 54}, // 437 Load + {IR(27866, 11), 155}, // 438 LogicalAnd + {IR(27827, 13), 152}, // 439 LogicalEqual + {IR(27877, 11), 156}, // 440 LogicalNot + {IR(27840, 16), 153}, // 441 LogicalNotEqual + {IR(27856, 10), 154}, // 442 LogicalOr + {IR(42981, 17), 726}, // 443 LoopControlINTEL + {IR(28835, 10), 224}, // 444 LoopMerge + {IR(44770, 18), 796}, // 445 MaskedGatherINTEL + {IR(44788, 19), 797}, // 446 MaskedScatterINTEL + {IR(27664, 18), 135}, // 447 MatrixTimesMatrix + {IR(27610, 18), 132}, // 448 MatrixTimesScalar + {IR(27646, 18), 134}, // 449 MatrixTimesVector + {IR(26595, 15), 65}, // 450 MemberDecorate + {IR(36733, 21), 563}, // 451 MemberDecorateString + {IR(36754, 27), 563}, // 452 MemberDecorateStringGOOGLE + {IR(25190, 11), 6}, // 453 MemberName + {IR(28572, 14), 206}, // 454 MemoryBarrier + {IR(25355, 12), 12}, // 455 MemoryModel + {IR(30358, 19), 302}, // 456 MemoryNamedBarrier + {IR(30377, 16), 303}, // 457 ModuleProcessed + {IR(25185, 5), 5}, // 458 Name + {IR(30335, 23), 301}, // 459 NamedBarrierInitialize + {IR(30129, 7), 290}, // 460 NoLine + {IR(33012, 27), 417}, // 461 NodePayloadArrayLengthAMDX + {IR(24981, 4), 0}, // 462 Nop + {IR(28306, 4), 186}, // 463 Not + {IR(27809, 8), 150}, // 464 Ordered + {IR(27682, 13), 136}, // 465 OuterProduct + {IR(28801, 4), 223}, // 466 Phi + {IR(26485, 15), 60}, // 467 PtrAccessChain + {IR(43234, 29), 741}, // 468 PtrCastToCrossWorkgroupINTEL + {IR(27439, 17), 111}, // 469 PtrCastToGeneric + {IR(31225, 8), 343}, // 470 PtrDiff + {IR(31204, 9), 341}, // 471 PtrEqual + {IR(31213, 12), 342}, // 472 PtrNotEqual + {IR(27367, 14), 106}, // 473 QuantizeToF16 + {IR(35699, 17), 515}, // 474 RawAccessChainNV + {IR(32388, 31), 391}, // 475 RayQueryConfirmIntersectionKHR + {IR(32356, 32), 390}, // 476 RayQueryGenerateIntersectionKHR + {IR(34709, 23), 480}, // 477 RayQueryGetClusterIdNV + {IR(43639, 39), 754}, // 478 RayQueryGetIntersectionBarycentricsKHR + {IR(43714, 46), 756}, // 479 RayQueryGetIntersectionCandidateAABBOpaqueKHR + {IR(43678, 36), 755}, // 480 RayQueryGetIntersectionFrontFaceKHR + {IR(43558, 40), 752}, // 481 RayQueryGetIntersectionGeometryIndexKHR + {IR(43410, 46), 749}, // 482 RayQueryGetIntersectionInstanceCustomIndexKHR + {IR(43456, 37), 750}, // 483 RayQueryGetIntersectionInstanceIdKHR + {IR(43493, 65), 751}, // 484 RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR + {IR(35866, 37), 520}, // 485 RayQueryGetIntersectionLSSHitValueNV + {IR(35794, 38), 518}, // 486 RayQueryGetIntersectionLSSPositionsNV + {IR(35832, 34), 519}, // 487 RayQueryGetIntersectionLSSRadiiNV + {IR(43760, 45), 757}, // 488 RayQueryGetIntersectionObjectRayDirectionKHR + {IR(43805, 42), 758}, // 489 RayQueryGetIntersectionObjectRayOriginKHR + {IR(43908, 40), 761}, // 490 RayQueryGetIntersectionObjectToWorldKHR + {IR(43598, 41), 753}, // 491 RayQueryGetIntersectionPrimitiveIndexKHR + {IR(35716, 40), 516}, // 492 RayQueryGetIntersectionSpherePositionNV + {IR(35756, 38), 517}, // 493 RayQueryGetIntersectionSphereRadiusNV + {IR(43382, 28), 748}, // 494 RayQueryGetIntersectionTKHR + {IR(34584, 50), 477}, // 495 RayQueryGetIntersectionTriangleVertexPositionsKHR + {IR(32438, 31), 393}, // 496 RayQueryGetIntersectionTypeKHR + {IR(43948, 40), 762}, // 497 RayQueryGetIntersectionWorldToObjectKHR + {IR(43359, 23), 747}, // 498 RayQueryGetRayFlagsKHR + {IR(43337, 22), 746}, // 499 RayQueryGetRayTMinKHR + {IR(43847, 32), 759}, // 500 RayQueryGetWorldRayDirectionKHR + {IR(43879, 29), 760}, // 501 RayQueryGetWorldRayOriginKHR + {IR(32313, 22), 388}, // 502 RayQueryInitializeKHR + {IR(36074, 19), 528}, // 503 RayQueryIsLSSHitNV + {IR(36052, 22), 527}, // 504 RayQueryIsSphereHitNV + {IR(32419, 19), 392}, // 505 RayQueryProceedKHR + {IR(32335, 21), 389}, // 506 RayQueryTerminateKHR + {IR(32896, 13), 412}, // 507 ReadClockKHR + {IR(29218, 9), 249}, // 508 ReadPipe + {IR(43292, 22), 743}, // 509 ReadPipeBlockingINTEL + {IR(29666, 13), 271}, // 510 ReleaseEvent + {IR(33993, 24), 454}, // 511 ReorderThreadWithHintNV + {IR(33964, 29), 453}, // 512 ReorderThreadWithHitObjectNV + {IR(34466, 22), 471}, // 513 ReportIntersectionKHR + {IR(34488, 21), 471}, // 514 ReportIntersectionNV + {IR(29272, 23), 253}, // 515 ReserveReadPipePackets + {IR(29295, 24), 254}, // 516 ReserveWritePipePackets + {IR(29237, 17), 251}, // 517 ReservedReadPipe + {IR(29254, 18), 252}, // 518 ReservedWritePipe + {IR(41963, 19), 684}, // 519 RestoreMemoryINTEL + {IR(29654, 12), 270}, // 520 RetainEvent + {IR(28983, 7), 231}, // 521 Return + {IR(28990, 12), 232}, // 522 ReturnValue + {IR(44752, 18), 795}, // 523 RoundFToTF32INTEL + {IR(27349, 9), 104}, // 524 SConvert + {IR(27557, 5), 124}, // 525 SDiv + {IR(31900, 5), 373}, // 526 SDot + {IR(31941, 11), 376}, // 527 SDotAccSat + {IR(31952, 14), 376}, // 528 SDotAccSatKHR + {IR(31905, 8), 373}, // 529 SDotKHR + {IR(27925, 13), 161}, // 530 SGreaterThan + {IR(27956, 18), 163}, // 531 SGreaterThanEqual + {IR(27984, 10), 165}, // 532 SLessThan + {IR(28009, 15), 167}, // 533 SLessThanEqual + {IR(27577, 5), 128}, // 534 SMod + {IR(27733, 13), 141}, // 535 SMulExtended + {IR(27506, 8), 115}, // 536 SNegate + {IR(27572, 5), 127}, // 537 SRem + {IR(31926, 6), 375}, // 538 SUDot + {IR(31991, 12), 378}, // 539 SUDotAccSat + {IR(32003, 15), 378}, // 540 SUDotAccSatKHR + {IR(31932, 9), 375}, // 541 SUDotKHR + {IR(26833, 13), 77}, // 542 SampledImage + {IR(35618, 29), 514}, // 543 SamplerImageAddressingModeNV + {IR(27395, 15), 108}, // 544 SatConvertSToU + {IR(27410, 15), 109}, // 545 SatConvertUToS + {IR(41947, 16), 683}, // 546 SaveMemoryINTEL + {IR(27888, 7), 157}, // 547 Select + {IR(28880, 15), 225}, // 548 SelectionMerge + {IR(34266, 18), 464}, // 549 SetMeshOutputsEXT + {IR(29708, 19), 274}, // 550 SetUserEventStatus + {IR(28257, 17), 182}, // 551 ShiftLeftLogical + {IR(28236, 21), 181}, // 552 ShiftRightArithmetic + {IR(28218, 18), 180}, // 553 ShiftRightLogical + {IR(27784, 11), 148}, // 554 SignBitSet + {IR(30189, 7), 294}, // 555 SizeOf + {IR(25162, 7), 3}, // 556 Source + {IR(25043, 16), 2}, // 557 SourceContinued + {IR(25169, 16), 4}, // 558 SourceExtension + {IR(26180, 13), 45}, // 559 SpecConstant + {IR(26193, 22), 46}, // 560 SpecConstantComposite + {IR(44082, 36), 767}, // 561 SpecConstantCompositeContinuedINTEL + {IR(32232, 34), 385}, // 562 SpecConstantCompositeReplicateEXT + {IR(26162, 18), 44}, // 563 SpecConstantFalse + {IR(26256, 15), 47}, // 564 SpecConstantOp + {IR(33081, 23), 420}, // 565 SpecConstantStringAMDX + {IR(26145, 17), 43}, // 566 SpecConstantTrue + {IR(31279, 25), 346}, // 567 StencilAttachmentReadEXT + {IR(26420, 6), 55}, // 568 Store + {IR(25201, 7), 7}, // 569 String + {IR(44383, 25), 780}, // 570 Subgroup2DBlockLoadINTEL + {IR(44408, 34), 781}, // 571 Subgroup2DBlockLoadTransformINTEL + {IR(44442, 34), 782}, // 572 Subgroup2DBlockLoadTransposeINTEL + {IR(44476, 29), 783}, // 573 Subgroup2DBlockPrefetchINTEL + {IR(44505, 26), 784}, // 574 Subgroup2DBlockStoreINTEL + {IR(31677, 20), 364}, // 575 SubgroupAllEqualKHR + {IR(31647, 15), 362}, // 576 SubgroupAllKHR + {IR(31662, 15), 363}, // 577 SubgroupAnyKHR + {IR(40465, 30), 647}, // 578 SubgroupAvcBmeInitializeINTEL + {IR(40435, 30), 646}, // 579 SubgroupAvcFmeInitializeINTEL + {IR(38870, 35), 616}, // 580 SubgroupAvcImeAdjustRefOffsetINTEL + {IR(38905, 39), 617}, // 581 SubgroupAvcImeConvertToMcePayloadINTEL + {IR(39546, 38), 630}, // 582 SubgroupAvcImeConvertToMceResultINTEL + {IR(39169, 45), 623}, // 583 SubgroupAvcImeEvaluateWithDualReferenceINTEL + {IR(39269, 53), 625}, // 584 SubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL + {IR(39490, 56), 629}, // 585 SubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL + {IR(39378, 54), 627}, // 586 SubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL + {IR(39122, 47), 622}, // 587 SubgroupAvcImeEvaluateWithSingleReferenceINTEL + {IR(39214, 55), 624}, // 588 SubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL + {IR(39432, 58), 628}, // 589 SubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL + {IR(39322, 56), 626}, // 590 SubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL + {IR(40178, 36), 641}, // 591 SubgroupAvcImeGetBorderReachedINTEL + {IR(39630, 44), 632}, // 592 SubgroupAvcImeGetDualReferenceStreaminINTEL + {IR(39584, 46), 631}, // 593 SubgroupAvcImeGetSingleReferenceStreaminINTEL + {IR(40045, 66), 639}, // 594 SubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL + {IR(39977, 68), 638}, // 595 SubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL + {IR(40111, 67), 640}, // 596 SubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL + {IR(39840, 68), 636}, // 597 SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL + {IR(39770, 70), 635}, // 598 SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL + {IR(39908, 69), 637}, // 599 SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL + {IR(40214, 48), 642}, // 600 SubgroupAvcImeGetTruncatedSearchIndicationINTEL + {IR(40262, 59), 643}, // 601 SubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL + {IR(40379, 56), 645}, // 602 SubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL + {IR(40321, 58), 644}, // 603 SubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL + {IR(38733, 30), 612}, // 604 SubgroupAvcImeInitializeINTEL + {IR(38837, 33), 615}, // 605 SubgroupAvcImeRefWindowSizeINTEL + {IR(38801, 36), 614}, // 606 SubgroupAvcImeSetDualReferenceINTEL + {IR(39034, 54), 620}, // 607 SubgroupAvcImeSetEarlySearchTerminationThresholdINTEL + {IR(38944, 43), 618}, // 608 SubgroupAvcImeSetMaxMotionVectorCountINTEL + {IR(38763, 38), 613}, // 609 SubgroupAvcImeSetSingleReferenceINTEL + {IR(38987, 47), 619}, // 610 SubgroupAvcImeSetUnidirectionalMixDisableINTEL + {IR(39088, 34), 621}, // 611 SubgroupAvcImeSetWeightedSadINTEL + {IR(39723, 47), 634}, // 612 SubgroupAvcImeStripDualReferenceStreamoutINTEL + {IR(39674, 49), 633}, // 613 SubgroupAvcImeStripSingleReferenceStreamoutINTEL + {IR(38123, 39), 597}, // 614 SubgroupAvcMceConvertToImePayloadINTEL + {IR(38162, 38), 598}, // 615 SubgroupAvcMceConvertToImeResultINTEL + {IR(38200, 39), 599}, // 616 SubgroupAvcMceConvertToRefPayloadINTEL + {IR(38239, 38), 600}, // 617 SubgroupAvcMceConvertToRefResultINTEL + {IR(38277, 39), 601}, // 618 SubgroupAvcMceConvertToSicPayloadINTEL + {IR(38316, 38), 602}, // 619 SubgroupAvcMceConvertToSicResultINTEL + {IR(38429, 43), 605}, // 620 SubgroupAvcMceGetBestInterDistortionsINTEL + {IR(37561, 50), 586}, // 621 SubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL + {IR(37159, 60), 578}, // 622 SubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL + {IR(37359, 51), 582}, // 623 SubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL + {IR(37505, 56), 585}, // 624 SubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL + {IR(37272, 47), 580}, // 625 SubgroupAvcMceGetDefaultInterShapePenaltyINTEL + {IR(37860, 56), 592}, // 626 SubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL + {IR(37759, 50), 590}, // 627 SubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL + {IR(37454, 51), 584}, // 628 SubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL + {IR(37663, 49), 588}, // 629 SubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL + {IR(37611, 52), 587}, // 630 SubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL + {IR(37809, 51), 591}, // 631 SubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL + {IR(38548, 38), 608}, // 632 SubgroupAvcMceGetInterDirectionsINTEL + {IR(38390, 39), 604}, // 633 SubgroupAvcMceGetInterDistortionsINTEL + {IR(38472, 38), 606}, // 634 SubgroupAvcMceGetInterMajorShapeINTEL + {IR(38510, 38), 607}, // 635 SubgroupAvcMceGetInterMinorShapeINTEL + {IR(38586, 45), 609}, // 636 SubgroupAvcMceGetInterMotionVectorCountINTEL + {IR(38631, 40), 610}, // 637 SubgroupAvcMceGetInterReferenceIdsINTEL + {IR(38671, 62), 611}, // 638 SubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL + {IR(38354, 36), 603}, // 639 SubgroupAvcMceGetMotionVectorsINTEL + {IR(37916, 33), 593}, // 640 SubgroupAvcMceSetAcOnlyHaarINTEL + {IR(38062, 61), 596}, // 641 SubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL + {IR(37219, 53), 579}, // 642 SubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL + {IR(37410, 44), 583}, // 643 SubgroupAvcMceSetInterDirectionPenaltyINTEL + {IR(37319, 40), 581}, // 644 SubgroupAvcMceSetInterShapePenaltyINTEL + {IR(37712, 47), 589}, // 645 SubgroupAvcMceSetMotionVectorCostFunctionINTEL + {IR(38001, 61), 595}, // 646 SubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL + {IR(37949, 52), 594}, // 647 SubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL + {IR(40495, 39), 648}, // 648 SubgroupAvcRefConvertToMcePayloadINTEL + {IR(40817, 38), 655}, // 649 SubgroupAvcRefConvertToMceResultINTEL + {IR(40670, 45), 652}, // 650 SubgroupAvcRefEvaluateWithDualReferenceINTEL + {IR(40715, 46), 653}, // 651 SubgroupAvcRefEvaluateWithMultiReferenceINTEL + {IR(40761, 56), 654}, // 652 SubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL + {IR(40623, 47), 651}, // 653 SubgroupAvcRefEvaluateWithSingleReferenceINTEL + {IR(40534, 46), 649}, // 654 SubgroupAvcRefSetBidirectionalMixDisableINTEL + {IR(40580, 43), 650}, // 655 SubgroupAvcRefSetBilinearFilterEnableINTEL + {IR(40953, 42), 659}, // 656 SubgroupAvcSicConfigureIpeLumaChromaINTEL + {IR(40917, 36), 658}, // 657 SubgroupAvcSicConfigureIpeLumaINTEL + {IR(40885, 32), 657}, // 658 SubgroupAvcSicConfigureSkcINTEL + {IR(41034, 39), 661}, // 659 SubgroupAvcSicConvertToMcePayloadINTEL + {IR(41574, 38), 673}, // 660 SubgroupAvcSicConvertToMceResultINTEL + {IR(41349, 31), 668}, // 661 SubgroupAvcSicEvaluateIpeINTEL + {IR(41427, 45), 670}, // 662 SubgroupAvcSicEvaluateWithDualReferenceINTEL + {IR(41472, 46), 671}, // 663 SubgroupAvcSicEvaluateWithMultiReferenceINTEL + {IR(41518, 56), 672}, // 664 SubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL + {IR(41380, 47), 669}, // 665 SubgroupAvcSicEvaluateWithSingleReferenceINTEL + {IR(41691, 46), 676}, // 666 SubgroupAvcSicGetBestIpeChromaDistortionINTEL + {IR(41647, 44), 675}, // 667 SubgroupAvcSicGetBestIpeLumaDistortionINTEL + {IR(41912, 35), 681}, // 668 SubgroupAvcSicGetInterRawSadsINTEL + {IR(41778, 36), 678}, // 669 SubgroupAvcSicGetIpeChromaModeINTEL + {IR(41612, 35), 674}, // 670 SubgroupAvcSicGetIpeLumaShapeINTEL + {IR(40995, 39), 660}, // 671 SubgroupAvcSicGetMotionVectorMaskINTEL + {IR(41737, 41), 677}, // 672 SubgroupAvcSicGetPackedIpeLumaModesINTEL + {IR(41814, 50), 679}, // 673 SubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL + {IR(41864, 48), 680}, // 674 SubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL + {IR(40855, 30), 656}, // 675 SubgroupAvcSicInitializeINTEL + {IR(41215, 43), 665}, // 676 SubgroupAvcSicSetBilinearFilterEnableINTEL + {IR(41306, 43), 667}, // 677 SubgroupAvcSicSetBlockBasedRawSkipSadINTEL + {IR(41165, 50), 664}, // 678 SubgroupAvcSicSetIntraChromaModeCostFunctionINTEL + {IR(41117, 48), 663}, // 679 SubgroupAvcSicSetIntraLumaModeCostFunctionINTEL + {IR(41073, 44), 662}, // 680 SubgroupAvcSicSetIntraLumaShapePenaltyINTEL + {IR(41258, 48), 666}, // 681 SubgroupAvcSicSetSkcForwardTransformEnableINTEL + {IR(5330, 18), 356}, // 682 SubgroupBallotKHR + {IR(44356, 27), 779}, // 683 SubgroupBlockPrefetchINTEL + {IR(36165, 23), 533}, // 684 SubgroupBlockReadINTEL + {IR(36188, 24), 534}, // 685 SubgroupBlockWriteINTEL + {IR(31521, 27), 357}, // 686 SubgroupFirstInvocationKHR + {IR(36212, 28), 535}, // 687 SubgroupImageBlockReadINTEL + {IR(36240, 29), 536}, // 688 SubgroupImageBlockWriteINTEL + {IR(36269, 33), 537}, // 689 SubgroupImageMediaBlockReadINTEL + {IR(36302, 34), 538}, // 690 SubgroupImageMediaBlockWriteINTEL + {IR(13673, 38), 785}, // 691 SubgroupMatrixMultiplyAccumulateINTEL + {IR(31697, 26), 366}, // 692 SubgroupReadInvocationKHR + {IR(36093, 25), 530}, // 693 SubgroupShuffleDownINTEL + {IR(11888, 21), 529}, // 694 SubgroupShuffleINTEL + {IR(36118, 23), 531}, // 695 SubgroupShuffleUpINTEL + {IR(36141, 24), 532}, // 696 SubgroupShuffleXorINTEL + {IR(28971, 7), 229}, // 697 Switch + {IR(44265, 23), 775}, // 698 TaskSequenceAsyncINTEL + {IR(44241, 24), 774}, // 699 TaskSequenceCreateINTEL + {IR(44288, 21), 776}, // 700 TaskSequenceGetINTEL + {IR(44309, 25), 777}, // 701 TaskSequenceReleaseINTEL + {IR(35436, 27), 506}, // 702 TensorLayoutSetBlockSizeNV + {IR(35300, 28), 499}, // 703 TensorLayoutSetClampValueNV + {IR(35229, 27), 496}, // 704 TensorLayoutSetDimensionNV + {IR(35256, 24), 497}, // 705 TensorLayoutSetStrideNV + {IR(35280, 20), 498}, // 706 TensorLayoutSliceNV + {IR(31389, 19), 350}, // 707 TensorQuerySizeARM + {IR(31360, 14), 348}, // 708 TensorReadARM + {IR(35416, 20), 505}, // 709 TensorViewSetClipNV + {IR(35347, 25), 501}, // 710 TensorViewSetDimensionNV + {IR(35372, 22), 502}, // 711 TensorViewSetStrideNV + {IR(31374, 15), 349}, // 712 TensorWriteARM + {IR(31408, 20), 351}, // 713 TerminateInvocation + {IR(31837, 16), 372}, // 714 TerminateRayKHR + {IR(34530, 15), 473}, // 715 TerminateRayNV + {IR(34553, 14), 475}, // 716 TraceMotionNV + {IR(34545, 8), 474}, // 717 TraceNV + {IR(31749, 12), 368}, // 718 TraceRayKHR + {IR(34567, 17), 476}, // 719 TraceRayMotionNV + {IR(26823, 10), 76}, // 720 Transpose + {IR(34634, 29), 478}, // 721 TypeAccelerationStructureKHR + {IR(34663, 28), 478}, // 722 TypeAccelerationStructureNV + {IR(25772, 10), 25}, // 723 TypeArray + {IR(37078, 37), 575}, // 724 TypeAvcImeDualReferenceStreaminINTEL + {IR(36813, 23), 566}, // 725 TypeAvcImePayloadINTEL + {IR(36995, 44), 573}, // 726 TypeAvcImeResultDualReferenceStreamoutINTEL + {IR(36927, 22), 571}, // 727 TypeAvcImeResultINTEL + {IR(36949, 46), 572}, // 728 TypeAvcImeResultSingleReferenceStreamoutINTEL + {IR(37039, 39), 574}, // 729 TypeAvcImeSingleReferenceStreaminINTEL + {IR(36882, 23), 569}, // 730 TypeAvcMcePayloadINTEL + {IR(36905, 22), 570}, // 731 TypeAvcMceResultINTEL + {IR(36836, 23), 567}, // 732 TypeAvcRefPayloadINTEL + {IR(37115, 22), 576}, // 733 TypeAvcRefResultINTEL + {IR(36859, 23), 568}, // 734 TypeAvcSicPayloadINTEL + {IR(37137, 22), 577}, // 735 TypeAvcSicResultINTEL + {IR(25534, 9), 17}, // 736 TypeBool + {IR(44002, 23), 764}, // 737 TypeBufferSurfaceINTEL + {IR(32018, 25), 379}, // 738 TypeCooperativeMatrixKHR + {IR(34756, 24), 482}, // 739 TypeCooperativeMatrixNV + {IR(34056, 24), 457}, // 740 TypeCooperativeVectorNV + {IR(25887, 16), 32}, // 741 TypeDeviceEvent + {IR(25877, 10), 31}, // 742 TypeEvent + {IR(25588, 10), 19}, // 743 TypeFloat + {IR(25936, 19), 36}, // 744 TypeForwardPointer + {IR(25864, 13), 30}, // 745 TypeFunction + {IR(34017, 16), 455}, // 746 TypeHitObjectNV + {IR(25733, 10), 22}, // 747 TypeImage + {IR(25543, 8), 18}, // 748 TypeInt + {IR(25609, 11), 21}, // 749 TypeMatrix + {IR(30318, 17), 300}, // 750 TypeNamedBarrier + {IR(32958, 25), 415}, // 751 TypeNodePayloadArrayAMDX + {IR(25810, 11), 28}, // 752 TypeOpaque + {IR(25927, 9), 35}, // 753 TypePipe + {IR(30196, 16), 295}, // 754 TypePipeStorage + {IR(25852, 12), 29}, // 755 TypePointer + {IR(25917, 10), 34}, // 756 TypeQueue + {IR(32297, 16), 387}, // 757 TypeRayQueryKHR + {IR(25903, 14), 33}, // 758 TypeReserveId + {IR(25782, 17), 26}, // 759 TypeRuntimeArray + {IR(25755, 17), 24}, // 760 TypeSampledImage + {IR(25743, 12), 23}, // 761 TypeSampler + {IR(25799, 11), 27}, // 762 TypeStruct + {IR(44025, 25), 765}, // 763 TypeStructContinuedINTEL + {IR(44334, 22), 778}, // 764 TypeTaskSequenceINTEL + {IR(31304, 14), 347}, // 765 TypeTensorARM + {IR(35172, 19), 493}, // 766 TypeTensorLayoutNV + {IR(35191, 17), 494}, // 767 TypeTensorViewNV + {IR(31428, 22), 352}, // 768 TypeUntypedPointerKHR + {IR(25598, 11), 20}, // 769 TypeVector + {IR(36795, 18), 565}, // 770 TypeVmeImageINTEL + {IR(25525, 9), 16}, // 771 TypeVoid + {IR(36424, 13), 544}, // 772 UAddSatINTEL + {IR(36451, 14), 546}, // 773 UAverageINTEL + {IR(36486, 21), 548}, // 774 UAverageRoundedINTEL + {IR(27340, 9), 103}, // 775 UConvert + {IR(36336, 24), 539}, // 776 UCountLeadingZerosINTEL + {IR(36360, 25), 540}, // 777 UCountTrailingZerosINTEL + {IR(27552, 5), 123}, // 778 UDiv + {IR(31913, 5), 374}, // 779 UDot + {IR(31966, 11), 377}, // 780 UDotAccSat + {IR(31977, 14), 377}, // 781 UDotAccSatKHR + {IR(31918, 8), 374}, // 782 UDotKHR + {IR(27912, 13), 160}, // 783 UGreaterThan + {IR(27938, 18), 162}, // 784 UGreaterThanEqual + {IR(27974, 10), 164}, // 785 ULessThan + {IR(27994, 15), 166}, // 786 ULessThanEqual + {IR(27567, 5), 126}, // 787 UMod + {IR(36548, 15), 552}, // 788 UMul32x16INTEL + {IR(27720, 13), 140}, // 789 UMulExtended + {IR(36520, 13), 550}, // 790 USubSatINTEL + {IR(25037, 6), 1}, // 791 Undef + {IR(27817, 10), 151}, // 792 Unordered + {IR(29002, 12), 233}, // 793 Unreachable + {IR(31469, 22), 354}, // 794 UntypedAccessChainKHR + {IR(31606, 22), 360}, // 795 UntypedArrayLengthKHR + {IR(31491, 30), 355}, // 796 UntypedInBoundsAccessChainKHR + {IR(31573, 33), 359}, // 797 UntypedInBoundsPtrAccessChainKHR + {IR(31628, 19), 361}, // 798 UntypedPrefetchKHR + {IR(31548, 25), 358}, // 799 UntypedPtrAccessChainKHR + {IR(31450, 19), 353}, // 800 UntypedVariableKHR + {IR(26348, 9), 52}, // 801 Variable + {IR(12344, 25), 682}, // 802 VariableLengthArrayINTEL + {IR(26705, 21), 69}, // 803 VectorExtractDynamic + {IR(26726, 20), 70}, // 804 VectorInsertDynamic + {IR(26746, 14), 71}, // 805 VectorShuffle + {IR(27628, 18), 133}, // 806 VectorTimesMatrix + {IR(27592, 18), 131}, // 807 VectorTimesScalar + {IR(36781, 14), 564}, // 808 VmeImageINTEL + {IR(34311, 33), 466}, // 809 WritePackedPrimitiveIndices4x8NV + {IR(29227, 10), 250}, // 810 WritePipe + {IR(43314, 23), 744}, // 811 WritePipeBlockingINTEL +}}; + +// Extended instruction descriptions, ordered by (extinst enum, opcode value). +// The fields in order are: +// enum value +// operands, an IndexRange into kOperandSpans +// name, a character-counting IndexRange into kStrings +// capabilities, an IndexRange into kCapabilitySpans +static const std::array kExtInstByValue{{ + {0,IR(0, 0),IR(44894, 14),IR(1, 0)}, // DebugInfoNone in debuginfo + {1,IR(52, 3),IR(44908, 21),IR(1, 0)}, // DebugCompilationUnit in debuginfo + {2,IR(727, 3),IR(44981, 15),IR(1, 0)}, // DebugTypeBasic in debuginfo + {3,IR(730, 3),IR(45030, 17),IR(1, 0)}, // DebugTypePointer in debuginfo + {4,IR(733, 2),IR(45085, 19),IR(1, 0)}, // DebugTypeQualifier in debuginfo + {5,IR(168, 2),IR(45104, 15),IR(1, 0)}, // DebugTypeArray in debuginfo + {6,IR(261, 2),IR(45119, 16),IR(1, 0)}, // DebugTypeVector in debuginfo + {7,IR(735, 6),IR(45135, 13),IR(1, 0)}, // DebugTypedef in debuginfo + {8,IR(168, 2),IR(45148, 18),IR(1, 0)}, // DebugTypeFunction in debuginfo + {9,IR(741, 9),IR(45166, 14),IR(1, 0)}, // DebugTypeEnum in debuginfo + {10,IR(750, 9),IR(45218, 19),IR(1, 0)}, // DebugTypeComposite in debuginfo + {11,IR(759, 10),IR(45237, 16),IR(1, 0)}, // DebugTypeMember in debuginfo + {12,IR(769, 5),IR(45253, 21),IR(1, 0)}, // DebugTypeInheritance in debuginfo + {13,IR(36, 2),IR(45274, 21),IR(1, 0)}, // DebugTypePtrToMember in debuginfo + {14,IR(168, 2),IR(45295, 18),IR(1, 0)}, // DebugTypeTemplate in debuginfo + {15,IR(774, 6),IR(45313, 27),IR(1, 0)}, // DebugTypeTemplateParameter in debuginfo + {16,IR(780, 5),IR(45340, 35),IR(1, 0)}, // DebugTypeTemplateTemplateParameter in debuginfo + {17,IR(785, 5),IR(45375, 31),IR(1, 0)}, // DebugTypeTemplateParameterPack in debuginfo + {18,IR(759, 10),IR(45406, 20),IR(1, 0)}, // DebugGlobalVariable in debuginfo + {19,IR(790, 8),IR(45426, 25),IR(1, 0)}, // DebugFunctionDeclaration in debuginfo + {20,IR(798, 11),IR(45451, 14),IR(1, 0)}, // DebugFunction in debuginfo + {21,IR(809, 5),IR(45465, 18),IR(1, 0)}, // DebugLexicalBlock in debuginfo + {22,IR(814, 3),IR(45483, 31),IR(1, 0)}, // DebugLexicalBlockDiscriminator in debuginfo + {23,IR(817, 2),IR(45514, 11),IR(1, 0)}, // DebugScope in debuginfo + {24,IR(0, 0),IR(45525, 13),IR(1, 0)}, // DebugNoScope in debuginfo + {25,IR(819, 3),IR(45538, 15),IR(1, 0)}, // DebugInlinedAt in debuginfo + {26,IR(822, 7),IR(45595, 19),IR(1, 0)}, // DebugLocalVariable in debuginfo + {27,IR(36, 2),IR(45614, 21),IR(1, 0)}, // DebugInlinedVariable in debuginfo + {28,IR(33, 3),IR(45635, 13),IR(1, 0)}, // DebugDeclare in debuginfo + {29,IR(829, 3),IR(45648, 11),IR(1, 0)}, // DebugValue in debuginfo + {30,IR(832, 2),IR(45692, 15),IR(1, 0)}, // DebugOperation in debuginfo + {31,IR(683, 1),IR(45707, 16),IR(1, 0)}, // DebugExpression in debuginfo + {32,IR(834, 4),IR(45723, 14),IR(1, 0)}, // DebugMacroDef in debuginfo + {33,IR(814, 3),IR(45737, 16),IR(1, 0)}, // DebugMacroUndef in debuginfo + {1,IR(10, 1),IR(45753, 6),IR(1, 0)}, // Round in glsl_std_450 + {2,IR(10, 1),IR(45759, 10),IR(1, 0)}, // RoundEven in glsl_std_450 + {3,IR(10, 1),IR(45769, 6),IR(1, 0)}, // Trunc in glsl_std_450 + {4,IR(10, 1),IR(45775, 5),IR(1, 0)}, // FAbs in glsl_std_450 + {5,IR(10, 1),IR(45780, 5),IR(1, 0)}, // SAbs in glsl_std_450 + {6,IR(10, 1),IR(45785, 6),IR(1, 0)}, // FSign in glsl_std_450 + {7,IR(10, 1),IR(45791, 6),IR(1, 0)}, // SSign in glsl_std_450 + {8,IR(10, 1),IR(45797, 6),IR(1, 0)}, // Floor in glsl_std_450 + {9,IR(10, 1),IR(45803, 5),IR(1, 0)}, // Ceil in glsl_std_450 + {10,IR(10, 1),IR(45808, 6),IR(1, 0)}, // Fract in glsl_std_450 + {11,IR(10, 1),IR(45814, 8),IR(1, 0)}, // Radians in glsl_std_450 + {12,IR(10, 1),IR(45822, 8),IR(1, 0)}, // Degrees in glsl_std_450 + {13,IR(10, 1),IR(45830, 4),IR(1, 0)}, // Sin in glsl_std_450 + {14,IR(10, 1),IR(45834, 4),IR(1, 0)}, // Cos in glsl_std_450 + {15,IR(10, 1),IR(45838, 4),IR(1, 0)}, // Tan in glsl_std_450 + {16,IR(10, 1),IR(45842, 5),IR(1, 0)}, // Asin in glsl_std_450 + {17,IR(10, 1),IR(45847, 5),IR(1, 0)}, // Acos in glsl_std_450 + {18,IR(10, 1),IR(45852, 5),IR(1, 0)}, // Atan in glsl_std_450 + {19,IR(10, 1),IR(45857, 5),IR(1, 0)}, // Sinh in glsl_std_450 + {20,IR(10, 1),IR(45862, 5),IR(1, 0)}, // Cosh in glsl_std_450 + {21,IR(10, 1),IR(45867, 5),IR(1, 0)}, // Tanh in glsl_std_450 + {22,IR(10, 1),IR(45872, 6),IR(1, 0)}, // Asinh in glsl_std_450 + {23,IR(10, 1),IR(45878, 6),IR(1, 0)}, // Acosh in glsl_std_450 + {24,IR(10, 1),IR(45884, 6),IR(1, 0)}, // Atanh in glsl_std_450 + {25,IR(36, 2),IR(45890, 6),IR(1, 0)}, // Atan2 in glsl_std_450 + {26,IR(36, 2),IR(45896, 4),IR(1, 0)}, // Pow in glsl_std_450 + {27,IR(10, 1),IR(45900, 4),IR(1, 0)}, // Exp in glsl_std_450 + {28,IR(10, 1),IR(45904, 4),IR(1, 0)}, // Log in glsl_std_450 + {29,IR(10, 1),IR(45908, 5),IR(1, 0)}, // Exp2 in glsl_std_450 + {30,IR(10, 1),IR(45913, 5),IR(1, 0)}, // Log2 in glsl_std_450 + {31,IR(10, 1),IR(45918, 5),IR(1, 0)}, // Sqrt in glsl_std_450 + {32,IR(10, 1),IR(45923, 12),IR(1, 0)}, // InverseSqrt in glsl_std_450 + {33,IR(10, 1),IR(45935, 12),IR(1, 0)}, // Determinant in glsl_std_450 + {34,IR(10, 1),IR(45947, 14),IR(1, 0)}, // MatrixInverse in glsl_std_450 + {35,IR(36, 2),IR(45961, 5),IR(1, 0)}, // Modf in glsl_std_450 + {36,IR(10, 1),IR(45966, 11),IR(1, 0)}, // ModfStruct in glsl_std_450 + {37,IR(36, 2),IR(45977, 5),IR(1, 0)}, // FMin in glsl_std_450 + {38,IR(36, 2),IR(45982, 5),IR(1, 0)}, // UMin in glsl_std_450 + {39,IR(36, 2),IR(45987, 5),IR(1, 0)}, // SMin in glsl_std_450 + {40,IR(36, 2),IR(45992, 5),IR(1, 0)}, // FMax in glsl_std_450 + {41,IR(36, 2),IR(45997, 5),IR(1, 0)}, // UMax in glsl_std_450 + {42,IR(36, 2),IR(46002, 5),IR(1, 0)}, // SMax in glsl_std_450 + {43,IR(33, 3),IR(46007, 7),IR(1, 0)}, // FClamp in glsl_std_450 + {44,IR(33, 3),IR(46014, 7),IR(1, 0)}, // UClamp in glsl_std_450 + {45,IR(33, 3),IR(46021, 7),IR(1, 0)}, // SClamp in glsl_std_450 + {46,IR(33, 3),IR(46028, 5),IR(1, 0)}, // FMix in glsl_std_450 + {47,IR(33, 3),IR(46033, 5),IR(1, 0)}, // IMix in glsl_std_450 + {48,IR(36, 2),IR(46038, 5),IR(1, 0)}, // Step in glsl_std_450 + {49,IR(33, 3),IR(46043, 11),IR(1, 0)}, // SmoothStep in glsl_std_450 + {50,IR(33, 3),IR(46054, 4),IR(1, 0)}, // Fma in glsl_std_450 + {51,IR(36, 2),IR(46058, 6),IR(1, 0)}, // Frexp in glsl_std_450 + {52,IR(10, 1),IR(46064, 12),IR(1, 0)}, // FrexpStruct in glsl_std_450 + {53,IR(36, 2),IR(46076, 6),IR(1, 0)}, // Ldexp in glsl_std_450 + {54,IR(10, 1),IR(46082, 13),IR(1, 0)}, // PackSnorm4x8 in glsl_std_450 + {55,IR(10, 1),IR(46095, 13),IR(1, 0)}, // PackUnorm4x8 in glsl_std_450 + {56,IR(10, 1),IR(46108, 14),IR(1, 0)}, // PackSnorm2x16 in glsl_std_450 + {57,IR(10, 1),IR(46122, 14),IR(1, 0)}, // PackUnorm2x16 in glsl_std_450 + {58,IR(10, 1),IR(46136, 13),IR(1, 0)}, // PackHalf2x16 in glsl_std_450 + {59,IR(10, 1),IR(46149, 15),IR(302, 1)}, // PackDouble2x32 in glsl_std_450 + {60,IR(10, 1),IR(46164, 16),IR(1, 0)}, // UnpackSnorm2x16 in glsl_std_450 + {61,IR(10, 1),IR(46180, 16),IR(1, 0)}, // UnpackUnorm2x16 in glsl_std_450 + {62,IR(10, 1),IR(46196, 15),IR(1, 0)}, // UnpackHalf2x16 in glsl_std_450 + {63,IR(10, 1),IR(46211, 15),IR(1, 0)}, // UnpackSnorm4x8 in glsl_std_450 + {64,IR(10, 1),IR(46226, 15),IR(1, 0)}, // UnpackUnorm4x8 in glsl_std_450 + {65,IR(10, 1),IR(46241, 17),IR(302, 1)}, // UnpackDouble2x32 in glsl_std_450 + {66,IR(10, 1),IR(46258, 7),IR(1, 0)}, // Length in glsl_std_450 + {67,IR(36, 2),IR(46265, 9),IR(1, 0)}, // Distance in glsl_std_450 + {68,IR(36, 2),IR(46274, 6),IR(1, 0)}, // Cross in glsl_std_450 + {69,IR(10, 1),IR(46280, 10),IR(1, 0)}, // Normalize in glsl_std_450 + {70,IR(33, 3),IR(46290, 12),IR(1, 0)}, // FaceForward in glsl_std_450 + {71,IR(36, 2),IR(46302, 8),IR(1, 0)}, // Reflect in glsl_std_450 + {72,IR(33, 3),IR(46310, 8),IR(1, 0)}, // Refract in glsl_std_450 + {73,IR(10, 1),IR(46318, 9),IR(1, 0)}, // FindILsb in glsl_std_450 + {74,IR(10, 1),IR(46327, 9),IR(1, 0)}, // FindSMsb in glsl_std_450 + {75,IR(10, 1),IR(46336, 9),IR(1, 0)}, // FindUMsb in glsl_std_450 + {76,IR(10, 1),IR(46345, 22),IR(303, 1)}, // InterpolateAtCentroid in glsl_std_450 + {77,IR(36, 2),IR(46367, 20),IR(303, 1)}, // InterpolateAtSample in glsl_std_450 + {78,IR(36, 2),IR(46387, 20),IR(303, 1)}, // InterpolateAtOffset in glsl_std_450 + {79,IR(36, 2),IR(46407, 5),IR(1, 0)}, // NMin in glsl_std_450 + {80,IR(36, 2),IR(46412, 5),IR(1, 0)}, // NMax in glsl_std_450 + {81,IR(33, 3),IR(46417, 7),IR(1, 0)}, // NClamp in glsl_std_450 + {1,IR(387, 5),IR(4549, 7),IR(1, 0)}, // Kernel in nonsemantic_clspvreflection + {2,IR(838, 5),IR(46424, 13),IR(1, 0)}, // ArgumentInfo in nonsemantic_clspvreflection + {3,IR(843, 5),IR(46437, 22),IR(1, 0)}, // ArgumentStorageBuffer in nonsemantic_clspvreflection + {4,IR(843, 5),IR(46459, 16),IR(1, 0)}, // ArgumentUniform in nonsemantic_clspvreflection + {5,IR(531, 7),IR(46475, 25),IR(1, 0)}, // ArgumentPodStorageBuffer in nonsemantic_clspvreflection + {6,IR(531, 7),IR(46500, 19),IR(1, 0)}, // ArgumentPodUniform in nonsemantic_clspvreflection + {7,IR(843, 5),IR(46519, 24),IR(1, 0)}, // ArgumentPodPushConstant in nonsemantic_clspvreflection + {8,IR(843, 5),IR(46543, 21),IR(1, 0)}, // ArgumentSampledImage in nonsemantic_clspvreflection + {9,IR(843, 5),IR(46564, 21),IR(1, 0)}, // ArgumentStorageImage in nonsemantic_clspvreflection + {10,IR(843, 5),IR(46585, 16),IR(1, 0)}, // ArgumentSampler in nonsemantic_clspvreflection + {11,IR(843, 5),IR(46601, 18),IR(1, 0)}, // ArgumentWorkgroup in nonsemantic_clspvreflection + {12,IR(33, 3),IR(46619, 26),IR(1, 0)}, // SpecConstantWorkgroupSize in nonsemantic_clspvreflection + {13,IR(33, 3),IR(46645, 25),IR(1, 0)}, // SpecConstantGlobalOffset in nonsemantic_clspvreflection + {14,IR(10, 1),IR(46670, 20),IR(1, 0)}, // SpecConstantWorkDim in nonsemantic_clspvreflection + {15,IR(36, 2),IR(46690, 25),IR(1, 0)}, // PushConstantGlobalOffset in nonsemantic_clspvreflection + {16,IR(36, 2),IR(46715, 30),IR(1, 0)}, // PushConstantEnqueuedLocalSize in nonsemantic_clspvreflection + {17,IR(36, 2),IR(46745, 23),IR(1, 0)}, // PushConstantGlobalSize in nonsemantic_clspvreflection + {18,IR(36, 2),IR(46768, 25),IR(1, 0)}, // PushConstantRegionOffset in nonsemantic_clspvreflection + {19,IR(36, 2),IR(46793, 26),IR(1, 0)}, // PushConstantNumWorkgroups in nonsemantic_clspvreflection + {20,IR(36, 2),IR(46819, 30),IR(1, 0)}, // PushConstantRegionGroupOffset in nonsemantic_clspvreflection + {21,IR(33, 3),IR(46849, 26),IR(1, 0)}, // ConstantDataStorageBuffer in nonsemantic_clspvreflection + {22,IR(33, 3),IR(46875, 20),IR(1, 0)}, // ConstantDataUniform in nonsemantic_clspvreflection + {23,IR(33, 3),IR(7974, 15),IR(1, 0)}, // LiteralSampler in nonsemantic_clspvreflection + {24,IR(296, 4),IR(46895, 30),IR(1, 0)}, // PropertyRequiredWorkgroupSize in nonsemantic_clspvreflection + {25,IR(10, 1),IR(46925, 28),IR(1, 0)}, // SpecConstantSubgroupMaxSize in nonsemantic_clspvreflection + {26,IR(843, 5),IR(46953, 28),IR(1, 0)}, // ArgumentPointerPushConstant in nonsemantic_clspvreflection + {27,IR(531, 7),IR(46981, 23),IR(1, 0)}, // ArgumentPointerUniform in nonsemantic_clspvreflection + {28,IR(33, 3),IR(47004, 35),IR(1, 0)}, // ProgramScopeVariablesStorageBuffer in nonsemantic_clspvreflection + {29,IR(33, 3),IR(47039, 38),IR(1, 0)}, // ProgramScopeVariablePointerRelocation in nonsemantic_clspvreflection + {30,IR(296, 4),IR(47077, 42),IR(1, 0)}, // ImageArgumentInfoChannelOrderPushConstant in nonsemantic_clspvreflection + {31,IR(296, 4),IR(47119, 45),IR(1, 0)}, // ImageArgumentInfoChannelDataTypePushConstant in nonsemantic_clspvreflection + {32,IR(502, 6),IR(47164, 37),IR(1, 0)}, // ImageArgumentInfoChannelOrderUniform in nonsemantic_clspvreflection + {33,IR(502, 6),IR(47201, 40),IR(1, 0)}, // ImageArgumentInfoChannelDataTypeUniform in nonsemantic_clspvreflection + {34,IR(843, 5),IR(47241, 27),IR(1, 0)}, // ArgumentStorageTexelBuffer in nonsemantic_clspvreflection + {35,IR(843, 5),IR(47268, 27),IR(1, 0)}, // ArgumentUniformTexelBuffer in nonsemantic_clspvreflection + {36,IR(33, 3),IR(47295, 32),IR(1, 0)}, // ConstantDataPointerPushConstant in nonsemantic_clspvreflection + {37,IR(33, 3),IR(47327, 40),IR(1, 0)}, // ProgramScopeVariablePointerPushConstant in nonsemantic_clspvreflection + {38,IR(829, 3),IR(47367, 11),IR(1, 0)}, // PrintfInfo in nonsemantic_clspvreflection + {39,IR(33, 3),IR(47378, 26),IR(1, 0)}, // PrintfBufferStorageBuffer in nonsemantic_clspvreflection + {40,IR(33, 3),IR(47404, 32),IR(1, 0)}, // PrintfBufferPointerPushConstant in nonsemantic_clspvreflection + {41,IR(296, 4),IR(47436, 34),IR(1, 0)}, // NormalizedSamplerMaskPushConstant in nonsemantic_clspvreflection + {42,IR(36, 2),IR(47470, 22),IR(1, 0)}, // WorkgroupVariableSize in nonsemantic_clspvreflection + {0,IR(0, 0),IR(44894, 14),IR(1, 0)}, // DebugInfoNone in nonsemantic_shader_debuginfo_100 + {1,IR(296, 4),IR(44908, 21),IR(1, 0)}, // DebugCompilationUnit in nonsemantic_shader_debuginfo_100 + {2,IR(296, 4),IR(44981, 15),IR(1, 0)}, // DebugTypeBasic in nonsemantic_shader_debuginfo_100 + {3,IR(33, 3),IR(45030, 17),IR(1, 0)}, // DebugTypePointer in nonsemantic_shader_debuginfo_100 + {4,IR(36, 2),IR(45085, 19),IR(1, 0)}, // DebugTypeQualifier in nonsemantic_shader_debuginfo_100 + {5,IR(168, 2),IR(45104, 15),IR(1, 0)}, // DebugTypeArray in nonsemantic_shader_debuginfo_100 + {6,IR(36, 2),IR(45119, 16),IR(1, 0)}, // DebugTypeVector in nonsemantic_shader_debuginfo_100 + {7,IR(502, 6),IR(45135, 13),IR(1, 0)}, // DebugTypedef in nonsemantic_shader_debuginfo_100 + {8,IR(829, 3),IR(45148, 18),IR(1, 0)}, // DebugTypeFunction in nonsemantic_shader_debuginfo_100 + {9,IR(848, 9),IR(45166, 14),IR(1, 0)}, // DebugTypeEnum in nonsemantic_shader_debuginfo_100 + {10,IR(857, 10),IR(45218, 19),IR(1, 0)}, // DebugTypeComposite in nonsemantic_shader_debuginfo_100 + {11,IR(867, 9),IR(45237, 16),IR(1, 0)}, // DebugTypeMember in nonsemantic_shader_debuginfo_100 + {12,IR(296, 4),IR(45253, 21),IR(1, 0)}, // DebugTypeInheritance in nonsemantic_shader_debuginfo_100 + {13,IR(36, 2),IR(45274, 21),IR(1, 0)}, // DebugTypePtrToMember in nonsemantic_shader_debuginfo_100 + {14,IR(168, 2),IR(45295, 18),IR(1, 0)}, // DebugTypeTemplate in nonsemantic_shader_debuginfo_100 + {15,IR(502, 6),IR(45313, 27),IR(1, 0)}, // DebugTypeTemplateParameter in nonsemantic_shader_debuginfo_100 + {16,IR(611, 5),IR(45340, 35),IR(1, 0)}, // DebugTypeTemplateTemplateParameter in nonsemantic_shader_debuginfo_100 + {17,IR(876, 5),IR(45375, 31),IR(1, 0)}, // DebugTypeTemplateParameterPack in nonsemantic_shader_debuginfo_100 + {18,IR(881, 10),IR(45406, 20),IR(1, 0)}, // DebugGlobalVariable in nonsemantic_shader_debuginfo_100 + {19,IR(448, 8),IR(45426, 25),IR(1, 0)}, // DebugFunctionDeclaration in nonsemantic_shader_debuginfo_100 + {20,IR(881, 10),IR(45451, 14),IR(1, 0)}, // DebugFunction in nonsemantic_shader_debuginfo_100 + {21,IR(843, 5),IR(45465, 18),IR(1, 0)}, // DebugLexicalBlock in nonsemantic_shader_debuginfo_100 + {22,IR(33, 3),IR(45483, 31),IR(1, 0)}, // DebugLexicalBlockDiscriminator in nonsemantic_shader_debuginfo_100 + {23,IR(817, 2),IR(45514, 11),IR(1, 0)}, // DebugScope in nonsemantic_shader_debuginfo_100 + {24,IR(0, 0),IR(45525, 13),IR(1, 0)}, // DebugNoScope in nonsemantic_shader_debuginfo_100 + {25,IR(891, 3),IR(45538, 15),IR(1, 0)}, // DebugInlinedAt in nonsemantic_shader_debuginfo_100 + {26,IR(894, 8),IR(45595, 19),IR(1, 0)}, // DebugLocalVariable in nonsemantic_shader_debuginfo_100 + {27,IR(36, 2),IR(45614, 21),IR(1, 0)}, // DebugInlinedVariable in nonsemantic_shader_debuginfo_100 + {28,IR(902, 4),IR(45635, 13),IR(1, 0)}, // DebugDeclare in nonsemantic_shader_debuginfo_100 + {29,IR(902, 4),IR(45648, 11),IR(1, 0)}, // DebugValue in nonsemantic_shader_debuginfo_100 + {30,IR(168, 2),IR(45692, 15),IR(1, 0)}, // DebugOperation in nonsemantic_shader_debuginfo_100 + {31,IR(683, 1),IR(45707, 16),IR(1, 0)}, // DebugExpression in nonsemantic_shader_debuginfo_100 + {32,IR(554, 4),IR(45723, 14),IR(1, 0)}, // DebugMacroDef in nonsemantic_shader_debuginfo_100 + {33,IR(33, 3),IR(45737, 16),IR(1, 0)}, // DebugMacroUndef in nonsemantic_shader_debuginfo_100 + {34,IR(483, 7),IR(47492, 20),IR(1, 0)}, // DebugImportedEntity in nonsemantic_shader_debuginfo_100 + {35,IR(817, 2),IR(47512, 12),IR(1, 0)}, // DebugSource in nonsemantic_shader_debuginfo_100 + {101,IR(36, 2),IR(47524, 24),IR(1, 0)}, // DebugFunctionDefinition in nonsemantic_shader_debuginfo_100 + {102,IR(10, 1),IR(47548, 21),IR(1, 0)}, // DebugSourceContinued in nonsemantic_shader_debuginfo_100 + {103,IR(611, 5),IR(47569, 10),IR(1, 0)}, // DebugLine in nonsemantic_shader_debuginfo_100 + {104,IR(0, 0),IR(47579, 12),IR(1, 0)}, // DebugNoLine in nonsemantic_shader_debuginfo_100 + {105,IR(36, 2),IR(47591, 21),IR(1, 0)}, // DebugBuildIdentifier in nonsemantic_shader_debuginfo_100 + {106,IR(10, 1),IR(47612, 17),IR(1, 0)}, // DebugStoragePath in nonsemantic_shader_debuginfo_100 + {107,IR(296, 4),IR(47629, 16),IR(1, 0)}, // DebugEntryPoint in nonsemantic_shader_debuginfo_100 + {108,IR(33, 3),IR(47645, 16),IR(1, 0)}, // DebugTypeMatrix in nonsemantic_shader_debuginfo_100 + {1,IR(701, 9),IR(47661, 14),IR(1, 0)}, // Configuration in nonsemantic_vkspreflection + {2,IR(10, 1),IR(47675, 13),IR(1, 0)}, // StartCounter in nonsemantic_vkspreflection + {3,IR(10, 1),IR(47688, 12),IR(1, 0)}, // StopCounter in nonsemantic_vkspreflection + {4,IR(296, 4),IR(47700, 14),IR(1, 0)}, // PushConstants in nonsemantic_vkspreflection + {5,IR(33, 3),IR(47714, 23),IR(1, 0)}, // SpecializationMapEntry in nonsemantic_vkspreflection + {6,IR(906, 15),IR(47737, 20),IR(1, 0)}, // DescriptorSetBuffer in nonsemantic_vkspreflection + {7,IR(921, 33),IR(47757, 19),IR(1, 0)}, // DescriptorSetImage in nonsemantic_vkspreflection + {8,IR(954, 19),IR(47776, 21),IR(1, 0)}, // DescriptorSetSampler in nonsemantic_vkspreflection + {0,IR(0, 0),IR(44894, 14),IR(1, 0)}, // DebugInfoNone in opencl_debuginfo_100 + {1,IR(973, 4),IR(44908, 21),IR(1, 0)}, // DebugCompilationUnit in opencl_debuginfo_100 + {2,IR(977, 3),IR(44981, 15),IR(1, 0)}, // DebugTypeBasic in opencl_debuginfo_100 + {3,IR(980, 3),IR(45030, 17),IR(1, 0)}, // DebugTypePointer in opencl_debuginfo_100 + {4,IR(983, 2),IR(45085, 19),IR(1, 0)}, // DebugTypeQualifier in opencl_debuginfo_100 + {5,IR(168, 2),IR(45104, 15),IR(1, 0)}, // DebugTypeArray in opencl_debuginfo_100 + {6,IR(261, 2),IR(45119, 16),IR(1, 0)}, // DebugTypeVector in opencl_debuginfo_100 + {7,IR(735, 6),IR(45135, 13),IR(1, 0)}, // DebugTypedef in opencl_debuginfo_100 + {8,IR(985, 3),IR(45148, 18),IR(1, 0)}, // DebugTypeFunction in opencl_debuginfo_100 + {9,IR(988, 9),IR(45166, 14),IR(1, 0)}, // DebugTypeEnum in opencl_debuginfo_100 + {10,IR(997, 10),IR(45218, 19),IR(1, 0)}, // DebugTypeComposite in opencl_debuginfo_100 + {11,IR(1007, 10),IR(45237, 16),IR(1, 0)}, // DebugTypeMember in opencl_debuginfo_100 + {12,IR(1017, 5),IR(45253, 21),IR(1, 0)}, // DebugTypeInheritance in opencl_debuginfo_100 + {13,IR(36, 2),IR(45274, 21),IR(1, 0)}, // DebugTypePtrToMember in opencl_debuginfo_100 + {14,IR(168, 2),IR(45295, 18),IR(1, 0)}, // DebugTypeTemplate in opencl_debuginfo_100 + {15,IR(774, 6),IR(45313, 27),IR(1, 0)}, // DebugTypeTemplateParameter in opencl_debuginfo_100 + {16,IR(780, 5),IR(45340, 35),IR(1, 0)}, // DebugTypeTemplateTemplateParameter in opencl_debuginfo_100 + {17,IR(785, 5),IR(45375, 31),IR(1, 0)}, // DebugTypeTemplateParameterPack in opencl_debuginfo_100 + {18,IR(1007, 10),IR(45406, 20),IR(1, 0)}, // DebugGlobalVariable in opencl_debuginfo_100 + {19,IR(1022, 8),IR(45426, 25),IR(1, 0)}, // DebugFunctionDeclaration in opencl_debuginfo_100 + {20,IR(1030, 11),IR(45451, 14),IR(1, 0)}, // DebugFunction in opencl_debuginfo_100 + {21,IR(809, 5),IR(45465, 18),IR(1, 0)}, // DebugLexicalBlock in opencl_debuginfo_100 + {22,IR(814, 3),IR(45483, 31),IR(1, 0)}, // DebugLexicalBlockDiscriminator in opencl_debuginfo_100 + {23,IR(817, 2),IR(45514, 11),IR(1, 0)}, // DebugScope in opencl_debuginfo_100 + {24,IR(0, 0),IR(45525, 13),IR(1, 0)}, // DebugNoScope in opencl_debuginfo_100 + {25,IR(819, 3),IR(45538, 15),IR(1, 0)}, // DebugInlinedAt in opencl_debuginfo_100 + {26,IR(1041, 8),IR(45595, 19),IR(1, 0)}, // DebugLocalVariable in opencl_debuginfo_100 + {27,IR(36, 2),IR(45614, 21),IR(1, 0)}, // DebugInlinedVariable in opencl_debuginfo_100 + {28,IR(33, 3),IR(45635, 13),IR(1, 0)}, // DebugDeclare in opencl_debuginfo_100 + {29,IR(902, 4),IR(45648, 11),IR(1, 0)}, // DebugValue in opencl_debuginfo_100 + {30,IR(1049, 2),IR(45692, 15),IR(1, 0)}, // DebugOperation in opencl_debuginfo_100 + {31,IR(683, 1),IR(45707, 16),IR(1, 0)}, // DebugExpression in opencl_debuginfo_100 + {32,IR(834, 4),IR(45723, 14),IR(1, 0)}, // DebugMacroDef in opencl_debuginfo_100 + {33,IR(814, 3),IR(45737, 16),IR(1, 0)}, // DebugMacroUndef in opencl_debuginfo_100 + {34,IR(1051, 7),IR(47492, 20),IR(1, 0)}, // DebugImportedEntity in opencl_debuginfo_100 + {35,IR(817, 2),IR(47512, 12),IR(1, 0)}, // DebugSource in opencl_debuginfo_100 + {36,IR(1058, 8),IR(48097, 17),IR(1, 0)}, // DebugModuleINTEL in opencl_debuginfo_100 + {0,IR(10, 1),IR(48114, 5),IR(1, 0)}, // acos in opencl_std_100 + {1,IR(10, 1),IR(48119, 6),IR(1, 0)}, // acosh in opencl_std_100 + {2,IR(10, 1),IR(48125, 7),IR(1, 0)}, // acospi in opencl_std_100 + {3,IR(10, 1),IR(48132, 5),IR(1, 0)}, // asin in opencl_std_100 + {4,IR(10, 1),IR(48137, 6),IR(1, 0)}, // asinh in opencl_std_100 + {5,IR(10, 1),IR(48143, 7),IR(1, 0)}, // asinpi in opencl_std_100 + {6,IR(10, 1),IR(48150, 5),IR(1, 0)}, // atan in opencl_std_100 + {7,IR(36, 2),IR(48155, 6),IR(1, 0)}, // atan2 in opencl_std_100 + {8,IR(10, 1),IR(48161, 6),IR(1, 0)}, // atanh in opencl_std_100 + {9,IR(10, 1),IR(48167, 7),IR(1, 0)}, // atanpi in opencl_std_100 + {10,IR(36, 2),IR(48174, 8),IR(1, 0)}, // atan2pi in opencl_std_100 + {11,IR(10, 1),IR(48182, 5),IR(1, 0)}, // cbrt in opencl_std_100 + {12,IR(10, 1),IR(48187, 5),IR(1, 0)}, // ceil in opencl_std_100 + {13,IR(36, 2),IR(48192, 9),IR(1, 0)}, // copysign in opencl_std_100 + {14,IR(10, 1),IR(48201, 4),IR(1, 0)}, // cos in opencl_std_100 + {15,IR(10, 1),IR(48205, 5),IR(1, 0)}, // cosh in opencl_std_100 + {16,IR(10, 1),IR(48210, 6),IR(1, 0)}, // cospi in opencl_std_100 + {17,IR(10, 1),IR(48216, 5),IR(1, 0)}, // erfc in opencl_std_100 + {18,IR(10, 1),IR(48221, 4),IR(1, 0)}, // erf in opencl_std_100 + {19,IR(10, 1),IR(48225, 4),IR(1, 0)}, // exp in opencl_std_100 + {20,IR(10, 1),IR(48229, 5),IR(1, 0)}, // exp2 in opencl_std_100 + {21,IR(10, 1),IR(48234, 6),IR(1, 0)}, // exp10 in opencl_std_100 + {22,IR(10, 1),IR(48240, 6),IR(1, 0)}, // expm1 in opencl_std_100 + {23,IR(10, 1),IR(48246, 5),IR(1, 0)}, // fabs in opencl_std_100 + {24,IR(36, 2),IR(48251, 5),IR(1, 0)}, // fdim in opencl_std_100 + {25,IR(10, 1),IR(48256, 6),IR(1, 0)}, // floor in opencl_std_100 + {26,IR(33, 3),IR(48262, 4),IR(1, 0)}, // fma in opencl_std_100 + {27,IR(36, 2),IR(48266, 5),IR(1, 0)}, // fmax in opencl_std_100 + {28,IR(36, 2),IR(48271, 5),IR(1, 0)}, // fmin in opencl_std_100 + {29,IR(36, 2),IR(48276, 5),IR(1, 0)}, // fmod in opencl_std_100 + {30,IR(36, 2),IR(48281, 6),IR(1, 0)}, // fract in opencl_std_100 + {31,IR(36, 2),IR(48287, 6),IR(1, 0)}, // frexp in opencl_std_100 + {32,IR(36, 2),IR(48293, 6),IR(1, 0)}, // hypot in opencl_std_100 + {33,IR(10, 1),IR(48299, 6),IR(1, 0)}, // ilogb in opencl_std_100 + {34,IR(36, 2),IR(48305, 6),IR(1, 0)}, // ldexp in opencl_std_100 + {35,IR(10, 1),IR(48311, 7),IR(1, 0)}, // lgamma in opencl_std_100 + {36,IR(36, 2),IR(48318, 9),IR(1, 0)}, // lgamma_r in opencl_std_100 + {37,IR(10, 1),IR(48327, 4),IR(1, 0)}, // log in opencl_std_100 + {38,IR(10, 1),IR(48331, 5),IR(1, 0)}, // log2 in opencl_std_100 + {39,IR(10, 1),IR(48336, 6),IR(1, 0)}, // log10 in opencl_std_100 + {40,IR(10, 1),IR(48342, 6),IR(1, 0)}, // log1p in opencl_std_100 + {41,IR(10, 1),IR(48348, 5),IR(1, 0)}, // logb in opencl_std_100 + {42,IR(33, 3),IR(48353, 4),IR(1, 0)}, // mad in opencl_std_100 + {43,IR(36, 2),IR(48357, 7),IR(1, 0)}, // maxmag in opencl_std_100 + {44,IR(36, 2),IR(48364, 7),IR(1, 0)}, // minmag in opencl_std_100 + {45,IR(36, 2),IR(48371, 5),IR(1, 0)}, // modf in opencl_std_100 + {46,IR(10, 1),IR(48376, 4),IR(1, 0)}, // nan in opencl_std_100 + {47,IR(36, 2),IR(48380, 10),IR(1, 0)}, // nextafter in opencl_std_100 + {48,IR(36, 2),IR(48390, 4),IR(1, 0)}, // pow in opencl_std_100 + {49,IR(36, 2),IR(48394, 5),IR(1, 0)}, // pown in opencl_std_100 + {50,IR(36, 2),IR(48399, 5),IR(1, 0)}, // powr in opencl_std_100 + {51,IR(36, 2),IR(48404, 10),IR(1, 0)}, // remainder in opencl_std_100 + {52,IR(33, 3),IR(48414, 7),IR(1, 0)}, // remquo in opencl_std_100 + {53,IR(10, 1),IR(48421, 5),IR(1, 0)}, // rint in opencl_std_100 + {54,IR(36, 2),IR(48426, 6),IR(1, 0)}, // rootn in opencl_std_100 + {55,IR(10, 1),IR(48432, 6),IR(1, 0)}, // round in opencl_std_100 + {56,IR(10, 1),IR(48438, 6),IR(1, 0)}, // rsqrt in opencl_std_100 + {57,IR(10, 1),IR(48444, 4),IR(1, 0)}, // sin in opencl_std_100 + {58,IR(36, 2),IR(48448, 7),IR(1, 0)}, // sincos in opencl_std_100 + {59,IR(10, 1),IR(48455, 5),IR(1, 0)}, // sinh in opencl_std_100 + {60,IR(10, 1),IR(48460, 6),IR(1, 0)}, // sinpi in opencl_std_100 + {61,IR(10, 1),IR(48466, 5),IR(1, 0)}, // sqrt in opencl_std_100 + {62,IR(10, 1),IR(48471, 4),IR(1, 0)}, // tan in opencl_std_100 + {63,IR(10, 1),IR(48475, 5),IR(1, 0)}, // tanh in opencl_std_100 + {64,IR(10, 1),IR(48480, 6),IR(1, 0)}, // tanpi in opencl_std_100 + {65,IR(10, 1),IR(48486, 7),IR(1, 0)}, // tgamma in opencl_std_100 + {66,IR(10, 1),IR(48493, 6),IR(1, 0)}, // trunc in opencl_std_100 + {67,IR(10, 1),IR(48499, 9),IR(1, 0)}, // half_cos in opencl_std_100 + {68,IR(36, 2),IR(48508, 12),IR(1, 0)}, // half_divide in opencl_std_100 + {69,IR(10, 1),IR(48520, 9),IR(1, 0)}, // half_exp in opencl_std_100 + {70,IR(10, 1),IR(48529, 10),IR(1, 0)}, // half_exp2 in opencl_std_100 + {71,IR(10, 1),IR(48539, 11),IR(1, 0)}, // half_exp10 in opencl_std_100 + {72,IR(10, 1),IR(48550, 9),IR(1, 0)}, // half_log in opencl_std_100 + {73,IR(10, 1),IR(48559, 10),IR(1, 0)}, // half_log2 in opencl_std_100 + {74,IR(10, 1),IR(48569, 11),IR(1, 0)}, // half_log10 in opencl_std_100 + {75,IR(36, 2),IR(48580, 10),IR(1, 0)}, // half_powr in opencl_std_100 + {76,IR(10, 1),IR(48590, 11),IR(1, 0)}, // half_recip in opencl_std_100 + {77,IR(10, 1),IR(48601, 11),IR(1, 0)}, // half_rsqrt in opencl_std_100 + {78,IR(10, 1),IR(48612, 9),IR(1, 0)}, // half_sin in opencl_std_100 + {79,IR(10, 1),IR(48621, 10),IR(1, 0)}, // half_sqrt in opencl_std_100 + {80,IR(10, 1),IR(48631, 9),IR(1, 0)}, // half_tan in opencl_std_100 + {81,IR(10, 1),IR(48640, 11),IR(1, 0)}, // native_cos in opencl_std_100 + {82,IR(36, 2),IR(48651, 14),IR(1, 0)}, // native_divide in opencl_std_100 + {83,IR(10, 1),IR(48665, 11),IR(1, 0)}, // native_exp in opencl_std_100 + {84,IR(10, 1),IR(48676, 12),IR(1, 0)}, // native_exp2 in opencl_std_100 + {85,IR(10, 1),IR(48688, 13),IR(1, 0)}, // native_exp10 in opencl_std_100 + {86,IR(10, 1),IR(48701, 11),IR(1, 0)}, // native_log in opencl_std_100 + {87,IR(10, 1),IR(48712, 12),IR(1, 0)}, // native_log2 in opencl_std_100 + {88,IR(10, 1),IR(48724, 13),IR(1, 0)}, // native_log10 in opencl_std_100 + {89,IR(36, 2),IR(48737, 12),IR(1, 0)}, // native_powr in opencl_std_100 + {90,IR(10, 1),IR(48749, 13),IR(1, 0)}, // native_recip in opencl_std_100 + {91,IR(10, 1),IR(48762, 13),IR(1, 0)}, // native_rsqrt in opencl_std_100 + {92,IR(10, 1),IR(48775, 11),IR(1, 0)}, // native_sin in opencl_std_100 + {93,IR(10, 1),IR(48786, 12),IR(1, 0)}, // native_sqrt in opencl_std_100 + {94,IR(10, 1),IR(48798, 11),IR(1, 0)}, // native_tan in opencl_std_100 + {95,IR(33, 3),IR(48809, 7),IR(1, 0)}, // fclamp in opencl_std_100 + {96,IR(10, 1),IR(48816, 8),IR(1, 0)}, // degrees in opencl_std_100 + {97,IR(36, 2),IR(48824, 12),IR(1, 0)}, // fmax_common in opencl_std_100 + {98,IR(36, 2),IR(48836, 12),IR(1, 0)}, // fmin_common in opencl_std_100 + {99,IR(33, 3),IR(48848, 4),IR(1, 0)}, // mix in opencl_std_100 + {100,IR(10, 1),IR(48852, 8),IR(1, 0)}, // radians in opencl_std_100 + {101,IR(36, 2),IR(48860, 5),IR(1, 0)}, // step in opencl_std_100 + {102,IR(33, 3),IR(48865, 11),IR(1, 0)}, // smoothstep in opencl_std_100 + {103,IR(10, 1),IR(48876, 5),IR(1, 0)}, // sign in opencl_std_100 + {104,IR(36, 2),IR(48881, 6),IR(1, 0)}, // cross in opencl_std_100 + {105,IR(36, 2),IR(48887, 9),IR(1, 0)}, // distance in opencl_std_100 + {106,IR(10, 1),IR(48896, 7),IR(1, 0)}, // length in opencl_std_100 + {107,IR(10, 1),IR(48903, 10),IR(1, 0)}, // normalize in opencl_std_100 + {108,IR(36, 2),IR(48913, 14),IR(1, 0)}, // fast_distance in opencl_std_100 + {109,IR(10, 1),IR(48927, 12),IR(1, 0)}, // fast_length in opencl_std_100 + {110,IR(10, 1),IR(48939, 15),IR(1, 0)}, // fast_normalize in opencl_std_100 + {141,IR(10, 1),IR(48954, 6),IR(1, 0)}, // s_abs in opencl_std_100 + {142,IR(36, 2),IR(48960, 11),IR(1, 0)}, // s_abs_diff in opencl_std_100 + {143,IR(36, 2),IR(48971, 10),IR(1, 0)}, // s_add_sat in opencl_std_100 + {144,IR(36, 2),IR(48981, 10),IR(1, 0)}, // u_add_sat in opencl_std_100 + {145,IR(36, 2),IR(48991, 7),IR(1, 0)}, // s_hadd in opencl_std_100 + {146,IR(36, 2),IR(48998, 7),IR(1, 0)}, // u_hadd in opencl_std_100 + {147,IR(36, 2),IR(49005, 8),IR(1, 0)}, // s_rhadd in opencl_std_100 + {148,IR(36, 2),IR(49013, 8),IR(1, 0)}, // u_rhadd in opencl_std_100 + {149,IR(33, 3),IR(49021, 8),IR(1, 0)}, // s_clamp in opencl_std_100 + {150,IR(33, 3),IR(49029, 8),IR(1, 0)}, // u_clamp in opencl_std_100 + {151,IR(10, 1),IR(49037, 4),IR(1, 0)}, // clz in opencl_std_100 + {152,IR(10, 1),IR(49041, 4),IR(1, 0)}, // ctz in opencl_std_100 + {153,IR(33, 3),IR(49045, 9),IR(1, 0)}, // s_mad_hi in opencl_std_100 + {154,IR(33, 3),IR(49054, 10),IR(1, 0)}, // u_mad_sat in opencl_std_100 + {155,IR(33, 3),IR(49064, 10),IR(1, 0)}, // s_mad_sat in opencl_std_100 + {156,IR(36, 2),IR(49074, 6),IR(1, 0)}, // s_max in opencl_std_100 + {157,IR(36, 2),IR(49080, 6),IR(1, 0)}, // u_max in opencl_std_100 + {158,IR(36, 2),IR(49086, 6),IR(1, 0)}, // s_min in opencl_std_100 + {159,IR(36, 2),IR(49092, 6),IR(1, 0)}, // u_min in opencl_std_100 + {160,IR(36, 2),IR(49098, 9),IR(1, 0)}, // s_mul_hi in opencl_std_100 + {161,IR(36, 2),IR(49107, 7),IR(1, 0)}, // rotate in opencl_std_100 + {162,IR(36, 2),IR(49114, 10),IR(1, 0)}, // s_sub_sat in opencl_std_100 + {163,IR(36, 2),IR(49124, 10),IR(1, 0)}, // u_sub_sat in opencl_std_100 + {164,IR(36, 2),IR(49134, 11),IR(1, 0)}, // u_upsample in opencl_std_100 + {165,IR(36, 2),IR(49145, 11),IR(1, 0)}, // s_upsample in opencl_std_100 + {166,IR(10, 1),IR(49156, 9),IR(1, 0)}, // popcount in opencl_std_100 + {167,IR(33, 3),IR(49165, 8),IR(1, 0)}, // s_mad24 in opencl_std_100 + {168,IR(33, 3),IR(49173, 8),IR(1, 0)}, // u_mad24 in opencl_std_100 + {169,IR(36, 2),IR(49181, 8),IR(1, 0)}, // s_mul24 in opencl_std_100 + {170,IR(36, 2),IR(49189, 8),IR(1, 0)}, // u_mul24 in opencl_std_100 + {171,IR(1066, 3),IR(49197, 7),IR(1, 0)}, // vloadn in opencl_std_100 + {172,IR(33, 3),IR(49204, 8),IR(1, 0)}, // vstoren in opencl_std_100 + {173,IR(36, 2),IR(49212, 11),IR(1, 0)}, // vload_half in opencl_std_100 + {174,IR(1066, 3),IR(49223, 12),IR(1, 0)}, // vload_halfn in opencl_std_100 + {175,IR(33, 3),IR(49235, 12),IR(1, 0)}, // vstore_half in opencl_std_100 + {176,IR(1069, 4),IR(49247, 14),IR(1, 0)}, // vstore_half_r in opencl_std_100 + {177,IR(33, 3),IR(49261, 13),IR(1, 0)}, // vstore_halfn in opencl_std_100 + {178,IR(1069, 4),IR(49274, 15),IR(1, 0)}, // vstore_halfn_r in opencl_std_100 + {179,IR(1066, 3),IR(49289, 13),IR(1, 0)}, // vloada_halfn in opencl_std_100 + {180,IR(33, 3),IR(49302, 14),IR(1, 0)}, // vstorea_halfn in opencl_std_100 + {181,IR(1069, 4),IR(49316, 16),IR(1, 0)}, // vstorea_halfn_r in opencl_std_100 + {182,IR(36, 2),IR(49332, 8),IR(1, 0)}, // shuffle in opencl_std_100 + {183,IR(33, 3),IR(49340, 9),IR(1, 0)}, // shuffle2 in opencl_std_100 + {184,IR(168, 2),IR(49349, 7),IR(1, 0)}, // printf in opencl_std_100 + {185,IR(36, 2),IR(49356, 9),IR(1, 0)}, // prefetch in opencl_std_100 + {186,IR(33, 3),IR(49365, 10),IR(1, 0)}, // bitselect in opencl_std_100 + {187,IR(33, 3),IR(49375, 7),IR(1, 0)}, // select in opencl_std_100 + {201,IR(10, 1),IR(49382, 6),IR(1, 0)}, // u_abs in opencl_std_100 + {202,IR(36, 2),IR(49388, 11),IR(1, 0)}, // u_abs_diff in opencl_std_100 + {203,IR(36, 2),IR(49399, 9),IR(1, 0)}, // u_mul_hi in opencl_std_100 + {204,IR(33, 3),IR(49408, 9),IR(1, 0)}, // u_mad_hi in opencl_std_100 + {1,IR(10, 1),IR(49417, 17),IR(1, 0)}, // CubeFaceIndexAMD in spv_amd_gcn_shader + {2,IR(10, 1),IR(49434, 17),IR(1, 0)}, // CubeFaceCoordAMD in spv_amd_gcn_shader + {3,IR(0, 0),IR(49451, 8),IR(1, 0)}, // TimeAMD in spv_amd_gcn_shader + {1,IR(36, 2),IR(49459, 22),IR(1, 0)}, // SwizzleInvocationsAMD in spv_amd_shader_ballot + {2,IR(36, 2),IR(49481, 28),IR(1, 0)}, // SwizzleInvocationsMaskedAMD in spv_amd_shader_ballot + {3,IR(33, 3),IR(49509, 19),IR(1, 0)}, // WriteInvocationAMD in spv_amd_shader_ballot + {4,IR(10, 1),IR(49528, 9),IR(1, 0)}, // MbcntAMD in spv_amd_shader_ballot + {1,IR(36, 2),IR(49537, 23),IR(1, 0)}, // InterpolateAtVertexAMD in spv_amd_shader_explicit_vertex_parameter + {1,IR(33, 3),IR(49560, 9),IR(1, 0)}, // FMin3AMD in spv_amd_shader_trinary_minmax + {2,IR(33, 3),IR(49569, 9),IR(1, 0)}, // UMin3AMD in spv_amd_shader_trinary_minmax + {3,IR(33, 3),IR(49578, 9),IR(1, 0)}, // SMin3AMD in spv_amd_shader_trinary_minmax + {4,IR(33, 3),IR(49587, 9),IR(1, 0)}, // FMax3AMD in spv_amd_shader_trinary_minmax + {5,IR(33, 3),IR(49596, 9),IR(1, 0)}, // UMax3AMD in spv_amd_shader_trinary_minmax + {6,IR(33, 3),IR(49605, 9),IR(1, 0)}, // SMax3AMD in spv_amd_shader_trinary_minmax + {7,IR(33, 3),IR(49614, 9),IR(1, 0)}, // FMid3AMD in spv_amd_shader_trinary_minmax + {8,IR(33, 3),IR(49623, 9),IR(1, 0)}, // UMid3AMD in spv_amd_shader_trinary_minmax + {9,IR(33, 3),IR(49632, 9),IR(1, 0)}, // SMid3AMD in spv_amd_shader_trinary_minmax +}}; + +IndexRange ExtInstByValueRangeForKind(spv_ext_inst_type_t type) { + switch(type) { + case SPV_EXT_INST_TYPE_DEBUGINFO: return IR(0, 34); + case SPV_EXT_INST_TYPE_GLSL_STD_450: return IR(34, 81); + case SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION: return IR(115, 42); + case SPV_EXT_INST_TYPE_NONSEMANTIC_SHADER_DEBUGINFO_100: return IR(157, 44); + case SPV_EXT_INST_TYPE_NONSEMANTIC_VKSPREFLECTION: return IR(201, 8); + case SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100: return IR(209, 37); + case SPV_EXT_INST_TYPE_OPENCL_STD: return IR(246, 162); + case SPV_EXT_INST_TYPE_SPV_AMD_GCN_SHADER: return IR(408, 3); + case SPV_EXT_INST_TYPE_SPV_AMD_SHADER_BALLOT: return IR(411, 4); + case SPV_EXT_INST_TYPE_SPV_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER: return IR(415, 1); + case SPV_EXT_INST_TYPE_SPV_AMD_SHADER_TRINARY_MINMAX: return IR(416, 9); + default: break; + } + return IR(0,0); +} + +// Extended instruction opcode names sorted by extended instruction kind, then opcode name. +// The fields in order are: +// name +// index into kExtInstByValue +static const std::array kExtInstNames{{ + {IR(44908, 21), 1}, // DebugCompilationUnit in debuginfo + {IR(45635, 13), 28}, // DebugDeclare in debuginfo + {IR(45707, 16), 31}, // DebugExpression in debuginfo + {IR(45451, 14), 20}, // DebugFunction in debuginfo + {IR(45426, 25), 19}, // DebugFunctionDeclaration in debuginfo + {IR(45406, 20), 18}, // DebugGlobalVariable in debuginfo + {IR(44894, 14), 0}, // DebugInfoNone in debuginfo + {IR(45538, 15), 25}, // DebugInlinedAt in debuginfo + {IR(45614, 21), 27}, // DebugInlinedVariable in debuginfo + {IR(45465, 18), 21}, // DebugLexicalBlock in debuginfo + {IR(45483, 31), 22}, // DebugLexicalBlockDiscriminator in debuginfo + {IR(45595, 19), 26}, // DebugLocalVariable in debuginfo + {IR(45723, 14), 32}, // DebugMacroDef in debuginfo + {IR(45737, 16), 33}, // DebugMacroUndef in debuginfo + {IR(45525, 13), 24}, // DebugNoScope in debuginfo + {IR(45692, 15), 30}, // DebugOperation in debuginfo + {IR(45514, 11), 23}, // DebugScope in debuginfo + {IR(45104, 15), 5}, // DebugTypeArray in debuginfo + {IR(44981, 15), 2}, // DebugTypeBasic in debuginfo + {IR(45218, 19), 10}, // DebugTypeComposite in debuginfo + {IR(45166, 14), 9}, // DebugTypeEnum in debuginfo + {IR(45148, 18), 8}, // DebugTypeFunction in debuginfo + {IR(45253, 21), 12}, // DebugTypeInheritance in debuginfo + {IR(45237, 16), 11}, // DebugTypeMember in debuginfo + {IR(45030, 17), 3}, // DebugTypePointer in debuginfo + {IR(45274, 21), 13}, // DebugTypePtrToMember in debuginfo + {IR(45085, 19), 4}, // DebugTypeQualifier in debuginfo + {IR(45295, 18), 14}, // DebugTypeTemplate in debuginfo + {IR(45313, 27), 15}, // DebugTypeTemplateParameter in debuginfo + {IR(45375, 31), 17}, // DebugTypeTemplateParameterPack in debuginfo + {IR(45340, 35), 16}, // DebugTypeTemplateTemplateParameter in debuginfo + {IR(45119, 16), 6}, // DebugTypeVector in debuginfo + {IR(45135, 13), 7}, // DebugTypedef in debuginfo + {IR(45648, 11), 29}, // DebugValue in debuginfo + {IR(45847, 5), 50}, // Acos in glsl_std_450 + {IR(45878, 6), 56}, // Acosh in glsl_std_450 + {IR(45842, 5), 49}, // Asin in glsl_std_450 + {IR(45872, 6), 55}, // Asinh in glsl_std_450 + {IR(45852, 5), 51}, // Atan in glsl_std_450 + {IR(45890, 6), 58}, // Atan2 in glsl_std_450 + {IR(45884, 6), 57}, // Atanh in glsl_std_450 + {IR(45803, 5), 42}, // Ceil in glsl_std_450 + {IR(45834, 4), 47}, // Cos in glsl_std_450 + {IR(45862, 5), 53}, // Cosh in glsl_std_450 + {IR(46274, 6), 101}, // Cross in glsl_std_450 + {IR(45822, 8), 45}, // Degrees in glsl_std_450 + {IR(45935, 12), 66}, // Determinant in glsl_std_450 + {IR(46265, 9), 100}, // Distance in glsl_std_450 + {IR(45900, 4), 60}, // Exp in glsl_std_450 + {IR(45908, 5), 62}, // Exp2 in glsl_std_450 + {IR(45775, 5), 37}, // FAbs in glsl_std_450 + {IR(46007, 7), 76}, // FClamp in glsl_std_450 + {IR(45992, 5), 73}, // FMax in glsl_std_450 + {IR(45977, 5), 70}, // FMin in glsl_std_450 + {IR(46028, 5), 79}, // FMix in glsl_std_450 + {IR(45785, 6), 39}, // FSign in glsl_std_450 + {IR(46290, 12), 103}, // FaceForward in glsl_std_450 + {IR(46318, 9), 106}, // FindILsb in glsl_std_450 + {IR(46327, 9), 107}, // FindSMsb in glsl_std_450 + {IR(46336, 9), 108}, // FindUMsb in glsl_std_450 + {IR(45797, 6), 41}, // Floor in glsl_std_450 + {IR(46054, 4), 83}, // Fma in glsl_std_450 + {IR(45808, 6), 43}, // Fract in glsl_std_450 + {IR(46058, 6), 84}, // Frexp in glsl_std_450 + {IR(46064, 12), 85}, // FrexpStruct in glsl_std_450 + {IR(46033, 5), 80}, // IMix in glsl_std_450 + {IR(46345, 22), 109}, // InterpolateAtCentroid in glsl_std_450 + {IR(46387, 20), 111}, // InterpolateAtOffset in glsl_std_450 + {IR(46367, 20), 110}, // InterpolateAtSample in glsl_std_450 + {IR(45923, 12), 65}, // InverseSqrt in glsl_std_450 + {IR(46076, 6), 86}, // Ldexp in glsl_std_450 + {IR(46258, 7), 99}, // Length in glsl_std_450 + {IR(45904, 4), 61}, // Log in glsl_std_450 + {IR(45913, 5), 63}, // Log2 in glsl_std_450 + {IR(45947, 14), 67}, // MatrixInverse in glsl_std_450 + {IR(45961, 5), 68}, // Modf in glsl_std_450 + {IR(45966, 11), 69}, // ModfStruct in glsl_std_450 + {IR(46417, 7), 114}, // NClamp in glsl_std_450 + {IR(46412, 5), 113}, // NMax in glsl_std_450 + {IR(46407, 5), 112}, // NMin in glsl_std_450 + {IR(46280, 10), 102}, // Normalize in glsl_std_450 + {IR(46149, 15), 92}, // PackDouble2x32 in glsl_std_450 + {IR(46136, 13), 91}, // PackHalf2x16 in glsl_std_450 + {IR(46108, 14), 89}, // PackSnorm2x16 in glsl_std_450 + {IR(46082, 13), 87}, // PackSnorm4x8 in glsl_std_450 + {IR(46122, 14), 90}, // PackUnorm2x16 in glsl_std_450 + {IR(46095, 13), 88}, // PackUnorm4x8 in glsl_std_450 + {IR(45896, 4), 59}, // Pow in glsl_std_450 + {IR(45814, 8), 44}, // Radians in glsl_std_450 + {IR(46302, 8), 104}, // Reflect in glsl_std_450 + {IR(46310, 8), 105}, // Refract in glsl_std_450 + {IR(45753, 6), 34}, // Round in glsl_std_450 + {IR(45759, 10), 35}, // RoundEven in glsl_std_450 + {IR(45780, 5), 38}, // SAbs in glsl_std_450 + {IR(46021, 7), 78}, // SClamp in glsl_std_450 + {IR(46002, 5), 75}, // SMax in glsl_std_450 + {IR(45987, 5), 72}, // SMin in glsl_std_450 + {IR(45791, 6), 40}, // SSign in glsl_std_450 + {IR(45830, 4), 46}, // Sin in glsl_std_450 + {IR(45857, 5), 52}, // Sinh in glsl_std_450 + {IR(46043, 11), 82}, // SmoothStep in glsl_std_450 + {IR(45918, 5), 64}, // Sqrt in glsl_std_450 + {IR(46038, 5), 81}, // Step in glsl_std_450 + {IR(45838, 4), 48}, // Tan in glsl_std_450 + {IR(45867, 5), 54}, // Tanh in glsl_std_450 + {IR(45769, 6), 36}, // Trunc in glsl_std_450 + {IR(46014, 7), 77}, // UClamp in glsl_std_450 + {IR(45997, 5), 74}, // UMax in glsl_std_450 + {IR(45982, 5), 71}, // UMin in glsl_std_450 + {IR(46241, 17), 98}, // UnpackDouble2x32 in glsl_std_450 + {IR(46196, 15), 95}, // UnpackHalf2x16 in glsl_std_450 + {IR(46164, 16), 93}, // UnpackSnorm2x16 in glsl_std_450 + {IR(46211, 15), 96}, // UnpackSnorm4x8 in glsl_std_450 + {IR(46180, 16), 94}, // UnpackUnorm2x16 in glsl_std_450 + {IR(46226, 15), 97}, // UnpackUnorm4x8 in glsl_std_450 + {IR(46424, 13), 116}, // ArgumentInfo in nonsemantic_clspvreflection + {IR(46519, 24), 121}, // ArgumentPodPushConstant in nonsemantic_clspvreflection + {IR(46475, 25), 119}, // ArgumentPodStorageBuffer in nonsemantic_clspvreflection + {IR(46500, 19), 120}, // ArgumentPodUniform in nonsemantic_clspvreflection + {IR(46953, 28), 140}, // ArgumentPointerPushConstant in nonsemantic_clspvreflection + {IR(46981, 23), 141}, // ArgumentPointerUniform in nonsemantic_clspvreflection + {IR(46543, 21), 122}, // ArgumentSampledImage in nonsemantic_clspvreflection + {IR(46585, 16), 124}, // ArgumentSampler in nonsemantic_clspvreflection + {IR(46437, 22), 117}, // ArgumentStorageBuffer in nonsemantic_clspvreflection + {IR(46564, 21), 123}, // ArgumentStorageImage in nonsemantic_clspvreflection + {IR(47241, 27), 148}, // ArgumentStorageTexelBuffer in nonsemantic_clspvreflection + {IR(46459, 16), 118}, // ArgumentUniform in nonsemantic_clspvreflection + {IR(47268, 27), 149}, // ArgumentUniformTexelBuffer in nonsemantic_clspvreflection + {IR(46601, 18), 125}, // ArgumentWorkgroup in nonsemantic_clspvreflection + {IR(47295, 32), 150}, // ConstantDataPointerPushConstant in nonsemantic_clspvreflection + {IR(46849, 26), 135}, // ConstantDataStorageBuffer in nonsemantic_clspvreflection + {IR(46875, 20), 136}, // ConstantDataUniform in nonsemantic_clspvreflection + {IR(47119, 45), 145}, // ImageArgumentInfoChannelDataTypePushConstant in nonsemantic_clspvreflection + {IR(47201, 40), 147}, // ImageArgumentInfoChannelDataTypeUniform in nonsemantic_clspvreflection + {IR(47077, 42), 144}, // ImageArgumentInfoChannelOrderPushConstant in nonsemantic_clspvreflection + {IR(47164, 37), 146}, // ImageArgumentInfoChannelOrderUniform in nonsemantic_clspvreflection + {IR(4549, 7), 115}, // Kernel in nonsemantic_clspvreflection + {IR(7974, 15), 137}, // LiteralSampler in nonsemantic_clspvreflection + {IR(47436, 34), 155}, // NormalizedSamplerMaskPushConstant in nonsemantic_clspvreflection + {IR(47404, 32), 154}, // PrintfBufferPointerPushConstant in nonsemantic_clspvreflection + {IR(47378, 26), 153}, // PrintfBufferStorageBuffer in nonsemantic_clspvreflection + {IR(47367, 11), 152}, // PrintfInfo in nonsemantic_clspvreflection + {IR(47327, 40), 151}, // ProgramScopeVariablePointerPushConstant in nonsemantic_clspvreflection + {IR(47039, 38), 143}, // ProgramScopeVariablePointerRelocation in nonsemantic_clspvreflection + {IR(47004, 35), 142}, // ProgramScopeVariablesStorageBuffer in nonsemantic_clspvreflection + {IR(46895, 30), 138}, // PropertyRequiredWorkgroupSize in nonsemantic_clspvreflection + {IR(46715, 30), 130}, // PushConstantEnqueuedLocalSize in nonsemantic_clspvreflection + {IR(46690, 25), 129}, // PushConstantGlobalOffset in nonsemantic_clspvreflection + {IR(46745, 23), 131}, // PushConstantGlobalSize in nonsemantic_clspvreflection + {IR(46793, 26), 133}, // PushConstantNumWorkgroups in nonsemantic_clspvreflection + {IR(46819, 30), 134}, // PushConstantRegionGroupOffset in nonsemantic_clspvreflection + {IR(46768, 25), 132}, // PushConstantRegionOffset in nonsemantic_clspvreflection + {IR(46645, 25), 127}, // SpecConstantGlobalOffset in nonsemantic_clspvreflection + {IR(46925, 28), 139}, // SpecConstantSubgroupMaxSize in nonsemantic_clspvreflection + {IR(46670, 20), 128}, // SpecConstantWorkDim in nonsemantic_clspvreflection + {IR(46619, 26), 126}, // SpecConstantWorkgroupSize in nonsemantic_clspvreflection + {IR(47470, 22), 156}, // WorkgroupVariableSize in nonsemantic_clspvreflection + {IR(47591, 21), 197}, // DebugBuildIdentifier in nonsemantic_shader_debuginfo_100 + {IR(44908, 21), 158}, // DebugCompilationUnit in nonsemantic_shader_debuginfo_100 + {IR(45635, 13), 185}, // DebugDeclare in nonsemantic_shader_debuginfo_100 + {IR(47629, 16), 199}, // DebugEntryPoint in nonsemantic_shader_debuginfo_100 + {IR(45707, 16), 188}, // DebugExpression in nonsemantic_shader_debuginfo_100 + {IR(45451, 14), 177}, // DebugFunction in nonsemantic_shader_debuginfo_100 + {IR(45426, 25), 176}, // DebugFunctionDeclaration in nonsemantic_shader_debuginfo_100 + {IR(47524, 24), 193}, // DebugFunctionDefinition in nonsemantic_shader_debuginfo_100 + {IR(45406, 20), 175}, // DebugGlobalVariable in nonsemantic_shader_debuginfo_100 + {IR(47492, 20), 191}, // DebugImportedEntity in nonsemantic_shader_debuginfo_100 + {IR(44894, 14), 157}, // DebugInfoNone in nonsemantic_shader_debuginfo_100 + {IR(45538, 15), 182}, // DebugInlinedAt in nonsemantic_shader_debuginfo_100 + {IR(45614, 21), 184}, // DebugInlinedVariable in nonsemantic_shader_debuginfo_100 + {IR(45465, 18), 178}, // DebugLexicalBlock in nonsemantic_shader_debuginfo_100 + {IR(45483, 31), 179}, // DebugLexicalBlockDiscriminator in nonsemantic_shader_debuginfo_100 + {IR(47569, 10), 195}, // DebugLine in nonsemantic_shader_debuginfo_100 + {IR(45595, 19), 183}, // DebugLocalVariable in nonsemantic_shader_debuginfo_100 + {IR(45723, 14), 189}, // DebugMacroDef in nonsemantic_shader_debuginfo_100 + {IR(45737, 16), 190}, // DebugMacroUndef in nonsemantic_shader_debuginfo_100 + {IR(47579, 12), 196}, // DebugNoLine in nonsemantic_shader_debuginfo_100 + {IR(45525, 13), 181}, // DebugNoScope in nonsemantic_shader_debuginfo_100 + {IR(45692, 15), 187}, // DebugOperation in nonsemantic_shader_debuginfo_100 + {IR(45514, 11), 180}, // DebugScope in nonsemantic_shader_debuginfo_100 + {IR(47512, 12), 192}, // DebugSource in nonsemantic_shader_debuginfo_100 + {IR(47548, 21), 194}, // DebugSourceContinued in nonsemantic_shader_debuginfo_100 + {IR(47612, 17), 198}, // DebugStoragePath in nonsemantic_shader_debuginfo_100 + {IR(45104, 15), 162}, // DebugTypeArray in nonsemantic_shader_debuginfo_100 + {IR(44981, 15), 159}, // DebugTypeBasic in nonsemantic_shader_debuginfo_100 + {IR(45218, 19), 167}, // DebugTypeComposite in nonsemantic_shader_debuginfo_100 + {IR(45166, 14), 166}, // DebugTypeEnum in nonsemantic_shader_debuginfo_100 + {IR(45148, 18), 165}, // DebugTypeFunction in nonsemantic_shader_debuginfo_100 + {IR(45253, 21), 169}, // DebugTypeInheritance in nonsemantic_shader_debuginfo_100 + {IR(47645, 16), 200}, // DebugTypeMatrix in nonsemantic_shader_debuginfo_100 + {IR(45237, 16), 168}, // DebugTypeMember in nonsemantic_shader_debuginfo_100 + {IR(45030, 17), 160}, // DebugTypePointer in nonsemantic_shader_debuginfo_100 + {IR(45274, 21), 170}, // DebugTypePtrToMember in nonsemantic_shader_debuginfo_100 + {IR(45085, 19), 161}, // DebugTypeQualifier in nonsemantic_shader_debuginfo_100 + {IR(45295, 18), 171}, // DebugTypeTemplate in nonsemantic_shader_debuginfo_100 + {IR(45313, 27), 172}, // DebugTypeTemplateParameter in nonsemantic_shader_debuginfo_100 + {IR(45375, 31), 174}, // DebugTypeTemplateParameterPack in nonsemantic_shader_debuginfo_100 + {IR(45340, 35), 173}, // DebugTypeTemplateTemplateParameter in nonsemantic_shader_debuginfo_100 + {IR(45119, 16), 163}, // DebugTypeVector in nonsemantic_shader_debuginfo_100 + {IR(45135, 13), 164}, // DebugTypedef in nonsemantic_shader_debuginfo_100 + {IR(45648, 11), 186}, // DebugValue in nonsemantic_shader_debuginfo_100 + {IR(47661, 14), 201}, // Configuration in nonsemantic_vkspreflection + {IR(47737, 20), 206}, // DescriptorSetBuffer in nonsemantic_vkspreflection + {IR(47757, 19), 207}, // DescriptorSetImage in nonsemantic_vkspreflection + {IR(47776, 21), 208}, // DescriptorSetSampler in nonsemantic_vkspreflection + {IR(47700, 14), 204}, // PushConstants in nonsemantic_vkspreflection + {IR(47714, 23), 205}, // SpecializationMapEntry in nonsemantic_vkspreflection + {IR(47675, 13), 202}, // StartCounter in nonsemantic_vkspreflection + {IR(47688, 12), 203}, // StopCounter in nonsemantic_vkspreflection + {IR(44908, 21), 210}, // DebugCompilationUnit in opencl_debuginfo_100 + {IR(45635, 13), 237}, // DebugDeclare in opencl_debuginfo_100 + {IR(45707, 16), 240}, // DebugExpression in opencl_debuginfo_100 + {IR(45451, 14), 229}, // DebugFunction in opencl_debuginfo_100 + {IR(45426, 25), 228}, // DebugFunctionDeclaration in opencl_debuginfo_100 + {IR(45406, 20), 227}, // DebugGlobalVariable in opencl_debuginfo_100 + {IR(47492, 20), 243}, // DebugImportedEntity in opencl_debuginfo_100 + {IR(44894, 14), 209}, // DebugInfoNone in opencl_debuginfo_100 + {IR(45538, 15), 234}, // DebugInlinedAt in opencl_debuginfo_100 + {IR(45614, 21), 236}, // DebugInlinedVariable in opencl_debuginfo_100 + {IR(45465, 18), 230}, // DebugLexicalBlock in opencl_debuginfo_100 + {IR(45483, 31), 231}, // DebugLexicalBlockDiscriminator in opencl_debuginfo_100 + {IR(45595, 19), 235}, // DebugLocalVariable in opencl_debuginfo_100 + {IR(45723, 14), 241}, // DebugMacroDef in opencl_debuginfo_100 + {IR(45737, 16), 242}, // DebugMacroUndef in opencl_debuginfo_100 + {IR(48097, 17), 245}, // DebugModuleINTEL in opencl_debuginfo_100 + {IR(45525, 13), 233}, // DebugNoScope in opencl_debuginfo_100 + {IR(45692, 15), 239}, // DebugOperation in opencl_debuginfo_100 + {IR(45514, 11), 232}, // DebugScope in opencl_debuginfo_100 + {IR(47512, 12), 244}, // DebugSource in opencl_debuginfo_100 + {IR(45104, 15), 214}, // DebugTypeArray in opencl_debuginfo_100 + {IR(44981, 15), 211}, // DebugTypeBasic in opencl_debuginfo_100 + {IR(45218, 19), 219}, // DebugTypeComposite in opencl_debuginfo_100 + {IR(45166, 14), 218}, // DebugTypeEnum in opencl_debuginfo_100 + {IR(45148, 18), 217}, // DebugTypeFunction in opencl_debuginfo_100 + {IR(45253, 21), 221}, // DebugTypeInheritance in opencl_debuginfo_100 + {IR(45237, 16), 220}, // DebugTypeMember in opencl_debuginfo_100 + {IR(45030, 17), 212}, // DebugTypePointer in opencl_debuginfo_100 + {IR(45274, 21), 222}, // DebugTypePtrToMember in opencl_debuginfo_100 + {IR(45085, 19), 213}, // DebugTypeQualifier in opencl_debuginfo_100 + {IR(45295, 18), 223}, // DebugTypeTemplate in opencl_debuginfo_100 + {IR(45313, 27), 224}, // DebugTypeTemplateParameter in opencl_debuginfo_100 + {IR(45375, 31), 226}, // DebugTypeTemplateParameterPack in opencl_debuginfo_100 + {IR(45340, 35), 225}, // DebugTypeTemplateTemplateParameter in opencl_debuginfo_100 + {IR(45119, 16), 215}, // DebugTypeVector in opencl_debuginfo_100 + {IR(45135, 13), 216}, // DebugTypedef in opencl_debuginfo_100 + {IR(45648, 11), 238}, // DebugValue in opencl_debuginfo_100 + {IR(48114, 5), 246}, // acos in opencl_std_100 + {IR(48119, 6), 247}, // acosh in opencl_std_100 + {IR(48125, 7), 248}, // acospi in opencl_std_100 + {IR(48132, 5), 249}, // asin in opencl_std_100 + {IR(48137, 6), 250}, // asinh in opencl_std_100 + {IR(48143, 7), 251}, // asinpi in opencl_std_100 + {IR(48150, 5), 252}, // atan in opencl_std_100 + {IR(48155, 6), 253}, // atan2 in opencl_std_100 + {IR(48174, 8), 256}, // atan2pi in opencl_std_100 + {IR(48161, 6), 254}, // atanh in opencl_std_100 + {IR(48167, 7), 255}, // atanpi in opencl_std_100 + {IR(49365, 10), 402}, // bitselect in opencl_std_100 + {IR(48182, 5), 257}, // cbrt in opencl_std_100 + {IR(48187, 5), 258}, // ceil in opencl_std_100 + {IR(49037, 4), 367}, // clz in opencl_std_100 + {IR(48192, 9), 259}, // copysign in opencl_std_100 + {IR(48201, 4), 260}, // cos in opencl_std_100 + {IR(48205, 5), 261}, // cosh in opencl_std_100 + {IR(48210, 6), 262}, // cospi in opencl_std_100 + {IR(48881, 6), 350}, // cross in opencl_std_100 + {IR(49041, 4), 368}, // ctz in opencl_std_100 + {IR(48816, 8), 342}, // degrees in opencl_std_100 + {IR(48887, 9), 351}, // distance in opencl_std_100 + {IR(48221, 4), 264}, // erf in opencl_std_100 + {IR(48216, 5), 263}, // erfc in opencl_std_100 + {IR(48225, 4), 265}, // exp in opencl_std_100 + {IR(48234, 6), 267}, // exp10 in opencl_std_100 + {IR(48229, 5), 266}, // exp2 in opencl_std_100 + {IR(48240, 6), 268}, // expm1 in opencl_std_100 + {IR(48246, 5), 269}, // fabs in opencl_std_100 + {IR(48913, 14), 354}, // fast_distance in opencl_std_100 + {IR(48927, 12), 355}, // fast_length in opencl_std_100 + {IR(48939, 15), 356}, // fast_normalize in opencl_std_100 + {IR(48809, 7), 341}, // fclamp in opencl_std_100 + {IR(48251, 5), 270}, // fdim in opencl_std_100 + {IR(48256, 6), 271}, // floor in opencl_std_100 + {IR(48262, 4), 272}, // fma in opencl_std_100 + {IR(48266, 5), 273}, // fmax in opencl_std_100 + {IR(48824, 12), 343}, // fmax_common in opencl_std_100 + {IR(48271, 5), 274}, // fmin in opencl_std_100 + {IR(48836, 12), 344}, // fmin_common in opencl_std_100 + {IR(48276, 5), 275}, // fmod in opencl_std_100 + {IR(48281, 6), 276}, // fract in opencl_std_100 + {IR(48287, 6), 277}, // frexp in opencl_std_100 + {IR(48499, 9), 313}, // half_cos in opencl_std_100 + {IR(48508, 12), 314}, // half_divide in opencl_std_100 + {IR(48520, 9), 315}, // half_exp in opencl_std_100 + {IR(48539, 11), 317}, // half_exp10 in opencl_std_100 + {IR(48529, 10), 316}, // half_exp2 in opencl_std_100 + {IR(48550, 9), 318}, // half_log in opencl_std_100 + {IR(48569, 11), 320}, // half_log10 in opencl_std_100 + {IR(48559, 10), 319}, // half_log2 in opencl_std_100 + {IR(48580, 10), 321}, // half_powr in opencl_std_100 + {IR(48590, 11), 322}, // half_recip in opencl_std_100 + {IR(48601, 11), 323}, // half_rsqrt in opencl_std_100 + {IR(48612, 9), 324}, // half_sin in opencl_std_100 + {IR(48621, 10), 325}, // half_sqrt in opencl_std_100 + {IR(48631, 9), 326}, // half_tan in opencl_std_100 + {IR(48293, 6), 278}, // hypot in opencl_std_100 + {IR(48299, 6), 279}, // ilogb in opencl_std_100 + {IR(48305, 6), 280}, // ldexp in opencl_std_100 + {IR(48896, 7), 352}, // length in opencl_std_100 + {IR(48311, 7), 281}, // lgamma in opencl_std_100 + {IR(48318, 9), 282}, // lgamma_r in opencl_std_100 + {IR(48327, 4), 283}, // log in opencl_std_100 + {IR(48336, 6), 285}, // log10 in opencl_std_100 + {IR(48342, 6), 286}, // log1p in opencl_std_100 + {IR(48331, 5), 284}, // log2 in opencl_std_100 + {IR(48348, 5), 287}, // logb in opencl_std_100 + {IR(48353, 4), 288}, // mad in opencl_std_100 + {IR(48357, 7), 289}, // maxmag in opencl_std_100 + {IR(48364, 7), 290}, // minmag in opencl_std_100 + {IR(48848, 4), 345}, // mix in opencl_std_100 + {IR(48371, 5), 291}, // modf in opencl_std_100 + {IR(48376, 4), 292}, // nan in opencl_std_100 + {IR(48640, 11), 327}, // native_cos in opencl_std_100 + {IR(48651, 14), 328}, // native_divide in opencl_std_100 + {IR(48665, 11), 329}, // native_exp in opencl_std_100 + {IR(48688, 13), 331}, // native_exp10 in opencl_std_100 + {IR(48676, 12), 330}, // native_exp2 in opencl_std_100 + {IR(48701, 11), 332}, // native_log in opencl_std_100 + {IR(48724, 13), 334}, // native_log10 in opencl_std_100 + {IR(48712, 12), 333}, // native_log2 in opencl_std_100 + {IR(48737, 12), 335}, // native_powr in opencl_std_100 + {IR(48749, 13), 336}, // native_recip in opencl_std_100 + {IR(48762, 13), 337}, // native_rsqrt in opencl_std_100 + {IR(48775, 11), 338}, // native_sin in opencl_std_100 + {IR(48786, 12), 339}, // native_sqrt in opencl_std_100 + {IR(48798, 11), 340}, // native_tan in opencl_std_100 + {IR(48380, 10), 293}, // nextafter in opencl_std_100 + {IR(48903, 10), 353}, // normalize in opencl_std_100 + {IR(49156, 9), 382}, // popcount in opencl_std_100 + {IR(48390, 4), 294}, // pow in opencl_std_100 + {IR(48394, 5), 295}, // pown in opencl_std_100 + {IR(48399, 5), 296}, // powr in opencl_std_100 + {IR(49356, 9), 401}, // prefetch in opencl_std_100 + {IR(49349, 7), 400}, // printf in opencl_std_100 + {IR(48852, 8), 346}, // radians in opencl_std_100 + {IR(48404, 10), 297}, // remainder in opencl_std_100 + {IR(48414, 7), 298}, // remquo in opencl_std_100 + {IR(48421, 5), 299}, // rint in opencl_std_100 + {IR(48426, 6), 300}, // rootn in opencl_std_100 + {IR(49107, 7), 377}, // rotate in opencl_std_100 + {IR(48432, 6), 301}, // round in opencl_std_100 + {IR(48438, 6), 302}, // rsqrt in opencl_std_100 + {IR(48954, 6), 357}, // s_abs in opencl_std_100 + {IR(48960, 11), 358}, // s_abs_diff in opencl_std_100 + {IR(48971, 10), 359}, // s_add_sat in opencl_std_100 + {IR(49021, 8), 365}, // s_clamp in opencl_std_100 + {IR(48991, 7), 361}, // s_hadd in opencl_std_100 + {IR(49165, 8), 383}, // s_mad24 in opencl_std_100 + {IR(49045, 9), 369}, // s_mad_hi in opencl_std_100 + {IR(49064, 10), 371}, // s_mad_sat in opencl_std_100 + {IR(49074, 6), 372}, // s_max in opencl_std_100 + {IR(49086, 6), 374}, // s_min in opencl_std_100 + {IR(49181, 8), 385}, // s_mul24 in opencl_std_100 + {IR(49098, 9), 376}, // s_mul_hi in opencl_std_100 + {IR(49005, 8), 363}, // s_rhadd in opencl_std_100 + {IR(49114, 10), 378}, // s_sub_sat in opencl_std_100 + {IR(49145, 11), 381}, // s_upsample in opencl_std_100 + {IR(49375, 7), 403}, // select in opencl_std_100 + {IR(49332, 8), 398}, // shuffle in opencl_std_100 + {IR(49340, 9), 399}, // shuffle2 in opencl_std_100 + {IR(48876, 5), 349}, // sign in opencl_std_100 + {IR(48444, 4), 303}, // sin in opencl_std_100 + {IR(48448, 7), 304}, // sincos in opencl_std_100 + {IR(48455, 5), 305}, // sinh in opencl_std_100 + {IR(48460, 6), 306}, // sinpi in opencl_std_100 + {IR(48865, 11), 348}, // smoothstep in opencl_std_100 + {IR(48466, 5), 307}, // sqrt in opencl_std_100 + {IR(48860, 5), 347}, // step in opencl_std_100 + {IR(48471, 4), 308}, // tan in opencl_std_100 + {IR(48475, 5), 309}, // tanh in opencl_std_100 + {IR(48480, 6), 310}, // tanpi in opencl_std_100 + {IR(48486, 7), 311}, // tgamma in opencl_std_100 + {IR(48493, 6), 312}, // trunc in opencl_std_100 + {IR(49382, 6), 404}, // u_abs in opencl_std_100 + {IR(49388, 11), 405}, // u_abs_diff in opencl_std_100 + {IR(48981, 10), 360}, // u_add_sat in opencl_std_100 + {IR(49029, 8), 366}, // u_clamp in opencl_std_100 + {IR(48998, 7), 362}, // u_hadd in opencl_std_100 + {IR(49173, 8), 384}, // u_mad24 in opencl_std_100 + {IR(49408, 9), 407}, // u_mad_hi in opencl_std_100 + {IR(49054, 10), 370}, // u_mad_sat in opencl_std_100 + {IR(49080, 6), 373}, // u_max in opencl_std_100 + {IR(49092, 6), 375}, // u_min in opencl_std_100 + {IR(49189, 8), 386}, // u_mul24 in opencl_std_100 + {IR(49399, 9), 406}, // u_mul_hi in opencl_std_100 + {IR(49013, 8), 364}, // u_rhadd in opencl_std_100 + {IR(49124, 10), 379}, // u_sub_sat in opencl_std_100 + {IR(49134, 11), 380}, // u_upsample in opencl_std_100 + {IR(49212, 11), 389}, // vload_half in opencl_std_100 + {IR(49223, 12), 390}, // vload_halfn in opencl_std_100 + {IR(49289, 13), 395}, // vloada_halfn in opencl_std_100 + {IR(49197, 7), 387}, // vloadn in opencl_std_100 + {IR(49235, 12), 391}, // vstore_half in opencl_std_100 + {IR(49247, 14), 392}, // vstore_half_r in opencl_std_100 + {IR(49261, 13), 393}, // vstore_halfn in opencl_std_100 + {IR(49274, 15), 394}, // vstore_halfn_r in opencl_std_100 + {IR(49302, 14), 396}, // vstorea_halfn in opencl_std_100 + {IR(49316, 16), 397}, // vstorea_halfn_r in opencl_std_100 + {IR(49204, 8), 388}, // vstoren in opencl_std_100 + {IR(49434, 17), 409}, // CubeFaceCoordAMD in spv_amd_gcn_shader + {IR(49417, 17), 408}, // CubeFaceIndexAMD in spv_amd_gcn_shader + {IR(49451, 8), 410}, // TimeAMD in spv_amd_gcn_shader + {IR(49528, 9), 414}, // MbcntAMD in spv_amd_shader_ballot + {IR(49459, 22), 411}, // SwizzleInvocationsAMD in spv_amd_shader_ballot + {IR(49481, 28), 412}, // SwizzleInvocationsMaskedAMD in spv_amd_shader_ballot + {IR(49509, 19), 413}, // WriteInvocationAMD in spv_amd_shader_ballot + {IR(49537, 23), 415}, // InterpolateAtVertexAMD in spv_amd_shader_explicit_vertex_parameter + {IR(49587, 9), 419}, // FMax3AMD in spv_amd_shader_trinary_minmax + {IR(49614, 9), 422}, // FMid3AMD in spv_amd_shader_trinary_minmax + {IR(49560, 9), 416}, // FMin3AMD in spv_amd_shader_trinary_minmax + {IR(49605, 9), 421}, // SMax3AMD in spv_amd_shader_trinary_minmax + {IR(49632, 9), 424}, // SMid3AMD in spv_amd_shader_trinary_minmax + {IR(49578, 9), 418}, // SMin3AMD in spv_amd_shader_trinary_minmax + {IR(49596, 9), 420}, // UMax3AMD in spv_amd_shader_trinary_minmax + {IR(49623, 9), 423}, // UMid3AMD in spv_amd_shader_trinary_minmax + {IR(49569, 9), 417}, // UMin3AMD in spv_amd_shader_trinary_minmax +}}; + +IndexRange ExtInstNameRangeForKind(spv_ext_inst_type_t type) { + switch(type) { + case SPV_EXT_INST_TYPE_DEBUGINFO: return IR(0, 34); + case SPV_EXT_INST_TYPE_GLSL_STD_450: return IR(34, 81); + case SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION: return IR(115, 42); + case SPV_EXT_INST_TYPE_NONSEMANTIC_SHADER_DEBUGINFO_100: return IR(157, 44); + case SPV_EXT_INST_TYPE_NONSEMANTIC_VKSPREFLECTION: return IR(201, 8); + case SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100: return IR(209, 37); + case SPV_EXT_INST_TYPE_OPENCL_STD: return IR(246, 162); + case SPV_EXT_INST_TYPE_SPV_AMD_GCN_SHADER: return IR(408, 3); + case SPV_EXT_INST_TYPE_SPV_AMD_SHADER_BALLOT: return IR(411, 4); + case SPV_EXT_INST_TYPE_SPV_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER: return IR(415, 1); + case SPV_EXT_INST_TYPE_SPV_AMD_SHADER_TRINARY_MINMAX: return IR(416, 9); + default: break; + } + return IR(0,0); +} + +// Array of characters, referenced by IndexRanges elsewhere. +// Each IndexRange denotes a string. +static const char kStrings[] = + "SPV_AMDX_shader_enqueue\0" // IR(0, 24) + "SPV_AMD_gcn_shader\0" // IR(24, 19) + "SPV_AMD_gpu_shader_half_float\0" // IR(43, 30) + "SPV_AMD_gpu_shader_half_float_fetch\0" // IR(73, 36) + "SPV_AMD_gpu_shader_int16\0" // IR(109, 25) + "SPV_AMD_shader_ballot\0" // IR(134, 22) + "SPV_AMD_shader_early_and_late_fragment_tests\0" // IR(156, 45) + "SPV_AMD_shader_explicit_vertex_parameter\0" // IR(201, 41) + "SPV_AMD_shader_fragment_mask\0" // IR(242, 29) + "SPV_AMD_shader_image_load_store_lod\0" // IR(271, 36) + "SPV_AMD_shader_trinary_minmax\0" // IR(307, 30) + "SPV_AMD_texture_gather_bias_lod\0" // IR(337, 32) + "SPV_ARM_cooperative_matrix_layouts\0" // IR(369, 35) + "SPV_ARM_core_builtins\0" // IR(404, 22) + "SPV_ARM_tensors\0" // IR(426, 16) + "SPV_EXT_arithmetic_fence\0" // IR(442, 25) + "SPV_EXT_demote_to_helper_invocation\0" // IR(467, 36) + "SPV_EXT_descriptor_indexing\0" // IR(503, 28) + "SPV_EXT_float8\0" // IR(531, 15) + "SPV_EXT_fragment_fully_covered\0" // IR(546, 31) + "SPV_EXT_fragment_invocation_density\0" // IR(577, 36) + "SPV_EXT_fragment_shader_interlock\0" // IR(613, 34) + "SPV_EXT_mesh_shader\0" // IR(647, 20) + "SPV_EXT_opacity_micromap\0" // IR(667, 25) + "SPV_EXT_optnone\0" // IR(692, 16) + "SPV_EXT_physical_storage_buffer\0" // IR(708, 32) + "SPV_EXT_relaxed_printf_string_address_space\0" // IR(740, 44) + "SPV_EXT_replicated_composites\0" // IR(784, 30) + "SPV_EXT_shader_atomic_float16_add\0" // IR(814, 34) + "SPV_EXT_shader_atomic_float_add\0" // IR(848, 32) + "SPV_EXT_shader_atomic_float_min_max\0" // IR(880, 36) + "SPV_EXT_shader_image_int64\0" // IR(916, 27) + "SPV_EXT_shader_stencil_export\0" // IR(943, 30) + "SPV_EXT_shader_tile_image\0" // IR(973, 26) + "SPV_EXT_shader_viewport_index_layer\0" // IR(999, 36) + "SPV_GOOGLE_decorate_string\0" // IR(1035, 27) + "SPV_GOOGLE_hlsl_functionality1\0" // IR(1062, 31) + "SPV_GOOGLE_user_type\0" // IR(1093, 21) + "SPV_INTEL_2d_block_io\0" // IR(1114, 22) + "SPV_INTEL_arbitrary_precision_fixed_point\0" // IR(1136, 42) + "SPV_INTEL_arbitrary_precision_floating_point\0" // IR(1178, 45) + "SPV_INTEL_arbitrary_precision_integers\0" // IR(1223, 39) + "SPV_INTEL_bfloat16_conversion\0" // IR(1262, 30) + "SPV_INTEL_bindless_images\0" // IR(1292, 26) + "SPV_INTEL_blocking_pipes\0" // IR(1318, 25) + "SPV_INTEL_cache_controls\0" // IR(1343, 25) + "SPV_INTEL_debug_module\0" // IR(1368, 23) + "SPV_INTEL_device_side_avc_motion_estimation\0" // IR(1391, 44) + "SPV_INTEL_float_controls2\0" // IR(1435, 26) + "SPV_INTEL_fp_fast_math_mode\0" // IR(1461, 28) + "SPV_INTEL_fp_max_error\0" // IR(1489, 23) + "SPV_INTEL_fpga_argument_interfaces\0" // IR(1512, 35) + "SPV_INTEL_fpga_buffer_location\0" // IR(1547, 31) + "SPV_INTEL_fpga_cluster_attributes\0" // IR(1578, 34) + "SPV_INTEL_fpga_dsp_control\0" // IR(1612, 27) + "SPV_INTEL_fpga_invocation_pipelining_attributes\0" // IR(1639, 48) + "SPV_INTEL_fpga_latency_control\0" // IR(1687, 31) + "SPV_INTEL_fpga_loop_controls\0" // IR(1718, 29) + "SPV_INTEL_fpga_memory_accesses\0" // IR(1747, 31) + "SPV_INTEL_fpga_memory_attributes\0" // IR(1778, 33) + "SPV_INTEL_fpga_reg\0" // IR(1811, 19) + "SPV_INTEL_function_pointers\0" // IR(1830, 28) + "SPV_INTEL_global_variable_fpga_decorations\0" // IR(1858, 43) + "SPV_INTEL_global_variable_host_access\0" // IR(1901, 38) + "SPV_INTEL_inline_assembly\0" // IR(1939, 26) + "SPV_INTEL_int4\0" // IR(1965, 15) + "SPV_INTEL_io_pipes\0" // IR(1980, 19) + "SPV_INTEL_kernel_attributes\0" // IR(1999, 28) + "SPV_INTEL_long_composites\0" // IR(2027, 26) + "SPV_INTEL_loop_fuse\0" // IR(2053, 20) + "SPV_INTEL_masked_gather_scatter\0" // IR(2073, 32) + "SPV_INTEL_maximum_registers\0" // IR(2105, 28) + "SPV_INTEL_media_block_io\0" // IR(2133, 25) + "SPV_INTEL_memory_access_aliasing\0" // IR(2158, 33) + "SPV_INTEL_optnone\0" // IR(2191, 18) + "SPV_INTEL_runtime_aligned\0" // IR(2209, 26) + "SPV_INTEL_shader_integer_functions2\0" // IR(2235, 36) + "SPV_INTEL_split_barrier\0" // IR(2271, 24) + "SPV_INTEL_subgroup_buffer_prefetch\0" // IR(2295, 35) + "SPV_INTEL_subgroup_matrix_multiply_accumulate\0" // IR(2330, 46) + "SPV_INTEL_subgroups\0" // IR(2376, 20) + "SPV_INTEL_task_sequence\0" // IR(2396, 24) + "SPV_INTEL_tensor_float32_conversion\0" // IR(2420, 36) + "SPV_INTEL_ternary_bitwise_function\0" // IR(2456, 35) + "SPV_INTEL_unstructured_loop_controls\0" // IR(2491, 37) + "SPV_INTEL_usm_storage_classes\0" // IR(2528, 30) + "SPV_INTEL_variable_length_array\0" // IR(2558, 32) + "SPV_INTEL_vector_compute\0" // IR(2590, 25) + "SPV_KHR_16bit_storage\0" // IR(2615, 22) + "SPV_KHR_8bit_storage\0" // IR(2637, 21) + "SPV_KHR_bfloat16\0" // IR(2658, 17) + "SPV_KHR_bit_instructions\0" // IR(2675, 25) + "SPV_KHR_compute_shader_derivatives\0" // IR(2700, 35) + "SPV_KHR_cooperative_matrix\0" // IR(2735, 27) + "SPV_KHR_device_group\0" // IR(2762, 21) + "SPV_KHR_expect_assume\0" // IR(2783, 22) + "SPV_KHR_float_controls\0" // IR(2805, 23) + "SPV_KHR_float_controls2\0" // IR(2828, 24) + "SPV_KHR_fragment_shader_barycentric\0" // IR(2852, 36) + "SPV_KHR_fragment_shading_rate\0" // IR(2888, 30) + "SPV_KHR_integer_dot_product\0" // IR(2918, 28) + "SPV_KHR_linkonce_odr\0" // IR(2946, 21) + "SPV_KHR_maximal_reconvergence\0" // IR(2967, 30) + "SPV_KHR_multiview\0" // IR(2997, 18) + "SPV_KHR_no_integer_wrap_decoration\0" // IR(3015, 35) + "SPV_KHR_non_semantic_info\0" // IR(3050, 26) + "SPV_KHR_physical_storage_buffer\0" // IR(3076, 32) + "SPV_KHR_post_depth_coverage\0" // IR(3108, 28) + "SPV_KHR_quad_control\0" // IR(3136, 21) + "SPV_KHR_ray_cull_mask\0" // IR(3157, 22) + "SPV_KHR_ray_query\0" // IR(3179, 18) + "SPV_KHR_ray_tracing\0" // IR(3197, 20) + "SPV_KHR_ray_tracing_position_fetch\0" // IR(3217, 35) + "SPV_KHR_relaxed_extended_instruction\0" // IR(3252, 37) + "SPV_KHR_shader_atomic_counter_ops\0" // IR(3289, 34) + "SPV_KHR_shader_ballot\0" // IR(3323, 22) + "SPV_KHR_shader_clock\0" // IR(3345, 21) + "SPV_KHR_shader_draw_parameters\0" // IR(3366, 31) + "SPV_KHR_storage_buffer_storage_class\0" // IR(3397, 37) + "SPV_KHR_subgroup_rotate\0" // IR(3434, 24) + "SPV_KHR_subgroup_uniform_control_flow\0" // IR(3458, 38) + "SPV_KHR_subgroup_vote\0" // IR(3496, 22) + "SPV_KHR_terminate_invocation\0" // IR(3518, 29) + "SPV_KHR_uniform_group_instructions\0" // IR(3547, 35) + "SPV_KHR_untyped_pointers\0" // IR(3582, 25) + "SPV_KHR_variable_pointers\0" // IR(3607, 26) + "SPV_KHR_vulkan_memory_model\0" // IR(3633, 28) + "SPV_KHR_workgroup_memory_explicit_layout\0" // IR(3661, 41) + "SPV_NVX_multiview_per_view_attributes\0" // IR(3702, 38) + "SPV_NV_bindless_texture\0" // IR(3740, 24) + "SPV_NV_cluster_acceleration_structure\0" // IR(3764, 38) + "SPV_NV_compute_shader_derivatives\0" // IR(3802, 34) + "SPV_NV_cooperative_matrix\0" // IR(3836, 26) + "SPV_NV_cooperative_matrix2\0" // IR(3862, 27) + "SPV_NV_cooperative_vector\0" // IR(3889, 26) + "SPV_NV_displacement_micromap\0" // IR(3915, 29) + "SPV_NV_fragment_shader_barycentric\0" // IR(3944, 35) + "SPV_NV_geometry_shader_passthrough\0" // IR(3979, 35) + "SPV_NV_linear_swept_spheres\0" // IR(4014, 28) + "SPV_NV_mesh_shader\0" // IR(4042, 19) + "SPV_NV_raw_access_chains\0" // IR(4061, 25) + "SPV_NV_ray_tracing\0" // IR(4086, 19) + "SPV_NV_ray_tracing_motion_blur\0" // IR(4105, 31) + "SPV_NV_sample_mask_override_coverage\0" // IR(4136, 37) + "SPV_NV_shader_atomic_fp16_vector\0" // IR(4173, 33) + "SPV_NV_shader_image_footprint\0" // IR(4206, 30) + "SPV_NV_shader_invocation_reorder\0" // IR(4236, 33) + "SPV_NV_shader_sm_builtins\0" // IR(4269, 26) + "SPV_NV_shader_subgroup_partitioned\0" // IR(4295, 35) + "SPV_NV_shading_rate\0" // IR(4330, 20) + "SPV_NV_stereo_view_rendering\0" // IR(4350, 29) + "SPV_NV_tensor_addressing\0" // IR(4379, 25) + "SPV_NV_viewport_array2\0" // IR(4404, 23) + "SPV_QCOM_image_processing\0" // IR(4427, 26) + "SPV_QCOM_image_processing2\0" // IR(4453, 27) + "SPV_QCOM_tile_shading\0" // IR(4480, 22) + "SPV_VALIDATOR_ignore_type_decl_unique\0" // IR(4502, 38) + "ReadOnly\0" // IR(4540, 9) + "Kernel\0" // IR(4549, 7) + "WriteOnly\0" // IR(4556, 10) + "ReadWrite\0" // IR(4566, 10) + "Logical\0" // IR(4576, 8) + "Physical32\0" // IR(4584, 11) + "Addresses\0" // IR(4595, 10) + "Physical64\0" // IR(4605, 11) + "PhysicalStorageBuffer64\0" // IR(4616, 24) + "PhysicalStorageBuffer64EXT\0" // IR(4640, 27) + "PhysicalStorageBufferAddresses\0" // IR(4667, 31) + "Position\0" // IR(4698, 9) + "Shader\0" // IR(4707, 7) + "PointSize\0" // IR(4714, 10) + "ClipDistance\0" // IR(4724, 13) + "CullDistance\0" // IR(4737, 13) + "VertexId\0" // IR(4750, 9) + "InstanceId\0" // IR(4759, 11) + "PrimitiveId\0" // IR(4770, 12) + "Geometry\0" // IR(4782, 9) + "Tessellation\0" // IR(4791, 13) + "RayTracingNV\0" // IR(4804, 13) + "RayTracingKHR\0" // IR(4817, 14) + "MeshShadingNV\0" // IR(4831, 14) + "MeshShadingEXT\0" // IR(4845, 15) + "InvocationId\0" // IR(4860, 13) + "Layer\0" // IR(4873, 6) + "ShaderLayer\0" // IR(4879, 12) + "ShaderViewportIndexLayerEXT\0" // IR(4891, 28) + "ViewportIndex\0" // IR(4919, 14) + "MultiViewport\0" // IR(4933, 14) + "ShaderViewportIndex\0" // IR(4947, 20) + "TessLevelOuter\0" // IR(4967, 15) + "TessLevelInner\0" // IR(4982, 15) + "TessCoord\0" // IR(4997, 10) + "PatchVertices\0" // IR(5007, 14) + "FragCoord\0" // IR(5021, 10) + "PointCoord\0" // IR(5031, 11) + "FrontFacing\0" // IR(5042, 12) + "SampleId\0" // IR(5054, 9) + "SampleRateShading\0" // IR(5063, 18) + "SamplePosition\0" // IR(5081, 15) + "SampleMask\0" // IR(5096, 11) + "FragDepth\0" // IR(5107, 10) + "HelperInvocation\0" // IR(5117, 17) + "NumWorkgroups\0" // IR(5134, 14) + "WorkgroupSize\0" // IR(5148, 14) + "WorkgroupId\0" // IR(5162, 12) + "LocalInvocationId\0" // IR(5174, 18) + "GlobalInvocationId\0" // IR(5192, 19) + "LocalInvocationIndex\0" // IR(5211, 21) + "WorkDim\0" // IR(5232, 8) + "GlobalSize\0" // IR(5240, 11) + "EnqueuedWorkgroupSize\0" // IR(5251, 22) + "GlobalOffset\0" // IR(5273, 13) + "GlobalLinearId\0" // IR(5286, 15) + "SubgroupSize\0" // IR(5301, 13) + "GroupNonUniform\0" // IR(5314, 16) + "SubgroupBallotKHR\0" // IR(5330, 18) + "SubgroupMaxSize\0" // IR(5348, 16) + "NumSubgroups\0" // IR(5364, 13) + "NumEnqueuedSubgroups\0" // IR(5377, 21) + "SubgroupId\0" // IR(5398, 11) + "SubgroupLocalInvocationId\0" // IR(5409, 26) + "VertexIndex\0" // IR(5435, 12) + "InstanceIndex\0" // IR(5447, 14) + "CoreIDARM\0" // IR(5461, 10) + "CoreBuiltinsARM\0" // IR(5471, 16) + "CoreCountARM\0" // IR(5487, 13) + "CoreMaxIDARM\0" // IR(5500, 13) + "WarpIDARM\0" // IR(5513, 10) + "WarpMaxIDARM\0" // IR(5523, 13) + "SubgroupEqMask\0" // IR(5536, 15) + "SubgroupEqMaskKHR\0" // IR(5551, 18) + "GroupNonUniformBallot\0" // IR(5569, 22) + "SubgroupGeMask\0" // IR(5591, 15) + "SubgroupGeMaskKHR\0" // IR(5606, 18) + "SubgroupGtMask\0" // IR(5624, 15) + "SubgroupGtMaskKHR\0" // IR(5639, 18) + "SubgroupLeMask\0" // IR(5657, 15) + "SubgroupLeMaskKHR\0" // IR(5672, 18) + "SubgroupLtMask\0" // IR(5690, 15) + "SubgroupLtMaskKHR\0" // IR(5705, 18) + "BaseVertex\0" // IR(5723, 11) + "DrawParameters\0" // IR(5734, 15) + "BaseInstance\0" // IR(5749, 13) + "DrawIndex\0" // IR(5762, 10) + "PrimitiveShadingRateKHR\0" // IR(5772, 24) + "FragmentShadingRateKHR\0" // IR(5796, 23) + "DeviceIndex\0" // IR(5819, 12) + "DeviceGroup\0" // IR(5831, 12) + "ViewIndex\0" // IR(5843, 10) + "MultiView\0" // IR(5853, 10) + "ShadingRateKHR\0" // IR(5863, 15) + "TileOffsetQCOM\0" // IR(5878, 15) + "TileShadingQCOM\0" // IR(5893, 16) + "TileDimensionQCOM\0" // IR(5909, 18) + "TileApronSizeQCOM\0" // IR(5927, 18) + "BaryCoordNoPerspAMD\0" // IR(5945, 20) + "BaryCoordNoPerspCentroidAMD\0" // IR(5965, 28) + "BaryCoordNoPerspSampleAMD\0" // IR(5993, 26) + "BaryCoordSmoothAMD\0" // IR(6019, 19) + "BaryCoordSmoothCentroidAMD\0" // IR(6038, 27) + "BaryCoordSmoothSampleAMD\0" // IR(6065, 25) + "BaryCoordPullModelAMD\0" // IR(6090, 22) + "FragStencilRefEXT\0" // IR(6112, 18) + "StencilExportEXT\0" // IR(6130, 17) + "RemainingRecursionLevelsAMDX\0" // IR(6147, 29) + "ShaderEnqueueAMDX\0" // IR(6176, 18) + "ShaderIndexAMDX\0" // IR(6194, 16) + "ViewportMaskNV\0" // IR(6210, 15) + "ShaderViewportMaskNV\0" // IR(6225, 21) + "SecondaryPositionNV\0" // IR(6246, 20) + "ShaderStereoViewNV\0" // IR(6266, 19) + "SecondaryViewportMaskNV\0" // IR(6285, 24) + "PositionPerViewNV\0" // IR(6309, 18) + "PerViewAttributesNV\0" // IR(6327, 20) + "ViewportMaskPerViewNV\0" // IR(6347, 22) + "FullyCoveredEXT\0" // IR(6369, 16) + "FragmentFullyCoveredEXT\0" // IR(6385, 24) + "TaskCountNV\0" // IR(6409, 12) + "PrimitiveCountNV\0" // IR(6421, 17) + "PrimitiveIndicesNV\0" // IR(6438, 19) + "ClipDistancePerViewNV\0" // IR(6457, 22) + "CullDistancePerViewNV\0" // IR(6479, 22) + "LayerPerViewNV\0" // IR(6501, 15) + "MeshViewCountNV\0" // IR(6516, 16) + "MeshViewIndicesNV\0" // IR(6532, 18) + "BaryCoordKHR\0" // IR(6550, 13) + "BaryCoordNV\0" // IR(6563, 12) + "FragmentBarycentricKHR\0" // IR(6575, 23) + "BaryCoordNoPerspKHR\0" // IR(6598, 20) + "BaryCoordNoPerspNV\0" // IR(6618, 19) + "FragSizeEXT\0" // IR(6637, 12) + "FragmentSizeNV\0" // IR(6649, 15) + "FragmentDensityEXT\0" // IR(6664, 19) + "FragInvocationCountEXT\0" // IR(6683, 23) + "InvocationsPerPixelNV\0" // IR(6706, 22) + "PrimitivePointIndicesEXT\0" // IR(6728, 25) + "PrimitiveLineIndicesEXT\0" // IR(6753, 24) + "PrimitiveTriangleIndicesEXT\0" // IR(6777, 28) + "CullPrimitiveEXT\0" // IR(6805, 17) + "LaunchIdKHR\0" // IR(6822, 12) + "LaunchIdNV\0" // IR(6834, 11) + "LaunchSizeKHR\0" // IR(6845, 14) + "LaunchSizeNV\0" // IR(6859, 13) + "WorldRayOriginKHR\0" // IR(6872, 18) + "WorldRayOriginNV\0" // IR(6890, 17) + "WorldRayDirectionKHR\0" // IR(6907, 21) + "WorldRayDirectionNV\0" // IR(6928, 20) + "ObjectRayOriginKHR\0" // IR(6948, 19) + "ObjectRayOriginNV\0" // IR(6967, 18) + "ObjectRayDirectionKHR\0" // IR(6985, 22) + "ObjectRayDirectionNV\0" // IR(7007, 21) + "RayTminKHR\0" // IR(7028, 11) + "RayTminNV\0" // IR(7039, 10) + "RayTmaxKHR\0" // IR(7049, 11) + "RayTmaxNV\0" // IR(7060, 10) + "InstanceCustomIndexKHR\0" // IR(7070, 23) + "InstanceCustomIndexNV\0" // IR(7093, 22) + "ObjectToWorldKHR\0" // IR(7115, 17) + "ObjectToWorldNV\0" // IR(7132, 16) + "WorldToObjectKHR\0" // IR(7148, 17) + "WorldToObjectNV\0" // IR(7165, 16) + "HitTNV\0" // IR(7181, 7) + "HitKindKHR\0" // IR(7188, 11) + "HitKindNV\0" // IR(7199, 10) + "CurrentRayTimeNV\0" // IR(7209, 17) + "RayTracingMotionBlurNV\0" // IR(7226, 23) + "HitTriangleVertexPositionsKHR\0" // IR(7249, 30) + "RayTracingPositionFetchKHR\0" // IR(7279, 27) + "HitMicroTriangleVertexPositionsNV\0" // IR(7306, 34) + "RayTracingDisplacementMicromapNV\0" // IR(7340, 33) + "HitMicroTriangleVertexBarycentricsNV\0" // IR(7373, 37) + "IncomingRayFlagsKHR\0" // IR(7410, 20) + "IncomingRayFlagsNV\0" // IR(7430, 19) + "RayGeometryIndexKHR\0" // IR(7449, 20) + "HitIsSphereNV\0" // IR(7469, 14) + "RayTracingSpheresGeometryNV\0" // IR(7483, 28) + "HitIsLSSNV\0" // IR(7511, 11) + "RayTracingLinearSweptSpheresGeometryNV\0" // IR(7522, 39) + "HitSpherePositionNV\0" // IR(7561, 20) + "WarpsPerSMNV\0" // IR(7581, 13) + "ShaderSMBuiltinsNV\0" // IR(7594, 19) + "SMCountNV\0" // IR(7613, 10) + "WarpIDNV\0" // IR(7623, 9) + "SMIDNV\0" // IR(7632, 7) + "HitLSSPositionsNV\0" // IR(7639, 18) + "HitKindFrontFacingMicroTriangleNV\0" // IR(7657, 34) + "HitKindBackFacingMicroTriangleNV\0" // IR(7691, 33) + "HitSphereRadiusNV\0" // IR(7724, 18) + "HitLSSRadiiNV\0" // IR(7742, 14) + "ClusterIDNV\0" // IR(7756, 12) + "RayTracingClusterAccelerationStructureNV\0" // IR(7768, 41) + "CullMaskKHR\0" // IR(7809, 12) + "RayCullMaskKHR\0" // IR(7821, 15) + "Matrix\0" // IR(7836, 7) + "Linkage\0" // IR(7843, 8) + "Vector16\0" // IR(7851, 9) + "Float16Buffer\0" // IR(7860, 14) + "Float16\0" // IR(7874, 8) + "Float64\0" // IR(7882, 8) + "Int64\0" // IR(7890, 6) + "Int64Atomics\0" // IR(7896, 13) + "ImageBasic\0" // IR(7909, 11) + "ImageReadWrite\0" // IR(7920, 15) + "ImageMipmap\0" // IR(7935, 12) + "Pipes\0" // IR(7947, 6) + "Groups\0" // IR(7953, 7) + "DeviceEnqueue\0" // IR(7960, 14) + "LiteralSampler\0" // IR(7974, 15) + "AtomicStorage\0" // IR(7989, 14) + "Int16\0" // IR(8003, 6) + "TessellationPointSize\0" // IR(8009, 22) + "GeometryPointSize\0" // IR(8031, 18) + "ImageGatherExtended\0" // IR(8049, 20) + "StorageImageMultisample\0" // IR(8069, 24) + "UniformBufferArrayDynamicIndexing\0" // IR(8093, 34) + "SampledImageArrayDynamicIndexing\0" // IR(8127, 33) + "StorageBufferArrayDynamicIndexing\0" // IR(8160, 34) + "StorageImageArrayDynamicIndexing\0" // IR(8194, 33) + "ImageCubeArray\0" // IR(8227, 15) + "SampledCubeArray\0" // IR(8242, 17) + "ImageRect\0" // IR(8259, 10) + "SampledRect\0" // IR(8269, 12) + "GenericPointer\0" // IR(8281, 15) + "Int8\0" // IR(8296, 5) + "InputAttachment\0" // IR(8301, 16) + "SparseResidency\0" // IR(8317, 16) + "MinLod\0" // IR(8333, 7) + "Sampled1D\0" // IR(8340, 10) + "Image1D\0" // IR(8350, 8) + "SampledBuffer\0" // IR(8358, 14) + "ImageBuffer\0" // IR(8372, 12) + "ImageMSArray\0" // IR(8384, 13) + "StorageImageExtendedFormats\0" // IR(8397, 28) + "ImageQuery\0" // IR(8425, 11) + "DerivativeControl\0" // IR(8436, 18) + "InterpolationFunction\0" // IR(8454, 22) + "TransformFeedback\0" // IR(8476, 18) + "GeometryStreams\0" // IR(8494, 16) + "StorageImageReadWithoutFormat\0" // IR(8510, 30) + "StorageImageWriteWithoutFormat\0" // IR(8540, 31) + "SubgroupDispatch\0" // IR(8571, 17) + "NamedBarrier\0" // IR(8588, 13) + "PipeStorage\0" // IR(8601, 12) + "GroupNonUniformVote\0" // IR(8613, 20) + "GroupNonUniformArithmetic\0" // IR(8633, 26) + "GroupNonUniformShuffle\0" // IR(8659, 23) + "GroupNonUniformShuffleRelative\0" // IR(8682, 31) + "GroupNonUniformClustered\0" // IR(8713, 25) + "GroupNonUniformQuad\0" // IR(8738, 20) + "UniformDecoration\0" // IR(8758, 18) + "TileImageColorReadAccessEXT\0" // IR(8776, 28) + "TileImageDepthReadAccessEXT\0" // IR(8804, 28) + "TileImageStencilReadAccessEXT\0" // IR(8832, 30) + "TensorsARM\0" // IR(8862, 11) + "StorageTensorArrayDynamicIndexingARM\0" // IR(8873, 37) + "StorageTensorArrayNonUniformIndexingARM\0" // IR(8910, 40) + "CooperativeMatrixLayoutsARM\0" // IR(8950, 28) + "Float8EXT\0" // IR(8978, 10) + "Float8CooperativeMatrixEXT\0" // IR(8988, 27) + "WorkgroupMemoryExplicitLayoutKHR\0" // IR(9015, 33) + "WorkgroupMemoryExplicitLayout8BitAccessKHR\0" // IR(9048, 43) + "WorkgroupMemoryExplicitLayout16BitAccessKHR\0" // IR(9091, 44) + "SubgroupVoteKHR\0" // IR(9135, 16) + "StorageBuffer16BitAccess\0" // IR(9151, 25) + "StorageUniformBufferBlock16\0" // IR(9176, 28) + "UniformAndStorageBuffer16BitAccess\0" // IR(9204, 35) + "StorageUniform16\0" // IR(9239, 17) + "StoragePushConstant16\0" // IR(9256, 22) + "StorageInputOutput16\0" // IR(9278, 21) + "VariablePointersStorageBuffer\0" // IR(9299, 30) + "VariablePointers\0" // IR(9329, 17) + "AtomicStorageOps\0" // IR(9346, 17) + "SampleMaskPostDepthCoverage\0" // IR(9363, 28) + "StorageBuffer8BitAccess\0" // IR(9391, 24) + "UniformAndStorageBuffer8BitAccess\0" // IR(9415, 34) + "StoragePushConstant8\0" // IR(9449, 21) + "DenormPreserve\0" // IR(9470, 15) + "DenormFlushToZero\0" // IR(9485, 18) + "SignedZeroInfNanPreserve\0" // IR(9503, 25) + "RoundingModeRTE\0" // IR(9528, 16) + "RoundingModeRTZ\0" // IR(9544, 16) + "RayQueryProvisionalKHR\0" // IR(9560, 23) + "RayQueryKHR\0" // IR(9583, 12) + "UntypedPointersKHR\0" // IR(9595, 19) + "RayTraversalPrimitiveCullingKHR\0" // IR(9614, 32) + "TextureSampleWeightedQCOM\0" // IR(9646, 26) + "TextureBoxFilterQCOM\0" // IR(9672, 21) + "TextureBlockMatchQCOM\0" // IR(9693, 22) + "TextureBlockMatch2QCOM\0" // IR(9715, 23) + "Float16ImageAMD\0" // IR(9738, 16) + "ImageGatherBiasLodAMD\0" // IR(9754, 22) + "FragmentMaskAMD\0" // IR(9776, 16) + "ImageReadWriteLodAMD\0" // IR(9792, 21) + "Int64ImageEXT\0" // IR(9813, 14) + "ShaderClockKHR\0" // IR(9827, 15) + "QuadControlKHR\0" // IR(9842, 15) + "Int4TypeINTEL\0" // IR(9857, 14) + "Int4CooperativeMatrixINTEL\0" // IR(9871, 27) + "CooperativeMatrixKHR\0" // IR(9898, 21) + "BFloat16TypeKHR\0" // IR(9919, 16) + "BFloat16DotProductKHR\0" // IR(9935, 22) + "BFloat16CooperativeMatrixKHR\0" // IR(9957, 29) + "SampleMaskOverrideCoverageNV\0" // IR(9986, 29) + "GeometryShaderPassthroughNV\0" // IR(10015, 28) + "ShaderViewportIndexLayerNV\0" // IR(10043, 27) + "ImageFootprintNV\0" // IR(10070, 17) + "FragmentBarycentricNV\0" // IR(10087, 22) + "ComputeDerivativeGroupQuadsKHR\0" // IR(10109, 31) + "ComputeDerivativeGroupQuadsNV\0" // IR(10140, 30) + "ShadingRateNV\0" // IR(10170, 14) + "GroupNonUniformPartitionedNV\0" // IR(10184, 29) + "ShaderNonUniform\0" // IR(10213, 17) + "ShaderNonUniformEXT\0" // IR(10230, 20) + "RuntimeDescriptorArray\0" // IR(10250, 23) + "RuntimeDescriptorArrayEXT\0" // IR(10273, 26) + "InputAttachmentArrayDynamicIndexing\0" // IR(10299, 36) + "InputAttachmentArrayDynamicIndexingEXT\0" // IR(10335, 39) + "UniformTexelBufferArrayDynamicIndexing\0" // IR(10374, 39) + "UniformTexelBufferArrayDynamicIndexingEXT\0" // IR(10413, 42) + "StorageTexelBufferArrayDynamicIndexing\0" // IR(10455, 39) + "StorageTexelBufferArrayDynamicIndexingEXT\0" // IR(10494, 42) + "UniformBufferArrayNonUniformIndexing\0" // IR(10536, 37) + "UniformBufferArrayNonUniformIndexingEXT\0" // IR(10573, 40) + "SampledImageArrayNonUniformIndexing\0" // IR(10613, 36) + "SampledImageArrayNonUniformIndexingEXT\0" // IR(10649, 39) + "StorageBufferArrayNonUniformIndexing\0" // IR(10688, 37) + "StorageBufferArrayNonUniformIndexingEXT\0" // IR(10725, 40) + "StorageImageArrayNonUniformIndexing\0" // IR(10765, 36) + "StorageImageArrayNonUniformIndexingEXT\0" // IR(10801, 39) + "InputAttachmentArrayNonUniformIndexing\0" // IR(10840, 39) + "InputAttachmentArrayNonUniformIndexingEXT\0" // IR(10879, 42) + "UniformTexelBufferArrayNonUniformIndexing\0" // IR(10921, 42) + "UniformTexelBufferArrayNonUniformIndexingEXT\0" // IR(10963, 45) + "StorageTexelBufferArrayNonUniformIndexing\0" // IR(11008, 42) + "StorageTexelBufferArrayNonUniformIndexingEXT\0" // IR(11050, 45) + "VulkanMemoryModel\0" // IR(11095, 18) + "VulkanMemoryModelKHR\0" // IR(11113, 21) + "VulkanMemoryModelDeviceScope\0" // IR(11134, 29) + "VulkanMemoryModelDeviceScopeKHR\0" // IR(11163, 32) + "PhysicalStorageBufferAddressesEXT\0" // IR(11195, 34) + "ComputeDerivativeGroupLinearKHR\0" // IR(11229, 32) + "ComputeDerivativeGroupLinearNV\0" // IR(11261, 31) + "RayTracingProvisionalKHR\0" // IR(11292, 25) + "CooperativeMatrixNV\0" // IR(11317, 20) + "FragmentShaderSampleInterlockEXT\0" // IR(11337, 33) + "FragmentShaderShadingRateInterlockEXT\0" // IR(11370, 38) + "FragmentShaderPixelInterlockEXT\0" // IR(11408, 32) + "DemoteToHelperInvocation\0" // IR(11440, 25) + "DemoteToHelperInvocationEXT\0" // IR(11465, 28) + "DisplacementMicromapNV\0" // IR(11493, 23) + "RayTracingOpacityMicromapEXT\0" // IR(11516, 29) + "ShaderInvocationReorderNV\0" // IR(11545, 26) + "BindlessTextureNV\0" // IR(11571, 18) + "RayQueryPositionFetchKHR\0" // IR(11589, 25) + "CooperativeVectorNV\0" // IR(11614, 20) + "AtomicFloat16VectorNV\0" // IR(11634, 22) + "RawAccessChainsNV\0" // IR(11656, 18) + "CooperativeMatrixReductionsNV\0" // IR(11674, 30) + "CooperativeMatrixConversionsNV\0" // IR(11704, 31) + "CooperativeMatrixPerElementOperationsNV\0" // IR(11735, 40) + "CooperativeMatrixTensorAddressingNV\0" // IR(11775, 36) + "CooperativeMatrixBlockLoadsNV\0" // IR(11811, 30) + "CooperativeVectorTrainingNV\0" // IR(11841, 28) + "TensorAddressingNV\0" // IR(11869, 19) + "SubgroupShuffleINTEL\0" // IR(11888, 21) + "SubgroupBufferBlockIOINTEL\0" // IR(11909, 27) + "SubgroupImageBlockIOINTEL\0" // IR(11936, 26) + "SubgroupImageMediaBlockIOINTEL\0" // IR(11962, 31) + "RoundToInfinityINTEL\0" // IR(11993, 21) + "FloatingPointModeINTEL\0" // IR(12014, 23) + "IntegerFunctions2INTEL\0" // IR(12037, 23) + "FunctionPointersINTEL\0" // IR(12060, 22) + "IndirectReferencesINTEL\0" // IR(12082, 24) + "AsmINTEL\0" // IR(12106, 9) + "AtomicFloat32MinMaxEXT\0" // IR(12115, 23) + "AtomicFloat64MinMaxEXT\0" // IR(12138, 23) + "AtomicFloat16MinMaxEXT\0" // IR(12161, 23) + "VectorComputeINTEL\0" // IR(12184, 19) + "VectorAnyINTEL\0" // IR(12203, 15) + "ExpectAssumeKHR\0" // IR(12218, 16) + "SubgroupAvcMotionEstimationINTEL\0" // IR(12234, 33) + "SubgroupAvcMotionEstimationIntraINTEL\0" // IR(12267, 38) + "SubgroupAvcMotionEstimationChromaINTEL\0" // IR(12305, 39) + "VariableLengthArrayINTEL\0" // IR(12344, 25) + "FunctionFloatControlINTEL\0" // IR(12369, 26) + "FPGAMemoryAttributesINTEL\0" // IR(12395, 26) + "FPFastMathModeINTEL\0" // IR(12421, 20) + "ArbitraryPrecisionIntegersINTEL\0" // IR(12441, 32) + "ArbitraryPrecisionFloatingPointINTEL\0" // IR(12473, 37) + "UnstructuredLoopControlsINTEL\0" // IR(12510, 30) + "FPGALoopControlsINTEL\0" // IR(12540, 22) + "KernelAttributesINTEL\0" // IR(12562, 22) + "FPGAKernelAttributesINTEL\0" // IR(12584, 26) + "FPGAMemoryAccessesINTEL\0" // IR(12610, 24) + "FPGAClusterAttributesINTEL\0" // IR(12634, 27) + "LoopFuseINTEL\0" // IR(12661, 14) + "FPGADSPControlINTEL\0" // IR(12675, 20) + "MemoryAccessAliasingINTEL\0" // IR(12695, 26) + "FPGAInvocationPipeliningAttributesINTEL\0" // IR(12721, 40) + "FPGABufferLocationINTEL\0" // IR(12761, 24) + "ArbitraryPrecisionFixedPointINTEL\0" // IR(12785, 34) + "USMStorageClassesINTEL\0" // IR(12819, 23) + "RuntimeAlignedAttributeINTEL\0" // IR(12842, 29) + "IOPipesINTEL\0" // IR(12871, 13) + "BlockingPipesINTEL\0" // IR(12884, 19) + "FPGARegINTEL\0" // IR(12903, 13) + "DotProductInputAll\0" // IR(12916, 19) + "DotProductInputAllKHR\0" // IR(12935, 22) + "DotProductInput4x8Bit\0" // IR(12957, 22) + "DotProductInput4x8BitKHR\0" // IR(12979, 25) + "DotProductInput4x8BitPacked\0" // IR(13004, 28) + "DotProductInput4x8BitPackedKHR\0" // IR(13032, 31) + "DotProduct\0" // IR(13063, 11) + "DotProductKHR\0" // IR(13074, 14) + "ReplicatedCompositesEXT\0" // IR(13088, 24) + "BitInstructions\0" // IR(13112, 16) + "GroupNonUniformRotateKHR\0" // IR(13128, 25) + "FloatControls2\0" // IR(13153, 15) + "AtomicFloat32AddEXT\0" // IR(13168, 20) + "AtomicFloat64AddEXT\0" // IR(13188, 20) + "LongCompositesINTEL\0" // IR(13208, 20) + "OptNoneEXT\0" // IR(13228, 11) + "OptNoneINTEL\0" // IR(13239, 13) + "AtomicFloat16AddEXT\0" // IR(13252, 20) + "DebugInfoModuleINTEL\0" // IR(13272, 21) + "BFloat16ConversionINTEL\0" // IR(13293, 24) + "SplitBarrierINTEL\0" // IR(13317, 18) + "ArithmeticFenceEXT\0" // IR(13335, 19) + "FPGAClusterAttributesV2INTEL\0" // IR(13354, 29) + "FPGAKernelAttributesv2INTEL\0" // IR(13383, 28) + "TaskSequenceINTEL\0" // IR(13411, 18) + "FPMaxErrorINTEL\0" // IR(13429, 16) + "FPGALatencyControlINTEL\0" // IR(13445, 24) + "FPGAArgumentInterfacesINTEL\0" // IR(13469, 28) + "GlobalVariableHostAccessINTEL\0" // IR(13497, 30) + "GlobalVariableFPGADecorationsINTEL\0" // IR(13527, 35) + "SubgroupBufferPrefetchINTEL\0" // IR(13562, 28) + "Subgroup2DBlockIOINTEL\0" // IR(13590, 23) + "Subgroup2DBlockTransformINTEL\0" // IR(13613, 30) + "Subgroup2DBlockTransposeINTEL\0" // IR(13643, 30) + "SubgroupMatrixMultiplyAccumulateINTEL\0" // IR(13673, 38) + "TernaryBitwiseFunctionINTEL\0" // IR(13711, 28) + "GroupUniformArithmeticKHR\0" // IR(13739, 26) + "TensorFloat32RoundingINTEL\0" // IR(13765, 27) + "MaskedGatherScatterINTEL\0" // IR(13792, 25) + "CacheControlsINTEL\0" // IR(13817, 19) + "RegisterLimitsINTEL\0" // IR(13836, 20) + "BindlessImagesINTEL\0" // IR(13856, 20) + "Unspecified\0" // IR(13876, 12) + "Address\0" // IR(13888, 8) + "Boolean\0" // IR(13896, 8) + "Float\0" // IR(13904, 6) + "Signed\0" // IR(13910, 7) + "SignedChar\0" // IR(13917, 11) + "Unsigned\0" // IR(13928, 9) + "UnsignedChar\0" // IR(13937, 13) + "Class\0" // IR(13950, 6) + "Structure\0" // IR(13956, 10) + "Union\0" // IR(13966, 6) + "ImportedModule\0" // IR(13972, 15) + "ImportedDeclaration\0" // IR(13987, 20) + "None\0" // IR(14007, 5) + "FlagIsProtected\0" // IR(14012, 16) + "FlagIsPrivate\0" // IR(14028, 14) + "FlagIsPublic\0" // IR(14042, 13) + "FlagIsLocal\0" // IR(14055, 12) + "FlagIsDefinition\0" // IR(14067, 17) + "FlagFwdDecl\0" // IR(14084, 12) + "FlagArtificial\0" // IR(14096, 15) + "FlagExplicit\0" // IR(14111, 13) + "FlagPrototyped\0" // IR(14124, 15) + "FlagObjectPointer\0" // IR(14139, 18) + "FlagStaticMember\0" // IR(14157, 17) + "FlagIndirectVariable\0" // IR(14174, 21) + "FlagLValueReference\0" // IR(14195, 20) + "FlagRValueReference\0" // IR(14215, 20) + "FlagIsOptimized\0" // IR(14235, 16) + "FlagIsEnumClass\0" // IR(14251, 16) + "FlagTypePassByValue\0" // IR(14267, 20) + "FlagTypePassByReference\0" // IR(14287, 24) + "Deref\0" // IR(14311, 6) + "Plus\0" // IR(14317, 5) + "Minus\0" // IR(14322, 6) + "SPV_OPERAND_TYPE_LITERAL_INTEGER\0" // IR(14328, 33) + "PlusUconst\0" // IR(14361, 11) + "BitPiece\0" // IR(14372, 9) + "Swap\0" // IR(14381, 5) + "Xderef\0" // IR(14386, 7) + "StackValue\0" // IR(14393, 11) + "Constu\0" // IR(14404, 7) + "Fragment\0" // IR(14411, 9) + "ConstType\0" // IR(14420, 10) + "VolatileType\0" // IR(14430, 13) + "RestrictType\0" // IR(14443, 13) + "AtomicType\0" // IR(14456, 11) + "Float16NV\0" // IR(14467, 10) + "Float32NV\0" // IR(14477, 10) + "Float64NV\0" // IR(14487, 10) + "SignedInt8NV\0" // IR(14497, 13) + "SignedInt16NV\0" // IR(14510, 14) + "SignedInt32NV\0" // IR(14524, 14) + "SignedInt64NV\0" // IR(14538, 14) + "UnsignedInt8NV\0" // IR(14552, 15) + "UnsignedInt16NV\0" // IR(14567, 16) + "UnsignedInt32NV\0" // IR(14583, 16) + "UnsignedInt64NV\0" // IR(14599, 16) + "SignedInt8PackedNV\0" // IR(14615, 19) + "UnsignedInt8PackedNV\0" // IR(14634, 21) + "FloatE4M3NV\0" // IR(14655, 12) + "FloatE5M2NV\0" // IR(14667, 12) + "RowMajorKHR\0" // IR(14679, 12) + "ColumnMajorKHR\0" // IR(14691, 15) + "RowBlockedInterleavedARM\0" // IR(14706, 25) + "ColumnBlockedInterleavedARM\0" // IR(14731, 28) + "NoneKHR\0" // IR(14759, 8) + "MatrixASignedComponentsKHR\0" // IR(14767, 27) + "MatrixBSignedComponentsKHR\0" // IR(14794, 27) + "MatrixCSignedComponentsKHR\0" // IR(14821, 27) + "MatrixResultSignedComponentsKHR\0" // IR(14848, 32) + "SaturatingAccumulationKHR\0" // IR(14880, 26) + "Row\0" // IR(14906, 4) + "Column\0" // IR(14910, 7) + "2x2\0" // IR(14917, 4) + "MatrixAKHR\0" // IR(14921, 11) + "MatrixBKHR\0" // IR(14932, 11) + "MatrixAccumulatorKHR\0" // IR(14943, 21) + "RowMajorNV\0" // IR(14964, 11) + "ColumnMajorNV\0" // IR(14975, 14) + "InferencingOptimalNV\0" // IR(14989, 21) + "TrainingOptimalNV\0" // IR(15010, 18) + "RelaxedPrecision\0" // IR(15028, 17) + "SpecId\0" // IR(15045, 7) + "Block\0" // IR(15052, 6) + "BufferBlock\0" // IR(15058, 12) + "RowMajor\0" // IR(15070, 9) + "ColMajor\0" // IR(15079, 9) + "ArrayStride\0" // IR(15088, 12) + "MatrixStride\0" // IR(15100, 13) + "GLSLShared\0" // IR(15113, 11) + "GLSLPacked\0" // IR(15124, 11) + "CPacked\0" // IR(15135, 8) + "SPV_OPERAND_TYPE_BUILT_IN\0" // IR(15143, 26) + "BuiltIn\0" // IR(15169, 8) + "NoPerspective\0" // IR(15177, 14) + "Flat\0" // IR(15191, 5) + "Patch\0" // IR(15196, 6) + "Centroid\0" // IR(15202, 9) + "Sample\0" // IR(15211, 7) + "Invariant\0" // IR(15218, 10) + "Restrict\0" // IR(15228, 9) + "Aliased\0" // IR(15237, 8) + "Volatile\0" // IR(15245, 9) + "Constant\0" // IR(15254, 9) + "Coherent\0" // IR(15263, 9) + "NonWritable\0" // IR(15272, 12) + "NonReadable\0" // IR(15284, 12) + "Uniform\0" // IR(15296, 8) + "SPV_OPERAND_TYPE_SCOPE_ID\0" // IR(15304, 26) + "UniformId\0" // IR(15330, 10) + "SaturatedConversion\0" // IR(15340, 20) + "Stream\0" // IR(15360, 7) + "Location\0" // IR(15367, 9) + "Component\0" // IR(15376, 10) + "Index\0" // IR(15386, 6) + "Binding\0" // IR(15392, 8) + "DescriptorSet\0" // IR(15400, 14) + "Offset\0" // IR(15414, 7) + "XfbBuffer\0" // IR(15421, 10) + "XfbStride\0" // IR(15431, 10) + "SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE\0" // IR(15441, 46) + "FuncParamAttr\0" // IR(15487, 14) + "SPV_OPERAND_TYPE_FP_ROUNDING_MODE\0" // IR(15501, 34) + "FPRoundingMode\0" // IR(15535, 15) + "SPV_OPERAND_TYPE_FP_FAST_MATH_MODE\0" // IR(15550, 35) + "FPFastMathMode\0" // IR(15585, 15) + "SPV_OPERAND_TYPE_LITERAL_STRING\0" // IR(15600, 32) + "SPV_OPERAND_TYPE_LINKAGE_TYPE\0" // IR(15632, 30) + "LinkageAttributes\0" // IR(15662, 18) + "NoContraction\0" // IR(15680, 14) + "InputAttachmentIndex\0" // IR(15694, 21) + "Alignment\0" // IR(15715, 10) + "MaxByteOffset\0" // IR(15725, 14) + "SPV_OPERAND_TYPE_ID\0" // IR(15739, 20) + "AlignmentId\0" // IR(15759, 12) + "MaxByteOffsetId\0" // IR(15771, 16) + "SaturatedToLargestFloat8NormalConversionEXT\0" // IR(15787, 44) + "NoSignedWrap\0" // IR(15831, 13) + "NoUnsignedWrap\0" // IR(15844, 15) + "WeightTextureQCOM\0" // IR(15859, 18) + "BlockMatchTextureQCOM\0" // IR(15877, 22) + "BlockMatchSamplerQCOM\0" // IR(15899, 22) + "ExplicitInterpAMD\0" // IR(15921, 18) + "NodeSharesPayloadLimitsWithAMDX\0" // IR(15939, 32) + "NodeMaxPayloadsAMDX\0" // IR(15971, 20) + "TrackFinishWritingAMDX\0" // IR(15991, 23) + "PayloadNodeNameAMDX\0" // IR(16014, 20) + "PayloadNodeBaseIndexAMDX\0" // IR(16034, 25) + "PayloadNodeSparseArrayAMDX\0" // IR(16059, 27) + "PayloadNodeArraySizeAMDX\0" // IR(16086, 25) + "PayloadDispatchIndirectAMDX\0" // IR(16111, 28) + "OverrideCoverageNV\0" // IR(16139, 19) + "PassthroughNV\0" // IR(16158, 14) + "ViewportRelativeNV\0" // IR(16172, 19) + "SecondaryViewportRelativeNV\0" // IR(16191, 28) + "PerPrimitiveEXT\0" // IR(16219, 16) + "PerPrimitiveNV\0" // IR(16235, 15) + "PerViewNV\0" // IR(16250, 10) + "PerTaskNV\0" // IR(16260, 10) + "PerVertexKHR\0" // IR(16270, 13) + "PerVertexNV\0" // IR(16283, 12) + "NonUniform\0" // IR(16295, 11) + "NonUniformEXT\0" // IR(16306, 14) + "RestrictPointer\0" // IR(16320, 16) + "RestrictPointerEXT\0" // IR(16336, 19) + "AliasedPointer\0" // IR(16355, 15) + "AliasedPointerEXT\0" // IR(16370, 18) + "HitObjectShaderRecordBufferNV\0" // IR(16388, 30) + "BindlessSamplerNV\0" // IR(16418, 18) + "BindlessImageNV\0" // IR(16436, 16) + "BoundSamplerNV\0" // IR(16452, 15) + "BoundImageNV\0" // IR(16467, 13) + "SIMTCallINTEL\0" // IR(16480, 14) + "ReferencedIndirectlyINTEL\0" // IR(16494, 26) + "ClobberINTEL\0" // IR(16520, 13) + "SideEffectsINTEL\0" // IR(16533, 17) + "VectorComputeVariableINTEL\0" // IR(16550, 27) + "FuncParamIOKindINTEL\0" // IR(16577, 21) + "VectorComputeFunctionINTEL\0" // IR(16598, 27) + "StackCallINTEL\0" // IR(16625, 15) + "GlobalVariableOffsetINTEL\0" // IR(16640, 26) + "CounterBuffer\0" // IR(16666, 14) + "HlslCounterBufferGOOGLE\0" // IR(16680, 24) + "UserSemantic\0" // IR(16704, 13) + "HlslSemanticGOOGLE\0" // IR(16717, 19) + "UserTypeGOOGLE\0" // IR(16736, 15) + "FunctionRoundingModeINTEL\0" // IR(16751, 26) + "SPV_OPERAND_TYPE_FPDENORM_MODE\0" // IR(16777, 31) + "FunctionDenormModeINTEL\0" // IR(16808, 24) + "RegisterINTEL\0" // IR(16832, 14) + "MemoryINTEL\0" // IR(16846, 12) + "NumbanksINTEL\0" // IR(16858, 14) + "BankwidthINTEL\0" // IR(16872, 15) + "MaxPrivateCopiesINTEL\0" // IR(16887, 22) + "SinglepumpINTEL\0" // IR(16909, 16) + "DoublepumpINTEL\0" // IR(16925, 16) + "MaxReplicatesINTEL\0" // IR(16941, 19) + "SimpleDualPortINTEL\0" // IR(16960, 20) + "MergeINTEL\0" // IR(16980, 11) + "SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER\0" // IR(16991, 42) + "BankBitsINTEL\0" // IR(17033, 14) + "ForcePow2DepthINTEL\0" // IR(17047, 20) + "StridesizeINTEL\0" // IR(17067, 16) + "WordsizeINTEL\0" // IR(17083, 14) + "TrueDualPortINTEL\0" // IR(17097, 18) + "BurstCoalesceINTEL\0" // IR(17115, 19) + "CacheSizeINTEL\0" // IR(17134, 15) + "DontStaticallyCoalesceINTEL\0" // IR(17149, 28) + "PrefetchINTEL\0" // IR(17177, 14) + "StallEnableINTEL\0" // IR(17191, 17) + "FuseLoopsInFunctionINTEL\0" // IR(17208, 25) + "MathOpDSPModeINTEL\0" // IR(17233, 19) + "AliasScopeINTEL\0" // IR(17252, 16) + "NoAliasINTEL\0" // IR(17268, 13) + "InitiationIntervalINTEL\0" // IR(17281, 24) + "MaxConcurrencyINTEL\0" // IR(17305, 20) + "PipelineEnableINTEL\0" // IR(17325, 20) + "BufferLocationINTEL\0" // IR(17345, 20) + "IOPipeStorageINTEL\0" // IR(17365, 19) + "SPV_OPERAND_TYPE_FPOPERATION_MODE\0" // IR(17384, 34) + "FunctionFloatingPointModeINTEL\0" // IR(17418, 31) + "SingleElementVectorINTEL\0" // IR(17449, 25) + "VectorComputeCallableFunctionINTEL\0" // IR(17474, 35) + "MediaBlockIOINTEL\0" // IR(17509, 18) + "StallFreeINTEL\0" // IR(17527, 15) + "SPV_OPERAND_TYPE_LITERAL_FLOAT\0" // IR(17542, 31) + "FPMaxErrorDecorationINTEL\0" // IR(17573, 26) + "LatencyControlLabelINTEL\0" // IR(17599, 25) + "LatencyControlConstraintINTEL\0" // IR(17624, 30) + "ConduitKernelArgumentINTEL\0" // IR(17654, 27) + "RegisterMapKernelArgumentINTEL\0" // IR(17681, 31) + "MMHostInterfaceAddressWidthINTEL\0" // IR(17712, 33) + "MMHostInterfaceDataWidthINTEL\0" // IR(17745, 30) + "MMHostInterfaceLatencyINTEL\0" // IR(17775, 28) + "SPV_OPERAND_TYPE_ACCESS_QUALIFIER\0" // IR(17803, 34) + "MMHostInterfaceReadWriteModeINTEL\0" // IR(17837, 34) + "MMHostInterfaceMaxBurstINTEL\0" // IR(17871, 29) + "MMHostInterfaceWaitRequestINTEL\0" // IR(17900, 32) + "StableKernelArgumentINTEL\0" // IR(17932, 26) + "SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER\0" // IR(17958, 39) + "HostAccessINTEL\0" // IR(17997, 16) + "SPV_OPERAND_TYPE_INITIALIZATION_MODE_QUALIFIER\0" // IR(18013, 47) + "InitModeINTEL\0" // IR(18060, 14) + "ImplementInRegisterMapINTEL\0" // IR(18074, 28) + "SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL\0" // IR(18102, 36) + "CacheControlLoadINTEL\0" // IR(18138, 22) + "SPV_OPERAND_TYPE_STORE_CACHE_CONTROL\0" // IR(18160, 37) + "CacheControlStoreINTEL\0" // IR(18197, 23) + "1D\0" // IR(18220, 3) + "2D\0" // IR(18223, 3) + "3D\0" // IR(18226, 3) + "Cube\0" // IR(18229, 5) + "Rect\0" // IR(18234, 5) + "Buffer\0" // IR(18239, 7) + "SubpassData\0" // IR(18246, 12) + "TileImageDataEXT\0" // IR(18258, 17) + "Invocations\0" // IR(18275, 12) + "SpacingEqual\0" // IR(18287, 13) + "SpacingFractionalEven\0" // IR(18300, 22) + "SpacingFractionalOdd\0" // IR(18322, 21) + "VertexOrderCw\0" // IR(18343, 14) + "VertexOrderCcw\0" // IR(18357, 15) + "PixelCenterInteger\0" // IR(18372, 19) + "OriginUpperLeft\0" // IR(18391, 16) + "OriginLowerLeft\0" // IR(18407, 16) + "EarlyFragmentTests\0" // IR(18423, 19) + "PointMode\0" // IR(18442, 10) + "Xfb\0" // IR(18452, 4) + "DepthReplacing\0" // IR(18456, 15) + "DepthGreater\0" // IR(18471, 13) + "DepthLess\0" // IR(18484, 10) + "DepthUnchanged\0" // IR(18494, 15) + "LocalSize\0" // IR(18509, 10) + "LocalSizeHint\0" // IR(18519, 14) + "InputPoints\0" // IR(18533, 12) + "InputLines\0" // IR(18545, 11) + "InputLinesAdjacency\0" // IR(18556, 20) + "Triangles\0" // IR(18576, 10) + "InputTrianglesAdjacency\0" // IR(18586, 24) + "Quads\0" // IR(18610, 6) + "Isolines\0" // IR(18616, 9) + "OutputVertices\0" // IR(18625, 15) + "OutputPoints\0" // IR(18640, 13) + "OutputLineStrip\0" // IR(18653, 16) + "OutputTriangleStrip\0" // IR(18669, 20) + "VecTypeHint\0" // IR(18689, 12) + "ContractionOff\0" // IR(18701, 15) + "Initializer\0" // IR(18716, 12) + "Finalizer\0" // IR(18728, 10) + "SubgroupsPerWorkgroup\0" // IR(18738, 22) + "SubgroupsPerWorkgroupId\0" // IR(18760, 24) + "LocalSizeId\0" // IR(18784, 12) + "LocalSizeHintId\0" // IR(18796, 16) + "NonCoherentColorAttachmentReadEXT\0" // IR(18812, 34) + "NonCoherentDepthAttachmentReadEXT\0" // IR(18846, 34) + "NonCoherentStencilAttachmentReadEXT\0" // IR(18880, 36) + "SubgroupUniformControlFlowKHR\0" // IR(18916, 30) + "PostDepthCoverage\0" // IR(18946, 18) + "NonCoherentTileAttachmentReadQCOM\0" // IR(18964, 34) + "TileShadingRateQCOM\0" // IR(18998, 20) + "EarlyAndLateFragmentTestsAMD\0" // IR(19018, 29) + "StencilRefReplacingEXT\0" // IR(19047, 23) + "CoalescingAMDX\0" // IR(19070, 15) + "IsApiEntryAMDX\0" // IR(19085, 15) + "MaxNodeRecursionAMDX\0" // IR(19100, 21) + "StaticNumWorkgroupsAMDX\0" // IR(19121, 24) + "MaxNumWorkgroupsAMDX\0" // IR(19145, 21) + "StencilRefUnchangedFrontAMD\0" // IR(19166, 28) + "StencilRefGreaterFrontAMD\0" // IR(19194, 26) + "StencilRefLessFrontAMD\0" // IR(19220, 23) + "StencilRefUnchangedBackAMD\0" // IR(19243, 27) + "StencilRefGreaterBackAMD\0" // IR(19270, 25) + "StencilRefLessBackAMD\0" // IR(19295, 22) + "QuadDerivativesKHR\0" // IR(19317, 19) + "RequireFullQuadsKHR\0" // IR(19336, 20) + "SharesInputWithAMDX\0" // IR(19356, 20) + "OutputLinesEXT\0" // IR(19376, 15) + "OutputLinesNV\0" // IR(19391, 14) + "OutputPrimitivesEXT\0" // IR(19405, 20) + "OutputPrimitivesNV\0" // IR(19425, 19) + "DerivativeGroupQuadsKHR\0" // IR(19444, 24) + "DerivativeGroupQuadsNV\0" // IR(19468, 23) + "DerivativeGroupLinearKHR\0" // IR(19491, 25) + "DerivativeGroupLinearNV\0" // IR(19516, 24) + "OutputTrianglesEXT\0" // IR(19540, 19) + "OutputTrianglesNV\0" // IR(19559, 18) + "PixelInterlockOrderedEXT\0" // IR(19577, 25) + "PixelInterlockUnorderedEXT\0" // IR(19602, 27) + "SampleInterlockOrderedEXT\0" // IR(19629, 26) + "SampleInterlockUnorderedEXT\0" // IR(19655, 28) + "ShadingRateInterlockOrderedEXT\0" // IR(19683, 31) + "ShadingRateInterlockUnorderedEXT\0" // IR(19714, 33) + "SharedLocalMemorySizeINTEL\0" // IR(19747, 27) + "RoundingModeRTPINTEL\0" // IR(19774, 21) + "RoundingModeRTNINTEL\0" // IR(19795, 21) + "FloatingPointModeALTINTEL\0" // IR(19816, 26) + "FloatingPointModeIEEEINTEL\0" // IR(19842, 27) + "MaxWorkgroupSizeINTEL\0" // IR(19869, 22) + "MaxWorkDimINTEL\0" // IR(19891, 16) + "NoGlobalOffsetINTEL\0" // IR(19907, 20) + "NumSIMDWorkitemsINTEL\0" // IR(19927, 22) + "SchedulerTargetFmaxMhzINTEL\0" // IR(19949, 28) + "MaximallyReconvergesKHR\0" // IR(19977, 24) + "FPFastMathDefault\0" // IR(20001, 18) + "StreamingInterfaceINTEL\0" // IR(20019, 24) + "RegisterMapInterfaceINTEL\0" // IR(20043, 26) + "NamedBarrierCountINTEL\0" // IR(20069, 23) + "MaximumRegistersINTEL\0" // IR(20092, 22) + "MaximumRegistersIdINTEL\0" // IR(20114, 24) + "SPV_OPERAND_TYPE_NAMED_MAXIMUM_NUMBER_OF_REGISTERS\0" // IR(20138, 51) + "NamedMaximumRegistersINTEL\0" // IR(20189, 27) + "Vertex\0" // IR(20216, 7) + "TessellationControl\0" // IR(20223, 20) + "TessellationEvaluation\0" // IR(20243, 23) + "GLCompute\0" // IR(20266, 10) + "TaskNV\0" // IR(20276, 7) + "MeshNV\0" // IR(20283, 7) + "RayGenerationKHR\0" // IR(20290, 17) + "RayGenerationNV\0" // IR(20307, 16) + "IntersectionKHR\0" // IR(20323, 16) + "IntersectionNV\0" // IR(20339, 15) + "AnyHitKHR\0" // IR(20354, 10) + "AnyHitNV\0" // IR(20364, 9) + "ClosestHitKHR\0" // IR(20373, 14) + "ClosestHitNV\0" // IR(20387, 13) + "MissKHR\0" // IR(20400, 8) + "MissNV\0" // IR(20408, 7) + "CallableKHR\0" // IR(20415, 12) + "CallableNV\0" // IR(20427, 11) + "TaskEXT\0" // IR(20438, 8) + "MeshEXT\0" // IR(20446, 8) + "Preserve\0" // IR(20454, 9) + "FlushToZero\0" // IR(20463, 12) + "BFloat16KHR\0" // IR(20475, 12) + "Float8E4M3EXT\0" // IR(20487, 14) + "Float8E5M2EXT\0" // IR(20501, 14) + "IEEE\0" // IR(20515, 5) + "ALT\0" // IR(20520, 4) + "NotNaN\0" // IR(20524, 7) + "NotInf\0" // IR(20531, 7) + "NSZ\0" // IR(20538, 4) + "AllowRecip\0" // IR(20542, 11) + "Fast\0" // IR(20553, 5) + "AllowContract\0" // IR(20558, 14) + "AllowContractFastINTEL\0" // IR(20572, 23) + "AllowReassoc\0" // IR(20595, 13) + "AllowReassocINTEL\0" // IR(20608, 18) + "AllowTransform\0" // IR(20626, 15) + "RTE\0" // IR(20641, 4) + "RTZ\0" // IR(20645, 4) + "RTP\0" // IR(20649, 4) + "RTN\0" // IR(20653, 4) + "Vertical2Pixels\0" // IR(20657, 16) + "Vertical4Pixels\0" // IR(20673, 16) + "Horizontal2Pixels\0" // IR(20689, 18) + "Horizontal4Pixels\0" // IR(20707, 18) + "Inline\0" // IR(20725, 7) + "DontInline\0" // IR(20732, 11) + "Pure\0" // IR(20743, 5) + "Const\0" // IR(20748, 6) + "Zext\0" // IR(20754, 5) + "Sext\0" // IR(20759, 5) + "ByVal\0" // IR(20764, 6) + "Sret\0" // IR(20770, 5) + "NoAlias\0" // IR(20775, 8) + "NoCapture\0" // IR(20783, 10) + "NoWrite\0" // IR(20793, 8) + "NoReadWrite\0" // IR(20801, 12) + "RuntimeAlignedINTEL\0" // IR(20813, 20) + "Reduce\0" // IR(20833, 7) + "InclusiveScan\0" // IR(20840, 14) + "ExclusiveScan\0" // IR(20854, 14) + "ClusteredReduce\0" // IR(20868, 16) + "PartitionedReduceNV\0" // IR(20884, 20) + "PartitionedInclusiveScanNV\0" // IR(20904, 27) + "PartitionedExclusiveScanNV\0" // IR(20931, 27) + "NoneINTEL\0" // IR(20958, 10) + "ReadINTEL\0" // IR(20968, 10) + "WriteINTEL\0" // IR(20978, 11) + "ReadWriteINTEL\0" // IR(20989, 15) + "Bias\0" // IR(21004, 5) + "Lod\0" // IR(21009, 4) + "Grad\0" // IR(21013, 5) + "ConstOffset\0" // IR(21018, 12) + "ConstOffsets\0" // IR(21030, 13) + "MakeTexelAvailable\0" // IR(21043, 19) + "MakeTexelAvailableKHR\0" // IR(21062, 22) + "MakeTexelVisible\0" // IR(21084, 17) + "MakeTexelVisibleKHR\0" // IR(21101, 20) + "NonPrivateTexel\0" // IR(21121, 16) + "NonPrivateTexelKHR\0" // IR(21137, 19) + "VolatileTexel\0" // IR(21156, 14) + "VolatileTexelKHR\0" // IR(21170, 17) + "SignExtend\0" // IR(21187, 11) + "ZeroExtend\0" // IR(21198, 11) + "Nontemporal\0" // IR(21209, 12) + "Offsets\0" // IR(21221, 8) + "SnormInt8\0" // IR(21229, 10) + "SnormInt16\0" // IR(21239, 11) + "UnormInt8\0" // IR(21250, 10) + "UnormInt16\0" // IR(21260, 11) + "UnormShort565\0" // IR(21271, 14) + "UnormShort555\0" // IR(21285, 14) + "UnormInt101010\0" // IR(21299, 15) + "SignedInt8\0" // IR(21314, 11) + "SignedInt16\0" // IR(21325, 12) + "SignedInt32\0" // IR(21337, 12) + "UnsignedInt8\0" // IR(21349, 13) + "UnsignedInt16\0" // IR(21362, 14) + "UnsignedInt32\0" // IR(21376, 14) + "HalfFloat\0" // IR(21390, 10) + "UnormInt24\0" // IR(21400, 11) + "UnormInt101010_2\0" // IR(21411, 17) + "UnormInt10X6EXT\0" // IR(21428, 16) + "UnsignedIntRaw10EXT\0" // IR(21444, 20) + "UnsignedIntRaw12EXT\0" // IR(21464, 20) + "UnormInt2_101010EXT\0" // IR(21484, 20) + "UnsignedInt10X6EXT\0" // IR(21504, 19) + "UnsignedInt12X4EXT\0" // IR(21523, 19) + "UnsignedInt14X2EXT\0" // IR(21542, 19) + "UnormInt12X4EXT\0" // IR(21561, 16) + "UnormInt14X2EXT\0" // IR(21577, 16) + "R\0" // IR(21593, 2) + "A\0" // IR(21595, 2) + "RG\0" // IR(21597, 3) + "RA\0" // IR(21600, 3) + "RGB\0" // IR(21603, 4) + "RGBA\0" // IR(21607, 5) + "BGRA\0" // IR(21612, 5) + "ARGB\0" // IR(21617, 5) + "Intensity\0" // IR(21622, 10) + "Luminance\0" // IR(21632, 10) + "Rx\0" // IR(21642, 3) + "RGx\0" // IR(21645, 4) + "RGBx\0" // IR(21649, 5) + "Depth\0" // IR(21654, 6) + "DepthStencil\0" // IR(21660, 13) + "sRGB\0" // IR(21673, 5) + "sRGBx\0" // IR(21678, 6) + "sRGBA\0" // IR(21684, 6) + "sBGRA\0" // IR(21690, 6) + "ABGR\0" // IR(21696, 5) + "InitOnDeviceReprogramINTEL\0" // IR(21701, 27) + "InitOnDeviceResetINTEL\0" // IR(21728, 23) + "NoWait\0" // IR(21751, 7) + "WaitKernel\0" // IR(21758, 11) + "WaitWorkGroup\0" // IR(21769, 14) + "CmdExecTime\0" // IR(21783, 12) + "MayUsePrintf\0" // IR(21795, 13) + "Export\0" // IR(21808, 7) + "Import\0" // IR(21815, 7) + "LinkOnceODR\0" // IR(21822, 12) + "UncachedINTEL\0" // IR(21834, 14) + "CachedINTEL\0" // IR(21848, 12) + "StreamingINTEL\0" // IR(21860, 15) + "InvalidateAfterReadINTEL\0" // IR(21875, 25) + "ConstCachedINTEL\0" // IR(21900, 17) + "Unroll\0" // IR(21917, 7) + "DontUnroll\0" // IR(21924, 11) + "DependencyInfinite\0" // IR(21935, 19) + "DependencyLength\0" // IR(21954, 17) + "MinIterations\0" // IR(21971, 14) + "MaxIterations\0" // IR(21985, 14) + "IterationMultiple\0" // IR(21999, 18) + "PeelCount\0" // IR(22017, 10) + "PartialCount\0" // IR(22027, 13) + "DependencyArrayINTEL\0" // IR(22040, 21) + "LoopCoalesceINTEL\0" // IR(22061, 18) + "MaxInterleavingINTEL\0" // IR(22079, 21) + "SpeculatedIterationsINTEL\0" // IR(22100, 26) + "NoFusionINTEL\0" // IR(22126, 14) + "LoopCountINTEL\0" // IR(22140, 15) + "MaxReinvocationDelayINTEL\0" // IR(22155, 26) + "MatrixASignedComponentsINTEL\0" // IR(22181, 29) + "MatrixBSignedComponentsINTEL\0" // IR(22210, 29) + "MatrixCBFloat16INTEL\0" // IR(22239, 21) + "MatrixResultBFloat16INTEL\0" // IR(22260, 26) + "MatrixAPackedInt8INTEL\0" // IR(22286, 23) + "MatrixBPackedInt8INTEL\0" // IR(22309, 23) + "MatrixAPackedInt4INTEL\0" // IR(22332, 23) + "MatrixBPackedInt4INTEL\0" // IR(22355, 23) + "MatrixATF32INTEL\0" // IR(22378, 17) + "MatrixBTF32INTEL\0" // IR(22395, 17) + "MatrixAPackedFloat16INTEL\0" // IR(22412, 26) + "MatrixBPackedFloat16INTEL\0" // IR(22438, 26) + "MatrixAPackedBFloat16INTEL\0" // IR(22464, 27) + "MatrixBPackedBFloat16INTEL\0" // IR(22491, 27) + "Aligned\0" // IR(22518, 8) + "MakePointerAvailable\0" // IR(22526, 21) + "MakePointerAvailableKHR\0" // IR(22547, 24) + "MakePointerVisible\0" // IR(22571, 19) + "MakePointerVisibleKHR\0" // IR(22590, 22) + "NonPrivatePointer\0" // IR(22612, 18) + "NonPrivatePointerKHR\0" // IR(22630, 21) + "AliasScopeINTELMask\0" // IR(22651, 20) + "NoAliasINTELMask\0" // IR(22671, 17) + "Simple\0" // IR(22688, 7) + "GLSL450\0" // IR(22695, 8) + "OpenCL\0" // IR(22703, 7) + "Vulkan\0" // IR(22710, 7) + "VulkanKHR\0" // IR(22717, 10) + "Relaxed\0" // IR(22727, 8) + "Acquire\0" // IR(22735, 8) + "Release\0" // IR(22743, 8) + "AcquireRelease\0" // IR(22751, 15) + "SequentiallyConsistent\0" // IR(22766, 23) + "UniformMemory\0" // IR(22789, 14) + "SubgroupMemory\0" // IR(22803, 15) + "WorkgroupMemory\0" // IR(22818, 16) + "CrossWorkgroupMemory\0" // IR(22834, 21) + "AtomicCounterMemory\0" // IR(22855, 20) + "ImageMemory\0" // IR(22875, 12) + "OutputMemory\0" // IR(22887, 13) + "OutputMemoryKHR\0" // IR(22900, 16) + "MakeAvailable\0" // IR(22916, 14) + "MakeAvailableKHR\0" // IR(22930, 17) + "MakeVisible\0" // IR(22947, 12) + "MakeVisibleKHR\0" // IR(22959, 15) + "AutoINTEL\0" // IR(22974, 10) + "WRAP\0" // IR(22984, 5) + "SAT\0" // IR(22989, 4) + "SAT_ZERO\0" // IR(22993, 9) + "SAT_SYM\0" // IR(23002, 8) + "PackedVectorFormat4x8Bit\0" // IR(23010, 25) + "PackedVectorFormat4x8BitKHR\0" // IR(23035, 28) + "TRN\0" // IR(23063, 4) + "TRN_ZERO\0" // IR(23067, 9) + "RND\0" // IR(23076, 4) + "RND_ZERO\0" // IR(23080, 9) + "RND_INF\0" // IR(23089, 8) + "RND_MIN_INF\0" // IR(23097, 12) + "RND_CONV\0" // IR(23109, 9) + "RND_CONV_ODD\0" // IR(23118, 13) + "RobustnessPerComponentNV\0" // IR(23131, 25) + "RobustnessPerElementNV\0" // IR(23156, 23) + "OpaqueKHR\0" // IR(23179, 10) + "NoOpaqueKHR\0" // IR(23189, 12) + "TerminateOnFirstHitKHR\0" // IR(23201, 23) + "SkipClosestHitShaderKHR\0" // IR(23224, 24) + "CullBackFacingTrianglesKHR\0" // IR(23248, 27) + "CullFrontFacingTrianglesKHR\0" // IR(23275, 28) + "CullOpaqueKHR\0" // IR(23303, 14) + "CullNoOpaqueKHR\0" // IR(23317, 16) + "SkipTrianglesKHR\0" // IR(23333, 17) + "SkipBuiltinPrimitivesNV\0" // IR(23350, 24) + "SkipAABBsKHR\0" // IR(23374, 13) + "ForceOpacityMicromap2StateEXT\0" // IR(23387, 30) + "RayQueryCandidateIntersectionTriangleKHR\0" // IR(23417, 41) + "RayQueryCandidateIntersectionAABBKHR\0" // IR(23458, 37) + "RayQueryCommittedIntersectionNoneKHR\0" // IR(23495, 37) + "RayQueryCommittedIntersectionTriangleKHR\0" // IR(23532, 41) + "RayQueryCommittedIntersectionGeneratedKHR\0" // IR(23573, 42) + "RayQueryCandidateIntersectionKHR\0" // IR(23615, 33) + "RayQueryCommittedIntersectionKHR\0" // IR(23648, 33) + "ClampToEdge\0" // IR(23681, 12) + "Clamp\0" // IR(23693, 6) + "Repeat\0" // IR(23699, 7) + "RepeatMirrored\0" // IR(23706, 15) + "Nearest\0" // IR(23721, 8) + "Linear\0" // IR(23729, 7) + "Unknown\0" // IR(23736, 8) + "Rgba32f\0" // IR(23744, 8) + "Rgba16f\0" // IR(23752, 8) + "R32f\0" // IR(23760, 5) + "Rgba8\0" // IR(23765, 6) + "Rgba8Snorm\0" // IR(23771, 11) + "Rg32f\0" // IR(23782, 6) + "Rg16f\0" // IR(23788, 6) + "R11fG11fB10f\0" // IR(23794, 13) + "R16f\0" // IR(23807, 5) + "Rgba16\0" // IR(23812, 7) + "Rgb10A2\0" // IR(23819, 8) + "Rg16\0" // IR(23827, 5) + "Rg8\0" // IR(23832, 4) + "R16\0" // IR(23836, 4) + "R8\0" // IR(23840, 3) + "Rgba16Snorm\0" // IR(23843, 12) + "Rg16Snorm\0" // IR(23855, 10) + "Rg8Snorm\0" // IR(23865, 9) + "R16Snorm\0" // IR(23874, 9) + "R8Snorm\0" // IR(23883, 8) + "Rgba32i\0" // IR(23891, 8) + "Rgba16i\0" // IR(23899, 8) + "Rgba8i\0" // IR(23907, 7) + "R32i\0" // IR(23914, 5) + "Rg32i\0" // IR(23919, 6) + "Rg16i\0" // IR(23925, 6) + "Rg8i\0" // IR(23931, 5) + "R16i\0" // IR(23936, 5) + "R8i\0" // IR(23941, 4) + "Rgba32ui\0" // IR(23945, 9) + "Rgba16ui\0" // IR(23954, 9) + "Rgba8ui\0" // IR(23963, 8) + "R32ui\0" // IR(23971, 6) + "Rgb10a2ui\0" // IR(23977, 10) + "Rg32ui\0" // IR(23987, 7) + "Rg16ui\0" // IR(23994, 7) + "Rg8ui\0" // IR(24001, 6) + "R16ui\0" // IR(24007, 6) + "R8ui\0" // IR(24013, 5) + "R64ui\0" // IR(24018, 6) + "R64i\0" // IR(24024, 5) + "CrossDevice\0" // IR(24029, 12) + "Device\0" // IR(24041, 7) + "Workgroup\0" // IR(24048, 10) + "Subgroup\0" // IR(24058, 9) + "Invocation\0" // IR(24067, 11) + "QueueFamily\0" // IR(24078, 12) + "QueueFamilyKHR\0" // IR(24090, 15) + "ShaderCallKHR\0" // IR(24105, 14) + "Flatten\0" // IR(24119, 8) + "DontFlatten\0" // IR(24127, 12) + "IdentifierPossibleDuplicates\0" // IR(24139, 29) + "FlagUnknownPhysicalLayout\0" // IR(24168, 26) + "ESSL\0" // IR(24194, 5) + "GLSL\0" // IR(24199, 5) + "OpenCL_C\0" // IR(24204, 9) + "OpenCL_CPP\0" // IR(24213, 11) + "HLSL\0" // IR(24224, 5) + "CPP_for_OpenCL\0" // IR(24229, 15) + "SYCL\0" // IR(24244, 5) + "HERO_C\0" // IR(24249, 7) + "NZSL\0" // IR(24256, 5) + "WGSL\0" // IR(24261, 5) + "Slang\0" // IR(24266, 6) + "Zig\0" // IR(24272, 4) + "Rust\0" // IR(24276, 5) + "UniformConstant\0" // IR(24281, 16) + "Input\0" // IR(24297, 6) + "Output\0" // IR(24303, 7) + "CrossWorkgroup\0" // IR(24310, 15) + "Private\0" // IR(24325, 8) + "Function\0" // IR(24333, 9) + "Generic\0" // IR(24342, 8) + "PushConstant\0" // IR(24350, 13) + "AtomicCounter\0" // IR(24363, 14) + "Image\0" // IR(24377, 6) + "StorageBuffer\0" // IR(24383, 14) + "TileImageEXT\0" // IR(24397, 13) + "TileAttachmentQCOM\0" // IR(24410, 19) + "NodePayloadAMDX\0" // IR(24429, 16) + "CallableDataKHR\0" // IR(24445, 16) + "CallableDataNV\0" // IR(24461, 15) + "IncomingCallableDataKHR\0" // IR(24476, 24) + "IncomingCallableDataNV\0" // IR(24500, 23) + "RayPayloadKHR\0" // IR(24523, 14) + "RayPayloadNV\0" // IR(24537, 13) + "HitAttributeKHR\0" // IR(24550, 16) + "HitAttributeNV\0" // IR(24566, 15) + "IncomingRayPayloadKHR\0" // IR(24581, 22) + "IncomingRayPayloadNV\0" // IR(24603, 21) + "ShaderRecordBufferKHR\0" // IR(24624, 22) + "ShaderRecordBufferNV\0" // IR(24646, 21) + "PhysicalStorageBuffer\0" // IR(24667, 22) + "PhysicalStorageBufferEXT\0" // IR(24689, 25) + "HitObjectAttributeNV\0" // IR(24714, 21) + "TaskPayloadWorkgroupEXT\0" // IR(24735, 24) + "CodeSectionINTEL\0" // IR(24759, 17) + "DeviceOnlyINTEL\0" // IR(24776, 16) + "HostOnlyINTEL\0" // IR(24792, 14) + "WriteThroughINTEL\0" // IR(24806, 18) + "WriteBackINTEL\0" // IR(24824, 15) + "TensorView\0" // IR(24839, 11) + "DecodeFunc\0" // IR(24850, 11) + "Undefined\0" // IR(24861, 10) + "NoneARM\0" // IR(24871, 8) + "NontemporalARM\0" // IR(24879, 15) + "OutOfBoundsValueARM\0" // IR(24894, 20) + "MakeElementAvailableARM\0" // IR(24914, 24) + "MakeElementVisibleARM\0" // IR(24938, 22) + "NonPrivateElementARM\0" // IR(24960, 21) + "Nop\0" // IR(24981, 4) + "SPV_OPERAND_TYPE_TYPE_ID\0" // IR(24985, 25) + "SPV_OPERAND_TYPE_RESULT_ID\0" // IR(25010, 27) + "Undef\0" // IR(25037, 6) + "SourceContinued\0" // IR(25043, 16) + "SPV_OPERAND_TYPE_SOURCE_LANGUAGE\0" // IR(25059, 33) + "SPV_OPERAND_TYPE_OPTIONAL_ID\0" // IR(25092, 29) + "SPV_OPERAND_TYPE_OPTIONAL_LITERAL_STRING\0" // IR(25121, 41) + "Source\0" // IR(25162, 7) + "SourceExtension\0" // IR(25169, 16) + "Name\0" // IR(25185, 5) + "MemberName\0" // IR(25190, 11) + "String\0" // IR(25201, 7) + "Line\0" // IR(25208, 5) + "Extension\0" // IR(25213, 10) + "ExtInstImport\0" // IR(25223, 14) + "SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER\0" // IR(25237, 46) + "ExtInst\0" // IR(25283, 8) + "SPV_OPERAND_TYPE_ADDRESSING_MODEL\0" // IR(25291, 34) + "SPV_OPERAND_TYPE_MEMORY_MODEL\0" // IR(25325, 30) + "MemoryModel\0" // IR(25355, 12) + "SPV_OPERAND_TYPE_EXECUTION_MODEL\0" // IR(25367, 33) + "SPV_OPERAND_TYPE_VARIABLE_ID\0" // IR(25400, 29) + "EntryPoint\0" // IR(25429, 11) + "SPV_OPERAND_TYPE_EXECUTION_MODE\0" // IR(25440, 32) + "ExecutionMode\0" // IR(25472, 14) + "SPV_OPERAND_TYPE_CAPABILITY\0" // IR(25486, 28) + "Capability\0" // IR(25514, 11) + "TypeVoid\0" // IR(25525, 9) + "TypeBool\0" // IR(25534, 9) + "TypeInt\0" // IR(25543, 8) + "SPV_OPERAND_TYPE_OPTIONAL_FPENCODING\0" // IR(25551, 37) + "TypeFloat\0" // IR(25588, 10) + "TypeVector\0" // IR(25598, 11) + "TypeMatrix\0" // IR(25609, 11) + "SPV_OPERAND_TYPE_DIMENSIONALITY\0" // IR(25620, 32) + "SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT\0" // IR(25652, 38) + "SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER\0" // IR(25690, 43) + "TypeImage\0" // IR(25733, 10) + "TypeSampler\0" // IR(25743, 12) + "TypeSampledImage\0" // IR(25755, 17) + "TypeArray\0" // IR(25772, 10) + "TypeRuntimeArray\0" // IR(25782, 17) + "TypeStruct\0" // IR(25799, 11) + "TypeOpaque\0" // IR(25810, 11) + "SPV_OPERAND_TYPE_STORAGE_CLASS\0" // IR(25821, 31) + "TypePointer\0" // IR(25852, 12) + "TypeFunction\0" // IR(25864, 13) + "TypeEvent\0" // IR(25877, 10) + "TypeDeviceEvent\0" // IR(25887, 16) + "TypeReserveId\0" // IR(25903, 14) + "TypeQueue\0" // IR(25917, 10) + "TypePipe\0" // IR(25927, 9) + "TypeForwardPointer\0" // IR(25936, 19) + "ConstantTrue\0" // IR(25955, 13) + "ConstantFalse\0" // IR(25968, 14) + "SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER\0" // IR(25982, 38) + "ConstantComposite\0" // IR(26020, 18) + "SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE\0" // IR(26038, 41) + "SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE\0" // IR(26079, 37) + "ConstantSampler\0" // IR(26116, 16) + "ConstantNull\0" // IR(26132, 13) + "SpecConstantTrue\0" // IR(26145, 17) + "SpecConstantFalse\0" // IR(26162, 18) + "SpecConstant\0" // IR(26180, 13) + "SpecConstantComposite\0" // IR(26193, 22) + "SPV_OPERAND_TYPE_SPEC_CONSTANT_OP_NUMBER\0" // IR(26215, 41) + "SpecConstantOp\0" // IR(26256, 15) + "SPV_OPERAND_TYPE_FUNCTION_CONTROL\0" // IR(26271, 34) + "FunctionParameter\0" // IR(26305, 18) + "FunctionEnd\0" // IR(26323, 12) + "FunctionCall\0" // IR(26335, 13) + "Variable\0" // IR(26348, 9) + "ImageTexelPointer\0" // IR(26357, 18) + "SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS\0" // IR(26375, 40) + "Load\0" // IR(26415, 5) + "Store\0" // IR(26420, 6) + "CopyMemory\0" // IR(26426, 11) + "CopyMemorySized\0" // IR(26437, 16) + "AccessChain\0" // IR(26453, 12) + "InBoundsAccessChain\0" // IR(26465, 20) + "PtrAccessChain\0" // IR(26485, 15) + "ArrayLength\0" // IR(26500, 12) + "GenericPtrMemSemantics\0" // IR(26512, 23) + "InBoundsPtrAccessChain\0" // IR(26535, 23) + "SPV_OPERAND_TYPE_DECORATION\0" // IR(26558, 28) + "Decorate\0" // IR(26586, 9) + "MemberDecorate\0" // IR(26595, 15) + "DecorationGroup\0" // IR(26610, 16) + "GroupDecorate\0" // IR(26626, 14) + "SPV_OPERAND_TYPE_VARIABLE_ID_LITERAL_INTEGER\0" // IR(26640, 45) + "GroupMemberDecorate\0" // IR(26685, 20) + "VectorExtractDynamic\0" // IR(26705, 21) + "VectorInsertDynamic\0" // IR(26726, 20) + "VectorShuffle\0" // IR(26746, 14) + "CompositeConstruct\0" // IR(26760, 19) + "CompositeExtract\0" // IR(26779, 17) + "CompositeInsert\0" // IR(26796, 16) + "CopyObject\0" // IR(26812, 11) + "Transpose\0" // IR(26823, 10) + "SampledImage\0" // IR(26833, 13) + "SPV_OPERAND_TYPE_OPTIONAL_IMAGE\0" // IR(26846, 32) + "ImageSampleImplicitLod\0" // IR(26878, 23) + "SPV_OPERAND_TYPE_IMAGE\0" // IR(26901, 23) + "ImageSampleExplicitLod\0" // IR(26924, 23) + "ImageSampleDrefImplicitLod\0" // IR(26947, 27) + "ImageSampleDrefExplicitLod\0" // IR(26974, 27) + "ImageSampleProjImplicitLod\0" // IR(27001, 27) + "ImageSampleProjExplicitLod\0" // IR(27028, 27) + "ImageSampleProjDrefImplicitLod\0" // IR(27055, 31) + "ImageSampleProjDrefExplicitLod\0" // IR(27086, 31) + "ImageFetch\0" // IR(27117, 11) + "ImageGather\0" // IR(27128, 12) + "ImageDrefGather\0" // IR(27140, 16) + "ImageRead\0" // IR(27156, 10) + "ImageWrite\0" // IR(27166, 11) + "ImageQueryFormat\0" // IR(27177, 17) + "ImageQueryOrder\0" // IR(27194, 16) + "ImageQuerySizeLod\0" // IR(27210, 18) + "ImageQuerySize\0" // IR(27228, 15) + "ImageQueryLod\0" // IR(27243, 14) + "ImageQueryLevels\0" // IR(27257, 17) + "ImageQuerySamples\0" // IR(27274, 18) + "ConvertFToU\0" // IR(27292, 12) + "ConvertFToS\0" // IR(27304, 12) + "ConvertSToF\0" // IR(27316, 12) + "ConvertUToF\0" // IR(27328, 12) + "UConvert\0" // IR(27340, 9) + "SConvert\0" // IR(27349, 9) + "FConvert\0" // IR(27358, 9) + "QuantizeToF16\0" // IR(27367, 14) + "ConvertPtrToU\0" // IR(27381, 14) + "SatConvertSToU\0" // IR(27395, 15) + "SatConvertUToS\0" // IR(27410, 15) + "ConvertUToPtr\0" // IR(27425, 14) + "PtrCastToGeneric\0" // IR(27439, 17) + "GenericCastToPtr\0" // IR(27456, 17) + "GenericCastToPtrExplicit\0" // IR(27473, 25) + "Bitcast\0" // IR(27498, 8) + "SNegate\0" // IR(27506, 8) + "FNegate\0" // IR(27514, 8) + "IAdd\0" // IR(27522, 5) + "FAdd\0" // IR(27527, 5) + "ISub\0" // IR(27532, 5) + "FSub\0" // IR(27537, 5) + "IMul\0" // IR(27542, 5) + "FMul\0" // IR(27547, 5) + "UDiv\0" // IR(27552, 5) + "SDiv\0" // IR(27557, 5) + "FDiv\0" // IR(27562, 5) + "UMod\0" // IR(27567, 5) + "SRem\0" // IR(27572, 5) + "SMod\0" // IR(27577, 5) + "FRem\0" // IR(27582, 5) + "FMod\0" // IR(27587, 5) + "VectorTimesScalar\0" // IR(27592, 18) + "MatrixTimesScalar\0" // IR(27610, 18) + "VectorTimesMatrix\0" // IR(27628, 18) + "MatrixTimesVector\0" // IR(27646, 18) + "MatrixTimesMatrix\0" // IR(27664, 18) + "OuterProduct\0" // IR(27682, 13) + "Dot\0" // IR(27695, 4) + "IAddCarry\0" // IR(27699, 10) + "ISubBorrow\0" // IR(27709, 11) + "UMulExtended\0" // IR(27720, 13) + "SMulExtended\0" // IR(27733, 13) + "Any\0" // IR(27746, 4) + "All\0" // IR(27750, 4) + "IsNan\0" // IR(27754, 6) + "IsInf\0" // IR(27760, 6) + "IsFinite\0" // IR(27766, 9) + "IsNormal\0" // IR(27775, 9) + "SignBitSet\0" // IR(27784, 11) + "LessOrGreater\0" // IR(27795, 14) + "Ordered\0" // IR(27809, 8) + "Unordered\0" // IR(27817, 10) + "LogicalEqual\0" // IR(27827, 13) + "LogicalNotEqual\0" // IR(27840, 16) + "LogicalOr\0" // IR(27856, 10) + "LogicalAnd\0" // IR(27866, 11) + "LogicalNot\0" // IR(27877, 11) + "Select\0" // IR(27888, 7) + "IEqual\0" // IR(27895, 7) + "INotEqual\0" // IR(27902, 10) + "UGreaterThan\0" // IR(27912, 13) + "SGreaterThan\0" // IR(27925, 13) + "UGreaterThanEqual\0" // IR(27938, 18) + "SGreaterThanEqual\0" // IR(27956, 18) + "ULessThan\0" // IR(27974, 10) + "SLessThan\0" // IR(27984, 10) + "ULessThanEqual\0" // IR(27994, 15) + "SLessThanEqual\0" // IR(28009, 15) + "FOrdEqual\0" // IR(28024, 10) + "FUnordEqual\0" // IR(28034, 12) + "FOrdNotEqual\0" // IR(28046, 13) + "FUnordNotEqual\0" // IR(28059, 15) + "FOrdLessThan\0" // IR(28074, 13) + "FUnordLessThan\0" // IR(28087, 15) + "FOrdGreaterThan\0" // IR(28102, 16) + "FUnordGreaterThan\0" // IR(28118, 18) + "FOrdLessThanEqual\0" // IR(28136, 18) + "FUnordLessThanEqual\0" // IR(28154, 20) + "FOrdGreaterThanEqual\0" // IR(28174, 21) + "FUnordGreaterThanEqual\0" // IR(28195, 23) + "ShiftRightLogical\0" // IR(28218, 18) + "ShiftRightArithmetic\0" // IR(28236, 21) + "ShiftLeftLogical\0" // IR(28257, 17) + "BitwiseOr\0" // IR(28274, 10) + "BitwiseXor\0" // IR(28284, 11) + "BitwiseAnd\0" // IR(28295, 11) + "Not\0" // IR(28306, 4) + "BitFieldInsert\0" // IR(28310, 15) + "BitFieldSExtract\0" // IR(28325, 17) + "BitFieldUExtract\0" // IR(28342, 17) + "BitReverse\0" // IR(28359, 11) + "BitCount\0" // IR(28370, 9) + "DPdx\0" // IR(28379, 5) + "DPdy\0" // IR(28384, 5) + "Fwidth\0" // IR(28389, 7) + "DPdxFine\0" // IR(28396, 9) + "DPdyFine\0" // IR(28405, 9) + "FwidthFine\0" // IR(28414, 11) + "DPdxCoarse\0" // IR(28425, 11) + "DPdyCoarse\0" // IR(28436, 11) + "FwidthCoarse\0" // IR(28447, 13) + "EmitVertex\0" // IR(28460, 11) + "EndPrimitive\0" // IR(28471, 13) + "EmitStreamVertex\0" // IR(28484, 17) + "EndStreamPrimitive\0" // IR(28501, 19) + "SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID\0" // IR(28520, 37) + "ControlBarrier\0" // IR(28557, 15) + "MemoryBarrier\0" // IR(28572, 14) + "AtomicLoad\0" // IR(28586, 11) + "AtomicStore\0" // IR(28597, 12) + "AtomicExchange\0" // IR(28609, 15) + "AtomicCompareExchange\0" // IR(28624, 22) + "AtomicCompareExchangeWeak\0" // IR(28646, 26) + "AtomicIIncrement\0" // IR(28672, 17) + "AtomicIDecrement\0" // IR(28689, 17) + "AtomicIAdd\0" // IR(28706, 11) + "AtomicISub\0" // IR(28717, 11) + "AtomicSMin\0" // IR(28728, 11) + "AtomicUMin\0" // IR(28739, 11) + "AtomicSMax\0" // IR(28750, 11) + "AtomicUMax\0" // IR(28761, 11) + "AtomicAnd\0" // IR(28772, 10) + "AtomicOr\0" // IR(28782, 9) + "AtomicXor\0" // IR(28791, 10) + "Phi\0" // IR(28801, 4) + "SPV_OPERAND_TYPE_LOOP_CONTROL\0" // IR(28805, 30) + "LoopMerge\0" // IR(28835, 10) + "SPV_OPERAND_TYPE_SELECTION_CONTROL\0" // IR(28845, 35) + "SelectionMerge\0" // IR(28880, 15) + "Label\0" // IR(28895, 6) + "Branch\0" // IR(28901, 7) + "BranchConditional\0" // IR(28908, 18) + "SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER_ID\0" // IR(28926, 45) + "Switch\0" // IR(28971, 7) + "Kill\0" // IR(28978, 5) + "Return\0" // IR(28983, 7) + "ReturnValue\0" // IR(28990, 12) + "Unreachable\0" // IR(29002, 12) + "LifetimeStart\0" // IR(29014, 14) + "LifetimeStop\0" // IR(29028, 13) + "GroupAsyncCopy\0" // IR(29041, 15) + "GroupWaitEvents\0" // IR(29056, 16) + "GroupAll\0" // IR(29072, 9) + "GroupAny\0" // IR(29081, 9) + "GroupBroadcast\0" // IR(29090, 15) + "SPV_OPERAND_TYPE_GROUP_OPERATION\0" // IR(29105, 33) + "GroupIAdd\0" // IR(29138, 10) + "GroupFAdd\0" // IR(29148, 10) + "GroupFMin\0" // IR(29158, 10) + "GroupUMin\0" // IR(29168, 10) + "GroupSMin\0" // IR(29178, 10) + "GroupFMax\0" // IR(29188, 10) + "GroupUMax\0" // IR(29198, 10) + "GroupSMax\0" // IR(29208, 10) + "ReadPipe\0" // IR(29218, 9) + "WritePipe\0" // IR(29227, 10) + "ReservedReadPipe\0" // IR(29237, 17) + "ReservedWritePipe\0" // IR(29254, 18) + "ReserveReadPipePackets\0" // IR(29272, 23) + "ReserveWritePipePackets\0" // IR(29295, 24) + "CommitReadPipe\0" // IR(29319, 15) + "CommitWritePipe\0" // IR(29334, 16) + "IsValidReserveId\0" // IR(29350, 17) + "GetNumPipePackets\0" // IR(29367, 18) + "GetMaxPipePackets\0" // IR(29385, 18) + "GroupReserveReadPipePackets\0" // IR(29403, 28) + "GroupReserveWritePipePackets\0" // IR(29431, 29) + "GroupCommitReadPipe\0" // IR(29460, 20) + "GroupCommitWritePipe\0" // IR(29480, 21) + "EnqueueMarker\0" // IR(29501, 14) + "EnqueueKernel\0" // IR(29515, 14) + "GetKernelNDrangeSubGroupCount\0" // IR(29529, 30) + "GetKernelNDrangeMaxSubGroupSize\0" // IR(29559, 32) + "GetKernelWorkGroupSize\0" // IR(29591, 23) + "GetKernelPreferredWorkGroupSizeMultiple\0" // IR(29614, 40) + "RetainEvent\0" // IR(29654, 12) + "ReleaseEvent\0" // IR(29666, 13) + "CreateUserEvent\0" // IR(29679, 16) + "IsValidEvent\0" // IR(29695, 13) + "SetUserEventStatus\0" // IR(29708, 19) + "CaptureEventProfilingInfo\0" // IR(29727, 26) + "GetDefaultQueue\0" // IR(29753, 16) + "BuildNDRange\0" // IR(29769, 13) + "ImageSparseSampleImplicitLod\0" // IR(29782, 29) + "ImageSparseSampleExplicitLod\0" // IR(29811, 29) + "ImageSparseSampleDrefImplicitLod\0" // IR(29840, 33) + "ImageSparseSampleDrefExplicitLod\0" // IR(29873, 33) + "ImageSparseSampleProjImplicitLod\0" // IR(29906, 33) + "ImageSparseSampleProjExplicitLod\0" // IR(29939, 33) + "ImageSparseSampleProjDrefImplicitLod\0" // IR(29972, 37) + "ImageSparseSampleProjDrefExplicitLod\0" // IR(30009, 37) + "ImageSparseFetch\0" // IR(30046, 17) + "ImageSparseGather\0" // IR(30063, 18) + "ImageSparseDrefGather\0" // IR(30081, 22) + "ImageSparseTexelsResident\0" // IR(30103, 26) + "NoLine\0" // IR(30129, 7) + "AtomicFlagTestAndSet\0" // IR(30136, 21) + "AtomicFlagClear\0" // IR(30157, 16) + "ImageSparseRead\0" // IR(30173, 16) + "SizeOf\0" // IR(30189, 7) + "TypePipeStorage\0" // IR(30196, 16) + "ConstantPipeStorage\0" // IR(30212, 20) + "CreatePipeFromPipeStorage\0" // IR(30232, 26) + "GetKernelLocalSizeForSubgroupCount\0" // IR(30258, 35) + "GetKernelMaxNumSubgroups\0" // IR(30293, 25) + "TypeNamedBarrier\0" // IR(30318, 17) + "NamedBarrierInitialize\0" // IR(30335, 23) + "MemoryNamedBarrier\0" // IR(30358, 19) + "ModuleProcessed\0" // IR(30377, 16) + "ExecutionModeId\0" // IR(30393, 16) + "DecorateId\0" // IR(30409, 11) + "GroupNonUniformElect\0" // IR(30420, 21) + "GroupNonUniformAll\0" // IR(30441, 19) + "GroupNonUniformAny\0" // IR(30460, 19) + "GroupNonUniformAllEqual\0" // IR(30479, 24) + "GroupNonUniformBroadcast\0" // IR(30503, 25) + "GroupNonUniformBroadcastFirst\0" // IR(30528, 30) + "GroupNonUniformInverseBallot\0" // IR(30558, 29) + "GroupNonUniformBallotBitExtract\0" // IR(30587, 32) + "GroupNonUniformBallotBitCount\0" // IR(30619, 30) + "GroupNonUniformBallotFindLSB\0" // IR(30649, 29) + "GroupNonUniformBallotFindMSB\0" // IR(30678, 29) + "GroupNonUniformShuffleXor\0" // IR(30707, 26) + "GroupNonUniformShuffleUp\0" // IR(30733, 25) + "GroupNonUniformShuffleDown\0" // IR(30758, 27) + "GroupNonUniformIAdd\0" // IR(30785, 20) + "GroupNonUniformFAdd\0" // IR(30805, 20) + "GroupNonUniformIMul\0" // IR(30825, 20) + "GroupNonUniformFMul\0" // IR(30845, 20) + "GroupNonUniformSMin\0" // IR(30865, 20) + "GroupNonUniformUMin\0" // IR(30885, 20) + "GroupNonUniformFMin\0" // IR(30905, 20) + "GroupNonUniformSMax\0" // IR(30925, 20) + "GroupNonUniformUMax\0" // IR(30945, 20) + "GroupNonUniformFMax\0" // IR(30965, 20) + "GroupNonUniformBitwiseAnd\0" // IR(30985, 26) + "GroupNonUniformBitwiseOr\0" // IR(31011, 25) + "GroupNonUniformBitwiseXor\0" // IR(31036, 26) + "GroupNonUniformLogicalAnd\0" // IR(31062, 26) + "GroupNonUniformLogicalOr\0" // IR(31088, 25) + "GroupNonUniformLogicalXor\0" // IR(31113, 26) + "GroupNonUniformQuadBroadcast\0" // IR(31139, 29) + "GroupNonUniformQuadSwap\0" // IR(31168, 24) + "CopyLogical\0" // IR(31192, 12) + "PtrEqual\0" // IR(31204, 9) + "PtrNotEqual\0" // IR(31213, 12) + "PtrDiff\0" // IR(31225, 8) + "ColorAttachmentReadEXT\0" // IR(31233, 23) + "DepthAttachmentReadEXT\0" // IR(31256, 23) + "StencilAttachmentReadEXT\0" // IR(31279, 25) + "TypeTensorARM\0" // IR(31304, 14) + "SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS\0" // IR(31318, 42) + "TensorReadARM\0" // IR(31360, 14) + "TensorWriteARM\0" // IR(31374, 15) + "TensorQuerySizeARM\0" // IR(31389, 19) + "TerminateInvocation\0" // IR(31408, 20) + "TypeUntypedPointerKHR\0" // IR(31428, 22) + "UntypedVariableKHR\0" // IR(31450, 19) + "UntypedAccessChainKHR\0" // IR(31469, 22) + "UntypedInBoundsAccessChainKHR\0" // IR(31491, 30) + "SubgroupFirstInvocationKHR\0" // IR(31521, 27) + "UntypedPtrAccessChainKHR\0" // IR(31548, 25) + "UntypedInBoundsPtrAccessChainKHR\0" // IR(31573, 33) + "UntypedArrayLengthKHR\0" // IR(31606, 22) + "UntypedPrefetchKHR\0" // IR(31628, 19) + "SubgroupAllKHR\0" // IR(31647, 15) + "SubgroupAnyKHR\0" // IR(31662, 15) + "SubgroupAllEqualKHR\0" // IR(31677, 20) + "SubgroupReadInvocationKHR\0" // IR(31697, 26) + "ExtInstWithForwardRefsKHR\0" // IR(31723, 26) + "TraceRayKHR\0" // IR(31749, 12) + "ExecuteCallableKHR\0" // IR(31761, 19) + "ConvertUToAccelerationStructureKHR\0" // IR(31780, 35) + "IgnoreIntersectionKHR\0" // IR(31815, 22) + "TerminateRayKHR\0" // IR(31837, 16) + "SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT\0" // IR(31853, 47) + "SDot\0" // IR(31900, 5) + "SDotKHR\0" // IR(31905, 8) + "UDot\0" // IR(31913, 5) + "UDotKHR\0" // IR(31918, 8) + "SUDot\0" // IR(31926, 6) + "SUDotKHR\0" // IR(31932, 9) + "SDotAccSat\0" // IR(31941, 11) + "SDotAccSatKHR\0" // IR(31952, 14) + "UDotAccSat\0" // IR(31966, 11) + "UDotAccSatKHR\0" // IR(31977, 14) + "SUDotAccSat\0" // IR(31991, 12) + "SUDotAccSatKHR\0" // IR(32003, 15) + "TypeCooperativeMatrixKHR\0" // IR(32018, 25) + "CooperativeMatrixLoadKHR\0" // IR(32043, 25) + "CooperativeMatrixStoreKHR\0" // IR(32068, 26) + "SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS\0" // IR(32094, 54) + "CooperativeMatrixMulAddKHR\0" // IR(32148, 27) + "CooperativeMatrixLengthKHR\0" // IR(32175, 27) + "ConstantCompositeReplicateEXT\0" // IR(32202, 30) + "SpecConstantCompositeReplicateEXT\0" // IR(32232, 34) + "CompositeConstructReplicateEXT\0" // IR(32266, 31) + "TypeRayQueryKHR\0" // IR(32297, 16) + "RayQueryInitializeKHR\0" // IR(32313, 22) + "RayQueryTerminateKHR\0" // IR(32335, 21) + "RayQueryGenerateIntersectionKHR\0" // IR(32356, 32) + "RayQueryConfirmIntersectionKHR\0" // IR(32388, 31) + "RayQueryProceedKHR\0" // IR(32419, 19) + "RayQueryGetIntersectionTypeKHR\0" // IR(32438, 31) + "ImageSampleWeightedQCOM\0" // IR(32469, 24) + "ImageBoxFilterQCOM\0" // IR(32493, 19) + "ImageBlockMatchSSDQCOM\0" // IR(32512, 23) + "ImageBlockMatchSADQCOM\0" // IR(32535, 23) + "ImageBlockMatchWindowSSDQCOM\0" // IR(32558, 29) + "ImageBlockMatchWindowSADQCOM\0" // IR(32587, 29) + "ImageBlockMatchGatherSSDQCOM\0" // IR(32616, 29) + "ImageBlockMatchGatherSADQCOM\0" // IR(32645, 29) + "GroupIAddNonUniformAMD\0" // IR(32674, 23) + "GroupFAddNonUniformAMD\0" // IR(32697, 23) + "GroupFMinNonUniformAMD\0" // IR(32720, 23) + "GroupUMinNonUniformAMD\0" // IR(32743, 23) + "GroupSMinNonUniformAMD\0" // IR(32766, 23) + "GroupFMaxNonUniformAMD\0" // IR(32789, 23) + "GroupUMaxNonUniformAMD\0" // IR(32812, 23) + "GroupSMaxNonUniformAMD\0" // IR(32835, 23) + "FragmentMaskFetchAMD\0" // IR(32858, 21) + "FragmentFetchAMD\0" // IR(32879, 17) + "ReadClockKHR\0" // IR(32896, 13) + "AllocateNodePayloadsAMDX\0" // IR(32909, 25) + "EnqueueNodePayloadsAMDX\0" // IR(32934, 24) + "TypeNodePayloadArrayAMDX\0" // IR(32958, 25) + "FinishWritingNodePayloadAMDX\0" // IR(32983, 29) + "NodePayloadArrayLengthAMDX\0" // IR(33012, 27) + "IsNodePayloadValidAMDX\0" // IR(33039, 23) + "ConstantStringAMDX\0" // IR(33062, 19) + "SpecConstantStringAMDX\0" // IR(33081, 23) + "GroupNonUniformQuadAllKHR\0" // IR(33104, 26) + "GroupNonUniformQuadAnyKHR\0" // IR(33130, 26) + "HitObjectRecordHitMotionNV\0" // IR(33156, 27) + "HitObjectRecordHitWithIndexMotionNV\0" // IR(33183, 36) + "HitObjectRecordMissMotionNV\0" // IR(33219, 28) + "HitObjectGetWorldToObjectNV\0" // IR(33247, 28) + "HitObjectGetObjectToWorldNV\0" // IR(33275, 28) + "HitObjectGetObjectRayDirectionNV\0" // IR(33303, 33) + "HitObjectGetObjectRayOriginNV\0" // IR(33336, 30) + "HitObjectTraceRayMotionNV\0" // IR(33366, 26) + "HitObjectGetShaderRecordBufferHandleNV\0" // IR(33392, 39) + "HitObjectGetShaderBindingTableRecordIndexNV\0" // IR(33431, 44) + "HitObjectRecordEmptyNV\0" // IR(33475, 23) + "HitObjectTraceRayNV\0" // IR(33498, 20) + "HitObjectRecordHitNV\0" // IR(33518, 21) + "HitObjectRecordHitWithIndexNV\0" // IR(33539, 30) + "HitObjectRecordMissNV\0" // IR(33569, 22) + "HitObjectExecuteShaderNV\0" // IR(33591, 25) + "HitObjectGetCurrentTimeNV\0" // IR(33616, 26) + "HitObjectGetAttributesNV\0" // IR(33642, 25) + "HitObjectGetHitKindNV\0" // IR(33667, 22) + "HitObjectGetPrimitiveIndexNV\0" // IR(33689, 29) + "HitObjectGetGeometryIndexNV\0" // IR(33718, 28) + "HitObjectGetInstanceIdNV\0" // IR(33746, 25) + "HitObjectGetInstanceCustomIndexNV\0" // IR(33771, 34) + "HitObjectGetWorldRayDirectionNV\0" // IR(33805, 32) + "HitObjectGetWorldRayOriginNV\0" // IR(33837, 29) + "HitObjectGetRayTMaxNV\0" // IR(33866, 22) + "HitObjectGetRayTMinNV\0" // IR(33888, 22) + "HitObjectIsEmptyNV\0" // IR(33910, 19) + "HitObjectIsHitNV\0" // IR(33929, 17) + "HitObjectIsMissNV\0" // IR(33946, 18) + "ReorderThreadWithHitObjectNV\0" // IR(33964, 29) + "ReorderThreadWithHintNV\0" // IR(33993, 24) + "TypeHitObjectNV\0" // IR(34017, 16) + "ImageSampleFootprintNV\0" // IR(34033, 23) + "TypeCooperativeVectorNV\0" // IR(34056, 24) + "CooperativeVectorMatrixMulNV\0" // IR(34080, 29) + "CooperativeVectorOuterProductAccumulateNV\0" // IR(34109, 42) + "CooperativeVectorReduceSumAccumulateNV\0" // IR(34151, 39) + "CooperativeVectorMatrixMulAddNV\0" // IR(34190, 32) + "CooperativeMatrixConvertNV\0" // IR(34222, 27) + "EmitMeshTasksEXT\0" // IR(34249, 17) + "SetMeshOutputsEXT\0" // IR(34266, 18) + "GroupNonUniformPartitionNV\0" // IR(34284, 27) + "WritePackedPrimitiveIndices4x8NV\0" // IR(34311, 33) + "FetchMicroTriangleVertexPositionNV\0" // IR(34344, 35) + "FetchMicroTriangleVertexBarycentricNV\0" // IR(34379, 38) + "CooperativeVectorLoadNV\0" // IR(34417, 24) + "CooperativeVectorStoreNV\0" // IR(34441, 25) + "ReportIntersectionKHR\0" // IR(34466, 22) + "ReportIntersectionNV\0" // IR(34488, 21) + "IgnoreIntersectionNV\0" // IR(34509, 21) + "TerminateRayNV\0" // IR(34530, 15) + "TraceNV\0" // IR(34545, 8) + "TraceMotionNV\0" // IR(34553, 14) + "TraceRayMotionNV\0" // IR(34567, 17) + "RayQueryGetIntersectionTriangleVertexPositionsKHR\0" // IR(34584, 50) + "TypeAccelerationStructureKHR\0" // IR(34634, 29) + "TypeAccelerationStructureNV\0" // IR(34663, 28) + "ExecuteCallableNV\0" // IR(34691, 18) + "RayQueryGetClusterIdNV\0" // IR(34709, 23) + "HitObjectGetClusterIdNV\0" // IR(34732, 24) + "TypeCooperativeMatrixNV\0" // IR(34756, 24) + "CooperativeMatrixLoadNV\0" // IR(34780, 24) + "CooperativeMatrixStoreNV\0" // IR(34804, 25) + "CooperativeMatrixMulAddNV\0" // IR(34829, 26) + "CooperativeMatrixLengthNV\0" // IR(34855, 26) + "BeginInvocationInterlockEXT\0" // IR(34881, 28) + "EndInvocationInterlockEXT\0" // IR(34909, 26) + "SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE\0" // IR(34935, 43) + "CooperativeMatrixReduceNV\0" // IR(34978, 26) + "SPV_OPERAND_TYPE_MEMORY_ACCESS\0" // IR(35004, 31) + "SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS\0" // IR(35035, 44) + "CooperativeMatrixLoadTensorNV\0" // IR(35079, 30) + "CooperativeMatrixStoreTensorNV\0" // IR(35109, 31) + "CooperativeMatrixPerElementOpNV\0" // IR(35140, 32) + "TypeTensorLayoutNV\0" // IR(35172, 19) + "TypeTensorViewNV\0" // IR(35191, 17) + "CreateTensorLayoutNV\0" // IR(35208, 21) + "TensorLayoutSetDimensionNV\0" // IR(35229, 27) + "TensorLayoutSetStrideNV\0" // IR(35256, 24) + "TensorLayoutSliceNV\0" // IR(35280, 20) + "TensorLayoutSetClampValueNV\0" // IR(35300, 28) + "CreateTensorViewNV\0" // IR(35328, 19) + "TensorViewSetDimensionNV\0" // IR(35347, 25) + "TensorViewSetStrideNV\0" // IR(35372, 22) + "IsHelperInvocationEXT\0" // IR(35394, 22) + "TensorViewSetClipNV\0" // IR(35416, 20) + "TensorLayoutSetBlockSizeNV\0" // IR(35436, 27) + "CooperativeMatrixTransposeNV\0" // IR(35463, 29) + "ConvertUToImageNV\0" // IR(35492, 18) + "ConvertUToSamplerNV\0" // IR(35510, 20) + "ConvertImageToUNV\0" // IR(35530, 18) + "ConvertSamplerToUNV\0" // IR(35548, 20) + "ConvertUToSampledImageNV\0" // IR(35568, 25) + "ConvertSampledImageToUNV\0" // IR(35593, 25) + "SamplerImageAddressingModeNV\0" // IR(35618, 29) + "SPV_OPERAND_TYPE_OPTIONAL_RAW_ACCESS_CHAIN_OPERANDS\0" // IR(35647, 52) + "RawAccessChainNV\0" // IR(35699, 17) + "RayQueryGetIntersectionSpherePositionNV\0" // IR(35716, 40) + "RayQueryGetIntersectionSphereRadiusNV\0" // IR(35756, 38) + "RayQueryGetIntersectionLSSPositionsNV\0" // IR(35794, 38) + "RayQueryGetIntersectionLSSRadiiNV\0" // IR(35832, 34) + "RayQueryGetIntersectionLSSHitValueNV\0" // IR(35866, 37) + "HitObjectGetSpherePositionNV\0" // IR(35903, 29) + "HitObjectGetSphereRadiusNV\0" // IR(35932, 27) + "HitObjectGetLSSPositionsNV\0" // IR(35959, 27) + "HitObjectGetLSSRadiiNV\0" // IR(35986, 23) + "HitObjectIsSphereHitNV\0" // IR(36009, 23) + "HitObjectIsLSSHitNV\0" // IR(36032, 20) + "RayQueryIsSphereHitNV\0" // IR(36052, 22) + "RayQueryIsLSSHitNV\0" // IR(36074, 19) + "SubgroupShuffleDownINTEL\0" // IR(36093, 25) + "SubgroupShuffleUpINTEL\0" // IR(36118, 23) + "SubgroupShuffleXorINTEL\0" // IR(36141, 24) + "SubgroupBlockReadINTEL\0" // IR(36165, 23) + "SubgroupBlockWriteINTEL\0" // IR(36188, 24) + "SubgroupImageBlockReadINTEL\0" // IR(36212, 28) + "SubgroupImageBlockWriteINTEL\0" // IR(36240, 29) + "SubgroupImageMediaBlockReadINTEL\0" // IR(36269, 33) + "SubgroupImageMediaBlockWriteINTEL\0" // IR(36302, 34) + "UCountLeadingZerosINTEL\0" // IR(36336, 24) + "UCountTrailingZerosINTEL\0" // IR(36360, 25) + "AbsISubINTEL\0" // IR(36385, 13) + "AbsUSubINTEL\0" // IR(36398, 13) + "IAddSatINTEL\0" // IR(36411, 13) + "UAddSatINTEL\0" // IR(36424, 13) + "IAverageINTEL\0" // IR(36437, 14) + "UAverageINTEL\0" // IR(36451, 14) + "IAverageRoundedINTEL\0" // IR(36465, 21) + "UAverageRoundedINTEL\0" // IR(36486, 21) + "ISubSatINTEL\0" // IR(36507, 13) + "USubSatINTEL\0" // IR(36520, 13) + "IMul32x16INTEL\0" // IR(36533, 15) + "UMul32x16INTEL\0" // IR(36548, 15) + "ConstantFunctionPointerINTEL\0" // IR(36563, 29) + "FunctionPointerCallINTEL\0" // IR(36592, 25) + "AsmTargetINTEL\0" // IR(36617, 15) + "AsmCallINTEL\0" // IR(36632, 13) + "AtomicFMinEXT\0" // IR(36645, 14) + "AtomicFMaxEXT\0" // IR(36659, 14) + "AssumeTrueKHR\0" // IR(36673, 14) + "ExpectKHR\0" // IR(36687, 10) + "DecorateString\0" // IR(36697, 15) + "DecorateStringGOOGLE\0" // IR(36712, 21) + "MemberDecorateString\0" // IR(36733, 21) + "MemberDecorateStringGOOGLE\0" // IR(36754, 27) + "VmeImageINTEL\0" // IR(36781, 14) + "TypeVmeImageINTEL\0" // IR(36795, 18) + "TypeAvcImePayloadINTEL\0" // IR(36813, 23) + "TypeAvcRefPayloadINTEL\0" // IR(36836, 23) + "TypeAvcSicPayloadINTEL\0" // IR(36859, 23) + "TypeAvcMcePayloadINTEL\0" // IR(36882, 23) + "TypeAvcMceResultINTEL\0" // IR(36905, 22) + "TypeAvcImeResultINTEL\0" // IR(36927, 22) + "TypeAvcImeResultSingleReferenceStreamoutINTEL\0" // IR(36949, 46) + "TypeAvcImeResultDualReferenceStreamoutINTEL\0" // IR(36995, 44) + "TypeAvcImeSingleReferenceStreaminINTEL\0" // IR(37039, 39) + "TypeAvcImeDualReferenceStreaminINTEL\0" // IR(37078, 37) + "TypeAvcRefResultINTEL\0" // IR(37115, 22) + "TypeAvcSicResultINTEL\0" // IR(37137, 22) + "SubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL\0" // IR(37159, 60) + "SubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL\0" // IR(37219, 53) + "SubgroupAvcMceGetDefaultInterShapePenaltyINTEL\0" // IR(37272, 47) + "SubgroupAvcMceSetInterShapePenaltyINTEL\0" // IR(37319, 40) + "SubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL\0" // IR(37359, 51) + "SubgroupAvcMceSetInterDirectionPenaltyINTEL\0" // IR(37410, 44) + "SubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL\0" // IR(37454, 51) + "SubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL\0" // IR(37505, 56) + "SubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL\0" // IR(37561, 50) + "SubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL\0" // IR(37611, 52) + "SubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL\0" // IR(37663, 49) + "SubgroupAvcMceSetMotionVectorCostFunctionINTEL\0" // IR(37712, 47) + "SubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL\0" // IR(37759, 50) + "SubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL\0" // IR(37809, 51) + "SubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL\0" // IR(37860, 56) + "SubgroupAvcMceSetAcOnlyHaarINTEL\0" // IR(37916, 33) + "SubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL\0" // IR(37949, 52) + "SubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL\0" // IR(38001, 61) + "SubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL\0" // IR(38062, 61) + "SubgroupAvcMceConvertToImePayloadINTEL\0" // IR(38123, 39) + "SubgroupAvcMceConvertToImeResultINTEL\0" // IR(38162, 38) + "SubgroupAvcMceConvertToRefPayloadINTEL\0" // IR(38200, 39) + "SubgroupAvcMceConvertToRefResultINTEL\0" // IR(38239, 38) + "SubgroupAvcMceConvertToSicPayloadINTEL\0" // IR(38277, 39) + "SubgroupAvcMceConvertToSicResultINTEL\0" // IR(38316, 38) + "SubgroupAvcMceGetMotionVectorsINTEL\0" // IR(38354, 36) + "SubgroupAvcMceGetInterDistortionsINTEL\0" // IR(38390, 39) + "SubgroupAvcMceGetBestInterDistortionsINTEL\0" // IR(38429, 43) + "SubgroupAvcMceGetInterMajorShapeINTEL\0" // IR(38472, 38) + "SubgroupAvcMceGetInterMinorShapeINTEL\0" // IR(38510, 38) + "SubgroupAvcMceGetInterDirectionsINTEL\0" // IR(38548, 38) + "SubgroupAvcMceGetInterMotionVectorCountINTEL\0" // IR(38586, 45) + "SubgroupAvcMceGetInterReferenceIdsINTEL\0" // IR(38631, 40) + "SubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL\0" // IR(38671, 62) + "SubgroupAvcImeInitializeINTEL\0" // IR(38733, 30) + "SubgroupAvcImeSetSingleReferenceINTEL\0" // IR(38763, 38) + "SubgroupAvcImeSetDualReferenceINTEL\0" // IR(38801, 36) + "SubgroupAvcImeRefWindowSizeINTEL\0" // IR(38837, 33) + "SubgroupAvcImeAdjustRefOffsetINTEL\0" // IR(38870, 35) + "SubgroupAvcImeConvertToMcePayloadINTEL\0" // IR(38905, 39) + "SubgroupAvcImeSetMaxMotionVectorCountINTEL\0" // IR(38944, 43) + "SubgroupAvcImeSetUnidirectionalMixDisableINTEL\0" // IR(38987, 47) + "SubgroupAvcImeSetEarlySearchTerminationThresholdINTEL\0" // IR(39034, 54) + "SubgroupAvcImeSetWeightedSadINTEL\0" // IR(39088, 34) + "SubgroupAvcImeEvaluateWithSingleReferenceINTEL\0" // IR(39122, 47) + "SubgroupAvcImeEvaluateWithDualReferenceINTEL\0" // IR(39169, 45) + "SubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL\0" // IR(39214, 55) + "SubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL\0" // IR(39269, 53) + "SubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL\0" // IR(39322, 56) + "SubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL\0" // IR(39378, 54) + "SubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL\0" // IR(39432, 58) + "SubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL\0" // IR(39490, 56) + "SubgroupAvcImeConvertToMceResultINTEL\0" // IR(39546, 38) + "SubgroupAvcImeGetSingleReferenceStreaminINTEL\0" // IR(39584, 46) + "SubgroupAvcImeGetDualReferenceStreaminINTEL\0" // IR(39630, 44) + "SubgroupAvcImeStripSingleReferenceStreamoutINTEL\0" // IR(39674, 49) + "SubgroupAvcImeStripDualReferenceStreamoutINTEL\0" // IR(39723, 47) + "SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL\0" // IR(39770, 70) + "SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL\0" // IR(39840, 68) + "SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL\0" // IR(39908, 69) + "SubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL\0" // IR(39977, 68) + "SubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL\0" // IR(40045, 66) + "SubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL\0" // IR(40111, 67) + "SubgroupAvcImeGetBorderReachedINTEL\0" // IR(40178, 36) + "SubgroupAvcImeGetTruncatedSearchIndicationINTEL\0" // IR(40214, 48) + "SubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL\0" // IR(40262, 59) + "SubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL\0" // IR(40321, 58) + "SubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL\0" // IR(40379, 56) + "SubgroupAvcFmeInitializeINTEL\0" // IR(40435, 30) + "SubgroupAvcBmeInitializeINTEL\0" // IR(40465, 30) + "SubgroupAvcRefConvertToMcePayloadINTEL\0" // IR(40495, 39) + "SubgroupAvcRefSetBidirectionalMixDisableINTEL\0" // IR(40534, 46) + "SubgroupAvcRefSetBilinearFilterEnableINTEL\0" // IR(40580, 43) + "SubgroupAvcRefEvaluateWithSingleReferenceINTEL\0" // IR(40623, 47) + "SubgroupAvcRefEvaluateWithDualReferenceINTEL\0" // IR(40670, 45) + "SubgroupAvcRefEvaluateWithMultiReferenceINTEL\0" // IR(40715, 46) + "SubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL\0" // IR(40761, 56) + "SubgroupAvcRefConvertToMceResultINTEL\0" // IR(40817, 38) + "SubgroupAvcSicInitializeINTEL\0" // IR(40855, 30) + "SubgroupAvcSicConfigureSkcINTEL\0" // IR(40885, 32) + "SubgroupAvcSicConfigureIpeLumaINTEL\0" // IR(40917, 36) + "SubgroupAvcSicConfigureIpeLumaChromaINTEL\0" // IR(40953, 42) + "SubgroupAvcSicGetMotionVectorMaskINTEL\0" // IR(40995, 39) + "SubgroupAvcSicConvertToMcePayloadINTEL\0" // IR(41034, 39) + "SubgroupAvcSicSetIntraLumaShapePenaltyINTEL\0" // IR(41073, 44) + "SubgroupAvcSicSetIntraLumaModeCostFunctionINTEL\0" // IR(41117, 48) + "SubgroupAvcSicSetIntraChromaModeCostFunctionINTEL\0" // IR(41165, 50) + "SubgroupAvcSicSetBilinearFilterEnableINTEL\0" // IR(41215, 43) + "SubgroupAvcSicSetSkcForwardTransformEnableINTEL\0" // IR(41258, 48) + "SubgroupAvcSicSetBlockBasedRawSkipSadINTEL\0" // IR(41306, 43) + "SubgroupAvcSicEvaluateIpeINTEL\0" // IR(41349, 31) + "SubgroupAvcSicEvaluateWithSingleReferenceINTEL\0" // IR(41380, 47) + "SubgroupAvcSicEvaluateWithDualReferenceINTEL\0" // IR(41427, 45) + "SubgroupAvcSicEvaluateWithMultiReferenceINTEL\0" // IR(41472, 46) + "SubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL\0" // IR(41518, 56) + "SubgroupAvcSicConvertToMceResultINTEL\0" // IR(41574, 38) + "SubgroupAvcSicGetIpeLumaShapeINTEL\0" // IR(41612, 35) + "SubgroupAvcSicGetBestIpeLumaDistortionINTEL\0" // IR(41647, 44) + "SubgroupAvcSicGetBestIpeChromaDistortionINTEL\0" // IR(41691, 46) + "SubgroupAvcSicGetPackedIpeLumaModesINTEL\0" // IR(41737, 41) + "SubgroupAvcSicGetIpeChromaModeINTEL\0" // IR(41778, 36) + "SubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL\0" // IR(41814, 50) + "SubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL\0" // IR(41864, 48) + "SubgroupAvcSicGetInterRawSadsINTEL\0" // IR(41912, 35) + "SaveMemoryINTEL\0" // IR(41947, 16) + "RestoreMemoryINTEL\0" // IR(41963, 19) + "ArbitraryFloatSinCosPiINTEL\0" // IR(41982, 28) + "ArbitraryFloatCastINTEL\0" // IR(42010, 24) + "ArbitraryFloatCastFromIntINTEL\0" // IR(42034, 31) + "ArbitraryFloatCastToIntINTEL\0" // IR(42065, 29) + "ArbitraryFloatAddINTEL\0" // IR(42094, 23) + "ArbitraryFloatSubINTEL\0" // IR(42117, 23) + "ArbitraryFloatMulINTEL\0" // IR(42140, 23) + "ArbitraryFloatDivINTEL\0" // IR(42163, 23) + "ArbitraryFloatGTINTEL\0" // IR(42186, 22) + "ArbitraryFloatGEINTEL\0" // IR(42208, 22) + "ArbitraryFloatLTINTEL\0" // IR(42230, 22) + "ArbitraryFloatLEINTEL\0" // IR(42252, 22) + "ArbitraryFloatEQINTEL\0" // IR(42274, 22) + "ArbitraryFloatRecipINTEL\0" // IR(42296, 25) + "ArbitraryFloatRSqrtINTEL\0" // IR(42321, 25) + "ArbitraryFloatCbrtINTEL\0" // IR(42346, 24) + "ArbitraryFloatHypotINTEL\0" // IR(42370, 25) + "ArbitraryFloatSqrtINTEL\0" // IR(42395, 24) + "ArbitraryFloatLogINTEL\0" // IR(42419, 23) + "ArbitraryFloatLog2INTEL\0" // IR(42442, 24) + "ArbitraryFloatLog10INTEL\0" // IR(42466, 25) + "ArbitraryFloatLog1pINTEL\0" // IR(42491, 25) + "ArbitraryFloatExpINTEL\0" // IR(42516, 23) + "ArbitraryFloatExp2INTEL\0" // IR(42539, 24) + "ArbitraryFloatExp10INTEL\0" // IR(42563, 25) + "ArbitraryFloatExpm1INTEL\0" // IR(42588, 25) + "ArbitraryFloatSinINTEL\0" // IR(42613, 23) + "ArbitraryFloatCosINTEL\0" // IR(42636, 23) + "ArbitraryFloatSinCosINTEL\0" // IR(42659, 26) + "ArbitraryFloatSinPiINTEL\0" // IR(42685, 25) + "ArbitraryFloatCosPiINTEL\0" // IR(42710, 25) + "ArbitraryFloatASinINTEL\0" // IR(42735, 24) + "ArbitraryFloatASinPiINTEL\0" // IR(42759, 26) + "ArbitraryFloatACosINTEL\0" // IR(42785, 24) + "ArbitraryFloatACosPiINTEL\0" // IR(42809, 26) + "ArbitraryFloatATanINTEL\0" // IR(42835, 24) + "ArbitraryFloatATanPiINTEL\0" // IR(42859, 26) + "ArbitraryFloatATan2INTEL\0" // IR(42885, 25) + "ArbitraryFloatPowINTEL\0" // IR(42910, 23) + "ArbitraryFloatPowRINTEL\0" // IR(42933, 24) + "ArbitraryFloatPowNINTEL\0" // IR(42957, 24) + "LoopControlINTEL\0" // IR(42981, 17) + "AliasDomainDeclINTEL\0" // IR(42998, 21) + "AliasScopeDeclINTEL\0" // IR(43019, 20) + "AliasScopeListDeclINTEL\0" // IR(43039, 24) + "FixedSqrtINTEL\0" // IR(43063, 15) + "FixedRecipINTEL\0" // IR(43078, 16) + "FixedRsqrtINTEL\0" // IR(43094, 16) + "FixedSinINTEL\0" // IR(43110, 14) + "FixedCosINTEL\0" // IR(43124, 14) + "FixedSinCosINTEL\0" // IR(43138, 17) + "FixedSinPiINTEL\0" // IR(43155, 16) + "FixedCosPiINTEL\0" // IR(43171, 16) + "FixedSinCosPiINTEL\0" // IR(43187, 19) + "FixedLogINTEL\0" // IR(43206, 14) + "FixedExpINTEL\0" // IR(43220, 14) + "PtrCastToCrossWorkgroupINTEL\0" // IR(43234, 29) + "CrossWorkgroupCastToPtrINTEL\0" // IR(43263, 29) + "ReadPipeBlockingINTEL\0" // IR(43292, 22) + "WritePipeBlockingINTEL\0" // IR(43314, 23) + "RayQueryGetRayTMinKHR\0" // IR(43337, 22) + "RayQueryGetRayFlagsKHR\0" // IR(43359, 23) + "RayQueryGetIntersectionTKHR\0" // IR(43382, 28) + "RayQueryGetIntersectionInstanceCustomIndexKHR\0" // IR(43410, 46) + "RayQueryGetIntersectionInstanceIdKHR\0" // IR(43456, 37) + "RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR\0" // IR(43493, 65) + "RayQueryGetIntersectionGeometryIndexKHR\0" // IR(43558, 40) + "RayQueryGetIntersectionPrimitiveIndexKHR\0" // IR(43598, 41) + "RayQueryGetIntersectionBarycentricsKHR\0" // IR(43639, 39) + "RayQueryGetIntersectionFrontFaceKHR\0" // IR(43678, 36) + "RayQueryGetIntersectionCandidateAABBOpaqueKHR\0" // IR(43714, 46) + "RayQueryGetIntersectionObjectRayDirectionKHR\0" // IR(43760, 45) + "RayQueryGetIntersectionObjectRayOriginKHR\0" // IR(43805, 42) + "RayQueryGetWorldRayDirectionKHR\0" // IR(43847, 32) + "RayQueryGetWorldRayOriginKHR\0" // IR(43879, 29) + "RayQueryGetIntersectionObjectToWorldKHR\0" // IR(43908, 40) + "RayQueryGetIntersectionWorldToObjectKHR\0" // IR(43948, 40) + "AtomicFAddEXT\0" // IR(43988, 14) + "TypeBufferSurfaceINTEL\0" // IR(44002, 23) + "TypeStructContinuedINTEL\0" // IR(44025, 25) + "ConstantCompositeContinuedINTEL\0" // IR(44050, 32) + "SpecConstantCompositeContinuedINTEL\0" // IR(44082, 36) + "CompositeConstructContinuedINTEL\0" // IR(44118, 33) + "ConvertFToBF16INTEL\0" // IR(44151, 20) + "ConvertBF16ToFINTEL\0" // IR(44171, 20) + "ControlBarrierArriveINTEL\0" // IR(44191, 26) + "ControlBarrierWaitINTEL\0" // IR(44217, 24) + "TaskSequenceCreateINTEL\0" // IR(44241, 24) + "TaskSequenceAsyncINTEL\0" // IR(44265, 23) + "TaskSequenceGetINTEL\0" // IR(44288, 21) + "TaskSequenceReleaseINTEL\0" // IR(44309, 25) + "TypeTaskSequenceINTEL\0" // IR(44334, 22) + "SubgroupBlockPrefetchINTEL\0" // IR(44356, 27) + "Subgroup2DBlockLoadINTEL\0" // IR(44383, 25) + "Subgroup2DBlockLoadTransformINTEL\0" // IR(44408, 34) + "Subgroup2DBlockLoadTransposeINTEL\0" // IR(44442, 34) + "Subgroup2DBlockPrefetchINTEL\0" // IR(44476, 29) + "Subgroup2DBlockStoreINTEL\0" // IR(44505, 26) + "SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS\0" // IR(44531, 62) + "BitwiseFunctionINTEL\0" // IR(44593, 21) + "GroupIMulKHR\0" // IR(44614, 13) + "GroupFMulKHR\0" // IR(44627, 13) + "GroupBitwiseAndKHR\0" // IR(44640, 19) + "GroupBitwiseOrKHR\0" // IR(44659, 18) + "GroupBitwiseXorKHR\0" // IR(44677, 19) + "GroupLogicalAndKHR\0" // IR(44696, 19) + "GroupLogicalOrKHR\0" // IR(44715, 18) + "GroupLogicalXorKHR\0" // IR(44733, 19) + "RoundFToTF32INTEL\0" // IR(44752, 18) + "MaskedGatherINTEL\0" // IR(44770, 18) + "MaskedScatterINTEL\0" // IR(44788, 19) + "ConvertHandleToImageINTEL\0" // IR(44807, 26) + "ConvertHandleToSamplerINTEL\0" // IR(44833, 28) + "ConvertHandleToSampledImageINTEL\0" // IR(44861, 33) + "DebugInfoNone\0" // IR(44894, 14) + "DebugCompilationUnit\0" // IR(44908, 21) + "SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING\0" // IR(44929, 52) + "DebugTypeBasic\0" // IR(44981, 15) + "SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS\0" // IR(44996, 34) + "DebugTypePointer\0" // IR(45030, 17) + "SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER\0" // IR(45047, 38) + "DebugTypeQualifier\0" // IR(45085, 19) + "DebugTypeArray\0" // IR(45104, 15) + "DebugTypeVector\0" // IR(45119, 16) + "DebugTypedef\0" // IR(45135, 13) + "DebugTypeFunction\0" // IR(45148, 18) + "DebugTypeEnum\0" // IR(45166, 14) + "SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE\0" // IR(45180, 38) + "DebugTypeComposite\0" // IR(45218, 19) + "DebugTypeMember\0" // IR(45237, 16) + "DebugTypeInheritance\0" // IR(45253, 21) + "DebugTypePtrToMember\0" // IR(45274, 21) + "DebugTypeTemplate\0" // IR(45295, 18) + "DebugTypeTemplateParameter\0" // IR(45313, 27) + "DebugTypeTemplateTemplateParameter\0" // IR(45340, 35) + "DebugTypeTemplateParameterPack\0" // IR(45375, 31) + "DebugGlobalVariable\0" // IR(45406, 20) + "DebugFunctionDeclaration\0" // IR(45426, 25) + "DebugFunction\0" // IR(45451, 14) + "DebugLexicalBlock\0" // IR(45465, 18) + "DebugLexicalBlockDiscriminator\0" // IR(45483, 31) + "DebugScope\0" // IR(45514, 11) + "DebugNoScope\0" // IR(45525, 13) + "DebugInlinedAt\0" // IR(45538, 15) + "SPV_OPERAND_TYPE_OPTIONAL_LITERAL_INTEGER\0" // IR(45553, 42) + "DebugLocalVariable\0" // IR(45595, 19) + "DebugInlinedVariable\0" // IR(45614, 21) + "DebugDeclare\0" // IR(45635, 13) + "DebugValue\0" // IR(45648, 11) + "SPV_OPERAND_TYPE_DEBUG_OPERATION\0" // IR(45659, 33) + "DebugOperation\0" // IR(45692, 15) + "DebugExpression\0" // IR(45707, 16) + "DebugMacroDef\0" // IR(45723, 14) + "DebugMacroUndef\0" // IR(45737, 16) + "Round\0" // IR(45753, 6) + "RoundEven\0" // IR(45759, 10) + "Trunc\0" // IR(45769, 6) + "FAbs\0" // IR(45775, 5) + "SAbs\0" // IR(45780, 5) + "FSign\0" // IR(45785, 6) + "SSign\0" // IR(45791, 6) + "Floor\0" // IR(45797, 6) + "Ceil\0" // IR(45803, 5) + "Fract\0" // IR(45808, 6) + "Radians\0" // IR(45814, 8) + "Degrees\0" // IR(45822, 8) + "Sin\0" // IR(45830, 4) + "Cos\0" // IR(45834, 4) + "Tan\0" // IR(45838, 4) + "Asin\0" // IR(45842, 5) + "Acos\0" // IR(45847, 5) + "Atan\0" // IR(45852, 5) + "Sinh\0" // IR(45857, 5) + "Cosh\0" // IR(45862, 5) + "Tanh\0" // IR(45867, 5) + "Asinh\0" // IR(45872, 6) + "Acosh\0" // IR(45878, 6) + "Atanh\0" // IR(45884, 6) + "Atan2\0" // IR(45890, 6) + "Pow\0" // IR(45896, 4) + "Exp\0" // IR(45900, 4) + "Log\0" // IR(45904, 4) + "Exp2\0" // IR(45908, 5) + "Log2\0" // IR(45913, 5) + "Sqrt\0" // IR(45918, 5) + "InverseSqrt\0" // IR(45923, 12) + "Determinant\0" // IR(45935, 12) + "MatrixInverse\0" // IR(45947, 14) + "Modf\0" // IR(45961, 5) + "ModfStruct\0" // IR(45966, 11) + "FMin\0" // IR(45977, 5) + "UMin\0" // IR(45982, 5) + "SMin\0" // IR(45987, 5) + "FMax\0" // IR(45992, 5) + "UMax\0" // IR(45997, 5) + "SMax\0" // IR(46002, 5) + "FClamp\0" // IR(46007, 7) + "UClamp\0" // IR(46014, 7) + "SClamp\0" // IR(46021, 7) + "FMix\0" // IR(46028, 5) + "IMix\0" // IR(46033, 5) + "Step\0" // IR(46038, 5) + "SmoothStep\0" // IR(46043, 11) + "Fma\0" // IR(46054, 4) + "Frexp\0" // IR(46058, 6) + "FrexpStruct\0" // IR(46064, 12) + "Ldexp\0" // IR(46076, 6) + "PackSnorm4x8\0" // IR(46082, 13) + "PackUnorm4x8\0" // IR(46095, 13) + "PackSnorm2x16\0" // IR(46108, 14) + "PackUnorm2x16\0" // IR(46122, 14) + "PackHalf2x16\0" // IR(46136, 13) + "PackDouble2x32\0" // IR(46149, 15) + "UnpackSnorm2x16\0" // IR(46164, 16) + "UnpackUnorm2x16\0" // IR(46180, 16) + "UnpackHalf2x16\0" // IR(46196, 15) + "UnpackSnorm4x8\0" // IR(46211, 15) + "UnpackUnorm4x8\0" // IR(46226, 15) + "UnpackDouble2x32\0" // IR(46241, 17) + "Length\0" // IR(46258, 7) + "Distance\0" // IR(46265, 9) + "Cross\0" // IR(46274, 6) + "Normalize\0" // IR(46280, 10) + "FaceForward\0" // IR(46290, 12) + "Reflect\0" // IR(46302, 8) + "Refract\0" // IR(46310, 8) + "FindILsb\0" // IR(46318, 9) + "FindSMsb\0" // IR(46327, 9) + "FindUMsb\0" // IR(46336, 9) + "InterpolateAtCentroid\0" // IR(46345, 22) + "InterpolateAtSample\0" // IR(46367, 20) + "InterpolateAtOffset\0" // IR(46387, 20) + "NMin\0" // IR(46407, 5) + "NMax\0" // IR(46412, 5) + "NClamp\0" // IR(46417, 7) + "ArgumentInfo\0" // IR(46424, 13) + "ArgumentStorageBuffer\0" // IR(46437, 22) + "ArgumentUniform\0" // IR(46459, 16) + "ArgumentPodStorageBuffer\0" // IR(46475, 25) + "ArgumentPodUniform\0" // IR(46500, 19) + "ArgumentPodPushConstant\0" // IR(46519, 24) + "ArgumentSampledImage\0" // IR(46543, 21) + "ArgumentStorageImage\0" // IR(46564, 21) + "ArgumentSampler\0" // IR(46585, 16) + "ArgumentWorkgroup\0" // IR(46601, 18) + "SpecConstantWorkgroupSize\0" // IR(46619, 26) + "SpecConstantGlobalOffset\0" // IR(46645, 25) + "SpecConstantWorkDim\0" // IR(46670, 20) + "PushConstantGlobalOffset\0" // IR(46690, 25) + "PushConstantEnqueuedLocalSize\0" // IR(46715, 30) + "PushConstantGlobalSize\0" // IR(46745, 23) + "PushConstantRegionOffset\0" // IR(46768, 25) + "PushConstantNumWorkgroups\0" // IR(46793, 26) + "PushConstantRegionGroupOffset\0" // IR(46819, 30) + "ConstantDataStorageBuffer\0" // IR(46849, 26) + "ConstantDataUniform\0" // IR(46875, 20) + "PropertyRequiredWorkgroupSize\0" // IR(46895, 30) + "SpecConstantSubgroupMaxSize\0" // IR(46925, 28) + "ArgumentPointerPushConstant\0" // IR(46953, 28) + "ArgumentPointerUniform\0" // IR(46981, 23) + "ProgramScopeVariablesStorageBuffer\0" // IR(47004, 35) + "ProgramScopeVariablePointerRelocation\0" // IR(47039, 38) + "ImageArgumentInfoChannelOrderPushConstant\0" // IR(47077, 42) + "ImageArgumentInfoChannelDataTypePushConstant\0" // IR(47119, 45) + "ImageArgumentInfoChannelOrderUniform\0" // IR(47164, 37) + "ImageArgumentInfoChannelDataTypeUniform\0" // IR(47201, 40) + "ArgumentStorageTexelBuffer\0" // IR(47241, 27) + "ArgumentUniformTexelBuffer\0" // IR(47268, 27) + "ConstantDataPointerPushConstant\0" // IR(47295, 32) + "ProgramScopeVariablePointerPushConstant\0" // IR(47327, 40) + "PrintfInfo\0" // IR(47367, 11) + "PrintfBufferStorageBuffer\0" // IR(47378, 26) + "PrintfBufferPointerPushConstant\0" // IR(47404, 32) + "NormalizedSamplerMaskPushConstant\0" // IR(47436, 34) + "WorkgroupVariableSize\0" // IR(47470, 22) + "DebugImportedEntity\0" // IR(47492, 20) + "DebugSource\0" // IR(47512, 12) + "DebugFunctionDefinition\0" // IR(47524, 24) + "DebugSourceContinued\0" // IR(47548, 21) + "DebugLine\0" // IR(47569, 10) + "DebugNoLine\0" // IR(47579, 12) + "DebugBuildIdentifier\0" // IR(47591, 21) + "DebugStoragePath\0" // IR(47612, 17) + "DebugEntryPoint\0" // IR(47629, 16) + "DebugTypeMatrix\0" // IR(47645, 16) + "Configuration\0" // IR(47661, 14) + "StartCounter\0" // IR(47675, 13) + "StopCounter\0" // IR(47688, 12) + "PushConstants\0" // IR(47700, 14) + "SpecializationMapEntry\0" // IR(47714, 23) + "DescriptorSetBuffer\0" // IR(47737, 20) + "DescriptorSetImage\0" // IR(47757, 19) + "DescriptorSetSampler\0" // IR(47776, 21) + "SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING\0" // IR(47797, 63) + "SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS\0" // IR(47860, 45) + "SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER\0" // IR(47905, 49) + "SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE\0" // IR(47954, 49) + "SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION\0" // IR(48003, 44) + "SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY\0" // IR(48047, 50) + "DebugModuleINTEL\0" // IR(48097, 17) + "acos\0" // IR(48114, 5) + "acosh\0" // IR(48119, 6) + "acospi\0" // IR(48125, 7) + "asin\0" // IR(48132, 5) + "asinh\0" // IR(48137, 6) + "asinpi\0" // IR(48143, 7) + "atan\0" // IR(48150, 5) + "atan2\0" // IR(48155, 6) + "atanh\0" // IR(48161, 6) + "atanpi\0" // IR(48167, 7) + "atan2pi\0" // IR(48174, 8) + "cbrt\0" // IR(48182, 5) + "ceil\0" // IR(48187, 5) + "copysign\0" // IR(48192, 9) + "cos\0" // IR(48201, 4) + "cosh\0" // IR(48205, 5) + "cospi\0" // IR(48210, 6) + "erfc\0" // IR(48216, 5) + "erf\0" // IR(48221, 4) + "exp\0" // IR(48225, 4) + "exp2\0" // IR(48229, 5) + "exp10\0" // IR(48234, 6) + "expm1\0" // IR(48240, 6) + "fabs\0" // IR(48246, 5) + "fdim\0" // IR(48251, 5) + "floor\0" // IR(48256, 6) + "fma\0" // IR(48262, 4) + "fmax\0" // IR(48266, 5) + "fmin\0" // IR(48271, 5) + "fmod\0" // IR(48276, 5) + "fract\0" // IR(48281, 6) + "frexp\0" // IR(48287, 6) + "hypot\0" // IR(48293, 6) + "ilogb\0" // IR(48299, 6) + "ldexp\0" // IR(48305, 6) + "lgamma\0" // IR(48311, 7) + "lgamma_r\0" // IR(48318, 9) + "log\0" // IR(48327, 4) + "log2\0" // IR(48331, 5) + "log10\0" // IR(48336, 6) + "log1p\0" // IR(48342, 6) + "logb\0" // IR(48348, 5) + "mad\0" // IR(48353, 4) + "maxmag\0" // IR(48357, 7) + "minmag\0" // IR(48364, 7) + "modf\0" // IR(48371, 5) + "nan\0" // IR(48376, 4) + "nextafter\0" // IR(48380, 10) + "pow\0" // IR(48390, 4) + "pown\0" // IR(48394, 5) + "powr\0" // IR(48399, 5) + "remainder\0" // IR(48404, 10) + "remquo\0" // IR(48414, 7) + "rint\0" // IR(48421, 5) + "rootn\0" // IR(48426, 6) + "round\0" // IR(48432, 6) + "rsqrt\0" // IR(48438, 6) + "sin\0" // IR(48444, 4) + "sincos\0" // IR(48448, 7) + "sinh\0" // IR(48455, 5) + "sinpi\0" // IR(48460, 6) + "sqrt\0" // IR(48466, 5) + "tan\0" // IR(48471, 4) + "tanh\0" // IR(48475, 5) + "tanpi\0" // IR(48480, 6) + "tgamma\0" // IR(48486, 7) + "trunc\0" // IR(48493, 6) + "half_cos\0" // IR(48499, 9) + "half_divide\0" // IR(48508, 12) + "half_exp\0" // IR(48520, 9) + "half_exp2\0" // IR(48529, 10) + "half_exp10\0" // IR(48539, 11) + "half_log\0" // IR(48550, 9) + "half_log2\0" // IR(48559, 10) + "half_log10\0" // IR(48569, 11) + "half_powr\0" // IR(48580, 10) + "half_recip\0" // IR(48590, 11) + "half_rsqrt\0" // IR(48601, 11) + "half_sin\0" // IR(48612, 9) + "half_sqrt\0" // IR(48621, 10) + "half_tan\0" // IR(48631, 9) + "native_cos\0" // IR(48640, 11) + "native_divide\0" // IR(48651, 14) + "native_exp\0" // IR(48665, 11) + "native_exp2\0" // IR(48676, 12) + "native_exp10\0" // IR(48688, 13) + "native_log\0" // IR(48701, 11) + "native_log2\0" // IR(48712, 12) + "native_log10\0" // IR(48724, 13) + "native_powr\0" // IR(48737, 12) + "native_recip\0" // IR(48749, 13) + "native_rsqrt\0" // IR(48762, 13) + "native_sin\0" // IR(48775, 11) + "native_sqrt\0" // IR(48786, 12) + "native_tan\0" // IR(48798, 11) + "fclamp\0" // IR(48809, 7) + "degrees\0" // IR(48816, 8) + "fmax_common\0" // IR(48824, 12) + "fmin_common\0" // IR(48836, 12) + "mix\0" // IR(48848, 4) + "radians\0" // IR(48852, 8) + "step\0" // IR(48860, 5) + "smoothstep\0" // IR(48865, 11) + "sign\0" // IR(48876, 5) + "cross\0" // IR(48881, 6) + "distance\0" // IR(48887, 9) + "length\0" // IR(48896, 7) + "normalize\0" // IR(48903, 10) + "fast_distance\0" // IR(48913, 14) + "fast_length\0" // IR(48927, 12) + "fast_normalize\0" // IR(48939, 15) + "s_abs\0" // IR(48954, 6) + "s_abs_diff\0" // IR(48960, 11) + "s_add_sat\0" // IR(48971, 10) + "u_add_sat\0" // IR(48981, 10) + "s_hadd\0" // IR(48991, 7) + "u_hadd\0" // IR(48998, 7) + "s_rhadd\0" // IR(49005, 8) + "u_rhadd\0" // IR(49013, 8) + "s_clamp\0" // IR(49021, 8) + "u_clamp\0" // IR(49029, 8) + "clz\0" // IR(49037, 4) + "ctz\0" // IR(49041, 4) + "s_mad_hi\0" // IR(49045, 9) + "u_mad_sat\0" // IR(49054, 10) + "s_mad_sat\0" // IR(49064, 10) + "s_max\0" // IR(49074, 6) + "u_max\0" // IR(49080, 6) + "s_min\0" // IR(49086, 6) + "u_min\0" // IR(49092, 6) + "s_mul_hi\0" // IR(49098, 9) + "rotate\0" // IR(49107, 7) + "s_sub_sat\0" // IR(49114, 10) + "u_sub_sat\0" // IR(49124, 10) + "u_upsample\0" // IR(49134, 11) + "s_upsample\0" // IR(49145, 11) + "popcount\0" // IR(49156, 9) + "s_mad24\0" // IR(49165, 8) + "u_mad24\0" // IR(49173, 8) + "s_mul24\0" // IR(49181, 8) + "u_mul24\0" // IR(49189, 8) + "vloadn\0" // IR(49197, 7) + "vstoren\0" // IR(49204, 8) + "vload_half\0" // IR(49212, 11) + "vload_halfn\0" // IR(49223, 12) + "vstore_half\0" // IR(49235, 12) + "vstore_half_r\0" // IR(49247, 14) + "vstore_halfn\0" // IR(49261, 13) + "vstore_halfn_r\0" // IR(49274, 15) + "vloada_halfn\0" // IR(49289, 13) + "vstorea_halfn\0" // IR(49302, 14) + "vstorea_halfn_r\0" // IR(49316, 16) + "shuffle\0" // IR(49332, 8) + "shuffle2\0" // IR(49340, 9) + "printf\0" // IR(49349, 7) + "prefetch\0" // IR(49356, 9) + "bitselect\0" // IR(49365, 10) + "select\0" // IR(49375, 7) + "u_abs\0" // IR(49382, 6) + "u_abs_diff\0" // IR(49388, 11) + "u_mul_hi\0" // IR(49399, 9) + "u_mad_hi\0" // IR(49408, 9) + "CubeFaceIndexAMD\0" // IR(49417, 17) + "CubeFaceCoordAMD\0" // IR(49434, 17) + "TimeAMD\0" // IR(49451, 8) + "SwizzleInvocationsAMD\0" // IR(49459, 22) + "SwizzleInvocationsMaskedAMD\0" // IR(49481, 28) + "WriteInvocationAMD\0" // IR(49509, 19) + "MbcntAMD\0" // IR(49528, 9) + "InterpolateAtVertexAMD\0" // IR(49537, 23) + "FMin3AMD\0" // IR(49560, 9) + "UMin3AMD\0" // IR(49569, 9) + "SMin3AMD\0" // IR(49578, 9) + "FMax3AMD\0" // IR(49587, 9) + "UMax3AMD\0" // IR(49596, 9) + "SMax3AMD\0" // IR(49605, 9) + "FMid3AMD\0" // IR(49614, 9) + "UMid3AMD\0" // IR(49623, 9) + "SMid3AMD\0" // IR(49632, 9) +; + +// Array of IndexRanges, where each represents a string by referencing +// the kStrings table. +// This array contains all sequences of alias strings used in the grammar. +// This table is referenced by an IndexRange elsewhere, i.e. by the 'aliases' +// field of an instruction or operand description. +static const IndexRange kAliasSpans[] = { + IR(4640, 27), // 0 PhysicalStorageBuffer64EXT + IR(5551, 18), // 1 SubgroupEqMaskKHR + IR(5606, 18), // 2 SubgroupGeMaskKHR + IR(5639, 18), // 3 SubgroupGtMaskKHR + IR(5672, 18), // 4 SubgroupLeMaskKHR + IR(5705, 18), // 5 SubgroupLtMaskKHR + IR(6563, 12), // 6 BaryCoordNV + IR(6618, 19), // 7 BaryCoordNoPerspNV + IR(6649, 15), // 8 FragmentSizeNV + IR(6706, 22), // 9 InvocationsPerPixelNV + IR(6834, 11), // 10 LaunchIdNV + IR(6859, 13), // 11 LaunchSizeNV + IR(6890, 17), // 12 WorldRayOriginNV + IR(6928, 20), // 13 WorldRayDirectionNV + IR(6967, 18), // 14 ObjectRayOriginNV + IR(7007, 21), // 15 ObjectRayDirectionNV + IR(7039, 10), // 16 RayTminNV + IR(7060, 10), // 17 RayTmaxNV + IR(7093, 22), // 18 InstanceCustomIndexNV + IR(7132, 16), // 19 ObjectToWorldNV + IR(7165, 16), // 20 WorldToObjectNV + IR(7199, 10), // 21 HitKindNV + IR(7430, 19), // 22 IncomingRayFlagsNV + IR(9176, 28), // 23 StorageUniformBufferBlock16 + IR(9239, 17), // 24 StorageUniform16 + IR(10043, 27), // 25 ShaderViewportIndexLayerNV + IR(10087, 22), // 26 FragmentBarycentricNV + IR(10140, 30), // 27 ComputeDerivativeGroupQuadsNV + IR(10170, 14), // 28 ShadingRateNV + IR(10230, 20), // 29 ShaderNonUniformEXT + IR(10273, 26), // 30 RuntimeDescriptorArrayEXT + IR(10335, 39), // 31 InputAttachmentArrayDynamicIndexingEXT + IR(10413, 42), // 32 UniformTexelBufferArrayDynamicIndexingEXT + IR(10494, 42), // 33 StorageTexelBufferArrayDynamicIndexingEXT + IR(10573, 40), // 34 UniformBufferArrayNonUniformIndexingEXT + IR(10649, 39), // 35 SampledImageArrayNonUniformIndexingEXT + IR(10725, 40), // 36 StorageBufferArrayNonUniformIndexingEXT + IR(10801, 39), // 37 StorageImageArrayNonUniformIndexingEXT + IR(10879, 42), // 38 InputAttachmentArrayNonUniformIndexingEXT + IR(10963, 45), // 39 UniformTexelBufferArrayNonUniformIndexingEXT + IR(11050, 45), // 40 StorageTexelBufferArrayNonUniformIndexingEXT + IR(11113, 21), // 41 VulkanMemoryModelKHR + IR(11163, 32), // 42 VulkanMemoryModelDeviceScopeKHR + IR(11195, 34), // 43 PhysicalStorageBufferAddressesEXT + IR(11261, 31), // 44 ComputeDerivativeGroupLinearNV + IR(11465, 28), // 45 DemoteToHelperInvocationEXT + IR(12935, 22), // 46 DotProductInputAllKHR + IR(12979, 25), // 47 DotProductInput4x8BitKHR + IR(13032, 31), // 48 DotProductInput4x8BitPackedKHR + IR(13074, 14), // 49 DotProductKHR + IR(13239, 13), // 50 OptNoneINTEL + IR(16235, 15), // 51 PerPrimitiveNV + IR(16283, 12), // 52 PerVertexNV + IR(16306, 14), // 53 NonUniformEXT + IR(16336, 19), // 54 RestrictPointerEXT + IR(16370, 18), // 55 AliasedPointerEXT + IR(16680, 24), // 56 HlslCounterBufferGOOGLE + IR(16717, 19), // 57 HlslSemanticGOOGLE + IR(19391, 14), // 58 OutputLinesNV + IR(19425, 19), // 59 OutputPrimitivesNV + IR(19468, 23), // 60 DerivativeGroupQuadsNV + IR(19516, 24), // 61 DerivativeGroupLinearNV + IR(19559, 18), // 62 OutputTrianglesNV + IR(20307, 16), // 63 RayGenerationNV + IR(20339, 15), // 64 IntersectionNV + IR(20364, 9), // 65 AnyHitNV + IR(20387, 13), // 66 ClosestHitNV + IR(20408, 7), // 67 MissNV + IR(20427, 11), // 68 CallableNV + IR(20572, 23), // 69 AllowContractFastINTEL + IR(20608, 18), // 70 AllowReassocINTEL + IR(21062, 22), // 71 MakeTexelAvailableKHR + IR(21101, 20), // 72 MakeTexelVisibleKHR + IR(21137, 19), // 73 NonPrivateTexelKHR + IR(21170, 17), // 74 VolatileTexelKHR + IR(22547, 24), // 75 MakePointerAvailableKHR + IR(22590, 22), // 76 MakePointerVisibleKHR + IR(22630, 21), // 77 NonPrivatePointerKHR + IR(22717, 10), // 78 VulkanKHR + IR(14007, 5), // 79 None + IR(22900, 16), // 80 OutputMemoryKHR + IR(22930, 17), // 81 MakeAvailableKHR + IR(22959, 15), // 82 MakeVisibleKHR + IR(23035, 28), // 83 PackedVectorFormat4x8BitKHR + IR(23350, 24), // 84 SkipBuiltinPrimitivesNV + IR(24090, 15), // 85 QueueFamilyKHR + IR(24461, 15), // 86 CallableDataNV + IR(24500, 23), // 87 IncomingCallableDataNV + IR(24537, 13), // 88 RayPayloadNV + IR(24566, 15), // 89 HitAttributeNV + IR(24603, 21), // 90 IncomingRayPayloadNV + IR(24646, 21), // 91 ShaderRecordBufferNV + IR(24689, 25), // 92 PhysicalStorageBufferEXT + IR(31905, 8), // 93 SDotKHR + IR(31918, 8), // 94 UDotKHR + IR(31932, 9), // 95 SUDotKHR + IR(31952, 14), // 96 SDotAccSatKHR + IR(31977, 14), // 97 UDotAccSatKHR + IR(32003, 15), // 98 SUDotAccSatKHR + IR(34488, 21), // 99 ReportIntersectionNV + IR(34663, 28), // 100 TypeAccelerationStructureNV + IR(36712, 21), // 101 DecorateStringGOOGLE + IR(36754, 27), // 102 MemberDecorateStringGOOGLE +}; + +// Array of capabilities, referenced by IndexRanges elsewhere. +// Contains all sequences of capabilities used in the grammar. +static const spv::Capability kCapabilitySpans[] = { + spv::Capability::Kernel, // 0 + spv::Capability::Addresses, // 1 + spv::Capability::PhysicalStorageBufferAddresses, // 2 + spv::Capability::Shader, // 3 + spv::Capability::ClipDistance, // 4 + spv::Capability::CullDistance, // 5 + spv::Capability::Geometry, // 6 + spv::Capability::Tessellation, // 7 + spv::Capability::RayTracingNV, // 8 + spv::Capability::RayTracingKHR, // 9 + spv::Capability::MeshShadingNV, // 10 + spv::Capability::MeshShadingEXT, // 11 + spv::Capability::Geometry, // 12 + spv::Capability::Tessellation, // 13 + spv::Capability::Geometry, // 14 + spv::Capability::ShaderLayer, // 15 + spv::Capability::ShaderViewportIndexLayerEXT, // 16 + spv::Capability::MeshShadingNV, // 17 + spv::Capability::MeshShadingEXT, // 18 + spv::Capability::MultiViewport, // 19 + spv::Capability::ShaderViewportIndex, // 20 + spv::Capability::ShaderViewportIndexLayerEXT, // 21 + spv::Capability::MeshShadingNV, // 22 + spv::Capability::MeshShadingEXT, // 23 + spv::Capability::Tessellation, // 24 + spv::Capability::SampleRateShading, // 25 + spv::Capability::Kernel, // 26 + spv::Capability::GroupNonUniform, // 27 + spv::Capability::SubgroupBallotKHR, // 28 + spv::Capability::Kernel, // 29 + spv::Capability::GroupNonUniform, // 30 + spv::Capability::CoreBuiltinsARM, // 31 + spv::Capability::SubgroupBallotKHR, // 32 + spv::Capability::GroupNonUniformBallot, // 33 + spv::Capability::DrawParameters, // 34 + spv::Capability::DrawParameters, // 35 + spv::Capability::MeshShadingNV, // 36 + spv::Capability::MeshShadingEXT, // 37 + spv::Capability::FragmentShadingRateKHR, // 38 + spv::Capability::DeviceGroup, // 39 + spv::Capability::MultiView, // 40 + spv::Capability::TileShadingQCOM, // 41 + spv::Capability::StencilExportEXT, // 42 + spv::Capability::ShaderEnqueueAMDX, // 43 + spv::Capability::ShaderViewportMaskNV, // 44 + spv::Capability::MeshShadingNV, // 45 + spv::Capability::ShaderStereoViewNV, // 46 + spv::Capability::PerViewAttributesNV, // 47 + spv::Capability::MeshShadingNV, // 48 + spv::Capability::FragmentFullyCoveredEXT, // 49 + spv::Capability::MeshShadingNV, // 50 + spv::Capability::FragmentBarycentricKHR, // 51 + spv::Capability::FragmentDensityEXT, // 52 + spv::Capability::MeshShadingEXT, // 53 + spv::Capability::RayTracingNV, // 54 + spv::Capability::RayTracingKHR, // 55 + spv::Capability::RayTracingNV, // 56 + spv::Capability::RayTracingMotionBlurNV, // 57 + spv::Capability::RayTracingPositionFetchKHR, // 58 + spv::Capability::RayTracingDisplacementMicromapNV, // 59 + spv::Capability::RayTracingKHR, // 60 + spv::Capability::RayTracingSpheresGeometryNV, // 61 + spv::Capability::RayTracingLinearSweptSpheresGeometryNV, // 62 + spv::Capability::ShaderSMBuiltinsNV, // 63 + spv::Capability::RayTracingClusterAccelerationStructureNV, // 64 + spv::Capability::RayCullMaskKHR, // 65 + spv::Capability::Matrix, // 66 + spv::Capability::Int64, // 67 + spv::Capability::ImageBasic, // 68 + spv::Capability::Geometry, // 69 + spv::Capability::SampledCubeArray, // 70 + spv::Capability::SampledRect, // 71 + spv::Capability::Sampled1D, // 72 + spv::Capability::SampledBuffer, // 73 + spv::Capability::DeviceEnqueue, // 74 + spv::Capability::Pipes, // 75 + spv::Capability::GroupNonUniform, // 76 + spv::Capability::WorkgroupMemoryExplicitLayoutKHR, // 77 + spv::Capability::StorageBuffer16BitAccess, // 78 + spv::Capability::VariablePointersStorageBuffer, // 79 + spv::Capability::AtomicStorage, // 80 + spv::Capability::StorageBuffer8BitAccess, // 81 + spv::Capability::RayQueryKHR, // 82 + spv::Capability::RayTracingKHR, // 83 + spv::Capability::Int4TypeINTEL, // 84 + spv::Capability::CooperativeMatrixKHR, // 85 + spv::Capability::BFloat16TypeKHR, // 86 + spv::Capability::BFloat16TypeKHR, // 87 + spv::Capability::CooperativeMatrixKHR, // 88 + spv::Capability::MultiViewport, // 89 + spv::Capability::ShaderViewportIndexLayerEXT, // 90 + spv::Capability::ShaderViewportMaskNV, // 91 + spv::Capability::InputAttachment, // 92 + spv::Capability::ImageBuffer, // 93 + spv::Capability::ShaderNonUniform, // 94 + spv::Capability::InputAttachment, // 95 + spv::Capability::ShaderNonUniform, // 96 + spv::Capability::SampledBuffer, // 97 + spv::Capability::ShaderNonUniform, // 98 + spv::Capability::ImageBuffer, // 99 + spv::Capability::ShaderNonUniform, // 100 + spv::Capability::VectorAnyINTEL, // 101 + spv::Capability::Int8, // 102 + spv::Capability::FPGAClusterAttributesINTEL, // 103 + spv::Capability::FPGAKernelAttributesINTEL, // 104 + spv::Capability::Subgroup2DBlockIOINTEL, // 105 + spv::Capability::Shader, // 106 + spv::Capability::Kernel, // 107 + spv::Capability::Shader, // 108 + spv::Capability::UniformDecoration, // 109 + spv::Capability::GeometryStreams, // 110 + spv::Capability::TransformFeedback, // 111 + spv::Capability::Kernel, // 112 + spv::Capability::FloatControls2, // 113 + spv::Capability::Linkage, // 114 + spv::Capability::Float8EXT, // 115 + spv::Capability::SampleMaskOverrideCoverageNV, // 116 + spv::Capability::GeometryShaderPassthroughNV, // 117 + spv::Capability::MeshShadingNV, // 118 + spv::Capability::MeshShadingEXT, // 119 + spv::Capability::ShaderInvocationReorderNV, // 120 + spv::Capability::BindlessTextureNV, // 121 + spv::Capability::VectorComputeINTEL, // 122 + spv::Capability::IndirectReferencesINTEL, // 123 + spv::Capability::AsmINTEL, // 124 + spv::Capability::FunctionFloatControlINTEL, // 125 + spv::Capability::FPGAMemoryAttributesINTEL, // 126 + spv::Capability::FPGAMemoryAccessesINTEL, // 127 + spv::Capability::LoopFuseINTEL, // 128 + spv::Capability::FPGADSPControlINTEL, // 129 + spv::Capability::MemoryAccessAliasingINTEL, // 130 + spv::Capability::FPGAInvocationPipeliningAttributesINTEL, // 131 + spv::Capability::FPGABufferLocationINTEL, // 132 + spv::Capability::IOPipesINTEL, // 133 + spv::Capability::FPGAClusterAttributesV2INTEL, // 134 + spv::Capability::FPMaxErrorINTEL, // 135 + spv::Capability::FPGALatencyControlINTEL, // 136 + spv::Capability::FPGAArgumentInterfacesINTEL, // 137 + spv::Capability::GlobalVariableHostAccessINTEL, // 138 + spv::Capability::GlobalVariableFPGADecorationsINTEL, // 139 + spv::Capability::CacheControlsINTEL, // 140 + spv::Capability::TileImageColorReadAccessEXT, // 141 + spv::Capability::Geometry, // 142 + spv::Capability::Tessellation, // 143 + spv::Capability::MeshShadingNV, // 144 + spv::Capability::MeshShadingEXT, // 145 + spv::Capability::Geometry, // 146 + spv::Capability::MeshShadingNV, // 147 + spv::Capability::MeshShadingEXT, // 148 + spv::Capability::SubgroupDispatch, // 149 + spv::Capability::TileImageDepthReadAccessEXT, // 150 + spv::Capability::TileImageStencilReadAccessEXT, // 151 + spv::Capability::SampleMaskPostDepthCoverage, // 152 + spv::Capability::DenormPreserve, // 153 + spv::Capability::DenormFlushToZero, // 154 + spv::Capability::SignedZeroInfNanPreserve, // 155 + spv::Capability::RoundingModeRTE, // 156 + spv::Capability::RoundingModeRTZ, // 157 + spv::Capability::QuadControlKHR, // 158 + spv::Capability::ComputeDerivativeGroupQuadsNV, // 159 + spv::Capability::ComputeDerivativeGroupQuadsKHR, // 160 + spv::Capability::ComputeDerivativeGroupLinearNV, // 161 + spv::Capability::ComputeDerivativeGroupLinearKHR, // 162 + spv::Capability::FragmentShaderPixelInterlockEXT, // 163 + spv::Capability::FragmentShaderSampleInterlockEXT, // 164 + spv::Capability::FragmentShaderShadingRateInterlockEXT, // 165 + spv::Capability::RoundToInfinityINTEL, // 166 + spv::Capability::KernelAttributesINTEL, // 167 + spv::Capability::FloatControls2, // 168 + spv::Capability::FPGAKernelAttributesv2INTEL, // 169 + spv::Capability::RegisterLimitsINTEL, // 170 + spv::Capability::FloatControls2, // 171 + spv::Capability::FPFastMathModeINTEL, // 172 + spv::Capability::OptNoneEXT, // 173 + spv::Capability::RuntimeAlignedAttributeINTEL, // 174 + spv::Capability::Kernel, // 175 + spv::Capability::GroupNonUniformArithmetic, // 176 + spv::Capability::GroupNonUniformBallot, // 177 + spv::Capability::GroupNonUniformClustered, // 178 + spv::Capability::GroupNonUniformPartitionedNV, // 179 + spv::Capability::ImageGatherExtended, // 180 + spv::Capability::MinLod, // 181 + spv::Capability::VulkanMemoryModel, // 182 + spv::Capability::FPGALoopControlsINTEL, // 183 + spv::Capability::ArbitraryPrecisionFixedPointINTEL, // 184 + spv::Capability::RawAccessChainsNV, // 185 + spv::Capability::RayTraversalPrimitiveCullingKHR, // 186 + spv::Capability::RayTracingOpacityMicromapEXT, // 187 + spv::Capability::RayQueryKHR, // 188 + spv::Capability::StorageImageExtendedFormats, // 189 + spv::Capability::Int64ImageEXT, // 190 + spv::Capability::Shader, // 191 + spv::Capability::VectorComputeINTEL, // 192 + spv::Capability::GenericPointer, // 193 + spv::Capability::FunctionPointersINTEL, // 194 + spv::Capability::USMStorageClassesINTEL, // 195 + spv::Capability::CooperativeMatrixTensorAddressingNV, // 196 + spv::Capability::CooperativeMatrixBlockLoadsNV, // 197 + spv::Capability::TensorsARM, // 198 + spv::Capability::Addresses, // 199 + spv::Capability::PhysicalStorageBufferAddresses, // 200 + spv::Capability::LiteralSampler, // 201 + spv::Capability::Addresses, // 202 + spv::Capability::UntypedPointersKHR, // 203 + spv::Capability::Addresses, // 204 + spv::Capability::VariablePointers, // 205 + spv::Capability::VariablePointersStorageBuffer, // 206 + spv::Capability::PhysicalStorageBufferAddresses, // 207 + spv::Capability::Kernel, // 208 + spv::Capability::ImageQuery, // 209 + spv::Capability::ImageQuery, // 210 + spv::Capability::Shader, // 211 + spv::Capability::BitInstructions, // 212 + spv::Capability::DerivativeControl, // 213 + spv::Capability::Groups, // 214 + spv::Capability::SparseResidency, // 215 + spv::Capability::PipeStorage, // 216 + spv::Capability::NamedBarrier, // 217 + spv::Capability::GroupNonUniformVote, // 218 + spv::Capability::GroupNonUniformBallot, // 219 + spv::Capability::GroupNonUniformShuffle, // 220 + spv::Capability::GroupNonUniformShuffleRelative, // 221 + spv::Capability::GroupNonUniformArithmetic, // 222 + spv::Capability::GroupNonUniformClustered, // 223 + spv::Capability::GroupNonUniformPartitionedNV, // 224 + spv::Capability::GroupNonUniformQuad, // 225 + spv::Capability::Addresses, // 226 + spv::Capability::VariablePointers, // 227 + spv::Capability::VariablePointersStorageBuffer, // 228 + spv::Capability::UntypedPointersKHR, // 229 + spv::Capability::SubgroupBallotKHR, // 230 + spv::Capability::SubgroupVoteKHR, // 231 + spv::Capability::GroupNonUniformRotateKHR, // 232 + spv::Capability::RayTracingKHR, // 233 + spv::Capability::RayQueryKHR, // 234 + spv::Capability::DotProduct, // 235 + spv::Capability::CooperativeMatrixKHR, // 236 + spv::Capability::ReplicatedCompositesEXT, // 237 + spv::Capability::TextureSampleWeightedQCOM, // 238 + spv::Capability::TextureBoxFilterQCOM, // 239 + spv::Capability::TextureBlockMatchQCOM, // 240 + spv::Capability::TextureBlockMatch2QCOM, // 241 + spv::Capability::FragmentMaskAMD, // 242 + spv::Capability::ShaderClockKHR, // 243 + spv::Capability::ShaderInvocationReorderNV, // 244 + spv::Capability::RayTracingMotionBlurNV, // 245 + spv::Capability::ImageFootprintNV, // 246 + spv::Capability::CooperativeVectorNV, // 247 + spv::Capability::CooperativeVectorTrainingNV, // 248 + spv::Capability::CooperativeMatrixConversionsNV, // 249 + spv::Capability::DisplacementMicromapNV, // 250 + spv::Capability::RayQueryPositionFetchKHR, // 251 + spv::Capability::RayTracingNV, // 252 + spv::Capability::RayTracingKHR, // 253 + spv::Capability::RayQueryKHR, // 254 + spv::Capability::DisplacementMicromapNV, // 255 + spv::Capability::CooperativeMatrixNV, // 256 + spv::Capability::FragmentShaderSampleInterlockEXT, // 257 + spv::Capability::FragmentShaderPixelInterlockEXT, // 258 + spv::Capability::FragmentShaderShadingRateInterlockEXT, // 259 + spv::Capability::CooperativeMatrixReductionsNV, // 260 + spv::Capability::CooperativeMatrixPerElementOperationsNV, // 261 + spv::Capability::TensorAddressingNV, // 262 + spv::Capability::DemoteToHelperInvocation, // 263 + spv::Capability::SubgroupShuffleINTEL, // 264 + spv::Capability::SubgroupBufferBlockIOINTEL, // 265 + spv::Capability::SubgroupImageBlockIOINTEL, // 266 + spv::Capability::SubgroupImageMediaBlockIOINTEL, // 267 + spv::Capability::IntegerFunctions2INTEL, // 268 + spv::Capability::AtomicFloat16MinMaxEXT, // 269 + spv::Capability::AtomicFloat32MinMaxEXT, // 270 + spv::Capability::AtomicFloat64MinMaxEXT, // 271 + spv::Capability::AtomicFloat16VectorNV, // 272 + spv::Capability::ExpectAssumeKHR, // 273 + spv::Capability::SubgroupAvcMotionEstimationINTEL, // 274 + spv::Capability::SubgroupAvcMotionEstimationINTEL, // 275 + spv::Capability::SubgroupAvcMotionEstimationIntraINTEL, // 276 + spv::Capability::SubgroupAvcMotionEstimationINTEL, // 277 + spv::Capability::SubgroupAvcMotionEstimationChromaINTEL, // 278 + spv::Capability::VariableLengthArrayINTEL, // 279 + spv::Capability::ArbitraryPrecisionFloatingPointINTEL, // 280 + spv::Capability::UnstructuredLoopControlsINTEL, // 281 + spv::Capability::BlockingPipesINTEL, // 282 + spv::Capability::FPGARegINTEL, // 283 + spv::Capability::AtomicFloat16AddEXT, // 284 + spv::Capability::AtomicFloat32AddEXT, // 285 + spv::Capability::AtomicFloat64AddEXT, // 286 + spv::Capability::AtomicFloat16VectorNV, // 287 + spv::Capability::LongCompositesINTEL, // 288 + spv::Capability::BFloat16ConversionINTEL, // 289 + spv::Capability::SplitBarrierINTEL, // 290 + spv::Capability::ArithmeticFenceEXT, // 291 + spv::Capability::TaskSequenceINTEL, // 292 + spv::Capability::SubgroupBufferPrefetchINTEL, // 293 + spv::Capability::Subgroup2DBlockTransformINTEL, // 294 + spv::Capability::Subgroup2DBlockTransposeINTEL, // 295 + spv::Capability::SubgroupMatrixMultiplyAccumulateINTEL, // 296 + spv::Capability::TernaryBitwiseFunctionINTEL, // 297 + spv::Capability::GroupUniformArithmeticKHR, // 298 + spv::Capability::TensorFloat32RoundingINTEL, // 299 + spv::Capability::MaskedGatherScatterINTEL, // 300 + spv::Capability::BindlessImagesINTEL, // 301 + spv::Capability::Float64, // 302 + spv::Capability::InterpolationFunction, // 303 +}; + +// Array of extensions, referenced by IndexRanges elsewhere. +// Contains all sequences of extensions used in the grammar. +static const spvtools::Extension kExtensionSpans[] = { + spvtools::Extension::kSPV_EXT_physical_storage_buffer, // 0 + spvtools::Extension::kSPV_KHR_physical_storage_buffer, // 1 + spvtools::Extension::kSPV_KHR_shader_ballot, // 2 + spvtools::Extension::kSPV_KHR_shader_draw_parameters, // 3 + spvtools::Extension::kSPV_KHR_shader_draw_parameters, // 4 + spvtools::Extension::kSPV_NV_mesh_shader, // 5 + spvtools::Extension::kSPV_EXT_mesh_shader, // 6 + spvtools::Extension::kSPV_KHR_fragment_shading_rate, // 7 + spvtools::Extension::kSPV_KHR_device_group, // 8 + spvtools::Extension::kSPV_KHR_multiview, // 9 + spvtools::Extension::kSPV_AMD_shader_explicit_vertex_parameter, // 10 + spvtools::Extension::kSPV_EXT_shader_stencil_export, // 11 + spvtools::Extension::kSPV_NV_viewport_array2, // 12 + spvtools::Extension::kSPV_NV_mesh_shader, // 13 + spvtools::Extension::kSPV_NV_stereo_view_rendering, // 14 + spvtools::Extension::kSPV_NVX_multiview_per_view_attributes, // 15 + spvtools::Extension::kSPV_NV_mesh_shader, // 16 + spvtools::Extension::kSPV_EXT_fragment_fully_covered, // 17 + spvtools::Extension::kSPV_NV_mesh_shader, // 18 + spvtools::Extension::kSPV_NV_fragment_shader_barycentric, // 19 + spvtools::Extension::kSPV_KHR_fragment_shader_barycentric, // 20 + spvtools::Extension::kSPV_EXT_fragment_invocation_density, // 21 + spvtools::Extension::kSPV_NV_shading_rate, // 22 + spvtools::Extension::kSPV_EXT_mesh_shader, // 23 + spvtools::Extension::kSPV_NV_ray_tracing, // 24 + spvtools::Extension::kSPV_KHR_ray_tracing, // 25 + spvtools::Extension::kSPV_NV_ray_tracing, // 26 + spvtools::Extension::kSPV_NV_ray_tracing_motion_blur, // 27 + spvtools::Extension::kSPV_KHR_ray_tracing, // 28 + spvtools::Extension::kSPV_NV_linear_swept_spheres, // 29 + spvtools::Extension::kSPV_NV_shader_sm_builtins, // 30 + spvtools::Extension::kSPV_NV_cluster_acceleration_structure, // 31 + spvtools::Extension::kSPV_KHR_ray_cull_mask, // 32 + spvtools::Extension::kSPV_AMD_shader_ballot, // 33 + spvtools::Extension::kSPV_ARM_core_builtins, // 34 + spvtools::Extension::kSPV_EXT_shader_tile_image, // 35 + spvtools::Extension::kSPV_ARM_tensors, // 36 + spvtools::Extension::kSPV_ARM_cooperative_matrix_layouts, // 37 + spvtools::Extension::kSPV_EXT_float8, // 38 + spvtools::Extension::kSPV_KHR_workgroup_memory_explicit_layout, // 39 + spvtools::Extension::kSPV_KHR_subgroup_vote, // 40 + spvtools::Extension::kSPV_KHR_16bit_storage, // 41 + spvtools::Extension::kSPV_KHR_variable_pointers, // 42 + spvtools::Extension::kSPV_KHR_shader_atomic_counter_ops, // 43 + spvtools::Extension::kSPV_KHR_post_depth_coverage, // 44 + spvtools::Extension::kSPV_KHR_8bit_storage, // 45 + spvtools::Extension::kSPV_KHR_float_controls, // 46 + spvtools::Extension::kSPV_KHR_ray_query, // 47 + spvtools::Extension::kSPV_KHR_untyped_pointers, // 48 + spvtools::Extension::kSPV_KHR_ray_query, // 49 + spvtools::Extension::kSPV_KHR_ray_tracing, // 50 + spvtools::Extension::kSPV_QCOM_image_processing, // 51 + spvtools::Extension::kSPV_QCOM_tile_shading, // 52 + spvtools::Extension::kSPV_QCOM_image_processing2, // 53 + spvtools::Extension::kSPV_AMD_gpu_shader_half_float_fetch, // 54 + spvtools::Extension::kSPV_AMD_texture_gather_bias_lod, // 55 + spvtools::Extension::kSPV_AMD_shader_fragment_mask, // 56 + spvtools::Extension::kSPV_AMD_shader_image_load_store_lod, // 57 + spvtools::Extension::kSPV_EXT_shader_image_int64, // 58 + spvtools::Extension::kSPV_KHR_shader_clock, // 59 + spvtools::Extension::kSPV_AMDX_shader_enqueue, // 60 + spvtools::Extension::kSPV_KHR_quad_control, // 61 + spvtools::Extension::kSPV_INTEL_int4, // 62 + spvtools::Extension::kSPV_KHR_bfloat16, // 63 + spvtools::Extension::kSPV_NV_sample_mask_override_coverage, // 64 + spvtools::Extension::kSPV_NV_geometry_shader_passthrough, // 65 + spvtools::Extension::kSPV_EXT_shader_viewport_index_layer, // 66 + spvtools::Extension::kSPV_NV_viewport_array2, // 67 + spvtools::Extension::kSPV_NV_viewport_array2, // 68 + spvtools::Extension::kSPV_NVX_multiview_per_view_attributes, // 69 + spvtools::Extension::kSPV_NV_shader_image_footprint, // 70 + spvtools::Extension::kSPV_NV_compute_shader_derivatives, // 71 + spvtools::Extension::kSPV_KHR_compute_shader_derivatives, // 72 + spvtools::Extension::kSPV_NV_shader_subgroup_partitioned, // 73 + spvtools::Extension::kSPV_EXT_descriptor_indexing, // 74 + spvtools::Extension::kSPV_KHR_ray_tracing_position_fetch, // 75 + spvtools::Extension::kSPV_KHR_vulkan_memory_model, // 76 + spvtools::Extension::kSPV_NV_cooperative_matrix, // 77 + spvtools::Extension::kSPV_EXT_fragment_shader_interlock, // 78 + spvtools::Extension::kSPV_EXT_demote_to_helper_invocation, // 79 + spvtools::Extension::kSPV_NV_displacement_micromap, // 80 + spvtools::Extension::kSPV_EXT_opacity_micromap, // 81 + spvtools::Extension::kSPV_NV_shader_invocation_reorder, // 82 + spvtools::Extension::kSPV_NV_bindless_texture, // 83 + spvtools::Extension::kSPV_NV_cooperative_vector, // 84 + spvtools::Extension::kSPV_NV_shader_atomic_fp16_vector, // 85 + spvtools::Extension::kSPV_NV_raw_access_chains, // 86 + spvtools::Extension::kSPV_NV_cooperative_matrix2, // 87 + spvtools::Extension::kSPV_NV_tensor_addressing, // 88 + spvtools::Extension::kSPV_INTEL_subgroups, // 89 + spvtools::Extension::kSPV_INTEL_media_block_io, // 90 + spvtools::Extension::kSPV_INTEL_float_controls2, // 91 + spvtools::Extension::kSPV_INTEL_shader_integer_functions2, // 92 + spvtools::Extension::kSPV_INTEL_function_pointers, // 93 + spvtools::Extension::kSPV_INTEL_inline_assembly, // 94 + spvtools::Extension::kSPV_EXT_shader_atomic_float_min_max, // 95 + spvtools::Extension::kSPV_INTEL_vector_compute, // 96 + spvtools::Extension::kSPV_KHR_expect_assume, // 97 + spvtools::Extension::kSPV_INTEL_device_side_avc_motion_estimation, // 98 + spvtools::Extension::kSPV_INTEL_variable_length_array, // 99 + spvtools::Extension::kSPV_INTEL_fpga_memory_attributes, // 100 + spvtools::Extension::kSPV_INTEL_fp_fast_math_mode, // 101 + spvtools::Extension::kSPV_INTEL_arbitrary_precision_integers, // 102 + spvtools::Extension::kSPV_INTEL_arbitrary_precision_floating_point, // 103 + spvtools::Extension::kSPV_INTEL_unstructured_loop_controls, // 104 + spvtools::Extension::kSPV_INTEL_fpga_loop_controls, // 105 + spvtools::Extension::kSPV_INTEL_kernel_attributes, // 106 + spvtools::Extension::kSPV_INTEL_fpga_memory_accesses, // 107 + spvtools::Extension::kSPV_INTEL_fpga_cluster_attributes, // 108 + spvtools::Extension::kSPV_INTEL_loop_fuse, // 109 + spvtools::Extension::kSPV_INTEL_fpga_dsp_control, // 110 + spvtools::Extension::kSPV_INTEL_memory_access_aliasing, // 111 + spvtools::Extension::kSPV_INTEL_fpga_invocation_pipelining_attributes, // 112 + spvtools::Extension::kSPV_INTEL_fpga_buffer_location, // 113 + spvtools::Extension::kSPV_INTEL_arbitrary_precision_fixed_point, // 114 + spvtools::Extension::kSPV_INTEL_usm_storage_classes, // 115 + spvtools::Extension::kSPV_INTEL_runtime_aligned, // 116 + spvtools::Extension::kSPV_INTEL_io_pipes, // 117 + spvtools::Extension::kSPV_INTEL_blocking_pipes, // 118 + spvtools::Extension::kSPV_INTEL_fpga_reg, // 119 + spvtools::Extension::kSPV_KHR_integer_dot_product, // 120 + spvtools::Extension::kSPV_KHR_cooperative_matrix, // 121 + spvtools::Extension::kSPV_EXT_replicated_composites, // 122 + spvtools::Extension::kSPV_KHR_bit_instructions, // 123 + spvtools::Extension::kSPV_KHR_subgroup_rotate, // 124 + spvtools::Extension::kSPV_KHR_float_controls2, // 125 + spvtools::Extension::kSPV_EXT_shader_atomic_float_add, // 126 + spvtools::Extension::kSPV_INTEL_long_composites, // 127 + spvtools::Extension::kSPV_EXT_optnone, // 128 + spvtools::Extension::kSPV_INTEL_optnone, // 129 + spvtools::Extension::kSPV_EXT_shader_atomic_float16_add, // 130 + spvtools::Extension::kSPV_INTEL_debug_module, // 131 + spvtools::Extension::kSPV_INTEL_bfloat16_conversion, // 132 + spvtools::Extension::kSPV_INTEL_split_barrier, // 133 + spvtools::Extension::kSPV_EXT_arithmetic_fence, // 134 + spvtools::Extension::kSPV_INTEL_task_sequence, // 135 + spvtools::Extension::kSPV_INTEL_fp_max_error, // 136 + spvtools::Extension::kSPV_INTEL_fpga_latency_control, // 137 + spvtools::Extension::kSPV_INTEL_fpga_argument_interfaces, // 138 + spvtools::Extension::kSPV_INTEL_global_variable_host_access, // 139 + spvtools::Extension::kSPV_INTEL_global_variable_fpga_decorations, // 140 + spvtools::Extension::kSPV_INTEL_subgroup_buffer_prefetch, // 141 + spvtools::Extension::kSPV_INTEL_2d_block_io, // 142 + spvtools::Extension::kSPV_INTEL_subgroup_matrix_multiply_accumulate, // 143 + spvtools::Extension::kSPV_INTEL_ternary_bitwise_function, // 144 + spvtools::Extension::kSPV_KHR_uniform_group_instructions, // 145 + spvtools::Extension::kSPV_INTEL_tensor_float32_conversion, // 146 + spvtools::Extension::kSPV_INTEL_masked_gather_scatter, // 147 + spvtools::Extension::kSPV_INTEL_cache_controls, // 148 + spvtools::Extension::kSPV_INTEL_maximum_registers, // 149 + spvtools::Extension::kSPV_INTEL_bindless_images, // 150 + spvtools::Extension::kSPV_KHR_no_integer_wrap_decoration, // 151 + spvtools::Extension::kSPV_NV_mesh_shader, // 152 + spvtools::Extension::kSPV_EXT_mesh_shader, // 153 + spvtools::Extension::kSPV_GOOGLE_hlsl_functionality1, // 154 + spvtools::Extension::kSPV_GOOGLE_user_type, // 155 + spvtools::Extension::kSPV_KHR_subgroup_uniform_control_flow, // 156 + spvtools::Extension::kSPV_AMD_shader_early_and_late_fragment_tests, // 157 + spvtools::Extension::kSPV_AMD_shader_early_and_late_fragment_tests, // 158 + spvtools::Extension::kSPV_EXT_shader_stencil_export, // 159 + spvtools::Extension::kSPV_KHR_maximal_reconvergence, // 160 + spvtools::Extension::kSPV_KHR_linkonce_odr, // 161 + spvtools::Extension::kSPV_KHR_storage_buffer_storage_class, // 162 + spvtools::Extension::kSPV_KHR_variable_pointers, // 163 + spvtools::Extension::kSPV_KHR_terminate_invocation, // 164 + spvtools::Extension::kSPV_KHR_relaxed_extended_instruction, // 165 + spvtools::Extension::kSPV_KHR_ray_tracing, // 166 + spvtools::Extension::kSPV_KHR_ray_query, // 167 + spvtools::Extension::kSPV_NV_ray_tracing, // 168 + spvtools::Extension::kSPV_KHR_ray_tracing, // 169 + spvtools::Extension::kSPV_KHR_ray_query, // 170 + spvtools::Extension::kSPV_NV_displacement_micromap, // 171 + spvtools::Extension::kSPV_GOOGLE_decorate_string, // 172 + spvtools::Extension::kSPV_GOOGLE_hlsl_functionality1, // 173 +}; + +// Array of operand types, referenced by IndexRanges elsewhere. +// Contains all sequences of operand types used in the grammar. +static const spv_operand_type_t kOperandSpans[] = { + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 0 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 2 + SPV_OPERAND_TYPE_BUILT_IN, // 3 + SPV_OPERAND_TYPE_SCOPE_ID, // 4 + SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE, // 5 + SPV_OPERAND_TYPE_FP_ROUNDING_MODE, // 6 + SPV_OPERAND_TYPE_FP_FAST_MATH_MODE, // 7 + SPV_OPERAND_TYPE_LITERAL_STRING, // 8 + SPV_OPERAND_TYPE_LINKAGE_TYPE, // 9 + SPV_OPERAND_TYPE_ID, // 10 + SPV_OPERAND_TYPE_LITERAL_STRING, // 11 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 12 + SPV_OPERAND_TYPE_FP_ROUNDING_MODE, // 13 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 14 + SPV_OPERAND_TYPE_FPDENORM_MODE, // 15 + SPV_OPERAND_TYPE_LITERAL_STRING, // 16 + SPV_OPERAND_TYPE_LITERAL_STRING, // 17 + SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER, // 18 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 19 + SPV_OPERAND_TYPE_FPOPERATION_MODE, // 20 + SPV_OPERAND_TYPE_LITERAL_FLOAT, // 21 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 22 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 23 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 24 + SPV_OPERAND_TYPE_ACCESS_QUALIFIER, // 25 + SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER, // 26 + SPV_OPERAND_TYPE_LITERAL_STRING, // 27 + SPV_OPERAND_TYPE_INITIALIZATION_MODE_QUALIFIER, // 28 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 29 + SPV_OPERAND_TYPE_LOAD_CACHE_CONTROL, // 30 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 31 + SPV_OPERAND_TYPE_STORE_CACHE_CONTROL, // 32 + SPV_OPERAND_TYPE_ID, // 33 + SPV_OPERAND_TYPE_ID, // 34 + SPV_OPERAND_TYPE_ID, // 35 + SPV_OPERAND_TYPE_ID, // 36 + SPV_OPERAND_TYPE_ID, // 37 + SPV_OPERAND_TYPE_NAMED_MAXIMUM_NUMBER_OF_REGISTERS, // 38 + SPV_OPERAND_TYPE_TYPE_ID, // 39 + SPV_OPERAND_TYPE_RESULT_ID, // 40 + SPV_OPERAND_TYPE_SOURCE_LANGUAGE, // 41 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 42 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 43 + SPV_OPERAND_TYPE_OPTIONAL_LITERAL_STRING, // 44 + SPV_OPERAND_TYPE_ID, // 45 + SPV_OPERAND_TYPE_LITERAL_STRING, // 46 + SPV_OPERAND_TYPE_ID, // 47 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 48 + SPV_OPERAND_TYPE_LITERAL_STRING, // 49 + SPV_OPERAND_TYPE_RESULT_ID, // 50 + SPV_OPERAND_TYPE_LITERAL_STRING, // 51 + SPV_OPERAND_TYPE_ID, // 52 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 53 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 54 + SPV_OPERAND_TYPE_TYPE_ID, // 55 + SPV_OPERAND_TYPE_RESULT_ID, // 56 + SPV_OPERAND_TYPE_ID, // 57 + SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER, // 58 + SPV_OPERAND_TYPE_ADDRESSING_MODEL, // 59 + SPV_OPERAND_TYPE_MEMORY_MODEL, // 60 + SPV_OPERAND_TYPE_EXECUTION_MODEL, // 61 + SPV_OPERAND_TYPE_ID, // 62 + SPV_OPERAND_TYPE_LITERAL_STRING, // 63 + SPV_OPERAND_TYPE_VARIABLE_ID, // 64 + SPV_OPERAND_TYPE_ID, // 65 + SPV_OPERAND_TYPE_EXECUTION_MODE, // 66 + SPV_OPERAND_TYPE_CAPABILITY, // 67 + SPV_OPERAND_TYPE_RESULT_ID, // 68 + SPV_OPERAND_TYPE_RESULT_ID, // 69 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 70 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 71 + SPV_OPERAND_TYPE_RESULT_ID, // 72 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 73 + SPV_OPERAND_TYPE_OPTIONAL_FPENCODING, // 74 + SPV_OPERAND_TYPE_RESULT_ID, // 75 + SPV_OPERAND_TYPE_ID, // 76 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 77 + SPV_OPERAND_TYPE_RESULT_ID, // 78 + SPV_OPERAND_TYPE_ID, // 79 + SPV_OPERAND_TYPE_DIMENSIONALITY, // 80 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 81 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 82 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 83 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 84 + SPV_OPERAND_TYPE_SAMPLER_IMAGE_FORMAT, // 85 + SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER, // 86 + SPV_OPERAND_TYPE_RESULT_ID, // 87 + SPV_OPERAND_TYPE_ID, // 88 + SPV_OPERAND_TYPE_RESULT_ID, // 89 + SPV_OPERAND_TYPE_ID, // 90 + SPV_OPERAND_TYPE_ID, // 91 + SPV_OPERAND_TYPE_RESULT_ID, // 92 + SPV_OPERAND_TYPE_VARIABLE_ID, // 93 + SPV_OPERAND_TYPE_RESULT_ID, // 94 + SPV_OPERAND_TYPE_STORAGE_CLASS, // 95 + SPV_OPERAND_TYPE_ID, // 96 + SPV_OPERAND_TYPE_RESULT_ID, // 97 + SPV_OPERAND_TYPE_ID, // 98 + SPV_OPERAND_TYPE_VARIABLE_ID, // 99 + SPV_OPERAND_TYPE_RESULT_ID, // 100 + SPV_OPERAND_TYPE_ACCESS_QUALIFIER, // 101 + SPV_OPERAND_TYPE_ID, // 102 + SPV_OPERAND_TYPE_STORAGE_CLASS, // 103 + SPV_OPERAND_TYPE_TYPE_ID, // 104 + SPV_OPERAND_TYPE_RESULT_ID, // 105 + SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER, // 106 + SPV_OPERAND_TYPE_TYPE_ID, // 107 + SPV_OPERAND_TYPE_RESULT_ID, // 108 + SPV_OPERAND_TYPE_VARIABLE_ID, // 109 + SPV_OPERAND_TYPE_TYPE_ID, // 110 + SPV_OPERAND_TYPE_RESULT_ID, // 111 + SPV_OPERAND_TYPE_SAMPLER_ADDRESSING_MODE, // 112 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 113 + SPV_OPERAND_TYPE_SAMPLER_FILTER_MODE, // 114 + SPV_OPERAND_TYPE_TYPE_ID, // 115 + SPV_OPERAND_TYPE_RESULT_ID, // 116 + SPV_OPERAND_TYPE_SPEC_CONSTANT_OP_NUMBER, // 117 + SPV_OPERAND_TYPE_TYPE_ID, // 118 + SPV_OPERAND_TYPE_RESULT_ID, // 119 + SPV_OPERAND_TYPE_FUNCTION_CONTROL, // 120 + SPV_OPERAND_TYPE_ID, // 121 + SPV_OPERAND_TYPE_TYPE_ID, // 122 + SPV_OPERAND_TYPE_RESULT_ID, // 123 + SPV_OPERAND_TYPE_ID, // 124 + SPV_OPERAND_TYPE_VARIABLE_ID, // 125 + SPV_OPERAND_TYPE_TYPE_ID, // 126 + SPV_OPERAND_TYPE_RESULT_ID, // 127 + SPV_OPERAND_TYPE_STORAGE_CLASS, // 128 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 129 + SPV_OPERAND_TYPE_TYPE_ID, // 130 + SPV_OPERAND_TYPE_RESULT_ID, // 131 + SPV_OPERAND_TYPE_ID, // 132 + SPV_OPERAND_TYPE_ID, // 133 + SPV_OPERAND_TYPE_ID, // 134 + SPV_OPERAND_TYPE_TYPE_ID, // 135 + SPV_OPERAND_TYPE_RESULT_ID, // 136 + SPV_OPERAND_TYPE_ID, // 137 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 138 + SPV_OPERAND_TYPE_ID, // 139 + SPV_OPERAND_TYPE_ID, // 140 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 141 + SPV_OPERAND_TYPE_ID, // 142 + SPV_OPERAND_TYPE_ID, // 143 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 144 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 145 + SPV_OPERAND_TYPE_ID, // 146 + SPV_OPERAND_TYPE_ID, // 147 + SPV_OPERAND_TYPE_ID, // 148 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 149 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 150 + SPV_OPERAND_TYPE_TYPE_ID, // 151 + SPV_OPERAND_TYPE_RESULT_ID, // 152 + SPV_OPERAND_TYPE_ID, // 153 + SPV_OPERAND_TYPE_ID, // 154 + SPV_OPERAND_TYPE_VARIABLE_ID, // 155 + SPV_OPERAND_TYPE_TYPE_ID, // 156 + SPV_OPERAND_TYPE_RESULT_ID, // 157 + SPV_OPERAND_TYPE_ID, // 158 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 159 + SPV_OPERAND_TYPE_TYPE_ID, // 160 + SPV_OPERAND_TYPE_RESULT_ID, // 161 + SPV_OPERAND_TYPE_ID, // 162 + SPV_OPERAND_TYPE_ID, // 163 + SPV_OPERAND_TYPE_DECORATION, // 164 + SPV_OPERAND_TYPE_ID, // 165 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 166 + SPV_OPERAND_TYPE_DECORATION, // 167 + SPV_OPERAND_TYPE_ID, // 168 + SPV_OPERAND_TYPE_VARIABLE_ID, // 169 + SPV_OPERAND_TYPE_ID, // 170 + SPV_OPERAND_TYPE_VARIABLE_ID_LITERAL_INTEGER, // 171 + SPV_OPERAND_TYPE_TYPE_ID, // 172 + SPV_OPERAND_TYPE_RESULT_ID, // 173 + SPV_OPERAND_TYPE_ID, // 174 + SPV_OPERAND_TYPE_ID, // 175 + SPV_OPERAND_TYPE_TYPE_ID, // 176 + SPV_OPERAND_TYPE_RESULT_ID, // 177 + SPV_OPERAND_TYPE_ID, // 178 + SPV_OPERAND_TYPE_ID, // 179 + SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER, // 180 + SPV_OPERAND_TYPE_TYPE_ID, // 181 + SPV_OPERAND_TYPE_RESULT_ID, // 182 + SPV_OPERAND_TYPE_ID, // 183 + SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER, // 184 + SPV_OPERAND_TYPE_TYPE_ID, // 185 + SPV_OPERAND_TYPE_RESULT_ID, // 186 + SPV_OPERAND_TYPE_ID, // 187 + SPV_OPERAND_TYPE_ID, // 188 + SPV_OPERAND_TYPE_OPTIONAL_IMAGE, // 189 + SPV_OPERAND_TYPE_TYPE_ID, // 190 + SPV_OPERAND_TYPE_RESULT_ID, // 191 + SPV_OPERAND_TYPE_ID, // 192 + SPV_OPERAND_TYPE_ID, // 193 + SPV_OPERAND_TYPE_IMAGE, // 194 + SPV_OPERAND_TYPE_TYPE_ID, // 195 + SPV_OPERAND_TYPE_RESULT_ID, // 196 + SPV_OPERAND_TYPE_ID, // 197 + SPV_OPERAND_TYPE_ID, // 198 + SPV_OPERAND_TYPE_ID, // 199 + SPV_OPERAND_TYPE_OPTIONAL_IMAGE, // 200 + SPV_OPERAND_TYPE_TYPE_ID, // 201 + SPV_OPERAND_TYPE_RESULT_ID, // 202 + SPV_OPERAND_TYPE_ID, // 203 + SPV_OPERAND_TYPE_ID, // 204 + SPV_OPERAND_TYPE_ID, // 205 + SPV_OPERAND_TYPE_IMAGE, // 206 + SPV_OPERAND_TYPE_ID, // 207 + SPV_OPERAND_TYPE_ID, // 208 + SPV_OPERAND_TYPE_ID, // 209 + SPV_OPERAND_TYPE_OPTIONAL_IMAGE, // 210 + SPV_OPERAND_TYPE_TYPE_ID, // 211 + SPV_OPERAND_TYPE_RESULT_ID, // 212 + SPV_OPERAND_TYPE_ID, // 213 + SPV_OPERAND_TYPE_STORAGE_CLASS, // 214 + SPV_OPERAND_TYPE_TYPE_ID, // 215 + SPV_OPERAND_TYPE_RESULT_ID, // 216 + SPV_OPERAND_TYPE_ID, // 217 + SPV_OPERAND_TYPE_ID, // 218 + SPV_OPERAND_TYPE_ID, // 219 + SPV_OPERAND_TYPE_ID, // 220 + SPV_OPERAND_TYPE_SCOPE_ID, // 221 + SPV_OPERAND_TYPE_SCOPE_ID, // 222 + SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, // 223 + SPV_OPERAND_TYPE_SCOPE_ID, // 224 + SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, // 225 + SPV_OPERAND_TYPE_TYPE_ID, // 226 + SPV_OPERAND_TYPE_RESULT_ID, // 227 + SPV_OPERAND_TYPE_ID, // 228 + SPV_OPERAND_TYPE_SCOPE_ID, // 229 + SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, // 230 + SPV_OPERAND_TYPE_ID, // 231 + SPV_OPERAND_TYPE_SCOPE_ID, // 232 + SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, // 233 + SPV_OPERAND_TYPE_ID, // 234 + SPV_OPERAND_TYPE_TYPE_ID, // 235 + SPV_OPERAND_TYPE_RESULT_ID, // 236 + SPV_OPERAND_TYPE_ID, // 237 + SPV_OPERAND_TYPE_SCOPE_ID, // 238 + SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, // 239 + SPV_OPERAND_TYPE_ID, // 240 + SPV_OPERAND_TYPE_TYPE_ID, // 241 + SPV_OPERAND_TYPE_RESULT_ID, // 242 + SPV_OPERAND_TYPE_ID, // 243 + SPV_OPERAND_TYPE_SCOPE_ID, // 244 + SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, // 245 + SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, // 246 + SPV_OPERAND_TYPE_ID, // 247 + SPV_OPERAND_TYPE_ID, // 248 + SPV_OPERAND_TYPE_ID, // 249 + SPV_OPERAND_TYPE_ID, // 250 + SPV_OPERAND_TYPE_LOOP_CONTROL, // 251 + SPV_OPERAND_TYPE_ID, // 252 + SPV_OPERAND_TYPE_SELECTION_CONTROL, // 253 + SPV_OPERAND_TYPE_ID, // 254 + SPV_OPERAND_TYPE_ID, // 255 + SPV_OPERAND_TYPE_ID, // 256 + SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER, // 257 + SPV_OPERAND_TYPE_ID, // 258 + SPV_OPERAND_TYPE_ID, // 259 + SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER_ID, // 260 + SPV_OPERAND_TYPE_ID, // 261 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 262 + SPV_OPERAND_TYPE_TYPE_ID, // 263 + SPV_OPERAND_TYPE_RESULT_ID, // 264 + SPV_OPERAND_TYPE_SCOPE_ID, // 265 + SPV_OPERAND_TYPE_ID, // 266 + SPV_OPERAND_TYPE_ID, // 267 + SPV_OPERAND_TYPE_ID, // 268 + SPV_OPERAND_TYPE_ID, // 269 + SPV_OPERAND_TYPE_ID, // 270 + SPV_OPERAND_TYPE_SCOPE_ID, // 271 + SPV_OPERAND_TYPE_ID, // 272 + SPV_OPERAND_TYPE_ID, // 273 + SPV_OPERAND_TYPE_TYPE_ID, // 274 + SPV_OPERAND_TYPE_RESULT_ID, // 275 + SPV_OPERAND_TYPE_SCOPE_ID, // 276 + SPV_OPERAND_TYPE_ID, // 277 + SPV_OPERAND_TYPE_TYPE_ID, // 278 + SPV_OPERAND_TYPE_RESULT_ID, // 279 + SPV_OPERAND_TYPE_SCOPE_ID, // 280 + SPV_OPERAND_TYPE_ID, // 281 + SPV_OPERAND_TYPE_ID, // 282 + SPV_OPERAND_TYPE_TYPE_ID, // 283 + SPV_OPERAND_TYPE_RESULT_ID, // 284 + SPV_OPERAND_TYPE_SCOPE_ID, // 285 + SPV_OPERAND_TYPE_GROUP_OPERATION, // 286 + SPV_OPERAND_TYPE_ID, // 287 + SPV_OPERAND_TYPE_TYPE_ID, // 288 + SPV_OPERAND_TYPE_RESULT_ID, // 289 + SPV_OPERAND_TYPE_ID, // 290 + SPV_OPERAND_TYPE_ID, // 291 + SPV_OPERAND_TYPE_ID, // 292 + SPV_OPERAND_TYPE_ID, // 293 + SPV_OPERAND_TYPE_ID, // 294 + SPV_OPERAND_TYPE_ID, // 295 + SPV_OPERAND_TYPE_ID, // 296 + SPV_OPERAND_TYPE_ID, // 297 + SPV_OPERAND_TYPE_ID, // 298 + SPV_OPERAND_TYPE_ID, // 299 + SPV_OPERAND_TYPE_TYPE_ID, // 300 + SPV_OPERAND_TYPE_RESULT_ID, // 301 + SPV_OPERAND_TYPE_SCOPE_ID, // 302 + SPV_OPERAND_TYPE_ID, // 303 + SPV_OPERAND_TYPE_ID, // 304 + SPV_OPERAND_TYPE_ID, // 305 + SPV_OPERAND_TYPE_ID, // 306 + SPV_OPERAND_TYPE_SCOPE_ID, // 307 + SPV_OPERAND_TYPE_ID, // 308 + SPV_OPERAND_TYPE_ID, // 309 + SPV_OPERAND_TYPE_ID, // 310 + SPV_OPERAND_TYPE_ID, // 311 + SPV_OPERAND_TYPE_TYPE_ID, // 312 + SPV_OPERAND_TYPE_RESULT_ID, // 313 + SPV_OPERAND_TYPE_ID, // 314 + SPV_OPERAND_TYPE_ID, // 315 + SPV_OPERAND_TYPE_ID, // 316 + SPV_OPERAND_TYPE_ID, // 317 + SPV_OPERAND_TYPE_ID, // 318 + SPV_OPERAND_TYPE_ID, // 319 + SPV_OPERAND_TYPE_ID, // 320 + SPV_OPERAND_TYPE_ID, // 321 + SPV_OPERAND_TYPE_ID, // 322 + SPV_OPERAND_TYPE_ID, // 323 + SPV_OPERAND_TYPE_VARIABLE_ID, // 324 + SPV_OPERAND_TYPE_TYPE_ID, // 325 + SPV_OPERAND_TYPE_RESULT_ID, // 326 + SPV_OPERAND_TYPE_ID, // 327 + SPV_OPERAND_TYPE_ID, // 328 + SPV_OPERAND_TYPE_ID, // 329 + SPV_OPERAND_TYPE_ID, // 330 + SPV_OPERAND_TYPE_ID, // 331 + SPV_OPERAND_TYPE_ID, // 332 + SPV_OPERAND_TYPE_SCOPE_ID, // 333 + SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, // 334 + SPV_OPERAND_TYPE_TYPE_ID, // 335 + SPV_OPERAND_TYPE_RESULT_ID, // 336 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 337 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 338 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 339 + SPV_OPERAND_TYPE_TYPE_ID, // 340 + SPV_OPERAND_TYPE_RESULT_ID, // 341 + SPV_OPERAND_TYPE_SCOPE_ID, // 342 + SPV_OPERAND_TYPE_TYPE_ID, // 343 + SPV_OPERAND_TYPE_RESULT_ID, // 344 + SPV_OPERAND_TYPE_SCOPE_ID, // 345 + SPV_OPERAND_TYPE_GROUP_OPERATION, // 346 + SPV_OPERAND_TYPE_ID, // 347 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 348 + SPV_OPERAND_TYPE_TYPE_ID, // 349 + SPV_OPERAND_TYPE_RESULT_ID, // 350 + SPV_OPERAND_TYPE_ID, // 351 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 352 + SPV_OPERAND_TYPE_TYPE_ID, // 353 + SPV_OPERAND_TYPE_RESULT_ID, // 354 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 355 + SPV_OPERAND_TYPE_RESULT_ID, // 356 + SPV_OPERAND_TYPE_ID, // 357 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 358 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 359 + SPV_OPERAND_TYPE_TYPE_ID, // 360 + SPV_OPERAND_TYPE_RESULT_ID, // 361 + SPV_OPERAND_TYPE_ID, // 362 + SPV_OPERAND_TYPE_ID, // 363 + SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS, // 364 + SPV_OPERAND_TYPE_ID, // 365 + SPV_OPERAND_TYPE_ID, // 366 + SPV_OPERAND_TYPE_ID, // 367 + SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS, // 368 + SPV_OPERAND_TYPE_RESULT_ID, // 369 + SPV_OPERAND_TYPE_STORAGE_CLASS, // 370 + SPV_OPERAND_TYPE_TYPE_ID, // 371 + SPV_OPERAND_TYPE_RESULT_ID, // 372 + SPV_OPERAND_TYPE_STORAGE_CLASS, // 373 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 374 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 375 + SPV_OPERAND_TYPE_TYPE_ID, // 376 + SPV_OPERAND_TYPE_RESULT_ID, // 377 + SPV_OPERAND_TYPE_ID, // 378 + SPV_OPERAND_TYPE_ID, // 379 + SPV_OPERAND_TYPE_ID, // 380 + SPV_OPERAND_TYPE_VARIABLE_ID, // 381 + SPV_OPERAND_TYPE_TYPE_ID, // 382 + SPV_OPERAND_TYPE_RESULT_ID, // 383 + SPV_OPERAND_TYPE_ID, // 384 + SPV_OPERAND_TYPE_ID, // 385 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 386 + SPV_OPERAND_TYPE_ID, // 387 + SPV_OPERAND_TYPE_ID, // 388 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 389 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 390 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 391 + SPV_OPERAND_TYPE_TYPE_ID, // 392 + SPV_OPERAND_TYPE_RESULT_ID, // 393 + SPV_OPERAND_TYPE_SCOPE_ID, // 394 + SPV_OPERAND_TYPE_ID, // 395 + SPV_OPERAND_TYPE_ID, // 396 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 397 + SPV_OPERAND_TYPE_TYPE_ID, // 398 + SPV_OPERAND_TYPE_RESULT_ID, // 399 + SPV_OPERAND_TYPE_ID, // 400 + SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER, // 401 + SPV_OPERAND_TYPE_VARIABLE_ID, // 402 + SPV_OPERAND_TYPE_ID, // 403 + SPV_OPERAND_TYPE_ID, // 404 + SPV_OPERAND_TYPE_ID, // 405 + SPV_OPERAND_TYPE_ID, // 406 + SPV_OPERAND_TYPE_ID, // 407 + SPV_OPERAND_TYPE_ID, // 408 + SPV_OPERAND_TYPE_ID, // 409 + SPV_OPERAND_TYPE_ID, // 410 + SPV_OPERAND_TYPE_ID, // 411 + SPV_OPERAND_TYPE_ID, // 412 + SPV_OPERAND_TYPE_ID, // 413 + SPV_OPERAND_TYPE_TYPE_ID, // 414 + SPV_OPERAND_TYPE_RESULT_ID, // 415 + SPV_OPERAND_TYPE_ID, // 416 + SPV_OPERAND_TYPE_ID, // 417 + SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT, // 418 + SPV_OPERAND_TYPE_TYPE_ID, // 419 + SPV_OPERAND_TYPE_RESULT_ID, // 420 + SPV_OPERAND_TYPE_ID, // 421 + SPV_OPERAND_TYPE_ID, // 422 + SPV_OPERAND_TYPE_ID, // 423 + SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT, // 424 + SPV_OPERAND_TYPE_RESULT_ID, // 425 + SPV_OPERAND_TYPE_ID, // 426 + SPV_OPERAND_TYPE_SCOPE_ID, // 427 + SPV_OPERAND_TYPE_ID, // 428 + SPV_OPERAND_TYPE_ID, // 429 + SPV_OPERAND_TYPE_ID, // 430 + SPV_OPERAND_TYPE_TYPE_ID, // 431 + SPV_OPERAND_TYPE_RESULT_ID, // 432 + SPV_OPERAND_TYPE_ID, // 433 + SPV_OPERAND_TYPE_ID, // 434 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 435 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 436 + SPV_OPERAND_TYPE_ID, // 437 + SPV_OPERAND_TYPE_ID, // 438 + SPV_OPERAND_TYPE_ID, // 439 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 440 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 441 + SPV_OPERAND_TYPE_TYPE_ID, // 442 + SPV_OPERAND_TYPE_RESULT_ID, // 443 + SPV_OPERAND_TYPE_ID, // 444 + SPV_OPERAND_TYPE_ID, // 445 + SPV_OPERAND_TYPE_ID, // 446 + SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS, // 447 + SPV_OPERAND_TYPE_ID, // 448 + SPV_OPERAND_TYPE_ID, // 449 + SPV_OPERAND_TYPE_ID, // 450 + SPV_OPERAND_TYPE_ID, // 451 + SPV_OPERAND_TYPE_ID, // 452 + SPV_OPERAND_TYPE_ID, // 453 + SPV_OPERAND_TYPE_ID, // 454 + SPV_OPERAND_TYPE_ID, // 455 + SPV_OPERAND_TYPE_ID, // 456 + SPV_OPERAND_TYPE_ID, // 457 + SPV_OPERAND_TYPE_ID, // 458 + SPV_OPERAND_TYPE_ID, // 459 + SPV_OPERAND_TYPE_ID, // 460 + SPV_OPERAND_TYPE_ID, // 461 + SPV_OPERAND_TYPE_ID, // 462 + SPV_OPERAND_TYPE_ID, // 463 + SPV_OPERAND_TYPE_ID, // 464 + SPV_OPERAND_TYPE_ID, // 465 + SPV_OPERAND_TYPE_ID, // 466 + SPV_OPERAND_TYPE_ID, // 467 + SPV_OPERAND_TYPE_ID, // 468 + SPV_OPERAND_TYPE_ID, // 469 + SPV_OPERAND_TYPE_ID, // 470 + SPV_OPERAND_TYPE_ID, // 471 + SPV_OPERAND_TYPE_ID, // 472 + SPV_OPERAND_TYPE_ID, // 473 + SPV_OPERAND_TYPE_ID, // 474 + SPV_OPERAND_TYPE_ID, // 475 + SPV_OPERAND_TYPE_ID, // 476 + SPV_OPERAND_TYPE_ID, // 477 + SPV_OPERAND_TYPE_ID, // 478 + SPV_OPERAND_TYPE_ID, // 479 + SPV_OPERAND_TYPE_ID, // 480 + SPV_OPERAND_TYPE_ID, // 481 + SPV_OPERAND_TYPE_ID, // 482 + SPV_OPERAND_TYPE_ID, // 483 + SPV_OPERAND_TYPE_ID, // 484 + SPV_OPERAND_TYPE_ID, // 485 + SPV_OPERAND_TYPE_ID, // 486 + SPV_OPERAND_TYPE_ID, // 487 + SPV_OPERAND_TYPE_ID, // 488 + SPV_OPERAND_TYPE_ID, // 489 + SPV_OPERAND_TYPE_ID, // 490 + SPV_OPERAND_TYPE_ID, // 491 + SPV_OPERAND_TYPE_ID, // 492 + SPV_OPERAND_TYPE_ID, // 493 + SPV_OPERAND_TYPE_ID, // 494 + SPV_OPERAND_TYPE_ID, // 495 + SPV_OPERAND_TYPE_ID, // 496 + SPV_OPERAND_TYPE_ID, // 497 + SPV_OPERAND_TYPE_ID, // 498 + SPV_OPERAND_TYPE_ID, // 499 + SPV_OPERAND_TYPE_ID, // 500 + SPV_OPERAND_TYPE_ID, // 501 + SPV_OPERAND_TYPE_ID, // 502 + SPV_OPERAND_TYPE_ID, // 503 + SPV_OPERAND_TYPE_ID, // 504 + SPV_OPERAND_TYPE_ID, // 505 + SPV_OPERAND_TYPE_ID, // 506 + SPV_OPERAND_TYPE_ID, // 507 + SPV_OPERAND_TYPE_ID, // 508 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 509 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 510 + SPV_OPERAND_TYPE_TYPE_ID, // 511 + SPV_OPERAND_TYPE_RESULT_ID, // 512 + SPV_OPERAND_TYPE_ID, // 513 + SPV_OPERAND_TYPE_ID, // 514 + SPV_OPERAND_TYPE_ID, // 515 + SPV_OPERAND_TYPE_ID, // 516 + SPV_OPERAND_TYPE_OPTIONAL_IMAGE, // 517 + SPV_OPERAND_TYPE_TYPE_ID, // 518 + SPV_OPERAND_TYPE_RESULT_ID, // 519 + SPV_OPERAND_TYPE_ID, // 520 + SPV_OPERAND_TYPE_ID, // 521 + SPV_OPERAND_TYPE_ID, // 522 + SPV_OPERAND_TYPE_ID, // 523 + SPV_OPERAND_TYPE_ID, // 524 + SPV_OPERAND_TYPE_ID, // 525 + SPV_OPERAND_TYPE_ID, // 526 + SPV_OPERAND_TYPE_ID, // 527 + SPV_OPERAND_TYPE_ID, // 528 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 529 + SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS, // 530 + SPV_OPERAND_TYPE_ID, // 531 + SPV_OPERAND_TYPE_ID, // 532 + SPV_OPERAND_TYPE_ID, // 533 + SPV_OPERAND_TYPE_ID, // 534 + SPV_OPERAND_TYPE_ID, // 535 + SPV_OPERAND_TYPE_ID, // 536 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 537 + SPV_OPERAND_TYPE_TYPE_ID, // 538 + SPV_OPERAND_TYPE_RESULT_ID, // 539 + SPV_OPERAND_TYPE_ID, // 540 + SPV_OPERAND_TYPE_ID, // 541 + SPV_OPERAND_TYPE_ID, // 542 + SPV_OPERAND_TYPE_ID, // 543 + SPV_OPERAND_TYPE_ID, // 544 + SPV_OPERAND_TYPE_ID, // 545 + SPV_OPERAND_TYPE_ID, // 546 + SPV_OPERAND_TYPE_ID, // 547 + SPV_OPERAND_TYPE_ID, // 548 + SPV_OPERAND_TYPE_ID, // 549 + SPV_OPERAND_TYPE_ID, // 550 + SPV_OPERAND_TYPE_ID, // 551 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 552 + SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS, // 553 + SPV_OPERAND_TYPE_ID, // 554 + SPV_OPERAND_TYPE_ID, // 555 + SPV_OPERAND_TYPE_ID, // 556 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 557 + SPV_OPERAND_TYPE_TYPE_ID, // 558 + SPV_OPERAND_TYPE_RESULT_ID, // 559 + SPV_OPERAND_TYPE_ID, // 560 + SPV_OPERAND_TYPE_ID, // 561 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 562 + SPV_OPERAND_TYPE_ID, // 563 + SPV_OPERAND_TYPE_ID, // 564 + SPV_OPERAND_TYPE_ID, // 565 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 566 + SPV_OPERAND_TYPE_RESULT_ID, // 567 + SPV_OPERAND_TYPE_ID, // 568 + SPV_OPERAND_TYPE_SCOPE_ID, // 569 + SPV_OPERAND_TYPE_ID, // 570 + SPV_OPERAND_TYPE_ID, // 571 + SPV_OPERAND_TYPE_TYPE_ID, // 572 + SPV_OPERAND_TYPE_RESULT_ID, // 573 + SPV_OPERAND_TYPE_ID, // 574 + SPV_OPERAND_TYPE_ID, // 575 + SPV_OPERAND_TYPE_ID, // 576 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 577 + SPV_OPERAND_TYPE_ID, // 578 + SPV_OPERAND_TYPE_ID, // 579 + SPV_OPERAND_TYPE_ID, // 580 + SPV_OPERAND_TYPE_ID, // 581 + SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, // 582 + SPV_OPERAND_TYPE_TYPE_ID, // 583 + SPV_OPERAND_TYPE_RESULT_ID, // 584 + SPV_OPERAND_TYPE_ID, // 585 + SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE, // 586 + SPV_OPERAND_TYPE_ID, // 587 + SPV_OPERAND_TYPE_TYPE_ID, // 588 + SPV_OPERAND_TYPE_RESULT_ID, // 589 + SPV_OPERAND_TYPE_ID, // 590 + SPV_OPERAND_TYPE_ID, // 591 + SPV_OPERAND_TYPE_ID, // 592 + SPV_OPERAND_TYPE_MEMORY_ACCESS, // 593 + SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS, // 594 + SPV_OPERAND_TYPE_ID, // 595 + SPV_OPERAND_TYPE_ID, // 596 + SPV_OPERAND_TYPE_ID, // 597 + SPV_OPERAND_TYPE_MEMORY_ACCESS, // 598 + SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS, // 599 + SPV_OPERAND_TYPE_RESULT_ID, // 600 + SPV_OPERAND_TYPE_ID, // 601 + SPV_OPERAND_TYPE_ID, // 602 + SPV_OPERAND_TYPE_VARIABLE_ID, // 603 + SPV_OPERAND_TYPE_TYPE_ID, // 604 + SPV_OPERAND_TYPE_RESULT_ID, // 605 + SPV_OPERAND_TYPE_ID, // 606 + SPV_OPERAND_TYPE_ID, // 607 + SPV_OPERAND_TYPE_ID, // 608 + SPV_OPERAND_TYPE_ID, // 609 + SPV_OPERAND_TYPE_OPTIONAL_RAW_ACCESS_CHAIN_OPERANDS, // 610 + SPV_OPERAND_TYPE_ID, // 611 + SPV_OPERAND_TYPE_ID, // 612 + SPV_OPERAND_TYPE_ID, // 613 + SPV_OPERAND_TYPE_ID, // 614 + SPV_OPERAND_TYPE_ID, // 615 + SPV_OPERAND_TYPE_TYPE_ID, // 616 + SPV_OPERAND_TYPE_RESULT_ID, // 617 + SPV_OPERAND_TYPE_ID, // 618 + SPV_OPERAND_TYPE_ID, // 619 + SPV_OPERAND_TYPE_LITERAL_STRING, // 620 + SPV_OPERAND_TYPE_LITERAL_STRING, // 621 + SPV_OPERAND_TYPE_TYPE_ID, // 622 + SPV_OPERAND_TYPE_RESULT_ID, // 623 + SPV_OPERAND_TYPE_ID, // 624 + SPV_OPERAND_TYPE_ID, // 625 + SPV_OPERAND_TYPE_ID, // 626 + SPV_OPERAND_TYPE_ID, // 627 + SPV_OPERAND_TYPE_ID, // 628 + SPV_OPERAND_TYPE_ID, // 629 + SPV_OPERAND_TYPE_ID, // 630 + SPV_OPERAND_TYPE_TYPE_ID, // 631 + SPV_OPERAND_TYPE_RESULT_ID, // 632 + SPV_OPERAND_TYPE_ID, // 633 + SPV_OPERAND_TYPE_ID, // 634 + SPV_OPERAND_TYPE_ID, // 635 + SPV_OPERAND_TYPE_ID, // 636 + SPV_OPERAND_TYPE_ID, // 637 + SPV_OPERAND_TYPE_ID, // 638 + SPV_OPERAND_TYPE_ID, // 639 + SPV_OPERAND_TYPE_ID, // 640 + SPV_OPERAND_TYPE_TYPE_ID, // 641 + SPV_OPERAND_TYPE_RESULT_ID, // 642 + SPV_OPERAND_TYPE_ID, // 643 + SPV_OPERAND_TYPE_ID, // 644 + SPV_OPERAND_TYPE_ID, // 645 + SPV_OPERAND_TYPE_ID, // 646 + SPV_OPERAND_TYPE_ID, // 647 + SPV_OPERAND_TYPE_ID, // 648 + SPV_OPERAND_TYPE_ID, // 649 + SPV_OPERAND_TYPE_ID, // 650 + SPV_OPERAND_TYPE_ID, // 651 + SPV_OPERAND_TYPE_ID, // 652 + SPV_OPERAND_TYPE_ID, // 653 + SPV_OPERAND_TYPE_TYPE_ID, // 654 + SPV_OPERAND_TYPE_RESULT_ID, // 655 + SPV_OPERAND_TYPE_ID, // 656 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 657 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 658 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 659 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 660 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 661 + SPV_OPERAND_TYPE_TYPE_ID, // 662 + SPV_OPERAND_TYPE_RESULT_ID, // 663 + SPV_OPERAND_TYPE_ID, // 664 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 665 + SPV_OPERAND_TYPE_ID, // 666 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 667 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 668 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 669 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 670 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 671 + SPV_OPERAND_TYPE_TYPE_ID, // 672 + SPV_OPERAND_TYPE_RESULT_ID, // 673 + SPV_OPERAND_TYPE_ID, // 674 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 675 + SPV_OPERAND_TYPE_ID, // 676 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 677 + SPV_OPERAND_TYPE_RESULT_ID, // 678 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 679 + SPV_OPERAND_TYPE_RESULT_ID, // 680 + SPV_OPERAND_TYPE_ID, // 681 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 682 + SPV_OPERAND_TYPE_VARIABLE_ID, // 683 + SPV_OPERAND_TYPE_TYPE_ID, // 684 + SPV_OPERAND_TYPE_RESULT_ID, // 685 + SPV_OPERAND_TYPE_ID, // 686 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 687 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 688 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 689 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 690 + SPV_OPERAND_TYPE_ID, // 691 + SPV_OPERAND_TYPE_ID, // 692 + SPV_OPERAND_TYPE_ID, // 693 + SPV_OPERAND_TYPE_ID, // 694 + SPV_OPERAND_TYPE_ID, // 695 + SPV_OPERAND_TYPE_ID, // 696 + SPV_OPERAND_TYPE_ID, // 697 + SPV_OPERAND_TYPE_ID, // 698 + SPV_OPERAND_TYPE_ID, // 699 + SPV_OPERAND_TYPE_ID, // 700 + SPV_OPERAND_TYPE_ID, // 701 + SPV_OPERAND_TYPE_ID, // 702 + SPV_OPERAND_TYPE_ID, // 703 + SPV_OPERAND_TYPE_ID, // 704 + SPV_OPERAND_TYPE_ID, // 705 + SPV_OPERAND_TYPE_ID, // 706 + SPV_OPERAND_TYPE_ID, // 707 + SPV_OPERAND_TYPE_ID, // 708 + SPV_OPERAND_TYPE_ID, // 709 + SPV_OPERAND_TYPE_TYPE_ID, // 710 + SPV_OPERAND_TYPE_RESULT_ID, // 711 + SPV_OPERAND_TYPE_ID, // 712 + SPV_OPERAND_TYPE_ID, // 713 + SPV_OPERAND_TYPE_ID, // 714 + SPV_OPERAND_TYPE_ID, // 715 + SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS, // 716 + SPV_OPERAND_TYPE_TYPE_ID, // 717 + SPV_OPERAND_TYPE_RESULT_ID, // 718 + SPV_OPERAND_TYPE_ID, // 719 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 720 + SPV_OPERAND_TYPE_ID, // 721 + SPV_OPERAND_TYPE_ID, // 722 + SPV_OPERAND_TYPE_ID, // 723 + SPV_OPERAND_TYPE_ID, // 724 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 725 + SPV_OPERAND_TYPE_ID, // 726 + SPV_OPERAND_TYPE_ID, // 727 + SPV_OPERAND_TYPE_ID, // 728 + SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING, // 729 + SPV_OPERAND_TYPE_ID, // 730 + SPV_OPERAND_TYPE_STORAGE_CLASS, // 731 + SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, // 732 + SPV_OPERAND_TYPE_ID, // 733 + SPV_OPERAND_TYPE_DEBUG_TYPE_QUALIFIER, // 734 + SPV_OPERAND_TYPE_ID, // 735 + SPV_OPERAND_TYPE_ID, // 736 + SPV_OPERAND_TYPE_ID, // 737 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 738 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 739 + SPV_OPERAND_TYPE_ID, // 740 + SPV_OPERAND_TYPE_ID, // 741 + SPV_OPERAND_TYPE_ID, // 742 + SPV_OPERAND_TYPE_ID, // 743 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 744 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 745 + SPV_OPERAND_TYPE_ID, // 746 + SPV_OPERAND_TYPE_ID, // 747 + SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, // 748 + SPV_OPERAND_TYPE_VARIABLE_ID, // 749 + SPV_OPERAND_TYPE_ID, // 750 + SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE, // 751 + SPV_OPERAND_TYPE_ID, // 752 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 753 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 754 + SPV_OPERAND_TYPE_ID, // 755 + SPV_OPERAND_TYPE_ID, // 756 + SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, // 757 + SPV_OPERAND_TYPE_VARIABLE_ID, // 758 + SPV_OPERAND_TYPE_ID, // 759 + SPV_OPERAND_TYPE_ID, // 760 + SPV_OPERAND_TYPE_ID, // 761 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 762 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 763 + SPV_OPERAND_TYPE_ID, // 764 + SPV_OPERAND_TYPE_ID, // 765 + SPV_OPERAND_TYPE_ID, // 766 + SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, // 767 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 768 + SPV_OPERAND_TYPE_ID, // 769 + SPV_OPERAND_TYPE_ID, // 770 + SPV_OPERAND_TYPE_ID, // 771 + SPV_OPERAND_TYPE_ID, // 772 + SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, // 773 + SPV_OPERAND_TYPE_ID, // 774 + SPV_OPERAND_TYPE_ID, // 775 + SPV_OPERAND_TYPE_ID, // 776 + SPV_OPERAND_TYPE_ID, // 777 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 778 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 779 + SPV_OPERAND_TYPE_ID, // 780 + SPV_OPERAND_TYPE_ID, // 781 + SPV_OPERAND_TYPE_ID, // 782 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 783 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 784 + SPV_OPERAND_TYPE_ID, // 785 + SPV_OPERAND_TYPE_ID, // 786 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 787 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 788 + SPV_OPERAND_TYPE_VARIABLE_ID, // 789 + SPV_OPERAND_TYPE_ID, // 790 + SPV_OPERAND_TYPE_ID, // 791 + SPV_OPERAND_TYPE_ID, // 792 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 793 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 794 + SPV_OPERAND_TYPE_ID, // 795 + SPV_OPERAND_TYPE_ID, // 796 + SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, // 797 + SPV_OPERAND_TYPE_ID, // 798 + SPV_OPERAND_TYPE_ID, // 799 + SPV_OPERAND_TYPE_ID, // 800 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 801 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 802 + SPV_OPERAND_TYPE_ID, // 803 + SPV_OPERAND_TYPE_ID, // 804 + SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, // 805 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 806 + SPV_OPERAND_TYPE_ID, // 807 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 808 + SPV_OPERAND_TYPE_ID, // 809 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 810 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 811 + SPV_OPERAND_TYPE_ID, // 812 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 813 + SPV_OPERAND_TYPE_ID, // 814 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 815 + SPV_OPERAND_TYPE_ID, // 816 + SPV_OPERAND_TYPE_ID, // 817 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 818 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 819 + SPV_OPERAND_TYPE_ID, // 820 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 821 + SPV_OPERAND_TYPE_ID, // 822 + SPV_OPERAND_TYPE_ID, // 823 + SPV_OPERAND_TYPE_ID, // 824 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 825 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 826 + SPV_OPERAND_TYPE_ID, // 827 + SPV_OPERAND_TYPE_OPTIONAL_LITERAL_INTEGER, // 828 + SPV_OPERAND_TYPE_ID, // 829 + SPV_OPERAND_TYPE_ID, // 830 + SPV_OPERAND_TYPE_VARIABLE_ID, // 831 + SPV_OPERAND_TYPE_DEBUG_OPERATION, // 832 + SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER, // 833 + SPV_OPERAND_TYPE_ID, // 834 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 835 + SPV_OPERAND_TYPE_ID, // 836 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 837 + SPV_OPERAND_TYPE_ID, // 838 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 839 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 840 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 841 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 842 + SPV_OPERAND_TYPE_ID, // 843 + SPV_OPERAND_TYPE_ID, // 844 + SPV_OPERAND_TYPE_ID, // 845 + SPV_OPERAND_TYPE_ID, // 846 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 847 + SPV_OPERAND_TYPE_ID, // 848 + SPV_OPERAND_TYPE_ID, // 849 + SPV_OPERAND_TYPE_ID, // 850 + SPV_OPERAND_TYPE_ID, // 851 + SPV_OPERAND_TYPE_ID, // 852 + SPV_OPERAND_TYPE_ID, // 853 + SPV_OPERAND_TYPE_ID, // 854 + SPV_OPERAND_TYPE_ID, // 855 + SPV_OPERAND_TYPE_VARIABLE_ID, // 856 + SPV_OPERAND_TYPE_ID, // 857 + SPV_OPERAND_TYPE_ID, // 858 + SPV_OPERAND_TYPE_ID, // 859 + SPV_OPERAND_TYPE_ID, // 860 + SPV_OPERAND_TYPE_ID, // 861 + SPV_OPERAND_TYPE_ID, // 862 + SPV_OPERAND_TYPE_ID, // 863 + SPV_OPERAND_TYPE_ID, // 864 + SPV_OPERAND_TYPE_ID, // 865 + SPV_OPERAND_TYPE_VARIABLE_ID, // 866 + SPV_OPERAND_TYPE_ID, // 867 + SPV_OPERAND_TYPE_ID, // 868 + SPV_OPERAND_TYPE_ID, // 869 + SPV_OPERAND_TYPE_ID, // 870 + SPV_OPERAND_TYPE_ID, // 871 + SPV_OPERAND_TYPE_ID, // 872 + SPV_OPERAND_TYPE_ID, // 873 + SPV_OPERAND_TYPE_ID, // 874 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 875 + SPV_OPERAND_TYPE_ID, // 876 + SPV_OPERAND_TYPE_ID, // 877 + SPV_OPERAND_TYPE_ID, // 878 + SPV_OPERAND_TYPE_ID, // 879 + SPV_OPERAND_TYPE_VARIABLE_ID, // 880 + SPV_OPERAND_TYPE_ID, // 881 + SPV_OPERAND_TYPE_ID, // 882 + SPV_OPERAND_TYPE_ID, // 883 + SPV_OPERAND_TYPE_ID, // 884 + SPV_OPERAND_TYPE_ID, // 885 + SPV_OPERAND_TYPE_ID, // 886 + SPV_OPERAND_TYPE_ID, // 887 + SPV_OPERAND_TYPE_ID, // 888 + SPV_OPERAND_TYPE_ID, // 889 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 890 + SPV_OPERAND_TYPE_ID, // 891 + SPV_OPERAND_TYPE_ID, // 892 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 893 + SPV_OPERAND_TYPE_ID, // 894 + SPV_OPERAND_TYPE_ID, // 895 + SPV_OPERAND_TYPE_ID, // 896 + SPV_OPERAND_TYPE_ID, // 897 + SPV_OPERAND_TYPE_ID, // 898 + SPV_OPERAND_TYPE_ID, // 899 + SPV_OPERAND_TYPE_ID, // 900 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 901 + SPV_OPERAND_TYPE_ID, // 902 + SPV_OPERAND_TYPE_ID, // 903 + SPV_OPERAND_TYPE_ID, // 904 + SPV_OPERAND_TYPE_VARIABLE_ID, // 905 + SPV_OPERAND_TYPE_ID, // 906 + SPV_OPERAND_TYPE_ID, // 907 + SPV_OPERAND_TYPE_ID, // 908 + SPV_OPERAND_TYPE_ID, // 909 + SPV_OPERAND_TYPE_ID, // 910 + SPV_OPERAND_TYPE_ID, // 911 + SPV_OPERAND_TYPE_ID, // 912 + SPV_OPERAND_TYPE_ID, // 913 + SPV_OPERAND_TYPE_ID, // 914 + SPV_OPERAND_TYPE_ID, // 915 + SPV_OPERAND_TYPE_ID, // 916 + SPV_OPERAND_TYPE_ID, // 917 + SPV_OPERAND_TYPE_ID, // 918 + SPV_OPERAND_TYPE_ID, // 919 + SPV_OPERAND_TYPE_ID, // 920 + SPV_OPERAND_TYPE_ID, // 921 + SPV_OPERAND_TYPE_ID, // 922 + SPV_OPERAND_TYPE_ID, // 923 + SPV_OPERAND_TYPE_ID, // 924 + SPV_OPERAND_TYPE_ID, // 925 + SPV_OPERAND_TYPE_ID, // 926 + SPV_OPERAND_TYPE_ID, // 927 + SPV_OPERAND_TYPE_ID, // 928 + SPV_OPERAND_TYPE_ID, // 929 + SPV_OPERAND_TYPE_ID, // 930 + SPV_OPERAND_TYPE_ID, // 931 + SPV_OPERAND_TYPE_ID, // 932 + SPV_OPERAND_TYPE_ID, // 933 + SPV_OPERAND_TYPE_ID, // 934 + SPV_OPERAND_TYPE_ID, // 935 + SPV_OPERAND_TYPE_ID, // 936 + SPV_OPERAND_TYPE_ID, // 937 + SPV_OPERAND_TYPE_ID, // 938 + SPV_OPERAND_TYPE_ID, // 939 + SPV_OPERAND_TYPE_ID, // 940 + SPV_OPERAND_TYPE_ID, // 941 + SPV_OPERAND_TYPE_ID, // 942 + SPV_OPERAND_TYPE_ID, // 943 + SPV_OPERAND_TYPE_ID, // 944 + SPV_OPERAND_TYPE_ID, // 945 + SPV_OPERAND_TYPE_ID, // 946 + SPV_OPERAND_TYPE_ID, // 947 + SPV_OPERAND_TYPE_ID, // 948 + SPV_OPERAND_TYPE_ID, // 949 + SPV_OPERAND_TYPE_ID, // 950 + SPV_OPERAND_TYPE_ID, // 951 + SPV_OPERAND_TYPE_ID, // 952 + SPV_OPERAND_TYPE_ID, // 953 + SPV_OPERAND_TYPE_ID, // 954 + SPV_OPERAND_TYPE_ID, // 955 + SPV_OPERAND_TYPE_ID, // 956 + SPV_OPERAND_TYPE_ID, // 957 + SPV_OPERAND_TYPE_ID, // 958 + SPV_OPERAND_TYPE_ID, // 959 + SPV_OPERAND_TYPE_ID, // 960 + SPV_OPERAND_TYPE_ID, // 961 + SPV_OPERAND_TYPE_ID, // 962 + SPV_OPERAND_TYPE_ID, // 963 + SPV_OPERAND_TYPE_ID, // 964 + SPV_OPERAND_TYPE_ID, // 965 + SPV_OPERAND_TYPE_ID, // 966 + SPV_OPERAND_TYPE_ID, // 967 + SPV_OPERAND_TYPE_ID, // 968 + SPV_OPERAND_TYPE_ID, // 969 + SPV_OPERAND_TYPE_ID, // 970 + SPV_OPERAND_TYPE_ID, // 971 + SPV_OPERAND_TYPE_ID, // 972 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 973 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 974 + SPV_OPERAND_TYPE_ID, // 975 + SPV_OPERAND_TYPE_SOURCE_LANGUAGE, // 976 + SPV_OPERAND_TYPE_ID, // 977 + SPV_OPERAND_TYPE_ID, // 978 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING, // 979 + SPV_OPERAND_TYPE_ID, // 980 + SPV_OPERAND_TYPE_STORAGE_CLASS, // 981 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS, // 982 + SPV_OPERAND_TYPE_ID, // 983 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_TYPE_QUALIFIER, // 984 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS, // 985 + SPV_OPERAND_TYPE_ID, // 986 + SPV_OPERAND_TYPE_VARIABLE_ID, // 987 + SPV_OPERAND_TYPE_ID, // 988 + SPV_OPERAND_TYPE_ID, // 989 + SPV_OPERAND_TYPE_ID, // 990 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 991 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 992 + SPV_OPERAND_TYPE_ID, // 993 + SPV_OPERAND_TYPE_ID, // 994 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS, // 995 + SPV_OPERAND_TYPE_VARIABLE_ID, // 996 + SPV_OPERAND_TYPE_ID, // 997 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_COMPOSITE_TYPE, // 998 + SPV_OPERAND_TYPE_ID, // 999 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1000 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1001 + SPV_OPERAND_TYPE_ID, // 1002 + SPV_OPERAND_TYPE_ID, // 1003 + SPV_OPERAND_TYPE_ID, // 1004 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS, // 1005 + SPV_OPERAND_TYPE_VARIABLE_ID, // 1006 + SPV_OPERAND_TYPE_ID, // 1007 + SPV_OPERAND_TYPE_ID, // 1008 + SPV_OPERAND_TYPE_ID, // 1009 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1010 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1011 + SPV_OPERAND_TYPE_ID, // 1012 + SPV_OPERAND_TYPE_ID, // 1013 + SPV_OPERAND_TYPE_ID, // 1014 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS, // 1015 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 1016 + SPV_OPERAND_TYPE_ID, // 1017 + SPV_OPERAND_TYPE_ID, // 1018 + SPV_OPERAND_TYPE_ID, // 1019 + SPV_OPERAND_TYPE_ID, // 1020 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS, // 1021 + SPV_OPERAND_TYPE_ID, // 1022 + SPV_OPERAND_TYPE_ID, // 1023 + SPV_OPERAND_TYPE_ID, // 1024 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1025 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1026 + SPV_OPERAND_TYPE_ID, // 1027 + SPV_OPERAND_TYPE_ID, // 1028 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS, // 1029 + SPV_OPERAND_TYPE_ID, // 1030 + SPV_OPERAND_TYPE_ID, // 1031 + SPV_OPERAND_TYPE_ID, // 1032 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1033 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1034 + SPV_OPERAND_TYPE_ID, // 1035 + SPV_OPERAND_TYPE_ID, // 1036 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS, // 1037 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1038 + SPV_OPERAND_TYPE_ID, // 1039 + SPV_OPERAND_TYPE_OPTIONAL_ID, // 1040 + SPV_OPERAND_TYPE_ID, // 1041 + SPV_OPERAND_TYPE_ID, // 1042 + SPV_OPERAND_TYPE_ID, // 1043 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1044 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1045 + SPV_OPERAND_TYPE_ID, // 1046 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS, // 1047 + SPV_OPERAND_TYPE_OPTIONAL_LITERAL_INTEGER, // 1048 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_OPERATION, // 1049 + SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER, // 1050 + SPV_OPERAND_TYPE_ID, // 1051 + SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY, // 1052 + SPV_OPERAND_TYPE_ID, // 1053 + SPV_OPERAND_TYPE_ID, // 1054 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1055 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1056 + SPV_OPERAND_TYPE_ID, // 1057 + SPV_OPERAND_TYPE_ID, // 1058 + SPV_OPERAND_TYPE_ID, // 1059 + SPV_OPERAND_TYPE_ID, // 1060 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1061 + SPV_OPERAND_TYPE_ID, // 1062 + SPV_OPERAND_TYPE_ID, // 1063 + SPV_OPERAND_TYPE_ID, // 1064 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1065 + SPV_OPERAND_TYPE_ID, // 1066 + SPV_OPERAND_TYPE_ID, // 1067 + SPV_OPERAND_TYPE_LITERAL_INTEGER, // 1068 + SPV_OPERAND_TYPE_ID, // 1069 + SPV_OPERAND_TYPE_ID, // 1070 + SPV_OPERAND_TYPE_ID, // 1071 + SPV_OPERAND_TYPE_FP_ROUNDING_MODE, // 1072 +}; diff --git a/libs/bgfx/3rdparty/spirv-tools/include/generated/core_tables_header.inc b/libs/bgfx/3rdparty/spirv-tools/include/generated/core_tables_header.inc new file mode 100644 index 0000000..3e1067f --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/include/generated/core_tables_header.inc @@ -0,0 +1,189 @@ +enum class PrintingClass : uint32_t { + kAnnotation, + kArithmetic, + kAtomic, + kBarrier, + kBit, + kComposite, + kConstant_Creation, + kControl_Flow, + kConversion, + kDebug, + kDerivative, + kDevice_Side_Enqueue, + kExtension, + kFunction, + kGroup, + kImage, + kMemory, + kMiscellaneous, + kMode_Setting, + kNon_Uniform, + kPipe, + kPrimitive, + kRelational_and_Logical, + kReserved, + kTensor, + kType_Declaration, + k_exclude, +}; + +enum Extension : uint32_t { + kSPV_AMDX_shader_enqueue, + kSPV_AMD_gcn_shader, + kSPV_AMD_gpu_shader_half_float, + kSPV_AMD_gpu_shader_half_float_fetch, + kSPV_AMD_gpu_shader_int16, + kSPV_AMD_shader_ballot, + kSPV_AMD_shader_early_and_late_fragment_tests, + kSPV_AMD_shader_explicit_vertex_parameter, + kSPV_AMD_shader_fragment_mask, + kSPV_AMD_shader_image_load_store_lod, + kSPV_AMD_shader_trinary_minmax, + kSPV_AMD_texture_gather_bias_lod, + kSPV_ARM_cooperative_matrix_layouts, + kSPV_ARM_core_builtins, + kSPV_ARM_tensors, + kSPV_EXT_arithmetic_fence, + kSPV_EXT_demote_to_helper_invocation, + kSPV_EXT_descriptor_indexing, + kSPV_EXT_float8, + kSPV_EXT_fragment_fully_covered, + kSPV_EXT_fragment_invocation_density, + kSPV_EXT_fragment_shader_interlock, + kSPV_EXT_mesh_shader, + kSPV_EXT_opacity_micromap, + kSPV_EXT_optnone, + kSPV_EXT_physical_storage_buffer, + kSPV_EXT_relaxed_printf_string_address_space, + kSPV_EXT_replicated_composites, + kSPV_EXT_shader_atomic_float16_add, + kSPV_EXT_shader_atomic_float_add, + kSPV_EXT_shader_atomic_float_min_max, + kSPV_EXT_shader_image_int64, + kSPV_EXT_shader_stencil_export, + kSPV_EXT_shader_tile_image, + kSPV_EXT_shader_viewport_index_layer, + kSPV_GOOGLE_decorate_string, + kSPV_GOOGLE_hlsl_functionality1, + kSPV_GOOGLE_user_type, + kSPV_INTEL_2d_block_io, + kSPV_INTEL_arbitrary_precision_fixed_point, + kSPV_INTEL_arbitrary_precision_floating_point, + kSPV_INTEL_arbitrary_precision_integers, + kSPV_INTEL_bfloat16_conversion, + kSPV_INTEL_bindless_images, + kSPV_INTEL_blocking_pipes, + kSPV_INTEL_cache_controls, + kSPV_INTEL_debug_module, + kSPV_INTEL_device_side_avc_motion_estimation, + kSPV_INTEL_float_controls2, + kSPV_INTEL_fp_fast_math_mode, + kSPV_INTEL_fp_max_error, + kSPV_INTEL_fpga_argument_interfaces, + kSPV_INTEL_fpga_buffer_location, + kSPV_INTEL_fpga_cluster_attributes, + kSPV_INTEL_fpga_dsp_control, + kSPV_INTEL_fpga_invocation_pipelining_attributes, + kSPV_INTEL_fpga_latency_control, + kSPV_INTEL_fpga_loop_controls, + kSPV_INTEL_fpga_memory_accesses, + kSPV_INTEL_fpga_memory_attributes, + kSPV_INTEL_fpga_reg, + kSPV_INTEL_function_pointers, + kSPV_INTEL_global_variable_fpga_decorations, + kSPV_INTEL_global_variable_host_access, + kSPV_INTEL_inline_assembly, + kSPV_INTEL_int4, + kSPV_INTEL_io_pipes, + kSPV_INTEL_kernel_attributes, + kSPV_INTEL_long_composites, + kSPV_INTEL_loop_fuse, + kSPV_INTEL_masked_gather_scatter, + kSPV_INTEL_maximum_registers, + kSPV_INTEL_media_block_io, + kSPV_INTEL_memory_access_aliasing, + kSPV_INTEL_optnone, + kSPV_INTEL_runtime_aligned, + kSPV_INTEL_shader_integer_functions2, + kSPV_INTEL_split_barrier, + kSPV_INTEL_subgroup_buffer_prefetch, + kSPV_INTEL_subgroup_matrix_multiply_accumulate, + kSPV_INTEL_subgroups, + kSPV_INTEL_task_sequence, + kSPV_INTEL_tensor_float32_conversion, + kSPV_INTEL_ternary_bitwise_function, + kSPV_INTEL_unstructured_loop_controls, + kSPV_INTEL_usm_storage_classes, + kSPV_INTEL_variable_length_array, + kSPV_INTEL_vector_compute, + kSPV_KHR_16bit_storage, + kSPV_KHR_8bit_storage, + kSPV_KHR_bfloat16, + kSPV_KHR_bit_instructions, + kSPV_KHR_compute_shader_derivatives, + kSPV_KHR_cooperative_matrix, + kSPV_KHR_device_group, + kSPV_KHR_expect_assume, + kSPV_KHR_float_controls, + kSPV_KHR_float_controls2, + kSPV_KHR_fragment_shader_barycentric, + kSPV_KHR_fragment_shading_rate, + kSPV_KHR_integer_dot_product, + kSPV_KHR_linkonce_odr, + kSPV_KHR_maximal_reconvergence, + kSPV_KHR_multiview, + kSPV_KHR_no_integer_wrap_decoration, + kSPV_KHR_non_semantic_info, + kSPV_KHR_physical_storage_buffer, + kSPV_KHR_post_depth_coverage, + kSPV_KHR_quad_control, + kSPV_KHR_ray_cull_mask, + kSPV_KHR_ray_query, + kSPV_KHR_ray_tracing, + kSPV_KHR_ray_tracing_position_fetch, + kSPV_KHR_relaxed_extended_instruction, + kSPV_KHR_shader_atomic_counter_ops, + kSPV_KHR_shader_ballot, + kSPV_KHR_shader_clock, + kSPV_KHR_shader_draw_parameters, + kSPV_KHR_storage_buffer_storage_class, + kSPV_KHR_subgroup_rotate, + kSPV_KHR_subgroup_uniform_control_flow, + kSPV_KHR_subgroup_vote, + kSPV_KHR_terminate_invocation, + kSPV_KHR_uniform_group_instructions, + kSPV_KHR_untyped_pointers, + kSPV_KHR_variable_pointers, + kSPV_KHR_vulkan_memory_model, + kSPV_KHR_workgroup_memory_explicit_layout, + kSPV_NVX_multiview_per_view_attributes, + kSPV_NV_bindless_texture, + kSPV_NV_cluster_acceleration_structure, + kSPV_NV_compute_shader_derivatives, + kSPV_NV_cooperative_matrix, + kSPV_NV_cooperative_matrix2, + kSPV_NV_cooperative_vector, + kSPV_NV_displacement_micromap, + kSPV_NV_fragment_shader_barycentric, + kSPV_NV_geometry_shader_passthrough, + kSPV_NV_linear_swept_spheres, + kSPV_NV_mesh_shader, + kSPV_NV_raw_access_chains, + kSPV_NV_ray_tracing, + kSPV_NV_ray_tracing_motion_blur, + kSPV_NV_sample_mask_override_coverage, + kSPV_NV_shader_atomic_fp16_vector, + kSPV_NV_shader_image_footprint, + kSPV_NV_shader_invocation_reorder, + kSPV_NV_shader_sm_builtins, + kSPV_NV_shader_subgroup_partitioned, + kSPV_NV_shading_rate, + kSPV_NV_stereo_view_rendering, + kSPV_NV_tensor_addressing, + kSPV_NV_viewport_array2, + kSPV_QCOM_image_processing, + kSPV_QCOM_image_processing2, + kSPV_QCOM_tile_shading, + kSPV_VALIDATOR_ignore_type_decl_unique, +}; diff --git a/libs/bgfx/3rdparty/spirv-tools/include/generated/generators.inc b/libs/bgfx/3rdparty/spirv-tools/include/generated/generators.inc index 35973e1..71fb3c5 100644 --- a/libs/bgfx/3rdparty/spirv-tools/include/generated/generators.inc +++ b/libs/bgfx/3rdparty/spirv-tools/include/generated/generators.inc @@ -38,10 +38,12 @@ {37, "heroseh", "Hero C Compiler", "heroseh Hero C Compiler"}, {38, "Meta", "SparkSL", "Meta SparkSL"}, {39, "SirLynix", "Nazara ShaderLang Compiler", "SirLynix Nazara ShaderLang Compiler"}, -{40, "NVIDIA", "Slang Compiler", "NVIDIA Slang Compiler"}, +{40, "Khronos", "Slang Compiler", "Khronos Slang Compiler"}, {41, "Zig Software Foundation", "Zig Compiler", "Zig Software Foundation Zig Compiler"}, {42, "Rendong Liang", "spq", "Rendong Liang spq"}, {43, "LLVM", "LLVM SPIR-V Backend", "LLVM LLVM SPIR-V Backend"}, {44, "Robert Konrad", "Kongruent", "Robert Konrad Kongruent"}, {45, "Kitsunebi Games", "Nuvk SPIR-V Emitter and DLSL compiler", "Kitsunebi Games Nuvk SPIR-V Emitter and DLSL compiler"}, -{46, "Nintendo", "", "Nintendo"}, \ No newline at end of file +{46, "Nintendo", "", "Nintendo"}, +{47, "ARM", "", "ARM"}, +{48, "Goopax", "", "Goopax"}, \ No newline at end of file diff --git a/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/libspirv.h b/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/libspirv.h index 88bc785..7a076c0 100644 --- a/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/libspirv.h +++ b/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/libspirv.h @@ -321,6 +321,28 @@ typedef enum spv_operand_type_t { SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE, // Enum type from SPV_NV_cooperative_matrix2 SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS, + // Optional types from SPV_INTEL_subgroup_matrix_multiply_accumulate + SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS, + SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS, + + SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT, + SPV_OPERAND_TYPE_COMPONENT_TYPE, + + // From nonesmantic.clspvreflection + SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS, + + // From nonesmantic.shader.debuginfo.100 + SPV_OPERAND_TYPE_SHDEBUG100_BUILD_IDENTIFIER_FLAGS, + SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING, + SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE, + SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY, + SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS, + SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION, + SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER, + + // SPV_ARM_tensors + SPV_OPERAND_TYPE_TENSOR_OPERANDS, + SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS, // This is a sentinel value, and does not represent an operand type. // It should come last. @@ -369,6 +391,18 @@ typedef enum spv_number_kind_t { SPV_NUMBER_FLOATING, } spv_number_kind_t; +// Represent the encoding of floating point values +typedef enum spv_fp_encoding_t { + SPV_FP_ENCODING_UNKNOWN = + 0, // The encoding is not specified. Has to be deduced from bitwidth + SPV_FP_ENCODING_IEEE754_BINARY16, // half float + SPV_FP_ENCODING_IEEE754_BINARY32, // single float + SPV_FP_ENCODING_IEEE754_BINARY64, // double float + SPV_FP_ENCODING_BFLOAT16, + SPV_FP_ENCODING_FLOAT8_E4M3, + SPV_FP_ENCODING_FLOAT8_E5M2, +} spv_fp_encoding_t; + typedef enum spv_text_to_binary_options_t { SPV_TEXT_TO_BINARY_OPTION_NONE = SPV_BIT(0), // Numeric IDs in the binary will have the same values as in the source. @@ -424,6 +458,8 @@ typedef struct spv_parsed_operand_t { spv_number_kind_t number_kind; // The number of bits for a literal number type. uint32_t number_bit_width; + // The encoding used for floating point values + spv_fp_encoding_t fp_encoding; } spv_parsed_operand_t; // An instruction parsed from a binary SPIR-V module. @@ -730,6 +766,15 @@ SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetSkipBlockLayout( SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetAllowLocalSizeId( spv_validator_options options, bool val); +// Allow Offset (in addition to ConstOffset) for texture operations. +// Was added for VK_KHR_maintenance8 +SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetAllowOffsetTextureOperand( + spv_validator_options options, bool val); + +// Allow base operands of some bit operations to be non-32-bit wide. +SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetAllowVulkan32BitBitwise( + spv_validator_options options, bool val); + // Whether friendly names should be used in validation error messages. SPIRV_TOOLS_EXPORT void spvValidatorOptionsSetFriendlyNames( spv_validator_options options, bool val); diff --git a/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/libspirv.hpp b/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/libspirv.hpp index 6a64e93..2cbb749 100644 --- a/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/libspirv.hpp +++ b/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/libspirv.hpp @@ -126,6 +126,17 @@ class SPIRV_TOOLS_EXPORT ValidatorOptions { spvValidatorOptionsSetAllowLocalSizeId(options_, val); } + // Allow Offset (in addition to ConstOffset) for texture + // operations. Was added for VK_KHR_maintenance8 + void SetAllowOffsetTextureOperand(bool val) { + spvValidatorOptionsSetAllowOffsetTextureOperand(options_, val); + } + + // Allow base operands of some bit operations to be non-32-bit wide. + void SetAllowVulkan32BitBitwise(bool val) { + spvValidatorOptionsSetAllowVulkan32BitBitwise(options_, val); + } + // Records whether or not the validator should relax the rules on pointer // usage in logical addressing mode. // diff --git a/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp b/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp index 9427b01..5fb9a33 100644 --- a/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp +++ b/libs/bgfx/3rdparty/spirv-tools/include/spirv-tools/optimizer.hpp @@ -240,7 +240,7 @@ class SPIRV_TOOLS_EXPORT Optimizer { private: struct SPIRV_TOOLS_LOCAL Impl; // Opaque struct for holding internal data. - std::unique_ptr impl_; // Unique pointer to internal data. + std::unique_ptr impl_; // Unique pointer to internal data. }; // Creates a null pass. @@ -655,7 +655,7 @@ Optimizer::PassToken CreateRedundancyEliminationPass(); // element if those elements are accessed individually. The parameter is a // limit on the number of members in the composite variable that the pass will // consider replacing. -Optimizer::PassToken CreateScalarReplacementPass(uint32_t size_limit = 100); +Optimizer::PassToken CreateScalarReplacementPass(uint32_t size_limit = 0); // Create a private to local pass. // This pass looks for variables declared in the private storage class that are @@ -968,6 +968,60 @@ Optimizer::PassToken CreateInvocationInterlockPlacementPass(); // Creates a pass to add/remove maximal reconvergence execution mode. // This pass either adds or removes maximal reconvergence from all entry points. Optimizer::PassToken CreateModifyMaximalReconvergencePass(bool add); + +// Creates a pass to split combined image+sampler variables and function +// parameters into separate image and sampler parts. Binding numbers and +// other decorations are copied. +Optimizer::PassToken CreateSplitCombinedImageSamplerPass(); + +// Creates a pass to remap bindings to avoid conflicts, assuming the module +// is valid for Vulkan. A conflict exits when an entry point uses two distinct +// variables with the same descriptor set and binding. Vulkan allows one kind +// of conflict: when one varible is an image (or array of images), and the +// other is a sampler (or an array of samplers). + +// Conflicts are eliminated by incrementing the binding number of the sampler +// part, and then propagating that increment through variables with +// higher-numbered bindings until no conflict remains. This handles the case +// when multiple shaders may share the same resource variables; this can +// introduce holes in binding slots. +// +// Here's an example where shaders Alpha, Beta, Gamma, Delta collectively use +// resource variables %100, %101, %102, %103, %104 all with the same +// DescriptorSet and with Bindings as in the following table: +// +// Before: +// +// Binding: 0 1 2 3 +// Alpha: %100,%101 +// Beta: %100 %102 +// Gamma: %102 %103 +// Delta: %103 %104 +// +// The Alpha shader has a conflict where variables %100, %101 have the same +// descriptor set and binding. If %100 is a sampler resource variable, then +// the conflict is resolved by incrementing the binding number on %100 from 0 +// to 1. But this causes a new confict for shader Beta because it now uses +// both %100 and %102 with binding number 1. That conflict is resolved by +// incrementing the binding number on its variable that originally appeared +// second (i.e. %102), so %102 gets binding 2. This now produces a conflict +// for Gamma between %102 and %103 using binding number 2. Since %103 originally +// appeared second (in the view from Gamma), the algorithm bumps %103 to binding +// number %103. Now Delta has a conflict between %103 and %104, resulting in +// %104 getting the next binding number, 4. The picture afterward is: +// +// After: +// +// Binding: 0 1 2 3 4 +// Alpha: %101 %100 +// Beta: %100 %102 +// Gamma: %102 %103 +// Delta: %103 %104 +// +// +// This pass assumes binding numbers are not applid via decoration groups +// (OpDecorationGroup). +Optimizer::PassToken CreateResolveBindingConflictsPass(); } // namespace spvtools #endif // INCLUDE_SPIRV_TOOLS_OPTIMIZER_HPP_ diff --git a/libs/bgfx/3rdparty/spirv-tools/source/assembly_grammar.cpp b/libs/bgfx/3rdparty/spirv-tools/source/assembly_grammar.cpp index 0092d01..4886ee6 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/assembly_grammar.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/assembly_grammar.cpp @@ -23,6 +23,7 @@ #include "source/operand.h" #include "source/spirv_target_env.h" #include "source/table.h" +#include "source/table2.h" namespace spvtools { namespace { @@ -35,15 +36,12 @@ namespace { /// /// On success, the value is written to pValue. /// -/// @param[in] operandTable operand lookup table /// @param[in] type of the operand /// @param[in] textValue word of text to be parsed /// @param[out] pValue where the resulting value is written /// /// @return result code -spv_result_t spvTextParseMaskOperand(spv_target_env env, - const spv_operand_table operandTable, - const spv_operand_type_t type, +spv_result_t spvTextParseMaskOperand(const spv_operand_type_t type, const char* textValue, uint32_t* pValue) { if (textValue == nullptr) return SPV_ERROR_INVALID_TEXT; size_t text_length = strlen(textValue); @@ -62,9 +60,9 @@ spv_result_t spvTextParseMaskOperand(spv_target_env env, do { end = std::find(begin, text_end, separator); - spv_operand_desc entry = nullptr; - if (auto error = spvOperandTableNameLookup(env, operandTable, type, begin, - end - begin, &entry)) { + const spvtools::OperandDesc* entry = nullptr; + if (auto error = + spvtools::LookupOperand(type, begin, end - begin, &entry)) { return error; } value |= entry->value; @@ -170,23 +168,20 @@ const size_t kNumOpSpecConstantOpcodes = } // namespace -bool AssemblyGrammar::isValid() const { - return operandTable_ && opcodeTable_ && extInstTable_; -} - CapabilitySet AssemblyGrammar::filterCapsAgainstTargetEnv( const spv::Capability* cap_array, uint32_t count) const { CapabilitySet cap_set; const auto version = spvVersionForTargetEnv(target_env_); for (uint32_t i = 0; i < count; ++i) { - spv_operand_desc entry = {}; - if (SPV_SUCCESS == lookupOperand(SPV_OPERAND_TYPE_CAPABILITY, - static_cast(cap_array[i]), - &entry)) { + const spvtools::OperandDesc* entry = nullptr; + if (SPV_SUCCESS == + spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY, + static_cast(cap_array[i]), &entry)) { // This token is visible in this environment if it's in an appropriate // core version, or it is enabled by a capability or an extension. if ((version >= entry->minVersion && version <= entry->lastVersion) || - entry->numExtensions > 0u || entry->numCapabilities > 0u) { + entry->extensions_range.count() > 0u || + entry->capabilities_range.count() > 0u) { cap_set.insert(cap_array[i]); } } @@ -194,28 +189,13 @@ CapabilitySet AssemblyGrammar::filterCapsAgainstTargetEnv( return cap_set; } -spv_result_t AssemblyGrammar::lookupOpcode(const char* name, - spv_opcode_desc* desc) const { - return spvOpcodeTableNameLookup(target_env_, opcodeTable_, name, desc); -} - -spv_result_t AssemblyGrammar::lookupOpcode(spv::Op opcode, - spv_opcode_desc* desc) const { - return spvOpcodeTableValueLookup(target_env_, opcodeTable_, opcode, desc); -} - -spv_result_t AssemblyGrammar::lookupOperand(spv_operand_type_t type, - const char* name, size_t name_len, - spv_operand_desc* desc) const { - return spvOperandTableNameLookup(target_env_, operandTable_, type, name, - name_len, desc); -} - -spv_result_t AssemblyGrammar::lookupOperand(spv_operand_type_t type, - uint32_t operand, - spv_operand_desc* desc) const { - return spvOperandTableValueLookup(target_env_, operandTable_, type, operand, - desc); +const char* AssemblyGrammar::lookupOperandName(spv_operand_type_t type, + uint32_t operand) const { + const spvtools::OperandDesc* desc = nullptr; + if (spvtools::LookupOperand(type, operand, &desc) != SPV_SUCCESS || !desc) { + return "Unknown"; + } + return desc->name().data(); } spv_result_t AssemblyGrammar::lookupSpecConstantOpcode(const char* name, @@ -245,25 +225,13 @@ spv_result_t AssemblyGrammar::lookupSpecConstantOpcode(spv::Op opcode) const { spv_result_t AssemblyGrammar::parseMaskOperand(const spv_operand_type_t type, const char* textValue, uint32_t* pValue) const { - return spvTextParseMaskOperand(target_env_, operandTable_, type, textValue, - pValue); -} -spv_result_t AssemblyGrammar::lookupExtInst(spv_ext_inst_type_t type, - const char* textValue, - spv_ext_inst_desc* extInst) const { - return spvExtInstTableNameLookup(extInstTable_, type, textValue, extInst); -} - -spv_result_t AssemblyGrammar::lookupExtInst(spv_ext_inst_type_t type, - uint32_t firstWord, - spv_ext_inst_desc* extInst) const { - return spvExtInstTableValueLookup(extInstTable_, type, firstWord, extInst); + return spvTextParseMaskOperand(type, textValue, pValue); } void AssemblyGrammar::pushOperandTypesForMask( const spv_operand_type_t type, const uint32_t mask, spv_operand_pattern_t* pattern) const { - spvPushOperandTypesForMask(target_env_, operandTable_, type, mask, pattern); + spvPushOperandTypesForMask(type, mask, pattern); } } // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/assembly_grammar.h b/libs/bgfx/3rdparty/spirv-tools/source/assembly_grammar.h index 36fdd08..08e10e7 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/assembly_grammar.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/assembly_grammar.h @@ -19,6 +19,7 @@ #include "source/latest_version_spirv_header.h" #include "source/operand.h" #include "source/table.h" +#include "source/util/span.h" #include "spirv-tools/libspirv.h" namespace spvtools { @@ -28,54 +29,28 @@ namespace spvtools { class AssemblyGrammar { public: explicit AssemblyGrammar(const spv_const_context context) - : target_env_(context->target_env), - operandTable_(context->operand_table), - opcodeTable_(context->opcode_table), - extInstTable_(context->ext_inst_table) {} - - // Returns true if the internal tables have been initialized with valid data. - bool isValid() const; + : target_env_(context->target_env) {} // Returns the SPIR-V target environment. spv_target_env target_env() const { return target_env_; } // Removes capabilities not available in the current target environment and // returns the rest. + // TODO(crbug.com/266223071) Remove this. CapabilitySet filterCapsAgainstTargetEnv(const spv::Capability* cap_array, uint32_t count) const; - - // Fills in the desc parameter with the information about the opcode - // of the given name. Returns SPV_SUCCESS if the opcode was found, and - // SPV_ERROR_INVALID_LOOKUP if the opcode does not exist. - spv_result_t lookupOpcode(const char* name, spv_opcode_desc* desc) const; - - // Fills in the desc parameter with the information about the opcode - // of the valid. Returns SPV_SUCCESS if the opcode was found, and - // SPV_ERROR_INVALID_LOOKUP if the opcode does not exist. - spv_result_t lookupOpcode(spv::Op opcode, spv_opcode_desc* desc) const; - - // Fills in the desc parameter with the information about the given - // operand. Returns SPV_SUCCESS if the operand was found, and - // SPV_ERROR_INVALID_LOOKUP otherwise. - spv_result_t lookupOperand(spv_operand_type_t type, const char* name, - size_t name_len, spv_operand_desc* desc) const; - - // Fills in the desc parameter with the information about the given - // operand. Returns SPV_SUCCESS if the operand was found, and - // SPV_ERROR_INVALID_LOOKUP otherwise. - spv_result_t lookupOperand(spv_operand_type_t type, uint32_t operand, - spv_operand_desc* desc) const; + // Removes capabilities not available in the current target environment and + // returns the rest. + CapabilitySet filterCapsAgainstTargetEnv( + const spvtools::utils::Span& caps) const { + return filterCapsAgainstTargetEnv(caps.begin(), + static_cast(caps.size())); + } // Finds operand entry in the grammar table and returns its name. // Returns "Unknown" if not found. const char* lookupOperandName(spv_operand_type_t type, - uint32_t operand) const { - spv_operand_desc desc = nullptr; - if (lookupOperand(type, operand, &desc) != SPV_SUCCESS || !desc) { - return "Unknown"; - } - return desc->name; - } + uint32_t operand) const; // Finds the opcode for the given OpSpecConstantOp opcode name. The name // should not have the "Op" prefix. For example, "IAdd" corresponds to @@ -101,18 +76,6 @@ class AssemblyGrammar { spv_result_t parseMaskOperand(const spv_operand_type_t type, const char* textValue, uint32_t* pValue) const; - // Writes the extended operand with the given type and text to the *extInst - // parameter. - // Returns SPV_SUCCESS if the value could be found. - spv_result_t lookupExtInst(spv_ext_inst_type_t type, const char* textValue, - spv_ext_inst_desc* extInst) const; - - // Writes the extended operand with the given type and first encoded word - // to the *extInst parameter. - // Returns SPV_SUCCESS if the value could be found. - spv_result_t lookupExtInst(spv_ext_inst_type_t type, uint32_t firstWord, - spv_ext_inst_desc* extInst) const; - // Inserts the operands expected after the given typed mask onto the end // of the given pattern. // @@ -129,9 +92,6 @@ class AssemblyGrammar { private: const spv_target_env target_env_; - const spv_operand_table operandTable_; - const spv_opcode_table opcodeTable_; - const spv_ext_inst_table extInstTable_; }; } // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/binary.cpp b/libs/bgfx/3rdparty/spirv-tools/source/binary.cpp index ed57498..180d0a9 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/binary.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/binary.cpp @@ -33,6 +33,7 @@ #include "source/operand.h" #include "source/spirv_constant.h" #include "source/spirv_endian.h" +#include "source/table2.h" #include "source/util/string_utils.h" spv_result_t spvBinaryHeaderGet(const spv_const_binary binary, @@ -189,6 +190,7 @@ class Parser { struct NumberType { spv_number_kind_t type; uint32_t bit_width; + spv_fp_encoding_t encoding; }; // The state used to parse a single SPIR-V binary module. @@ -317,8 +319,8 @@ spv_result_t Parser::parseInstruction() { return diagnostic() << "Invalid instruction word count: " << inst_word_count; } - spv_opcode_desc opcode_desc; - if (grammar_.lookupOpcode(static_cast(inst.opcode), &opcode_desc)) + const spvtools::InstructionDesc* opcode_desc = nullptr; + if (spvtools::LookupOpcode(static_cast(inst.opcode), &opcode_desc)) return diagnostic() << "Invalid opcode: " << inst.opcode; // Advance past the opcode word. But remember the of the start @@ -334,16 +336,15 @@ spv_result_t Parser::parseInstruction() { // ExecutionMode), or for extended instructions that may have their // own operands depending on the selected extended instruction. _.expected_operands.clear(); - for (auto i = 0; i < opcode_desc->numTypes; i++) - _.expected_operands.push_back( - opcode_desc->operandTypes[opcode_desc->numTypes - i - 1]); + + spvPushOperandTypes(opcode_desc->operands(), &_.expected_operands); while (_.word_index < inst_offset + inst_word_count) { const uint16_t inst_word_index = uint16_t(_.word_index - inst_offset); if (_.expected_operands.empty()) { - return diagnostic() << "Invalid instruction Op" << opcode_desc->name - << " starting at word " << inst_offset - << ": expected no more operands after " + return diagnostic() << "Invalid instruction Op" + << opcode_desc->name().data() << " starting at word " + << inst_offset << ": expected no more operands after " << inst_word_index << " words, but stated word count is " << inst_word_count << "."; @@ -362,15 +363,15 @@ spv_result_t Parser::parseInstruction() { if (!_.expected_operands.empty() && !spvOperandIsOptional(_.expected_operands.back())) { return diagnostic() << "End of input reached while decoding Op" - << opcode_desc->name << " starting at word " + << opcode_desc->name().data() << " starting at word " << inst_offset << ": expected more operands after " << inst_word_count << " words."; } if ((inst_offset + inst_word_count) != _.word_index) { - return diagnostic() << "Invalid word count: Op" << opcode_desc->name - << " starting at word " << inst_offset - << " says it has " << inst_word_count + return diagnostic() << "Invalid word count: Op" + << opcode_desc->name().data() << " starting at word " + << inst_offset << " says it has " << inst_word_count << " words, but found " << _.word_index - inst_offset << " words instead."; } @@ -385,8 +386,6 @@ spv_result_t Parser::parseInstruction() { assert(_.requires_endian_conversion || (_.endian_converted_words.size() == 1)); - recordNumberType(inst_offset, &inst); - if (_.requires_endian_conversion) { // We must wait until here to set this pointer, because the vector might // have been be resized while we accumulated its elements. @@ -398,6 +397,8 @@ spv_result_t Parser::parseInstruction() { } inst.num_words = inst_word_count; + recordNumberType(inst_offset, &inst); + // We must wait until here to set this pointer, because the vector might // have been be resized while we accumulated its elements. inst.operands = _.operands.data(); @@ -496,11 +497,12 @@ spv_result_t Parser::parseOperand(size_t inst_offset, case SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER: { assert(spvIsExtendedInstruction(opcode)); assert(inst->ext_inst_type != SPV_EXT_INST_TYPE_NONE); - spv_ext_inst_desc ext_inst; - if (grammar_.lookupExtInst(inst->ext_inst_type, word, &ext_inst) == + + const spvtools::ExtInstDesc* desc = nullptr; + if (spvtools::LookupExtInst(inst->ext_inst_type, word, &desc) == SPV_SUCCESS) { // if we know about this ext inst, push the expected operands - spvPushOperandTypes(ext_inst->operandTypes, expected_operands); + spvPushOperandTypes(desc->operands(), expected_operands); } else { // if we don't know this extended instruction and the set isn't // non-semantic, we cannot process further @@ -522,8 +524,8 @@ spv_result_t Parser::parseOperand(size_t inst_offset, return diagnostic() << "Invalid " << spvOperandTypeStr(type) << ": " << word; } - spv_opcode_desc opcode_entry = nullptr; - if (grammar_.lookupOpcode(spv::Op(word), &opcode_entry)) { + const spvtools::InstructionDesc* opcode_entry = nullptr; + if (spvtools::LookupOpcode(spv::Op(word), &opcode_entry)) { return diagnostic(SPV_ERROR_INTERNAL) << "OpSpecConstant opcode table out of sync"; } @@ -532,8 +534,9 @@ spv_result_t Parser::parseOperand(size_t inst_offset, // operants for the opcode. assert(opcode_entry->hasType); assert(opcode_entry->hasResult); - assert(opcode_entry->numTypes >= 2); - spvPushOperandTypes(opcode_entry->operandTypes + 2, expected_operands); + assert(opcode_entry->operands().size() >= 2); + spvPushOperandTypes(opcode_entry->operands().subspan(2), + expected_operands); } break; case SPV_OPERAND_TYPE_LITERAL_INTEGER: @@ -687,19 +690,19 @@ spv_result_t Parser::parseOperand(size_t inst_offset, if (type == SPV_OPERAND_TYPE_OPTIONAL_FPENCODING) parsed_operand.type = SPV_OPERAND_TYPE_FPENCODING; - spv_operand_desc entry; - if (grammar_.lookupOperand(type, word, &entry)) { + const spvtools::OperandDesc* entry = nullptr; + if (spvtools::LookupOperand(type, word, &entry)) { return diagnostic() << "Invalid " << spvOperandTypeStr(parsed_operand.type) << " operand: " << word; } // Prepare to accept operands to this operand, if needed. - spvPushOperandTypes(entry->operandTypes, expected_operands); + spvPushOperandTypes(entry->operands(), expected_operands); } break; case SPV_OPERAND_TYPE_SOURCE_LANGUAGE: { - spv_operand_desc entry; - if (grammar_.lookupOperand(type, word, &entry)) { + const spvtools::OperandDesc* entry = nullptr; + if (spvtools::LookupOperand(type, word, &entry)) { return diagnostic() << "Invalid " << spvOperandTypeStr(parsed_operand.type) << " operand: " << word @@ -709,7 +712,7 @@ spv_result_t Parser::parseOperand(size_t inst_offset, "SPIRV-Headers"; } // Prepare to accept operands to this operand, if needed. - spvPushOperandTypes(entry->operandTypes, expected_operands); + spvPushOperandTypes(entry->operands(), expected_operands); } break; case SPV_OPERAND_TYPE_FP_FAST_MATH_MODE: @@ -718,6 +721,8 @@ spv_result_t Parser::parseOperand(size_t inst_offset, case SPV_OPERAND_TYPE_IMAGE: case SPV_OPERAND_TYPE_OPTIONAL_IMAGE: case SPV_OPERAND_TYPE_MEMORY_ACCESS: + case SPV_OPERAND_TYPE_TENSOR_OPERANDS: + case SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS: case SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS: case SPV_OPERAND_TYPE_OPTIONAL_RAW_ACCESS_CHAIN_OPERANDS: case SPV_OPERAND_TYPE_SELECTION_CONTROL: @@ -726,7 +731,9 @@ spv_result_t Parser::parseOperand(size_t inst_offset, case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS: case SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS: case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE: - case SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS: { + case SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS: + case SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: + case SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: { // This operand is a mask. // Map an optional operand type to its corresponding concrete type. @@ -738,6 +745,11 @@ spv_result_t Parser::parseOperand(size_t inst_offset, parsed_operand.type = SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS; if (type == SPV_OPERAND_TYPE_OPTIONAL_RAW_ACCESS_CHAIN_OPERANDS) parsed_operand.type = SPV_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS; + if (type == SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS) + parsed_operand.type = + SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS; + if (type == SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS) + parsed_operand.type = SPV_OPERAND_TYPE_TENSOR_OPERANDS; // Check validity of set mask bits. Also prepare for operands for those // masks if they have any. To get operand order correct, scan from @@ -748,23 +760,23 @@ spv_result_t Parser::parseOperand(size_t inst_offset, uint32_t remaining_word = word; for (uint32_t mask = (1u << 31); remaining_word; mask >>= 1) { if (remaining_word & mask) { - spv_operand_desc entry; - if (grammar_.lookupOperand(type, mask, &entry)) { + const spvtools::OperandDesc* entry = nullptr; + if (spvtools::LookupOperand(type, mask, &entry)) { return diagnostic() << "Invalid " << spvOperandTypeStr(parsed_operand.type) << " operand: " << word << " has invalid mask component " << mask; } remaining_word ^= mask; - spvPushOperandTypes(entry->operandTypes, expected_operands); + spvPushOperandTypes(entry->operands(), expected_operands); } } if (word == 0) { // An all-zeroes mask *might* also be valid. - spv_operand_desc entry; - if (SPV_SUCCESS == grammar_.lookupOperand(type, 0, &entry)) { + const spvtools::OperandDesc* entry = nullptr; + if (SPV_SUCCESS == spvtools::LookupOperand(type, 0, &entry)) { // Prepare for its operands, if any. - spvPushOperandTypes(entry->operandTypes, expected_operands); + spvPushOperandTypes(entry->operands(), expected_operands); } } } break; @@ -822,6 +834,7 @@ spv_result_t Parser::setNumericTypeInfoForType( parsed_operand->number_kind = info.type; parsed_operand->number_bit_width = info.bit_width; + parsed_operand->fp_encoding = info.encoding; // Round up the word count. parsed_operand->num_words = static_cast((info.bit_width + 31) / 32); return SPV_SUCCESS; @@ -839,6 +852,17 @@ void Parser::recordNumberType(size_t inst_offset, } else if (spv::Op::OpTypeFloat == opcode) { info.type = SPV_NUMBER_FLOATING; info.bit_width = peekAt(inst_offset + 2); + if (inst->num_words >= 4) { + const spvtools::OperandDesc* desc; + spv_result_t status = spvtools::LookupOperand( + SPV_OPERAND_TYPE_FPENCODING, peekAt(inst_offset + 3), &desc); + if (status == SPV_SUCCESS) { + info.encoding = spvFPEncodingFromOperandFPEncoding( + static_cast(desc->value)); + } else { + info.encoding = SPV_FP_ENCODING_UNKNOWN; + } + } } // The *result* Id of a type generating instruction is the type Id. _.type_id_to_number_type_info[inst->result_id] = info; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/cfa.h b/libs/bgfx/3rdparty/spirv-tools/source/cfa.h index 9ae3e39..dc8b9ba 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/cfa.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/cfa.h @@ -15,6 +15,8 @@ #ifndef SOURCE_CFA_H_ #define SOURCE_CFA_H_ +#include + #include #include #include diff --git a/libs/bgfx/3rdparty/spirv-tools/source/diff/diff.cpp b/libs/bgfx/3rdparty/spirv-tools/source/diff/diff.cpp index 6269af5..7fd21f3 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/diff/diff.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/diff/diff.cpp @@ -67,7 +67,9 @@ void CompactIds(std::vector& ids) { ids.resize(write_index); } -// A mapping between src and dst ids. +// A mapping from ids in one module to ids in the other. +// +// Differ contains two of these, for src->dst and dst->src. class IdMap { public: IdMap(size_t id_bound) { id_map_.resize(id_bound, 0); } @@ -190,6 +192,7 @@ class SrcDstIdMap { IdMap dst_to_src_; }; +// Mappings from ids to instructions and metadata, for a single module's ids. struct IdInstructions { IdInstructions(const opt::Module* module) : inst_map_(module->IdBound(), nullptr), @@ -198,6 +201,10 @@ struct IdInstructions { forward_pointer_map_(module->IdBound()) { // Map ids from all sections to instructions that define them. MapIdsToInstruction(module->ext_inst_imports()); + MapIdsToInstruction(module->debugs1()); + MapIdsToInstruction(module->debugs2()); + MapIdsToInstruction(module->debugs3()); + MapIdsToInstruction(module->ext_inst_debuginfo()); MapIdsToInstruction(module->types_values()); for (const opt::Function& function : *module) { function.ForEachInst( @@ -321,6 +328,8 @@ class Differ { // Get various properties from an id. These Helper functions are passed to // `GroupIds` and `GroupIdsAndMatch` below (as the `get_group` argument). uint32_t GroupIdsHelperGetTypeId(const IdInstructions& id_to, uint32_t id); + uint32_t GroupIdsHelperGetFunctionTypeId(const IdInstructions& id_to, + uint32_t id); spv::StorageClass GroupIdsHelperGetTypePointerStorageClass( const IdInstructions& id_to, uint32_t id); spv::Op GroupIdsHelperGetTypePointerTypeOp(const IdInstructions& id_to, @@ -883,6 +892,17 @@ uint32_t Differ::GroupIdsHelperGetTypeId(const IdInstructions& id_to, return GetInst(id_to, id)->type_id(); } +// Return an `OpFunction` instruction's full `OpTypeFunction` type, +// which includes parameter types. +// +// `GroupIdsHelperGetTypeId` applied to an `OpFunction` only gets the +// function's return type, so this is a slightly more precise way to +// match up functions by signature. +uint32_t Differ::GroupIdsHelperGetFunctionTypeId(const IdInstructions& id_to, + uint32_t id) { + return GetInst(id_to, id)->GetSingleWordOperand(3); +} + spv::StorageClass Differ::GroupIdsHelperGetTypePointerStorageClass( const IdInstructions& id_to, uint32_t id) { const opt::Instruction* inst = GetInst(id_to, id); @@ -902,6 +922,24 @@ spv::Op Differ::GroupIdsHelperGetTypePointerTypeOp(const IdInstructions& id_to, return type_inst->opcode(); } +// Group unmatched ids in `ids` according to some characteristic, +// determined by `get_group`. +// +// Using `get_group` to compute some sort of key for each id, set +// `groups` to map each key to all the ids that have that key. +// +// For example, to group ids by name, pass `Differ::GetName` as +// `get_group`. This will fill `groups` with a map from each name to +// all the ids with that name. +// +// Under the assumption that we're trying to establish new pairings, +// ids that are already paired are omitted from `groups`. +// +// The `is_src` parameter indicates whether `ids` are drawn from the +// source module or the destination module. +// +// The template parameter `T` is the key type, like `std::string` or +// `uint32_t`. template void Differ::GroupIds(const IdGroup& ids, bool is_src, std::map* groups, @@ -924,6 +962,10 @@ void Differ::GroupIds(const IdGroup& ids, bool is_src, } } +// Group `src_ids` and `dst_ids` according to `get_group`, and then use +// `match_group` to pair up ids in corresponding groups. +// +// Don't try to pair ids in groups whose key is `invalid_group_key`. template void Differ::GroupIdsAndMatch( const IdGroup& src_ids, const IdGroup& dst_ids, T invalid_group_key, @@ -2483,7 +2525,7 @@ void Differ::MatchFunctions() { // If there are multiple functions with the same name, group them by // type, and match only if the types match (and are unique). - GroupIdsAndMatch(src_group, dst_group, 0, + GroupIdsAndMatchByMappedId(src_group, dst_group, &Differ::GroupIdsHelperGetTypeId, [this](const IdGroup& src_group_by_type_id, const IdGroup& dst_group_by_type_id) { @@ -2526,9 +2568,19 @@ void Differ::MatchFunctions() { dst_match_result, 0); } - // Best effort match functions with matching type. - GroupIdsAndMatch( - src_func_ids, dst_func_ids, 0, &Differ::GroupIdsHelperGetTypeId, + // Best effort match functions with matching return and argument types. + GroupIdsAndMatchByMappedId( + src_func_ids, dst_func_ids, &Differ::GroupIdsHelperGetFunctionTypeId, + [this](const IdGroup& src_group_by_func_type_id, + const IdGroup& dst_group_by_func_type_id) { + BestEffortMatchFunctions(src_group_by_func_type_id, + dst_group_by_func_type_id, src_func_insts_, + dst_func_insts_); + }); + + // Best effort match functions with matching return types. + GroupIdsAndMatchByMappedId( + src_func_ids, dst_func_ids, &Differ::GroupIdsHelperGetTypeId, [this](const IdGroup& src_group_by_type_id, const IdGroup& dst_group_by_type_id) { BestEffortMatchFunctions(src_group_by_type_id, dst_group_by_type_id, @@ -2746,30 +2798,7 @@ spv_result_t Differ::Output() { src_id_to_.inst_map_.resize(id_map_.SrcToDstMap().IdBound(), nullptr); dst_id_to_.inst_map_.resize(id_map_.DstToSrcMap().IdBound(), nullptr); - const spv_target_env target_env = SPV_ENV_UNIVERSAL_1_6; - spv_opcode_table opcode_table; - spv_operand_table operand_table; - spv_ext_inst_table ext_inst_table; - spv_result_t result; - - result = spvOpcodeTableGet(&opcode_table, target_env); - if (result != SPV_SUCCESS) return result; - - result = spvOperandTableGet(&operand_table, target_env); - if (result != SPV_SUCCESS) return result; - - result = spvExtInstTableGet(&ext_inst_table, target_env); - if (result != SPV_SUCCESS) return result; - - spv_context_t context{ - target_env, - opcode_table, - operand_table, - ext_inst_table, - }; - - const AssemblyGrammar grammar(&context); - if (!grammar.isValid()) return SPV_ERROR_INVALID_TABLE; + spv_context_t context{SPV_ENV_UNIVERSAL_1_6, nullptr}; uint32_t disassembly_options = SPV_BINARY_TO_TEXT_OPTION_PRINT; if (options_.indent) { @@ -2777,7 +2806,7 @@ spv_result_t Differ::Output() { } NameMapper name_mapper = GetTrivialNameMapper(); - disassemble::InstructionDisassembler dis(grammar, out_, disassembly_options, + disassemble::InstructionDisassembler dis(out_, disassembly_options, name_mapper); if (!options_.no_header) { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/disassemble.cpp b/libs/bgfx/3rdparty/spirv-tools/source/disassemble.cpp index 93791a0..2d9bb0f 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/disassemble.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/disassemble.cpp @@ -31,7 +31,6 @@ #include #include -#include "source/assembly_grammar.h" #include "source/binary.h" #include "source/diagnostic.h" #include "source/ext_inst.h" @@ -40,6 +39,7 @@ #include "source/print.h" #include "source/spirv_constant.h" #include "source/spirv_endian.h" +#include "source/table2.h" #include "source/util/hex_float.h" #include "source/util/make_unique.h" #include "spirv-tools/libspirv.h" @@ -115,8 +115,7 @@ struct ControlFlowGraph { // representation. class Disassembler { public: - Disassembler(const AssemblyGrammar& grammar, uint32_t options, - NameMapper name_mapper) + Disassembler(uint32_t options, NameMapper name_mapper) : print_(spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_PRINT, options)), nested_indent_( spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_NESTED_INDENT, options)), @@ -124,7 +123,7 @@ class Disassembler { spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_REORDER_BLOCKS, options)), text_(), out_(print_ ? out_stream() : out_stream(text_)), - instruction_disassembler_(grammar, out_.get(), options, name_mapper), + instruction_disassembler_(out_.get(), options, name_mapper), header_(!spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_NO_HEADER, options)), byte_offset_(0) {} @@ -624,12 +623,10 @@ constexpr uint32_t kCommentColumn = 50; } // namespace namespace disassemble { -InstructionDisassembler::InstructionDisassembler(const AssemblyGrammar& grammar, - std::ostream& stream, +InstructionDisassembler::InstructionDisassembler(std::ostream& stream, uint32_t options, NameMapper name_mapper) - : grammar_(grammar), - stream_(stream), + : stream_(stream), print_(spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_PRINT, options)), color_(spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_COLOR, options)), indent_(spvIsInBitfield(SPV_BINARY_TO_TEXT_OPTION_INDENT, options) @@ -771,7 +768,7 @@ void InstructionDisassembler::EmitInstructionImpl( {line_length + 2, last_instruction_comment_alignment_, kCommentColumn}); // Round up the alignment to a multiple of 4 for more niceness. align = (align + 3) & ~0x3u; - last_instruction_comment_alignment_ = align; + last_instruction_comment_alignment_ = std::min({align, 256u}); stream_ << std::string(align - line_length, ' ') << "; " << comments.str(); } else { @@ -870,11 +867,10 @@ void InstructionDisassembler::EmitOperand(std::ostream& stream, stream << "%" << name_mapper_(word); break; case SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER: { - spv_ext_inst_desc ext_inst; SetRed(stream); - if (grammar_.lookupExtInst(inst.ext_inst_type, word, &ext_inst) == - SPV_SUCCESS) { - stream << ext_inst->name; + const ExtInstDesc* desc = nullptr; + if (LookupExtInst(inst.ext_inst_type, word, &desc) == SPV_SUCCESS) { + stream << desc->name().data(); } else { if (!spvExtInstIsNonSemantic(inst.ext_inst_type)) { assert(false && "should have caught this earlier"); @@ -885,11 +881,11 @@ void InstructionDisassembler::EmitOperand(std::ostream& stream, } } break; case SPV_OPERAND_TYPE_SPEC_CONSTANT_OP_NUMBER: { - spv_opcode_desc opcode_desc; - if (grammar_.lookupOpcode(spv::Op(word), &opcode_desc)) + const spvtools::InstructionDesc* opcodeEntry = nullptr; + if (LookupOpcode(spv::Op(word), &opcodeEntry)) assert(false && "should have caught this earlier"); SetRed(stream); - stream << opcode_desc->name; + stream << opcodeEntry->name().data(); } break; case SPV_OPERAND_TYPE_LITERAL_INTEGER: case SPV_OPERAND_TYPE_TYPED_LITERAL_NUMBER: @@ -948,10 +944,10 @@ void InstructionDisassembler::EmitOperand(std::ostream& stream, case SPV_OPERAND_TYPE_QUANTIZATION_MODES: case SPV_OPERAND_TYPE_FPENCODING: case SPV_OPERAND_TYPE_OVERFLOW_MODES: { - spv_operand_desc entry; - if (grammar_.lookupOperand(operand.type, word, &entry)) + const spvtools::OperandDesc* entry = nullptr; + if (spvtools::LookupOperand(operand.type, word, &entry)) assert(false && "should have caught this earlier"); - stream << entry->name; + stream << entry->name().data(); } break; case SPV_OPERAND_TYPE_FP_FAST_MATH_MODE: case SPV_OPERAND_TYPE_FUNCTION_CONTROL: @@ -968,10 +964,10 @@ void InstructionDisassembler::EmitOperand(std::ostream& stream, if (spvOperandIsConcreteMask(operand.type)) { EmitMaskOperand(stream, operand.type, word); } else if (spvOperandIsConcrete(operand.type)) { - spv_operand_desc entry; - if (grammar_.lookupOperand(operand.type, word, &entry)) + const spvtools::OperandDesc* entry = nullptr; + if (spvtools::LookupOperand(operand.type, word, &entry)) assert(false && "should have caught this earlier"); - stream << entry->name; + stream << entry->name().data(); } else { assert(false && "unhandled or invalid case"); } @@ -991,20 +987,20 @@ void InstructionDisassembler::EmitMaskOperand(std::ostream& stream, for (mask = 1; remaining_word; mask <<= 1) { if (remaining_word & mask) { remaining_word ^= mask; - spv_operand_desc entry; - if (grammar_.lookupOperand(type, mask, &entry)) + const spvtools::OperandDesc* entry = nullptr; + if (spvtools::LookupOperand(type, mask, &entry)) assert(false && "should have caught this earlier"); if (num_emitted) stream << "|"; - stream << entry->name; + stream << entry->name().data(); num_emitted++; } } if (!num_emitted) { // An operand value of 0 was provided, so represent it by the name // of the 0 value. In many cases, that's "None". - spv_operand_desc entry; - if (SPV_SUCCESS == grammar_.lookupOperand(type, 0, &entry)) - stream << entry->name; + const spvtools::OperandDesc* entry = nullptr; + if (SPV_SUCCESS == spvtools::LookupOperand(type, 0, &entry)) + stream << entry->name().data(); } } @@ -1042,11 +1038,6 @@ std::string spvInstructionBinaryToText(const spv_target_env env, const size_t wordCount, const uint32_t options) { spv_context context = spvContextCreate(env); - const AssemblyGrammar grammar(context); - if (!grammar.isValid()) { - spvContextDestroy(context); - return ""; - } // Generate friendly names for Ids if requested. std::unique_ptr friendly_mapper; @@ -1057,7 +1048,7 @@ std::string spvInstructionBinaryToText(const spv_target_env env, } // Now disassemble! - Disassembler disassembler(grammar, options, name_mapper); + Disassembler disassembler(options, name_mapper); WrappedDisassembler wrapped(&disassembler, instCode, instWordCount); spvBinaryParse(context, &wrapped, code, wordCount, DisassembleTargetHeader, DisassembleTargetInstruction, nullptr); @@ -1086,9 +1077,6 @@ spv_result_t spvBinaryToText(const spv_const_context context, spvtools::UseDiagnosticAsMessageConsumer(&hijack_context, pDiagnostic); } - const spvtools::AssemblyGrammar grammar(&hijack_context); - if (!grammar.isValid()) return SPV_ERROR_INVALID_TABLE; - // Generate friendly names for Ids if requested. std::unique_ptr friendly_mapper; spvtools::NameMapper name_mapper = spvtools::GetTrivialNameMapper(); @@ -1099,7 +1087,7 @@ spv_result_t spvBinaryToText(const spv_const_context context, } // Now disassemble! - spvtools::Disassembler disassembler(grammar, options, name_mapper); + spvtools::Disassembler disassembler(options, name_mapper); if (auto error = spvBinaryParse(&hijack_context, &disassembler, code, wordCount, spvtools::DisassembleHeader, diff --git a/libs/bgfx/3rdparty/spirv-tools/source/disassemble.h b/libs/bgfx/3rdparty/spirv-tools/source/disassemble.h index b6d13c6..08c3738 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/disassemble.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/disassemble.h @@ -37,7 +37,6 @@ std::string spvInstructionBinaryToText(const spv_target_env env, const size_t word_count, const uint32_t options); -class AssemblyGrammar; namespace disassemble { // Shared code with other tools (than the disassembler) that might need to @@ -45,8 +44,8 @@ namespace disassemble { // binary for an instruction to its assembly representation. class InstructionDisassembler { public: - InstructionDisassembler(const AssemblyGrammar& grammar, std::ostream& stream, - uint32_t options, NameMapper name_mapper); + InstructionDisassembler(std::ostream& stream, uint32_t options, + NameMapper name_mapper); // Emits the assembly header for the module. void EmitHeaderSpirv(); @@ -104,7 +103,6 @@ class InstructionDisassembler { // |id_comments_|. void GenerateCommentForDecoratedId(const spv_parsed_instruction_t& inst); - const spvtools::AssemblyGrammar& grammar_; std::ostream& stream_; const bool print_; // Should we also print to the standard output stream? const bool color_; // Should we print in colour? diff --git a/libs/bgfx/3rdparty/spirv-tools/source/ext_inst.cpp b/libs/bgfx/3rdparty/spirv-tools/source/ext_inst.cpp index f2ff63f..c8fe8bb 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/ext_inst.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/ext_inst.cpp @@ -17,98 +17,7 @@ #include // DebugInfo extended instruction set. -// See https://www.khronos.org/registry/spir-v/specs/1.0/DebugInfo.html -// TODO(dneto): DebugInfo.h should probably move to SPIRV-Headers. -#include "DebugInfo.h" - -#include "source/latest_version_glsl_std_450_header.h" -#include "source/latest_version_opencl_std_header.h" -#include "source/macro.h" -#include "source/spirv_definition.h" - -#include "debuginfo.insts.inc" -#include "glsl.std.450.insts.inc" -#include "nonsemantic.clspvreflection.insts.inc" -#include "nonsemantic.shader.debuginfo.100.insts.inc" -#include "nonsemantic.vkspreflection.insts.inc" -#include "opencl.debuginfo.100.insts.inc" -#include "opencl.std.insts.inc" - -#include "spirv-tools/libspirv.h" -#include "spv-amd-gcn-shader.insts.inc" -#include "spv-amd-shader-ballot.insts.inc" -#include "spv-amd-shader-explicit-vertex-parameter.insts.inc" -#include "spv-amd-shader-trinary-minmax.insts.inc" - -static const spv_ext_inst_group_t kGroups_1_0[] = { - {SPV_EXT_INST_TYPE_GLSL_STD_450, ARRAY_SIZE(glsl_entries), glsl_entries}, - {SPV_EXT_INST_TYPE_OPENCL_STD, ARRAY_SIZE(opencl_entries), opencl_entries}, - {SPV_EXT_INST_TYPE_SPV_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER, - ARRAY_SIZE(spv_amd_shader_explicit_vertex_parameter_entries), - spv_amd_shader_explicit_vertex_parameter_entries}, - {SPV_EXT_INST_TYPE_SPV_AMD_SHADER_TRINARY_MINMAX, - ARRAY_SIZE(spv_amd_shader_trinary_minmax_entries), - spv_amd_shader_trinary_minmax_entries}, - {SPV_EXT_INST_TYPE_SPV_AMD_GCN_SHADER, - ARRAY_SIZE(spv_amd_gcn_shader_entries), spv_amd_gcn_shader_entries}, - {SPV_EXT_INST_TYPE_SPV_AMD_SHADER_BALLOT, - ARRAY_SIZE(spv_amd_shader_ballot_entries), spv_amd_shader_ballot_entries}, - {SPV_EXT_INST_TYPE_DEBUGINFO, ARRAY_SIZE(debuginfo_entries), - debuginfo_entries}, - {SPV_EXT_INST_TYPE_OPENCL_DEBUGINFO_100, - ARRAY_SIZE(opencl_debuginfo_100_entries), opencl_debuginfo_100_entries}, - {SPV_EXT_INST_TYPE_NONSEMANTIC_SHADER_DEBUGINFO_100, - ARRAY_SIZE(nonsemantic_shader_debuginfo_100_entries), - nonsemantic_shader_debuginfo_100_entries}, - {SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION, - ARRAY_SIZE(nonsemantic_clspvreflection_entries), - nonsemantic_clspvreflection_entries}, - {SPV_EXT_INST_TYPE_NONSEMANTIC_VKSPREFLECTION, - ARRAY_SIZE(nonsemantic_vkspreflection_entries), - nonsemantic_vkspreflection_entries}, -}; - -static const spv_ext_inst_table_t kTable_1_0 = {ARRAY_SIZE(kGroups_1_0), - kGroups_1_0}; - -spv_result_t spvExtInstTableGet(spv_ext_inst_table* pExtInstTable, - spv_target_env env) { - if (!pExtInstTable) return SPV_ERROR_INVALID_POINTER; - - switch (env) { - // The extended instruction sets are all version 1.0 so far. - case SPV_ENV_UNIVERSAL_1_0: - case SPV_ENV_VULKAN_1_0: - case SPV_ENV_UNIVERSAL_1_1: - case SPV_ENV_UNIVERSAL_1_2: - case SPV_ENV_OPENCL_1_2: - case SPV_ENV_OPENCL_EMBEDDED_1_2: - case SPV_ENV_OPENCL_2_0: - case SPV_ENV_OPENCL_EMBEDDED_2_0: - case SPV_ENV_OPENCL_2_1: - case SPV_ENV_OPENCL_EMBEDDED_2_1: - case SPV_ENV_OPENCL_2_2: - case SPV_ENV_OPENCL_EMBEDDED_2_2: - case SPV_ENV_OPENGL_4_0: - case SPV_ENV_OPENGL_4_1: - case SPV_ENV_OPENGL_4_2: - case SPV_ENV_OPENGL_4_3: - case SPV_ENV_OPENGL_4_5: - case SPV_ENV_UNIVERSAL_1_3: - case SPV_ENV_VULKAN_1_1: - case SPV_ENV_VULKAN_1_1_SPIRV_1_4: - case SPV_ENV_UNIVERSAL_1_4: - case SPV_ENV_UNIVERSAL_1_5: - case SPV_ENV_VULKAN_1_2: - case SPV_ENV_UNIVERSAL_1_6: - case SPV_ENV_VULKAN_1_3: - case SPV_ENV_VULKAN_1_4: - *pExtInstTable = &kTable_1_0; - return SPV_SUCCESS; - default: - return SPV_ERROR_INVALID_TABLE; - } -} +// #include "DebugInfo.h" spv_ext_inst_type_t spvExtInstImportTypeGet(const char* name) { // The names are specified by the respective extension instruction @@ -172,47 +81,3 @@ bool spvExtInstIsDebugInfo(const spv_ext_inst_type_t type) { } return false; } - -spv_result_t spvExtInstTableNameLookup(const spv_ext_inst_table table, - const spv_ext_inst_type_t type, - const char* name, - spv_ext_inst_desc* pEntry) { - if (!table) return SPV_ERROR_INVALID_TABLE; - if (!pEntry) return SPV_ERROR_INVALID_POINTER; - - for (uint32_t groupIndex = 0; groupIndex < table->count; groupIndex++) { - const auto& group = table->groups[groupIndex]; - if (type != group.type) continue; - for (uint32_t index = 0; index < group.count; index++) { - const auto& entry = group.entries[index]; - if (!strcmp(name, entry.name)) { - *pEntry = &entry; - return SPV_SUCCESS; - } - } - } - - return SPV_ERROR_INVALID_LOOKUP; -} - -spv_result_t spvExtInstTableValueLookup(const spv_ext_inst_table table, - const spv_ext_inst_type_t type, - const uint32_t value, - spv_ext_inst_desc* pEntry) { - if (!table) return SPV_ERROR_INVALID_TABLE; - if (!pEntry) return SPV_ERROR_INVALID_POINTER; - - for (uint32_t groupIndex = 0; groupIndex < table->count; groupIndex++) { - const auto& group = table->groups[groupIndex]; - if (type != group.type) continue; - for (uint32_t index = 0; index < group.count; index++) { - const auto& entry = group.entries[index]; - if (value == entry.ext_inst) { - *pEntry = &entry; - return SPV_SUCCESS; - } - } - } - - return SPV_ERROR_INVALID_LOOKUP; -} diff --git a/libs/bgfx/3rdparty/spirv-tools/source/ext_inst.h b/libs/bgfx/3rdparty/spirv-tools/source/ext_inst.h index 4027f4c..3c3150b 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/ext_inst.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/ext_inst.h @@ -27,20 +27,4 @@ bool spvExtInstIsNonSemantic(const spv_ext_inst_type_t type); // Returns true if the extended instruction set is debug info bool spvExtInstIsDebugInfo(const spv_ext_inst_type_t type); -// Finds the named extended instruction of the given type in the given extended -// instruction table. On success, returns SPV_SUCCESS and writes a handle of -// the instruction entry into *entry. -spv_result_t spvExtInstTableNameLookup(const spv_ext_inst_table table, - const spv_ext_inst_type_t type, - const char* name, - spv_ext_inst_desc* entry); - -// Finds the extended instruction of the given type in the given extended -// instruction table by value. On success, returns SPV_SUCCESS and writes a -// handle of the instruction entry into *entry. -spv_result_t spvExtInstTableValueLookup(const spv_ext_inst_table table, - const spv_ext_inst_type_t type, - const uint32_t value, - spv_ext_inst_desc* pEntry); - #endif // SOURCE_EXT_INST_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/source/extensions.cpp b/libs/bgfx/3rdparty/spirv-tools/source/extensions.cpp index ac987fc..91136e6 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/extensions.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/extensions.cpp @@ -19,7 +19,7 @@ #include #include "source/binary.h" -#include "source/enum_string_mapping.h" +#include "source/table2.h" namespace spvtools { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/extensions.h b/libs/bgfx/3rdparty/spirv-tools/source/extensions.h index cda4924..ffca5f8 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/extensions.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/extensions.h @@ -15,25 +15,19 @@ #ifndef SOURCE_EXTENSIONS_H_ #define SOURCE_EXTENSIONS_H_ -#include #include #include "source/enum_set.h" -#include "spirv-tools/libspirv.h" +#include "source/table2.h" namespace spvtools { -// The known SPIR-V extensions. -enum Extension : uint32_t { -#include "extension_enum.inc" -}; - using ExtensionSet = EnumSet; -// Returns literal string operand of OpExtension instruction. +// Returns the literal string operand of OpExtension instruction. std::string GetExtensionString(const spv_parsed_instruction_t* inst); -// Returns text string listing |extensions| separated by whitespace. +// Returns a text string listing |extensions| separated by whitespace. std::string ExtensionSetToString(const ExtensionSet& extensions); } // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/link/linker.cpp b/libs/bgfx/3rdparty/spirv-tools/source/link/linker.cpp index e6aa72e..5fb4478 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/link/linker.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/link/linker.cpp @@ -26,7 +26,6 @@ #include #include -#include "source/assembly_grammar.h" #include "source/diagnostic.h" #include "source/opt/build_module.h" #include "source/opt/compact_ids_pass.h" @@ -39,6 +38,7 @@ #include "source/opt/type_manager.h" #include "source/spirv_constant.h" #include "source/spirv_target_env.h" +#include "source/table2.h" #include "source/util/make_unique.h" #include "source/util/string_utils.h" #include "spirv-tools/libspirv.hpp" @@ -103,7 +103,6 @@ spv_result_t GenerateHeader(const MessageConsumer& consumer, // |linked_context| should not be null. spv_result_t MergeModules(const MessageConsumer& consumer, const std::vector& in_modules, - const AssemblyGrammar& grammar, IRContext* linked_context); // Compute all pairs of import and export and return it in |linkings_to_do|. @@ -246,7 +245,6 @@ spv_result_t GenerateHeader(const MessageConsumer& consumer, spv_result_t MergeModules(const MessageConsumer& consumer, const std::vector& input_modules, - const AssemblyGrammar& grammar, IRContext* linked_context) { spv_position_t position = {}; @@ -294,29 +292,33 @@ spv_result_t MergeModules(const MessageConsumer& consumer, const uint32_t module_addressing_model = memory_model_inst->GetSingleWordOperand(0u); if (module_addressing_model != linked_addressing_model) { - spv_operand_desc linked_desc = nullptr, module_desc = nullptr; - grammar.lookupOperand(SPV_OPERAND_TYPE_ADDRESSING_MODEL, - linked_addressing_model, &linked_desc); - grammar.lookupOperand(SPV_OPERAND_TYPE_ADDRESSING_MODEL, - module_addressing_model, &module_desc); + const spvtools::OperandDesc* linked_desc = nullptr; + const spvtools::OperandDesc* module_desc = nullptr; + spvtools::LookupOperand(SPV_OPERAND_TYPE_ADDRESSING_MODEL, + linked_addressing_model, &linked_desc); + spvtools::LookupOperand(SPV_OPERAND_TYPE_ADDRESSING_MODEL, + module_addressing_model, &module_desc); return DiagnosticStream(position, consumer, "", SPV_ERROR_INTERNAL) - << "Conflicting addressing models: " << linked_desc->name + << "Conflicting addressing models: " << linked_desc->name().data() << " (input modules 1 through " << i << ") vs " - << module_desc->name << " (input module " << (i + 1) << ")."; + << module_desc->name().data() << " (input module " << (i + 1) + << ")."; } const uint32_t module_memory_model = memory_model_inst->GetSingleWordOperand(1u); if (module_memory_model != linked_memory_model) { - spv_operand_desc linked_desc = nullptr, module_desc = nullptr; - grammar.lookupOperand(SPV_OPERAND_TYPE_MEMORY_MODEL, linked_memory_model, - &linked_desc); - grammar.lookupOperand(SPV_OPERAND_TYPE_MEMORY_MODEL, module_memory_model, - &module_desc); + const spvtools::OperandDesc* linked_desc = nullptr; + const spvtools::OperandDesc* module_desc = nullptr; + spvtools::LookupOperand(SPV_OPERAND_TYPE_MEMORY_MODEL, + linked_memory_model, &linked_desc); + spvtools::LookupOperand(SPV_OPERAND_TYPE_MEMORY_MODEL, + module_memory_model, &module_desc); return DiagnosticStream(position, consumer, "", SPV_ERROR_INTERNAL) - << "Conflicting memory models: " << linked_desc->name + << "Conflicting memory models: " << linked_desc->name().data() << " (input modules 1 through " << i << ") vs " - << module_desc->name << " (input module " << (i + 1) << ")."; + << module_desc->name().data() << " (input module " << (i + 1) + << ")."; } } linked_module->SetMemoryModel(std::unique_ptr( @@ -333,11 +335,11 @@ spv_result_t MergeModules(const MessageConsumer& consumer, return v.first == model && v.second == name; }); if (i != entry_points.end()) { - spv_operand_desc desc = nullptr; - grammar.lookupOperand(SPV_OPERAND_TYPE_EXECUTION_MODEL, model, &desc); + const spvtools::OperandDesc* desc = nullptr; + spvtools::LookupOperand(SPV_OPERAND_TYPE_EXECUTION_MODEL, model, &desc); return DiagnosticStream(position, consumer, "", SPV_ERROR_INTERNAL) << "The entry point \"" << name << "\", with execution model " - << desc->name << ", was already defined."; + << desc->name().data() << ", was already defined."; } linked_module->AddEntryPoint( std::unique_ptr(inst.Clone(linked_context))); @@ -420,6 +422,7 @@ spv_result_t GetImportExportPairs(const MessageConsumer& consumer, std::vector imports; std::unordered_map> exports; + std::unordered_map linkonce; // Figure out the imports and exports for (const auto& decoration : linked_context.annotations()) { @@ -478,10 +481,24 @@ spv_result_t GetImportExportPairs(const MessageConsumer& consumer, << " LinkageAttributes; " << id << " is neither of them.\n"; } - if (spv::LinkageType(type) == spv::LinkageType::Import) + if (spv::LinkageType(type) == spv::LinkageType::Import) { imports.push_back(symbol_info); - else if (spv::LinkageType(type) == spv::LinkageType::Export) + } else if (spv::LinkageType(type) == spv::LinkageType::Export) { exports[symbol_info.name].push_back(symbol_info); + } else if (spv::LinkageType(type) == spv::LinkageType::LinkOnceODR) { + if (linkonce.find(symbol_info.name) == linkonce.end()) + linkonce[symbol_info.name] = symbol_info; + } + } + + for (const auto& possible_export : linkonce) { + if (exports.find(possible_export.first) == exports.end()) + exports[possible_export.first].push_back(possible_export.second); + else + return DiagnosticStream(position, consumer, "", SPV_ERROR_INVALID_BINARY) + << "Combination of Export and LinkOnceODR is not allowed, found " + "for \"" + << possible_export.second.name << "\"."; } // Find the import/export pairs @@ -661,8 +678,10 @@ spv_result_t RemoveLinkageSpecificInstructions( if (inst->opcode() == spv::Op::OpDecorate && spv::Decoration(inst->GetSingleWordOperand(1u)) == spv::Decoration::LinkageAttributes && - spv::LinkageType(inst->GetSingleWordOperand(3u)) == - spv::LinkageType::Export) { + (spv::LinkageType(inst->GetSingleWordOperand(3u)) == + spv::LinkageType::Export || + spv::LinkageType(inst->GetSingleWordOperand(3u)) == + spv::LinkageType::LinkOnceODR)) { linked_context->KillInst(&*inst); } } @@ -848,8 +867,7 @@ spv_result_t Link(const Context& context, const uint32_t* const* binaries, linked_context.module()->SetHeader(header); // Phase 3: Merge all the binaries into a single one. - AssemblyGrammar grammar(c_context); - res = MergeModules(consumer, modules, grammar, &linked_context); + res = MergeModules(consumer, modules, &linked_context); if (res != SPV_SUCCESS) return res; if (options.GetVerifyIds()) { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/name_mapper.cpp b/libs/bgfx/3rdparty/spirv-tools/source/name_mapper.cpp index 7e5f091..5f869c4 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/name_mapper.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/name_mapper.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2016 Google Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -25,6 +27,7 @@ #include "source/binary.h" #include "source/latest_version_spirv_header.h" #include "source/parsed_operand.h" +#include "source/table2.h" #include "source/to_string.h" #include "spirv-tools/libspirv.h" @@ -209,7 +212,20 @@ spv_result_t FriendlyNameMapper::ParseInstruction( } break; case spv::Op::OpTypeFloat: { const auto bit_width = inst.words[2]; - // TODO: Handle optional fpencoding enum once actually used. + if (inst.num_words > 3) { + if (spv::FPEncoding(inst.words[3]) == spv::FPEncoding::BFloat16KHR) { + SaveName(result_id, "bfloat16"); + break; + } + if (spv::FPEncoding(inst.words[3]) == spv::FPEncoding::Float8E4M3EXT) { + SaveName(result_id, "fp8e4m3"); + break; + } + if (spv::FPEncoding(inst.words[3]) == spv::FPEncoding::Float8E5M2EXT) { + SaveName(result_id, "fp8e5m2"); + break; + } + } switch (bit_width) { case 16: SaveName(result_id, "half"); @@ -241,6 +257,10 @@ spv_result_t FriendlyNameMapper::ParseInstruction( SaveName(result_id, std::string("_runtimearr_") + NameForId(inst.words[2])); break; + case spv::Op::OpTypeNodePayloadArrayAMDX: + SaveName(result_id, + std::string("_payloadarr_") + NameForId(inst.words[2])); + break; case spv::Op::OpTypePointer: SaveName(result_id, std::string("_ptr_") + NameForEnumOperand(SPV_OPERAND_TYPE_STORAGE_CLASS, @@ -316,9 +336,9 @@ spv_result_t FriendlyNameMapper::ParseInstruction( std::string FriendlyNameMapper::NameForEnumOperand(spv_operand_type_t type, uint32_t word) { - spv_operand_desc desc = nullptr; - if (SPV_SUCCESS == grammar_.lookupOperand(type, word, &desc)) { - return desc->name; + const spvtools::OperandDesc* desc = nullptr; + if (SPV_SUCCESS == spvtools::LookupOperand(type, word, &desc)) { + return desc->name().data(); } else { // Invalid input. Just give something. return std::string("StorageClass") + to_string(word); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opcode.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opcode.cpp index f4fd3ee..665574a 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opcode.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opcode.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2015-2022 The Khronos Group Inc. -// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights -// reserved. +// Modifications Copyright (C) 2020-2024 Advanced Micro Devices, Inc. All +// rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -27,18 +27,10 @@ #include "source/spirv_constant.h" #include "source/spirv_endian.h" #include "source/spirv_target_env.h" +#include "source/table2.h" #include "spirv-tools/libspirv.h" namespace { -struct OpcodeDescPtrLen { - const spv_opcode_desc_t* ptr; - uint32_t len; -}; - -#include "core.insts-unified1.inc" - -static const spv_opcode_table_t kOpcodeTable = {ARRAY_SIZE(kOpcodeTableEntries), - kOpcodeTableEntries}; // Represents a vendor tool entry in the SPIR-V XML Registry. struct VendorTool { @@ -78,115 +70,6 @@ void spvOpcodeSplit(const uint32_t word, uint16_t* pWordCount, } } -spv_result_t spvOpcodeTableGet(spv_opcode_table* pInstTable, spv_target_env) { - if (!pInstTable) return SPV_ERROR_INVALID_POINTER; - - // Descriptions of each opcode. Each entry describes the format of the - // instruction that follows a particular opcode. - - *pInstTable = &kOpcodeTable; - return SPV_SUCCESS; -} - -spv_result_t spvOpcodeTableNameLookup(spv_target_env env, - const spv_opcode_table table, - const char* name, - spv_opcode_desc* pEntry) { - if (!name || !pEntry) return SPV_ERROR_INVALID_POINTER; - if (!table) return SPV_ERROR_INVALID_TABLE; - - // TODO: This lookup of the Opcode table is suboptimal! Binary sort would be - // preferable but the table requires sorting on the Opcode name, but it's - // static const initialized and matches the order of the spec. - const size_t nameLength = strlen(name); - const auto version = spvVersionForTargetEnv(env); - for (uint64_t opcodeIndex = 0; opcodeIndex < table->count; ++opcodeIndex) { - const spv_opcode_desc_t& entry = table->entries[opcodeIndex]; - // We consider the current opcode as available as long as - // 1. The target environment satisfies the minimal requirement of the - // opcode; or - // 2. There is at least one extension enabling this opcode. - // - // Note that the second rule assumes the extension enabling this instruction - // is indeed requested in the SPIR-V code; checking that should be - // validator's work. - if ((version >= entry.minVersion && version <= entry.lastVersion) || - entry.numExtensions > 0u || entry.numCapabilities > 0u) { - // Exact match case. - if (nameLength == strlen(entry.name) && - !strncmp(name, entry.name, nameLength)) { - *pEntry = &entry; - return SPV_SUCCESS; - } - // Lack of binary search really hurts here. There isn't an easy filter to - // apply before checking aliases since we need to handle promotion from - // vendor to KHR/EXT and KHR/EXT to core. It would require a sure-fire way - // of dropping suffices. Fortunately, most lookup are based on token - // value. - // - // If this was a binary search we could iterate between the lower and - // upper bounds. - if (entry.numAliases > 0) { - for (uint32_t aliasIndex = 0; aliasIndex < entry.numAliases; - aliasIndex++) { - // Skip Op prefix. Should this be encoded in the table instead? - const auto alias = entry.aliases[aliasIndex] + 2; - const size_t aliasLength = strlen(alias); - if (nameLength == aliasLength && !strncmp(name, alias, nameLength)) { - *pEntry = &entry; - return SPV_SUCCESS; - } - } - } - } - } - - return SPV_ERROR_INVALID_LOOKUP; -} - -spv_result_t spvOpcodeTableValueLookup(spv_target_env env, - const spv_opcode_table table, - const spv::Op opcode, - spv_opcode_desc* pEntry) { - if (!table) return SPV_ERROR_INVALID_TABLE; - if (!pEntry) return SPV_ERROR_INVALID_POINTER; - - const auto beg = table->entries; - const auto end = table->entries + table->count; - - spv_opcode_desc_t needle = {"", opcode, 0, nullptr, 0, {}, 0, - {}, false, false, 0, nullptr, ~0u, ~0u}; - - auto comp = [](const spv_opcode_desc_t& lhs, const spv_opcode_desc_t& rhs) { - return lhs.opcode < rhs.opcode; - }; - - // We need to loop here because there can exist multiple symbols for the same - // opcode value, and they can be introduced in different target environments, - // which means they can have different minimal version requirements. - // Assumes the underlying table is already sorted ascendingly according to - // opcode value. - const auto version = spvVersionForTargetEnv(env); - for (auto it = std::lower_bound(beg, end, needle, comp); - it != end && it->opcode == opcode; ++it) { - // We considers the current opcode as available as long as - // 1. The target environment satisfies the minimal requirement of the - // opcode; or - // 2. There is at least one extension enabling this opcode. - // - // Note that the second rule assumes the extension enabling this instruction - // is indeed requested in the SPIR-V code; checking that should be - // validator's work. - if ((version >= it->minVersion && version <= it->lastVersion) || - it->numExtensions > 0u || it->numCapabilities > 0u) { - *pEntry = it; - return SPV_SUCCESS; - } - } - - return SPV_ERROR_INVALID_LOOKUP; -} - void spvInstructionCopy(const uint32_t* words, const spv::Op opcode, const uint16_t wordCount, const spv_endianness_t endian, spv_instruction_t* pInst) { @@ -205,25 +88,13 @@ void spvInstructionCopy(const uint32_t* words, const spv::Op opcode, } const char* spvOpcodeString(const uint32_t opcode) { - const auto beg = kOpcodeTableEntries; - const auto end = kOpcodeTableEntries + ARRAY_SIZE(kOpcodeTableEntries); - spv_opcode_desc_t needle = {"", static_cast(opcode), - 0, nullptr, - 0, {}, - 0, {}, - false, false, - 0, nullptr, - ~0u, ~0u}; - auto comp = [](const spv_opcode_desc_t& lhs, const spv_opcode_desc_t& rhs) { - return lhs.opcode < rhs.opcode; - }; - auto it = std::lower_bound(beg, end, needle, comp); - if (it != end && it->opcode == spv::Op(opcode)) { - return it->name; + const spvtools::InstructionDesc* desc = nullptr; + if (SPV_SUCCESS != + spvtools::LookupOpcode(static_cast(opcode), &desc)) { + assert(0 && "Unreachable!"); + return "unknown"; } - - assert(0 && "Unreachable!"); - return "unknown"; + return desc->name().data(); } const char* spvOpcodeString(const spv::Op opcode) { @@ -265,12 +136,14 @@ int32_t spvOpcodeIsConstant(const spv::Op opcode) { case spv::Op::OpConstantSampler: case spv::Op::OpConstantNull: case spv::Op::OpConstantFunctionPointerINTEL: + case spv::Op::OpConstantStringAMDX: case spv::Op::OpSpecConstantTrue: case spv::Op::OpSpecConstantFalse: case spv::Op::OpSpecConstant: case spv::Op::OpSpecConstantComposite: case spv::Op::OpSpecConstantCompositeReplicateEXT: case spv::Op::OpSpecConstantOp: + case spv::Op::OpSpecConstantStringAMDX: return true; default: return false; @@ -301,6 +174,7 @@ int32_t spvOpcodeIsComposite(const spv::Op opcode) { case spv::Op::OpTypeRuntimeArray: case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: return true; default: return false; @@ -318,6 +192,7 @@ bool spvOpcodeReturnsLogicalVariablePointer(const spv::Op opcode) { case spv::Op::OpFunctionParameter: case spv::Op::OpImageTexelPointer: case spv::Op::OpCopyObject: + case spv::Op::OpAllocateNodePayloadsAMDX: case spv::Op::OpSelect: case spv::Op::OpPhi: case spv::Op::OpFunctionCall: @@ -344,6 +219,7 @@ int32_t spvOpcodeReturnsLogicalPointer(const spv::Op opcode) { case spv::Op::OpImageTexelPointer: case spv::Op::OpCopyObject: case spv::Op::OpRawAccessChainNV: + case spv::Op::OpAllocateNodePayloadsAMDX: return true; default: return false; @@ -377,13 +253,17 @@ int32_t spvOpcodeGeneratesType(spv::Op op) { case spv::Op::OpTypeAccelerationStructureNV: case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: // case spv::Op::OpTypeAccelerationStructureKHR: covered by // spv::Op::OpTypeAccelerationStructureNV case spv::Op::OpTypeRayQueryKHR: case spv::Op::OpTypeHitObjectNV: case spv::Op::OpTypeUntypedPointerKHR: + case spv::Op::OpTypeNodePayloadArrayAMDX: case spv::Op::OpTypeTensorLayoutNV: case spv::Op::OpTypeTensorViewNV: + case spv::Op::OpTypeTensorARM: + case spv::Op::OpTypeTaskSequenceINTEL: return true; default: // In particular, OpTypeForwardPointer does not generate a type, diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opcode.h b/libs/bgfx/3rdparty/spirv-tools/source/opcode.h index 08fc56d..a314ff6 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opcode.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opcode.h @@ -35,19 +35,6 @@ uint32_t spvOpcodeMake(uint16_t word_count, spv::Op opcode); void spvOpcodeSplit(const uint32_t word, uint16_t* word_count, uint16_t* opcode); -// Finds the named opcode in the given opcode table. On success, returns -// SPV_SUCCESS and writes a handle of the table entry into *entry. -spv_result_t spvOpcodeTableNameLookup(spv_target_env, - const spv_opcode_table table, - const char* name, spv_opcode_desc* entry); - -// Finds the opcode by enumerant in the given opcode table. On success, returns -// SPV_SUCCESS and writes a handle of the table entry into *entry. -spv_result_t spvOpcodeTableValueLookup(spv_target_env, - const spv_opcode_table table, - const spv::Op opcode, - spv_opcode_desc* entry); - // Copies an instruction's word and fixes the endianness to host native. The // source instruction's stream/opcode/endianness is in the words/opcode/endian // parameter. The word_count parameter specifies the number of words to copy. diff --git a/libs/bgfx/3rdparty/spirv-tools/source/operand.cpp b/libs/bgfx/3rdparty/spirv-tools/source/operand.cpp index 5485646..c635c72 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/operand.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/operand.cpp @@ -26,110 +26,9 @@ #include "source/macro.h" #include "source/opcode.h" #include "source/spirv_constant.h" - -// For now, assume unified1 contains up to SPIR-V 1.3 and no later -// SPIR-V version. -// TODO(dneto): Make one set of tables, but with version tags on a -// per-item basis. https://github.com/KhronosGroup/SPIRV-Tools/issues/1195 - -#include "operand.kinds-unified1.inc" +#include "source/table2.h" #include "spirv-tools/libspirv.h" -static const spv_operand_table_t kOperandTable = { - ARRAY_SIZE(pygen_variable_OperandInfoTable), - pygen_variable_OperandInfoTable}; - -spv_result_t spvOperandTableGet(spv_operand_table* pOperandTable, - spv_target_env) { - if (!pOperandTable) return SPV_ERROR_INVALID_POINTER; - - *pOperandTable = &kOperandTable; - return SPV_SUCCESS; -} - -spv_result_t spvOperandTableNameLookup(spv_target_env, - const spv_operand_table table, - const spv_operand_type_t type, - const char* name, - const size_t nameLength, - spv_operand_desc* pEntry) { - if (!table) return SPV_ERROR_INVALID_TABLE; - if (!name || !pEntry) return SPV_ERROR_INVALID_POINTER; - - for (uint64_t typeIndex = 0; typeIndex < table->count; ++typeIndex) { - const auto& group = table->types[typeIndex]; - if (type != group.type) continue; - for (uint64_t index = 0; index < group.count; ++index) { - const auto& entry = group.entries[index]; - // We consider the current operand as available as long as - // it is in the grammar. It might not be *valid* to use, - // but that should be checked by the validator, not by parsing. - // - // Exact match case - if (nameLength == strlen(entry.name) && - !strncmp(entry.name, name, nameLength)) { - *pEntry = &entry; - return SPV_SUCCESS; - } - - // Check the aliases. Ideally we would have a version of the table sorted - // by name and then we could iterate between the lower and upper bounds to - // restrict the amount comparisons. Fortunately, name-based lookups are - // mostly restricted to the assembler. - if (entry.numAliases > 0) { - for (uint32_t aliasIndex = 0; aliasIndex < entry.numAliases; - aliasIndex++) { - const auto alias = entry.aliases[aliasIndex]; - const size_t aliasLength = strlen(alias); - if (nameLength == aliasLength && !strncmp(name, alias, nameLength)) { - *pEntry = &entry; - return SPV_SUCCESS; - } - } - } - } - } - - return SPV_ERROR_INVALID_LOOKUP; -} - -spv_result_t spvOperandTableValueLookup(spv_target_env, - const spv_operand_table table, - const spv_operand_type_t type, - const uint32_t value, - spv_operand_desc* pEntry) { - if (!table) return SPV_ERROR_INVALID_TABLE; - if (!pEntry) return SPV_ERROR_INVALID_POINTER; - - spv_operand_desc_t needle = {"", value, 0, nullptr, 0, nullptr, - 0, nullptr, {}, ~0u, ~0u}; - - auto comp = [](const spv_operand_desc_t& lhs, const spv_operand_desc_t& rhs) { - return lhs.value < rhs.value; - }; - - for (uint64_t typeIndex = 0; typeIndex < table->count; ++typeIndex) { - const auto& group = table->types[typeIndex]; - if (type != group.type) continue; - - const auto beg = group.entries; - const auto end = group.entries + group.count; - - // Assumes the underlying table is already sorted ascendingly according to - // opcode value. - auto it = std::lower_bound(beg, end, needle, comp); - if (it != end && it->value == value) { - // The current operand is considered available as long as - // it is in the grammar. It might not be *valid* to use, - // but that should be checked by the validator, not by parsing. - *pEntry = it; - return SPV_SUCCESS; - } - } - - return SPV_ERROR_INVALID_LOOKUP; -} - const char* spvOperandTypeStr(spv_operand_type_t type) { switch (type) { case SPV_OPERAND_TYPE_ID: @@ -237,6 +136,12 @@ const char* spvOperandTypeStr(spv_operand_type_t type) { return "cooperative matrix reduce"; case SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS: return "tensor addressing operands"; + case SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: + case SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: + return "matrix multiply accumulate operands"; + case SPV_OPERAND_TYPE_TENSOR_OPERANDS: + case SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS: + return "tensor operands"; case SPV_OPERAND_TYPE_INITIALIZATION_MODE_QUALIFIER: return "initialization mode qualifier"; case SPV_OPERAND_TYPE_HOST_ACCESS_QUALIFIER: @@ -297,6 +202,28 @@ const char* spvOperandTypeStr(spv_operand_type_t type) { return "quantization mode"; case SPV_OPERAND_TYPE_OVERFLOW_MODES: return "overflow mode"; + case SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT: + return "cooperative vector matrix layout"; + case SPV_OPERAND_TYPE_COMPONENT_TYPE: + return "component type"; + + case SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS: + return "kernel property flags"; + case SPV_OPERAND_TYPE_SHDEBUG100_BUILD_IDENTIFIER_FLAGS: + return "NonSemantic.Shader.DebugInfo.100 debug build identifier flags"; + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING: + return "NonSemantic.Shader.DebugInfo.100 debug base type attribute " + "encoding"; + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE: + return "NonSemantic.Shader.DebugInfo.100 debug composite type"; + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY: + return "NonSemantic.Shader.DebugInfo.100 debug imported entity"; + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS: + return "NonSemantic.Shader.DebugInfo.100 debug info flags"; + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION: + return "NonSemantic.Shader.DebugInfo.100 debug operation"; + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER: + return "NonSemantic.Shader.DebugInfo.100 debug type qualifier"; case SPV_OPERAND_TYPE_NONE: return "NONE"; @@ -308,6 +235,7 @@ const char* spvOperandTypeStr(spv_operand_type_t type) { void spvPushOperandTypes(const spv_operand_type_t* types, spv_operand_pattern_t* pattern) { + // Push them on in backward order. const spv_operand_type_t* endTypes; for (endTypes = types; *endTypes != SPV_OPERAND_TYPE_NONE; ++endTypes) { } @@ -317,9 +245,22 @@ void spvPushOperandTypes(const spv_operand_type_t* types, } } -void spvPushOperandTypesForMask(spv_target_env env, - const spv_operand_table operandTable, - const spv_operand_type_t type, +void spvPushOperandTypes( + const spvtools::utils::Span& types, + spv_operand_pattern_t* pattern) { + // Push them on in backward order. + auto n = types.size(); + for (auto i = 0u; i < n; i++) { + auto type = types[n - 1 - i]; + // Check against the NONE type, in case the tables have them. + // This might be cleaned up. + if (type != SPV_OPERAND_TYPE_NONE) { + pattern->push_back(type); + } + } +} + +void spvPushOperandTypesForMask(const spv_operand_type_t type, const uint32_t mask, spv_operand_pattern_t* pattern) { // Scan from highest bits to lowest bits because we will append in LIFO @@ -327,10 +268,9 @@ void spvPushOperandTypesForMask(spv_target_env env, for (uint32_t candidate_bit = (1u << 31u); candidate_bit; candidate_bit >>= 1) { if (candidate_bit & mask) { - spv_operand_desc entry = nullptr; - if (SPV_SUCCESS == spvOperandTableValueLookup(env, operandTable, type, - candidate_bit, &entry)) { - spvPushOperandTypes(entry->operandTypes, pattern); + const spvtools::OperandDesc* entry = nullptr; + if (SPV_SUCCESS == spvtools::LookupOperand(type, candidate_bit, &entry)) { + spvPushOperandTypes(entry->operands(), pattern); } } } @@ -396,6 +336,16 @@ bool spvOperandIsConcrete(spv_operand_type_t type) { case SPV_OPERAND_TYPE_NAMED_MAXIMUM_NUMBER_OF_REGISTERS: case SPV_OPERAND_TYPE_FPENCODING: case SPV_OPERAND_TYPE_TENSOR_CLAMP_MODE: + case SPV_OPERAND_TYPE_COOPERATIVE_VECTOR_MATRIX_LAYOUT: + case SPV_OPERAND_TYPE_COMPONENT_TYPE: + case SPV_OPERAND_TYPE_KERNEL_PROPERTY_FLAGS: + case SPV_OPERAND_TYPE_SHDEBUG100_BUILD_IDENTIFIER_FLAGS: + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING: + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_COMPOSITE_TYPE: + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_IMPORTED_ENTITY: + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_INFO_FLAGS: + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_OPERATION: + case SPV_OPERAND_TYPE_SHDEBUG100_DEBUG_TYPE_QUALIFIER: return true; default: break; @@ -415,9 +365,11 @@ bool spvOperandIsConcreteMask(spv_operand_type_t type) { case SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS: case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS: case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_OPERANDS: + case SPV_OPERAND_TYPE_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: case SPV_OPERAND_TYPE_RAW_ACCESS_CHAIN_OPERANDS: case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE: case SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS: + case SPV_OPERAND_TYPE_TENSOR_OPERANDS: return true; default: break; @@ -437,9 +389,11 @@ bool spvOperandIsOptional(spv_operand_type_t type) { case SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER: case SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT: case SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS: + case SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: case SPV_OPERAND_TYPE_OPTIONAL_CIV: case SPV_OPERAND_TYPE_OPTIONAL_RAW_ACCESS_CHAIN_OPERANDS: case SPV_OPERAND_TYPE_OPTIONAL_FPENCODING: + case SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS: return true; default: break; @@ -665,3 +619,17 @@ std::function spvDbgInfoExtOperandCanBeForwardDeclaredFunction( } return out; } + +spv_fp_encoding_t spvFPEncodingFromOperandFPEncoding(spv::FPEncoding encoding) { + switch (encoding) { + case spv::FPEncoding::BFloat16KHR: + return SPV_FP_ENCODING_BFLOAT16; + case spv::FPEncoding::Float8E4M3EXT: + return SPV_FP_ENCODING_FLOAT8_E4M3; + case spv::FPEncoding::Float8E5M2EXT: + return SPV_FP_ENCODING_FLOAT8_E5M2; + case spv::FPEncoding::Max: + break; + } + return SPV_FP_ENCODING_UNKNOWN; +} diff --git a/libs/bgfx/3rdparty/spirv-tools/source/operand.h b/libs/bgfx/3rdparty/spirv-tools/source/operand.h index 3d42a05..9fc9b74 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/operand.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/operand.h @@ -19,6 +19,7 @@ #include #include "source/table.h" +#include "source/util/span.h" #include "spirv-tools/libspirv.h" // A sequence of operand types. @@ -35,25 +36,6 @@ // performance. using spv_operand_pattern_t = std::vector; -// Finds the named operand in the table. The type parameter specifies the -// operand's group. A handle of the operand table entry for this operand will -// be written into *entry. -spv_result_t spvOperandTableNameLookup(spv_target_env, - const spv_operand_table table, - const spv_operand_type_t type, - const char* name, - const size_t name_length, - spv_operand_desc* entry); - -// Finds the operand with value in the table. The type parameter specifies the -// operand's group. A handle of the operand table entry for this operand will -// be written into *entry. -spv_result_t spvOperandTableValueLookup(spv_target_env, - const spv_operand_table table, - const spv_operand_type_t type, - const uint32_t value, - spv_operand_desc* entry); - // Gets the name string of the non-variable operand type. const char* spvOperandTypeStr(spv_operand_type_t type); @@ -68,10 +50,10 @@ bool spvOperandIsOptional(spv_operand_type_t type); bool spvOperandIsVariable(spv_operand_type_t type); // Append a list of operand types to the end of the pattern vector. -// The types parameter specifies the source array of types, ending with -// SPV_OPERAND_TYPE_NONE. -void spvPushOperandTypes(const spv_operand_type_t* types, - spv_operand_pattern_t* pattern); +// The types parameter specifies the source span of types. +void spvPushOperandTypes( + const spvtools::utils::Span& types, + spv_operand_pattern_t* pattern); // Appends the operands expected after the given typed mask onto the // end of the given pattern. @@ -81,9 +63,7 @@ void spvPushOperandTypes(const spv_operand_type_t* types, // appear after operands for a more significant bit. // // If a set bit is unknown, then we assume it has no operands. -void spvPushOperandTypesForMask(spv_target_env, - const spv_operand_table operand_table, - const spv_operand_type_t mask_type, +void spvPushOperandTypesForMask(const spv_operand_type_t mask_type, const uint32_t mask, spv_operand_pattern_t* pattern); @@ -142,4 +122,7 @@ std::function spvOperandCanBeForwardDeclaredFunction( std::function spvDbgInfoExtOperandCanBeForwardDeclaredFunction( spv::Op opcode, spv_ext_inst_type_t ext_type, uint32_t key); +// Converts an spv::FPEncoding to spv_fp_encoding_t +spv_fp_encoding_t spvFPEncodingFromOperandFPEncoding(spv::FPEncoding encoding); + #endif // SOURCE_OPERAND_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.cpp index 333ef7b..51f2f1a 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/aggressive_dead_code_elim_pass.cpp @@ -914,6 +914,10 @@ bool AggressiveDCEPass::ProcessGlobalValues() { context()->AnalyzeUses(&dbg); continue; } + // Save debug build identifier even if no other instructions refer to it. + if (dbg.GetShader100DebugOpcode() == + NonSemanticShaderDebugInfo100DebugBuildIdentifier) + continue; to_kill_.push_back(&dbg); modified = true; } @@ -971,7 +975,6 @@ Pass::Status AggressiveDCEPass::Process() { void AggressiveDCEPass::InitExtensions() { extensions_allowlist_.clear(); - // clang-format off extensions_allowlist_.insert({ "SPV_AMD_shader_explicit_vertex_parameter", "SPV_AMD_shader_trinary_minmax", @@ -1037,9 +1040,12 @@ void AggressiveDCEPass::InitExtensions() { "SPV_NV_cooperative_matrix", "SPV_KHR_cooperative_matrix", "SPV_KHR_ray_tracing_position_fetch", - "SPV_KHR_fragment_shading_rate" + "SPV_KHR_fragment_shading_rate", + "SPV_KHR_quad_control", + "SPV_NV_shader_invocation_reorder", + "SPV_NV_cluster_acceleration_structure", + "SPV_NV_linear_swept_spheres", }); - // clang-format on } Instruction* AggressiveDCEPass::GetHeaderBranch(BasicBlock* blk) { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/amd_ext_to_khr.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/amd_ext_to_khr.cpp index a314567..085751b 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/amd_ext_to_khr.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/amd_ext_to_khr.cpp @@ -19,7 +19,6 @@ #include "ir_builder.h" #include "source/opt/ir_context.h" -#include "spv-amd-shader-ballot.insts.inc" #include "type_manager.h" namespace spvtools { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/copy_prop_arrays.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/copy_prop_arrays.cpp index 0a42074..3078a7c 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/copy_prop_arrays.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/copy_prop_arrays.cpp @@ -95,17 +95,19 @@ Pass::Status CopyPropagateArrays::Process() { std::unique_ptr source_object = FindSourceObjectIfPossible(&*var_inst, store_inst); - if (source_object != nullptr) { - if (!IsPointerToArrayType(var_inst->type_id()) && - source_object->GetStorageClass() != spv::StorageClass::Input) { - continue; - } + if (source_object == nullptr) { + continue; + } - if (CanUpdateUses(&*var_inst, source_object->GetPointerTypeId(this))) { - modified = true; + if (!IsPointerToArrayType(var_inst->type_id()) && + source_object->GetStorageClass() != spv::StorageClass::Input) { + continue; + } - PropagateObject(&*var_inst, source_object.get(), store_inst); - } + if (CanUpdateUses(&*var_inst, source_object->GetPointerTypeId(this))) { + modified = true; + + PropagateObject(&*var_inst, source_object.get(), store_inst); } } @@ -219,6 +221,8 @@ bool CopyPropagateArrays::HasNoStores(Instruction* ptr_inst) { return true; } else if (IsInterpolationInstruction(use)) { return true; + } else if (use->IsCommonDebugInstr()) { + return true; } // Some other instruction. Be conservative. return false; @@ -252,11 +256,14 @@ bool CopyPropagateArrays::HasValidReferencesOnly(Instruction* ptr_inst, } else if (use->IsDecoration() || use->opcode() == spv::Op::OpName) { return true; } else if (use->opcode() == spv::Op::OpStore) { - // If we are storing to part of the object it is not an candidate. + // If we are storing to part of the object it is not a candidate. return ptr_inst->opcode() == spv::Op::OpVariable && store_inst->GetSingleWordInOperand(kStorePointerInOperand) == ptr_inst->result_id(); } else if (IsDebugDeclareOrValue(use)) { + // The store does not have to dominate debug instructions. We do not + // want debugging info to stop the transformation. It will be fixed + // up later. return true; } // Some other instruction. Be conservative. @@ -276,6 +283,7 @@ CopyPropagateArrays::GetSourceObjectIfAny(uint32_t result) { case spv::Op::OpCompositeConstruct: return BuildMemoryObjectFromCompositeConstruct(result_inst); case spv::Op::OpCopyObject: + case spv::Op::OpCopyLogical: return GetSourceObjectIfAny(result_inst->GetSingleWordInOperand(0)); case spv::Op::OpCompositeInsert: return BuildMemoryObjectFromInsert(result_inst); @@ -651,6 +659,22 @@ void CopyPropagateArrays::UpdateUses(Instruction* original_ptr_inst, uint32_t index = pair.second; if (use->IsCommonDebugInstr()) { + // It is possible that the debug instructions are not dominated by + // `new_ptr_inst`. If not, move the debug instruction to just after + // `new_ptr_inst`. + BasicBlock* store_block = context()->get_instr_block(new_ptr_inst); + if (store_block) { + Function* function = store_block->GetParent(); + DominatorAnalysis* dominator_analysis = + context()->GetDominatorAnalysis(function); + if (!dominator_analysis->Dominates(new_ptr_inst, use)) { + assert(dominator_analysis->Dominates(use, new_ptr_inst)); + use->InsertAfter(new_ptr_inst); + context()->set_instr_block(use, + context()->get_instr_block(new_ptr_inst)); + } + } + switch (use->GetCommonDebugOpcode()) { case CommonDebugInfoDebugDeclare: { if (new_ptr_inst->opcode() == spv::Op::OpVariable || @@ -892,9 +916,7 @@ CopyPropagateArrays::MemoryObject::MemoryObject(Instruction* var_inst, iterator begin, iterator end) : variable_inst_(var_inst) { std::transform(begin, end, std::back_inserter(access_chain_), - [](uint32_t id) { - return AccessChainEntry{true, {id}}; - }); + [](uint32_t id) { return AccessChainEntry{true, {id}}; }); } std::vector CopyPropagateArrays::MemoryObject::GetAccessIds() const { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/eliminate_dead_members_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/eliminate_dead_members_pass.cpp index e440296..170f270 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/eliminate_dead_members_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/eliminate_dead_members_pass.cpp @@ -207,6 +207,7 @@ void EliminateDeadMembersPass::MarkMembersAsLiveForExtract( case spv::Op::OpTypeMatrix: case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: type_id = type_inst->GetSingleWordInOperand(0); break; default: @@ -255,6 +256,7 @@ void EliminateDeadMembersPass::MarkMembersAsLiveForAccessChain( case spv::Op::OpTypeMatrix: case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: type_id = type_inst->GetSingleWordInOperand(0); break; default: @@ -516,6 +518,7 @@ bool EliminateDeadMembersPass::UpdateAccessChain(Instruction* inst) { case spv::Op::OpTypeMatrix: case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: new_operands.emplace_back(inst->GetInOperand(i)); type_id = type_inst->GetSingleWordInOperand(0); break; @@ -591,6 +594,7 @@ bool EliminateDeadMembersPass::UpdateCompsiteExtract(Instruction* inst) { case spv::Op::OpTypeMatrix: case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: type_id = type_inst->GetSingleWordInOperand(0); break; default: @@ -654,6 +658,7 @@ bool EliminateDeadMembersPass::UpdateCompositeInsert(Instruction* inst) { case spv::Op::OpTypeMatrix: case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: type_id = type_inst->GetSingleWordInOperand(0); break; default: diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/feature_manager.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/feature_manager.cpp index 5188370..2810739 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/feature_manager.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/feature_manager.cpp @@ -16,7 +16,7 @@ #include -#include "source/enum_string_mapping.h" +#include "source/table2.h" namespace spvtools { namespace opt { @@ -54,11 +54,12 @@ void FeatureManager::AddCapability(spv::Capability cap) { capabilities_.insert(cap); - spv_operand_desc desc = {}; - if (SPV_SUCCESS == grammar_.lookupOperand(SPV_OPERAND_TYPE_CAPABILITY, - uint32_t(cap), &desc)) { + const spvtools::OperandDesc* desc = nullptr; + if (SPV_SUCCESS == spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY, + uint32_t(cap), &desc)) { for (auto capability : - CapabilitySet(desc->numCapabilities, desc->capabilities)) { + CapabilitySet(static_cast(desc->capabilities().size()), + desc->capabilities().data())) { AddCapability(capability); } } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/fix_storage_class.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/fix_storage_class.cpp index b64026e..608285e 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/fix_storage_class.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/fix_storage_class.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2019 Google LLC +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -99,6 +101,7 @@ bool FixStorageClass::PropagateStorageClass(Instruction* inst, case spv::Op::OpCopyMemorySized: case spv::Op::OpVariable: case spv::Op::OpBitcast: + case spv::Op::OpAllocateNodePayloadsAMDX: // Nothing to change for these opcode. The result type is the same // regardless of the storage class of the operand. return false; @@ -319,6 +322,7 @@ uint32_t FixStorageClass::WalkAccessChainType(Instruction* inst, uint32_t id) { switch (type_inst->opcode()) { case spv::Op::OpTypeArray: case spv::Op::OpTypeRuntimeArray: + case spv::Op::OpTypeNodePayloadArrayAMDX: case spv::Op::OpTypeMatrix: case spv::Op::OpTypeVector: case spv::Op::OpTypeCooperativeMatrixKHR: diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/fold.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/fold.cpp index 942da68..cd070c7 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/fold.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/fold.cpp @@ -50,7 +50,7 @@ uint32_t InstructionFolder::UnaryOperate(spv::Op opcode, if (s_operand == std::numeric_limits::min()) { return s_operand; } - return -s_operand; + return static_cast(-s_operand); } case spv::Op::OpNot: return ~operand; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/folding_rules.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/folding_rules.cpp index 5748f97..3f5f79a 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/folding_rules.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/folding_rules.cpp @@ -77,7 +77,10 @@ int32_t ImageOperandsMaskInOperandIndex(Instruction* inst) { // Returns the element width of |type|. uint32_t ElementWidth(const analysis::Type* type) { - if (const analysis::Vector* vec_type = type->AsVector()) { + if (const analysis::CooperativeVectorNV* coopvec_type = + type->AsCooperativeVectorNV()) { + return ElementWidth(coopvec_type->component_type()); + } else if (const analysis::Vector* vec_type = type->AsVector()) { return ElementWidth(vec_type->element_type()); } else if (const analysis::Float* float_type = type->AsFloat()) { return float_type->width(); @@ -2451,14 +2454,31 @@ FoldingRule RedundantFDiv() { FloatConstantKind kind0 = getFloatConstantKind(constants[0]); FloatConstantKind kind1 = getFloatConstantKind(constants[1]); - if (kind0 == FloatConstantKind::Zero) { + if (kind0 == FloatConstantKind::Zero || kind1 == FloatConstantKind::One) { inst->SetOpcode(spv::Op::OpCopyObject); inst->SetInOperands( {{SPV_OPERAND_TYPE_ID, {inst->GetSingleWordInOperand(0)}}}); return true; } - if (kind1 == FloatConstantKind::One) { + return false; + }; +} + +FoldingRule RedundantFMod() { + return [](IRContext*, Instruction* inst, + const std::vector& constants) { + assert(inst->opcode() == spv::Op::OpFMod && + "Wrong opcode. Should be OpFMod."); + assert(constants.size() == 2); + + if (!inst->IsFloatingPointFoldingAllowed()) { + return false; + } + + FloatConstantKind kind0 = getFloatConstantKind(constants[0]); + + if (kind0 == FloatConstantKind::Zero) { inst->SetOpcode(spv::Op::OpCopyObject); inst->SetInOperands( {{SPV_OPERAND_TYPE_ID, {inst->GetSingleWordInOperand(0)}}}); @@ -2504,24 +2524,108 @@ FoldingRule RedundantFMix() { }; } -// This rule handles addition of zero for integers. -FoldingRule RedundantIAdd() { +// Returns a folding rule that folds the instruction to operand |foldToArg| +// (0 or 1) if operand |arg| (0 or 1) is a zero constant. +FoldingRule RedundantBinaryOpWithZeroOperand(uint32_t arg, uint32_t foldToArg) { + return [arg, foldToArg]( + IRContext* context, Instruction* inst, + const std::vector& constants) { + assert(constants.size() == 2); + + if (constants[arg] && constants[arg]->IsZero()) { + auto operand = inst->GetSingleWordInOperand(foldToArg); + auto operand_type = constants[arg]->type(); + + const analysis::Type* inst_type = + context->get_type_mgr()->GetType(inst->type_id()); + if (inst_type->IsSame(operand_type)) { + inst->SetOpcode(spv::Op::OpCopyObject); + } else { + inst->SetOpcode(spv::Op::OpBitcast); + } + inst->SetInOperands({{SPV_OPERAND_TYPE_ID, {operand}}}); + return true; + } + return false; + }; +} + +// This rule handles any of RedundantBinaryRhs0Ops with a 0 or vector 0 on the +// right-hand side (a | 0 => a). +static const constexpr spv::Op RedundantBinaryRhs0Ops[] = { + spv::Op::OpBitwiseOr, + spv::Op::OpBitwiseXor, + spv::Op::OpShiftRightLogical, + spv::Op::OpShiftRightArithmetic, + spv::Op::OpShiftLeftLogical, + spv::Op::OpIAdd, + spv::Op::OpISub}; +FoldingRule RedundantBinaryRhs0(spv::Op op) { + assert(std::find(std::begin(RedundantBinaryRhs0Ops), + std::end(RedundantBinaryRhs0Ops), + op) != std::end(RedundantBinaryRhs0Ops) && + "Wrong opcode."); + (void)op; + return RedundantBinaryOpWithZeroOperand(1, 0); +} + +// This rule handles any of RedundantBinaryLhs0Ops with a 0 or vector 0 on the +// left-hand side (0 | a => a). +static const constexpr spv::Op RedundantBinaryLhs0Ops[] = { + spv::Op::OpBitwiseOr, spv::Op::OpBitwiseXor, spv::Op::OpIAdd}; +FoldingRule RedundantBinaryLhs0(spv::Op op) { + assert(std::find(std::begin(RedundantBinaryLhs0Ops), + std::end(RedundantBinaryLhs0Ops), + op) != std::end(RedundantBinaryLhs0Ops) && + "Wrong opcode."); + (void)op; + return RedundantBinaryOpWithZeroOperand(0, 1); +} + +// This rule handles shifts and divisions of 0 or vector 0 by any amount +// (0 >> a => 0). +static const constexpr spv::Op RedundantBinaryLhs0To0Ops[] = { + spv::Op::OpShiftRightLogical, + spv::Op::OpShiftRightArithmetic, + spv::Op::OpShiftLeftLogical, + spv::Op::OpSDiv, + spv::Op::OpUDiv, + spv::Op::OpSMod, + spv::Op::OpUMod}; +FoldingRule RedundantBinaryLhs0To0(spv::Op op) { + assert(std::find(std::begin(RedundantBinaryLhs0To0Ops), + std::end(RedundantBinaryLhs0To0Ops), + op) != std::end(RedundantBinaryLhs0To0Ops) && + "Wrong opcode."); + (void)op; + return RedundantBinaryOpWithZeroOperand(0, 0); +} + +// Returns true if all elements in |c| are 1. +bool IsAllInt1(const analysis::Constant* c) { + if (auto composite = c->AsCompositeConstant()) { + auto& components = composite->GetComponents(); + return std::all_of(std::begin(components), std::end(components), IsAllInt1); + } else if (c->AsIntConstant()) { + return c->GetSignExtendedValue() == 1; + } + + return false; +} + +// This rule handles divisions by 1 or vector 1 (a / 1 => a). +FoldingRule RedundantSUDiv() { return [](IRContext* context, Instruction* inst, const std::vector& constants) { - assert(inst->opcode() == spv::Op::OpIAdd && - "Wrong opcode. Should be OpIAdd."); + assert(constants.size() == 2); + assert((inst->opcode() == spv::Op::OpUDiv || + inst->opcode() == spv::Op::OpSDiv) && + "Wrong opcode."); - uint32_t operand = std::numeric_limits::max(); - const analysis::Type* operand_type = nullptr; - if (constants[0] && constants[0]->IsZero()) { - operand = inst->GetSingleWordInOperand(1); - operand_type = constants[0]->type(); - } else if (constants[1] && constants[1]->IsZero()) { - operand = inst->GetSingleWordInOperand(0); - operand_type = constants[1]->type(); - } + if (constants[1] && IsAllInt1(constants[1])) { + auto operand = inst->GetSingleWordInOperand(0); + auto operand_type = constants[1]->type(); - if (operand != std::numeric_limits::max()) { const analysis::Type* inst_type = context->get_type_mgr()->GetType(inst->type_id()); if (inst_type->IsSame(operand_type)) { @@ -2536,6 +2640,27 @@ FoldingRule RedundantIAdd() { }; } +// This rule handles modulo from division by 1 or vector 1 (a % 1 => 0). +FoldingRule RedundantSUMod() { + return [](IRContext* context, Instruction* inst, + const std::vector& constants) { + assert(constants.size() == 2); + assert((inst->opcode() == spv::Op::OpUMod || + inst->opcode() == spv::Op::OpSMod) && + "Wrong opcode."); + + if (constants[1] && IsAllInt1(constants[1])) { + auto type = context->get_type_mgr()->GetType(inst->type_id()); + auto zero_id = context->get_constant_mgr()->GetNullConstId(type); + + inst->SetOpcode(spv::Op::OpCopyObject); + inst->SetInOperands({{SPV_OPERAND_TYPE_ID, {zero_id}}}); + return true; + } + return false; + }; +} + // This rule look for a dot with a constant vector containing a single 1 and // the rest 0s. This is the same as doing an extract. FoldingRule DotProductDoingExtract() { @@ -2873,6 +2998,17 @@ void FoldingRules::AddFoldingRules() { // Note that the order in which rules are added to the list matters. If a rule // applies to the instruction, the rest of the rules will not be attempted. // Take that into consideration. + for (auto op : RedundantBinaryRhs0Ops) + rules_[op].push_back(RedundantBinaryRhs0(op)); + for (auto op : RedundantBinaryLhs0Ops) + rules_[op].push_back(RedundantBinaryLhs0(op)); + for (auto op : RedundantBinaryLhs0To0Ops) + rules_[op].push_back(RedundantBinaryLhs0To0(op)); + rules_[spv::Op::OpSDiv].push_back(RedundantSUDiv()); + rules_[spv::Op::OpUDiv].push_back(RedundantSUDiv()); + rules_[spv::Op::OpSMod].push_back(RedundantSUMod()); + rules_[spv::Op::OpUMod].push_back(RedundantSUMod()); + rules_[spv::Op::OpBitcast].push_back(BitCastScalarOrVector()); rules_[spv::Op::OpCompositeConstruct].push_back( @@ -2904,6 +3040,8 @@ void FoldingRules::AddFoldingRules() { rules_[spv::Op::OpFDiv].push_back(MergeDivMulArithmetic()); rules_[spv::Op::OpFDiv].push_back(MergeDivNegateArithmetic()); + rules_[spv::Op::OpFMod].push_back(RedundantFMod()); + rules_[spv::Op::OpFMul].push_back(RedundantFMul()); rules_[spv::Op::OpFMul].push_back(MergeMulMulArithmetic()); rules_[spv::Op::OpFMul].push_back(MergeMulDivArithmetic()); @@ -2918,7 +3056,6 @@ void FoldingRules::AddFoldingRules() { rules_[spv::Op::OpFSub].push_back(MergeSubAddArithmetic()); rules_[spv::Op::OpFSub].push_back(MergeSubSubArithmetic()); - rules_[spv::Op::OpIAdd].push_back(RedundantIAdd()); rules_[spv::Op::OpIAdd].push_back(MergeAddNegateArithmetic()); rules_[spv::Op::OpIAdd].push_back(MergeAddAddArithmetic()); rules_[spv::Op::OpIAdd].push_back(MergeAddSubArithmetic()); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/function.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/function.h index 8c0472c..45a0b23 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/function.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/function.h @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -39,6 +40,7 @@ class Function { public: using iterator = UptrVectorIterator; using const_iterator = UptrVectorIterator; + using ParamList = std::vector>; // Creates a function instance declared by the given OpFunction instruction // |def_inst|. @@ -77,6 +79,23 @@ class Function { // Does nothing if the function doesn't have such a parameter. inline void RemoveParameter(uint32_t id); + // Rewrites the function parameters by calling a replacer callback. + // The replacer takes two parameters: an expiring unique pointer to a current + // instruction, and a back-inserter into a new list of unique pointers to + // instructions. The replacer is called for each current parameter, in order. + // Not valid to call while also iterating through the parameter list, e.g. + // within the ForEachParam method. + using RewriteParamFn = std::function&&, std::back_insert_iterator&)>; + void RewriteParams(RewriteParamFn& replacer) { + ParamList new_params; + auto appender = std::back_inserter(new_params); + for (auto& param : params_) { + replacer(std::move(param), appender); + } + params_ = std::move(new_params); + } + // Saves the given function end instruction. inline void SetFunctionEnd(std::unique_ptr end_inst); @@ -197,7 +216,7 @@ class Function { // The OpFunction instruction that begins the definition of this function. std::unique_ptr def_inst_; // All parameters to this function. - std::vector> params_; + ParamList params_; // All debug instructions in this function's header. InstructionList debug_insts_in_header_; // All basic blocks inside this function in specification order diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.cpp index bef4501..9cdea43 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_exhaustive_pass.cpp @@ -55,6 +55,11 @@ Pass::Status InlineExhaustivePass::InlineExhaustive(Function* func) { } } } + + if (modified) { + FixDebugDeclares(func); + } + return (modified ? Status::SuccessWithChange : Status::SuccessWithoutChange); } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_pass.cpp index 3186433..193e276 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_pass.cpp @@ -30,6 +30,8 @@ namespace { constexpr int kSpvFunctionCallFunctionId = 2; constexpr int kSpvFunctionCallArgumentId = 3; constexpr int kSpvReturnValueId = 0; +constexpr int kSpvDebugDeclareVarInIdx = 3; +constexpr int kSpvAccessChainBaseInIdx = 0; } // namespace uint32_t InlinePass::AddPointerToType(uint32_t type_id, @@ -858,5 +860,68 @@ void InlinePass::InitializeInline() { InlinePass::InlinePass() {} +void InlinePass::FixDebugDeclares(Function* func) { + std::map access_chains; + std::vector debug_declare_insts; + + func->ForEachInst([&access_chains, &debug_declare_insts](Instruction* inst) { + if (inst->opcode() == spv::Op::OpAccessChain) { + access_chains[inst->result_id()] = inst; + } + if (inst->GetCommonDebugOpcode() == CommonDebugInfoDebugDeclare) { + debug_declare_insts.push_back(inst); + } + }); + + for (auto& inst : debug_declare_insts) { + FixDebugDeclare(inst, access_chains); + } +} + +void InlinePass::FixDebugDeclare( + Instruction* dbg_declare_inst, + const std::map& access_chains) { + do { + uint32_t var_id = + dbg_declare_inst->GetSingleWordInOperand(kSpvDebugDeclareVarInIdx); + + // The def-use chains are not kept up to date while inlining, so we need to + // get the variable by traversing the functions. + auto it = access_chains.find(var_id); + if (it == access_chains.end()) { + return; + } + Instruction* access_chain = it->second; + + // If the variable id in the debug declare is an access chain, it is + // invalid. it needs to be fixed up. The debug declare will be updated so + // that its Var operand becomes the base of the access chain. The indexes of + // the access chain are prepended before the indexes of the debug declare. + + std::vector operands; + for (int i = 0; i < kSpvDebugDeclareVarInIdx; i++) { + operands.push_back(dbg_declare_inst->GetInOperand(i)); + } + + uint32_t access_chain_base = + access_chain->GetSingleWordInOperand(kSpvAccessChainBaseInIdx); + operands.push_back(Operand(SPV_OPERAND_TYPE_ID, {access_chain_base})); + operands.push_back( + dbg_declare_inst->GetInOperand(kSpvDebugDeclareVarInIdx + 1)); + + for (uint32_t i = kSpvAccessChainBaseInIdx + 1; + i < access_chain->NumInOperands(); ++i) { + operands.push_back(access_chain->GetInOperand(i)); + } + + for (uint32_t i = kSpvDebugDeclareVarInIdx + 2; + i < dbg_declare_inst->NumInOperands(); ++i) { + operands.push_back(dbg_declare_inst->GetInOperand(i)); + } + + dbg_declare_inst->SetInOperands(std::move(operands)); + } while (true); +} + } // namespace opt } // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_pass.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_pass.h index 1c9d60e..7bea31d 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_pass.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/inline_pass.h @@ -150,6 +150,12 @@ class InlinePass : public Pass { // Initialize state for optimization of |module| void InitializeInline(); + // Fixes invalid debug declare functions in `func` that were caused by + // inlining. This function cannot be called while in the middle of inlining + // because it needs to be able to find the instructions that define an + // id. + void FixDebugDeclares(Function* func); + // Map from function's result id to function. std::unordered_map id2function_; @@ -241,6 +247,11 @@ class InlinePass : public Pass { // structural dominance. void UpdateSingleBlockLoopContinueTarget( uint32_t new_id, std::vector>* new_blocks); + + // Replaces the `var` operand of `dbg_declare_inst` and updates the indexes + // accordingly, if it is the id of an access chain in `access_chains`. + void FixDebugDeclare(Instruction* dbg_declare_inst, + const std::map& access_chains); }; } // namespace opt diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/instruction.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/instruction.cpp index aa4ae26..883e47f 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/instruction.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/instruction.cpp @@ -250,8 +250,7 @@ Instruction* Instruction::GetBaseAddress() const { case spv::Op::OpInBoundsPtrAccessChain: case spv::Op::OpImageTexelPointer: case spv::Op::OpCopyObject: - // All of these instructions have the base pointer use a base pointer - // in in-operand 0. + // All of these instructions have their base pointer in in-operand 0. base = base_inst->GetSingleWordInOperand(0); base_inst = context()->get_def_use_mgr()->GetDef(base); break; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/invocation_interlock_placement_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/invocation_interlock_placement_pass.cpp index 642e2d2..f25f554 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/invocation_interlock_placement_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/invocation_interlock_placement_pass.cpp @@ -26,10 +26,10 @@ #include #include "source/enum_set.h" -#include "source/enum_string_mapping.h" #include "source/opt/ir_context.h" #include "source/opt/reflect.h" #include "source/spirv_target_env.h" +#include "source/table2.h" #include "source/util/string_utils.h" namespace spvtools { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_builder.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_builder.h index f3e0afc..f7ac692 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_builder.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_builder.h @@ -15,6 +15,7 @@ #ifndef SOURCE_OPT_IR_BUILDER_H_ #define SOURCE_OPT_IR_BUILDER_H_ +#include #include #include #include @@ -480,8 +481,11 @@ class InstructionBuilder { return AddInstruction(std::move(select)); } - Instruction* AddAccessChain(uint32_t type_id, uint32_t base_ptr_id, - std::vector ids) { + Instruction* AddOpcodeAccessChain(spv::Op opcode, uint32_t type_id, + uint32_t base_ptr_id, + const std::vector& ids) { + assert(opcode == spv::Op::OpAccessChain || + opcode == spv::Op::OpInBoundsAccessChain); std::vector operands; operands.push_back({SPV_OPERAND_TYPE_ID, {base_ptr_id}}); @@ -490,12 +494,22 @@ class InstructionBuilder { } // TODO(1841): Handle id overflow. - std::unique_ptr new_inst( - new Instruction(GetContext(), spv::Op::OpAccessChain, type_id, - GetContext()->TakeNextId(), operands)); + std::unique_ptr new_inst(new Instruction( + GetContext(), opcode, type_id, GetContext()->TakeNextId(), operands)); return AddInstruction(std::move(new_inst)); } + Instruction* AddAccessChain(uint32_t type_id, uint32_t base_ptr_id, + const std::vector& ids) { + return AddOpcodeAccessChain(spv::Op::OpAccessChain, type_id, base_ptr_id, + ids); + } + Instruction* AddInBoundsAccessChain(uint32_t type_id, uint32_t base_ptr_id, + const std::vector& ids) { + return AddOpcodeAccessChain(spv::Op::OpInBoundsAccessChain, type_id, + base_ptr_id, ids); + } + Instruction* AddLoad(uint32_t type_id, uint32_t base_ptr_id, uint32_t alignment = 0) { std::vector operands; @@ -514,9 +528,19 @@ class InstructionBuilder { return AddInstruction(std::move(new_inst)); } + Instruction* AddCopyObject(uint32_t type_id, uint32_t value_id) { + std::vector operands{{SPV_OPERAND_TYPE_ID, {value_id}}}; + + // TODO(1841): Handle id overflow. + std::unique_ptr new_inst( + new Instruction(GetContext(), spv::Op::OpCopyObject, type_id, + GetContext()->TakeNextId(), operands)); + return AddInstruction(std::move(new_inst)); + } + Instruction* AddVariable(uint32_t type_id, uint32_t storage_class) { std::vector operands; - operands.push_back({SPV_OPERAND_TYPE_ID, {storage_class}}); + operands.push_back({SPV_OPERAND_TYPE_STORAGE_CLASS, {storage_class}}); std::unique_ptr new_inst( new Instruction(GetContext(), spv::Op::OpVariable, type_id, GetContext()->TakeNextId(), operands)); @@ -572,6 +596,26 @@ class InstructionBuilder { return AddInstruction(std::move(new_inst)); } + Instruction* AddDecoration(uint32_t target_id, spv::Decoration d, + const std::vector& literals) { + std::vector operands; + operands.push_back({SPV_OPERAND_TYPE_ID, {target_id}}); + operands.push_back({SPV_OPERAND_TYPE_DECORATION, {uint32_t(d)}}); + for (uint32_t literal : literals) { + operands.push_back({SPV_OPERAND_TYPE_LITERAL_INTEGER, {literal}}); + } + + std::unique_ptr new_inst( + new Instruction(GetContext(), spv::Op::OpDecorate, 0, 0, operands)); + // Decorations are annotation instructions. Add it via the IR context, + // so the decoration manager will be updated. + // Decorations don't belong to basic blocks, so there is no need + // to update the instruction to block mapping. + Instruction* result = new_inst.get(); + GetContext()->AddAnnotationInst(std::move(new_inst)); + return result; + } + Instruction* AddNaryExtendedInstruction( uint32_t result_type, uint32_t set, uint32_t instruction, const std::vector& ext_operands) { @@ -593,6 +637,23 @@ class InstructionBuilder { return AddInstruction(std::move(new_inst)); } + Instruction* AddSampledImage(uint32_t sampled_image_type_id, + uint32_t image_id, uint32_t sampler_id) { + std::vector operands; + operands.push_back({SPV_OPERAND_TYPE_ID, {image_id}}); + operands.push_back({SPV_OPERAND_TYPE_ID, {sampler_id}}); + + uint32_t result_id = GetContext()->TakeNextId(); + if (result_id == 0) { + return nullptr; + } + + std::unique_ptr new_inst( + new Instruction(GetContext(), spv::Op::OpSampledImage, + sampled_image_type_id, result_id, operands)); + return AddInstruction(std::move(new_inst)); + } + // Inserts the new instruction before the insertion point. Instruction* AddInstruction(std::unique_ptr&& insn) { Instruction* insn_ptr = &*insert_before_.InsertBefore(std::move(insn)); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_context.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_context.cpp index 1cf0d74..3f41965 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_context.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_context.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2017 Google Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -539,6 +541,7 @@ void IRContext::AddCombinatorsForCapability(uint32_t capability) { (uint32_t)spv::Op::OpTypeHitObjectNV, (uint32_t)spv::Op::OpTypeArray, (uint32_t)spv::Op::OpTypeRuntimeArray, + (uint32_t)spv::Op::OpTypeNodePayloadArrayAMDX, (uint32_t)spv::Op::OpTypeStruct, (uint32_t)spv::Op::OpTypeOpaque, (uint32_t)spv::Op::OpTypePointer, @@ -561,6 +564,7 @@ void IRContext::AddCombinatorsForCapability(uint32_t capability) { (uint32_t)spv::Op::OpCompositeConstruct, (uint32_t)spv::Op::OpCompositeExtract, (uint32_t)spv::Op::OpCompositeInsert, + (uint32_t)spv::Op::OpCopyLogical, (uint32_t)spv::Op::OpCopyObject, (uint32_t)spv::Op::OpTranspose, (uint32_t)spv::Op::OpSampledImage, diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_context.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_context.h index 3857696..d2b2092 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_context.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_context.h @@ -27,7 +27,6 @@ #include #include "source/assembly_grammar.h" -#include "source/enum_string_mapping.h" #include "source/opt/cfg.h" #include "source/opt/constants.h" #include "source/opt/debug_info_manager.h" @@ -44,6 +43,7 @@ #include "source/opt/struct_cfg_analysis.h" #include "source/opt/type_manager.h" #include "source/opt/value_number_table.h" +#include "source/table2.h" #include "source/util/make_unique.h" #include "source/util/string_utils.h" diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_loader.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_loader.cpp index a785048..567b180 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_loader.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/ir_loader.cpp @@ -207,6 +207,7 @@ bool IrLoader::AddInstruction(const spv_parsed_instruction_t* inst) { } else if (IsTypeInst(opcode)) { module_->AddType(std::move(spv_inst)); } else if (IsConstantInst(opcode) || opcode == spv::Op::OpVariable || + opcode == spv::Op::OpUntypedVariableKHR || opcode == spv::Op::OpUndef) { module_->AddGlobalValue(std::move(spv_inst)); } else if (spvIsExtendedInstruction(opcode) && diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.cpp index 91ea7c6..ae473ca 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/local_access_chain_convert_pass.cpp @@ -1,6 +1,8 @@ // Copyright (c) 2017 The Khronos Group Inc. // Copyright (c) 2017 Valve Corporation // Copyright (c) 2017 LunarG Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -397,41 +399,75 @@ Pass::Status LocalAccessChainConvertPass::Process() { void LocalAccessChainConvertPass::InitExtensions() { extensions_allowlist_.clear(); - extensions_allowlist_.insert( - {"SPV_AMD_shader_explicit_vertex_parameter", - "SPV_AMD_shader_trinary_minmax", "SPV_AMD_gcn_shader", - "SPV_KHR_shader_ballot", "SPV_AMD_shader_ballot", - "SPV_AMD_gpu_shader_half_float", "SPV_KHR_shader_draw_parameters", - "SPV_KHR_subgroup_vote", "SPV_KHR_8bit_storage", "SPV_KHR_16bit_storage", - "SPV_KHR_device_group", "SPV_KHR_multiview", - "SPV_NVX_multiview_per_view_attributes", "SPV_NV_viewport_array2", - "SPV_NV_stereo_view_rendering", "SPV_NV_sample_mask_override_coverage", - "SPV_NV_geometry_shader_passthrough", "SPV_AMD_texture_gather_bias_lod", - "SPV_KHR_storage_buffer_storage_class", - // SPV_KHR_variable_pointers - // Currently do not support extended pointer expressions - "SPV_AMD_gpu_shader_int16", "SPV_KHR_post_depth_coverage", - "SPV_KHR_shader_atomic_counter_ops", "SPV_EXT_shader_stencil_export", - "SPV_EXT_shader_viewport_index_layer", - "SPV_AMD_shader_image_load_store_lod", "SPV_AMD_shader_fragment_mask", - "SPV_EXT_fragment_fully_covered", "SPV_AMD_gpu_shader_half_float_fetch", - "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", - "SPV_GOOGLE_user_type", "SPV_NV_shader_subgroup_partitioned", - "SPV_EXT_demote_to_helper_invocation", "SPV_EXT_descriptor_indexing", - "SPV_NV_fragment_shader_barycentric", - "SPV_NV_compute_shader_derivatives", "SPV_NV_shader_image_footprint", - "SPV_NV_shading_rate", "SPV_NV_mesh_shader", "SPV_EXT_mesh_shader", - "SPV_NV_ray_tracing", "SPV_KHR_ray_tracing", "SPV_KHR_ray_query", - "SPV_EXT_fragment_invocation_density", "SPV_KHR_terminate_invocation", - "SPV_KHR_subgroup_uniform_control_flow", "SPV_KHR_integer_dot_product", - "SPV_EXT_shader_image_int64", "SPV_KHR_non_semantic_info", - "SPV_KHR_uniform_group_instructions", - "SPV_KHR_fragment_shader_barycentric", "SPV_KHR_vulkan_memory_model", - "SPV_NV_bindless_texture", "SPV_EXT_shader_atomic_float_add", - "SPV_EXT_fragment_shader_interlock", - "SPV_KHR_compute_shader_derivatives", "SPV_NV_cooperative_matrix", - "SPV_KHR_cooperative_matrix", "SPV_KHR_ray_tracing_position_fetch", - "SPV_KHR_fragment_shading_rate"}); + extensions_allowlist_.insert({ + "SPV_AMD_shader_explicit_vertex_parameter", + "SPV_AMD_shader_trinary_minmax", + "SPV_AMD_gcn_shader", + "SPV_KHR_shader_ballot", + "SPV_AMD_shader_ballot", + "SPV_AMD_gpu_shader_half_float", + "SPV_KHR_shader_draw_parameters", + "SPV_KHR_subgroup_vote", + "SPV_KHR_8bit_storage", + "SPV_KHR_16bit_storage", + "SPV_KHR_device_group", + "SPV_KHR_multiview", + "SPV_NVX_multiview_per_view_attributes", + "SPV_NV_viewport_array2", + "SPV_NV_stereo_view_rendering", + "SPV_NV_sample_mask_override_coverage", + "SPV_NV_geometry_shader_passthrough", + "SPV_AMD_texture_gather_bias_lod", + "SPV_KHR_storage_buffer_storage_class", + // SPV_KHR_variable_pointers + // Currently do not support extended pointer expressions + "SPV_AMD_gpu_shader_int16", + "SPV_KHR_post_depth_coverage", + "SPV_KHR_shader_atomic_counter_ops", + "SPV_EXT_shader_stencil_export", + "SPV_EXT_shader_viewport_index_layer", + "SPV_AMD_shader_image_load_store_lod", + "SPV_AMD_shader_fragment_mask", + "SPV_EXT_fragment_fully_covered", + "SPV_AMD_gpu_shader_half_float_fetch", + "SPV_GOOGLE_decorate_string", + "SPV_GOOGLE_hlsl_functionality1", + "SPV_GOOGLE_user_type", + "SPV_NV_shader_subgroup_partitioned", + "SPV_EXT_demote_to_helper_invocation", + "SPV_EXT_descriptor_indexing", + "SPV_NV_fragment_shader_barycentric", + "SPV_NV_compute_shader_derivatives", + "SPV_NV_shader_image_footprint", + "SPV_NV_shading_rate", + "SPV_NV_mesh_shader", + "SPV_EXT_mesh_shader", + "SPV_NV_ray_tracing", + "SPV_KHR_ray_tracing", + "SPV_KHR_ray_query", + "SPV_EXT_fragment_invocation_density", + "SPV_KHR_terminate_invocation", + "SPV_KHR_subgroup_uniform_control_flow", + "SPV_KHR_integer_dot_product", + "SPV_EXT_shader_image_int64", + "SPV_KHR_non_semantic_info", + "SPV_KHR_uniform_group_instructions", + "SPV_KHR_fragment_shader_barycentric", + "SPV_KHR_vulkan_memory_model", + "SPV_NV_bindless_texture", + "SPV_EXT_shader_atomic_float_add", + "SPV_EXT_fragment_shader_interlock", + "SPV_KHR_compute_shader_derivatives", + "SPV_NV_cooperative_matrix", + "SPV_KHR_cooperative_matrix", + "SPV_KHR_ray_tracing_position_fetch", + "SPV_AMDX_shader_enqueue", + "SPV_KHR_fragment_shading_rate", + "SPV_KHR_quad_control", + "SPV_NV_shader_invocation_reorder", + "SPV_NV_cluster_acceleration_structure", + "SPV_NV_linear_swept_spheres", + }); } bool LocalAccessChainConvertPass::AnyIndexIsOutOfBounds( diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.cpp index f9c5a79..1995470 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/local_single_block_elim_pass.cpp @@ -1,6 +1,8 @@ // Copyright (c) 2017 The Khronos Group Inc. // Copyright (c) 2017 Valve Corporation // Copyright (c) 2017 LunarG Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -233,69 +235,76 @@ Pass::Status LocalSingleBlockLoadStoreElimPass::Process() { void LocalSingleBlockLoadStoreElimPass::InitExtensions() { extensions_allowlist_.clear(); - extensions_allowlist_.insert({"SPV_AMD_shader_explicit_vertex_parameter", - "SPV_AMD_shader_trinary_minmax", - "SPV_AMD_gcn_shader", - "SPV_KHR_shader_ballot", - "SPV_AMD_shader_ballot", - "SPV_AMD_gpu_shader_half_float", - "SPV_KHR_shader_draw_parameters", - "SPV_KHR_subgroup_vote", - "SPV_KHR_8bit_storage", - "SPV_KHR_16bit_storage", - "SPV_KHR_device_group", - "SPV_KHR_multiview", - "SPV_NVX_multiview_per_view_attributes", - "SPV_NV_viewport_array2", - "SPV_NV_stereo_view_rendering", - "SPV_NV_sample_mask_override_coverage", - "SPV_NV_geometry_shader_passthrough", - "SPV_AMD_texture_gather_bias_lod", - "SPV_KHR_storage_buffer_storage_class", - "SPV_KHR_variable_pointers", - "SPV_AMD_gpu_shader_int16", - "SPV_KHR_post_depth_coverage", - "SPV_KHR_shader_atomic_counter_ops", - "SPV_EXT_shader_stencil_export", - "SPV_EXT_shader_viewport_index_layer", - "SPV_AMD_shader_image_load_store_lod", - "SPV_AMD_shader_fragment_mask", - "SPV_EXT_fragment_fully_covered", - "SPV_AMD_gpu_shader_half_float_fetch", - "SPV_GOOGLE_decorate_string", - "SPV_GOOGLE_hlsl_functionality1", - "SPV_GOOGLE_user_type", - "SPV_NV_shader_subgroup_partitioned", - "SPV_EXT_demote_to_helper_invocation", - "SPV_EXT_descriptor_indexing", - "SPV_NV_fragment_shader_barycentric", - "SPV_NV_compute_shader_derivatives", - "SPV_NV_shader_image_footprint", - "SPV_NV_shading_rate", - "SPV_NV_mesh_shader", - "SPV_EXT_mesh_shader", - "SPV_NV_ray_tracing", - "SPV_KHR_ray_tracing", - "SPV_KHR_ray_query", - "SPV_EXT_fragment_invocation_density", - "SPV_EXT_physical_storage_buffer", - "SPV_KHR_physical_storage_buffer", - "SPV_KHR_terminate_invocation", - "SPV_KHR_subgroup_uniform_control_flow", - "SPV_KHR_integer_dot_product", - "SPV_EXT_shader_image_int64", - "SPV_KHR_non_semantic_info", - "SPV_KHR_uniform_group_instructions", - "SPV_KHR_fragment_shader_barycentric", - "SPV_KHR_vulkan_memory_model", - "SPV_NV_bindless_texture", - "SPV_EXT_shader_atomic_float_add", - "SPV_EXT_fragment_shader_interlock", - "SPV_KHR_compute_shader_derivatives", - "SPV_NV_cooperative_matrix", - "SPV_KHR_cooperative_matrix", - "SPV_KHR_ray_tracing_position_fetch", - "SPV_KHR_fragment_shading_rate"}); + extensions_allowlist_.insert({ + "SPV_AMD_shader_explicit_vertex_parameter", + "SPV_AMD_shader_trinary_minmax", + "SPV_AMD_gcn_shader", + "SPV_KHR_shader_ballot", + "SPV_AMD_shader_ballot", + "SPV_AMDX_shader_enqueue", + "SPV_AMD_gpu_shader_half_float", + "SPV_KHR_shader_draw_parameters", + "SPV_KHR_subgroup_vote", + "SPV_KHR_8bit_storage", + "SPV_KHR_16bit_storage", + "SPV_KHR_device_group", + "SPV_KHR_multiview", + "SPV_NVX_multiview_per_view_attributes", + "SPV_NV_viewport_array2", + "SPV_NV_stereo_view_rendering", + "SPV_NV_sample_mask_override_coverage", + "SPV_NV_geometry_shader_passthrough", + "SPV_AMD_texture_gather_bias_lod", + "SPV_KHR_storage_buffer_storage_class", + "SPV_KHR_variable_pointers", + "SPV_AMD_gpu_shader_int16", + "SPV_KHR_post_depth_coverage", + "SPV_KHR_shader_atomic_counter_ops", + "SPV_EXT_shader_stencil_export", + "SPV_EXT_shader_viewport_index_layer", + "SPV_AMD_shader_image_load_store_lod", + "SPV_AMD_shader_fragment_mask", + "SPV_EXT_fragment_fully_covered", + "SPV_AMD_gpu_shader_half_float_fetch", + "SPV_GOOGLE_decorate_string", + "SPV_GOOGLE_hlsl_functionality1", + "SPV_GOOGLE_user_type", + "SPV_NV_shader_subgroup_partitioned", + "SPV_EXT_demote_to_helper_invocation", + "SPV_EXT_descriptor_indexing", + "SPV_NV_fragment_shader_barycentric", + "SPV_NV_compute_shader_derivatives", + "SPV_NV_shader_image_footprint", + "SPV_NV_shading_rate", + "SPV_NV_mesh_shader", + "SPV_EXT_mesh_shader", + "SPV_NV_ray_tracing", + "SPV_KHR_ray_tracing", + "SPV_KHR_ray_query", + "SPV_EXT_fragment_invocation_density", + "SPV_EXT_physical_storage_buffer", + "SPV_KHR_physical_storage_buffer", + "SPV_KHR_terminate_invocation", + "SPV_KHR_subgroup_uniform_control_flow", + "SPV_KHR_integer_dot_product", + "SPV_EXT_shader_image_int64", + "SPV_KHR_non_semantic_info", + "SPV_KHR_uniform_group_instructions", + "SPV_KHR_fragment_shader_barycentric", + "SPV_KHR_vulkan_memory_model", + "SPV_NV_bindless_texture", + "SPV_EXT_shader_atomic_float_add", + "SPV_EXT_fragment_shader_interlock", + "SPV_KHR_compute_shader_derivatives", + "SPV_NV_cooperative_matrix", + "SPV_KHR_cooperative_matrix", + "SPV_KHR_ray_tracing_position_fetch", + "SPV_KHR_fragment_shading_rate", + "SPV_KHR_quad_control", + "SPV_NV_shader_invocation_reorder", + "SPV_NV_cluster_acceleration_structure", + "SPV_NV_linear_swept_spheres", + }); } } // namespace opt diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.cpp index 38fa14e..6f28e54 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/local_single_store_elim_pass.cpp @@ -1,6 +1,8 @@ // Copyright (c) 2017 The Khronos Group Inc. // Copyright (c) 2017 Valve Corporation // Copyright (c) 2017 LunarG Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -86,66 +88,75 @@ Pass::Status LocalSingleStoreElimPass::Process() { } void LocalSingleStoreElimPass::InitExtensionAllowList() { - extensions_allowlist_.insert({"SPV_AMD_shader_explicit_vertex_parameter", - "SPV_AMD_shader_trinary_minmax", - "SPV_AMD_gcn_shader", - "SPV_KHR_shader_ballot", - "SPV_AMD_shader_ballot", - "SPV_AMD_gpu_shader_half_float", - "SPV_KHR_shader_draw_parameters", - "SPV_KHR_subgroup_vote", - "SPV_KHR_8bit_storage", - "SPV_KHR_16bit_storage", - "SPV_KHR_device_group", - "SPV_KHR_multiview", - "SPV_NVX_multiview_per_view_attributes", - "SPV_NV_viewport_array2", - "SPV_NV_stereo_view_rendering", - "SPV_NV_sample_mask_override_coverage", - "SPV_NV_geometry_shader_passthrough", - "SPV_AMD_texture_gather_bias_lod", - "SPV_KHR_storage_buffer_storage_class", - "SPV_KHR_variable_pointers", - "SPV_AMD_gpu_shader_int16", - "SPV_KHR_post_depth_coverage", - "SPV_KHR_shader_atomic_counter_ops", - "SPV_EXT_shader_stencil_export", - "SPV_EXT_shader_viewport_index_layer", - "SPV_AMD_shader_image_load_store_lod", - "SPV_AMD_shader_fragment_mask", - "SPV_EXT_fragment_fully_covered", - "SPV_AMD_gpu_shader_half_float_fetch", - "SPV_GOOGLE_decorate_string", - "SPV_GOOGLE_hlsl_functionality1", - "SPV_NV_shader_subgroup_partitioned", - "SPV_EXT_descriptor_indexing", - "SPV_NV_fragment_shader_barycentric", - "SPV_NV_compute_shader_derivatives", - "SPV_NV_shader_image_footprint", - "SPV_NV_shading_rate", - "SPV_NV_mesh_shader", - "SPV_EXT_mesh_shader", - "SPV_NV_ray_tracing", - "SPV_KHR_ray_query", - "SPV_EXT_fragment_invocation_density", - "SPV_EXT_physical_storage_buffer", - "SPV_KHR_physical_storage_buffer", - "SPV_KHR_terminate_invocation", - "SPV_KHR_subgroup_uniform_control_flow", - "SPV_KHR_integer_dot_product", - "SPV_EXT_shader_image_int64", - "SPV_KHR_non_semantic_info", - "SPV_KHR_uniform_group_instructions", - "SPV_KHR_fragment_shader_barycentric", - "SPV_KHR_vulkan_memory_model", - "SPV_NV_bindless_texture", - "SPV_EXT_shader_atomic_float_add", - "SPV_EXT_fragment_shader_interlock", - "SPV_KHR_compute_shader_derivatives", - "SPV_NV_cooperative_matrix", - "SPV_KHR_cooperative_matrix", - "SPV_KHR_ray_tracing_position_fetch", - "SPV_KHR_fragment_shading_rate"}); + extensions_allowlist_.insert({ + "SPV_AMD_shader_explicit_vertex_parameter", + "SPV_AMD_shader_trinary_minmax", + "SPV_AMD_gcn_shader", + "SPV_KHR_shader_ballot", + "SPV_AMD_shader_ballot", + "SPV_AMD_gpu_shader_half_float", + "SPV_KHR_shader_draw_parameters", + "SPV_KHR_subgroup_vote", + "SPV_KHR_8bit_storage", + "SPV_KHR_16bit_storage", + "SPV_KHR_device_group", + "SPV_KHR_multiview", + "SPV_NVX_multiview_per_view_attributes", + "SPV_NV_viewport_array2", + "SPV_NV_stereo_view_rendering", + "SPV_NV_sample_mask_override_coverage", + "SPV_NV_geometry_shader_passthrough", + "SPV_AMD_texture_gather_bias_lod", + "SPV_KHR_storage_buffer_storage_class", + "SPV_KHR_variable_pointers", + "SPV_AMD_gpu_shader_int16", + "SPV_KHR_post_depth_coverage", + "SPV_KHR_shader_atomic_counter_ops", + "SPV_EXT_shader_stencil_export", + "SPV_EXT_shader_viewport_index_layer", + "SPV_AMD_shader_image_load_store_lod", + "SPV_AMD_shader_fragment_mask", + "SPV_EXT_fragment_fully_covered", + "SPV_AMD_gpu_shader_half_float_fetch", + "SPV_GOOGLE_decorate_string", + "SPV_GOOGLE_hlsl_functionality1", + "SPV_NV_shader_subgroup_partitioned", + "SPV_EXT_descriptor_indexing", + "SPV_NV_fragment_shader_barycentric", + "SPV_NV_compute_shader_derivatives", + "SPV_NV_shader_image_footprint", + "SPV_NV_shading_rate", + "SPV_NV_mesh_shader", + "SPV_EXT_mesh_shader", + "SPV_NV_ray_tracing", + "SPV_KHR_ray_query", + "SPV_EXT_fragment_invocation_density", + "SPV_EXT_physical_storage_buffer", + "SPV_KHR_physical_storage_buffer", + "SPV_KHR_terminate_invocation", + "SPV_KHR_subgroup_uniform_control_flow", + "SPV_KHR_integer_dot_product", + "SPV_EXT_shader_image_int64", + "SPV_KHR_non_semantic_info", + "SPV_KHR_uniform_group_instructions", + "SPV_KHR_fragment_shader_barycentric", + "SPV_KHR_vulkan_memory_model", + "SPV_NV_bindless_texture", + "SPV_EXT_shader_atomic_float_add", + "SPV_EXT_fragment_shader_interlock", + "SPV_KHR_compute_shader_derivatives", + "SPV_NV_cooperative_matrix", + "SPV_KHR_cooperative_matrix", + "SPV_KHR_ray_tracing_position_fetch", + "SPV_AMDX_shader_enqueue", + "SPV_KHR_fragment_shading_rate", + "SPV_KHR_ray_tracing", + "SPV_KHR_quad_control", + "SPV_GOOGLE_user_type", + "SPV_NV_shader_invocation_reorder", + "SPV_NV_cluster_acceleration_structure", + "SPV_NV_linear_swept_spheres", + }); } bool LocalSingleStoreElimPass::ProcessVariable(Instruction* var_inst) { std::vector users; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/loop_unroller.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/loop_unroller.cpp index d9e34f2..2e279a7 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/loop_unroller.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/loop_unroller.cpp @@ -560,6 +560,10 @@ void LoopUnrollerUtilsImpl::ReplaceInductionUseWithFinalValue(Loop* loop) { loop->GetInductionVariables(inductions); for (size_t index = 0; index < inductions.size(); ++index) { + // We don't want the decorations that applied to the induction variable + // to be applied to the value that replace it. + context_->KillNamesAndDecorates(state_.previous_phis_[index]); + uint32_t trip_step_id = GetPhiDefID(state_.previous_phis_[index], state_.previous_latch_block_->id()); context_->ReplaceAllUsesWith(inductions[index]->result_id(), trip_step_id); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/mem_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/mem_pass.cpp index 65f45ec..e4eb751 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/mem_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/mem_pass.cpp @@ -100,17 +100,25 @@ Instruction* MemPass::GetPtr(uint32_t ptrId, uint32_t* varId) { Instruction* ptrInst = get_def_use_mgr()->GetDef(*varId); Instruction* varInst; - if (ptrInst->opcode() == spv::Op::OpConstantNull) { - *varId = 0; - return ptrInst; + switch (ptrInst->opcode()) { + case spv::Op::OpVariable: + case spv::Op::OpFunctionParameter: + varInst = ptrInst; + break; + case spv::Op::OpAccessChain: + case spv::Op::OpInBoundsAccessChain: + case spv::Op::OpPtrAccessChain: + case spv::Op::OpInBoundsPtrAccessChain: + case spv::Op::OpImageTexelPointer: + case spv::Op::OpCopyObject: + varInst = ptrInst->GetBaseAddress(); + break; + default: + *varId = 0; + return ptrInst; + break; } - if (ptrInst->opcode() != spv::Op::OpVariable && - ptrInst->opcode() != spv::Op::OpFunctionParameter) { - varInst = ptrInst->GetBaseAddress(); - } else { - varInst = ptrInst; - } if (varInst->opcode() == spv::Op::OpVariable) { *varId = varInst->result_id(); } else { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp index a41885c..aedca99 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/optimizer.cpp @@ -189,7 +189,7 @@ Optimizer& Optimizer::RegisterPerformancePasses(bool preserve_interface) { .RegisterPass(CreateLocalSingleBlockLoadStoreElimPass()) .RegisterPass(CreateLocalSingleStoreElimPass()) .RegisterPass(CreateAggressiveDCEPass(preserve_interface)) - .RegisterPass(CreateScalarReplacementPass()) + .RegisterPass(CreateScalarReplacementPass(0)) .RegisterPass(CreateLocalAccessChainConvertPass()) .RegisterPass(CreateLocalSingleBlockLoadStoreElimPass()) .RegisterPass(CreateLocalSingleStoreElimPass()) @@ -203,7 +203,7 @@ Optimizer& Optimizer::RegisterPerformancePasses(bool preserve_interface) { .RegisterPass(CreateRedundancyEliminationPass()) .RegisterPass(CreateCombineAccessChainsPass()) .RegisterPass(CreateSimplificationPass()) - .RegisterPass(CreateScalarReplacementPass()) + .RegisterPass(CreateScalarReplacementPass(0)) .RegisterPass(CreateLocalAccessChainConvertPass()) .RegisterPass(CreateLocalSingleBlockLoadStoreElimPass()) .RegisterPass(CreateLocalSingleStoreElimPass()) @@ -401,7 +401,7 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag, RegisterPass(CreateLoopUnswitchPass()); } else if (pass_name == "scalar-replacement") { if (pass_args.size() == 0) { - RegisterPass(CreateScalarReplacementPass()); + RegisterPass(CreateScalarReplacementPass(0)); } else { int limit = -1; if (pass_args.find_first_not_of("0123456789") == std::string::npos) { @@ -637,6 +637,10 @@ bool Optimizer::RegisterPassFromFlag(const std::string& flag, } } else if (pass_name == "trim-capabilities") { RegisterPass(CreateTrimCapabilitiesPass()); + } else if (pass_name == "split-combined-image-sampler") { + RegisterPass(CreateSplitCombinedImageSamplerPass()); + } else if (pass_name == "resolve-binding-conflicts") { + RegisterPass(CreateResolveBindingConflictsPass()); } else { Errorf(consumer(), nullptr, {}, "Unknown flag '--%s'. Use --help for a list of valid flags", @@ -1188,6 +1192,16 @@ Optimizer::PassToken CreateOpExtInstWithForwardReferenceFixupPass() { MakeUnique()); } +Optimizer::PassToken CreateSplitCombinedImageSamplerPass() { + return MakeUnique( + MakeUnique()); +} + +Optimizer::PassToken CreateResolveBindingConflictsPass() { + return MakeUnique( + MakeUnique()); +} + } // namespace spvtools extern "C" { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/passes.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/passes.h index 3311529..6c32978 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/passes.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/passes.h @@ -74,9 +74,11 @@ #include "source/opt/remove_unused_interface_variables_pass.h" #include "source/opt/replace_desc_array_access_using_var_index.h" #include "source/opt/replace_invalid_opc.h" +#include "source/opt/resolve_binding_conflicts_pass.h" #include "source/opt/scalar_replacement_pass.h" #include "source/opt/set_spec_constant_default_value_pass.h" #include "source/opt/simplification_pass.h" +#include "source/opt/split_combined_image_sampler_pass.h" #include "source/opt/spread_volatile_semantics.h" #include "source/opt/ssa_rewrite_pass.h" #include "source/opt/strength_reduction_pass.h" diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/private_to_local_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/private_to_local_pass.cpp index 4904e05..ac33dfb 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/private_to_local_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/private_to_local_pass.cpp @@ -90,13 +90,13 @@ Function* PrivateToLocalPass::FindLocalFunction(const Instruction& inst) const { Function* target_function = nullptr; context()->get_def_use_mgr()->ForEachUser( inst.result_id(), - [&target_function, &found_first_use, this](Instruction* use) { + [&target_function, &found_first_use, inst, this](Instruction* use) { BasicBlock* current_block = context()->get_instr_block(use); if (current_block == nullptr) { return; } - if (!IsValidUse(use)) { + if (!IsValidUse(use, inst.result_id())) { found_first_use = true; target_function = nullptr; return; @@ -153,7 +153,8 @@ uint32_t PrivateToLocalPass::GetNewType(uint32_t old_type_id) { return new_type_id; } -bool PrivateToLocalPass::IsValidUse(const Instruction* inst) const { +bool PrivateToLocalPass::IsValidUse(const Instruction* inst, + uint32_t private_variable_id) const { // The cases in this switch have to match the cases in |UpdateUse|. // If we don't know how to update it, it is not valid. if (inst->GetCommonDebugOpcode() == CommonDebugInfoDebugGlobalVariable) { @@ -161,13 +162,14 @@ bool PrivateToLocalPass::IsValidUse(const Instruction* inst) const { } switch (inst->opcode()) { case spv::Op::OpLoad: - case spv::Op::OpStore: case spv::Op::OpImageTexelPointer: // Treat like a load return true; + case spv::Op::OpStore: + return inst->GetOperand(1).AsId() != private_variable_id; case spv::Op::OpAccessChain: return context()->get_def_use_mgr()->WhileEachUser( - inst, [this](const Instruction* user) { - if (!IsValidUse(user)) return false; + inst, [this, inst](const Instruction* user) { + if (!IsValidUse(user, inst->result_id())) return false; return true; }); case spv::Op::OpName: diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/private_to_local_pass.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/private_to_local_pass.h index e96a965..93c1c50 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/private_to_local_pass.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/private_to_local_pass.h @@ -53,7 +53,7 @@ class PrivateToLocalPass : public Pass { // Returns true is |inst| is a valid use of a pointer. In this case, a // valid use is one where the transformation is able to rewrite the type to // match a change in storage class of the original variable. - bool IsValidUse(const Instruction* inst) const; + bool IsValidUse(const Instruction* inst, uint32_t private_variable_id) const; // Given the result id of a pointer type, |old_type_id|, this function // returns the id of a the same pointer type except the storage class has diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/redundancy_elimination.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/redundancy_elimination.cpp index 398225b..61234fa 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/redundancy_elimination.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/redundancy_elimination.cpp @@ -33,12 +33,7 @@ Pass::Status RedundancyEliminationPass::Process() { DominatorTree& dom_tree = context()->GetDominatorAnalysis(&func)->GetDomTree(); - // Keeps track of all ids that contain a given value number. We keep - // track of multiple values because they could have the same value, but - // different decorations. - std::map value_to_ids; - - if (EliminateRedundanciesFrom(dom_tree.GetRoot(), vnTable, value_to_ids)) { + if (EliminateRedundanciesFrom(dom_tree.GetRoot(), vnTable)) { modified = true; } } @@ -46,14 +41,21 @@ Pass::Status RedundancyEliminationPass::Process() { } bool RedundancyEliminationPass::EliminateRedundanciesFrom( - DominatorTreeNode* bb, const ValueNumberTable& vnTable, - std::map value_to_ids) { - bool modified = EliminateRedundanciesInBB(bb->bb_, vnTable, &value_to_ids); - - for (auto dominated_bb : bb->children_) { - modified |= EliminateRedundanciesFrom(dominated_bb, vnTable, value_to_ids); + DominatorTreeNode* bb, const ValueNumberTable& vnTable) { + struct State { + DominatorTreeNode* node; + std::map value_to_id_map; + }; + std::vector todo; + todo.push_back({bb, std::map()}); + bool modified = false; + for (size_t next_node = 0; next_node < todo.size(); next_node++) { + modified |= EliminateRedundanciesInBB(todo[next_node].node->bb_, vnTable, + &todo[next_node].value_to_id_map); + for (DominatorTreeNode* child : todo[next_node].node->children_) { + todo.push_back({child, todo[next_node].value_to_id_map}); + } } - return modified; } } // namespace opt diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/redundancy_elimination.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/redundancy_elimination.h index 40451f4..8c6e16a 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/redundancy_elimination.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/redundancy_elimination.h @@ -46,8 +46,7 @@ class RedundancyEliminationPass : public LocalRedundancyEliminationPass { // // Returns true if at least one instruction is deleted. bool EliminateRedundanciesFrom(DominatorTreeNode* bb, - const ValueNumberTable& vnTable, - std::map value_to_ids); + const ValueNumberTable& vnTable); }; } // namespace opt diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/replace_invalid_opc.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/replace_invalid_opc.cpp index 1b97c0e..305f2b6 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/replace_invalid_opc.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/replace_invalid_opc.cpp @@ -17,6 +17,8 @@ #include #include +#include "source/table2.h" + namespace spvtools { namespace opt { @@ -207,10 +209,10 @@ uint32_t ReplaceInvalidOpcodePass::GetSpecialConstant(uint32_t type_id) { } std::string ReplaceInvalidOpcodePass::BuildWarningMessage(spv::Op opcode) { - spv_opcode_desc opcode_info; - context()->grammar().lookupOpcode(opcode, &opcode_info); + const spvtools::InstructionDesc* opcode_desc = nullptr; + spvtools::LookupOpcode(opcode, &opcode_desc); std::string message = "Removing "; - message += opcode_info->name; + message += opcode_desc->name().data(); message += " instruction because of incompatible execution model."; return message; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/resolve_binding_conflicts_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/resolve_binding_conflicts_pass.cpp new file mode 100644 index 0000000..18ea2e5 --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/resolve_binding_conflicts_pass.cpp @@ -0,0 +1,328 @@ +// Copyright (c) 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/opt/resolve_binding_conflicts_pass.h" + +#include +#include +#include +#include + +#include "source/opt/decoration_manager.h" +#include "source/opt/def_use_manager.h" +#include "source/opt/instruction.h" +#include "source/opt/ir_builder.h" +#include "source/opt/ir_context.h" +#include "spirv/unified1/spirv.h" + +namespace spvtools { +namespace opt { + +// A VarBindingInfo contains the binding information for a single resource +// variable. +// +// Exactly one such object is created per resource variable in the +// module. In particular, when a resource variable is statically used by +// more than one entry point, those entry points share the same VarBindingInfo +// object for that variable. +struct VarBindingInfo { + const Instruction* const var; + const uint32_t descriptor_set; + Instruction* const binding_decoration; + + // Returns the binding number. + uint32_t binding() const { + return binding_decoration->GetSingleWordInOperand(2); + } + // Sets the binding number to 'b'. + void updateBinding(uint32_t b) { binding_decoration->SetOperand(2, {b}); } +}; + +// The bindings in the same descriptor set that are used by an entry point. +using BindingList = std::vector; +// A map from descriptor set number to the list of bindings in that descriptor +// set, as used by a particular entry point. +using DescriptorSets = std::unordered_map; + +IRContext::Analysis ResolveBindingConflictsPass::GetPreservedAnalyses() { + // All analyses are kept up to date. + // At most this modifies the Binding numbers on variables. + return IRContext::kAnalysisDefUse | IRContext::kAnalysisInstrToBlockMapping | + IRContext::kAnalysisDecorations | IRContext::kAnalysisCombinators | + IRContext::kAnalysisCFG | IRContext::kAnalysisDominatorAnalysis | + IRContext::kAnalysisLoopAnalysis | IRContext::kAnalysisNameMap | + IRContext::kAnalysisScalarEvolution | + IRContext::kAnalysisRegisterPressure | + IRContext::kAnalysisValueNumberTable | + IRContext::kAnalysisStructuredCFG | IRContext::kAnalysisBuiltinVarId | + IRContext::kAnalysisIdToFuncMapping | IRContext::kAnalysisConstants | + IRContext::kAnalysisTypes | IRContext::kAnalysisDebugInfo | + IRContext::kAnalysisLiveness; +} + +// Orders variable binding info objects. +// * The binding number is most signficant; +// * Then a sampler-like object compares greater than non-sampler like object. +// * Otherwise compare based on variable ID. +// This provides a total order among bindings in a descriptor set for a valid +// Vulkan module. +bool Less(const VarBindingInfo* const lhs, const VarBindingInfo* const rhs) { + if (lhs->binding() < rhs->binding()) return true; + if (lhs->binding() > rhs->binding()) return false; + + // Examine types. + // In valid Vulkan the only conflict can occur between + // images and samplers. We only care about a specific + // comparison when one is a image-like thing and the other + // is a sampler-like thing of the same shape. So unwrap + // types until we hit one of those two. + + auto* def_use_mgr = lhs->var->context()->get_def_use_mgr(); + + // Returns the type found by iteratively following pointer pointee type, + // or array element type. + auto unwrap = [&def_use_mgr](Instruction* ty) { + bool keep_going = true; + do { + switch (ty->opcode()) { + case spv::Op::OpTypePointer: + ty = def_use_mgr->GetDef(ty->GetSingleWordInOperand(1)); + break; + case spv::Op::OpTypeArray: + case spv::Op::OpTypeRuntimeArray: + ty = def_use_mgr->GetDef(ty->GetSingleWordInOperand(0)); + break; + default: + keep_going = false; + break; + } + } while (keep_going); + return ty; + }; + + auto* lhs_ty = unwrap(def_use_mgr->GetDef(lhs->var->type_id())); + auto* rhs_ty = unwrap(def_use_mgr->GetDef(rhs->var->type_id())); + if (lhs_ty->opcode() == rhs_ty->opcode()) { + // Pick based on variable ID. + return lhs->var->result_id() < rhs->var->result_id(); + } + // A sampler is always greater than an image. + if (lhs_ty->opcode() == spv::Op::OpTypeSampler) { + return false; + } + if (rhs_ty->opcode() == spv::Op::OpTypeSampler) { + return true; + } + // Pick based on variable ID. + return lhs->var->result_id() < rhs->var->result_id(); +} + +// Summarizes the caller-callee relationships between functions in a module. +class CallGraph { + public: + // Returns the list of all functions statically reachable from entry points, + // where callees precede callers. + const std::vector& CalleesBeforeCallers() const { + return visit_order_; + } + // Returns the list functions called from a given function. + const std::unordered_set& Callees(uint32_t caller) { + return calls_[caller]; + } + + CallGraph(IRContext& context) { + // Populate calls_. + std::queue callee_queue; + for (const auto& fn : *context.module()) { + auto& callees = calls_[fn.result_id()]; + context.AddCalls(&fn, &callee_queue); + while (!callee_queue.empty()) { + callees.insert(callee_queue.front()); + callee_queue.pop(); + } + } + + // Perform depth-first search, starting from each entry point. + // Populates visit_order_. + for (const auto& ep : context.module()->entry_points()) { + Visit(ep.GetSingleWordInOperand(1)); + } + } + + private: + // Visits a function, recursively visiting its callees. Adds this ID + // to the visit_order after all callees have been visited. + void Visit(uint32_t func_id) { + if (visited_.count(func_id)) { + return; + } + visited_.insert(func_id); + for (auto callee_id : calls_[func_id]) { + Visit(callee_id); + } + visit_order_.push_back(func_id); + } + + // Maps the ID of a function to the IDs of functions it calls. + std::unordered_map> calls_; + + // IDs of visited functions; + std::unordered_set visited_; + // IDs of functions, where callees precede callers. + std::vector visit_order_; +}; + +// Returns vector binding info for all resource variables in the module. +auto GetVarBindings(IRContext& context) { + std::vector vars; + auto* deco_mgr = context.get_decoration_mgr(); + for (auto& inst : context.module()->types_values()) { + if (inst.opcode() == spv::Op::OpVariable) { + Instruction* descriptor_set_deco = nullptr; + Instruction* binding_deco = nullptr; + for (auto* deco : deco_mgr->GetDecorationsFor(inst.result_id(), false)) { + switch (static_cast(deco->GetSingleWordInOperand(1))) { + case spv::Decoration::DescriptorSet: + assert(!descriptor_set_deco); + descriptor_set_deco = deco; + break; + case spv::Decoration::Binding: + assert(!binding_deco); + binding_deco = deco; + break; + default: + break; + } + } + if (descriptor_set_deco && binding_deco) { + vars.push_back({&inst, descriptor_set_deco->GetSingleWordInOperand(2), + binding_deco}); + } + } + } + return vars; +} + +// Merges the bindings from source into sink. Maintains order and uniqueness +// within a list of bindings. +void Merge(DescriptorSets& sink, const DescriptorSets& source) { + for (auto index_and_bindings : source) { + const uint32_t index = index_and_bindings.first; + const BindingList& src1 = index_and_bindings.second; + const BindingList& src2 = sink[index]; + BindingList merged; + merged.resize(src1.size() + src2.size()); + auto merged_end = std::merge(src1.begin(), src1.end(), src2.begin(), + src2.end(), merged.begin(), Less); + auto unique_end = std::unique(merged.begin(), merged_end); + merged.resize(unique_end - merged.begin()); + sink[index] = std::move(merged); + } +} + +// Resolves conflicts within this binding list, so the binding number on an +// item is at least one more than the binding number on the previous item. +// When this does not yet hold, increase the binding number on the second +// item in the pair. Returns true if any changes were applied. +bool ResolveConflicts(BindingList& bl) { + bool changed = false; + for (size_t i = 1; i < bl.size(); i++) { + const auto prev_num = bl[i - 1]->binding(); + if (prev_num >= bl[i]->binding()) { + bl[i]->updateBinding(prev_num + 1); + changed = true; + } + } + return changed; +} + +Pass::Status ResolveBindingConflictsPass::Process() { + // Assumes the descriptor set and binding decorations are not provided + // via decoration groups. Decoration groups were deprecated in SPIR-V 1.3 + // Revision 6. I have not seen any compiler generate them. --dneto + + auto vars = GetVarBindings(*context()); + + // Maps a function ID to the variables used directly or indirectly by the + // function, organized into descriptor sets. Each descriptor set + // consists of a BindingList of distinct variables. + std::unordered_map used_vars; + + // Determine variables directly used by functions. + auto* def_use_mgr = context()->get_def_use_mgr(); + for (auto& var : vars) { + std::unordered_set visited_functions_for_var; + def_use_mgr->ForEachUser(var.var, [&](Instruction* user) { + if (auto* block = context()->get_instr_block(user)) { + auto* fn = block->GetParent(); + assert(fn); + const auto fn_id = fn->result_id(); + if (visited_functions_for_var.insert(fn_id).second) { + used_vars[fn_id][var.descriptor_set].push_back(&var); + } + } + }); + } + + // Sort within a descriptor set by binding number. + for (auto& sets_for_fn : used_vars) { + for (auto& ds : sets_for_fn.second) { + BindingList& bindings = ds.second; + std::stable_sort(bindings.begin(), bindings.end(), Less); + } + } + + // Propagate from callees to callers. + CallGraph call_graph(*context()); + for (const uint32_t caller : call_graph.CalleesBeforeCallers()) { + DescriptorSets& caller_ds = used_vars[caller]; + for (const uint32_t callee : call_graph.Callees(caller)) { + Merge(caller_ds, used_vars[callee]); + } + } + + // At this point, the descriptor sets associated with each entry point + // capture exactly the set of resource variables statically used + // by the static call tree of that entry point. + + // Resolve conflicts. + // VarBindingInfo objects may be shared between the bindings lists. + // Updating a binding in one list can require updating another list later. + // So repeat updates until settling. + + // The union of BindingLists across all entry points. + std::vector ep_bindings; + + for (auto& ep : context()->module()->entry_points()) { + for (auto& ds : used_vars[ep.GetSingleWordInOperand(1)]) { + BindingList& bindings = ds.second; + ep_bindings.push_back(&bindings); + } + } + bool modified = false; + bool found_conflict; + do { + found_conflict = false; + for (BindingList* bl : ep_bindings) { + found_conflict |= ResolveConflicts(*bl); + } + modified |= found_conflict; + } while (found_conflict); + + return modified ? Pass::Status::SuccessWithChange + : Pass::Status::SuccessWithoutChange; +} + +} // namespace opt +} // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/resolve_binding_conflicts_pass.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/resolve_binding_conflicts_pass.h new file mode 100644 index 0000000..d1ab433 --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/resolve_binding_conflicts_pass.h @@ -0,0 +1,38 @@ +// Copyright (c) 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIBSPIRV_OPT_RESOLVE_BINDING_CONFLICTS_PASS_H_ +#define LIBSPIRV_OPT_RESOLVE_BINDING_CONFLICTS_PASS_H_ + +#include +#include +#include + +#include "source/diagnostic.h" +#include "source/opt/pass.h" +#include "source/util/small_vector.h" + +namespace spvtools { +namespace opt { +class ResolveBindingConflictsPass : public Pass { + public: + virtual ~ResolveBindingConflictsPass() override = default; + const char* name() const override { return "resolve-binding-conflicts"; } + IRContext::Analysis GetPreservedAnalyses() override; + Status Process() override; +}; +} // namespace opt +} // namespace spvtools + +#endif // LIBSPIRV_OPT_RESOLVE_BINDING_CONFLICTS_PASS_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.cpp index 38c8aec..ff81fae 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2017 Google Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -671,7 +673,8 @@ bool ScalarReplacementPass::CheckTypeAnnotations( for (auto inst : get_decoration_mgr()->GetDecorationsFor(typeInst->result_id(), false)) { uint32_t decoration; - if (inst->opcode() == spv::Op::OpDecorate) { + if (inst->opcode() == spv::Op::OpDecorate || + inst->opcode() == spv::Op::OpDecorateId) { decoration = inst->GetSingleWordInOperand(1u); } else { assert(inst->opcode() == spv::Op::OpMemberDecorate); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.h index c73ecfd..61d341e 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/scalar_replacement_pass.h @@ -33,7 +33,7 @@ namespace opt { // Documented in optimizer.hpp class ScalarReplacementPass : public MemPass { private: - static constexpr uint32_t kDefaultLimit = 100; + static constexpr uint32_t kDefaultLimit = 0; public: ScalarReplacementPass(uint32_t limit = kDefaultLimit) diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/split_combined_image_sampler_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/split_combined_image_sampler_pass.cpp new file mode 100644 index 0000000..0af4dba --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/split_combined_image_sampler_pass.cpp @@ -0,0 +1,648 @@ +// Copyright (c) 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "source/opt/split_combined_image_sampler_pass.h" + +#include +#include +#include + +#include "source/opt/instruction.h" +#include "source/opt/ir_builder.h" +#include "source/opt/ir_context.h" +#include "source/opt/type_manager.h" +#include "source/opt/types.h" +#include "source/util/make_unique.h" +#include "source/util/string_utils.h" +#include "spirv/unified1/spirv.h" + +namespace spvtools { +namespace opt { + +#define CHECK(cond) \ + { \ + if ((cond) != SPV_SUCCESS) return Pass::Status::Failure; \ + } + +#define CHECK_STATUS(cond) \ + { \ + if (auto c = (cond); c != SPV_SUCCESS) return c; \ + } + +IRContext::Analysis SplitCombinedImageSamplerPass::GetPreservedAnalyses() { + return + // def use manager is updated + IRContext::kAnalysisDefUse + + // decorations are updated + | IRContext::kAnalysisDecorations + + // control flow is not changed + | IRContext::kAnalysisCFG // + | IRContext::kAnalysisLoopAnalysis // + | IRContext::kAnalysisStructuredCFG + + // type manager is updated + | IRContext::kAnalysisTypes; +} + +Pass::Status SplitCombinedImageSamplerPass::Process() { + def_use_mgr_ = context()->get_def_use_mgr(); + type_mgr_ = context()->get_type_mgr(); + + FindCombinedTextureSamplers(); + if (combined_types_to_remove_.empty() && !sampled_image_used_as_param_) { + return Ok(); + } + + CHECK(RemapFunctions()); + CHECK(RemapVars()); + CHECK(RemoveDeadTypes()); + + def_use_mgr_ = nullptr; + type_mgr_ = nullptr; + + return Ok(); +} + +spvtools::DiagnosticStream SplitCombinedImageSamplerPass::Fail() { + return std::move( + spvtools::DiagnosticStream({}, consumer(), "", SPV_ERROR_INVALID_BINARY) + << "split-combined-image-sampler: "); +} + +void SplitCombinedImageSamplerPass::FindCombinedTextureSamplers() { + for (auto& inst : context()->types_values()) { + RegisterGlobal(inst.result_id()); + switch (inst.opcode()) { + case spv::Op::OpTypeSampler: + // Modules can't have duplicate sampler types. + assert(!sampler_type_); + sampler_type_ = &inst; + break; + + case spv::Op::OpTypeSampledImage: + if (!first_sampled_image_type_) { + first_sampled_image_type_ = &inst; + } + combined_types_.insert(inst.result_id()); + def_use_mgr_->WhileEachUser(inst.result_id(), [&](Instruction* i) { + sampled_image_used_as_param_ |= + i->opcode() == spv::Op::OpTypeFunction; + return !sampled_image_used_as_param_; + }); + break; + + case spv::Op::OpTypeArray: + case spv::Op::OpTypeRuntimeArray: { + auto pointee_id = inst.GetSingleWordInOperand(0); + if (combined_types_.find(pointee_id) != combined_types_.end()) { + combined_types_.insert(inst.result_id()); + combined_types_to_remove_.push_back(inst.result_id()); + } + } break; + + case spv::Op::OpTypePointer: { + auto sc = + static_cast(inst.GetSingleWordInOperand(0)); + if (sc == spv::StorageClass::UniformConstant) { + auto pointee_id = inst.GetSingleWordInOperand(1); + if (combined_types_.find(pointee_id) != combined_types_.end()) { + combined_types_.insert(inst.result_id()); + combined_types_to_remove_.push_back(inst.result_id()); + } + } + } break; + + case spv::Op::OpVariable: + if (combined_types_.find(inst.type_id()) != combined_types_.end()) { + ordered_vars_.push_back(&inst); + } + break; + + default: + break; + } + } +} + +Instruction* SplitCombinedImageSamplerPass::GetSamplerType() { + if (!sampler_type_) { + analysis::Sampler s; + uint32_t sampler_type_id = type_mgr_->GetTypeInstruction(&s); + sampler_type_ = def_use_mgr_->GetDef(sampler_type_id); + assert(first_sampled_image_type_); + sampler_type_->InsertBefore(first_sampled_image_type_); + RegisterNewGlobal(sampler_type_->result_id()); + } + return sampler_type_; +} + +spv_result_t SplitCombinedImageSamplerPass::RemapVars() { + for (Instruction* var : ordered_vars_) { + CHECK_STATUS(RemapVar(var)); + } + return SPV_SUCCESS; +} + +std::pair SplitCombinedImageSamplerPass::SplitType( + Instruction& combined_kind_type) { + if (auto where = type_remap_.find(combined_kind_type.result_id()); + where != type_remap_.end()) { + auto& type_remap = where->second; + return {type_remap.image_kind_type, type_remap.sampler_kind_type}; + } + + switch (combined_kind_type.opcode()) { + case spv::Op::OpTypeSampledImage: { + auto* image_type = + def_use_mgr_->GetDef(combined_kind_type.GetSingleWordInOperand(0)); + auto* sampler_type = GetSamplerType(); + type_remap_[combined_kind_type.result_id()] = {&combined_kind_type, + image_type, sampler_type}; + return {image_type, sampler_type}; + break; + } + case spv::Op::OpTypePointer: { + auto sc = static_cast( + combined_kind_type.GetSingleWordInOperand(0)); + if (sc == spv::StorageClass::UniformConstant) { + auto* pointee = + def_use_mgr_->GetDef(combined_kind_type.GetSingleWordInOperand(1)); + auto [image_pointee, sampler_pointee] = SplitType(*pointee); + // These would be null if the pointee is an image type or a sampler + // type. Don't decompose them. Currently this method does not check the + // assumption that it is being only called on combined types. So code + // this defensively. + if (image_pointee && sampler_pointee) { + auto* ptr_image = MakeUniformConstantPointer(image_pointee); + auto* ptr_sampler = MakeUniformConstantPointer(sampler_pointee); + type_remap_[combined_kind_type.result_id()] = { + &combined_kind_type, ptr_image, ptr_sampler}; + return {ptr_image, ptr_sampler}; + } + } + break; + } + case spv::Op::OpTypeArray: { + const auto* array_ty = + type_mgr_->GetType(combined_kind_type.result_id())->AsArray(); + assert(array_ty); + const auto* sampled_image_ty = array_ty->element_type()->AsSampledImage(); + assert(sampled_image_ty); + + const analysis::Type* image_ty = sampled_image_ty->image_type(); + assert(image_ty); + analysis::Array array_image_ty(image_ty, array_ty->length_info()); + const uint32_t array_image_ty_id = + type_mgr_->GetTypeInstruction(&array_image_ty); + auto* array_image_ty_inst = def_use_mgr_->GetDef(array_image_ty_id); + if (!IsKnownGlobal(array_image_ty_id)) { + array_image_ty_inst->InsertBefore(&combined_kind_type); + RegisterNewGlobal(array_image_ty_id); + // GetTypeInstruction also updated the def-use manager. + } + + analysis::Array sampler_array_ty( + type_mgr_->GetType(GetSamplerType()->result_id()), + array_ty->length_info()); + const uint32_t array_sampler_ty_id = + type_mgr_->GetTypeInstruction(&sampler_array_ty); + auto* array_sampler_ty_inst = def_use_mgr_->GetDef(array_sampler_ty_id); + if (!IsKnownGlobal(array_sampler_ty_id)) { + array_sampler_ty_inst->InsertBefore(&combined_kind_type); + RegisterNewGlobal(array_sampler_ty_id); + // GetTypeInstruction also updated the def-use manager. + } + return {array_image_ty_inst, array_sampler_ty_inst}; + } + case spv::Op::OpTypeRuntimeArray: { + // This is like the sized-array case, but there is no length parameter. + auto* array_ty = + type_mgr_->GetType(combined_kind_type.result_id())->AsRuntimeArray(); + assert(array_ty); + auto* sampled_image_ty = array_ty->element_type()->AsSampledImage(); + assert(sampled_image_ty); + + const analysis::Type* image_ty = sampled_image_ty->image_type(); + assert(image_ty); + analysis::RuntimeArray array_image_ty(image_ty); + const uint32_t array_image_ty_id = + type_mgr_->GetTypeInstruction(&array_image_ty); + auto* array_image_ty_inst = def_use_mgr_->GetDef(array_image_ty_id); + if (!IsKnownGlobal(array_image_ty_id)) { + array_image_ty_inst->InsertBefore(&combined_kind_type); + RegisterNewGlobal(array_image_ty_id); + // GetTypeInstruction also updated the def-use manager. + } + + analysis::RuntimeArray sampler_array_ty( + type_mgr_->GetType(GetSamplerType()->result_id())); + const uint32_t array_sampler_ty_id = + type_mgr_->GetTypeInstruction(&sampler_array_ty); + auto* array_sampler_ty_inst = def_use_mgr_->GetDef(array_sampler_ty_id); + if (!IsKnownGlobal(array_sampler_ty_id)) { + array_sampler_ty_inst->InsertBefore(&combined_kind_type); + RegisterNewGlobal(array_sampler_ty_id); + // GetTypeInstruction also updated the def-use manager. + } + return {array_image_ty_inst, array_sampler_ty_inst}; + } + default: + break; + } + return {nullptr, nullptr}; +} + +spv_result_t SplitCombinedImageSamplerPass::RemapVar( + Instruction* combined_var) { + InstructionBuilder builder(context(), combined_var, + IRContext::kAnalysisDefUse); + + // Create an image variable, and a sampler variable. + auto* combined_var_type = def_use_mgr_->GetDef(combined_var->type_id()); + auto [ptr_image_ty, ptr_sampler_ty] = SplitType(*combined_var_type); + assert(ptr_image_ty); + assert(ptr_sampler_ty); + Instruction* sampler_var = builder.AddVariable( + ptr_sampler_ty->result_id(), SpvStorageClassUniformConstant); + Instruction* image_var = builder.AddVariable(ptr_image_ty->result_id(), + SpvStorageClassUniformConstant); + modified_ = true; + return RemapUses(combined_var, image_var, sampler_var); +} + +spv_result_t SplitCombinedImageSamplerPass::RemapUses( + Instruction* combined, Instruction* image_part, Instruction* sampler_part) { + // The instructions to delete. + std::unordered_set dead_insts; + // The insertion point should be updated before using this builder. + // We needed *something* here. + InstructionBuilder builder(context(), combined, IRContext::kAnalysisDefUse); + + // This code must maintain the SPIR-V "Data rule" about sampled image values: + // > All OpSampledImage instructions, or instructions that load an image or + // > sampler reference, must be in the same block in which their Result + // > are consumed. + // + // When the code below inserts OpSampledImage instructions, it is always + // either: + // - in the same block as the previous OpSampledImage instruction it is + // replacing, or + // - in the same block as the instruction using sampled image value it is + // replacing. + // + // Assuming that rule is already honoured by the module, these updates will + // continue to honour the rule. + + // Represents a single use of a value to be remapped. + struct RemapUse { + uint32_t used_id; // The ID that is being used. + Instruction* user; + uint32_t index; + Instruction* image_part; // The image part of the replacement. + Instruction* sampler_part; // The sampler part of the replacement. + }; + // The work list of uses to be remapped. + std::vector uses; + + // Adds remap records for each use of a value to be remapped. + // Also schedules the original value for deletion. + auto add_remap = [this, &dead_insts, &uses](Instruction* combined_arg, + Instruction* image_part_arg, + Instruction* sampler_part_arg) { + const uint32_t used_combined_id = combined_arg->result_id(); + + def_use_mgr_->ForEachUse( + combined_arg, [&](Instruction* user, uint32_t use_index) { + uses.push_back({used_combined_id, user, use_index, image_part_arg, + sampler_part_arg}); + }); + dead_insts.insert(combined_arg); + }; + + add_remap(combined, image_part, sampler_part); + + // Use index-based iteration because we can add to the work list as we go + // along, and reallocation would invalidate ordinary iterators. + for (size_t use_index = 0; use_index < uses.size(); ++use_index) { + auto& use = uses[use_index]; + switch (use.user->opcode()) { + case spv::Op::OpCopyObject: { + // Append the uses of this OpCopyObject to the work list. + add_remap(use.user, image_part, sampler_part); + break; + } + case spv::Op::OpLoad: { + assert(use.index == 2 && "variable used as non-pointer index on load"); + Instruction* load = use.user; + + // Assume the loaded value is a sampled image. + assert(def_use_mgr_->GetDef(load->type_id())->opcode() == + spv::Op::OpTypeSampledImage); + + // Create loads for the image part and sampler part. + builder.SetInsertPoint(load); + auto* image = builder.AddLoad(PointeeTypeId(use.image_part), + use.image_part->result_id()); + auto* sampler = builder.AddLoad(PointeeTypeId(use.sampler_part), + use.sampler_part->result_id()); + + // Move decorations, such as RelaxedPrecision. + auto* deco_mgr = context()->get_decoration_mgr(); + deco_mgr->CloneDecorations(load->result_id(), image->result_id()); + deco_mgr->CloneDecorations(load->result_id(), sampler->result_id()); + deco_mgr->RemoveDecorationsFrom(load->result_id()); + + // Create a sampled image from the loads of the two parts. + auto* sampled_image = builder.AddSampledImage( + load->type_id(), image->result_id(), sampler->result_id()); + // Replace the original sampled image value with the new one. + std::unordered_set users; + def_use_mgr_->ForEachUse( + load, [&users, sampled_image](Instruction* user, uint32_t index) { + user->SetOperand(index, {sampled_image->result_id()}); + users.insert(user); + }); + for (auto* user : users) { + def_use_mgr_->AnalyzeInstUse(user); + } + dead_insts.insert(load); + break; + } + case spv::Op::OpDecorate: { + assert(use.index == 0 && "variable used as non-target index"); + builder.SetInsertPoint(use.user); + spv::Decoration deco{use.user->GetSingleWordInOperand(1)}; + std::vector literals; + for (uint32_t i = 2; i < use.user->NumInOperands(); i++) { + literals.push_back(use.user->GetSingleWordInOperand(i)); + } + builder.AddDecoration(use.image_part->result_id(), deco, literals); + builder.AddDecoration(use.sampler_part->result_id(), deco, literals); + // KillInst will delete names and decorations, so don't schedule a + // deletion of this instruction. + break; + } + case spv::Op::OpEntryPoint: { + // The entry point lists variables in the shader interface, i.e. + // module-scope variables referenced by the static call tree rooted + // at the entry point. (It can be a proper superset). Before SPIR-V + // 1.4, only Input and Output variables are listed; in 1.4 and later, + // module-scope variables in all storage classes are listed. + // If a combined image+sampler is listed by the entry point, then + // the separated image and sampler variables should be. + assert(use.index >= 3 && + "variable used in OpEntryPoint but not as an interface ID"); + use.user->SetOperand(use.index, {use.image_part->result_id()}); + use.user->InsertOperand( + use.user->NumOperands(), + {SPV_OPERAND_TYPE_ID, {use.sampler_part->result_id()}}); + def_use_mgr_->AnalyzeInstUse(use.user); + break; + } + case spv::Op::OpName: { + // Synthesize new names from the old. + const auto name = use.user->GetOperand(1).AsString(); + AddOpName(use.image_part->result_id(), name + "_image"); + AddOpName(use.sampler_part->result_id(), name + "_sampler"); + + // KillInst will delete names and decorations, so don't schedule a + // deletion of this instruction. + break; + } + case spv::Op::OpFunctionCall: { + // Replace each combined arg with two args: the image part, then the + // sampler part. + // The combined value could have been used twice in the argument list. + // Moving things around now will invalidate the 'use' list above. + // So don't trust the use index value. + auto& call = *use.user; + // The insert API only takes absolute arg IDs, not "in" arg IDs. + const auto first_arg_operand_index = 3; // Skip the callee ID + for (uint32_t i = first_arg_operand_index; i < call.NumOperands(); + ++i) { + if (use.used_id == call.GetSingleWordOperand(i)) { + call.SetOperand(i, {use.sampler_part->result_id()}); + call.InsertOperand( + i, {SPV_OPERAND_TYPE_ID, {use.image_part->result_id()}}); + ++i; + } + } + def_use_mgr_->AnalyzeInstUse(&call); + break; + } + case spv::Op::OpAccessChain: + case spv::Op::OpInBoundsAccessChain: { + auto* original_access_chain = use.user; + builder.SetInsertPoint(original_access_chain); + // It can only be the base pointer + assert(use.index == 2); + + // Replace the original access chain with access chains for the image + // part and the sampler part. + std::vector indices; + for (uint32_t i = 3; i < original_access_chain->NumOperands(); i++) { + indices.push_back(original_access_chain->GetSingleWordOperand(i)); + } + + auto [result_image_part_ty, result_sampler_part_ty] = + SplitType(*def_use_mgr_->GetDef(original_access_chain->type_id())); + auto* result_image_part = builder.AddOpcodeAccessChain( + use.user->opcode(), result_image_part_ty->result_id(), + use.image_part->result_id(), indices); + auto* result_sampler_part = builder.AddOpcodeAccessChain( + use.user->opcode(), result_sampler_part_ty->result_id(), + use.sampler_part->result_id(), indices); + + // Remap uses of the original access chain. + add_remap(original_access_chain, result_image_part, + result_sampler_part); + break; + } + default: { + uint32_t used_type_id = def_use_mgr_->GetDef(use.used_id)->type_id(); + auto* used_type = def_use_mgr_->GetDef(used_type_id); + if (used_type->opcode() == spv::Op::OpTypeSampledImage) { + // This value being used is a sampled image value. But it's + // being replaced, so recreate it here. + // Example: used by OpImage, OpImageSampleExplicitLod, etc. + builder.SetInsertPoint(use.user); + auto* sampled_image = + builder.AddSampledImage(used_type_id, use.image_part->result_id(), + use.sampler_part->result_id()); + use.user->SetOperand(use.index, {sampled_image->result_id()}); + def_use_mgr_->AnalyzeInstUse(use.user); + break; + } + return Fail() << "unhandled user: " << *use.user; + } + } + } + + for (auto* inst : dead_insts) { + KillInst(inst); + } + + return SPV_SUCCESS; +} + +spv_result_t SplitCombinedImageSamplerPass::RemapFunctions() { + // Remap function types. A combined type can appear as a parameter, but not as + // the return type. + { + std::unordered_set dead_insts; + for (auto& inst : context()->types_values()) { + if (inst.opcode() != spv::Op::OpTypeFunction) { + continue; + } + analysis::Function* f_ty = + type_mgr_->GetType(inst.result_id())->AsFunction(); + std::vector new_params; + for (const auto* param_ty : f_ty->param_types()) { + const auto param_ty_id = type_mgr_->GetId(param_ty); + if (combined_types_.find(param_ty_id) != combined_types_.end()) { + auto* param_type = def_use_mgr_->GetDef(param_ty_id); + auto [image_type, sampler_type] = SplitType(*param_type); + assert(image_type); + assert(sampler_type); + // The image and sampler types must already exist, so there is no + // need to move them to the right spot. + new_params.push_back(type_mgr_->GetType(image_type->result_id())); + new_params.push_back(type_mgr_->GetType(sampler_type->result_id())); + } else { + new_params.push_back(param_ty); + } + } + if (new_params.size() != f_ty->param_types().size()) { + // Replace this type. + analysis::Function new_f_ty(f_ty->return_type(), new_params); + const uint32_t new_f_ty_id = type_mgr_->GetTypeInstruction(&new_f_ty); + std::unordered_set users; + def_use_mgr_->ForEachUse( + &inst, + [&users, new_f_ty_id](Instruction* user, uint32_t use_index) { + user->SetOperand(use_index, {new_f_ty_id}); + users.insert(user); + }); + for (auto* user : users) { + def_use_mgr_->AnalyzeInstUse(user); + } + dead_insts.insert(&inst); + } + } + for (auto* inst : dead_insts) { + KillInst(inst); + } + } + + // Rewite OpFunctionParameter in function definitions. + for (Function& fn : *context()->module()) { + // Rewrite the function parameters and record their replacements. + struct Replacement { + Instruction* combined; + Instruction* image; + Instruction* sampler; + }; + std::vector replacements; + + Function::RewriteParamFn rewriter = + [&](std::unique_ptr&& param, + std::back_insert_iterator& appender) { + if (combined_types_.count(param->type_id()) == 0) { + appender = std::move(param); + return; + } + + // Replace this parameter with two new parameters. + auto* combined_inst = param.release(); + auto* combined_type = def_use_mgr_->GetDef(combined_inst->type_id()); + auto [image_type, sampler_type] = SplitType(*combined_type); + auto image_param = MakeUnique( + context(), spv::Op::OpFunctionParameter, image_type->result_id(), + context()->TakeNextId(), Instruction::OperandList{}); + auto sampler_param = MakeUnique( + context(), spv::Op::OpFunctionParameter, + sampler_type->result_id(), context()->TakeNextId(), + Instruction::OperandList{}); + replacements.push_back( + {combined_inst, image_param.get(), sampler_param.get()}); + appender = std::move(image_param); + appender = std::move(sampler_param); + }; + fn.RewriteParams(rewriter); + + for (auto& r : replacements) { + modified_ = true; + def_use_mgr_->AnalyzeInstDefUse(r.image); + def_use_mgr_->AnalyzeInstDefUse(r.sampler); + CHECK_STATUS(RemapUses(r.combined, r.image, r.sampler)); + } + } + return SPV_SUCCESS; +} + +Instruction* SplitCombinedImageSamplerPass::MakeUniformConstantPointer( + Instruction* pointee) { + uint32_t ptr_id = type_mgr_->FindPointerToType( + pointee->result_id(), spv::StorageClass::UniformConstant); + auto* ptr = def_use_mgr_->GetDef(ptr_id); + if (!IsKnownGlobal(ptr_id)) { + // The pointer type was created at the end. Put it right after the + // pointee. + ptr->InsertBefore(pointee); + pointee->InsertBefore(ptr); + RegisterNewGlobal(ptr_id); + // FindPointerToType also updated the def-use manager. + } + return ptr; +} + +void SplitCombinedImageSamplerPass::AddOpName(uint32_t id, + const std::string& name) { + std::unique_ptr opname{new Instruction{ + context(), + spv::Op::OpName, + 0u, + 0u, + {{SPV_OPERAND_TYPE_ID, {id}}, + {SPV_OPERAND_TYPE_LITERAL_STRING, + utils::MakeVector(name)}}}}; + + context()->AddDebug2Inst(std::move(opname)); +} + +spv_result_t SplitCombinedImageSamplerPass::RemoveDeadTypes() { + for (auto dead_type_id : combined_types_to_remove_) { + if (auto* ty = def_use_mgr_->GetDef(dead_type_id)) { + KillInst(ty); + } + } + return SPV_SUCCESS; +} + +void SplitCombinedImageSamplerPass::KillInst(Instruction* inst) { + // IRContext::KillInst will remove associated debug instructions and + // decorations. It will delete the object only if it is already in a list. + const bool was_in_list = inst->IsInAList(); + context()->KillInst(inst); + if (!was_in_list) { + // Avoid leaking + delete inst; + } + modified_ = true; +} + +} // namespace opt +} // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/split_combined_image_sampler_pass.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/split_combined_image_sampler_pass.h new file mode 100644 index 0000000..253f34a --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/split_combined_image_sampler_pass.h @@ -0,0 +1,169 @@ +// Copyright (c) 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIBSPIRV_OPT_SPLIT_COMBINED_IMAGE_SAMPLER_PASS_H_ +#define LIBSPIRV_OPT_SPLIT_COMBINED_IMAGE_SAMPLER_PASS_H_ + +#include +#include +#include + +#include "source/diagnostic.h" +#include "source/opt/decoration_manager.h" +#include "source/opt/def_use_manager.h" +#include "source/opt/pass.h" +#include "source/opt/type_manager.h" + +namespace spvtools { +namespace opt { + +// Replaces each combined-image sampler variable with an image variable +// and a sampler variable. Similar for function parameters. +// +// Copy the descriptor set and binding number. Vulkan allows this, surprisingly. +class SplitCombinedImageSamplerPass : public Pass { + public: + virtual ~SplitCombinedImageSamplerPass() override = default; + const char* name() const override { return "split-combined-image-sampler"; } + IRContext::Analysis GetPreservedAnalyses() override; + Status Process() override; + + private: + // Records failure for the current module, and returns a stream + // that can be used to provide user error information to the message + // consumer. + spvtools::DiagnosticStream Fail(); + + // Find variables that contain combined texture-samplers, or arrays of them. + // Also populate known_globals_. + void FindCombinedTextureSamplers(); + + // Returns the sampler type. If it does not yet exist, then it is created + // and placed before the first sampled image type. + Instruction* GetSamplerType(); + + // Remaps function types and function declarations. Each + // pointer-to-sampled-image-type operand is replaced with a pair of + // pointer-to-image-type and pointer-to-sampler-type pair. + // Updates the def-use manager and type manager. + spv_result_t RemapFunctions(); + // Remap resource variables. + // Updates the def-use manager. + spv_result_t RemapVars(); + // Remap a single resource variable for combined var. + // Updates the def-use manager and the decorations manager. + spv_result_t RemapVar(Instruction* combined_var); + // Transitively remaps uses of the combined object with uses of the + // decomposed image and sampler parts. The combined object can be sampled + // image value, a pointer to one, an array of one, or a pointer to an array + // of one. The image and sampler parts have corresponding shapes. + // Updates the def-use manager and the decorations manager. + spv_result_t RemapUses(Instruction* combined, Instruction* image_part, + Instruction* sampler_part); + // Removes types that are no longer referenced. + spv_result_t RemoveDeadTypes(); + + // Returns the type instruction for a UniformConstant pointer to the given + // pointee type. If it does not yet exist, the new type instruction is created + // and placed immediately after the pointee type instruction. Updates def-use + // and type managers, and the set of known globals. + Instruction* MakeUniformConstantPointer(Instruction* pointee); + + // Returns the ID of the pointee type for a pointer value instruction. + uint32_t PointeeTypeId(Instruction* ptr_value) { + auto* ptr_ty = def_use_mgr_->GetDef(ptr_value->type_id()); + assert(ptr_ty->opcode() == spv::Op::OpTypePointer); + return ptr_ty->GetSingleWordInOperand(1); + } + + // Creates a new OpName instruction mapping the given name to the given + // string, and adds it to the module at the end of the OpName and OpMemberName + // section. + void AddOpName(uint32_t id, const std::string& name); + + // Cached from the IRContext. Valid while Process() is running. + analysis::DefUseManager* def_use_mgr_ = nullptr; + // Cached from the IRContext. Valid while Process() is running. + analysis::TypeManager* type_mgr_ = nullptr; + + // Did processing modify the module? + bool modified_ = false; + Pass::Status Ok() { + return modified_ ? Pass::Status::SuccessWithChange + : Pass::Status::SuccessWithoutChange; + } + + // The first OpTypeSampledImage instruction in the module, if one exists. + Instruction* first_sampled_image_type_ = nullptr; + // An OpTypeSampler instruction, if one existed already, or if we created one. + Instruction* sampler_type_ = nullptr; + + // The known types and module-scope values. + // We use this to know when a new such value was created. + std::unordered_set known_globals_; + bool IsKnownGlobal(uint32_t id) const { + return known_globals_.find(id) != known_globals_.end(); + } + void RegisterGlobal(uint32_t id) { known_globals_.insert(id); } + void RegisterNewGlobal(uint32_t id) { + modified_ = true; + RegisterGlobal(id); + } + + // Deletes an instruction and associated debug and decoration instructions. + // Updates the def-use manager. + void KillInst(Instruction* inst); + + // Combined types. The known combined sampled-image type, + // and recursively pointers or arrays of them. + std::unordered_set combined_types_; + // The pre-existing types this pass should remove: pointer to + // combined type, array of combined type, pointer to array of combined type. + std::vector combined_types_to_remove_; + // Is an OpTypeSampledImage used as a function parameter? Those should be + // transformed. + bool sampled_image_used_as_param_ = false; + + // Remaps a combined-kind type to corresponding sampler-kind and image-kind + // of type. + struct TypeRemapInfo { + // The instruction for the combined type, pointer to combined type, + // or point to array of combined type. + Instruction* combined_kind_type; + // The corresponding image type, with the same shape of indirection as the + // combined_kind_type. + Instruction* image_kind_type; + // The corresponding sampler type, with the same shape of indirection as the + // combined_kind_type. + Instruction* sampler_kind_type; + }; + // Maps the ID of a combined-image-sampler type kind to its corresponding + // split parts. + std::unordered_map type_remap_; + + // Returns the image-like and sampler-like types of the same indirection shape + // as the given combined-like type. If combined_kind_type is not a combined + // type or a pointer to one, or an array of one or a pointer to an array of + // one, then returns a pair of null pointer. Either both components are + // non-null, or both components are null. Updates the def-use manager and the + // type manager if new instructions are created. + std::pair SplitType( + Instruction& combined_kind_type); + + // The combined-image-sampler variables to be replaced. + std::vector ordered_vars_; +}; +} // namespace opt +} // namespace spvtools +#endif // LIBSPIRV_OPT_SPLIT_COMBINED_IMAGE_SAMPLER_PASS_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/trim_capabilities_pass.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/trim_capabilities_pass.cpp index 34fbc44..cc0e331 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/trim_capabilities_pass.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/trim_capabilities_pass.cpp @@ -26,11 +26,11 @@ #include #include "source/enum_set.h" -#include "source/enum_string_mapping.h" #include "source/ext_inst.h" #include "source/opt/ir_context.h" #include "source/opt/reflect.h" #include "source/spirv_target_env.h" +#include "source/table2.h" #include "source/util/string_utils.h" namespace spvtools { @@ -61,6 +61,7 @@ constexpr uint32_t kOpExtInstImportNameInIndex = 0; template static void DFSWhile(const Instruction* instruction, UnaryPredicate condition) { std::stack instructions_to_visit; + std::unordered_set visited_instructions; instructions_to_visit.push(instruction->result_id()); const auto* def_use_mgr = instruction->context()->get_def_use_mgr(); @@ -68,6 +69,11 @@ static void DFSWhile(const Instruction* instruction, UnaryPredicate condition) { const Instruction* item = def_use_mgr->GetDef(instructions_to_visit.top()); instructions_to_visit.pop(); + // Forward references can be allowed, meaning we can have cycles + // between ID uses. Need to keep track of this. + if (visited_instructions.count(item->result_id())) continue; + visited_instructions.insert(item->result_id()); + if (!condition(item)) { continue; } @@ -241,6 +247,37 @@ Handler_OpTypePointer_StorageUniformBufferBlock16( : std::nullopt; } +static std::optional +Handler_OpTypePointer_StorageBuffer16BitAccess(const Instruction* instruction) { + assert(instruction->opcode() == spv::Op::OpTypePointer && + "This handler only support OpTypePointer opcodes."); + + // Requires StorageBuffer, ShaderRecordBufferKHR or PhysicalStorageBuffer + // storage classes. + spv::StorageClass storage_class = spv::StorageClass( + instruction->GetSingleWordInOperand(kOpTypePointerStorageClassIndex)); + if (storage_class != spv::StorageClass::StorageBuffer && + storage_class != spv::StorageClass::ShaderRecordBufferKHR && + storage_class != spv::StorageClass::PhysicalStorageBuffer) { + return std::nullopt; + } + + const auto* decoration_mgr = instruction->context()->get_decoration_mgr(); + const bool matchesCondition = + AnyTypeOf(instruction, [decoration_mgr](const Instruction* item) { + if (!decoration_mgr->HasDecoration(item->result_id(), + spv::Decoration::Block)) { + return false; + } + + return AnyTypeOf(item, is16bitType); + }); + + return matchesCondition + ? std::optional(spv::Capability::StorageBuffer16BitAccess) + : std::nullopt; +} + static std::optional Handler_OpTypePointer_StorageUniform16( const Instruction* instruction) { assert(instruction->opcode() == spv::Op::OpTypePointer && @@ -388,7 +425,7 @@ Handler_OpImageSparseRead_StorageImageReadWithoutFormat( } // Opcode of interest to determine capabilities requirements. -constexpr std::array, 13> kOpcodeHandlers{{ +constexpr std::array, 14> kOpcodeHandlers{{ // clang-format off {spv::Op::OpImageRead, Handler_OpImageRead_StorageImageReadWithoutFormat}, {spv::Op::OpImageWrite, Handler_OpImageWrite_StorageImageWriteWithoutFormat}, @@ -403,25 +440,25 @@ constexpr std::array, 13> kOpcodeHandlers{{ {spv::Op::OpTypePointer, Handler_OpTypePointer_StorageUniform16}, {spv::Op::OpTypePointer, Handler_OpTypePointer_StorageUniform16}, {spv::Op::OpTypePointer, Handler_OpTypePointer_StorageUniformBufferBlock16}, + {spv::Op::OpTypePointer, Handler_OpTypePointer_StorageBuffer16BitAccess}, // clang-format on }}; // ============== End opcode handler implementations. ======================= namespace { -ExtensionSet getExtensionsRelatedTo(const CapabilitySet& capabilities, - const AssemblyGrammar& grammar) { +ExtensionSet getExtensionsRelatedTo(const CapabilitySet& capabilities) { ExtensionSet output; - const spv_operand_desc_t* desc = nullptr; + const spvtools::OperandDesc* desc = nullptr; for (auto capability : capabilities) { - if (SPV_SUCCESS != grammar.lookupOperand(SPV_OPERAND_TYPE_CAPABILITY, - static_cast(capability), - &desc)) { + if (SPV_SUCCESS != + spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY, + static_cast(capability), &desc)) { continue; } - for (uint32_t i = 0; i < desc->numExtensions; ++i) { - output.insert(desc->extensions[i]); + for (auto extension : desc->extensions()) { + output.insert(extension); } } @@ -475,8 +512,8 @@ void TrimCapabilitiesPass::addInstructionRequirementsForOpcode( return; } - const spv_opcode_desc_t* desc = {}; - auto result = context()->grammar().lookupOpcode(opcode, &desc); + const spvtools::InstructionDesc* desc; + auto result = spvtools::LookupOpcode(opcode, &desc); if (result != SPV_SUCCESS) { return; } @@ -513,9 +550,9 @@ void TrimCapabilitiesPass::addInstructionRequirementsForOperand( // case 1: Operand is a single value, can directly lookup. if (!spvOperandIsConcreteMask(operand.type)) { - const spv_operand_desc_t* desc = {}; - auto result = context()->grammar().lookupOperand(operand.type, - operand.words[0], &desc); + const spvtools::OperandDesc* desc = nullptr; + auto result = + spvtools::LookupOperand(operand.type, operand.words[0], &desc); if (result != SPV_SUCCESS) { return; } @@ -531,8 +568,8 @@ void TrimCapabilitiesPass::addInstructionRequirementsForOperand( continue; } - const spv_operand_desc_t* desc = {}; - auto result = context()->grammar().lookupOperand(operand.type, mask, &desc); + const spvtools::OperandDesc* desc = nullptr; + auto result = spvtools::LookupOperand(operand.type, mask, &desc); if (result != SPV_SUCCESS) { continue; } @@ -561,9 +598,8 @@ void TrimCapabilitiesPass::addInstructionRequirementsForExtInst( spv_ext_inst_type_t instructionSet = spvExtInstImportTypeGet(extInstSet.AsString().c_str()); - spv_ext_inst_desc desc = {}; - auto result = - context()->grammar().lookupExtInst(instructionSet, extInstruction, &desc); + const ExtInstDesc* desc = nullptr; + auto result = LookupExtInst(instructionSet, extInstruction, &desc); if (result != SPV_SUCCESS) { return; } @@ -610,8 +646,8 @@ void TrimCapabilitiesPass::addInstructionRequirements( void TrimCapabilitiesPass::AddExtensionsForOperand( const spv_operand_type_t type, const uint32_t value, ExtensionSet* extensions) const { - const spv_operand_desc_t* desc = nullptr; - spv_result_t result = context()->grammar().lookupOperand(type, value, &desc); + const spvtools::OperandDesc* desc = nullptr; + spv_result_t result = spvtools::LookupOperand(type, value, &desc); if (result != SPV_SUCCESS) { return; } @@ -686,7 +722,7 @@ Pass::Status TrimCapabilitiesPass::TrimUnrequiredCapabilities( Pass::Status TrimCapabilitiesPass::TrimUnrequiredExtensions( const ExtensionSet& required_extensions) const { const auto supported_extensions = - getExtensionsRelatedTo(supportedCapabilities_, context()->grammar()); + getExtensionsRelatedTo(supportedCapabilities_); bool modified_module = false; for (auto extension : supported_extensions) { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/trim_capabilities_pass.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/trim_capabilities_pass.h index 1d1183a..d2369b1 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/trim_capabilities_pass.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/trim_capabilities_pass.h @@ -28,6 +28,7 @@ #include "source/opt/module.h" #include "source/opt/pass.h" #include "source/spirv_target_env.h" +#include "source/table2.h" namespace spvtools { namespace opt { @@ -99,6 +100,7 @@ class TrimCapabilitiesPass : public Pass { spv::Capability::RayTraversalPrimitiveCullingKHR, spv::Capability::Shader, spv::Capability::ShaderClockKHR, + spv::Capability::StorageBuffer16BitAccess, spv::Capability::StorageImageReadWithoutFormat, spv::Capability::StorageImageWriteWithoutFormat, spv::Capability::StorageInputOutput16, @@ -106,6 +108,7 @@ class TrimCapabilitiesPass : public Pass { spv::Capability::StorageUniform16, spv::Capability::StorageUniformBufferBlock16, spv::Capability::VulkanMemoryModelDeviceScope, + spv::Capability::QuadControlKHR, // clang-format on }; @@ -127,14 +130,11 @@ class TrimCapabilitiesPass : public Pass { private: // Inserts every capability listed by `descriptor` this pass supports into - // `output`. Expects a Descriptor like `spv_opcode_desc_t` or - // `spv_operand_desc_t`. - template - inline void addSupportedCapabilitiesToSet(const Descriptor* const descriptor, - CapabilitySet* output) const { - const uint32_t capabilityCount = descriptor->numCapabilities; - for (uint32_t i = 0; i < capabilityCount; ++i) { - const auto capability = descriptor->capabilities[i]; + // `output`. + template + void addSupportedCapabilitiesToSet(const Descriptor* const descriptor, + CapabilitySet* output) const { + for (auto capability : descriptor->capabilities()) { if (supportedCapabilities_.contains(capability)) { output->insert(capability); } @@ -142,8 +142,8 @@ class TrimCapabilitiesPass : public Pass { } // Inserts every extension listed by `descriptor` required by the module into - // `output`. Expects a Descriptor like `spv_opcode_desc_t` or - // `spv_operand_desc_t`. + // `output`. Expects a Descriptor like spvtools::OperandDesc or + // spvtools::InstructionDesc. template inline void addSupportedExtensionsToSet(const Descriptor* const descriptor, ExtensionSet* output) const { @@ -151,8 +151,8 @@ class TrimCapabilitiesPass : public Pass { spvVersionForTargetEnv(context()->GetTargetEnv())) { return; } - output->insert(descriptor->extensions, - descriptor->extensions + descriptor->numExtensions); + output->insert(descriptor->extensions().begin(), + descriptor->extensions().end()); } void addInstructionRequirementsForOpcode(spv::Op opcode, diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/type_manager.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/type_manager.cpp index 88106b6..be7dbc8 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/type_manager.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/type_manager.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2016 Google Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -335,6 +337,17 @@ uint32_t TypeManager::GetTypeInstruction(const Type* type) { std::initializer_list{{SPV_OPERAND_TYPE_ID, {subtype}}}); break; } + case Type::kNodePayloadArrayAMDX: { + uint32_t subtype = + GetTypeInstruction(type->AsNodePayloadArrayAMDX()->element_type()); + if (subtype == 0) { + return 0; + } + typeInst = MakeUnique( + context(), spv::Op::OpTypeNodePayloadArrayAMDX, 0, id, + std::initializer_list{{SPV_OPERAND_TYPE_ID, {subtype}}}); + break; + } case Type::kStruct: { std::vector ops; const Struct* structTy = type->AsStruct(); @@ -361,16 +374,21 @@ uint32_t TypeManager::GetTypeInstruction(const Type* type) { } case Type::kPointer: { const Pointer* pointer = type->AsPointer(); - uint32_t subtype = GetTypeInstruction(pointer->pointee_type()); - if (subtype == 0) { - return 0; + if (pointer->is_untyped()) { + typeInst = MakeUnique( + context(), spv::Op::OpTypeUntypedPointerKHR, 0, id, + std::initializer_list{ + {SPV_OPERAND_TYPE_STORAGE_CLASS, + {static_cast(pointer->storage_class())}}}); + } else { + uint32_t subtype = GetTypeInstruction(pointer->pointee_type()); + typeInst = MakeUnique( + context(), spv::Op::OpTypePointer, 0, id, + std::initializer_list{ + {SPV_OPERAND_TYPE_STORAGE_CLASS, + {static_cast(pointer->storage_class())}}, + {SPV_OPERAND_TYPE_ID, {subtype}}}); } - typeInst = MakeUnique( - context(), spv::Op::OpTypePointer, 0, id, - std::initializer_list{ - {SPV_OPERAND_TYPE_STORAGE_CLASS, - {static_cast(pointer->storage_class())}}, - {SPV_OPERAND_TYPE_ID, {subtype}}}); break; } case Type::kFunction: { @@ -463,11 +481,27 @@ uint32_t TypeManager::GetTypeInstruction(const Type* type) { 0, id, operands); break; } + case Type::kCooperativeVectorNV: { + auto coop_vec = type->AsCooperativeVectorNV(); + uint32_t const component_type = + GetTypeInstruction(coop_vec->component_type()); + if (component_type == 0) { + return 0; + } + typeInst = MakeUnique( + context(), spv::Op::OpTypeCooperativeVectorNV, 0, id, + std::initializer_list{ + {SPV_OPERAND_TYPE_ID, {component_type}}, + {SPV_OPERAND_TYPE_ID, {coop_vec->components()}}}); + break; + } default: assert(false && "Unexpected type"); break; } context()->AddType(std::move(typeInst)); + // TODO(dneto): This next call to AnalyzeDefUse is redundant becaues + // IRContext::AddType already does it. context()->AnalyzeDefUse(&*--context()->types_values_end()); AttachDecorations(id, type); return id; @@ -623,6 +657,13 @@ Type* TypeManager::RebuildType(uint32_t type_id, const Type& type) { MakeUnique(RebuildType(GetId(ele_ty), *ele_ty)); break; } + case Type::kNodePayloadArrayAMDX: { + const NodePayloadArrayAMDX* array_ty = type.AsNodePayloadArrayAMDX(); + const Type* ele_ty = array_ty->element_type(); + rebuilt_ty = + MakeUnique(RebuildType(GetId(ele_ty), *ele_ty)); + break; + } case Type::kStruct: { const Struct* struct_ty = type.AsStruct(); std::vector subtypes; @@ -644,9 +685,13 @@ Type* TypeManager::RebuildType(uint32_t type_id, const Type& type) { } case Type::kPointer: { const Pointer* pointer_ty = type.AsPointer(); - const Type* ele_ty = pointer_ty->pointee_type(); - rebuilt_ty = MakeUnique(RebuildType(GetId(ele_ty), *ele_ty), - pointer_ty->storage_class()); + if (pointer_ty->pointee_type()) { + const Type* ele_ty = pointer_ty->pointee_type(); + rebuilt_ty = MakeUnique(RebuildType(GetId(ele_ty), *ele_ty), + pointer_ty->storage_class()); + } else { + rebuilt_ty = MakeUnique(nullptr, pointer_ty->storage_class()); + } break; } case Type::kFunction: { @@ -701,6 +746,14 @@ Type* TypeManager::RebuildType(uint32_t type_id, const Type& type) { tv_type->dim_id(), tv_type->has_dimensions_id(), tv_type->perm()); break; } + case Type::kCooperativeVectorNV: { + const CooperativeVectorNV* cv_type = type.AsCooperativeVectorNV(); + const Type* component_type = cv_type->component_type(); + rebuilt_ty = MakeUnique( + RebuildType(GetId(component_type), *component_type), + cv_type->components()); + break; + } default: assert(false && "Unhandled type"); return nullptr; @@ -748,9 +801,13 @@ Type* TypeManager::RecordIfTypeDefinition(const Instruction& inst) { type = new Integer(inst.GetSingleWordInOperand(0), inst.GetSingleWordInOperand(1)); break; - case spv::Op::OpTypeFloat: - type = new Float(inst.GetSingleWordInOperand(0)); - break; + case spv::Op::OpTypeFloat: { + const spv::FPEncoding encoding = + inst.NumInOperands() > 1 + ? static_cast(inst.GetSingleWordInOperand(1)) + : spv::FPEncoding::Max; + type = new Float(inst.GetSingleWordInOperand(0), encoding); + } break; case spv::Op::OpTypeVector: type = new Vector(GetType(inst.GetSingleWordInOperand(0)), inst.GetSingleWordInOperand(1)); @@ -837,6 +894,14 @@ Type* TypeManager::RecordIfTypeDefinition(const Instruction& inst) { return type; } break; + case spv::Op::OpTypeNodePayloadArrayAMDX: + type = new NodePayloadArrayAMDX(GetType(inst.GetSingleWordInOperand(0))); + if (id_to_incomplete_type_.count(inst.GetSingleWordInOperand(0))) { + incomplete_types_.emplace_back(inst.result_id(), type); + id_to_incomplete_type_[inst.result_id()] = type; + return type; + } + break; case spv::Op::OpTypeStruct: { std::vector element_types; bool incomplete_type = false; @@ -872,6 +937,11 @@ Type* TypeManager::RecordIfTypeDefinition(const Instruction& inst) { id_to_incomplete_type_.erase(inst.result_id()); } break; + case spv::Op::OpTypeUntypedPointerKHR: { + type = new Pointer(nullptr, static_cast( + inst.GetSingleWordInOperand(0))); + id_to_incomplete_type_.erase(inst.result_id()); + } break; case spv::Op::OpTypeFunction: { bool incomplete_type = false; uint32_t return_type_id = inst.GetSingleWordInOperand(0); @@ -942,6 +1012,10 @@ Type* TypeManager::RecordIfTypeDefinition(const Instruction& inst) { inst.GetSingleWordInOperand(1), inst.GetSingleWordInOperand(2), inst.GetSingleWordInOperand(3), inst.GetSingleWordInOperand(4)); break; + case spv::Op::OpTypeCooperativeVectorNV: + type = new CooperativeVectorNV(GetType(inst.GetSingleWordInOperand(0)), + inst.GetSingleWordInOperand(1)); + break; case spv::Op::OpTypeRayQueryKHR: type = new RayQueryKHR(); break; @@ -988,7 +1062,8 @@ void TypeManager::AttachDecoration(const Instruction& inst, Type* type) { if (!IsAnnotationInst(opcode)) return; switch (opcode) { - case spv::Op::OpDecorate: { + case spv::Op::OpDecorate: + case spv::Op::OpDecorateId: { const auto count = inst.NumOperands(); std::vector data; for (uint32_t i = 1; i < count; ++i) { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/type_manager.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/type_manager.h index 948b691..d1e6fc1 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/type_manager.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/type_manager.h @@ -34,7 +34,7 @@ namespace analysis { // Hashing functor. // -// All type pointers must be non-null. +// All type pointers must be non-null to reach here. struct HashTypePointer { size_t operator()(const Type* type) const { assert(type); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/types.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/types.cpp index 8ccf6c9..bb761a4 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/types.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/types.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2016 Google Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -90,6 +92,7 @@ bool Type::IsUniqueType() const { case kStruct: case kArray: case kRuntimeArray: + case kNodePayloadArrayAMDX: return false; default: return true; @@ -129,6 +132,7 @@ std::unique_ptr Type::Clone() const { DeclareKindCase(AccelerationStructureNV); DeclareKindCase(CooperativeMatrixNV); DeclareKindCase(CooperativeMatrixKHR); + DeclareKindCase(CooperativeVectorNV); DeclareKindCase(RayQueryKHR); DeclareKindCase(HitObjectNV); #undef DeclareKindCase @@ -162,6 +166,7 @@ bool Type::operator==(const Type& other) const { DeclareKindCase(SampledImage); DeclareKindCase(Array); DeclareKindCase(RuntimeArray); + DeclareKindCase(NodePayloadArrayAMDX); DeclareKindCase(Struct); DeclareKindCase(Opaque); DeclareKindCase(Pointer); @@ -177,6 +182,7 @@ bool Type::operator==(const Type& other) const { DeclareKindCase(AccelerationStructureNV); DeclareKindCase(CooperativeMatrixNV); DeclareKindCase(CooperativeMatrixKHR); + DeclareKindCase(CooperativeVectorNV); DeclareKindCase(RayQueryKHR); DeclareKindCase(HitObjectNV); DeclareKindCase(TensorLayoutNV); @@ -220,6 +226,7 @@ size_t Type::ComputeHashValue(size_t hash, SeenTypes* seen) const { DeclareKindCase(SampledImage); DeclareKindCase(Array); DeclareKindCase(RuntimeArray); + DeclareKindCase(NodePayloadArrayAMDX); DeclareKindCase(Struct); DeclareKindCase(Opaque); DeclareKindCase(Pointer); @@ -235,6 +242,7 @@ size_t Type::ComputeHashValue(size_t hash, SeenTypes* seen) const { DeclareKindCase(AccelerationStructureNV); DeclareKindCase(CooperativeMatrixNV); DeclareKindCase(CooperativeMatrixKHR); + DeclareKindCase(CooperativeVectorNV); DeclareKindCase(RayQueryKHR); DeclareKindCase(HitObjectNV); DeclareKindCase(TensorLayoutNV); @@ -301,17 +309,34 @@ size_t Integer::ComputeExtraStateHash(size_t hash, SeenTypes*) const { bool Float::IsSameImpl(const Type* that, IsSameCache*) const { const Float* ft = that->AsFloat(); - return ft && width_ == ft->width_ && HasSameDecorations(that); + return ft && width_ == ft->width_ && encoding_ == ft->encoding_ && + HasSameDecorations(that); } std::string Float::str() const { std::ostringstream oss; - oss << "float" << width_; + switch (encoding_) { + case spv::FPEncoding::BFloat16KHR: + assert(width_ == 16); + oss << "bfloat16"; + break; + case spv::FPEncoding::Float8E4M3EXT: + assert(width_ == 8); + oss << "fp8e4m3"; + break; + case spv::FPEncoding::Float8E5M2EXT: + assert(width_ == 8); + oss << "fp8e5m2"; + break; + default: + oss << "float" << width_; + break; + } return oss.str(); } size_t Float::ComputeExtraStateHash(size_t hash, SeenTypes*) const { - return hash_combine(hash, width_); + return hash_combine(hash, width_, encoding_); } Vector::Vector(const Type* type, uint32_t count) @@ -489,6 +514,34 @@ void RuntimeArray::ReplaceElementType(const Type* type) { element_type_ = type; } +NodePayloadArrayAMDX::NodePayloadArrayAMDX(const Type* type) + : Type(kNodePayloadArrayAMDX), element_type_(type) { + assert(!type->AsVoid()); +} + +bool NodePayloadArrayAMDX::IsSameImpl(const Type* that, + IsSameCache* seen) const { + const NodePayloadArrayAMDX* rat = that->AsNodePayloadArrayAMDX(); + if (!rat) return false; + return element_type_->IsSameImpl(rat->element_type_, seen) && + HasSameDecorations(that); +} + +std::string NodePayloadArrayAMDX::str() const { + std::ostringstream oss; + oss << "[" << element_type_->str() << "]"; + return oss.str(); +} + +size_t NodePayloadArrayAMDX::ComputeExtraStateHash(size_t hash, + SeenTypes* seen) const { + return element_type_->ComputeHashValue(hash, seen); +} + +void NodePayloadArrayAMDX::ReplaceElementType(const Type* type) { + element_type_ = type; +} + Struct::Struct(const std::vector& types) : Type(kStruct), element_types_(types) { for (const auto* t : types) { @@ -576,24 +629,39 @@ bool Pointer::IsSameImpl(const Type* that, IsSameCache* seen) const { if (!p.second) { return true; } - bool same_pointee = pointee_type_->IsSameImpl(pt->pointee_type_, seen); - seen->erase(p.first); - if (!same_pointee) { - return false; + if (pointee_type_ != nullptr && pt->pointee_type_ != nullptr) { + bool same_pointee = pointee_type_->IsSameImpl(pt->pointee_type_, seen); + seen->erase(p.first); + if (!same_pointee) { + return false; + } + } else { + seen->erase(p.first); + // Either both are untyped or it is mixed typed and untyped. + if (pointee_type_ != pt->pointee_type_) { + return false; + } } return HasSameDecorations(that); } std::string Pointer::str() const { std::ostringstream os; - os << pointee_type_->str() << " " << static_cast(storage_class_) - << "*"; + if (pointee_type_) { + os << pointee_type_->str(); + } else { + os << "untyped_ptr"; + } + os << " " << static_cast(storage_class_) << "*"; return os.str(); } size_t Pointer::ComputeExtraStateHash(size_t hash, SeenTypes* seen) const { hash = hash_combine(hash, uint32_t(storage_class_)); - return pointee_type_->ComputeHashValue(hash, seen); + if (pointee_type_) { + hash = pointee_type_->ComputeHashValue(hash, seen); + } + return hash; } void Pointer::SetPointeeType(const Type* type) { pointee_type_ = type; } @@ -802,6 +870,35 @@ bool TensorViewNV::IsSameImpl(const Type* that, IsSameCache*) const { has_dimensions_id_ == tv->has_dimensions_id_ && perm_ == tv->perm_; } +CooperativeVectorNV::CooperativeVectorNV(const Type* type, + const uint32_t components) + : Type(kCooperativeVectorNV), + component_type_(type), + components_(components) { + assert(type != nullptr); + assert(components != 0); +} + +std::string CooperativeVectorNV::str() const { + std::ostringstream oss; + oss << "<" << component_type_->str() << ", " << components_ << ">"; + return oss.str(); +} + +size_t CooperativeVectorNV::ComputeExtraStateHash(size_t hash, + SeenTypes* seen) const { + hash = hash_combine(hash, components_); + return component_type_->ComputeHashValue(hash, seen); +} + +bool CooperativeVectorNV::IsSameImpl(const Type* that, + IsSameCache* seen) const { + const CooperativeVectorNV* mt = that->AsCooperativeVectorNV(); + if (!mt) return false; + return component_type_->IsSameImpl(mt->component_type_, seen) && + components_ == mt->components_ && HasSameDecorations(that); +} + } // namespace analysis } // namespace opt } // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/types.h b/libs/bgfx/3rdparty/spirv-tools/source/opt/types.h index 6092c3c..9b12d5f 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/types.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/types.h @@ -1,4 +1,6 @@ // Copyright (c) 2016 Google Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -46,6 +48,7 @@ class Sampler; class SampledImage; class Array; class RuntimeArray; +class NodePayloadArrayAMDX; class Struct; class Opaque; class Pointer; @@ -61,6 +64,7 @@ class NamedBarrier; class AccelerationStructureNV; class CooperativeMatrixNV; class CooperativeMatrixKHR; +class CooperativeVectorNV; class RayQueryKHR; class HitObjectNV; class TensorLayoutNV; @@ -89,6 +93,7 @@ class Type { kSampledImage, kArray, kRuntimeArray, + kNodePayloadArrayAMDX, kStruct, kOpaque, kPointer, @@ -104,6 +109,7 @@ class Type { kAccelerationStructureNV, kCooperativeMatrixNV, kCooperativeMatrixKHR, + kCooperativeVectorNV, kRayQueryKHR, kHitObjectNV, kTensorLayoutNV, @@ -176,9 +182,9 @@ class Type { // non-composite type. uint64_t NumberOfComponents() const; -// A bunch of methods for casting this type to a given type. Returns this if the -// cast can be done, nullptr otherwise. -// clang-format off + // A bunch of methods for casting this type to a given type. Returns this if + // the cast can be done, nullptr otherwise. + // clang-format off #define DeclareCastMethod(target) \ virtual target* As##target() { return nullptr; } \ virtual const target* As##target() const { return nullptr; } @@ -193,6 +199,7 @@ class Type { DeclareCastMethod(SampledImage) DeclareCastMethod(Array) DeclareCastMethod(RuntimeArray) + DeclareCastMethod(NodePayloadArrayAMDX) DeclareCastMethod(Struct) DeclareCastMethod(Opaque) DeclareCastMethod(Pointer) @@ -208,6 +215,7 @@ class Type { DeclareCastMethod(AccelerationStructureNV) DeclareCastMethod(CooperativeMatrixNV) DeclareCastMethod(CooperativeMatrixKHR) + DeclareCastMethod(CooperativeVectorNV) DeclareCastMethod(RayQueryKHR) DeclareCastMethod(HitObjectNV) DeclareCastMethod(TensorLayoutNV) @@ -221,7 +229,9 @@ class Type { protected: // Decorations attached to this type. Each decoration is encoded as a vector // of uint32_t numbers. The first uint32_t number is the decoration value, - // and the rest are the parameters to the decoration (if exists). + // and the rest are the parameters to the decoration (if any exist). + // The parameters can be either all literals or all ids depending on the + // decoration value. std::vector> decorations_; private: @@ -257,7 +267,8 @@ class Integer : public Type { class Float : public Type { public: - Float(uint32_t w) : Type(kFloat), width_(w) {} + Float(uint32_t w, spv::FPEncoding encoding = spv::FPEncoding::Max) + : Type(kFloat), width_(w), encoding_(encoding) {} Float(const Float&) = default; std::string str() const override; @@ -265,13 +276,15 @@ class Float : public Type { Float* AsFloat() override { return this; } const Float* AsFloat() const override { return this; } uint32_t width() const { return width_; } + spv::FPEncoding encoding() const { return encoding_; } size_t ComputeExtraStateHash(size_t hash, SeenTypes* seen) const override; private: bool IsSameImpl(const Type* that, IsSameCache*) const override; - uint32_t width_; // bit width + uint32_t width_; // bit width + spv::FPEncoding encoding_; // FPEncoding }; class Vector : public Type { @@ -440,6 +453,29 @@ class RuntimeArray : public Type { const Type* element_type_; }; +class NodePayloadArrayAMDX : public Type { + public: + NodePayloadArrayAMDX(const Type* element_type); + NodePayloadArrayAMDX(const NodePayloadArrayAMDX&) = default; + + std::string str() const override; + const Type* element_type() const { return element_type_; } + + NodePayloadArrayAMDX* AsNodePayloadArrayAMDX() override { return this; } + const NodePayloadArrayAMDX* AsNodePayloadArrayAMDX() const override { + return this; + } + + size_t ComputeExtraStateHash(size_t hash, SeenTypes* seen) const override; + + void ReplaceElementType(const Type* element_type); + + private: + bool IsSameImpl(const Type* that, IsSameCache*) const override; + + const Type* element_type_; +}; + class Struct : public Type { public: Struct(const std::vector& element_types); @@ -514,6 +550,8 @@ class Pointer : public Type { const Type* pointee_type() const { return pointee_type_; } spv::StorageClass storage_class() const { return storage_class_; } + bool is_untyped() const { return pointee_type_ == nullptr; } + Pointer* AsPointer() override { return this; } const Pointer* AsPointer() const override { return this; } @@ -712,6 +750,30 @@ class TensorViewNV : public Type { std::vector perm_; }; +class CooperativeVectorNV : public Type { + public: + CooperativeVectorNV(const Type* type, const uint32_t components); + CooperativeVectorNV(const CooperativeVectorNV&) = default; + + std::string str() const override; + + CooperativeVectorNV* AsCooperativeVectorNV() override { return this; } + const CooperativeVectorNV* AsCooperativeVectorNV() const override { + return this; + } + + size_t ComputeExtraStateHash(size_t hash, SeenTypes* seen) const override; + + const Type* component_type() const { return component_type_; } + uint32_t components() const { return components_; } + + private: + bool IsSameImpl(const Type* that, IsSameCache*) const override; + + const Type* component_type_; + const uint32_t components_; +}; + #define DefineParameterlessType(type, name) \ class type : public Type { \ public: \ diff --git a/libs/bgfx/3rdparty/spirv-tools/source/opt/value_number_table.cpp b/libs/bgfx/3rdparty/spirv-tools/source/opt/value_number_table.cpp index 743dc52..0c7e575 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/opt/value_number_table.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/opt/value_number_table.cpp @@ -45,28 +45,43 @@ uint32_t ValueNumberTable::AssignValueNumber(Instruction* inst) { return value; } + auto assign_new_number = [this](Instruction* i) { + const auto new_value = TakeNextValueNumber(); + id_to_value_[i->result_id()] = new_value; + return new_value; + }; + // If the instruction has other side effects, then it must // have its own value number. - // OpSampledImage and OpImage must remain in the same basic block in which - // they are used, because of this we will assign each one it own value number. if (!context()->IsCombinatorInstruction(inst) && !inst->IsCommonDebugInstr()) { - value = TakeNextValueNumber(); - id_to_value_[inst->result_id()] = value; - return value; + return assign_new_number(inst); } + // OpSampledImage and OpImage must remain in the same basic block in which + // they are used, because of this we will assign each one it own value number. switch (inst->opcode()) { case spv::Op::OpSampledImage: case spv::Op::OpImage: case spv::Op::OpVariable: - value = TakeNextValueNumber(); - id_to_value_[inst->result_id()] = value; - return value; + return assign_new_number(inst); default: break; } + // A load that yields an image, sampler, or sampled image must remain in + // the same basic block. So assign it its own value number. + if (inst->IsLoad()) { + switch (context()->get_def_use_mgr()->GetDef(inst->type_id())->opcode()) { + case spv::Op::OpTypeSampledImage: + case spv::Op::OpTypeImage: + case spv::Op::OpTypeSampler: + return assign_new_number(inst); + default: + break; + } + } + // If it is a load from memory that can be modified, we have to assume the // memory has been modified, so we give it a new value number. // @@ -74,9 +89,7 @@ uint32_t ValueNumberTable::AssignValueNumber(Instruction* inst) { // read only. However, if this is ever relaxed because we analyze stores, we // will have to add a new case for volatile loads. if (inst->IsLoad() && !inst->IsReadOnlyLoad()) { - value = TakeNextValueNumber(); - id_to_value_[inst->result_id()] = value; - return value; + return assign_new_number(inst); } analysis::DecorationManager* dec_mgr = context()->get_decoration_mgr(); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/parsed_operand.cpp b/libs/bgfx/3rdparty/spirv-tools/source/parsed_operand.cpp index cc33f8b..649b9d6 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/parsed_operand.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/parsed_operand.cpp @@ -43,12 +43,35 @@ void EmitNumericLiteral(std::ostream* out, const spv_parsed_instruction_t& inst, *out << word; break; case SPV_NUMBER_FLOATING: - if (operand.number_bit_width == 16) { - *out << spvtools::utils::FloatProxy( - uint16_t(word & 0xFFFF)); - } else { - // Assume 32-bit floats. - *out << spvtools::utils::FloatProxy(word); + switch (operand.fp_encoding) { + case SPV_FP_ENCODING_IEEE754_BINARY16: + *out << spvtools::utils::FloatProxy( + uint16_t(word & 0xFFFF)); + break; + case SPV_FP_ENCODING_IEEE754_BINARY32: + *out << spvtools::utils::FloatProxy(word); + break; + case SPV_FP_ENCODING_FLOAT8_E4M3: + *out << spvtools::utils::FloatProxy( + uint8_t(word & 0xFF)); + break; + case SPV_FP_ENCODING_FLOAT8_E5M2: + *out << spvtools::utils::FloatProxy( + uint8_t(word & 0xFF)); + break; + // TODO Bfloat16 + case SPV_FP_ENCODING_UNKNOWN: + switch (operand.number_bit_width) { + case 16: + *out << spvtools::utils::FloatProxy( + uint16_t(word & 0xFFFF)); + break; + case 32: + *out << spvtools::utils::FloatProxy(word); + break; + } + default: + break; } break; default: diff --git a/libs/bgfx/3rdparty/spirv-tools/source/spirv_target_env.cpp b/libs/bgfx/3rdparty/spirv-tools/source/spirv_target_env.cpp index d1172a0..fe23fa6 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/spirv_target_env.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/spirv_target_env.cpp @@ -142,11 +142,20 @@ constexpr auto ordered_universal_envs = std::array{ }; // When a new SPIR-V version is released, update this table. +// Users see this ordered list when running 'spirv-val --help'. Order +// matters for readability. static_assert(spv::Version == 0x10600); inline constexpr std::pair spvTargetEnvNameMap[] = { - {"vulkan1.1spv1.4", SPV_ENV_VULKAN_1_1_SPIRV_1_4}, + // Do not reorder blindly. The algorithm to find the target looks for + // the first entry where the key is a prefix of the string provided by + // the user. For example, if the user provides `vulkan1.2spv1.5`, it + // will match `vulkan1.2`. If this feature is to work correctly, the + // keys must be ordered so that a string is before its prefix. For + // example, `vulkan1.1spv1.4` must be before `vulkan1.1`. Otherwise, + // `vulkan1.1` will be returned when looking for `vulkan1.1spv1.4`. {"vulkan1.0", SPV_ENV_VULKAN_1_0}, + {"vulkan1.1spv1.4", SPV_ENV_VULKAN_1_1_SPIRV_1_4}, {"vulkan1.1", SPV_ENV_VULKAN_1_1}, {"vulkan1.2", SPV_ENV_VULKAN_1_2}, {"vulkan1.3", SPV_ENV_VULKAN_1_3}, diff --git a/libs/bgfx/3rdparty/spirv-tools/source/spirv_validator_options.cpp b/libs/bgfx/3rdparty/spirv-tools/source/spirv_validator_options.cpp index b72a644..a9591f6 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/spirv_validator_options.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/spirv_validator_options.cpp @@ -126,6 +126,16 @@ void spvValidatorOptionsSetAllowLocalSizeId(spv_validator_options options, options->allow_localsizeid = val; } +void spvValidatorOptionsSetAllowOffsetTextureOperand( + spv_validator_options options, bool val) { + options->allow_offset_texture_operand = val; +} + +void spvValidatorOptionsSetAllowVulkan32BitBitwise( + spv_validator_options options, bool val) { + options->allow_vulkan_32_bit_bitwise = val; +} + void spvValidatorOptionsSetFriendlyNames(spv_validator_options options, bool val) { options->use_friendly_names = val; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/spirv_validator_options.h b/libs/bgfx/3rdparty/spirv-tools/source/spirv_validator_options.h index 0145048..9f0c125 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/spirv_validator_options.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/spirv_validator_options.h @@ -48,6 +48,8 @@ struct spv_validator_options_t { workgroup_scalar_block_layout(false), skip_block_layout(false), allow_localsizeid(false), + allow_offset_texture_operand(false), + allow_vulkan_32_bit_bitwise(false), before_hlsl_legalization(false), use_friendly_names(true) {} @@ -60,6 +62,8 @@ struct spv_validator_options_t { bool workgroup_scalar_block_layout; bool skip_block_layout; bool allow_localsizeid; + bool allow_offset_texture_operand; + bool allow_vulkan_32_bit_bitwise; bool before_hlsl_legalization; bool use_friendly_names; }; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/table.cpp b/libs/bgfx/3rdparty/spirv-tools/source/table.cpp index 01df1bc..3f31373 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/table.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/table.cpp @@ -49,16 +49,7 @@ spv_context spvContextCreate(spv_target_env env) { return nullptr; } - spv_opcode_table opcode_table; - spv_operand_table operand_table; - spv_ext_inst_table ext_inst_table; - - spvOpcodeTableGet(&opcode_table, env); - spvOperandTableGet(&operand_table, env); - spvExtInstTableGet(&ext_inst_table, env); - - return new spv_context_t{env, opcode_table, operand_table, ext_inst_table, - nullptr /* a null default consumer */}; + return new spv_context_t{env, nullptr /* a null default consumer */}; } void spvContextDestroy(spv_context context) { delete context; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/table.h b/libs/bgfx/3rdparty/spirv-tools/source/table.h index 47625c5..e61a4d4 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/table.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/table.h @@ -17,104 +17,14 @@ #include "source/extensions.h" #include "source/latest_version_spirv_header.h" +#include "source/util/index_range.h" #include "spirv-tools/libspirv.hpp" -typedef struct spv_opcode_desc_t { - const char* name; - const spv::Op opcode; - const uint32_t numAliases; - const char** aliases; - const uint32_t numCapabilities; - const spv::Capability* capabilities; - // operandTypes[0..numTypes-1] describe logical operands for the instruction. - // The operand types include result id and result-type id, followed by - // the types of arguments. - const uint16_t numTypes; - spv_operand_type_t operandTypes[16]; // TODO: Smaller/larger? - const bool hasResult; // Does the instruction have a result ID operand? - const bool hasType; // Does the instruction have a type ID operand? - // A set of extensions that enable this feature. If empty then this operand - // value is in core and its availability is subject to minVersion. The - // assembler, binary parser, and disassembler ignore this rule, so you can - // freely process invalid modules. - const uint32_t numExtensions; - const spvtools::Extension* extensions; - // Minimal core SPIR-V version required for this feature, if without - // extensions. ~0u means reserved for future use. ~0u and non-empty extension - // lists means only available in extensions. - const uint32_t minVersion; - const uint32_t lastVersion; -} spv_opcode_desc_t; - -typedef struct spv_operand_desc_t { - const char* name; - const uint32_t value; - const uint32_t numAliases; - const char** aliases; - const uint32_t numCapabilities; - const spv::Capability* capabilities; - // A set of extensions that enable this feature. If empty then this operand - // value is in core and its availability is subject to minVersion. The - // assembler, binary parser, and disassembler ignore this rule, so you can - // freely process invalid modules. - const uint32_t numExtensions; - const spvtools::Extension* extensions; - const spv_operand_type_t operandTypes[16]; // TODO: Smaller/larger? - // Minimal core SPIR-V version required for this feature, if without - // extensions. ~0u means reserved for future use. ~0u and non-empty extension - // lists means only available in extensions. - const uint32_t minVersion; - const uint32_t lastVersion; -} spv_operand_desc_t; - -typedef struct spv_operand_desc_group_t { - const spv_operand_type_t type; - const uint32_t count; - const spv_operand_desc_t* entries; -} spv_operand_desc_group_t; - -typedef struct spv_ext_inst_desc_t { - const char* name; - const uint32_t ext_inst; - const uint32_t numCapabilities; - const spv::Capability* capabilities; - const spv_operand_type_t operandTypes[40]; // vksp needs at least 40 -} spv_ext_inst_desc_t; - -typedef struct spv_ext_inst_group_t { - const spv_ext_inst_type_t type; - const uint32_t count; - const spv_ext_inst_desc_t* entries; -} spv_ext_inst_group_t; - -typedef struct spv_opcode_table_t { - const uint32_t count; - const spv_opcode_desc_t* entries; -} spv_opcode_table_t; - -typedef struct spv_operand_table_t { - const uint32_t count; - const spv_operand_desc_group_t* types; -} spv_operand_table_t; - -typedef struct spv_ext_inst_table_t { - const uint32_t count; - const spv_ext_inst_group_t* groups; -} spv_ext_inst_table_t; - -typedef const spv_opcode_desc_t* spv_opcode_desc; -typedef const spv_operand_desc_t* spv_operand_desc; -typedef const spv_ext_inst_desc_t* spv_ext_inst_desc; - -typedef const spv_opcode_table_t* spv_opcode_table; -typedef const spv_operand_table_t* spv_operand_table; -typedef const spv_ext_inst_table_t* spv_ext_inst_table; +// NOTE: Instruction and operand tables have moved to table2.{h|cpp}, +// where they are represented more compactly. struct spv_context_t { const spv_target_env target_env; - const spv_opcode_table opcode_table; - const spv_operand_table operand_table; - const spv_ext_inst_table ext_inst_table; spvtools::MessageConsumer consumer; }; @@ -125,13 +35,4 @@ namespace spvtools { void SetContextMessageConsumer(spv_context context, MessageConsumer consumer); } // namespace spvtools -// Populates *table with entries for env. -spv_result_t spvOpcodeTableGet(spv_opcode_table* table, spv_target_env env); - -// Populates *table with entries for env. -spv_result_t spvOperandTableGet(spv_operand_table* table, spv_target_env env); - -// Populates *table with entries for env. -spv_result_t spvExtInstTableGet(spv_ext_inst_table* table, spv_target_env env); - #endif // SOURCE_TABLE_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/source/table2.cpp b/libs/bgfx/3rdparty/spirv-tools/source/table2.cpp new file mode 100644 index 0000000..4559d77 --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/source/table2.cpp @@ -0,0 +1,375 @@ +// Copyright (c) 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Compressed grammar tables. + +#include "source/table2.h" + +#include +#include +#include + +#include "source/extensions.h" +#include "source/latest_version_spirv_header.h" +#include "source/spirv_constant.h" +#include "source/spirv_target_env.h" +#include "spirv-tools/libspirv.hpp" + +namespace spvtools { +namespace { + +// This is used in the source for the generated tables. +constexpr inline IndexRange IR(uint32_t first, uint32_t count) { + return IndexRange{first, count}; +} + +struct NameIndex { + // Location of the null-terminated name in the global string table kStrings. + IndexRange name; + // Index of this name's entry in the corresponding by-value table. + uint32_t index; +}; + +struct NameValue { + // Location of the null-terminated name in the global string table kStrings. + IndexRange name; + // Enum value in the binary format. + uint32_t value; +}; + +// The generated include file contains variables: +// +// std::array kOperandNames: +// Operand names and index, ordered by (operand kind, name) +// The index part is the named entry's index in kOperandsByValue array. +// Aliases are included as their own entries. +// +// std::array kOperandsByValue: +// Operand descriptions, ordered by (operand kind, operand enum value). +// +// std::array kInstructionNames: +// Instruction names and index, ordered by (name, value) +// The index part is the named entry's index in kInstructionDesc array. +// Aliases are included as their own entries. +// +// std::array kInstructionDesc +// Instruction descriptions, ordered by opcode. +// +// const char kStrings[] +// Array of characters, referenced by IndexRanges elsewhere. +// Each IndexRange denotes a string. +// +// const IndexRange kAliasSpans[] +// Array of IndexRanges, where each represents a string by referencing +// the kStrings table. +// This array contains all sequences of alias strings used in the grammar. +// This table is referenced by an IndexRange elsewhere, i.e. by the +// 'aliases' field of an instruction or operand description. +// +// const spv::Capability kCapabilitySpans[] +// Array of capabilities, referenced by IndexRanges elsewhere. +// Contains all sequences of capabilities used in the grammar. +// +// const spvtools::Extension kExtensionSpans[] = { +// Array of extensions, referenced by IndexRanges elsewhere. +// Contains all sequences of extensions used in the grammar. +// +// const spv_operand_type_t kOperandSpans[] = { +// Array of operand types, referenced by IndexRanges elsewhere. +// Contains all sequences of operand types used in the grammar. + +// Maps an operand kind to NameValue entries for that kind. +// The result is an IndexRange into kOperandNames, and are sorted +// by string name within that span. +IndexRange OperandNameRangeForKind(spv_operand_type_t type); + +// Maps an operand kind to possible operands for that kind. +// The result is an IndexRange into kOperandsByValue, and the operands +// are sorted by value within that span. +IndexRange OperandByValueRangeForKind(spv_operand_type_t type); + +// Maps an extended instruction set kind to NameValue entries for that kind. +// The result is an IndexRange into kExtIntNames, and are sorted +// by string name within that span. +IndexRange ExtInstNameRangeForKind(spv_ext_inst_type_t type); + +// Maps an extended instruction set kind to possible operands for that kind. +// The result is an IndexRange into kExtInstByValue, and the instructions +// are sorted by opcode value within that span. +IndexRange ExtInstByValueRangeForKind(spv_ext_inst_type_t type); + +// Returns the name of an extension, as an index into kStrings +IndexRange ExtensionToIndexRange(Extension extension); + +#include "core_tables_body.inc" + +// Returns a pointer to the null-terminated C-style string in the global +// strings table, as referenced by 'ir'. Assumes the given range is valid. +const char* getChars(IndexRange ir) { + assert(ir.first() < sizeof(kStrings)); + return ir.apply(kStrings).data(); +} + +} // anonymous namespace + +utils::Span OperandDesc::operands() const { + return operands_range.apply(kOperandSpans); +} +utils::Span OperandDesc::name() const { + return name_range.apply(kStrings); +} +utils::Span OperandDesc::aliases() const { + return name_range.apply(kAliasSpans); +} +utils::Span OperandDesc::capabilities() const { + return capabilities_range.apply(kCapabilitySpans); +} +utils::Span OperandDesc::extensions() const { + return extensions_range.apply(kExtensionSpans); +} + +utils::Span InstructionDesc::operands() const { + return operands_range.apply(kOperandSpans); +} +utils::Span InstructionDesc::name() const { + return name_range.apply(kStrings); +} +utils::Span InstructionDesc::aliases() const { + return name_range.apply(kAliasSpans); +} +utils::Span InstructionDesc::capabilities() const { + return capabilities_range.apply(kCapabilitySpans); +} +utils::Span InstructionDesc::extensions() const { + return extensions_range.apply(kExtensionSpans); +} + +utils::Span ExtInstDesc::operands() const { + return operands_range.apply(kOperandSpans); +} +utils::Span ExtInstDesc::name() const { + return name_range.apply(kStrings); +} +utils::Span ExtInstDesc::capabilities() const { + return capabilities_range.apply(kCapabilitySpans); +} + +spv_result_t LookupOpcode(spv::Op opcode, const InstructionDesc** desc) { + // Metaphor: Look for the needle in the haystack. + const InstructionDesc needle(opcode); + auto where = std::lower_bound( + kInstructionDesc.begin(), kInstructionDesc.end(), needle, + [&](const InstructionDesc& lhs, const InstructionDesc& rhs) { + return uint32_t(lhs.opcode) < uint32_t(rhs.opcode); + }); + if (where != kInstructionDesc.end() && where->opcode == opcode) { + *desc = &*where; + return SPV_SUCCESS; + } + return SPV_ERROR_INVALID_LOOKUP; +} + +spv_result_t LookupOpcode(const char* name, const InstructionDesc** desc) { + // The comparison function knows to use 'name' string to compare against + // when the value is kSentinel. + const auto kSentinel = uint32_t(-1); + const NameIndex needle{{}, kSentinel}; + auto less = [&](const NameIndex& lhs, const NameIndex& rhs) { + const char* lhs_chars = lhs.index == kSentinel ? name : getChars(lhs.name); + const char* rhs_chars = rhs.index == kSentinel ? name : getChars(rhs.name); + return std::strcmp(lhs_chars, rhs_chars) < 0; + }; + + auto where = std::lower_bound(kInstructionNames.begin(), + kInstructionNames.end(), needle, less); + if (where != kInstructionNames.end() && + std::strcmp(getChars(where->name), name) == 0) { + *desc = &kInstructionDesc[where->index]; + return SPV_SUCCESS; + } + return SPV_ERROR_INVALID_LOOKUP; +} + +namespace { +template +spv_result_t LookupOpcodeForEnvInternal(spv_target_env env, KEY_TYPE key, + const InstructionDesc** desc) { + const InstructionDesc* desc_proxy; + auto status = LookupOpcode(key, &desc_proxy); + if (status != SPV_SUCCESS) { + return status; + } + const auto& entry = *desc_proxy; + const auto version = spvVersionForTargetEnv(env); + if ((version >= entry.minVersion && version <= entry.lastVersion) || + entry.extensions_range.count() > 0 || + entry.capabilities_range.count() > 0) { + *desc = desc_proxy; + return SPV_SUCCESS; + } + return SPV_ERROR_INVALID_LOOKUP; +} +} // namespace + +spv_result_t LookupOpcodeForEnv(spv_target_env env, const char* name, + const InstructionDesc** desc) { + return LookupOpcodeForEnvInternal(env, name, desc); +} + +spv_result_t LookupOpcodeForEnv(spv_target_env env, spv::Op opcode, + const InstructionDesc** desc) { + return LookupOpcodeForEnvInternal(env, opcode, desc); +} + +spv_result_t LookupOperand(spv_operand_type_t type, uint32_t value, + const OperandDesc** desc) { + auto ir = OperandByValueRangeForKind(type); + if (ir.empty()) { + return SPV_ERROR_INVALID_LOOKUP; + } + + auto span = ir.apply(kOperandsByValue.data()); + + // Metaphor: Look for the needle in the haystack. + // The operand value is the first member. + const OperandDesc needle{value}; + auto where = + std::lower_bound(span.begin(), span.end(), needle, + [&](const OperandDesc& lhs, const OperandDesc& rhs) { + return lhs.value < rhs.value; + }); + if (where != span.end() && where->value == value) { + *desc = &*where; + return SPV_SUCCESS; + } + return SPV_ERROR_INVALID_LOOKUP; +} + +spv_result_t LookupOperand(spv_operand_type_t type, const char* name, + size_t name_len, const OperandDesc** desc) { + auto ir = OperandNameRangeForKind(type); + if (ir.empty()) { + return SPV_ERROR_INVALID_LOOKUP; + } + + auto span = ir.apply(kOperandNames.data()); + + // The comparison function knows to use (name, name_len) as the + // string to compare against when the value is kSentinel. + const auto kSentinel = uint32_t(-1); + const NameIndex needle{{}, kSentinel}; + // The strings in the global string table are null-terminated, and the count + // reflects that. So always deduct 1 from its length. + auto less = [&](const NameIndex& lhs, const NameIndex& rhs) { + const char* lhs_chars = lhs.index == kSentinel ? name : getChars(lhs.name); + const char* rhs_chars = rhs.index == kSentinel ? name : getChars(rhs.name); + const auto content_cmp = std::strncmp(lhs_chars, rhs_chars, name_len); + if (content_cmp != 0) { + return content_cmp < 0; + } + const auto lhs_len = + lhs.index == kSentinel ? name_len : lhs.name.count() - 1; + const auto rhs_len = + rhs.index == kSentinel ? name_len : rhs.name.count() - 1; + return lhs_len < rhs_len; + }; + + auto where = std::lower_bound(span.begin(), span.end(), needle, less); + if (where != span.end() && where->name.count() - 1 == name_len && + std::strncmp(getChars(where->name), name, name_len) == 0) { + *desc = &kOperandsByValue[where->index]; + return SPV_SUCCESS; + } + return SPV_ERROR_INVALID_LOOKUP; +} + +spv_result_t LookupExtInst(spv_ext_inst_type_t type, const char* name, + const ExtInstDesc** desc) { + auto ir = ExtInstNameRangeForKind(type); + if (ir.empty()) { + return SPV_ERROR_INVALID_LOOKUP; + } + + auto span = ir.apply(kExtInstNames.data()); + + // The comparison function knows to use 'name' string to compare against + // when the value is kSentinel. + const auto kSentinel = uint32_t(-1); + const NameIndex needle{{}, kSentinel}; + auto less = [&](const NameIndex& lhs, const NameIndex& rhs) { + const char* lhs_chars = lhs.index == kSentinel ? name : getChars(lhs.name); + const char* rhs_chars = rhs.index == kSentinel ? name : getChars(rhs.name); + return std::strcmp(lhs_chars, rhs_chars) < 0; + }; + + auto where = std::lower_bound(span.begin(), span.end(), needle, less); + if (where != span.end() && std::strcmp(getChars(where->name), name) == 0) { + *desc = &kExtInstByValue[where->index]; + return SPV_SUCCESS; + } + return SPV_ERROR_INVALID_LOOKUP; +} + +// Finds the extended instruction description by opcode value. +// On success, returns SPV_SUCCESS and updates *desc. +spv_result_t LookupExtInst(spv_ext_inst_type_t type, uint32_t value, + const ExtInstDesc** desc) { + auto ir = ExtInstByValueRangeForKind(type); + if (ir.empty()) { + return SPV_ERROR_INVALID_LOOKUP; + } + + auto span = ir.apply(kExtInstByValue.data()); + + // Metaphor: Look for the needle in the haystack. + // The operand value is the first member. + const ExtInstDesc needle(value); + auto where = + std::lower_bound(span.begin(), span.end(), needle, + [&](const ExtInstDesc& lhs, const ExtInstDesc& rhs) { + return lhs.value < rhs.value; + }); + if (where != span.end() && where->value == value) { + *desc = &*where; + return SPV_SUCCESS; + } + return SPV_ERROR_INVALID_LOOKUP; +} + +const char* ExtensionToString(Extension extension) { + return getChars(ExtensionToIndexRange(extension)); +} + +bool GetExtensionFromString(const char* name, Extension* extension) { + // The comparison function knows to use 'name' string to compare against + // when the value is kSentinel. + const auto kSentinel = uint32_t(-1); + const NameValue needle{{}, kSentinel}; + auto less = [&](const NameValue& lhs, const NameValue& rhs) { + const char* lhs_chars = lhs.value == kSentinel ? name : getChars(lhs.name); + const char* rhs_chars = rhs.value == kSentinel ? name : getChars(rhs.name); + return std::strcmp(lhs_chars, rhs_chars) < 0; + }; + + auto where = std::lower_bound(kExtensionNames.begin(), kExtensionNames.end(), + needle, less); + if (where != kExtensionNames.end() && + std::strcmp(getChars(where->name), name) == 0) { + *extension = static_cast(where->value); + return true; + } + return false; +} + +} // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/table2.h b/libs/bgfx/3rdparty/spirv-tools/source/table2.h new file mode 100644 index 0000000..e3731c4 --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/source/table2.h @@ -0,0 +1,260 @@ +// Copyright (c) 2025 The Khronos Group Inc. +// Copyright (c) 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_TABLE2_H_ +#define SOURCE_TABLE2_H_ + +#include "source/latest_version_spirv_header.h" +#include "source/util/index_range.h" +#include "spirv-tools/libspirv.hpp" + +// Define the objects that describe the grammatical structure of SPIR-V +// instructions and their operands. The objects are owned by static +// tables populated at C++ build time from the grammar files from SPIRV-Headers. +// +// Clients use freestanding methods to lookup an opcode or an operand, either +// by numeric value (in the binary), or by name. +// +// For historical reasons, the opcode lookup can also use a target enviroment +// enum to filter for opcodes supported in that environment. +// +// It should be very fast for the system loader to load (and possibly relocate) +// the static tables. In particular, there should be very few global symbols +// with independent addresses. Prefer a very few large tables of items rather +// than dozens or hundreds of global symbols. +// +// The overall structure among containers (i.e. skipping scalar data members) +// is as follows: +// +// An OperandDesc describes an operand. +// An InstructionDesc desribes an instruction. +// An ExtInstDesc describes an extended intruction. +// +// Both OperandDesc and InstructionDesc have members: +// - a name string +// - array of alias strings +// - array of spv::Capability (as an enum) +// - array of spv_operand_type_t (as an enum) +// - array of spvtools::Extension (as an enum) +// - a minVersion +// - a lastVersion +// +// An OperandDesc also has: +// - a uint32_t value. +// +// An InstructionDesc also has: +// - a spv::Op opcode +// - a bool hasResult +// - a bool hasType +// - a printing class +// +// An ExtInstDesc has: +// - a name +// - array of spv::Capability (as an enum) +// - array of spv_operand_type_t (as an enum) +// +// The arrays are represented by spans into a global static array, with one +// array for each of: +// - null-terminated strings, for names +// - arrays of null-terminated strings, for alias lists +// - spv_operand_type_t +// - spv::Capability +// - spvtools::Extension +// +// Note: Currently alias lists never have more than one element. +// The data structures and code do not assume this. + +// TODO(dneto): convert the tables for extended instructions +// Currently (as defined in table.h): +// An spv_ext_inst_group_t has: +// - array of spv_ext_inst_desc_t +// +// An spv_ext_inst_desc_t has: +// - a name string +// - array of spv::Capability +// - array of spv_operand_type_t + +namespace spvtools { + +#include "core_tables_header.inc" + +using IndexRange = utils::IndexRange; + +// Describes a SPIR-V operand. +struct OperandDesc { + const uint32_t value; + + const IndexRange operands_range; // Indexes kOperandSpans + const IndexRange name_range; // Indexes kStrings + const IndexRange aliases_range; // Indexes kAliasSpans + const IndexRange capabilities_range; // Indexes kCapabilitySpans + // A set of extensions that enable this feature. If empty then this operand + // value is in core and its availability is subject to minVersion. The + // assembler, binary parser, and disassembler ignore this rule, so you can + // freely process invalid modules. + const IndexRange extensions_range; // Indexes kExtensionSpans + // Minimal core SPIR-V version required for this feature, if without + // extensions. ~0u means reserved for future use. ~0u and non-empty + // extension lists means only available in extensions. + const uint32_t minVersion = 0xFFFFFFFFu; + const uint32_t lastVersion = 0xFFFFFFFFu; + utils::Span operands() const; + utils::Span name() const; + utils::Span aliases() const; + utils::Span capabilities() const; + utils::Span extensions() const; + + constexpr OperandDesc(uint32_t v, IndexRange o, IndexRange n, IndexRange a, + IndexRange c, IndexRange e, uint32_t mv, uint32_t lv) + : value(v), + operands_range(o), + name_range(n), + aliases_range(a), + capabilities_range(c), + extensions_range(e), + minVersion(mv), + lastVersion(lv) {} + + constexpr OperandDesc(uint32_t v) : value(v) {} + + OperandDesc(const OperandDesc&) = delete; + OperandDesc(OperandDesc&&) = delete; +}; + +// Describes an Instruction +struct InstructionDesc { + const spv::Op opcode; + const bool hasResult = false; + const bool hasType = false; + + const IndexRange operands_range; // Indexes kOperandSpans + const IndexRange name_range; // Indexes kStrings + const IndexRange aliases_range; // Indexes kAliasSpans + const IndexRange capabilities_range; // Indexes kCapbilitySpans + // A set of extensions that enable this feature. If empty then this operand + // value is in core and its availability is subject to minVersion. The + // assembler, binary parser, and disassembler ignore this rule, so you can + // freely process invalid modules. + const IndexRange extensions_range; // Indexes kExtensionSpans + // Minimal core SPIR-V version required for this feature, if without + // extensions. ~0u means reserved for future use. ~0u and non-empty + // extension lists means only available in extensions. + const uint32_t minVersion = 0xFFFFFFFFu; + const uint32_t lastVersion = 0xFFFFFFFFu; + // The printing class specifies what kind of instruction it is, e.g. what + // section of the SPIR-V spec. E.g. kImage, kComposite + const PrintingClass printingClass = PrintingClass::kReserved; + // Returns the span of elements in the global grammar tables corresponding + // to the privately-stored index ranges + utils::Span operands() const; + utils::Span name() const; + utils::Span aliases() const; + utils::Span capabilities() const; + utils::Span extensions() const; + + constexpr InstructionDesc(spv::Op oc, bool hr, bool ht, IndexRange o, + IndexRange n, IndexRange a, IndexRange c, + IndexRange e, uint32_t mv, uint32_t lv, + PrintingClass pc) + : opcode(oc), + hasResult(hr), + hasType(ht), + operands_range(o), + name_range(n), + aliases_range(a), + capabilities_range(c), + extensions_range(e), + minVersion(mv), + lastVersion(lv), + printingClass(pc) {} + + constexpr InstructionDesc(spv::Op oc) : opcode(oc) {} + + InstructionDesc(const InstructionDesc&) = delete; + InstructionDesc(InstructionDesc&&) = delete; +}; + +// Describes an extended instruction +struct ExtInstDesc { + const uint32_t value; + const IndexRange operands_range; // Indexes kOperandSpans + const IndexRange name_range; // Indexes kStrings + const IndexRange capabilities_range; // Indexes kCapbilitySpans + // Returns the span of elements in the global grammar tables corresponding + // to the privately-stored index ranges + utils::Span operands() const; + utils::Span name() const; + utils::Span capabilities() const; + + constexpr ExtInstDesc(uint32_t v, IndexRange o, IndexRange n, IndexRange c) + : value(v), operands_range(o), name_range(n), capabilities_range(c) {} + + constexpr ExtInstDesc(uint32_t v) : value(v) {} + + ExtInstDesc(const ExtInstDesc&) = delete; + ExtInstDesc(ExtInstDesc&&) = delete; +}; + +// Finds the instruction description by opcode name. The name should not +// have the "Op" prefix. On success, returns SPV_SUCCESS and updates *desc. +spv_result_t LookupOpcode(const char* name, const InstructionDesc** desc); +// Finds the instruction description by opcode value. +// On success, returns SPV_SUCCESS and updates *desc. +spv_result_t LookupOpcode(spv::Op opcode, const InstructionDesc** desc); + +// Finds the instruction description by opcode name, without the "Op" prefix. +// A lookup will succeed if: +// - The instruction exists, and +// - Either the target environment supports the SPIR-V version of the +// instruction, +// or the instruction is enabled by at least one extension, +// or the instruction is enabled by at least one capability., +// On success, returns SPV_SUCCESS and updates *desc. +spv_result_t LookupOpcodeForEnv(spv_target_env env, const char* name, + const InstructionDesc** desc); + +// Finds the instruction description by opcode value. +// A lookup will succeed if: +// - The instruction exists, and +// - Either the target environment supports the SPIR-V version of the +// instruction, +// or the instruction is enabled by at least one extension, +// or the instruction is enabled by at least one capability., +// On success, returns SPV_SUCCESS and updates *desc. +spv_result_t LookupOpcodeForEnv(spv_target_env env, spv::Op, + const InstructionDesc** desc); + +spv_result_t LookupOperand(spv_operand_type_t type, const char* name, + size_t name_len, const OperandDesc** desc); +spv_result_t LookupOperand(spv_operand_type_t type, uint32_t operand, + const OperandDesc** desc); + +// Finds the extended instruction description by opcode name. +// On success, returns SPV_SUCCESS and updates *desc. +spv_result_t LookupExtInst(spv_ext_inst_type_t type, const char* name, + const ExtInstDesc** desc); +// Finds the extended instruction description by opcode value. +// On success, returns SPV_SUCCESS and updates *desc. +spv_result_t LookupExtInst(spv_ext_inst_type_t type, uint32_t value, + const ExtInstDesc** desc); + +// Finds Extension enum corresponding to |str|. Returns false if not found. +bool GetExtensionFromString(const char* str, Extension* extension); + +// Returns text string corresponding to |extension|. +const char* ExtensionToString(Extension extension); + +} // namespace spvtools +#endif // SOURCE_TABLE2_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/source/text.cpp b/libs/bgfx/3rdparty/spirv-tools/source/text.cpp index 2154e85..b91ae2a 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/text.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/text.cpp @@ -38,6 +38,7 @@ #include "source/spirv_constant.h" #include "source/spirv_target_env.h" #include "source/table.h" +#include "source/table2.h" #include "source/text_handler.h" #include "source/util/bitutils.h" #include "source/util/parse_number.h" @@ -241,14 +242,14 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar, case SPV_OPERAND_TYPE_EXTENSION_INSTRUCTION_NUMBER: { // The assembler accepts the symbolic name for an extended instruction, // and emits its corresponding number. - spv_ext_inst_desc extInst; - if (grammar.lookupExtInst(pInst->extInstType, textValue, &extInst) == + const spvtools::ExtInstDesc* desc = nullptr; + if (spvtools::LookupExtInst(pInst->extInstType, textValue, &desc) == SPV_SUCCESS) { // if we know about this extended instruction, push the numeric value - spvInstructionAddWord(pInst, extInst->ext_inst); + spvInstructionAddWord(pInst, desc->value); // Prepare to parse the operands for the extended instructions. - spvPushOperandTypes(extInst->operandTypes, pExpectedOperands); + spvPushOperandTypes(desc->operands(), pExpectedOperands); } else { // if we don't know this extended instruction and the set isn't // non-semantic, we cannot process further @@ -284,8 +285,8 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar, return context->diagnostic() << "Invalid " << spvOperandTypeStr(type) << " '" << textValue << "'."; } - spv_opcode_desc opcodeEntry = nullptr; - if (grammar.lookupOpcode(opcode, &opcodeEntry)) { + const spvtools::InstructionDesc* opcodeEntry = nullptr; + if (LookupOpcodeForEnv(grammar.target_env(), opcode, &opcodeEntry)) { return context->diagnostic(SPV_ERROR_INTERNAL) << "OpSpecConstant opcode table out of sync"; } @@ -295,8 +296,9 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar, // type Id and result Id, since they've already been processed. assert(opcodeEntry->hasType); assert(opcodeEntry->hasResult); - assert(opcodeEntry->numTypes >= 2); - spvPushOperandTypes(opcodeEntry->operandTypes + 2, pExpectedOperands); + assert(opcodeEntry->operands().size() >= 2); + spvPushOperandTypes(opcodeEntry->operands().subspan(2), + pExpectedOperands); } break; case SPV_OPERAND_TYPE_LITERAL_INTEGER: @@ -346,10 +348,11 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar, context->getTypeOfTypeGeneratingValue(pInst->resultTypeId); if (!spvtools::isScalarFloating(expected_type) && !spvtools::isScalarIntegral(expected_type)) { - spv_opcode_desc d; + const spvtools::InstructionDesc* opcodeEntry = nullptr; const char* opcode_name = "opcode"; - if (SPV_SUCCESS == grammar.lookupOpcode(pInst->opcode, &d)) { - opcode_name = d->name; + if (SPV_SUCCESS == LookupOpcode(pInst->opcode, &opcodeEntry)) { + opcode_name = + opcodeEntry->name().data(); // assumes it's null-terminated } return context->diagnostic() << "Type for " << opcode_name @@ -409,6 +412,8 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar, case SPV_OPERAND_TYPE_LOOP_CONTROL: case SPV_OPERAND_TYPE_IMAGE: case SPV_OPERAND_TYPE_OPTIONAL_IMAGE: + case SPV_OPERAND_TYPE_TENSOR_OPERANDS: + case SPV_OPERAND_TYPE_OPTIONAL_TENSOR_OPERANDS: case SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS: case SPV_OPERAND_TYPE_OPTIONAL_RAW_ACCESS_CHAIN_OPERANDS: case SPV_OPERAND_TYPE_SELECTION_CONTROL: @@ -416,7 +421,8 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar, case SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_INFO_FLAGS: case SPV_OPERAND_TYPE_OPTIONAL_COOPERATIVE_MATRIX_OPERANDS: case SPV_OPERAND_TYPE_TENSOR_ADDRESSING_OPERANDS: - case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE: { + case SPV_OPERAND_TYPE_COOPERATIVE_MATRIX_REDUCE: + case SPV_OPERAND_TYPE_OPTIONAL_MATRIX_MULTIPLY_ACCUMULATE_OPERANDS: { uint32_t value; if (auto error = grammar.parseMaskOperand(type, textValue, &value)) { return context->diagnostic(error) @@ -454,8 +460,8 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar, default: { // NOTE: All non literal operands are handled here using the operand // table. - spv_operand_desc entry; - if (grammar.lookupOperand(type, textValue, strlen(textValue), &entry)) { + const spvtools::OperandDesc* entry = nullptr; + if (spvtools::LookupOperand(type, textValue, strlen(textValue), &entry)) { return context->diagnostic() << "Invalid " << spvOperandTypeStr(type) << " '" << textValue << "'."; } @@ -465,7 +471,7 @@ spv_result_t spvTextEncodeOperand(const spvtools::AssemblyGrammar& grammar, } // Prepare to parse the operands for this logical operand. - spvPushOperandTypes(entry->operandTypes, pExpectedOperands); + spvPushOperandTypes(entry->operands(), pExpectedOperands); } break; } return SPV_SUCCESS; @@ -502,7 +508,7 @@ spv_result_t encodeInstructionStartingWithImmediate( if (operandValue == "=") return context->diagnostic() << firstWord << " not allowed before =."; - // Needed to pass to spvTextEncodeOpcode(), but it shouldn't ever be + // Needed to pass to spvTextEncodeOperand(), but it shouldn't ever be // expanded. spv_operand_pattern_t dummyExpectedOperands; error = spvTextEncodeOperand( @@ -514,6 +520,124 @@ spv_result_t encodeInstructionStartingWithImmediate( return SPV_SUCCESS; } +/// @brief Translate an instruction started by OpUnknown and the following +/// operands to binary form +/// +/// @param[in] grammar the grammar to use for compilation +/// @param[in, out] context the dynamic compilation info +/// @param[out] pInst returned binary Opcode +/// +/// @return result code +spv_result_t encodeInstructionStartingWithOpUnknown( + const spvtools::AssemblyGrammar& grammar, + spvtools::AssemblyContext* context, spv_instruction_t* pInst) { + spv_position_t nextPosition = {}; + + uint16_t opcode; + uint16_t wordCount; + + // The '(' character. + if (context->advance()) + return context->diagnostic() << "Expected '(', found end of stream."; + if ('(' != context->peek()) { + return context->diagnostic() << "'(' expected after OpUnknown but found '" + << context->peek() << "'."; + } + context->seekForward(1); + + // The opcode enumerant. + if (context->advance()) + return context->diagnostic() + << "Expected opcode enumerant, found end of stream."; + std::string opcodeString; + spv_result_t error = context->getWord(&opcodeString, &nextPosition); + if (error) return context->diagnostic(error) << "Internal Error"; + + if (!spvtools::utils::ParseNumber(opcodeString.c_str(), &opcode)) { + return context->diagnostic() + << "Invalid opcode enumerant: \"" << opcodeString << "\"."; + } + + context->setPosition(nextPosition); + + // The ',' character. + if (context->advance()) + return context->diagnostic() << "Expected ',', found end of stream."; + if (',' != context->peek()) { + return context->diagnostic() + << "',' expected after opcode enumerant but found '" + << context->peek() << "'."; + } + context->seekForward(1); + + // The number of words. + if (context->advance()) + return context->diagnostic() + << "Expected number of words, found end of stream."; + std::string wordCountString; + error = context->getWord(&wordCountString, &nextPosition); + if (error) return context->diagnostic(error) << "Internal Error"; + + if (!spvtools::utils::ParseNumber(wordCountString.c_str(), &wordCount)) { + return context->diagnostic() + << "Invalid number of words: \"" << wordCountString << "\"."; + } + + if (wordCount == 0) { + return context->diagnostic() << "Number of words (which includes the " + "opcode) must be greater than zero."; + } + + context->setPosition(nextPosition); + + // The ')' character. + if (context->advance()) + return context->diagnostic() << "Expected ')', found end of stream."; + if (')' != context->peek()) { + return context->diagnostic() + << "')' expected after number of words but found '" + << context->peek() << "'."; + } + context->seekForward(1); + + pInst->opcode = static_cast(opcode); + context->binaryEncodeU32(spvOpcodeMake(wordCount, pInst->opcode), pInst); + + wordCount--; // Subtract the opcode from the number of words left to read. + + while (wordCount-- > 0) { + if (context->advance() == SPV_END_OF_STREAM) { + return context->diagnostic() << "Expected " << wordCount + 1 + << " more operands, found end of stream."; + } + if (context->isStartOfNewInst()) { + std::string invalid; + context->getWord(&invalid, &nextPosition); + return context->diagnostic() + << "Unexpected start of new instruction: \"" << invalid + << "\". Expected " << wordCount + 1 << " more operands"; + } + + std::string operandValue; + if ((error = context->getWord(&operandValue, &nextPosition))) + return context->diagnostic(error) << "Internal Error"; + + if (operandValue == "=") + return context->diagnostic() << "OpUnknown not allowed before =."; + + // Needed to pass to spvTextEncodeOperand(), but it shouldn't ever be + // expanded. + spv_operand_pattern_t dummyExpectedOperands; + error = spvTextEncodeOperand( + grammar, context, SPV_OPERAND_TYPE_OPTIONAL_CIV, operandValue.c_str(), + pInst, &dummyExpectedOperands); + if (error) return error; + context->setPosition(nextPosition); + } + + return SPV_SUCCESS; +} + /// @brief Translate single Opcode and operands to binary form /// /// @param[in] grammar the grammar to use for compilation @@ -573,11 +697,21 @@ spv_result_t spvTextEncodeOpcode(const spvtools::AssemblyGrammar& grammar, } } + if (opcodeName == "OpUnknown") { + if (!result_id.empty()) { + return context->diagnostic() + << "OpUnknown not allowed in assignment. Use an explicit result " + "id operand instead."; + } + context->setPosition(nextPosition); + return encodeInstructionStartingWithOpUnknown(grammar, context, pInst); + } + // NOTE: The table contains Opcode names without the "Op" prefix. const char* pInstName = opcodeName.data() + 2; - spv_opcode_desc opcodeEntry; - error = grammar.lookupOpcode(pInstName, &opcodeEntry); + const spvtools::InstructionDesc* opcodeEntry = nullptr; + error = LookupOpcodeForEnv(grammar.target_env(), pInstName, &opcodeEntry); if (error) { return context->diagnostic(error) << "Invalid Opcode name '" << opcodeName << "'"; @@ -605,10 +739,15 @@ spv_result_t spvTextEncodeOpcode(const spvtools::AssemblyGrammar& grammar, // ExecutionMode), or for extended instructions that may have their // own operands depending on the selected extended instruction. spv_operand_pattern_t expectedOperands; - expectedOperands.reserve(opcodeEntry->numTypes); - for (auto i = 0; i < opcodeEntry->numTypes; i++) - expectedOperands.push_back( - opcodeEntry->operandTypes[opcodeEntry->numTypes - i - 1]); + { + const auto operands = opcodeEntry->operands(); + const auto n = operands.size(); + expectedOperands.reserve(n); + for (auto i = 0u; i < n; i++) { + auto ty = operands[n - i - 1]; + expectedOperands.push_back(ty); + } + } while (!expectedOperands.empty()) { const spv_operand_type_t type = expectedOperands.back(); @@ -724,10 +863,6 @@ spv_result_t GetNumericIds(const spvtools::AssemblyGrammar& grammar, if (!text->str) return context.diagnostic() << "Missing assembly text."; - if (!grammar.isValid()) { - return SPV_ERROR_INVALID_TABLE; - } - // Skip past whitespace and comments. context.advance(); @@ -773,10 +908,6 @@ spv_result_t spvTextToBinaryInternal(const spvtools::AssemblyGrammar& grammar, spvtools::AssemblyContext context(text, consumer, std::move(ids_to_preserve)); if (!text->str) return context.diagnostic() << "Missing assembly text."; - - if (!grammar.isValid()) { - return SPV_ERROR_INVALID_TABLE; - } if (!pBinary) return SPV_ERROR_INVALID_POINTER; std::vector instructions; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/text_handler.cpp b/libs/bgfx/3rdparty/spirv-tools/source/text_handler.cpp index a778c2c..1f1f1e8 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/text_handler.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/text_handler.cpp @@ -118,6 +118,9 @@ spv_result_t getWord(spv_text text, spv_position position, std::string* word) { break; case ' ': case ';': + case ',': + case '(': + case ')': case '\t': case '\n': case '\r': @@ -251,13 +254,13 @@ spv_result_t AssemblyContext::binaryEncodeNumericLiteral( << "Unexpected numeric literal type"; case IdTypeClass::kScalarIntegerType: if (type.isSigned) { - number_type = {type.bitwidth, SPV_NUMBER_SIGNED_INT}; + number_type = {type.bitwidth, SPV_NUMBER_SIGNED_INT, type.encoding}; } else { - number_type = {type.bitwidth, SPV_NUMBER_UNSIGNED_INT}; + number_type = {type.bitwidth, SPV_NUMBER_UNSIGNED_INT, type.encoding}; } break; case IdTypeClass::kScalarFloatType: - number_type = {type.bitwidth, SPV_NUMBER_FLOATING}; + number_type = {type.bitwidth, SPV_NUMBER_FLOATING, type.encoding}; break; case IdTypeClass::kBottom: // kBottom means the type is unknown and we need to infer the type before @@ -267,11 +270,11 @@ spv_result_t AssemblyContext::binaryEncodeNumericLiteral( // signed integer, otherwise an unsigned integer. uint32_t bitwidth = static_cast(assumedBitWidth(type)); if (strchr(val, '.')) { - number_type = {bitwidth, SPV_NUMBER_FLOATING}; + number_type = {bitwidth, SPV_NUMBER_FLOATING, type.encoding}; } else if (type.isSigned || val[0] == '-') { - number_type = {bitwidth, SPV_NUMBER_SIGNED_INT}; + number_type = {bitwidth, SPV_NUMBER_SIGNED_INT, type.encoding}; } else { - number_type = {bitwidth, SPV_NUMBER_UNSIGNED_INT}; + number_type = {bitwidth, SPV_NUMBER_UNSIGNED_INT, type.encoding}; } break; } @@ -327,14 +330,27 @@ spv_result_t AssemblyContext::recordTypeDefinition( if (pInst->words.size() != 4) return diagnostic() << "Invalid OpTypeInt instruction"; types_[value] = {pInst->words[2], pInst->words[3] != 0, - IdTypeClass::kScalarIntegerType}; + IdTypeClass::kScalarIntegerType, SPV_FP_ENCODING_UNKNOWN}; } else if (pInst->opcode == spv::Op::OpTypeFloat) { if ((pInst->words.size() != 3) && (pInst->words.size() != 4)) return diagnostic() << "Invalid OpTypeFloat instruction"; - // TODO(kpet) Do we need to record the FP Encoding here? - types_[value] = {pInst->words[2], false, IdTypeClass::kScalarFloatType}; + spv_fp_encoding_t enc = SPV_FP_ENCODING_UNKNOWN; + if (pInst->words.size() >= 4) { + const spvtools::OperandDesc* desc; + spv_result_t status = spvtools::LookupOperand(SPV_OPERAND_TYPE_FPENCODING, + pInst->words[3], &desc); + if (status == SPV_SUCCESS) { + enc = spvFPEncodingFromOperandFPEncoding( + static_cast(desc->value)); + } else { + return diagnostic() << "Invalid OpTypeFloat encoding"; + } + } + types_[value] = {pInst->words[2], false, IdTypeClass::kScalarFloatType, + enc}; } else { - types_[value] = {0, false, IdTypeClass::kOtherType}; + types_[value] = {0, false, IdTypeClass::kOtherType, + SPV_FP_ENCODING_UNKNOWN}; } return SPV_SUCCESS; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/text_handler.h b/libs/bgfx/3rdparty/spirv-tools/source/text_handler.h index 19972e9..54ffe61 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/text_handler.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/text_handler.h @@ -47,6 +47,7 @@ struct IdType { uint32_t bitwidth; // Safe to assume that we will not have > 2^32 bits. bool isSigned; // This is only significant if type_class is integral. IdTypeClass type_class; + spv_fp_encoding_t encoding; }; // Default equality operator for IdType. Tests if all members are the same. @@ -141,7 +142,14 @@ class AssemblyContext { spv_result_t advance(); // Sets word to the next word in the input text. Fills next_position with - // the next location past the end of the word. + // the next location past the end of the word. Returns an error if the + // context is invalid or has no more text. Otherwise returns SPV_SUCCESS. + // Assumes the next part of the input is not whitespace. + // + // A word ends at the next comment or whitespace. However, double-quoted + // strings remain intact, and a backslash always escapes the next character. + // The input stream may end before a matching double-quote, or immediately + // after a backslash. Both such cases still count as success. spv_result_t getWord(std::string* word, spv_position next_position); // Returns true if the next word in the input is the start of a new Opcode. diff --git a/libs/bgfx/3rdparty/spirv-tools/source/util/hex_float.h b/libs/bgfx/3rdparty/spirv-tools/source/util/hex_float.h index 98353a4..83b1c09 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/util/hex_float.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/util/hex_float.h @@ -36,6 +36,50 @@ namespace spvtools { namespace utils { +class Float8_E4M3 { + public: + Float8_E4M3(uint8_t v) : val(v) {} + Float8_E4M3() = default; + static bool isNan(const Float8_E4M3& val) { return (val.val & 0x7f) == 0x7f; } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(const Float8_E4M3&) { + return false; // E4M3 has no infinity representation + } + Float8_E4M3(const Float8_E4M3& other) { val = other.val; } + uint8_t get_value() const { return val; } + + // Returns the maximum normal value. + static Float8_E4M3 max() { return Float8_E4M3(0x7e); } + // Returns the lowest normal value. + static Float8_E4M3 lowest() { return Float8_E4M3(0x8); } + + private: + uint8_t val; +}; + +class Float8_E5M2 { + public: + Float8_E5M2(uint8_t v) : val(v) {} + Float8_E5M2() = default; + static bool isNan(const Float8_E5M2& val) { + return ((val.val & 0x7c) == 0x7c) && ((val.val & 0x3) != 0); + } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(const Float8_E5M2& val) { + return (val.val & 0x7f) == 0x7c; + } + Float8_E5M2(const Float8_E5M2& other) { val = other.val; } + uint8_t get_value() const { return val; } + + // Returns the maximum normal value. + static Float8_E5M2 max() { return Float8_E5M2(0x7b); } + // Returns the lowest normal value. + static Float8_E5M2 lowest() { return Float8_E5M2(0x4); } + + private: + uint8_t val; +}; + class Float16 { public: Float16(uint16_t v) : val(v) {} @@ -110,6 +154,46 @@ struct FloatProxyTraits { static uint32_t width() { return 64u; } }; +template <> +struct FloatProxyTraits { + using uint_type = uint8_t; + static bool isNan(Float8_E4M3 f) { return Float8_E4M3::isNan(f); } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(Float8_E4M3 f) { return Float8_E4M3::isInfinity(f); } + // Returns the maximum normal value. + static Float8_E4M3 max() { return Float8_E4M3::max(); } + // Returns the lowest normal value. + static Float8_E4M3 lowest() { return Float8_E4M3::lowest(); } + // Returns the value as the native floating point format. + static Float8_E4M3 getAsFloat(const uint_type& t) { return Float8_E4M3(t); } + // Returns the bits from the given floating pointer number. + static uint_type getBitsFromFloat(const Float8_E4M3& t) { + return t.get_value(); + } + // Returns the bitwidth. + static uint32_t width() { return 8u; } +}; + +template <> +struct FloatProxyTraits { + using uint_type = uint8_t; + static bool isNan(Float8_E5M2 f) { return Float8_E5M2::isNan(f); } + // Returns true if the given value is any kind of infinity. + static bool isInfinity(Float8_E5M2 f) { return Float8_E5M2::isInfinity(f); } + // Returns the maximum normal value. + static Float8_E5M2 max() { return Float8_E5M2::max(); } + // Returns the lowest normal value. + static Float8_E5M2 lowest() { return Float8_E5M2::lowest(); } + // Returns the value as the native floating point format. + static Float8_E5M2 getAsFloat(const uint_type& t) { return Float8_E5M2(t); } + // Returns the bits from the given floating pointer number. + static uint_type getBitsFromFloat(const Float8_E5M2& t) { + return t.get_value(); + } + // Returns the bitwidth. + static uint32_t width() { return 8u; } +}; + template <> struct FloatProxyTraits { using uint_type = uint16_t; @@ -216,6 +300,7 @@ struct HexFloatTraits { using int_type = void; // The numerical type that this HexFloat represents. using underlying_type = void; + using underlying_typetraits = void; // The type needed to construct the underlying type. using native_type = void; // The number of bits that are actually relevant in the uint_type. @@ -229,6 +314,8 @@ struct HexFloatTraits { // The bias of the exponent. (How much we need to subtract from the stored // value to get the correct value.) static const uint32_t exponent_bias = 0; + static const bool has_infinity = true; + static const uint32_t NaN_pattern = 0; }; // Traits for IEEE float. @@ -238,11 +325,14 @@ struct HexFloatTraits> { using uint_type = uint32_t; using int_type = int32_t; using underlying_type = FloatProxy; + using underlying_typetraits = FloatProxyTraits; using native_type = float; static const uint_type num_used_bits = 32; static const uint_type num_exponent_bits = 8; static const uint_type num_fraction_bits = 23; static const uint_type exponent_bias = 127; + static const bool has_infinity = true; + static const uint_type NaN_pattern = 0x7f80000; }; // Traits for IEEE double. @@ -252,11 +342,48 @@ struct HexFloatTraits> { using uint_type = uint64_t; using int_type = int64_t; using underlying_type = FloatProxy; + using underlying_typetraits = FloatProxyTraits; using native_type = double; static const uint_type num_used_bits = 64; static const uint_type num_exponent_bits = 11; static const uint_type num_fraction_bits = 52; static const uint_type exponent_bias = 1023; + static const bool has_infinity = true; + static const uint_type NaN_pattern = 0x7FF0000000000000; +}; + +// Traits for FP8 E4M3. +// 1 sign bit, 4 exponent bits, 3 fractional bits. +template <> +struct HexFloatTraits> { + using uint_type = uint8_t; + using int_type = int8_t; + using underlying_type = FloatProxy; + using underlying_typetraits = FloatProxyTraits; + using native_type = uint8_t; + static const uint_type num_used_bits = 8; + static const uint_type num_exponent_bits = 4; + static const uint_type num_fraction_bits = 3; + static const uint_type exponent_bias = 7; + static const bool has_infinity = false; + static const uint_type NaN_pattern = 0x7F; +}; + +// Traits for FP8 E5M2. +// 1 sign bit, 4 exponent bits, 3 fractional bits. +template <> +struct HexFloatTraits> { + using uint_type = uint8_t; + using int_type = int8_t; + using underlying_type = FloatProxy; + using underlying_typetraits = FloatProxyTraits; + using native_type = uint8_t; + static const uint_type num_used_bits = 8; + static const uint_type num_exponent_bits = 5; + static const uint_type num_fraction_bits = 2; + static const uint_type exponent_bias = 15; + static const bool has_infinity = true; + static const uint_type NaN_pattern = 0x7c; }; // Traits for IEEE half. @@ -265,12 +392,15 @@ template <> struct HexFloatTraits> { using uint_type = uint16_t; using int_type = int16_t; - using underlying_type = uint16_t; + using underlying_type = FloatProxy; + using underlying_typetraits = FloatProxyTraits; using native_type = uint16_t; static const uint_type num_used_bits = 16; static const uint_type num_exponent_bits = 5; static const uint_type num_fraction_bits = 10; static const uint_type exponent_bias = 15; + static const bool has_infinity = true; + static const uint_type NaN_pattern = 0x7c00; }; enum class round_direction { @@ -291,6 +421,7 @@ class HexFloat { using int_type = typename Traits::int_type; using underlying_type = typename Traits::underlying_type; using native_type = typename Traits::native_type; + using traits = Traits; explicit HexFloat(T f) : value_(f) {} @@ -493,9 +624,9 @@ class HexFloat { struct negatable_left_shift { static uint_type val(uint_type val) { if (N > 0) { - return static_cast(val << N); + return static_cast(static_cast(val) << N); } else { - return static_cast(val >> N); + return static_cast(static_cast(val) >> N); } } }; @@ -519,28 +650,28 @@ class HexFloat { template struct negatable_left_shift { static uint_type val(uint_type val) { - return static_cast(val >> -N); + return static_cast(static_cast(val) >> -N); } }; template struct negatable_left_shift= 0>::type> { static uint_type val(uint_type val) { - return static_cast(val << N); + return static_cast(static_cast(val) << N); } }; template struct negatable_right_shift { static uint_type val(uint_type val) { - return static_cast(val << -N); + return static_cast(static_cast(val) << -N); } }; template struct negatable_right_shift= 0>::type> { static uint_type val(uint_type val) { - return static_cast(val >> N); + return static_cast(static_cast(val) >> N); } }; #endif @@ -639,6 +770,9 @@ class HexFloat { // underflow to (0 or min depending on rounding) if the number underflows. template void castTo(other_T& other, round_direction round_dir) { + using other_traits = typename other_T::traits; + using other_underlyingtraits = typename other_traits::underlying_typetraits; + other = other_T(static_cast(0)); bool negate = isNegative(); if (getUnsignedBits() == 0) { @@ -664,18 +798,24 @@ class HexFloat { } } - bool is_nan = - (getBits() & exponent_mask) == exponent_mask && significand != 0; + bool is_nan = T(getBits()).isNan(); bool is_inf = !is_nan && ((exponent + carried) > static_cast(other_T::exponent_bias) || - (significand == 0 && (getBits() & exponent_mask) == exponent_mask)); + T(getBits()).isInfinity()); // If we are Nan or Inf we should pass that through. if (is_inf) { - other.set_value(typename other_T::underlying_type( - static_cast( - (negate ? other_T::sign_mask : 0) | other_T::exponent_mask))); + if (other_traits::has_infinity) + other.set_value(typename other_T::underlying_type( + static_cast( + (negate ? other_T::sign_mask : 0) | other_T::exponent_mask))); + else // if the type doesnt use infinity, set it to max value (E4M3) + other.set_value(typename other_T::underlying_type( + static_cast( + (negate ? other_T::sign_mask : 0) | + other_underlyingtraits::getBitsFromFloat( + other_underlyingtraits::max())))); return; } if (is_nan) { @@ -690,7 +830,8 @@ class HexFloat { // just set the last bit. other.set_value(typename other_T::underlying_type( static_cast( - (negate ? other_T::sign_mask : 0) | other_T::exponent_mask | + other_traits::NaN_pattern | (negate ? other_T::sign_mask : 0) | + other_T::exponent_mask | (shifted_significand == 0 ? 0x1 : shifted_significand)))); return; } @@ -738,8 +879,8 @@ inline uint8_t get_nibble_from_character(int character) { template std::ostream& operator<<(std::ostream& os, const HexFloat& value) { using HF = HexFloat; - using uint_type = typename HF::uint_type; - using int_type = typename HF::int_type; + using uint_type = uint64_t; + using int_type = int64_t; static_assert(HF::num_used_bits != 0, "num_used_bits must be non-zero for a valid float"); @@ -889,12 +1030,86 @@ ParseNormalFloat, HexFloatTraits>>( // Overflow on 16-bit behaves the same as for 32- and 64-bit: set the // fail bit and set the lowest or highest value. + // /!\ We get an error if there is no overflow but the value is infinity. + // Is it what we want? if (Float16::isInfinity(value.value().getAsFloat())) { value.set_value(value.isNegative() ? Float16::lowest() : Float16::max()); is.setstate(std::ios_base::failbit); } return is; } +// Specialization of ParseNormalFloat for FloatProxy values. +// This will parse the float as it were a 32-bit floating point number, +// and then round it down to fit into a Float8_E4M3 value. +// The number is rounded towards zero. +// If negate_value is true then the number may not have a leading minus or +// plus, and if it successfully parses, then the number is negated before +// being stored into the value parameter. +// If the value cannot be correctly parsed or overflows the target floating +// point type, then set the fail bit on the stream. +// TODO(dneto): Promise C++11 standard behavior in how the value is set in +// the error case, but only after all target platforms implement it correctly. +// In particular, the Microsoft C++ runtime appears to be out of spec. +template <> +inline std::istream& ParseNormalFloat, + HexFloatTraits>>( + std::istream& is, bool negate_value, + HexFloat, HexFloatTraits>>& + value) { + // First parse as a 32-bit float. + HexFloat> float_val(0.0f); + ParseNormalFloat(is, negate_value, float_val); + + if (float_val.value().getAsFloat() > 448.0f) { + is.setstate(std::ios_base::failbit); + value.set_value(Float8_E4M3::max()); + return is; + } else if (float_val.value().getAsFloat() < -448.0f) { + is.setstate(std::ios_base::failbit); + value.set_value(0x80 | Float8_E4M3::max().get_value()); + return is; + } + // Then convert to E4M3 float, saturating at infinities, and + // rounding toward zero. + float_val.castTo(value, round_direction::kToZero); + + return is; +} +// Specialization of ParseNormalFloat for FloatProxy values. +// This will parse the float as it were a Float8_E5M2 floating point number, +// and then round it down to fit into a Float16 value. +// The number is rounded towards zero. +// If negate_value is true then the number may not have a leading minus or +// plus, and if it successfully parses, then the number is negated before +// being stored into the value parameter. +// If the value cannot be correctly parsed or overflows the target floating +// point type, then set the fail bit on the stream. +// TODO(dneto): Promise C++11 standard behavior in how the value is set in +// the error case, but only after all target platforms implement it correctly. +// In particular, the Microsoft C++ runtime appears to be out of spec. +template <> +inline std::istream& ParseNormalFloat, + HexFloatTraits>>( + std::istream& is, bool negate_value, + HexFloat, HexFloatTraits>>& + value) { + // First parse as a 32-bit float. + HexFloat> float_val(0.0f); + ParseNormalFloat(is, negate_value, float_val); + + // Then convert to Float8_E5M2 float, saturating at infinities, and + // rounding toward zero. + float_val.castTo(value, round_direction::kToZero); + + // Overflow on Float8_E5M2 behaves the same as for 32- and 64-bit: set the + // fail bit and set the lowest or highest value. + if (Float8_E5M2::isInfinity(value.value().getAsFloat())) { + value.set_value(value.isNegative() ? Float8_E5M2::lowest() + : Float8_E5M2::max()); + is.setstate(std::ios_base::failbit); + } + return is; +} namespace detail { @@ -1253,6 +1468,20 @@ inline std::ostream& operator<<(std::ostream& os, return os; } +template <> +inline std::ostream& operator<< ( + std::ostream& os, const FloatProxy& value) { + os << HexFloat>(value); + return os; +} + +template <> +inline std::ostream& operator<< ( + std::ostream& os, const FloatProxy& value) { + os << HexFloat>(value); + return os; +} + } // namespace utils } // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/util/index_range.h b/libs/bgfx/3rdparty/spirv-tools/source/util/index_range.h new file mode 100644 index 0000000..d256bde --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/source/util/index_range.h @@ -0,0 +1,71 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_UTIL_INDEX_RANGE_H_ +#define SOURCE_UTIL_INDEX_RANGE_H_ + +#include +#include +#include + +#include "source/util/span.h" + +namespace spvtools { +namespace utils { + +// Implement a range of indicies, to index over an array of values of type T, +// but whose base pointer is supplied externally. Think of this as a span +// but without the base pointer, which is to be applied later. Parameterization +// by T makes usage more readable and less error-prone. +template +class IndexRange { + public: + static_assert(std::is_integral::value); + static_assert(std::is_unsigned::value); + static_assert(std::is_integral::value); + static_assert(std::is_unsigned::value); + using value_type = T; + using index_type = IndexType; + using size_type = CountType; + + constexpr IndexRange() {} + constexpr IndexRange(index_type first, size_type count) + : first_(first), count_(count) {} + + size_type count() const { return count_; } + bool empty() const { return count() == size_type(0); } + + IndexType first() const { return first_; } + + // Returns the span of indexed elements using the given base pointer. + template + spvtools::utils::Span apply(E* base) const { + using span_type = spvtools::utils::Span; + return base ? span_type(base + first_, count_) : span_type(); + } + template + spvtools::utils::Span apply(std::nullptr_t) const { + using span_type = spvtools::utils::Span; + return span_type(); + } + + private: + index_type first_ = 0; + size_type count_ = 0; +}; + +} // namespace utils +} // namespace spvtools + +#endif // SOURCE_UTIL_INDEX_RANGE_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/source/util/parse_number.cpp b/libs/bgfx/3rdparty/spirv-tools/source/util/parse_number.cpp index c3351c2..3aa0752 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/util/parse_number.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/util/parse_number.cpp @@ -131,6 +131,19 @@ EncodeNumberStatus ParseAndEncodeIntegerNumber( return EncodeNumberStatus::kSuccess; } +spv_fp_encoding_t DeduceEncoding(const NumberType& type) { + if (type.encoding != SPV_FP_ENCODING_UNKNOWN) return type.encoding; + switch (type.bitwidth) { + case 16: + return SPV_FP_ENCODING_IEEE754_BINARY16; + case 32: + return SPV_FP_ENCODING_IEEE754_BINARY32; + case 64: + return SPV_FP_ENCODING_IEEE754_BINARY64; + default: + return SPV_FP_ENCODING_UNKNOWN; + } +} EncodeNumberStatus ParseAndEncodeFloatingPointNumber( const char* text, const NumberType& type, std::function emit, std::string* error_msg) { @@ -145,8 +158,35 @@ EncodeNumberStatus ParseAndEncodeFloatingPointNumber( } const auto bit_width = AssumedBitWidth(type); - switch (bit_width) { - case 16: { + switch (DeduceEncoding(type)) { + case SPV_FP_ENCODING_FLOAT8_E4M3: { + HexFloat> hVal(0); + if (!ParseNumber(text, &hVal)) { + ErrorMsgStream(error_msg) << "Invalid E4M3 float literal: " << text; + return EncodeNumberStatus::kInvalidText; + } + // getAsFloat will return the Float16 value, and get_value + // will return a uint16_t representing the bits of the float. + // The encoding is therefore correct from the perspective of the SPIR-V + // spec since the top 16 bits will be 0. + emit(static_cast(hVal.value().getAsFloat().get_value())); + return EncodeNumberStatus::kSuccess; + } break; + case SPV_FP_ENCODING_FLOAT8_E5M2: { + HexFloat> hVal(0); + if (!ParseNumber(text, &hVal)) { + ErrorMsgStream(error_msg) << "Invalid E5M2 float literal: " << text; + return EncodeNumberStatus::kInvalidText; + } + // getAsFloat will return the Float16 value, and get_value + // will return a uint16_t representing the bits of the float. + // The encoding is therefore correct from the perspective of the SPIR-V + // spec since the top 16 bits will be 0. + emit(static_cast(hVal.value().getAsFloat().get_value())); + return EncodeNumberStatus::kSuccess; + } break; + case SPV_FP_ENCODING_BFLOAT16: // FIXME this likely needs separate handling + case SPV_FP_ENCODING_IEEE754_BINARY16: { HexFloat> hVal(0); if (!ParseNumber(text, &hVal)) { ErrorMsgStream(error_msg) << "Invalid 16-bit float literal: " << text; @@ -159,7 +199,7 @@ EncodeNumberStatus ParseAndEncodeFloatingPointNumber( emit(static_cast(hVal.value().getAsFloat().get_value())); return EncodeNumberStatus::kSuccess; } break; - case 32: { + case SPV_FP_ENCODING_IEEE754_BINARY32: { HexFloat> fVal(0.0f); if (!ParseNumber(text, &fVal)) { ErrorMsgStream(error_msg) << "Invalid 32-bit float literal: " << text; @@ -168,7 +208,7 @@ EncodeNumberStatus ParseAndEncodeFloatingPointNumber( emit(BitwiseCast(fVal)); return EncodeNumberStatus::kSuccess; } break; - case 64: { + case SPV_FP_ENCODING_IEEE754_BINARY64: { HexFloat> dVal(0.0); if (!ParseNumber(text, &dVal)) { ErrorMsgStream(error_msg) << "Invalid 64-bit float literal: " << text; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/util/parse_number.h b/libs/bgfx/3rdparty/spirv-tools/source/util/parse_number.h index d0f2a09..27a0327 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/util/parse_number.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/util/parse_number.h @@ -32,6 +32,7 @@ struct NumberType { // SPV_NUMBER_NONE means the type is unknown and is invalid to be used with // ParseAndEncode{|Integer|Floating}Number(). spv_number_kind_t kind; + spv_fp_encoding_t encoding; }; // Returns true if the type is a scalar integer type. @@ -160,6 +161,14 @@ bool CheckRangeAndIfHexThenSignExtend(T value, const NumberType& type, return true; } +template +struct IsHexFloat { + static const bool value = false; +}; +template +struct IsHexFloat> { + static const bool value = true; +}; // Parses a numeric value of a given type from the given text. The number // should take up the entire string, and should be within bounds for the target // type. On success, returns true and populates the object referenced by @@ -169,8 +178,10 @@ bool ParseNumber(const char* text, T* value_pointer) { // C++11 doesn't define std::istringstream(int8_t&), so calling this method // with a single-byte type leads to implementation-defined behaviour. // Similarly for uint8_t. - static_assert(sizeof(T) > 1, - "Single-byte types are not supported in this parse method"); + // HexFloat overloads the operator + static_assert(sizeof(T) > 1 || IsHexFloat::value, + "Single-byte types other than HexFloat<> are not supported in " + "this parse method"); if (!text) return false; std::istringstream text_stream(text); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/util/small_vector.h b/libs/bgfx/3rdparty/spirv-tools/source/util/small_vector.h index 1351475..1838843 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/util/small_vector.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/util/small_vector.h @@ -43,6 +43,7 @@ namespace utils { template class SmallVector { public: + using value_type = T; using iterator = T*; using const_iterator = const T*; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/util/span.h b/libs/bgfx/3rdparty/spirv-tools/source/util/span.h new file mode 100644 index 0000000..1e29017 --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/source/util/span.h @@ -0,0 +1,72 @@ +// Copyright 2025 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SOURCE_UTIL_SPAN_H_ +#define SOURCE_UTIL_SPAN_H_ + +#include +#include +#include + +namespace spvtools { +namespace utils { + +// Implement a subset of the C++20 std::span, using at most C++17 functionality. +// Replace this when SPIRV-Tools can use C++20. +template +class Span { + public: + using element_type = T; + using value_type = std::remove_cv_t; + using size_type = std::size_t; + using difference_type = std::ptrdiff_t; + using pointer = T*; + using const_pointer = const T*; + using reference = T&; + using const_reference = const T&; + using iterator = T*; + using const_iterator = const T*; + + Span() {} + Span(iterator first, size_type count) : first_(first), count_(count) {} + + iterator begin() const { return first_; } + iterator end() const { return first_ ? first_ + count_ : nullptr; } + const_iterator cbegin() const { return first_; } + const_iterator cend() const { return first_ ? first_ + count_ : nullptr; } + + size_type size() const { return count_; } + size_type size_bytes() const { return count_ * sizeof(T); } + bool empty() const { return first_ == nullptr || count_ == 0; } + + reference front() const { return *first_; } + reference back() const { return *(first_ + count_ - 1); } + pointer data() const { return first_; } + reference operator[](size_type idx) const { return first_[idx]; } + Span subspan(size_type offset) const { + if (count_ > offset) { + return Span(first_ + offset, count_ - offset); + } + return Span(); + } + + private: + T* first_ = nullptr; + size_type count_ = 0; +}; + +} // namespace utils +} // namespace spvtools + +#endif // SOURCE_UTIL_SPAN_H_ diff --git a/libs/bgfx/3rdparty/spirv-tools/source/util/string_utils.h b/libs/bgfx/3rdparty/spirv-tools/source/util/string_utils.h index 03e20b3..590f8cf 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/util/string_utils.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/util/string_utils.h @@ -17,13 +17,12 @@ #include +#include #include #include #include #include -#include "source/util/string_utils.h" - namespace spvtools { namespace utils { @@ -48,8 +47,9 @@ std::pair SplitFlagArgs(const std::string& flag); // Encodes a string as a sequence of words, using the SPIR-V encoding, appending // to an existing vector. -inline void AppendToVector(const std::string& input, - std::vector* result) { +template > +inline void AppendToVector(const std::string& input, VectorType* result) { + static_assert(std::is_same::value); uint32_t word = 0; size_t num_bytes = input.size(); // SPIR-V strings are null-terminated. The byte_index == num_bytes @@ -70,8 +70,10 @@ inline void AppendToVector(const std::string& input, } // Encodes a string as a sequence of words, using the SPIR-V encoding. -inline std::vector MakeVector(const std::string& input) { - std::vector result; +template > +inline VectorType MakeVector(const std::string& input) { + static_assert(std::is_same::value); + VectorType result; AppendToVector(input, &result); return result; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/instruction.h b/libs/bgfx/3rdparty/spirv-tools/source/val/instruction.h index 59e8af1..6b42489 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/instruction.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/instruction.h @@ -24,6 +24,7 @@ #include "source/ext_inst.h" #include "source/opcode.h" #include "source/table.h" +#include "source/table2.h" #include "spirv-tools/libspirv.h" namespace spvtools { @@ -83,9 +84,7 @@ class Instruction { const spv_parsed_instruction_t& c_inst() const { return inst_; } /// Provides direct access to instructions spv_ext_inst_type_t object. - const spv_ext_inst_type_t& ext_inst_type() const { - return inst_.ext_inst_type; - } + spv_ext_inst_type_t ext_inst_type() const { return inst_.ext_inst_type; } bool IsNonSemantic() const { return spvIsExtendedInstruction(opcode()) && @@ -113,7 +112,7 @@ class Instruction { private: const std::vector words_; const std::vector operands_; - spv_parsed_instruction_t inst_; + const spv_parsed_instruction_t inst_; size_t line_num_ = 0; /// The function in which this instruction was declared diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate.cpp index 2d10347..f553a26 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate.cpp @@ -22,12 +22,12 @@ #include "source/binary.h" #include "source/diagnostic.h" -#include "source/enum_string_mapping.h" #include "source/extensions.h" #include "source/opcode.h" #include "source/spirv_constant.h" #include "source/spirv_endian.h" #include "source/spirv_target_env.h" +#include "source/table2.h" #include "source/val/construct.h" #include "source/val/instruction.h" #include "source/val/validation_state.h" @@ -367,6 +367,8 @@ spv_result_t ValidateBinaryUsingContextAndValidationState( if (auto error = RayReorderNVPass(*vstate, &instruction)) return error; if (auto error = MeshShadingPass(*vstate, &instruction)) return error; if (auto error = TensorLayoutPass(*vstate, &instruction)) return error; + if (auto error = TensorPass(*vstate, &instruction)) return error; + if (auto error = InvalidTypePass(*vstate, &instruction)) return error; } // Validate the preconditions involving adjacent instructions. e.g. diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate.h b/libs/bgfx/3rdparty/spirv-tools/source/val/validate.h index 5514ff7..2b4dee2 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate.h @@ -223,6 +223,12 @@ spv_result_t RayReorderNVPass(ValidationState_t& _, const Instruction* inst); /// Validates correctness of mesh shading instructions. spv_result_t MeshShadingPass(ValidationState_t& _, const Instruction* inst); +/// Validates correctness of tensor instructions. +spv_result_t TensorPass(ValidationState_t& _, const Instruction* inst); + +/// Validates correctness of certain special type instructions. +spv_result_t InvalidTypePass(ValidationState_t& _, const Instruction* inst); + /// Calculates the reachability of basic blocks. void ReachabilityPass(ValidationState_t& _); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_annotation.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_annotation.cpp index cf6f96b..eaca8f0 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_annotation.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_annotation.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2018 Google LLC. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -30,6 +32,11 @@ bool DecorationTakesIdParameters(spv::Decoration type) { case spv::Decoration::AlignmentId: case spv::Decoration::MaxByteOffsetId: case spv::Decoration::HlslCounterBufferGOOGLE: + case spv::Decoration::NodeMaxPayloadsAMDX: + case spv::Decoration::NodeSharesPayloadLimitsWithAMDX: + case spv::Decoration::PayloadNodeArraySizeAMDX: + case spv::Decoration::PayloadNodeNameAMDX: + case spv::Decoration::PayloadNodeBaseIndexAMDX: return true; default: break; @@ -163,6 +170,7 @@ spv_result_t ValidateDecorationTarget(ValidationState_t& _, spv::Decoration dec, case spv::Decoration::Stream: case spv::Decoration::RestrictPointer: case spv::Decoration::AliasedPointer: + case spv::Decoration::PerPrimitiveEXT: if (target->opcode() != spv::Op::OpVariable && target->opcode() != spv::Op::OpUntypedVariableKHR && target->opcode() != spv::Op::OpFunctionParameter && @@ -225,7 +233,8 @@ spv_result_t ValidateDecorationTarget(ValidationState_t& _, spv::Decoration dec, case spv::Decoration::DescriptorSet: if (sc != spv::StorageClass::StorageBuffer && sc != spv::StorageClass::Uniform && - sc != spv::StorageClass::UniformConstant) { + sc != spv::StorageClass::UniformConstant && + sc != spv::StorageClass::TileAttachmentQCOM) { return fail(6491) << "must be in the StorageBuffer, Uniform, or " "UniformConstant storage class"; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_arithmetics.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_arithmetics.cpp index 8b0049c..38281be 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_arithmetics.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_arithmetics.cpp @@ -40,19 +40,34 @@ spv_result_t ArithmeticsPass(ValidationState_t& _, const Instruction* inst) { bool supportsCoopMat = (opcode != spv::Op::OpFMul && opcode != spv::Op::OpFRem && opcode != spv::Op::OpFMod); + bool supportsCoopVec = + (opcode != spv::Op::OpFRem && opcode != spv::Op::OpFMod); if (!_.IsFloatScalarType(result_type) && !_.IsFloatVectorType(result_type) && !(supportsCoopMat && _.IsFloatCooperativeMatrixType(result_type)) && !(opcode == spv::Op::OpFMul && _.IsCooperativeMatrixKHRType(result_type) && - _.IsFloatCooperativeMatrixType(result_type))) + _.IsFloatCooperativeMatrixType(result_type)) && + !(supportsCoopVec && _.IsFloatCooperativeVectorNVType(result_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected floating scalar or vector type as Result Type: " << spvOpcodeString(opcode); for (size_t operand_index = 2; operand_index < inst->operands().size(); ++operand_index) { - if (supportsCoopMat && _.IsCooperativeMatrixKHRType(result_type)) { + if (supportsCoopVec && _.IsCooperativeVectorNVType(result_type)) { + const uint32_t type_id = _.GetOperandTypeId(inst, operand_index); + if (!_.IsCooperativeVectorNVType(type_id)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected arithmetic operands to be of Result Type: " + << spvOpcodeString(opcode) << " operand index " + << operand_index; + } + spv_result_t ret = + _.CooperativeVectorDimensionsMatch(inst, type_id, result_type); + if (ret != SPV_SUCCESS) return ret; + } else if (supportsCoopMat && + _.IsCooperativeMatrixKHRType(result_type)) { const uint32_t type_id = _.GetOperandTypeId(inst, operand_index); if (!_.IsCooperativeMatrixKHRType(type_id) || !_.IsFloatCooperativeMatrixType(type_id)) { @@ -76,17 +91,32 @@ spv_result_t ArithmeticsPass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpUDiv: case spv::Op::OpUMod: { bool supportsCoopMat = (opcode == spv::Op::OpUDiv); + bool supportsCoopVec = (opcode == spv::Op::OpUDiv); if (!_.IsUnsignedIntScalarType(result_type) && !_.IsUnsignedIntVectorType(result_type) && !(supportsCoopMat && - _.IsUnsignedIntCooperativeMatrixType(result_type))) + _.IsUnsignedIntCooperativeMatrixType(result_type)) && + !(supportsCoopVec && + _.IsUnsignedIntCooperativeVectorNVType(result_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected unsigned int scalar or vector type as Result Type: " << spvOpcodeString(opcode); for (size_t operand_index = 2; operand_index < inst->operands().size(); ++operand_index) { - if (supportsCoopMat && _.IsCooperativeMatrixKHRType(result_type)) { + if (supportsCoopVec && _.IsCooperativeVectorNVType(result_type)) { + const uint32_t type_id = _.GetOperandTypeId(inst, operand_index); + if (!_.IsCooperativeVectorNVType(type_id)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected arithmetic operands to be of Result Type: " + << spvOpcodeString(opcode) << " operand index " + << operand_index; + } + spv_result_t ret = + _.CooperativeVectorDimensionsMatch(inst, type_id, result_type); + if (ret != SPV_SUCCESS) return ret; + } else if (supportsCoopMat && + _.IsCooperativeMatrixKHRType(result_type)) { const uint32_t type_id = _.GetOperandTypeId(inst, operand_index); if (!_.IsCooperativeMatrixKHRType(type_id) || !_.IsUnsignedIntCooperativeMatrixType(type_id)) { @@ -117,11 +147,14 @@ spv_result_t ArithmeticsPass(ValidationState_t& _, const Instruction* inst) { bool supportsCoopMat = (opcode != spv::Op::OpIMul && opcode != spv::Op::OpSRem && opcode != spv::Op::OpSMod); + bool supportsCoopVec = + (opcode != spv::Op::OpSRem && opcode != spv::Op::OpSMod); if (!_.IsIntScalarType(result_type) && !_.IsIntVectorType(result_type) && !(supportsCoopMat && _.IsIntCooperativeMatrixType(result_type)) && !(opcode == spv::Op::OpIMul && _.IsCooperativeMatrixKHRType(result_type) && - _.IsIntCooperativeMatrixType(result_type))) + _.IsIntCooperativeMatrixType(result_type)) && + !(supportsCoopVec && _.IsIntCooperativeVectorNVType(result_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected int scalar or vector type as Result Type: " << spvOpcodeString(opcode); @@ -133,6 +166,18 @@ spv_result_t ArithmeticsPass(ValidationState_t& _, const Instruction* inst) { ++operand_index) { const uint32_t type_id = _.GetOperandTypeId(inst, operand_index); + if (supportsCoopVec && _.IsCooperativeVectorNVType(result_type)) { + if (!_.IsCooperativeVectorNVType(type_id)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected arithmetic operands to be of Result Type: " + << spvOpcodeString(opcode) << " operand index " + << operand_index; + } + spv_result_t ret = + _.CooperativeVectorDimensionsMatch(inst, type_id, result_type); + if (ret != SPV_SUCCESS) return ret; + } + if (supportsCoopMat && _.IsCooperativeMatrixKHRType(result_type)) { if (!_.IsCooperativeMatrixKHRType(type_id) || !_.IsIntCooperativeMatrixType(type_id)) { @@ -151,7 +196,8 @@ spv_result_t ArithmeticsPass(ValidationState_t& _, const Instruction* inst) { !(supportsCoopMat && _.IsIntCooperativeMatrixType(result_type)) && !(opcode == spv::Op::OpIMul && _.IsCooperativeMatrixKHRType(result_type) && - _.IsIntCooperativeMatrixType(result_type)))) + _.IsIntCooperativeMatrixType(result_type)) && + !(supportsCoopVec && _.IsIntCooperativeVectorNVType(result_type)))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected int scalar or vector type as operand: " << spvOpcodeString(opcode) << " operand index " @@ -178,6 +224,14 @@ spv_result_t ArithmeticsPass(ValidationState_t& _, const Instruction* inst) { << "Expected float scalar type as Result Type: " << spvOpcodeString(opcode); + if (_.IsBfloat16ScalarType(result_type)) { + if (!_.HasCapability(spv::Capability::BFloat16DotProductKHR)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "OpDot Result Type " << _.getIdName(result_type) + << "requires BFloat16DotProductKHR be declared."; + } + } + uint32_t first_vector_num_components = 0; for (size_t operand_index = 2; operand_index < inst->operands().size(); @@ -210,7 +264,8 @@ spv_result_t ArithmeticsPass(ValidationState_t& _, const Instruction* inst) { } case spv::Op::OpVectorTimesScalar: { - if (!_.IsFloatVectorType(result_type)) + if (!_.IsFloatVectorType(result_type) && + !_.IsFloatCooperativeVectorNVType(result_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected float vector type as Result Type: " << spvOpcodeString(opcode); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_bitwise.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_bitwise.cpp index d8d9958..4acc998 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_bitwise.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_bitwise.cpp @@ -30,14 +30,14 @@ spv_result_t ValidateBaseType(ValidationState_t& _, const Instruction* inst, if (!_.IsIntScalarType(base_type) && !_.IsIntVectorType(base_type)) { return _.diag(SPV_ERROR_INVALID_DATA, inst) - << _.VkErrorID(4781) << "Expected int scalar or vector type for Base operand: " << spvOpcodeString(opcode); } // Vulkan has a restriction to 32 bit for base if (spvIsVulkanEnv(_.context()->target_env)) { - if (_.GetBitWidth(base_type) != 32) { + if (_.GetBitWidth(base_type) != 32 && + !_.options()->allow_vulkan_32_bit_bitwise) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << _.VkErrorID(4781) << "Expected 32-bit int type for Base operand: " @@ -64,7 +64,8 @@ spv_result_t BitwisePass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpShiftRightLogical: case spv::Op::OpShiftRightArithmetic: case spv::Op::OpShiftLeftLogical: { - if (!_.IsIntScalarType(result_type) && !_.IsIntVectorType(result_type)) + if (!_.IsIntScalarType(result_type) && !_.IsIntVectorType(result_type) && + !_.IsIntCooperativeVectorNVType(result_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected int scalar or vector type as Result Type: " << spvOpcodeString(opcode); @@ -74,7 +75,8 @@ spv_result_t BitwisePass(ValidationState_t& _, const Instruction* inst) { const uint32_t shift_type = _.GetOperandTypeId(inst, 3); if (!base_type || - (!_.IsIntScalarType(base_type) && !_.IsIntVectorType(base_type))) + (!_.IsIntScalarType(base_type) && !_.IsIntVectorType(base_type) && + !_.IsIntCooperativeVectorNVType(base_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected Base to be int scalar or vector: " << spvOpcodeString(opcode); @@ -90,7 +92,8 @@ spv_result_t BitwisePass(ValidationState_t& _, const Instruction* inst) { << "as Result Type: " << spvOpcodeString(opcode); if (!shift_type || - (!_.IsIntScalarType(shift_type) && !_.IsIntVectorType(shift_type))) + (!_.IsIntScalarType(shift_type) && !_.IsIntVectorType(shift_type) && + !_.IsIntCooperativeVectorNVType(shift_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected Shift to be int scalar or vector: " << spvOpcodeString(opcode); @@ -106,7 +109,8 @@ spv_result_t BitwisePass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpBitwiseXor: case spv::Op::OpBitwiseAnd: case spv::Op::OpNot: { - if (!_.IsIntScalarType(result_type) && !_.IsIntVectorType(result_type)) + if (!_.IsIntScalarType(result_type) && !_.IsIntVectorType(result_type) && + !_.IsIntCooperativeVectorNVType(result_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected int scalar or vector type as Result Type: " << spvOpcodeString(opcode); @@ -118,7 +122,8 @@ spv_result_t BitwisePass(ValidationState_t& _, const Instruction* inst) { ++operand_index) { const uint32_t type_id = _.GetOperandTypeId(inst, operand_index); if (!type_id || - (!_.IsIntScalarType(type_id) && !_.IsIntVectorType(type_id))) + (!_.IsIntScalarType(type_id) && !_.IsIntVectorType(type_id) && + !_.IsIntCooperativeVectorNVType(type_id))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected int scalar or vector as operand: " << spvOpcodeString(opcode) << " operand index " diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_builtins.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_builtins.cpp index 1305dc1..d25ebaf 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_builtins.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_builtins.cpp @@ -122,7 +122,7 @@ typedef enum VUIDError_ { VUIDErrorMax, } VUIDError; -const static uint32_t NumVUIDBuiltins = 39; +const static uint32_t NumVUIDBuiltins = 40; typedef struct { spv::BuiltIn builtIn; @@ -172,6 +172,8 @@ std::array builtinVUIDInfo = {{ {spv::BuiltIn::PrimitivePointIndicesEXT, {7041, 7043, 7044}}, {spv::BuiltIn::PrimitiveLineIndicesEXT, {7047, 7049, 7050}}, {spv::BuiltIn::PrimitiveTriangleIndicesEXT, {7053, 7055, 7056}}, + {spv::BuiltIn::CullPrimitiveEXT, {7034, 7035, 7036}}, + // clang-format on }}; @@ -269,6 +271,9 @@ class BuiltInsValidator { // specified. Seeds id_to_at_reference_checks_ with decorated ids if needed. spv_result_t ValidateSingleBuiltInAtDefinition(const Decoration& decoration, const Instruction& inst); + spv_result_t ValidateSingleBuiltInAtDefinitionVulkan( + const Decoration& decoration, const Instruction& inst, + const spv::BuiltIn label); // The following section contains functions which are called when id defined // by |inst| is decorated with BuiltIn |decoration|. @@ -585,6 +590,9 @@ class BuiltInsValidator { spv_result_t ValidateBool( const Decoration& decoration, const Instruction& inst, const std::function& diag); + spv_result_t ValidateBlockBoolOrArrayedBool( + const Decoration& decoration, const Instruction& inst, + const std::function& diag); spv_result_t ValidateI( const Decoration& decoration, const Instruction& inst, const std::function& diag); @@ -671,6 +679,37 @@ class BuiltInsValidator { // instruction. void Update(const Instruction& inst); + // Check if "inst" is an interface variable + // or type of a interface varibale of any mesh entry point + bool isMeshInterfaceVar(const Instruction& inst) { + auto getUnderlyingTypeId = [&](const Instruction* ifxVar) { + auto pointerTypeInst = _.FindDef(ifxVar->type_id()); + auto typeInst = _.FindDef(pointerTypeInst->GetOperandAs(2)); + while (typeInst->opcode() == spv::Op::OpTypeArray) { + typeInst = _.FindDef(typeInst->GetOperandAs(1)); + }; + return typeInst->id(); + }; + + for (const uint32_t entry_point : _.entry_points()) { + const auto* models = _.GetExecutionModels(entry_point); + if (models->find(spv::ExecutionModel::MeshEXT) != models->end() || + models->find(spv::ExecutionModel::MeshNV) != models->end()) { + for (const auto& desc : _.entry_point_descriptions(entry_point)) { + for (auto interface : desc.interfaces) { + if (inst.opcode() == spv::Op::OpTypeStruct) { + auto varInst = _.FindDef(interface); + if (inst.id() == getUnderlyingTypeId(varInst)) return true; + } else if (inst.id() == interface) { + return true; + } + } + } + } + } + return false; + } + ValidationState_t& _; // Mapping id -> list of rules which validate instruction referencing the @@ -784,6 +823,30 @@ spv_result_t BuiltInsValidator::ValidateBool( return SPV_SUCCESS; } +spv_result_t BuiltInsValidator::ValidateBlockBoolOrArrayedBool( + const Decoration& decoration, const Instruction& inst, + const std::function& diag) { + uint32_t underlying_type = 0; + if (spv_result_t error = + GetUnderlyingType(_, decoration, inst, &underlying_type)) { + return error; + } + // Strip the array, if present. + if (_.GetIdOpcode(underlying_type) == spv::Op::OpTypeArray) { + underlying_type = _.FindDef(underlying_type)->word(2u); + } else if (!_.HasDecoration(inst.id(), spv::Decoration::Block)) { + // If not in array, and bool is in a struct, must be in a Block struct + return diag(GetDefinitionDesc(decoration, inst) + + " Scalar boolean must be in a Block."); + } + + if (!_.IsBoolScalarType(underlying_type)) { + return diag(GetDefinitionDesc(decoration, inst) + " is not a bool scalar."); + } + + return SPV_SUCCESS; +} + spv_result_t BuiltInsValidator::ValidateI( const Decoration& decoration, const Instruction& inst, const std::function& diag) { @@ -2154,6 +2217,17 @@ spv_result_t BuiltInsValidator::ValidatePrimitiveIdAtDefinition( return error; } } + + if (_.HasCapability(spv::Capability::MeshShadingEXT)) { + if (isMeshInterfaceVar(inst) && + !_.HasDecoration(inst.id(), spv::Decoration::PerPrimitiveEXT)) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(7040) + << "According to the Vulkan spec the variable decorated with " + "Builtin PrimitiveId within the MeshEXT Execution Model must " + "also be decorated with the PerPrimitiveEXT decoration. "; + } + } } // Seed at reference checks with this built-in. @@ -2765,6 +2839,21 @@ spv_result_t BuiltInsValidator::ValidateLayerOrViewportIndexAtDefinition( return error; } } + + if (isMeshInterfaceVar(inst) && + _.HasCapability(spv::Capability::MeshShadingEXT) && + !_.HasDecoration(inst.id(), spv::Decoration::PerPrimitiveEXT)) { + const spv::BuiltIn label = spv::BuiltIn(decoration.params()[0]); + uint32_t vkerrid = (label == spv::BuiltIn::Layer) ? 7039 : 7060; + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(vkerrid) + << "According to the Vulkan spec the variable decorated with " + "Builtin " + << _.grammar().lookupOperandName(SPV_OPERAND_TYPE_BUILT_IN, + decoration.params()[0]) + << " within the MeshEXT Execution Model must also be decorated " + "with the PerPrimitiveEXT decoration. "; + } } // Seed at reference checks with this built-in. @@ -3215,16 +3304,8 @@ spv_result_t BuiltInsValidator::ValidateI32Vec4InputAtDefinition( spv_result_t BuiltInsValidator::ValidateWorkgroupSizeAtDefinition( const Decoration& decoration, const Instruction& inst) { + // Vulkan requires 32-bit int, but Universal has no restrictions if (spvIsVulkanEnv(_.context()->target_env)) { - if (spvIsVulkanEnv(_.context()->target_env) && - !spvOpcodeIsConstant(inst.opcode())) { - return _.diag(SPV_ERROR_INVALID_DATA, &inst) - << _.VkErrorID(4426) - << "Vulkan spec requires BuiltIn WorkgroupSize to be a " - "constant. " - << GetIdDesc(inst) << " is not a constant."; - } - if (spv_result_t error = ValidateI32Vec( decoration, inst, 3, [this, &inst](const std::string& message) -> spv_result_t { @@ -3239,6 +3320,34 @@ spv_result_t BuiltInsValidator::ValidateWorkgroupSizeAtDefinition( } } + if (!spvOpcodeIsConstant(inst.opcode())) { + if (spvIsVulkanEnv(_.context()->target_env)) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(4426) + << "Vulkan spec requires BuiltIn WorkgroupSize to be a " + "constant. " + << GetIdDesc(inst) << " is not a constant."; + } + } else if (inst.opcode() == spv::Op::OpConstantComposite) { + // can only validate product if static and not spec constant + if (_.FindDef(inst.word(3))->opcode() == spv::Op::OpConstant && + _.FindDef(inst.word(4))->opcode() == spv::Op::OpConstant && + _.FindDef(inst.word(5))->opcode() == spv::Op::OpConstant) { + uint64_t x_size, y_size, z_size; + // ValidateI32Vec above confirms there will be 3 words to read + bool static_x = _.EvalConstantValUint64(inst.word(3), &x_size); + bool static_y = _.EvalConstantValUint64(inst.word(4), &y_size); + bool static_z = _.EvalConstantValUint64(inst.word(5), &z_size); + if (static_x && static_y && static_z && + ((x_size * y_size * z_size) == 0)) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << "WorkgroupSize decorations must not have a static " + "product of zero (X = " + << x_size << ", Y = " << y_size << ", Z = " << z_size << ")."; + } + } + } + // Seed at reference checks with this built-in. return ValidateWorkgroupSizeAtReference(decoration, inst, inst, inst); } @@ -3893,6 +4002,15 @@ spv_result_t BuiltInsValidator::ValidatePrimitiveShadingRateAtDefinition( })) { return error; } + if (isMeshInterfaceVar(inst) && + _.HasCapability(spv::Capability::MeshShadingEXT) && + !_.HasDecoration(inst.id(), spv::Decoration::PerPrimitiveEXT)) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(7059) + << "The variable decorated with PrimitiveShadingRateKHR " + "within the MeshEXT Execution Model must also be " + "decorated with the PerPrimitiveEXT decoration"; + } } // Seed at reference checks with this built-in. @@ -3930,7 +4048,7 @@ spv_result_t BuiltInsValidator::ValidatePrimitiveShadingRateAtReference( << _.grammar().lookupOperandName( SPV_OPERAND_TYPE_BUILT_IN, (uint32_t)decoration.builtin()) - << " to be used only with Vertex, Geometry, or MeshNV " + << " to be used only with Vertex, Geometry, MeshNV or MeshEXT " "execution models. " << GetReferenceDesc(decoration, built_in_inst, referenced_inst, referenced_from_inst, execution_model); @@ -4190,60 +4308,160 @@ spv_result_t BuiltInsValidator::ValidateMeshShadingEXTBuiltinsAtDefinition( if (spvIsVulkanEnv(_.context()->target_env)) { const spv::BuiltIn builtin = decoration.builtin(); uint32_t vuid = GetVUIDForBuiltin(builtin, VUIDErrorType); - if (builtin == spv::BuiltIn::PrimitivePointIndicesEXT) { - if (spv_result_t error = ValidateI32Arr( - decoration, inst, - [this, &inst, &decoration, - &vuid](const std::string& message) -> spv_result_t { - return _.diag(SPV_ERROR_INVALID_DATA, &inst) - << _.VkErrorID(vuid) << "According to the " - << spvLogStringForEnv(_.context()->target_env) - << " spec BuiltIn " - << _.grammar().lookupOperandName( - SPV_OPERAND_TYPE_BUILT_IN, - (uint32_t)decoration.builtin()) - << " variable needs to be a 32-bit int array." - << message; - })) { - return error; - } + switch (builtin) { + case spv::BuiltIn::PrimitivePointIndicesEXT: + if (spv_result_t error = ValidateI32Arr( + decoration, inst, + [this, &inst, &decoration, + &vuid](const std::string& message) -> spv_result_t { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(vuid) << "According to the " + << spvLogStringForEnv(_.context()->target_env) + << " spec BuiltIn " + << _.grammar().lookupOperandName( + SPV_OPERAND_TYPE_BUILT_IN, + (uint32_t)decoration.builtin()) + << " variable needs to be a 32-bit int array." + << message; + })) { + return error; + } + break; + case spv::BuiltIn::PrimitiveLineIndicesEXT: + if (spv_result_t error = ValidateArrayedI32Vec( + decoration, inst, 2, + [this, &inst, &decoration, + &vuid](const std::string& message) -> spv_result_t { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(vuid) << "According to the " + << spvLogStringForEnv(_.context()->target_env) + << " spec BuiltIn " + << _.grammar().lookupOperandName( + SPV_OPERAND_TYPE_BUILT_IN, + (uint32_t)decoration.builtin()) + << " variable needs to be a 2-component 32-bit int " + "array." + << message; + })) { + return error; + } + break; + case spv::BuiltIn::PrimitiveTriangleIndicesEXT: + if (spv_result_t error = ValidateArrayedI32Vec( + decoration, inst, 3, + [this, &inst, &decoration, + &vuid](const std::string& message) -> spv_result_t { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(vuid) << "According to the " + << spvLogStringForEnv(_.context()->target_env) + << " spec BuiltIn " + << _.grammar().lookupOperandName( + SPV_OPERAND_TYPE_BUILT_IN, + (uint32_t)decoration.builtin()) + << " variable needs to be a 3-component 32-bit int " + "array." + << message; + })) { + return error; + } + break; + case spv::BuiltIn::CullPrimitiveEXT: + if (spv_result_t error = ValidateBlockBoolOrArrayedBool( + decoration, inst, + [this, &inst, &decoration, + &vuid](const std::string& message) -> spv_result_t { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(vuid) << "According to the " + << spvLogStringForEnv(_.context()->target_env) + << " spec BuiltIn " + << _.grammar().lookupOperandName( + SPV_OPERAND_TYPE_BUILT_IN, + (uint32_t)decoration.builtin()) + << " variable needs to be a either a boolean or an " + "array of booleans." + << message; + })) { + return error; + } + if (!_.HasDecoration(inst.id(), spv::Decoration::PerPrimitiveEXT)) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(7038) + << "The variable decorated with CullPrimitiveEXT within the " + "MeshEXT Execution Model must also be decorated with the " + "PerPrimitiveEXT decoration "; + } + break; + default: + assert(0 && "Unexpected mesh EXT builtin"); } - if (builtin == spv::BuiltIn::PrimitiveLineIndicesEXT) { - if (spv_result_t error = ValidateArrayedI32Vec( - decoration, inst, 2, - [this, &inst, &decoration, - &vuid](const std::string& message) -> spv_result_t { - return _.diag(SPV_ERROR_INVALID_DATA, &inst) - << _.VkErrorID(vuid) << "According to the " - << spvLogStringForEnv(_.context()->target_env) - << " spec BuiltIn " - << _.grammar().lookupOperandName( - SPV_OPERAND_TYPE_BUILT_IN, - (uint32_t)decoration.builtin()) - << " variable needs to be a 2-component 32-bit int " - "array." - << message; - })) { + for (const uint32_t entry_point : _.entry_points()) { + const auto* modes = _.GetExecutionModes(entry_point); + uint64_t maxOutputPrimitives = _.GetOutputPrimitivesEXT(entry_point); + uint32_t underlying_type = 0; + if (spv_result_t error = + GetUnderlyingType(_, decoration, inst, &underlying_type)) { return error; } - } - if (builtin == spv::BuiltIn::PrimitiveTriangleIndicesEXT) { - if (spv_result_t error = ValidateArrayedI32Vec( - decoration, inst, 3, - [this, &inst, &decoration, - &vuid](const std::string& message) -> spv_result_t { - return _.diag(SPV_ERROR_INVALID_DATA, &inst) - << _.VkErrorID(vuid) << "According to the " - << spvLogStringForEnv(_.context()->target_env) - << " spec BuiltIn " - << _.grammar().lookupOperandName( - SPV_OPERAND_TYPE_BUILT_IN, - (uint32_t)decoration.builtin()) - << " variable needs to be a 3-component 32-bit int " - "array." - << message; - })) { - return error; + + uint64_t primitiveArrayDim = 0; + if (_.GetIdOpcode(underlying_type) == spv::Op::OpTypeArray) { + underlying_type = _.FindDef(underlying_type)->word(3u); + if (!_.EvalConstantValUint64(underlying_type, &primitiveArrayDim)) { + assert(0 && "Array type definition is corrupt"); + } + } + switch (builtin) { + case spv::BuiltIn::PrimitivePointIndicesEXT: + if (!modes || !modes->count(spv::ExecutionMode::OutputPoints)) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(7042) + << "The PrimitivePointIndicesEXT decoration must be used " + "with " + "the OutputPoints Execution Mode. "; + } + if (primitiveArrayDim && primitiveArrayDim != maxOutputPrimitives) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(7046) + << "The size of the array decorated with " + "PrimitivePointIndicesEXT must match the value specified " + "by OutputPrimitivesEXT. "; + } + break; + case spv::BuiltIn::PrimitiveLineIndicesEXT: + if (!modes || !modes->count(spv::ExecutionMode::OutputLinesEXT)) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(7048) + << "The PrimitiveLineIndicesEXT decoration must be used " + "with " + "the OutputLinesEXT Execution Mode. "; + } + if (primitiveArrayDim && primitiveArrayDim != maxOutputPrimitives) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(7052) + << "The size of the array decorated with " + "PrimitiveLineIndicesEXT must match the value specified " + "by OutputPrimitivesEXT. "; + } + break; + case spv::BuiltIn::PrimitiveTriangleIndicesEXT: + if (!modes || !modes->count(spv::ExecutionMode::OutputTrianglesEXT)) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(7054) + << "The PrimitiveTriangleIndicesEXT decoration must be used " + "with " + "the OutputTrianglesEXT Execution Mode. "; + } + if (primitiveArrayDim && primitiveArrayDim != maxOutputPrimitives) { + return _.diag(SPV_ERROR_INVALID_DATA, &inst) + << _.VkErrorID(7058) + << "The size of the array decorated with " + "PrimitiveTriangleIndicesEXT must match the value " + "specified " + "by OutputPrimitivesEXT. "; + } + break; + default: + break; // no validation rules } } } @@ -4273,7 +4491,6 @@ spv_result_t BuiltInsValidator::ValidateMeshShadingEXTBuiltinsAtReference( referenced_from_inst) << " " << GetStorageClassDesc(referenced_from_inst); } - for (const spv::ExecutionModel execution_model : execution_models_) { if (execution_model != spv::ExecutionModel::MeshEXT) { uint32_t vuid = GetVUIDForBuiltin(builtin, VUIDErrorExecutionModel); @@ -4304,18 +4521,20 @@ spv_result_t BuiltInsValidator::ValidateMeshShadingEXTBuiltinsAtReference( spv_result_t BuiltInsValidator::ValidateSingleBuiltInAtDefinition( const Decoration& decoration, const Instruction& inst) { const spv::BuiltIn label = decoration.builtin(); + // Universial checks + if (label == spv::BuiltIn::WorkgroupSize) { + return ValidateWorkgroupSizeAtDefinition(decoration, inst); + } - if (!spvIsVulkanEnv(_.context()->target_env)) { - // Early return. All currently implemented rules are based on Vulkan spec. - // - // TODO: If you are adding validation rules for environments other than - // Vulkan (or general rules which are not environment independent), then - // you need to modify or remove this condition. Consider also adding early - // returns into BuiltIn-specific rules, so that the system doesn't spawn new - // rules which don't do anything. - return SPV_SUCCESS; + if (spvIsVulkanEnv(_.context()->target_env)) { + return ValidateSingleBuiltInAtDefinitionVulkan(decoration, inst, label); } + return SPV_SUCCESS; +} +spv_result_t BuiltInsValidator::ValidateSingleBuiltInAtDefinitionVulkan( + const Decoration& decoration, const Instruction& inst, + const spv::BuiltIn label) { // If you are adding a new BuiltIn enum, please register it here. // If the newly added enum has validation rules associated with it // consider leaving a TODO and/or creating an issue. @@ -4407,9 +4626,6 @@ spv_result_t BuiltInsValidator::ValidateSingleBuiltInAtDefinition( case spv::BuiltIn::VertexIndex: { return ValidateVertexIndexAtDefinition(decoration, inst); } - case spv::BuiltIn::WorkgroupSize: { - return ValidateWorkgroupSizeAtDefinition(decoration, inst); - } case spv::BuiltIn::VertexId: { return ValidateVertexIdAtDefinition(decoration, inst); } @@ -4476,6 +4692,7 @@ spv_result_t BuiltInsValidator::ValidateSingleBuiltInAtDefinition( case spv::BuiltIn::CullMaskKHR: { return ValidateRayTracingBuiltinsAtDefinition(decoration, inst); } + case spv::BuiltIn::CullPrimitiveEXT: case spv::BuiltIn::PrimitivePointIndicesEXT: case spv::BuiltIn::PrimitiveLineIndicesEXT: case spv::BuiltIn::PrimitiveTriangleIndicesEXT: { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_capability.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_capability.cpp index 81d2ad5..05ccb11 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_capability.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_capability.cpp @@ -18,6 +18,7 @@ #include #include "source/opcode.h" +#include "source/table2.h" #include "source/val/instruction.h" #include "source/val/validate.h" #include "source/val/validation_state.h" @@ -67,6 +68,50 @@ bool IsSupportGuaranteedVulkan_1_2(uint32_t capability) { return false; } +bool IsSupportGuaranteedVulkan_1_3(uint32_t capability) { + if (IsSupportGuaranteedVulkan_1_2(capability)) return true; + switch (spv::Capability(capability)) { + case spv::Capability::DotProduct: + case spv::Capability::DotProductInputAll: + case spv::Capability::DotProductInput4x8Bit: + case spv::Capability::DotProductInput4x8BitPacked: + case spv::Capability::VulkanMemoryModel: + case spv::Capability::VulkanMemoryModelDeviceScope: + case spv::Capability::PhysicalStorageBufferAddresses: + case spv::Capability::DemoteToHelperInvocation: + return true; + default: + break; + } + return false; +} + +bool IsSupportGuaranteedVulkan_1_4(uint32_t capability) { + if (IsSupportGuaranteedVulkan_1_3(capability)) return true; + switch (spv::Capability(capability)) { + case spv::Capability::UniformBufferArrayDynamicIndexing: + case spv::Capability::SampledImageArrayDynamicIndexing: + case spv::Capability::StorageBufferArrayDynamicIndexing: + case spv::Capability::StorageImageArrayDynamicIndexing: + case spv::Capability::Int16: + case spv::Capability::StorageBuffer16BitAccess: + case spv::Capability::VariablePointers: + case spv::Capability::VariablePointersStorageBuffer: + case spv::Capability::UniformTexelBufferArrayDynamicIndexing: + case spv::Capability::StorageTexelBufferArrayDynamicIndexing: + case spv::Capability::Int8: + case spv::Capability::StorageBuffer8BitAccess: + case spv::Capability::FloatControls2: + case spv::Capability::SampleRateShading: + case spv::Capability::StorageImageExtendedFormats: + case spv::Capability::ImageGatherExtended: + return true; + default: + break; + } + return false; +} + bool IsSupportOptionalVulkan_1_0(uint32_t capability) { switch (spv::Capability(capability)) { case spv::Capability::Geometry: @@ -100,6 +145,8 @@ bool IsSupportOptionalVulkan_1_0(uint32_t capability) { case spv::Capability::GeometryStreams: case spv::Capability::Float16: case spv::Capability::Int8: + case spv::Capability::BFloat16TypeKHR: + case spv::Capability::Float8EXT: return true; default: break; @@ -171,6 +218,16 @@ bool IsSupportOptionalVulkan_1_2(uint32_t capability) { return false; } +// Vulkan 1.3 only added required features. +bool IsSupportOptionalVulkan_1_3(uint32_t capability) { + return IsSupportOptionalVulkan_1_2(capability); +} + +// Vulkan 1.4 only added required features. +bool IsSupportOptionalVulkan_1_4(uint32_t capability) { + return IsSupportOptionalVulkan_1_3(capability); +} + bool IsSupportGuaranteedOpenCL_1_2(uint32_t capability, bool embedded_profile) { switch (spv::Capability(capability)) { case spv::Capability::Addresses: @@ -221,6 +278,7 @@ bool IsSupportOptionalOpenCL_1_2(uint32_t capability) { switch (spv::Capability(capability)) { case spv::Capability::ImageBasic: case spv::Capability::Float64: + case spv::Capability::Float16: return true; default: break; @@ -230,16 +288,16 @@ bool IsSupportOptionalOpenCL_1_2(uint32_t capability) { // Checks if |capability| was enabled by extension. bool IsEnabledByExtension(ValidationState_t& _, uint32_t capability) { - spv_operand_desc operand_desc = nullptr; - _.grammar().lookupOperand(SPV_OPERAND_TYPE_CAPABILITY, capability, - &operand_desc); + const spvtools::OperandDesc* operand_desc = nullptr; + spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY, capability, + &operand_desc); // operand_desc is expected to be not null, otherwise validator would have // failed at an earlier stage. This 'assert' is 'just in case'. assert(operand_desc); - ExtensionSet operand_exts(operand_desc->numExtensions, - operand_desc->extensions); + ExtensionSet operand_exts(operand_desc->extensions_range.count(), + operand_desc->extensions().data()); if (operand_exts.empty()) return false; return _.HasAnyOfExtensions(operand_exts); @@ -297,14 +355,14 @@ spv_result_t CapabilityPass(ValidationState_t& _, const Instruction* inst) { assert(operand.offset < inst->words().size()); const uint32_t capability = inst->word(operand.offset); - const auto capability_str = [&_, capability]() { - spv_operand_desc desc = nullptr; - if (_.grammar().lookupOperand(SPV_OPERAND_TYPE_CAPABILITY, capability, - &desc) != SPV_SUCCESS || + const auto capability_str = [capability]() { + const spvtools::OperandDesc* desc = nullptr; + if (spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY, capability, + &desc) != SPV_SUCCESS || !desc) { return std::string("Unknown"); } - return std::string(desc->name); + return std::string(desc->name().data()); }; const auto env = _.context()->target_env; @@ -340,6 +398,24 @@ spv_result_t CapabilityPass(ValidationState_t& _, const Instruction* inst) { << " is not allowed by Vulkan 1.2 specification" << " (or requires extension)"; } + } else if (env == SPV_ENV_VULKAN_1_3) { + if (!IsSupportGuaranteedVulkan_1_3(capability) && + !IsSupportOptionalVulkan_1_3(capability) && + !IsEnabledByExtension(_, capability)) { + return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst) + << "Capability " << capability_str() + << " is not allowed by Vulkan 1.3 specification" + << " (or requires extension)"; + } + } else if (env == SPV_ENV_VULKAN_1_4) { + if (!IsSupportGuaranteedVulkan_1_4(capability) && + !IsSupportOptionalVulkan_1_4(capability) && + !IsEnabledByExtension(_, capability)) { + return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst) + << "Capability " << capability_str() + << " is not allowed by Vulkan 1.4 specification" + << " (or requires extension)"; + } } else if (env == SPV_ENV_OPENCL_1_2 || env == SPV_ENV_OPENCL_EMBEDDED_1_2) { if (!IsSupportGuaranteedOpenCL_1_2(capability, opencl_embedded) && !IsSupportOptionalOpenCL_1_2(capability) && diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_composites.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_composites.cpp index 26486da..2afeae7 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_composites.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_composites.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2017 Google Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -104,7 +106,8 @@ spv_result_t GetExtractInsertValueType(ValidationState_t& _, } break; } - case spv::Op::OpTypeRuntimeArray: { + case spv::Op::OpTypeRuntimeArray: + case spv::Op::OpTypeNodePayloadArrayAMDX: { *member_type = type_inst->word(2); // Array size is unknown. break; @@ -122,6 +125,7 @@ spv_result_t GetExtractInsertValueType(ValidationState_t& _, *member_type = type_inst->word(component_index + 2); break; } + case spv::Op::OpTypeCooperativeVectorNV: case spv::Op::OpTypeCooperativeMatrixKHR: case spv::Op::OpTypeCooperativeMatrixNV: { *member_type = type_inst->word(2); @@ -148,7 +152,8 @@ spv_result_t ValidateVectorExtractDynamic(ValidationState_t& _, const uint32_t vector_type = _.GetOperandTypeId(inst, 2); const spv::Op vector_opcode = _.GetIdOpcode(vector_type); - if (vector_opcode != spv::Op::OpTypeVector) { + if (vector_opcode != spv::Op::OpTypeVector && + vector_opcode != spv::Op::OpTypeCooperativeVectorNV) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected Vector type to be OpTypeVector"; } @@ -176,7 +181,8 @@ spv_result_t ValidateVectorInsertDyanmic(ValidationState_t& _, const Instruction* inst) { const uint32_t result_type = inst->type_id(); const spv::Op result_opcode = _.GetIdOpcode(result_type); - if (result_opcode != spv::Op::OpTypeVector) { + if (result_opcode != spv::Op::OpTypeVector && + result_opcode != spv::Op::OpTypeCooperativeVectorNV) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected Result Type to be OpTypeVector"; } @@ -214,14 +220,24 @@ spv_result_t ValidateCompositeConstruct(ValidationState_t& _, const uint32_t result_type = inst->type_id(); const spv::Op result_opcode = _.GetIdOpcode(result_type); switch (result_opcode) { - case spv::Op::OpTypeVector: { - const uint32_t num_result_components = _.GetDimension(result_type); + case spv::Op::OpTypeVector: + case spv::Op::OpTypeCooperativeVectorNV: { + uint32_t num_result_components = _.GetDimension(result_type); const uint32_t result_component_type = _.GetComponentType(result_type); uint32_t given_component_count = 0; - if (num_operands <= 3) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Expected number of constituents to be at least 2"; + bool comp_is_int32 = true, comp_is_const_int32 = true; + + if (result_opcode == spv::Op::OpTypeVector) { + if (num_operands <= 3) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected number of constituents to be at least 2"; + } + } else { + uint32_t comp_count_id = + _.FindDef(result_type)->GetOperandAs(2); + std::tie(comp_is_int32, comp_is_const_int32, num_result_components) = + _.EvalInt32IfConst(comp_count_id); } for (uint32_t operand_index = 2; operand_index < num_operands; @@ -241,7 +257,8 @@ spv_result_t ValidateCompositeConstruct(ValidationState_t& _, } } - if (num_result_components != given_component_count) { + if (comp_is_const_int32 && + num_result_components != given_component_count) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected total number of given components to be equal " << "to the size of Result Type vector"; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_constants.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_constants.cpp index 1d40eed..08a1496 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_constants.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_constants.cpp @@ -33,12 +33,19 @@ spv_result_t ValidateConstantBool(ValidationState_t& _, return SPV_SUCCESS; } +bool isCompositeType(const Instruction* inst) { + bool is_tensor = inst->opcode() == spv::Op::OpTypeTensorARM; + bool tensor_is_shaped = inst->words().size() == 5; + return spvOpcodeIsComposite(inst->opcode()) || + (is_tensor && tensor_is_shaped); +} + spv_result_t ValidateConstantComposite(ValidationState_t& _, const Instruction* inst) { std::string opcode_name = std::string("Op") + spvOpcodeString(inst->opcode()); const auto result_type = _.FindDef(inst->type_id()); - if (!result_type || !spvOpcodeIsComposite(result_type->opcode())) { + if (!result_type || !isCompositeType(result_type)) { return _.diag(SPV_ERROR_INVALID_ID, inst) << opcode_name << " Result Type " << _.getIdName(inst->type_id()) << " is not a composite type."; @@ -46,9 +53,18 @@ spv_result_t ValidateConstantComposite(ValidationState_t& _, const auto constituent_count = inst->words().size() - 3; switch (result_type->opcode()) { - case spv::Op::OpTypeVector: { - const auto component_count = result_type->GetOperandAs(2); - if (component_count != constituent_count) { + case spv::Op::OpTypeVector: + case spv::Op::OpTypeCooperativeVectorNV: { + uint32_t num_result_components = _.GetDimension(result_type->id()); + bool comp_is_int32 = true, comp_is_const_int32 = true; + + if (result_type->opcode() == spv::Op::OpTypeCooperativeVectorNV) { + uint32_t comp_count_id = result_type->GetOperandAs(2); + std::tie(comp_is_int32, comp_is_const_int32, num_result_components) = + _.EvalInt32IfConst(comp_count_id); + } + + if (comp_is_const_int32 && num_result_components != constituent_count) { // TODO: Output ID's on diagnostic return _.diag(SPV_ERROR_INVALID_ID, inst) << opcode_name @@ -273,6 +289,141 @@ spv_result_t ValidateConstantComposite(ValidationState_t& _, << _.getIdName(result_type->id()) << "s component type."; } } break; + case spv::Op::OpTypeTensorARM: { + auto inst_element_type = + _.FindDef(result_type->GetOperandAs(1)); + if (!inst_element_type) { + return _.diag(SPV_ERROR_INVALID_ID, result_type) + << "Element type is not defined."; + } + const auto inst_rank = _.FindDef(result_type->GetOperandAs(2)); + if (!inst_rank) { + return _.diag(SPV_ERROR_INVALID_ID, result_type) + << "Rank is not defined."; + } + const auto inst_shape = _.FindDef(result_type->GetOperandAs(3)); + if (!inst_shape) { + return _.diag(SPV_ERROR_INVALID_ID, result_type) + << "Shape is not defined."; + } + + uint64_t rank = 0; + _.EvalConstantValUint64(inst_rank->id(), &rank); + + uint64_t outermost_shape = 0; + if (_.EvalConstantValUint64(inst_shape->GetOperandAs(2), + &outermost_shape) && + (outermost_shape != constituent_count)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name + << " Constituent count does not match " + "the shape of Result Type " + << _.getIdName(result_type->id()) + << " along its outermost dimension, " << "expected " + << outermost_shape << " but got " << constituent_count << "."; + } + + for (size_t constituent_index = 2; + constituent_index < inst->operands().size(); constituent_index++) { + const auto constituent_id = + inst->GetOperandAs(constituent_index); + const auto constituent = _.FindDef(constituent_id); + if (!constituent || + !spvOpcodeIsConstantOrUndef(constituent->opcode())) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " Constituent " + << _.getIdName(constituent_id) + << " is not a constant or undef."; + } + const auto constituent_type = _.FindDef(constituent->type_id()); + if (!constituent_type) { + return _.diag(SPV_ERROR_INVALID_ID, constituent) + << "Type of Constituent " << constituent_index - 2 + << " is not defined."; + } + + if (rank == 0) { + // The rank of the returned tensor constant is not known. + // Skip rank-dependent validation. + continue; + } + + if (rank == 1) { + if (inst_element_type->id() != constituent_type->id()) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " Constituent " + << _.getIdName(constituent_id) + << " type does not match the element type of the tensor (" + << _.getIdName(result_type->id()) << ")."; + } + } else { + if (constituent_type->opcode() != spv::Op::OpTypeTensorARM) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " Constituent " + << _.getIdName(constituent_id) + << " must be an OpTypeTensorARM."; + } + auto inst_constituent_element_type = + _.FindDef(constituent_type->GetOperandAs(1)); + if (!inst_constituent_element_type || + inst_constituent_element_type->id() != inst_element_type->id()) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " Constituent " + << _.getIdName(constituent_id) + << " must have the same Element Type as Result Type " + << _.getIdName(result_type->id()) << "."; + } + auto inst_constituent_rank = + _.FindDef(constituent_type->GetOperandAs(2)); + uint64_t constituent_rank; + if (inst_constituent_rank && + _.EvalConstantValUint64(inst_constituent_rank->id(), + &constituent_rank) && + (constituent_rank != rank - 1)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " Constituent " + << _.getIdName(constituent_id) + << " must have a Rank that is 1 less than the Rank of " + "Result Type " + << _.getIdName(result_type->id()) << ", expected " + << rank - 1 << " but got " << constituent_rank << "."; + } + + auto inst_constituent_shape = + _.FindDef(constituent_type->GetOperandAs(3)); + if (!inst_constituent_shape) { + return _.diag(SPV_ERROR_INVALID_ID, result_type) + << "Shape of Constituent " << constituent_index - 2 + << " is not defined."; + } + for (size_t constituent_shape_index = 2; + constituent_shape_index < + inst_constituent_shape->operands().size(); + constituent_shape_index++) { + size_t shape_index = constituent_shape_index + 1; + uint64_t constituent_shape = 0, shape = 1; + if (_.EvalConstantValUint64( + inst_constituent_shape->GetOperandAs( + constituent_shape_index), + &constituent_shape) && + _.EvalConstantValUint64( + inst_shape->GetOperandAs(shape_index), &shape) && + (constituent_shape != shape)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " Constituent " + << _.getIdName(constituent_id) + << " must have a Shape that matches that of Result Type " + " " + << _.getIdName(result_type->id()) + << " along all inner dimensions of Result Type, expected " + << shape << " for dimension " + << constituent_shape_index - 2 + << " of Constituent but got " << constituent_shape << "."; + } + } + } + } + } break; default: break; } @@ -312,6 +463,7 @@ bool IsTypeNullable(const std::vector& instruction, case spv::Op::OpTypeMatrix: case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: case spv::Op::OpTypeVector: { auto base_type = _.FindDef(instruction[2]); return base_type && IsTypeNullable(base_type->words(), _); @@ -331,6 +483,11 @@ bool IsTypeNullable(const std::vector& instruction, return false; } return true; + case spv::Op::OpTypeTensorARM: { + auto elem_type = _.FindDef(instruction[2]); + return (instruction.size() > 4) && elem_type && + IsTypeNullable(elem_type->words(), _); + } default: return false; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_conversion.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_conversion.cpp index 770b8e2..be50a6f 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_conversion.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_conversion.cpp @@ -33,7 +33,8 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpConvertFToU: { if (!_.IsUnsignedIntScalarType(result_type) && !_.IsUnsignedIntVectorType(result_type) && - !_.IsUnsignedIntCooperativeMatrixType(result_type)) + !_.IsUnsignedIntCooperativeMatrixType(result_type) && + !_.IsUnsignedIntCooperativeVectorNVType(result_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected unsigned int scalar or vector type as Result Type: " << spvOpcodeString(opcode); @@ -41,13 +42,19 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { const uint32_t input_type = _.GetOperandTypeId(inst, 2); if (!input_type || (!_.IsFloatScalarType(input_type) && !_.IsFloatVectorType(input_type) && - !_.IsFloatCooperativeMatrixType(input_type))) + !_.IsFloatCooperativeMatrixType(input_type) && + !_.IsFloatCooperativeVectorNVType(input_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected input to be float scalar or vector: " << spvOpcodeString(opcode); - if (_.IsCooperativeMatrixType(result_type) || - _.IsCooperativeMatrixType(input_type)) { + if (_.IsCooperativeVectorNVType(result_type) || + _.IsCooperativeVectorNVType(input_type)) { + spv_result_t ret = + _.CooperativeVectorDimensionsMatch(inst, result_type, input_type); + if (ret != SPV_SUCCESS) return ret; + } else if (_.IsCooperativeMatrixType(result_type) || + _.IsCooperativeMatrixType(input_type)) { spv_result_t ret = _.CooperativeMatrixShapesMatch(inst, result_type, input_type, true); if (ret != SPV_SUCCESS) return ret; @@ -63,7 +70,8 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpConvertFToS: { if (!_.IsIntScalarType(result_type) && !_.IsIntVectorType(result_type) && - !_.IsIntCooperativeMatrixType(result_type)) + !_.IsIntCooperativeMatrixType(result_type) && + !_.IsIntCooperativeVectorNVType(result_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected int scalar or vector type as Result Type: " << spvOpcodeString(opcode); @@ -71,13 +79,19 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { const uint32_t input_type = _.GetOperandTypeId(inst, 2); if (!input_type || (!_.IsFloatScalarType(input_type) && !_.IsFloatVectorType(input_type) && - !_.IsFloatCooperativeMatrixType(input_type))) + !_.IsFloatCooperativeMatrixType(input_type) && + !_.IsFloatCooperativeVectorNVType(input_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected input to be float scalar or vector: " << spvOpcodeString(opcode); - if (_.IsCooperativeMatrixType(result_type) || - _.IsCooperativeMatrixType(input_type)) { + if (_.IsCooperativeVectorNVType(result_type) || + _.IsCooperativeVectorNVType(input_type)) { + spv_result_t ret = + _.CooperativeVectorDimensionsMatch(inst, result_type, input_type); + if (ret != SPV_SUCCESS) return ret; + } else if (_.IsCooperativeMatrixType(result_type) || + _.IsCooperativeMatrixType(input_type)) { spv_result_t ret = _.CooperativeMatrixShapesMatch(inst, result_type, input_type, true); if (ret != SPV_SUCCESS) return ret; @@ -95,7 +109,8 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpConvertUToF: { if (!_.IsFloatScalarType(result_type) && !_.IsFloatVectorType(result_type) && - !_.IsFloatCooperativeMatrixType(result_type)) + !_.IsFloatCooperativeMatrixType(result_type) && + !_.IsFloatCooperativeVectorNVType(result_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected float scalar or vector type as Result Type: " << spvOpcodeString(opcode); @@ -103,13 +118,19 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { const uint32_t input_type = _.GetOperandTypeId(inst, 2); if (!input_type || (!_.IsIntScalarType(input_type) && !_.IsIntVectorType(input_type) && - !_.IsIntCooperativeMatrixType(input_type))) + !_.IsIntCooperativeMatrixType(input_type) && + !_.IsIntCooperativeVectorNVType(input_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected input to be int scalar or vector: " << spvOpcodeString(opcode); - if (_.IsCooperativeMatrixType(result_type) || - _.IsCooperativeMatrixType(input_type)) { + if (_.IsCooperativeVectorNVType(result_type) || + _.IsCooperativeVectorNVType(input_type)) { + spv_result_t ret = + _.CooperativeVectorDimensionsMatch(inst, result_type, input_type); + if (ret != SPV_SUCCESS) return ret; + } else if (_.IsCooperativeMatrixType(result_type) || + _.IsCooperativeMatrixType(input_type)) { spv_result_t ret = _.CooperativeMatrixShapesMatch(inst, result_type, input_type, true); if (ret != SPV_SUCCESS) return ret; @@ -126,7 +147,8 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpUConvert: { if (!_.IsUnsignedIntScalarType(result_type) && !_.IsUnsignedIntVectorType(result_type) && - !_.IsUnsignedIntCooperativeMatrixType(result_type)) + !_.IsUnsignedIntCooperativeMatrixType(result_type) && + !_.IsUnsignedIntCooperativeVectorNVType(result_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected unsigned int scalar or vector type as Result Type: " << spvOpcodeString(opcode); @@ -134,13 +156,19 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { const uint32_t input_type = _.GetOperandTypeId(inst, 2); if (!input_type || (!_.IsIntScalarType(input_type) && !_.IsIntVectorType(input_type) && - !_.IsIntCooperativeMatrixType(input_type))) + !_.IsIntCooperativeMatrixType(input_type) && + !_.IsIntCooperativeVectorNVType(input_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected input to be int scalar or vector: " << spvOpcodeString(opcode); - if (_.IsCooperativeMatrixType(result_type) || - _.IsCooperativeMatrixType(input_type)) { + if (_.IsCooperativeVectorNVType(result_type) || + _.IsCooperativeVectorNVType(input_type)) { + spv_result_t ret = + _.CooperativeVectorDimensionsMatch(inst, result_type, input_type); + if (ret != SPV_SUCCESS) return ret; + } else if (_.IsCooperativeMatrixType(result_type) || + _.IsCooperativeMatrixType(input_type)) { spv_result_t ret = _.CooperativeMatrixShapesMatch(inst, result_type, input_type, true); if (ret != SPV_SUCCESS) return ret; @@ -161,7 +189,8 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpSConvert: { if (!_.IsIntScalarType(result_type) && !_.IsIntVectorType(result_type) && - !_.IsIntCooperativeMatrixType(result_type)) + !_.IsIntCooperativeMatrixType(result_type) && + !_.IsIntCooperativeVectorNVType(result_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected int scalar or vector type as Result Type: " << spvOpcodeString(opcode); @@ -169,13 +198,19 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { const uint32_t input_type = _.GetOperandTypeId(inst, 2); if (!input_type || (!_.IsIntScalarType(input_type) && !_.IsIntVectorType(input_type) && - !_.IsIntCooperativeMatrixType(input_type))) + !_.IsIntCooperativeMatrixType(input_type) && + !_.IsIntCooperativeVectorNVType(input_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected input to be int scalar or vector: " << spvOpcodeString(opcode); - if (_.IsCooperativeMatrixType(result_type) || - _.IsCooperativeMatrixType(input_type)) { + if (_.IsCooperativeVectorNVType(result_type) || + _.IsCooperativeVectorNVType(input_type)) { + spv_result_t ret = + _.CooperativeVectorDimensionsMatch(inst, result_type, input_type); + if (ret != SPV_SUCCESS) return ret; + } else if (_.IsCooperativeMatrixType(result_type) || + _.IsCooperativeMatrixType(input_type)) { spv_result_t ret = _.CooperativeMatrixShapesMatch(inst, result_type, input_type, true); if (ret != SPV_SUCCESS) return ret; @@ -197,7 +232,8 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpFConvert: { if (!_.IsFloatScalarType(result_type) && !_.IsFloatVectorType(result_type) && - !_.IsFloatCooperativeMatrixType(result_type)) + !_.IsFloatCooperativeMatrixType(result_type) && + !_.IsFloatCooperativeVectorNVType(result_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected float scalar or vector type as Result Type: " << spvOpcodeString(opcode); @@ -205,13 +241,19 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { const uint32_t input_type = _.GetOperandTypeId(inst, 2); if (!input_type || (!_.IsFloatScalarType(input_type) && !_.IsFloatVectorType(input_type) && - !_.IsFloatCooperativeMatrixType(input_type))) + !_.IsFloatCooperativeMatrixType(input_type) && + !_.IsFloatCooperativeVectorNVType(input_type))) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected input to be float scalar or vector: " << spvOpcodeString(opcode); - if (_.IsCooperativeMatrixType(result_type) || - _.IsCooperativeMatrixType(input_type)) { + if (_.IsCooperativeVectorNVType(result_type) || + _.IsCooperativeVectorNVType(input_type)) { + spv_result_t ret = + _.CooperativeVectorDimensionsMatch(inst, result_type, input_type); + if (ret != SPV_SUCCESS) return ret; + } else if (_.IsCooperativeMatrixType(result_type) || + _.IsCooperativeMatrixType(input_type)) { spv_result_t ret = _.CooperativeMatrixShapesMatch(inst, result_type, input_type, true); if (ret != SPV_SUCCESS) return ret; @@ -222,11 +264,15 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { << spvOpcodeString(opcode); } - if (_.GetBitWidth(result_type) == _.GetBitWidth(input_type)) + // Scalar type + const uint32_t resScalarType = _.GetComponentType(result_type); + const uint32_t inputScalartype = _.GetComponentType(input_type); + if (resScalarType == inputScalartype) { return _.diag(SPV_ERROR_INVALID_DATA, inst) - << "Expected input to have different bit width from Result " - "Type: " + << "Expected component type of Value to be different from " + "component type of Result Type: " << spvOpcodeString(opcode); + } break; } @@ -475,9 +521,11 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { const bool result_is_coopmat = _.IsCooperativeMatrixType(result_type); const bool input_is_coopmat = _.IsCooperativeMatrixType(input_type); + const bool result_is_coopvec = _.IsCooperativeVectorNVType(result_type); + const bool input_is_coopvec = _.IsCooperativeVectorNVType(input_type); if (!result_is_pointer && !result_is_int_scalar && !result_is_coopmat && - !_.IsIntVectorType(result_type) && + !result_is_coopvec && !_.IsIntVectorType(result_type) && !_.IsFloatScalarType(result_type) && !_.IsFloatVectorType(result_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) @@ -485,17 +533,28 @@ spv_result_t ConversionPass(ValidationState_t& _, const Instruction* inst) { << "or scalar type: " << spvOpcodeString(opcode); if (!input_is_pointer && !input_is_int_scalar && !input_is_coopmat && - !_.IsIntVectorType(input_type) && !_.IsFloatScalarType(input_type) && - !_.IsFloatVectorType(input_type)) + !input_is_coopvec && !_.IsIntVectorType(input_type) && + !_.IsFloatScalarType(input_type) && !_.IsFloatVectorType(input_type)) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Expected input to be a pointer or int or float vector " << "or scalar: " << spvOpcodeString(opcode); + if (result_is_coopvec != input_is_coopvec) + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Cooperative vector can only be cast to another cooperative " + << "vector: " << spvOpcodeString(opcode); + if (result_is_coopmat != input_is_coopmat) return _.diag(SPV_ERROR_INVALID_DATA, inst) << "Cooperative matrix can only be cast to another cooperative " << "matrix: " << spvOpcodeString(opcode); + if (result_is_coopvec) { + spv_result_t ret = + _.CooperativeVectorDimensionsMatch(inst, result_type, input_type); + if (ret != SPV_SUCCESS) return ret; + } + if (result_is_coopmat) { spv_result_t ret = _.CooperativeMatrixShapesMatch(inst, result_type, input_type, false); diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_decorations.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_decorations.cpp index e680bd6..e62eda8 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_decorations.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_decorations.cpp @@ -404,8 +404,7 @@ bool IsAlignedTo(uint32_t offset, uint32_t alignment) { // or row major-ness. spv_result_t checkLayout(uint32_t struct_id, const char* storage_class_str, const char* decoration_str, bool blockRules, - bool scalar_block_layout, - uint32_t incoming_offset, + bool scalar_block_layout, uint32_t incoming_offset, MemberConstraints& constraints, ValidationState_t& vstate) { if (vstate.options()->skip_block_layout) return SPV_SUCCESS; @@ -509,6 +508,15 @@ spv_result_t checkLayout(uint32_t struct_id, const char* storage_class_str, // Check offset. if (offset == 0xffffffff) return fail(memberIdx) << "is missing an Offset decoration"; + + if (opcode == spv::Op::OpTypeRuntimeArray && + ordered_member_idx != member_offsets.size() - 1) { + return vstate.diag(SPV_ERROR_INVALID_ID, vstate.FindDef(struct_id)) + << vstate.VkErrorID(4680) << "Structure id " << struct_id + << " has a runtime array at offset " << offset + << ", but other members at larger offsets"; + } + if (!scalar_block_layout && relaxed_block_layout && opcode == spv::Op::OpTypeVector) { // In relaxed block layout, the vector offset must be aligned to the @@ -767,6 +775,7 @@ spv_result_t CheckDecorationsOfEntryPoints(ValidationState_t& vstate) { int num_workgroup_variables = 0; int num_workgroup_variables_with_block = 0; int num_workgroup_variables_with_aliased = 0; + bool has_task_payload = false; for (const auto& desc : descs) { std::unordered_set seen_vars; std::unordered_set input_var_builtin; @@ -786,6 +795,19 @@ spv_result_t CheckDecorationsOfEntryPoints(ValidationState_t& vstate) { const auto sc_index = 2u; const spv::StorageClass storage_class = var_instr->GetOperandAs(sc_index); + if (vstate.version() >= SPV_SPIRV_VERSION_WORD(1, 4)) { + // SPV_EXT_mesh_shader, at most one task payload is permitted + // per entry point + if (storage_class == spv::StorageClass::TaskPayloadWorkgroupEXT) { + if (has_task_payload) { + return vstate.diag(SPV_ERROR_INVALID_ID, var_instr) + << "There can be at most one OpVariable with storage " + "class TaskPayloadWorkgroupEXT associated with " + "an OpEntryPoint"; + } + has_task_payload = true; + } + } if (vstate.version() >= SPV_SPIRV_VERSION_WORD(1, 4)) { // Starting in 1.4, OpEntryPoint must list all global variables // it statically uses and those interfaces must be unique. @@ -1000,7 +1022,7 @@ spv_result_t CheckDecorationsOfEntryPoints(ValidationState_t& vstate) { } if (num_workgroup_variables_with_block > 1 && num_workgroup_variables_with_block != - num_workgroup_variables_with_aliased) { + num_workgroup_variables_with_aliased) { return vstate.diag(SPV_ERROR_INVALID_BINARY, vstate.FindDef(entry_point)) << "When declaring WorkgroupMemoryExplicitLayoutKHR, " @@ -1223,10 +1245,10 @@ spv_result_t CheckDecorationsOfBuffers(ValidationState_t& vstate) { } // Prepare for messages const char* sc_str = - uniform ? "Uniform" - : (push_constant ? "PushConstant" - : (workgroup ? "Workgroup" - : "StorageBuffer")); + uniform + ? "Uniform" + : (push_constant ? "PushConstant" + : (workgroup ? "Workgroup" : "StorageBuffer")); if (spvIsVulkanEnv(vstate.context()->target_env)) { const bool block = hasDecoration(id, spv::Decoration::Block, vstate); @@ -1450,11 +1472,29 @@ spv_result_t CheckDecorationsOfBuffers(ValidationState_t& vstate) { : (sc == spv::StorageClass::Workgroup ? "Workgroup" : "StorageBuffer")); - const auto data_type = vstate.FindDef(data_type_id); + auto data_type = vstate.FindDef(data_type_id); scalar_block_layout = sc == spv::StorageClass::Workgroup ? vstate.options()->workgroup_scalar_block_layout : vstate.options()->scalar_block_layout; + + // If the data type is an array that contains a Block- or + // BufferBlock-decorated struct, then use the struct for layout checks + // instead of the array. In this case, the array represents a descriptor + // array which should not have an explicit layout. + if (data_type->opcode() == spv::Op::OpTypeArray || + data_type->opcode() == spv::Op::OpTypeRuntimeArray) { + const auto ele_type = + vstate.FindDef(data_type->GetOperandAs(1u)); + if (ele_type->opcode() == spv::Op::OpTypeStruct && + (vstate.HasDecoration(ele_type->id(), spv::Decoration::Block) || + vstate.HasDecoration(ele_type->id(), + spv::Decoration::BufferBlock))) { + data_type = ele_type; + data_type_id = ele_type->id(); + } + } + // Assume uniform storage class uses block rules unless we see a // BufferBlock decorated struct in the data type. bool bufferRules = sc == spv::StorageClass::Uniform ? false : true; @@ -1500,7 +1540,8 @@ spv_result_t CheckDecorationsCompatibility(ValidationState_t& vstate) { // to the same id. static const spv::Decoration mutually_exclusive_per_id[][2] = { {spv::Decoration::Block, spv::Decoration::BufferBlock}, - {spv::Decoration::Restrict, spv::Decoration::Aliased}}; + {spv::Decoration::Restrict, spv::Decoration::Aliased}, + {spv::Decoration::RestrictPointer, spv::Decoration::AliasedPointer}}; static const auto num_mutually_exclusive_per_id_pairs = sizeof(mutually_exclusive_per_id) / (2 * sizeof(spv::Decoration)); @@ -1723,6 +1764,7 @@ spv_result_t CheckNonWritableDecoration(ValidationState_t& vstate, var_storage_class == spv::StorageClass::Private) && vstate.features().nonwritable_var_in_function_or_private) { // New permitted feature in SPIR-V 1.4. + } else if (var_storage_class == spv::StorageClass::TileAttachmentQCOM) { } else if ( // It may point to a UBO, SSBO, storage image, or raw access chain. vstate.IsPointerToUniformBlock(type_id) || @@ -1883,7 +1925,7 @@ spv_result_t CheckComponentDecoration(ValidationState_t& vstate, if (!vstate.IsIntScalarOrVectorType(type_id) && !vstate.IsFloatScalarOrVectorType(type_id)) { return vstate.diag(SPV_ERROR_INVALID_ID, &inst) - << vstate.VkErrorID(4924) + << vstate.VkErrorID(10583) << "Component decoration specified for type " << vstate.getIdName(type_id) << " that is not a scalar or vector"; } @@ -1988,7 +2030,8 @@ spv_result_t CheckRelaxPrecisionDecoration(ValidationState_t& vstate, { \ spv_result_t e##LINE = (X); \ if (e##LINE != SPV_SUCCESS) return e##LINE; \ - } static_assert(true, "require extra semicolon") + } \ + static_assert(true, "require extra semicolon") #define PASS_OR_BAIL(X) PASS_OR_BAIL_AT_LINE(X, __LINE__) // Check rules for decorations where we start from the decoration rather @@ -2050,6 +2093,205 @@ spv_result_t CheckDecorationsFromDecoration(ValidationState_t& vstate) { return SPV_SUCCESS; } +bool AllowsLayout(ValidationState_t& vstate, const spv::StorageClass sc) { + switch (sc) { + case spv::StorageClass::StorageBuffer: + case spv::StorageClass::Uniform: + case spv::StorageClass::PhysicalStorageBuffer: + case spv::StorageClass::PushConstant: + // Always explicitly laid out. + return true; + case spv::StorageClass::UniformConstant: + return false; + case spv::StorageClass::Workgroup: + return vstate.HasCapability( + spv::Capability::WorkgroupMemoryExplicitLayoutKHR); + case spv::StorageClass::Function: + case spv::StorageClass::Private: + return vstate.version() <= SPV_SPIRV_VERSION_WORD(1, 4); + case spv::StorageClass::Input: + case spv::StorageClass::Output: + // Block is used generally and mesh shaders use Offset. + return true; + default: + // TODO: Some storage classes in ray tracing use explicit layout + // decorations, but it is not well documented which. For now treat other + // storage classes as allowed to be laid out. See Vulkan internal issue + // 4192. + return true; + } +} + +bool UsesExplicitLayout(ValidationState_t& vstate, uint32_t type_id, + std::unordered_map& cache) { + if (type_id == 0) { + return false; + } + + if (cache.count(type_id)) { + return cache[type_id]; + } + + bool res = false; + const auto type_inst = vstate.FindDef(type_id); + if (type_inst->opcode() == spv::Op::OpTypeStruct || + type_inst->opcode() == spv::Op::OpTypeArray || + type_inst->opcode() == spv::Op::OpTypeRuntimeArray || + type_inst->opcode() == spv::Op::OpTypePointer || + type_inst->opcode() == spv::Op::OpTypeUntypedPointerKHR) { + const auto& id_decs = vstate.id_decorations(); + const auto iter = id_decs.find(type_id); + if (iter != id_decs.end()) { + bool allowLayoutDecorations = false; + if (type_inst->opcode() == spv::Op::OpTypePointer) { + const auto sc = type_inst->GetOperandAs(1); + allowLayoutDecorations = AllowsLayout(vstate, sc); + } + if (!allowLayoutDecorations) { + res = std::any_of( + iter->second.begin(), iter->second.end(), [](const Decoration& d) { + return d.dec_type() == spv::Decoration::Block || + d.dec_type() == spv::Decoration::BufferBlock || + d.dec_type() == spv::Decoration::Offset || + d.dec_type() == spv::Decoration::ArrayStride || + d.dec_type() == spv::Decoration::MatrixStride; + }); + } + } + + if (!res) { + switch (type_inst->opcode()) { + case spv::Op::OpTypeStruct: + for (uint32_t i = 1; !res && i < type_inst->operands().size(); i++) { + res = UsesExplicitLayout( + vstate, type_inst->GetOperandAs(i), cache); + } + break; + case spv::Op::OpTypeArray: + case spv::Op::OpTypeRuntimeArray: + res = UsesExplicitLayout(vstate, type_inst->GetOperandAs(1), + cache); + break; + case spv::Op::OpTypePointer: { + const auto sc = type_inst->GetOperandAs(1); + if (!AllowsLayout(vstate, sc)) { + res = UsesExplicitLayout( + vstate, type_inst->GetOperandAs(2), cache); + } + } + default: + break; + } + } + } + + cache[type_id] = res; + return res; +} + +spv_result_t CheckInvalidVulkanExplicitLayout(ValidationState_t& vstate) { + if (!spvIsVulkanEnv(vstate.context()->target_env)) { + return SPV_SUCCESS; + } + + std::unordered_map cache; + for (const auto& inst : vstate.ordered_instructions()) { + const auto type_id = inst.type_id(); + const auto type_inst = vstate.FindDef(type_id); + uint32_t fail_id = 0; + // Variables are the main place to check for improper decorations, but some + // untyped pointer instructions must also be checked since those types may + // never be instantiated by a variable. Unlike verifying a valid layout, + // physical storage buffer does not need checked here since it is always + // explicitly laid out. + switch (inst.opcode()) { + case spv::Op::OpVariable: + case spv::Op::OpUntypedVariableKHR: { + const auto sc = inst.GetOperandAs(2); + auto check_id = type_id; + if (inst.opcode() == spv::Op::OpUntypedVariableKHR) { + if (inst.operands().size() > 3) { + check_id = inst.GetOperandAs(3); + } + } + if (!AllowsLayout(vstate, sc) && + UsesExplicitLayout(vstate, check_id, cache)) { + fail_id = check_id; + } + break; + } + case spv::Op::OpUntypedAccessChainKHR: + case spv::Op::OpUntypedInBoundsAccessChainKHR: + case spv::Op::OpUntypedPtrAccessChainKHR: + case spv::Op::OpUntypedInBoundsPtrAccessChainKHR: { + // Check both the base type and return type. The return type may have an + // invalid array stride. + const auto sc = type_inst->GetOperandAs(1); + const auto base_type_id = inst.GetOperandAs(2); + if (!AllowsLayout(vstate, sc)) { + if (UsesExplicitLayout(vstate, base_type_id, cache)) { + fail_id = base_type_id; + } else if (UsesExplicitLayout(vstate, type_id, cache)) { + fail_id = type_id; + } + } + break; + } + case spv::Op::OpUntypedArrayLengthKHR: { + // Check the data type. + const auto ptr_ty_id = + vstate.FindDef(inst.GetOperandAs(3))->type_id(); + const auto ptr_ty = vstate.FindDef(ptr_ty_id); + const auto sc = ptr_ty->GetOperandAs(1); + const auto base_type_id = inst.GetOperandAs(2); + if (!AllowsLayout(vstate, sc) && + UsesExplicitLayout(vstate, base_type_id, cache)) { + fail_id = base_type_id; + } + break; + } + case spv::Op::OpLoad: { + const auto ptr_id = inst.GetOperandAs(2); + const auto ptr_type = vstate.FindDef(vstate.FindDef(ptr_id)->type_id()); + if (ptr_type->opcode() == spv::Op::OpTypeUntypedPointerKHR) { + // For untyped pointers check the return type for an invalid layout. + const auto sc = ptr_type->GetOperandAs(1); + if (!AllowsLayout(vstate, sc) && + UsesExplicitLayout(vstate, type_id, cache)) { + fail_id = type_id; + } + } + break; + } + case spv::Op::OpStore: { + const auto ptr_id = inst.GetOperandAs(1); + const auto ptr_type = vstate.FindDef(vstate.FindDef(ptr_id)->type_id()); + if (ptr_type->opcode() == spv::Op::OpTypeUntypedPointerKHR) { + // For untyped pointers, check the type of the data operand for an + // invalid layout. + const auto sc = ptr_type->GetOperandAs(1); + const auto data_type_id = vstate.GetOperandTypeId(&inst, 1); + if (!AllowsLayout(vstate, sc) && + UsesExplicitLayout(vstate, data_type_id, cache)) { + fail_id = inst.GetOperandAs(2); + } + } + break; + } + default: + break; + } + if (fail_id != 0) { + return vstate.diag(SPV_ERROR_INVALID_ID, &inst) + << vstate.VkErrorID(10684) + << "Invalid explicit layout decorations on type for operand " + << vstate.getIdName(fail_id); + } + } + + return SPV_SUCCESS; +} + } // namespace spv_result_t ValidateDecorations(ValidationState_t& vstate) { @@ -2061,6 +2303,7 @@ spv_result_t ValidateDecorations(ValidationState_t& vstate) { if (auto error = CheckVulkanMemoryModelDeprecatedDecorations(vstate)) return error; if (auto error = CheckDecorationsFromDecoration(vstate)) return error; + if (auto error = CheckInvalidVulkanExplicitLayout(vstate)) return error; return SPV_SUCCESS; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_extensions.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_extensions.cpp index c2d8d59..58aaf52 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_extensions.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_extensions.cpp @@ -21,11 +21,11 @@ #include "NonSemanticShaderDebugInfo100.h" #include "OpenCLDebugInfo100.h" #include "source/common_debug_info.h" -#include "source/enum_string_mapping.h" #include "source/extensions.h" #include "source/latest_version_glsl_std_450_header.h" #include "source/latest_version_opencl_std_header.h" #include "source/spirv_constant.h" +#include "source/table2.h" #include "source/val/instruction.h" #include "source/val/validate.h" #include "source/val/validation_state.h" @@ -35,16 +35,15 @@ namespace spvtools { namespace val { namespace { -std::string ReflectionInstructionName(ValidationState_t& _, - const Instruction* inst) { - spv_ext_inst_desc desc = nullptr; - if (_.grammar().lookupExtInst(SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION, - inst->word(4), &desc) != SPV_SUCCESS || +std::string ReflectionInstructionName(const Instruction* inst) { + const ExtInstDesc* desc = nullptr; + if (LookupExtInst(SPV_EXT_INST_TYPE_NONSEMANTIC_CLSPVREFLECTION, + inst->word(4), &desc) != SPV_SUCCESS || !desc) { return std::string("Unknown ExtInst"); } std::ostringstream ss; - ss << desc->name; + ss << desc->name().data(); return ss.str(); } @@ -93,17 +92,17 @@ spv_result_t ValidateOperandForDebugInfo( const std::function& ext_inst_name) { auto* operand = _.FindDef(inst->word(word_index)); if (operand->opcode() != expected_opcode) { - spv_opcode_desc desc = nullptr; - if (_.grammar().lookupOpcode(expected_opcode, &desc) != SPV_SUCCESS || + const spvtools::InstructionDesc* desc = nullptr; + if (spvtools::LookupOpcodeForEnv(_.context()->target_env, expected_opcode, + &desc) != SPV_SUCCESS || !desc) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << ext_inst_name() << ": " << "expected operand " << operand_name << " is invalid"; } return _.diag(SPV_ERROR_INVALID_DATA, inst) - << ext_inst_name() << ": " - << "expected operand " << operand_name << " must be a result id of " - << "Op" << desc->name; + << ext_inst_name() << ": " << "expected operand " << operand_name + << " must be a result id of " << "Op" << desc->name().data(); } return SPV_SUCCESS; } @@ -189,18 +188,17 @@ spv_result_t ValidateDebugInfoOperand( if (DoesDebugInfoOperandMatchExpectation(_, expectation, inst, word_index)) return SPV_SUCCESS; - spv_ext_inst_desc desc = nullptr; - if (_.grammar().lookupExtInst(inst->ext_inst_type(), expected_debug_inst, - &desc) != SPV_SUCCESS || + const ExtInstDesc* desc = nullptr; + if (LookupExtInst(inst->ext_inst_type(), expected_debug_inst, &desc) != + SPV_SUCCESS || !desc) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << ext_inst_name() << ": " << "expected operand " << debug_inst_name << " is invalid"; } return _.diag(SPV_ERROR_INVALID_DATA, inst) - << ext_inst_name() << ": " - << "expected operand " << debug_inst_name << " must be a result id of " - << desc->name; + << ext_inst_name() << ": " << "expected operand " << debug_inst_name + << " must be a result id of " << desc->name().data(); } #define CHECK_DEBUG_OPERAND(NAME, debug_opcode, index) \ @@ -285,7 +283,7 @@ spv_result_t ValidateOperandDebugType( spv_result_t ValidateClspvReflectionKernel(ValidationState_t& _, const Instruction* inst, uint32_t version) { - const auto inst_name = ReflectionInstructionName(_, inst); + const auto inst_name = ReflectionInstructionName(inst); const auto kernel_id = inst->GetOperandAs(4); const auto kernel = _.FindDef(kernel_id); if (kernel->opcode() != spv::Op::OpFunction) { @@ -930,7 +928,7 @@ spv_result_t ValidateClspvReflectionInstruction(ValidationState_t& _, } if (version < required_version) { return _.diag(SPV_ERROR_INVALID_ID, inst) - << ReflectionInstructionName(_, inst) << " requires version " + << ReflectionInstructionName(inst) << " requires version " << required_version << ", but parsed version is " << version; } @@ -1052,12 +1050,21 @@ bool IsDebugVariableWithIntScalarType(ValidationState_t& _, } // anonymous namespace spv_result_t ValidateExtension(ValidationState_t& _, const Instruction* inst) { + std::string extension = GetExtensionString(&(inst->c_inst())); + if (_.version() < SPV_SPIRV_VERSION_WORD(1, 3)) { + if (extension == ExtensionToString(kSPV_KHR_vulkan_memory_model)) { + return _.diag(SPV_ERROR_WRONG_VERSION, inst) + << extension << " extension requires SPIR-V version 1.3 or later."; + } + } if (_.version() < SPV_SPIRV_VERSION_WORD(1, 4)) { - std::string extension = GetExtensionString(&(inst->c_inst())); if (extension == ExtensionToString(kSPV_KHR_workgroup_memory_explicit_layout) || extension == ExtensionToString(kSPV_EXT_mesh_shader) || - extension == ExtensionToString(kSPV_NV_shader_invocation_reorder)) { + extension == ExtensionToString(kSPV_NV_shader_invocation_reorder) || + extension == + ExtensionToString(kSPV_NV_cluster_acceleration_structure) || + extension == ExtensionToString(kSPV_NV_linear_swept_spheres)) { return _.diag(SPV_ERROR_WRONG_VERSION, inst) << extension << " extension requires SPIR-V version 1.4 or later."; } @@ -1092,9 +1099,8 @@ spv_result_t ValidateExtInst(ValidationState_t& _, const Instruction* inst) { spv_ext_inst_type_t(inst->ext_inst_type()); auto ext_inst_name = [&_, ext_inst_set, ext_inst_type, ext_inst_index]() { - spv_ext_inst_desc desc = nullptr; - if (_.grammar().lookupExtInst(ext_inst_type, ext_inst_index, &desc) != - SPV_SUCCESS || + const ExtInstDesc* desc = nullptr; + if (LookupExtInst(ext_inst_type, ext_inst_index, &desc) != SPV_SUCCESS || !desc) { return std::string("Unknown ExtInst"); } @@ -1105,7 +1111,7 @@ spv_result_t ValidateExtInst(ValidationState_t& _, const Instruction* inst) { std::ostringstream ss; ss << import_inst->GetOperandAs(1); ss << " "; - ss << desc->name; + ss << desc->name().data(); return ss.str(); }; @@ -1136,7 +1142,16 @@ spv_result_t ValidateExtInst(ValidationState_t& _, const Instruction* inst) { case GLSLstd450NMin: case GLSLstd450NMax: case GLSLstd450NClamp: { - if (!_.IsFloatScalarOrVectorType(result_type)) { + bool supportsCoopVec = + (ext_inst_key == GLSLstd450FMin || ext_inst_key == GLSLstd450FMax || + ext_inst_key == GLSLstd450FClamp || + ext_inst_key == GLSLstd450NMin || ext_inst_key == GLSLstd450NMax || + ext_inst_key == GLSLstd450NClamp || + ext_inst_key == GLSLstd450Step || ext_inst_key == GLSLstd450Fma); + + if (!_.IsFloatScalarOrVectorType(result_type) && + !(supportsCoopVec && + _.IsFloatCooperativeVectorNVType(result_type))) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << ext_inst_name() << ": " << "expected Result Type to be a float scalar or vector type"; @@ -1166,7 +1181,14 @@ spv_result_t ValidateExtInst(ValidationState_t& _, const Instruction* inst) { case GLSLstd450FindILsb: case GLSLstd450FindUMsb: case GLSLstd450FindSMsb: { - if (!_.IsIntScalarOrVectorType(result_type)) { + bool supportsCoopVec = + (ext_inst_key == GLSLstd450UMin || ext_inst_key == GLSLstd450UMax || + ext_inst_key == GLSLstd450UClamp || + ext_inst_key == GLSLstd450SMin || ext_inst_key == GLSLstd450SMax || + ext_inst_key == GLSLstd450SClamp); + + if (!_.IsIntScalarOrVectorType(result_type) && + !(supportsCoopVec && _.IsIntCooperativeVectorNVType(result_type))) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << ext_inst_name() << ": " << "expected Result Type to be an int scalar or vector type"; @@ -1178,7 +1200,10 @@ spv_result_t ValidateExtInst(ValidationState_t& _, const Instruction* inst) { for (uint32_t operand_index = 4; operand_index < num_operands; ++operand_index) { const uint32_t operand_type = _.GetOperandTypeId(inst, operand_index); - if (!operand_type || !_.IsIntScalarOrVectorType(operand_type)) { + if (!operand_type || + (!_.IsIntScalarOrVectorType(operand_type) && + !(supportsCoopVec && + _.IsIntCooperativeVectorNVType(operand_type)))) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << ext_inst_name() << ": " << "expected all operands to be int scalars or vectors"; @@ -1231,7 +1256,13 @@ spv_result_t ValidateExtInst(ValidationState_t& _, const Instruction* inst) { case GLSLstd450Log2: case GLSLstd450Atan2: case GLSLstd450Pow: { - if (!_.IsFloatScalarOrVectorType(result_type)) { + bool supportsCoopVec = + (ext_inst_key == GLSLstd450Atan || ext_inst_key == GLSLstd450Tanh || + ext_inst_key == GLSLstd450Exp || ext_inst_key == GLSLstd450Log); + + if (!_.IsFloatScalarOrVectorType(result_type) && + !(supportsCoopVec && + _.IsFloatCooperativeVectorNVType(result_type))) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << ext_inst_name() << ": " << "expected Result Type to be a 16 or 32-bit scalar or " diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_function.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_function.cpp index 624b4e2..b08c5b4 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_function.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_function.cpp @@ -14,8 +14,8 @@ #include -#include "source/enum_string_mapping.h" #include "source/opcode.h" +#include "source/table2.h" #include "source/val/instruction.h" #include "source/val/validate.h" #include "source/val/validation_state.h" @@ -152,80 +152,6 @@ spv_result_t ValidateFunctionParameter(ValidationState_t& _, "type of the same index."; } - // Validate that PhysicalStorageBuffer have one of Restrict, Aliased, - // RestrictPointer, or AliasedPointer. - auto param_nonarray_type_id = param_type->id(); - while (_.GetIdOpcode(param_nonarray_type_id) == spv::Op::OpTypeArray) { - param_nonarray_type_id = - _.FindDef(param_nonarray_type_id)->GetOperandAs(1u); - } - if (_.GetIdOpcode(param_nonarray_type_id) == spv::Op::OpTypePointer || - _.GetIdOpcode(param_nonarray_type_id) == - spv::Op::OpTypeUntypedPointerKHR) { - auto param_nonarray_type = _.FindDef(param_nonarray_type_id); - if (param_nonarray_type->GetOperandAs(1u) == - spv::StorageClass::PhysicalStorageBuffer) { - // check for Aliased or Restrict - const auto& decorations = _.id_decorations(inst->id()); - - bool foundAliased = std::any_of( - decorations.begin(), decorations.end(), [](const Decoration& d) { - return spv::Decoration::Aliased == d.dec_type(); - }); - - bool foundRestrict = std::any_of( - decorations.begin(), decorations.end(), [](const Decoration& d) { - return spv::Decoration::Restrict == d.dec_type(); - }); - - if (!foundAliased && !foundRestrict) { - return _.diag(SPV_ERROR_INVALID_ID, inst) - << "OpFunctionParameter " << inst->id() - << ": expected Aliased or Restrict for PhysicalStorageBuffer " - "pointer."; - } - if (foundAliased && foundRestrict) { - return _.diag(SPV_ERROR_INVALID_ID, inst) - << "OpFunctionParameter " << inst->id() - << ": can't specify both Aliased and Restrict for " - "PhysicalStorageBuffer pointer."; - } - } else if (param_nonarray_type->opcode() == spv::Op::OpTypePointer) { - const auto pointee_type_id = - param_nonarray_type->GetOperandAs(2); - const auto pointee_type = _.FindDef(pointee_type_id); - if (spv::Op::OpTypePointer == pointee_type->opcode() && - pointee_type->GetOperandAs(1u) == - spv::StorageClass::PhysicalStorageBuffer) { - // check for AliasedPointer/RestrictPointer - const auto& decorations = _.id_decorations(inst->id()); - - bool foundAliased = std::any_of( - decorations.begin(), decorations.end(), [](const Decoration& d) { - return spv::Decoration::AliasedPointer == d.dec_type(); - }); - - bool foundRestrict = std::any_of( - decorations.begin(), decorations.end(), [](const Decoration& d) { - return spv::Decoration::RestrictPointer == d.dec_type(); - }); - - if (!foundAliased && !foundRestrict) { - return _.diag(SPV_ERROR_INVALID_ID, inst) - << "OpFunctionParameter " << inst->id() - << ": expected AliasedPointer or RestrictPointer for " - "PhysicalStorageBuffer pointer."; - } - if (foundAliased && foundRestrict) { - return _.diag(SPV_ERROR_INVALID_ID, inst) - << "OpFunctionParameter " << inst->id() - << ": can't specify both AliasedPointer and " - "RestrictPointer for PhysicalStorageBuffer pointer."; - } - } - } - } - return SPV_SUCCESS; } @@ -332,7 +258,8 @@ spv_result_t ValidateFunctionCall(ValidationState_t& _, _.HasCapability(spv::Capability::VariablePointers) && sc == spv::StorageClass::Workgroup; const bool uc_ptr = sc == spv::StorageClass::UniformConstant; - if (!ssbo_vptr && !wg_vptr && !uc_ptr) { + if (!_.options()->before_hlsl_legalization && !ssbo_vptr && + !wg_vptr && !uc_ptr) { return _.diag(SPV_ERROR_INVALID_ID, inst) << "Pointer operand " << _.getIdName(argument_id) << " must be a memory object declaration"; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_image.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_image.cpp index cb987d8..a5f91f7 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_image.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_image.cpp @@ -455,13 +455,14 @@ spv_result_t ValidateImageOperands(ValidationState_t& _, } if (!_.options()->before_hlsl_legalization && - spvIsVulkanEnv(_.context()->target_env)) { + spvIsVulkanEnv(_.context()->target_env) && + !_.options()->allow_offset_texture_operand) { if (opcode != spv::Op::OpImageGather && opcode != spv::Op::OpImageDrefGather && opcode != spv::Op::OpImageSparseGather && opcode != spv::Op::OpImageSparseDrefGather) { return _.diag(SPV_ERROR_INVALID_DATA, inst) - << _.VkErrorID(4663) + << _.VkErrorID(10213) << "Image Operand Offset can only be used with " "OpImage*Gather operations"; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_instruction.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_instruction.cpp index 39b1c02..655408d 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_instruction.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_instruction.cpp @@ -20,13 +20,13 @@ #include #include "source/enum_set.h" -#include "source/enum_string_mapping.h" #include "source/extensions.h" #include "source/opcode.h" #include "source/operand.h" #include "source/spirv_constant.h" #include "source/spirv_target_env.h" #include "source/spirv_validator_options.h" +#include "source/table2.h" #include "source/util/string_utils.h" #include "source/val/validate.h" #include "source/val/validation_state.h" @@ -35,14 +35,13 @@ namespace spvtools { namespace val { namespace { -std::string ToString(const CapabilitySet& capabilities, - const AssemblyGrammar& grammar) { +std::string ToString(const CapabilitySet& capabilities) { std::stringstream ss; for (auto capability : capabilities) { - spv_operand_desc desc; - if (SPV_SUCCESS == grammar.lookupOperand(SPV_OPERAND_TYPE_CAPABILITY, - uint32_t(capability), &desc)) - ss << desc->name << " "; + const spvtools::OperandDesc* desc = nullptr; + if (SPV_SUCCESS == spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY, + uint32_t(capability), &desc)) + ss << desc->name().data() << " "; else ss << uint32_t(capability) << " "; } @@ -72,10 +71,11 @@ CapabilitySet EnablingCapabilitiesForOp(const ValidationState_t& state, break; } // Look it up in the grammar - spv_opcode_desc opcode_desc = {}; - if (SPV_SUCCESS == state.grammar().lookupOpcode(opcode, &opcode_desc)) { + const spvtools::InstructionDesc* opcode_desc = nullptr; + if (SPV_SUCCESS == + LookupOpcodeForEnv(state.context()->target_env, opcode, &opcode_desc)) { return state.grammar().filterCapsAgainstTargetEnv( - opcode_desc->capabilities, opcode_desc->numCapabilities); + opcode_desc->capabilities()); } return CapabilitySet(); } @@ -86,7 +86,7 @@ CapabilitySet EnablingCapabilitiesForOp(const ValidationState_t& state, // return an error code. spv_result_t OperandVersionExtensionCheck( ValidationState_t& _, const Instruction* inst, size_t which_operand, - const spv_operand_desc_t& operand_desc, uint32_t word) { + const spvtools::OperandDesc& operand_desc, uint32_t word) { const uint32_t module_version = _.version(); const uint32_t operand_min_version = operand_desc.minVersion; const uint32_t operand_last_version = operand_desc.lastVersion; @@ -103,27 +103,29 @@ spv_result_t OperandVersionExtensionCheck( return _.diag(SPV_ERROR_WRONG_VERSION, inst) << spvtools::utils::CardinalToOrdinal(which_operand) << " operand of " << spvOpcodeString(inst->opcode()) << ": operand " - << operand_desc.name << "(" << word << ") requires SPIR-V version " + << operand_desc.name().data() << "(" << word + << ") requires SPIR-V version " << SPV_SPIRV_VERSION_MAJOR_PART(operand_last_version) << "." << SPV_SPIRV_VERSION_MINOR_PART(operand_last_version) << " or earlier"; } - if (!reserved && operand_desc.numExtensions == 0) { + if (!reserved && operand_desc.extensions_range.empty()) { return _.diag(SPV_ERROR_WRONG_VERSION, inst) << spvtools::utils::CardinalToOrdinal(which_operand) << " operand of " << spvOpcodeString(inst->opcode()) << ": operand " - << operand_desc.name << "(" << word << ") requires SPIR-V version " + << operand_desc.name().data() << "(" << word + << ") requires SPIR-V version " << SPV_SPIRV_VERSION_MAJOR_PART(operand_min_version) << "." << SPV_SPIRV_VERSION_MINOR_PART(operand_min_version) << " or later"; } else { - ExtensionSet required_extensions(operand_desc.numExtensions, - operand_desc.extensions); + ExtensionSet required_extensions(operand_desc.extensions_range.count(), + operand_desc.extensions().data()); if (!_.HasAnyOfExtensions(required_extensions)) { return _.diag(SPV_ERROR_MISSING_EXTENSION, inst) << spvtools::utils::CardinalToOrdinal(which_operand) << " operand of " << spvOpcodeString(inst->opcode()) - << ": operand " << operand_desc.name << "(" << word + << ": operand " << operand_desc.name().data() << "(" << word << ") requires one of these extensions: " << ExtensionSetToString(required_extensions); } @@ -166,9 +168,9 @@ spv_result_t CheckRequiredCapabilities(ValidationState_t& state, } CapabilitySet enabling_capabilities; - spv_operand_desc operand_desc = nullptr; + const spvtools::OperandDesc* operand_desc = nullptr; const auto lookup_result = - state.grammar().lookupOperand(operand.type, word, &operand_desc); + spvtools::LookupOperand(operand.type, word, &operand_desc); if (lookup_result == SPV_SUCCESS) { // Allow FPRoundingMode decoration if requested. if (operand.type == SPV_OPERAND_TYPE_DECORATION && @@ -186,7 +188,7 @@ spv_result_t CheckRequiredCapabilities(ValidationState_t& state, } } else { enabling_capabilities = state.grammar().filterCapsAgainstTargetEnv( - operand_desc->capabilities, operand_desc->numCapabilities); + operand_desc->capabilities()); } // When encountering an OpCapability instruction, the instruction pass @@ -201,7 +203,7 @@ spv_result_t CheckRequiredCapabilities(ValidationState_t& state, << "Operand " << which_operand << " of " << spvOpcodeString(inst->opcode()) << " requires one of these capabilities: " - << ToString(enabling_capabilities, state.grammar()); + << ToString(enabling_capabilities); } } return OperandVersionExtensionCheck(state, inst, which_operand, @@ -222,10 +224,10 @@ spv_result_t ReservedCheck(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpImageSparseSampleProjExplicitLod: case spv::Op::OpImageSparseSampleProjDrefImplicitLod: case spv::Op::OpImageSparseSampleProjDrefExplicitLod: { - spv_opcode_desc inst_desc; - _.grammar().lookupOpcode(opcode, &inst_desc); + const spvtools::InstructionDesc* inst_desc = nullptr; + spvtools::LookupOpcode(opcode, &inst_desc); return _.diag(SPV_ERROR_INVALID_BINARY, inst) - << "Invalid Opcode name 'Op" << inst_desc->name << "'"; + << "Invalid Opcode name 'Op" << inst_desc->name().data() << "'"; } default: break; @@ -242,8 +244,7 @@ spv_result_t CapabilityCheck(ValidationState_t& _, const Instruction* inst) { if (!_.HasAnyOfCapabilities(opcode_caps)) { return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst) << "Opcode " << spvOpcodeString(opcode) - << " requires one of these capabilities: " - << ToString(opcode_caps, _.grammar()); + << " requires one of these capabilities: " << ToString(opcode_caps); } for (size_t i = 0; i < inst->operands().size(); ++i) { const auto& operand = inst->operand(i); @@ -276,8 +277,8 @@ spv_result_t CapabilityCheck(ValidationState_t& _, const Instruction* inst) { // dependencies for the opcode. spv_result_t VersionCheck(ValidationState_t& _, const Instruction* inst) { const auto opcode = inst->opcode(); - spv_opcode_desc inst_desc; - const spv_result_t r = _.grammar().lookupOpcode(opcode, &inst_desc); + const spvtools::InstructionDesc* inst_desc = nullptr; + const spv_result_t r = spvtools::LookupOpcode(opcode, &inst_desc); assert(r == SPV_SUCCESS); (void)r; @@ -297,13 +298,14 @@ spv_result_t VersionCheck(ValidationState_t& _, const Instruction* inst) { const bool capability_check_is_sufficient = inst->opcode() != spv::Op::OpTerminateInvocation; - if (capability_check_is_sufficient && (inst_desc->numCapabilities > 0u)) { + if (capability_check_is_sufficient && !inst_desc->capabilities().empty()) { // We already checked that the direct capability dependency has been // satisfied. We don't need to check any further. return SPV_SUCCESS; } - ExtensionSet exts(inst_desc->numExtensions, inst_desc->extensions); + ExtensionSet exts(inst_desc->extensions().begin(), + inst_desc->extensions().end()); if (exts.empty()) { // If no extensions can enable this instruction, then emit error // messages only concerning core SPIR-V versions if errors happen. @@ -481,6 +483,10 @@ spv_result_t InstructionPass(ValidationState_t& _, const Instruction* inst) { spv::ExecutionMode::LocalSizeId) { _.RegisterEntryPointLocalSize(entry_point, inst); } + if (inst->GetOperandAs(1) == + spv::ExecutionMode::OutputPrimitivesEXT) { + _.RegisterEntryPointOutputPrimitivesEXT(entry_point, inst); + } } else if (opcode == spv::Op::OpVariable) { const auto storage_class = inst->GetOperandAs(2); if (auto error = LimitCheckNumVars(_, inst->id(), storage_class)) { diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_interfaces.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_interfaces.cpp index 8b96dc8..fcb5e32 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_interfaces.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_interfaces.cpp @@ -48,6 +48,29 @@ bool is_interface_variable(const Instruction* inst, bool is_spv_1_4) { } } +// Special validation for varibles that are between shader stages +spv_result_t ValidateInputOutputInterfaceVariables(ValidationState_t& _, + const Instruction* var) { + auto var_pointer = _.FindDef(var->GetOperandAs(0)); + uint32_t pointer_id = var_pointer->GetOperandAs(2); + + const auto isPhysicalStorageBuffer = [](const Instruction* insn) { + return insn->opcode() == spv::Op::OpTypePointer && + insn->GetOperandAs(1) == + spv::StorageClass::PhysicalStorageBuffer; + }; + + if (_.ContainsType(pointer_id, isPhysicalStorageBuffer)) { + return _.diag(SPV_ERROR_INVALID_ID, var) + << _.VkErrorID(9557) << "Input/Output interface variable id <" + << var->id() + << "> contains a PhysicalStorageBuffer pointer, which is not " + "allowed. If you want to interface shader stages with a " + "PhysicalStorageBuffer, cast to a uint64 or uvec2 instead."; + } + return SPV_SUCCESS; +} + // Checks that \c var is listed as an interface in all the entry points that use // it. spv_result_t check_interface_variable(ValidationState_t& _, @@ -107,6 +130,14 @@ spv_result_t check_interface_variable(ValidationState_t& _, } } + if (spvIsVulkanEnv(_.context()->target_env)) { + if (var->GetOperandAs(2) == spv::StorageClass::Input || + var->GetOperandAs(2) == spv::StorageClass::Output) { + if (auto error = ValidateInputOutputInterfaceVariables(_, var)) + return error; + } + } + return SPV_SUCCESS; } @@ -135,17 +166,20 @@ spv_result_t NumConsumedLocations(ValidationState_t& _, const Instruction* type, } break; case spv::Op::OpTypeMatrix: - // Matrices consume locations equal to the underlying vector type for - // each column. - NumConsumedLocations(_, _.FindDef(type->GetOperandAs(1)), - num_locations); + // Matrices consume locations equivalent to arrays. + if (auto error = NumConsumedLocations( + _, _.FindDef(type->GetOperandAs(1)), num_locations)) { + return error; + } *num_locations *= type->GetOperandAs(2); break; case spv::Op::OpTypeArray: { // Arrays consume locations equal to the underlying type times the number // of elements in the vector. - NumConsumedLocations(_, _.FindDef(type->GetOperandAs(1)), - num_locations); + if (auto error = NumConsumedLocations( + _, _.FindDef(type->GetOperandAs(1)), num_locations)) { + return error; + } bool is_int = false; bool is_const = false; uint32_t value = 0; @@ -215,10 +249,31 @@ uint32_t NumConsumedComponents(ValidationState_t& _, const Instruction* type) { NumConsumedComponents(_, _.FindDef(type->GetOperandAs(1))); num_components *= type->GetOperandAs(2); break; - case spv::Op::OpTypeArray: - // Skip the array. - return NumConsumedComponents(_, - _.FindDef(type->GetOperandAs(1))); + case spv::Op::OpTypeMatrix: + // Matrices consume all components of the location. + // Round up to next multiple of 4. + num_components = + NumConsumedComponents(_, _.FindDef(type->GetOperandAs(1))); + num_components *= type->GetOperandAs(2); + num_components = ((num_components + 3) / 4) * 4; + break; + case spv::Op::OpTypeArray: { + // Arrays consume all components of the location. + // Round up to next multiple of 4. + num_components = + NumConsumedComponents(_, _.FindDef(type->GetOperandAs(1))); + + bool is_int = false; + bool is_const = false; + uint32_t value = 0; + // Attempt to evaluate the number of array elements. + std::tie(is_int, is_const, value) = + _.EvalInt32IfConst(type->GetOperandAs(2)); + if (is_int && is_const) num_components *= value; + + num_components = ((num_components + 3) / 4) * 4; + return num_components; + } case spv::Op::OpTypePointer: if (_.addressing_model() == spv::AddressingModel::PhysicalStorageBuffer64 && @@ -301,9 +356,10 @@ spv_result_t GetLocationsForVariable( } } - // Vulkan 14.1.3: Tessellation control and mesh per-vertex outputs and - // tessellation control, evaluation and geometry per-vertex inputs have a - // layer of arraying that is not included in interface matching. + // Vulkan 15.1.3 (Interface Matching): Tessellation control and mesh + // per-vertex outputs and tessellation control, evaluation and geometry + // per-vertex inputs have a layer of arraying that is not included in + // interface matching. bool is_arrayed = false; switch (entry_point->GetOperandAs(0)) { case spv::ExecutionModel::TessellationControl: @@ -357,51 +413,33 @@ spv_result_t GetLocationsForVariable( const std::string storage_class = is_output ? "output" : "input"; if (has_location) { - auto sub_type = type; - bool is_int = false; - bool is_const = false; - uint32_t array_size = 1; - // If the variable is still arrayed, mark the locations/components per - // index. - if (type->opcode() == spv::Op::OpTypeArray) { - // Determine the array size if possible and get the element type. - std::tie(is_int, is_const, array_size) = - _.EvalInt32IfConst(type->GetOperandAs(2)); - if (!is_int || !is_const) array_size = 1; - auto sub_type_id = type->GetOperandAs(1); - sub_type = _.FindDef(sub_type_id); - } - uint32_t num_locations = 0; - if (auto error = NumConsumedLocations(_, sub_type, &num_locations)) + if (auto error = NumConsumedLocations(_, type, &num_locations)) return error; - uint32_t num_components = NumConsumedComponents(_, sub_type); + uint32_t num_components = NumConsumedComponents(_, type); - for (uint32_t array_idx = 0; array_idx < array_size; ++array_idx) { - uint32_t array_location = location + (num_locations * array_idx); - uint32_t start = array_location * 4; - if (kMaxLocations <= start) { - // Too many locations, give up. - break; - } + uint32_t start = location * 4; + uint32_t end = (location + num_locations) * 4; + if (num_components % 4 != 0) { + start += component; + end = start + num_components; + } - uint32_t end = (array_location + num_locations) * 4; - if (num_components != 0) { - start += component; - end = array_location * 4 + component + num_components; - } + if (kMaxLocations <= start) { + // Too many locations, give up. + return SPV_SUCCESS; + } - auto locs = locations; - if (has_index && index == 1) locs = output_index1_locations; + auto locs = locations; + if (has_index && index == 1) locs = output_index1_locations; - for (uint32_t i = start; i < end; ++i) { - if (!locs->insert(i).second) { - return _.diag(SPV_ERROR_INVALID_DATA, entry_point) - << (is_output ? _.VkErrorID(8722) : _.VkErrorID(8721)) - << "Entry-point has conflicting " << storage_class - << " location assignment at location " << i / 4 - << ", component " << i % 4; - } + for (uint32_t i = start; i < end; ++i) { + if (!locs->insert(i).second) { + return _.diag(SPV_ERROR_INVALID_DATA, entry_point) + << (is_output ? _.VkErrorID(8722) : _.VkErrorID(8721)) + << "Entry-point has conflicting " << storage_class + << " location assignment at location " << i / 4 << ", component " + << i % 4; } } } else { @@ -460,38 +498,19 @@ spv_result_t GetLocationsForVariable( continue; } - if (member->opcode() == spv::Op::OpTypeArray && num_components >= 1 && - num_components < 4) { - // When an array has an element that takes less than a location in - // size, calculate the used locations in a strided manner. - for (uint32_t l = location; l < num_locations + location; ++l) { - for (uint32_t c = component; c < component + num_components; ++c) { - uint32_t check = 4 * l + c; - if (!locations->insert(check).second) { - return _.diag(SPV_ERROR_INVALID_DATA, entry_point) - << (is_output ? _.VkErrorID(8722) : _.VkErrorID(8721)) - << "Entry-point has conflicting " << storage_class - << " location assignment at location " << l - << ", component " << c; - } - } - } - } else { - // TODO: There is a hole here is the member is an array of 3- or - // 4-element vectors of 64-bit types. - uint32_t end = (location + num_locations) * 4; - if (num_components != 0) { - start += component; - end = location * 4 + component + num_components; - } - for (uint32_t l = start; l < end; ++l) { - if (!locations->insert(l).second) { - return _.diag(SPV_ERROR_INVALID_DATA, entry_point) - << (is_output ? _.VkErrorID(8722) : _.VkErrorID(8721)) - << "Entry-point has conflicting " << storage_class - << " location assignment at location " << l / 4 - << ", component " << l % 4; - } + uint32_t end = (location + num_locations) * 4; + if (num_components % 4 != 0) { + start += component; + end = location * 4 + component + num_components; + } + + for (uint32_t l = start; l < end; ++l) { + if (!locations->insert(l).second) { + return _.diag(SPV_ERROR_INVALID_DATA, entry_point) + << (is_output ? _.VkErrorID(8722) : _.VkErrorID(8721)) + << "Entry-point has conflicting " << storage_class + << " location assignment at location " << l / 4 + << ", component " << l % 4; } } } @@ -623,6 +642,47 @@ spv_result_t ValidateStorageClass(ValidationState_t& _, has_callable_data = true; break; } + case spv::StorageClass::Input: + case spv::StorageClass::Output: { + auto result_type = _.FindDef(interface_var->type_id()); + if (_.ContainsType(result_type->GetOperandAs(2), + [](const Instruction* inst) { + if (inst && + inst->opcode() == spv::Op::OpTypeFloat) { + if (inst->words().size() > 3) { + if (inst->GetOperandAs(2) == + spv::FPEncoding::BFloat16KHR) { + return true; + } + } + } + return false; + })) { + return _.diag(SPV_ERROR_INVALID_ID, interface_var) + << _.VkErrorID(10370) << "Bfloat16 OpVariable " + << _.getIdName(interface_var->id()) << " must not be declared " + << "with a Storage Class of Input or Output."; + } + if (_.ContainsType( + result_type->GetOperandAs(2), + [](const Instruction* inst) { + if (inst && inst->opcode() == spv::Op::OpTypeFloat) { + if (inst->words().size() > 3) { + auto encoding = inst->GetOperandAs(2); + if ((encoding == spv::FPEncoding::Float8E4M3EXT) || + (encoding == spv::FPEncoding::Float8E5M2EXT)) { + return true; + } + } + } + return false; + })) { + return _.diag(SPV_ERROR_INVALID_ID, interface_var) + << "FP8 E4M3/E5M2 OpVariable " // TODO VUID + << _.getIdName(interface_var->id()) << " must not be declared " + << "with a Storage Class of Input or Output."; + } + } default: break; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_invalid_type.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_invalid_type.cpp new file mode 100644 index 0000000..bc4827c --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_invalid_type.cpp @@ -0,0 +1,165 @@ +// Copyright (c) 2025 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Performs validation of invalid type instructions. + +#include + +#include "source/opcode.h" +#include "source/val/instruction.h" +#include "source/val/validate.h" +#include "source/val/validation_state.h" + +namespace spvtools { +namespace val { + +// Validates correctness of certain special type instructions. +spv_result_t InvalidTypePass(ValidationState_t& _, const Instruction* inst) { + const spv::Op opcode = inst->opcode(); + + switch (opcode) { + // OpExtInst + case spv::Op::OpExtInst: + // Arithmetic Instructions + case spv::Op::OpFAdd: + case spv::Op::OpFSub: + case spv::Op::OpFMul: + case spv::Op::OpFDiv: + case spv::Op::OpFRem: + case spv::Op::OpFMod: + case spv::Op::OpFNegate: + // Derivative Instructions + case spv::Op::OpDPdx: + case spv::Op::OpDPdy: + case spv::Op::OpFwidth: + case spv::Op::OpDPdxFine: + case spv::Op::OpDPdyFine: + case spv::Op::OpFwidthFine: + case spv::Op::OpDPdxCoarse: + case spv::Op::OpDPdyCoarse: + case spv::Op::OpFwidthCoarse: + // Atomic Instructions + case spv::Op::OpAtomicFAddEXT: + case spv::Op::OpAtomicFMinEXT: + case spv::Op::OpAtomicFMaxEXT: + case spv::Op::OpAtomicLoad: + case spv::Op::OpAtomicExchange: + // Group and Subgroup Instructions + case spv::Op::OpGroupNonUniformRotateKHR: + case spv::Op::OpGroupNonUniformBroadcast: + case spv::Op::OpGroupNonUniformShuffle: + case spv::Op::OpGroupNonUniformShuffleXor: + case spv::Op::OpGroupNonUniformShuffleUp: + case spv::Op::OpGroupNonUniformShuffleDown: + case spv::Op::OpGroupNonUniformQuadBroadcast: + case spv::Op::OpGroupNonUniformQuadSwap: + case spv::Op::OpGroupNonUniformBroadcastFirst: + case spv::Op::OpGroupNonUniformFAdd: + case spv::Op::OpGroupNonUniformFMul: + case spv::Op::OpGroupNonUniformFMin: { + const uint32_t result_type = inst->type_id(); + if (_.IsBfloat16ScalarType(result_type) || + _.IsBfloat16VectorType(result_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) << " doesn't support BFloat16 type."; + } + if (_.IsFP8ScalarOrVectorType(result_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << " doesn't support FP8 E4M3/E5M2 types."; + } + break; + } + + case spv::Op::OpAtomicStore: { + uint32_t data_type = + _.FindDef(inst->GetOperandAs(3))->type_id(); + if (_.IsBfloat16VectorType(data_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) << " doesn't support BFloat16 type."; + } + if (_.IsFP8VectorType(data_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << " doesn't support FP8 E4M3/E5M2 types."; + } + break; + } + // Relational and Logical Instructions + case spv::Op::OpIsNan: + case spv::Op::OpIsInf: + case spv::Op::OpIsFinite: + case spv::Op::OpIsNormal: + case spv::Op::OpSignBitSet: { + const uint32_t operand_type = _.GetOperandTypeId(inst, 2); + if (_.IsBfloat16ScalarType(operand_type) || + _.IsBfloat16VectorType(operand_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) << " doesn't support BFloat16 type."; + } + if (_.IsFP8ScalarOrVectorType(operand_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << " doesn't support FP8 E4M3/E5M2 types."; + } + break; + } + + case spv::Op::OpGroupNonUniformAllEqual: { + const auto value_type = _.GetOperandTypeId(inst, 3); + if (_.IsBfloat16ScalarType(value_type) || + _.IsBfloat16VectorType(value_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) << " doesn't support BFloat16 type."; + } + if (_.IsFP8ScalarOrVectorType(value_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << " doesn't support FP8 E4M3/E5M2 types."; + } + + break; + } + + case spv::Op::OpMatrixTimesMatrix: { + const uint32_t result_type = inst->type_id(); + uint32_t res_num_rows = 0; + uint32_t res_num_cols = 0; + uint32_t res_col_type = 0; + uint32_t res_component_type = 0; + if (_.GetMatrixTypeInfo(result_type, &res_num_rows, &res_num_cols, + &res_col_type, &res_component_type)) { + if (_.IsBfloat16ScalarType(res_component_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << " doesn't support BFloat16 type."; + } + if (_.IsFP8ScalarOrVectorType(res_component_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << spvOpcodeString(opcode) + << " doesn't support FP8 E4M3/E5M2 types."; + } + } + break; + } + + default: + break; + } + + return SPV_SUCCESS; +} + +} // namespace val +} // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_memory.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_memory.cpp index 32f6427..ae7de40 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_memory.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_memory.cpp @@ -1,6 +1,6 @@ // Copyright (c) 2018 Google LLC. -// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights -// reserved. +// Modifications Copyright (C) 2020-2024 Advanced Micro Devices, Inc. All +// rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -196,37 +196,6 @@ bool ContainsInvalidBool(ValidationState_t& _, const Instruction* storage, return false; } -bool ContainsCooperativeMatrix(ValidationState_t& _, - const Instruction* storage) { - const size_t elem_type_index = 1; - uint32_t elem_type_id; - Instruction* elem_type; - - switch (storage->opcode()) { - case spv::Op::OpTypeCooperativeMatrixNV: - case spv::Op::OpTypeCooperativeMatrixKHR: - return true; - case spv::Op::OpTypeArray: - case spv::Op::OpTypeRuntimeArray: - elem_type_id = storage->GetOperandAs(elem_type_index); - elem_type = _.FindDef(elem_type_id); - return ContainsCooperativeMatrix(_, elem_type); - case spv::Op::OpTypeStruct: - for (size_t member_type_index = 1; - member_type_index < storage->operands().size(); - ++member_type_index) { - auto member_type_id = - storage->GetOperandAs(member_type_index); - auto member_type = _.FindDef(member_type_id); - if (ContainsCooperativeMatrix(_, member_type)) return true; - } - break; - default: - break; - } - return false; -} - std::pair GetStorageClass( ValidationState_t& _, const Instruction* inst) { spv::StorageClass dst_sc = spv::StorageClass::Max; @@ -235,6 +204,7 @@ std::pair GetStorageClass( case spv::Op::OpCooperativeMatrixLoadNV: case spv::Op::OpCooperativeMatrixLoadTensorNV: case spv::Op::OpCooperativeMatrixLoadKHR: + case spv::Op::OpCooperativeVectorLoadNV: case spv::Op::OpLoad: { auto load_pointer = _.FindDef(inst->GetOperandAs(2)); auto load_pointer_type = _.FindDef(load_pointer->type_id()); @@ -244,6 +214,7 @@ std::pair GetStorageClass( case spv::Op::OpCooperativeMatrixStoreNV: case spv::Op::OpCooperativeMatrixStoreTensorNV: case spv::Op::OpCooperativeMatrixStoreKHR: + case spv::Op::OpCooperativeVectorStoreNV: case spv::Op::OpStore: { auto store_pointer = _.FindDef(inst->GetOperandAs(0)); auto store_pointer_type = _.FindDef(store_pointer->type_id()); @@ -280,8 +251,9 @@ int MemoryAccessNumWords(uint32_t mask) { // Returns the scope ID operand for MakeAvailable memory access with mask // at the given operand index. // This function is only called for OpLoad, OpStore, OpCopyMemory and -// OpCopyMemorySized, OpCooperativeMatrixLoadNV, and -// OpCooperativeMatrixStoreNV. +// OpCopyMemorySized, OpCooperativeMatrixLoadNV, +// OpCooperativeMatrixStoreNV, OpCooperativeVectorLoadNV, +// OpCooperativeVectorStoreNV. uint32_t GetMakeAvailableScope(const Instruction* inst, uint32_t mask, uint32_t mask_index) { assert(mask & uint32_t(spv::MemoryAccessMask::MakePointerAvailableKHR)); @@ -292,8 +264,9 @@ uint32_t GetMakeAvailableScope(const Instruction* inst, uint32_t mask, } // This function is only called for OpLoad, OpStore, OpCopyMemory, -// OpCopyMemorySized, OpCooperativeMatrixLoadNV, and -// OpCooperativeMatrixStoreNV. +// OpCopyMemorySized, OpCooperativeMatrixLoadNV, +// OpCooperativeMatrixStoreNV, OpCooperativeVectorLoadNV, +// OpCooperativeVectorStoreNV. uint32_t GetMakeVisibleScope(const Instruction* inst, uint32_t mask, uint32_t mask_index) { assert(mask & uint32_t(spv::MemoryAccessMask::MakePointerVisibleKHR)); @@ -333,7 +306,8 @@ spv_result_t CheckMemoryAccess(ValidationState_t& _, const Instruction* inst, if (inst->opcode() == spv::Op::OpLoad || inst->opcode() == spv::Op::OpCooperativeMatrixLoadNV || inst->opcode() == spv::Op::OpCooperativeMatrixLoadTensorNV || - inst->opcode() == spv::Op::OpCooperativeMatrixLoadKHR) { + inst->opcode() == spv::Op::OpCooperativeMatrixLoadKHR || + inst->opcode() == spv::Op::OpCooperativeVectorLoadNV) { return _.diag(SPV_ERROR_INVALID_ID, inst) << "MakePointerAvailableKHR cannot be used with OpLoad."; } @@ -354,7 +328,8 @@ spv_result_t CheckMemoryAccess(ValidationState_t& _, const Instruction* inst, if (inst->opcode() == spv::Op::OpStore || inst->opcode() == spv::Op::OpCooperativeMatrixStoreNV || inst->opcode() == spv::Op::OpCooperativeMatrixStoreKHR || - inst->opcode() == spv::Op::OpCooperativeMatrixStoreTensorNV) { + inst->opcode() == spv::Op::OpCooperativeMatrixStoreTensorNV || + inst->opcode() == spv::Op::OpCooperativeVectorStoreNV) { return _.diag(SPV_ERROR_INVALID_ID, inst) << "MakePointerVisibleKHR cannot be used with OpStore."; } @@ -405,6 +380,16 @@ spv_result_t CheckMemoryAccess(ValidationState_t& _, const Instruction* inst, << _.VkErrorID(4708) << "Memory accesses with PhysicalStorageBuffer must use Aligned."; } + } else { + // even if there are other masks, the Aligned operand will be next + const uint32_t aligned_value = inst->GetOperandAs(index + 1); + const bool is_power_of_two = + aligned_value && !(aligned_value & (aligned_value - 1)); + if (!is_power_of_two) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Memory accesses Aligned operand value " << aligned_value + << " is not a power of two."; + } } return SPV_SUCCESS; @@ -496,7 +481,8 @@ spv_result_t ValidateVariable(ValidationState_t& _, const Instruction* inst) { storage_class != spv::StorageClass::CallableDataKHR && storage_class != spv::StorageClass::IncomingCallableDataKHR && storage_class != spv::StorageClass::TaskPayloadWorkgroupEXT && - storage_class != spv::StorageClass::HitObjectAttributeNV) { + storage_class != spv::StorageClass::HitObjectAttributeNV && + storage_class != spv::StorageClass::NodePayloadAMDX) { bool storage_input_or_output = storage_class == spv::StorageClass::Input || storage_class == spv::StorageClass::Output; bool builtin = false; @@ -524,7 +510,8 @@ spv_result_t ValidateVariable(ValidationState_t& _, const Instruction* inst) { "Classes: Workgroup, CrossWorkgroup, Private, Function, " "Input, Output, RayPayloadKHR, IncomingRayPayloadKHR, " "HitAttributeKHR, CallableDataKHR, " - "IncomingCallableDataKHR, or UniformConstant"; + "IncomingCallableDataKHR, NodePayloadAMDX, or " + "UniformConstant"; } } } @@ -603,7 +590,7 @@ spv_result_t ValidateVariable(ValidationState_t& _, const Instruction* inst) { if (pointee && !IsAllowedTypeOrArrayOfSame( _, pointee, {spv::Op::OpTypeImage, spv::Op::OpTypeSampler, - spv::Op::OpTypeSampledImage, + spv::Op::OpTypeSampledImage, spv::Op::OpTypeTensorARM, spv::Op::OpTypeAccelerationStructureKHR})) { return _.diag(SPV_ERROR_INVALID_ID, inst) << _.VkErrorID(4655) << "UniformConstant OpVariable " @@ -725,33 +712,6 @@ spv_result_t ValidateVariable(ValidationState_t& _, const Instruction* inst) { << "PhysicalStorageBuffer must not be used with OpVariable."; } - auto pointee_base = pointee; - while (pointee_base && pointee_base->opcode() == spv::Op::OpTypeArray) { - pointee_base = _.FindDef(pointee_base->GetOperandAs(1u)); - } - if (pointee_base && pointee_base->opcode() == spv::Op::OpTypePointer) { - if (pointee_base->GetOperandAs(1u) == - spv::StorageClass::PhysicalStorageBuffer) { - // check for AliasedPointer/RestrictPointer - bool foundAliased = - _.HasDecoration(inst->id(), spv::Decoration::AliasedPointer); - bool foundRestrict = - _.HasDecoration(inst->id(), spv::Decoration::RestrictPointer); - if (!foundAliased && !foundRestrict) { - return _.diag(SPV_ERROR_INVALID_ID, inst) - << "OpVariable " << inst->id() - << ": expected AliasedPointer or RestrictPointer for " - << "PhysicalStorageBuffer pointer."; - } - if (foundAliased && foundRestrict) { - return _.diag(SPV_ERROR_INVALID_ID, inst) - << "OpVariable " << inst->id() - << ": can't specify both AliasedPointer and " - << "RestrictPointer for PhysicalStorageBuffer pointer."; - } - } - } - // Vulkan specific validation rules for OpTypeRuntimeArray if (spvIsVulkanEnv(_.context()->target_env)) { // OpTypeRuntimeArray should only ever be in a container like OpTypeStruct, @@ -819,7 +779,12 @@ spv_result_t ValidateVariable(ValidationState_t& _, const Instruction* inst) { // Cooperative matrix types can only be allocated in Function or Private if ((storage_class != spv::StorageClass::Function && storage_class != spv::StorageClass::Private) && - pointee && ContainsCooperativeMatrix(_, pointee)) { + pointee && + _.ContainsType(pointee->id(), [](const Instruction* type_inst) { + auto opcode = type_inst->opcode(); + return opcode == spv::Op::OpTypeCooperativeMatrixNV || + opcode == spv::Op::OpTypeCooperativeMatrixKHR; + })) { return _.diag(SPV_ERROR_INVALID_ID, inst) << "Cooperative matrix types (or types containing them) can only be " "allocated " @@ -827,6 +792,20 @@ spv_result_t ValidateVariable(ValidationState_t& _, const Instruction* inst) { "parameters"; } + if ((storage_class != spv::StorageClass::Function && + storage_class != spv::StorageClass::Private) && + pointee && + _.ContainsType(pointee->id(), [](const Instruction* type_inst) { + auto opcode = type_inst->opcode(); + return opcode == spv::Op::OpTypeCooperativeVectorNV; + })) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Cooperative vector types (or types containing them) can only be " + "allocated " + << "in Function or Private storage classes or as function " + "parameters"; + } + if (_.HasCapability(spv::Capability::Shader)) { // Don't allow variables containing 16-bit elements without the appropriate // capabilities. @@ -958,6 +937,65 @@ spv_result_t ValidateVariable(ValidationState_t& _, const Instruction* inst) { } } + if (_.HasCapability(spv::Capability::TileShadingQCOM) && + storage_class == spv::StorageClass::TileAttachmentQCOM) { + if (result_type->opcode() == spv::Op::OpTypePointer) { + const auto pointee_type = + _.FindDef(result_type->GetOperandAs(2)); + if (pointee_type && pointee_type->opcode() == spv::Op::OpTypeImage) { + spv::Dim dim = static_cast(pointee_type->word(3)); + if (dim != spv::Dim::Dim2D) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Any OpTypeImage variable in the TileAttachmentQCOM " + "Storage Class must " + "have 2D as its dimension"; + } + unsigned sampled = pointee_type->word(7); + if (sampled != 1 && sampled != 2) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Any OpyTpeImage variable in the TileAttachmentQCOM " + "Storage Class must " + "have 1 or 2 as Image 'Sampled' parameter"; + } + for (const auto& pair_o : inst->uses()) { + const auto* use_inst_o = pair_o.first; + if (use_inst_o->opcode() == spv::Op::OpLoad) { + for (const auto& pair_i : use_inst_o->uses()) { + const auto* use_inst_i = pair_i.first; + switch (use_inst_i->opcode()) { + case spv::Op::OpImageQueryFormat: + case spv::Op::OpImageQueryOrder: + case spv::Op::OpImageQuerySizeLod: + case spv::Op::OpImageQuerySize: + case spv::Op::OpImageQueryLod: + case spv::Op::OpImageQueryLevels: + case spv::Op::OpImageQuerySamples: + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Any variable in the TileAttachmentQCOM Storage " + "Class must " + "not be consumed by an OpImageQuery* instruction"; + default: + break; + } + } + } + } + } + } + + if (!(_.HasDecoration(inst->id(), spv::Decoration::DescriptorSet) && + _.HasDecoration(inst->id(), spv::Decoration::Binding))) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Any variable in the TileAttachmentQCOM Storage Class must " + "be decorated with DescriptorSet and Binding"; + } + if (_.HasDecoration(inst->id(), spv::Decoration::Component)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Any variable in the TileAttachmentQCOM Storage Class must " + "not be decorated with Component decoration"; + } + } + return SPV_SUCCESS; } @@ -1595,12 +1633,15 @@ spv_result_t ValidateAccessChain(ValidationState_t& _, switch (type_pointee->opcode()) { case spv::Op::OpTypeMatrix: case spv::Op::OpTypeVector: + case spv::Op::OpTypeCooperativeVectorNV: case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: case spv::Op::OpTypeArray: - case spv::Op::OpTypeRuntimeArray: { + case spv::Op::OpTypeRuntimeArray: + case spv::Op::OpTypeNodePayloadArrayAMDX: { // In OpTypeMatrix, OpTypeVector, spv::Op::OpTypeCooperativeMatrixNV, - // OpTypeArray, and OpTypeRuntimeArray, word 2 is the Element Type. + // OpTypeCooperativeVectorNV, OpTypeArray, and OpTypeRuntimeArray, word + // 2 is the Element Type. type_pointee = _.FindDef(type_pointee->word(2)); break; } @@ -1609,9 +1650,10 @@ spv_result_t ValidateAccessChain(ValidationState_t& _, // index: the index must be an OpConstant. int64_t cur_index; if (!_.EvalConstantValInt64(cur_word, &cur_index)) { - return _.diag(SPV_ERROR_INVALID_ID, cur_word_instr) - << "The passed to " << instr_name - << " to index into a " + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "The passed to " << instr_name << " to index " + << _.getIdName(cur_word) + << " into a " "structure must be an OpConstant."; } @@ -1620,10 +1662,10 @@ spv_result_t ValidateAccessChain(ValidationState_t& _, const int64_t num_struct_members = static_cast(type_pointee->words().size() - 2); if (cur_index >= num_struct_members || cur_index < 0) { - return _.diag(SPV_ERROR_INVALID_ID, cur_word_instr) - << "Index is out of bounds: " << instr_name - << " cannot find index " << cur_index - << " into the structure " + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Index " << _.getIdName(cur_word) + << " is out of bounds: " << instr_name << " cannot find index " + << cur_index << " into the structure " << _.getIdName(type_pointee->id()) << ". This structure has " << num_struct_members << " members. Largest valid index is " << num_struct_members - 1 << "."; @@ -2398,6 +2440,392 @@ spv_result_t ValidateCooperativeMatrixLoadStoreTensorNV( return SPV_SUCCESS; } +spv_result_t ValidateInt32Operand(ValidationState_t& _, const Instruction* inst, + uint32_t operand_index, + const char* opcode_name, + const char* operand_name) { + const auto type_id = + _.FindDef(inst->GetOperandAs(operand_index))->type_id(); + if (!_.IsIntScalarType(type_id) || _.GetBitWidth(type_id) != 32) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " " << operand_name << " type " + << _.getIdName(type_id) << " is not a 32 bit integer."; + } + return SPV_SUCCESS; +} + +spv_result_t ValidateCooperativeVectorPointer(ValidationState_t& _, + const Instruction* inst, + const char* opname, + uint32_t pointer_index) { + const auto pointer_id = inst->GetOperandAs(pointer_index); + const auto pointer = _.FindDef(pointer_id); + if (!pointer || + ((_.addressing_model() == spv::AddressingModel::Logical) && + ((!_.features().variable_pointers && + !spvOpcodeReturnsLogicalPointer(pointer->opcode())) || + (_.features().variable_pointers && + !spvOpcodeReturnsLogicalVariablePointer(pointer->opcode()))))) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opname << " Pointer " << _.getIdName(pointer_id) + << " is not a logical pointer."; + } + + const auto pointer_type_id = pointer->type_id(); + const auto pointer_type = _.FindDef(pointer_type_id); + if (!pointer_type || pointer_type->opcode() != spv::Op::OpTypePointer) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opname << " type for pointer " << _.getIdName(pointer_id) + << " is not a pointer type."; + } + + const auto storage_class_index = 1u; + const auto storage_class = + pointer_type->GetOperandAs(storage_class_index); + + if (storage_class != spv::StorageClass::Workgroup && + storage_class != spv::StorageClass::StorageBuffer && + storage_class != spv::StorageClass::PhysicalStorageBuffer) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opname << " storage class for pointer type " + << _.getIdName(pointer_type_id) + << " is not Workgroup or StorageBuffer."; + } + + const auto pointee_id = pointer_type->GetOperandAs(2); + const auto pointee_type = _.FindDef(pointee_id); + if (!pointee_type || + (pointee_type->opcode() != spv::Op::OpTypeArray && + pointee_type->opcode() != spv::Op::OpTypeRuntimeArray)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opname << " Pointer " << _.getIdName(pointer->id()) + << "s Type must be an array type."; + } + + const auto array_elem_type_id = pointee_type->GetOperandAs(1); + auto array_elem_type = _.FindDef(array_elem_type_id); + if (!array_elem_type || !(_.IsIntScalarOrVectorType(array_elem_type_id) || + _.IsFloatScalarOrVectorType(array_elem_type_id))) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opname << " Pointer " << _.getIdName(pointer->id()) + << "s Type must be an array of scalar or vector type."; + } + + return SPV_SUCCESS; +} + +spv_result_t ValidateCooperativeVectorLoadStoreNV(ValidationState_t& _, + const Instruction* inst) { + uint32_t type_id; + const char* opname; + if (inst->opcode() == spv::Op::OpCooperativeVectorLoadNV) { + type_id = inst->type_id(); + opname = "spv::Op::OpCooperativeVectorLoadNV"; + } else { + // get Object operand's type + type_id = _.FindDef(inst->GetOperandAs(2))->type_id(); + opname = "spv::Op::OpCooperativeVectorStoreNV"; + } + + auto vector_type = _.FindDef(type_id); + + if (vector_type->opcode() != spv::Op::OpTypeCooperativeVectorNV) { + if (inst->opcode() == spv::Op::OpCooperativeVectorLoadNV) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "spv::Op::OpCooperativeVectorLoadNV Result Type " + << _.getIdName(type_id) << " is not a cooperative vector type."; + } else { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "spv::Op::OpCooperativeVectorStoreNV Object type " + << _.getIdName(type_id) << " is not a cooperative vector type."; + } + } + + const auto pointer_index = + (inst->opcode() == spv::Op::OpCooperativeVectorLoadNV) ? 2u : 0u; + + if (auto error = + ValidateCooperativeVectorPointer(_, inst, opname, pointer_index)) { + return error; + } + + const auto memory_access_index = + (inst->opcode() == spv::Op::OpCooperativeVectorLoadNV) ? 4u : 3u; + if (inst->operands().size() > memory_access_index) { + if (auto error = CheckMemoryAccess(_, inst, memory_access_index)) + return error; + } + + return SPV_SUCCESS; +} + +spv_result_t ValidateCooperativeVectorOuterProductNV(ValidationState_t& _, + const Instruction* inst) { + const auto pointer_index = 0u; + const auto opcode_name = + "spv::Op::OpCooperativeVectorOuterProductAccumulateNV"; + + if (auto error = ValidateCooperativeVectorPointer(_, inst, opcode_name, + pointer_index)) { + return error; + } + + auto type_id = _.FindDef(inst->GetOperandAs(2))->type_id(); + auto a_type = _.FindDef(type_id); + + if (a_type->opcode() != spv::Op::OpTypeCooperativeVectorNV) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " A type " << _.getIdName(type_id) + << " is not a cooperative vector type."; + } + + type_id = _.FindDef(inst->GetOperandAs(3))->type_id(); + auto b_type = _.FindDef(type_id); + + if (b_type->opcode() != spv::Op::OpTypeCooperativeVectorNV) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " B type " << _.getIdName(type_id) + << " is not a cooperative vector type."; + } + + const auto a_component_type_id = a_type->GetOperandAs(1); + const auto b_component_type_id = b_type->GetOperandAs(1); + + if (a_component_type_id != b_component_type_id) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " A and B component types " + << _.getIdName(a_component_type_id) << " and " + << _.getIdName(b_component_type_id) << " do not match."; + } + + if (auto error = ValidateInt32Operand(_, inst, 1, opcode_name, "Offset")) { + return error; + } + + if (auto error = + ValidateInt32Operand(_, inst, 4, opcode_name, "MemoryLayout")) { + return error; + } + + if (auto error = ValidateInt32Operand(_, inst, 5, opcode_name, + "MatrixInterpretation")) { + return error; + } + + if (inst->operands().size() > 6) { + if (auto error = + ValidateInt32Operand(_, inst, 6, opcode_name, "MatrixStride")) { + return error; + } + } + + return SPV_SUCCESS; +} + +spv_result_t ValidateCooperativeVectorReduceSumNV(ValidationState_t& _, + const Instruction* inst) { + const auto opcode_name = "spv::Op::OpCooperativeVectorReduceSumAccumulateNV"; + const auto pointer_index = 0u; + + if (auto error = ValidateCooperativeVectorPointer(_, inst, opcode_name, + pointer_index)) { + return error; + } + + auto type_id = _.FindDef(inst->GetOperandAs(2))->type_id(); + auto v_type = _.FindDef(type_id); + + if (v_type->opcode() != spv::Op::OpTypeCooperativeVectorNV) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " V type " << _.getIdName(type_id) + << " is not a cooperative vector type."; + } + + if (auto error = ValidateInt32Operand(_, inst, 1, opcode_name, "Offset")) { + return error; + } + + return SPV_SUCCESS; +} + +bool InterpretationIsPacked(spv::ComponentType interp) { + switch (interp) { + case spv::ComponentType::SignedInt8PackedNV: + case spv::ComponentType::UnsignedInt8PackedNV: + return true; + default: + return false; + } +} + +using std::get; + +spv_result_t ValidateCooperativeVectorMatrixMulNV(ValidationState_t& _, + const Instruction* inst) { + const bool has_bias = + inst->opcode() == spv::Op::OpCooperativeVectorMatrixMulAddNV; + const auto opcode_name = has_bias + ? "spv::Op::OpCooperativeVectorMatrixMulAddNV" + : "spv::Op::OpCooperativeVectorMatrixMulNV"; + + const auto bias_offset = has_bias ? 3 : 0; + + const auto result_type_index = 0u; + const auto input_index = 2u; + const auto input_interpretation_index = 3u; + const auto matrix_index = 4u; + const auto matrix_interpretation_index = 6u; + const auto bias_index = 7u; + const auto bias_interpretation_index = 9u; + const auto m_index = 7u + bias_offset; + const auto k_index = 8u + bias_offset; + const auto memory_layout_index = 9u + bias_offset; + const auto transpose_index = 10u + bias_offset; + + const auto result_type_id = inst->GetOperandAs(result_type_index); + const auto input_id = inst->GetOperandAs(input_index); + const auto input_interpretation_id = + inst->GetOperandAs(input_interpretation_index); + const auto matrix_interpretation_id = + inst->GetOperandAs(matrix_interpretation_index); + const auto bias_interpretation_id = + inst->GetOperandAs(bias_interpretation_index); + const auto m_id = inst->GetOperandAs(m_index); + const auto k_id = inst->GetOperandAs(k_index); + const auto memory_layout_id = + inst->GetOperandAs(memory_layout_index); + const auto transpose_id = inst->GetOperandAs(transpose_index); + + if (auto error = ValidateCooperativeVectorPointer(_, inst, opcode_name, + matrix_index)) { + return error; + } + + if (inst->opcode() == spv::Op::OpCooperativeVectorMatrixMulAddNV) { + if (auto error = ValidateCooperativeVectorPointer(_, inst, opcode_name, + bias_index)) { + return error; + } + } + + const auto result_type = _.FindDef(result_type_id); + + if (result_type->opcode() != spv::Op::OpTypeCooperativeVectorNV) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " result type " << _.getIdName(result_type_id) + << " is not a cooperative vector type."; + } + + const auto result_component_type_id = result_type->GetOperandAs(1u); + if (!(_.IsIntScalarType(result_component_type_id) && + _.GetBitWidth(result_component_type_id) == 32) && + !(_.IsFloatScalarType(result_component_type_id) && + (_.GetBitWidth(result_component_type_id) == 32 || + _.GetBitWidth(result_component_type_id) == 16))) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " result component type " + << _.getIdName(result_component_type_id) + << " is not a 32 bit int or 16/32 bit float."; + } + + const auto m_eval = _.EvalInt32IfConst(m_id); + const auto rc_eval = + _.EvalInt32IfConst(result_type->GetOperandAs(2u)); + if (get<1>(m_eval) && get<1>(rc_eval) && get<2>(m_eval) != get<2>(rc_eval)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " result type number of components " + << get<2>(rc_eval) << " does not match M " << get<2>(m_eval); + } + + const auto k_eval = _.EvalInt32IfConst(k_id); + + const auto input = _.FindDef(input_id); + const auto input_type = _.FindDef(input->type_id()); + const auto input_num_components_id = input_type->GetOperandAs(2u); + + auto input_interp_eval = _.EvalInt32IfConst(input_interpretation_id); + if (get<1>(input_interp_eval) && + !InterpretationIsPacked(spv::ComponentType{get<2>(input_interp_eval)})) { + const auto inc_eval = _.EvalInt32IfConst(input_num_components_id); + if (get<1>(inc_eval) && get<1>(k_eval) && + get<2>(inc_eval) != get<2>(k_eval)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " input number of components " + << get<2>(inc_eval) << " does not match K " << get<2>(k_eval); + } + } + + if (!_.IsBoolScalarType(_.FindDef(transpose_id)->type_id())) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " Transpose " << _.getIdName(transpose_id) + << " is not a scalar boolean."; + } + + const auto check_constant = [&](uint32_t id, + const char* operand_name) -> spv_result_t { + if (!spvOpcodeIsConstant(_.GetIdOpcode(id))) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << opcode_name << " " << operand_name << " " + << _.getIdName(id) << " is not a constant instruction."; + } + return SPV_SUCCESS; + }; + + if (auto error = + check_constant(input_interpretation_id, "InputInterpretation")) { + return error; + } + if (auto error = + check_constant(matrix_interpretation_id, "MatrixInterpretation")) { + return error; + } + if (has_bias) { + if (auto error = + check_constant(bias_interpretation_id, "BiasInterpretation")) { + return error; + } + } + if (auto error = check_constant(m_id, "M")) { + return error; + } + if (auto error = check_constant(k_id, "K")) { + return error; + } + if (auto error = check_constant(memory_layout_id, "MemoryLayout")) { + return error; + } + if (auto error = check_constant(transpose_id, "Transpose")) { + return error; + } + + if (auto error = ValidateInt32Operand(_, inst, input_interpretation_index, + opcode_name, "InputInterpretation")) { + return error; + } + if (auto error = ValidateInt32Operand(_, inst, matrix_interpretation_index, + opcode_name, "MatrixInterpretation")) { + return error; + } + if (has_bias) { + if (auto error = ValidateInt32Operand(_, inst, bias_interpretation_index, + opcode_name, "BiasInterpretation")) { + return error; + } + } + if (auto error = ValidateInt32Operand(_, inst, m_index, opcode_name, "M")) { + return error; + } + if (auto error = ValidateInt32Operand(_, inst, k_index, opcode_name, "K")) { + return error; + } + if (auto error = ValidateInt32Operand(_, inst, memory_layout_index, + opcode_name, "MemoryLayout")) { + return error; + } + + return SPV_SUCCESS; +} + spv_result_t ValidatePtrComparison(ValidationState_t& _, const Instruction* inst) { if (_.addressing_model() == spv::AddressingModel::Logical && @@ -2422,17 +2850,42 @@ spv_result_t ValidatePtrComparison(ValidationState_t& _, const auto op1 = _.FindDef(inst->GetOperandAs(2u)); const auto op2 = _.FindDef(inst->GetOperandAs(3u)); - if (!op1 || !op2 || op1->type_id() != op2->type_id()) { - return _.diag(SPV_ERROR_INVALID_ID, inst) - << "The types of Operand 1 and Operand 2 must match"; - } const auto op1_type = _.FindDef(op1->type_id()); + const auto op2_type = _.FindDef(op2->type_id()); if (!op1_type || (op1_type->opcode() != spv::Op::OpTypePointer && op1_type->opcode() != spv::Op::OpTypeUntypedPointerKHR)) { return _.diag(SPV_ERROR_INVALID_ID, inst) << "Operand type must be a pointer"; } + if (!op2_type || (op2_type->opcode() != spv::Op::OpTypePointer && + op2_type->opcode() != spv::Op::OpTypeUntypedPointerKHR)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Operand type must be a pointer"; + } + + if (inst->opcode() == spv::Op::OpPtrDiff) { + if (op1->type_id() != op2->type_id()) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "The types of Operand 1 and Operand 2 must match"; + } + } else { + const auto either_untyped = + op1_type->opcode() == spv::Op::OpTypeUntypedPointerKHR || + op2_type->opcode() == spv::Op::OpTypeUntypedPointerKHR; + if (either_untyped) { + const auto sc1 = op1_type->GetOperandAs(1); + const auto sc2 = op2_type->GetOperandAs(1); + if (sc1 != sc2) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Pointer storage classes must match"; + } + } else if (op1->type_id() != op2->type_id()) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "The types of Operand 1 and Operand 2 must match"; + } + } + spv::StorageClass sc = op1_type->GetOperandAs(1u); if (_.addressing_model() == spv::AddressingModel::Logical) { if (sc != spv::StorageClass::Workgroup && @@ -2511,6 +2964,24 @@ spv_result_t MemoryPass(ValidationState_t& _, const Instruction* inst) { if (auto error = ValidateCooperativeMatrixLoadStoreTensorNV(_, inst)) return error; break; + case spv::Op::OpCooperativeVectorLoadNV: + case spv::Op::OpCooperativeVectorStoreNV: + if (auto error = ValidateCooperativeVectorLoadStoreNV(_, inst)) + return error; + break; + case spv::Op::OpCooperativeVectorOuterProductAccumulateNV: + if (auto error = ValidateCooperativeVectorOuterProductNV(_, inst)) + return error; + break; + case spv::Op::OpCooperativeVectorReduceSumAccumulateNV: + if (auto error = ValidateCooperativeVectorReduceSumNV(_, inst)) + return error; + break; + case spv::Op::OpCooperativeVectorMatrixMulNV: + case spv::Op::OpCooperativeVectorMatrixMulAddNV: + if (auto error = ValidateCooperativeVectorMatrixMulNV(_, inst)) + return error; + break; case spv::Op::OpPtrEqual: case spv::Op::OpPtrNotEqual: case spv::Op::OpPtrDiff: diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_memory_semantics.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_memory_semantics.cpp index dab7b5a..d94d37d 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_memory_semantics.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_memory_semantics.cpp @@ -66,8 +66,7 @@ spv_result_t ValidateMemorySemantics(ValidationState_t& _, return _.diag(SPV_ERROR_INVALID_DATA, inst) << spvOpcodeString(opcode) << ": Memory Semantics can have at most one of the following " - "bits " - "set: Acquire, Release, AcquireRelease or " + "bits set: Acquire, Release, AcquireRelease or " "SequentiallyConsistent"; } @@ -176,10 +175,8 @@ spv_result_t ValidateMemorySemantics(ValidationState_t& _, return _.diag(SPV_ERROR_INVALID_DATA, inst) << _.VkErrorID(4732) << spvOpcodeString(opcode) << ": Vulkan specification requires Memory Semantics to have " - "one " - "of the following bits set: Acquire, Release, " - "AcquireRelease " - "or SequentiallyConsistent"; + "one of the following bits set: Acquire, Release, " + "AcquireRelease or SequentiallyConsistent"; } else if (opcode != spv::Op::OpMemoryBarrier && num_memory_order_set_bits) { // should leave only atomics and control barriers for Vulkan env @@ -203,11 +200,20 @@ spv_result_t ValidateMemorySemantics(ValidationState_t& _, "storage class"; } - if (opcode == spv::Op::OpControlBarrier && value && !includes_storage_class) { - return _.diag(SPV_ERROR_INVALID_DATA, inst) - << _.VkErrorID(4650) << spvOpcodeString(opcode) - << ": expected Memory Semantics to include a Vulkan-supported " - "storage class if Memory Semantics is not None"; + if (opcode == spv::Op::OpControlBarrier && value) { + if (!num_memory_order_set_bits) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << _.VkErrorID(10609) << spvOpcodeString(opcode) + << ": Vulkan specification requires non-zero Memory Semantics " + "to have one of the following bits set: Acquire, Release, " + "AcquireRelease or SequentiallyConsistent"; + } + if (!includes_storage_class) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << _.VkErrorID(4650) << spvOpcodeString(opcode) + << ": expected Memory Semantics to include a Vulkan-supported " + "storage class if Memory Semantics is not None"; + } } } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_mesh_shading.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_mesh_shading.cpp index e569e25..3bd1dbd 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_mesh_shading.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_mesh_shading.cpp @@ -15,6 +15,7 @@ // Validates ray query instructions from SPV_KHR_ray_query #include "source/opcode.h" +#include "source/spirv_target_env.h" #include "source/val/instruction.h" #include "source/val/validate.h" #include "source/val/validation_state.h" @@ -22,6 +23,24 @@ namespace spvtools { namespace val { +bool IsInterfaceVariable(ValidationState_t& _, const Instruction* inst, + spv::ExecutionModel model) { + bool foundInterface = false; + for (auto entry_point : _.entry_points()) { + const auto* models = _.GetExecutionModels(entry_point); + if (models->find(model) == models->end()) return false; + for (const auto& desc : _.entry_point_descriptions(entry_point)) { + for (auto interface : desc.interfaces) { + if (inst->id() == interface) { + foundInterface = true; + break; + } + } + } + } + return foundInterface; +} + spv_result_t MeshShadingPass(ValidationState_t& _, const Instruction* inst) { const spv::Op opcode = inst->opcode(); switch (opcode) { @@ -111,7 +130,37 @@ spv_result_t MeshShadingPass(ValidationState_t& _, const Instruction* inst) { // No validation rules (for the moment). break; } - + case spv::Op::OpVariable: { + if (_.HasCapability(spv::Capability::MeshShadingEXT)) { + bool meshInterfaceVar = + IsInterfaceVariable(_, inst, spv::ExecutionModel::MeshEXT); + bool fragInterfaceVar = + IsInterfaceVariable(_, inst, spv::ExecutionModel::Fragment); + + const spv::StorageClass storage_class = + inst->GetOperandAs(2); + bool storage_output = (storage_class == spv::StorageClass::Output); + bool storage_input = (storage_class == spv::StorageClass::Input); + + if (_.HasDecoration(inst->id(), spv::Decoration::PerPrimitiveEXT)) { + if (fragInterfaceVar && !storage_input) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "PerPrimitiveEXT decoration must be applied only to " + "variables in the Input Storage Class in the Fragment " + "Execution Model."; + } + + if (meshInterfaceVar && !storage_output) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << _.VkErrorID(4336) + << "PerPrimitiveEXT decoration must be applied only to " + "variables in the Output Storage Class in the " + "Storage Class in the MeshEXT Execution Model."; + } + } + } + break; + } default: break; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_mode_setting.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_mode_setting.cpp index 8502fda..24b9db9 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_mode_setting.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_mode_setting.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2018 Google LLC. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,6 +18,7 @@ #include "source/opcode.h" #include "source/spirv_target_env.h" +#include "source/table2.h" #include "source/val/instruction.h" #include "source/val/validate.h" #include "source/val/validation_state.h" @@ -308,21 +311,124 @@ spv_result_t ValidateEntryPoint(ValidationState_t& _, const Instruction* inst) { } } } + if (!ok && _.HasCapability(spv::Capability::TileShadingQCOM)) { + ok = + execution_modes && + execution_modes->count(spv::ExecutionMode::TileShadingRateQCOM); + } if (!ok) { return _.diag(SPV_ERROR_INVALID_DATA, inst) - << _.VkErrorID(6426) + << (_.HasCapability(spv::Capability::TileShadingQCOM) + ? _.VkErrorID(10685) + : _.VkErrorID(6426)) << "In the Vulkan environment, GLCompute execution model " - "entry points require either the LocalSize or " - "LocalSizeId execution mode or an object decorated with " - "WorkgroupSize must be specified."; + "entry points require either the " + << (_.HasCapability(spv::Capability::TileShadingQCOM) + ? "TileShadingRateQCOM, " + : "") + << "LocalSize or LocalSizeId execution mode or an object " + "decorated with WorkgroupSize must be specified."; + } + } + + if (_.HasCapability(spv::Capability::TileShadingQCOM)) { + if (execution_modes) { + if (execution_modes->count( + spv::ExecutionMode::TileShadingRateQCOM) && + (execution_modes->count(spv::ExecutionMode::LocalSize) || + execution_modes->count(spv::ExecutionMode::LocalSizeId))) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "If the TileShadingRateQCOM execution mode is used, " + << "LocalSize and LocalSizeId must not be specified."; + } + if (execution_modes->count( + spv::ExecutionMode::NonCoherentTileAttachmentReadQCOM)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "The NonCoherentTileAttachmentQCOM execution mode must " + "not be used in any stage other than fragment."; + } + } + } else { + if (execution_modes && + execution_modes->count(spv::ExecutionMode::TileShadingRateQCOM)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "If the TileShadingRateQCOM execution mode is used, the " + "TileShadingQCOM capability must be enabled."; } } break; default: + if (execution_modes && + execution_modes->count(spv::ExecutionMode::TileShadingRateQCOM)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "The TileShadingRateQCOM execution mode must not be used " + "in any stage other than compute."; + } + if (execution_model != spv::ExecutionModel::Fragment) { + if (execution_modes && + execution_modes->count( + spv::ExecutionMode::NonCoherentTileAttachmentReadQCOM)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "The NonCoherentTileAttachmentQCOM execution mode must " + "not be used in any stage other than fragment."; + } + if (_.HasCapability(spv::Capability::TileShadingQCOM)) { + return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst) + << "The TileShadingQCOM capability must not be enabled in " + "any stage other than compute or fragment."; + } + } else { + if (execution_modes && + execution_modes->count( + spv::ExecutionMode::NonCoherentTileAttachmentReadQCOM)) { + if (!_.HasCapability(spv::Capability::TileShadingQCOM)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "If the NonCoherentTileAttachmentReadQCOM execution " + "mode is used, the TileShadingQCOM capability must be " + "enabled."; + } + } + } break; } } + if (_.EntryPointHasLocalSizeOrId(entry_point_id)) { + const Instruction* local_size_inst = + _.EntryPointLocalSizeOrId(entry_point_id); + if (local_size_inst) { + const auto mode = local_size_inst->GetOperandAs(1); + const uint32_t operand_x = local_size_inst->GetOperandAs(2); + const uint32_t operand_y = local_size_inst->GetOperandAs(3); + const uint32_t operand_z = local_size_inst->GetOperandAs(4); + if (mode == spv::ExecutionMode::LocalSize) { + if ((operand_x * operand_y * operand_z) == 0) { + return _.diag(SPV_ERROR_INVALID_DATA, local_size_inst) + << "Local Size execution mode must not have a product of zero " + "(X " + "= " + << operand_x << ", Y = " << operand_y << ", Z = " << operand_z + << ")."; + } + } else if (mode == spv::ExecutionMode::LocalSizeId) { + // can only validate product if static and not spec constant + // (This is done for us in EvalConstantValUint64) + uint64_t x_size, y_size, z_size; + bool static_x = _.EvalConstantValUint64(operand_x, &x_size); + bool static_y = _.EvalConstantValUint64(operand_y, &y_size); + bool static_z = _.EvalConstantValUint64(operand_z, &z_size); + if (static_x && static_y && static_z && + ((x_size * y_size * z_size) == 0)) { + return _.diag(SPV_ERROR_INVALID_DATA, local_size_inst) + << "Local Size Id execution mode must not have a product of " + "zero " + "(X = " + << x_size << ", Y = " << y_size << ", Z = " << z_size << ")."; + } + } + } + } + return SPV_SUCCESS; } @@ -347,6 +453,12 @@ spv_result_t ValidateExecutionMode(ValidationState_t& _, case spv::ExecutionMode::LocalSizeId: case spv::ExecutionMode::FPFastMathDefault: case spv::ExecutionMode::MaximumRegistersIdINTEL: + case spv::ExecutionMode::IsApiEntryAMDX: + case spv::ExecutionMode::MaxNodeRecursionAMDX: + case spv::ExecutionMode::MaxNumWorkgroupsAMDX: + case spv::ExecutionMode::ShaderIndexAMDX: + case spv::ExecutionMode::SharesInputWithAMDX: + case spv::ExecutionMode::StaticNumWorkgroupsAMDX: valid_mode = true; break; default: @@ -368,6 +480,12 @@ spv_result_t ValidateExecutionMode(ValidationState_t& _, case spv::ExecutionMode::SubgroupsPerWorkgroupId: case spv::ExecutionMode::LocalSizeHintId: case spv::ExecutionMode::LocalSizeId: + case spv::ExecutionMode::IsApiEntryAMDX: + case spv::ExecutionMode::MaxNodeRecursionAMDX: + case spv::ExecutionMode::MaxNumWorkgroupsAMDX: + case spv::ExecutionMode::ShaderIndexAMDX: + case spv::ExecutionMode::SharesInputWithAMDX: + case spv::ExecutionMode::StaticNumWorkgroupsAMDX: if (!spvOpcodeIsConstant(operand_inst->opcode())) { return _.diag(SPV_ERROR_INVALID_ID, inst) << "For OpExecutionModeId all Extra Operand ids must be " @@ -426,7 +544,13 @@ spv_result_t ValidateExecutionMode(ValidationState_t& _, } else if (mode == spv::ExecutionMode::SubgroupsPerWorkgroupId || mode == spv::ExecutionMode::LocalSizeHintId || mode == spv::ExecutionMode::LocalSizeId || - mode == spv::ExecutionMode::FPFastMathDefault) { + mode == spv::ExecutionMode::FPFastMathDefault || + mode == spv::ExecutionMode::IsApiEntryAMDX || + mode == spv::ExecutionMode::MaxNodeRecursionAMDX || + mode == spv::ExecutionMode::MaxNumWorkgroupsAMDX || + mode == spv::ExecutionMode::ShaderIndexAMDX || + mode == spv::ExecutionMode::SharesInputWithAMDX || + mode == spv::ExecutionMode::StaticNumWorkgroupsAMDX) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << "OpExecutionMode is only valid when the Mode operand is an " "execution mode that takes no Extra Operands, or takes Extra " @@ -543,6 +667,15 @@ spv_result_t ValidateExecutionMode(ValidationState_t& _, "tessellation execution model."; } } + if (spvIsVulkanEnv(_.context()->target_env)) { + if (_.HasCapability(spv::Capability::MeshShadingEXT) && + inst->GetOperandAs(2) == 0) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << _.VkErrorID(7330) + << "In mesh shaders using the MeshEXT Execution Model the " + "OutputVertices Execution Mode must be greater than 0"; + } + } break; case spv::ExecutionMode::OutputLinesEXT: case spv::ExecutionMode::OutputTrianglesEXT: @@ -557,6 +690,16 @@ spv_result_t ValidateExecutionMode(ValidationState_t& _, "execution " "model."; } + if (mode == spv::ExecutionMode::OutputPrimitivesEXT && + spvIsVulkanEnv(_.context()->target_env)) { + if (_.HasCapability(spv::Capability::MeshShadingEXT) && + inst->GetOperandAs(2) == 0) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << _.VkErrorID(7331) + << "In mesh shaders using the MeshEXT Execution Model the " + "OutputPrimitivesEXT Execution Mode must be greater than 0"; + } + } break; case spv::ExecutionMode::QuadDerivativesKHR: if (!std::all_of(models->begin(), models->end(), @@ -682,6 +825,14 @@ spv_result_t ValidateExecutionMode(ValidationState_t& _, << "In the Vulkan environment, the PixelCenterInteger execution " "mode must not be used."; } + if (mode == spv::ExecutionMode::TileShadingRateQCOM) { + const auto rateX = inst->GetOperandAs(2); + const auto rateY = inst->GetOperandAs(3); + if ((rateX & (rateX - 1)) != 0 || (rateY & (rateY - 1)) != 0) + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "The TileShadingRateQCOM execution mode's x and y values " + "must be powers of 2."; + } } return SPV_SUCCESS; @@ -743,6 +894,20 @@ bool PerEntryExecutionMode(spv::ExecutionMode mode) { } } +spv_result_t ValidateCapability(ValidationState_t& _, const Instruction* inst) { + auto cap = inst->GetOperandAs(0); + if (cap == spv::Capability::CooperativeMatrixKHR) { + if (_.HasCapability(spv::Capability::Shader) && + !_.HasCapability(spv::Capability::VulkanMemoryModel)) { + return _.diag(SPV_ERROR_INVALID_CAPABILITY, inst) + << "If the Shader and CooperativeMatrixKHR capabilities are " + "declared, the VulkanMemoryModel capability must also be " + "declared"; + } + } + return SPV_SUCCESS; +} + } // namespace spv_result_t ValidateFloatControls2(ValidationState_t& _) { @@ -821,6 +986,9 @@ spv_result_t ModeSettingPass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpMemoryModel: if (auto error = ValidateMemoryModel(_, inst)) return error; break; + case spv::Op::OpCapability: + if (auto error = ValidateCapability(_, inst)) return error; + break; default: break; } @@ -833,12 +1001,12 @@ spv_result_t ValidateDuplicateExecutionModes(ValidationState_t& _) { std::set seen_per_entry; std::set seen_per_operand; - const auto lookupMode = [&_](spv::ExecutionMode mode) -> std::string { - spv_operand_desc desc = nullptr; - if (_.grammar().lookupOperand(SPV_OPERAND_TYPE_EXECUTION_MODE, - static_cast(mode), - &desc) == SPV_SUCCESS) { - return std::string(desc->name); + const auto lookupMode = [](spv::ExecutionMode mode) -> std::string { + const spvtools::OperandDesc* desc = nullptr; + if (spvtools::LookupOperand(SPV_OPERAND_TYPE_EXECUTION_MODE, + static_cast(mode), + &desc) == SPV_SUCCESS) { + return std::string(desc->name().data()); } return "Unknown"; }; diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_ray_query.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_ray_query.cpp index 9b67fc9..bd790ac 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_ray_query.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_ray_query.cpp @@ -23,6 +23,17 @@ namespace spvtools { namespace val { namespace { +uint32_t GetArrayLength(ValidationState_t& _, const Instruction* array_type) { + assert(array_type->opcode() == spv::Op::OpTypeArray); + uint32_t const_int_id = array_type->GetOperandAs(2U); + Instruction* array_length_inst = _.FindDef(const_int_id); + uint32_t array_length = 0; + if (array_length_inst->opcode() == spv::Op::OpConstant) { + array_length = array_length_inst->GetOperandAs(2); + } + return array_length; +} + spv_result_t ValidateRayQueryPointer(ValidationState_t& _, const Instruction* inst, uint32_t ray_query_index) { @@ -263,6 +274,89 @@ spv_result_t RayQueryPass(ValidationState_t& _, const Instruction* inst) { break; } + case spv::Op::OpRayQueryGetClusterIdNV: { + if (auto error = ValidateRayQueryPointer(_, inst, 2)) return error; + if (auto error = ValidateIntersectionId(_, inst, 3)) return error; + + if (!_.IsIntScalarType(result_type) || _.GetBitWidth(result_type) != 32) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "expected Result Type to be 32-bit int scalar type"; + } + break; + } + + case spv::Op::OpRayQueryGetIntersectionSpherePositionNV: { + if (auto error = ValidateRayQueryPointer(_, inst, 2)) return error; + if (auto error = ValidateIntersectionId(_, inst, 3)) return error; + + if (!_.IsFloatVectorType(result_type) || + _.GetDimension(result_type) != 3 || + _.GetBitWidth(result_type) != 32) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "expected Result Type to be 32-bit float 3-component " + "vector type"; + } + break; + } + + case spv::Op::OpRayQueryGetIntersectionLSSPositionsNV: { + if (auto error = ValidateRayQueryPointer(_, inst, 2)) return error; + if (auto error = ValidateIntersectionId(_, inst, 3)) return error; + + auto result_id = _.FindDef(result_type); + if ((result_id->opcode() != spv::Op::OpTypeArray) || + (GetArrayLength(_, result_id) != 2) || + !_.IsFloatVectorType(_.GetComponentType(result_type)) || + _.GetDimension(_.GetComponentType(result_type)) != 3) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected 2 element array of 32-bit 3 component float point " + "vector as Result Type: " + << spvOpcodeString(opcode); + } + break; + } + + case spv::Op::OpRayQueryGetIntersectionLSSRadiiNV: { + if (auto error = ValidateRayQueryPointer(_, inst, 2)) return error; + if (auto error = ValidateIntersectionId(_, inst, 3)) return error; + + if (!_.IsFloatArrayType(result_type) || + (GetArrayLength(_, _.FindDef(result_type)) != 2) || + !_.IsFloatScalarType(_.GetComponentType(result_type))) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected 32-bit floating point scalar as Result Type: " + << spvOpcodeString(opcode); + } + break; + } + + case spv::Op::OpRayQueryGetIntersectionSphereRadiusNV: + case spv::Op::OpRayQueryGetIntersectionLSSHitValueNV: { + if (auto error = ValidateRayQueryPointer(_, inst, 2)) return error; + if (auto error = ValidateIntersectionId(_, inst, 3)) return error; + + if (!_.IsFloatScalarType(result_type) || + _.GetBitWidth(result_type) != 32) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "expected Result Type to be 32-bit floating point " + "scalar type"; + } + break; + } + + case spv::Op::OpRayQueryIsSphereHitNV: + case spv::Op::OpRayQueryIsLSSHitNV: { + if (auto error = ValidateRayQueryPointer(_, inst, 2)) return error; + if (auto error = ValidateIntersectionId(_, inst, 3)) return error; + + if (!_.IsBoolScalarType(result_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "expected Result Type to be Boolean " + "scalar type"; + } + + break; + } default: break; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_ray_tracing_reorder.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_ray_tracing_reorder.cpp index cb190f9..3685a76 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_ray_tracing_reorder.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_ray_tracing_reorder.cpp @@ -26,6 +26,17 @@ namespace val { static const uint32_t KRayParamInvalidId = std::numeric_limits::max(); +uint32_t GetArrayLength(ValidationState_t& _, const Instruction* array_type) { + assert(array_type->opcode() == spv::Op::OpTypeArray); + uint32_t const_int_id = array_type->GetOperandAs(2U); + Instruction* array_length_inst = _.FindDef(const_int_id); + uint32_t array_length = 0; + if (array_length_inst->opcode() == spv::Op::OpConstant) { + array_length = array_length_inst->GetOperandAs(2); + } + return array_length; +} + spv_result_t ValidateHitObjectPointer(ValidationState_t& _, const Instruction* inst, uint32_t hit_object_index) { @@ -614,6 +625,102 @@ spv_result_t RayReorderNVPass(ValidationState_t& _, const Instruction* inst) { return _.diag(SPV_ERROR_INVALID_DATA, inst) << "bits must be a 32-bit int scalar"; } + break; + } + + case spv::Op::OpHitObjectGetClusterIdNV: { + RegisterOpcodeForValidModel(_, inst); + if (auto error = ValidateHitObjectPointer(_, inst, 2)) return error; + + if (!_.IsIntScalarType(result_type) || _.GetBitWidth(result_type) != 32) + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected 32-bit integer type scalar as Result Type: " + << spvOpcodeString(opcode); + break; + } + + case spv::Op::OpHitObjectGetSpherePositionNV: { + RegisterOpcodeForValidModel(_, inst); + if (auto error = ValidateHitObjectPointer(_, inst, 2)) return error; + + if (!_.IsFloatVectorType(result_type) || + _.GetDimension(result_type) != 3 || + _.GetBitWidth(result_type) != 32) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected 32-bit floating point 2 component vector type as " + "Result Type: " + << spvOpcodeString(opcode); + } + break; + } + + case spv::Op::OpHitObjectGetSphereRadiusNV: { + RegisterOpcodeForValidModel(_, inst); + if (auto error = ValidateHitObjectPointer(_, inst, 2)) return error; + + if (!_.IsFloatScalarType(result_type) || + _.GetBitWidth(result_type) != 32) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected 32-bit floating point scalar as Result Type: " + << spvOpcodeString(opcode); + } + break; + } + + case spv::Op::OpHitObjectGetLSSPositionsNV: { + RegisterOpcodeForValidModel(_, inst); + if (auto error = ValidateHitObjectPointer(_, inst, 2)) return error; + + auto result_id = _.FindDef(result_type); + if ((result_id->opcode() != spv::Op::OpTypeArray) || + (GetArrayLength(_, result_id) != 2) || + !_.IsFloatVectorType(_.GetComponentType(result_type)) || + _.GetDimension(_.GetComponentType(result_type)) != 3) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected 2 element array of 32-bit 3 component float point " + "vector as Result Type: " + << spvOpcodeString(opcode); + } + break; + } + + case spv::Op::OpHitObjectGetLSSRadiiNV: { + RegisterOpcodeForValidModel(_, inst); + if (auto error = ValidateHitObjectPointer(_, inst, 2)) return error; + + if (!_.IsFloatArrayType(result_type) || + (GetArrayLength(_, _.FindDef(result_type)) != 2) || + !_.IsFloatScalarType(_.GetComponentType(result_type))) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected 2 element array of 32-bit floating point scalar as " + "Result Type: " + << spvOpcodeString(opcode); + } + break; + } + + case spv::Op::OpHitObjectIsSphereHitNV: { + RegisterOpcodeForValidModel(_, inst); + if (auto error = ValidateHitObjectPointer(_, inst, 2)) return error; + + if (!_.IsBoolScalarType(result_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Boolean scalar as Result Type: " + << spvOpcodeString(opcode); + } + break; + } + + case spv::Op::OpHitObjectIsLSSHitNV: { + RegisterOpcodeForValidModel(_, inst); + if (auto error = ValidateHitObjectPointer(_, inst, 2)) return error; + + if (!_.IsBoolScalarType(result_type)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Boolean scalar as Result Type: " + << spvOpcodeString(opcode); + } + break; } default: diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_tensor.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_tensor.cpp new file mode 100644 index 0000000..4906aa2 --- /dev/null +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_tensor.cpp @@ -0,0 +1,252 @@ +// Copyright (c) 2023-2025 Arm Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Validates correctness of tensor instructions. + +#include "source/opcode.h" +#include "source/val/validate.h" +#include "source/val/validation_state.h" + +namespace spvtools { +namespace val { +namespace { + +bool IsRankedTensor(ValidationState_t& _, uint32_t id) { + auto inst = _.FindDef(id); + if (!inst || inst->opcode() != spv::Op::OpTypeTensorARM || + inst->words().size() <= 3) { + return false; + } + return true; +} + +uint64_t GetTensorTypeRank(ValidationState_t& _, uint32_t id) { + auto inst = _.FindDef(id); + if (!inst || inst->opcode() != spv::Op::OpTypeTensorARM || + inst->words().size() <= 3) { + return 0; + } + uint64_t rank = 0; + if (!_.EvalConstantValUint64(inst->word(3), &rank)) { + return 0; + } + return rank; +} + +bool IsScalarTypeOrOrArrayOfScalarType(ValidationState_t& _, uint32_t id) { + auto inst = _.FindDef(id); + if (!inst) { + return false; + } + return _.IsScalarType(id) || (inst->opcode() == spv::Op::OpTypeArray && + _.IsScalarType(inst->word(2))); +} + +spv_result_t ValidateTensorRead(ValidationState_t& _, const Instruction* inst) { + // Result Type must be a scalar type or array of scalar type. + if (!IsScalarTypeOrOrArrayOfScalarType(_, inst->type_id())) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Result Type to be a scalar type or array of " + "scalar type."; + } + + // Tensor must be a Ranked Tensor. + auto op_tensor = inst->word(3); + auto inst_tensor = _.FindDef(op_tensor); + if (!inst_tensor || !IsRankedTensor(_, inst_tensor->type_id())) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Tensor to be an OpTypeTensorARM whose Rank is " + "specified"; + } + + // The scalar type must be the same as the Element Type of Tensor. + if (_.GetComponentType(inst_tensor->type_id()) != + _.GetComponentType(inst->type_id())) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Result Type to be the same as the Element Type of " + "Tensor."; + } + + // Coordinates is an array whose Element Type must be an integer type and + // whose Length must be equal to the Rank of Tensor. + auto op_coord = inst->word(4); + auto inst_coord = _.FindDef(op_coord); + auto tensor_rank = GetTensorTypeRank(_, inst_tensor->type_id()); + if (tensor_rank == 0 || + !_.IsIntArrayType(inst_coord->type_id(), tensor_rank)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Coordinates to be an array whose Element Type is an " + "integer type and whose Length is equal to the Rank of Tensor."; + } + + // Validate Tensor Operands + if (inst->words().size() > 5) { + auto toperands = static_cast(inst->word(5)); + if ((toperands & spv::TensorOperandsMask::OutOfBoundsValueARM) != + spv::TensorOperandsMask::MaskNone) { + if (inst->words().size() < 7) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "A value must be provided after the OutOfBoundsValueARM " + "Tensor Operand."; + } + auto op_oobval = inst->word(6); + auto inst_oobval = _.FindDef(op_oobval); + if (_.GetComponentType(inst_tensor->type_id()) != + _.GetComponentType(inst_oobval->type_id())) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Expected the type of the OutOfBoundsValueARM value to be " + "the same " + "as the Element Type of Tensor."; + } + } + if ((toperands & spv::TensorOperandsMask::MakeElementAvailableARM) != + spv::TensorOperandsMask::MaskNone) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "MakeElementAvailableARM cannot be used with OpTensorReadARM."; + } + if (((toperands & spv::TensorOperandsMask::MakeElementVisibleARM) != + spv::TensorOperandsMask::MaskNone) && + ((toperands & spv::TensorOperandsMask::NonPrivateElementARM) == + spv::TensorOperandsMask::MaskNone)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "MakeElementAvailableARM requires NonPrivateElementARM."; + } + } + + return SPV_SUCCESS; +} + +spv_result_t ValidateTensorWrite(ValidationState_t& _, + const Instruction* inst) { + // Tensor must be a Ranked Tensor. + auto op_tensor = inst->word(1); + auto inst_tensor = _.FindDef(op_tensor); + if (!IsRankedTensor(_, inst_tensor->type_id())) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Tensor to be an OpTypeTensorARM whose Rank is " + "specified"; + } + + // Coordinates is an array whose Element Type must be an integer type and + // whose Length must be equal to the Rank of Tensor. + auto op_coord = inst->word(2); + auto inst_coord = _.FindDef(op_coord); + auto tensor_rank = GetTensorTypeRank(_, inst_tensor->type_id()); + if (tensor_rank == 0 || + !_.IsIntArrayType(inst_coord->type_id(), tensor_rank)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Coordinates to be an array whose Element Type is an " + "integer type and whose Length is equal to the Rank of Tensor."; + } + + // Object must be an object of scalar type or array of scalar type. + // The scalar type must be the same as the Element Type of Tensor. + auto op_object = inst->word(3); + auto inst_object = _.FindDef(op_object); + if (!IsScalarTypeOrOrArrayOfScalarType(_, inst_object->type_id()) || + (_.GetComponentType(inst_object->type_id()) != + _.GetComponentType(inst_tensor->type_id()))) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Object to be a scalar type or array of scalar " + "type that is the same as the Element Type of Tensor."; + } + + // Validate Tensor Operands + if (inst->words().size() > 5) { + auto toperands = static_cast(inst->word(4)); + if ((toperands & spv::TensorOperandsMask::OutOfBoundsValueARM) != + spv::TensorOperandsMask::MaskNone) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "OutOfBoundsValue Tensor Operand not allowed with " + "OpTensorWriteARM."; + } + if ((toperands & spv::TensorOperandsMask::MakeElementVisibleARM) != + spv::TensorOperandsMask::MaskNone) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "MakeElementVisibleARM not allowed with OpTensorWriteARM."; + } + if (((toperands & spv::TensorOperandsMask::MakeElementAvailableARM) != + spv::TensorOperandsMask::MaskNone) && + ((toperands & spv::TensorOperandsMask::NonPrivateElementARM) == + spv::TensorOperandsMask::MaskNone)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "MakeElementAvailableARM requires NonPrivateElementARM."; + } + } + + return SPV_SUCCESS; +} + +spv_result_t ValidateTensorQuerySize(ValidationState_t& _, + const Instruction* inst) { + // Check result type + if (!_.IsIntScalarType(inst->type_id())) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Result Type to be an integer type scalar"; + } + + // Check Tensor operand + auto op_tensor = inst->word(3); + auto inst_tensor = _.FindDef(op_tensor); + if (!inst_tensor || !IsRankedTensor(_, inst_tensor->type_id())) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected Tensor to be an OpTypeTensorARM whose Rank is " + "specified"; + } + + // Check Dimension operand + auto op_dim = inst->word(4); + auto inst_dim = _.FindDef(op_dim); + if (!spvOpcodeIsConstant(inst_dim->opcode()) || + !_.IsIntScalarType(inst_dim->type_id())) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Dimension must come from a constant instruction of scalar " + "integer type."; + } + + auto inst_tensor_type = _.FindDef(inst_tensor->type_id()); + auto op_tensor_rank = inst_tensor_type->word(3); + uint64_t tensor_rank = 0; + uint64_t dim; + if (_.EvalConstantValUint64(op_tensor_rank, &tensor_rank) && + _.EvalConstantValUint64(op_dim, &dim) && (dim >= tensor_rank)) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Dimension (" << dim << ") must be less than the Rank of Tensor (" + << tensor_rank << ")."; + } + + return SPV_SUCCESS; +} + +} // namespace + +// Validates correctness of tensor instructions. +spv_result_t TensorPass(ValidationState_t& _, const Instruction* inst) { + (void)_; + const spv::Op opcode = inst->opcode(); + switch (opcode) { + case spv::Op::OpTensorReadARM: + return ValidateTensorRead(_, inst); + case spv::Op::OpTensorWriteARM: + return ValidateTensorWrite(_, inst); + case spv::Op::OpTensorQuerySizeARM: + return ValidateTensorQuerySize(_, inst); + default: + break; + } + return SPV_SUCCESS; +} + +} // namespace val +} // namespace spvtools diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_type.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_type.cpp index 5101a40..7a3105a 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validate_type.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validate_type.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2018 Google LLC. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // Copyright (c) 2024 NVIDIA Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -36,6 +38,7 @@ spv_result_t ValidateUniqueness(ValidationState_t& _, const Instruction* inst) { const auto opcode = inst->opcode(); if (opcode != spv::Op::OpTypeArray && opcode != spv::Op::OpTypeRuntimeArray && + opcode != spv::Op::OpTypeNodePayloadArrayAMDX && opcode != spv::Op::OpTypeStruct && opcode != spv::Op::OpTypePointer && opcode != spv::Op::OpTypeUntypedPointerKHR && !_.RegisterUniqueTypeDeclaration(inst)) { @@ -109,11 +112,16 @@ spv_result_t ValidateTypeFloat(ValidationState_t& _, const Instruction* inst) { // Int8, Int16, and Int64 capabilities allow using 8-bit, 16-bit, and 64-bit // integers, respectively. auto num_bits = inst->GetOperandAs(1); + const bool has_encoding = inst->operands().size() > 2; if (num_bits == 32) { return SPV_SUCCESS; } + auto operands = inst->words(); + if (num_bits == 16) { - if (_.features().declare_float16_type) { + // An absence of FP encoding implies IEEE 754. The Float16 and Float16Buffer + // capabilities only enable IEEE 754 binary 16 + if (has_encoding || _.features().declare_float16_type) { return SPV_SUCCESS; } return _.diag(SPV_ERROR_INVALID_DATA, inst) @@ -121,6 +129,32 @@ spv_result_t ValidateTypeFloat(ValidationState_t& _, const Instruction* inst) { << "type requires the Float16 or Float16Buffer capability," " or an extension that explicitly enables 16-bit floating point."; } + if (num_bits == 8) { + if (!_.features().declare_float8_type) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Using a 8-bit floating point " + << "type requires the Float8EXT capability."; + } + if (!has_encoding) { + // we don't support fp8 without encoding + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "8-bit floating point type requires an encoding."; + } + const spvtools::OperandDesc* desc; + const std::set known_encodings{ + spv::FPEncoding::Float8E4M3EXT, spv::FPEncoding::Float8E5M2EXT}; + spv_result_t status = spvtools::LookupOperand(SPV_OPERAND_TYPE_FPENCODING, + inst->words()[3], &desc); + if ((status != SPV_SUCCESS) || + (known_encodings.find(static_cast(desc->value)) == + known_encodings.end())) { + return _.diag(SPV_ERROR_INVALID_DATA, inst) + << "Unsupported 8-bit floating point encoding (" + << desc->name().data() << ")."; + } + + return SPV_SUCCESS; + } if (num_bits == 64) { if (_.HasCapability(spv::Capability::Float64)) { return SPV_SUCCESS; @@ -137,7 +171,24 @@ spv_result_t ValidateTypeVector(ValidationState_t& _, const Instruction* inst) { const auto component_index = 1; const auto component_id = inst->GetOperandAs(component_index); const auto component_type = _.FindDef(component_id); - if (!component_type || !spvOpcodeIsScalarType(component_type->opcode())) { + if (component_type) { + bool isPointer = component_type->opcode() == spv::Op::OpTypePointer; + bool isScalar = spvOpcodeIsScalarType(component_type->opcode()); + + if (_.HasCapability(spv::Capability::MaskedGatherScatterINTEL) && + !isPointer && !isScalar) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Invalid OpTypeVector Component Type " + << _.getIdName(component_id) + << ": Expected a scalar or pointer type when using the " + "SPV_INTEL_masked_gather_scatter extension."; + } else if (!_.HasCapability(spv::Capability::MaskedGatherScatterINTEL) && + !isScalar) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeVector Component Type " << _.getIdName(component_id) + << " is not a scalar type."; + } + } else { return _.diag(SPV_ERROR_INVALID_ID, inst) << "OpTypeVector Component Type " << _.getIdName(component_id) << " is not a scalar type."; @@ -166,6 +217,57 @@ spv_result_t ValidateTypeVector(ValidationState_t& _, const Instruction* inst) { return SPV_SUCCESS; } +spv_result_t ValidateTypeCooperativeVectorNV(ValidationState_t& _, + const Instruction* inst) { + const auto component_index = 1; + const auto component_type_id = inst->GetOperandAs(component_index); + const auto component_type = _.FindDef(component_type_id); + if (!component_type || (spv::Op::OpTypeFloat != component_type->opcode() && + spv::Op::OpTypeInt != component_type->opcode())) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeCooperativeVectorNV Component Type " + << _.getIdName(component_type_id) + << " is not a scalar numerical type."; + } + + const auto num_components_index = 2; + const auto num_components_id = + inst->GetOperandAs(num_components_index); + const auto num_components = _.FindDef(num_components_id); + if (!num_components || !spvOpcodeIsConstant(num_components->opcode())) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeCooperativeVectorNV component count " + << _.getIdName(num_components_id) + << " is not a scalar constant type."; + } + + // NOTE: Check the initialiser value of the constant + const auto const_inst = num_components->words(); + const auto const_result_type_index = 1; + const auto const_result_type = _.FindDef(const_inst[const_result_type_index]); + if (!const_result_type || spv::Op::OpTypeInt != const_result_type->opcode()) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeCooperativeVectorNV component count " + << _.getIdName(num_components_id) + << " is not a constant integer type."; + } + + int64_t num_components_value; + if (_.EvalConstantValInt64(num_components_id, &num_components_value)) { + auto& type_words = const_result_type->words(); + const bool is_signed = type_words[3] > 0; + if (num_components_value == 0 || (num_components_value < 0 && is_signed)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeCooperativeVectorNV component count " + << _.getIdName(num_components_id) + << " default value must be at least 1: found " + << num_components_value; + } + } + + return SPV_SUCCESS; +} + spv_result_t ValidateTypeMatrix(ValidationState_t& _, const Instruction* inst) { const auto column_type_index = 1; const auto column_type_id = inst->GetOperandAs(column_type_index); @@ -212,6 +314,18 @@ spv_result_t ValidateTypeArray(ValidationState_t& _, const Instruction* inst) { << " is a void type."; } + if (_.HasCapability(spv::Capability::Shader)) { + if (element_type->opcode() == spv::Op::OpTypeStruct && + (_.HasDecoration(element_type->id(), spv::Decoration::Block) || + _.HasDecoration(element_type->id(), spv::Decoration::BufferBlock))) { + if (_.HasDecoration(inst->id(), spv::Decoration::ArrayStride)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Array containing a Block or BufferBlock must not be " + "decorated with ArrayStride"; + } + } + } + if (spvIsVulkanEnv(_.context()->target_env) && element_type->opcode() == spv::Op::OpTypeRuntimeArray) { return _.diag(SPV_ERROR_INVALID_ID, inst) @@ -270,6 +384,18 @@ spv_result_t ValidateTypeRuntimeArray(ValidationState_t& _, << " is a void type."; } + if (_.HasCapability(spv::Capability::Shader)) { + if (element_type->opcode() == spv::Op::OpTypeStruct && + (_.HasDecoration(element_type->id(), spv::Decoration::Block) || + _.HasDecoration(element_type->id(), spv::Decoration::BufferBlock))) { + if (_.HasDecoration(inst->id(), spv::Decoration::ArrayStride)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "Array containing a Block or BufferBlock must not be " + "decorated with ArrayStride"; + } + } + } + if (spvIsVulkanEnv(_.context()->target_env) && element_type->opcode() == spv::Op::OpTypeRuntimeArray) { return _.diag(SPV_ERROR_INVALID_ID, inst) @@ -340,13 +466,20 @@ spv_result_t ValidateTypeStruct(ValidationState_t& _, const Instruction* inst) { // Struct members start at word 2 of OpTypeStruct instruction. for (size_t word_i = 2; word_i < inst->words().size(); ++word_i) { auto member = inst->word(word_i); - auto memberTypeInstr = _.FindDef(member); - if (memberTypeInstr && spv::Op::OpTypeStruct == memberTypeInstr->opcode()) { - if (_.HasDecoration(memberTypeInstr->id(), spv::Decoration::Block) || - _.HasDecoration(memberTypeInstr->id(), - spv::Decoration::BufferBlock) || - _.GetHasNestedBlockOrBufferBlockStruct(memberTypeInstr->id())) - has_nested_blockOrBufferBlock_struct = true; + if (_.ContainsType( + member, + [&_](const Instruction* type_inst) { + if (type_inst->opcode() == spv::Op::OpTypeStruct && + (_.HasDecoration(type_inst->id(), spv::Decoration::Block) || + _.HasDecoration(type_inst->id(), + spv::Decoration::BufferBlock))) { + return true; + } + return false; + }, + /* traverse_all_types = */ false)) { + has_nested_blockOrBufferBlock_struct = true; + break; } } @@ -541,6 +674,24 @@ spv_result_t ValidateTypeCooperativeMatrix(ValidationState_t& _, << " is not a scalar numerical type."; } + if (_.IsBfloat16ScalarType(component_type_id)) { + if (!_.HasCapability(spv::Capability::BFloat16CooperativeMatrixKHR)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeCooperativeMatrix Component Type " + << _.getIdName(component_type_id) + << "require BFloat16CooperativeMatrixKHR be declared."; + } + } + + if (_.IsFP8ScalarType(component_type_id)) { + if (!_.HasCapability(spv::Capability::Float8CooperativeMatrixEXT)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeCooperativeMatrix Component Type " + << _.getIdName(component_type_id) + << "require Float8CooperativeMatrixEXT be declared."; + } + } + const auto scope_index = 2; const auto scope_id = inst->GetOperandAs(scope_index); const auto scope = _.FindDef(scope_id); @@ -752,6 +903,82 @@ spv_result_t ValidateTypeTensorViewNV(ValidationState_t& _, return SPV_SUCCESS; } + +spv_result_t ValidateTypeTensorARM(ValidationState_t& _, + const Instruction* inst) { + // Element type must be a scalar type + const auto element_type_index = 1; + const auto element_type_id = inst->GetOperandAs(element_type_index); + const auto element_type = _.FindDef(element_type_id); + if (!element_type || (!_.IsFloatScalarType(element_type_id) && + !_.IsIntScalarType(element_type_id) && + !_.IsBoolScalarType(element_type_id))) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeTensorARM Element Type " + << _.getIdName(element_type_id) << " is not a scalar type."; + } + + if (inst->operands().size() < 3) { + return SPV_SUCCESS; + } + + // Rank must be constant instruction with scalar integer type + const auto rank_index = 2; + const auto rank_id = inst->GetOperandAs(rank_index); + const auto rank = _.FindDef(rank_id); + if (!rank || !spvOpcodeIsConstant(rank->opcode())) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeTensorARM Rank " << _.getIdName(rank_id) + << " is not a constant instruction."; + } + // Rank must have scalar integer type + if (!rank || !_.IsIntScalarType(rank->type_id())) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeTensorARM Rank " << _.getIdName(rank_id) + << " does not have a scalar integer type."; + } + // Rank must be greater than 0 + uint64_t rank_value = 0; + if (_.EvalConstantValUint64(rank_id, &rank_value) && rank_value == 0) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeTensorARM Rank " << _.getIdName(rank_id) + << " must define a value greater than 0."; + } + + if (inst->operands().size() < 4) { + return SPV_SUCCESS; + } + + // Shape must be constant instruction + const auto shape_index = 3; + const auto shape_id = inst->GetOperandAs(shape_index); + const auto shape = _.FindDef(shape_id); + if (!shape || !spvOpcodeIsConstant(shape->opcode())) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeTensorARM Shape " << _.getIdName(shape_id) + << " is not a constant instruction."; + } + + // Shape must be array of integer of length rank + if (!_.IsIntArrayType(shape->type_id(), rank_value)) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeTensorARM Shape " << _.getIdName(shape_id) + << " is not an array of integer type whose Length is equal to Rank."; + } + + // Shape constituents must be greater than 0 + for (size_t i = 2; i < shape->operands().size(); i++) { + const auto s_id = shape->GetOperandAs(i); + uint64_t s_val = 0; + if (_.EvalConstantValUint64(s_id, &s_val) && s_val == 0) { + return _.diag(SPV_ERROR_INVALID_ID, inst) + << "OpTypeTensorARM Shape constituent " << i - 2 + << " is not greater than 0."; + } + } + + return SPV_SUCCESS; +} } // namespace spv_result_t TypePass(ValidationState_t& _, const Instruction* inst) { @@ -797,6 +1024,9 @@ spv_result_t TypePass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpTypeCooperativeMatrixKHR: if (auto error = ValidateTypeCooperativeMatrix(_, inst)) return error; break; + case spv::Op::OpTypeCooperativeVectorNV: + if (auto error = ValidateTypeCooperativeVectorNV(_, inst)) return error; + break; case spv::Op::OpTypeUntypedPointerKHR: if (auto error = ValidateTypeUntypedPointerKHR(_, inst)) return error; break; @@ -806,6 +1036,9 @@ spv_result_t TypePass(ValidationState_t& _, const Instruction* inst) { case spv::Op::OpTypeTensorViewNV: if (auto error = ValidateTypeTensorViewNV(_, inst)) return error; break; + case spv::Op::OpTypeTensorARM: + if (auto error = ValidateTypeTensorARM(_, inst)) return error; + break; default: break; } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validation_state.cpp b/libs/bgfx/3rdparty/spirv-tools/source/val/validation_state.cpp index da9174f..f302841 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validation_state.cpp +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validation_state.cpp @@ -1,4 +1,6 @@ // Copyright (c) 2015-2016 The Khronos Group Inc. +// Modifications Copyright (C) 2024 Advanced Micro Devices, Inc. All rights +// reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -21,6 +23,7 @@ #include "source/opcode.h" #include "source/spirv_constant.h" #include "source/spirv_target_env.h" +#include "source/table2.h" #include "source/util/make_unique.h" #include "source/val/basic_block.h" #include "source/val/construct.h" @@ -71,6 +74,7 @@ ModuleLayoutSection InstructionLayoutSection( case spv::Op::OpMemberDecorateStringGOOGLE: return kLayoutAnnotations; case spv::Op::OpTypeForwardPointer: + case spv::Op::OpTypeTaskSequenceINTEL: return kLayoutTypes; case spv::Op::OpVariable: case spv::Op::OpUntypedVariableKHR: @@ -365,11 +369,11 @@ void ValidationState_t::RegisterCapability(spv::Capability cap) { if (module_capabilities_.contains(cap)) return; module_capabilities_.insert(cap); - spv_operand_desc desc; - if (SPV_SUCCESS == grammar_.lookupOperand(SPV_OPERAND_TYPE_CAPABILITY, - uint32_t(cap), &desc)) { - for (auto capability : - CapabilitySet(desc->numCapabilities, desc->capabilities)) { + const spvtools::OperandDesc* desc = nullptr; + if (SPV_SUCCESS == spvtools::LookupOperand(SPV_OPERAND_TYPE_CAPABILITY, + uint32_t(cap), &desc)) { + for (auto capability : CapabilitySet(desc->capabilities_range.count(), + desc->capabilities().data())) { RegisterCapability(capability); } } @@ -395,6 +399,9 @@ void ValidationState_t::RegisterCapability(spv::Capability cap) { case spv::Capability::Float16Buffer: features_.declare_float16_type = true; break; + case spv::Capability::Float8EXT: + features_.declare_float8_type = true; + break; case spv::Capability::StorageUniformBufferBlock16: case spv::Capability::StorageUniform16: case spv::Capability::StoragePushConstant16: @@ -881,6 +888,10 @@ uint32_t ValidationState_t::GetComponentType(uint32_t id) const { case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: + return inst->word(2); + + case spv::Op::OpTypeTensorARM: return inst->word(2); default: @@ -909,6 +920,7 @@ uint32_t ValidationState_t::GetDimension(uint32_t id) const { case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: // Actual dimension isn't known, return 0 return 0; @@ -942,11 +954,85 @@ bool ValidationState_t::IsVoidType(uint32_t id) const { return inst && inst->opcode() == spv::Op::OpTypeVoid; } +bool ValidationState_t::IsScalarType(uint32_t id) const { + return IsIntScalarType(id) || IsFloatScalarType(id) || IsBoolScalarType(id); +} + +bool ValidationState_t::IsBfloat16ScalarType(uint32_t id) const { + const Instruction* inst = FindDef(id); + if (inst && inst->opcode() == spv::Op::OpTypeFloat) { + if (inst->words().size() > 3) { + if (inst->GetOperandAs(2) == + spv::FPEncoding::BFloat16KHR) { + return true; + } + } + } + return false; +} + +bool ValidationState_t::IsBfloat16VectorType(uint32_t id) const { + const Instruction* inst = FindDef(id); + if (!inst) { + return false; + } + + if (inst->opcode() == spv::Op::OpTypeVector) { + return IsBfloat16ScalarType(GetComponentType(id)); + } + + return false; +} + +bool ValidationState_t::IsFP8ScalarType(uint32_t id) const { + const Instruction* inst = FindDef(id); + if (inst && inst->opcode() == spv::Op::OpTypeFloat) { + if (inst->words().size() > 3) { + auto encoding = inst->GetOperandAs(2); + if ((encoding == spv::FPEncoding::Float8E4M3EXT) || + (encoding == spv::FPEncoding::Float8E5M2EXT)) { + return true; + } + } + } + return false; +} + +bool ValidationState_t::IsFP8VectorType(uint32_t id) const { + const Instruction* inst = FindDef(id); + if (!inst) { + return false; + } + + if (inst->opcode() == spv::Op::OpTypeVector) { + return IsFP8ScalarType(GetComponentType(id)); + } + + return false; +} + +bool ValidationState_t::IsFP8ScalarOrVectorType(uint32_t id) const { + return IsFP8ScalarType(id) || IsFP8VectorType(id); +} + bool ValidationState_t::IsFloatScalarType(uint32_t id) const { const Instruction* inst = FindDef(id); return inst && inst->opcode() == spv::Op::OpTypeFloat; } +bool ValidationState_t::IsFloatArrayType(uint32_t id) const { + const Instruction* inst = FindDef(id); + if (!inst) { + return false; + } + + if (inst->opcode() == spv::Op::OpTypeArray) { + return IsFloatScalarType(GetComponentType(id)); + } + + return false; +} + bool ValidationState_t::IsFloatVectorType(uint32_t id) const { const Instruction* inst = FindDef(id); if (!inst) { @@ -996,17 +1082,31 @@ bool ValidationState_t::IsIntScalarType(uint32_t id) const { return inst && inst->opcode() == spv::Op::OpTypeInt; } -bool ValidationState_t::IsIntArrayType(uint32_t id) const { +bool ValidationState_t::IsIntArrayType(uint32_t id, uint64_t length) const { const Instruction* inst = FindDef(id); if (!inst) { return false; } - if (inst->opcode() == spv::Op::OpTypeArray) { - return IsIntScalarType(GetComponentType(id)); + if (inst->opcode() != spv::Op::OpTypeArray) { + return false; } - return false; + if (!IsIntScalarType(GetComponentType(id))) { + return false; + } + + if (length != 0) { + const auto len_id = inst->GetOperandAs(2); + const auto len = FindDef(len_id); + uint64_t len_value = 0; + if (!len || !spvOpcodeIsConstant(len->opcode()) || + (EvalConstantValUint64(len_id, &len_value) && (length != len_value))) { + return false; + } + } + + return true; } bool ValidationState_t::IsIntVectorType(uint32_t id) const { @@ -1185,6 +1285,7 @@ bool ValidationState_t::GetStructMemberTypes( } bool ValidationState_t::IsPointerType(uint32_t id) const { + if (!id) return false; const Instruction* inst = FindDef(id); assert(inst); return inst->opcode() == spv::Op::OpTypePointer || @@ -1289,6 +1390,27 @@ bool ValidationState_t::IsUnsigned64BitHandle(uint32_t id) const { GetBitWidth(id) == 32)); } +bool ValidationState_t::IsCooperativeVectorNVType(uint32_t id) const { + const Instruction* inst = FindDef(id); + return inst && inst->opcode() == spv::Op::OpTypeCooperativeVectorNV; +} + +bool ValidationState_t::IsFloatCooperativeVectorNVType(uint32_t id) const { + if (!IsCooperativeVectorNVType(id)) return false; + return IsFloatScalarType(FindDef(id)->word(2)); +} + +bool ValidationState_t::IsIntCooperativeVectorNVType(uint32_t id) const { + if (!IsCooperativeVectorNVType(id)) return false; + return IsIntScalarType(FindDef(id)->word(2)); +} + +bool ValidationState_t::IsUnsignedIntCooperativeVectorNVType( + uint32_t id) const { + if (!IsCooperativeVectorNVType(id)) return false; + return IsUnsignedIntScalarType(FindDef(id)->word(2)); +} + spv_result_t ValidationState_t::CooperativeMatrixShapesMatch( const Instruction* inst, uint32_t result_type_id, uint32_t m2, bool is_conversion, bool swap_row_col) { @@ -1372,6 +1494,36 @@ spv_result_t ValidationState_t::CooperativeMatrixShapesMatch( return SPV_SUCCESS; } +spv_result_t ValidationState_t::CooperativeVectorDimensionsMatch( + const Instruction* inst, uint32_t v1, uint32_t v2) { + const auto v1_type = FindDef(v1); + const auto v2_type = FindDef(v2); + + if (v1_type->opcode() != v2_type->opcode()) { + return diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected cooperative vector types"; + } + + uint32_t v1_components_id = v1_type->GetOperandAs(2); + uint32_t v2_components_id = v2_type->GetOperandAs(2); + + bool v1_is_int32 = false, v1_is_const_int32 = false, v2_is_int32 = false, + v2_is_const_int32 = false; + uint32_t v1_value = 0, v2_value = 0; + + std::tie(v1_is_int32, v1_is_const_int32, v1_value) = + EvalInt32IfConst(v1_components_id); + std::tie(v2_is_int32, v2_is_const_int32, v2_value) = + EvalInt32IfConst(v2_components_id); + + if (v1_is_const_int32 && v2_is_const_int32 && v1_value != v2_value) { + return diag(SPV_ERROR_INVALID_DATA, inst) + << "Expected number of components to be identical"; + } + + return SPV_SUCCESS; +} + uint32_t ValidationState_t::GetOperandTypeId(const Instruction* inst, size_t operand_index) const { return GetTypeId(inst->GetOperandAs(operand_index)); @@ -1664,6 +1816,7 @@ bool ValidationState_t::ContainsType( case spv::Op::OpTypeSampledImage: case spv::Op::OpTypeCooperativeMatrixNV: case spv::Op::OpTypeCooperativeMatrixKHR: + case spv::Op::OpTypeCooperativeVectorNV: return ContainsType(inst->GetOperandAs(1u), f, traverse_all_types); case spv::Op::OpTypePointer: @@ -1698,6 +1851,10 @@ bool ValidationState_t::ContainsSizedIntOrFloatType(uint32_t id, spv::Op type, const auto f = [type, width](const Instruction* inst) { if (inst->opcode() == type) { + // Bfloat16 is a special type. + if (type == spv::Op::OpTypeFloat && inst->words().size() > 3) + return false; + return inst->GetOperandAs(1u) == width; } return false; @@ -1781,6 +1938,8 @@ bool ValidationState_t::IsValidStorageClass( case spv::StorageClass::TaskPayloadWorkgroupEXT: case spv::StorageClass::HitObjectAttributeNV: case spv::StorageClass::TileImageEXT: + case spv::StorageClass::NodePayloadAMDX: + case spv::StorageClass::TileAttachmentQCOM: return true; default: return false; @@ -2054,6 +2213,8 @@ std::string ValidationState_t::VkErrorID(uint32_t id, return VUID_WRAP(VUID-PrimitiveId-PrimitiveId-04330); case 4334: return VUID_WRAP(VUID-PrimitiveId-PrimitiveId-04334); + case 4336: + return VUID_WRAP(VUID-PrimitiveId-PrimitiveId-04336); case 4337: return VUID_WRAP(VUID-PrimitiveId-PrimitiveId-04337); case 4345: @@ -2238,6 +2399,8 @@ std::string ValidationState_t::VkErrorID(uint32_t id, return VUID_WRAP(VUID-StandaloneSpirv-None-04644); case 4645: return VUID_WRAP(VUID-StandaloneSpirv-None-04645); + case 10609: + return VUID_WRAP(VUID-StandaloneSpirv-OpControlBarrier-10609); case 4650: return VUID_WRAP(VUID-StandaloneSpirv-OpControlBarrier-04650); case 4651: @@ -2258,8 +2421,6 @@ std::string ValidationState_t::VkErrorID(uint32_t id, return VUID_WRAP(VUID-StandaloneSpirv-OpImageTexelPointer-04658); case 4659: return VUID_WRAP(VUID-StandaloneSpirv-OpImageQuerySizeLod-04659); - case 4663: - return VUID_WRAP(VUID-StandaloneSpirv-Offset-04663); case 4664: return VUID_WRAP(VUID-StandaloneSpirv-OpImageGather-04664); case 4667: @@ -2344,8 +2505,6 @@ std::string ValidationState_t::VkErrorID(uint32_t id, return VUID_WRAP(VUID-StandaloneSpirv-Component-04922); case 4923: return VUID_WRAP(VUID-StandaloneSpirv-Component-04923); - case 4924: - return VUID_WRAP(VUID-StandaloneSpirv-Component-04924); case 6201: return VUID_WRAP(VUID-StandaloneSpirv-Flat-06201); case 6202: @@ -2382,30 +2541,62 @@ std::string ValidationState_t::VkErrorID(uint32_t id, return VUID_WRAP(VUID-StandaloneSpirv-OpTypeImage-06924); case 6925: return VUID_WRAP(VUID-StandaloneSpirv-Uniform-06925); + case 7034: + return VUID_WRAP(VUID-CullPrimitiveEXT-CullPrimitiveEXT-07034); + case 7035: + return VUID_WRAP(VUID-CullPrimitiveEXT-CullPrimitiveEXT-07035); + case 7036: + return VUID_WRAP(VUID-CullPrimitiveEXT-CullPrimitiveEXT-07036); + case 7038: + return VUID_WRAP(VUID-CullPrimitiveEXT-CullPrimitiveEXT-07038); + case 7039: + return VUID_WRAP(VUID-Layer-Layer-07039); + case 7040: + return VUID_WRAP(VUID-PrimitiveId-PrimitiveId-07040); case 7041: return VUID_WRAP(VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07041); + case 7042: + return VUID_WRAP(VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07042); case 7043: return VUID_WRAP(VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07043); case 7044: return VUID_WRAP(VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07044); + case 7046: + return VUID_WRAP(VUID-PrimitivePointIndicesEXT-PrimitivePointIndicesEXT-07046); case 7047: return VUID_WRAP(VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07047); + case 7048: + return VUID_WRAP(VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07048); case 7049: return VUID_WRAP(VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07049); case 7050: return VUID_WRAP(VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07050); + case 7052: + return VUID_WRAP(VUID-PrimitiveLineIndicesEXT-PrimitiveLineIndicesEXT-07052); case 7053: return VUID_WRAP(VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07053); + case 7054: + return VUID_WRAP(VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07054); case 7055: return VUID_WRAP(VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07055); case 7056: return VUID_WRAP(VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07056); + case 7058: + return VUID_WRAP(VUID-PrimitiveTriangleIndicesEXT-PrimitiveTriangleIndicesEXT-07058); + case 7059: + return VUID_WRAP(VUID-PrimitiveShadingRateKHR-PrimitiveShadingRateKHR-07059); + case 7060: + return VUID_WRAP(VUID-ViewportIndex-ViewportIndex-07060); case 7102: return VUID_WRAP(VUID-StandaloneSpirv-MeshEXT-07102); - case 7320: - return VUID_WRAP(VUID-StandaloneSpirv-ExecutionModel-07320); case 7290: return VUID_WRAP(VUID-StandaloneSpirv-Input-07290); + case 7320: + return VUID_WRAP(VUID-StandaloneSpirv-ExecutionModel-07320); + case 7330: + return VUID_WRAP(VUID-StandaloneSpirv-MeshEXT-07330); + case 7331: + return VUID_WRAP(VUID-StandaloneSpirv-MeshEXT-07331); case 7650: return VUID_WRAP(VUID-StandaloneSpirv-Base-07650); case 7651: @@ -2422,12 +2613,25 @@ std::string ValidationState_t::VkErrorID(uint32_t id, return VUID_WRAP(VUID-StandaloneSpirv-OpEntryPoint-08722); case 8973: return VUID_WRAP(VUID-StandaloneSpirv-Pointer-08973); + case 9557: + return VUID_WRAP(VUID-StandaloneSpirv-Input-09557); case 9638: return VUID_WRAP(VUID-StandaloneSpirv-OpTypeImage-09638); case 9658: return VUID_WRAP(VUID-StandaloneSpirv-OpEntryPoint-09658); case 9659: return VUID_WRAP(VUID-StandaloneSpirv-OpEntryPoint-09659); + case 10213: + // This use to be a standalone, but maintenance8 will set allow_offset_texture_operand now + return VUID_WRAP(VUID-RuntimeSpirv-Offset-10213); + case 10370: + return VUID_WRAP(VUID-StandaloneSpirv-OpTypeFloat-10370); + case 10583: + return VUID_WRAP(VUID-StandaloneSpirv-Component-10583); + case 10684: + return VUID_WRAP(VUID-StandaloneSpirv-None-10684); + case 10685: + return VUID_WRAP(VUID-StandaloneSpirv-None-10685); default: return ""; // unknown id } diff --git a/libs/bgfx/3rdparty/spirv-tools/source/val/validation_state.h b/libs/bgfx/3rdparty/spirv-tools/source/val/validation_state.h index 44551ad..366fb84 100644 --- a/libs/bgfx/3rdparty/spirv-tools/source/val/validation_state.h +++ b/libs/bgfx/3rdparty/spirv-tools/source/val/validation_state.h @@ -32,6 +32,7 @@ #include "source/name_mapper.h" #include "source/spirv_definition.h" #include "source/spirv_validator_options.h" +#include "source/table2.h" #include "source/val/decoration.h" #include "source/val/function.h" #include "source/val/instruction.h" @@ -67,6 +68,7 @@ class ValidationState_t { struct Feature { bool declare_int16_type = false; // Allow OpTypeInt with 16 bit width? bool declare_float16_type = false; // Allow OpTypeFloat with 16 bit width? + bool declare_float8_type = false; // Allow OpTypeFloat with 8 bit width? bool free_fp_rounding_mode = false; // Allow the FPRoundingMode decoration // and its values to be used without // requiring any capability @@ -245,6 +247,24 @@ class ValidationState_t { const Instruction* inst) { entry_point_to_local_size_or_id_[entry_point] = inst; } + + /// Registers that the entry point maximum number of primitives + /// mesh shader will ever emit + void RegisterEntryPointOutputPrimitivesEXT(uint32_t entry_point, + const Instruction* inst) { + entry_point_to_output_primitives_[entry_point] = inst; + } + + /// Returns the maximum number of primitives mesh shader can emit + uint32_t GetOutputPrimitivesEXT(uint32_t entry_point) { + auto entry = entry_point_to_output_primitives_.find(entry_point); + if (entry != entry_point_to_output_primitives_.end()) { + auto inst = entry->second; + return inst->GetOperandAs(2); + } + return 0; + } + /// Returns whether the entry point declares its local size bool EntryPointHasLocalSizeOrId(uint32_t entry_point) const { return entry_point_to_local_size_or_id_.find(entry_point) != @@ -615,13 +635,20 @@ class ValidationState_t { // Returns true iff |id| is a type corresponding to the name of the function. // Only works for types not for objects. bool IsVoidType(uint32_t id) const; + bool IsScalarType(uint32_t id) const; + bool IsBfloat16ScalarType(uint32_t id) const; + bool IsBfloat16VectorType(uint32_t id) const; + bool IsFP8ScalarType(uint32_t id) const; + bool IsFP8VectorType(uint32_t id) const; + bool IsFP8ScalarOrVectorType(uint32_t id) const; bool IsFloatScalarType(uint32_t id) const; + bool IsFloatArrayType(uint32_t id) const; bool IsFloatVectorType(uint32_t id) const; bool IsFloat16Vector2Or4Type(uint32_t id) const; bool IsFloatScalarOrVectorType(uint32_t id) const; bool IsFloatMatrixType(uint32_t id) const; bool IsIntScalarType(uint32_t id) const; - bool IsIntArrayType(uint32_t id) const; + bool IsIntArrayType(uint32_t id, uint64_t length = 0) const; bool IsIntVectorType(uint32_t id) const; bool IsIntScalarOrVectorType(uint32_t id) const; bool IsUnsignedIntScalarType(uint32_t id) const; @@ -644,6 +671,10 @@ class ValidationState_t { bool IsIntCooperativeMatrixType(uint32_t id) const; bool IsUnsignedIntCooperativeMatrixType(uint32_t id) const; bool IsUnsigned64BitHandle(uint32_t id) const; + bool IsCooperativeVectorNVType(uint32_t id) const; + bool IsFloatCooperativeVectorNVType(uint32_t id) const; + bool IsIntCooperativeVectorNVType(uint32_t id) const; + bool IsUnsignedIntCooperativeVectorNVType(uint32_t id) const; // Returns true if |id| is a type id that contains |type| (or integer or // floating point type) of |width| bits. @@ -763,12 +794,12 @@ class ValidationState_t { // Returns the string name for |decoration|. std::string SpvDecorationString(uint32_t decoration) { - spv_operand_desc desc = nullptr; - if (grammar_.lookupOperand(SPV_OPERAND_TYPE_DECORATION, decoration, - &desc) != SPV_SUCCESS) { + const spvtools::OperandDesc* desc = nullptr; + if (spvtools::LookupOperand(SPV_OPERAND_TYPE_DECORATION, decoration, + &desc) != SPV_SUCCESS) { return std::string("Unknown"); } - return std::string(desc->name); + return std::string(desc->name().data()); } std::string SpvDecorationString(spv::Decoration decoration) { return SpvDecorationString(uint32_t(decoration)); @@ -783,6 +814,9 @@ class ValidationState_t { uint32_t m2, bool is_conversion, bool swap_row_col = false); + spv_result_t CooperativeVectorDimensionsMatch(const Instruction* inst, + uint32_t v1, uint32_t v2); + // Returns true if |lhs| and |rhs| logically match and, if the decorations of // |rhs| are a subset of |lhs|. // @@ -971,6 +1005,10 @@ class ValidationState_t { std::unordered_map entry_point_to_local_size_or_id_; + // Mapping entry point -> OutputPrimitivesEXT execution mode instruction + std::unordered_map + entry_point_to_output_primitives_; + /// Mapping function -> array of entry points inside this /// module which can (indirectly) call the function. std::unordered_map> function_to_entry_points_; diff --git a/libs/bgfx/CONTRIBUTING.md b/libs/bgfx/CONTRIBUTING.md index d45bd53..dd25c63 100644 --- a/libs/bgfx/CONTRIBUTING.md +++ b/libs/bgfx/CONTRIBUTING.md @@ -5,7 +5,7 @@ different platforms, writing examples (see [Help Needed](https://github.com/bkar for ideas), improving documentation, profiling and optimizing, helping newcomers, telling others about bgfx, etc. -If you have just quick oneliner question it's prefereable to ask it at chat +If you have just quick oneliner question it's preferable to ask it at chat https://discord.gg/9eMbv7J instead opening new issue. ## Submitting bugs diff --git a/libs/bgfx/LICENSE b/libs/bgfx/LICENSE index 0edd62e..8ff0ed7 100644 --- a/libs/bgfx/LICENSE +++ b/libs/bgfx/LICENSE @@ -1,4 +1,4 @@ -Copyright 2010-2024 Branimir Karadzic +Copyright 2010-2025 Branimir Karadzic Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/libs/bgfx/README.md b/libs/bgfx/README.md index a92b240..2aff509 100644 --- a/libs/bgfx/README.md +++ b/libs/bgfx/README.md @@ -46,7 +46,7 @@ Supported rendering backends: Supported platforms: - * Android (14+) + * Android (4.0+) - API 14 or later * iOS/iPadOS/tvOS (16.0+) * Linux * macOS (13.0+) @@ -59,8 +59,8 @@ Supported platforms: Supported compilers: * Clang 11 and above - * GCC 8 and above - * VS2019 and above + * GCC 11 and above + * VS2022 and above * Apple clang 12 and above Languages: @@ -120,8 +120,8 @@ https://github.com/andr3wmac/Torque6 - Torque 6 is an MIT licensed 3D engine loosely based on Torque2D. Being neither Torque2D or Torque3D it is the 6th derivative of the original Torque Engine. -Torque 6 Material Editor ## Kepler Orbits @@ -148,7 +148,7 @@ C++ and using bgfx to support multiple rendering APIs. http://makingartstudios.itch.io/dls - DLS, the digital logic simulator game. DLS - Creating a 4-bit Register @@ -168,8 +168,8 @@ https://blackshift.itch.io/blackshift - Blackshift is a grid-based, space-themed action puzzle game which isn't afraid of complexity - think Chip's Challenge on crack. -Blackshift Trailer, May 2016 @@ -179,8 +179,8 @@ https://eheitzresearch.wordpress.com/415-2/ - Real-Time Polygonal-Light Shading with Linearly Transformed Cosines, Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt, ACM SIGGRAPH 2016. -Real-Time Polygonal-Light Shading with Linearly Transformed Cosines @@ -190,8 +190,8 @@ http://www.dogbytegames.com/dead_venture.html - Dead Venture is a new Drive 'N Gun game where you help a handful of survivals reach the safe haven: a military base on a far island. -Dead Venture - Gameplay Teaser (iOS / Android) @@ -201,14 +201,14 @@ https://github.com/degenerated1123/REGoth - REGoth is an open-source reimplementation of the zEngine, used by the game "Gothic" and "Gothic II". REGoth Engine ## Ethereal Engine https://github.com/volcoma/EtherealEngine - EtherealEngine is a C++ game engine -and WYSIWYG dditor. +and WYSIWYG editor. ![EtherealEngine screenshot](https://user-images.githubusercontent.com/1499411/29488403-ff3c3df6-8512-11e7-869f-32a783530cc3.png) @@ -217,8 +217,8 @@ and WYSIWYG dditor. http://gorallygame.com/ - Go Rally is top-down rally game with a career mode, multiplayer time challenges, and a track creator. -Go Rally @@ -237,8 +237,8 @@ open-world offroad driving game: explore massive landscapes, complete challenges, smash zombies, find secret locations, unlock and upgrade cars and weapons, it's up to you! -Zombie Safari - Official Gameplay Trailer (Android) @@ -246,11 +246,11 @@ width="640" height="480" border="0" /> http://www.smithandwinston.com/ - Smith and Winston is an exploration twin stick shooter for PC, PS4 & XBoxOne arriving in late 2018. Smith and Winston features -a massively destructable voxel world, rapid twin stick combat, physics puzzles +a massively destructible voxel world, rapid twin stick combat, physics puzzles and Metroid-style discovery. -Smith and Winston: Gameplay Video @@ -260,8 +260,8 @@ http://www.footballmanager.com/ - Football Manager 2018 is a 2017 football management simulation video game developed by Sports Interactive and published by Sega. -Match Engine | Football Manager 2018 @@ -271,8 +271,8 @@ http://wonderworlds.me/ - WonderWorlds is a place to play thousands of user-created levels and stories, make your own using the extensive in-game tools and share them with whomever you want. -WonderWorlds @@ -288,8 +288,8 @@ focused towards live graphical apps and games. https://outfit7.com/apps/talking-tom-pool/ - A "sling and match" puzzle game for mobile devices. -Talking Tom Pool @@ -306,8 +306,8 @@ engine v3.0. http://www.dogbytegames.com/off_the_road.html - A sandbox off-road driving simulator. -Off The Road @@ -321,8 +321,8 @@ https://beardsvibe.com/ - A multiplayer PVP rhythm game. https://outfit7.com/apps/my-talking-tom-2/ - Many mini games for mobile devices. -My Talking Tom 2 @@ -346,8 +346,8 @@ Hammerwatch. Encounter endless hordes of enemies, traps, puzzles, secrets and lots of loot, as you battle your way through procedurally generated levels to reach the top of the Forsaken Spire. -Heroes of Hammerwatch @@ -365,8 +365,8 @@ SIGGRAPH 2019: Project Nira: Instant Interactive Real-Time Access to Multi-Gigabyte Sized 3D Assets on Any Device: https://s2019.siggraph.org/presentation/?sess=sess104&id=real_130#038;id=real_130 -Heroes of Hammerwatch @@ -468,8 +468,8 @@ vehicle you bet you can hop into it! Pilot big rigs, helicopters, boats, airplanes or even trains. Sand dunes, frozen plains, mountains to climb and conquer. -Off The Road Unleashed @@ -488,8 +488,8 @@ https://klei.com/games/griftlands - Griftlands is a roguelike deck-building game with role-playing story elements in a science fiction setting, developed and published by Klei Entertainment. -Griftlands @@ -508,8 +508,8 @@ Evoke 2022 demoparty. https://github.com/astrofra/demo-marine-melodies -Marine Melodies @@ -570,13 +570,13 @@ https://prototwin.com - Online industrial simulation software for manufacturing ## WARCANA -WARCANA is a fantasy inspired base defence, RTS game with a deck-building mechanic. -Face hundreds of thousands of unrelenting monsters in a battle royale between 30 other -mighty magicians. Build your deck. Prepare your defences. Summon your armies. +WARCANA is a fantasy inspired base defence, RTS game with a deck-building mechanic. +Face hundreds of thousands of unrelenting monsters in a battle royale between 30 other +mighty magicians. Build your deck. Prepare your defences. Summon your armies. Survive the onslaught. -WARCANA Announcement Trailer ## DiskBoard @@ -623,11 +623,11 @@ legacy Direct3D renderer with bgfx. ## Braid, Anniversary Edition -https://play.google.com/store/apps/details?id=com.netflix.NGP.BraidAnniversaryEdition - +https://play.google.com/store/apps/details?id=com.netflix.NGP.BraidAnniversaryEdition - bgfx is used only in Android version of the game. -Braid, Anniversary Edition @@ -636,8 +636,8 @@ width="640" height="480" border="0" /> https://store.steampowered.com/app/2015270/Rotwood/ - Rotwood is an upcoming beat'em up, rogouelike video game developed and published by Klei Entertainment. -Rotwood @@ -653,15 +653,32 @@ Source: https://github.com/cubzh/cubzh ## World Of Goo 2 -https://store.epicgames.com/en-US/p/world-of-goo-2 - Build bridges, -grow towers, terraform terrain, and fuel flying machines in +https://store.epicgames.com/en-US/p/world-of-goo-2 - Build bridges, +grow towers, terraform terrain, and fuel flying machines in the stunning followup to the multi-award winning World of Goo. -World Of Goo 2 +## Off The Road 2 + +Off The Road 2 is an upcoming sandbox driving game for the iOS and android. +It features a huge game world to explore (~256km2), land, air, sea vehicles to drive, online multiplayer. + + + +## Minecraft Vibrant Visuals + + + [License (BSD 2-clause)](https://bkaradzic.github.io/bgfx/license.html) ----------------------------------------------------------------------- @@ -669,18 +686,18 @@ width="640" height="480" border="0" /> - Copyright 2010-2024 Branimir Karadzic - + Copyright 2010-2025 Branimir Karadzic + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - + 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - + 2. 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. - + 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. diff --git a/libs/bgfx/include/bgfx/bgfx.h b/libs/bgfx/include/bgfx/bgfx.h index d35a592..01e1b54 100644 --- a/libs/bgfx/include/bgfx/bgfx.h +++ b/libs/bgfx/include/bgfx/bgfx.h @@ -3244,6 +3244,7 @@ namespace bgfx /// - `u_model mat4[BGFX_CONFIG_MAX_BONES]` - array of model matrices. /// - `u_modelView mat4` - concatenated model view matrix, only first /// model matrix from array is used. + // - `u_invModelView mat4` - inverted model view matrix. /// - `u_modelViewProj mat4` - concatenated model view projection matrix. /// - `u_alphaRef float` - alpha reference value for alpha test. /// diff --git a/libs/bgfx/include/bgfx/c99/bgfx.h b/libs/bgfx/include/bgfx/c99/bgfx.h index 08d6275..1033ee7 100644 --- a/libs/bgfx/include/bgfx/c99/bgfx.h +++ b/libs/bgfx/include/bgfx/c99/bgfx.h @@ -2166,6 +2166,7 @@ BGFX_C_API void bgfx_destroy_frame_buffer(bgfx_frame_buffer_handle_t _handle); * - `u_model mat4[BGFX_CONFIG_MAX_BONES]` - array of model matrices. * - `u_modelView mat4` - concatenated model view matrix, only first * model matrix from array is used. + * - `u_invModelView mat4` - inverted concatenated model view matrix. * - `u_modelViewProj mat4` - concatenated model view projection matrix. * - `u_alphaRef float` - alpha reference value for alpha test. * diff --git a/libs/bgfx/src/bgfx.cpp b/libs/bgfx/src/bgfx.cpp index 009964f..c66259a 100644 --- a/libs/bgfx/src/bgfx.cpp +++ b/libs/bgfx/src/bgfx.cpp @@ -668,9 +668,9 @@ namespace bgfx } } - static const uint32_t numCharsPerBatch = 1024; - static const uint32_t numBatchVertices = numCharsPerBatch*4; - static const uint32_t numBatchIndices = numCharsPerBatch*6; + static constexpr uint32_t kNumCharsPerBatch = 1024; + static constexpr uint32_t kNumBatchVertices = kNumCharsPerBatch*4; + static constexpr uint32_t kNumBatchIndices = kNumCharsPerBatch*6; void TextVideoMemBlitter::init(uint8_t scale) { @@ -710,8 +710,8 @@ namespace bgfx m_program = createProgram(vsh, fsh, true); - m_vb = s_ctx->createTransientVertexBuffer(numBatchVertices*m_layout.m_stride, &m_layout); - m_ib = s_ctx->createTransientIndexBuffer(numBatchIndices*2); + m_vb = s_ctx->createTransientVertexBuffer(kNumBatchVertices*m_layout.m_stride, &m_layout); + m_ib = s_ctx->createTransientIndexBuffer(kNumBatchIndices*2); m_scale = bx::max(scale, 1); } @@ -808,12 +808,12 @@ namespace bgfx uint32_t startVertex = 0; uint32_t numIndices = 0; - for (; yy < _mem.m_height && numIndices < numBatchIndices; ++yy) + for (; yy < _mem.m_height && numIndices < kNumBatchIndices; ++yy) { xx = xx < _mem.m_width ? xx : 0; const TextVideoMem::MemSlot* line = &_mem.m_mem[yy*_mem.m_width+xx]; - for (; xx < _mem.m_width && numIndices < numBatchIndices; ++xx) + for (; xx < _mem.m_width && numIndices < kNumBatchIndices; ++xx) { uint32_t ch = line->character; const uint8_t attr = line->attribute; @@ -856,7 +856,7 @@ namespace bgfx line++; } - if (numIndices >= numBatchIndices) + if (numIndices >= kNumBatchIndices) { break; } @@ -982,6 +982,7 @@ namespace bgfx "u_invViewProj", "u_model", "u_modelView", + "u_invModelView", "u_modelViewProj", "u_alphaRef4", }; @@ -1522,7 +1523,7 @@ namespace bgfx write(_value, g_uniformTypeSize[_type]*_num); } - void UniformBuffer::writeUniformHandle(UniformType::Enum _type, uint16_t _loc, UniformHandle _handle, uint16_t _num) + void UniformBuffer::writeUniformHandle(uint8_t _type, uint16_t _loc, UniformHandle _handle, uint16_t _num) { const uint32_t opcode = encodeOpcode(_type, _loc, _num, false); write(opcode); @@ -2520,7 +2521,7 @@ namespace bgfx break; } - UniformType::Enum type; + uint8_t type; uint16_t loc; uint16_t num; uint16_t copy; @@ -4035,8 +4036,8 @@ namespace bgfx uint32_t dstWidth = bx::max(1, dst.m_width >> _dstMip); uint32_t dstHeight = bx::max(1, dst.m_height >> _dstMip); - uint32_t srcDepth = src.isCubeMap() ? 6 : bx::max(1, src.m_depth >> _srcMip); - uint32_t dstDepth = dst.isCubeMap() ? 6 : bx::max(1, dst.m_depth >> _dstMip); + uint32_t srcDepth = src.isCubeMap() ? 6 * src.m_numLayers : src.m_numLayers > 1 ? src.m_numLayers : bx::max(1, src.m_depth >> _srcMip); + uint32_t dstDepth = dst.isCubeMap() ? 6 * src.m_numLayers : src.m_numLayers > 1 ? src.m_numLayers : bx::max(1, dst.m_depth >> _dstMip); BX_ASSERT(_srcX < srcWidth && _srcY < srcHeight && _srcZ < srcDepth , "Blit src coordinates out of range (%d, %d, %d) >= (%d, %d, %d)" diff --git a/libs/bgfx/src/bgfx_p.h b/libs/bgfx/src/bgfx_p.h index 436db4b..ec43273 100644 --- a/libs/bgfx/src/bgfx_p.h +++ b/libs/bgfx/src/bgfx_p.h @@ -843,6 +843,7 @@ namespace bgfx InvViewProj, Model, ModelView, + InvModelView, ModelViewProj, AlphaRef, Count @@ -1508,7 +1509,7 @@ namespace bgfx } } - static uint32_t encodeOpcode(UniformType::Enum _type, uint16_t _loc, uint16_t _num, uint16_t _copy) + static uint32_t encodeOpcode(uint8_t _type, uint16_t _loc, uint16_t _num, uint16_t _copy) { const uint32_t type = _type << kConstantOpcodeTypeShift; const uint32_t loc = _loc << kConstantOpcodeLocShift; @@ -1517,14 +1518,14 @@ namespace bgfx return type|loc|num|copy; } - static void decodeOpcode(uint32_t _opcode, UniformType::Enum& _type, uint16_t& _loc, uint16_t& _num, uint16_t& _copy) + static void decodeOpcode(uint32_t _opcode, uint8_t& _type, uint16_t& _loc, uint16_t& _num, uint16_t& _copy) { const uint32_t type = (_opcode&kConstantOpcodeTypeMask) >> kConstantOpcodeTypeShift; const uint32_t loc = (_opcode&kConstantOpcodeLocMask ) >> kConstantOpcodeLocShift; const uint32_t num = (_opcode&kConstantOpcodeNumMask ) >> kConstantOpcodeNumShift; const uint32_t copy = (_opcode&kConstantOpcodeCopyMask); // >> kConstantOpcodeCopyShift; - _type = (UniformType::Enum)(type); + _type = (uint8_t )type; _copy = (uint16_t)copy; _num = (uint16_t)num; _loc = (uint16_t)loc; @@ -1583,7 +1584,7 @@ namespace bgfx } void writeUniform(UniformType::Enum _type, uint16_t _loc, const void* _value, uint16_t _num = 1); - void writeUniformHandle(UniformType::Enum _type, uint16_t _loc, UniformHandle _handle, uint16_t _num = 1); + void writeUniformHandle(uint8_t _type, uint16_t _loc, UniformHandle _handle, uint16_t _num = 1); void writeMarker(const bx::StringView& _name); private: @@ -3138,7 +3139,7 @@ namespace bgfx , m_numFreeDynamicIndexBufferHandles(0) , m_numFreeDynamicVertexBufferHandles(0) , m_numFreeOcclusionQueryHandles(0) - , m_colorPaletteDirty(0) + , m_colorPaletteDirty(2) , m_frames(0) , m_debug(BGFX_DEBUG_NONE) , m_rtMemoryUsed(0) diff --git a/libs/bgfx/src/bgfx_shader.sh b/libs/bgfx/src/bgfx_shader.sh index 052867d..209b095 100644 --- a/libs/bgfx/src/bgfx_shader.sh +++ b/libs/bgfx/src/bgfx_shader.sh @@ -721,6 +721,7 @@ uniform mat4 u_viewProj; uniform mat4 u_invViewProj; uniform mat4 u_model[BGFX_CONFIG_MAX_BONES]; uniform mat4 u_modelView; +uniform mat4 u_invModelView; uniform mat4 u_modelViewProj; uniform vec4 u_alphaRef4; #define u_alphaRef u_alphaRef4.x diff --git a/libs/bgfx/src/config.h b/libs/bgfx/src/config.h index d36ad81..596d724 100644 --- a/libs/bgfx/src/config.h +++ b/libs/bgfx/src/config.h @@ -333,6 +333,14 @@ static_assert(bx::isPowerOf2(BGFX_CONFIG_MAX_VIEWS), "BGFX_CONFIG_MAX_VIEWS must # define BGFX_CONFIG_PER_FRAME_SCRATCH_STAGING_BUFFER_SIZE (32<<20) #endif +#ifndef BGFX_CONFIG_MAX_BYTES_CACHED_DEVICE_MEMORY_ALLOCATIONS +/// Amount of allowed memory allocations left on device to use for recycling during +/// later allocations. This can be beneficial in case the driver is slow allocating memory +/// on the device. +/// Note: Currently only used by the Vulkan backend. +# define BGFX_CONFIG_MAX_BYTES_CACHED_DEVICE_MEMORY_ALLOCATIONS (128 << 20) +#endif + #ifndef BGFX_CONFIG_MAX_STAGING_SIZE_FOR_SCRATCH_BUFFER /// The threshold of data size above which the staging scratch buffer will /// not be used, but instead a separate device memory allocation will take diff --git a/libs/bgfx/src/glcontext_html5.cpp b/libs/bgfx/src/glcontext_html5.cpp index ce2dc70..24f1996 100644 --- a/libs/bgfx/src/glcontext_html5.cpp +++ b/libs/bgfx/src/glcontext_html5.cpp @@ -28,11 +28,12 @@ namespace bgfx { namespace gl struct SwapChainGL { - SwapChainGL(int _context, const char* _canvas) + SwapChainGL(EMSCRIPTEN_WEBGL_CONTEXT_HANDLE _context, const char* _canvas) : m_context(_context) { - m_canvas = (char*)bx::alloc(g_allocator, strlen(_canvas) + 1); - strcpy(m_canvas, _canvas); + size_t length = bx::strLen(_canvas) + 1; + m_canvas = (char*)bx::alloc(g_allocator, length); + bx::strCopy(m_canvas, length, _canvas); makeCurrent(); GL_CHECK(glClearColor(0.0f, 0.0f, 0.0f, 0.0f) ); @@ -59,7 +60,7 @@ namespace bgfx { namespace gl // to the browser. } - int m_context; + EMSCRIPTEN_WEBGL_CONTEXT_HANDLE m_context; char* m_canvas; }; diff --git a/libs/bgfx/src/renderer.h b/libs/bgfx/src/renderer.h index dd5f969..c8971fa 100644 --- a/libs/bgfx/src/renderer.h +++ b/libs/bgfx/src/renderer.h @@ -244,6 +244,26 @@ namespace bgfx } break; + case PredefinedUniform::InvModelView: + { + Matrix4 modelView; + Matrix4 invModelView; + const Matrix4& model = frameCache.m_matrixCache.m_cache[_draw.m_startMatrix]; + bx::model4x4_mul(&modelView.un.f4x4 + , &model.un.f4x4 + , &m_view[_view].un.f4x4 + ); + bx::float4x4_inverse(&invModelView.un.f4x4 + , &modelView.un.f4x4 + ); + _renderer->setShaderUniform4x4f(flags + , predefined.m_loc + , invModelView.un.val + , bx::uint32_min(mtxRegs, predefined.m_count) + ); + } + break; + case PredefinedUniform::ModelViewProj: { Matrix4 modelViewProj; diff --git a/libs/bgfx/src/renderer_d3d11.cpp b/libs/bgfx/src/renderer_d3d11.cpp index ecd4085..66e5eb7 100644 --- a/libs/bgfx/src/renderer_d3d11.cpp +++ b/libs/bgfx/src/renderer_d3d11.cpp @@ -3377,7 +3377,7 @@ namespace bgfx { namespace d3d11 break; } - UniformType::Enum type; + uint8_t type; uint16_t loc; uint16_t num; uint16_t copy; @@ -3395,7 +3395,7 @@ namespace bgfx { namespace d3d11 data = (const char*)m_uniforms[handle.idx]; } - switch ( (uint32_t)type) + switch (type) { case UniformType::Mat3: case UniformType::Mat3|kUniformFragmentBit: @@ -4190,7 +4190,7 @@ namespace bgfx { namespace d3d11 } kind = "user"; - m_constantBuffer->writeUniformHandle( (UniformType::Enum)(type|fragmentBit), regIndex, info->m_handle, regCount); + m_constantBuffer->writeUniformHandle(type|fragmentBit, regIndex, info->m_handle, regCount); } } else diff --git a/libs/bgfx/src/renderer_d3d12.cpp b/libs/bgfx/src/renderer_d3d12.cpp index 03d4108..4f95612 100644 --- a/libs/bgfx/src/renderer_d3d12.cpp +++ b/libs/bgfx/src/renderer_d3d12.cpp @@ -3384,7 +3384,7 @@ namespace bgfx { namespace d3d12 break; } - UniformType::Enum type; + uint8_t type; uint16_t loc; uint16_t num; uint16_t copy; @@ -3402,7 +3402,7 @@ namespace bgfx { namespace d3d12 data = (const char*)m_uniforms[handle.idx]; } - switch ( (uint32_t)type) + switch (type) { case UniformType::Mat3: case UniformType::Mat3|kUniformFragmentBit: @@ -4834,7 +4834,7 @@ namespace bgfx { namespace d3d12 } kind = "user"; - m_constantBuffer->writeUniformHandle( (UniformType::Enum)(type|fragmentBit), regIndex, info->m_handle, regCount); + m_constantBuffer->writeUniformHandle(type|fragmentBit, regIndex, info->m_handle, regCount); } } else diff --git a/libs/bgfx/src/renderer_gl.cpp b/libs/bgfx/src/renderer_gl.cpp index 9145e27..5cbd811 100644 --- a/libs/bgfx/src/renderer_gl.cpp +++ b/libs/bgfx/src/renderer_gl.cpp @@ -4420,7 +4420,7 @@ namespace bgfx { namespace gl break; } - UniformType::Enum type; + uint8_t type; uint16_t ignore; uint16_t num; uint16_t copy; @@ -6123,8 +6123,8 @@ namespace bgfx { namespace gl GL_CHECK(glTexParameteri(target, GL_TEXTURE_WRAP_S, s_textureAddress[(flags&BGFX_SAMPLER_U_MASK)>>BGFX_SAMPLER_U_SHIFT]) ); GL_CHECK(glTexParameteri(target, GL_TEXTURE_WRAP_T, s_textureAddress[(flags&BGFX_SAMPLER_V_MASK)>>BGFX_SAMPLER_V_SHIFT]) ); - if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || s_renderGL->m_gles3 - || s_extension[Extension::APPLE_texture_max_level].m_supported) + if (1 < numMips + && (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || s_renderGL->m_gles3 || s_extension[Extension::APPLE_texture_max_level].m_supported) ) { GL_CHECK(glTexParameteri(targetMsaa, GL_TEXTURE_MAX_LEVEL, numMips-1) ); } diff --git a/libs/bgfx/src/renderer_mtl.mm b/libs/bgfx/src/renderer_mtl.mm index be6dfc6..fc98573 100644 --- a/libs/bgfx/src/renderer_mtl.mm +++ b/libs/bgfx/src/renderer_mtl.mm @@ -1751,7 +1751,7 @@ void commit(UniformBuffer& _uniformBuffer) break; } - UniformType::Enum type; + uint8_t type; uint16_t loc; uint16_t num; uint16_t copy; @@ -1769,7 +1769,7 @@ void commit(UniformBuffer& _uniformBuffer) data = (const char*)m_uniforms[handle.idx]; } - switch ( (uint32_t)type) + switch (type) { case UniformType::Mat3: case UniformType::Mat3|kUniformFragmentBit: @@ -2229,7 +2229,7 @@ void processArguments( } UniformType::Enum type = convertMtlType(dataType); - constantBuffer->writeUniformHandle( (UniformType::Enum)(type|fragmentBit), uint32_t(uniform.offset), info->m_handle, uint16_t(num) ); + constantBuffer->writeUniformHandle(type|fragmentBit, uint32_t(uniform.offset), info->m_handle, uint16_t(num) ); BX_TRACE("store %s %d offset:%d", name, info->m_handle, uint32_t(uniform.offset) ); } } diff --git a/libs/bgfx/src/renderer_vk.cpp b/libs/bgfx/src/renderer_vk.cpp index 59d4a11..97ba394 100644 --- a/libs/bgfx/src/renderer_vk.cpp +++ b/libs/bgfx/src/renderer_vk.cpp @@ -1136,13 +1136,14 @@ VK_IMPORT_DEVICE { RendererContextVK() : m_allocatorCb(NULL) + , m_memoryLru() , m_renderDocDll(NULL) , m_vulkan1Dll(NULL) , m_maxAnisotropy(1.0f) , m_depthClamp(false) , m_wireframe(false) , m_captureBuffer(VK_NULL_HANDLE) - , m_captureMemory(VK_NULL_HANDLE) + , m_captureMemory() , m_captureSize(0) { } @@ -2184,6 +2185,8 @@ VK_IMPORT_DEVICE m_backBuffer.destroy(); + m_memoryLru.evictAll(); + m_cmd.shutdown(); vkDestroy(m_pipelineCache); @@ -2346,7 +2349,7 @@ VK_IMPORT_DEVICE uint32_t pitch = texture.m_readback.pitch(_mip); uint32_t size = height * pitch; - VkDeviceMemory stagingMemory; + DeviceMemoryAllocationVK stagingMemory; VkBuffer stagingBuffer; VK_CHECK(createReadbackBuffer(size, &stagingBuffer, &stagingMemory) ); @@ -2360,10 +2363,10 @@ VK_IMPORT_DEVICE kick(true); - texture.m_readback.readback(stagingMemory, 0, _data, _mip); + texture.m_readback.readback(stagingMemory.mem, stagingMemory.offset, _data, _mip); vkDestroy(stagingBuffer); - vkDestroy(stagingMemory); + recycleMemory(stagingMemory); } void resizeTexture(TextureHandle _handle, uint16_t _width, uint16_t _height, uint8_t _numMips, uint16_t _numLayers) override @@ -2511,14 +2514,14 @@ VK_IMPORT_DEVICE const uint8_t bpp = bimg::getBitsPerPixel(bimg::TextureFormat::Enum(swapChain.m_colorFormat) ); const uint32_t size = frameBuffer.m_width * frameBuffer.m_height * bpp / 8; - VkDeviceMemory stagingMemory; + DeviceMemoryAllocationVK stagingMemory; VkBuffer stagingBuffer; VK_CHECK(createReadbackBuffer(size, &stagingBuffer, &stagingMemory) ); readSwapChain(swapChain, stagingBuffer, stagingMemory, callback, _filePath); vkDestroy(stagingBuffer); - vkDestroy(stagingMemory); + recycleMemory(stagingMemory); } void updateViewName(ViewId _id, const char* _name) override @@ -2601,6 +2604,11 @@ VK_IMPORT_DEVICE } } + void recycleMemory(DeviceMemoryAllocationVK _alloc) + { + m_cmd.recycleMemory(_alloc); + } + void submitBlit(BlitState& _bs, uint16_t _view); void submit(Frame* _render, ClearQuad& _clearQuad, TextVideoMemBlitter& _textVideoMemBlitter) override; @@ -2700,12 +2708,13 @@ VK_IMPORT_DEVICE void blitRender(TextVideoMemBlitter& _blitter, uint32_t _numIndices) override { const uint32_t numVertices = _numIndices*4/6; - if (0 < numVertices && m_backBuffer.isRenderable() ) + + if (0 < numVertices + && m_backBuffer.isRenderable() ) { - m_indexBuffers[_blitter.m_ib->handle.idx].update(m_commandBuffer, 0, _numIndices*2, _blitter.m_ib->data); + m_indexBuffers[_blitter.m_ib->handle.idx].update(m_commandBuffer, 0, _numIndices*2, _blitter.m_ib->data, true); m_vertexBuffers[_blitter.m_vb->handle.idx].update(m_commandBuffer, 0, numVertices*_blitter.m_layout.m_stride, _blitter.m_vb->data, true); - VkRenderPassBeginInfo rpbi; rpbi.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; rpbi.pNext = NULL; @@ -2720,7 +2729,6 @@ VK_IMPORT_DEVICE vkCmdBeginRenderPass(m_commandBuffer, &rpbi, VK_SUBPASS_CONTENTS_INLINE); vkCmdDrawIndexed(m_commandBuffer, _numIndices, 1, 0, 0, 0); - vkCmdEndRenderPass(m_commandBuffer); } } @@ -2737,7 +2745,7 @@ VK_IMPORT_DEVICE g_callback->captureEnd(); release(m_captureBuffer); - release(m_captureMemory); + recycleMemory(m_captureMemory); m_captureSize = 0; } } @@ -2760,7 +2768,7 @@ VK_IMPORT_DEVICE if (captureSize > m_captureSize) { release(m_captureBuffer); - release(m_captureMemory); + recycleMemory(m_captureMemory); m_captureSize = captureSize; VK_CHECK(createReadbackBuffer(m_captureSize, &m_captureBuffer, &m_captureMemory) ); @@ -4059,7 +4067,7 @@ VK_IMPORT_DEVICE typedef void (*SwapChainReadFunc)(void* /*src*/, uint32_t /*width*/, uint32_t /*height*/, uint32_t /*pitch*/, const void* /*userData*/); - bool readSwapChain(const SwapChainVK& _swapChain, VkBuffer _buffer, VkDeviceMemory _memory, SwapChainReadFunc _func, const void* _userData = NULL) + bool readSwapChain(const SwapChainVK& _swapChain, VkBuffer _buffer, DeviceMemoryAllocationVK _memory, SwapChainReadFunc _func, const void* _userData = NULL) { if (isSwapChainReadable(_swapChain) ) { @@ -4080,7 +4088,7 @@ VK_IMPORT_DEVICE kick(true); uint8_t* src; - VK_CHECK(vkMapMemory(m_device, _memory, 0, VK_WHOLE_SIZE, 0, (void**)&src) ); + VK_CHECK(vkMapMemory(m_device, _memory.mem, _memory.offset, _memory.size, 0, (void**)&src) ); if (_swapChain.m_colorFormat == TextureFormat::RGBA8) { @@ -4106,7 +4114,7 @@ VK_IMPORT_DEVICE bx::free(g_allocator, dst); } - vkUnmapMemory(m_device, _memory); + vkUnmapMemory(m_device, _memory.mem); readback.destroy(); @@ -4150,7 +4158,7 @@ VK_IMPORT_DEVICE break; } - UniformType::Enum type; + uint8_t type; uint16_t loc; uint16_t num; uint16_t copy; @@ -4168,7 +4176,7 @@ VK_IMPORT_DEVICE data = (const char*)m_uniforms[handle.idx]; } - switch ( (uint32_t)type) + switch (type) { case UniformType::Mat3: case UniformType::Mat3|kUniformFragmentBit: @@ -4354,9 +4362,31 @@ VK_IMPORT_DEVICE return -1; } - VkResult allocateMemory(const VkMemoryRequirements* requirements, VkMemoryPropertyFlags propertyFlags, ::VkDeviceMemory* memory) const + VkResult allocateMemory(const VkMemoryRequirements* requirements, VkMemoryPropertyFlags propertyFlags, DeviceMemoryAllocationVK* memory, bool _forcePrivateDeviceAllocation) { BGFX_PROFILER_SCOPE("RendererContextVK::allocateMemory", kColorResource); + + // Forcing the use of a private device allocation for a certain memory allocation + // can be desirable when memory mapping the allocation. A memory allocation + // can only be mapped once. So handing out multiple subregions of one bigger + // allocation can lead to problems, when they get mapped multiple times. + // Right now, with the LRU system, we are still only handing out the full + // memory allocation, and never subregions of it, so it's impossible right + // now to map a single allocation multiple times. + // The argument is there to indicate this, but it's ignored right now, for the above + // reason: any cached memory is fine, as long as we don't partition it. + BX_UNUSED(_forcePrivateDeviceAllocation); + { + // Check LRU cache. + int memoryType = selectMemoryType(requirements->memoryTypeBits, propertyFlags, 0); + bool found = m_memoryLru.find(requirements->size, memoryType, memory); + if (found) + { + return VK_SUCCESS; + } + } + + VkMemoryAllocateInfo ma; ma.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; ma.pNext = NULL; @@ -4371,8 +4401,12 @@ VK_IMPORT_DEVICE if (searchIndex >= 0) { + BGFX_PROFILER_SCOPE("vkAllocateMemory", kColorResource); ma.memoryTypeIndex = searchIndex; - result = vkAllocateMemory(m_device, &ma, m_allocatorCb, memory); + memory->memoryTypeIndex = searchIndex; + memory->size = ma.allocationSize; + memory->offset = 0; + result = vkAllocateMemory(m_device, &ma, m_allocatorCb, &memory->mem); } } while (result != VK_SUCCESS @@ -4381,7 +4415,7 @@ VK_IMPORT_DEVICE return result; } - VkResult createHostBuffer(uint32_t _size, VkMemoryPropertyFlags _flags, ::VkBuffer* _buffer, ::VkDeviceMemory* _memory, const void* _data = NULL) + VkResult createHostBuffer(uint32_t _size, VkMemoryPropertyFlags _flags, ::VkBuffer* _buffer, DeviceMemoryAllocationVK* _memory, bool _forcePrivateDeviceAllocation, const void* _data = NULL) { BGFX_PROFILER_SCOPE("createHostBuffer", kColorResource); VkResult result = VK_SUCCESS; @@ -4406,12 +4440,12 @@ VK_IMPORT_DEVICE VkMemoryRequirements mr; vkGetBufferMemoryRequirements(m_device, *_buffer, &mr); - result = allocateMemory(&mr, _flags, _memory); + result = allocateMemory(&mr, _flags, _memory, _forcePrivateDeviceAllocation); if (VK_SUCCESS != result && (_flags & VK_MEMORY_PROPERTY_HOST_CACHED_BIT) ) { - result = allocateMemory(&mr, _flags & ~VK_MEMORY_PROPERTY_HOST_CACHED_BIT, _memory); + result = allocateMemory(&mr, _flags & ~VK_MEMORY_PROPERTY_HOST_CACHED_BIT, _memory, _forcePrivateDeviceAllocation); } if (VK_SUCCESS != result) @@ -4420,7 +4454,7 @@ VK_IMPORT_DEVICE return result; } - result = vkBindBufferMemory(m_device, *_buffer, *_memory, 0); + result = vkBindBufferMemory(m_device, *_buffer, _memory->mem, _memory->offset); if (VK_SUCCESS != result) { BX_TRACE("Create host buffer error: vkBindBufferMemory failed %d: %s.", result, getName(result) ); @@ -4431,7 +4465,7 @@ VK_IMPORT_DEVICE { BGFX_PROFILER_SCOPE("map and copy data", kColorResource); void* dst; - result = vkMapMemory(m_device, *_memory, 0, _size, 0, &dst); + result = vkMapMemory(m_device, _memory->mem, _memory->offset, _size, 0, &dst); if (VK_SUCCESS != result) { BX_TRACE("Create host buffer error: vkMapMemory failed %d: %s.", result, getName(result) ); @@ -4439,22 +4473,22 @@ VK_IMPORT_DEVICE } bx::memCopy(dst, _data, _size); - vkUnmapMemory(m_device, *_memory); + vkUnmapMemory(m_device, _memory->mem); } return result; } - VkResult createStagingBuffer(uint32_t _size, ::VkBuffer* _buffer, ::VkDeviceMemory* _memory, const void* _data = NULL) + VkResult createStagingBuffer(uint32_t _size, ::VkBuffer* _buffer, DeviceMemoryAllocationVK* _memory, const void* _data = NULL) { const VkMemoryPropertyFlags flags = 0 | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT ; - return createHostBuffer(_size, flags, _buffer, _memory, _data); + return createHostBuffer(_size, flags, _buffer, _memory, false, _data); } - StagingBufferVK allocFromScratchStagingBuffer(uint32_t _size, uint32_t _align, const void *_data = NULL) + StagingBufferVK allocFromScratchStagingBuffer(uint32_t _size, uint32_t _align, const void* _data = NULL) { BGFX_PROFILER_SCOPE("allocFromScratchStagingBuffer", kColorResource); @@ -4465,14 +4499,14 @@ VK_IMPORT_DEVICE { const uint32_t scratchOffset = scratch.alloc(_size, _align); - if (scratchOffset != UINT32_MAX) + if (UINT32_MAX != scratchOffset) { result.m_isFromScratch = true; - result.m_size = _size; + result.m_deviceMem = scratch.m_deviceMem; + result.m_size = _size; result.m_offset = scratchOffset; result.m_buffer = scratch.m_buffer; - result.m_deviceMem = scratch.m_deviceMem; - result.m_data = scratch.m_data + result.m_offset; + result.m_data = scratch.m_data + result.m_offset; if (_data != NULL) { @@ -4485,18 +4519,17 @@ VK_IMPORT_DEVICE } // Not enough space or too big, we will create a new staging buffer on the spot. - result.m_isFromScratch = false; - VK_CHECK(createStagingBuffer(_size, &result.m_buffer, &result.m_deviceMem, _data)); - result.m_size = _size; - result.m_offset = 0; - result.m_data = NULL; + result.m_isFromScratch = false; + result.m_offset = 0; + result.m_size = _size; + result.m_data = NULL; return result; } - VkResult createReadbackBuffer(uint32_t _size, ::VkBuffer* _buffer, ::VkDeviceMemory* _memory) + VkResult createReadbackBuffer(uint32_t _size, ::VkBuffer* _buffer, DeviceMemoryAllocationVK* _memory) { const VkMemoryPropertyFlags flags = 0 | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT @@ -4504,7 +4537,7 @@ VK_IMPORT_DEVICE | VK_MEMORY_PROPERTY_HOST_CACHED_BIT ; - return createHostBuffer(_size, flags, _buffer, _memory, NULL); + return createHostBuffer(_size, flags, _buffer, _memory, true, NULL); } VkAllocationCallbacks* m_allocatorCb; @@ -4528,6 +4561,8 @@ VK_IMPORT_DEVICE FrameBufferHandle m_windows[BGFX_CONFIG_MAX_FRAME_BUFFERS]; int64_t m_presentElapsed; + MemoryLruVK m_memoryLru; + ScratchBufferVK m_scratchBuffer[BGFX_CONFIG_MAX_FRAME_LATENCY]; ScratchBufferVK m_scratchStagingBuffer[BGFX_CONFIG_MAX_FRAME_LATENCY]; @@ -4572,7 +4607,7 @@ VK_IMPORT_DEVICE bool m_wireframe; VkBuffer m_captureBuffer; - VkDeviceMemory m_captureMemory; + DeviceMemoryAllocationVK m_captureMemory; uint32_t m_captureSize; TextVideoMem m_textVideoMem; @@ -4665,6 +4700,96 @@ VK_DESTROY s_renderVK->release(_obj); } + void MemoryLruVK::recycle(DeviceMemoryAllocationVK &_alloc) + { + if (MAX_ENTRIES == lru.getNumHandles()) + { + // Evict LRU + uint16_t handle = lru.getBack(); + DeviceMemoryAllocationVK &alloc = entries[handle]; + totalSizeCached -= alloc.size; + release(alloc.mem); + + // Touch slot and overwrite + lru.touch(handle); + alloc = _alloc; + } else + { + uint16_t handle = lru.alloc(); + entries[handle] = _alloc; + } + totalSizeCached += _alloc.size; + + while (totalSizeCached > BGFX_CONFIG_MAX_BYTES_CACHED_DEVICE_MEMORY_ALLOCATIONS) + { + BX_ASSERT(lru.getNumHandles() > 0, "Memory badly counted."); + uint16_t handle = lru.getBack(); + DeviceMemoryAllocationVK &alloc = entries[handle]; + totalSizeCached -= alloc.size; + release(alloc.mem); + lru.free(handle); + } + } + + bool MemoryLruVK::find(uint32_t _size, int32_t _memoryTypeIndex, DeviceMemoryAllocationVK *_alloc) + { + BGFX_PROFILER_SCOPE("MemoryLruVK::find", kColorResource); + // Find best fit. + uint16_t slot; + { + int16_t bestIdx = MAX_ENTRIES; + uint32_t bestWaste = 0xffff'ffff; + slot = lru.getFront(); + while (UINT16_MAX != slot) + { + DeviceMemoryAllocationVK &alloc = entries[slot]; + if (alloc.memoryTypeIndex == _memoryTypeIndex) + { + // 50% waste allowed, otherwise we'll just allocate a new one. + // This is to prevent we trash this cache of useful allocations + // with a handful of tiny allocations. + if (alloc.size >= _size && _size * 2 >= alloc.size) + { + uint32_t waste = alloc.size - _size; + if (waste < bestWaste) + { + bestIdx = slot; + bestWaste = waste; + if (waste == 0) + { + break; + } + } + } + } + slot = lru.getNext(slot); + } + slot = bestIdx; + } + + if (MAX_ENTRIES != slot) + { + *_alloc = entries[slot]; + lru.free(slot); + totalSizeCached -= _alloc->size; + return true; + } else { + return false; + } + } + + void MemoryLruVK::evictAll() + { + uint16_t slot = lru.getFront(); + while (slot != UINT16_MAX) + { + release(entries[slot].mem); + slot = lru.getNext(slot); + } + lru.reset(); + totalSizeCached = 0; + } + void ScratchBufferVK::create(uint32_t _size, uint32_t _count, VkBufferUsageFlags usage, uint32_t _align) { const VkAllocationCallbacks* allocatorCb = s_renderVK->m_allocatorCb; @@ -4698,21 +4823,21 @@ VK_DESTROY ); VkMemoryPropertyFlags flags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - VkResult result = s_renderVK->allocateMemory(&mr, flags, &m_deviceMem); + VkResult result = s_renderVK->allocateMemory(&mr, flags, &m_deviceMem, true); if (VK_SUCCESS != result) { flags &= ~VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - VK_CHECK(s_renderVK->allocateMemory(&mr, flags, &m_deviceMem) ); + VK_CHECK(s_renderVK->allocateMemory(&mr, flags, &m_deviceMem, true) ); } m_size = (uint32_t)mr.size; m_pos = 0; m_align = _align; - VK_CHECK(vkBindBufferMemory(device, m_buffer, m_deviceMem, 0) ); + VK_CHECK(vkBindBufferMemory(device, m_buffer, m_deviceMem.mem, m_deviceMem.offset) ); - VK_CHECK(vkMapMemory(device, m_deviceMem, 0, m_size, 0, (void**)&m_data) ); + VK_CHECK(vkMapMemory(device, m_deviceMem.mem, m_deviceMem.offset, m_size, 0, (void**)&m_data) ); } void ScratchBufferVK::createUniform(uint32_t _size, uint32_t _count) @@ -4733,18 +4858,12 @@ VK_DESTROY void ScratchBufferVK::destroy() { - reset(); - - vkUnmapMemory(s_renderVK->m_device, m_deviceMem); + vkUnmapMemory(s_renderVK->m_device, m_deviceMem.mem); s_renderVK->release(m_buffer); - s_renderVK->release(m_deviceMem); + s_renderVK->recycleMemory(m_deviceMem); } - void ScratchBufferVK::reset() - { - m_pos = 0; - } uint32_t ScratchBufferVK::alloc(uint32_t _size, uint32_t _minAlign) { @@ -4774,7 +4893,7 @@ VK_DESTROY } - void ScratchBufferVK::flush() + void ScratchBufferVK::flush(bool _reset) { const VkPhysicalDeviceLimits& deviceLimits = s_renderVK->m_deviceProperties.limits; VkDevice device = s_renderVK->m_device; @@ -4785,10 +4904,15 @@ VK_DESTROY VkMappedMemoryRange range; range.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE; range.pNext = NULL; - range.memory = m_deviceMem; - range.offset = 0; + range.memory = m_deviceMem.mem; + range.offset = m_deviceMem.offset; range.size = size; VK_CHECK(vkFlushMappedMemoryRanges(device, 1, &range) ); + + if (_reset) + { + m_pos = 0; + } } void BufferVK::create(VkCommandBuffer _commandBuffer, uint32_t _size, void* _data, uint16_t _flags, bool _vertex, uint32_t _stride) @@ -4824,9 +4948,9 @@ VK_DESTROY VkMemoryRequirements mr; vkGetBufferMemoryRequirements(device, m_buffer, &mr); - VK_CHECK(s_renderVK->allocateMemory(&mr, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &m_deviceMem) ); + VK_CHECK(s_renderVK->allocateMemory(&mr, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &m_deviceMem, false) ); - VK_CHECK(vkBindBufferMemory(device, m_buffer, m_deviceMem, 0) ); + VK_CHECK(vkBindBufferMemory(device, m_buffer, m_deviceMem.mem, m_deviceMem.offset) ); if (!m_dynamic) { @@ -4856,7 +4980,7 @@ VK_DESTROY if (!stagingBuffer.m_isFromScratch) { s_renderVK->release(stagingBuffer.m_buffer); - s_renderVK->release(stagingBuffer.m_deviceMem); + s_renderVK->recycleMemory(stagingBuffer.m_deviceMem); } } @@ -4865,7 +4989,7 @@ VK_DESTROY if (VK_NULL_HANDLE != m_buffer) { s_renderVK->release(m_buffer); - s_renderVK->release(m_deviceMem); + s_renderVK->recycleMemory(m_deviceMem); m_dynamic = false; } @@ -5090,7 +5214,7 @@ VK_DESTROY } kind = "user"; - m_constantBuffer->writeUniformHandle( (UniformType::Enum)(type|fragmentBit), regIndex, info->m_handle, regCount); + m_constantBuffer->writeUniformHandle(type|fragmentBit, regIndex, info->m_handle, regCount); } } } @@ -5452,7 +5576,7 @@ VK_DESTROY return result; } - result = vkMapMemory(device, m_readbackMemory, 0, VK_WHOLE_SIZE, 0, (void**)&m_queryResult); + result = vkMapMemory(device, m_readbackMemory.mem, m_readbackMemory.offset, VK_WHOLE_SIZE, 0, (void**)&m_queryResult); if (VK_SUCCESS != result) { @@ -5476,8 +5600,8 @@ VK_DESTROY { vkDestroy(m_queryPool); vkDestroy(m_readback); - vkUnmapMemory(s_renderVK->m_device, m_readbackMemory); - vkDestroy(m_readbackMemory); + vkUnmapMemory(s_renderVK->m_device, m_readbackMemory.mem); + s_renderVK->recycleMemory(m_readbackMemory); } uint32_t TimerQueryVK::begin(uint32_t _resultIdx, uint32_t _frameNum) @@ -5607,7 +5731,7 @@ VK_DESTROY return result; } - result = vkMapMemory(device, m_readbackMemory, 0, VK_WHOLE_SIZE, 0, (void**)&m_queryResult); + result = vkMapMemory(device, m_readbackMemory.mem, m_readbackMemory.offset, VK_WHOLE_SIZE, 0, (void**)&m_queryResult); if (VK_SUCCESS != result) { @@ -5624,8 +5748,8 @@ VK_DESTROY { vkDestroy(m_queryPool); vkDestroy(m_readback); - vkUnmapMemory(s_renderVK->m_device, m_readbackMemory); - vkDestroy(m_readbackMemory); + vkUnmapMemory(s_renderVK->m_device, m_readbackMemory.mem); + s_renderVK->recycleMemory(m_readbackMemory); } void OcclusionQueryVK::begin(OcclusionQueryHandle _handle) @@ -5925,14 +6049,14 @@ VK_DESTROY VkMemoryRequirements imageMemReq; vkGetImageMemoryRequirements(device, m_textureImage, &imageMemReq); - result = s_renderVK->allocateMemory(&imageMemReq, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &m_textureDeviceMem); + result = s_renderVK->allocateMemory(&imageMemReq, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &m_textureDeviceMem, false); if (VK_SUCCESS != result) { BX_TRACE("Create texture image error: allocateMemory failed %d: %s.", result, getName(result) ); return result; } - result = vkBindImageMemory(device, m_textureImage, m_textureDeviceMem, 0); + result = vkBindImageMemory(device, m_textureImage, m_textureDeviceMem.mem, m_textureDeviceMem.offset); if (VK_SUCCESS != result) { BX_TRACE("Create texture image error: vkBindImageMemory failed %d: %s.", result, getName(result) ); @@ -5968,14 +6092,14 @@ VK_DESTROY VkMemoryRequirements imageMemReq_resolve; vkGetImageMemoryRequirements(device, m_singleMsaaImage, &imageMemReq_resolve); - result = s_renderVK->allocateMemory(&imageMemReq_resolve, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &m_singleMsaaDeviceMem); + result = s_renderVK->allocateMemory(&imageMemReq_resolve, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, &m_singleMsaaDeviceMem, false); if (VK_SUCCESS != result) { BX_TRACE("Create texture image error: allocateMemory failed %d: %s.", result, getName(result) ); return result; } - result = vkBindImageMemory(device, m_singleMsaaImage, m_singleMsaaDeviceMem, 0); + result = vkBindImageMemory(device, m_singleMsaaImage, m_singleMsaaDeviceMem.mem, m_singleMsaaDeviceMem.offset); if (VK_SUCCESS != result) { BX_TRACE("Create texture image error: vkBindImageMemory failed %d: %s.", result, getName(result) ); @@ -6227,8 +6351,8 @@ VK_DESTROY { VK_CHECK(vkMapMemory( device - , stagingBuffer.m_deviceMem - , 0 + , stagingBuffer.m_deviceMem.mem + , stagingBuffer.m_deviceMem.offset , totalMemSize , 0 , (void**)&mappedMemory @@ -6254,7 +6378,7 @@ VK_DESTROY if (!stagingBuffer.m_isFromScratch) { - vkUnmapMemory(device, stagingBuffer.m_deviceMem); + vkUnmapMemory(device, stagingBuffer.m_deviceMem.mem); } copyBufferToTexture(_commandBuffer, stagingBuffer.m_buffer, numSrd, bufferCopyInfo); @@ -6262,7 +6386,7 @@ VK_DESTROY if (!stagingBuffer.m_isFromScratch) { s_renderVK->release(stagingBuffer.m_buffer); - s_renderVK->release(stagingBuffer.m_deviceMem); + s_renderVK->recycleMemory(stagingBuffer.m_deviceMem); } } else @@ -6293,13 +6417,13 @@ VK_DESTROY if (VK_NULL_HANDLE != m_textureImage) { s_renderVK->release(m_textureImage); - s_renderVK->release(m_textureDeviceMem); + s_renderVK->recycleMemory(m_textureDeviceMem); } if (VK_NULL_HANDLE != m_singleMsaaImage) { s_renderVK->release(m_singleMsaaImage); - s_renderVK->release(m_singleMsaaDeviceMem); + s_renderVK->recycleMemory(m_singleMsaaDeviceMem); } m_currentImageLayout = VK_IMAGE_LAYOUT_UNDEFINED; @@ -6354,7 +6478,7 @@ VK_DESTROY StagingBufferVK stagingBuffer = s_renderVK->allocFromScratchStagingBuffer(size, align, data); region.bufferOffset += stagingBuffer.m_offset; BX_ASSERT(region.bufferOffset % align == 0, - "Alignment for image (mip %u, z %s) is not aligned correctly (%u).", + "Alignment for image (mip %u, z %u) is not aligned correctly (%u).", _mip, _z, region.bufferOffset, align); if (VK_IMAGE_VIEW_TYPE_3D == m_type) @@ -6376,7 +6500,7 @@ VK_DESTROY if (!stagingBuffer.m_isFromScratch) { s_renderVK->release(stagingBuffer.m_buffer); - s_renderVK->release(stagingBuffer.m_deviceMem); + s_renderVK->recycleMemory(stagingBuffer.m_deviceMem); } if (NULL != temp) @@ -7301,7 +7425,7 @@ VK_DESTROY m_backBufferColorImageLayout[ii] = VK_IMAGE_LAYOUT_UNDEFINED; } - BX_TRACE("Succesfully created swapchain (%dx%d) with %d images.", width, height, m_numSwapChainImages); + BX_TRACE("Successfully created swapchain (%dx%d) with %d images.", width, height, m_numSwapChainImages); VkSemaphoreCreateInfo sci; sci.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; @@ -7819,10 +7943,10 @@ VK_DESTROY } m_denseIdx = _denseIdx; - m_nwh = _nwh; - m_width = _width; - m_height = _height; - m_sampler = m_swapChain.m_sampler; + m_nwh = _nwh; + m_width = m_swapChain.m_sci.imageExtent.width; + m_height = m_swapChain.m_sci.imageExtent.height; + m_sampler = m_swapChain.m_sampler; return result; } @@ -8261,11 +8385,22 @@ VK_DESTROY m_release[m_currentFrameInFlight].push_back(resource); } + void CommandQueueVK::recycleMemory(DeviceMemoryAllocationVK _mem) + { + m_recycleAllocs[m_currentFrameInFlight].push_back(_mem); + } + void CommandQueueVK::consume() { BGFX_PROFILER_SCOPE("CommandQueueVK::consume", kColorResource); m_consumeIndex = (m_consumeIndex + 1) % m_numFramesInFlight; + for (DeviceMemoryAllocationVK &alloc : m_recycleAllocs[m_consumeIndex]) + { + s_renderVK->m_memoryLru.recycle(alloc); + } + m_recycleAllocs[m_consumeIndex].clear(); + for (const Resource& resource : m_release[m_consumeIndex]) { switch (resource.m_type) @@ -8290,6 +8425,7 @@ VK_DESTROY } } + m_release[m_consumeIndex].clear(); } @@ -8501,10 +8637,7 @@ VK_DESTROY const uint64_t f3 = BGFX_STATE_BLEND_INV_FACTOR<<4; ScratchBufferVK& scratchBuffer = m_scratchBuffer[m_cmd.m_currentFrameInFlight]; - scratchBuffer.reset(); - ScratchBufferVK& scratchStagingBuffer = m_scratchStagingBuffer[m_cmd.m_currentFrameInFlight]; - scratchStagingBuffer.reset(); setMemoryBarrier( m_commandBuffer diff --git a/libs/bgfx/src/renderer_vk.h b/libs/bgfx/src/renderer_vk.h index 3abbad1..c561852 100644 --- a/libs/bgfx/src/renderer_vk.h +++ b/libs/bgfx/src/renderer_vk.h @@ -307,7 +307,7 @@ namespace bgfx { namespace vk ::Vk##_name* operator &() { return &vk; } \ const ::Vk##_name* operator &() const { return &vk; } \ }; \ - static_assert(sizeof(::Vk##_name) == sizeof(Vk##_name) ); \ + static_assert(sizeof(::Vk##_name) == sizeof(Vk##_name) ); \ void vkDestroy(Vk##_name&); \ void release(Vk##_name&) VK_DESTROY @@ -372,14 +372,52 @@ VK_DESTROY_FUNC(DescriptorSet); HashMap m_hashMap; }; + struct DeviceMemoryAllocationVK { + DeviceMemoryAllocationVK() + : mem(VK_NULL_HANDLE) + , offset(0) + , size(0) + , memoryTypeIndex(0) + { + } + + VkDeviceMemory mem; + uint32_t offset; + uint32_t size; + int32_t memoryTypeIndex; + }; + + struct MemoryLruVK + { + MemoryLruVK() + : entries() + , lru() + , totalSizeCached(0) + { + } + + static constexpr uint16_t MAX_ENTRIES = 1 << 10; + DeviceMemoryAllocationVK entries[MAX_ENTRIES]; + bx::HandleAllocLruT lru; + uint64_t totalSizeCached; + + void recycle(DeviceMemoryAllocationVK &_alloc); + bool find(uint32_t _size, int32_t _memoryTypeIndex, DeviceMemoryAllocationVK *_alloc); + void evictAll(); + }; + + /** A Buffer used for moving data from main memory to GPU memory. + * This can either be an independently allocated memory region, or a sub-region + * of the scratch staging buffer for the frame-in-flight. + */ struct StagingBufferVK { VkBuffer m_buffer; - VkDeviceMemory m_deviceMem; + DeviceMemoryAllocationVK m_deviceMem; uint8_t* m_data; uint32_t m_size; - uint32_t m_offset; + uint32_t m_offset; // Offset into the bound buffer (not the device memory!) bool m_isFromScratch; }; @@ -398,13 +436,12 @@ VK_DESTROY_FUNC(DescriptorSet); void createUniform(uint32_t _size, uint32_t _count); void createStaging(uint32_t _size); void destroy(); - void reset(); uint32_t alloc(uint32_t _size, uint32_t _minAlign = 1); uint32_t write(const void* _data, uint32_t _size, uint32_t _minAlign = 1); - void flush(); + void flush(bool _reset = true); VkBuffer m_buffer; - VkDeviceMemory m_deviceMem; + DeviceMemoryAllocationVK m_deviceMem; uint8_t* m_data; uint32_t m_size; @@ -416,7 +453,7 @@ VK_DESTROY_FUNC(DescriptorSet); { BufferVK() : m_buffer(VK_NULL_HANDLE) - , m_deviceMem(VK_NULL_HANDLE) + , m_deviceMem() , m_size(0) , m_flags(BGFX_BUFFER_NONE) , m_dynamic(false) @@ -428,7 +465,7 @@ VK_DESTROY_FUNC(DescriptorSet); void destroy(); VkBuffer m_buffer; - VkDeviceMemory m_deviceMem; + DeviceMemoryAllocationVK m_deviceMem; uint32_t m_size; uint16_t m_flags; bool m_dynamic; @@ -590,7 +627,7 @@ VK_DESTROY_FUNC(DescriptorSet); Query m_query[BGFX_CONFIG_MAX_VIEWS*4]; VkBuffer m_readback; - VkDeviceMemory m_readbackMemory; + DeviceMemoryAllocationVK m_readbackMemory; VkQueryPool m_queryPool; const uint64_t* m_queryResult; bx::RingBufferControl m_control; @@ -614,7 +651,7 @@ VK_DESTROY_FUNC(DescriptorSet); OcclusionQueryHandle m_handle[BGFX_CONFIG_MAX_OCCLUSION_QUERIES]; VkBuffer m_readback; - VkDeviceMemory m_readbackMemory; + DeviceMemoryAllocationVK m_readbackMemory; VkQueryPool m_queryPool; const uint32_t* m_queryResult; bx::RingBufferControl m_control; @@ -641,10 +678,10 @@ VK_DESTROY_FUNC(DescriptorSet); , m_sampler({ 1, VK_SAMPLE_COUNT_1_BIT }) , m_format(VK_FORMAT_UNDEFINED) , m_textureImage(VK_NULL_HANDLE) - , m_textureDeviceMem(VK_NULL_HANDLE) + , m_textureDeviceMem() , m_currentImageLayout(VK_IMAGE_LAYOUT_UNDEFINED) , m_singleMsaaImage(VK_NULL_HANDLE) - , m_singleMsaaDeviceMem(VK_NULL_HANDLE) + , m_singleMsaaDeviceMem() , m_currentSingleMsaaImageLayout(VK_IMAGE_LAYOUT_UNDEFINED) { } @@ -681,13 +718,13 @@ VK_DESTROY_FUNC(DescriptorSet); VkComponentMapping m_components; VkImageAspectFlags m_aspectMask; - VkImage m_textureImage; - VkDeviceMemory m_textureDeviceMem; - VkImageLayout m_currentImageLayout; + VkImage m_textureImage; + DeviceMemoryAllocationVK m_textureDeviceMem; + VkImageLayout m_currentImageLayout; - VkImage m_singleMsaaImage; - VkDeviceMemory m_singleMsaaDeviceMem; - VkImageLayout m_currentSingleMsaaImageLayout; + VkImage m_singleMsaaImage; + DeviceMemoryAllocationVK m_singleMsaaDeviceMem; + VkImageLayout m_currentSingleMsaaImageLayout; VkImageLayout m_sampledLayout; @@ -842,6 +879,7 @@ VK_DESTROY_FUNC(DescriptorSet); void finish(bool _finishAll = false); void release(uint64_t _handle, VkObjectType _type); + void recycleMemory(DeviceMemoryAllocationVK _mem); void consume(); uint32_t m_queueFamily; @@ -882,6 +920,8 @@ VK_DESTROY_FUNC(DescriptorSet); typedef stl::vector ResourceArray; ResourceArray m_release[BGFX_CONFIG_MAX_FRAME_LATENCY]; + stl::vector m_recycleAllocs[BGFX_CONFIG_MAX_FRAME_LATENCY]; + private: template diff --git a/libs/bgfx/src/version.h b/libs/bgfx/src/version.h index f793e3c..81d3d10 100644 --- a/libs/bgfx/src/version.h +++ b/libs/bgfx/src/version.h @@ -9,5 +9,5 @@ * */ -#define BGFX_REV_NUMBER 8861 -#define BGFX_REV_SHA1 "3434a173a2851e77900ee4e7956b62aed3a8158d" +#define BGFX_REV_NUMBER 8889 +#define BGFX_REV_SHA1 "4cc041f59f90fee9272ca9b57b292e2c23df1c69" diff --git a/libs/bgfx/tools/shaderc/shaderc_metal.cpp b/libs/bgfx/tools/shaderc/shaderc_metal.cpp index 0223921..9f073b9 100644 --- a/libs/bgfx/tools/shaderc/shaderc_metal.cpp +++ b/libs/bgfx/tools/shaderc/shaderc_metal.cpp @@ -14,15 +14,17 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wattributes") // warning: attribute ign BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wdeprecated-declarations") // warning: ‘MSLVertexAttr’ is deprecated BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wtype-limits") // warning: comparison of unsigned expression in ‘< 0’ is always false BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wshadow") // warning: declaration of 'userData' shadows a member of 'glslang::TShader::Includer::IncludeResult' +#define SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS +#include +#include +#include + #define ENABLE_OPT 1 #include #include #include #include #include -#define SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS -#include -#include #include BX_PRAGMA_DIAGNOSTIC_POP() diff --git a/libs/bgfx/tools/shaderc/shaderc_spirv.cpp b/libs/bgfx/tools/shaderc/shaderc_spirv.cpp index 5012c6e..f7910de 100644 --- a/libs/bgfx/tools/shaderc/shaderc_spirv.cpp +++ b/libs/bgfx/tools/shaderc/shaderc_spirv.cpp @@ -14,15 +14,17 @@ BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wattributes") // warning: attribute ign BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wdeprecated-declarations") // warning: ‘MSLVertexAttr’ is deprecated BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wtype-limits") // warning: comparison of unsigned expression in ‘< 0’ is always false BX_PRAGMA_DIAGNOSTIC_IGNORED_CLANG_GCC("-Wshadow") // warning: declaration of 'userData' shadows a member of 'glslang::TShader::Includer::IncludeResult' +#define SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS +#include +#include +#include + #define ENABLE_OPT 1 #include #include #include #include #include -#define SPIRV_CROSS_EXCEPTIONS_TO_ASSERTIONS -#include -#include #include BX_PRAGMA_DIAGNOSTIC_POP() diff --git a/libs/bimg/3rdparty/nvtt/bc6h/zoh_utils.cpp b/libs/bimg/3rdparty/nvtt/bc6h/zoh_utils.cpp index fde3200..1e64e28 100644 --- a/libs/bimg/3rdparty/nvtt/bc6h/zoh_utils.cpp +++ b/libs/bimg/3rdparty/nvtt/bc6h/zoh_utils.cpp @@ -37,7 +37,7 @@ int Utils::lerp(int a, int b, int i, int denom) case 3: denom *= 5; i *= 5; // fall through to case 15 case 15: weights = denom15_weights_64; break; case 7: weights = denom7_weights_64; break; - default: nvDebugCheck(0); + default: nvUnreachable(); } return (a*weights[denom-i] +b*weights[i] + round) >> shift; diff --git a/libs/bimg/LICENSE b/libs/bimg/LICENSE index 0edd62e..8ff0ed7 100644 --- a/libs/bimg/LICENSE +++ b/libs/bimg/LICENSE @@ -1,4 +1,4 @@ -Copyright 2010-2024 Branimir Karadzic +Copyright 2010-2025 Branimir Karadzic Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/libs/bimg/README.md b/libs/bimg/README.md index debdbeb..99ca378 100644 --- a/libs/bimg/README.md +++ b/libs/bimg/README.md @@ -21,7 +21,7 @@ https://github.com/bkaradzic/bimg - Copyright 2010-2024 Branimir Karadzic + Copyright 2010-2025 Branimir Karadzic Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/libs/bimg/src/image.cpp b/libs/bimg/src/image.cpp index 3d21c06..2f0ff0b 100644 --- a/libs/bimg/src/image.cpp +++ b/libs/bimg/src/image.cpp @@ -3702,7 +3702,7 @@ namespace bimg return false; } - if ( (flags & (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT) ) != (DDSD_CAPS|DDSD_HEIGHT|DDSD_WIDTH|DDSD_PIXELFORMAT) ) + if ( (flags & (DDSD_HEIGHT|DDSD_WIDTH) ) != (DDSD_HEIGHT|DDSD_WIDTH) ) { BX_ERROR_SET(_err, BIMG_ERROR, "DDS: Invalid flags."); return false; diff --git a/libs/bx/include/bx/inline/uint32_t.inl b/libs/bx/include/bx/inline/uint32_t.inl index 881995d..ee4b025 100644 --- a/libs/bx/include/bx/inline/uint32_t.inl +++ b/libs/bx/include/bx/inline/uint32_t.inl @@ -184,6 +184,26 @@ namespace bx return -!!_a; } + template<> + inline BX_CONSTEXPR_FUNC uint32_t uint32_splat(uint8_t _val) + { + const uint32_t tmp0 = uint32_sll(_val, 8); + const uint32_t tmp1 = uint32_or(tmp0, _val); + const uint32_t tmp2 = uint32_sll(tmp1, 16); + const uint32_t result = uint32_or(tmp2, tmp1); + + return result; + } + + template<> + inline BX_CONSTEXPR_FUNC uint32_t uint32_splat(uint16_t _val) + { + const uint32_t tmp = uint32_sll(_val, 16); + const uint32_t result = uint32_or(tmp, _val); + + return result; + } + inline BX_CONSTEXPR_FUNC uint32_t uint32_satadd(uint32_t _a, uint32_t _b) { const uint32_t add = uint32_add(_a, _b); @@ -559,6 +579,39 @@ namespace bx return _a * _b; } + template<> + inline BX_CONSTEXPR_FUNC uint64_t uint64_splat(uint8_t _val) + { + const uint64_t tmp0 = uint64_sll(_val, 8); + const uint64_t tmp1 = uint64_or(tmp0, _val); + const uint64_t tmp2 = uint64_sll(tmp1, 16); + const uint64_t tmp3 = uint64_or(tmp2, tmp1); + const uint64_t tmp4 = uint64_sll(tmp3, 32); + const uint64_t result = uint64_or(tmp4, tmp3); + + return result; + } + + template<> + inline BX_CONSTEXPR_FUNC uint64_t uint64_splat(uint16_t _val) + { + const uint64_t tmp0 = uint64_sll(_val, 16); + const uint64_t tmp1 = uint64_or(tmp0, _val); + const uint64_t tmp2 = uint64_sll(tmp1, 32); + const uint64_t result = uint64_or(tmp2, tmp1); + + return result; + } + + template<> + inline BX_CONSTEXPR_FUNC uint64_t uint64_splat(uint32_t _val) + { + const uint64_t tmp = uint64_sll(_val, 32); + const uint64_t result = uint64_or(tmp, _val); + + return result; + } + inline BX_CONSTEXPR_FUNC uint64_t uint64_cntbits(uint64_t _val) { #if BX_COMPILER_GCC || BX_COMPILER_CLANG diff --git a/libs/bx/include/bx/platform.h b/libs/bx/include/bx/platform.h index de4560b..b43e02e 100644 --- a/libs/bx/include/bx/platform.h +++ b/libs/bx/include/bx/platform.h @@ -469,10 +469,16 @@ static_assert(!BX_COMPILER_GCC || BX_COMPILER_GCC >= 110000, "\n\n" "\tMinimum supported GCC version is 11.0 (April 27, 2021).\n" "\t\n"); -// https://learn.microsoft.com/en-us/visualstudio/releases/2019/history -static_assert(!BX_COMPILER_MSVC || BX_COMPILER_MSVC >= 1927, "\n\n" +// https://www.sourceware.org/glibc/wiki/Glibc%20Timeline +static_assert(!BX_CRT_GLIBC || BX_CRT_GLIBC >= 23100, "\n\n" "\t** IMPORTANT! **\n\n" - "\tMinimum supported MSVC 19.27 / Visual Studio 2019 version 16.7 (August 5, 2020).\n" + "\tMinimum supported GLIBC version is 2.31.0 (February 1, 2020).\n" + "\t\n"); + +// https://learn.microsoft.com/en-us/cpp/overview/compiler-versions +static_assert(!BX_COMPILER_MSVC || BX_COMPILER_MSVC >= 1935, "\n\n" + "\t** IMPORTANT! **\n\n" + "\tMinimum supported MSVC 19.35 / Visual Studio 2022 version 17.5 (February 21, 2023).\n" "\t\n"); static_assert(!BX_CPU_ENDIAN_BIG, "\n\n" diff --git a/libs/bx/include/bx/uint32_t.h b/libs/bx/include/bx/uint32_t.h index 83f52a1..81735f8 100644 --- a/libs/bx/include/bx/uint32_t.h +++ b/libs/bx/include/bx/uint32_t.h @@ -102,6 +102,10 @@ namespace bx /// BX_CONSTEXPR_FUNC uint32_t uint32_setnz(uint32_t _a); + /// + template + BX_CONSTEXPR_FUNC uint32_t uint32_splat(Ty _val); + /// BX_CONSTEXPR_FUNC uint32_t uint32_satadd(uint32_t _a, uint32_t _b); @@ -235,6 +239,10 @@ namespace bx /// BX_CONSTEXPR_FUNC uint64_t uint64_mul(uint64_t _a, uint64_t _b); + /// + template + BX_CONSTEXPR_FUNC uint64_t uint64_splat(Ty _val); + /// BX_CONSTEXPR_FUNC uint64_t uint64_cntbits(uint64_t _val); diff --git a/libs/bx/include/tinystl/LICENSE b/libs/bx/include/tinystl/LICENSE index f03d947..bfea591 100644 --- a/libs/bx/include/tinystl/LICENSE +++ b/libs/bx/include/tinystl/LICENSE @@ -1,4 +1,4 @@ - Copyright 2012 Matthew Endsley + Copyright 2012-2018 Matthew Endsley All rights reserved Redistribution and use in source and binary forms, with or without diff --git a/libs/bx/include/tinystl/allocator.h b/libs/bx/include/tinystl/allocator.h index a0cce7b..ce3efe0 100644 --- a/libs/bx/include/tinystl/allocator.h +++ b/libs/bx/include/tinystl/allocator.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -27,9 +27,7 @@ #ifndef TINYSTL_ALLOCATOR_H #define TINYSTL_ALLOCATOR_H -#include "stddef.h" - -#ifndef TINYSTL_ALLOCATOR +#include namespace tinystl { @@ -44,7 +42,8 @@ namespace tinystl { }; } +#ifndef TINYSTL_ALLOCATOR # define TINYSTL_ALLOCATOR ::tinystl::allocator -#endif // TINYSTL_ALLOCATOR +#endif #endif diff --git a/libs/bx/include/tinystl/buffer.h b/libs/bx/include/tinystl/buffer.h index 4351ec2..efc5c9c 100644 --- a/libs/bx/include/tinystl/buffer.h +++ b/libs/bx/include/tinystl/buffer.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012-1015 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -27,8 +27,9 @@ #ifndef TINYSTL_BUFFER_H #define TINYSTL_BUFFER_H -#include "new.h" -#include "traits.h" +#include +#include +#include namespace tinystl { @@ -140,7 +141,7 @@ namespace tinystl { template static inline void buffer_reserve(buffer* b, size_t capacity) { - if (b->first + capacity <= b->capacity) + if (b->first && b->first + capacity <= b->capacity) return; typedef T* pointer; @@ -174,19 +175,21 @@ namespace tinystl { template static inline void buffer_shrink_to_fit(buffer* b) { - if (b->last == b->first) { - const size_t capacity = (size_t)(b->last - b->first); - Alloc::static_deallocate(b->first, sizeof(T)*capacity); - b->capacity = b->first; - } else if (b->capacity != b->last) { - const size_t capacity = (size_t)(b->capacity - b->first); - const size_t size = (size_t)(b->last - b->first); - T* newfirst = (T*)Alloc::static_allocate(sizeof(T) * size); - buffer_move_urange(newfirst, b->first, b->last); - Alloc::static_deallocate(b->first, sizeof(T) * capacity); - b->first = newfirst; - b->last = newfirst + size; - b->capacity = b->last; + if (b->capacity != b->last) { + if (b->last == b->first) { + const size_t capacity = (size_t)(b->capacity - b->first); + Alloc::static_deallocate(b->first, sizeof(T)*capacity); + b->capacity = b->first = b->last = nullptr; + } else { + const size_t capacity = (size_t)(b->capacity - b->first); + const size_t size = (size_t)(b->last - b->first); + T* newfirst = (T*)Alloc::static_allocate(sizeof(T) * size); + buffer_move_urange(newfirst, b->first, b->last); + Alloc::static_deallocate(b->first, sizeof(T) * capacity); + b->first = newfirst; + b->last = newfirst + size; + b->capacity = b->last; + } } } @@ -200,7 +203,7 @@ namespace tinystl { static inline T* buffer_insert_common(buffer* b, T* where, size_t count) { const size_t offset = (size_t)(where - b->first); const size_t newsize = (size_t)((b->last - b->first) + count); - if (b->first + newsize > b->capacity) + if (!b->first || b->first + newsize > b->capacity) buffer_reserve(b, (newsize * 3) / 2); where = b->first + offset; @@ -215,7 +218,21 @@ namespace tinystl { template static inline void buffer_insert(buffer* b, T* where, const Param* first, const Param* last) { - where = buffer_insert_common(b, where, last - first); + typedef const char* pointer; + const size_t count = last - first; + const bool frombuf = ((pointer)b->first <= (pointer)first && (pointer)b->last >= (pointer)last); + size_t offset; + if (frombuf) { + offset = (pointer)first - (pointer)b->first; + if ((pointer)where <= (pointer)first) + offset += count * sizeof(T); + where = buffer_insert_common(b, where, count); + first = (Param*)((pointer)b->first + offset); + last = first + count; + } + else { + where = buffer_insert_common(b, where, count); + } for (; first != last; ++first, ++where) new(placeholder(), where) T(*first); } @@ -223,7 +240,7 @@ namespace tinystl { template static inline void buffer_insert(buffer* b, T* where, size_t count) { where = buffer_insert_common(b, where, count); - for (size_t i = 0; i < count; ++i) + for (T* end = where+count; where != end; ++where) new(placeholder(), where) T(); } @@ -250,28 +267,28 @@ namespace tinystl { template static inline T* buffer_erase(buffer* b, T* first, T* last) { typedef T* pointer; - const size_t range = (last - first); + const size_t count = (last - first); for (pointer it = last, end = b->last, dest = first; it != end; ++it, ++dest) move(*dest, *it); - buffer_destroy_range(b->last - range, b->last); + buffer_destroy_range(b->last - count, b->last); - b->last -= range; + b->last -= count; return first; } template static inline T* buffer_erase_unordered(buffer* b, T* first, T* last) { typedef T* pointer; - const size_t range = (last - first); + const size_t count = (last - first); const size_t tail = (b->last - last); - pointer it = b->last - ((range < tail) ? range : tail); + pointer it = b->last - ((count < tail) ? count : tail); for (pointer end = b->last, dest = first; it != end; ++it, ++dest) move(*dest, *it); - buffer_destroy_range(b->last - range, b->last); + buffer_destroy_range(b->last - count, b->last); - b->last -= range; + b->last -= count; return first; } @@ -282,6 +299,12 @@ namespace tinystl { b->first = other->first, b->last = other->last, b->capacity = other->capacity; other->first = tfirst, other->last = tlast, other->capacity = tcapacity; } + + template + static inline void buffer_move(buffer* dst, buffer* src) { + dst->first = src->first, dst->last = src->last, dst->capacity = src->capacity; + src->first = src->last = src->capacity = nullptr; + } } -#endif +#endif //TINYSTL_BUFFER_H diff --git a/libs/bx/include/tinystl/hash.h b/libs/bx/include/tinystl/hash.h index 787ddae..55f9788 100644 --- a/libs/bx/include/tinystl/hash.h +++ b/libs/bx/include/tinystl/hash.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -27,7 +27,7 @@ #ifndef TINYSTL_STRINGHASH_H #define TINYSTL_STRINGHASH_H -#include "stddef.h" +#include namespace tinystl { diff --git a/libs/bx/include/tinystl/hash_base.h b/libs/bx/include/tinystl/hash_base.h index f20675d..386da28 100644 --- a/libs/bx/include/tinystl/hash_base.h +++ b/libs/bx/include/tinystl/hash_base.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -27,79 +27,134 @@ #ifndef TINYSTL_HASH_BASE_H #define TINYSTL_HASH_BASE_H -#include "stddef.h" +#include +#include namespace tinystl { template struct pair { - typedef Key first_type; - typedef Value second_type; - pair(); + pair(const pair& other); + pair(pair&& other); pair(const Key& key, const Value& value); + pair(Key&& key, Value&& value); + + pair& operator=(const pair& other); + pair& operator=(pair&& other); Key first; Value second; + + using first_type = Key; + using second_type = Value; }; template - pair::pair() { + inline pair::pair() { + } + + template + inline pair::pair(const pair& other) + : first(other.first) + , second(other.second) + { + } + + template + inline pair::pair(pair&& other) + : first(static_cast(other.first)) + , second(static_cast(other.second)) + { } template - pair::pair(const Key& key, const Value& value) + inline pair::pair(const Key& key, const Value& value) : first(key) , second(value) { } template - static inline pair make_pair(const Key& key, const Value& value) { - return pair(key, value); + inline pair::pair(Key&& key, Value&& value) + : first(static_cast(key)) + , second(static_cast(value)) + { + } + + template + inline pair& pair::operator=(const pair& other) { + first = other.first; + second = other.second; + return *this; + } + + template + inline pair& pair::operator=(pair&& other) { + first = static_cast(other.first); + second = static_cast(other.second); + return *this; + } + + template + static inline pair::type, typename remove_const_reference::type> + make_pair(Key&& key, Value&& value) { + return pair::type, typename remove_const_reference::type>( + static_cast(key) + , static_cast(value) + ); } template struct unordered_hash_node { unordered_hash_node(const Key& key, const Value& value); + unordered_hash_node(Key&& key, Value&& value); const Key first; Value second; unordered_hash_node* next; unordered_hash_node* prev; - - private: - unordered_hash_node& operator=(const unordered_hash_node&); }; template - unordered_hash_node::unordered_hash_node(const Key& key, const Value& value) + inline unordered_hash_node::unordered_hash_node(const Key& key, const Value& value) : first(key) , second(value) { } + template + inline unordered_hash_node::unordered_hash_node(Key&& key, Value&& value) + : first(static_cast(key)) + , second(static_cast(value)) + { + } + template struct unordered_hash_node { - unordered_hash_node(const Key& key); + explicit unordered_hash_node(const Key& key); + explicit unordered_hash_node(Key&& key); const Key first; unordered_hash_node* next; unordered_hash_node* prev; - - private: - unordered_hash_node& operator=(const unordered_hash_node&); }; template - unordered_hash_node::unordered_hash_node(const Key& key) + inline unordered_hash_node::unordered_hash_node(const Key& key) : first(key) { } + template + inline unordered_hash_node::unordered_hash_node(Key&& key) + : first(static_cast(key)) + { + } + template - static void unordered_hash_node_insert(unordered_hash_node* node, size_t hash, unordered_hash_node** buckets, size_t nbuckets) { + static inline void unordered_hash_node_insert(unordered_hash_node* node, size_t hash, unordered_hash_node** buckets, size_t nbuckets) { size_t bucket = hash & (nbuckets - 1); unordered_hash_node* it = buckets[bucket + 1]; @@ -223,6 +278,7 @@ namespace tinystl { template static inline Node unordered_hash_find(const Key& key, Node* buckets, size_t nbuckets) { + if (!buckets) return 0; const size_t bucket = hash(key) & (nbuckets - 2); for (Node it = buckets[bucket], end = buckets[bucket+1]; it != end; it = it->next) if (it->first == key) diff --git a/libs/bx/include/tinystl/new.h b/libs/bx/include/tinystl/new.h index 9c86dd8..62bb072 100644 --- a/libs/bx/include/tinystl/new.h +++ b/libs/bx/include/tinystl/new.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -27,7 +27,7 @@ #ifndef TINYSTL_NEW_H #define TINYSTL_NEW_H -#include "stddef.h" +#include namespace tinystl { diff --git a/libs/bx/include/tinystl/stddef.h b/libs/bx/include/tinystl/stddef.h index 21c1b1e..a31dd34 100644 --- a/libs/bx/include/tinystl/stddef.h +++ b/libs/bx/include/tinystl/stddef.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -29,10 +29,13 @@ #if defined(_WIN64) typedef long long unsigned int size_t; + typedef long long int ptrdiff_t; #elif defined(_WIN32) typedef unsigned int size_t; -#elif defined (__linux__) && defined(__SIZE_TYPE__) + typedef int ptrdiff_t; +#elif defined (__linux__) && defined(__SIZE_TYPE__) && defined(__PTRDIFF_TYPE__) typedef __SIZE_TYPE__ size_t; + typedef __PTRDIFF_TYPE__ ptrdiff_t; #else # include #endif diff --git a/libs/bx/include/tinystl/string.h b/libs/bx/include/tinystl/string.h index 4d90c2a..889d726 100644 --- a/libs/bx/include/tinystl/string.h +++ b/libs/bx/include/tinystl/string.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -27,34 +27,37 @@ #ifndef TINYSTL_STRING_H #define TINYSTL_STRING_H -#include // strlen -#include "stddef.h" -#include "hash.h" +#include +#include +#include namespace tinystl { - template - class stringT { + template + class basic_string { public: - stringT(); - stringT(const stringT& other); - stringT(const char* sz); - stringT(const char* sz, size_t len); - ~stringT(); + basic_string(); + basic_string(const basic_string& other); + basic_string(basic_string&& other); + basic_string(const char* sz); + basic_string(const char* sz, size_t len); + ~basic_string(); - stringT& operator=(const stringT& other); + basic_string& operator=(const basic_string& other); + basic_string& operator=(basic_string&& other); const char* c_str() const; size_t size() const; - bool empty() const; - void reserve(size_t _size); - void resize(size_t _size); + void reserve(size_t size); + void resize(size_t size); + void clear(); void append(const char* first, const char* last); - void append(const char* str); + void assign(const char* s, size_t n); - void swap(stringT& other); + void shrink_to_fit(); + void swap(basic_string& other); private: typedef char* pointer; @@ -63,13 +66,11 @@ namespace tinystl { pointer m_capacity; static const size_t c_nbuffer = 12; - char m_buffer[12]; + char m_buffer[12]{0}; }; - typedef stringT string; - - template - inline stringT::stringT() + template + inline basic_string::basic_string() : m_first(m_buffer) , m_last(m_buffer) , m_capacity(m_buffer + c_nbuffer) @@ -77,8 +78,8 @@ namespace tinystl { resize(0); } - template - inline stringT::stringT(const stringT& other) + template + inline basic_string::basic_string(const basic_string& other) : m_first(m_buffer) , m_last(m_buffer) , m_capacity(m_buffer + c_nbuffer) @@ -87,8 +88,27 @@ namespace tinystl { append(other.m_first, other.m_last); } - template - inline stringT::stringT(const char* sz) + template + inline basic_string::basic_string(basic_string&& other) + { + if (other.m_first == other.m_buffer) { + m_first = m_buffer; + m_last = m_buffer; + m_capacity = m_buffer + c_nbuffer; + reserve(other.size()); + append(other.m_first, other.m_last); + } else { + m_first = other.m_first; + m_last = other.m_last; + m_capacity = other.m_capacity; + } + other.m_first = other.m_last = other.m_buffer; + other.m_capacity = other.m_buffer + c_nbuffer; + other.resize(0); + } + + template + inline basic_string::basic_string(const char* sz) : m_first(m_buffer) , m_last(m_buffer) , m_capacity(m_buffer + c_nbuffer) @@ -101,8 +121,8 @@ namespace tinystl { append(sz, sz + len); } - template - inline stringT::stringT(const char* sz, size_t len) + template + inline basic_string::basic_string(const char* sz, size_t len) : m_first(m_buffer) , m_last(m_buffer) , m_capacity(m_buffer + c_nbuffer) @@ -111,69 +131,75 @@ namespace tinystl { append(sz, sz + len); } - template - inline stringT::~stringT() { + template + inline basic_string::~basic_string() { if (m_first != m_buffer) - Alloc::static_deallocate(m_first, m_capacity - m_first); + allocator::static_deallocate(m_first, m_capacity - m_first); } - template - inline stringT& stringT::operator=(const stringT& other) { - stringT(other).swap(*this); + template + inline basic_string& basic_string::operator=(const basic_string& other) { + basic_string(other).swap(*this); return *this; } - template - inline const char* stringT::c_str() const { - return m_first; + template + inline basic_string& basic_string::operator=(basic_string&& other) { + basic_string(static_cast(other)).swap(*this); + return *this; } - template - inline size_t stringT::size() const - { - return (size_t)(m_last - m_first); + template + inline const char* basic_string::c_str() const { + return m_first; } - template - inline bool stringT::empty() const + template + inline size_t basic_string::size() const { - return 0 == size(); + ptrdiff_t size = m_last - m_first; + return (size_t)size; } - template - inline void stringT::reserve(size_t capacity) { - if (m_first + capacity + 1 <= m_capacity) { + template + inline void basic_string::reserve(size_t capacity) { + if (m_first + capacity + 1 <= m_capacity) return; - } - const size_t _size = (size_t)(m_last - m_first); + const ptrdiff_t size = m_last - m_first; - pointer newfirst = (pointer)Alloc::static_allocate(capacity + 1); - for (pointer it = m_first, newit = newfirst, end = m_last; it != end; ++it, ++newit) { + pointer newfirst = (pointer)allocator::static_allocate(capacity + 1); + for (pointer it = m_first, newit = newfirst, end = m_last; it != end; ++it, ++newit) *newit = *it; - } - - if (m_first != m_buffer) { - Alloc::static_deallocate(m_first, m_capacity - m_first); - } + if (m_first != m_buffer) + allocator::static_deallocate(m_first, m_capacity - m_first); m_first = newfirst; - m_last = newfirst + _size; + m_last = newfirst + size; m_capacity = m_first + capacity; } - template - inline void stringT::resize(size_t _size) { - reserve(_size); - for (pointer it = m_last, end = m_first + _size + 1; it < end; ++it) - *it = 0; + template + inline void basic_string::resize(size_t size) { + const ptrdiff_t prevSize = m_last-m_first; + reserve(size); + if (size > (size_t)prevSize) + for (pointer it = m_last, end = m_first + size + 1; it < end; ++it) + *it = 0; + else if (m_last != m_first) + m_first[size] = 0; + + m_last = m_first + size; + } - m_last += _size; + template + inline void basic_string::clear() { + resize(0); } - template - inline void stringT::append(const char* first, const char* last) { - const size_t newsize = (size_t)((m_last - m_first) + (last - first) + 1); + template + inline void basic_string::append(const char* first, const char* last) { + const ptrdiff_t newsize = ((m_last - m_first) + (last - first) + 1); if (m_first + newsize > m_capacity) reserve((newsize * 3) / 2); @@ -182,46 +208,62 @@ namespace tinystl { *m_last = 0; } - template - inline void stringT::append(const char* str) { - append(str, str + strlen(str) ); + template + inline void basic_string::assign(const char* sz, size_t n) { + clear(); + append(sz, sz+n); } - template - inline void stringT::swap(stringT& other) { - const pointer tfirst = m_first, tlast = m_last, tcapacity = m_capacity; - m_first = other.m_first, m_last = other.m_last, m_capacity = other.m_capacity; - other.m_first = tfirst, other.m_last = tlast, other.m_capacity = tcapacity; - - char tbuffer[c_nbuffer]; - - if (m_first == other.m_buffer) - for (pointer it = other.m_buffer, end = m_last, out = tbuffer; it != end; ++it, ++out) - *out = *it; - - if (other.m_first == m_buffer) { - other.m_last = other.m_last - other.m_first + other.m_buffer; - other.m_first = other.m_buffer; - other.m_capacity = other.m_buffer + c_nbuffer; + template + inline void basic_string::shrink_to_fit() { + if (m_first == m_buffer) { + } else if (m_last == m_first) { + const ptrdiff_t capacity = m_capacity - m_first; + if (capacity) + allocator::static_deallocate(m_first, capacity+1); + m_capacity = m_first; + } else if (m_capacity != m_last) { + const ptrdiff_t size = m_last - m_first; + char* newfirst = (pointer)allocator::static_allocate(size+1); + for (pointer in = m_first, out = newfirst; in != m_last + 1; ++in, ++out) + *out = *in; + if (m_first != m_capacity) + allocator::static_deallocate(m_first, m_capacity+1-m_first); + m_first = newfirst; + m_last = newfirst+size; + m_capacity = m_last; + } + } - for (pointer it = other.m_first, end = other.m_last, in = m_buffer; it != end; ++it, ++in) - *it = *in; - *other.m_last = 0; + template + inline void basic_string::swap(basic_string& other) { + { + const pointer tfirst = m_first, tlast = m_last, tcapacity = m_capacity; + m_first = other.m_first, m_last = other.m_last, m_capacity = other.m_capacity; + other.m_first = tfirst, other.m_last = tlast, other.m_capacity = tcapacity; } + for (size_t i = 0; i < c_nbuffer; ++i) { + const char temp = m_buffer[i]; + m_buffer[i] = other.m_buffer[i]; + other.m_buffer[i] = temp; + } if (m_first == other.m_buffer) { - m_last = m_last - m_first + m_buffer; + ptrdiff_t len = m_last - m_first; m_first = m_buffer; + m_last = m_buffer + len; m_capacity = m_buffer + c_nbuffer; - - for (pointer it = m_first, end = m_last, in = tbuffer; it != end; ++it, ++in) - *it = *in; - *m_last = 0; + } + if (other.m_first == m_buffer) { + ptrdiff_t len = other.m_last - other.m_first; + other.m_first = other.m_buffer; + other.m_last = other.m_buffer + len; + other.m_capacity = other.m_buffer + c_nbuffer; } } - template - inline bool operator==(const stringT& lhs, const stringT& rhs) { + template + inline bool operator==(const basic_string& lhs, const basic_string& rhs) { typedef const char* pointer; const size_t lsize = lhs.size(), rsize = rhs.size(); @@ -237,10 +279,12 @@ namespace tinystl { return true; } - template - static inline size_t hash(const stringT& value) { + template + static inline size_t hash(const basic_string& value) { return hash_string(value.c_str(), value.size()); } + + typedef basic_string string; } #endif diff --git a/libs/bx/include/tinystl/string_view.h b/libs/bx/include/tinystl/string_view.h new file mode 100644 index 0000000..34d8528 --- /dev/null +++ b/libs/bx/include/tinystl/string_view.h @@ -0,0 +1,147 @@ +/*- + * Copyright 2012-1017 Matthew Endsley + * All rights reserved + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted providing that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + */ + +#ifndef TINYSTL_STRING_VIEW_H +#define TINYSTL_STRING_VIEW_H + +#include + +namespace tinystl { + + class string_view + { + public: + typedef char value_type; + typedef char* pointer; + typedef const char* const_pointer; + typedef char& reference; + typedef const char& const_reference; + typedef const_pointer iterator; + typedef const_pointer const_iterator; + typedef size_t size_type; + typedef ptrdiff_t difference_type; + + static constexpr size_type npos = size_type(-1); + + constexpr string_view(); + constexpr string_view(const char* s, size_type count); + constexpr string_view(const char* s); + constexpr string_view(const string_view&) = default; + string_view& operator=(const string_view&) = default; + + constexpr const char* data() const; + constexpr char operator[](size_type pos) const; + constexpr size_type size() const; + constexpr bool empty() const; + constexpr iterator begin() const; + constexpr const_iterator cbegin() const; + constexpr iterator end() const; + constexpr const_iterator cend() const; + constexpr string_view substr(size_type pos = 0, size_type count = npos) const; + constexpr void swap(string_view& v); + + private: + string_view(decltype(nullptr)) = delete; + + static constexpr size_type strlen(const char*); + + const char* m_str; + size_type m_size; + }; + + constexpr string_view::string_view() + : m_str(nullptr) + , m_size(0) + { + } + + constexpr string_view::string_view(const char* s, size_type count) + : m_str(s) + , m_size(count) + { + } + + constexpr string_view::string_view(const char* s) + : m_str(s) + , m_size(strlen(s)) + { + } + + constexpr const char* string_view::data() const { + return m_str; + } + + constexpr char string_view::operator[](size_type pos) const { + return m_str[pos]; + } + + constexpr string_view::size_type string_view::size() const { + return m_size; + } + + constexpr bool string_view::empty() const { + return 0 == m_size; + } + + constexpr string_view::iterator string_view::begin() const { + return m_str; + } + + constexpr string_view::const_iterator string_view::cbegin() const { + return m_str; + } + + constexpr string_view::iterator string_view::end() const { + return m_str + m_size; + } + + constexpr string_view::const_iterator string_view::cend() const { + return m_str + m_size; + } + + constexpr string_view string_view::substr(size_type pos, size_type count) const { + return string_view(m_str + pos, npos == count ? m_size - pos : count); + } + + constexpr void string_view::swap(string_view& v) { + const char* strtmp = m_str; + size_type sizetmp = m_size; + m_str = v.m_str; + m_size = v.m_size; + v.m_str = strtmp; + v.m_size = sizetmp; + } + + constexpr string_view::size_type string_view::strlen(const char* s) { + for (size_t len = 0; ; ++len) { + if (0 == s[len]) { + return len; + } + } + } +} + +#endif // TINYSTL_STRING_VIEW_H diff --git a/libs/bx/include/tinystl/traits.h b/libs/bx/include/tinystl/traits.h index 11b18e7..b598403 100644 --- a/libs/bx/include/tinystl/traits.h +++ b/libs/bx/include/tinystl/traits.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -27,9 +27,9 @@ #ifndef TINYSTL_TRAITS_H #define TINYSTL_TRAITS_H -#include "new.h" +#include -#if defined(__GNUC__) && defined(__is_pod) +#if defined(__GNUC__) # define TINYSTL_TRY_POD_OPTIMIZATION(t) __is_pod(t) #elif defined(_MSC_VER) # define TINYSTL_TRY_POD_OPTIMIZATION(t) (!__is_class(t) || __is_pod(t)) @@ -80,6 +80,46 @@ namespace tinystl { static inline void move_construct(T* a, T& b) { move_construct_impl(a, b, (T*)0); } + + template + struct remove_reference { + typedef T type; + }; + + template + struct remove_reference { + typedef T type; + }; + + template + struct remove_reference { + typedef T type; + }; + + template + struct remove_const { + typedef T type; + }; + + template + struct remove_const { + typedef T type; + }; + + template + struct remove_const { + typedef T& type; + }; + + template + struct remove_const { + typedef T&& type; + }; + + template + struct remove_const_reference { + typedef typename remove_reference::type>::type type; + }; } #endif diff --git a/libs/bx/include/tinystl/unordered_map.h b/libs/bx/include/tinystl/unordered_map.h index 64f8457..8d2a7b3 100644 --- a/libs/bx/include/tinystl/unordered_map.h +++ b/libs/bx/include/tinystl/unordered_map.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -27,9 +27,10 @@ #ifndef TINYSTL_UNORDERED_MAP_H #define TINYSTL_UNORDERED_MAP_H -#include "buffer.h" -#include "hash.h" -#include "hash_base.h" +#include +#include +#include +#include namespace tinystl { @@ -38,13 +39,14 @@ namespace tinystl { public: unordered_map(); unordered_map(const unordered_map& other); + unordered_map(unordered_map&& other); ~unordered_map(); unordered_map& operator=(const unordered_map& other); - + unordered_map& operator=(unordered_map&& other); typedef pair value_type; - + typedef unordered_hash_iterator > const_iterator; typedef unordered_hash_iterator > iterator; @@ -61,6 +63,7 @@ namespace tinystl { const_iterator find(const Key& key) const; iterator find(const Key& key); pair insert(const pair& p); + pair emplace(pair&& p); void erase(const_iterator where); Value& operator[](const Key& key); @@ -69,73 +72,99 @@ namespace tinystl { private: + void rehash(size_t nbuckets); + typedef unordered_hash_node* pointer; size_t m_size; - buffer m_buckets; + tinystl::buffer m_buckets; }; template - unordered_map::unordered_map() + inline unordered_map::unordered_map() : m_size(0) { buffer_init(&m_buckets); - buffer_resize(&m_buckets, 9, 0); } template - unordered_map::unordered_map(const unordered_map& other) + inline unordered_map::unordered_map(const unordered_map& other) : m_size(other.m_size) { const size_t nbuckets = (size_t)(other.m_buckets.last - other.m_buckets.first); buffer_init(&m_buckets); buffer_resize(&m_buckets, nbuckets, 0); - for (pointer it = *other.m_buckets.first; it; it = it->next) { - unordered_hash_node* newnode = new(placeholder(), Alloc::static_allocate(sizeof(unordered_hash_node))) unordered_hash_node(it->first, it->second); - newnode->next = newnode->prev = 0; + if (other.m_buckets.first) { + for (pointer it = *other.m_buckets.first; it; it = it->next) { + unordered_hash_node* newnode = new(placeholder(), Alloc::static_allocate(sizeof(unordered_hash_node))) unordered_hash_node(it->first, it->second); + newnode->next = newnode->prev = 0; - unordered_hash_node_insert(newnode, hash(it->first), m_buckets.first, nbuckets - 1); + unordered_hash_node_insert(newnode, hash(it->first), m_buckets.first, nbuckets - 1); + } } } template - unordered_map::~unordered_map() { - clear(); + inline unordered_map::unordered_map(unordered_map&& other) + : m_size(other.m_size) + { + buffer_move(&m_buckets, &other.m_buckets); + other.m_size = 0; + } + + template + inline unordered_map::~unordered_map() { + if (m_buckets.first != m_buckets.last) + clear(); buffer_destroy(&m_buckets); } template - unordered_map& unordered_map::operator=(const unordered_map& other) { + inline unordered_map& unordered_map::operator=(const unordered_map& other) { unordered_map(other).swap(*this); return *this; } + template + inline unordered_map& unordered_map::operator=(unordered_map&& other) { + unordered_map(static_cast(other)).swap(*this); + return *this; + } + template inline typename unordered_map::iterator unordered_map::begin() { iterator it; - it.node = *m_buckets.first; + if (m_buckets.first) { + it.node = *m_buckets.first; + } else { + it.node = nullptr; + } return it; } template inline typename unordered_map::iterator unordered_map::end() { iterator it; - it.node = 0; + it.node = nullptr; return it; } template inline typename unordered_map::const_iterator unordered_map::begin() const { const_iterator cit; - cit.node = *m_buckets.first; + if (m_buckets.first) { + cit.node = *m_buckets.first; + } else { + cit.node = nullptr; + } return cit; } template inline typename unordered_map::const_iterator unordered_map::end() const { const_iterator cit; - cit.node = 0; + cit.node = nullptr; return cit; } @@ -151,13 +180,15 @@ namespace tinystl { template inline void unordered_map::clear() { - pointer it = *m_buckets.first; - while (it) { - const pointer next = it->next; - it->~unordered_hash_node(); - Alloc::static_deallocate(it, sizeof(unordered_hash_node)); - - it = next; + if (m_buckets.first) { + pointer it = *m_buckets.first; + while (it) { + const pointer next = it->next; + it->~unordered_hash_node(); + Alloc::static_deallocate(it, sizeof(unordered_hash_node)); + + it = next; + } } m_buckets.last = m_buckets.first; @@ -180,24 +211,11 @@ namespace tinystl { } template - inline pair::iterator, bool> unordered_map::insert(const pair& p) { - pair result; - result.second = false; - - result.first = find(p.first); - if (result.first.node != 0) - return result; - - unordered_hash_node* newnode = new(placeholder(), Alloc::static_allocate(sizeof(unordered_hash_node))) unordered_hash_node(p.first, p.second); - newnode->next = newnode->prev = 0; - - const size_t nbuckets = (size_t)(m_buckets.last - m_buckets.first); - unordered_hash_node_insert(newnode, hash(p.first), m_buckets.first, nbuckets - 1); - - ++m_size; + inline void unordered_map::rehash(size_t nbuckets) { + if (!m_buckets.first) return; if (m_size + 1 > 4 * nbuckets) { pointer root = *m_buckets.first; - + const size_t newnbuckets = ((size_t)(m_buckets.last - m_buckets.first) - 1) * 8; m_buckets.last = m_buckets.first; buffer_resize(&m_buckets, newnbuckets + 1, 0); @@ -205,11 +223,56 @@ namespace tinystl { while (root) { const pointer next = root->next; - root->next = root->prev = 0; + root->next = root->prev = nullptr; unordered_hash_node_insert(root, hash(root->first), buckets, newnbuckets); root = next; } } + } + + template + inline pair::iterator, bool> unordered_map::insert(const pair& p) { + pair result; + result.second = false; + + result.first = find(p.first); + if (result.first.node != nullptr) + return result; + + unordered_hash_node* newnode = new(placeholder(), Alloc::static_allocate(sizeof(unordered_hash_node))) unordered_hash_node(p.first, p.second); + newnode->next = newnode->prev = nullptr; + + if(!m_buckets.first) buffer_resize(&m_buckets, 9, 0); + const size_t nbuckets = (size_t)(m_buckets.last - m_buckets.first); + unordered_hash_node_insert(newnode, hash(p.first), m_buckets.first, nbuckets - 1); + + ++m_size; + rehash(nbuckets); + + result.first.node = newnode; + result.second = true; + return result; + } + + template + inline pair::iterator, bool> unordered_map::emplace(pair&& p) { + pair result; + result.second = false; + + result.first = find(p.first); + if (result.first.node != nullptr) + return result; + + const size_t keyhash = hash(p.first); + unordered_hash_node* newnode = new(placeholder(), Alloc::static_allocate(sizeof(unordered_hash_node))) unordered_hash_node(static_cast(p.first), static_cast(p.second)); + newnode->next = newnode->prev = 0; + + if (!m_buckets.first) buffer_resize(&m_buckets, 9, 0); + const size_t nbuckets = (size_t)(m_buckets.last - m_buckets.first); + unordered_hash_node_insert(newnode, keyhash, m_buckets.first, nbuckets - 1); + + ++m_size; + rehash(nbuckets); result.first.node = newnode; result.second = true; @@ -217,7 +280,7 @@ namespace tinystl { } template - void unordered_map::erase(const_iterator where) { + inline void unordered_map::erase(const_iterator where) { unordered_hash_node_erase(where.node, hash(where->first), m_buckets.first, (size_t)(m_buckets.last - m_buckets.first) - 1); where->~unordered_hash_node(); @@ -226,12 +289,12 @@ namespace tinystl { } template - Value& unordered_map::operator[](const Key& key) { + inline Value& unordered_map::operator[](const Key& key) { return insert(pair(key, Value())).first->second; } template - void unordered_map::swap(unordered_map& other) { + inline void unordered_map::swap(unordered_map& other) { size_t tsize = other.m_size; other.m_size = m_size, m_size = tsize; buffer_swap(&m_buckets, &other.m_buckets); diff --git a/libs/bx/include/tinystl/unordered_set.h b/libs/bx/include/tinystl/unordered_set.h index 976a412..d1eb579 100644 --- a/libs/bx/include/tinystl/unordered_set.h +++ b/libs/bx/include/tinystl/unordered_set.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -27,9 +27,10 @@ #ifndef TINYSTL_UNORDERED_SET_H #define TINYSTL_UNORDERED_SET_H -#include "buffer.h" -#include "hash.h" -#include "hash_base.h" +#include +#include +#include +#include namespace tinystl { @@ -38,9 +39,11 @@ namespace tinystl { public: unordered_set(); unordered_set(const unordered_set& other); + unordered_set(unordered_set&& other); ~unordered_set(); unordered_set& operator=(const unordered_set& other); + unordered_set& operator=(unordered_set&& other); typedef unordered_hash_iterator > const_iterator; typedef const_iterator iterator; @@ -54,6 +57,7 @@ namespace tinystl { iterator find(const Key& key) const; pair insert(const Key& key); + pair emplace(Key&& key); void erase(iterator where); size_t erase(const Key& key); @@ -61,58 +65,80 @@ namespace tinystl { private: + void rehash(size_t nbuckets); + typedef unordered_hash_node* pointer; size_t m_size; - buffer m_buckets; + tinystl::buffer m_buckets; }; template - unordered_set::unordered_set() + inline unordered_set::unordered_set() : m_size(0) { buffer_init(&m_buckets); - buffer_resize(&m_buckets, 9, 0); } template - unordered_set::unordered_set(const unordered_set& other) + inline unordered_set::unordered_set(const unordered_set& other) : m_size(other.m_size) { const size_t nbuckets = (size_t)(other.m_buckets.last - other.m_buckets.first); buffer_init(&m_buckets); buffer_resize(&m_buckets, nbuckets, 0); - for (pointer it = *other.m_buckets.first; it; it = it->next) { - unordered_hash_node* newnode = new(placeholder(), Alloc::static_allocate(sizeof(unordered_hash_node))) unordered_hash_node(*it); - newnode->next = newnode->prev = 0; - unordered_hash_node_insert(newnode, hash(it->first), m_buckets.first, nbuckets - 1); + if (other.m_buckets.first) { + for (pointer it = *other.m_buckets.first; it; it = it->next) { + unordered_hash_node* newnode = new(placeholder(), Alloc::static_allocate(sizeof(unordered_hash_node))) unordered_hash_node(*it); + newnode->next = newnode->prev = 0; + unordered_hash_node_insert(newnode, hash(it->first), m_buckets.first, nbuckets - 1); + } } } template - unordered_set::~unordered_set() { - clear(); + inline unordered_set::unordered_set(unordered_set&& other) + : m_size(other.m_size) + { + buffer_move(&m_buckets, &other.m_buckets); + other.m_size = 0; + } + + template + inline unordered_set::~unordered_set() { + if (m_buckets.first != m_buckets.last) + clear(); buffer_destroy(&m_buckets); } template - unordered_set& unordered_set::operator=(const unordered_set& other) { + inline unordered_set& unordered_set::operator=(const unordered_set& other) { unordered_set(other).swap(*this); return *this; } + template + inline unordered_set& unordered_set::operator=(unordered_set&& other) { + unordered_set(static_cast(other)).swap(*this); + return *this; + } + template inline typename unordered_set::iterator unordered_set::begin() const { - iterator cit; - cit.node = *m_buckets.first; - return cit; + iterator it; + if (m_buckets.first) { + it.node = *m_buckets.first; + } else { + it.node = nullptr; + } + return it; } template inline typename unordered_set::iterator unordered_set::end() const { iterator cit; - cit.node = 0; + cit.node = nullptr; return cit; } @@ -128,13 +154,15 @@ namespace tinystl { template inline void unordered_set::clear() { - pointer it = *m_buckets.first; - while (it) { - const pointer next = it->next; - it->~unordered_hash_node(); - Alloc::static_deallocate(it, sizeof(unordered_hash_node)); - - it = next; + if (m_buckets.first) { + pointer it = *m_buckets.first; + while (it) { + const pointer next = it->next; + it->~unordered_hash_node(); + Alloc::static_deallocate(it, sizeof(unordered_hash_node)); + + it = next; + } } m_buckets.last = m_buckets.first; @@ -149,37 +177,69 @@ namespace tinystl { return result; } + template + inline void unordered_set::rehash(size_t nbuckets) { + if (!m_buckets.first) return; + if (m_size + 1 > 4 * nbuckets) { + pointer root = *m_buckets.first; + + const size_t newnbuckets = ((size_t)(m_buckets.last - m_buckets.first) - 1) * 8; + m_buckets.last = m_buckets.first; + buffer_resize(&m_buckets, newnbuckets + 1, 0); + unordered_hash_node** buckets = m_buckets.first; + + while (root) { + const pointer next = root->next; + root->next = root->prev = nullptr; + unordered_hash_node_insert(root, hash(root->first), buckets, newnbuckets); + root = next; + } + } + } + template inline pair::iterator, bool> unordered_set::insert(const Key& key) { pair result; result.second = false; result.first = find(key); - if (result.first.node != 0) + if (result.first.node != nullptr) return result; unordered_hash_node* newnode = new(placeholder(), Alloc::static_allocate(sizeof(unordered_hash_node))) unordered_hash_node(key); - newnode->next = newnode->prev = 0; + newnode->next = newnode->prev = nullptr; + if(!m_buckets.first) buffer_resize(&m_buckets, 9, 0); const size_t nbuckets = (size_t)(m_buckets.last - m_buckets.first); unordered_hash_node_insert(newnode, hash(key), m_buckets.first, nbuckets - 1); ++m_size; - if (m_size + 1 > 4 * nbuckets) { - pointer root = *m_buckets.first; + rehash(nbuckets); - const size_t newnbuckets = ((size_t)(m_buckets.last - m_buckets.first) - 1) * 8; - m_buckets.last = m_buckets.first; - buffer_resize(&m_buckets, newnbuckets + 1, 0); - unordered_hash_node** buckets = m_buckets.first; + result.first.node = newnode; + result.second = true; + return result; + } - while (root) { - const pointer next = root->next; - root->next = root->prev = 0; - unordered_hash_node_insert(root, hash(root->first), buckets, newnbuckets); - root = next; - } - } + template + inline pair::iterator, bool> unordered_set::emplace(Key&& key) { + pair result; + result.second = false; + + result.first = find(key); + if (result.first.node != nullptr) + return result; + + const size_t keyhash = hash(key); + unordered_hash_node* newnode = new(placeholder(), Alloc::static_allocate(sizeof(unordered_hash_node))) unordered_hash_node(static_cast(key)); + newnode->next = newnode->prev = nullptr; + + if(!m_buckets.first) buffer_resize(&m_buckets, 9, 0); + const size_t nbuckets = (size_t)(m_buckets.last - m_buckets.first); + unordered_hash_node_insert(newnode, keyhash, m_buckets.first, nbuckets - 1); + + ++m_size; + rehash(nbuckets); result.first.node = newnode; result.second = true; @@ -198,7 +258,7 @@ namespace tinystl { template inline size_t unordered_set::erase(const Key& key) { const iterator it = find(key); - if (it.node == 0) + if (it.node == nullptr) return 0; erase(it); diff --git a/libs/bx/include/tinystl/vector.h b/libs/bx/include/tinystl/vector.h index 6885feb..e248f62 100644 --- a/libs/bx/include/tinystl/vector.h +++ b/libs/bx/include/tinystl/vector.h @@ -1,5 +1,5 @@ /*- - * Copyright 2012-1015 Matthew Endsley + * Copyright 2012-2018 Matthew Endsley * All rights reserved * * Redistribution and use in source and binary forms, with or without @@ -27,23 +27,25 @@ #ifndef TINYSTL_VECTOR_H #define TINYSTL_VECTOR_H -#include "buffer.h" -#include "new.h" -#include "stddef.h" +#include +#include +#include +#include namespace tinystl { - template class vector { public: vector(); vector(const vector& other); - vector(size_t _size); - vector(size_t _size, const T& value); + vector(vector&& other); + vector(size_t size); + vector(size_t size, const T& value); vector(const T* first, const T* last); ~vector(); vector& operator=(const vector& other); + vector& operator=(vector&& other); void assign(const T* first, const T* last); @@ -64,7 +66,7 @@ namespace tinystl { void resize(size_t size); void resize(size_t size, const T& value); void clear(); - void reserve(size_t _capacity); + void reserve(size_t capacity); void push_back(const T& t); void pop_back(); @@ -117,15 +119,20 @@ namespace tinystl { } template - inline vector::vector(size_t _size) { + inline vector::vector(vector&& other) { + buffer_move(&m_buffer, &other.m_buffer); + } + + template + inline vector::vector(size_t size) { buffer_init(&m_buffer); - buffer_resize(&m_buffer, _size); + buffer_resize(&m_buffer, size); } template - inline vector::vector(size_t _size, const T& value) { + inline vector::vector(size_t size, const T& value) { buffer_init(&m_buffer); - buffer_resize(&m_buffer, _size, value); + buffer_resize(&m_buffer, size, value); } template @@ -145,6 +152,13 @@ namespace tinystl { return *this; } + template + vector& vector::operator=(vector&& other) { + buffer_destroy(&m_buffer); + buffer_move(&m_buffer, &other.m_buffer); + return *this; + } + template inline void vector::assign(const T* first, const T* last) { buffer_clear(&m_buffer); @@ -207,13 +221,13 @@ namespace tinystl { } template - inline void vector::resize(size_t _size) { - buffer_resize(&m_buffer, _size); + inline void vector::resize(size_t size) { + buffer_resize(&m_buffer, size); } template - inline void vector::resize(size_t _size, const T& value) { - buffer_resize(&m_buffer, _size, value); + inline void vector::resize(size_t size, const T& value) { + buffer_resize(&m_buffer, size, value); } template @@ -222,8 +236,8 @@ namespace tinystl { } template - inline void vector::reserve(size_t _capacity) { - buffer_reserve(&m_buffer, _capacity); + inline void vector::reserve(size_t capacity) { + buffer_reserve(&m_buffer, capacity); } template @@ -278,7 +292,7 @@ namespace tinystl { } template - inline void vector::insert(iterator where) { + inline void vector::insert(typename vector::iterator where) { buffer_insert(&m_buffer, where, 1); } @@ -314,9 +328,9 @@ namespace tinystl { template template - void vector::emplace(iterator where, const Param& param) { + void vector::emplace(typename vector::iterator where, const Param& param) { buffer_insert(&m_buffer, where, ¶m, ¶m + 1); } } -#endif +#endif // TINYSTL_VECTOR_H diff --git a/libs/bx/src/mutex.cpp b/libs/bx/src/mutex.cpp index 5737f3e..2817836 100644 --- a/libs/bx/src/mutex.cpp +++ b/libs/bx/src/mutex.cpp @@ -10,14 +10,7 @@ #if BX_CRT_NONE # include # include -#elif BX_PLATFORM_ANDROID \ - || BX_PLATFORM_LINUX \ - || BX_PLATFORM_IOS \ - || BX_PLATFORM_OSX \ - || BX_PLATFORM_PS4 \ - || BX_PLATFORM_RPI \ - || BX_PLATFORM_NX \ - || BX_PLATFORM_VISIONOS +#elif BX_PLATFORM_POSIX # include #elif BX_PLATFORM_WINDOWS \ || BX_PLATFORM_WINRT \ diff --git a/libs/bx/src/os.cpp b/libs/bx/src/os.cpp index 4b2669d..41b97a0 100644 --- a/libs/bx/src/os.cpp +++ b/libs/bx/src/os.cpp @@ -19,15 +19,7 @@ # endif // WIN32_LEAN_AND_MEAN # include # include -#elif BX_PLATFORM_ANDROID \ - || BX_PLATFORM_EMSCRIPTEN \ - || BX_PLATFORM_IOS \ - || BX_PLATFORM_LINUX \ - || BX_PLATFORM_NX \ - || BX_PLATFORM_OSX \ - || BX_PLATFORM_PS4 \ - || BX_PLATFORM_RPI \ - || BX_PLATFORM_VISIONOS +#elif BX_PLATFORM_POSIX # include // sched_yield # if BX_PLATFORM_IOS \ || BX_PLATFORM_OSX \ diff --git a/libs/bx/src/thread.cpp b/libs/bx/src/thread.cpp index fc9ae59..1545031 100644 --- a/libs/bx/src/thread.cpp +++ b/libs/bx/src/thread.cpp @@ -14,18 +14,8 @@ #if BX_CRT_NONE # include -#elif BX_PLATFORM_ANDROID \ - || BX_PLATFORM_LINUX \ - || BX_PLATFORM_IOS \ - || BX_PLATFORM_OSX \ - || BX_PLATFORM_PS4 \ - || BX_PLATFORM_RPI \ - || BX_PLATFORM_NX \ - || BX_PLATFORM_VISIONOS +#elif BX_PLATFORM_POSIX # include -# if BX_PLATFORM_LINUX && (BX_CRT_GLIBC < 21200) -# include -# endif // BX_PLATFORM_ #elif BX_PLATFORM_WINDOWS \ || BX_PLATFORM_WINRT \ || BX_PLATFORM_XBOXONE \ @@ -243,7 +233,7 @@ namespace bx || BX_PLATFORM_IOS \ || BX_PLATFORM_VISIONOS pthread_setname_np(_name); -#elif (BX_CRT_GLIBC >= 21200) +#elif BX_CRT_GLIBC pthread_setname_np(ti->m_handle, _name); #elif BX_PLATFORM_LINUX prctl(PR_SET_NAME,_name, 0, 0, 0); diff --git a/shaders/bgfx_shader.sh b/shaders/bgfx_shader.sh index 052867d..209b095 100644 --- a/shaders/bgfx_shader.sh +++ b/shaders/bgfx_shader.sh @@ -721,6 +721,7 @@ uniform mat4 u_viewProj; uniform mat4 u_invViewProj; uniform mat4 u_model[BGFX_CONFIG_MAX_BONES]; uniform mat4 u_modelView; +uniform mat4 u_invModelView; uniform mat4 u_modelViewProj; uniform vec4 u_alphaRef4; #define u_alphaRef u_alphaRef4.x