From e133fd491ba0ac3c2b5ae5670465bf6db0e8ae67 Mon Sep 17 00:00:00 2001 From: Jake Shadle Date: Fri, 17 Sep 2021 12:53:03 +0200 Subject: [PATCH] Update to 2021.3 (#26) * Update to 2021.3 * Update/fix clippy lints * Add InterpolateFixup and RemoveUnusedInterfaceVariables passes * Update submodule * Add missing passes * CLIPPPPPPPYYYYY --- Cargo.toml | 13 +- spirv-tools-sys/build.rs | 3 + spirv-tools-sys/generate.rs | 35 + .../generated/NonSemanticVulkanDebugInfo100.h | 151 +++++ spirv-tools-sys/generated/build-version.inc | 2 +- .../generated/core.insts-unified1.inc | 80 ++- .../generated/enum_string_mapping.inc | 44 +- spirv-tools-sys/generated/extension_enum.inc | 9 + spirv-tools-sys/generated/generators.inc | 6 +- ...nonsemantic.vulkan.debuginfo.100.insts.inc | 41 ++ .../generated/opencl.debuginfo.100.insts.inc | 3 +- .../generated/operand.kinds-unified1.inc | 67 +- spirv-tools-sys/spirv-headers | 2 +- spirv-tools-sys/spirv-tools | 2 +- spirv-tools-sys/src/c/opt.cpp | 152 +++-- spirv-tools-sys/src/lib.rs | 70 ++ spirv-tools-sys/src/opt.rs | 632 +++++++++--------- src/assembler/compiled.rs | 6 +- src/binary.rs | 20 +- src/error.rs | 2 +- src/lib.rs | 27 +- src/opt/compiled.rs | 4 +- src/opt/tool.rs | 76 ++- 23 files changed, 984 insertions(+), 463 deletions(-) create mode 100644 spirv-tools-sys/generated/NonSemanticVulkanDebugInfo100.h create mode 100644 spirv-tools-sys/generated/nonsemantic.vulkan.debuginfo.100.insts.inc diff --git a/Cargo.toml b/Cargo.toml index aa03419..ca2d585 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,14 +10,15 @@ readme = "README.md" documentation = "https://docs.rs/spirv-tools" homepage = "https://github.com/EmbarkStudios/spirv-tools-rs" keywords = ["spir-v", "rust-gpu"] -exclude = [ - ".github", - "release.toml", -] +exclude = [".github", "release.toml"] [features] default = ["use-compiled-tools"] -use-installed-tools = ["spirv-tools-sys/use-installed-tools", "memchr", "tempfile"] +use-installed-tools = [ + "spirv-tools-sys/use-installed-tools", + "memchr", + "tempfile", +] use-compiled-tools = ["spirv-tools-sys/use-compiled-tools"] [dependencies] @@ -28,7 +29,7 @@ tempfile = { version = "3.1", optional = true } [dev-dependencies] structopt = "0.3" -similar = "1.3" +similar = "2.0" [[example]] name = "as" diff --git a/spirv-tools-sys/build.rs b/spirv-tools-sys/build.rs index 8bdb0ab..df9308e 100644 --- a/spirv-tools-sys/build.rs +++ b/spirv-tools-sys/build.rs @@ -76,6 +76,7 @@ fn opt(build: &mut Build) { "const_folding_rules", "constants", "convert_to_half_pass", + "convert_to_sampled_image_pass", "copy_prop_arrays", "dead_branch_elim_pass", "dead_insert_elim_pass", @@ -109,6 +110,7 @@ fn opt(build: &mut Build) { "instruction", "instruction_list", "instrument_pass", + "interp_fixup_pass", "ir_context", "ir_loader", "licm_pass", @@ -140,6 +142,7 @@ fn opt(build: &mut Build) { "register_pressure", "relax_float_ops_pass", "remove_duplicates_pass", + "remove_unused_interface_variables_pass", "replace_invalid_opc", "scalar_analysis", "scalar_analysis_simplification", diff --git a/spirv-tools-sys/generate.rs b/spirv-tools-sys/generate.rs index 7a87a0b..10385d0 100644 --- a/spirv-tools-sys/generate.rs +++ b/spirv-tools-sys/generate.rs @@ -42,6 +42,13 @@ fn main() { vendor_table("nonsemantic.clspvreflection", None); vendor_table("opencl.debuginfo.100", Some("CLDEBUG100_")); + // This will eventually be moved to spirv-headers + vendor_table_local("nonsemantic.vulkan.debuginfo.100", Some("VKDEBUG100_")); + generate_header( + "NonSemanticVulkanDebugInfo100", + "nonsemantic.vulkan.debuginfo.100", + ); + registry_table(); } @@ -72,6 +79,22 @@ fn vendor_table(which: &str, prefix: Option<&str>) { .expect("failed to generate vendor table"); } +fn vendor_table_local(which: &str, prefix: Option<&str>) { + python(&[ + "spirv-tools/utils/generate_grammar_tables.py".to_owned(), + format!( + "--extinst-vendor-grammar=spirv-tools/source/extinst.{}.grammar.json", + which + ), + format!("--vendor-insts-output=generated/{}.insts.inc", which), + format!( + "--vendor-operand-kind-prefix={}", + prefix.unwrap_or_default() + ), + ]) + .expect("failed to generate vendor table"); +} + fn core_table(which: &str) { python(&[ "spirv-tools/utils/generate_grammar_tables.py".to_owned(), @@ -113,3 +136,15 @@ fn opencl_table(version: &str) { "--opencl-insts-output=generated/opencl.std.insts.inc".to_owned(), ]).expect("failed to generate glsl table from spirv-headers"); } + +fn generate_header(header_name: &str, grammar: &str) { + python(&[ + "spirv-tools/utils/generate_language_headers.py".to_owned(), + format!( + "--extinst-grammar=spirv-tools/source/extinst.{}.grammar.json", + grammar + ), + format!("--extinst-output-path=generated/{}.h", header_name), + ]) + .expect("failed to generate C header") +} diff --git a/spirv-tools-sys/generated/NonSemanticVulkanDebugInfo100.h b/spirv-tools-sys/generated/NonSemanticVulkanDebugInfo100.h new file mode 100644 index 0000000..f6ff926 --- /dev/null +++ b/spirv-tools-sys/generated/NonSemanticVulkanDebugInfo100.h @@ -0,0 +1,151 @@ +// Copyright (c) 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. + +#ifndef SPIRV_EXTINST_NonSemanticVulkanDebugInfo100_H_ +#define SPIRV_EXTINST_NonSemanticVulkanDebugInfo100_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +enum { NonSemanticVulkanDebugInfo100Version = 100, NonSemanticVulkanDebugInfo100Version_BitWidthPadding = 0x7fffffff }; +enum { NonSemanticVulkanDebugInfo100Revision = 2, NonSemanticVulkanDebugInfo100Revision_BitWidthPadding = 0x7fffffff }; + +enum NonSemanticVulkanDebugInfo100Instructions { + NonSemanticVulkanDebugInfo100DebugInfoNone = 0, + NonSemanticVulkanDebugInfo100DebugCompilationUnit = 1, + NonSemanticVulkanDebugInfo100DebugTypeBasic = 2, + NonSemanticVulkanDebugInfo100DebugTypePointer = 3, + NonSemanticVulkanDebugInfo100DebugTypeQualifier = 4, + NonSemanticVulkanDebugInfo100DebugTypeArray = 5, + NonSemanticVulkanDebugInfo100DebugTypeVector = 6, + NonSemanticVulkanDebugInfo100DebugTypedef = 7, + NonSemanticVulkanDebugInfo100DebugTypeFunction = 8, + NonSemanticVulkanDebugInfo100DebugTypeEnum = 9, + NonSemanticVulkanDebugInfo100DebugTypeComposite = 10, + NonSemanticVulkanDebugInfo100DebugTypeMember = 11, + NonSemanticVulkanDebugInfo100DebugTypeInheritance = 12, + NonSemanticVulkanDebugInfo100DebugTypePtrToMember = 13, + NonSemanticVulkanDebugInfo100DebugTypeTemplate = 14, + NonSemanticVulkanDebugInfo100DebugTypeTemplateParameter = 15, + NonSemanticVulkanDebugInfo100DebugTypeTemplateTemplateParameter = 16, + NonSemanticVulkanDebugInfo100DebugTypeTemplateParameterPack = 17, + NonSemanticVulkanDebugInfo100DebugGlobalVariable = 18, + NonSemanticVulkanDebugInfo100DebugFunctionDeclaration = 19, + NonSemanticVulkanDebugInfo100DebugFunction = 20, + NonSemanticVulkanDebugInfo100DebugLexicalBlock = 21, + NonSemanticVulkanDebugInfo100DebugLexicalBlockDiscriminator = 22, + NonSemanticVulkanDebugInfo100DebugScope = 23, + NonSemanticVulkanDebugInfo100DebugNoScope = 24, + NonSemanticVulkanDebugInfo100DebugInlinedAt = 25, + NonSemanticVulkanDebugInfo100DebugLocalVariable = 26, + NonSemanticVulkanDebugInfo100DebugInlinedVariable = 27, + NonSemanticVulkanDebugInfo100DebugDeclare = 28, + NonSemanticVulkanDebugInfo100DebugValue = 29, + NonSemanticVulkanDebugInfo100DebugOperation = 30, + NonSemanticVulkanDebugInfo100DebugExpression = 31, + NonSemanticVulkanDebugInfo100DebugMacroDef = 32, + NonSemanticVulkanDebugInfo100DebugMacroUndef = 33, + NonSemanticVulkanDebugInfo100DebugImportedEntity = 34, + NonSemanticVulkanDebugInfo100DebugSource = 35, + NonSemanticVulkanDebugInfo100DebugFunctionDefinition = 101, + NonSemanticVulkanDebugInfo100InstructionsMax = 0x7ffffff +}; + + +enum NonSemanticVulkanDebugInfo100DebugInfoFlags { + NonSemanticVulkanDebugInfo100FlagIsProtected = 0x01, + NonSemanticVulkanDebugInfo100FlagIsPrivate = 0x02, + NonSemanticVulkanDebugInfo100FlagIsPublic = 0x03, + NonSemanticVulkanDebugInfo100FlagIsLocal = 0x04, + NonSemanticVulkanDebugInfo100FlagIsDefinition = 0x08, + NonSemanticVulkanDebugInfo100FlagFwdDecl = 0x10, + NonSemanticVulkanDebugInfo100FlagArtificial = 0x20, + NonSemanticVulkanDebugInfo100FlagExplicit = 0x40, + NonSemanticVulkanDebugInfo100FlagPrototyped = 0x80, + NonSemanticVulkanDebugInfo100FlagObjectPointer = 0x100, + NonSemanticVulkanDebugInfo100FlagStaticMember = 0x200, + NonSemanticVulkanDebugInfo100FlagIndirectVariable = 0x400, + NonSemanticVulkanDebugInfo100FlagLValueReference = 0x800, + NonSemanticVulkanDebugInfo100FlagRValueReference = 0x1000, + NonSemanticVulkanDebugInfo100FlagIsOptimized = 0x2000, + NonSemanticVulkanDebugInfo100FlagIsEnumClass = 0x4000, + NonSemanticVulkanDebugInfo100FlagTypePassByValue = 0x8000, + NonSemanticVulkanDebugInfo100FlagTypePassByReference = 0x10000, + NonSemanticVulkanDebugInfo100DebugInfoFlagsMax = 0x7ffffff +}; + +enum NonSemanticVulkanDebugInfo100DebugBaseTypeAttributeEncoding { + NonSemanticVulkanDebugInfo100Unspecified = 0, + NonSemanticVulkanDebugInfo100Address = 1, + NonSemanticVulkanDebugInfo100Boolean = 2, + NonSemanticVulkanDebugInfo100Float = 3, + NonSemanticVulkanDebugInfo100Signed = 4, + NonSemanticVulkanDebugInfo100SignedChar = 5, + NonSemanticVulkanDebugInfo100Unsigned = 6, + NonSemanticVulkanDebugInfo100UnsignedChar = 7, + NonSemanticVulkanDebugInfo100DebugBaseTypeAttributeEncodingMax = 0x7ffffff +}; + +enum NonSemanticVulkanDebugInfo100DebugCompositeType { + NonSemanticVulkanDebugInfo100Class = 0, + NonSemanticVulkanDebugInfo100Structure = 1, + NonSemanticVulkanDebugInfo100Union = 2, + NonSemanticVulkanDebugInfo100DebugCompositeTypeMax = 0x7ffffff +}; + +enum NonSemanticVulkanDebugInfo100DebugTypeQualifier { + NonSemanticVulkanDebugInfo100ConstType = 0, + NonSemanticVulkanDebugInfo100VolatileType = 1, + NonSemanticVulkanDebugInfo100RestrictType = 2, + NonSemanticVulkanDebugInfo100AtomicType = 3, + NonSemanticVulkanDebugInfo100DebugTypeQualifierMax = 0x7ffffff +}; + +enum NonSemanticVulkanDebugInfo100DebugOperation { + NonSemanticVulkanDebugInfo100Deref = 0, + NonSemanticVulkanDebugInfo100Plus = 1, + NonSemanticVulkanDebugInfo100Minus = 2, + NonSemanticVulkanDebugInfo100PlusUconst = 3, + NonSemanticVulkanDebugInfo100BitPiece = 4, + NonSemanticVulkanDebugInfo100Swap = 5, + NonSemanticVulkanDebugInfo100Xderef = 6, + NonSemanticVulkanDebugInfo100StackValue = 7, + NonSemanticVulkanDebugInfo100Constu = 8, + NonSemanticVulkanDebugInfo100Fragment = 9, + NonSemanticVulkanDebugInfo100DebugOperationMax = 0x7ffffff +}; + +enum NonSemanticVulkanDebugInfo100DebugImportedEntity { + NonSemanticVulkanDebugInfo100ImportedModule = 0, + NonSemanticVulkanDebugInfo100ImportedDeclaration = 1, + NonSemanticVulkanDebugInfo100DebugImportedEntityMax = 0x7ffffff +}; + + +#ifdef __cplusplus +} +#endif + +#endif // SPIRV_EXTINST_NonSemanticVulkanDebugInfo100_H_ \ No newline at end of file diff --git a/spirv-tools-sys/generated/build-version.inc b/spirv-tools-sys/generated/build-version.inc index 0eab203..b5cc1ff 100644 --- a/spirv-tools-sys/generated/build-version.inc +++ b/spirv-tools-sys/generated/build-version.inc @@ -1 +1 @@ -"v2021.0-dev", "SPIRV-Tools v2021.0-dev v2020.5-198-g5af051b0" +"v2021.3", "SPIRV-Tools v2021.3 v2020.5-359-g4caf8c16" diff --git a/spirv-tools-sys/generated/core.insts-unified1.inc b/spirv-tools-sys/generated/core.insts-unified1.inc index b0644fa..88c578b 100644 --- a/spirv-tools-sys/generated/core.insts-unified1.inc +++ b/spirv-tools-sys/generated/core.insts-unified1.inc @@ -2,14 +2,17 @@ static const SpvCapability pygen_variable_caps_Addresses[] = {SpvCapabilityAddre static const SpvCapability pygen_variable_caps_AddressesPhysicalStorageBufferAddresses[] = {SpvCapabilityAddresses, SpvCapabilityPhysicalStorageBufferAddresses}; static const SpvCapability pygen_variable_caps_AddressesVariablePointersVariablePointersStorageBuffer[] = {SpvCapabilityAddresses, SpvCapabilityVariablePointers, SpvCapabilityVariablePointersStorageBuffer}; static const SpvCapability pygen_variable_caps_AddressesVariablePointersVariablePointersStorageBufferPhysicalStorageBufferAddresses[] = {SpvCapabilityAddresses, SpvCapabilityVariablePointers, SpvCapabilityVariablePointersStorageBuffer, SpvCapabilityPhysicalStorageBufferAddresses}; +static const SpvCapability pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL[] = {SpvCapabilityArbitraryPrecisionFixedPointINTEL}; +static const SpvCapability pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL[] = {SpvCapabilityArbitraryPrecisionFloatingPointINTEL}; static const SpvCapability pygen_variable_caps_AsmINTEL[] = {SpvCapabilityAsmINTEL}; +static const SpvCapability pygen_variable_caps_AtomicFloat16AddEXTAtomicFloat32AddEXTAtomicFloat64AddEXT[] = {SpvCapabilityAtomicFloat16AddEXT, SpvCapabilityAtomicFloat32AddEXT, SpvCapabilityAtomicFloat64AddEXT}; static const SpvCapability pygen_variable_caps_AtomicFloat16MinMaxEXTAtomicFloat32MinMaxEXTAtomicFloat64MinMaxEXT[] = {SpvCapabilityAtomicFloat16MinMaxEXT, SpvCapabilityAtomicFloat32MinMaxEXT, SpvCapabilityAtomicFloat64MinMaxEXT}; -static const SpvCapability pygen_variable_caps_AtomicFloat32AddEXTAtomicFloat64AddEXT[] = {SpvCapabilityAtomicFloat32AddEXT, SpvCapabilityAtomicFloat64AddEXT}; static const SpvCapability pygen_variable_caps_BlockingPipesINTEL[] = {SpvCapabilityBlockingPipesINTEL}; static const SpvCapability pygen_variable_caps_CooperativeMatrixNV[] = {SpvCapabilityCooperativeMatrixNV}; static const SpvCapability pygen_variable_caps_DemoteToHelperInvocationEXT[] = {SpvCapabilityDemoteToHelperInvocationEXT}; static const SpvCapability pygen_variable_caps_DerivativeControl[] = {SpvCapabilityDerivativeControl}; static const SpvCapability pygen_variable_caps_DeviceEnqueue[] = {SpvCapabilityDeviceEnqueue}; +static const SpvCapability pygen_variable_caps_DotProductKHR[] = {SpvCapabilityDotProductKHR}; static const SpvCapability pygen_variable_caps_ExpectAssumeKHR[] = {SpvCapabilityExpectAssumeKHR}; static const SpvCapability pygen_variable_caps_FPGARegINTEL[] = {SpvCapabilityFPGARegINTEL}; static const SpvCapability pygen_variable_caps_FragmentMaskAMD[] = {SpvCapabilityFragmentMaskAMD}; @@ -41,10 +44,12 @@ static const SpvCapability pygen_variable_caps_Pipes[] = {SpvCapabilityPipes}; static const SpvCapability pygen_variable_caps_RayQueryKHR[] = {SpvCapabilityRayQueryKHR}; static const SpvCapability pygen_variable_caps_RayTracingKHR[] = {SpvCapabilityRayTracingKHR}; static const SpvCapability pygen_variable_caps_RayTracingKHRRayQueryKHR[] = {SpvCapabilityRayTracingKHR, SpvCapabilityRayQueryKHR}; +static const SpvCapability pygen_variable_caps_RayTracingMotionBlurNV[] = {SpvCapabilityRayTracingMotionBlurNV}; static const SpvCapability pygen_variable_caps_RayTracingNV[] = {SpvCapabilityRayTracingNV}; static const SpvCapability pygen_variable_caps_RayTracingNVRayTracingKHR[] = {SpvCapabilityRayTracingNV, SpvCapabilityRayTracingKHR}; static const SpvCapability pygen_variable_caps_RayTracingNVRayTracingKHRRayQueryKHR[] = {SpvCapabilityRayTracingNV, SpvCapabilityRayTracingKHR, SpvCapabilityRayQueryKHR}; static const SpvCapability pygen_variable_caps_Shader[] = {SpvCapabilityShader}; +static const SpvCapability pygen_variable_caps_ShaderBitInstructions[] = {SpvCapabilityShader, SpvCapabilityBitInstructions}; static const SpvCapability pygen_variable_caps_ShaderClockKHR[] = {SpvCapabilityShaderClockKHR}; static const SpvCapability pygen_variable_caps_SparseResidency[] = {SpvCapabilitySparseResidency}; static const SpvCapability pygen_variable_caps_SubgroupAvcMotionEstimationINTEL[] = {SpvCapabilitySubgroupAvcMotionEstimationINTEL}; @@ -86,6 +91,7 @@ static const spvtools::Extension pygen_variable_exts_SPV_NV_mesh_shader[] = {spv static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracing[] = {spvtools::Extension::kSPV_NV_ray_tracing}; static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracingSPV_KHR_ray_tracing[] = {spvtools::Extension::kSPV_NV_ray_tracing, spvtools::Extension::kSPV_KHR_ray_tracing}; static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracingSPV_KHR_ray_tracingSPV_KHR_ray_query[] = {spvtools::Extension::kSPV_NV_ray_tracing, spvtools::Extension::kSPV_KHR_ray_tracing, spvtools::Extension::kSPV_KHR_ray_query}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracing_motion_blur[] = {spvtools::Extension::kSPV_NV_ray_tracing_motion_blur}; static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_image_footprint[] = {spvtools::Extension::kSPV_NV_shader_image_footprint}; static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_subgroup_partitioned[] = {spvtools::Extension::kSPV_NV_shader_subgroup_partitioned}; @@ -277,10 +283,10 @@ static const spv_opcode_desc_t kOpcodeTableEntries[] = { {"BitwiseXor", SpvOpBitwiseXor, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"BitwiseAnd", SpvOpBitwiseAnd, 0, nullptr, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"Not", SpvOpNot, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, - {"BitFieldInsert", SpvOpBitFieldInsert, 1, pygen_variable_caps_Shader, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, - {"BitFieldSExtract", SpvOpBitFieldSExtract, 1, pygen_variable_caps_Shader, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, - {"BitFieldUExtract", SpvOpBitFieldUExtract, 1, pygen_variable_caps_Shader, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, - {"BitReverse", SpvOpBitReverse, 1, pygen_variable_caps_Shader, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, + {"BitFieldInsert", SpvOpBitFieldInsert, 2, pygen_variable_caps_ShaderBitInstructions, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, + {"BitFieldSExtract", SpvOpBitFieldSExtract, 2, pygen_variable_caps_ShaderBitInstructions, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, + {"BitFieldUExtract", SpvOpBitFieldUExtract, 2, pygen_variable_caps_ShaderBitInstructions, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, + {"BitReverse", SpvOpBitReverse, 2, pygen_variable_caps_ShaderBitInstructions, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"BitCount", SpvOpBitCount, 0, nullptr, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"DPdx", SpvOpDPdx, 1, pygen_variable_caps_Shader, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"DPdy", SpvOpDPdy, 1, pygen_variable_caps_Shader, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, @@ -446,6 +452,12 @@ static const spv_opcode_desc_t kOpcodeTableEntries[] = { {"ConvertUToAccelerationStructureKHR", SpvOpConvertUToAccelerationStructureKHR, 2, pygen_variable_caps_RayTracingKHRRayQueryKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 2, pygen_variable_exts_SPV_KHR_ray_tracingSPV_KHR_ray_query, 0xffffffffu, 0xffffffffu}, {"IgnoreIntersectionKHR", SpvOpIgnoreIntersectionKHR, 1, pygen_variable_caps_RayTracingKHR, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_tracing, 0xffffffffu, 0xffffffffu}, {"TerminateRayKHR", SpvOpTerminateRayKHR, 1, pygen_variable_caps_RayTracingKHR, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_tracing, 0xffffffffu, 0xffffffffu}, + {"SDotKHR", SpvOpSDotKHR, 1, pygen_variable_caps_DotProductKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"UDotKHR", SpvOpUDotKHR, 1, pygen_variable_caps_DotProductKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"SUDotKHR", SpvOpSUDotKHR, 1, pygen_variable_caps_DotProductKHR, 5, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"SDotAccSatKHR", SpvOpSDotAccSatKHR, 1, pygen_variable_caps_DotProductKHR, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"UDotAccSatKHR", SpvOpUDotAccSatKHR, 1, pygen_variable_caps_DotProductKHR, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"SUDotAccSatKHR", SpvOpSUDotAccSatKHR, 1, pygen_variable_caps_DotProductKHR, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, {"TypeRayQueryKHR", SpvOpTypeRayQueryKHR, 1, pygen_variable_caps_RayQueryKHR, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu}, {"RayQueryInitializeKHR", SpvOpRayQueryInitializeKHR, 1, pygen_variable_caps_RayQueryKHR, 8, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu}, {"RayQueryTerminateKHR", SpvOpRayQueryTerminateKHR, 1, pygen_variable_caps_RayQueryKHR, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu}, @@ -472,6 +484,8 @@ static const spv_opcode_desc_t kOpcodeTableEntries[] = { {"IgnoreIntersectionNV", SpvOpIgnoreIntersectionNV, 1, pygen_variable_caps_RayTracingNV, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, 0xffffffffu, 0xffffffffu}, {"TerminateRayNV", SpvOpTerminateRayNV, 1, pygen_variable_caps_RayTracingNV, 0, {}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, 0xffffffffu, 0xffffffffu}, {"TraceNV", SpvOpTraceNV, 1, pygen_variable_caps_RayTracingNV, 11, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, 0xffffffffu, 0xffffffffu}, + {"TraceMotionNV", SpvOpTraceMotionNV, 1, pygen_variable_caps_RayTracingMotionBlurNV, 12, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing_motion_blur, 0xffffffffu, 0xffffffffu}, + {"TraceRayMotionNV", SpvOpTraceRayMotionNV, 1, pygen_variable_caps_RayTracingMotionBlurNV, 12, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing_motion_blur, 0xffffffffu, 0xffffffffu}, {"TypeAccelerationStructureKHR", SpvOpTypeAccelerationStructureKHR, 3, pygen_variable_caps_RayTracingNVRayTracingKHRRayQueryKHR, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 3, pygen_variable_exts_SPV_NV_ray_tracingSPV_KHR_ray_tracingSPV_KHR_ray_query, 0xffffffffu, 0xffffffffu}, {"TypeAccelerationStructureNV", SpvOpTypeAccelerationStructureNV, 3, pygen_variable_caps_RayTracingNVRayTracingKHRRayQueryKHR, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 3, pygen_variable_exts_SPV_NV_ray_tracingSPV_KHR_ray_tracingSPV_KHR_ray_query, 0xffffffffu, 0xffffffffu}, {"ExecuteCallableNV", SpvOpExecuteCallableNV, 1, pygen_variable_caps_RayTracingNV, 2, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 0, 0, 1, pygen_variable_exts_SPV_NV_ray_tracing, 0xffffffffu, 0xffffffffu}, @@ -642,7 +656,59 @@ static const spv_opcode_desc_t kOpcodeTableEntries[] = { {"VariableLengthArrayINTEL", SpvOpVariableLengthArrayINTEL, 1, pygen_variable_caps_VariableLengthArrayINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, {"SaveMemoryINTEL", SpvOpSaveMemoryINTEL, 1, pygen_variable_caps_VariableLengthArrayINTEL, 2, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, {"RestoreMemoryINTEL", SpvOpRestoreMemoryINTEL, 1, pygen_variable_caps_VariableLengthArrayINTEL, 1, {SPV_OPERAND_TYPE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatSinCosPiINTEL", SpvOpArbitraryFloatSinCosPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatCastINTEL", SpvOpArbitraryFloatCastINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatCastFromIntINTEL", SpvOpArbitraryFloatCastFromIntINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatCastToIntINTEL", SpvOpArbitraryFloatCastToIntINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 7, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatAddINTEL", SpvOpArbitraryFloatAddINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatSubINTEL", SpvOpArbitraryFloatSubINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatMulINTEL", SpvOpArbitraryFloatMulINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatDivINTEL", SpvOpArbitraryFloatDivINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatGTINTEL", SpvOpArbitraryFloatGTINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatGEINTEL", SpvOpArbitraryFloatGEINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatLTINTEL", SpvOpArbitraryFloatLTINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatLEINTEL", SpvOpArbitraryFloatLEINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatEQINTEL", SpvOpArbitraryFloatEQINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatRecipINTEL", SpvOpArbitraryFloatRecipINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatRSqrtINTEL", SpvOpArbitraryFloatRSqrtINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatCbrtINTEL", SpvOpArbitraryFloatCbrtINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatHypotINTEL", SpvOpArbitraryFloatHypotINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatSqrtINTEL", SpvOpArbitraryFloatSqrtINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatLogINTEL", SpvOpArbitraryFloatLogINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatLog2INTEL", SpvOpArbitraryFloatLog2INTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatLog10INTEL", SpvOpArbitraryFloatLog10INTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatLog1pINTEL", SpvOpArbitraryFloatLog1pINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatExpINTEL", SpvOpArbitraryFloatExpINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatExp2INTEL", SpvOpArbitraryFloatExp2INTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatExp10INTEL", SpvOpArbitraryFloatExp10INTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatExpm1INTEL", SpvOpArbitraryFloatExpm1INTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatSinINTEL", SpvOpArbitraryFloatSinINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatCosINTEL", SpvOpArbitraryFloatCosINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatSinCosINTEL", SpvOpArbitraryFloatSinCosINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatSinPiINTEL", SpvOpArbitraryFloatSinPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatCosPiINTEL", SpvOpArbitraryFloatCosPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatASinINTEL", SpvOpArbitraryFloatASinINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatASinPiINTEL", SpvOpArbitraryFloatASinPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatACosINTEL", SpvOpArbitraryFloatACosINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatACosPiINTEL", SpvOpArbitraryFloatACosPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatATanINTEL", SpvOpArbitraryFloatATanINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatATanPiINTEL", SpvOpArbitraryFloatATanPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 8, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatATan2INTEL", SpvOpArbitraryFloatATan2INTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatPowINTEL", SpvOpArbitraryFloatPowINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatPowRINTEL", SpvOpArbitraryFloatPowRINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 10, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"ArbitraryFloatPowNINTEL", SpvOpArbitraryFloatPowNINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFloatingPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, {"LoopControlINTEL", SpvOpLoopControlINTEL, 1, pygen_variable_caps_UnstructuredLoopControlsINTEL, 1, {SPV_OPERAND_TYPE_VARIABLE_LITERAL_INTEGER}, 0, 0, 1, pygen_variable_exts_SPV_INTEL_unstructured_loop_controls, 0xffffffffu, 0xffffffffu}, + {"FixedSqrtINTEL", SpvOpFixedSqrtINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"FixedRecipINTEL", SpvOpFixedRecipINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"FixedRsqrtINTEL", SpvOpFixedRsqrtINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"FixedSinINTEL", SpvOpFixedSinINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"FixedCosINTEL", SpvOpFixedCosINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"FixedSinCosINTEL", SpvOpFixedSinCosINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"FixedSinPiINTEL", SpvOpFixedSinPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"FixedCosPiINTEL", SpvOpFixedCosPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"FixedSinCosPiINTEL", SpvOpFixedSinCosPiINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"FixedLogINTEL", SpvOpFixedLogINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"FixedExpINTEL", SpvOpFixedExpINTEL, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 9, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, {"PtrCastToCrossWorkgroupINTEL", SpvOpPtrCastToCrossWorkgroupINTEL, 1, pygen_variable_caps_USMStorageClassesINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, {"CrossWorkgroupCastToPtrINTEL", SpvOpCrossWorkgroupCastToPtrINTEL, 1, pygen_variable_caps_USMStorageClassesINTEL, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 0, nullptr, 0xffffffffu, 0xffffffffu}, {"ReadPipeBlockingINTEL", SpvOpReadPipeBlockingINTEL, 1, pygen_variable_caps_BlockingPipesINTEL, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_INTEL_blocking_pipes, 0xffffffffu, 0xffffffffu}, @@ -665,8 +731,8 @@ static const spv_opcode_desc_t kOpcodeTableEntries[] = { {"RayQueryGetWorldRayOriginKHR", SpvOpRayQueryGetWorldRayOriginKHR, 1, pygen_variable_caps_RayQueryKHR, 3, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu}, {"RayQueryGetIntersectionObjectToWorldKHR", SpvOpRayQueryGetIntersectionObjectToWorldKHR, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu}, {"RayQueryGetIntersectionWorldToObjectKHR", SpvOpRayQueryGetIntersectionWorldToObjectKHR, 1, pygen_variable_caps_RayQueryKHR, 4, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_KHR_ray_query, 0xffffffffu, 0xffffffffu}, - {"AtomicFAddEXT", SpvOpAtomicFAddEXT, 2, pygen_variable_caps_AtomicFloat32AddEXTAtomicFloat64AddEXT, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_EXT_shader_atomic_float_add, 0xffffffffu, 0xffffffffu}, - {"TypeBufferSurfaceINTEL", SpvOpTypeBufferSurfaceINTEL, 1, pygen_variable_caps_VectorComputeINTEL, 1, {SPV_OPERAND_TYPE_RESULT_ID}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu}, + {"AtomicFAddEXT", SpvOpAtomicFAddEXT, 3, pygen_variable_caps_AtomicFloat16AddEXTAtomicFloat32AddEXTAtomicFloat64AddEXT, 6, {SPV_OPERAND_TYPE_TYPE_ID, SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_SCOPE_ID, SPV_OPERAND_TYPE_MEMORY_SEMANTICS_ID, SPV_OPERAND_TYPE_ID}, 1, 1, 1, pygen_variable_exts_SPV_EXT_shader_atomic_float_add, 0xffffffffu, 0xffffffffu}, + {"TypeBufferSurfaceINTEL", SpvOpTypeBufferSurfaceINTEL, 1, pygen_variable_caps_VectorComputeINTEL, 2, {SPV_OPERAND_TYPE_RESULT_ID, SPV_OPERAND_TYPE_ACCESS_QUALIFIER}, 1, 0, 0, nullptr, 0xffffffffu, 0xffffffffu}, {"TypeStructContinuedINTEL", SpvOpTypeStructContinuedINTEL, 1, pygen_variable_caps_LongConstantCompositeINTEL, 1, {SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu}, {"ConstantCompositeContinuedINTEL", SpvOpConstantCompositeContinuedINTEL, 1, pygen_variable_caps_LongConstantCompositeINTEL, 1, {SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu}, {"SpecConstantCompositeContinuedINTEL", SpvOpSpecConstantCompositeContinuedINTEL, 1, pygen_variable_caps_LongConstantCompositeINTEL, 1, {SPV_OPERAND_TYPE_VARIABLE_ID}, 0, 0, 0, nullptr, 0xffffffffu, 0xffffffffu} diff --git a/spirv-tools-sys/generated/enum_string_mapping.inc b/spirv-tools-sys/generated/enum_string_mapping.inc index d1f33ab..9b7aba9 100644 --- a/spirv-tools-sys/generated/enum_string_mapping.inc +++ b/spirv-tools-sys/generated/enum_string_mapping.inc @@ -32,6 +32,8 @@ const char* ExtensionToString(Extension extension) { return "SPV_EXT_fragment_shader_interlock"; case Extension::kSPV_EXT_physical_storage_buffer: return "SPV_EXT_physical_storage_buffer"; + case Extension::kSPV_EXT_shader_atomic_float16_add: + return "SPV_EXT_shader_atomic_float16_add"; case Extension::kSPV_EXT_shader_atomic_float_add: return "SPV_EXT_shader_atomic_float_add"; case Extension::kSPV_EXT_shader_atomic_float_min_max: @@ -48,10 +50,16 @@ const char* ExtensionToString(Extension extension) { return "SPV_GOOGLE_hlsl_functionality1"; case Extension::kSPV_GOOGLE_user_type: return "SPV_GOOGLE_user_type"; + case Extension::kSPV_INTEL_arbitrary_precision_fixed_point: + return "SPV_INTEL_arbitrary_precision_fixed_point"; + case Extension::kSPV_INTEL_arbitrary_precision_floating_point: + return "SPV_INTEL_arbitrary_precision_floating_point"; case Extension::kSPV_INTEL_arbitrary_precision_integers: return "SPV_INTEL_arbitrary_precision_integers"; case Extension::kSPV_INTEL_blocking_pipes: return "SPV_INTEL_blocking_pipes"; + case Extension::kSPV_INTEL_debug_module: + return "SPV_INTEL_debug_module"; case Extension::kSPV_INTEL_device_side_avc_motion_estimation: return "SPV_INTEL_device_side_avc_motion_estimation"; case Extension::kSPV_INTEL_float_controls2: @@ -84,6 +92,8 @@ const char* ExtensionToString(Extension extension) { return "SPV_INTEL_loop_fuse"; case Extension::kSPV_INTEL_media_block_io: return "SPV_INTEL_media_block_io"; + case Extension::kSPV_INTEL_optnone: + return "SPV_INTEL_optnone"; case Extension::kSPV_INTEL_shader_integer_functions2: return "SPV_INTEL_shader_integer_functions2"; case Extension::kSPV_INTEL_subgroups: @@ -100,6 +110,8 @@ const char* ExtensionToString(Extension extension) { return "SPV_KHR_16bit_storage"; case Extension::kSPV_KHR_8bit_storage: return "SPV_KHR_8bit_storage"; + case Extension::kSPV_KHR_bit_instructions: + return "SPV_KHR_bit_instructions"; case Extension::kSPV_KHR_device_group: return "SPV_KHR_device_group"; case Extension::kSPV_KHR_expect_assume: @@ -108,6 +120,8 @@ const char* ExtensionToString(Extension extension) { return "SPV_KHR_float_controls"; case Extension::kSPV_KHR_fragment_shading_rate: return "SPV_KHR_fragment_shading_rate"; + case Extension::kSPV_KHR_integer_dot_product: + return "SPV_KHR_integer_dot_product"; case Extension::kSPV_KHR_linkonce_odr: return "SPV_KHR_linkonce_odr"; case Extension::kSPV_KHR_multiview: @@ -134,6 +148,8 @@ const char* ExtensionToString(Extension extension) { return "SPV_KHR_shader_draw_parameters"; case Extension::kSPV_KHR_storage_buffer_storage_class: return "SPV_KHR_storage_buffer_storage_class"; + case Extension::kSPV_KHR_subgroup_uniform_control_flow: + return "SPV_KHR_subgroup_uniform_control_flow"; case Extension::kSPV_KHR_subgroup_vote: return "SPV_KHR_subgroup_vote"; case Extension::kSPV_KHR_terminate_invocation: @@ -158,6 +174,8 @@ const char* ExtensionToString(Extension extension) { return "SPV_NV_mesh_shader"; case Extension::kSPV_NV_ray_tracing: return "SPV_NV_ray_tracing"; + case Extension::kSPV_NV_ray_tracing_motion_blur: + return "SPV_NV_ray_tracing_motion_blur"; case Extension::kSPV_NV_sample_mask_override_coverage: return "SPV_NV_sample_mask_override_coverage"; case Extension::kSPV_NV_shader_image_footprint: @@ -181,8 +199,8 @@ const char* ExtensionToString(Extension extension) { bool GetExtensionFromString(const char* str, Extension* extension) { - static const char* known_ext_strs[] = { "SPV_AMD_gcn_shader", "SPV_AMD_gpu_shader_half_float", "SPV_AMD_gpu_shader_half_float_fetch", "SPV_AMD_gpu_shader_int16", "SPV_AMD_shader_ballot", "SPV_AMD_shader_explicit_vertex_parameter", "SPV_AMD_shader_fragment_mask", "SPV_AMD_shader_image_load_store_lod", "SPV_AMD_shader_trinary_minmax", "SPV_AMD_texture_gather_bias_lod", "SPV_EXT_demote_to_helper_invocation", "SPV_EXT_descriptor_indexing", "SPV_EXT_fragment_fully_covered", "SPV_EXT_fragment_invocation_density", "SPV_EXT_fragment_shader_interlock", "SPV_EXT_physical_storage_buffer", "SPV_EXT_shader_atomic_float_add", "SPV_EXT_shader_atomic_float_min_max", "SPV_EXT_shader_image_int64", "SPV_EXT_shader_stencil_export", "SPV_EXT_shader_viewport_index_layer", "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", "SPV_GOOGLE_user_type", "SPV_INTEL_arbitrary_precision_integers", "SPV_INTEL_blocking_pipes", "SPV_INTEL_device_side_avc_motion_estimation", "SPV_INTEL_float_controls2", "SPV_INTEL_fp_fast_math_mode", "SPV_INTEL_fpga_buffer_location", "SPV_INTEL_fpga_cluster_attributes", "SPV_INTEL_fpga_loop_controls", "SPV_INTEL_fpga_memory_accesses", "SPV_INTEL_fpga_memory_attributes", "SPV_INTEL_fpga_reg", "SPV_INTEL_function_pointers", "SPV_INTEL_inline_assembly", "SPV_INTEL_io_pipes", "SPV_INTEL_kernel_attributes", "SPV_INTEL_long_constant_composite", "SPV_INTEL_loop_fuse", "SPV_INTEL_media_block_io", "SPV_INTEL_shader_integer_functions2", "SPV_INTEL_subgroups", "SPV_INTEL_unstructured_loop_controls", "SPV_INTEL_usm_storage_classes", "SPV_INTEL_variable_length_array", "SPV_INTEL_vector_compute", "SPV_KHR_16bit_storage", "SPV_KHR_8bit_storage", "SPV_KHR_device_group", "SPV_KHR_expect_assume", "SPV_KHR_float_controls", "SPV_KHR_fragment_shading_rate", "SPV_KHR_linkonce_odr", "SPV_KHR_multiview", "SPV_KHR_no_integer_wrap_decoration", "SPV_KHR_non_semantic_info", "SPV_KHR_physical_storage_buffer", "SPV_KHR_post_depth_coverage", "SPV_KHR_ray_query", "SPV_KHR_ray_tracing", "SPV_KHR_shader_atomic_counter_ops", "SPV_KHR_shader_ballot", "SPV_KHR_shader_clock", "SPV_KHR_shader_draw_parameters", "SPV_KHR_storage_buffer_storage_class", "SPV_KHR_subgroup_vote", "SPV_KHR_terminate_invocation", "SPV_KHR_variable_pointers", "SPV_KHR_vulkan_memory_model", "SPV_KHR_workgroup_memory_explicit_layout", "SPV_NVX_multiview_per_view_attributes", "SPV_NV_compute_shader_derivatives", "SPV_NV_cooperative_matrix", "SPV_NV_fragment_shader_barycentric", "SPV_NV_geometry_shader_passthrough", "SPV_NV_mesh_shader", "SPV_NV_ray_tracing", "SPV_NV_sample_mask_override_coverage", "SPV_NV_shader_image_footprint", "SPV_NV_shader_sm_builtins", "SPV_NV_shader_subgroup_partitioned", "SPV_NV_shading_rate", "SPV_NV_stereo_view_rendering", "SPV_NV_viewport_array2", "SPV_VALIDATOR_ignore_type_decl_unique" }; - static const Extension known_ext_ids[] = { Extension::kSPV_AMD_gcn_shader, Extension::kSPV_AMD_gpu_shader_half_float, Extension::kSPV_AMD_gpu_shader_half_float_fetch, Extension::kSPV_AMD_gpu_shader_int16, Extension::kSPV_AMD_shader_ballot, Extension::kSPV_AMD_shader_explicit_vertex_parameter, Extension::kSPV_AMD_shader_fragment_mask, Extension::kSPV_AMD_shader_image_load_store_lod, Extension::kSPV_AMD_shader_trinary_minmax, Extension::kSPV_AMD_texture_gather_bias_lod, Extension::kSPV_EXT_demote_to_helper_invocation, Extension::kSPV_EXT_descriptor_indexing, Extension::kSPV_EXT_fragment_fully_covered, Extension::kSPV_EXT_fragment_invocation_density, Extension::kSPV_EXT_fragment_shader_interlock, Extension::kSPV_EXT_physical_storage_buffer, Extension::kSPV_EXT_shader_atomic_float_add, Extension::kSPV_EXT_shader_atomic_float_min_max, Extension::kSPV_EXT_shader_image_int64, Extension::kSPV_EXT_shader_stencil_export, Extension::kSPV_EXT_shader_viewport_index_layer, Extension::kSPV_GOOGLE_decorate_string, Extension::kSPV_GOOGLE_hlsl_functionality1, Extension::kSPV_GOOGLE_user_type, Extension::kSPV_INTEL_arbitrary_precision_integers, Extension::kSPV_INTEL_blocking_pipes, Extension::kSPV_INTEL_device_side_avc_motion_estimation, Extension::kSPV_INTEL_float_controls2, Extension::kSPV_INTEL_fp_fast_math_mode, Extension::kSPV_INTEL_fpga_buffer_location, Extension::kSPV_INTEL_fpga_cluster_attributes, Extension::kSPV_INTEL_fpga_loop_controls, Extension::kSPV_INTEL_fpga_memory_accesses, Extension::kSPV_INTEL_fpga_memory_attributes, Extension::kSPV_INTEL_fpga_reg, Extension::kSPV_INTEL_function_pointers, Extension::kSPV_INTEL_inline_assembly, Extension::kSPV_INTEL_io_pipes, Extension::kSPV_INTEL_kernel_attributes, Extension::kSPV_INTEL_long_constant_composite, Extension::kSPV_INTEL_loop_fuse, Extension::kSPV_INTEL_media_block_io, Extension::kSPV_INTEL_shader_integer_functions2, Extension::kSPV_INTEL_subgroups, Extension::kSPV_INTEL_unstructured_loop_controls, Extension::kSPV_INTEL_usm_storage_classes, Extension::kSPV_INTEL_variable_length_array, Extension::kSPV_INTEL_vector_compute, Extension::kSPV_KHR_16bit_storage, Extension::kSPV_KHR_8bit_storage, Extension::kSPV_KHR_device_group, Extension::kSPV_KHR_expect_assume, Extension::kSPV_KHR_float_controls, Extension::kSPV_KHR_fragment_shading_rate, Extension::kSPV_KHR_linkonce_odr, Extension::kSPV_KHR_multiview, Extension::kSPV_KHR_no_integer_wrap_decoration, Extension::kSPV_KHR_non_semantic_info, Extension::kSPV_KHR_physical_storage_buffer, Extension::kSPV_KHR_post_depth_coverage, Extension::kSPV_KHR_ray_query, Extension::kSPV_KHR_ray_tracing, Extension::kSPV_KHR_shader_atomic_counter_ops, Extension::kSPV_KHR_shader_ballot, Extension::kSPV_KHR_shader_clock, Extension::kSPV_KHR_shader_draw_parameters, Extension::kSPV_KHR_storage_buffer_storage_class, Extension::kSPV_KHR_subgroup_vote, Extension::kSPV_KHR_terminate_invocation, Extension::kSPV_KHR_variable_pointers, Extension::kSPV_KHR_vulkan_memory_model, Extension::kSPV_KHR_workgroup_memory_explicit_layout, Extension::kSPV_NVX_multiview_per_view_attributes, Extension::kSPV_NV_compute_shader_derivatives, Extension::kSPV_NV_cooperative_matrix, Extension::kSPV_NV_fragment_shader_barycentric, Extension::kSPV_NV_geometry_shader_passthrough, Extension::kSPV_NV_mesh_shader, Extension::kSPV_NV_ray_tracing, Extension::kSPV_NV_sample_mask_override_coverage, Extension::kSPV_NV_shader_image_footprint, Extension::kSPV_NV_shader_sm_builtins, Extension::kSPV_NV_shader_subgroup_partitioned, Extension::kSPV_NV_shading_rate, Extension::kSPV_NV_stereo_view_rendering, Extension::kSPV_NV_viewport_array2, Extension::kSPV_VALIDATOR_ignore_type_decl_unique }; + static const char* known_ext_strs[] = { "SPV_AMD_gcn_shader", "SPV_AMD_gpu_shader_half_float", "SPV_AMD_gpu_shader_half_float_fetch", "SPV_AMD_gpu_shader_int16", "SPV_AMD_shader_ballot", "SPV_AMD_shader_explicit_vertex_parameter", "SPV_AMD_shader_fragment_mask", "SPV_AMD_shader_image_load_store_lod", "SPV_AMD_shader_trinary_minmax", "SPV_AMD_texture_gather_bias_lod", "SPV_EXT_demote_to_helper_invocation", "SPV_EXT_descriptor_indexing", "SPV_EXT_fragment_fully_covered", "SPV_EXT_fragment_invocation_density", "SPV_EXT_fragment_shader_interlock", "SPV_EXT_physical_storage_buffer", "SPV_EXT_shader_atomic_float16_add", "SPV_EXT_shader_atomic_float_add", "SPV_EXT_shader_atomic_float_min_max", "SPV_EXT_shader_image_int64", "SPV_EXT_shader_stencil_export", "SPV_EXT_shader_viewport_index_layer", "SPV_GOOGLE_decorate_string", "SPV_GOOGLE_hlsl_functionality1", "SPV_GOOGLE_user_type", "SPV_INTEL_arbitrary_precision_fixed_point", "SPV_INTEL_arbitrary_precision_floating_point", "SPV_INTEL_arbitrary_precision_integers", "SPV_INTEL_blocking_pipes", "SPV_INTEL_debug_module", "SPV_INTEL_device_side_avc_motion_estimation", "SPV_INTEL_float_controls2", "SPV_INTEL_fp_fast_math_mode", "SPV_INTEL_fpga_buffer_location", "SPV_INTEL_fpga_cluster_attributes", "SPV_INTEL_fpga_loop_controls", "SPV_INTEL_fpga_memory_accesses", "SPV_INTEL_fpga_memory_attributes", "SPV_INTEL_fpga_reg", "SPV_INTEL_function_pointers", "SPV_INTEL_inline_assembly", "SPV_INTEL_io_pipes", "SPV_INTEL_kernel_attributes", "SPV_INTEL_long_constant_composite", "SPV_INTEL_loop_fuse", "SPV_INTEL_media_block_io", "SPV_INTEL_optnone", "SPV_INTEL_shader_integer_functions2", "SPV_INTEL_subgroups", "SPV_INTEL_unstructured_loop_controls", "SPV_INTEL_usm_storage_classes", "SPV_INTEL_variable_length_array", "SPV_INTEL_vector_compute", "SPV_KHR_16bit_storage", "SPV_KHR_8bit_storage", "SPV_KHR_bit_instructions", "SPV_KHR_device_group", "SPV_KHR_expect_assume", "SPV_KHR_float_controls", "SPV_KHR_fragment_shading_rate", "SPV_KHR_integer_dot_product", "SPV_KHR_linkonce_odr", "SPV_KHR_multiview", "SPV_KHR_no_integer_wrap_decoration", "SPV_KHR_non_semantic_info", "SPV_KHR_physical_storage_buffer", "SPV_KHR_post_depth_coverage", "SPV_KHR_ray_query", "SPV_KHR_ray_tracing", "SPV_KHR_shader_atomic_counter_ops", "SPV_KHR_shader_ballot", "SPV_KHR_shader_clock", "SPV_KHR_shader_draw_parameters", "SPV_KHR_storage_buffer_storage_class", "SPV_KHR_subgroup_uniform_control_flow", "SPV_KHR_subgroup_vote", "SPV_KHR_terminate_invocation", "SPV_KHR_variable_pointers", "SPV_KHR_vulkan_memory_model", "SPV_KHR_workgroup_memory_explicit_layout", "SPV_NVX_multiview_per_view_attributes", "SPV_NV_compute_shader_derivatives", "SPV_NV_cooperative_matrix", "SPV_NV_fragment_shader_barycentric", "SPV_NV_geometry_shader_passthrough", "SPV_NV_mesh_shader", "SPV_NV_ray_tracing", "SPV_NV_ray_tracing_motion_blur", "SPV_NV_sample_mask_override_coverage", "SPV_NV_shader_image_footprint", "SPV_NV_shader_sm_builtins", "SPV_NV_shader_subgroup_partitioned", "SPV_NV_shading_rate", "SPV_NV_stereo_view_rendering", "SPV_NV_viewport_array2", "SPV_VALIDATOR_ignore_type_decl_unique" }; + static const Extension known_ext_ids[] = { Extension::kSPV_AMD_gcn_shader, Extension::kSPV_AMD_gpu_shader_half_float, Extension::kSPV_AMD_gpu_shader_half_float_fetch, Extension::kSPV_AMD_gpu_shader_int16, Extension::kSPV_AMD_shader_ballot, Extension::kSPV_AMD_shader_explicit_vertex_parameter, Extension::kSPV_AMD_shader_fragment_mask, Extension::kSPV_AMD_shader_image_load_store_lod, Extension::kSPV_AMD_shader_trinary_minmax, Extension::kSPV_AMD_texture_gather_bias_lod, Extension::kSPV_EXT_demote_to_helper_invocation, Extension::kSPV_EXT_descriptor_indexing, Extension::kSPV_EXT_fragment_fully_covered, Extension::kSPV_EXT_fragment_invocation_density, Extension::kSPV_EXT_fragment_shader_interlock, Extension::kSPV_EXT_physical_storage_buffer, Extension::kSPV_EXT_shader_atomic_float16_add, Extension::kSPV_EXT_shader_atomic_float_add, Extension::kSPV_EXT_shader_atomic_float_min_max, Extension::kSPV_EXT_shader_image_int64, Extension::kSPV_EXT_shader_stencil_export, Extension::kSPV_EXT_shader_viewport_index_layer, Extension::kSPV_GOOGLE_decorate_string, Extension::kSPV_GOOGLE_hlsl_functionality1, Extension::kSPV_GOOGLE_user_type, Extension::kSPV_INTEL_arbitrary_precision_fixed_point, Extension::kSPV_INTEL_arbitrary_precision_floating_point, Extension::kSPV_INTEL_arbitrary_precision_integers, Extension::kSPV_INTEL_blocking_pipes, Extension::kSPV_INTEL_debug_module, Extension::kSPV_INTEL_device_side_avc_motion_estimation, Extension::kSPV_INTEL_float_controls2, Extension::kSPV_INTEL_fp_fast_math_mode, Extension::kSPV_INTEL_fpga_buffer_location, Extension::kSPV_INTEL_fpga_cluster_attributes, Extension::kSPV_INTEL_fpga_loop_controls, Extension::kSPV_INTEL_fpga_memory_accesses, Extension::kSPV_INTEL_fpga_memory_attributes, Extension::kSPV_INTEL_fpga_reg, Extension::kSPV_INTEL_function_pointers, Extension::kSPV_INTEL_inline_assembly, Extension::kSPV_INTEL_io_pipes, Extension::kSPV_INTEL_kernel_attributes, Extension::kSPV_INTEL_long_constant_composite, Extension::kSPV_INTEL_loop_fuse, Extension::kSPV_INTEL_media_block_io, Extension::kSPV_INTEL_optnone, Extension::kSPV_INTEL_shader_integer_functions2, Extension::kSPV_INTEL_subgroups, Extension::kSPV_INTEL_unstructured_loop_controls, Extension::kSPV_INTEL_usm_storage_classes, Extension::kSPV_INTEL_variable_length_array, Extension::kSPV_INTEL_vector_compute, Extension::kSPV_KHR_16bit_storage, Extension::kSPV_KHR_8bit_storage, Extension::kSPV_KHR_bit_instructions, Extension::kSPV_KHR_device_group, Extension::kSPV_KHR_expect_assume, Extension::kSPV_KHR_float_controls, Extension::kSPV_KHR_fragment_shading_rate, Extension::kSPV_KHR_integer_dot_product, Extension::kSPV_KHR_linkonce_odr, Extension::kSPV_KHR_multiview, Extension::kSPV_KHR_no_integer_wrap_decoration, Extension::kSPV_KHR_non_semantic_info, Extension::kSPV_KHR_physical_storage_buffer, Extension::kSPV_KHR_post_depth_coverage, Extension::kSPV_KHR_ray_query, Extension::kSPV_KHR_ray_tracing, Extension::kSPV_KHR_shader_atomic_counter_ops, Extension::kSPV_KHR_shader_ballot, Extension::kSPV_KHR_shader_clock, Extension::kSPV_KHR_shader_draw_parameters, Extension::kSPV_KHR_storage_buffer_storage_class, Extension::kSPV_KHR_subgroup_uniform_control_flow, Extension::kSPV_KHR_subgroup_vote, Extension::kSPV_KHR_terminate_invocation, Extension::kSPV_KHR_variable_pointers, Extension::kSPV_KHR_vulkan_memory_model, Extension::kSPV_KHR_workgroup_memory_explicit_layout, Extension::kSPV_NVX_multiview_per_view_attributes, Extension::kSPV_NV_compute_shader_derivatives, Extension::kSPV_NV_cooperative_matrix, Extension::kSPV_NV_fragment_shader_barycentric, Extension::kSPV_NV_geometry_shader_passthrough, Extension::kSPV_NV_mesh_shader, Extension::kSPV_NV_ray_tracing, Extension::kSPV_NV_ray_tracing_motion_blur, Extension::kSPV_NV_sample_mask_override_coverage, Extension::kSPV_NV_shader_image_footprint, Extension::kSPV_NV_shader_sm_builtins, Extension::kSPV_NV_shader_subgroup_partitioned, Extension::kSPV_NV_shading_rate, Extension::kSPV_NV_stereo_view_rendering, Extension::kSPV_NV_viewport_array2, Extension::kSPV_VALIDATOR_ignore_type_decl_unique }; const auto b = std::begin(known_ext_strs); const auto e = std::end(known_ext_strs); const auto found = std::equal_range( @@ -460,6 +478,8 @@ const char* CapabilityToString(SpvCapability capability) { return "StorageTexelBufferArrayNonUniformIndexing"; case SpvCapabilityRayTracingNV: return "RayTracingNV"; + case SpvCapabilityRayTracingMotionBlurNV: + return "RayTracingMotionBlurNV"; case SpvCapabilityVulkanMemoryModel: return "VulkanMemoryModel"; case SpvCapabilityVulkanMemoryModelDeviceScope: @@ -530,6 +550,8 @@ const char* CapabilityToString(SpvCapability capability) { return "FPFastMathModeINTEL"; case SpvCapabilityArbitraryPrecisionIntegersINTEL: return "ArbitraryPrecisionIntegersINTEL"; + case SpvCapabilityArbitraryPrecisionFloatingPointINTEL: + return "ArbitraryPrecisionFloatingPointINTEL"; case SpvCapabilityUnstructuredLoopControlsINTEL: return "UnstructuredLoopControlsINTEL"; case SpvCapabilityFPGALoopControlsINTEL: @@ -546,6 +568,8 @@ const char* CapabilityToString(SpvCapability capability) { return "LoopFuseINTEL"; case SpvCapabilityFPGABufferLocationINTEL: return "FPGABufferLocationINTEL"; + case SpvCapabilityArbitraryPrecisionFixedPointINTEL: + return "ArbitraryPrecisionFixedPointINTEL"; case SpvCapabilityUSMStorageClassesINTEL: return "USMStorageClassesINTEL"; case SpvCapabilityIOPipesINTEL: @@ -554,12 +578,28 @@ const char* CapabilityToString(SpvCapability capability) { return "BlockingPipesINTEL"; case SpvCapabilityFPGARegINTEL: return "FPGARegINTEL"; + case SpvCapabilityDotProductInputAllKHR: + return "DotProductInputAllKHR"; + case SpvCapabilityDotProductInput4x8BitKHR: + return "DotProductInput4x8BitKHR"; + case SpvCapabilityDotProductInput4x8BitPackedKHR: + return "DotProductInput4x8BitPackedKHR"; + case SpvCapabilityDotProductKHR: + return "DotProductKHR"; + case SpvCapabilityBitInstructions: + return "BitInstructions"; case SpvCapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT"; case SpvCapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT"; case SpvCapabilityLongConstantCompositeINTEL: return "LongConstantCompositeINTEL"; + case SpvCapabilityOptNoneINTEL: + return "OptNoneINTEL"; + case SpvCapabilityAtomicFloat16AddEXT: + return "AtomicFloat16AddEXT"; + case SpvCapabilityDebugInfoModuleINTEL: + return "DebugInfoModuleINTEL"; case SpvCapabilityMax: assert(0 && "Attempting to convert SpvCapabilityMax to string"); return ""; diff --git a/spirv-tools-sys/generated/extension_enum.inc b/spirv-tools-sys/generated/extension_enum.inc index 7ff15d9..8499ab6 100644 --- a/spirv-tools-sys/generated/extension_enum.inc +++ b/spirv-tools-sys/generated/extension_enum.inc @@ -14,6 +14,7 @@ kSPV_EXT_fragment_fully_covered, kSPV_EXT_fragment_invocation_density, kSPV_EXT_fragment_shader_interlock, kSPV_EXT_physical_storage_buffer, +kSPV_EXT_shader_atomic_float16_add, kSPV_EXT_shader_atomic_float_add, kSPV_EXT_shader_atomic_float_min_max, kSPV_EXT_shader_image_int64, @@ -22,8 +23,11 @@ kSPV_EXT_shader_viewport_index_layer, kSPV_GOOGLE_decorate_string, kSPV_GOOGLE_hlsl_functionality1, kSPV_GOOGLE_user_type, +kSPV_INTEL_arbitrary_precision_fixed_point, +kSPV_INTEL_arbitrary_precision_floating_point, kSPV_INTEL_arbitrary_precision_integers, kSPV_INTEL_blocking_pipes, +kSPV_INTEL_debug_module, kSPV_INTEL_device_side_avc_motion_estimation, kSPV_INTEL_float_controls2, kSPV_INTEL_fp_fast_math_mode, @@ -40,6 +44,7 @@ kSPV_INTEL_kernel_attributes, kSPV_INTEL_long_constant_composite, kSPV_INTEL_loop_fuse, kSPV_INTEL_media_block_io, +kSPV_INTEL_optnone, kSPV_INTEL_shader_integer_functions2, kSPV_INTEL_subgroups, kSPV_INTEL_unstructured_loop_controls, @@ -48,10 +53,12 @@ kSPV_INTEL_variable_length_array, kSPV_INTEL_vector_compute, kSPV_KHR_16bit_storage, kSPV_KHR_8bit_storage, +kSPV_KHR_bit_instructions, kSPV_KHR_device_group, kSPV_KHR_expect_assume, kSPV_KHR_float_controls, kSPV_KHR_fragment_shading_rate, +kSPV_KHR_integer_dot_product, kSPV_KHR_linkonce_odr, kSPV_KHR_multiview, kSPV_KHR_no_integer_wrap_decoration, @@ -65,6 +72,7 @@ kSPV_KHR_shader_ballot, kSPV_KHR_shader_clock, kSPV_KHR_shader_draw_parameters, kSPV_KHR_storage_buffer_storage_class, +kSPV_KHR_subgroup_uniform_control_flow, kSPV_KHR_subgroup_vote, kSPV_KHR_terminate_invocation, kSPV_KHR_variable_pointers, @@ -77,6 +85,7 @@ kSPV_NV_fragment_shader_barycentric, kSPV_NV_geometry_shader_passthrough, kSPV_NV_mesh_shader, kSPV_NV_ray_tracing, +kSPV_NV_ray_tracing_motion_blur, kSPV_NV_sample_mask_override_coverage, kSPV_NV_shader_image_footprint, kSPV_NV_shader_sm_builtins, diff --git a/spirv-tools-sys/generated/generators.inc b/spirv-tools-sys/generated/generators.inc index 9e41e85..91fc092 100644 --- a/spirv-tools-sys/generated/generators.inc +++ b/spirv-tools-sys/generated/generators.inc @@ -17,7 +17,7 @@ {16, "X-LEGEND", "Mesa-IR/SPIR-V Translator", "X-LEGEND Mesa-IR/SPIR-V Translator"}, {17, "Khronos", "SPIR-V Tools Linker", "Khronos SPIR-V Tools Linker"}, {18, "Wine", "VKD3D Shader Compiler", "Wine VKD3D Shader Compiler"}, -{19, "Clay", "Clay Shader Compiler", "Clay Clay Shader Compiler"}, +{19, "Tellusim", "Clay Shader Compiler", "Tellusim Clay Shader Compiler"}, {20, "W3C WebGPU Group", "WHLSL Shader Translator", "W3C WebGPU Group WHLSL Shader Translator"}, {21, "Google", "Clspv", "Google Clspv"}, {22, "Google", "MLIR SPIR-V Serializer", "Google MLIR SPIR-V Serializer"}, @@ -26,4 +26,6 @@ {25, "Netease Games", "Messiah Shader Compiler", "Netease Games Messiah Shader Compiler"}, {26, "Xenia", "Xenia Emulator Microcode Translator", "Xenia Xenia Emulator Microcode Translator"}, {27, "Embark Studios", "Rust GPU Compiler Backend", "Embark Studios Rust GPU Compiler Backend"}, -{28, "gfx-rs community", "Naga", "gfx-rs community Naga"}, \ No newline at end of file +{28, "gfx-rs community", "Naga", "gfx-rs community Naga"}, +{29, "Mikkosoft Productions", "MSP Shader Compiler", "Mikkosoft Productions MSP Shader Compiler"}, +{30, "SpvGenTwo community", "SpvGenTwo SPIR-V IR Tools", "SpvGenTwo community SpvGenTwo SPIR-V IR Tools"}, \ No newline at end of file diff --git a/spirv-tools-sys/generated/nonsemantic.vulkan.debuginfo.100.insts.inc b/spirv-tools-sys/generated/nonsemantic.vulkan.debuginfo.100.insts.inc new file mode 100644 index 0000000..9ccd030 --- /dev/null +++ b/spirv-tools-sys/generated/nonsemantic.vulkan.debuginfo.100.insts.inc @@ -0,0 +1,41 @@ + + +static const spv_ext_inst_desc_t nonsemantic_vulkan_debuginfo_100_entries[] = { + {"DebugInfoNone", 0, 0, nullptr, {SPV_OPERAND_TYPE_NONE}}, + {"DebugCompilationUnit", 1, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeBasic", 2, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypePointer", 3, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeQualifier", 4, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeArray", 5, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeVector", 6, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypedef", 7, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeFunction", 8, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeEnum", 9, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeComposite", 10, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeMember", 11, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeInheritance", 12, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypePtrToMember", 13, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeTemplate", 14, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeTemplateParameter", 15, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeTemplateTemplateParameter", 16, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugTypeTemplateParameterPack", 17, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugGlobalVariable", 18, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugFunctionDeclaration", 19, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugFunction", 20, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugLexicalBlock", 21, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugLexicalBlockDiscriminator", 22, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugScope", 23, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugNoScope", 24, 0, nullptr, {SPV_OPERAND_TYPE_NONE}}, + {"DebugInlinedAt", 25, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugLocalVariable", 26, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugInlinedVariable", 27, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugDeclare", 28, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugValue", 29, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugOperation", 30, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugExpression", 31, 0, nullptr, {SPV_OPERAND_TYPE_VARIABLE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugMacroDef", 32, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugMacroUndef", 33, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugImportedEntity", 34, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugSource", 35, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugFunctionDefinition", 101, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}} +}; \ No newline at end of file diff --git a/spirv-tools-sys/generated/opencl.debuginfo.100.insts.inc b/spirv-tools-sys/generated/opencl.debuginfo.100.insts.inc index 963bca3..389d912 100644 --- a/spirv-tools-sys/generated/opencl.debuginfo.100.insts.inc +++ b/spirv-tools-sys/generated/opencl.debuginfo.100.insts.inc @@ -36,5 +36,6 @@ static const spv_ext_inst_desc_t opencl_debuginfo_100_entries[] = { {"DebugMacroDef", 32, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, {"DebugMacroUndef", 33, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, {"DebugImportedEntity", 34, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_NONE}}, - {"DebugSource", 35, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}} + {"DebugSource", 35, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_OPTIONAL_ID, SPV_OPERAND_TYPE_NONE}}, + {"DebugModuleINTEL", 36, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_LITERAL_INTEGER, SPV_OPERAND_TYPE_NONE}} }; \ No newline at end of file diff --git a/spirv-tools-sys/generated/operand.kinds-unified1.inc b/spirv-tools-sys/generated/operand.kinds-unified1.inc index bc4a272..dfce4a2 100644 --- a/spirv-tools-sys/generated/operand.kinds-unified1.inc +++ b/spirv-tools-sys/generated/operand.kinds-unified1.inc @@ -1,4 +1,5 @@ static const SpvCapability pygen_variable_caps_Addresses[] = {SpvCapabilityAddresses}; +static const SpvCapability pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL[] = {SpvCapabilityArbitraryPrecisionFixedPointINTEL}; static const SpvCapability pygen_variable_caps_AsmINTEL[] = {SpvCapabilityAsmINTEL}; static const SpvCapability pygen_variable_caps_AtomicStorage[] = {SpvCapabilityAtomicStorage}; static const SpvCapability pygen_variable_caps_ClipDistance[] = {SpvCapabilityClipDistance}; @@ -49,6 +50,7 @@ static const SpvCapability pygen_variable_caps_InputAttachment[] = {SpvCapabilit static const SpvCapability pygen_variable_caps_InputAttachmentShaderNonUniform[] = {SpvCapabilityInputAttachment, SpvCapabilityShaderNonUniform}; static const SpvCapability pygen_variable_caps_Int64[] = {SpvCapabilityInt64}; static const SpvCapability pygen_variable_caps_Int64ImageEXT[] = {SpvCapabilityInt64ImageEXT}; +static const SpvCapability pygen_variable_caps_Int8[] = {SpvCapabilityInt8}; static const SpvCapability pygen_variable_caps_Kernel[] = {SpvCapabilityKernel}; static const SpvCapability pygen_variable_caps_KernelGroupNonUniform[] = {SpvCapabilityKernel, SpvCapabilityGroupNonUniform}; static const SpvCapability pygen_variable_caps_KernelGroupNonUniformSubgroupBallotKHR[] = {SpvCapabilityKernel, SpvCapabilityGroupNonUniform, SpvCapabilitySubgroupBallotKHR}; @@ -62,12 +64,14 @@ static const SpvCapability pygen_variable_caps_MinLod[] = {SpvCapabilityMinLod}; static const SpvCapability pygen_variable_caps_MultiView[] = {SpvCapabilityMultiView}; static const SpvCapability pygen_variable_caps_MultiViewport[] = {SpvCapabilityMultiViewport}; static const SpvCapability pygen_variable_caps_MultiViewportShaderViewportIndexShaderViewportIndexLayerEXTMeshShadingNV[] = {SpvCapabilityMultiViewport, SpvCapabilityShaderViewportIndex, SpvCapabilityShaderViewportIndexLayerEXT, SpvCapabilityMeshShadingNV}; +static const SpvCapability pygen_variable_caps_OptNoneINTEL[] = {SpvCapabilityOptNoneINTEL}; static const SpvCapability pygen_variable_caps_PerViewAttributesNVMeshShadingNV[] = {SpvCapabilityPerViewAttributesNV, SpvCapabilityMeshShadingNV}; static const SpvCapability pygen_variable_caps_PhysicalStorageBufferAddresses[] = {SpvCapabilityPhysicalStorageBufferAddresses}; static const SpvCapability pygen_variable_caps_Pipes[] = {SpvCapabilityPipes}; static const SpvCapability pygen_variable_caps_RayQueryKHR[] = {SpvCapabilityRayQueryKHR}; static const SpvCapability pygen_variable_caps_RayQueryKHRRayTracingKHR[] = {SpvCapabilityRayQueryKHR, SpvCapabilityRayTracingKHR}; static const SpvCapability pygen_variable_caps_RayTracingKHR[] = {SpvCapabilityRayTracingKHR}; +static const SpvCapability pygen_variable_caps_RayTracingMotionBlurNV[] = {SpvCapabilityRayTracingMotionBlurNV}; static const SpvCapability pygen_variable_caps_RayTracingNV[] = {SpvCapabilityRayTracingNV}; static const SpvCapability pygen_variable_caps_RayTracingNVRayTracingKHR[] = {SpvCapabilityRayTracingNV, SpvCapabilityRayTracingKHR}; static const SpvCapability pygen_variable_caps_RayTraversalPrimitiveCullingKHR[] = {SpvCapabilityRayTraversalPrimitiveCullingKHR}; @@ -89,6 +93,7 @@ static const SpvCapability pygen_variable_caps_Shader[] = {SpvCapabilityShader}; static const SpvCapability pygen_variable_caps_ShaderImageCubeArray[] = {SpvCapabilityShader, SpvCapabilityImageCubeArray}; static const SpvCapability pygen_variable_caps_ShaderKernel[] = {SpvCapabilityShader, SpvCapabilityKernel}; static const SpvCapability pygen_variable_caps_ShaderKernelImageMSArray[] = {SpvCapabilityShader, SpvCapabilityKernel, SpvCapabilityImageMSArray}; +static const SpvCapability pygen_variable_caps_ShaderVectorComputeINTEL[] = {SpvCapabilityShader, SpvCapabilityVectorComputeINTEL}; static const SpvCapability pygen_variable_caps_ShaderNonUniform[] = {SpvCapabilityShaderNonUniform}; static const SpvCapability pygen_variable_caps_ShaderSMBuiltinsNV[] = {SpvCapabilityShaderSMBuiltinsNV}; static const SpvCapability pygen_variable_caps_ShaderStereoViewNV[] = {SpvCapabilityShaderStereoViewNV}; @@ -124,6 +129,7 @@ static const spvtools::Extension pygen_variable_exts_SPV_EXT_fragment_fully_cove static const spvtools::Extension pygen_variable_exts_SPV_EXT_fragment_invocation_densitySPV_NV_shading_rate[] = {spvtools::Extension::kSPV_EXT_fragment_invocation_density, spvtools::Extension::kSPV_NV_shading_rate}; static const spvtools::Extension pygen_variable_exts_SPV_EXT_fragment_shader_interlock[] = {spvtools::Extension::kSPV_EXT_fragment_shader_interlock}; static const spvtools::Extension pygen_variable_exts_SPV_EXT_physical_storage_bufferSPV_KHR_physical_storage_buffer[] = {spvtools::Extension::kSPV_EXT_physical_storage_buffer, spvtools::Extension::kSPV_KHR_physical_storage_buffer}; +static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_atomic_float16_add[] = {spvtools::Extension::kSPV_EXT_shader_atomic_float16_add}; static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_atomic_float_add[] = {spvtools::Extension::kSPV_EXT_shader_atomic_float_add}; static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_atomic_float_min_max[] = {spvtools::Extension::kSPV_EXT_shader_atomic_float_min_max}; static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_image_int64[] = {spvtools::Extension::kSPV_EXT_shader_image_int64}; @@ -131,8 +137,11 @@ static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_stencil_expo static const spvtools::Extension pygen_variable_exts_SPV_EXT_shader_viewport_index_layerSPV_NV_viewport_array2[] = {spvtools::Extension::kSPV_EXT_shader_viewport_index_layer, spvtools::Extension::kSPV_NV_viewport_array2}; static const spvtools::Extension pygen_variable_exts_SPV_GOOGLE_hlsl_functionality1[] = {spvtools::Extension::kSPV_GOOGLE_hlsl_functionality1}; static const spvtools::Extension pygen_variable_exts_SPV_GOOGLE_user_type[] = {spvtools::Extension::kSPV_GOOGLE_user_type}; +static const spvtools::Extension pygen_variable_exts_SPV_INTEL_arbitrary_precision_fixed_point[] = {spvtools::Extension::kSPV_INTEL_arbitrary_precision_fixed_point}; +static const spvtools::Extension pygen_variable_exts_SPV_INTEL_arbitrary_precision_floating_point[] = {spvtools::Extension::kSPV_INTEL_arbitrary_precision_floating_point}; static const spvtools::Extension pygen_variable_exts_SPV_INTEL_arbitrary_precision_integers[] = {spvtools::Extension::kSPV_INTEL_arbitrary_precision_integers}; static const spvtools::Extension pygen_variable_exts_SPV_INTEL_blocking_pipes[] = {spvtools::Extension::kSPV_INTEL_blocking_pipes}; +static const spvtools::Extension pygen_variable_exts_SPV_INTEL_debug_module[] = {spvtools::Extension::kSPV_INTEL_debug_module}; static const spvtools::Extension pygen_variable_exts_SPV_INTEL_device_side_avc_motion_estimation[] = {spvtools::Extension::kSPV_INTEL_device_side_avc_motion_estimation}; static const spvtools::Extension pygen_variable_exts_SPV_INTEL_float_controls2[] = {spvtools::Extension::kSPV_INTEL_float_controls2}; static const spvtools::Extension pygen_variable_exts_SPV_INTEL_fp_fast_math_mode[] = {spvtools::Extension::kSPV_INTEL_fp_fast_math_mode}; @@ -149,6 +158,7 @@ static const spvtools::Extension pygen_variable_exts_SPV_INTEL_kernel_attributes static const spvtools::Extension pygen_variable_exts_SPV_INTEL_long_constant_composite[] = {spvtools::Extension::kSPV_INTEL_long_constant_composite}; static const spvtools::Extension pygen_variable_exts_SPV_INTEL_loop_fuse[] = {spvtools::Extension::kSPV_INTEL_loop_fuse}; static const spvtools::Extension pygen_variable_exts_SPV_INTEL_media_block_io[] = {spvtools::Extension::kSPV_INTEL_media_block_io}; +static const spvtools::Extension pygen_variable_exts_SPV_INTEL_optnone[] = {spvtools::Extension::kSPV_INTEL_optnone}; static const spvtools::Extension pygen_variable_exts_SPV_INTEL_shader_integer_functions2[] = {spvtools::Extension::kSPV_INTEL_shader_integer_functions2}; static const spvtools::Extension pygen_variable_exts_SPV_INTEL_subgroups[] = {spvtools::Extension::kSPV_INTEL_subgroups}; static const spvtools::Extension pygen_variable_exts_SPV_INTEL_unstructured_loop_controls[] = {spvtools::Extension::kSPV_INTEL_unstructured_loop_controls}; @@ -157,10 +167,12 @@ static const spvtools::Extension pygen_variable_exts_SPV_INTEL_variable_length_a static const spvtools::Extension pygen_variable_exts_SPV_INTEL_vector_compute[] = {spvtools::Extension::kSPV_INTEL_vector_compute}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_16bit_storage[] = {spvtools::Extension::kSPV_KHR_16bit_storage}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_8bit_storage[] = {spvtools::Extension::kSPV_KHR_8bit_storage}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_bit_instructions[] = {spvtools::Extension::kSPV_KHR_bit_instructions}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_device_group[] = {spvtools::Extension::kSPV_KHR_device_group}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_expect_assume[] = {spvtools::Extension::kSPV_KHR_expect_assume}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_float_controls[] = {spvtools::Extension::kSPV_KHR_float_controls}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_fragment_shading_rate[] = {spvtools::Extension::kSPV_KHR_fragment_shading_rate}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_integer_dot_product[] = {spvtools::Extension::kSPV_KHR_integer_dot_product}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_linkonce_odr[] = {spvtools::Extension::kSPV_KHR_linkonce_odr}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_multiview[] = {spvtools::Extension::kSPV_KHR_multiview}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_no_integer_wrap_decoration[] = {spvtools::Extension::kSPV_KHR_no_integer_wrap_decoration}; @@ -175,6 +187,7 @@ static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_clock[] = {s static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_draw_parameters[] = {spvtools::Extension::kSPV_KHR_shader_draw_parameters}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_shader_draw_parametersSPV_NV_mesh_shader[] = {spvtools::Extension::kSPV_KHR_shader_draw_parameters, spvtools::Extension::kSPV_NV_mesh_shader}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_storage_buffer_storage_classSPV_KHR_variable_pointers[] = {spvtools::Extension::kSPV_KHR_storage_buffer_storage_class, spvtools::Extension::kSPV_KHR_variable_pointers}; +static const spvtools::Extension pygen_variable_exts_SPV_KHR_subgroup_uniform_control_flow[] = {spvtools::Extension::kSPV_KHR_subgroup_uniform_control_flow}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_subgroup_vote[] = {spvtools::Extension::kSPV_KHR_subgroup_vote}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_variable_pointers[] = {spvtools::Extension::kSPV_KHR_variable_pointers}; static const spvtools::Extension pygen_variable_exts_SPV_KHR_vulkan_memory_model[] = {spvtools::Extension::kSPV_KHR_vulkan_memory_model}; @@ -188,6 +201,7 @@ static const spvtools::Extension pygen_variable_exts_SPV_NV_geometry_shader_pass static const spvtools::Extension pygen_variable_exts_SPV_NV_mesh_shader[] = {spvtools::Extension::kSPV_NV_mesh_shader}; static const spvtools::Extension pygen_variable_exts_SPV_NV_mesh_shaderSPV_NV_viewport_array2[] = {spvtools::Extension::kSPV_NV_mesh_shader, spvtools::Extension::kSPV_NV_viewport_array2}; static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracing[] = {spvtools::Extension::kSPV_NV_ray_tracing}; +static const spvtools::Extension pygen_variable_exts_SPV_NV_ray_tracing_motion_blur[] = {spvtools::Extension::kSPV_NV_ray_tracing_motion_blur}; static const spvtools::Extension pygen_variable_exts_SPV_NV_sample_mask_override_coverage[] = {spvtools::Extension::kSPV_NV_sample_mask_override_coverage}; static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_image_footprint[] = {spvtools::Extension::kSPV_NV_shader_image_footprint}; static const spvtools::Extension pygen_variable_exts_SPV_NV_shader_sm_builtins[] = {spvtools::Extension::kSPV_NV_shader_sm_builtins}; @@ -260,7 +274,8 @@ static const spv_operand_desc_t pygen_variable_FunctionControlEntries[] = { {"Inline", 0x0001, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"DontInline", 0x0002, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"Pure", 0x0004, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, - {"Const", 0x0008, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu} + {"Const", 0x0008, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, + {"OptNoneINTEL", 0x10000, 1, pygen_variable_caps_OptNoneINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu} }; static const spv_operand_desc_t pygen_variable_MemorySemanticsEntries[] = { @@ -330,7 +345,8 @@ static const spv_operand_desc_t pygen_variable_SourceLanguageEntries[] = { {"GLSL", 2, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"OpenCL_C", 3, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"OpenCL_CPP", 4, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, - {"HLSL", 5, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu} + {"HLSL", 5, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, + {"CPP_for_OpenCL", 6, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu} }; static const spv_operand_desc_t pygen_variable_ExecutionModelEntries[] = { @@ -411,7 +427,8 @@ static const spv_operand_desc_t pygen_variable_ExecutionModeEntries[] = { {"SubgroupsPerWorkgroup", 36, 1, pygen_variable_caps_SubgroupDispatch, 0, nullptr, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,1), 0xffffffffu}, {"SubgroupsPerWorkgroupId", 37, 1, pygen_variable_caps_SubgroupDispatch, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu}, {"LocalSizeId", 38, 0, nullptr, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu}, - {"LocalSizeHintId", 39, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu}, + {"LocalSizeHintId", 39, 1, pygen_variable_caps_Kernel, 0, nullptr, {SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID, SPV_OPERAND_TYPE_ID}, SPV_SPIRV_VERSION_WORD(1,2), 0xffffffffu}, + {"SubgroupUniformControlFlowKHR", 4421, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_KHR_subgroup_uniform_control_flow, {}, 0xffffffffu, 0xffffffffu}, {"PostDepthCoverage", 4446, 1, pygen_variable_caps_SampleMaskPostDepthCoverage, 1, pygen_variable_exts_SPV_KHR_post_depth_coverage, {}, 0xffffffffu, 0xffffffffu}, {"DenormPreserve", 4459, 1, pygen_variable_caps_DenormPreserve, 1, pygen_variable_exts_SPV_KHR_float_controls, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu}, {"DenormFlushToZero", 4460, 1, pygen_variable_caps_DenormFlushToZero, 1, pygen_variable_exts_SPV_KHR_float_controls, {SPV_OPERAND_TYPE_LITERAL_INTEGER}, SPV_SPIRV_VERSION_WORD(1,4), 0xffffffffu}, @@ -449,7 +466,7 @@ static const spv_operand_desc_t pygen_variable_StorageClassEntries[] = { {"Output", 3, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"Workgroup", 4, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"CrossWorkgroup", 5, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, - {"Private", 6, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, + {"Private", 6, 2, pygen_variable_caps_ShaderVectorComputeINTEL, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"Function", 7, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"Generic", 8, 1, pygen_variable_caps_GenericPointer, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"PushConstant", 9, 1, pygen_variable_caps_Shader, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, @@ -598,11 +615,29 @@ static const spv_operand_desc_t pygen_variable_FPDenormModeEntries[] = { {"FlushToZero", 1, 1, pygen_variable_caps_FunctionFloatControlINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu} }; +static const spv_operand_desc_t pygen_variable_QuantizationModesEntries[] = { + {"TRN", 0, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, + {"TRN_ZERO", 1, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, + {"RND", 2, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, + {"RND_ZERO", 3, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, + {"RND_INF", 4, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, + {"RND_MIN_INF", 5, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, + {"RND_CONV", 6, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, + {"RND_CONV_ODD", 7, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu} +}; + static const spv_operand_desc_t pygen_variable_FPOperationModeEntries[] = { {"IEEE", 0, 1, pygen_variable_caps_FunctionFloatControlINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, {"ALT", 1, 1, pygen_variable_caps_FunctionFloatControlINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu} }; +static const spv_operand_desc_t pygen_variable_OverflowModesEntries[] = { + {"WRAP", 0, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, + {"SAT", 1, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, + {"SAT_ZERO", 2, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu}, + {"SAT_SYM", 3, 1, pygen_variable_caps_ArbitraryPrecisionFixedPointINTEL, 0, nullptr, {}, 0xffffffffu, 0xffffffffu} +}; + static const spv_operand_desc_t pygen_variable_LinkageTypeEntries[] = { {"Export", 0, 1, pygen_variable_caps_Linkage, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"Import", 1, 1, pygen_variable_caps_Linkage, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, @@ -844,6 +879,7 @@ static const spv_operand_desc_t pygen_variable_BuiltInEntries[] = { {"HitTNV", 5332, 1, pygen_variable_caps_RayTracingNV, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, 0xffffffffu, 0xffffffffu}, {"HitKindNV", 5333, 2, pygen_variable_caps_RayTracingNVRayTracingKHR, 2, pygen_variable_exts_SPV_KHR_ray_tracingSPV_NV_ray_tracing, {}, 0xffffffffu, 0xffffffffu}, {"HitKindKHR", 5333, 2, pygen_variable_caps_RayTracingNVRayTracingKHR, 2, pygen_variable_exts_SPV_KHR_ray_tracingSPV_NV_ray_tracing, {}, 0xffffffffu, 0xffffffffu}, + {"CurrentRayTimeNV", 5334, 1, pygen_variable_caps_RayTracingMotionBlurNV, 1, pygen_variable_exts_SPV_NV_ray_tracing_motion_blur, {}, 0xffffffffu, 0xffffffffu}, {"IncomingRayFlagsNV", 5351, 2, pygen_variable_caps_RayTracingNVRayTracingKHR, 2, pygen_variable_exts_SPV_KHR_ray_tracingSPV_NV_ray_tracing, {}, 0xffffffffu, 0xffffffffu}, {"IncomingRayFlagsKHR", 5351, 2, pygen_variable_caps_RayTracingNVRayTracingKHR, 2, pygen_variable_exts_SPV_KHR_ray_tracingSPV_NV_ray_tracing, {}, 0xffffffffu, 0xffffffffu}, {"RayGeometryIndexKHR", 5352, 1, pygen_variable_caps_RayTracingKHR, 1, pygen_variable_exts_SPV_KHR_ray_tracing, {}, 0xffffffffu, 0xffffffffu}, @@ -1028,6 +1064,7 @@ static const spv_operand_desc_t pygen_variable_CapabilityEntries[] = { {"StorageTexelBufferArrayNonUniformIndexing", 5312, 2, pygen_variable_caps_ImageBufferShaderNonUniform, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, SPV_SPIRV_VERSION_WORD(1,5), 0xffffffffu}, {"StorageTexelBufferArrayNonUniformIndexingEXT", 5312, 2, pygen_variable_caps_ImageBufferShaderNonUniform, 1, pygen_variable_exts_SPV_EXT_descriptor_indexing, {}, SPV_SPIRV_VERSION_WORD(1,5), 0xffffffffu}, {"RayTracingNV", 5340, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_NV_ray_tracing, {}, 0xffffffffu, 0xffffffffu}, + {"RayTracingMotionBlurNV", 5341, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_NV_ray_tracing_motion_blur, {}, 0xffffffffu, 0xffffffffu}, {"VulkanMemoryModel", 5345, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_vulkan_memory_model, {}, SPV_SPIRV_VERSION_WORD(1,5), 0xffffffffu}, {"VulkanMemoryModelKHR", 5345, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_vulkan_memory_model, {}, SPV_SPIRV_VERSION_WORD(1,5), 0xffffffffu}, {"VulkanMemoryModelDeviceScope", 5346, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_vulkan_memory_model, {}, SPV_SPIRV_VERSION_WORD(1,5), 0xffffffffu}, @@ -1066,6 +1103,7 @@ static const spv_operand_desc_t pygen_variable_CapabilityEntries[] = { {"FPGAMemoryAttributesINTEL", 5824, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_fpga_memory_attributes, {}, 0xffffffffu, 0xffffffffu}, {"FPFastMathModeINTEL", 5837, 1, pygen_variable_caps_Kernel, 1, pygen_variable_exts_SPV_INTEL_fp_fast_math_mode, {}, 0xffffffffu, 0xffffffffu}, {"ArbitraryPrecisionIntegersINTEL", 5844, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_arbitrary_precision_integers, {}, 0xffffffffu, 0xffffffffu}, + {"ArbitraryPrecisionFloatingPointINTEL", 5845, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_arbitrary_precision_floating_point, {}, 0xffffffffu, 0xffffffffu}, {"UnstructuredLoopControlsINTEL", 5886, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_unstructured_loop_controls, {}, 0xffffffffu, 0xffffffffu}, {"FPGALoopControlsINTEL", 5888, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_fpga_loop_controls, {}, 0xffffffffu, 0xffffffffu}, {"KernelAttributesINTEL", 5892, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_kernel_attributes, {}, 0xffffffffu, 0xffffffffu}, @@ -1074,13 +1112,22 @@ static const spv_operand_desc_t pygen_variable_CapabilityEntries[] = { {"FPGAClusterAttributesINTEL", 5904, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_fpga_cluster_attributes, {}, 0xffffffffu, 0xffffffffu}, {"LoopFuseINTEL", 5906, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_loop_fuse, {}, 0xffffffffu, 0xffffffffu}, {"FPGABufferLocationINTEL", 5920, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_fpga_buffer_location, {}, 0xffffffffu, 0xffffffffu}, + {"ArbitraryPrecisionFixedPointINTEL", 5922, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_arbitrary_precision_fixed_point, {}, 0xffffffffu, 0xffffffffu}, {"USMStorageClassesINTEL", 5935, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_usm_storage_classes, {}, 0xffffffffu, 0xffffffffu}, {"IOPipesINTEL", 5943, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_io_pipes, {}, 0xffffffffu, 0xffffffffu}, {"BlockingPipesINTEL", 5945, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_blocking_pipes, {}, 0xffffffffu, 0xffffffffu}, {"FPGARegINTEL", 5948, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_fpga_reg, {}, 0xffffffffu, 0xffffffffu}, + {"DotProductInputAllKHR", 6016, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, {}, 0xffffffffu, 0xffffffffu}, + {"DotProductInput4x8BitKHR", 6017, 1, pygen_variable_caps_Int8, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, {}, 0xffffffffu, 0xffffffffu}, + {"DotProductInput4x8BitPackedKHR", 6018, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, {}, 0xffffffffu, 0xffffffffu}, + {"DotProductKHR", 6019, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, {}, 0xffffffffu, 0xffffffffu}, + {"BitInstructions", 6025, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_bit_instructions, {}, 0xffffffffu, 0xffffffffu}, {"AtomicFloat32AddEXT", 6033, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_shader_atomic_float_add, {}, 0xffffffffu, 0xffffffffu}, {"AtomicFloat64AddEXT", 6034, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_shader_atomic_float_add, {}, 0xffffffffu, 0xffffffffu}, - {"LongConstantCompositeINTEL", 6089, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_long_constant_composite, {}, 0xffffffffu, 0xffffffffu} + {"LongConstantCompositeINTEL", 6089, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_long_constant_composite, {}, 0xffffffffu, 0xffffffffu}, + {"OptNoneINTEL", 6094, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_optnone, {}, 0xffffffffu, 0xffffffffu}, + {"AtomicFloat16AddEXT", 6095, 1, pygen_variable_caps_Shader, 1, pygen_variable_exts_SPV_EXT_shader_atomic_float16_add, {}, 0xffffffffu, 0xffffffffu}, + {"DebugInfoModuleINTEL", 6114, 0, nullptr, 1, pygen_variable_exts_SPV_INTEL_debug_module, {}, 0xffffffffu, 0xffffffffu} }; static const spv_operand_desc_t pygen_variable_RayQueryIntersectionEntries[] = { @@ -1099,6 +1146,10 @@ static const spv_operand_desc_t pygen_variable_RayQueryCandidateIntersectionType {"RayQueryCandidateIntersectionAABBKHR", 1, 1, pygen_variable_caps_RayQueryKHR, 0, nullptr, {}, 0xffffffffu, 0xffffffffu} }; +static const spv_operand_desc_t pygen_variable_PackedVectorFormatEntries[] = { + {"PackedVectorFormat4x8BitKHR", 0, 0, nullptr, 1, pygen_variable_exts_SPV_KHR_integer_dot_product, {}, 0xffffffffu, 0xffffffffu} +}; + static const spv_operand_desc_t pygen_variable_DebugInfoFlagsEntries[] = { {"None", 0x0000, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, {"FlagIsProtected", 0x01, 0, nullptr, 0, nullptr, {}, SPV_SPIRV_VERSION_WORD(1, 0), 0xffffffffu}, @@ -1242,7 +1293,9 @@ static const spv_operand_desc_group_t pygen_variable_OperandInfoTable[] = { {SPV_OPERAND_TYPE_IMAGE_CHANNEL_DATA_TYPE, ARRAY_SIZE(pygen_variable_ImageChannelDataTypeEntries), pygen_variable_ImageChannelDataTypeEntries}, {SPV_OPERAND_TYPE_FP_ROUNDING_MODE, ARRAY_SIZE(pygen_variable_FPRoundingModeEntries), pygen_variable_FPRoundingModeEntries}, {SPV_OPERAND_TYPE_FPDENORM_MODE, ARRAY_SIZE(pygen_variable_FPDenormModeEntries), pygen_variable_FPDenormModeEntries}, + {SPV_OPERAND_TYPE_QUANTIZATION_MODES, ARRAY_SIZE(pygen_variable_QuantizationModesEntries), pygen_variable_QuantizationModesEntries}, {SPV_OPERAND_TYPE_FPOPERATION_MODE, ARRAY_SIZE(pygen_variable_FPOperationModeEntries), pygen_variable_FPOperationModeEntries}, + {SPV_OPERAND_TYPE_OVERFLOW_MODES, ARRAY_SIZE(pygen_variable_OverflowModesEntries), pygen_variable_OverflowModesEntries}, {SPV_OPERAND_TYPE_LINKAGE_TYPE, ARRAY_SIZE(pygen_variable_LinkageTypeEntries), pygen_variable_LinkageTypeEntries}, {SPV_OPERAND_TYPE_ACCESS_QUALIFIER, ARRAY_SIZE(pygen_variable_AccessQualifierEntries), pygen_variable_AccessQualifierEntries}, {SPV_OPERAND_TYPE_FUNCTION_PARAMETER_ATTRIBUTE, ARRAY_SIZE(pygen_variable_FunctionParameterAttributeEntries), pygen_variable_FunctionParameterAttributeEntries}, @@ -1255,6 +1308,7 @@ static const spv_operand_desc_group_t pygen_variable_OperandInfoTable[] = { {SPV_OPERAND_TYPE_RAY_QUERY_INTERSECTION, ARRAY_SIZE(pygen_variable_RayQueryIntersectionEntries), pygen_variable_RayQueryIntersectionEntries}, {SPV_OPERAND_TYPE_RAY_QUERY_COMMITTED_INTERSECTION_TYPE, ARRAY_SIZE(pygen_variable_RayQueryCommittedIntersectionTypeEntries), pygen_variable_RayQueryCommittedIntersectionTypeEntries}, {SPV_OPERAND_TYPE_RAY_QUERY_CANDIDATE_INTERSECTION_TYPE, ARRAY_SIZE(pygen_variable_RayQueryCandidateIntersectionTypeEntries), pygen_variable_RayQueryCandidateIntersectionTypeEntries}, + {SPV_OPERAND_TYPE_PACKED_VECTOR_FORMAT, ARRAY_SIZE(pygen_variable_PackedVectorFormatEntries), pygen_variable_PackedVectorFormatEntries}, {SPV_OPERAND_TYPE_DEBUG_INFO_FLAGS, ARRAY_SIZE(pygen_variable_DebugInfoFlagsEntries), pygen_variable_DebugInfoFlagsEntries}, {SPV_OPERAND_TYPE_DEBUG_BASE_TYPE_ATTRIBUTE_ENCODING, ARRAY_SIZE(pygen_variable_DebugBaseTypeAttributeEncodingEntries), pygen_variable_DebugBaseTypeAttributeEncodingEntries}, {SPV_OPERAND_TYPE_DEBUG_COMPOSITE_TYPE, ARRAY_SIZE(pygen_variable_DebugCompositeTypeEntries), pygen_variable_DebugCompositeTypeEntries}, @@ -1268,5 +1322,6 @@ static const spv_operand_desc_group_t pygen_variable_OperandInfoTable[] = { {SPV_OPERAND_TYPE_CLDEBUG100_DEBUG_IMPORTED_ENTITY, ARRAY_SIZE(pygen_variable_CLDEBUG100_DebugImportedEntityEntries), pygen_variable_CLDEBUG100_DebugImportedEntityEntries}, {SPV_OPERAND_TYPE_OPTIONAL_IMAGE, ARRAY_SIZE(pygen_variable_ImageOperandsEntries), pygen_variable_ImageOperandsEntries}, {SPV_OPERAND_TYPE_OPTIONAL_MEMORY_ACCESS, ARRAY_SIZE(pygen_variable_MemoryAccessEntries), pygen_variable_MemoryAccessEntries}, - {SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER, ARRAY_SIZE(pygen_variable_AccessQualifierEntries), pygen_variable_AccessQualifierEntries} + {SPV_OPERAND_TYPE_OPTIONAL_ACCESS_QUALIFIER, ARRAY_SIZE(pygen_variable_AccessQualifierEntries), pygen_variable_AccessQualifierEntries}, + {SPV_OPERAND_TYPE_OPTIONAL_PACKED_VECTOR_FORMAT, ARRAY_SIZE(pygen_variable_PackedVectorFormatEntries), pygen_variable_PackedVectorFormatEntries} }; \ No newline at end of file diff --git a/spirv-tools-sys/spirv-headers b/spirv-tools-sys/spirv-headers index bcf5521..635049b 160000 --- a/spirv-tools-sys/spirv-headers +++ b/spirv-tools-sys/spirv-headers @@ -1 +1 @@ -Subproject commit bcf55210f13a4fa3c3d0963b509ff1070e434c79 +Subproject commit 635049b5e1451d846d5d307def8c78328aaeb342 diff --git a/spirv-tools-sys/spirv-tools b/spirv-tools-sys/spirv-tools index 5cb76b3..663a6ae 160000 --- a/spirv-tools-sys/spirv-tools +++ b/spirv-tools-sys/spirv-tools @@ -1 +1 @@ -Subproject commit 5cb76b39f829330370af10a8d0482fd361350b84 +Subproject commit 663a6ae2ded278cc3a485651a407a4a76e5b6173 diff --git a/spirv-tools-sys/src/c/opt.cpp b/spirv-tools-sys/src/c/opt.cpp index d3a70a6..d4ab888 100644 --- a/spirv-tools-sys/src/c/opt.cpp +++ b/spirv-tools-sys/src/c/opt.cpp @@ -4,60 +4,62 @@ struct Optimus; enum Passes { - Null, - StripDebugInfo, - StripReflectInfo, + AggressiveDCE, + AmdExtToKhr, + BlockMerge, + CCP, + CFGCleanup, + CodeSinking, + CombineAccessChains, + CompactIds, + ConvertRelaxedToHalf, + CopyPropagateArrays, + DeadBranchElim, + DeadInsertElim, + DeadVariableElimination, + DescriptorScalarReplacement, + EliminateDeadConstant, EliminateDeadFunctions, EliminateDeadMembers, + FixStorageClass, FlattenDecoration, - FreezeSpecConstantValue, FoldSpecConstantOpAndComposite, - UnifyConstant, - EliminateDeadConstant, - StrengthReduction, - BlockMerge, + FreezeSpecConstantValue, + GraphicsRobustAccess, + IfConversion, InlineExhaustive, InlineOpaque, - LocalSingleBlockLoadStoreElim, - DeadBranchElim, - LocalMultiStoreElim, - LocalAccessChainConvert, - LocalSingleStoreElim, InsertExtractElim, - DeadInsertElim, - AggressiveDCE, - PropagateLineInfo, - RedundantLineInfoElim, - CompactIds, - RemoveDuplicates, - CFGCleanup, - DeadVariableElimination, - MergeReturn, + InterpolateFixup, + LocalAccessChainConvert, + LocalMultiStoreElim, LocalRedundancyElimination, + LocalSingleBlockLoadStoreElim, + LocalSingleStoreElim, LoopInvariantCodeMotion, LoopPeeling, LoopUnswitch, - RedundancyElimination, + MergeReturn, + Null, PrivateToLocal, - CCP, - Workaround1209, - IfConversion, + PropagateLineInfo, + ReduceLoadSize, + RedundancyElimination, + RedundantLineInfoElim, + RelaxFloatOps, + RemoveDuplicates, + RemoveUnusedInterfaceVariables, ReplaceInvalidOpcode, Simplification, SSARewrite, - ConvertRelaxedToHalf, - RelaxFloatOps, - CopyPropagateArrays, - VectorDCE, - ReduceLoadSize, - CombineAccessChains, + StrengthReduction, + StripDebugInfo, + StripReflectInfo, + UnifyConstant, UpgradeMemoryModel, - CodeSinking, - FixStorageClass, - GraphicsRobustAccess, - DescriptorScalarReplacement, + VectorDCE, + Workaround1209, WrapOpKill, - AmdExtToKhr, }; typedef void (*message_callback)( @@ -162,60 +164,62 @@ extern "C" { spvtools::Optimizer* op = (spvtools::Optimizer*)optimizer; switch (pass) { - PASS(Null) - PASS(StripDebugInfo) - PASS(StripReflectInfo) + PASS(AggressiveDCE) + PASS(AmdExtToKhr) + PASS(BlockMerge) + PASS(CCP) + PASS(CFGCleanup) + PASS(CodeSinking) + PASS(CombineAccessChains) + PASS(CompactIds) + PASS(ConvertRelaxedToHalf) + PASS(CopyPropagateArrays) + PASS(DeadBranchElim) + PASS(DeadInsertElim) + PASS(DeadVariableElimination) + PASS(DescriptorScalarReplacement) + PASS(EliminateDeadConstant) PASS(EliminateDeadFunctions) PASS(EliminateDeadMembers) + PASS(FixStorageClass) PASS(FlattenDecoration) - PASS(FreezeSpecConstantValue) PASS(FoldSpecConstantOpAndComposite) - PASS(UnifyConstant) - PASS(EliminateDeadConstant) - PASS(StrengthReduction) - PASS(BlockMerge) + PASS(FreezeSpecConstantValue) + PASS(GraphicsRobustAccess) + PASS(IfConversion) PASS(InlineExhaustive) PASS(InlineOpaque) - PASS(LocalSingleBlockLoadStoreElim) - PASS(DeadBranchElim) - PASS(LocalMultiStoreElim) - PASS(LocalAccessChainConvert) - PASS(LocalSingleStoreElim) PASS(InsertExtractElim) - PASS(DeadInsertElim) - PASS(AggressiveDCE) - PASS(PropagateLineInfo) - PASS(RedundantLineInfoElim) - PASS(CompactIds) - PASS(RemoveDuplicates) - PASS(CFGCleanup) - PASS(DeadVariableElimination) - PASS(MergeReturn) + PASS(InterpolateFixup) + PASS(LocalAccessChainConvert) + PASS(LocalMultiStoreElim) PASS(LocalRedundancyElimination) + PASS(LocalSingleBlockLoadStoreElim) + PASS(LocalSingleStoreElim) PASS(LoopInvariantCodeMotion) PASS(LoopPeeling) PASS(LoopUnswitch) - PASS(RedundancyElimination) + PASS(MergeReturn) + PASS(Null) PASS(PrivateToLocal) - PASS(CCP) - PASS(Workaround1209) - PASS(IfConversion) + PASS(PropagateLineInfo) + PASS(ReduceLoadSize) + PASS(RedundancyElimination) + PASS(RedundantLineInfoElim) + PASS(RelaxFloatOps) + PASS(RemoveDuplicates) + PASS(RemoveUnusedInterfaceVariables) PASS(ReplaceInvalidOpcode) PASS(Simplification) PASS(SSARewrite) - PASS(ConvertRelaxedToHalf) - PASS(RelaxFloatOps) - PASS(CopyPropagateArrays) - PASS(VectorDCE) - PASS(ReduceLoadSize) - PASS(CombineAccessChains) + PASS(StrengthReduction) + PASS(StripDebugInfo) + PASS(StripReflectInfo) + PASS(UnifyConstant) PASS(UpgradeMemoryModel) - PASS(CodeSinking) - PASS(FixStorageClass) - PASS(GraphicsRobustAccess) - PASS(DescriptorScalarReplacement) + PASS(VectorDCE) + PASS(Workaround1209) PASS(WrapOpKill) - PASS(AmdExtToKhr) } } diff --git a/spirv-tools-sys/src/lib.rs b/spirv-tools-sys/src/lib.rs index 32df4e3..39235aa 100644 --- a/spirv-tools-sys/src/lib.rs +++ b/spirv-tools-sys/src/lib.rs @@ -1,3 +1,73 @@ +// BEGIN - Embark standard lints v0.4 +// do not change or add/remove here, but one can add exceptions after this section +// for more info see: +#![deny(unsafe_code)] +#![warn( + clippy::all, + clippy::await_holding_lock, + clippy::char_lit_as_u8, + clippy::checked_conversions, + clippy::dbg_macro, + clippy::debug_assert_with_mut_call, + clippy::doc_markdown, + clippy::empty_enum, + clippy::enum_glob_use, + clippy::exit, + clippy::expl_impl_clone_on_copy, + clippy::explicit_deref_methods, + clippy::explicit_into_iter_loop, + clippy::fallible_impl_from, + clippy::filter_map_next, + clippy::float_cmp_const, + clippy::fn_params_excessive_bools, + clippy::if_let_mutex, + clippy::implicit_clone, + clippy::imprecise_flops, + clippy::inefficient_to_string, + clippy::invalid_upcast_comparisons, + clippy::large_types_passed_by_value, + clippy::let_unit_value, + clippy::linkedlist, + clippy::lossy_float_literal, + clippy::macro_use_imports, + clippy::manual_ok_or, + clippy::map_err_ignore, + clippy::map_flatten, + clippy::map_unwrap_or, + clippy::match_on_vec_items, + clippy::match_same_arms, + clippy::match_wildcard_for_single_variants, + clippy::mem_forget, + clippy::mismatched_target_os, + clippy::mut_mut, + clippy::mutex_integer, + clippy::needless_borrow, + clippy::needless_continue, + clippy::option_option, + clippy::path_buf_push_overwrite, + clippy::ptr_as_ptr, + clippy::ref_option_ref, + clippy::rest_pat_in_fully_bound_structs, + clippy::same_functions_in_if_condition, + clippy::semicolon_if_nothing_returned, + clippy::string_add_assign, + clippy::string_add, + clippy::string_lit_as_bytes, + clippy::string_to_string, + clippy::todo, + clippy::trait_duplication_in_bounds, + clippy::unimplemented, + clippy::unnested_or_patterns, + clippy::unused_self, + clippy::useless_transmute, + clippy::verbose_file_reads, + clippy::zero_sized_map_values, + future_incompatible, + nonstandard_style, + rust_2018_idioms +)] +// END - Embark standard lints v0.4 + #[cfg(not(any(feature = "use-installed-tools", feature = "use-compiled-tools")))] compile_error!("Enable at least one of `use-compiled-tools` or `use-installed-tools` features"); diff --git a/spirv-tools-sys/src/opt.rs b/spirv-tools-sys/src/opt.rs index c499cc4..f5cc585 100644 --- a/spirv-tools-sys/src/opt.rs +++ b/spirv-tools-sys/src/opt.rs @@ -12,19 +12,137 @@ pub struct OptimizerOptions { #[repr(C)] #[allow(clippy::upper_case_acronyms)] pub enum Passes { - // Creates a null pass. - // A null pass does nothing to the SPIR-V module to be optimized. - Null, - // Creates a strip-debug-info pass. - // A strip-debug-info pass removes all debug instructions (as documented in - // Section 3.32.2 of the SPIR-V spec) of the SPIR-V module to be optimized. - StripDebugInfo, - // Creates a strip-reflect-info pass. - // A strip-reflect-info pass removes all reflections instructions. - // For now, this is limited to removing decorations defined in - // SPV_GOOGLE_hlsl_functionality1. The coverage may expand in - // the future. - StripReflectInfo, + // Create aggressive dead code elimination pass + // This pass eliminates unused code from the module. In addition, + // it detects and eliminates code which may have spurious uses but which do + // not contribute to the output of the function. The most common cause of + // such code sequences is summations in loops whose result is no longer used + // due to dead code elimination. This optimization has additional compile + // time cost over standard dead code elimination. + // + // This pass only processes entry point functions. It also only processes + // shaders with relaxed logical addressing (see opt/instruction.h). It + // currently will not process functions with function calls. Unreachable + // functions are deleted. + // + // This pass will be made more effective by first running passes that remove + // dead control flow and inlines function calls. + // + // This pass can be especially useful after running Local Access Chain + // Conversion, which tends to cause cycles of dead code to be left after + // Store/Load elimination passes are completed. These cycles cannot be + // eliminated with standard dead code elimination. + AggressiveDCE, + // Replaces the extensions VK_AMD_shader_ballot,VK_AMD_gcn_shader, and + // VK_AMD_shader_trinary_minmax with equivalent code using core instructions and + // capabilities. + AmdExtToKhr, + // Creates a block merge pass. + // This pass searches for blocks with a single Branch to a block with no + // other predecessors and merges the blocks into a single block. Continue + // blocks and Merge blocks are not candidates for the second block. + // + // The pass is most useful after Dead Branch Elimination, which can leave + // such sequences of blocks. Merging them makes subsequent passes more + // effective, such as single block local store-load elimination. + // + // While this pass reduces the number of occurrences of this sequence, at + // this time it does not guarantee all such sequences are eliminated. + // + // Presence of phi instructions can inhibit this optimization. Handling + // these is left for future improvements. + BlockMerge, + // Creates a conditional constant propagation (CCP) pass. + // This pass implements the SSA-CCP algorithm in + // + // Constant propagation with conditional branches, + // Wegman and Zadeck, ACM TOPLAS 13(2):181-210. + // + // Constant values in expressions and conditional jumps are folded and + // simplified. This may reduce code size by removing never executed jump targets + // and computations with constant operands. + ConditionalConstantPropagation, + // Creates a CFG cleanup pass. + // This pass removes cruft from the control flow graph of functions that are + // reachable from entry points and exported functions. It currently includes the + // following functionality: + // + // - Removal of unreachable basic blocks. + CFGCleanup, + // Create a pass to do code sinking. Code sinking is a transformation + // where an instruction is moved into a more deeply nested construct. + CodeSinking, + // Create a pass to combine chained access chains. + // This pass looks for access chains fed by other access chains and combines + // them into a single instruction where possible. + CombineAccessChains, + // Creates a compact ids pass. + // The pass remaps result ids to a compact and gapless range starting from %1. + CompactIds, + // Create pass to convert relaxed precision instructions to half precision. + // This pass converts as many relaxed float32 arithmetic operations to half as + // possible. It converts any float32 operands to half if needed. It converts + // any resulting half precision values back to float32 as needed. No variables + // are changed. No image operations are changed. + // + // Best if run after function scope store/load and composite operation + // eliminations are run. Also best if followed by instruction simplification, + // redundancy elimination and DCE. + ConvertRelaxedToHalf, + // Create copy propagate arrays pass. + // This pass looks to copy propagate memory references for arrays. It looks + // for specific code patterns to recognize array copies. + CopyPropagateArrays, + // Create dead branch elimination pass. + // For each entry point function, this pass will look for SelectionMerge + // BranchConditionals with constant condition and convert to a Branch to + // the indicated label. It will delete resulting dead blocks. + // + // For all phi functions in merge block, replace all uses with the id + // corresponding to the living predecessor. + // + // Note that some branches and blocks may be left to avoid creating invalid + // control flow. Improving this is left to future work. + // + // This pass is most effective when preceeded by passes which eliminate + // local loads and stores, effectively propagating constant values where + // possible. + DeadBranchElim, + // Creates a dead insert elimination pass. + // This pass processes each entry point function in the module, searching for + // unreferenced inserts into composite types. These are most often unused + // stores to vector components. They are unused because they are never + // referenced, or because there is another insert to the same component between + // the insert and the reference. After removing the inserts, dead code + // elimination is attempted on the inserted values. + // + // This pass performs best after access chains are converted to inserts and + // extracts and local loads and stores are eliminated. While executing this + // pass can be advantageous on its own, it is also advantageous to execute + // this pass after CreateInsertExtractPass() as it will remove any unused + // inserts created by that pass. + DeadInsertElim, + // Create dead variable elimination pass. + // This pass will delete module scope variables, along with their decorations, + // that are not referenced. + DeadVariableElimination, + // Create descriptor scalar replacement pass. + // This pass replaces every array variable |desc| that has a DescriptorSet and + // Binding decorations with a new variable for each element of the array. + // Suppose |desc| was bound at binding |b|. Then the variable corresponding to + // |desc[i]| will have binding |b+i|. The descriptor set will be the same. It + // is assumed that no other variable already has a binding that will used by one + // of the new variables. If not, the pass will generate invalid Spir-V. All + // accesses to |desc| must be OpAccessChain instructions with a literal index + // for the first index. + DescriptorScalarReplacement, + // Creates a eliminate-dead-constant pass. + // A eliminate-dead-constant pass removes dead constants, including normal + // contants defined by OpConstant, OpConstantComposite, OpConstantTrue, or + // OpConstantFalse and spec constants defined by OpSpecConstant, + // OpSpecConstantComposite, OpSpecConstantTrue, OpSpecConstantFalse or + // OpSpecConstantOp. + EliminateDeadConstant, // Creates an eliminate-dead-functions pass. // An eliminate-dead-functions pass will remove all functions that are not in // the call trees rooted at entry points and exported functions. These @@ -34,6 +152,10 @@ pub enum Passes { // An eliminate-dead-members pass will remove all unused members of structures. // This will not affect the data layout of the remaining members. EliminateDeadMembers, + // Create a pass to fix incorrect storage classes. In order to make code + // generation simpler, DXC may generate code where the storage classes do not + // match up correctly. This pass will fix the errors that it can. + FixStorageClass, // Creates a flatten-decoration pass. // A flatten-decoration pass replaces grouped decorations with equivalent // ungrouped decorations. That is, it replaces each OpDecorationGroup @@ -42,17 +164,6 @@ pub enum Passes { // The pass does not attempt to preserve debug information for instructions // it removes. FlattenDecoration, - // Creates a freeze-spec-constant-value pass. - // A freeze-spec-constant pass specializes the value of spec constants to - // their default values. This pass only processes the spec constants that have - // SpecId decorations (defined by OpSpecConstant, OpSpecConstantTrue, or - // OpSpecConstantFalse instructions) and replaces them with their normal - // counterparts (OpConstant, OpConstantTrue, or OpConstantFalse). The - // corresponding SpecId annotation instructions will also be removed. This - // pass does not fold the newly added normal constants and does not process - // other spec constants defined by OpSpecConstantComposite or - // OpSpecConstantOp. - FreezeSpecConstantValue, // Creates a fold-spec-constant-op-and-composite pass. // A fold-spec-constant-op-and-composite pass folds spec constants defined by // OpSpecConstantOp or OpSpecConstantComposite instruction, to normal Constants @@ -74,48 +185,49 @@ pub enum Passes { // all the operations under Kernel capability. // TODO(qining): Add support for the operations listed above. FoldSpecConstantOpAndComposite, - // Creates a unify-constant pass. - // A unify-constant pass de-duplicates the constants. Constants with the exact - // same value and identical form will be unified and only one constant will - // be kept for each unique pair of type and value. - // There are several cases not handled by this pass: - // 1) Constants defined by OpConstantNull instructions (null constants) and - // constants defined by OpConstantFalse, OpConstant or OpConstantComposite - // with value 0 (zero-valued normal constants) are not considered equivalent. - // So null constants won't be used to replace zero-valued normal constants, - // vice versa. - // 2) Whenever there are decorations to the constant's result id id, the - // constant won't be handled, which means, it won't be used to replace any - // other constants, neither can other constants replace it. - // 3) NaN in float point format with different bit patterns are not unified. - UnifyConstant, - // Creates a eliminate-dead-constant pass. - // A eliminate-dead-constant pass removes dead constants, including normal - // contants defined by OpConstant, OpConstantComposite, OpConstantTrue, or - // OpConstantFalse and spec constants defined by OpSpecConstant, - // OpSpecConstantComposite, OpSpecConstantTrue, OpSpecConstantFalse or + // Creates a freeze-spec-constant-value pass. + // A freeze-spec-constant pass specializes the value of spec constants to + // their default values. This pass only processes the spec constants that have + // SpecId decorations (defined by OpSpecConstant, OpSpecConstantTrue, or + // OpSpecConstantFalse instructions) and replaces them with their normal + // counterparts (OpConstant, OpConstantTrue, or OpConstantFalse). The + // corresponding SpecId annotation instructions will also be removed. This + // pass does not fold the newly added normal constants and does not process + // other spec constants defined by OpSpecConstantComposite or // OpSpecConstantOp. - EliminateDeadConstant, - // Creates a strength-reduction pass. - // A strength-reduction pass will look for opportunities to replace an - // instruction with an equivalent and less expensive one. For example, - // multiplying by a power of 2 can be replaced by a bit shift. - StrengthReduction, - // Creates a block merge pass. - // This pass searches for blocks with a single Branch to a block with no - // other predecessors and merges the blocks into a single block. Continue - // blocks and Merge blocks are not candidates for the second block. + FreezeSpecConstantValue, + // Creates a graphics robust access pass. // - // The pass is most useful after Dead Branch Elimination, which can leave - // such sequences of blocks. Merging them makes subsequent passes more - // effective, such as single block local store-load elimination. + // This pass injects code to clamp indexed accesses to buffers and internal + // arrays, providing guarantees satisfying Vulkan's robustBufferAccess rules. // - // While this pass reduces the number of occurrences of this sequence, at - // this time it does not guarantee all such sequences are eliminated. + // TODO(dneto): Clamps coordinates and sample index for pointer calculations + // into storage images (OpImageTexelPointer). For an cube array image, it + // assumes the maximum layer count times 6 is at most 0xffffffff. // - // Presence of phi instructions can inhibit this optimization. Handling - // these is left for future improvements. - BlockMerge, + // NOTE: This pass will fail with a message if: + // - The module is not a Shader module. + // - The module declares VariablePointers, VariablePointersStorageBuffer, or + // RuntimeDescriptorArrayEXT capabilities. + // - The module uses an addressing model other than Logical + // - Access chain indices are wider than 64 bits. + // - Access chain index for a struct is not an OpConstant integer or is out + // of range. (The module is already invalid if that is the case.) + // - TODO(dneto): The OpImageTexelPointer coordinate component is not 32-bits + // wide. + // + // NOTE: Access chain indices are always treated as signed integers. So + // if an array has a fixed size of more than 2^31 elements, then elements + // from 2^31 and above are never accessible with a 32-bit index, + // signed or unsigned. For this case, this pass will clamp the index + // between 0 and at 2^31-1, inclusive. + // Similarly, if an array has more then 2^15 element and is accessed with + // a 16-bit index, then elements from 2^15 and above are not accessible. + // In this case, the pass will clamp the index between 0 and 2^15-1 + // inclusive. + GraphicsRobustAccess, + // Creates a pass that converts if-then-else like assignments into OpSelect. + IfConversion, // Creates an exhaustive inline pass. // An exhaustive inline pass attempts to exhaustively inline all function // calls in all functions in an entry point call tree. The intent is to enable, @@ -134,43 +246,41 @@ pub enum Passes { // not legal in Vulkan. Functions that are not in the call tree of an entry // point are not changed. InlineOpaque, - // Creates a single-block local variable load/store elimination pass. - // For every entry point function, do single block memory optimization of - // function variables referenced only with non-access-chain loads and stores. - // For each targeted variable load, if previous store to that variable in the - // block, replace the load's result id with the value id of the store. - // If previous load within the block, replace the current load's result id - // with the previous load's result id. In either case, delete the current - // load. Finally, check if any remaining stores are useless, and delete store - // and variable if possible. - // - // The presence of access chain references and function calls can inhibit - // the above optimization. + // Creates an insert/extract elimination pass. + // This pass processes each entry point function in the module, searching for + // extracts on a sequence of inserts. It further searches the sequence for an + // insert with indices identical to the extract. If such an insert can be + // found before hitting a conflicting insert, the extract's result id is + // replaced with the id of the values from the insert. // - // Only modules with relaxed logical addressing (see opt/instruction.h) are - // currently processed. - // - // This pass is most effective if preceeded by Inlining and - // LocalAccessChainConvert. This pass will reduce the work needed to be done - // by LocalSingleStoreElim and LocalMultiStoreElim. - // - // Only functions in the call tree of an entry point are processed. - LocalSingleBlockLoadStoreElim, - // Create dead branch elimination pass. - // For each entry point function, this pass will look for SelectionMerge - // BranchConditionals with constant condition and convert to a Branch to - // the indicated label. It will delete resulting dead blocks. - // - // For all phi functions in merge block, replace all uses with the id - // corresponding to the living predecessor. + // Besides removing extracts this pass enables subsequent dead code elimination + // passes to delete the inserts. This pass performs best after access chains are + // converted to inserts and extracts and local loads and stores are eliminated. + InsertExtractElim, + // Replaces the internal version of GLSLstd450 InterpolateAt* extended + // instructions with the externally valid version. The internal version allows + // an OpLoad of the interpolant for the first argument. This pass removes the + // OpLoad and replaces it with its pointer. glslang and possibly other + // frontends will create the internal version for HLSL. This pass will be part + // of HLSL legalization and should be called after interpolants have been + // propagated into their final positions. + InterpolateFixup, + // Creates a local access chain conversion pass. + // A local access chain conversion pass identifies all function scope + // variables which are accessed only with loads, stores and access chains + // with constant indices. It then converts all loads and stores of such + // variables into equivalent sequences of loads, stores, extracts and inserts. // - // Note that some branches and blocks may be left to avoid creating invalid - // control flow. Improving this is left to future work. + // This pass only processes entry point functions. It currently only converts + // non-nested, non-ptr access chains. It does not process modules with + // non-32-bit integer types present. Optional memory access options on loads + // and stores are ignored as we are only processing function scope variables. // - // This pass is most effective when preceeded by passes which eliminate - // local loads and stores, effectively propagating constant values where + // This pass unifies access to these variables to a single mode and simplifies + // subsequent analysis and elimination of these variables along with their + // loads and stores allowing values to propagate to their points of use where // possible. - DeadBranchElim, + LocalAccessChainConvert, // Creates an SSA local variable load/store elimination pass. // For every entry point function, eliminate all loads and stores of function // scope variables only referenced with non-access-chain loads and stores. @@ -187,22 +297,32 @@ pub enum Passes { // LocalAccessChainConvert. LocalSingleStoreElim and LocalSingleBlockElim // will reduce the work that this pass has to do. LocalMultiStoreElim, - // Creates a local access chain conversion pass. - // A local access chain conversion pass identifies all function scope - // variables which are accessed only with loads, stores and access chains - // with constant indices. It then converts all loads and stores of such - // variables into equivalent sequences of loads, stores, extracts and inserts. + // Create value numbering pass. + // This pass will look for instructions in the same basic block that compute the + // same value, and remove the redundant ones. + LocalRedundancyElimination, + // Creates a single-block local variable load/store elimination pass. + // For every entry point function, do single block memory optimization of + // function variables referenced only with non-access-chain loads and stores. + // For each targeted variable load, if previous store to that variable in the + // block, replace the load's result id with the value id of the store. + // If previous load within the block, replace the current load's result id + // with the previous load's result id. In either case, delete the current + // load. Finally, check if any remaining stores are useless, and delete store + // and variable if possible. // - // This pass only processes entry point functions. It currently only converts - // non-nested, non-ptr access chains. It does not process modules with - // non-32-bit integer types present. Optional memory access options on loads - // and stores are ignored as we are only processing function scope variables. + // The presence of access chain references and function calls can inhibit + // the above optimization. // - // This pass unifies access to these variables to a single mode and simplifies - // subsequent analysis and elimination of these variables along with their - // loads and stores allowing values to propagate to their points of use where - // possible. - LocalAccessChainConvert, + // Only modules with relaxed logical addressing (see opt/instruction.h) are + // currently processed. + // + // This pass is most effective if preceeded by Inlining and + // LocalAccessChainConvert. This pass will reduce the work needed to be done + // by LocalSingleStoreElim and LocalMultiStoreElim. + // + // Only functions in the call tree of an entry point are processed. + LocalSingleBlockLoadStoreElim, // Creates a local single store elimination pass. // For each entry point function, this pass eliminates loads and stores for // function scope variable that are stored to only once, where possible. Only @@ -223,52 +343,44 @@ pub enum Passes { // and LocalMultiStoreElim and can improve the effectiveness of other passes // such as DeadBranchElimination which depend on values for their analysis. LocalSingleStoreElim, - // Creates an insert/extract elimination pass. - // This pass processes each entry point function in the module, searching for - // extracts on a sequence of inserts. It further searches the sequence for an - // insert with indices identical to the extract. If such an insert can be - // found before hitting a conflicting insert, the extract's result id is - // replaced with the id of the values from the insert. - // - // Besides removing extracts this pass enables subsequent dead code elimination - // passes to delete the inserts. This pass performs best after access chains are - // converted to inserts and extracts and local loads and stores are eliminated. - InsertExtractElim, - // Creates a dead insert elimination pass. - // This pass processes each entry point function in the module, searching for - // unreferenced inserts into composite types. These are most often unused - // stores to vector components. They are unused because they are never - // referenced, or because there is another insert to the same component between - // the insert and the reference. After removing the inserts, dead code - // elimination is attempted on the inserted values. - // - // This pass performs best after access chains are converted to inserts and - // extracts and local loads and stores are eliminated. While executing this - // pass can be advantageous on its own, it is also advantageous to execute - // this pass after CreateInsertExtractPass() as it will remove any unused - // inserts created by that pass. - DeadInsertElim, - // Create aggressive dead code elimination pass - // This pass eliminates unused code from the module. In addition, - // it detects and eliminates code which may have spurious uses but which do - // not contribute to the output of the function. The most common cause of - // such code sequences is summations in loops whose result is no longer used - // due to dead code elimination. This optimization has additional compile - // time cost over standard dead code elimination. + // Create LICM pass. + // This pass will look for invariant instructions inside loops and hoist them to + // the loops preheader. + LoopInvariantCodeMotion, + // Creates a loop peeling pass. + // This pass will look for conditions inside a loop that are true or false only + // for the N first or last iteration. For loop with such condition, those N + // iterations of the loop will be executed outside of the main loop. + // To limit code size explosion, the loop peeling can only happen if the code + // size growth for each loop is under |code_growth_threshold|. + LoopPeeling, + // Creates a loop unswitch pass. + // This pass will look for loop independent branch conditions and move the + // condition out of the loop and version the loop based on the taken branch. + // Works best after LICM and local multi store elimination pass. + LoopUnswitch, + // create merge return pass. + // changes functions that have multiple return statements so they have a single + // return statement. // - // This pass only processes entry point functions. It also only processes - // shaders with relaxed logical addressing (see opt/instruction.h). It - // currently will not process functions with function calls. Unreachable - // functions are deleted. + // for structured control flow it is assumed that the only unreachable blocks in + // the function are trivial merge and continue blocks. // - // This pass will be made more effective by first running passes that remove - // dead control flow and inlines function calls. + // a trivial merge block contains the label and an opunreachable instructions, + // nothing else. a trivial continue block contain a label and an opbranch to + // the header, nothing else. // - // This pass can be especially useful after running Local Access Chain - // Conversion, which tends to cause cycles of dead code to be left after - // Store/Load elimination passes are completed. These cycles cannot be - // eliminated with standard dead code elimination. - AggressiveDCE, + // these conditions are guaranteed to be met after running dead-branch + // elimination. + MergeReturn, + // Creates a null pass. + // A null pass does nothing to the SPIR-V module to be optimized. + Null, + // Create a private to local pass. + // This pass looks for variables delcared in the private storage class that are + // used in only one function. Those variables are moved to the function storage + // class in the function that they are used. + PrivateToLocal, // Create line propagation pass // This pass propagates line information based on the rules for OpLine and // OpNoline and clones an appropriate line instruction into every instruction @@ -280,6 +392,15 @@ pub enum Passes { // which can be used to remove redundant line instructions at the end of a // run of such passes and reduce final output file size. PropagateLineInfo, + // Create a pass to reduce the size of loads. + // This pass looks for loads of structures where only a few of its members are + // used. It replaces the loads feeding an OpExtract with an OpAccessChain and + // a load of the specific elements. + ReduceLoadSize, + // Create global value numbering pass. + // This pass will look for instructions where the same value is computed on all + // paths leading to the instruction. Those instructions are deleted. + RedundancyElimination, // Create dead line elimination pass // This pass eliminates redundant line instructions based on the rules for // OpLine and OpNoline. Its main purpose is to reduce the size of the file @@ -291,9 +412,10 @@ pub enum Passes { // PropagateLines and all such subsequent passes. Normally it would be one // of the last passes to be run. RedundantLineInfoElim, - // Creates a compact ids pass. - // The pass remaps result ids to a compact and gapless range starting from %1. - CompactIds, + // Create relax float ops pass. + // This pass decorates all float32 result instructions with RelaxedPrecision + // if not already so decorated. + RelaxFloatOps, // Creates a remove duplicate pass. // This pass removes various duplicates: // * duplicate capabilities; @@ -301,78 +423,12 @@ pub enum Passes { // * duplicate types; // * duplicate decorations. RemoveDuplicates, - // Creates a CFG cleanup pass. - // This pass removes cruft from the control flow graph of functions that are - // reachable from entry points and exported functions. It currently includes the - // following functionality: - // - // - Removal of unreachable basic blocks. - CFGCleanup, - // Create dead variable elimination pass. - // This pass will delete module scope variables, along with their decorations, - // that are not referenced. - DeadVariableElimination, - // create merge return pass. - // changes functions that have multiple return statements so they have a single - // return statement. - // - // for structured control flow it is assumed that the only unreachable blocks in - // the function are trivial merge and continue blocks. - // - // a trivial merge block contains the label and an opunreachable instructions, - // nothing else. a trivial continue block contain a label and an opbranch to - // the header, nothing else. - // - // these conditions are guaranteed to be met after running dead-branch - // elimination. - MergeReturn, - // Create value numbering pass. - // This pass will look for instructions in the same basic block that compute the - // same value, and remove the redundant ones. - LocalRedundancyElimination, - // Create LICM pass. - // This pass will look for invariant instructions inside loops and hoist them to - // the loops preheader. - LoopInvariantCodeMotion, - // Creates a loop peeling pass. - // This pass will look for conditions inside a loop that are true or false only - // for the N first or last iteration. For loop with such condition, those N - // iterations of the loop will be executed outside of the main loop. - // To limit code size explosion, the loop peeling can only happen if the code - // size growth for each loop is under |code_growth_threshold|. - LoopPeeling, - // Creates a loop unswitch pass. - // This pass will look for loop independent branch conditions and move the - // condition out of the loop and version the loop based on the taken branch. - // Works best after LICM and local multi store elimination pass. - LoopUnswitch, - // Create global value numbering pass. - // This pass will look for instructions where the same value is computed on all - // paths leading to the instruction. Those instructions are deleted. - RedundancyElimination, - // Create a private to local pass. - // This pass looks for variables delcared in the private storage class that are - // used in only one function. Those variables are moved to the function storage - // class in the function that they are used. - PrivateToLocal, - // Creates a conditional constant propagation (CCP) pass. - // This pass implements the SSA-CCP algorithm in - // - // Constant propagation with conditional branches, - // Wegman and Zadeck, ACM TOPLAS 13(2):181-210. - // - // Constant values in expressions and conditional jumps are folded and - // simplified. This may reduce code size by removing never executed jump targets - // and computations with constant operands. - ConditionalConstantPropagation, - // Creates a workaround driver bugs pass. This pass attempts to work around - // a known driver bug (issue #1209) by identifying the bad code sequences and - // rewriting them. - // - // Current workaround: Avoid OpUnreachable instructions in loops. - Workaround1209, - // Creates a pass that converts if-then-else like assignments into OpSelect. - IfConversion, + // Creates a remove-unused-interface-variables pass. + // Removes variables referenced on the |OpEntryPoint| instruction that are not + // referenced in the entry point function or any function in its call tree. + // Note that this could cause the shader interface to no longer match other + // shader stages. + RemoveUnusedInterfaceVariables, // Creates a pass that will replace instructions that are not valid for the // current shader stage by constants. Has no effect on non-shader modules. ReplaceInvalidOpcode, @@ -384,99 +440,57 @@ pub enum Passes { // Only variables that are local to the function and of supported types are // processed (see IsSSATargetVar for details). SSARewrite, - // Create pass to convert relaxed precision instructions to half precision. - // This pass converts as many relaxed float32 arithmetic operations to half as - // possible. It converts any float32 operands to half if needed. It converts - // any resulting half precision values back to float32 as needed. No variables - // are changed. No image operations are changed. - // - // Best if run after function scope store/load and composite operation - // eliminations are run. Also best if followed by instruction simplification, - // redundancy elimination and DCE. - ConvertRelaxedToHalf, - // Create relax float ops pass. - // This pass decorates all float32 result instructions with RelaxedPrecision - // if not already so decorated. - RelaxFloatOps, - // Create copy propagate arrays pass. - // This pass looks to copy propagate memory references for arrays. It looks - // for specific code patterns to recognize array copies. - CopyPropagateArrays, - // Create a vector dce pass. - // This pass looks for components of vectors that are unused, and removes them - // from the vector. Note this would still leave around lots of dead code that - // a pass of ADCE will be able to remove. - VectorDCE, - // Create a pass to reduce the size of loads. - // This pass looks for loads of structures where only a few of its members are - // used. It replaces the loads feeding an OpExtract with an OpAccessChain and - // a load of the specific elements. - ReduceLoadSize, - // Create a pass to combine chained access chains. - // This pass looks for access chains fed by other access chains and combines - // them into a single instruction where possible. - CombineAccessChains, + // Creates a strength-reduction pass. + // A strength-reduction pass will look for opportunities to replace an + // instruction with an equivalent and less expensive one. For example, + // multiplying by a power of 2 can be replaced by a bit shift. + StrengthReduction, + // Creates a strip-debug-info pass. + // A strip-debug-info pass removes all debug instructions (as documented in + // Section 3.32.2 of the SPIR-V spec) of the SPIR-V module to be optimized. + StripDebugInfo, + // Creates a strip-reflect-info pass. + // A strip-reflect-info pass removes all reflections instructions. + // For now, this is limited to removing decorations defined in + // SPV_GOOGLE_hlsl_functionality1. The coverage may expand in + // the future. + StripReflectInfo, + // Creates a unify-constant pass. + // A unify-constant pass de-duplicates the constants. Constants with the exact + // same value and identical form will be unified and only one constant will + // be kept for each unique pair of type and value. + // There are several cases not handled by this pass: + // 1) Constants defined by OpConstantNull instructions (null constants) and + // constants defined by OpConstantFalse, OpConstant or OpConstantComposite + // with value 0 (zero-valued normal constants) are not considered equivalent. + // So null constants won't be used to replace zero-valued normal constants, + // vice versa. + // 2) Whenever there are decorations to the constant's result id id, the + // constant won't be handled, which means, it won't be used to replace any + // other constants, neither can other constants replace it. + // 3) NaN in float point format with different bit patterns are not unified. + UnifyConstant, // Create a pass to upgrade to the VulkanKHR memory model. // This pass upgrades the Logical GLSL450 memory model to Logical VulkanKHR. // Additionally, it modifies memory, image, atomic and barrier operations to // conform to that model's requirements. UpgradeMemoryModel, - // Create a pass to do code sinking. Code sinking is a transformation - // where an instruction is moved into a more deeply nested construct. - CodeSinking, - // Create a pass to fix incorrect storage classes. In order to make code - // generation simpler, DXC may generate code where the storage classes do not - // match up correctly. This pass will fix the errors that it can. - FixStorageClass, - // Creates a graphics robust access pass. - // - // This pass injects code to clamp indexed accesses to buffers and internal - // arrays, providing guarantees satisfying Vulkan's robustBufferAccess rules. - // - // TODO(dneto): Clamps coordinates and sample index for pointer calculations - // into storage images (OpImageTexelPointer). For an cube array image, it - // assumes the maximum layer count times 6 is at most 0xffffffff. - // - // NOTE: This pass will fail with a message if: - // - The module is not a Shader module. - // - The module declares VariablePointers, VariablePointersStorageBuffer, or - // RuntimeDescriptorArrayEXT capabilities. - // - The module uses an addressing model other than Logical - // - Access chain indices are wider than 64 bits. - // - Access chain index for a struct is not an OpConstant integer or is out - // of range. (The module is already invalid if that is the case.) - // - TODO(dneto): The OpImageTexelPointer coordinate component is not 32-bits - // wide. + // Create a vector dce pass. + // This pass looks for components of vectors that are unused, and removes them + // from the vector. Note this would still leave around lots of dead code that + // a pass of ADCE will be able to remove. + VectorDCE, + // Creates a workaround driver bugs pass. This pass attempts to work around + // a known driver bug (issue #1209) by identifying the bad code sequences and + // rewriting them. // - // NOTE: Access chain indices are always treated as signed integers. So - // if an array has a fixed size of more than 2^31 elements, then elements - // from 2^31 and above are never accessible with a 32-bit index, - // signed or unsigned. For this case, this pass will clamp the index - // between 0 and at 2^31-1, inclusive. - // Similarly, if an array has more then 2^15 element and is accessed with - // a 16-bit index, then elements from 2^15 and above are not accessible. - // In this case, the pass will clamp the index between 0 and 2^15-1 - // inclusive. - GraphicsRobustAccess, - // Create descriptor scalar replacement pass. - // This pass replaces every array variable |desc| that has a DescriptorSet and - // Binding decorations with a new variable for each element of the array. - // Suppose |desc| was bound at binding |b|. Then the variable corresponding to - // |desc[i]| will have binding |b+i|. The descriptor set will be the same. It - // is assumed that no other variable already has a binding that will used by one - // of the new variables. If not, the pass will generate invalid Spir-V. All - // accesses to |desc| must be OpAccessChain instructions with a literal index - // for the first index. - DescriptorScalarReplacement, + // Current workaround: Avoid OpUnreachable instructions in loops. + Workaround1209, // Create a pass to replace each OpKill instruction with a function call to a // function that has a single OpKill. Also replace each OpTerminateInvocation // instruction with a function call to a function that has a single // OpTerminateInvocation. This allows more code to be inlined. WrapOpKill, - // Replaces the extensions VK_AMD_shader_ballot,VK_AMD_gcn_shader, and - // VK_AMD_shader_trinary_minmax with equivalent code using core instructions and - // capabilities. - AmdExtToKhr, } extern "C" { diff --git a/src/assembler/compiled.rs b/src/assembler/compiled.rs index c0552e4..601d88d 100644 --- a/src/assembler/compiled.rs +++ b/src/assembler/compiled.rs @@ -24,7 +24,7 @@ impl Assembler for CompiledAssembler { let res = assembler::assemble( self.inner, - text.as_ptr() as *const _, + text.as_ptr().cast(), text.len(), options.into(), &mut binary, @@ -68,7 +68,7 @@ impl Assembler for CompiledAssembler { let res = assembler::disassemble( self.inner, - binary.as_ptr() as *const _, + binary.as_ptr().cast(), binary.len(), options.into(), &mut text, @@ -87,7 +87,7 @@ impl Assembler for CompiledAssembler { // Sanity check the text first let disassemble_res = std::str::from_utf8(std::slice::from_raw_parts( - (*text).data as *const u8, + (*text).data.cast::(), (*text).length, )) .map(|disasm| Some(disasm.to_owned())) diff --git a/src/binary.rs b/src/binary.rs index 35ea1a0..bb22a4d 100644 --- a/src/binary.rs +++ b/src/binary.rs @@ -7,22 +7,25 @@ pub mod external { } impl ExternalBinary { + #[inline] pub(crate) fn new(bin: *mut shared::Binary) -> Self { Self { inner: bin } } } impl AsRef<[u32]> for ExternalBinary { + #[inline] fn as_ref(&self) -> &[u32] { unsafe { std::slice::from_raw_parts((*self.inner).code, (*self.inner).size) } } } impl AsRef<[u8]> for ExternalBinary { + #[inline] fn as_ref(&self) -> &[u8] { unsafe { std::slice::from_raw_parts( - (*self.inner).code as *const u8, + (*self.inner).code.cast(), (*self.inner).size * std::mem::size_of::(), ) } @@ -30,6 +33,7 @@ pub mod external { } impl Drop for ExternalBinary { + #[inline] fn drop(&mut self) { unsafe { shared::binary_destroy(self.inner); @@ -47,11 +51,13 @@ pub enum Binary { impl Binary { /// Gets a byte array for binary + #[inline] pub fn as_bytes(&self) -> &[u8] { self.as_ref() } /// Gets the words for the binary + #[inline] pub fn as_words(&self) -> &[u32] { self.as_ref() } @@ -60,6 +66,7 @@ impl Binary { impl std::convert::TryFrom> for Binary { type Error = crate::Error; + #[inline] fn try_from(v: Vec) -> Result { if v.len() % std::mem::size_of::() != 0 { Err(crate::Error { @@ -73,6 +80,7 @@ impl std::convert::TryFrom> for Binary { } impl AsRef<[u32]> for Binary { + #[inline] fn as_ref(&self) -> &[u32] { match self { #[cfg(feature = "use-compiled-tools")] @@ -87,6 +95,7 @@ impl AsRef<[u32]> for Binary { } impl AsRef<[u8]> for Binary { + #[inline] fn as_ref(&self) -> &[u8] { match self { #[cfg(feature = "use-compiled-tools")] @@ -114,17 +123,16 @@ impl fmt::Debug for Binary { /// Transmutes a SPIRV binary, which are stored as 32 bit words, into a more /// digestible byte array +#[inline] pub fn from_binary(bin: &[u32]) -> &[u8] { unsafe { - std::slice::from_raw_parts( - bin.as_ptr() as *const u8, - bin.len() * std::mem::size_of::(), - ) + std::slice::from_raw_parts(bin.as_ptr().cast(), bin.len() * std::mem::size_of::()) } } /// Transmutes a regular byte array into a SPIRV binary of 32 bit words. This /// will fail if the input is not `% sizeof(u32)` +#[inline] pub fn to_binary(bytes: &[u8]) -> Result<&[u32], crate::Error> { if bytes.len() % std::mem::size_of::() != 0 { return Err(crate::Error { @@ -136,7 +144,7 @@ pub fn to_binary(bytes: &[u8]) -> Result<&[u32], crate::Error> { #[allow(clippy::size_of_in_element_count)] Ok(unsafe { std::slice::from_raw_parts( - bytes.as_ptr() as *const u32, + bytes.as_ptr().cast(), bytes.len() / std::mem::size_of::(), ) }) diff --git a/src/error.rs b/src/error.rs index 14ee28f..23a99e7 100644 --- a/src/error.rs +++ b/src/error.rs @@ -200,6 +200,6 @@ where F: FnMut(Message), { fn on_message(&mut self, msg: Message) { - self(msg) + self(msg); } } diff --git a/src/lib.rs b/src/lib.rs index 753d67c..941fff8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,26 +1,36 @@ -// BEGIN - Embark standard lints v0.3 +// BEGIN - Embark standard lints v0.4 // do not change or add/remove here, but one can add exceptions after this section // for more info see: +#![deny(unsafe_code)] #![warn( clippy::all, clippy::await_holding_lock, + clippy::char_lit_as_u8, + clippy::checked_conversions, clippy::dbg_macro, clippy::debug_assert_with_mut_call, clippy::doc_markdown, clippy::empty_enum, clippy::enum_glob_use, clippy::exit, + clippy::expl_impl_clone_on_copy, + clippy::explicit_deref_methods, clippy::explicit_into_iter_loop, + clippy::fallible_impl_from, clippy::filter_map_next, + clippy::float_cmp_const, clippy::fn_params_excessive_bools, clippy::if_let_mutex, + clippy::implicit_clone, clippy::imprecise_flops, clippy::inefficient_to_string, + clippy::invalid_upcast_comparisons, clippy::large_types_passed_by_value, clippy::let_unit_value, clippy::linkedlist, clippy::lossy_float_literal, clippy::macro_use_imports, + clippy::manual_ok_or, clippy::map_err_ignore, clippy::map_flatten, clippy::map_unwrap_or, @@ -29,26 +39,35 @@ clippy::match_wildcard_for_single_variants, clippy::mem_forget, clippy::mismatched_target_os, + clippy::mut_mut, + clippy::mutex_integer, clippy::needless_borrow, clippy::needless_continue, clippy::option_option, - clippy::pub_enum_variant_names, + clippy::path_buf_push_overwrite, + clippy::ptr_as_ptr, clippy::ref_option_ref, clippy::rest_pat_in_fully_bound_structs, + clippy::same_functions_in_if_condition, + clippy::semicolon_if_nothing_returned, clippy::string_add_assign, clippy::string_add, + clippy::string_lit_as_bytes, clippy::string_to_string, - clippy::suboptimal_flops, clippy::todo, + clippy::trait_duplication_in_bounds, clippy::unimplemented, clippy::unnested_or_patterns, clippy::unused_self, + clippy::useless_transmute, clippy::verbose_file_reads, + clippy::zero_sized_map_values, future_incompatible, nonstandard_style, rust_2018_idioms )] -// END - Embark standard lints v0.3 +// END - Embark standard lints v0.4 +#![allow(unsafe_code)] #[cfg(not(any(feature = "use-installed-tools", feature = "use-compiled-tools")))] compile_error!("Enable at least one of `use-compiled-tools` or `use-installed-tools` features"); diff --git a/src/opt/compiled.rs b/src/opt/compiled.rs index f59f61d..afbbe5b 100644 --- a/src/opt/compiled.rs +++ b/src/opt/compiled.rs @@ -70,7 +70,7 @@ impl Optimizer for CompiledOptimizer { let mut ctx = Ctx { cb: msg_callback }; - let cb_ctx: *mut std::ffi::c_void = std::mem::transmute(&mut ctx); + let cb_ctx: *mut std::ffi::c_void = (&mut ctx as *mut Ctx<'_>).cast(); extern "C" fn callback( level: spirv_tools_sys::diagnostics::MessageLevel, @@ -80,7 +80,7 @@ impl Optimizer for CompiledOptimizer { ctx: *mut std::ffi::c_void, ) { unsafe { - let ctx: &mut Ctx<'_> = &mut *(ctx as *mut Ctx<'_>); + let ctx: &mut Ctx<'_> = &mut *(ctx.cast::>()); let msg = error::Message::from_parts(level, source, source_pos, msg); diff --git a/src/opt/tool.rs b/src/opt/tool.rs index 608eacd..913ed43 100644 --- a/src/opt/tool.rs +++ b/src/opt/tool.rs @@ -127,59 +127,61 @@ fn pass_to_string(pass: super::Passes) -> Option<&'static str> { use super::Passes::*; Some(match pass { - Null => return None, - StripDebugInfo => "strip-debug", - StripReflectInfo => "strip-reflect", + AggressiveDCE => "eliminate-dead-code-aggressive", + AmdExtToKhr => "amd-ext-to-khr", + BlockMerge => "merge-blocks", + CFGCleanup => "cfg-cleanup", + CodeSinking => "code-sink", + CombineAccessChains => "combine-access-chains", + CompactIds => "compact-ids", + ConditionalConstantPropagation => "ccp", + ConvertRelaxedToHalf => "convert-relaxed-to-half", + CopyPropagateArrays => "copy-propagate-arrays", + DeadBranchElim => "eliminate-dead-branches", + DeadInsertElim => "eliminate-dead-inserts", + DeadVariableElimination => "eliminate-dead-variables", + DescriptorScalarReplacement => "descriptor-scalar-replacement", + EliminateDeadConstant => "eliminate-dead-const", EliminateDeadFunctions => "eliminate-dead-functions", EliminateDeadMembers => "eliminate-dead-members", + FixStorageClass => "fix-storage-class", FlattenDecoration => "flatten-decorations", - FreezeSpecConstantValue => "freeze-spec-const", FoldSpecConstantOpAndComposite => "fold-spec-const-op-composite", - UnifyConstant => "unify-const", - EliminateDeadConstant => "eliminate-dead-const", - StrengthReduction => "strength-reduction", - BlockMerge => "merge-blocks", + FreezeSpecConstantValue => "freeze-spec-const", + GraphicsRobustAccess => "graphics-robust-access", + IfConversion => "if-conversion", InlineExhaustive => "inline-entry-points-exhaustive", InlineOpaque => "inline-entry-points-opaque", - LocalSingleBlockLoadStoreElim => "eliminate-local-single-block", - DeadBranchElim => "eliminate-dead-branches", - LocalMultiStoreElim => "eliminate-local-multi-store", - LocalAccessChainConvert => "convert-local-access-chains", - LocalSingleStoreElim => "eliminate-local-single-store", InsertExtractElim => "eliminate-insert-extract", - DeadInsertElim => "eliminate-dead-inserts", - AggressiveDCE => "eliminate-dead-code-aggressive", - PropagateLineInfo => "propagate-line-info", - RedundantLineInfoElim => "eliminate-redundant-line-info", - CompactIds => "compact-ids", - RemoveDuplicates => "remove-duplicates", - CFGCleanup => "cfg-cleanup", - DeadVariableElimination => "eliminate-dead-variables", - MergeReturn => "merge-return", + // This is only part of the --legalize-hlsl meta pass + InterpolateFixup | Null => return None, + LocalAccessChainConvert => "convert-local-access-chains", + LocalMultiStoreElim => "eliminate-local-multi-store", LocalRedundancyElimination => "local-redundancy-elimination", + LocalSingleBlockLoadStoreElim => "eliminate-local-single-block", + LocalSingleStoreElim => "eliminate-local-single-store", LoopInvariantCodeMotion => "loop-invariant-code-motion", LoopPeeling => "loop-peeling", LoopUnswitch => "loop-unswitch", - RedundancyElimination => "redundancy-elimination", + MergeReturn => "merge-return", PrivateToLocal => "private-to-local", - ConditionalConstantPropagation => "ccp", - Workaround1209 => "workaround-1209", - IfConversion => "if-conversion", + PropagateLineInfo => "propagate-line-info", + ReduceLoadSize => "reduce-load-size", + RedundancyElimination => "redundancy-elimination", + RedundantLineInfoElim => "eliminate-redundant-line-info", + RemoveUnusedInterfaceVariables => "remove-unused-interface-variables", + RelaxFloatOps => "relax-float-ops", + RemoveDuplicates => "remove-duplicates", ReplaceInvalidOpcode => "replace-invalid-opcode", Simplification => "simplify-instructions", SSARewrite => "ssa-rewrite", - ConvertRelaxedToHalf => "convert-relaxed-to-half", - RelaxFloatOps => "relax-float-ops", - CopyPropagateArrays => "copy-propagate-arrays", - VectorDCE => "vector-dce", - ReduceLoadSize => "reduce-load-size", - CombineAccessChains => "combine-access-chains", + StrengthReduction => "strength-reduction", + StripDebugInfo => "strip-debug", + StripReflectInfo => "strip-reflect", + UnifyConstant => "unify-const", UpgradeMemoryModel => "upgrade-memory-model", - CodeSinking => "code-sink", - FixStorageClass => "fix-storage-class", - GraphicsRobustAccess => "graphics-robust-access", - DescriptorScalarReplacement => "descriptor-scalar-replacement", + VectorDCE => "vector-dce", + Workaround1209 => "workaround-1209", WrapOpKill => "wrap-opkill", - AmdExtToKhr => "amd-ext-to-khr", }) }