From ba1f984c0447864844bb1c18941cd3ec523fbc47 Mon Sep 17 00:00:00 2001 From: Marijn Suijten Date: Sat, 8 Apr 2023 22:13:45 +0200 Subject: [PATCH] Regenerate on `sdk-1.3.243.0` (#239) * Regenerate on sdk-1.3.204.1 * Bump SPIR-V version in tests to `1.6` Our assembler uses the latest global version from the grammar (rather than encoding the highest `"version"` attribute of the instructions emitted). * Regenerate on sdk-1.3.211.0 * Regenerate on sdk-1.3.216.0 / sdk-1.3.224.1 * Tag sdk-1.3.216 points to the same commit as sdk-1.3.224.1 * Regenerate on sdk-1.3.231.1 * Regenerate on sdk-1.3.243.0 * Treat reserved `OpEmitMeshTasksEXT` as terminator * autogen: Reuse `dr` `is_terminator_instruction()` classification in `sr` --- autogen/external/SPIRV-Headers | 2 +- autogen/src/dr.rs | 4 +- autogen/src/sr.rs | 3 +- rspirv/Cargo.toml | 2 +- rspirv/README.md | 2 +- rspirv/binary/autogen_disas_operand.rs | 18 + rspirv/binary/autogen_parse_operand.rs | 63 +- rspirv/binary/disassemble.rs | 8 +- rspirv/dr/autogen_operand.rs | 474 +- rspirv/dr/build/autogen_norm_insts.rs | 5470 ++++++++++++++++++------ rspirv/dr/build/autogen_terminator.rs | 83 + rspirv/dr/build/autogen_type.rs | 19 + rspirv/dr/build/mod.rs | 4 +- rspirv/grammar/autogen_table.rs | 593 ++- rspirv/grammar/reflect.rs | 1 + rspirv/lib.rs | 2 +- rspirv/lift/autogen_context.rs | 1403 +++++- rspirv/sr/autogen_decoration.rs | 23 + rspirv/sr/autogen_ops.rs | 303 +- rspirv/sr/autogen_types.rs | 1 + spirv/Cargo.toml | 2 +- spirv/README.md | 2 +- spirv/autogen_spirv.rs | 358 +- 23 files changed, 7166 insertions(+), 1674 deletions(-) diff --git a/autogen/external/SPIRV-Headers b/autogen/external/SPIRV-Headers index 814e728b..1feaf441 160000 --- a/autogen/external/SPIRV-Headers +++ b/autogen/external/SPIRV-Headers @@ -1 +1 @@ -Subproject commit 814e728b30ddd0f4509233099a3ad96fd4318c07 +Subproject commit 1feaf4414eb2b353764d01d88f8aa4bcc67b60db diff --git a/autogen/src/dr.rs b/autogen/src/dr.rs index e8d5706c..620ca540 100644 --- a/autogen/src/dr.rs +++ b/autogen/src/dr.rs @@ -701,11 +701,11 @@ pub fn gen_dr_builder_types(grammar: &structs::Grammar) -> TokenStream { } } -fn is_terminator_instruction(inst: &structs::Instruction) -> bool { +pub fn is_terminator_instruction(inst: &structs::Instruction) -> bool { match inst.class { Some(structs::Class::Reserved) => matches!( inst.opname.as_str(), - "OpTerminateRayKHR" | "OpIgnoreIntersectionKHR" + "OpTerminateRayKHR" | "OpIgnoreIntersectionKHR" | "OpEmitMeshTasksEXT" ), Some(structs::Class::Branch) => !matches!( inst.opname.as_str(), diff --git a/autogen/src/sr.rs b/autogen/src/sr.rs index 7e94db21..2681baf5 100644 --- a/autogen/src/sr.rs +++ b/autogen/src/sr.rs @@ -447,7 +447,7 @@ pub fn gen_sr_code_from_instruction_grammar( }); } } - Some(Reserved) if matches!(inst_name, "TerminateRayKHR" | "IgnoreIntersectionKHR") => { + Some(Reserved) if super::dr::is_terminator_instruction(inst) => { if field_names.is_empty() { terminator_variants.push(quote! { #name_ident }); terminator_lifts.push(quote! { @@ -536,6 +536,7 @@ pub fn gen_sr_code_from_instruction_grammar( pub fn lift_terminator( &mut self, raw: &dr::Instruction ) -> Result { + let mut #iter_ident = raw.operands.iter(); match raw.class.opcode as u32 { #( #terminator_lifts )* _ => self.lift_branch(raw) diff --git a/rspirv/Cargo.toml b/rspirv/Cargo.toml index 52e2dd10..30b3fc6e 100644 --- a/rspirv/Cargo.toml +++ b/rspirv/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rspirv" -version = "0.11.0+sdk-1.2.198" +version = "0.11.0+sdk-1.3.243.0" authors = ["Lei Zhang "] edition = "2018" diff --git a/rspirv/README.md b/rspirv/README.md index e4ca471d..dff218ad 100644 --- a/rspirv/README.md +++ b/rspirv/README.md @@ -34,7 +34,7 @@ First add to your `Cargo.toml`: ```toml [dependencies] -rspirv = "0.11.0+sdk-1.2.198" +rspirv = "0.11.0" ``` Examples diff --git a/rspirv/binary/autogen_disas_operand.rs b/rspirv/binary/autogen_disas_operand.rs index 44916b85..da801864 100644 --- a/rspirv/binary/autogen_disas_operand.rs +++ b/rspirv/binary/autogen_disas_operand.rs @@ -62,6 +62,9 @@ impl Disassemble for spirv::ImageOperands { if self.contains(spirv::ImageOperands::ZERO_EXTEND) { bits.push("ZeroExtend") } + if self.contains(spirv::ImageOperands::NONTEMPORAL) { + bits.push("Nontemporal") + } if self.contains(spirv::ImageOperands::OFFSETS) { bits.push("Offsets") } @@ -170,6 +173,12 @@ impl Disassemble for spirv::LoopControl { if self.contains(spirv::LoopControl::NO_FUSION_INTEL) { bits.push("NoFusionINTEL") } + if self.contains(spirv::LoopControl::LOOP_COUNT_INTEL) { + bits.push("LoopCountINTEL") + } + if self.contains(spirv::LoopControl::MAX_REINVOCATION_DELAY_INTEL) { + bits.push("MaxReinvocationDelayINTEL") + } bits.join("|") } } @@ -290,6 +299,12 @@ impl Disassemble for spirv::MemoryAccess { if self.contains(spirv::MemoryAccess::NON_PRIVATE_POINTER_KHR) { bits.push("NonPrivatePointerKHR") } + if self.contains(spirv::MemoryAccess::ALIAS_SCOPE_INTEL_MASK) { + bits.push("AliasScopeINTELMask") + } + if self.contains(spirv::MemoryAccess::NO_ALIAS_INTEL_MASK) { + bits.push("NoAliasINTELMask") + } bits.join("|") } } @@ -341,6 +356,9 @@ impl Disassemble for spirv::RayFlags { if self.contains(spirv::RayFlags::SKIP_AAB_BS_KHR) { bits.push("SkipAABBsKHR") } + if self.contains(spirv::RayFlags::FORCE_OPACITY_MICROMAP2_STATE_EXT) { + bits.push("ForceOpacityMicromap2StateEXT") + } bits.join("|") } } diff --git a/rspirv/binary/autogen_parse_operand.rs b/rspirv/binary/autogen_parse_operand.rs index 67b87b5b..474bb8a8 100644 --- a/rspirv/binary/autogen_parse_operand.rs +++ b/rspirv/binary/autogen_parse_operand.rs @@ -236,7 +236,10 @@ impl<'c, 'd> Parser<'c, 'd> { if loop_control.contains(spirv::LoopControl::SPECULATED_ITERATIONS_INTEL) { params.append(&mut vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)]); } - if loop_control.contains(spirv::LoopControl::NO_FUSION_INTEL) { + if loop_control.contains(spirv::LoopControl::LOOP_COUNT_INTEL) { + params.append(&mut vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)]); + } + if loop_control.contains(spirv::LoopControl::MAX_REINVOCATION_DELAY_INTEL) { params.append(&mut vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)]); } Ok(params) @@ -255,6 +258,12 @@ impl<'c, 'd> Parser<'c, 'd> { if memory_access.contains(spirv::MemoryAccess::MAKE_POINTER_VISIBLE) { params.append(&mut vec![dr::Operand::IdScope(self.decoder.id()?)]); } + if memory_access.contains(spirv::MemoryAccess::ALIAS_SCOPE_INTEL_MASK) { + params.append(&mut vec![dr::Operand::IdRef(self.decoder.id()?)]); + } + if memory_access.contains(spirv::MemoryAccess::NO_ALIAS_INTEL_MASK) { + params.append(&mut vec![dr::Operand::IdRef(self.decoder.id()?)]); + } Ok(params) } #[allow(unreachable_patterns)] @@ -348,6 +357,15 @@ impl<'c, 'd> Parser<'c, 'd> { spirv::ExecutionMode::SchedulerTargetFmaxMhzINTEL => { vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] } + spirv::ExecutionMode::StreamingInterfaceINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } + spirv::ExecutionMode::RegisterMapInterfaceINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } + spirv::ExecutionMode::NamedBarrierCountINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } _ => vec![], }) } @@ -460,6 +478,21 @@ impl<'c, 'd> Parser<'c, 'd> { spirv::Decoration::PrefetchINTEL => { vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] } + spirv::Decoration::MathOpDSPModeINTEL => vec![ + dr::Operand::LiteralBit32(self.decoder.bit32()?), + dr::Operand::LiteralBit32(self.decoder.bit32()?), + ], + spirv::Decoration::AliasScopeINTEL => vec![dr::Operand::IdRef(self.decoder.id()?)], + spirv::Decoration::NoAliasINTEL => vec![dr::Operand::IdRef(self.decoder.id()?)], + spirv::Decoration::InitiationIntervalINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } + spirv::Decoration::MaxConcurrencyINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } + spirv::Decoration::PipelineEnableINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } spirv::Decoration::BufferLocationINTEL => { vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] } @@ -470,6 +503,34 @@ impl<'c, 'd> Parser<'c, 'd> { dr::Operand::LiteralBit32(self.decoder.bit32()?), dr::Operand::FPOperationMode(self.decoder.fp_operation_mode()?), ], + spirv::Decoration::LatencyControlLabelINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } + spirv::Decoration::LatencyControlConstraintINTEL => vec![ + dr::Operand::LiteralBit32(self.decoder.bit32()?), + dr::Operand::LiteralBit32(self.decoder.bit32()?), + dr::Operand::LiteralBit32(self.decoder.bit32()?), + ], + spirv::Decoration::MMHostInterfaceAddressWidthINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } + spirv::Decoration::MMHostInterfaceDataWidthINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } + spirv::Decoration::MMHostInterfaceLatencyINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } + spirv::Decoration::MMHostInterfaceReadWriteModeINTEL => { + vec![dr::Operand::AccessQualifier( + self.decoder.access_qualifier()?, + )] + } + spirv::Decoration::MMHostInterfaceMaxBurstINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } + spirv::Decoration::MMHostInterfaceWaitRequestINTEL => { + vec![dr::Operand::LiteralBit32(self.decoder.bit32()?)] + } _ => vec![], }) } diff --git a/rspirv/binary/disassemble.rs b/rspirv/binary/disassemble.rs index 6a3656cd..a687cc5d 100644 --- a/rspirv/binary/disassemble.rs +++ b/rspirv/binary/disassemble.rs @@ -334,7 +334,7 @@ mod tests { assert_eq!( b.module().disassemble(), "; SPIR-V\n\ - ; Version: 1.5\n\ + ; Version: 1.6\n\ ; Generator: rspirv\n\ ; Bound: 8\n\ OpCapability Shader\n\ @@ -403,7 +403,7 @@ mod tests { assert_eq!( b.module().disassemble(), "; SPIR-V\n\ - ; Version: 1.5\n\ + ; Version: 1.6\n\ ; Generator: rspirv\n\ ; Bound: 18\n\ OpCapability Shader\n\ @@ -458,7 +458,7 @@ mod tests { assert_eq!( b.module().disassemble(), "; SPIR-V\n\ - ; Version: 1.5\n\ + ; Version: 1.6\n\ ; Generator: rspirv\n\ ; Bound: 9\n\ OpCapability Shader\n\ @@ -502,7 +502,7 @@ mod tests { assert_eq!( b.module().disassemble(), "; SPIR-V\n\ - ; Version: 1.5\n\ + ; Version: 1.6\n\ ; Generator: rspirv\n\ ; Bound: 9\n\ %1 = OpExtInstImport \"OpenCL.std\"\n\ diff --git a/rspirv/dr/autogen_operand.rs b/rspirv/dr/autogen_operand.rs index a82d6473..0eae3a15 100644 --- a/rspirv/dr/autogen_operand.rs +++ b/rspirv/dr/autogen_operand.rs @@ -714,7 +714,9 @@ impl Operand { | s::LoopControl::LOOP_COALESCE_INTEL | s::LoopControl::MAX_INTERLEAVING_INTEL | s::LoopControl::SPECULATED_ITERATIONS_INTEL - | s::LoopControl::NO_FUSION_INTEL, + | s::LoopControl::NO_FUSION_INTEL + | s::LoopControl::LOOP_COUNT_INTEL + | s::LoopControl::MAX_REINVOCATION_DELAY_INTEL, ) { result.extend_from_slice(&[spirv::Capability::FPGALoopControlsINTEL]) }; @@ -747,6 +749,11 @@ impl Operand { } Self::MemoryAccess(v) => { let mut result = vec![]; + if v.intersects( + s::MemoryAccess::ALIAS_SCOPE_INTEL_MASK | s::MemoryAccess::NO_ALIAS_INTEL_MASK, + ) { + result.extend_from_slice(&[spirv::Capability::MemoryAccessAliasingINTEL]) + }; if v.intersects( s::MemoryAccess::MAKE_POINTER_AVAILABLE | s::MemoryAccess::MAKE_POINTER_VISIBLE @@ -781,6 +788,9 @@ impl Operand { spirv::Capability::RayTracingKHR, ]) }; + if v.intersects(s::RayFlags::FORCE_OPACITY_MICROMAP2_STATE_EXT) { + result.extend_from_slice(&[spirv::Capability::RayTracingOpacityMicromapEXT]) + }; if v.intersects(s::RayFlags::SKIP_TRIANGLES_KHR | s::RayFlags::SKIP_AAB_BS_KHR) { result.extend_from_slice(&[spirv::Capability::RayTraversalPrimitiveCullingKHR]) }; @@ -805,11 +815,15 @@ impl Operand { | s::SourceLanguage::OpenCL_C | s::SourceLanguage::OpenCL_CPP | s::SourceLanguage::HLSL - | s::SourceLanguage::CPP_for_OpenCL => vec![], + | s::SourceLanguage::CPP_for_OpenCL + | s::SourceLanguage::SYCL => vec![], }, Self::ExecutionModel(v) => match v { s::ExecutionModel::Geometry => vec![spirv::Capability::Geometry], s::ExecutionModel::Kernel => vec![spirv::Capability::Kernel], + s::ExecutionModel::TaskEXT | s::ExecutionModel::MeshEXT => { + vec![spirv::Capability::MeshShadingEXT] + } s::ExecutionModel::TaskNV | s::ExecutionModel::MeshNV => { vec![spirv::Capability::MeshShadingNV] } @@ -855,9 +869,13 @@ impl Operand { s::ExecutionMode::DenormFlushToZero => vec![spirv::Capability::DenormFlushToZero], s::ExecutionMode::DenormPreserve => vec![spirv::Capability::DenormPreserve], s::ExecutionMode::NumSIMDWorkitemsINTEL - | s::ExecutionMode::SchedulerTargetFmaxMhzINTEL => { + | s::ExecutionMode::SchedulerTargetFmaxMhzINTEL + | s::ExecutionMode::StreamingInterfaceINTEL => { vec![spirv::Capability::FPGAKernelAttributesINTEL] } + s::ExecutionMode::RegisterMapInterfaceINTEL => { + vec![spirv::Capability::FPGAKernelAttributesv2INTEL] + } s::ExecutionMode::PixelInterlockOrderedEXT | s::ExecutionMode::PixelInterlockUnorderedEXT => { vec![spirv::Capability::FragmentShaderPixelInterlockEXT] @@ -880,6 +898,7 @@ impl Operand { s::ExecutionMode::OutputPoints => vec![ spirv::Capability::Geometry, spirv::Capability::MeshShadingNV, + spirv::Capability::MeshShadingEXT, ], s::ExecutionMode::Triangles => { vec![spirv::Capability::Geometry, spirv::Capability::Tessellation] @@ -888,6 +907,7 @@ impl Operand { spirv::Capability::Geometry, spirv::Capability::Tessellation, spirv::Capability::MeshShadingNV, + spirv::Capability::MeshShadingEXT, ], s::ExecutionMode::LocalSizeHint | s::ExecutionMode::VecTypeHint @@ -902,7 +922,10 @@ impl Operand { } s::ExecutionMode::OutputLinesNV | s::ExecutionMode::OutputPrimitivesNV - | s::ExecutionMode::OutputTrianglesNV => vec![spirv::Capability::MeshShadingNV], + | s::ExecutionMode::OutputTrianglesNV => vec![ + spirv::Capability::MeshShadingNV, + spirv::Capability::MeshShadingEXT, + ], s::ExecutionMode::RoundingModeRTPINTEL | s::ExecutionMode::RoundingModeRTNINTEL | s::ExecutionMode::FloatingPointModeALTINTEL @@ -922,13 +945,18 @@ impl Operand { | s::ExecutionMode::DepthGreater | s::ExecutionMode::DepthLess | s::ExecutionMode::DepthUnchanged - | s::ExecutionMode::SubgroupUniformControlFlowKHR => { - vec![spirv::Capability::Shader] - } + | s::ExecutionMode::SubgroupUniformControlFlowKHR + | s::ExecutionMode::EarlyAndLateFragmentTestsAMD => vec![spirv::Capability::Shader], s::ExecutionMode::SignedZeroInfNanPreserve => { vec![spirv::Capability::SignedZeroInfNanPreserve] } - s::ExecutionMode::StencilRefReplacingEXT => { + s::ExecutionMode::StencilRefReplacingEXT + | s::ExecutionMode::StencilRefUnchangedFrontAMD + | s::ExecutionMode::StencilRefGreaterFrontAMD + | s::ExecutionMode::StencilRefLessFrontAMD + | s::ExecutionMode::StencilRefUnchangedBackAMD + | s::ExecutionMode::StencilRefGreaterBackAMD + | s::ExecutionMode::StencilRefLessBackAMD => { vec![spirv::Capability::StencilExportEXT] } s::ExecutionMode::SubgroupSize @@ -945,7 +973,8 @@ impl Operand { | s::ExecutionMode::Quads | s::ExecutionMode::Isolines => vec![spirv::Capability::Tessellation], s::ExecutionMode::Xfb => vec![spirv::Capability::TransformFeedback], - s::ExecutionMode::SharedLocalMemorySizeINTEL => { + s::ExecutionMode::SharedLocalMemorySizeINTEL + | s::ExecutionMode::NamedBarrierCountINTEL => { vec![spirv::Capability::VectorComputeINTEL] } }, @@ -959,6 +988,7 @@ impl Operand { s::StorageClass::AtomicCounter => vec![spirv::Capability::AtomicStorage], s::StorageClass::CodeSectionINTEL => vec![spirv::Capability::FunctionPointersINTEL], s::StorageClass::Generic => vec![spirv::Capability::GenericPointer], + s::StorageClass::TaskPayloadWorkgroupEXT => vec![spirv::Capability::MeshShadingEXT], s::StorageClass::PhysicalStorageBuffer => { vec![spirv::Capability::PhysicalStorageBufferAddresses] } @@ -979,6 +1009,9 @@ impl Operand { spirv::Capability::Shader, spirv::Capability::VectorComputeINTEL, ], + s::StorageClass::HitObjectAttributeNV => { + vec![spirv::Capability::ShaderInvocationReorderNV] + } s::StorageClass::DeviceOnlyINTEL | s::StorageClass::HostOnlyINTEL => { vec![spirv::Capability::USMStorageClassesINTEL] } @@ -1156,6 +1189,9 @@ impl Operand { | s::FunctionParameterAttribute::NoCapture | s::FunctionParameterAttribute::NoWrite | s::FunctionParameterAttribute::NoReadWrite => vec![spirv::Capability::Kernel], + s::FunctionParameterAttribute::RuntimeAlignedINTEL => { + vec![spirv::Capability::RuntimeAlignedAttributeINTEL] + } }, Self::Decoration(v) => match v { s::Decoration::BuiltIn @@ -1168,6 +1204,8 @@ impl Operand { | s::Decoration::FPRoundingMode | s::Decoration::NoSignedWrap | s::Decoration::NoUnsignedWrap + | s::Decoration::WeightTextureQCOM + | s::Decoration::BlockMatchTextureQCOM | s::Decoration::ExplicitInterpAMD | s::Decoration::CounterBuffer | s::Decoration::UserSemantic @@ -1182,12 +1220,33 @@ impl Operand { | s::Decoration::BindlessImageNV | s::Decoration::BoundSamplerNV | s::Decoration::BoundImageNV => vec![spirv::Capability::BindlessTextureNV], + s::Decoration::ConduitKernelArgumentINTEL + | s::Decoration::RegisterMapKernelArgumentINTEL + | s::Decoration::MMHostInterfaceAddressWidthINTEL + | s::Decoration::MMHostInterfaceDataWidthINTEL + | s::Decoration::MMHostInterfaceLatencyINTEL + | s::Decoration::MMHostInterfaceReadWriteModeINTEL + | s::Decoration::MMHostInterfaceMaxBurstINTEL + | s::Decoration::MMHostInterfaceWaitRequestINTEL + | s::Decoration::StableKernelArgumentINTEL => { + vec![spirv::Capability::FPGAArgumentInterfacesINTEL] + } s::Decoration::BufferLocationINTEL => { vec![spirv::Capability::FPGABufferLocationINTEL] } s::Decoration::StallEnableINTEL => { vec![spirv::Capability::FPGAClusterAttributesINTEL] } + s::Decoration::MathOpDSPModeINTEL => vec![spirv::Capability::FPGADSPControlINTEL], + s::Decoration::InitiationIntervalINTEL + | s::Decoration::MaxConcurrencyINTEL + | s::Decoration::PipelineEnableINTEL => { + vec![spirv::Capability::FPGAInvocationPipeliningAttributesINTEL] + } + s::Decoration::LatencyControlLabelINTEL + | s::Decoration::LatencyControlConstraintINTEL => { + vec![spirv::Capability::FPGALatencyControlINTEL] + } s::Decoration::BurstCoalesceINTEL | s::Decoration::CacheSizeINTEL | s::Decoration::DontStaticallyCoalesceINTEL @@ -1206,7 +1265,10 @@ impl Operand { | s::Decoration::ForcePow2DepthINTEL => { vec![spirv::Capability::FPGAMemoryAttributesINTEL] } - s::Decoration::PerVertexNV => vec![spirv::Capability::FragmentBarycentricNV], + s::Decoration::PerVertexKHR => vec![ + spirv::Capability::FragmentBarycentricNV, + spirv::Capability::FragmentBarycentricKHR, + ], s::Decoration::FunctionRoundingModeINTEL | s::Decoration::FunctionDenormModeINTEL | s::Decoration::FunctionFloatingPointModeINTEL => { @@ -1233,9 +1295,14 @@ impl Operand { s::Decoration::RowMajor | s::Decoration::ColMajor | s::Decoration::MatrixStride => { vec![spirv::Capability::Matrix] } - s::Decoration::PerPrimitiveNV - | s::Decoration::PerViewNV - | s::Decoration::PerTaskNV => vec![spirv::Capability::MeshShadingNV], + s::Decoration::AliasScopeINTEL | s::Decoration::NoAliasINTEL => { + vec![spirv::Capability::MemoryAccessAliasingINTEL] + } + s::Decoration::PerViewNV => vec![spirv::Capability::MeshShadingNV], + s::Decoration::PerPrimitiveNV | s::Decoration::PerTaskNV => vec![ + spirv::Capability::MeshShadingNV, + spirv::Capability::MeshShadingEXT, + ], s::Decoration::RestrictPointer | s::Decoration::AliasedPointer => { vec![spirv::Capability::PhysicalStorageBufferAddresses] } @@ -1253,8 +1320,6 @@ impl Operand { | s::Decoration::Flat | s::Decoration::Centroid | s::Decoration::Invariant - | s::Decoration::Uniform - | s::Decoration::UniformId | s::Decoration::Location | s::Decoration::Component | s::Decoration::Index @@ -1263,6 +1328,13 @@ impl Operand { | s::Decoration::Offset | s::Decoration::NoContraction => vec![spirv::Capability::Shader], s::Decoration::SpecId => vec![spirv::Capability::Shader, spirv::Capability::Kernel], + s::Decoration::Uniform | s::Decoration::UniformId => vec![ + spirv::Capability::Shader, + spirv::Capability::UniformDecoration, + ], + s::Decoration::HitObjectShaderRecordBufferNV => { + vec![spirv::Capability::ShaderInvocationReorderNV] + } s::Decoration::NonUniform => vec![spirv::Capability::ShaderNonUniform], s::Decoration::SecondaryViewportRelativeNV => { vec![spirv::Capability::ShaderStereoViewNV] @@ -1279,9 +1351,8 @@ impl Operand { | s::Decoration::StackCallINTEL | s::Decoration::GlobalVariableOffsetINTEL | s::Decoration::SingleElementVectorINTEL - | s::Decoration::VectorComputeCallableFunctionINTEL => { - vec![spirv::Capability::VectorComputeINTEL] - } + | s::Decoration::VectorComputeCallableFunctionINTEL + | s::Decoration::MediaBlockIOINTEL => vec![spirv::Capability::VectorComputeINTEL], }, Self::BuiltIn(v) => match v { s::BuiltIn::NumWorkgroups @@ -1298,6 +1369,11 @@ impl Operand { | s::BuiltIn::BaryCoordSmoothSampleAMD | s::BuiltIn::BaryCoordPullModelAMD => vec![], s::BuiltIn::ClipDistance => vec![spirv::Capability::ClipDistance], + s::BuiltIn::CoreIDARM + | s::BuiltIn::CoreCountARM + | s::BuiltIn::CoreMaxIDARM + | s::BuiltIn::WarpIDARM + | s::BuiltIn::WarpMaxIDARM => vec![spirv::Capability::CoreBuiltinsARM], s::BuiltIn::CullDistance => vec![spirv::Capability::CullDistance], s::BuiltIn::DeviceIndex => vec![spirv::Capability::DeviceGroup], s::BuiltIn::BaseVertex | s::BuiltIn::BaseInstance => { @@ -1306,10 +1382,12 @@ impl Operand { s::BuiltIn::DrawIndex => vec![ spirv::Capability::DrawParameters, spirv::Capability::MeshShadingNV, + spirv::Capability::MeshShadingEXT, + ], + s::BuiltIn::BaryCoordKHR | s::BuiltIn::BaryCoordNoPerspKHR => vec![ + spirv::Capability::FragmentBarycentricNV, + spirv::Capability::FragmentBarycentricKHR, ], - s::BuiltIn::BaryCoordNV | s::BuiltIn::BaryCoordNoPerspNV => { - vec![spirv::Capability::FragmentBarycentricNV] - } s::BuiltIn::FragSizeEXT | s::BuiltIn::FragInvocationCountEXT => vec![ spirv::Capability::FragmentDensityEXT, spirv::Capability::ShadingRateNV, @@ -1323,6 +1401,7 @@ impl Operand { spirv::Capability::ShaderLayer, spirv::Capability::ShaderViewportIndexLayerEXT, spirv::Capability::MeshShadingNV, + spirv::Capability::MeshShadingEXT, ], s::BuiltIn::InvocationId => { vec![spirv::Capability::Geometry, spirv::Capability::Tessellation] @@ -1333,6 +1412,7 @@ impl Operand { spirv::Capability::RayTracingNV, spirv::Capability::RayTracingKHR, spirv::Capability::MeshShadingNV, + spirv::Capability::MeshShadingEXT, ], s::BuiltIn::WorkDim | s::BuiltIn::GlobalSize @@ -1350,6 +1430,10 @@ impl Operand { spirv::Capability::GroupNonUniform, spirv::Capability::SubgroupBallotKHR, ], + s::BuiltIn::PrimitivePointIndicesEXT + | s::BuiltIn::PrimitiveLineIndicesEXT + | s::BuiltIn::PrimitiveTriangleIndicesEXT + | s::BuiltIn::CullPrimitiveEXT => vec![spirv::Capability::MeshShadingEXT], s::BuiltIn::TaskCountNV | s::BuiltIn::PrimitiveCountNV | s::BuiltIn::PrimitiveIndicesNV @@ -1364,11 +1448,13 @@ impl Operand { spirv::Capability::ShaderViewportIndex, spirv::Capability::ShaderViewportIndexLayerEXT, spirv::Capability::MeshShadingNV, + spirv::Capability::MeshShadingEXT, ], s::BuiltIn::PositionPerViewNV | s::BuiltIn::ViewportMaskPerViewNV => vec![ spirv::Capability::PerViewAttributesNV, spirv::Capability::MeshShadingNV, ], + s::BuiltIn::CullMaskKHR => vec![spirv::Capability::RayCullMaskKHR], s::BuiltIn::RayGeometryIndexKHR => vec![spirv::Capability::RayTracingKHR], s::BuiltIn::CurrentRayTimeNV => vec![spirv::Capability::RayTracingMotionBlurNV], s::BuiltIn::HitTNV => vec![spirv::Capability::RayTracingNV], @@ -1475,6 +1561,8 @@ impl Operand { | s::Capability::GroupNonUniform | s::Capability::ShaderLayer | s::Capability::ShaderViewportIndex + | s::Capability::UniformDecoration + | s::Capability::CoreBuiltinsARM | s::Capability::SubgroupBallotKHR | s::Capability::SubgroupVoteKHR | s::Capability::StorageBuffer16BitAccess @@ -1490,8 +1578,12 @@ impl Operand { | s::Capability::SignedZeroInfNanPreserve | s::Capability::RoundingModeRTE | s::Capability::RoundingModeRTZ + | s::Capability::TextureSampleWeightedQCOM + | s::Capability::TextureBoxFilterQCOM + | s::Capability::TextureBlockMatchQCOM + | s::Capability::ShaderClockKHR | s::Capability::ImageFootprintNV - | s::Capability::FragmentBarycentricNV + | s::Capability::FragmentBarycentricKHR | s::Capability::ComputeDerivativeGroupQuadsNV | s::Capability::GroupNonUniformPartitionedNV | s::Capability::VulkanMemoryModel @@ -1527,21 +1619,37 @@ impl Operand { | s::Capability::FPGAMemoryAccessesINTEL | s::Capability::FPGAClusterAttributesINTEL | s::Capability::LoopFuseINTEL + | s::Capability::FPGADSPControlINTEL + | s::Capability::MemoryAccessAliasingINTEL + | s::Capability::FPGAInvocationPipeliningAttributesINTEL | s::Capability::FPGABufferLocationINTEL | s::Capability::ArbitraryPrecisionFixedPointINTEL | s::Capability::USMStorageClassesINTEL + | s::Capability::RuntimeAlignedAttributeINTEL | s::Capability::IOPipesINTEL | s::Capability::BlockingPipesINTEL | s::Capability::FPGARegINTEL - | s::Capability::DotProductInputAllKHR - | s::Capability::DotProductInput4x8BitPackedKHR - | s::Capability::DotProductKHR + | s::Capability::DotProductInputAll + | s::Capability::DotProductInput4x8BitPacked + | s::Capability::DotProduct + | s::Capability::RayCullMaskKHR | s::Capability::BitInstructions + | s::Capability::AtomicFloat32AddEXT + | s::Capability::AtomicFloat64AddEXT | s::Capability::LongConstantCompositeINTEL | s::Capability::OptNoneINTEL - | s::Capability::DebugInfoModuleINTEL => vec![], + | s::Capability::AtomicFloat16AddEXT + | s::Capability::DebugInfoModuleINTEL + | s::Capability::BFloat16ConversionINTEL + | s::Capability::SplitBarrierINTEL + | s::Capability::FPGALatencyControlINTEL + | s::Capability::FPGAArgumentInterfacesINTEL + | s::Capability::GroupUniformArithmeticKHR => vec![], s::Capability::GenericPointer => vec![spirv::Capability::Addresses], s::Capability::SubgroupDispatch => vec![spirv::Capability::DeviceEnqueue], + s::Capability::FPGAKernelAttributesv2INTEL => { + vec![spirv::Capability::FPGAKernelAttributesINTEL] + } s::Capability::GeometryPointSize | s::Capability::GeometryStreams | s::Capability::MultiViewport @@ -1552,7 +1660,10 @@ impl Operand { | s::Capability::GroupNonUniformShuffle | s::Capability::GroupNonUniformShuffleRelative | s::Capability::GroupNonUniformClustered - | s::Capability::GroupNonUniformQuad => vec![spirv::Capability::GroupNonUniform], + | s::Capability::GroupNonUniformQuad + | s::Capability::GroupNonUniformRotateKHR => { + vec![spirv::Capability::GroupNonUniform] + } s::Capability::ImageReadWrite | s::Capability::ImageMipmap => { vec![spirv::Capability::ImageBasic] } @@ -1571,7 +1682,7 @@ impl Operand { spirv::Capability::ShaderNonUniform, ], s::Capability::Int64Atomics => vec![spirv::Capability::Int64], - s::Capability::DotProductInput4x8BitKHR => vec![spirv::Capability::Int8], + s::Capability::DotProductInput4x8Bit => vec![spirv::Capability::Int8], s::Capability::Vector16 | s::Capability::Float16Buffer | s::Capability::ImageBasic @@ -1586,10 +1697,12 @@ impl Operand { vec![spirv::Capability::MultiViewport] } s::Capability::PipeStorage => vec![spirv::Capability::Pipes], - s::Capability::RayTraversalPrimitiveCullingKHR => vec![ + s::Capability::RayTraversalPrimitiveCullingKHR + | s::Capability::RayTracingOpacityMicromapEXT => vec![ spirv::Capability::RayQueryKHR, spirv::Capability::RayTracingKHR, ], + s::Capability::ShaderInvocationReorderNV => vec![spirv::Capability::RayTracingKHR], s::Capability::SampleMaskOverrideCoverageNV => { vec![spirv::Capability::SampleRateShading] } @@ -1644,9 +1757,9 @@ impl Operand { | s::Capability::StencilExportEXT | s::Capability::ImageReadWriteLodAMD | s::Capability::Int64ImageEXT - | s::Capability::ShaderClockKHR | s::Capability::FragmentFullyCoveredEXT | s::Capability::MeshShadingNV + | s::Capability::MeshShadingEXT | s::Capability::FragmentDensityEXT | s::Capability::ShaderNonUniform | s::Capability::RuntimeDescriptorArray @@ -1659,11 +1772,8 @@ impl Operand { | s::Capability::FragmentShaderShadingRateInterlockEXT | s::Capability::ShaderSMBuiltinsNV | s::Capability::FragmentShaderPixelInterlockEXT - | s::Capability::DemoteToHelperInvocationEXT - | s::Capability::IntegerFunctions2INTEL - | s::Capability::AtomicFloat32AddEXT - | s::Capability::AtomicFloat64AddEXT - | s::Capability::AtomicFloat16AddEXT => vec![spirv::Capability::Shader], + | s::Capability::DemoteToHelperInvocation + | s::Capability::IntegerFunctions2INTEL => vec![spirv::Capability::Shader], s::Capability::UniformBufferArrayNonUniformIndexing | s::Capability::SampledImageArrayNonUniformIndexing | s::Capability::StorageBufferArrayNonUniformIndexing @@ -1710,7 +1820,7 @@ impl Operand { } }, Self::PackedVectorFormat(v) => match v { - s::PackedVectorFormat::PackedVectorFormat4x8BitKHR => vec![], + s::PackedVectorFormat::PackedVectorFormat4x8Bit => vec![], }, _ => vec![], } @@ -1718,26 +1828,19 @@ impl Operand { pub fn required_extensions(&self) -> Vec<&'static str> { use spirv as s; match self { - Self::LoopControl(v) => { + Self::MemorySemantics(v) => { let mut result = vec![]; - if v.intersects( - s::LoopControl::INITIATION_INTERVAL_INTEL - | s::LoopControl::MAX_CONCURRENCY_INTEL - | s::LoopControl::DEPENDENCY_ARRAY_INTEL - | s::LoopControl::PIPELINE_ENABLE_INTEL - | s::LoopControl::LOOP_COALESCE_INTEL - | s::LoopControl::MAX_INTERLEAVING_INTEL - | s::LoopControl::SPECULATED_ITERATIONS_INTEL - | s::LoopControl::NO_FUSION_INTEL, - ) { - result.extend_from_slice(&["SPV_INTEL_fpga_loop_controls"]) + if v.intersects(s::MemorySemantics::VOLATILE) { + result.extend_from_slice(&["SPV_KHR_vulkan_memory_model"]) }; result } - Self::MemorySemantics(v) => { + Self::MemoryAccess(v) => { let mut result = vec![]; - if v.intersects(s::MemorySemantics::VOLATILE) { - result.extend_from_slice(&["SPV_KHR_vulkan_memory_model"]) + if v.intersects( + s::MemoryAccess::ALIAS_SCOPE_INTEL_MASK | s::MemoryAccess::NO_ALIAS_INTEL_MASK, + ) { + result.extend_from_slice(&["SPV_INTEL_memory_access_aliasing"]) }; result } @@ -1748,7 +1851,8 @@ impl Operand { | s::SourceLanguage::OpenCL_C | s::SourceLanguage::OpenCL_CPP | s::SourceLanguage::HLSL - | s::SourceLanguage::CPP_for_OpenCL => vec![], + | s::SourceLanguage::CPP_for_OpenCL + | s::SourceLanguage::SYCL => vec![], }, Self::ExecutionModel(v) => match v { s::ExecutionModel::Vertex @@ -1765,7 +1869,9 @@ impl Operand { | s::ExecutionModel::AnyHitNV | s::ExecutionModel::ClosestHitNV | s::ExecutionModel::MissNV - | s::ExecutionModel::CallableNV => vec![], + | s::ExecutionModel::CallableNV + | s::ExecutionModel::TaskEXT + | s::ExecutionModel::MeshEXT => vec![], }, Self::AddressingModel(v) => match v { s::AddressingModel::Logical @@ -1826,7 +1932,22 @@ impl Operand { | s::ExecutionMode::RoundingModeRTNINTEL | s::ExecutionMode::FloatingPointModeALTINTEL | s::ExecutionMode::FloatingPointModeIEEEINTEL - | s::ExecutionMode::SchedulerTargetFmaxMhzINTEL => vec![], + | s::ExecutionMode::SchedulerTargetFmaxMhzINTEL + | s::ExecutionMode::StreamingInterfaceINTEL + | s::ExecutionMode::RegisterMapInterfaceINTEL + | s::ExecutionMode::NamedBarrierCountINTEL => vec![], + s::ExecutionMode::EarlyAndLateFragmentTestsAMD => { + vec!["SPV_AMD_shader_early_and_late_fragment_tests"] + } + s::ExecutionMode::StencilRefUnchangedFrontAMD + | s::ExecutionMode::StencilRefGreaterFrontAMD + | s::ExecutionMode::StencilRefLessFrontAMD + | s::ExecutionMode::StencilRefUnchangedBackAMD + | s::ExecutionMode::StencilRefGreaterBackAMD + | s::ExecutionMode::StencilRefLessBackAMD => vec![ + "SPV_AMD_shader_early_and_late_fragment_tests", + "SPV_EXT_shader_stencil_export", + ], s::ExecutionMode::PixelInterlockOrderedEXT | s::ExecutionMode::PixelInterlockUnorderedEXT | s::ExecutionMode::SampleInterlockOrderedEXT @@ -1855,7 +1976,9 @@ impl Operand { } s::ExecutionMode::OutputLinesNV | s::ExecutionMode::OutputPrimitivesNV - | s::ExecutionMode::OutputTrianglesNV => vec!["SPV_NV_mesh_shader"], + | s::ExecutionMode::OutputTrianglesNV => { + vec!["SPV_NV_mesh_shader", "SPV_EXT_mesh_shader"] + } }, Self::StorageClass(v) => match v { s::StorageClass::UniformConstant @@ -1869,7 +1992,9 @@ impl Operand { | s::StorageClass::Generic | s::StorageClass::PushConstant | s::StorageClass::AtomicCounter - | s::StorageClass::Image => vec![], + | s::StorageClass::Image + | s::StorageClass::HitObjectAttributeNV => vec![], + s::StorageClass::TaskPayloadWorkgroupEXT => vec!["SPV_EXT_mesh_shader"], s::StorageClass::PhysicalStorageBuffer => vec![ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer", @@ -2040,7 +2165,8 @@ impl Operand { | s::FunctionParameterAttribute::NoAlias | s::FunctionParameterAttribute::NoCapture | s::FunctionParameterAttribute::NoWrite - | s::FunctionParameterAttribute::NoReadWrite => vec![], + | s::FunctionParameterAttribute::NoReadWrite + | s::FunctionParameterAttribute::RuntimeAlignedINTEL => vec![], }, Self::Decoration(v) => match v { s::Decoration::RelaxedPrecision @@ -2092,6 +2218,7 @@ impl Operand { | s::Decoration::MaxByteOffsetId | s::Decoration::ViewportRelativeNV | s::Decoration::NonUniform + | s::Decoration::HitObjectShaderRecordBufferNV | s::Decoration::BindlessSamplerNV | s::Decoration::BindlessImageNV | s::Decoration::BoundSamplerNV @@ -2114,11 +2241,29 @@ impl Operand { | s::Decoration::PrefetchINTEL | s::Decoration::StallEnableINTEL | s::Decoration::FuseLoopsInFunctionINTEL + | s::Decoration::MathOpDSPModeINTEL + | s::Decoration::AliasScopeINTEL + | s::Decoration::NoAliasINTEL + | s::Decoration::InitiationIntervalINTEL + | s::Decoration::MaxConcurrencyINTEL + | s::Decoration::PipelineEnableINTEL | s::Decoration::BufferLocationINTEL | s::Decoration::IOPipeStorageINTEL | s::Decoration::FunctionFloatingPointModeINTEL | s::Decoration::SingleElementVectorINTEL - | s::Decoration::VectorComputeCallableFunctionINTEL => vec![], + | s::Decoration::VectorComputeCallableFunctionINTEL + | s::Decoration::MediaBlockIOINTEL + | s::Decoration::LatencyControlLabelINTEL + | s::Decoration::LatencyControlConstraintINTEL + | s::Decoration::ConduitKernelArgumentINTEL + | s::Decoration::RegisterMapKernelArgumentINTEL + | s::Decoration::MMHostInterfaceAddressWidthINTEL + | s::Decoration::MMHostInterfaceDataWidthINTEL + | s::Decoration::MMHostInterfaceLatencyINTEL + | s::Decoration::MMHostInterfaceReadWriteModeINTEL + | s::Decoration::MMHostInterfaceMaxBurstINTEL + | s::Decoration::MMHostInterfaceWaitRequestINTEL + | s::Decoration::StableKernelArgumentINTEL => vec![], s::Decoration::ExplicitInterpAMD => { vec!["SPV_AMD_shader_explicit_vertex_parameter"] } @@ -2143,13 +2288,20 @@ impl Operand { s::Decoration::NoSignedWrap | s::Decoration::NoUnsignedWrap => { vec!["SPV_KHR_no_integer_wrap_decoration"] } - s::Decoration::PerVertexNV => vec!["SPV_NV_fragment_shader_barycentric"], + s::Decoration::PerVertexKHR => vec![ + "SPV_NV_fragment_shader_barycentric", + "SPV_KHR_fragment_shader_barycentric", + ], s::Decoration::PassthroughNV => vec!["SPV_NV_geometry_shader_passthrough"], - s::Decoration::PerPrimitiveNV - | s::Decoration::PerViewNV - | s::Decoration::PerTaskNV => vec!["SPV_NV_mesh_shader"], + s::Decoration::PerViewNV => vec!["SPV_NV_mesh_shader"], + s::Decoration::PerPrimitiveNV | s::Decoration::PerTaskNV => { + vec!["SPV_NV_mesh_shader", "SPV_EXT_mesh_shader"] + } s::Decoration::OverrideCoverageNV => vec!["SPV_NV_sample_mask_override_coverage"], s::Decoration::SecondaryViewportRelativeNV => vec!["SPV_NV_stereo_view_rendering"], + s::Decoration::WeightTextureQCOM | s::Decoration::BlockMatchTextureQCOM => { + vec!["SPV_QCOM_image_processing"] + } }, Self::BuiltIn(v) => match v { s::BuiltIn::Position @@ -2193,6 +2345,11 @@ impl Operand { | s::BuiltIn::SubgroupLocalInvocationId | s::BuiltIn::VertexIndex | s::BuiltIn::InstanceIndex + | s::BuiltIn::CoreIDARM + | s::BuiltIn::CoreCountARM + | s::BuiltIn::CoreMaxIDARM + | s::BuiltIn::WarpIDARM + | s::BuiltIn::WarpMaxIDARM | s::BuiltIn::SubgroupEqMask | s::BuiltIn::SubgroupGeMask | s::BuiltIn::SubgroupGtMask @@ -2211,26 +2368,34 @@ impl Operand { s::BuiltIn::FragSizeEXT | s::BuiltIn::FragInvocationCountEXT => { vec!["SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate"] } + s::BuiltIn::PrimitivePointIndicesEXT + | s::BuiltIn::PrimitiveLineIndicesEXT + | s::BuiltIn::PrimitiveTriangleIndicesEXT + | s::BuiltIn::CullPrimitiveEXT => vec!["SPV_EXT_mesh_shader"], s::BuiltIn::FragStencilRefEXT => vec!["SPV_EXT_shader_stencil_export"], s::BuiltIn::DeviceIndex => vec!["SPV_KHR_device_group"], s::BuiltIn::PrimitiveShadingRateKHR | s::BuiltIn::ShadingRateKHR => { vec!["SPV_KHR_fragment_shading_rate"] } s::BuiltIn::ViewIndex => vec!["SPV_KHR_multiview"], + s::BuiltIn::CullMaskKHR => vec!["SPV_KHR_ray_cull_mask"], s::BuiltIn::RayGeometryIndexKHR => vec!["SPV_KHR_ray_tracing"], s::BuiltIn::BaseVertex | s::BuiltIn::BaseInstance => { vec!["SPV_KHR_shader_draw_parameters"] } - s::BuiltIn::DrawIndex => { - vec!["SPV_KHR_shader_draw_parameters", "SPV_NV_mesh_shader"] - } + s::BuiltIn::DrawIndex => vec![ + "SPV_KHR_shader_draw_parameters", + "SPV_NV_mesh_shader", + "SPV_EXT_mesh_shader", + ], s::BuiltIn::PositionPerViewNV | s::BuiltIn::ViewportMaskPerViewNV => vec![ "SPV_NVX_multiview_per_view_attributes", "SPV_NV_mesh_shader", ], - s::BuiltIn::BaryCoordNV | s::BuiltIn::BaryCoordNoPerspNV => { - vec!["SPV_NV_fragment_shader_barycentric"] - } + s::BuiltIn::BaryCoordKHR | s::BuiltIn::BaryCoordNoPerspKHR => vec![ + "SPV_NV_fragment_shader_barycentric", + "SPV_KHR_fragment_shader_barycentric", + ], s::BuiltIn::TaskCountNV | s::BuiltIn::PrimitiveCountNV | s::BuiltIn::PrimitiveIndicesNV @@ -2359,6 +2524,7 @@ impl Operand { | s::Capability::GroupNonUniformQuad | s::Capability::ShaderLayer | s::Capability::ShaderViewportIndex + | s::Capability::UniformDecoration | s::Capability::ShaderNonUniform | s::Capability::RuntimeDescriptorArray | s::Capability::InputAttachmentArrayDynamicIndexing @@ -2372,15 +2538,18 @@ impl Operand { | s::Capability::UniformTexelBufferArrayNonUniformIndexing | s::Capability::StorageTexelBufferArrayNonUniformIndexing | s::Capability::VulkanMemoryModel - | s::Capability::VulkanMemoryModelDeviceScope => vec![], + | s::Capability::VulkanMemoryModelDeviceScope + | s::Capability::DemoteToHelperInvocation + | s::Capability::DotProductInputAll + | s::Capability::DotProductInput4x8Bit + | s::Capability::DotProductInput4x8BitPacked + | s::Capability::DotProduct => vec![], s::Capability::Float16ImageAMD => vec!["SPV_AMD_gpu_shader_half_float_fetch"], s::Capability::Groups => vec!["SPV_AMD_shader_ballot"], s::Capability::FragmentMaskAMD => vec!["SPV_AMD_shader_fragment_mask"], s::Capability::ImageReadWriteLodAMD => vec!["SPV_AMD_shader_image_load_store_lod"], s::Capability::ImageGatherBiasLodAMD => vec!["SPV_AMD_texture_gather_bias_lod"], - s::Capability::DemoteToHelperInvocationEXT => { - vec!["SPV_EXT_demote_to_helper_invocation"] - } + s::Capability::CoreBuiltinsARM => vec!["SPV_ARM_core_builtins"], s::Capability::FragmentFullyCoveredEXT => vec!["SPV_EXT_fragment_fully_covered"], s::Capability::FragmentDensityEXT => { vec!["SPV_EXT_fragment_invocation_density", "SPV_NV_shading_rate"] @@ -2390,6 +2559,8 @@ impl Operand { | s::Capability::FragmentShaderPixelInterlockEXT => { vec!["SPV_EXT_fragment_shader_interlock"] } + s::Capability::MeshShadingEXT => vec!["SPV_EXT_mesh_shader"], + s::Capability::RayTracingOpacityMicromapEXT => vec!["SPV_EXT_opacity_micromap"], s::Capability::PhysicalStorageBufferAddresses => vec![ "SPV_EXT_physical_storage_buffer", "SPV_KHR_physical_storage_buffer", @@ -2417,6 +2588,7 @@ impl Operand { s::Capability::ArbitraryPrecisionIntegersINTEL => { vec!["SPV_INTEL_arbitrary_precision_integers"] } + s::Capability::BFloat16ConversionINTEL => vec!["SPV_INTEL_bfloat16_conversion"], s::Capability::BlockingPipesINTEL => vec!["SPV_INTEL_blocking_pipes"], s::Capability::DebugInfoModuleINTEL => vec!["SPV_INTEL_debug_module"], s::Capability::SubgroupAvcMotionEstimationINTEL @@ -2428,10 +2600,18 @@ impl Operand { | s::Capability::FloatingPointModeINTEL | s::Capability::FunctionFloatControlINTEL => vec!["SPV_INTEL_float_controls2"], s::Capability::FPFastMathModeINTEL => vec!["SPV_INTEL_fp_fast_math_mode"], + s::Capability::FPGAArgumentInterfacesINTEL => { + vec!["SPV_INTEL_fpga_argument_interfaces"] + } s::Capability::FPGABufferLocationINTEL => vec!["SPV_INTEL_fpga_buffer_location"], s::Capability::FPGAClusterAttributesINTEL => { vec!["SPV_INTEL_fpga_cluster_attributes"] } + s::Capability::FPGADSPControlINTEL => vec!["SPV_INTEL_fpga_dsp_control"], + s::Capability::FPGAInvocationPipeliningAttributesINTEL => { + vec!["SPV_INTEL_fpga_invocation_pipelining_attributes"] + } + s::Capability::FPGALatencyControlINTEL => vec!["SPV_INTEL_fpga_latency_control"], s::Capability::FPGALoopControlsINTEL => vec!["SPV_INTEL_fpga_loop_controls"], s::Capability::FPGAMemoryAccessesINTEL => vec!["SPV_INTEL_fpga_memory_accesses"], s::Capability::FPGAMemoryAttributesINTEL => { @@ -2443,18 +2623,23 @@ impl Operand { } s::Capability::AsmINTEL => vec!["SPV_INTEL_inline_assembly"], s::Capability::IOPipesINTEL => vec!["SPV_INTEL_io_pipes"], - s::Capability::KernelAttributesINTEL | s::Capability::FPGAKernelAttributesINTEL => { - vec!["SPV_INTEL_kernel_attributes"] - } + s::Capability::KernelAttributesINTEL + | s::Capability::FPGAKernelAttributesINTEL + | s::Capability::FPGAKernelAttributesv2INTEL => vec!["SPV_INTEL_kernel_attributes"], s::Capability::LongConstantCompositeINTEL => { vec!["SPV_INTEL_long_constant_composite"] } s::Capability::LoopFuseINTEL => vec!["SPV_INTEL_loop_fuse"], s::Capability::SubgroupImageMediaBlockIOINTEL => vec!["SPV_INTEL_media_block_io"], + s::Capability::MemoryAccessAliasingINTEL => { + vec!["SPV_INTEL_memory_access_aliasing"] + } s::Capability::OptNoneINTEL => vec!["SPV_INTEL_optnone"], + s::Capability::RuntimeAlignedAttributeINTEL => vec!["SPV_INTEL_runtime_aligned"], s::Capability::IntegerFunctions2INTEL => { vec!["SPV_INTEL_shader_integer_functions2"] } + s::Capability::SplitBarrierINTEL => vec!["SPV_INTEL_split_barrier"], s::Capability::SubgroupShuffleINTEL | s::Capability::SubgroupBufferBlockIOINTEL | s::Capability::SubgroupImageBlockIOINTEL => vec!["SPV_INTEL_subgroups"], @@ -2482,12 +2667,9 @@ impl Operand { | s::Capability::RoundingModeRTE | s::Capability::RoundingModeRTZ => vec!["SPV_KHR_float_controls"], s::Capability::FragmentShadingRateKHR => vec!["SPV_KHR_fragment_shading_rate"], - s::Capability::DotProductInputAllKHR - | s::Capability::DotProductInput4x8BitKHR - | s::Capability::DotProductInput4x8BitPackedKHR - | s::Capability::DotProductKHR => vec!["SPV_KHR_integer_dot_product"], s::Capability::MultiView => vec!["SPV_KHR_multiview"], s::Capability::SampleMaskPostDepthCoverage => vec!["SPV_KHR_post_depth_coverage"], + s::Capability::RayCullMaskKHR => vec!["SPV_KHR_ray_cull_mask"], s::Capability::RayQueryProvisionalKHR | s::Capability::RayQueryKHR => { vec!["SPV_KHR_ray_query"] } @@ -2501,7 +2683,11 @@ impl Operand { s::Capability::SubgroupBallotKHR => vec!["SPV_KHR_shader_ballot"], s::Capability::ShaderClockKHR => vec!["SPV_KHR_shader_clock"], s::Capability::DrawParameters => vec!["SPV_KHR_shader_draw_parameters"], + s::Capability::GroupNonUniformRotateKHR => vec!["SPV_KHR_subgroup_rotate"], s::Capability::SubgroupVoteKHR => vec!["SPV_KHR_subgroup_vote"], + s::Capability::GroupUniformArithmeticKHR => { + vec!["SPV_KHR_uniform_group_instructions"] + } s::Capability::VariablePointersStorageBuffer | s::Capability::VariablePointers => { vec!["SPV_KHR_variable_pointers"] } @@ -2517,7 +2703,10 @@ impl Operand { vec!["SPV_NV_compute_shader_derivatives"] } s::Capability::CooperativeMatrixNV => vec!["SPV_NV_cooperative_matrix"], - s::Capability::FragmentBarycentricNV => vec!["SPV_NV_fragment_shader_barycentric"], + s::Capability::FragmentBarycentricKHR => vec![ + "SPV_NV_fragment_shader_barycentric", + "SPV_KHR_fragment_shader_barycentric", + ], s::Capability::GeometryShaderPassthroughNV => { vec!["SPV_NV_geometry_shader_passthrough"] } @@ -2528,12 +2717,18 @@ impl Operand { vec!["SPV_NV_sample_mask_override_coverage"] } s::Capability::ImageFootprintNV => vec!["SPV_NV_shader_image_footprint"], + s::Capability::ShaderInvocationReorderNV => { + vec!["SPV_NV_shader_invocation_reorder"] + } s::Capability::ShaderSMBuiltinsNV => vec!["SPV_NV_shader_sm_builtins"], s::Capability::GroupNonUniformPartitionedNV => { vec!["SPV_NV_shader_subgroup_partitioned"] } s::Capability::ShaderStereoViewNV => vec!["SPV_NV_stereo_view_rendering"], s::Capability::ShaderViewportMaskNV => vec!["SPV_NV_viewport_array2"], + s::Capability::TextureSampleWeightedQCOM + | s::Capability::TextureBoxFilterQCOM + | s::Capability::TextureBlockMatchQCOM => vec!["SPV_QCOM_image_processing"], }, Self::RayQueryIntersection(v) => match v { s::RayQueryIntersection::RayQueryCandidateIntersectionKHR @@ -2553,9 +2748,7 @@ impl Operand { } }, Self::PackedVectorFormat(v) => match v { - s::PackedVectorFormat::PackedVectorFormat4x8BitKHR => { - vec!["SPV_KHR_integer_dot_product"] - } + s::PackedVectorFormat::PackedVectorFormat4x8Bit => vec![], }, _ => vec![], } @@ -2641,7 +2834,8 @@ impl Operand { s::LoopControl::LOOP_COALESCE_INTEL, s::LoopControl::MAX_INTERLEAVING_INTEL, s::LoopControl::SPECULATED_ITERATIONS_INTEL, - s::LoopControl::NO_FUSION_INTEL, + s::LoopControl::LOOP_COUNT_INTEL, + s::LoopControl::MAX_REINVOCATION_DELAY_INTEL, ] .iter() .filter(|arg| v.contains(**arg)) @@ -2658,6 +2852,22 @@ impl Operand { } Self::MemoryAccess(v) => { let mut result = vec![]; + result.extend( + [ + s::MemoryAccess::ALIAS_SCOPE_INTEL_MASK, + s::MemoryAccess::NO_ALIAS_INTEL_MASK, + ] + .iter() + .filter(|arg| v.contains(**arg)) + .flat_map(|_| { + [crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::IdRef, + quantifier: crate::grammar::OperandQuantifier::One, + }] + .iter() + .cloned() + }), + ); result.extend( [ s::MemoryAccess::MAKE_POINTER_AVAILABLE, @@ -2722,6 +2932,10 @@ impl Operand { quantifier: crate::grammar::OperandQuantifier::One, }, ], + s::ExecutionMode::NamedBarrierCountINTEL => vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }], s::ExecutionMode::Invocations => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, @@ -2736,6 +2950,10 @@ impl Operand { quantifier: crate::grammar::OperandQuantifier::One, }] } + s::ExecutionMode::StreamingInterfaceINTEL => vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }], s::ExecutionMode::SubgroupSize => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, @@ -2766,6 +2984,12 @@ impl Operand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, }], + s::ExecutionMode::RegisterMapInterfaceINTEL => { + vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }] + } s::ExecutionMode::MaxWorkDimINTEL => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, @@ -2811,6 +3035,12 @@ impl Operand { _ => vec![], }, Self::Decoration(v) => match v { + s::Decoration::MMHostInterfaceReadWriteModeINTEL => { + vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::AccessQualifier, + quantifier: crate::grammar::OperandQuantifier::One, + }] + } s::Decoration::BuiltIn => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::BuiltIn, quantifier: crate::grammar::OperandQuantifier::One, @@ -2827,6 +3057,12 @@ impl Operand { kind: crate::grammar::OperandKind::FunctionParameterAttribute, quantifier: crate::grammar::OperandQuantifier::One, }], + s::Decoration::AliasScopeINTEL | s::Decoration::NoAliasINTEL => { + vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::IdRef, + quantifier: crate::grammar::OperandQuantifier::One, + }] + } s::Decoration::AlignmentId => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::IdRef, quantifier: crate::grammar::OperandQuantifier::One, @@ -2843,6 +3079,12 @@ impl Operand { kind: crate::grammar::OperandKind::IdScope, quantifier: crate::grammar::OperandQuantifier::One, }], + s::Decoration::MMHostInterfaceAddressWidthINTEL => { + vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }] + } s::Decoration::Alignment => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, @@ -2887,10 +3129,24 @@ impl Operand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, }], + s::Decoration::InitiationIntervalINTEL => vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }], + s::Decoration::MMHostInterfaceDataWidthINTEL => { + vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }] + } s::Decoration::DescriptorSet => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, }], + s::Decoration::PipelineEnableINTEL => vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }], s::Decoration::ForcePow2DepthINTEL => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, @@ -2903,10 +3159,24 @@ impl Operand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, }], + s::Decoration::MaxConcurrencyINTEL => vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }], s::Decoration::FuncParamIOKindINTEL => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, }], + s::Decoration::LatencyControlLabelINTEL => vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }], + s::Decoration::MMHostInterfaceLatencyINTEL => { + vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }] + } s::Decoration::Location => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, @@ -2919,6 +3189,12 @@ impl Operand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, }], + s::Decoration::MMHostInterfaceMaxBurstINTEL => { + vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }] + } s::Decoration::MaxPrivateCopiesINTEL => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, @@ -2927,6 +3203,16 @@ impl Operand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, }], + s::Decoration::MathOpDSPModeINTEL => vec![ + crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }, + crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }, + ], s::Decoration::SIMTCallINTEL => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, @@ -2942,6 +3228,20 @@ impl Operand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, }], + s::Decoration::LatencyControlConstraintINTEL => vec![ + crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }, + crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }, + crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }, + ], s::Decoration::SpecId => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, @@ -2980,6 +3280,12 @@ impl Operand { quantifier: crate::grammar::OperandQuantifier::One, }, ], + s::Decoration::MMHostInterfaceWaitRequestINTEL => { + vec![crate::grammar::LogicalOperand { + kind: crate::grammar::OperandKind::LiteralInteger, + quantifier: crate::grammar::OperandQuantifier::One, + }] + } s::Decoration::XfbBuffer => vec![crate::grammar::LogicalOperand { kind: crate::grammar::OperandKind::LiteralInteger, quantifier: crate::grammar::OperandQuantifier::One, diff --git a/rspirv/dr/build/autogen_norm_insts.rs b/rspirv/dr/build/autogen_norm_insts.rs index 9cdf3308..537ea11c 100644 --- a/rspirv/dr/build/autogen_norm_insts.rs +++ b/rspirv/dr/build/autogen_norm_insts.rs @@ -12332,6 +12332,63 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } + #[doc = "Appends an OpGroupNonUniformRotateKHR instruction to the current block."] + pub fn group_non_uniform_rotate_khr( + &mut self, + result_type: spirv::Word, + result_id: Option, + execution: spirv::Word, + value: spirv::Word, + delta: spirv::Word, + cluster_size: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupNonUniformRotateKHR, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdScope(execution), + dr::Operand::IdRef(value), + dr::Operand::IdRef(delta), + ], + ); + if let Some(v) = cluster_size { + inst.operands.push(dr::Operand::IdRef(v)); + } + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpGroupNonUniformRotateKHR instruction to the current block."] + pub fn insert_group_non_uniform_rotate_khr( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + execution: spirv::Word, + value: spirv::Word, + delta: spirv::Word, + cluster_size: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupNonUniformRotateKHR, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdScope(execution), + dr::Operand::IdRef(value), + dr::Operand::IdRef(delta), + ], + ); + if let Some(v) = cluster_size { + inst.operands.push(dr::Operand::IdRef(v)); + } + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } #[doc = "Appends an OpSubgroupReadInvocationKHR instruction to the current block."] pub fn subgroup_read_invocation_khr( &mut self, @@ -12522,6 +12579,53 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } + #[doc = "Appends an OpSDot instruction to the current block."] + pub fn s_dot( + &mut self, + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SDot, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(vector_1), dr::Operand::IdRef(vector_2)], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSDot instruction to the current block."] + pub fn insert_s_dot( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SDot, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(vector_1), dr::Operand::IdRef(vector_2)], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } #[doc = "Appends an OpSDotKHR instruction to the current block."] pub fn s_dot_khr( &mut self, @@ -12569,6 +12673,53 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } + #[doc = "Appends an OpUDot instruction to the current block."] + pub fn u_dot( + &mut self, + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::UDot, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(vector_1), dr::Operand::IdRef(vector_2)], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpUDot instruction to the current block."] + pub fn insert_u_dot( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::UDot, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(vector_1), dr::Operand::IdRef(vector_2)], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } #[doc = "Appends an OpUDotKHR instruction to the current block."] pub fn u_dot_khr( &mut self, @@ -12616,6 +12767,53 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } + #[doc = "Appends an OpSUDot instruction to the current block."] + pub fn su_dot( + &mut self, + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SUDot, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(vector_1), dr::Operand::IdRef(vector_2)], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSUDot instruction to the current block."] + pub fn insert_su_dot( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SUDot, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(vector_1), dr::Operand::IdRef(vector_2)], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } #[doc = "Appends an OpSUDotKHR instruction to the current block."] pub fn su_dot_khr( &mut self, @@ -12663,8 +12861,8 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpSDotAccSatKHR instruction to the current block."] - pub fn s_dot_acc_sat_khr( + #[doc = "Appends an OpSDotAccSat instruction to the current block."] + pub fn s_dot_acc_sat( &mut self, result_type: spirv::Word, result_id: Option, @@ -12676,7 +12874,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SDotAccSatKHR, + spirv::Op::SDotAccSat, Some(result_type), Some(_id), vec![ @@ -12691,8 +12889,8 @@ impl Builder { self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpSDotAccSatKHR instruction to the current block."] - pub fn insert_s_dot_acc_sat_khr( + #[doc = "Appends an OpSDotAccSat instruction to the current block."] + pub fn insert_s_dot_acc_sat( &mut self, insert_point: InsertPoint, result_type: spirv::Word, @@ -12705,7 +12903,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SDotAccSatKHR, + spirv::Op::SDotAccSat, Some(result_type), Some(_id), vec![ @@ -12720,8 +12918,8 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpUDotAccSatKHR instruction to the current block."] - pub fn u_dot_acc_sat_khr( + #[doc = "Appends an OpSDotAccSatKHR instruction to the current block."] + pub fn s_dot_acc_sat_khr( &mut self, result_type: spirv::Word, result_id: Option, @@ -12733,7 +12931,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UDotAccSatKHR, + spirv::Op::SDotAccSatKHR, Some(result_type), Some(_id), vec![ @@ -12748,8 +12946,8 @@ impl Builder { self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpUDotAccSatKHR instruction to the current block."] - pub fn insert_u_dot_acc_sat_khr( + #[doc = "Appends an OpSDotAccSatKHR instruction to the current block."] + pub fn insert_s_dot_acc_sat_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, @@ -12762,7 +12960,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UDotAccSatKHR, + spirv::Op::SDotAccSatKHR, Some(result_type), Some(_id), vec![ @@ -12777,8 +12975,8 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpSUDotAccSatKHR instruction to the current block."] - pub fn su_dot_acc_sat_khr( + #[doc = "Appends an OpUDotAccSat instruction to the current block."] + pub fn u_dot_acc_sat( &mut self, result_type: spirv::Word, result_id: Option, @@ -12790,7 +12988,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SUDotAccSatKHR, + spirv::Op::UDotAccSat, Some(result_type), Some(_id), vec![ @@ -12805,8 +13003,8 @@ impl Builder { self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpSUDotAccSatKHR instruction to the current block."] - pub fn insert_su_dot_acc_sat_khr( + #[doc = "Appends an OpUDotAccSat instruction to the current block."] + pub fn insert_u_dot_acc_sat( &mut self, insert_point: InsertPoint, result_type: spirv::Word, @@ -12819,7 +13017,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SUDotAccSatKHR, + spirv::Op::UDotAccSat, Some(result_type), Some(_id), vec![ @@ -12834,52 +13032,223 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryInitializeKHR instruction to the current block."] - pub fn ray_query_initialize_khr( + #[doc = "Appends an OpUDotAccSatKHR instruction to the current block."] + pub fn u_dot_acc_sat_khr( &mut self, - ray_query: spirv::Word, - accel: spirv::Word, - ray_flags: spirv::Word, - cull_mask: spirv::Word, - ray_origin: spirv::Word, - ray_t_min: spirv::Word, - ray_direction: spirv::Word, - ray_t_max: spirv::Word, - ) -> BuildResult<()> { + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + accumulator: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryInitializeKHR, - None, - None, + spirv::Op::UDotAccSatKHR, + Some(result_type), + Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(accel), - dr::Operand::IdRef(ray_flags), - dr::Operand::IdRef(cull_mask), - dr::Operand::IdRef(ray_origin), - dr::Operand::IdRef(ray_t_min), - dr::Operand::IdRef(ray_direction), - dr::Operand::IdRef(ray_t_max), + dr::Operand::IdRef(vector_1), + dr::Operand::IdRef(vector_2), + dr::Operand::IdRef(accumulator), ], ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpRayQueryInitializeKHR instruction to the current block."] - pub fn insert_ray_query_initialize_khr( + #[doc = "Appends an OpUDotAccSatKHR instruction to the current block."] + pub fn insert_u_dot_acc_sat_khr( &mut self, insert_point: InsertPoint, - ray_query: spirv::Word, - accel: spirv::Word, - ray_flags: spirv::Word, - cull_mask: spirv::Word, - ray_origin: spirv::Word, - ray_t_min: spirv::Word, - ray_direction: spirv::Word, - ray_t_max: spirv::Word, - ) -> BuildResult<()> { - #[allow(unused_mut)] - let mut inst = dr::Instruction::new( + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + accumulator: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::UDotAccSatKHR, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(vector_1), + dr::Operand::IdRef(vector_2), + dr::Operand::IdRef(accumulator), + ], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSUDotAccSat instruction to the current block."] + pub fn su_dot_acc_sat( + &mut self, + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + accumulator: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SUDotAccSat, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(vector_1), + dr::Operand::IdRef(vector_2), + dr::Operand::IdRef(accumulator), + ], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSUDotAccSat instruction to the current block."] + pub fn insert_su_dot_acc_sat( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + accumulator: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SUDotAccSat, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(vector_1), + dr::Operand::IdRef(vector_2), + dr::Operand::IdRef(accumulator), + ], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSUDotAccSatKHR instruction to the current block."] + pub fn su_dot_acc_sat_khr( + &mut self, + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + accumulator: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SUDotAccSatKHR, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(vector_1), + dr::Operand::IdRef(vector_2), + dr::Operand::IdRef(accumulator), + ], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSUDotAccSatKHR instruction to the current block."] + pub fn insert_su_dot_acc_sat_khr( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + vector_1: spirv::Word, + vector_2: spirv::Word, + accumulator: spirv::Word, + packed_vector_format: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SUDotAccSatKHR, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(vector_1), + dr::Operand::IdRef(vector_2), + dr::Operand::IdRef(accumulator), + ], + ); + if let Some(v) = packed_vector_format { + inst.operands.push(dr::Operand::PackedVectorFormat(v)); + } + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpRayQueryInitializeKHR instruction to the current block."] + pub fn ray_query_initialize_khr( + &mut self, + ray_query: spirv::Word, + accel: spirv::Word, + ray_flags: spirv::Word, + cull_mask: spirv::Word, + ray_origin: spirv::Word, + ray_t_min: spirv::Word, + ray_direction: spirv::Word, + ray_t_max: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::RayQueryInitializeKHR, + None, + None, + vec![ + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(accel), + dr::Operand::IdRef(ray_flags), + dr::Operand::IdRef(cull_mask), + dr::Operand::IdRef(ray_origin), + dr::Operand::IdRef(ray_t_min), + dr::Operand::IdRef(ray_direction), + dr::Operand::IdRef(ray_t_max), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpRayQueryInitializeKHR instruction to the current block."] + pub fn insert_ray_query_initialize_khr( + &mut self, + insert_point: InsertPoint, + ray_query: spirv::Word, + accel: spirv::Word, + ray_flags: spirv::Word, + cull_mask: spirv::Word, + ray_origin: spirv::Word, + ray_t_min: spirv::Word, + ray_direction: spirv::Word, + ray_t_max: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( spirv::Op::RayQueryInitializeKHR, None, None, @@ -13071,195 +13440,407 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpGroupIAddNonUniformAMD instruction to the current block."] - pub fn group_i_add_non_uniform_amd( + #[doc = "Appends an OpImageSampleWeightedQCOM instruction to the current block."] + pub fn image_sample_weighted_qcom( &mut self, result_type: spirv::Word, result_id: Option, - execution: spirv::Word, - operation: spirv::GroupOperation, - x: spirv::Word, + texture: spirv::Word, + coordinates: spirv::Word, + weights: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::GroupIAddNonUniformAMD, + spirv::Op::ImageSampleWeightedQCOM, Some(result_type), Some(_id), vec![ - dr::Operand::IdScope(execution), - dr::Operand::GroupOperation(operation), - dr::Operand::IdRef(x), + dr::Operand::IdRef(texture), + dr::Operand::IdRef(coordinates), + dr::Operand::IdRef(weights), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpGroupIAddNonUniformAMD instruction to the current block."] - pub fn insert_group_i_add_non_uniform_amd( + #[doc = "Appends an OpImageSampleWeightedQCOM instruction to the current block."] + pub fn insert_image_sample_weighted_qcom( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - execution: spirv::Word, - operation: spirv::GroupOperation, - x: spirv::Word, + texture: spirv::Word, + coordinates: spirv::Word, + weights: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::GroupIAddNonUniformAMD, + spirv::Op::ImageSampleWeightedQCOM, Some(result_type), Some(_id), vec![ - dr::Operand::IdScope(execution), - dr::Operand::GroupOperation(operation), - dr::Operand::IdRef(x), + dr::Operand::IdRef(texture), + dr::Operand::IdRef(coordinates), + dr::Operand::IdRef(weights), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpGroupFAddNonUniformAMD instruction to the current block."] - pub fn group_f_add_non_uniform_amd( + #[doc = "Appends an OpImageBoxFilterQCOM instruction to the current block."] + pub fn image_box_filter_qcom( &mut self, result_type: spirv::Word, result_id: Option, - execution: spirv::Word, - operation: spirv::GroupOperation, - x: spirv::Word, + texture: spirv::Word, + coordinates: spirv::Word, + box_size: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::GroupFAddNonUniformAMD, + spirv::Op::ImageBoxFilterQCOM, Some(result_type), Some(_id), vec![ - dr::Operand::IdScope(execution), - dr::Operand::GroupOperation(operation), - dr::Operand::IdRef(x), + dr::Operand::IdRef(texture), + dr::Operand::IdRef(coordinates), + dr::Operand::IdRef(box_size), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpGroupFAddNonUniformAMD instruction to the current block."] - pub fn insert_group_f_add_non_uniform_amd( + #[doc = "Appends an OpImageBoxFilterQCOM instruction to the current block."] + pub fn insert_image_box_filter_qcom( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - execution: spirv::Word, - operation: spirv::GroupOperation, - x: spirv::Word, + texture: spirv::Word, + coordinates: spirv::Word, + box_size: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::GroupFAddNonUniformAMD, + spirv::Op::ImageBoxFilterQCOM, Some(result_type), Some(_id), vec![ - dr::Operand::IdScope(execution), - dr::Operand::GroupOperation(operation), - dr::Operand::IdRef(x), + dr::Operand::IdRef(texture), + dr::Operand::IdRef(coordinates), + dr::Operand::IdRef(box_size), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpGroupFMinNonUniformAMD instruction to the current block."] - pub fn group_f_min_non_uniform_amd( + #[doc = "Appends an OpImageBlockMatchSSDQCOM instruction to the current block."] + pub fn image_block_match_ssdqcom( &mut self, result_type: spirv::Word, result_id: Option, - execution: spirv::Word, - operation: spirv::GroupOperation, - x: spirv::Word, + target: spirv::Word, + target_coordinates: spirv::Word, + reference: spirv::Word, + reference_coordinates: spirv::Word, + block_size: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::GroupFMinNonUniformAMD, + spirv::Op::ImageBlockMatchSSDQCOM, Some(result_type), Some(_id), vec![ - dr::Operand::IdScope(execution), - dr::Operand::GroupOperation(operation), - dr::Operand::IdRef(x), + dr::Operand::IdRef(target), + dr::Operand::IdRef(target_coordinates), + dr::Operand::IdRef(reference), + dr::Operand::IdRef(reference_coordinates), + dr::Operand::IdRef(block_size), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpGroupFMinNonUniformAMD instruction to the current block."] - pub fn insert_group_f_min_non_uniform_amd( + #[doc = "Appends an OpImageBlockMatchSSDQCOM instruction to the current block."] + pub fn insert_image_block_match_ssdqcom( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - execution: spirv::Word, - operation: spirv::GroupOperation, - x: spirv::Word, + target: spirv::Word, + target_coordinates: spirv::Word, + reference: spirv::Word, + reference_coordinates: spirv::Word, + block_size: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::GroupFMinNonUniformAMD, + spirv::Op::ImageBlockMatchSSDQCOM, Some(result_type), Some(_id), vec![ - dr::Operand::IdScope(execution), - dr::Operand::GroupOperation(operation), - dr::Operand::IdRef(x), + dr::Operand::IdRef(target), + dr::Operand::IdRef(target_coordinates), + dr::Operand::IdRef(reference), + dr::Operand::IdRef(reference_coordinates), + dr::Operand::IdRef(block_size), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpGroupUMinNonUniformAMD instruction to the current block."] - pub fn group_u_min_non_uniform_amd( + #[doc = "Appends an OpImageBlockMatchSADQCOM instruction to the current block."] + pub fn image_block_match_sadqcom( &mut self, result_type: spirv::Word, result_id: Option, - execution: spirv::Word, - operation: spirv::GroupOperation, - x: spirv::Word, + target: spirv::Word, + target_coordinates: spirv::Word, + reference: spirv::Word, + reference_coordinates: spirv::Word, + block_size: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::GroupUMinNonUniformAMD, + spirv::Op::ImageBlockMatchSADQCOM, Some(result_type), Some(_id), vec![ - dr::Operand::IdScope(execution), - dr::Operand::GroupOperation(operation), - dr::Operand::IdRef(x), + dr::Operand::IdRef(target), + dr::Operand::IdRef(target_coordinates), + dr::Operand::IdRef(reference), + dr::Operand::IdRef(reference_coordinates), + dr::Operand::IdRef(block_size), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpGroupUMinNonUniformAMD instruction to the current block."] - pub fn insert_group_u_min_non_uniform_amd( + #[doc = "Appends an OpImageBlockMatchSADQCOM instruction to the current block."] + pub fn insert_image_block_match_sadqcom( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - execution: spirv::Word, - operation: spirv::GroupOperation, - x: spirv::Word, + target: spirv::Word, + target_coordinates: spirv::Word, + reference: spirv::Word, + reference_coordinates: spirv::Word, + block_size: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::GroupUMinNonUniformAMD, + spirv::Op::ImageBlockMatchSADQCOM, Some(result_type), Some(_id), vec![ - dr::Operand::IdScope(execution), + dr::Operand::IdRef(target), + dr::Operand::IdRef(target_coordinates), + dr::Operand::IdRef(reference), + dr::Operand::IdRef(reference_coordinates), + dr::Operand::IdRef(block_size), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpGroupIAddNonUniformAMD instruction to the current block."] + pub fn group_i_add_non_uniform_amd( + &mut self, + result_type: spirv::Word, + result_id: Option, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupIAddNonUniformAMD, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpGroupIAddNonUniformAMD instruction to the current block."] + pub fn insert_group_i_add_non_uniform_amd( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupIAddNonUniformAMD, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpGroupFAddNonUniformAMD instruction to the current block."] + pub fn group_f_add_non_uniform_amd( + &mut self, + result_type: spirv::Word, + result_id: Option, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupFAddNonUniformAMD, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpGroupFAddNonUniformAMD instruction to the current block."] + pub fn insert_group_f_add_non_uniform_amd( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupFAddNonUniformAMD, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpGroupFMinNonUniformAMD instruction to the current block."] + pub fn group_f_min_non_uniform_amd( + &mut self, + result_type: spirv::Word, + result_id: Option, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupFMinNonUniformAMD, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpGroupFMinNonUniformAMD instruction to the current block."] + pub fn insert_group_f_min_non_uniform_amd( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupFMinNonUniformAMD, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpGroupUMinNonUniformAMD instruction to the current block."] + pub fn group_u_min_non_uniform_amd( + &mut self, + result_type: spirv::Word, + result_id: Option, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupUMinNonUniformAMD, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpGroupUMinNonUniformAMD instruction to the current block."] + pub fn insert_group_u_min_non_uniform_amd( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupUMinNonUniformAMD, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdScope(execution), dr::Operand::GroupOperation(operation), dr::Operand::IdRef(x), ], @@ -13588,973 +14169,2990 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpImageSampleFootprintNV instruction to the current block."] - pub fn image_sample_footprint_nv( + #[doc = "Appends an OpHitObjectRecordHitMotionNV instruction to the current block."] + pub fn hit_object_record_hit_motion_nv( &mut self, - result_type: spirv::Word, - result_id: Option, - sampled_image: spirv::Word, - coordinate: spirv::Word, - granularity: spirv::Word, - coarse: spirv::Word, - image_operands: Option, - additional_params: impl IntoIterator, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + current_time: spirv::Word, + hit_object_attributes: spirv::Word, + ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ImageSampleFootprintNV, - Some(result_type), - Some(_id), + spirv::Op::HitObjectRecordHitMotionNV, + None, + None, vec![ - dr::Operand::IdRef(sampled_image), - dr::Operand::IdRef(coordinate), - dr::Operand::IdRef(granularity), - dr::Operand::IdRef(coarse), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), + dr::Operand::IdRef(instance_id), + dr::Operand::IdRef(primitive_id), + dr::Operand::IdRef(geometry_index), + dr::Operand::IdRef(hit_kind), + dr::Operand::IdRef(sbt_record_offset), + dr::Operand::IdRef(sbt_record_stride), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(current_time), + dr::Operand::IdRef(hit_object_attributes), ], ); - if let Some(v) = image_operands { - inst.operands.push(dr::Operand::ImageOperands(v)); - } - inst.operands.extend(additional_params); self.insert_into_block(InsertPoint::End, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpImageSampleFootprintNV instruction to the current block."] - pub fn insert_image_sample_footprint_nv( + #[doc = "Appends an OpHitObjectRecordHitMotionNV instruction to the current block."] + pub fn insert_hit_object_record_hit_motion_nv( &mut self, insert_point: InsertPoint, - result_type: spirv::Word, - result_id: Option, - sampled_image: spirv::Word, - coordinate: spirv::Word, - granularity: spirv::Word, - coarse: spirv::Word, - image_operands: Option, - additional_params: impl IntoIterator, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + current_time: spirv::Word, + hit_object_attributes: spirv::Word, + ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ImageSampleFootprintNV, - Some(result_type), - Some(_id), + spirv::Op::HitObjectRecordHitMotionNV, + None, + None, vec![ - dr::Operand::IdRef(sampled_image), - dr::Operand::IdRef(coordinate), - dr::Operand::IdRef(granularity), - dr::Operand::IdRef(coarse), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), + dr::Operand::IdRef(instance_id), + dr::Operand::IdRef(primitive_id), + dr::Operand::IdRef(geometry_index), + dr::Operand::IdRef(hit_kind), + dr::Operand::IdRef(sbt_record_offset), + dr::Operand::IdRef(sbt_record_stride), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(current_time), + dr::Operand::IdRef(hit_object_attributes), ], ); - if let Some(v) = image_operands { - inst.operands.push(dr::Operand::ImageOperands(v)); - } - inst.operands.extend(additional_params); self.insert_into_block(insert_point, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpGroupNonUniformPartitionNV instruction to the current block."] - pub fn group_non_uniform_partition_nv( + #[doc = "Appends an OpHitObjectRecordHitWithIndexMotionNV instruction to the current block."] + pub fn hit_object_record_hit_with_index_motion_nv( &mut self, - result_type: spirv::Word, - result_id: Option, - value: spirv::Word, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + current_time: spirv::Word, + hit_object_attributes: spirv::Word, + ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::GroupNonUniformPartitionNV, - Some(result_type), - Some(_id), - vec![dr::Operand::IdRef(value)], + spirv::Op::HitObjectRecordHitWithIndexMotionNV, + None, + None, + vec![ + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), + dr::Operand::IdRef(instance_id), + dr::Operand::IdRef(primitive_id), + dr::Operand::IdRef(geometry_index), + dr::Operand::IdRef(hit_kind), + dr::Operand::IdRef(sbt_record_index), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(current_time), + dr::Operand::IdRef(hit_object_attributes), + ], ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpGroupNonUniformPartitionNV instruction to the current block."] - pub fn insert_group_non_uniform_partition_nv( + #[doc = "Appends an OpHitObjectRecordHitWithIndexMotionNV instruction to the current block."] + pub fn insert_hit_object_record_hit_with_index_motion_nv( &mut self, insert_point: InsertPoint, - result_type: spirv::Word, - result_id: Option, - value: spirv::Word, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + current_time: spirv::Word, + hit_object_attributes: spirv::Word, + ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::GroupNonUniformPartitionNV, - Some(result_type), - Some(_id), - vec![dr::Operand::IdRef(value)], + spirv::Op::HitObjectRecordHitWithIndexMotionNV, + None, + None, + vec![ + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), + dr::Operand::IdRef(instance_id), + dr::Operand::IdRef(primitive_id), + dr::Operand::IdRef(geometry_index), + dr::Operand::IdRef(hit_kind), + dr::Operand::IdRef(sbt_record_index), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(current_time), + dr::Operand::IdRef(hit_object_attributes), + ], ); self.insert_into_block(insert_point, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpWritePackedPrimitiveIndices4x8NV instruction to the current block."] - pub fn write_packed_primitive_indices4x8_nv( + #[doc = "Appends an OpHitObjectRecordMissMotionNV instruction to the current block."] + pub fn hit_object_record_miss_motion_nv( &mut self, - index_offset: spirv::Word, - packed_indices: spirv::Word, + hit_object: spirv::Word, + sbt_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + current_time: spirv::Word, ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::WritePackedPrimitiveIndices4x8NV, + spirv::Op::HitObjectRecordMissMotionNV, None, None, vec![ - dr::Operand::IdRef(index_offset), - dr::Operand::IdRef(packed_indices), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(sbt_index), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(current_time), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(()) } - #[doc = "Appends an OpWritePackedPrimitiveIndices4x8NV instruction to the current block."] - pub fn insert_write_packed_primitive_indices4x8_nv( + #[doc = "Appends an OpHitObjectRecordMissMotionNV instruction to the current block."] + pub fn insert_hit_object_record_miss_motion_nv( &mut self, insert_point: InsertPoint, - index_offset: spirv::Word, - packed_indices: spirv::Word, + hit_object: spirv::Word, + sbt_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + current_time: spirv::Word, ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::WritePackedPrimitiveIndices4x8NV, + spirv::Op::HitObjectRecordMissMotionNV, None, None, vec![ - dr::Operand::IdRef(index_offset), - dr::Operand::IdRef(packed_indices), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(sbt_index), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(current_time), ], ); self.insert_into_block(insert_point, inst)?; Ok(()) } - #[doc = "Appends an OpReportIntersectionKHR instruction to the current block."] - pub fn report_intersection_khr( + #[doc = "Appends an OpHitObjectGetWorldToObjectNV instruction to the current block."] + pub fn hit_object_get_world_to_object_nv( &mut self, result_type: spirv::Word, result_id: Option, - hit: spirv::Word, - hit_kind: spirv::Word, + hit_object: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ReportIntersectionKHR, + spirv::Op::HitObjectGetWorldToObjectNV, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(hit), dr::Operand::IdRef(hit_kind)], + vec![dr::Operand::IdRef(hit_object)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpReportIntersectionKHR instruction to the current block."] - pub fn insert_report_intersection_khr( + #[doc = "Appends an OpHitObjectGetWorldToObjectNV instruction to the current block."] + pub fn insert_hit_object_get_world_to_object_nv( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - hit: spirv::Word, - hit_kind: spirv::Word, + hit_object: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ReportIntersectionKHR, + spirv::Op::HitObjectGetWorldToObjectNV, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(hit), dr::Operand::IdRef(hit_kind)], + vec![dr::Operand::IdRef(hit_object)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpReportIntersectionNV instruction to the current block."] - pub fn report_intersection_nv( + #[doc = "Appends an OpHitObjectGetObjectToWorldNV instruction to the current block."] + pub fn hit_object_get_object_to_world_nv( &mut self, result_type: spirv::Word, result_id: Option, - hit: spirv::Word, - hit_kind: spirv::Word, + hit_object: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ReportIntersectionNV, + spirv::Op::HitObjectGetObjectToWorldNV, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(hit), dr::Operand::IdRef(hit_kind)], + vec![dr::Operand::IdRef(hit_object)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpReportIntersectionNV instruction to the current block."] - pub fn insert_report_intersection_nv( + #[doc = "Appends an OpHitObjectGetObjectToWorldNV instruction to the current block."] + pub fn insert_hit_object_get_object_to_world_nv( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - hit: spirv::Word, - hit_kind: spirv::Word, + hit_object: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ReportIntersectionNV, + spirv::Op::HitObjectGetObjectToWorldNV, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(hit), dr::Operand::IdRef(hit_kind)], + vec![dr::Operand::IdRef(hit_object)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpIgnoreIntersectionNV instruction to the current block."] - pub fn ignore_intersection_nv(&mut self) -> BuildResult<()> { + #[doc = "Appends an OpHitObjectGetObjectRayDirectionNV instruction to the current block."] + pub fn hit_object_get_object_ray_direction_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] - let mut inst = dr::Instruction::new(spirv::Op::IgnoreIntersectionNV, None, None, vec![]); + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetObjectRayDirectionNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpIgnoreIntersectionNV instruction to the current block."] - pub fn insert_ignore_intersection_nv(&mut self, insert_point: InsertPoint) -> BuildResult<()> { + #[doc = "Appends an OpHitObjectGetObjectRayDirectionNV instruction to the current block."] + pub fn insert_hit_object_get_object_ray_direction_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] - let mut inst = dr::Instruction::new(spirv::Op::IgnoreIntersectionNV, None, None, vec![]); + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetObjectRayDirectionNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); self.insert_into_block(insert_point, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpTerminateRayNV instruction to the current block."] - pub fn terminate_ray_nv(&mut self) -> BuildResult<()> { + #[doc = "Appends an OpHitObjectGetObjectRayOriginNV instruction to the current block."] + pub fn hit_object_get_object_ray_origin_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] - let mut inst = dr::Instruction::new(spirv::Op::TerminateRayNV, None, None, vec![]); + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetObjectRayOriginNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpTerminateRayNV instruction to the current block."] - pub fn insert_terminate_ray_nv(&mut self, insert_point: InsertPoint) -> BuildResult<()> { + #[doc = "Appends an OpHitObjectGetObjectRayOriginNV instruction to the current block."] + pub fn insert_hit_object_get_object_ray_origin_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] - let mut inst = dr::Instruction::new(spirv::Op::TerminateRayNV, None, None, vec![]); + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetObjectRayOriginNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); self.insert_into_block(insert_point, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpTraceNV instruction to the current block."] - pub fn trace_nv( + #[doc = "Appends an OpHitObjectTraceRayMotionNV instruction to the current block."] + pub fn hit_object_trace_ray_motion_nv( &mut self, - accel: spirv::Word, + hit_object: spirv::Word, + acceleration_structure: spirv::Word, ray_flags: spirv::Word, - cull_mask: spirv::Word, - sbt_offset: spirv::Word, - sbt_stride: spirv::Word, + cullmask: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, miss_index: spirv::Word, - ray_origin: spirv::Word, - ray_tmin: spirv::Word, - ray_direction: spirv::Word, - ray_tmax: spirv::Word, - payload_id: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + time: spirv::Word, + payload: spirv::Word, ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::TraceNV, + spirv::Op::HitObjectTraceRayMotionNV, None, None, vec![ - dr::Operand::IdRef(accel), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), dr::Operand::IdRef(ray_flags), - dr::Operand::IdRef(cull_mask), - dr::Operand::IdRef(sbt_offset), - dr::Operand::IdRef(sbt_stride), + dr::Operand::IdRef(cullmask), + dr::Operand::IdRef(sbt_record_offset), + dr::Operand::IdRef(sbt_record_stride), dr::Operand::IdRef(miss_index), - dr::Operand::IdRef(ray_origin), - dr::Operand::IdRef(ray_tmin), - dr::Operand::IdRef(ray_direction), - dr::Operand::IdRef(ray_tmax), - dr::Operand::IdRef(payload_id), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(time), + dr::Operand::IdRef(payload), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(()) } - #[doc = "Appends an OpTraceNV instruction to the current block."] - pub fn insert_trace_nv( + #[doc = "Appends an OpHitObjectTraceRayMotionNV instruction to the current block."] + pub fn insert_hit_object_trace_ray_motion_nv( &mut self, insert_point: InsertPoint, - accel: spirv::Word, + hit_object: spirv::Word, + acceleration_structure: spirv::Word, ray_flags: spirv::Word, - cull_mask: spirv::Word, - sbt_offset: spirv::Word, - sbt_stride: spirv::Word, + cullmask: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, miss_index: spirv::Word, - ray_origin: spirv::Word, - ray_tmin: spirv::Word, - ray_direction: spirv::Word, - ray_tmax: spirv::Word, - payload_id: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + time: spirv::Word, + payload: spirv::Word, ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::TraceNV, + spirv::Op::HitObjectTraceRayMotionNV, None, None, vec![ - dr::Operand::IdRef(accel), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), dr::Operand::IdRef(ray_flags), - dr::Operand::IdRef(cull_mask), - dr::Operand::IdRef(sbt_offset), - dr::Operand::IdRef(sbt_stride), + dr::Operand::IdRef(cullmask), + dr::Operand::IdRef(sbt_record_offset), + dr::Operand::IdRef(sbt_record_stride), dr::Operand::IdRef(miss_index), - dr::Operand::IdRef(ray_origin), - dr::Operand::IdRef(ray_tmin), - dr::Operand::IdRef(ray_direction), - dr::Operand::IdRef(ray_tmax), - dr::Operand::IdRef(payload_id), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(time), + dr::Operand::IdRef(payload), ], ); self.insert_into_block(insert_point, inst)?; Ok(()) } - #[doc = "Appends an OpTraceMotionNV instruction to the current block."] - pub fn trace_motion_nv( + #[doc = "Appends an OpHitObjectGetShaderRecordBufferHandleNV instruction to the current block."] + pub fn hit_object_get_shader_record_buffer_handle_nv( &mut self, - accel: spirv::Word, - ray_flags: spirv::Word, - cull_mask: spirv::Word, - sbt_offset: spirv::Word, - sbt_stride: spirv::Word, - miss_index: spirv::Word, - ray_origin: spirv::Word, - ray_tmin: spirv::Word, - ray_direction: spirv::Word, - ray_tmax: spirv::Word, - time: spirv::Word, - payload_id: spirv::Word, - ) -> BuildResult<()> { + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::TraceMotionNV, - None, - None, - vec![ - dr::Operand::IdRef(accel), - dr::Operand::IdRef(ray_flags), - dr::Operand::IdRef(cull_mask), - dr::Operand::IdRef(sbt_offset), - dr::Operand::IdRef(sbt_stride), - dr::Operand::IdRef(miss_index), - dr::Operand::IdRef(ray_origin), - dr::Operand::IdRef(ray_tmin), - dr::Operand::IdRef(ray_direction), - dr::Operand::IdRef(ray_tmax), - dr::Operand::IdRef(time), - dr::Operand::IdRef(payload_id), - ], + spirv::Op::HitObjectGetShaderRecordBufferHandleNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpTraceMotionNV instruction to the current block."] - pub fn insert_trace_motion_nv( + #[doc = "Appends an OpHitObjectGetShaderRecordBufferHandleNV instruction to the current block."] + pub fn insert_hit_object_get_shader_record_buffer_handle_nv( &mut self, insert_point: InsertPoint, - accel: spirv::Word, - ray_flags: spirv::Word, - cull_mask: spirv::Word, - sbt_offset: spirv::Word, - sbt_stride: spirv::Word, - miss_index: spirv::Word, - ray_origin: spirv::Word, - ray_tmin: spirv::Word, - ray_direction: spirv::Word, - ray_tmax: spirv::Word, - time: spirv::Word, - payload_id: spirv::Word, - ) -> BuildResult<()> { + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::TraceMotionNV, + spirv::Op::HitObjectGetShaderRecordBufferHandleNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetShaderBindingTableRecordIndexNV instruction to the current block."] + pub fn hit_object_get_shader_binding_table_record_index_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetShaderBindingTableRecordIndexNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetShaderBindingTableRecordIndexNV instruction to the current block."] + pub fn insert_hit_object_get_shader_binding_table_record_index_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetShaderBindingTableRecordIndexNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectRecordEmptyNV instruction to the current block."] + pub fn hit_object_record_empty_nv(&mut self, hit_object: spirv::Word) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectRecordEmptyNV, None, None, - vec![ - dr::Operand::IdRef(accel), - dr::Operand::IdRef(ray_flags), - dr::Operand::IdRef(cull_mask), - dr::Operand::IdRef(sbt_offset), - dr::Operand::IdRef(sbt_stride), - dr::Operand::IdRef(miss_index), - dr::Operand::IdRef(ray_origin), - dr::Operand::IdRef(ray_tmin), - dr::Operand::IdRef(ray_direction), - dr::Operand::IdRef(ray_tmax), - dr::Operand::IdRef(time), - dr::Operand::IdRef(payload_id), - ], + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpHitObjectRecordEmptyNV instruction to the current block."] + pub fn insert_hit_object_record_empty_nv( + &mut self, + insert_point: InsertPoint, + hit_object: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectRecordEmptyNV, + None, + None, + vec![dr::Operand::IdRef(hit_object)], ); self.insert_into_block(insert_point, inst)?; Ok(()) } - #[doc = "Appends an OpTraceRayMotionNV instruction to the current block."] - pub fn trace_ray_motion_nv( + #[doc = "Appends an OpHitObjectTraceRayNV instruction to the current block."] + pub fn hit_object_trace_ray_nv( &mut self, - accel: spirv::Word, + hit_object: spirv::Word, + acceleration_structure: spirv::Word, ray_flags: spirv::Word, - cull_mask: spirv::Word, - sbt_offset: spirv::Word, - sbt_stride: spirv::Word, + cullmask: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, miss_index: spirv::Word, - ray_origin: spirv::Word, - ray_tmin: spirv::Word, - ray_direction: spirv::Word, - ray_tmax: spirv::Word, - time: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, payload: spirv::Word, ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::TraceRayMotionNV, + spirv::Op::HitObjectTraceRayNV, None, None, vec![ - dr::Operand::IdRef(accel), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), dr::Operand::IdRef(ray_flags), - dr::Operand::IdRef(cull_mask), - dr::Operand::IdRef(sbt_offset), - dr::Operand::IdRef(sbt_stride), + dr::Operand::IdRef(cullmask), + dr::Operand::IdRef(sbt_record_offset), + dr::Operand::IdRef(sbt_record_stride), dr::Operand::IdRef(miss_index), - dr::Operand::IdRef(ray_origin), - dr::Operand::IdRef(ray_tmin), - dr::Operand::IdRef(ray_direction), - dr::Operand::IdRef(ray_tmax), - dr::Operand::IdRef(time), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), dr::Operand::IdRef(payload), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(()) } - #[doc = "Appends an OpTraceRayMotionNV instruction to the current block."] - pub fn insert_trace_ray_motion_nv( + #[doc = "Appends an OpHitObjectTraceRayNV instruction to the current block."] + pub fn insert_hit_object_trace_ray_nv( &mut self, insert_point: InsertPoint, - accel: spirv::Word, + hit_object: spirv::Word, + acceleration_structure: spirv::Word, ray_flags: spirv::Word, - cull_mask: spirv::Word, - sbt_offset: spirv::Word, - sbt_stride: spirv::Word, + cullmask: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, miss_index: spirv::Word, - ray_origin: spirv::Word, - ray_tmin: spirv::Word, - ray_direction: spirv::Word, - ray_tmax: spirv::Word, - time: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, payload: spirv::Word, ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::TraceRayMotionNV, + spirv::Op::HitObjectTraceRayNV, None, None, vec![ - dr::Operand::IdRef(accel), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), dr::Operand::IdRef(ray_flags), - dr::Operand::IdRef(cull_mask), - dr::Operand::IdRef(sbt_offset), - dr::Operand::IdRef(sbt_stride), + dr::Operand::IdRef(cullmask), + dr::Operand::IdRef(sbt_record_offset), + dr::Operand::IdRef(sbt_record_stride), dr::Operand::IdRef(miss_index), - dr::Operand::IdRef(ray_origin), - dr::Operand::IdRef(ray_tmin), - dr::Operand::IdRef(ray_direction), - dr::Operand::IdRef(ray_tmax), - dr::Operand::IdRef(time), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), dr::Operand::IdRef(payload), ], ); self.insert_into_block(insert_point, inst)?; Ok(()) } - #[doc = "Appends an OpExecuteCallableNV instruction to the current block."] - pub fn execute_callable_nv( + #[doc = "Appends an OpHitObjectRecordHitNV instruction to the current block."] + pub fn hit_object_record_hit_nv( &mut self, - sbt_index: spirv::Word, - callable_data_id: spirv::Word, + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + hit_object_attributes: spirv::Word, ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ExecuteCallableNV, + spirv::Op::HitObjectRecordHitNV, None, None, vec![ - dr::Operand::IdRef(sbt_index), - dr::Operand::IdRef(callable_data_id), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), + dr::Operand::IdRef(instance_id), + dr::Operand::IdRef(primitive_id), + dr::Operand::IdRef(geometry_index), + dr::Operand::IdRef(hit_kind), + dr::Operand::IdRef(sbt_record_offset), + dr::Operand::IdRef(sbt_record_stride), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(hit_object_attributes), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(()) } - #[doc = "Appends an OpExecuteCallableNV instruction to the current block."] - pub fn insert_execute_callable_nv( + #[doc = "Appends an OpHitObjectRecordHitNV instruction to the current block."] + pub fn insert_hit_object_record_hit_nv( &mut self, insert_point: InsertPoint, - sbt_index: spirv::Word, - callable_data_id: spirv::Word, + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + hit_object_attributes: spirv::Word, ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ExecuteCallableNV, + spirv::Op::HitObjectRecordHitNV, None, None, vec![ - dr::Operand::IdRef(sbt_index), - dr::Operand::IdRef(callable_data_id), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), + dr::Operand::IdRef(instance_id), + dr::Operand::IdRef(primitive_id), + dr::Operand::IdRef(geometry_index), + dr::Operand::IdRef(hit_kind), + dr::Operand::IdRef(sbt_record_offset), + dr::Operand::IdRef(sbt_record_stride), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(hit_object_attributes), ], ); self.insert_into_block(insert_point, inst)?; Ok(()) } - #[doc = "Appends an OpCooperativeMatrixLoadNV instruction to the current block."] - pub fn cooperative_matrix_load_nv( + #[doc = "Appends an OpHitObjectRecordHitWithIndexNV instruction to the current block."] + pub fn hit_object_record_hit_with_index_nv( &mut self, - result_type: spirv::Word, - result_id: Option, - pointer: spirv::Word, - stride: spirv::Word, - column_major: spirv::Word, - memory_access: Option, - additional_params: impl IntoIterator, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + hit_object_attributes: spirv::Word, + ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::CooperativeMatrixLoadNV, - Some(result_type), - Some(_id), + spirv::Op::HitObjectRecordHitWithIndexNV, + None, + None, vec![ - dr::Operand::IdRef(pointer), - dr::Operand::IdRef(stride), - dr::Operand::IdRef(column_major), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), + dr::Operand::IdRef(instance_id), + dr::Operand::IdRef(primitive_id), + dr::Operand::IdRef(geometry_index), + dr::Operand::IdRef(hit_kind), + dr::Operand::IdRef(sbt_record_index), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(hit_object_attributes), ], ); - if let Some(v) = memory_access { - inst.operands.push(dr::Operand::MemoryAccess(v)); - } - inst.operands.extend(additional_params); self.insert_into_block(InsertPoint::End, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpCooperativeMatrixLoadNV instruction to the current block."] - pub fn insert_cooperative_matrix_load_nv( + #[doc = "Appends an OpHitObjectRecordHitWithIndexNV instruction to the current block."] + pub fn insert_hit_object_record_hit_with_index_nv( &mut self, insert_point: InsertPoint, - result_type: spirv::Word, - result_id: Option, - pointer: spirv::Word, - stride: spirv::Word, - column_major: spirv::Word, - memory_access: Option, - additional_params: impl IntoIterator, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + hit_object_attributes: spirv::Word, + ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::CooperativeMatrixLoadNV, - Some(result_type), - Some(_id), + spirv::Op::HitObjectRecordHitWithIndexNV, + None, + None, vec![ - dr::Operand::IdRef(pointer), - dr::Operand::IdRef(stride), - dr::Operand::IdRef(column_major), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(acceleration_structure), + dr::Operand::IdRef(instance_id), + dr::Operand::IdRef(primitive_id), + dr::Operand::IdRef(geometry_index), + dr::Operand::IdRef(hit_kind), + dr::Operand::IdRef(sbt_record_index), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), + dr::Operand::IdRef(hit_object_attributes), ], ); - if let Some(v) = memory_access { - inst.operands.push(dr::Operand::MemoryAccess(v)); - } - inst.operands.extend(additional_params); self.insert_into_block(insert_point, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpCooperativeMatrixStoreNV instruction to the current block."] - pub fn cooperative_matrix_store_nv( + #[doc = "Appends an OpHitObjectRecordMissNV instruction to the current block."] + pub fn hit_object_record_miss_nv( &mut self, - pointer: spirv::Word, - object: spirv::Word, - stride: spirv::Word, - column_major: spirv::Word, - memory_access: Option, - additional_params: impl IntoIterator, + hit_object: spirv::Word, + sbt_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::CooperativeMatrixStoreNV, + spirv::Op::HitObjectRecordMissNV, None, None, vec![ - dr::Operand::IdRef(pointer), - dr::Operand::IdRef(object), - dr::Operand::IdRef(stride), - dr::Operand::IdRef(column_major), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(sbt_index), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), ], ); - if let Some(v) = memory_access { - inst.operands.push(dr::Operand::MemoryAccess(v)); - } - inst.operands.extend(additional_params); self.insert_into_block(InsertPoint::End, inst)?; Ok(()) } - #[doc = "Appends an OpCooperativeMatrixStoreNV instruction to the current block."] - pub fn insert_cooperative_matrix_store_nv( + #[doc = "Appends an OpHitObjectRecordMissNV instruction to the current block."] + pub fn insert_hit_object_record_miss_nv( &mut self, insert_point: InsertPoint, - pointer: spirv::Word, - object: spirv::Word, - stride: spirv::Word, - column_major: spirv::Word, - memory_access: Option, - additional_params: impl IntoIterator, + hit_object: spirv::Word, + sbt_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::CooperativeMatrixStoreNV, + spirv::Op::HitObjectRecordMissNV, None, None, vec![ - dr::Operand::IdRef(pointer), - dr::Operand::IdRef(object), - dr::Operand::IdRef(stride), - dr::Operand::IdRef(column_major), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(sbt_index), + dr::Operand::IdRef(origin), + dr::Operand::IdRef(t_min), + dr::Operand::IdRef(direction), + dr::Operand::IdRef(t_max), ], ); - if let Some(v) = memory_access { - inst.operands.push(dr::Operand::MemoryAccess(v)); - } - inst.operands.extend(additional_params); self.insert_into_block(insert_point, inst)?; Ok(()) } - #[doc = "Appends an OpCooperativeMatrixMulAddNV instruction to the current block."] - pub fn cooperative_matrix_mul_add_nv( + #[doc = "Appends an OpHitObjectExecuteShaderNV instruction to the current block."] + pub fn hit_object_execute_shader_nv( &mut self, - result_type: spirv::Word, - result_id: Option, - a: spirv::Word, - b: spirv::Word, - c: spirv::Word, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + hit_object: spirv::Word, + payload: spirv::Word, + ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::CooperativeMatrixMulAddNV, - Some(result_type), - Some(_id), - vec![ - dr::Operand::IdRef(a), - dr::Operand::IdRef(b), - dr::Operand::IdRef(c), - ], + spirv::Op::HitObjectExecuteShaderNV, + None, + None, + vec![dr::Operand::IdRef(hit_object), dr::Operand::IdRef(payload)], ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpCooperativeMatrixMulAddNV instruction to the current block."] - pub fn insert_cooperative_matrix_mul_add_nv( + #[doc = "Appends an OpHitObjectExecuteShaderNV instruction to the current block."] + pub fn insert_hit_object_execute_shader_nv( &mut self, insert_point: InsertPoint, + hit_object: spirv::Word, + payload: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectExecuteShaderNV, + None, + None, + vec![dr::Operand::IdRef(hit_object), dr::Operand::IdRef(payload)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpHitObjectGetCurrentTimeNV instruction to the current block."] + pub fn hit_object_get_current_time_nv( + &mut self, result_type: spirv::Word, result_id: Option, - a: spirv::Word, - b: spirv::Word, - c: spirv::Word, + hit_object: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::CooperativeMatrixMulAddNV, + spirv::Op::HitObjectGetCurrentTimeNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetCurrentTimeNV instruction to the current block."] + pub fn insert_hit_object_get_current_time_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetCurrentTimeNV, Some(result_type), Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetAttributesNV instruction to the current block."] + pub fn hit_object_get_attributes_nv( + &mut self, + hit_object: spirv::Word, + hit_object_attribute: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetAttributesNV, + None, + None, vec![ - dr::Operand::IdRef(a), - dr::Operand::IdRef(b), - dr::Operand::IdRef(c), + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(hit_object_attribute), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpHitObjectGetAttributesNV instruction to the current block."] + pub fn insert_hit_object_get_attributes_nv( + &mut self, + insert_point: InsertPoint, + hit_object: spirv::Word, + hit_object_attribute: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetAttributesNV, + None, + None, + vec![ + dr::Operand::IdRef(hit_object), + dr::Operand::IdRef(hit_object_attribute), ], ); self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpHitObjectGetHitKindNV instruction to the current block."] + pub fn hit_object_get_hit_kind_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetHitKindNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetHitKindNV instruction to the current block."] + pub fn insert_hit_object_get_hit_kind_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetHitKindNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpCooperativeMatrixLengthNV instruction to the current block."] - pub fn cooperative_matrix_length_nv( + #[doc = "Appends an OpHitObjectGetPrimitiveIndexNV instruction to the current block."] + pub fn hit_object_get_primitive_index_nv( &mut self, result_type: spirv::Word, result_id: Option, - ty: spirv::Word, + hit_object: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::CooperativeMatrixLengthNV, + spirv::Op::HitObjectGetPrimitiveIndexNV, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ty)], + vec![dr::Operand::IdRef(hit_object)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpCooperativeMatrixLengthNV instruction to the current block."] - pub fn insert_cooperative_matrix_length_nv( + #[doc = "Appends an OpHitObjectGetPrimitiveIndexNV instruction to the current block."] + pub fn insert_hit_object_get_primitive_index_nv( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ty: spirv::Word, + hit_object: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::CooperativeMatrixLengthNV, + spirv::Op::HitObjectGetPrimitiveIndexNV, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ty)], + vec![dr::Operand::IdRef(hit_object)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpBeginInvocationInterlockEXT instruction to the current block."] - pub fn begin_invocation_interlock_ext(&mut self) -> BuildResult<()> { + #[doc = "Appends an OpHitObjectGetGeometryIndexNV instruction to the current block."] + pub fn hit_object_get_geometry_index_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] - let mut inst = - dr::Instruction::new(spirv::Op::BeginInvocationInterlockEXT, None, None, vec![]); + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetGeometryIndexNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpBeginInvocationInterlockEXT instruction to the current block."] - pub fn insert_begin_invocation_interlock_ext( + #[doc = "Appends an OpHitObjectGetGeometryIndexNV instruction to the current block."] + pub fn insert_hit_object_get_geometry_index_nv( &mut self, insert_point: InsertPoint, - ) -> BuildResult<()> { + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] - let mut inst = - dr::Instruction::new(spirv::Op::BeginInvocationInterlockEXT, None, None, vec![]); + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetGeometryIndexNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); self.insert_into_block(insert_point, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpEndInvocationInterlockEXT instruction to the current block."] - pub fn end_invocation_interlock_ext(&mut self) -> BuildResult<()> { + #[doc = "Appends an OpHitObjectGetInstanceIdNV instruction to the current block."] + pub fn hit_object_get_instance_id_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] - let mut inst = - dr::Instruction::new(spirv::Op::EndInvocationInterlockEXT, None, None, vec![]); + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetInstanceIdNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpEndInvocationInterlockEXT instruction to the current block."] - pub fn insert_end_invocation_interlock_ext( + #[doc = "Appends an OpHitObjectGetInstanceIdNV instruction to the current block."] + pub fn insert_hit_object_get_instance_id_nv( &mut self, insert_point: InsertPoint, - ) -> BuildResult<()> { + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] - let mut inst = - dr::Instruction::new(spirv::Op::EndInvocationInterlockEXT, None, None, vec![]); + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetInstanceIdNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); self.insert_into_block(insert_point, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpDemoteToHelperInvocationEXT instruction to the current block."] - pub fn demote_to_helper_invocation_ext(&mut self) -> BuildResult<()> { + #[doc = "Appends an OpHitObjectGetInstanceCustomIndexNV instruction to the current block."] + pub fn hit_object_get_instance_custom_index_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] - let mut inst = - dr::Instruction::new(spirv::Op::DemoteToHelperInvocationEXT, None, None, vec![]); + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetInstanceCustomIndexNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpDemoteToHelperInvocationEXT instruction to the current block."] - pub fn insert_demote_to_helper_invocation_ext( + #[doc = "Appends an OpHitObjectGetInstanceCustomIndexNV instruction to the current block."] + pub fn insert_hit_object_get_instance_custom_index_nv( &mut self, insert_point: InsertPoint, - ) -> BuildResult<()> { + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] - let mut inst = - dr::Instruction::new(spirv::Op::DemoteToHelperInvocationEXT, None, None, vec![]); + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetInstanceCustomIndexNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetWorldRayDirectionNV instruction to the current block."] + pub fn hit_object_get_world_ray_direction_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetWorldRayDirectionNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetWorldRayDirectionNV instruction to the current block."] + pub fn insert_hit_object_get_world_ray_direction_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetWorldRayDirectionNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetWorldRayOriginNV instruction to the current block."] + pub fn hit_object_get_world_ray_origin_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetWorldRayOriginNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetWorldRayOriginNV instruction to the current block."] + pub fn insert_hit_object_get_world_ray_origin_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetWorldRayOriginNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetRayTMaxNV instruction to the current block."] + pub fn hit_object_get_ray_t_max_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetRayTMaxNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetRayTMaxNV instruction to the current block."] + pub fn insert_hit_object_get_ray_t_max_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetRayTMaxNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetRayTMinNV instruction to the current block."] + pub fn hit_object_get_ray_t_min_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetRayTMinNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectGetRayTMinNV instruction to the current block."] + pub fn insert_hit_object_get_ray_t_min_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectGetRayTMinNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectIsEmptyNV instruction to the current block."] + pub fn hit_object_is_empty_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectIsEmptyNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectIsEmptyNV instruction to the current block."] + pub fn insert_hit_object_is_empty_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectIsEmptyNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectIsHitNV instruction to the current block."] + pub fn hit_object_is_hit_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectIsHitNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectIsHitNV instruction to the current block."] + pub fn insert_hit_object_is_hit_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectIsHitNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectIsMissNV instruction to the current block."] + pub fn hit_object_is_miss_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectIsMissNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpHitObjectIsMissNV instruction to the current block."] + pub fn insert_hit_object_is_miss_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit_object: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::HitObjectIsMissNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit_object)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpReorderThreadWithHitObjectNV instruction to the current block."] + pub fn reorder_thread_with_hit_object_nv( + &mut self, + hit_object: spirv::Word, + hint: Option, + bits: Option, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ReorderThreadWithHitObjectNV, + None, + None, + vec![dr::Operand::IdRef(hit_object)], + ); + if let Some(v) = hint { + inst.operands.push(dr::Operand::IdRef(v)); + } + if let Some(v) = bits { + inst.operands.push(dr::Operand::IdRef(v)); + } + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpReorderThreadWithHitObjectNV instruction to the current block."] + pub fn insert_reorder_thread_with_hit_object_nv( + &mut self, + insert_point: InsertPoint, + hit_object: spirv::Word, + hint: Option, + bits: Option, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ReorderThreadWithHitObjectNV, + None, + None, + vec![dr::Operand::IdRef(hit_object)], + ); + if let Some(v) = hint { + inst.operands.push(dr::Operand::IdRef(v)); + } + if let Some(v) = bits { + inst.operands.push(dr::Operand::IdRef(v)); + } + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpReorderThreadWithHintNV instruction to the current block."] + pub fn reorder_thread_with_hint_nv( + &mut self, + hint: spirv::Word, + bits: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ReorderThreadWithHintNV, + None, + None, + vec![dr::Operand::IdRef(hint), dr::Operand::IdRef(bits)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpReorderThreadWithHintNV instruction to the current block."] + pub fn insert_reorder_thread_with_hint_nv( + &mut self, + insert_point: InsertPoint, + hint: spirv::Word, + bits: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ReorderThreadWithHintNV, + None, + None, + vec![dr::Operand::IdRef(hint), dr::Operand::IdRef(bits)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpImageSampleFootprintNV instruction to the current block."] + pub fn image_sample_footprint_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + sampled_image: spirv::Word, + coordinate: spirv::Word, + granularity: spirv::Word, + coarse: spirv::Word, + image_operands: Option, + additional_params: impl IntoIterator, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ImageSampleFootprintNV, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(sampled_image), + dr::Operand::IdRef(coordinate), + dr::Operand::IdRef(granularity), + dr::Operand::IdRef(coarse), + ], + ); + if let Some(v) = image_operands { + inst.operands.push(dr::Operand::ImageOperands(v)); + } + inst.operands.extend(additional_params); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpImageSampleFootprintNV instruction to the current block."] + pub fn insert_image_sample_footprint_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + sampled_image: spirv::Word, + coordinate: spirv::Word, + granularity: spirv::Word, + coarse: spirv::Word, + image_operands: Option, + additional_params: impl IntoIterator, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ImageSampleFootprintNV, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(sampled_image), + dr::Operand::IdRef(coordinate), + dr::Operand::IdRef(granularity), + dr::Operand::IdRef(coarse), + ], + ); + if let Some(v) = image_operands { + inst.operands.push(dr::Operand::ImageOperands(v)); + } + inst.operands.extend(additional_params); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSetMeshOutputsEXT instruction to the current block."] + pub fn set_mesh_outputs_ext( + &mut self, + vertex_count: spirv::Word, + primitive_count: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SetMeshOutputsEXT, + None, + None, + vec![ + dr::Operand::IdRef(vertex_count), + dr::Operand::IdRef(primitive_count), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpSetMeshOutputsEXT instruction to the current block."] + pub fn insert_set_mesh_outputs_ext( + &mut self, + insert_point: InsertPoint, + vertex_count: spirv::Word, + primitive_count: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SetMeshOutputsEXT, + None, + None, + vec![ + dr::Operand::IdRef(vertex_count), + dr::Operand::IdRef(primitive_count), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpGroupNonUniformPartitionNV instruction to the current block."] + pub fn group_non_uniform_partition_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + value: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupNonUniformPartitionNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(value)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpGroupNonUniformPartitionNV instruction to the current block."] + pub fn insert_group_non_uniform_partition_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + value: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::GroupNonUniformPartitionNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(value)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpWritePackedPrimitiveIndices4x8NV instruction to the current block."] + pub fn write_packed_primitive_indices4x8_nv( + &mut self, + index_offset: spirv::Word, + packed_indices: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::WritePackedPrimitiveIndices4x8NV, + None, + None, + vec![ + dr::Operand::IdRef(index_offset), + dr::Operand::IdRef(packed_indices), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpWritePackedPrimitiveIndices4x8NV instruction to the current block."] + pub fn insert_write_packed_primitive_indices4x8_nv( + &mut self, + insert_point: InsertPoint, + index_offset: spirv::Word, + packed_indices: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::WritePackedPrimitiveIndices4x8NV, + None, + None, + vec![ + dr::Operand::IdRef(index_offset), + dr::Operand::IdRef(packed_indices), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpReportIntersectionKHR instruction to the current block."] + pub fn report_intersection_khr( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit: spirv::Word, + hit_kind: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ReportIntersectionKHR, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit), dr::Operand::IdRef(hit_kind)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpReportIntersectionKHR instruction to the current block."] + pub fn insert_report_intersection_khr( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit: spirv::Word, + hit_kind: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ReportIntersectionKHR, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit), dr::Operand::IdRef(hit_kind)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpReportIntersectionNV instruction to the current block."] + pub fn report_intersection_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + hit: spirv::Word, + hit_kind: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ReportIntersectionNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit), dr::Operand::IdRef(hit_kind)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpReportIntersectionNV instruction to the current block."] + pub fn insert_report_intersection_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + hit: spirv::Word, + hit_kind: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ReportIntersectionNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(hit), dr::Operand::IdRef(hit_kind)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpIgnoreIntersectionNV instruction to the current block."] + pub fn ignore_intersection_nv(&mut self) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new(spirv::Op::IgnoreIntersectionNV, None, None, vec![]); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpIgnoreIntersectionNV instruction to the current block."] + pub fn insert_ignore_intersection_nv(&mut self, insert_point: InsertPoint) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new(spirv::Op::IgnoreIntersectionNV, None, None, vec![]); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpTerminateRayNV instruction to the current block."] + pub fn terminate_ray_nv(&mut self) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new(spirv::Op::TerminateRayNV, None, None, vec![]); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpTerminateRayNV instruction to the current block."] + pub fn insert_terminate_ray_nv(&mut self, insert_point: InsertPoint) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new(spirv::Op::TerminateRayNV, None, None, vec![]); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpTraceNV instruction to the current block."] + pub fn trace_nv( + &mut self, + accel: spirv::Word, + ray_flags: spirv::Word, + cull_mask: spirv::Word, + sbt_offset: spirv::Word, + sbt_stride: spirv::Word, + miss_index: spirv::Word, + ray_origin: spirv::Word, + ray_tmin: spirv::Word, + ray_direction: spirv::Word, + ray_tmax: spirv::Word, + payload_id: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::TraceNV, + None, + None, + vec![ + dr::Operand::IdRef(accel), + dr::Operand::IdRef(ray_flags), + dr::Operand::IdRef(cull_mask), + dr::Operand::IdRef(sbt_offset), + dr::Operand::IdRef(sbt_stride), + dr::Operand::IdRef(miss_index), + dr::Operand::IdRef(ray_origin), + dr::Operand::IdRef(ray_tmin), + dr::Operand::IdRef(ray_direction), + dr::Operand::IdRef(ray_tmax), + dr::Operand::IdRef(payload_id), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpTraceNV instruction to the current block."] + pub fn insert_trace_nv( + &mut self, + insert_point: InsertPoint, + accel: spirv::Word, + ray_flags: spirv::Word, + cull_mask: spirv::Word, + sbt_offset: spirv::Word, + sbt_stride: spirv::Word, + miss_index: spirv::Word, + ray_origin: spirv::Word, + ray_tmin: spirv::Word, + ray_direction: spirv::Word, + ray_tmax: spirv::Word, + payload_id: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::TraceNV, + None, + None, + vec![ + dr::Operand::IdRef(accel), + dr::Operand::IdRef(ray_flags), + dr::Operand::IdRef(cull_mask), + dr::Operand::IdRef(sbt_offset), + dr::Operand::IdRef(sbt_stride), + dr::Operand::IdRef(miss_index), + dr::Operand::IdRef(ray_origin), + dr::Operand::IdRef(ray_tmin), + dr::Operand::IdRef(ray_direction), + dr::Operand::IdRef(ray_tmax), + dr::Operand::IdRef(payload_id), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpTraceMotionNV instruction to the current block."] + pub fn trace_motion_nv( + &mut self, + accel: spirv::Word, + ray_flags: spirv::Word, + cull_mask: spirv::Word, + sbt_offset: spirv::Word, + sbt_stride: spirv::Word, + miss_index: spirv::Word, + ray_origin: spirv::Word, + ray_tmin: spirv::Word, + ray_direction: spirv::Word, + ray_tmax: spirv::Word, + time: spirv::Word, + payload_id: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::TraceMotionNV, + None, + None, + vec![ + dr::Operand::IdRef(accel), + dr::Operand::IdRef(ray_flags), + dr::Operand::IdRef(cull_mask), + dr::Operand::IdRef(sbt_offset), + dr::Operand::IdRef(sbt_stride), + dr::Operand::IdRef(miss_index), + dr::Operand::IdRef(ray_origin), + dr::Operand::IdRef(ray_tmin), + dr::Operand::IdRef(ray_direction), + dr::Operand::IdRef(ray_tmax), + dr::Operand::IdRef(time), + dr::Operand::IdRef(payload_id), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpTraceMotionNV instruction to the current block."] + pub fn insert_trace_motion_nv( + &mut self, + insert_point: InsertPoint, + accel: spirv::Word, + ray_flags: spirv::Word, + cull_mask: spirv::Word, + sbt_offset: spirv::Word, + sbt_stride: spirv::Word, + miss_index: spirv::Word, + ray_origin: spirv::Word, + ray_tmin: spirv::Word, + ray_direction: spirv::Word, + ray_tmax: spirv::Word, + time: spirv::Word, + payload_id: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::TraceMotionNV, + None, + None, + vec![ + dr::Operand::IdRef(accel), + dr::Operand::IdRef(ray_flags), + dr::Operand::IdRef(cull_mask), + dr::Operand::IdRef(sbt_offset), + dr::Operand::IdRef(sbt_stride), + dr::Operand::IdRef(miss_index), + dr::Operand::IdRef(ray_origin), + dr::Operand::IdRef(ray_tmin), + dr::Operand::IdRef(ray_direction), + dr::Operand::IdRef(ray_tmax), + dr::Operand::IdRef(time), + dr::Operand::IdRef(payload_id), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpTraceRayMotionNV instruction to the current block."] + pub fn trace_ray_motion_nv( + &mut self, + accel: spirv::Word, + ray_flags: spirv::Word, + cull_mask: spirv::Word, + sbt_offset: spirv::Word, + sbt_stride: spirv::Word, + miss_index: spirv::Word, + ray_origin: spirv::Word, + ray_tmin: spirv::Word, + ray_direction: spirv::Word, + ray_tmax: spirv::Word, + time: spirv::Word, + payload: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::TraceRayMotionNV, + None, + None, + vec![ + dr::Operand::IdRef(accel), + dr::Operand::IdRef(ray_flags), + dr::Operand::IdRef(cull_mask), + dr::Operand::IdRef(sbt_offset), + dr::Operand::IdRef(sbt_stride), + dr::Operand::IdRef(miss_index), + dr::Operand::IdRef(ray_origin), + dr::Operand::IdRef(ray_tmin), + dr::Operand::IdRef(ray_direction), + dr::Operand::IdRef(ray_tmax), + dr::Operand::IdRef(time), + dr::Operand::IdRef(payload), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpTraceRayMotionNV instruction to the current block."] + pub fn insert_trace_ray_motion_nv( + &mut self, + insert_point: InsertPoint, + accel: spirv::Word, + ray_flags: spirv::Word, + cull_mask: spirv::Word, + sbt_offset: spirv::Word, + sbt_stride: spirv::Word, + miss_index: spirv::Word, + ray_origin: spirv::Word, + ray_tmin: spirv::Word, + ray_direction: spirv::Word, + ray_tmax: spirv::Word, + time: spirv::Word, + payload: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::TraceRayMotionNV, + None, + None, + vec![ + dr::Operand::IdRef(accel), + dr::Operand::IdRef(ray_flags), + dr::Operand::IdRef(cull_mask), + dr::Operand::IdRef(sbt_offset), + dr::Operand::IdRef(sbt_stride), + dr::Operand::IdRef(miss_index), + dr::Operand::IdRef(ray_origin), + dr::Operand::IdRef(ray_tmin), + dr::Operand::IdRef(ray_direction), + dr::Operand::IdRef(ray_tmax), + dr::Operand::IdRef(time), + dr::Operand::IdRef(payload), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpExecuteCallableNV instruction to the current block."] + pub fn execute_callable_nv( + &mut self, + sbt_index: spirv::Word, + callable_data_id: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ExecuteCallableNV, + None, + None, + vec![ + dr::Operand::IdRef(sbt_index), + dr::Operand::IdRef(callable_data_id), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpExecuteCallableNV instruction to the current block."] + pub fn insert_execute_callable_nv( + &mut self, + insert_point: InsertPoint, + sbt_index: spirv::Word, + callable_data_id: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ExecuteCallableNV, + None, + None, + vec![ + dr::Operand::IdRef(sbt_index), + dr::Operand::IdRef(callable_data_id), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpCooperativeMatrixLoadNV instruction to the current block."] + pub fn cooperative_matrix_load_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + pointer: spirv::Word, + stride: spirv::Word, + column_major: spirv::Word, + memory_access: Option, + additional_params: impl IntoIterator, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::CooperativeMatrixLoadNV, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(pointer), + dr::Operand::IdRef(stride), + dr::Operand::IdRef(column_major), + ], + ); + if let Some(v) = memory_access { + inst.operands.push(dr::Operand::MemoryAccess(v)); + } + inst.operands.extend(additional_params); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpCooperativeMatrixLoadNV instruction to the current block."] + pub fn insert_cooperative_matrix_load_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + pointer: spirv::Word, + stride: spirv::Word, + column_major: spirv::Word, + memory_access: Option, + additional_params: impl IntoIterator, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::CooperativeMatrixLoadNV, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(pointer), + dr::Operand::IdRef(stride), + dr::Operand::IdRef(column_major), + ], + ); + if let Some(v) = memory_access { + inst.operands.push(dr::Operand::MemoryAccess(v)); + } + inst.operands.extend(additional_params); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpCooperativeMatrixStoreNV instruction to the current block."] + pub fn cooperative_matrix_store_nv( + &mut self, + pointer: spirv::Word, + object: spirv::Word, + stride: spirv::Word, + column_major: spirv::Word, + memory_access: Option, + additional_params: impl IntoIterator, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::CooperativeMatrixStoreNV, + None, + None, + vec![ + dr::Operand::IdRef(pointer), + dr::Operand::IdRef(object), + dr::Operand::IdRef(stride), + dr::Operand::IdRef(column_major), + ], + ); + if let Some(v) = memory_access { + inst.operands.push(dr::Operand::MemoryAccess(v)); + } + inst.operands.extend(additional_params); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpCooperativeMatrixStoreNV instruction to the current block."] + pub fn insert_cooperative_matrix_store_nv( + &mut self, + insert_point: InsertPoint, + pointer: spirv::Word, + object: spirv::Word, + stride: spirv::Word, + column_major: spirv::Word, + memory_access: Option, + additional_params: impl IntoIterator, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::CooperativeMatrixStoreNV, + None, + None, + vec![ + dr::Operand::IdRef(pointer), + dr::Operand::IdRef(object), + dr::Operand::IdRef(stride), + dr::Operand::IdRef(column_major), + ], + ); + if let Some(v) = memory_access { + inst.operands.push(dr::Operand::MemoryAccess(v)); + } + inst.operands.extend(additional_params); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpCooperativeMatrixMulAddNV instruction to the current block."] + pub fn cooperative_matrix_mul_add_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + a: spirv::Word, + b: spirv::Word, + c: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::CooperativeMatrixMulAddNV, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(a), + dr::Operand::IdRef(b), + dr::Operand::IdRef(c), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpCooperativeMatrixMulAddNV instruction to the current block."] + pub fn insert_cooperative_matrix_mul_add_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + a: spirv::Word, + b: spirv::Word, + c: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::CooperativeMatrixMulAddNV, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(a), + dr::Operand::IdRef(b), + dr::Operand::IdRef(c), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpCooperativeMatrixLengthNV instruction to the current block."] + pub fn cooperative_matrix_length_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + ty: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::CooperativeMatrixLengthNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(ty)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpCooperativeMatrixLengthNV instruction to the current block."] + pub fn insert_cooperative_matrix_length_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + ty: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::CooperativeMatrixLengthNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(ty)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpBeginInvocationInterlockEXT instruction to the current block."] + pub fn begin_invocation_interlock_ext(&mut self) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = + dr::Instruction::new(spirv::Op::BeginInvocationInterlockEXT, None, None, vec![]); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpBeginInvocationInterlockEXT instruction to the current block."] + pub fn insert_begin_invocation_interlock_ext( + &mut self, + insert_point: InsertPoint, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = + dr::Instruction::new(spirv::Op::BeginInvocationInterlockEXT, None, None, vec![]); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpEndInvocationInterlockEXT instruction to the current block."] + pub fn end_invocation_interlock_ext(&mut self) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = + dr::Instruction::new(spirv::Op::EndInvocationInterlockEXT, None, None, vec![]); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpEndInvocationInterlockEXT instruction to the current block."] + pub fn insert_end_invocation_interlock_ext( + &mut self, + insert_point: InsertPoint, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = + dr::Instruction::new(spirv::Op::EndInvocationInterlockEXT, None, None, vec![]); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpIsHelperInvocationEXT instruction to the current block."] + pub fn is_helper_invocation_ext( + &mut self, + result_type: spirv::Word, + result_id: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::IsHelperInvocationEXT, + Some(result_type), + Some(_id), + vec![], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpIsHelperInvocationEXT instruction to the current block."] + pub fn insert_is_helper_invocation_ext( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::IsHelperInvocationEXT, + Some(result_type), + Some(_id), + vec![], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertUToImageNV instruction to the current block."] + pub fn convert_u_to_image_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertUToImageNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertUToImageNV instruction to the current block."] + pub fn insert_convert_u_to_image_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertUToImageNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertUToSamplerNV instruction to the current block."] + pub fn convert_u_to_sampler_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertUToSamplerNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertUToSamplerNV instruction to the current block."] + pub fn insert_convert_u_to_sampler_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertUToSamplerNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertImageToUNV instruction to the current block."] + pub fn convert_image_to_unv( + &mut self, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertImageToUNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertImageToUNV instruction to the current block."] + pub fn insert_convert_image_to_unv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertImageToUNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertSamplerToUNV instruction to the current block."] + pub fn convert_sampler_to_unv( + &mut self, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertSamplerToUNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertSamplerToUNV instruction to the current block."] + pub fn insert_convert_sampler_to_unv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertSamplerToUNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertUToSampledImageNV instruction to the current block."] + pub fn convert_u_to_sampled_image_nv( + &mut self, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertUToSampledImageNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertUToSampledImageNV instruction to the current block."] + pub fn insert_convert_u_to_sampled_image_nv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertUToSampledImageNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertSampledImageToUNV instruction to the current block."] + pub fn convert_sampled_image_to_unv( + &mut self, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertSampledImageToUNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertSampledImageToUNV instruction to the current block."] + pub fn insert_convert_sampled_image_to_unv( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + operand: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertSampledImageToUNV, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSubgroupShuffleINTEL instruction to the current block."] + pub fn subgroup_shuffle_intel( + &mut self, + result_type: spirv::Word, + result_id: Option, + data: spirv::Word, + invocation_id: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SubgroupShuffleINTEL, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(data), dr::Operand::IdRef(invocation_id)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSubgroupShuffleINTEL instruction to the current block."] + pub fn insert_subgroup_shuffle_intel( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + data: spirv::Word, + invocation_id: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SubgroupShuffleINTEL, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(data), dr::Operand::IdRef(invocation_id)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSubgroupShuffleDownINTEL instruction to the current block."] + pub fn subgroup_shuffle_down_intel( + &mut self, + result_type: spirv::Word, + result_id: Option, + current: spirv::Word, + next: spirv::Word, + delta: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SubgroupShuffleDownINTEL, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(current), + dr::Operand::IdRef(next), + dr::Operand::IdRef(delta), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSubgroupShuffleDownINTEL instruction to the current block."] + pub fn insert_subgroup_shuffle_down_intel( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + current: spirv::Word, + next: spirv::Word, + delta: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SubgroupShuffleDownINTEL, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(current), + dr::Operand::IdRef(next), + dr::Operand::IdRef(delta), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSubgroupShuffleUpINTEL instruction to the current block."] + pub fn subgroup_shuffle_up_intel( + &mut self, + result_type: spirv::Word, + result_id: Option, + previous: spirv::Word, + current: spirv::Word, + delta: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SubgroupShuffleUpINTEL, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(previous), + dr::Operand::IdRef(current), + dr::Operand::IdRef(delta), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpSubgroupShuffleUpINTEL instruction to the current block."] + pub fn insert_subgroup_shuffle_up_intel( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + previous: spirv::Word, + current: spirv::Word, + delta: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SubgroupShuffleUpINTEL, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(previous), + dr::Operand::IdRef(current), + dr::Operand::IdRef(delta), + ], + ); self.insert_into_block(insert_point, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpIsHelperInvocationEXT instruction to the current block."] - pub fn is_helper_invocation_ext( + #[doc = "Appends an OpSubgroupShuffleXorINTEL instruction to the current block."] + pub fn subgroup_shuffle_xor_intel( &mut self, result_type: spirv::Word, result_id: Option, + data: spirv::Word, + value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::IsHelperInvocationEXT, + spirv::Op::SubgroupShuffleXorINTEL, Some(result_type), Some(_id), - vec![], + vec![dr::Operand::IdRef(data), dr::Operand::IdRef(value)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpIsHelperInvocationEXT instruction to the current block."] - pub fn insert_is_helper_invocation_ext( + #[doc = "Appends an OpSubgroupShuffleXorINTEL instruction to the current block."] + pub fn insert_subgroup_shuffle_xor_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, + data: spirv::Word, + value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::IsHelperInvocationEXT, + spirv::Op::SubgroupShuffleXorINTEL, Some(result_type), Some(_id), - vec![], + vec![dr::Operand::IdRef(data), dr::Operand::IdRef(value)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpConvertUToImageNV instruction to the current block."] - pub fn convert_u_to_image_nv( + #[doc = "Appends an OpSubgroupBlockReadINTEL instruction to the current block."] + pub fn subgroup_block_read_intel( &mut self, result_type: spirv::Word, result_id: Option, - operand: spirv::Word, + ptr: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertUToImageNV, + spirv::Op::SubgroupBlockReadINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand)], + vec![dr::Operand::IdRef(ptr)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpConvertUToImageNV instruction to the current block."] - pub fn insert_convert_u_to_image_nv( + #[doc = "Appends an OpSubgroupBlockReadINTEL instruction to the current block."] + pub fn insert_subgroup_block_read_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand: spirv::Word, + ptr: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertUToImageNV, + spirv::Op::SubgroupBlockReadINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand)], + vec![dr::Operand::IdRef(ptr)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpConvertUToSamplerNV instruction to the current block."] - pub fn convert_u_to_sampler_nv( + #[doc = "Appends an OpSubgroupBlockWriteINTEL instruction to the current block."] + pub fn subgroup_block_write_intel( &mut self, - result_type: spirv::Word, - result_id: Option, - operand: spirv::Word, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + ptr: spirv::Word, + data: spirv::Word, + ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertUToSamplerNV, - Some(result_type), - Some(_id), - vec![dr::Operand::IdRef(operand)], + spirv::Op::SubgroupBlockWriteINTEL, + None, + None, + vec![dr::Operand::IdRef(ptr), dr::Operand::IdRef(data)], ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpConvertUToSamplerNV instruction to the current block."] - pub fn insert_convert_u_to_sampler_nv( + #[doc = "Appends an OpSubgroupBlockWriteINTEL instruction to the current block."] + pub fn insert_subgroup_block_write_intel( &mut self, insert_point: InsertPoint, - result_type: spirv::Word, - result_id: Option, - operand: spirv::Word, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + ptr: spirv::Word, + data: spirv::Word, + ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertUToSamplerNV, - Some(result_type), - Some(_id), - vec![dr::Operand::IdRef(operand)], + spirv::Op::SubgroupBlockWriteINTEL, + None, + None, + vec![dr::Operand::IdRef(ptr), dr::Operand::IdRef(data)], ); self.insert_into_block(insert_point, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpConvertImageToUNV instruction to the current block."] - pub fn convert_image_to_unv( + #[doc = "Appends an OpSubgroupImageBlockReadINTEL instruction to the current block."] + pub fn subgroup_image_block_read_intel( &mut self, result_type: spirv::Word, result_id: Option, - operand: spirv::Word, + image: spirv::Word, + coordinate: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertImageToUNV, + spirv::Op::SubgroupImageBlockReadINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand)], + vec![dr::Operand::IdRef(image), dr::Operand::IdRef(coordinate)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpConvertImageToUNV instruction to the current block."] - pub fn insert_convert_image_to_unv( + #[doc = "Appends an OpSubgroupImageBlockReadINTEL instruction to the current block."] + pub fn insert_subgroup_image_block_read_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand: spirv::Word, + image: spirv::Word, + coordinate: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertImageToUNV, + spirv::Op::SubgroupImageBlockReadINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand)], + vec![dr::Operand::IdRef(image), dr::Operand::IdRef(coordinate)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpConvertSamplerToUNV instruction to the current block."] - pub fn convert_sampler_to_unv( + #[doc = "Appends an OpSubgroupImageBlockWriteINTEL instruction to the current block."] + pub fn subgroup_image_block_write_intel( + &mut self, + image: spirv::Word, + coordinate: spirv::Word, + data: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SubgroupImageBlockWriteINTEL, + None, + None, + vec![ + dr::Operand::IdRef(image), + dr::Operand::IdRef(coordinate), + dr::Operand::IdRef(data), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpSubgroupImageBlockWriteINTEL instruction to the current block."] + pub fn insert_subgroup_image_block_write_intel( + &mut self, + insert_point: InsertPoint, + image: spirv::Word, + coordinate: spirv::Word, + data: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SubgroupImageBlockWriteINTEL, + None, + None, + vec![ + dr::Operand::IdRef(image), + dr::Operand::IdRef(coordinate), + dr::Operand::IdRef(data), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpSubgroupImageMediaBlockReadINTEL instruction to the current block."] + pub fn subgroup_image_media_block_read_intel( &mut self, result_type: spirv::Word, result_id: Option, - operand: spirv::Word, + image: spirv::Word, + coordinate: spirv::Word, + width: spirv::Word, + height: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertSamplerToUNV, + spirv::Op::SubgroupImageMediaBlockReadINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand)], + vec![ + dr::Operand::IdRef(image), + dr::Operand::IdRef(coordinate), + dr::Operand::IdRef(width), + dr::Operand::IdRef(height), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpConvertSamplerToUNV instruction to the current block."] - pub fn insert_convert_sampler_to_unv( + #[doc = "Appends an OpSubgroupImageMediaBlockReadINTEL instruction to the current block."] + pub fn insert_subgroup_image_media_block_read_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand: spirv::Word, + image: spirv::Word, + coordinate: spirv::Word, + width: spirv::Word, + height: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertSamplerToUNV, + spirv::Op::SubgroupImageMediaBlockReadINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand)], + vec![ + dr::Operand::IdRef(image), + dr::Operand::IdRef(coordinate), + dr::Operand::IdRef(width), + dr::Operand::IdRef(height), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpConvertUToSampledImageNV instruction to the current block."] - pub fn convert_u_to_sampled_image_nv( + #[doc = "Appends an OpSubgroupImageMediaBlockWriteINTEL instruction to the current block."] + pub fn subgroup_image_media_block_write_intel( + &mut self, + image: spirv::Word, + coordinate: spirv::Word, + width: spirv::Word, + height: spirv::Word, + data: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SubgroupImageMediaBlockWriteINTEL, + None, + None, + vec![ + dr::Operand::IdRef(image), + dr::Operand::IdRef(coordinate), + dr::Operand::IdRef(width), + dr::Operand::IdRef(height), + dr::Operand::IdRef(data), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpSubgroupImageMediaBlockWriteINTEL instruction to the current block."] + pub fn insert_subgroup_image_media_block_write_intel( + &mut self, + insert_point: InsertPoint, + image: spirv::Word, + coordinate: spirv::Word, + width: spirv::Word, + height: spirv::Word, + data: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::SubgroupImageMediaBlockWriteINTEL, + None, + None, + vec![ + dr::Operand::IdRef(image), + dr::Operand::IdRef(coordinate), + dr::Operand::IdRef(width), + dr::Operand::IdRef(height), + dr::Operand::IdRef(data), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpUCountLeadingZerosINTEL instruction to the current block."] + pub fn u_count_leading_zeros_intel( &mut self, result_type: spirv::Word, result_id: Option, @@ -14563,7 +17161,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertUToSampledImageNV, + spirv::Op::UCountLeadingZerosINTEL, Some(result_type), Some(_id), vec![dr::Operand::IdRef(operand)], @@ -14571,8 +17169,8 @@ impl Builder { self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpConvertUToSampledImageNV instruction to the current block."] - pub fn insert_convert_u_to_sampled_image_nv( + #[doc = "Appends an OpUCountLeadingZerosINTEL instruction to the current block."] + pub fn insert_u_count_leading_zeros_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, @@ -14582,7 +17180,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertUToSampledImageNV, + spirv::Op::UCountLeadingZerosINTEL, Some(result_type), Some(_id), vec![dr::Operand::IdRef(operand)], @@ -14590,8 +17188,8 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpConvertSampledImageToUNV instruction to the current block."] - pub fn convert_sampled_image_to_unv( + #[doc = "Appends an OpUCountTrailingZerosINTEL instruction to the current block."] + pub fn u_count_trailing_zeros_intel( &mut self, result_type: spirv::Word, result_id: Option, @@ -14600,7 +17198,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertSampledImageToUNV, + spirv::Op::UCountTrailingZerosINTEL, Some(result_type), Some(_id), vec![dr::Operand::IdRef(operand)], @@ -14608,8 +17206,8 @@ impl Builder { self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpConvertSampledImageToUNV instruction to the current block."] - pub fn insert_convert_sampled_image_to_unv( + #[doc = "Appends an OpUCountTrailingZerosINTEL instruction to the current block."] + pub fn insert_u_count_trailing_zeros_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, @@ -14619,7 +17217,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ConvertSampledImageToUNV, + spirv::Op::UCountTrailingZerosINTEL, Some(result_type), Some(_id), vec![dr::Operand::IdRef(operand)], @@ -14627,514 +17225,437 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupShuffleINTEL instruction to the current block."] - pub fn subgroup_shuffle_intel( + #[doc = "Appends an OpAbsISubINTEL instruction to the current block."] + pub fn abs_i_sub_intel( &mut self, result_type: spirv::Word, result_id: Option, - data: spirv::Word, - invocation_id: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupShuffleINTEL, + spirv::Op::AbsISubINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(data), dr::Operand::IdRef(invocation_id)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupShuffleINTEL instruction to the current block."] - pub fn insert_subgroup_shuffle_intel( + #[doc = "Appends an OpAbsISubINTEL instruction to the current block."] + pub fn insert_abs_i_sub_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - data: spirv::Word, - invocation_id: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupShuffleINTEL, + spirv::Op::AbsISubINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(data), dr::Operand::IdRef(invocation_id)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupShuffleDownINTEL instruction to the current block."] - pub fn subgroup_shuffle_down_intel( + #[doc = "Appends an OpAbsUSubINTEL instruction to the current block."] + pub fn abs_u_sub_intel( &mut self, result_type: spirv::Word, result_id: Option, - current: spirv::Word, - next: spirv::Word, - delta: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupShuffleDownINTEL, + spirv::Op::AbsUSubINTEL, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(current), - dr::Operand::IdRef(next), - dr::Operand::IdRef(delta), - ], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupShuffleDownINTEL instruction to the current block."] - pub fn insert_subgroup_shuffle_down_intel( + #[doc = "Appends an OpAbsUSubINTEL instruction to the current block."] + pub fn insert_abs_u_sub_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - current: spirv::Word, - next: spirv::Word, - delta: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupShuffleDownINTEL, + spirv::Op::AbsUSubINTEL, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(current), - dr::Operand::IdRef(next), - dr::Operand::IdRef(delta), - ], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupShuffleUpINTEL instruction to the current block."] - pub fn subgroup_shuffle_up_intel( + #[doc = "Appends an OpIAddSatINTEL instruction to the current block."] + pub fn i_add_sat_intel( &mut self, result_type: spirv::Word, result_id: Option, - previous: spirv::Word, - current: spirv::Word, - delta: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupShuffleUpINTEL, + spirv::Op::IAddSatINTEL, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(previous), - dr::Operand::IdRef(current), - dr::Operand::IdRef(delta), - ], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupShuffleUpINTEL instruction to the current block."] - pub fn insert_subgroup_shuffle_up_intel( + #[doc = "Appends an OpIAddSatINTEL instruction to the current block."] + pub fn insert_i_add_sat_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - previous: spirv::Word, - current: spirv::Word, - delta: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupShuffleUpINTEL, + spirv::Op::IAddSatINTEL, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(previous), - dr::Operand::IdRef(current), - dr::Operand::IdRef(delta), - ], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupShuffleXorINTEL instruction to the current block."] - pub fn subgroup_shuffle_xor_intel( + #[doc = "Appends an OpUAddSatINTEL instruction to the current block."] + pub fn u_add_sat_intel( &mut self, result_type: spirv::Word, result_id: Option, - data: spirv::Word, - value: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupShuffleXorINTEL, + spirv::Op::UAddSatINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(data), dr::Operand::IdRef(value)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupShuffleXorINTEL instruction to the current block."] - pub fn insert_subgroup_shuffle_xor_intel( + #[doc = "Appends an OpUAddSatINTEL instruction to the current block."] + pub fn insert_u_add_sat_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - data: spirv::Word, - value: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupShuffleXorINTEL, + spirv::Op::UAddSatINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(data), dr::Operand::IdRef(value)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupBlockReadINTEL instruction to the current block."] - pub fn subgroup_block_read_intel( + #[doc = "Appends an OpIAverageINTEL instruction to the current block."] + pub fn i_average_intel( &mut self, result_type: spirv::Word, result_id: Option, - ptr: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupBlockReadINTEL, + spirv::Op::IAverageINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ptr)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupBlockReadINTEL instruction to the current block."] - pub fn insert_subgroup_block_read_intel( + #[doc = "Appends an OpIAverageINTEL instruction to the current block."] + pub fn insert_i_average_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ptr: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupBlockReadINTEL, + spirv::Op::IAverageINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ptr)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupBlockWriteINTEL instruction to the current block."] - pub fn subgroup_block_write_intel( - &mut self, - ptr: spirv::Word, - data: spirv::Word, - ) -> BuildResult<()> { - #[allow(unused_mut)] - let mut inst = dr::Instruction::new( - spirv::Op::SubgroupBlockWriteINTEL, - None, - None, - vec![dr::Operand::IdRef(ptr), dr::Operand::IdRef(data)], - ); - self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) - } - #[doc = "Appends an OpSubgroupBlockWriteINTEL instruction to the current block."] - pub fn insert_subgroup_block_write_intel( - &mut self, - insert_point: InsertPoint, - ptr: spirv::Word, - data: spirv::Word, - ) -> BuildResult<()> { - #[allow(unused_mut)] - let mut inst = dr::Instruction::new( - spirv::Op::SubgroupBlockWriteINTEL, - None, - None, - vec![dr::Operand::IdRef(ptr), dr::Operand::IdRef(data)], - ); - self.insert_into_block(insert_point, inst)?; - Ok(()) - } - #[doc = "Appends an OpSubgroupImageBlockReadINTEL instruction to the current block."] - pub fn subgroup_image_block_read_intel( + #[doc = "Appends an OpUAverageINTEL instruction to the current block."] + pub fn u_average_intel( &mut self, result_type: spirv::Word, result_id: Option, - image: spirv::Word, - coordinate: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupImageBlockReadINTEL, + spirv::Op::UAverageINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(image), dr::Operand::IdRef(coordinate)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupImageBlockReadINTEL instruction to the current block."] - pub fn insert_subgroup_image_block_read_intel( + #[doc = "Appends an OpUAverageINTEL instruction to the current block."] + pub fn insert_u_average_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - image: spirv::Word, - coordinate: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupImageBlockReadINTEL, + spirv::Op::UAverageINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(image), dr::Operand::IdRef(coordinate)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupImageBlockWriteINTEL instruction to the current block."] - pub fn subgroup_image_block_write_intel( + #[doc = "Appends an OpIAverageRoundedINTEL instruction to the current block."] + pub fn i_average_rounded_intel( &mut self, - image: spirv::Word, - coordinate: spirv::Word, - data: spirv::Word, - ) -> BuildResult<()> { + result_type: spirv::Word, + result_id: Option, + operand_1: spirv::Word, + operand_2: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupImageBlockWriteINTEL, - None, - None, - vec![ - dr::Operand::IdRef(image), - dr::Operand::IdRef(coordinate), - dr::Operand::IdRef(data), - ], + spirv::Op::IAverageRoundedINTEL, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpSubgroupImageBlockWriteINTEL instruction to the current block."] - pub fn insert_subgroup_image_block_write_intel( + #[doc = "Appends an OpIAverageRoundedINTEL instruction to the current block."] + pub fn insert_i_average_rounded_intel( &mut self, insert_point: InsertPoint, - image: spirv::Word, - coordinate: spirv::Word, - data: spirv::Word, - ) -> BuildResult<()> { + result_type: spirv::Word, + result_id: Option, + operand_1: spirv::Word, + operand_2: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupImageBlockWriteINTEL, - None, - None, - vec![ - dr::Operand::IdRef(image), - dr::Operand::IdRef(coordinate), - dr::Operand::IdRef(data), - ], + spirv::Op::IAverageRoundedINTEL, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpSubgroupImageMediaBlockReadINTEL instruction to the current block."] - pub fn subgroup_image_media_block_read_intel( + #[doc = "Appends an OpUAverageRoundedINTEL instruction to the current block."] + pub fn u_average_rounded_intel( &mut self, result_type: spirv::Word, result_id: Option, - image: spirv::Word, - coordinate: spirv::Word, - width: spirv::Word, - height: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupImageMediaBlockReadINTEL, + spirv::Op::UAverageRoundedINTEL, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(image), - dr::Operand::IdRef(coordinate), - dr::Operand::IdRef(width), - dr::Operand::IdRef(height), - ], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupImageMediaBlockReadINTEL instruction to the current block."] - pub fn insert_subgroup_image_media_block_read_intel( + #[doc = "Appends an OpUAverageRoundedINTEL instruction to the current block."] + pub fn insert_u_average_rounded_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - image: spirv::Word, - coordinate: spirv::Word, - width: spirv::Word, - height: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupImageMediaBlockReadINTEL, + spirv::Op::UAverageRoundedINTEL, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(image), - dr::Operand::IdRef(coordinate), - dr::Operand::IdRef(width), - dr::Operand::IdRef(height), - ], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpSubgroupImageMediaBlockWriteINTEL instruction to the current block."] - pub fn subgroup_image_media_block_write_intel( + #[doc = "Appends an OpISubSatINTEL instruction to the current block."] + pub fn i_sub_sat_intel( &mut self, - image: spirv::Word, - coordinate: spirv::Word, - width: spirv::Word, - height: spirv::Word, - data: spirv::Word, - ) -> BuildResult<()> { + result_type: spirv::Word, + result_id: Option, + operand_1: spirv::Word, + operand_2: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupImageMediaBlockWriteINTEL, - None, - None, - vec![ - dr::Operand::IdRef(image), - dr::Operand::IdRef(coordinate), - dr::Operand::IdRef(width), - dr::Operand::IdRef(height), - dr::Operand::IdRef(data), - ], + spirv::Op::ISubSatINTEL, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpSubgroupImageMediaBlockWriteINTEL instruction to the current block."] - pub fn insert_subgroup_image_media_block_write_intel( + #[doc = "Appends an OpISubSatINTEL instruction to the current block."] + pub fn insert_i_sub_sat_intel( &mut self, insert_point: InsertPoint, - image: spirv::Word, - coordinate: spirv::Word, - width: spirv::Word, - height: spirv::Word, - data: spirv::Word, - ) -> BuildResult<()> { + result_type: spirv::Word, + result_id: Option, + operand_1: spirv::Word, + operand_2: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::SubgroupImageMediaBlockWriteINTEL, - None, - None, - vec![ - dr::Operand::IdRef(image), - dr::Operand::IdRef(coordinate), - dr::Operand::IdRef(width), - dr::Operand::IdRef(height), - dr::Operand::IdRef(data), - ], + spirv::Op::ISubSatINTEL, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; - Ok(()) + Ok(_id) } - #[doc = "Appends an OpUCountLeadingZerosINTEL instruction to the current block."] - pub fn u_count_leading_zeros_intel( + #[doc = "Appends an OpUSubSatINTEL instruction to the current block."] + pub fn u_sub_sat_intel( &mut self, result_type: spirv::Word, result_id: Option, - operand: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UCountLeadingZerosINTEL, + spirv::Op::USubSatINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpUCountLeadingZerosINTEL instruction to the current block."] - pub fn insert_u_count_leading_zeros_intel( + #[doc = "Appends an OpUSubSatINTEL instruction to the current block."] + pub fn insert_u_sub_sat_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UCountLeadingZerosINTEL, + spirv::Op::USubSatINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpUCountTrailingZerosINTEL instruction to the current block."] - pub fn u_count_trailing_zeros_intel( + #[doc = "Appends an OpIMul32x16INTEL instruction to the current block."] + pub fn i_mul32x16_intel( &mut self, result_type: spirv::Word, result_id: Option, - operand: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UCountTrailingZerosINTEL, + spirv::Op::IMul32x16INTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpUCountTrailingZerosINTEL instruction to the current block."] - pub fn insert_u_count_trailing_zeros_intel( + #[doc = "Appends an OpIMul32x16INTEL instruction to the current block."] + pub fn insert_i_mul32x16_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand: spirv::Word, + operand_1: spirv::Word, + operand_2: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UCountTrailingZerosINTEL, + spirv::Op::IMul32x16INTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand)], + vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpAbsISubINTEL instruction to the current block."] - pub fn abs_i_sub_intel( + #[doc = "Appends an OpUMul32x16INTEL instruction to the current block."] + pub fn u_mul32x16_intel( &mut self, result_type: spirv::Word, result_id: Option, @@ -15144,7 +17665,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::AbsISubINTEL, + spirv::Op::UMul32x16INTEL, Some(result_type), Some(_id), vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], @@ -15152,8 +17673,8 @@ impl Builder { self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpAbsISubINTEL instruction to the current block."] - pub fn insert_abs_i_sub_intel( + #[doc = "Appends an OpUMul32x16INTEL instruction to the current block."] + pub fn insert_u_mul32x16_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, @@ -15164,7 +17685,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::AbsISubINTEL, + spirv::Op::UMul32x16INTEL, Some(result_type), Some(_id), vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], @@ -15172,776 +17693,781 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpAbsUSubINTEL instruction to the current block."] - pub fn abs_u_sub_intel( + #[doc = "Appends an OpAtomicFMinEXT instruction to the current block."] + pub fn atomic_f_min_ext( &mut self, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + pointer: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::AbsUSubINTEL, + spirv::Op::AtomicFMinEXT, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(pointer), + dr::Operand::IdScope(memory), + dr::Operand::IdMemorySemantics(semantics), + dr::Operand::IdRef(value), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpAbsUSubINTEL instruction to the current block."] - pub fn insert_abs_u_sub_intel( + #[doc = "Appends an OpAtomicFMinEXT instruction to the current block."] + pub fn insert_atomic_f_min_ext( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + pointer: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::AbsUSubINTEL, + spirv::Op::AtomicFMinEXT, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(pointer), + dr::Operand::IdScope(memory), + dr::Operand::IdMemorySemantics(semantics), + dr::Operand::IdRef(value), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpIAddSatINTEL instruction to the current block."] - pub fn i_add_sat_intel( + #[doc = "Appends an OpAtomicFMaxEXT instruction to the current block."] + pub fn atomic_f_max_ext( &mut self, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + pointer: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::IAddSatINTEL, + spirv::Op::AtomicFMaxEXT, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(pointer), + dr::Operand::IdScope(memory), + dr::Operand::IdMemorySemantics(semantics), + dr::Operand::IdRef(value), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpIAddSatINTEL instruction to the current block."] - pub fn insert_i_add_sat_intel( + #[doc = "Appends an OpAtomicFMaxEXT instruction to the current block."] + pub fn insert_atomic_f_max_ext( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + pointer: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::IAddSatINTEL, - Some(result_type), - Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + spirv::Op::AtomicFMaxEXT, + Some(result_type), + Some(_id), + vec![ + dr::Operand::IdRef(pointer), + dr::Operand::IdScope(memory), + dr::Operand::IdMemorySemantics(semantics), + dr::Operand::IdRef(value), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpAssumeTrueKHR instruction to the current block."] + pub fn assume_true_khr(&mut self, condition: spirv::Word) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::AssumeTrueKHR, + None, + None, + vec![dr::Operand::IdRef(condition)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpAssumeTrueKHR instruction to the current block."] + pub fn insert_assume_true_khr( + &mut self, + insert_point: InsertPoint, + condition: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::AssumeTrueKHR, + None, + None, + vec![dr::Operand::IdRef(condition)], ); self.insert_into_block(insert_point, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpUAddSatINTEL instruction to the current block."] - pub fn u_add_sat_intel( + #[doc = "Appends an OpExpectKHR instruction to the current block."] + pub fn expect_khr( &mut self, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + value: spirv::Word, + expected_value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UAddSatINTEL, + spirv::Op::ExpectKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(value), + dr::Operand::IdRef(expected_value), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpUAddSatINTEL instruction to the current block."] - pub fn insert_u_add_sat_intel( + #[doc = "Appends an OpExpectKHR instruction to the current block."] + pub fn insert_expect_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + value: spirv::Word, + expected_value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UAddSatINTEL, + spirv::Op::ExpectKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(value), + dr::Operand::IdRef(expected_value), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpIAverageINTEL instruction to the current block."] - pub fn i_average_intel( + #[doc = "Appends an OpLoopControlINTEL instruction to the current block."] + pub fn loop_control_intel( &mut self, - result_type: spirv::Word, - result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + loop_control_parameters: impl IntoIterator, + ) -> BuildResult<()> { #[allow(unused_mut)] - let mut inst = dr::Instruction::new( - spirv::Op::IAverageINTEL, - Some(result_type), - Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + let mut inst = dr::Instruction::new(spirv::Op::LoopControlINTEL, None, None, vec![]); + inst.operands.extend( + loop_control_parameters + .into_iter() + .map(dr::Operand::LiteralBit32), ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpIAverageINTEL instruction to the current block."] - pub fn insert_i_average_intel( + #[doc = "Appends an OpLoopControlINTEL instruction to the current block."] + pub fn insert_loop_control_intel( &mut self, insert_point: InsertPoint, - result_type: spirv::Word, - result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + loop_control_parameters: impl IntoIterator, + ) -> BuildResult<()> { #[allow(unused_mut)] - let mut inst = dr::Instruction::new( - spirv::Op::IAverageINTEL, - Some(result_type), - Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + let mut inst = dr::Instruction::new(spirv::Op::LoopControlINTEL, None, None, vec![]); + inst.operands.extend( + loop_control_parameters + .into_iter() + .map(dr::Operand::LiteralBit32), ); self.insert_into_block(insert_point, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpUAverageINTEL instruction to the current block."] - pub fn u_average_intel( + #[doc = "Appends an OpReadPipeBlockingINTEL instruction to the current block."] + pub fn read_pipe_blocking_intel( &mut self, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + packet_size: spirv::Word, + packet_alignment: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UAverageINTEL, + spirv::Op::ReadPipeBlockingINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(packet_size), + dr::Operand::IdRef(packet_alignment), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpUAverageINTEL instruction to the current block."] - pub fn insert_u_average_intel( + #[doc = "Appends an OpReadPipeBlockingINTEL instruction to the current block."] + pub fn insert_read_pipe_blocking_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + packet_size: spirv::Word, + packet_alignment: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UAverageINTEL, + spirv::Op::ReadPipeBlockingINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(packet_size), + dr::Operand::IdRef(packet_alignment), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpIAverageRoundedINTEL instruction to the current block."] - pub fn i_average_rounded_intel( + #[doc = "Appends an OpWritePipeBlockingINTEL instruction to the current block."] + pub fn write_pipe_blocking_intel( &mut self, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + packet_size: spirv::Word, + packet_alignment: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::IAverageRoundedINTEL, + spirv::Op::WritePipeBlockingINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(packet_size), + dr::Operand::IdRef(packet_alignment), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpIAverageRoundedINTEL instruction to the current block."] - pub fn insert_i_average_rounded_intel( + #[doc = "Appends an OpWritePipeBlockingINTEL instruction to the current block."] + pub fn insert_write_pipe_blocking_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + packet_size: spirv::Word, + packet_alignment: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::IAverageRoundedINTEL, + spirv::Op::WritePipeBlockingINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(packet_size), + dr::Operand::IdRef(packet_alignment), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpUAverageRoundedINTEL instruction to the current block."] - pub fn u_average_rounded_intel( + #[doc = "Appends an OpFPGARegINTEL instruction to the current block."] + pub fn fpga_reg_intel( &mut self, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + result: spirv::Word, + input: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UAverageRoundedINTEL, + spirv::Op::FPGARegINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![dr::Operand::IdRef(result), dr::Operand::IdRef(input)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpUAverageRoundedINTEL instruction to the current block."] - pub fn insert_u_average_rounded_intel( + #[doc = "Appends an OpFPGARegINTEL instruction to the current block."] + pub fn insert_fpga_reg_intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + result: spirv::Word, + input: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UAverageRoundedINTEL, + spirv::Op::FPGARegINTEL, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![dr::Operand::IdRef(result), dr::Operand::IdRef(input)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpISubSatINTEL instruction to the current block."] - pub fn i_sub_sat_intel( + #[doc = "Appends an OpRayQueryGetRayTMinKHR instruction to the current block."] + pub fn ray_query_get_ray_t_min_khr( &mut self, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + ray_query: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ISubSatINTEL, + spirv::Op::RayQueryGetRayTMinKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![dr::Operand::IdRef(ray_query)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpISubSatINTEL instruction to the current block."] - pub fn insert_i_sub_sat_intel( + #[doc = "Appends an OpRayQueryGetRayTMinKHR instruction to the current block."] + pub fn insert_ray_query_get_ray_t_min_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + ray_query: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ISubSatINTEL, + spirv::Op::RayQueryGetRayTMinKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![dr::Operand::IdRef(ray_query)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpUSubSatINTEL instruction to the current block."] - pub fn u_sub_sat_intel( + #[doc = "Appends an OpRayQueryGetRayFlagsKHR instruction to the current block."] + pub fn ray_query_get_ray_flags_khr( &mut self, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + ray_query: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::USubSatINTEL, + spirv::Op::RayQueryGetRayFlagsKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![dr::Operand::IdRef(ray_query)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpUSubSatINTEL instruction to the current block."] - pub fn insert_u_sub_sat_intel( + #[doc = "Appends an OpRayQueryGetRayFlagsKHR instruction to the current block."] + pub fn insert_ray_query_get_ray_flags_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + ray_query: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::USubSatINTEL, + spirv::Op::RayQueryGetRayFlagsKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![dr::Operand::IdRef(ray_query)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpIMul32x16INTEL instruction to the current block."] - pub fn i_mul32x16_intel( + #[doc = "Appends an OpRayQueryGetIntersectionTKHR instruction to the current block."] + pub fn ray_query_get_intersection_tkhr( &mut self, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::IMul32x16INTEL, + spirv::Op::RayQueryGetIntersectionTKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpIMul32x16INTEL instruction to the current block."] - pub fn insert_i_mul32x16_intel( + #[doc = "Appends an OpRayQueryGetIntersectionTKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_tkhr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::IMul32x16INTEL, + spirv::Op::RayQueryGetIntersectionTKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpUMul32x16INTEL instruction to the current block."] - pub fn u_mul32x16_intel( + #[doc = "Appends an OpRayQueryGetIntersectionInstanceCustomIndexKHR instruction to the current block."] + pub fn ray_query_get_intersection_instance_custom_index_khr( &mut self, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UMul32x16INTEL, + spirv::Op::RayQueryGetIntersectionInstanceCustomIndexKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpUMul32x16INTEL instruction to the current block."] - pub fn insert_u_mul32x16_intel( + #[doc = "Appends an OpRayQueryGetIntersectionInstanceCustomIndexKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_instance_custom_index_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - operand_1: spirv::Word, - operand_2: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::UMul32x16INTEL, + spirv::Op::RayQueryGetIntersectionInstanceCustomIndexKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(operand_1), dr::Operand::IdRef(operand_2)], + vec![ + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpAtomicFMinEXT instruction to the current block."] - pub fn atomic_f_min_ext( + #[doc = "Appends an OpRayQueryGetIntersectionInstanceIdKHR instruction to the current block."] + pub fn ray_query_get_intersection_instance_id_khr( &mut self, result_type: spirv::Word, result_id: Option, - pointer: spirv::Word, - memory: spirv::Word, - semantics: spirv::Word, - value: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::AtomicFMinEXT, + spirv::Op::RayQueryGetIntersectionInstanceIdKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(pointer), - dr::Operand::IdScope(memory), - dr::Operand::IdMemorySemantics(semantics), - dr::Operand::IdRef(value), + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpAtomicFMinEXT instruction to the current block."] - pub fn insert_atomic_f_min_ext( + #[doc = "Appends an OpRayQueryGetIntersectionInstanceIdKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_instance_id_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - pointer: spirv::Word, - memory: spirv::Word, - semantics: spirv::Word, - value: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::AtomicFMinEXT, + spirv::Op::RayQueryGetIntersectionInstanceIdKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(pointer), - dr::Operand::IdScope(memory), - dr::Operand::IdMemorySemantics(semantics), - dr::Operand::IdRef(value), + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpAtomicFMaxEXT instruction to the current block."] - pub fn atomic_f_max_ext( + #[doc = "Appends an OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR instruction to the current block."] + pub fn ray_query_get_intersection_instance_shader_binding_table_record_offset_khr( &mut self, result_type: spirv::Word, result_id: Option, - pointer: spirv::Word, - memory: spirv::Word, - semantics: spirv::Word, - value: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::AtomicFMaxEXT, + spirv::Op::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(pointer), - dr::Operand::IdScope(memory), - dr::Operand::IdMemorySemantics(semantics), - dr::Operand::IdRef(value), + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpAtomicFMaxEXT instruction to the current block."] - pub fn insert_atomic_f_max_ext( + #[doc = "Appends an OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_instance_shader_binding_table_record_offset_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - pointer: spirv::Word, - memory: spirv::Word, - semantics: spirv::Word, - value: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::AtomicFMaxEXT, + spirv::Op::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(pointer), - dr::Operand::IdScope(memory), - dr::Operand::IdMemorySemantics(semantics), - dr::Operand::IdRef(value), + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpAssumeTrueKHR instruction to the current block."] - pub fn assume_true_khr(&mut self, condition: spirv::Word) -> BuildResult<()> { - #[allow(unused_mut)] - let mut inst = dr::Instruction::new( - spirv::Op::AssumeTrueKHR, - None, - None, - vec![dr::Operand::IdRef(condition)], - ); - self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) - } - #[doc = "Appends an OpAssumeTrueKHR instruction to the current block."] - pub fn insert_assume_true_khr( - &mut self, - insert_point: InsertPoint, - condition: spirv::Word, - ) -> BuildResult<()> { - #[allow(unused_mut)] - let mut inst = dr::Instruction::new( - spirv::Op::AssumeTrueKHR, - None, - None, - vec![dr::Operand::IdRef(condition)], - ); - self.insert_into_block(insert_point, inst)?; - Ok(()) - } - #[doc = "Appends an OpExpectKHR instruction to the current block."] - pub fn expect_khr( + #[doc = "Appends an OpRayQueryGetIntersectionGeometryIndexKHR instruction to the current block."] + pub fn ray_query_get_intersection_geometry_index_khr( &mut self, result_type: spirv::Word, result_id: Option, - value: spirv::Word, - expected_value: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ExpectKHR, + spirv::Op::RayQueryGetIntersectionGeometryIndexKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(value), - dr::Operand::IdRef(expected_value), + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpExpectKHR instruction to the current block."] - pub fn insert_expect_khr( + #[doc = "Appends an OpRayQueryGetIntersectionGeometryIndexKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_geometry_index_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - value: spirv::Word, - expected_value: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ExpectKHR, + spirv::Op::RayQueryGetIntersectionGeometryIndexKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(value), - dr::Operand::IdRef(expected_value), + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpLoopControlINTEL instruction to the current block."] - pub fn loop_control_intel( - &mut self, - loop_control_parameters: impl IntoIterator, - ) -> BuildResult<()> { - #[allow(unused_mut)] - let mut inst = dr::Instruction::new(spirv::Op::LoopControlINTEL, None, None, vec![]); - inst.operands.extend( - loop_control_parameters - .into_iter() - .map(dr::Operand::LiteralBit32), - ); - self.insert_into_block(InsertPoint::End, inst)?; - Ok(()) - } - #[doc = "Appends an OpLoopControlINTEL instruction to the current block."] - pub fn insert_loop_control_intel( - &mut self, - insert_point: InsertPoint, - loop_control_parameters: impl IntoIterator, - ) -> BuildResult<()> { - #[allow(unused_mut)] - let mut inst = dr::Instruction::new(spirv::Op::LoopControlINTEL, None, None, vec![]); - inst.operands.extend( - loop_control_parameters - .into_iter() - .map(dr::Operand::LiteralBit32), - ); - self.insert_into_block(insert_point, inst)?; - Ok(()) - } - #[doc = "Appends an OpReadPipeBlockingINTEL instruction to the current block."] - pub fn read_pipe_blocking_intel( + #[doc = "Appends an OpRayQueryGetIntersectionPrimitiveIndexKHR instruction to the current block."] + pub fn ray_query_get_intersection_primitive_index_khr( &mut self, result_type: spirv::Word, result_id: Option, - packet_size: spirv::Word, - packet_alignment: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ReadPipeBlockingINTEL, + spirv::Op::RayQueryGetIntersectionPrimitiveIndexKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(packet_size), - dr::Operand::IdRef(packet_alignment), + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpReadPipeBlockingINTEL instruction to the current block."] - pub fn insert_read_pipe_blocking_intel( + #[doc = "Appends an OpRayQueryGetIntersectionPrimitiveIndexKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_primitive_index_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - packet_size: spirv::Word, - packet_alignment: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::ReadPipeBlockingINTEL, + spirv::Op::RayQueryGetIntersectionPrimitiveIndexKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(packet_size), - dr::Operand::IdRef(packet_alignment), + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpWritePipeBlockingINTEL instruction to the current block."] - pub fn write_pipe_blocking_intel( + #[doc = "Appends an OpRayQueryGetIntersectionBarycentricsKHR instruction to the current block."] + pub fn ray_query_get_intersection_barycentrics_khr( &mut self, result_type: spirv::Word, result_id: Option, - packet_size: spirv::Word, - packet_alignment: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::WritePipeBlockingINTEL, + spirv::Op::RayQueryGetIntersectionBarycentricsKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(packet_size), - dr::Operand::IdRef(packet_alignment), + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpWritePipeBlockingINTEL instruction to the current block."] - pub fn insert_write_pipe_blocking_intel( + #[doc = "Appends an OpRayQueryGetIntersectionBarycentricsKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_barycentrics_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - packet_size: spirv::Word, - packet_alignment: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::WritePipeBlockingINTEL, + spirv::Op::RayQueryGetIntersectionBarycentricsKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(packet_size), - dr::Operand::IdRef(packet_alignment), + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpFPGARegINTEL instruction to the current block."] - pub fn fpga_reg_intel( + #[doc = "Appends an OpRayQueryGetIntersectionFrontFaceKHR instruction to the current block."] + pub fn ray_query_get_intersection_front_face_khr( &mut self, result_type: spirv::Word, result_id: Option, - result: spirv::Word, - input: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::FPGARegINTEL, + spirv::Op::RayQueryGetIntersectionFrontFaceKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(result), dr::Operand::IdRef(input)], + vec![ + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) - } - #[doc = "Appends an OpFPGARegINTEL instruction to the current block."] - pub fn insert_fpga_reg_intel( + } + #[doc = "Appends an OpRayQueryGetIntersectionFrontFaceKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_front_face_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - result: spirv::Word, - input: spirv::Word, + ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::FPGARegINTEL, + spirv::Op::RayQueryGetIntersectionFrontFaceKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(result), dr::Operand::IdRef(input)], + vec![ + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetRayTMinKHR instruction to the current block."] - pub fn ray_query_get_ray_t_min_khr( + #[doc = "Appends an OpRayQueryGetIntersectionCandidateAABBOpaqueKHR instruction to the current block."] + pub fn ray_query_get_intersection_candidate_aabb_opaque_khr( &mut self, result_type: spirv::Word, result_id: Option, @@ -15950,7 +18476,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetRayTMinKHR, + spirv::Op::RayQueryGetIntersectionCandidateAABBOpaqueKHR, Some(result_type), Some(_id), vec![dr::Operand::IdRef(ray_query)], @@ -15958,8 +18484,8 @@ impl Builder { self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetRayTMinKHR instruction to the current block."] - pub fn insert_ray_query_get_ray_t_min_khr( + #[doc = "Appends an OpRayQueryGetIntersectionCandidateAABBOpaqueKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_candidate_aabb_opaque_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, @@ -15969,7 +18495,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetRayTMinKHR, + spirv::Op::RayQueryGetIntersectionCandidateAABBOpaqueKHR, Some(result_type), Some(_id), vec![dr::Operand::IdRef(ray_query)], @@ -15977,45 +18503,53 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetRayFlagsKHR instruction to the current block."] - pub fn ray_query_get_ray_flags_khr( + #[doc = "Appends an OpRayQueryGetIntersectionObjectRayDirectionKHR instruction to the current block."] + pub fn ray_query_get_intersection_object_ray_direction_khr( &mut self, result_type: spirv::Word, result_id: Option, ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetRayFlagsKHR, + spirv::Op::RayQueryGetIntersectionObjectRayDirectionKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ray_query)], + vec![ + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetRayFlagsKHR instruction to the current block."] - pub fn insert_ray_query_get_ray_flags_khr( + #[doc = "Appends an OpRayQueryGetIntersectionObjectRayDirectionKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_object_ray_direction_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, ray_query: spirv::Word, + intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetRayFlagsKHR, + spirv::Op::RayQueryGetIntersectionObjectRayDirectionKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ray_query)], + vec![ + dr::Operand::IdRef(ray_query), + dr::Operand::IdRef(intersection), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionTKHR instruction to the current block."] - pub fn ray_query_get_intersection_tkhr( + #[doc = "Appends an OpRayQueryGetIntersectionObjectRayOriginKHR instruction to the current block."] + pub fn ray_query_get_intersection_object_ray_origin_khr( &mut self, result_type: spirv::Word, result_id: Option, @@ -16025,7 +18559,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionTKHR, + spirv::Op::RayQueryGetIntersectionObjectRayOriginKHR, Some(result_type), Some(_id), vec![ @@ -16036,8 +18570,8 @@ impl Builder { self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionTKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_tkhr( + #[doc = "Appends an OpRayQueryGetIntersectionObjectRayOriginKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_object_ray_origin_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, @@ -16048,7 +18582,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionTKHR, + spirv::Op::RayQueryGetIntersectionObjectRayOriginKHR, Some(result_type), Some(_id), vec![ @@ -16059,98 +18593,82 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionInstanceCustomIndexKHR instruction to the current block."] - pub fn ray_query_get_intersection_instance_custom_index_khr( + #[doc = "Appends an OpRayQueryGetWorldRayDirectionKHR instruction to the current block."] + pub fn ray_query_get_world_ray_direction_khr( &mut self, result_type: spirv::Word, result_id: Option, ray_query: spirv::Word, - intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionInstanceCustomIndexKHR, + spirv::Op::RayQueryGetWorldRayDirectionKHR, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), - ], + vec![dr::Operand::IdRef(ray_query)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionInstanceCustomIndexKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_instance_custom_index_khr( + #[doc = "Appends an OpRayQueryGetWorldRayDirectionKHR instruction to the current block."] + pub fn insert_ray_query_get_world_ray_direction_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, ray_query: spirv::Word, - intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionInstanceCustomIndexKHR, + spirv::Op::RayQueryGetWorldRayDirectionKHR, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), - ], + vec![dr::Operand::IdRef(ray_query)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionInstanceIdKHR instruction to the current block."] - pub fn ray_query_get_intersection_instance_id_khr( + #[doc = "Appends an OpRayQueryGetWorldRayOriginKHR instruction to the current block."] + pub fn ray_query_get_world_ray_origin_khr( &mut self, result_type: spirv::Word, result_id: Option, ray_query: spirv::Word, - intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionInstanceIdKHR, + spirv::Op::RayQueryGetWorldRayOriginKHR, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), - ], + vec![dr::Operand::IdRef(ray_query)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionInstanceIdKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_instance_id_khr( + #[doc = "Appends an OpRayQueryGetWorldRayOriginKHR instruction to the current block."] + pub fn insert_ray_query_get_world_ray_origin_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, ray_query: spirv::Word, - intersection: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionInstanceIdKHR, + spirv::Op::RayQueryGetWorldRayOriginKHR, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), - ], + vec![dr::Operand::IdRef(ray_query)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR instruction to the current block."] - pub fn ray_query_get_intersection_instance_shader_binding_table_record_offset_khr( + #[doc = "Appends an OpRayQueryGetIntersectionObjectToWorldKHR instruction to the current block."] + pub fn ray_query_get_intersection_object_to_world_khr( &mut self, result_type: spirv::Word, result_id: Option, @@ -16160,7 +18678,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR, + spirv::Op::RayQueryGetIntersectionObjectToWorldKHR, Some(result_type), Some(_id), vec![ @@ -16171,8 +18689,8 @@ impl Builder { self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_instance_shader_binding_table_record_offset_khr( + #[doc = "Appends an OpRayQueryGetIntersectionObjectToWorldKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_object_to_world_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, @@ -16183,7 +18701,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR, + spirv::Op::RayQueryGetIntersectionObjectToWorldKHR, Some(result_type), Some(_id), vec![ @@ -16194,8 +18712,8 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionGeometryIndexKHR instruction to the current block."] - pub fn ray_query_get_intersection_geometry_index_khr( + #[doc = "Appends an OpRayQueryGetIntersectionWorldToObjectKHR instruction to the current block."] + pub fn ray_query_get_intersection_world_to_object_khr( &mut self, result_type: spirv::Word, result_id: Option, @@ -16205,7 +18723,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionGeometryIndexKHR, + spirv::Op::RayQueryGetIntersectionWorldToObjectKHR, Some(result_type), Some(_id), vec![ @@ -16216,8 +18734,8 @@ impl Builder { self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionGeometryIndexKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_geometry_index_khr( + #[doc = "Appends an OpRayQueryGetIntersectionWorldToObjectKHR instruction to the current block."] + pub fn insert_ray_query_get_intersection_world_to_object_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, @@ -16228,7 +18746,7 @@ impl Builder { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionGeometryIndexKHR, + spirv::Op::RayQueryGetIntersectionWorldToObjectKHR, Some(result_type), Some(_id), vec![ @@ -16239,480 +18757,606 @@ impl Builder { self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionPrimitiveIndexKHR instruction to the current block."] - pub fn ray_query_get_intersection_primitive_index_khr( + #[doc = "Appends an OpAtomicFAddEXT instruction to the current block."] + pub fn atomic_f_add_ext( &mut self, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + pointer: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionPrimitiveIndexKHR, + spirv::Op::AtomicFAddEXT, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdRef(pointer), + dr::Operand::IdScope(memory), + dr::Operand::IdMemorySemantics(semantics), + dr::Operand::IdRef(value), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionPrimitiveIndexKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_primitive_index_khr( + #[doc = "Appends an OpAtomicFAddEXT instruction to the current block."] + pub fn insert_atomic_f_add_ext( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + pointer: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionPrimitiveIndexKHR, + spirv::Op::AtomicFAddEXT, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdRef(pointer), + dr::Operand::IdScope(memory), + dr::Operand::IdMemorySemantics(semantics), + dr::Operand::IdRef(value), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionBarycentricsKHR instruction to the current block."] - pub fn ray_query_get_intersection_barycentrics_khr( + #[doc = "Appends an OpConvertFToBF16INTEL instruction to the current block."] + pub fn convert_f_to_bf16intel( &mut self, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + float_value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionBarycentricsKHR, + spirv::Op::ConvertFToBF16INTEL, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), - ], + vec![dr::Operand::IdRef(float_value)], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionBarycentricsKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_barycentrics_khr( + #[doc = "Appends an OpConvertFToBF16INTEL instruction to the current block."] + pub fn insert_convert_f_to_bf16intel( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + float_value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionBarycentricsKHR, + spirv::Op::ConvertFToBF16INTEL, Some(result_type), Some(_id), - vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), - ], + vec![dr::Operand::IdRef(float_value)], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionFrontFaceKHR instruction to the current block."] - pub fn ray_query_get_intersection_front_face_khr( + #[doc = "Appends an OpConvertBF16ToFINTEL instruction to the current block."] + pub fn convert_bf16_to_fintel( &mut self, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + b_float16_value: spirv::Word, + ) -> BuildResult { + let _id = result_id.unwrap_or_else(|| self.id()); + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ConvertBF16ToFINTEL, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(b_float16_value)], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(_id) + } + #[doc = "Appends an OpConvertBF16ToFINTEL instruction to the current block."] + pub fn insert_convert_bf16_to_fintel( + &mut self, + insert_point: InsertPoint, + result_type: spirv::Word, + result_id: Option, + b_float16_value: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionFrontFaceKHR, - Some(result_type), - Some(_id), + spirv::Op::ConvertBF16ToFINTEL, + Some(result_type), + Some(_id), + vec![dr::Operand::IdRef(b_float16_value)], + ); + self.insert_into_block(insert_point, inst)?; + Ok(_id) + } + #[doc = "Appends an OpControlBarrierArriveINTEL instruction to the current block."] + pub fn control_barrier_arrive_intel( + &mut self, + execution: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ControlBarrierArriveINTEL, + None, + None, + vec![ + dr::Operand::IdScope(execution), + dr::Operand::IdScope(memory), + dr::Operand::IdMemorySemantics(semantics), + ], + ); + self.insert_into_block(InsertPoint::End, inst)?; + Ok(()) + } + #[doc = "Appends an OpControlBarrierArriveINTEL instruction to the current block."] + pub fn insert_control_barrier_arrive_intel( + &mut self, + insert_point: InsertPoint, + execution: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ControlBarrierArriveINTEL, + None, + None, + vec![ + dr::Operand::IdScope(execution), + dr::Operand::IdScope(memory), + dr::Operand::IdMemorySemantics(semantics), + ], + ); + self.insert_into_block(insert_point, inst)?; + Ok(()) + } + #[doc = "Appends an OpControlBarrierWaitINTEL instruction to the current block."] + pub fn control_barrier_wait_intel( + &mut self, + execution: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::ControlBarrierWaitINTEL, + None, + None, vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdScope(execution), + dr::Operand::IdScope(memory), + dr::Operand::IdMemorySemantics(semantics), ], ); self.insert_into_block(InsertPoint::End, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpRayQueryGetIntersectionFrontFaceKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_front_face_khr( + #[doc = "Appends an OpControlBarrierWaitINTEL instruction to the current block."] + pub fn insert_control_barrier_wait_intel( &mut self, insert_point: InsertPoint, - result_type: spirv::Word, - result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, - ) -> BuildResult { - let _id = result_id.unwrap_or_else(|| self.id()); + execution: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + ) -> BuildResult<()> { #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionFrontFaceKHR, - Some(result_type), - Some(_id), + spirv::Op::ControlBarrierWaitINTEL, + None, + None, vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdScope(execution), + dr::Operand::IdScope(memory), + dr::Operand::IdMemorySemantics(semantics), ], ); self.insert_into_block(insert_point, inst)?; - Ok(_id) + Ok(()) } - #[doc = "Appends an OpRayQueryGetIntersectionCandidateAABBOpaqueKHR instruction to the current block."] - pub fn ray_query_get_intersection_candidate_aabb_opaque_khr( + #[doc = "Appends an OpGroupIMulKHR instruction to the current block."] + pub fn group_i_mul_khr( &mut self, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionCandidateAABBOpaqueKHR, + spirv::Op::GroupIMulKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ray_query)], + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionCandidateAABBOpaqueKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_candidate_aabb_opaque_khr( + #[doc = "Appends an OpGroupIMulKHR instruction to the current block."] + pub fn insert_group_i_mul_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionCandidateAABBOpaqueKHR, + spirv::Op::GroupIMulKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ray_query)], + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionObjectRayDirectionKHR instruction to the current block."] - pub fn ray_query_get_intersection_object_ray_direction_khr( + #[doc = "Appends an OpGroupFMulKHR instruction to the current block."] + pub fn group_f_mul_khr( &mut self, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionObjectRayDirectionKHR, + spirv::Op::GroupFMulKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionObjectRayDirectionKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_object_ray_direction_khr( + #[doc = "Appends an OpGroupFMulKHR instruction to the current block."] + pub fn insert_group_f_mul_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionObjectRayDirectionKHR, + spirv::Op::GroupFMulKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionObjectRayOriginKHR instruction to the current block."] - pub fn ray_query_get_intersection_object_ray_origin_khr( + #[doc = "Appends an OpGroupBitwiseAndKHR instruction to the current block."] + pub fn group_bitwise_and_khr( &mut self, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionObjectRayOriginKHR, + spirv::Op::GroupBitwiseAndKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionObjectRayOriginKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_object_ray_origin_khr( + #[doc = "Appends an OpGroupBitwiseAndKHR instruction to the current block."] + pub fn insert_group_bitwise_and_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionObjectRayOriginKHR, + spirv::Op::GroupBitwiseAndKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetWorldRayDirectionKHR instruction to the current block."] - pub fn ray_query_get_world_ray_direction_khr( + #[doc = "Appends an OpGroupBitwiseOrKHR instruction to the current block."] + pub fn group_bitwise_or_khr( &mut self, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetWorldRayDirectionKHR, + spirv::Op::GroupBitwiseOrKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ray_query)], + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetWorldRayDirectionKHR instruction to the current block."] - pub fn insert_ray_query_get_world_ray_direction_khr( + #[doc = "Appends an OpGroupBitwiseOrKHR instruction to the current block."] + pub fn insert_group_bitwise_or_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetWorldRayDirectionKHR, + spirv::Op::GroupBitwiseOrKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ray_query)], + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetWorldRayOriginKHR instruction to the current block."] - pub fn ray_query_get_world_ray_origin_khr( + #[doc = "Appends an OpGroupBitwiseXorKHR instruction to the current block."] + pub fn group_bitwise_xor_khr( &mut self, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetWorldRayOriginKHR, + spirv::Op::GroupBitwiseXorKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ray_query)], + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetWorldRayOriginKHR instruction to the current block."] - pub fn insert_ray_query_get_world_ray_origin_khr( + #[doc = "Appends an OpGroupBitwiseXorKHR instruction to the current block."] + pub fn insert_group_bitwise_xor_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetWorldRayOriginKHR, + spirv::Op::GroupBitwiseXorKHR, Some(result_type), Some(_id), - vec![dr::Operand::IdRef(ray_query)], + vec![ + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), + ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionObjectToWorldKHR instruction to the current block."] - pub fn ray_query_get_intersection_object_to_world_khr( + #[doc = "Appends an OpGroupLogicalAndKHR instruction to the current block."] + pub fn group_logical_and_khr( &mut self, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionObjectToWorldKHR, + spirv::Op::GroupLogicalAndKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionObjectToWorldKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_object_to_world_khr( + #[doc = "Appends an OpGroupLogicalAndKHR instruction to the current block."] + pub fn insert_group_logical_and_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionObjectToWorldKHR, + spirv::Op::GroupLogicalAndKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionWorldToObjectKHR instruction to the current block."] - pub fn ray_query_get_intersection_world_to_object_khr( + #[doc = "Appends an OpGroupLogicalOrKHR instruction to the current block."] + pub fn group_logical_or_khr( &mut self, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionWorldToObjectKHR, + spirv::Op::GroupLogicalOrKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpRayQueryGetIntersectionWorldToObjectKHR instruction to the current block."] - pub fn insert_ray_query_get_intersection_world_to_object_khr( + #[doc = "Appends an OpGroupLogicalOrKHR instruction to the current block."] + pub fn insert_group_logical_or_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - ray_query: spirv::Word, - intersection: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::RayQueryGetIntersectionWorldToObjectKHR, + spirv::Op::GroupLogicalOrKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(ray_query), - dr::Operand::IdRef(intersection), + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), ], ); self.insert_into_block(insert_point, inst)?; Ok(_id) } - #[doc = "Appends an OpAtomicFAddEXT instruction to the current block."] - pub fn atomic_f_add_ext( + #[doc = "Appends an OpGroupLogicalXorKHR instruction to the current block."] + pub fn group_logical_xor_khr( &mut self, result_type: spirv::Word, result_id: Option, - pointer: spirv::Word, - memory: spirv::Word, - semantics: spirv::Word, - value: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::AtomicFAddEXT, + spirv::Op::GroupLogicalXorKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(pointer), - dr::Operand::IdScope(memory), - dr::Operand::IdMemorySemantics(semantics), - dr::Operand::IdRef(value), + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), ], ); self.insert_into_block(InsertPoint::End, inst)?; Ok(_id) } - #[doc = "Appends an OpAtomicFAddEXT instruction to the current block."] - pub fn insert_atomic_f_add_ext( + #[doc = "Appends an OpGroupLogicalXorKHR instruction to the current block."] + pub fn insert_group_logical_xor_khr( &mut self, insert_point: InsertPoint, result_type: spirv::Word, result_id: Option, - pointer: spirv::Word, - memory: spirv::Word, - semantics: spirv::Word, - value: spirv::Word, + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, ) -> BuildResult { let _id = result_id.unwrap_or_else(|| self.id()); #[allow(unused_mut)] let mut inst = dr::Instruction::new( - spirv::Op::AtomicFAddEXT, + spirv::Op::GroupLogicalXorKHR, Some(result_type), Some(_id), vec![ - dr::Operand::IdRef(pointer), - dr::Operand::IdScope(memory), - dr::Operand::IdMemorySemantics(semantics), - dr::Operand::IdRef(value), + dr::Operand::IdScope(execution), + dr::Operand::GroupOperation(operation), + dr::Operand::IdRef(x), ], ); self.insert_into_block(insert_point, inst)?; diff --git a/rspirv/dr/build/autogen_terminator.rs b/rspirv/dr/build/autogen_terminator.rs index ed1e1605..76119356 100644 --- a/rspirv/dr/build/autogen_terminator.rs +++ b/rspirv/dr/build/autogen_terminator.rs @@ -269,4 +269,87 @@ impl Builder { let mut inst = dr::Instruction::new(spirv::Op::TerminateRayKHR, None, None, vec![]); self.insert_end_block(insert_point, inst) } + #[doc = "Appends an OpEmitMeshTasksEXT instruction and ends the current block."] + pub fn emit_mesh_tasks_ext( + &mut self, + group_count_x: spirv::Word, + group_count_y: spirv::Word, + group_count_z: spirv::Word, + payload: Option, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::EmitMeshTasksEXT, + None, + None, + vec![ + dr::Operand::IdRef(group_count_x), + dr::Operand::IdRef(group_count_y), + dr::Operand::IdRef(group_count_z), + ], + ); + if let Some(v) = payload { + inst.operands.push(dr::Operand::IdRef(v)); + } + self.end_block(inst) + } + #[doc = "Insert an OpEmitMeshTasksEXT instruction and ends the current block."] + pub fn insert_emit_mesh_tasks_ext( + &mut self, + insert_point: InsertPoint, + group_count_x: spirv::Word, + group_count_y: spirv::Word, + group_count_z: spirv::Word, + payload: Option, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = dr::Instruction::new( + spirv::Op::EmitMeshTasksEXT, + None, + None, + vec![ + dr::Operand::IdRef(group_count_x), + dr::Operand::IdRef(group_count_y), + dr::Operand::IdRef(group_count_z), + ], + ); + if let Some(v) = payload { + inst.operands.push(dr::Operand::IdRef(v)); + } + self.insert_end_block(insert_point, inst) + } + #[doc = "Appends an OpDemoteToHelperInvocation instruction and ends the current block."] + pub fn demote_to_helper_invocation(&mut self) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = + dr::Instruction::new(spirv::Op::DemoteToHelperInvocation, None, None, vec![]); + self.end_block(inst) + } + #[doc = "Insert an OpDemoteToHelperInvocation instruction and ends the current block."] + pub fn insert_demote_to_helper_invocation( + &mut self, + insert_point: InsertPoint, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = + dr::Instruction::new(spirv::Op::DemoteToHelperInvocation, None, None, vec![]); + self.insert_end_block(insert_point, inst) + } + #[doc = "Appends an OpDemoteToHelperInvocationEXT instruction and ends the current block."] + pub fn demote_to_helper_invocation_ext(&mut self) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = + dr::Instruction::new(spirv::Op::DemoteToHelperInvocationEXT, None, None, vec![]); + self.end_block(inst) + } + #[doc = "Insert an OpDemoteToHelperInvocationEXT instruction and ends the current block."] + pub fn insert_demote_to_helper_invocation_ext( + &mut self, + insert_point: InsertPoint, + ) -> BuildResult<()> { + #[allow(unused_mut)] + let mut inst = + dr::Instruction::new(spirv::Op::DemoteToHelperInvocationEXT, None, None, vec![]); + self.insert_end_block(insert_point, inst) + } } diff --git a/rspirv/dr/build/autogen_type.rs b/rspirv/dr/build/autogen_type.rs index 640d380a..80ca081b 100644 --- a/rspirv/dr/build/autogen_type.rs +++ b/rspirv/dr/build/autogen_type.rs @@ -565,6 +565,25 @@ impl Builder { new_id } } + #[doc = "Appends an OpTypeHitObjectNV instruction and returns the result id, or return the existing id if the instruction was already present."] + pub fn type_hit_object_nv(&mut self) -> spirv::Word { + self.type_hit_object_nv_id(None) + } + #[doc = "Appends an OpTypeHitObjectNV instruction and returns the result id, or return the existing id if the instruction was already present."] + pub fn type_hit_object_nv_id(&mut self, result_id: Option) -> spirv::Word { + let mut inst = dr::Instruction::new(spirv::Op::TypeHitObjectNV, None, result_id, vec![]); + if let Some(result_id) = result_id { + self.module.types_global_values.push(inst); + result_id + } else if let Some(id) = self.dedup_insert_type(&inst) { + id + } else { + let new_id = self.id(); + inst.result_id = Some(new_id); + self.module.types_global_values.push(inst); + new_id + } + } #[doc = "Appends an OpTypeAccelerationStructureKHR instruction and returns the result id, or return the existing id if the instruction was already present."] pub fn type_acceleration_structure_khr(&mut self) -> spirv::Word { self.type_acceleration_structure_khr_id(None) diff --git a/rspirv/dr/build/mod.rs b/rspirv/dr/build/mod.rs index 7cedd6b4..704472f5 100644 --- a/rspirv/dr/build/mod.rs +++ b/rspirv/dr/build/mod.rs @@ -1241,7 +1241,7 @@ mod tests { assert_eq!( b.module().disassemble(), - "; SPIR-V\n; Version: 1.5\n; Generator: rspirv\n; Bound: 11\n\ + "; SPIR-V\n; Version: 1.6\n; Generator: rspirv\n; Bound: 11\n\ %1 = OpTypeVoid\n\ %2 = OpTypeFloat 32\n\ %3 = OpTypePointer Input %2\n\ @@ -1290,7 +1290,7 @@ mod tests { assert_eq!( b.module().disassemble(), - "; SPIR-V\n; Version: 1.5\n; Generator: rspirv\n; Bound: 9\n\ + "; SPIR-V\n; Version: 1.6\n; Generator: rspirv\n; Bound: 9\n\ %1 = OpTypeVoid\n\ %2 = OpTypeFloat 32\n\ %3 = OpTypeFunction %1 %1\n\ diff --git a/rspirv/grammar/autogen_table.rs b/rspirv/grammar/autogen_table.rs index 1f92a7ca..e74b1047 100644 --- a/rspirv/grammar/autogen_table.rs +++ b/rspirv/grammar/autogen_table.rs @@ -3259,6 +3259,19 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ ["SPV_KHR_subgroup_vote"], [(IdResultType, One), (IdResult, One), (IdRef, One)] ), + inst!( + GroupNonUniformRotateKHR, + [GroupNonUniformRotateKHR], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdScope, One), + (IdRef, One), + (IdRef, One), + (IdRef, ZeroOrOne) + ] + ), inst!( SubgroupReadInvocationKHR, [SubgroupBallotKHR], @@ -3312,9 +3325,33 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ ["SPV_KHR_ray_tracing"], [] ), + inst!( + SDot, + [DotProduct], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdRef, One), + (IdRef, One), + (PackedVectorFormat, ZeroOrOne) + ] + ), inst!( SDotKHR, [DotProductKHR], + ["SPV_KHR_integer_dot_product"], + [ + (IdResultType, One), + (IdResult, One), + (IdRef, One), + (IdRef, One), + (PackedVectorFormat, ZeroOrOne) + ] + ), + inst!( + UDot, + [DotProduct], [], [ (IdResultType, One), @@ -3327,6 +3364,18 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ inst!( UDotKHR, [DotProductKHR], + ["SPV_KHR_integer_dot_product"], + [ + (IdResultType, One), + (IdResult, One), + (IdRef, One), + (IdRef, One), + (PackedVectorFormat, ZeroOrOne) + ] + ), + inst!( + SUDot, + [DotProduct], [], [ (IdResultType, One), @@ -3339,18 +3388,44 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ inst!( SUDotKHR, [DotProductKHR], + ["SPV_KHR_integer_dot_product"], + [ + (IdResultType, One), + (IdResult, One), + (IdRef, One), + (IdRef, One), + (PackedVectorFormat, ZeroOrOne) + ] + ), + inst!( + SDotAccSat, + [DotProduct], [], [ (IdResultType, One), (IdResult, One), (IdRef, One), (IdRef, One), + (IdRef, One), (PackedVectorFormat, ZeroOrOne) ] ), inst!( SDotAccSatKHR, [DotProductKHR], + ["SPV_KHR_integer_dot_product"], + [ + (IdResultType, One), + (IdResult, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (PackedVectorFormat, ZeroOrOne) + ] + ), + inst!( + UDotAccSat, + [DotProduct], [], [ (IdResultType, One), @@ -3364,6 +3439,19 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ inst!( UDotAccSatKHR, [DotProductKHR], + ["SPV_KHR_integer_dot_product"], + [ + (IdResultType, One), + (IdResult, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (PackedVectorFormat, ZeroOrOne) + ] + ), + inst!( + SUDotAccSat, + [DotProduct], [], [ (IdResultType, One), @@ -3377,7 +3465,7 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ inst!( SUDotAccSatKHR, [DotProductKHR], - [], + ["SPV_KHR_integer_dot_product"], [ (IdResultType, One), (IdResult, One), @@ -3443,6 +3531,58 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ (IdRef, One) ] ), + inst!( + ImageSampleWeightedQCOM, + [TextureSampleWeightedQCOM], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + ImageBoxFilterQCOM, + [TextureBoxFilterQCOM], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + ImageBlockMatchSSDQCOM, + [TextureBlockMatchQCOM], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + ImageBlockMatchSADQCOM, + [TextureBlockMatchQCOM], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), inst!( GroupIAddNonUniformAMD, [Groups], @@ -3565,9 +3705,305 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ inst!( ReadClockKHR, [ShaderClockKHR], - ["SPV_KHR_shader_clock"], + [], [(IdResultType, One), (IdResult, One), (IdScope, One)] ), + inst!( + HitObjectRecordHitMotionNV, + [ShaderInvocationReorderNV, RayTracingMotionBlurNV], + [], + [ + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + HitObjectRecordHitWithIndexMotionNV, + [ShaderInvocationReorderNV, RayTracingMotionBlurNV], + [], + [ + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + HitObjectRecordMissMotionNV, + [ShaderInvocationReorderNV, RayTracingMotionBlurNV], + [], + [ + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + HitObjectGetWorldToObjectNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetObjectToWorldNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetObjectRayDirectionNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetObjectRayOriginNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectTraceRayMotionNV, + [ShaderInvocationReorderNV, RayTracingMotionBlurNV], + [], + [ + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + HitObjectGetShaderRecordBufferHandleNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetShaderBindingTableRecordIndexNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectRecordEmptyNV, + [ShaderInvocationReorderNV], + [], + [(IdRef, One)] + ), + inst!( + HitObjectTraceRayNV, + [ShaderInvocationReorderNV], + [], + [ + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + HitObjectRecordHitNV, + [ShaderInvocationReorderNV], + [], + [ + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + HitObjectRecordHitWithIndexNV, + [ShaderInvocationReorderNV], + [], + [ + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + HitObjectRecordMissNV, + [ShaderInvocationReorderNV], + [], + [ + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One), + (IdRef, One) + ] + ), + inst!( + HitObjectExecuteShaderNV, + [ShaderInvocationReorderNV], + [], + [(IdRef, One), (IdRef, One)] + ), + inst!( + HitObjectGetCurrentTimeNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetAttributesNV, + [ShaderInvocationReorderNV], + [], + [(IdRef, One), (IdRef, One)] + ), + inst!( + HitObjectGetHitKindNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetPrimitiveIndexNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetGeometryIndexNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetInstanceIdNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetInstanceCustomIndexNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetWorldRayDirectionNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetWorldRayOriginNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetRayTMaxNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectGetRayTMinNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectIsEmptyNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectIsHitNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + HitObjectIsMissNV, + [ShaderInvocationReorderNV], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + ReorderThreadWithHitObjectNV, + [ShaderInvocationReorderNV], + [], + [(IdRef, One), (IdRef, ZeroOrOne), (IdRef, ZeroOrOne)] + ), + inst!( + ReorderThreadWithHintNV, + [ShaderInvocationReorderNV], + [], + [(IdRef, One), (IdRef, One)] + ), + inst!( + TypeHitObjectNV, + [ShaderInvocationReorderNV], + [], + [(IdResult, One)] + ), inst!( ImageSampleFootprintNV, [ImageFootprintNV], @@ -3582,6 +4018,18 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ (ImageOperands, ZeroOrOne) ] ), + inst!( + EmitMeshTasksEXT, + [MeshShadingEXT], + [], + [(IdRef, One), (IdRef, One), (IdRef, One), (IdRef, ZeroOrOne)] + ), + inst!( + SetMeshOutputsEXT, + [MeshShadingEXT], + [], + [(IdRef, One), (IdRef, One)] + ), inst!( GroupNonUniformPartitionNV, [GroupNonUniformPartitionedNV], @@ -3780,10 +4228,11 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ ["SPV_EXT_fragment_shader_interlock"], [] ), + inst!(DemoteToHelperInvocation, [DemoteToHelperInvocation], [], []), inst!( DemoteToHelperInvocationEXT, [DemoteToHelperInvocationEXT], - ["SPV_EXT_demote_to_helper_invocation"], + [], [] ), inst!( @@ -5969,6 +6418,24 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ ["SPV_INTEL_unstructured_loop_controls"], [(LiteralInteger, ZeroOrMore)] ), + inst!( + AliasDomainDeclINTEL, + [MemoryAccessAliasingINTEL], + ["SPV_INTEL_memory_access_aliasing"], + [(IdResult, One), (IdRef, ZeroOrOne)] + ), + inst!( + AliasScopeDeclINTEL, + [MemoryAccessAliasingINTEL], + ["SPV_INTEL_memory_access_aliasing"], + [(IdResult, One), (IdRef, One), (IdRef, ZeroOrOne)] + ), + inst!( + AliasScopeListDeclINTEL, + [MemoryAccessAliasingINTEL], + ["SPV_INTEL_memory_access_aliasing"], + [(IdResult, One), (IdRef, ZeroOrMore)] + ), inst!( FixedSqrtINTEL, [ArbitraryPrecisionFixedPointINTEL], @@ -6393,4 +6860,124 @@ static INSTRUCTION_TABLE: &[Instruction<'static>] = &[ [], [(IdRef, ZeroOrMore)] ), + inst!( + ConvertFToBF16INTEL, + [BFloat16ConversionINTEL], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + ConvertBF16ToFINTEL, + [BFloat16ConversionINTEL], + [], + [(IdResultType, One), (IdResult, One), (IdRef, One)] + ), + inst!( + ControlBarrierArriveINTEL, + [SplitBarrierINTEL], + [], + [(IdScope, One), (IdScope, One), (IdMemorySemantics, One)] + ), + inst!( + ControlBarrierWaitINTEL, + [SplitBarrierINTEL], + [], + [(IdScope, One), (IdScope, One), (IdMemorySemantics, One)] + ), + inst!( + GroupIMulKHR, + [GroupUniformArithmeticKHR], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdScope, One), + (GroupOperation, One), + (IdRef, One) + ] + ), + inst!( + GroupFMulKHR, + [GroupUniformArithmeticKHR], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdScope, One), + (GroupOperation, One), + (IdRef, One) + ] + ), + inst!( + GroupBitwiseAndKHR, + [GroupUniformArithmeticKHR], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdScope, One), + (GroupOperation, One), + (IdRef, One) + ] + ), + inst!( + GroupBitwiseOrKHR, + [GroupUniformArithmeticKHR], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdScope, One), + (GroupOperation, One), + (IdRef, One) + ] + ), + inst!( + GroupBitwiseXorKHR, + [GroupUniformArithmeticKHR], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdScope, One), + (GroupOperation, One), + (IdRef, One) + ] + ), + inst!( + GroupLogicalAndKHR, + [GroupUniformArithmeticKHR], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdScope, One), + (GroupOperation, One), + (IdRef, One) + ] + ), + inst!( + GroupLogicalOrKHR, + [GroupUniformArithmeticKHR], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdScope, One), + (GroupOperation, One), + (IdRef, One) + ] + ), + inst!( + GroupLogicalXorKHR, + [GroupUniformArithmeticKHR], + [], + [ + (IdResultType, One), + (IdResult, One), + (IdScope, One), + (GroupOperation, One), + (IdRef, One) + ] + ), ]; diff --git a/rspirv/grammar/reflect.rs b/rspirv/grammar/reflect.rs index fe0f90c4..f8129b2e 100644 --- a/rspirv/grammar/reflect.rs +++ b/rspirv/grammar/reflect.rs @@ -107,6 +107,7 @@ pub fn is_abort(opcode: spirv::Op) -> bool { | spirv::Op::TerminateInvocation | spirv::Op::TerminateRayKHR | spirv::Op::IgnoreIntersectionKHR + | spirv::Op::EmitMeshTasksEXT | spirv::Op::Unreachable ) } diff --git a/rspirv/lib.rs b/rspirv/lib.rs index f785b6ae..3c187ee7 100644 --- a/rspirv/lib.rs +++ b/rspirv/lib.rs @@ -61,7 +61,7 @@ //! // Disassembling //! assert_eq!(module.disassemble(), //! "; SPIR-V\n\ -//! ; Version: 1.5\n\ +//! ; Version: 1.6\n\ //! ; Generator: rspirv\n\ //! ; Bound: 5\n\ //! OpMemoryModel Logical GLSL450\n\ diff --git a/rspirv/lift/autogen_context.rs b/rspirv/lift/autogen_context.rs index d9191105..1eca2c20 100644 --- a/rspirv/lift/autogen_context.rs +++ b/rspirv/lift/autogen_context.rs @@ -163,6 +163,7 @@ impl LiftContext { .ok_or(OperandError::Missing)?, }), 4416u32 => Ok(ops::Branch::TerminateInvocation), + 5380u32 => Ok(ops::Branch::DemoteToHelperInvocation), _ => Err(InstructionError::WrongOpcode), } } @@ -170,9 +171,35 @@ impl LiftContext { &mut self, raw: &dr::Instruction, ) -> Result { + let mut operands = raw.operands.iter(); match raw.class.opcode as u32 { 4448u32 => Ok(ops::Terminator::IgnoreIntersectionKHR), 4449u32 => Ok(ops::Terminator::TerminateRayKHR), + 5294u32 => Ok(ops::Terminator::EmitMeshTasksEXT { + group_count_x: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + group_count_y: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + group_count_z: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + payload: match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }, + }), _ => self.lift_branch(raw).map(ops::Terminator::Branch), } } @@ -5234,6 +5261,31 @@ impl LiftContext { }) .ok_or(OperandError::Missing)?, }), + 4431u32 => Ok(ops::Op::GroupNonUniformRotateKHR { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + value: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + delta: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + cluster_size: match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }, + }), 4432u32 => Ok(ops::Op::SubgroupReadInvocationKHR { value: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), @@ -5338,7 +5390,7 @@ impl LiftContext { }) .ok_or(OperandError::Missing)?, }), - 4450u32 => Ok(ops::Op::SDotKHR { + 4450u32 => Ok(ops::Op::SDot { vector_1: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), @@ -5357,7 +5409,7 @@ impl LiftContext { None => None, }, }), - 4451u32 => Ok(ops::Op::UDotKHR { + 4451u32 => Ok(ops::Op::UDot { vector_1: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), @@ -5376,7 +5428,7 @@ impl LiftContext { None => None, }, }), - 4452u32 => Ok(ops::Op::SUDotKHR { + 4452u32 => Ok(ops::Op::SUDot { vector_1: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), @@ -5395,7 +5447,7 @@ impl LiftContext { None => None, }, }), - 4453u32 => Ok(ops::Op::SDotAccSatKHR { + 4453u32 => Ok(ops::Op::SDotAccSat { vector_1: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), @@ -5420,7 +5472,7 @@ impl LiftContext { None => None, }, }), - 4454u32 => Ok(ops::Op::UDotAccSatKHR { + 4454u32 => Ok(ops::Op::UDotAccSat { vector_1: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), @@ -5445,7 +5497,7 @@ impl LiftContext { None => None, }, }), - 4455u32 => Ok(ops::Op::SUDotAccSatKHR { + 4455u32 => Ok(ops::Op::SUDotAccSat { vector_1: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), @@ -5572,6 +5624,110 @@ impl LiftContext { }) .ok_or(OperandError::Missing)?, }), + 4480u32 => Ok(ops::Op::ImageSampleWeightedQCOM { + texture: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + coordinates: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + weights: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 4481u32 => Ok(ops::Op::ImageBoxFilterQCOM { + texture: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + coordinates: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + box_size: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 4482u32 => Ok(ops::Op::ImageBlockMatchSSDQCOM { + target: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + target_coordinates: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + reference: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + reference_coordinates: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + block_size: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 4483u32 => Ok(ops::Op::ImageBlockMatchSADQCOM { + target: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + target_coordinates: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + reference: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + reference_coordinates: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + block_size: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), 5000u32 => Ok(ops::Op::GroupIAddNonUniformAMD { execution: (match operands.next() { Some(dr::Operand::IdScope(value)) => Some(*value), @@ -5774,383 +5930,1173 @@ impl LiftContext { }) .ok_or(OperandError::Missing)?, }), - 5283u32 => Ok(ops::Op::ImageSampleFootprintNV { - sampled_image: (match operands.next() { + 5249u32 => Ok(ops::Op::HitObjectRecordHitMotionNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - coordinate: (match operands.next() { + acceleration_structure: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - granularity: (match operands.next() { + instance_id: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - coarse: (match operands.next() { + primitive_id: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - image_operands: match operands.next() { - Some(dr::Operand::ImageOperands(value)) => { - let operands = operands - .map(|op| match *op { - dr::Operand::IdRef(second) => Ok(second), - _ => Err(OperandError::WrongType), - }) - .collect::, _>>()?; - Some((*value, operands)) - } + geometry_index: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, - }, - }), - 5296u32 => Ok(ops::Op::GroupNonUniformPartitionNV { - value: (match operands.next() { + }) + .ok_or(OperandError::Missing)?, + hit_kind: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - }), - 5299u32 => Ok(ops::Op::WritePackedPrimitiveIndices4x8NV { - index_offset: (match operands.next() { + sbt_record_offset: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - packed_indices: (match operands.next() { + sbt_record_stride: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - }), - 5334u32 => Ok(ops::Op::ReportIntersectionKHR { - hit: (match operands.next() { + origin: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - hit_kind: (match operands.next() { + t_min: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - }), - 5335u32 => Ok(ops::Op::IgnoreIntersectionNV), - 5336u32 => Ok(ops::Op::TerminateRayNV), - 5337u32 => Ok(ops::Op::TraceNV { - accel: (match operands.next() { + direction: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_flags: (match operands.next() { + t_max: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - cull_mask: (match operands.next() { + current_time: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - sbt_offset: (match operands.next() { + hit_object_attributes: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - sbt_stride: (match operands.next() { + }), + 5250u32 => Ok(ops::Op::HitObjectRecordHitWithIndexMotionNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - miss_index: (match operands.next() { + acceleration_structure: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_origin: (match operands.next() { + instance_id: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_tmin: (match operands.next() { + primitive_id: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_direction: (match operands.next() { + geometry_index: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_tmax: (match operands.next() { + hit_kind: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - payload_id: (match operands.next() { + sbt_record_index: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - }), - 5338u32 => Ok(ops::Op::TraceMotionNV { - accel: (match operands.next() { + origin: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_flags: (match operands.next() { + t_min: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - cull_mask: (match operands.next() { + direction: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - sbt_offset: (match operands.next() { + t_max: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - sbt_stride: (match operands.next() { + current_time: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - miss_index: (match operands.next() { + hit_object_attributes: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_origin: (match operands.next() { + }), + 5251u32 => Ok(ops::Op::HitObjectRecordMissMotionNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_tmin: (match operands.next() { + sbt_index: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_direction: (match operands.next() { + origin: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_tmax: (match operands.next() { + t_min: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - time: (match operands.next() { + direction: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - payload_id: (match operands.next() { + t_max: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - }), - 5339u32 => Ok(ops::Op::TraceRayMotionNV { - accel: (match operands.next() { + current_time: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_flags: (match operands.next() { + }), + 5252u32 => Ok(ops::Op::HitObjectGetWorldToObjectNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - cull_mask: (match operands.next() { + }), + 5253u32 => Ok(ops::Op::HitObjectGetObjectToWorldNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - sbt_offset: (match operands.next() { + }), + 5254u32 => Ok(ops::Op::HitObjectGetObjectRayDirectionNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - sbt_stride: (match operands.next() { + }), + 5255u32 => Ok(ops::Op::HitObjectGetObjectRayOriginNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - miss_index: (match operands.next() { + }), + 5256u32 => Ok(ops::Op::HitObjectTraceRayMotionNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_origin: (match operands.next() { + acceleration_structure: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_tmin: (match operands.next() { + ray_flags: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_direction: (match operands.next() { + cullmask: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - ray_tmax: (match operands.next() { + sbt_record_offset: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - time: (match operands.next() { + sbt_record_stride: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - payload: (match operands.next() { + miss_index: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - }), - 5344u32 => Ok(ops::Op::ExecuteCallableNV { - sbt_index: (match operands.next() { + origin: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - callable_data_id: (match operands.next() { + t_min: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - }), - 5359u32 => Ok(ops::Op::CooperativeMatrixLoadNV { - pointer: (match operands.next() { + direction: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - stride: (match operands.next() { + t_max: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - column_major: (match operands.next() { + time: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - memory_access: match operands.next() { - Some(dr::Operand::MemoryAccess(value)) => Some(*value), + payload: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, - }, + }) + .ok_or(OperandError::Missing)?, }), - 5360u32 => Ok(ops::Op::CooperativeMatrixStoreNV { - pointer: (match operands.next() { + 5257u32 => Ok(ops::Op::HitObjectGetShaderRecordBufferHandleNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - object: (match operands.next() { + }), + 5258u32 => Ok(ops::Op::HitObjectGetShaderBindingTableRecordIndexNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - stride: (match operands.next() { + }), + 5259u32 => Ok(ops::Op::HitObjectRecordEmptyNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - column_major: (match operands.next() { + }), + 5260u32 => Ok(ops::Op::HitObjectTraceRayNV { + hit_object: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - memory_access: match operands.next() { - Some(dr::Operand::MemoryAccess(value)) => Some(*value), - Some(_) => return Err(OperandError::WrongType.into()), - None => None, - }, - }), - 5361u32 => Ok(ops::Op::CooperativeMatrixMulAddNV { - a: (match operands.next() { + acceleration_structure: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - b: (match operands.next() { + ray_flags: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, }) .ok_or(OperandError::Missing)?, - c: (match operands.next() { + cullmask: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_record_offset: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_record_stride: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + miss_index: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + origin: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + t_min: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + direction: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + t_max: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + payload: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5261u32 => Ok(ops::Op::HitObjectRecordHitNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + acceleration_structure: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + instance_id: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + primitive_id: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + geometry_index: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + hit_kind: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_record_offset: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_record_stride: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + origin: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + t_min: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + direction: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + t_max: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + hit_object_attributes: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5262u32 => Ok(ops::Op::HitObjectRecordHitWithIndexNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + acceleration_structure: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + instance_id: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + primitive_id: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + geometry_index: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + hit_kind: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_record_index: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + origin: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + t_min: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + direction: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + t_max: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + hit_object_attributes: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5263u32 => Ok(ops::Op::HitObjectRecordMissNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_index: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + origin: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + t_min: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + direction: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + t_max: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5264u32 => Ok(ops::Op::HitObjectExecuteShaderNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + payload: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5265u32 => Ok(ops::Op::HitObjectGetCurrentTimeNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5266u32 => Ok(ops::Op::HitObjectGetAttributesNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + hit_object_attribute: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5267u32 => Ok(ops::Op::HitObjectGetHitKindNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5268u32 => Ok(ops::Op::HitObjectGetPrimitiveIndexNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5269u32 => Ok(ops::Op::HitObjectGetGeometryIndexNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5270u32 => Ok(ops::Op::HitObjectGetInstanceIdNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5271u32 => Ok(ops::Op::HitObjectGetInstanceCustomIndexNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5272u32 => Ok(ops::Op::HitObjectGetWorldRayDirectionNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5273u32 => Ok(ops::Op::HitObjectGetWorldRayOriginNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5274u32 => Ok(ops::Op::HitObjectGetRayTMaxNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5275u32 => Ok(ops::Op::HitObjectGetRayTMinNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5276u32 => Ok(ops::Op::HitObjectIsEmptyNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5277u32 => Ok(ops::Op::HitObjectIsHitNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5278u32 => Ok(ops::Op::HitObjectIsMissNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5279u32 => Ok(ops::Op::ReorderThreadWithHitObjectNV { + hit_object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + hint: match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }, + bits: match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }, + }), + 5280u32 => Ok(ops::Op::ReorderThreadWithHintNV { + hint: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + bits: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5283u32 => Ok(ops::Op::ImageSampleFootprintNV { + sampled_image: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + coordinate: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + granularity: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + coarse: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + image_operands: match operands.next() { + Some(dr::Operand::ImageOperands(value)) => { + let operands = operands + .map(|op| match *op { + dr::Operand::IdRef(second) => Ok(second), + _ => Err(OperandError::WrongType), + }) + .collect::, _>>()?; + Some((*value, operands)) + } + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }, + }), + 5295u32 => Ok(ops::Op::SetMeshOutputsEXT { + vertex_count: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + primitive_count: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5296u32 => Ok(ops::Op::GroupNonUniformPartitionNV { + value: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5299u32 => Ok(ops::Op::WritePackedPrimitiveIndices4x8NV { + index_offset: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + packed_indices: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5334u32 => Ok(ops::Op::ReportIntersectionKHR { + hit: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + hit_kind: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5335u32 => Ok(ops::Op::IgnoreIntersectionNV), + 5336u32 => Ok(ops::Op::TerminateRayNV), + 5337u32 => Ok(ops::Op::TraceNV { + accel: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_flags: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + cull_mask: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_offset: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_stride: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + miss_index: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_origin: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_tmin: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_direction: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_tmax: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + payload_id: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5338u32 => Ok(ops::Op::TraceMotionNV { + accel: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_flags: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + cull_mask: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_offset: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_stride: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + miss_index: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_origin: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_tmin: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_direction: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_tmax: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + time: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + payload_id: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5339u32 => Ok(ops::Op::TraceRayMotionNV { + accel: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_flags: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + cull_mask: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_offset: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + sbt_stride: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + miss_index: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_origin: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_tmin: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_direction: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + ray_tmax: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + time: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + payload: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5344u32 => Ok(ops::Op::ExecuteCallableNV { + sbt_index: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + callable_data_id: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 5359u32 => Ok(ops::Op::CooperativeMatrixLoadNV { + pointer: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + stride: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + column_major: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + memory_access: match operands.next() { + Some(dr::Operand::MemoryAccess(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }, + }), + 5360u32 => Ok(ops::Op::CooperativeMatrixStoreNV { + pointer: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + object: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + stride: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + column_major: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + memory_access: match operands.next() { + Some(dr::Operand::MemoryAccess(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }, + }), + 5361u32 => Ok(ops::Op::CooperativeMatrixMulAddNV { + a: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + b: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + c: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(*value), Some(_) => return Err(OperandError::WrongType.into()), None => None, @@ -6167,7 +7113,6 @@ impl LiftContext { }), 5364u32 => Ok(ops::Op::BeginInvocationInterlockEXT), 5365u32 => Ok(ops::Op::EndInvocationInterlockEXT), - 5380u32 => Ok(ops::Op::DemoteToHelperInvocationEXT), 5381u32 => Ok(ops::Op::IsHelperInvocationEXT), 5391u32 => Ok(ops::Op::ConvertUToImageNV { operand: (match operands.next() { @@ -10068,6 +11013,39 @@ impl LiftContext { vec }, }), + 5911u32 => Ok(ops::Op::AliasDomainDeclINTEL { + name: match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }, + }), + 5912u32 => Ok(ops::Op::AliasScopeDeclINTEL { + alias_domain: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + name: match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }, + }), + 5913u32 => Ok(ops::Op::AliasScopeListDeclINTEL { + alias_scope1_alias_scope2: { + let mut vec = Vec::new(); + while let Some(item) = match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + } { + vec.push(item); + } + vec + }, + }), 5923u32 => Ok(ops::Op::FixedSqrtINTEL { input_type: (match operands.next() { Some(dr::Operand::IdRef(value)) => Some(self.types.lookup_token(*value)), @@ -10846,6 +11824,222 @@ impl LiftContext { }) .ok_or(OperandError::Missing)?, }), + 6116u32 => Ok(ops::Op::ConvertFToBF16INTEL { + float_value: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6117u32 => Ok(ops::Op::ConvertBF16ToFINTEL { + b_float16_value: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6142u32 => Ok(ops::Op::ControlBarrierArriveINTEL { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + memory: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + semantics: (match operands.next() { + Some(dr::Operand::IdMemorySemantics(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6143u32 => Ok(ops::Op::ControlBarrierWaitINTEL { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + memory: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + semantics: (match operands.next() { + Some(dr::Operand::IdMemorySemantics(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6401u32 => Ok(ops::Op::GroupIMulKHR { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + operation: (match operands.next() { + Some(dr::Operand::GroupOperation(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + x: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6402u32 => Ok(ops::Op::GroupFMulKHR { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + operation: (match operands.next() { + Some(dr::Operand::GroupOperation(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + x: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6403u32 => Ok(ops::Op::GroupBitwiseAndKHR { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + operation: (match operands.next() { + Some(dr::Operand::GroupOperation(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + x: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6404u32 => Ok(ops::Op::GroupBitwiseOrKHR { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + operation: (match operands.next() { + Some(dr::Operand::GroupOperation(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + x: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6405u32 => Ok(ops::Op::GroupBitwiseXorKHR { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + operation: (match operands.next() { + Some(dr::Operand::GroupOperation(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + x: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6406u32 => Ok(ops::Op::GroupLogicalAndKHR { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + operation: (match operands.next() { + Some(dr::Operand::GroupOperation(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + x: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6407u32 => Ok(ops::Op::GroupLogicalOrKHR { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + operation: (match operands.next() { + Some(dr::Operand::GroupOperation(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + x: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), + 6408u32 => Ok(ops::Op::GroupLogicalXorKHR { + execution: (match operands.next() { + Some(dr::Operand::IdScope(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + operation: (match operands.next() { + Some(dr::Operand::GroupOperation(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + x: (match operands.next() { + Some(dr::Operand::IdRef(value)) => Some(*value), + Some(_) => return Err(OperandError::WrongType.into()), + None => None, + }) + .ok_or(OperandError::Missing)?, + }), _ => Err(InstructionError::WrongOpcode), } } @@ -11069,6 +12263,7 @@ impl LiftContext { 322u32 => Ok(Type::PipeStorage), 327u32 => Ok(Type::NamedBarrier), 4472u32 => Ok(Type::RayQueryKHR), + 5281u32 => Ok(Type::HitObjectNV), 5341u32 => Ok(Type::AccelerationStructureKHR), 5358u32 => Ok(Type::CooperativeMatrixNV { component_type: (match operands.next() { diff --git a/rspirv/sr/autogen_decoration.rs b/rspirv/sr/autogen_decoration.rs index 8e421de3..35034df8 100644 --- a/rspirv/sr/autogen_decoration.rs +++ b/rspirv/sr/autogen_decoration.rs @@ -55,14 +55,18 @@ pub enum Decoration { MaxByteOffsetId(spirv::Word), NoSignedWrap, NoUnsignedWrap, + WeightTextureQCOM, + BlockMatchTextureQCOM, ExplicitInterpAMD, OverrideCoverageNV, PassthroughNV, ViewportRelativeNV, SecondaryViewportRelativeNV(u32), PerPrimitiveNV, + PerPrimitiveEXT, PerViewNV, PerTaskNV, + PerVertexKHR, PerVertexNV, NonUniform, NonUniformEXT, @@ -70,6 +74,7 @@ pub enum Decoration { RestrictPointerEXT, AliasedPointer, AliasedPointerEXT, + HitObjectShaderRecordBufferNV, BindlessSamplerNV, BindlessImageNV, BoundSamplerNV, @@ -108,9 +113,27 @@ pub enum Decoration { PrefetchINTEL(u32), StallEnableINTEL, FuseLoopsInFunctionINTEL, + MathOpDSPModeINTEL(u32, u32), + AliasScopeINTEL(spirv::Word), + NoAliasINTEL(spirv::Word), + InitiationIntervalINTEL(u32), + MaxConcurrencyINTEL(u32), + PipelineEnableINTEL(u32), BufferLocationINTEL(u32), IOPipeStorageINTEL(u32), FunctionFloatingPointModeINTEL(u32, spirv::FPOperationMode), SingleElementVectorINTEL, VectorComputeCallableFunctionINTEL, + MediaBlockIOINTEL, + LatencyControlLabelINTEL(u32), + LatencyControlConstraintINTEL(u32, u32, u32), + ConduitKernelArgumentINTEL, + RegisterMapKernelArgumentINTEL, + MMHostInterfaceAddressWidthINTEL(u32), + MMHostInterfaceDataWidthINTEL(u32), + MMHostInterfaceLatencyINTEL(u32), + MMHostInterfaceReadWriteModeINTEL(spirv::AccessQualifier), + MMHostInterfaceMaxBurstINTEL(u32), + MMHostInterfaceWaitRequestINTEL(u32), + StableKernelArgumentINTEL, } diff --git a/rspirv/sr/autogen_ops.rs b/rspirv/sr/autogen_ops.rs index e6241aad..11458c42 100644 --- a/rspirv/sr/autogen_ops.rs +++ b/rspirv/sr/autogen_ops.rs @@ -47,6 +47,7 @@ pub enum Branch { size: u32, }, TerminateInvocation, + DemoteToHelperInvocation, } #[derive(Clone, Debug, Eq, PartialEq)] #[allow(clippy::upper_case_acronyms)] @@ -54,6 +55,12 @@ pub enum Terminator { Branch(Branch), IgnoreIntersectionKHR, TerminateRayKHR, + EmitMeshTasksEXT { + group_count_x: spirv::Word, + group_count_y: spirv::Word, + group_count_z: spirv::Word, + payload: Option, + }, } #[derive(Clone, Debug, Eq, PartialEq)] #[allow(clippy::upper_case_acronyms)] @@ -1341,6 +1348,12 @@ pub enum Op { SubgroupAllEqualKHR { predicate: spirv::Word, }, + GroupNonUniformRotateKHR { + execution: spirv::Word, + value: spirv::Word, + delta: spirv::Word, + cluster_size: Option, + }, SubgroupReadInvocationKHR { value: spirv::Word, index: spirv::Word, @@ -1365,34 +1378,34 @@ pub enum Op { ConvertUToAccelerationStructureKHR { accel: spirv::Word, }, - SDotKHR { + SDot { vector_1: spirv::Word, vector_2: spirv::Word, packed_vector_format: Option, }, - UDotKHR { + UDot { vector_1: spirv::Word, vector_2: spirv::Word, packed_vector_format: Option, }, - SUDotKHR { + SUDot { vector_1: spirv::Word, vector_2: spirv::Word, packed_vector_format: Option, }, - SDotAccSatKHR { + SDotAccSat { vector_1: spirv::Word, vector_2: spirv::Word, accumulator: spirv::Word, packed_vector_format: Option, }, - UDotAccSatKHR { + UDotAccSat { vector_1: spirv::Word, vector_2: spirv::Word, accumulator: spirv::Word, packed_vector_format: Option, }, - SUDotAccSatKHR { + SUDotAccSat { vector_1: spirv::Word, vector_2: spirv::Word, accumulator: spirv::Word, @@ -1425,6 +1438,30 @@ pub enum Op { ray_query: spirv::Word, intersection: spirv::Word, }, + ImageSampleWeightedQCOM { + texture: spirv::Word, + coordinates: spirv::Word, + weights: spirv::Word, + }, + ImageBoxFilterQCOM { + texture: spirv::Word, + coordinates: spirv::Word, + box_size: spirv::Word, + }, + ImageBlockMatchSSDQCOM { + target: spirv::Word, + target_coordinates: spirv::Word, + reference: spirv::Word, + reference_coordinates: spirv::Word, + block_size: spirv::Word, + }, + ImageBlockMatchSADQCOM { + target: spirv::Word, + target_coordinates: spirv::Word, + reference: spirv::Word, + reference_coordinates: spirv::Word, + block_size: spirv::Word, + }, GroupIAddNonUniformAMD { execution: spirv::Word, operation: spirv::GroupOperation, @@ -1477,6 +1514,189 @@ pub enum Op { ReadClockKHR { scope: spirv::Word, }, + HitObjectRecordHitMotionNV { + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + current_time: spirv::Word, + hit_object_attributes: spirv::Word, + }, + HitObjectRecordHitWithIndexMotionNV { + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + current_time: spirv::Word, + hit_object_attributes: spirv::Word, + }, + HitObjectRecordMissMotionNV { + hit_object: spirv::Word, + sbt_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + current_time: spirv::Word, + }, + HitObjectGetWorldToObjectNV { + hit_object: spirv::Word, + }, + HitObjectGetObjectToWorldNV { + hit_object: spirv::Word, + }, + HitObjectGetObjectRayDirectionNV { + hit_object: spirv::Word, + }, + HitObjectGetObjectRayOriginNV { + hit_object: spirv::Word, + }, + HitObjectTraceRayMotionNV { + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + ray_flags: spirv::Word, + cullmask: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, + miss_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + time: spirv::Word, + payload: spirv::Word, + }, + HitObjectGetShaderRecordBufferHandleNV { + hit_object: spirv::Word, + }, + HitObjectGetShaderBindingTableRecordIndexNV { + hit_object: spirv::Word, + }, + HitObjectRecordEmptyNV { + hit_object: spirv::Word, + }, + HitObjectTraceRayNV { + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + ray_flags: spirv::Word, + cullmask: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, + miss_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + payload: spirv::Word, + }, + HitObjectRecordHitNV { + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_offset: spirv::Word, + sbt_record_stride: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + hit_object_attributes: spirv::Word, + }, + HitObjectRecordHitWithIndexNV { + hit_object: spirv::Word, + acceleration_structure: spirv::Word, + instance_id: spirv::Word, + primitive_id: spirv::Word, + geometry_index: spirv::Word, + hit_kind: spirv::Word, + sbt_record_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + hit_object_attributes: spirv::Word, + }, + HitObjectRecordMissNV { + hit_object: spirv::Word, + sbt_index: spirv::Word, + origin: spirv::Word, + t_min: spirv::Word, + direction: spirv::Word, + t_max: spirv::Word, + }, + HitObjectExecuteShaderNV { + hit_object: spirv::Word, + payload: spirv::Word, + }, + HitObjectGetCurrentTimeNV { + hit_object: spirv::Word, + }, + HitObjectGetAttributesNV { + hit_object: spirv::Word, + hit_object_attribute: spirv::Word, + }, + HitObjectGetHitKindNV { + hit_object: spirv::Word, + }, + HitObjectGetPrimitiveIndexNV { + hit_object: spirv::Word, + }, + HitObjectGetGeometryIndexNV { + hit_object: spirv::Word, + }, + HitObjectGetInstanceIdNV { + hit_object: spirv::Word, + }, + HitObjectGetInstanceCustomIndexNV { + hit_object: spirv::Word, + }, + HitObjectGetWorldRayDirectionNV { + hit_object: spirv::Word, + }, + HitObjectGetWorldRayOriginNV { + hit_object: spirv::Word, + }, + HitObjectGetRayTMaxNV { + hit_object: spirv::Word, + }, + HitObjectGetRayTMinNV { + hit_object: spirv::Word, + }, + HitObjectIsEmptyNV { + hit_object: spirv::Word, + }, + HitObjectIsHitNV { + hit_object: spirv::Word, + }, + HitObjectIsMissNV { + hit_object: spirv::Word, + }, + ReorderThreadWithHitObjectNV { + hit_object: spirv::Word, + hint: Option, + bits: Option, + }, + ReorderThreadWithHintNV { + hint: spirv::Word, + bits: spirv::Word, + }, ImageSampleFootprintNV { sampled_image: spirv::Word, coordinate: spirv::Word, @@ -1484,6 +1704,10 @@ pub enum Op { coarse: spirv::Word, image_operands: Option<(spirv::ImageOperands, Vec)>, }, + SetMeshOutputsEXT { + vertex_count: spirv::Word, + primitive_count: spirv::Word, + }, GroupNonUniformPartitionNV { value: spirv::Word, }, @@ -1565,7 +1789,6 @@ pub enum Op { }, BeginInvocationInterlockEXT, EndInvocationInterlockEXT, - DemoteToHelperInvocationEXT, IsHelperInvocationEXT, ConvertUToImageNV { operand: spirv::Word, @@ -2532,6 +2755,16 @@ pub enum Op { LoopControlINTEL { loop_control_parameters: Vec, }, + AliasDomainDeclINTEL { + name: Option, + }, + AliasScopeDeclINTEL { + alias_domain: spirv::Word, + name: Option, + }, + AliasScopeListDeclINTEL { + alias_scope1_alias_scope2: Vec, + }, FixedSqrtINTEL { input_type: Token, input: spirv::Word, @@ -2718,4 +2951,60 @@ pub enum Op { semantics: spirv::Word, value: spirv::Word, }, + ConvertFToBF16INTEL { + float_value: spirv::Word, + }, + ConvertBF16ToFINTEL { + b_float16_value: spirv::Word, + }, + ControlBarrierArriveINTEL { + execution: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + }, + ControlBarrierWaitINTEL { + execution: spirv::Word, + memory: spirv::Word, + semantics: spirv::Word, + }, + GroupIMulKHR { + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + }, + GroupFMulKHR { + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + }, + GroupBitwiseAndKHR { + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + }, + GroupBitwiseOrKHR { + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + }, + GroupBitwiseXorKHR { + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + }, + GroupLogicalAndKHR { + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + }, + GroupLogicalOrKHR { + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + }, + GroupLogicalXorKHR { + execution: spirv::Word, + operation: spirv::GroupOperation, + x: spirv::Word, + }, } diff --git a/rspirv/sr/autogen_types.rs b/rspirv/sr/autogen_types.rs index 325f8c9a..339ed0c4 100644 --- a/rspirv/sr/autogen_types.rs +++ b/rspirv/sr/autogen_types.rs @@ -71,6 +71,7 @@ pub enum Type { PipeStorage, NamedBarrier, RayQueryKHR, + HitObjectNV, AccelerationStructureKHR, CooperativeMatrixNV { component_type: Token, diff --git a/spirv/Cargo.toml b/spirv/Cargo.toml index 26eb4914..e4025115 100644 --- a/spirv/Cargo.toml +++ b/spirv/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "spirv" -version = "0.2.0+sdk-1.2.198" +version = "0.2.0+sdk-1.3.243.0" authors = ["Lei Zhang "] edition = "2018" diff --git a/spirv/README.md b/spirv/README.md index 9c7b8db0..d5596283 100644 --- a/spirv/README.md +++ b/spirv/README.md @@ -18,7 +18,7 @@ First add to your `Cargo.toml`: ```toml [dependencies] -spirv = "0.2.0+sdk-1.2.198" +spirv = "0.2.0" ``` Version diff --git a/spirv/autogen_spirv.rs b/spirv/autogen_spirv.rs index b40f0627..a81b6a65 100644 --- a/spirv/autogen_spirv.rs +++ b/spirv/autogen_spirv.rs @@ -5,17 +5,17 @@ pub type Word = u32; pub const MAGIC_NUMBER: u32 = 0x07230203; pub const MAJOR_VERSION: u8 = 1u8; -pub const MINOR_VERSION: u8 = 5u8; -pub const REVISION: u8 = 4u8; -bitflags! { # [doc = "SPIR-V operand kind: [ImageOperands](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_image_operands_a_image_operands)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct ImageOperands : u32 { const NONE = 0u32 ; const BIAS = 1u32 ; const LOD = 2u32 ; const GRAD = 4u32 ; const CONST_OFFSET = 8u32 ; const OFFSET = 16u32 ; const CONST_OFFSETS = 32u32 ; const SAMPLE = 64u32 ; const MIN_LOD = 128u32 ; const MAKE_TEXEL_AVAILABLE = 256u32 ; const MAKE_TEXEL_AVAILABLE_KHR = 256u32 ; const MAKE_TEXEL_VISIBLE = 512u32 ; const MAKE_TEXEL_VISIBLE_KHR = 512u32 ; const NON_PRIVATE_TEXEL = 1024u32 ; const NON_PRIVATE_TEXEL_KHR = 1024u32 ; const VOLATILE_TEXEL = 2048u32 ; const VOLATILE_TEXEL_KHR = 2048u32 ; const SIGN_EXTEND = 4096u32 ; const ZERO_EXTEND = 8192u32 ; const OFFSETS = 65536u32 ; } } +pub const MINOR_VERSION: u8 = 6u8; +pub const REVISION: u8 = 1u8; +bitflags! { # [doc = "SPIR-V operand kind: [ImageOperands](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_image_operands_a_image_operands)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct ImageOperands : u32 { const NONE = 0u32 ; const BIAS = 1u32 ; const LOD = 2u32 ; const GRAD = 4u32 ; const CONST_OFFSET = 8u32 ; const OFFSET = 16u32 ; const CONST_OFFSETS = 32u32 ; const SAMPLE = 64u32 ; const MIN_LOD = 128u32 ; const MAKE_TEXEL_AVAILABLE = 256u32 ; const MAKE_TEXEL_AVAILABLE_KHR = 256u32 ; const MAKE_TEXEL_VISIBLE = 512u32 ; const MAKE_TEXEL_VISIBLE_KHR = 512u32 ; const NON_PRIVATE_TEXEL = 1024u32 ; const NON_PRIVATE_TEXEL_KHR = 1024u32 ; const VOLATILE_TEXEL = 2048u32 ; const VOLATILE_TEXEL_KHR = 2048u32 ; const SIGN_EXTEND = 4096u32 ; const ZERO_EXTEND = 8192u32 ; const NONTEMPORAL = 16384u32 ; const OFFSETS = 65536u32 ; } } bitflags! { # [doc = "SPIR-V operand kind: [FPFastMathMode](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_fp_fast_math_mode_a_fp_fast_math_mode)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct FPFastMathMode : u32 { const NONE = 0u32 ; const NOT_NAN = 1u32 ; const NOT_INF = 2u32 ; const NSZ = 4u32 ; const ALLOW_RECIP = 8u32 ; const FAST = 16u32 ; const ALLOW_CONTRACT_FAST_INTEL = 65536u32 ; const ALLOW_REASSOC_INTEL = 131072u32 ; } } bitflags! { # [doc = "SPIR-V operand kind: [SelectionControl](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_selection_control_a_selection_control)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct SelectionControl : u32 { const NONE = 0u32 ; const FLATTEN = 1u32 ; const DONT_FLATTEN = 2u32 ; } } -bitflags! { # [doc = "SPIR-V operand kind: [LoopControl](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_loop_control_a_loop_control)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct LoopControl : u32 { const NONE = 0u32 ; const UNROLL = 1u32 ; const DONT_UNROLL = 2u32 ; const DEPENDENCY_INFINITE = 4u32 ; const DEPENDENCY_LENGTH = 8u32 ; const MIN_ITERATIONS = 16u32 ; const MAX_ITERATIONS = 32u32 ; const ITERATION_MULTIPLE = 64u32 ; const PEEL_COUNT = 128u32 ; const PARTIAL_COUNT = 256u32 ; const INITIATION_INTERVAL_INTEL = 65536u32 ; const MAX_CONCURRENCY_INTEL = 131072u32 ; const DEPENDENCY_ARRAY_INTEL = 262144u32 ; const PIPELINE_ENABLE_INTEL = 524288u32 ; const LOOP_COALESCE_INTEL = 1048576u32 ; const MAX_INTERLEAVING_INTEL = 2097152u32 ; const SPECULATED_ITERATIONS_INTEL = 4194304u32 ; const NO_FUSION_INTEL = 8388608u32 ; } } +bitflags! { # [doc = "SPIR-V operand kind: [LoopControl](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_loop_control_a_loop_control)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct LoopControl : u32 { const NONE = 0u32 ; const UNROLL = 1u32 ; const DONT_UNROLL = 2u32 ; const DEPENDENCY_INFINITE = 4u32 ; const DEPENDENCY_LENGTH = 8u32 ; const MIN_ITERATIONS = 16u32 ; const MAX_ITERATIONS = 32u32 ; const ITERATION_MULTIPLE = 64u32 ; const PEEL_COUNT = 128u32 ; const PARTIAL_COUNT = 256u32 ; const INITIATION_INTERVAL_INTEL = 65536u32 ; const MAX_CONCURRENCY_INTEL = 131072u32 ; const DEPENDENCY_ARRAY_INTEL = 262144u32 ; const PIPELINE_ENABLE_INTEL = 524288u32 ; const LOOP_COALESCE_INTEL = 1048576u32 ; const MAX_INTERLEAVING_INTEL = 2097152u32 ; const SPECULATED_ITERATIONS_INTEL = 4194304u32 ; const NO_FUSION_INTEL = 8388608u32 ; const LOOP_COUNT_INTEL = 16777216u32 ; const MAX_REINVOCATION_DELAY_INTEL = 33554432u32 ; } } bitflags! { # [doc = "SPIR-V operand kind: [FunctionControl](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_function_control_a_function_control)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct FunctionControl : u32 { const NONE = 0u32 ; const INLINE = 1u32 ; const DONT_INLINE = 2u32 ; const PURE = 4u32 ; const CONST = 8u32 ; const OPT_NONE_INTEL = 65536u32 ; } } bitflags! { # [doc = "SPIR-V operand kind: [MemorySemantics](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_memory_semantics_a_memory_semantics)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct MemorySemantics : u32 { const RELAXED = 0u32 ; const NONE = 0u32 ; const ACQUIRE = 2u32 ; const RELEASE = 4u32 ; const ACQUIRE_RELEASE = 8u32 ; const SEQUENTIALLY_CONSISTENT = 16u32 ; const UNIFORM_MEMORY = 64u32 ; const SUBGROUP_MEMORY = 128u32 ; const WORKGROUP_MEMORY = 256u32 ; const CROSS_WORKGROUP_MEMORY = 512u32 ; const ATOMIC_COUNTER_MEMORY = 1024u32 ; const IMAGE_MEMORY = 2048u32 ; const OUTPUT_MEMORY = 4096u32 ; const OUTPUT_MEMORY_KHR = 4096u32 ; const MAKE_AVAILABLE = 8192u32 ; const MAKE_AVAILABLE_KHR = 8192u32 ; const MAKE_VISIBLE = 16384u32 ; const MAKE_VISIBLE_KHR = 16384u32 ; const VOLATILE = 32768u32 ; } } -bitflags! { # [doc = "SPIR-V operand kind: [MemoryAccess](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_memory_access_a_memory_access)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct MemoryAccess : u32 { const NONE = 0u32 ; const VOLATILE = 1u32 ; const ALIGNED = 2u32 ; const NONTEMPORAL = 4u32 ; const MAKE_POINTER_AVAILABLE = 8u32 ; const MAKE_POINTER_AVAILABLE_KHR = 8u32 ; const MAKE_POINTER_VISIBLE = 16u32 ; const MAKE_POINTER_VISIBLE_KHR = 16u32 ; const NON_PRIVATE_POINTER = 32u32 ; const NON_PRIVATE_POINTER_KHR = 32u32 ; } } +bitflags! { # [doc = "SPIR-V operand kind: [MemoryAccess](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_memory_access_a_memory_access)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct MemoryAccess : u32 { const NONE = 0u32 ; const VOLATILE = 1u32 ; const ALIGNED = 2u32 ; const NONTEMPORAL = 4u32 ; const MAKE_POINTER_AVAILABLE = 8u32 ; const MAKE_POINTER_AVAILABLE_KHR = 8u32 ; const MAKE_POINTER_VISIBLE = 16u32 ; const MAKE_POINTER_VISIBLE_KHR = 16u32 ; const NON_PRIVATE_POINTER = 32u32 ; const NON_PRIVATE_POINTER_KHR = 32u32 ; const ALIAS_SCOPE_INTEL_MASK = 65536u32 ; const NO_ALIAS_INTEL_MASK = 131072u32 ; } } bitflags! { # [doc = "SPIR-V operand kind: [KernelProfilingInfo](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_kernel_profiling_info_a_kernel_profiling_info)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct KernelProfilingInfo : u32 { const NONE = 0u32 ; const CMD_EXEC_TIME = 1u32 ; } } -bitflags! { # [doc = "SPIR-V operand kind: [RayFlags](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_ray_flags_a_ray_flags)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct RayFlags : u32 { const NONE_KHR = 0u32 ; const OPAQUE_KHR = 1u32 ; const NO_OPAQUE_KHR = 2u32 ; const TERMINATE_ON_FIRST_HIT_KHR = 4u32 ; const SKIP_CLOSEST_HIT_SHADER_KHR = 8u32 ; const CULL_BACK_FACING_TRIANGLES_KHR = 16u32 ; const CULL_FRONT_FACING_TRIANGLES_KHR = 32u32 ; const CULL_OPAQUE_KHR = 64u32 ; const CULL_NO_OPAQUE_KHR = 128u32 ; const SKIP_TRIANGLES_KHR = 256u32 ; const SKIP_AAB_BS_KHR = 512u32 ; } } +bitflags! { # [doc = "SPIR-V operand kind: [RayFlags](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_ray_flags_a_ray_flags)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct RayFlags : u32 { const NONE_KHR = 0u32 ; const OPAQUE_KHR = 1u32 ; const NO_OPAQUE_KHR = 2u32 ; const TERMINATE_ON_FIRST_HIT_KHR = 4u32 ; const SKIP_CLOSEST_HIT_SHADER_KHR = 8u32 ; const CULL_BACK_FACING_TRIANGLES_KHR = 16u32 ; const CULL_FRONT_FACING_TRIANGLES_KHR = 32u32 ; const CULL_OPAQUE_KHR = 64u32 ; const CULL_NO_OPAQUE_KHR = 128u32 ; const SKIP_TRIANGLES_KHR = 256u32 ; const SKIP_AAB_BS_KHR = 512u32 ; const FORCE_OPACITY_MICROMAP2_STATE_EXT = 1024u32 ; } } bitflags! { # [doc = "SPIR-V operand kind: [FragmentShadingRate](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_fragment_shading_rate_a_fragment_shading_rate)"] # [cfg_attr (feature = "serialize" , derive (serde :: Serialize))] # [cfg_attr (feature = "deserialize" , derive (serde :: Deserialize))] pub struct FragmentShadingRate : u32 { const VERTICAL2_PIXELS = 1u32 ; const VERTICAL4_PIXELS = 2u32 ; const HORIZONTAL2_PIXELS = 4u32 ; const HORIZONTAL4_PIXELS = 8u32 ; } } #[doc = "SPIR-V operand kind: [SourceLanguage](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_source_language_a_source_language)"] #[repr(u32)] @@ -31,11 +31,12 @@ pub enum SourceLanguage { OpenCL_CPP = 4u32, HLSL = 5u32, CPP_for_OpenCL = 6u32, + SYCL = 7u32, } impl SourceLanguage { pub fn from_u32(n: u32) -> Option { Some(match n { - 0u32..=6u32 => unsafe { core::mem::transmute::(n) }, + 0u32..=7u32 => unsafe { core::mem::transmute::(n) }, _ => return None, }) } @@ -53,6 +54,7 @@ impl core::str::FromStr for SourceLanguage { "OpenCL_CPP" => Ok(Self::OpenCL_CPP), "HLSL" => Ok(Self::HLSL), "CPP_for_OpenCL" => Ok(Self::CPP_for_OpenCL), + "SYCL" => Ok(Self::SYCL), _ => Err(()), } } @@ -79,6 +81,8 @@ pub enum ExecutionModel { ClosestHitNV = 5316u32, MissNV = 5317u32, CallableNV = 5318u32, + TaskEXT = 5364u32, + MeshEXT = 5365u32, } impl ExecutionModel { pub fn from_u32(n: u32) -> Option { @@ -86,6 +90,7 @@ impl ExecutionModel { 0u32..=6u32 => unsafe { core::mem::transmute::(n) }, 5267u32..=5268u32 => unsafe { core::mem::transmute::(n) }, 5313u32..=5318u32 => unsafe { core::mem::transmute::(n) }, + 5364u32..=5365u32 => unsafe { core::mem::transmute::(n) }, _ => return None, }) } @@ -124,6 +129,8 @@ impl core::str::FromStr for ExecutionModel { "MissKHR" => Ok(Self::MissNV), "CallableNV" => Ok(Self::CallableNV), "CallableKHR" => Ok(Self::CallableNV), + "TaskEXT" => Ok(Self::TaskEXT), + "MeshEXT" => Ok(Self::MeshEXT), _ => Err(()), } } @@ -255,7 +262,14 @@ pub enum ExecutionMode { SignedZeroInfNanPreserve = 4461u32, RoundingModeRTE = 4462u32, RoundingModeRTZ = 4463u32, + EarlyAndLateFragmentTestsAMD = 5017u32, StencilRefReplacingEXT = 5027u32, + StencilRefUnchangedFrontAMD = 5079u32, + StencilRefGreaterFrontAMD = 5080u32, + StencilRefLessFrontAMD = 5081u32, + StencilRefUnchangedBackAMD = 5082u32, + StencilRefGreaterBackAMD = 5083u32, + StencilRefLessBackAMD = 5084u32, OutputLinesNV = 5269u32, OutputPrimitivesNV = 5270u32, DerivativeGroupQuadsNV = 5289u32, @@ -277,6 +291,9 @@ pub enum ExecutionMode { NoGlobalOffsetINTEL = 5895u32, NumSIMDWorkitemsINTEL = 5896u32, SchedulerTargetFmaxMhzINTEL = 5903u32, + StreamingInterfaceINTEL = 6154u32, + RegisterMapInterfaceINTEL = 6160u32, + NamedBarrierCountINTEL = 6417u32, } impl ExecutionMode { pub fn from_u32(n: u32) -> Option { @@ -287,7 +304,9 @@ impl ExecutionMode { 4421u32 => unsafe { core::mem::transmute::(4421u32) }, 4446u32 => unsafe { core::mem::transmute::(4446u32) }, 4459u32..=4463u32 => unsafe { core::mem::transmute::(n) }, + 5017u32 => unsafe { core::mem::transmute::(5017u32) }, 5027u32 => unsafe { core::mem::transmute::(5027u32) }, + 5079u32..=5084u32 => unsafe { core::mem::transmute::(n) }, 5269u32..=5270u32 => unsafe { core::mem::transmute::(n) }, 5289u32..=5290u32 => unsafe { core::mem::transmute::(n) }, 5298u32 => unsafe { core::mem::transmute::(5298u32) }, @@ -296,12 +315,19 @@ impl ExecutionMode { 5620u32..=5623u32 => unsafe { core::mem::transmute::(n) }, 5893u32..=5896u32 => unsafe { core::mem::transmute::(n) }, 5903u32 => unsafe { core::mem::transmute::(5903u32) }, + 6154u32 => unsafe { core::mem::transmute::(6154u32) }, + 6160u32 => unsafe { core::mem::transmute::(6160u32) }, + 6417u32 => unsafe { core::mem::transmute::(6417u32) }, _ => return None, }) } } #[allow(non_upper_case_globals)] -impl ExecutionMode {} +impl ExecutionMode { + pub const OutputLinesEXT: Self = Self::OutputLinesNV; + pub const OutputPrimitivesEXT: Self = Self::OutputPrimitivesNV; + pub const OutputTrianglesEXT: Self = Self::OutputTrianglesNV; +} impl core::str::FromStr for ExecutionMode { type Err = (); fn from_str(s: &str) -> Result { @@ -351,12 +377,22 @@ impl core::str::FromStr for ExecutionMode { "SignedZeroInfNanPreserve" => Ok(Self::SignedZeroInfNanPreserve), "RoundingModeRTE" => Ok(Self::RoundingModeRTE), "RoundingModeRTZ" => Ok(Self::RoundingModeRTZ), + "EarlyAndLateFragmentTestsAMD" => Ok(Self::EarlyAndLateFragmentTestsAMD), "StencilRefReplacingEXT" => Ok(Self::StencilRefReplacingEXT), + "StencilRefUnchangedFrontAMD" => Ok(Self::StencilRefUnchangedFrontAMD), + "StencilRefGreaterFrontAMD" => Ok(Self::StencilRefGreaterFrontAMD), + "StencilRefLessFrontAMD" => Ok(Self::StencilRefLessFrontAMD), + "StencilRefUnchangedBackAMD" => Ok(Self::StencilRefUnchangedBackAMD), + "StencilRefGreaterBackAMD" => Ok(Self::StencilRefGreaterBackAMD), + "StencilRefLessBackAMD" => Ok(Self::StencilRefLessBackAMD), "OutputLinesNV" => Ok(Self::OutputLinesNV), + "OutputLinesEXT" => Ok(Self::OutputLinesNV), "OutputPrimitivesNV" => Ok(Self::OutputPrimitivesNV), + "OutputPrimitivesEXT" => Ok(Self::OutputPrimitivesNV), "DerivativeGroupQuadsNV" => Ok(Self::DerivativeGroupQuadsNV), "DerivativeGroupLinearNV" => Ok(Self::DerivativeGroupLinearNV), "OutputTrianglesNV" => Ok(Self::OutputTrianglesNV), + "OutputTrianglesEXT" => Ok(Self::OutputTrianglesNV), "PixelInterlockOrderedEXT" => Ok(Self::PixelInterlockOrderedEXT), "PixelInterlockUnorderedEXT" => Ok(Self::PixelInterlockUnorderedEXT), "SampleInterlockOrderedEXT" => Ok(Self::SampleInterlockOrderedEXT), @@ -373,6 +409,9 @@ impl core::str::FromStr for ExecutionMode { "NoGlobalOffsetINTEL" => Ok(Self::NoGlobalOffsetINTEL), "NumSIMDWorkitemsINTEL" => Ok(Self::NumSIMDWorkitemsINTEL), "SchedulerTargetFmaxMhzINTEL" => Ok(Self::SchedulerTargetFmaxMhzINTEL), + "StreamingInterfaceINTEL" => Ok(Self::StreamingInterfaceINTEL), + "RegisterMapInterfaceINTEL" => Ok(Self::RegisterMapInterfaceINTEL), + "NamedBarrierCountINTEL" => Ok(Self::NamedBarrierCountINTEL), _ => Err(()), } } @@ -404,6 +443,8 @@ pub enum StorageClass { IncomingRayPayloadNV = 5342u32, ShaderRecordBufferNV = 5343u32, PhysicalStorageBuffer = 5349u32, + HitObjectAttributeNV = 5385u32, + TaskPayloadWorkgroupEXT = 5402u32, CodeSectionINTEL = 5605u32, DeviceOnlyINTEL = 5936u32, HostOnlyINTEL = 5937u32, @@ -416,6 +457,8 @@ impl StorageClass { 5338u32..=5339u32 => unsafe { core::mem::transmute::(n) }, 5342u32..=5343u32 => unsafe { core::mem::transmute::(n) }, 5349u32 => unsafe { core::mem::transmute::(5349u32) }, + 5385u32 => unsafe { core::mem::transmute::(5385u32) }, + 5402u32 => unsafe { core::mem::transmute::(5402u32) }, 5605u32 => unsafe { core::mem::transmute::(5605u32) }, 5936u32..=5937u32 => unsafe { core::mem::transmute::(n) }, _ => return None, @@ -463,6 +506,8 @@ impl core::str::FromStr for StorageClass { "ShaderRecordBufferKHR" => Ok(Self::ShaderRecordBufferNV), "PhysicalStorageBuffer" => Ok(Self::PhysicalStorageBuffer), "PhysicalStorageBufferEXT" => Ok(Self::PhysicalStorageBuffer), + "HitObjectAttributeNV" => Ok(Self::HitObjectAttributeNV), + "TaskPayloadWorkgroupEXT" => Ok(Self::TaskPayloadWorkgroupEXT), "CodeSectionINTEL" => Ok(Self::CodeSectionINTEL), "DeviceOnlyINTEL" => Ok(Self::DeviceOnlyINTEL), "HostOnlyINTEL" => Ok(Self::HostOnlyINTEL), @@ -1061,11 +1106,13 @@ pub enum FunctionParameterAttribute { NoCapture = 5u32, NoWrite = 6u32, NoReadWrite = 7u32, + RuntimeAlignedINTEL = 5940u32, } impl FunctionParameterAttribute { pub fn from_u32(n: u32) -> Option { Some(match n { 0u32..=7u32 => unsafe { core::mem::transmute::(n) }, + 5940u32 => unsafe { core::mem::transmute::(5940u32) }, _ => return None, }) } @@ -1084,6 +1131,7 @@ impl core::str::FromStr for FunctionParameterAttribute { "NoCapture" => Ok(Self::NoCapture), "NoWrite" => Ok(Self::NoWrite), "NoReadWrite" => Ok(Self::NoReadWrite), + "RuntimeAlignedINTEL" => Ok(Self::RuntimeAlignedINTEL), _ => Err(()), } } @@ -1144,6 +1192,8 @@ pub enum Decoration { MaxByteOffsetId = 47u32, NoSignedWrap = 4469u32, NoUnsignedWrap = 4470u32, + WeightTextureQCOM = 4487u32, + BlockMatchTextureQCOM = 4488u32, ExplicitInterpAMD = 4999u32, OverrideCoverageNV = 5248u32, PassthroughNV = 5250u32, @@ -1152,10 +1202,11 @@ pub enum Decoration { PerPrimitiveNV = 5271u32, PerViewNV = 5272u32, PerTaskNV = 5273u32, - PerVertexNV = 5285u32, + PerVertexKHR = 5285u32, NonUniform = 5300u32, RestrictPointer = 5355u32, AliasedPointer = 5356u32, + HitObjectShaderRecordBufferNV = 5386u32, BindlessSamplerNV = 5398u32, BindlessImageNV = 5399u32, BoundSamplerNV = 5400u32, @@ -1192,11 +1243,29 @@ pub enum Decoration { PrefetchINTEL = 5902u32, StallEnableINTEL = 5905u32, FuseLoopsInFunctionINTEL = 5907u32, + MathOpDSPModeINTEL = 5909u32, + AliasScopeINTEL = 5914u32, + NoAliasINTEL = 5915u32, + InitiationIntervalINTEL = 5917u32, + MaxConcurrencyINTEL = 5918u32, + PipelineEnableINTEL = 5919u32, BufferLocationINTEL = 5921u32, IOPipeStorageINTEL = 5944u32, FunctionFloatingPointModeINTEL = 6080u32, SingleElementVectorINTEL = 6085u32, VectorComputeCallableFunctionINTEL = 6087u32, + MediaBlockIOINTEL = 6140u32, + LatencyControlLabelINTEL = 6172u32, + LatencyControlConstraintINTEL = 6173u32, + ConduitKernelArgumentINTEL = 6175u32, + RegisterMapKernelArgumentINTEL = 6176u32, + MMHostInterfaceAddressWidthINTEL = 6177u32, + MMHostInterfaceDataWidthINTEL = 6178u32, + MMHostInterfaceLatencyINTEL = 6179u32, + MMHostInterfaceReadWriteModeINTEL = 6180u32, + MMHostInterfaceMaxBurstINTEL = 6181u32, + MMHostInterfaceWaitRequestINTEL = 6182u32, + StableKernelArgumentINTEL = 6183u32, } impl Decoration { pub fn from_u32(n: u32) -> Option { @@ -1204,6 +1273,7 @@ impl Decoration { 0u32..=11u32 => unsafe { core::mem::transmute::(n) }, 13u32..=47u32 => unsafe { core::mem::transmute::(n) }, 4469u32..=4470u32 => unsafe { core::mem::transmute::(n) }, + 4487u32..=4488u32 => unsafe { core::mem::transmute::(n) }, 4999u32 => unsafe { core::mem::transmute::(4999u32) }, 5248u32 => unsafe { core::mem::transmute::(5248u32) }, 5250u32 => unsafe { core::mem::transmute::(5250u32) }, @@ -1213,6 +1283,7 @@ impl Decoration { 5285u32 => unsafe { core::mem::transmute::(5285u32) }, 5300u32 => unsafe { core::mem::transmute::(5300u32) }, 5355u32..=5356u32 => unsafe { core::mem::transmute::(n) }, + 5386u32 => unsafe { core::mem::transmute::(5386u32) }, 5398u32..=5401u32 => unsafe { core::mem::transmute::(n) }, 5599u32 => unsafe { core::mem::transmute::(5599u32) }, 5602u32 => unsafe { core::mem::transmute::(5602u32) }, @@ -1224,17 +1295,25 @@ impl Decoration { 5899u32..=5902u32 => unsafe { core::mem::transmute::(n) }, 5905u32 => unsafe { core::mem::transmute::(5905u32) }, 5907u32 => unsafe { core::mem::transmute::(5907u32) }, + 5909u32 => unsafe { core::mem::transmute::(5909u32) }, + 5914u32..=5915u32 => unsafe { core::mem::transmute::(n) }, + 5917u32..=5919u32 => unsafe { core::mem::transmute::(n) }, 5921u32 => unsafe { core::mem::transmute::(5921u32) }, 5944u32 => unsafe { core::mem::transmute::(5944u32) }, 6080u32 => unsafe { core::mem::transmute::(6080u32) }, 6085u32 => unsafe { core::mem::transmute::(6085u32) }, 6087u32 => unsafe { core::mem::transmute::(6087u32) }, + 6140u32 => unsafe { core::mem::transmute::(6140u32) }, + 6172u32..=6173u32 => unsafe { core::mem::transmute::(n) }, + 6175u32..=6183u32 => unsafe { core::mem::transmute::(n) }, _ => return None, }) } } #[allow(non_upper_case_globals)] impl Decoration { + pub const PerPrimitiveEXT: Self = Self::PerPrimitiveNV; + pub const PerVertexNV: Self = Self::PerVertexKHR; pub const NonUniformEXT: Self = Self::NonUniform; pub const RestrictPointerEXT: Self = Self::RestrictPointer; pub const AliasedPointerEXT: Self = Self::AliasedPointer; @@ -1294,21 +1373,26 @@ impl core::str::FromStr for Decoration { "MaxByteOffsetId" => Ok(Self::MaxByteOffsetId), "NoSignedWrap" => Ok(Self::NoSignedWrap), "NoUnsignedWrap" => Ok(Self::NoUnsignedWrap), + "WeightTextureQCOM" => Ok(Self::WeightTextureQCOM), + "BlockMatchTextureQCOM" => Ok(Self::BlockMatchTextureQCOM), "ExplicitInterpAMD" => Ok(Self::ExplicitInterpAMD), "OverrideCoverageNV" => Ok(Self::OverrideCoverageNV), "PassthroughNV" => Ok(Self::PassthroughNV), "ViewportRelativeNV" => Ok(Self::ViewportRelativeNV), "SecondaryViewportRelativeNV" => Ok(Self::SecondaryViewportRelativeNV), "PerPrimitiveNV" => Ok(Self::PerPrimitiveNV), + "PerPrimitiveEXT" => Ok(Self::PerPrimitiveNV), "PerViewNV" => Ok(Self::PerViewNV), "PerTaskNV" => Ok(Self::PerTaskNV), - "PerVertexNV" => Ok(Self::PerVertexNV), + "PerVertexKHR" => Ok(Self::PerVertexKHR), + "PerVertexNV" => Ok(Self::PerVertexKHR), "NonUniform" => Ok(Self::NonUniform), "NonUniformEXT" => Ok(Self::NonUniform), "RestrictPointer" => Ok(Self::RestrictPointer), "RestrictPointerEXT" => Ok(Self::RestrictPointer), "AliasedPointer" => Ok(Self::AliasedPointer), "AliasedPointerEXT" => Ok(Self::AliasedPointer), + "HitObjectShaderRecordBufferNV" => Ok(Self::HitObjectShaderRecordBufferNV), "BindlessSamplerNV" => Ok(Self::BindlessSamplerNV), "BindlessImageNV" => Ok(Self::BindlessImageNV), "BoundSamplerNV" => Ok(Self::BoundSamplerNV), @@ -1347,11 +1431,29 @@ impl core::str::FromStr for Decoration { "PrefetchINTEL" => Ok(Self::PrefetchINTEL), "StallEnableINTEL" => Ok(Self::StallEnableINTEL), "FuseLoopsInFunctionINTEL" => Ok(Self::FuseLoopsInFunctionINTEL), + "MathOpDSPModeINTEL" => Ok(Self::MathOpDSPModeINTEL), + "AliasScopeINTEL" => Ok(Self::AliasScopeINTEL), + "NoAliasINTEL" => Ok(Self::NoAliasINTEL), + "InitiationIntervalINTEL" => Ok(Self::InitiationIntervalINTEL), + "MaxConcurrencyINTEL" => Ok(Self::MaxConcurrencyINTEL), + "PipelineEnableINTEL" => Ok(Self::PipelineEnableINTEL), "BufferLocationINTEL" => Ok(Self::BufferLocationINTEL), "IOPipeStorageINTEL" => Ok(Self::IOPipeStorageINTEL), "FunctionFloatingPointModeINTEL" => Ok(Self::FunctionFloatingPointModeINTEL), "SingleElementVectorINTEL" => Ok(Self::SingleElementVectorINTEL), "VectorComputeCallableFunctionINTEL" => Ok(Self::VectorComputeCallableFunctionINTEL), + "MediaBlockIOINTEL" => Ok(Self::MediaBlockIOINTEL), + "LatencyControlLabelINTEL" => Ok(Self::LatencyControlLabelINTEL), + "LatencyControlConstraintINTEL" => Ok(Self::LatencyControlConstraintINTEL), + "ConduitKernelArgumentINTEL" => Ok(Self::ConduitKernelArgumentINTEL), + "RegisterMapKernelArgumentINTEL" => Ok(Self::RegisterMapKernelArgumentINTEL), + "MMHostInterfaceAddressWidthINTEL" => Ok(Self::MMHostInterfaceAddressWidthINTEL), + "MMHostInterfaceDataWidthINTEL" => Ok(Self::MMHostInterfaceDataWidthINTEL), + "MMHostInterfaceLatencyINTEL" => Ok(Self::MMHostInterfaceLatencyINTEL), + "MMHostInterfaceReadWriteModeINTEL" => Ok(Self::MMHostInterfaceReadWriteModeINTEL), + "MMHostInterfaceMaxBurstINTEL" => Ok(Self::MMHostInterfaceMaxBurstINTEL), + "MMHostInterfaceWaitRequestINTEL" => Ok(Self::MMHostInterfaceWaitRequestINTEL), + "StableKernelArgumentINTEL" => Ok(Self::StableKernelArgumentINTEL), _ => Err(()), } } @@ -1404,6 +1506,11 @@ pub enum BuiltIn { SubgroupLocalInvocationId = 41u32, VertexIndex = 42u32, InstanceIndex = 43u32, + CoreIDARM = 4160u32, + CoreCountARM = 4161u32, + CoreMaxIDARM = 4162u32, + WarpIDARM = 4163u32, + WarpMaxIDARM = 4164u32, SubgroupEqMask = 4416u32, SubgroupGeMask = 4417u32, SubgroupGtMask = 4418u32, @@ -1438,10 +1545,14 @@ pub enum BuiltIn { LayerPerViewNV = 5279u32, MeshViewCountNV = 5280u32, MeshViewIndicesNV = 5281u32, - BaryCoordNV = 5286u32, - BaryCoordNoPerspNV = 5287u32, + BaryCoordKHR = 5286u32, + BaryCoordNoPerspKHR = 5287u32, FragSizeEXT = 5292u32, FragInvocationCountEXT = 5293u32, + PrimitivePointIndicesEXT = 5294u32, + PrimitiveLineIndicesEXT = 5295u32, + PrimitiveTriangleIndicesEXT = 5296u32, + CullPrimitiveEXT = 5299u32, LaunchIdNV = 5319u32, LaunchSizeNV = 5320u32, WorldRayOriginNV = 5321u32, @@ -1462,6 +1573,7 @@ pub enum BuiltIn { SMCountNV = 5375u32, WarpIDNV = 5376u32, SMIDNV = 5377u32, + CullMaskKHR = 6021u32, } impl BuiltIn { pub fn from_u32(n: u32) -> Option { @@ -1470,6 +1582,7 @@ impl BuiltIn { 3u32..=20u32 => unsafe { core::mem::transmute::(n) }, 22u32..=34u32 => unsafe { core::mem::transmute::(n) }, 36u32..=43u32 => unsafe { core::mem::transmute::(n) }, + 4160u32..=4164u32 => unsafe { core::mem::transmute::(n) }, 4416u32..=4420u32 => unsafe { core::mem::transmute::(n) }, 4424u32..=4426u32 => unsafe { core::mem::transmute::(n) }, 4432u32 => unsafe { core::mem::transmute::(4432u32) }, @@ -1484,11 +1597,13 @@ impl BuiltIn { 5264u32 => unsafe { core::mem::transmute::(5264u32) }, 5274u32..=5281u32 => unsafe { core::mem::transmute::(n) }, 5286u32..=5287u32 => unsafe { core::mem::transmute::(n) }, - 5292u32..=5293u32 => unsafe { core::mem::transmute::(n) }, + 5292u32..=5296u32 => unsafe { core::mem::transmute::(n) }, + 5299u32 => unsafe { core::mem::transmute::(5299u32) }, 5319u32..=5327u32 => unsafe { core::mem::transmute::(n) }, 5330u32..=5334u32 => unsafe { core::mem::transmute::(n) }, 5351u32..=5352u32 => unsafe { core::mem::transmute::(n) }, 5374u32..=5377u32 => unsafe { core::mem::transmute::(n) }, + 6021u32 => unsafe { core::mem::transmute::(6021u32) }, _ => return None, }) } @@ -1500,6 +1615,8 @@ impl BuiltIn { pub const SubgroupGtMaskKHR: Self = Self::SubgroupGtMask; pub const SubgroupLeMaskKHR: Self = Self::SubgroupLeMask; pub const SubgroupLtMaskKHR: Self = Self::SubgroupLtMask; + pub const BaryCoordNV: Self = Self::BaryCoordKHR; + pub const BaryCoordNoPerspNV: Self = Self::BaryCoordNoPerspKHR; pub const FragmentSizeNV: Self = Self::FragSizeEXT; pub const InvocationsPerPixelNV: Self = Self::FragInvocationCountEXT; pub const LaunchIdKHR: Self = Self::LaunchIdNV; @@ -1561,6 +1678,11 @@ impl core::str::FromStr for BuiltIn { "SubgroupLocalInvocationId" => Ok(Self::SubgroupLocalInvocationId), "VertexIndex" => Ok(Self::VertexIndex), "InstanceIndex" => Ok(Self::InstanceIndex), + "CoreIDARM" => Ok(Self::CoreIDARM), + "CoreCountARM" => Ok(Self::CoreCountARM), + "CoreMaxIDARM" => Ok(Self::CoreMaxIDARM), + "WarpIDARM" => Ok(Self::WarpIDARM), + "WarpMaxIDARM" => Ok(Self::WarpMaxIDARM), "SubgroupEqMask" => Ok(Self::SubgroupEqMask), "SubgroupEqMaskKHR" => Ok(Self::SubgroupEqMask), "SubgroupGeMask" => Ok(Self::SubgroupGeMask), @@ -1600,12 +1722,18 @@ impl core::str::FromStr for BuiltIn { "LayerPerViewNV" => Ok(Self::LayerPerViewNV), "MeshViewCountNV" => Ok(Self::MeshViewCountNV), "MeshViewIndicesNV" => Ok(Self::MeshViewIndicesNV), - "BaryCoordNV" => Ok(Self::BaryCoordNV), - "BaryCoordNoPerspNV" => Ok(Self::BaryCoordNoPerspNV), + "BaryCoordKHR" => Ok(Self::BaryCoordKHR), + "BaryCoordNV" => Ok(Self::BaryCoordKHR), + "BaryCoordNoPerspKHR" => Ok(Self::BaryCoordNoPerspKHR), + "BaryCoordNoPerspNV" => Ok(Self::BaryCoordNoPerspKHR), "FragSizeEXT" => Ok(Self::FragSizeEXT), "FragmentSizeNV" => Ok(Self::FragSizeEXT), "FragInvocationCountEXT" => Ok(Self::FragInvocationCountEXT), "InvocationsPerPixelNV" => Ok(Self::FragInvocationCountEXT), + "PrimitivePointIndicesEXT" => Ok(Self::PrimitivePointIndicesEXT), + "PrimitiveLineIndicesEXT" => Ok(Self::PrimitiveLineIndicesEXT), + "PrimitiveTriangleIndicesEXT" => Ok(Self::PrimitiveTriangleIndicesEXT), + "CullPrimitiveEXT" => Ok(Self::CullPrimitiveEXT), "LaunchIdNV" => Ok(Self::LaunchIdNV), "LaunchIdKHR" => Ok(Self::LaunchIdNV), "LaunchSizeNV" => Ok(Self::LaunchSizeNV), @@ -1639,6 +1767,7 @@ impl core::str::FromStr for BuiltIn { "SMCountNV" => Ok(Self::SMCountNV), "WarpIDNV" => Ok(Self::WarpIDNV), "SMIDNV" => Ok(Self::SMIDNV), + "CullMaskKHR" => Ok(Self::CullMaskKHR), _ => Err(()), } } @@ -1835,6 +1964,8 @@ pub enum Capability { GroupNonUniformQuad = 68u32, ShaderLayer = 69u32, ShaderViewportIndex = 70u32, + UniformDecoration = 71u32, + CoreBuiltinsARM = 4165u32, FragmentShadingRateKHR = 4422u32, SubgroupBallotKHR = 4423u32, DrawParameters = 4427u32, @@ -1864,6 +1995,9 @@ pub enum Capability { RayQueryKHR = 4472u32, RayTraversalPrimitiveCullingKHR = 4478u32, RayTracingKHR = 4479u32, + TextureSampleWeightedQCOM = 4484u32, + TextureBoxFilterQCOM = 4485u32, + TextureBlockMatchQCOM = 4486u32, Float16ImageAMD = 5008u32, ImageGatherBiasLodAMD = 5009u32, FragmentMaskAMD = 5010u32, @@ -1880,7 +2014,8 @@ pub enum Capability { FragmentFullyCoveredEXT = 5265u32, MeshShadingNV = 5266u32, ImageFootprintNV = 5282u32, - FragmentBarycentricNV = 5284u32, + MeshShadingEXT = 5283u32, + FragmentBarycentricKHR = 5284u32, ComputeDerivativeGroupQuadsNV = 5288u32, FragmentDensityEXT = 5291u32, GroupNonUniformPartitionedNV = 5297u32, @@ -1908,7 +2043,9 @@ pub enum Capability { FragmentShaderShadingRateInterlockEXT = 5372u32, ShaderSMBuiltinsNV = 5373u32, FragmentShaderPixelInterlockEXT = 5378u32, - DemoteToHelperInvocationEXT = 5379u32, + DemoteToHelperInvocation = 5379u32, + RayTracingOpacityMicromapEXT = 5381u32, + ShaderInvocationReorderNV = 5383u32, BindlessTextureNV = 5390u32, SubgroupShuffleINTEL = 5568u32, SubgroupBufferBlockIOINTEL = 5569u32, @@ -1942,30 +2079,43 @@ pub enum Capability { FPGAMemoryAccessesINTEL = 5898u32, FPGAClusterAttributesINTEL = 5904u32, LoopFuseINTEL = 5906u32, + FPGADSPControlINTEL = 5908u32, + MemoryAccessAliasingINTEL = 5910u32, + FPGAInvocationPipeliningAttributesINTEL = 5916u32, FPGABufferLocationINTEL = 5920u32, ArbitraryPrecisionFixedPointINTEL = 5922u32, USMStorageClassesINTEL = 5935u32, + RuntimeAlignedAttributeINTEL = 5939u32, IOPipesINTEL = 5943u32, BlockingPipesINTEL = 5945u32, FPGARegINTEL = 5948u32, - DotProductInputAllKHR = 6016u32, - DotProductInput4x8BitKHR = 6017u32, - DotProductInput4x8BitPackedKHR = 6018u32, - DotProductKHR = 6019u32, + DotProductInputAll = 6016u32, + DotProductInput4x8Bit = 6017u32, + DotProductInput4x8BitPacked = 6018u32, + DotProduct = 6019u32, + RayCullMaskKHR = 6020u32, BitInstructions = 6025u32, + GroupNonUniformRotateKHR = 6026u32, AtomicFloat32AddEXT = 6033u32, AtomicFloat64AddEXT = 6034u32, LongConstantCompositeINTEL = 6089u32, OptNoneINTEL = 6094u32, AtomicFloat16AddEXT = 6095u32, DebugInfoModuleINTEL = 6114u32, + BFloat16ConversionINTEL = 6115u32, + SplitBarrierINTEL = 6141u32, + FPGAKernelAttributesv2INTEL = 6161u32, + FPGALatencyControlINTEL = 6171u32, + FPGAArgumentInterfacesINTEL = 6174u32, + GroupUniformArithmeticKHR = 6400u32, } impl Capability { pub fn from_u32(n: u32) -> Option { Some(match n { 0u32..=15u32 => unsafe { core::mem::transmute::(n) }, 17u32..=25u32 => unsafe { core::mem::transmute::(n) }, - 27u32..=70u32 => unsafe { core::mem::transmute::(n) }, + 27u32..=71u32 => unsafe { core::mem::transmute::(n) }, + 4165u32 => unsafe { core::mem::transmute::(4165u32) }, 4422u32..=4423u32 => unsafe { core::mem::transmute::(n) }, 4427u32..=4431u32 => unsafe { core::mem::transmute::(n) }, 4433u32..=4437u32 => unsafe { core::mem::transmute::(n) }, @@ -1976,6 +2126,7 @@ impl Capability { 4464u32..=4468u32 => unsafe { core::mem::transmute::(n) }, 4471u32..=4472u32 => unsafe { core::mem::transmute::(n) }, 4478u32..=4479u32 => unsafe { core::mem::transmute::(n) }, + 4484u32..=4486u32 => unsafe { core::mem::transmute::(n) }, 5008u32..=5010u32 => unsafe { core::mem::transmute::(n) }, 5013u32 => unsafe { core::mem::transmute::(5013u32) }, 5015u32..=5016u32 => unsafe { core::mem::transmute::(n) }, @@ -1985,8 +2136,7 @@ impl Capability { 5254u32..=5255u32 => unsafe { core::mem::transmute::(n) }, 5259u32..=5260u32 => unsafe { core::mem::transmute::(n) }, 5265u32..=5266u32 => unsafe { core::mem::transmute::(n) }, - 5282u32 => unsafe { core::mem::transmute::(5282u32) }, - 5284u32 => unsafe { core::mem::transmute::(5284u32) }, + 5282u32..=5284u32 => unsafe { core::mem::transmute::(n) }, 5288u32 => unsafe { core::mem::transmute::(5288u32) }, 5291u32 => unsafe { core::mem::transmute::(5291u32) }, 5297u32 => unsafe { core::mem::transmute::(5297u32) }, @@ -1999,6 +2149,8 @@ impl Capability { 5363u32 => unsafe { core::mem::transmute::(5363u32) }, 5372u32..=5373u32 => unsafe { core::mem::transmute::(n) }, 5378u32..=5379u32 => unsafe { core::mem::transmute::(n) }, + 5381u32 => unsafe { core::mem::transmute::(5381u32) }, + 5383u32 => unsafe { core::mem::transmute::(5383u32) }, 5390u32 => unsafe { core::mem::transmute::(5390u32) }, 5568u32..=5570u32 => unsafe { core::mem::transmute::(n) }, 5579u32 => unsafe { core::mem::transmute::(5579u32) }, @@ -2021,18 +2173,27 @@ impl Capability { 5897u32..=5898u32 => unsafe { core::mem::transmute::(n) }, 5904u32 => unsafe { core::mem::transmute::(5904u32) }, 5906u32 => unsafe { core::mem::transmute::(5906u32) }, + 5908u32 => unsafe { core::mem::transmute::(5908u32) }, + 5910u32 => unsafe { core::mem::transmute::(5910u32) }, + 5916u32 => unsafe { core::mem::transmute::(5916u32) }, 5920u32 => unsafe { core::mem::transmute::(5920u32) }, 5922u32 => unsafe { core::mem::transmute::(5922u32) }, 5935u32 => unsafe { core::mem::transmute::(5935u32) }, + 5939u32 => unsafe { core::mem::transmute::(5939u32) }, 5943u32 => unsafe { core::mem::transmute::(5943u32) }, 5945u32 => unsafe { core::mem::transmute::(5945u32) }, 5948u32 => unsafe { core::mem::transmute::(5948u32) }, - 6016u32..=6019u32 => unsafe { core::mem::transmute::(n) }, - 6025u32 => unsafe { core::mem::transmute::(6025u32) }, + 6016u32..=6020u32 => unsafe { core::mem::transmute::(n) }, + 6025u32..=6026u32 => unsafe { core::mem::transmute::(n) }, 6033u32..=6034u32 => unsafe { core::mem::transmute::(n) }, 6089u32 => unsafe { core::mem::transmute::(6089u32) }, 6094u32..=6095u32 => unsafe { core::mem::transmute::(n) }, - 6114u32 => unsafe { core::mem::transmute::(6114u32) }, + 6114u32..=6115u32 => unsafe { core::mem::transmute::(n) }, + 6141u32 => unsafe { core::mem::transmute::(6141u32) }, + 6161u32 => unsafe { core::mem::transmute::(6161u32) }, + 6171u32 => unsafe { core::mem::transmute::(6171u32) }, + 6174u32 => unsafe { core::mem::transmute::(6174u32) }, + 6400u32 => unsafe { core::mem::transmute::(6400u32) }, _ => return None, }) } @@ -2042,6 +2203,7 @@ impl Capability { pub const StorageUniformBufferBlock16: Self = Self::StorageBuffer16BitAccess; pub const StorageUniform16: Self = Self::UniformAndStorageBuffer16BitAccess; pub const ShaderViewportIndexLayerNV: Self = Self::ShaderViewportIndexLayerEXT; + pub const FragmentBarycentricNV: Self = Self::FragmentBarycentricKHR; pub const ShadingRateNV: Self = Self::FragmentDensityEXT; pub const ShaderNonUniformEXT: Self = Self::ShaderNonUniform; pub const RuntimeDescriptorArrayEXT: Self = Self::RuntimeDescriptorArray; @@ -2068,6 +2230,11 @@ impl Capability { pub const VulkanMemoryModelKHR: Self = Self::VulkanMemoryModel; pub const VulkanMemoryModelDeviceScopeKHR: Self = Self::VulkanMemoryModelDeviceScope; pub const PhysicalStorageBufferAddressesEXT: Self = Self::PhysicalStorageBufferAddresses; + pub const DemoteToHelperInvocationEXT: Self = Self::DemoteToHelperInvocation; + pub const DotProductInputAllKHR: Self = Self::DotProductInputAll; + pub const DotProductInput4x8BitKHR: Self = Self::DotProductInput4x8Bit; + pub const DotProductInput4x8BitPackedKHR: Self = Self::DotProductInput4x8BitPacked; + pub const DotProductKHR: Self = Self::DotProduct; } impl core::str::FromStr for Capability { type Err = (); @@ -2142,6 +2309,8 @@ impl core::str::FromStr for Capability { "GroupNonUniformQuad" => Ok(Self::GroupNonUniformQuad), "ShaderLayer" => Ok(Self::ShaderLayer), "ShaderViewportIndex" => Ok(Self::ShaderViewportIndex), + "UniformDecoration" => Ok(Self::UniformDecoration), + "CoreBuiltinsARM" => Ok(Self::CoreBuiltinsARM), "FragmentShadingRateKHR" => Ok(Self::FragmentShadingRateKHR), "SubgroupBallotKHR" => Ok(Self::SubgroupBallotKHR), "DrawParameters" => Ok(Self::DrawParameters), @@ -2177,6 +2346,9 @@ impl core::str::FromStr for Capability { "RayQueryKHR" => Ok(Self::RayQueryKHR), "RayTraversalPrimitiveCullingKHR" => Ok(Self::RayTraversalPrimitiveCullingKHR), "RayTracingKHR" => Ok(Self::RayTracingKHR), + "TextureSampleWeightedQCOM" => Ok(Self::TextureSampleWeightedQCOM), + "TextureBoxFilterQCOM" => Ok(Self::TextureBoxFilterQCOM), + "TextureBlockMatchQCOM" => Ok(Self::TextureBlockMatchQCOM), "Float16ImageAMD" => Ok(Self::Float16ImageAMD), "ImageGatherBiasLodAMD" => Ok(Self::ImageGatherBiasLodAMD), "FragmentMaskAMD" => Ok(Self::FragmentMaskAMD), @@ -2194,7 +2366,9 @@ impl core::str::FromStr for Capability { "FragmentFullyCoveredEXT" => Ok(Self::FragmentFullyCoveredEXT), "MeshShadingNV" => Ok(Self::MeshShadingNV), "ImageFootprintNV" => Ok(Self::ImageFootprintNV), - "FragmentBarycentricNV" => Ok(Self::FragmentBarycentricNV), + "MeshShadingEXT" => Ok(Self::MeshShadingEXT), + "FragmentBarycentricKHR" => Ok(Self::FragmentBarycentricKHR), + "FragmentBarycentricNV" => Ok(Self::FragmentBarycentricKHR), "ComputeDerivativeGroupQuadsNV" => Ok(Self::ComputeDerivativeGroupQuadsNV), "FragmentDensityEXT" => Ok(Self::FragmentDensityEXT), "ShadingRateNV" => Ok(Self::FragmentDensityEXT), @@ -2274,7 +2448,10 @@ impl core::str::FromStr for Capability { } "ShaderSMBuiltinsNV" => Ok(Self::ShaderSMBuiltinsNV), "FragmentShaderPixelInterlockEXT" => Ok(Self::FragmentShaderPixelInterlockEXT), - "DemoteToHelperInvocationEXT" => Ok(Self::DemoteToHelperInvocationEXT), + "DemoteToHelperInvocation" => Ok(Self::DemoteToHelperInvocation), + "DemoteToHelperInvocationEXT" => Ok(Self::DemoteToHelperInvocation), + "RayTracingOpacityMicromapEXT" => Ok(Self::RayTracingOpacityMicromapEXT), + "ShaderInvocationReorderNV" => Ok(Self::ShaderInvocationReorderNV), "BindlessTextureNV" => Ok(Self::BindlessTextureNV), "SubgroupShuffleINTEL" => Ok(Self::SubgroupShuffleINTEL), "SubgroupBufferBlockIOINTEL" => Ok(Self::SubgroupBufferBlockIOINTEL), @@ -2314,23 +2491,41 @@ impl core::str::FromStr for Capability { "FPGAMemoryAccessesINTEL" => Ok(Self::FPGAMemoryAccessesINTEL), "FPGAClusterAttributesINTEL" => Ok(Self::FPGAClusterAttributesINTEL), "LoopFuseINTEL" => Ok(Self::LoopFuseINTEL), + "FPGADSPControlINTEL" => Ok(Self::FPGADSPControlINTEL), + "MemoryAccessAliasingINTEL" => Ok(Self::MemoryAccessAliasingINTEL), + "FPGAInvocationPipeliningAttributesINTEL" => { + Ok(Self::FPGAInvocationPipeliningAttributesINTEL) + } "FPGABufferLocationINTEL" => Ok(Self::FPGABufferLocationINTEL), "ArbitraryPrecisionFixedPointINTEL" => Ok(Self::ArbitraryPrecisionFixedPointINTEL), "USMStorageClassesINTEL" => Ok(Self::USMStorageClassesINTEL), + "RuntimeAlignedAttributeINTEL" => Ok(Self::RuntimeAlignedAttributeINTEL), "IOPipesINTEL" => Ok(Self::IOPipesINTEL), "BlockingPipesINTEL" => Ok(Self::BlockingPipesINTEL), "FPGARegINTEL" => Ok(Self::FPGARegINTEL), - "DotProductInputAllKHR" => Ok(Self::DotProductInputAllKHR), - "DotProductInput4x8BitKHR" => Ok(Self::DotProductInput4x8BitKHR), - "DotProductInput4x8BitPackedKHR" => Ok(Self::DotProductInput4x8BitPackedKHR), - "DotProductKHR" => Ok(Self::DotProductKHR), + "DotProductInputAll" => Ok(Self::DotProductInputAll), + "DotProductInputAllKHR" => Ok(Self::DotProductInputAll), + "DotProductInput4x8Bit" => Ok(Self::DotProductInput4x8Bit), + "DotProductInput4x8BitKHR" => Ok(Self::DotProductInput4x8Bit), + "DotProductInput4x8BitPacked" => Ok(Self::DotProductInput4x8BitPacked), + "DotProductInput4x8BitPackedKHR" => Ok(Self::DotProductInput4x8BitPacked), + "DotProduct" => Ok(Self::DotProduct), + "DotProductKHR" => Ok(Self::DotProduct), + "RayCullMaskKHR" => Ok(Self::RayCullMaskKHR), "BitInstructions" => Ok(Self::BitInstructions), + "GroupNonUniformRotateKHR" => Ok(Self::GroupNonUniformRotateKHR), "AtomicFloat32AddEXT" => Ok(Self::AtomicFloat32AddEXT), "AtomicFloat64AddEXT" => Ok(Self::AtomicFloat64AddEXT), "LongConstantCompositeINTEL" => Ok(Self::LongConstantCompositeINTEL), "OptNoneINTEL" => Ok(Self::OptNoneINTEL), "AtomicFloat16AddEXT" => Ok(Self::AtomicFloat16AddEXT), "DebugInfoModuleINTEL" => Ok(Self::DebugInfoModuleINTEL), + "BFloat16ConversionINTEL" => Ok(Self::BFloat16ConversionINTEL), + "SplitBarrierINTEL" => Ok(Self::SplitBarrierINTEL), + "FPGAKernelAttributesv2INTEL" => Ok(Self::FPGAKernelAttributesv2INTEL), + "FPGALatencyControlINTEL" => Ok(Self::FPGALatencyControlINTEL), + "FPGAArgumentInterfacesINTEL" => Ok(Self::FPGAArgumentInterfacesINTEL), + "GroupUniformArithmeticKHR" => Ok(Self::GroupUniformArithmeticKHR), _ => Err(()), } } @@ -2448,7 +2643,7 @@ impl core::str::FromStr for RayQueryCandidateIntersectionType { #[cfg_attr(feature = "deserialize", derive(serde::Deserialize))] #[allow(clippy::upper_case_acronyms)] pub enum PackedVectorFormat { - PackedVectorFormat4x8BitKHR = 0u32, + PackedVectorFormat4x8Bit = 0u32, } impl PackedVectorFormat { pub fn from_u32(n: u32) -> Option { @@ -2459,12 +2654,15 @@ impl PackedVectorFormat { } } #[allow(non_upper_case_globals)] -impl PackedVectorFormat {} +impl PackedVectorFormat { + pub const PackedVectorFormat4x8BitKHR: Self = Self::PackedVectorFormat4x8Bit; +} impl core::str::FromStr for PackedVectorFormat { type Err = (); fn from_str(s: &str) -> Result { match s { - "PackedVectorFormat4x8BitKHR" => Ok(Self::PackedVectorFormat4x8BitKHR), + "PackedVectorFormat4x8Bit" => Ok(Self::PackedVectorFormat4x8Bit), + "PackedVectorFormat4x8BitKHR" => Ok(Self::PackedVectorFormat4x8Bit), _ => Err(()), } } @@ -2826,18 +3024,19 @@ pub enum Op { SubgroupAllKHR = 4428u32, SubgroupAnyKHR = 4429u32, SubgroupAllEqualKHR = 4430u32, + GroupNonUniformRotateKHR = 4431u32, SubgroupReadInvocationKHR = 4432u32, TraceRayKHR = 4445u32, ExecuteCallableKHR = 4446u32, ConvertUToAccelerationStructureKHR = 4447u32, IgnoreIntersectionKHR = 4448u32, TerminateRayKHR = 4449u32, - SDotKHR = 4450u32, - UDotKHR = 4451u32, - SUDotKHR = 4452u32, - SDotAccSatKHR = 4453u32, - UDotAccSatKHR = 4454u32, - SUDotAccSatKHR = 4455u32, + SDot = 4450u32, + UDot = 4451u32, + SUDot = 4452u32, + SDotAccSat = 4453u32, + UDotAccSat = 4454u32, + SUDotAccSat = 4455u32, TypeRayQueryKHR = 4472u32, RayQueryInitializeKHR = 4473u32, RayQueryTerminateKHR = 4474u32, @@ -2845,6 +3044,10 @@ pub enum Op { RayQueryConfirmIntersectionKHR = 4476u32, RayQueryProceedKHR = 4477u32, RayQueryGetIntersectionTypeKHR = 4479u32, + ImageSampleWeightedQCOM = 4480u32, + ImageBoxFilterQCOM = 4481u32, + ImageBlockMatchSSDQCOM = 4482u32, + ImageBlockMatchSADQCOM = 4483u32, GroupIAddNonUniformAMD = 5000u32, GroupFAddNonUniformAMD = 5001u32, GroupFMinNonUniformAMD = 5002u32, @@ -2856,7 +3059,42 @@ pub enum Op { FragmentMaskFetchAMD = 5011u32, FragmentFetchAMD = 5012u32, ReadClockKHR = 5056u32, + HitObjectRecordHitMotionNV = 5249u32, + HitObjectRecordHitWithIndexMotionNV = 5250u32, + HitObjectRecordMissMotionNV = 5251u32, + HitObjectGetWorldToObjectNV = 5252u32, + HitObjectGetObjectToWorldNV = 5253u32, + HitObjectGetObjectRayDirectionNV = 5254u32, + HitObjectGetObjectRayOriginNV = 5255u32, + HitObjectTraceRayMotionNV = 5256u32, + HitObjectGetShaderRecordBufferHandleNV = 5257u32, + HitObjectGetShaderBindingTableRecordIndexNV = 5258u32, + HitObjectRecordEmptyNV = 5259u32, + HitObjectTraceRayNV = 5260u32, + HitObjectRecordHitNV = 5261u32, + HitObjectRecordHitWithIndexNV = 5262u32, + HitObjectRecordMissNV = 5263u32, + HitObjectExecuteShaderNV = 5264u32, + HitObjectGetCurrentTimeNV = 5265u32, + HitObjectGetAttributesNV = 5266u32, + HitObjectGetHitKindNV = 5267u32, + HitObjectGetPrimitiveIndexNV = 5268u32, + HitObjectGetGeometryIndexNV = 5269u32, + HitObjectGetInstanceIdNV = 5270u32, + HitObjectGetInstanceCustomIndexNV = 5271u32, + HitObjectGetWorldRayDirectionNV = 5272u32, + HitObjectGetWorldRayOriginNV = 5273u32, + HitObjectGetRayTMaxNV = 5274u32, + HitObjectGetRayTMinNV = 5275u32, + HitObjectIsEmptyNV = 5276u32, + HitObjectIsHitNV = 5277u32, + HitObjectIsMissNV = 5278u32, + ReorderThreadWithHitObjectNV = 5279u32, + ReorderThreadWithHintNV = 5280u32, + TypeHitObjectNV = 5281u32, ImageSampleFootprintNV = 5283u32, + EmitMeshTasksEXT = 5294u32, + SetMeshOutputsEXT = 5295u32, GroupNonUniformPartitionNV = 5296u32, WritePackedPrimitiveIndices4x8NV = 5299u32, ReportIntersectionKHR = 5334u32, @@ -2874,7 +3112,7 @@ pub enum Op { CooperativeMatrixLengthNV = 5362u32, BeginInvocationInterlockEXT = 5364u32, EndInvocationInterlockEXT = 5365u32, - DemoteToHelperInvocationEXT = 5380u32, + DemoteToHelperInvocation = 5380u32, IsHelperInvocationEXT = 5381u32, ConvertUToImageNV = 5391u32, ConvertUToSamplerNV = 5392u32, @@ -3081,6 +3319,9 @@ pub enum Op { ArbitraryFloatPowRINTEL = 5881u32, ArbitraryFloatPowNINTEL = 5882u32, LoopControlINTEL = 5887u32, + AliasDomainDeclINTEL = 5911u32, + AliasScopeDeclINTEL = 5912u32, + AliasScopeListDeclINTEL = 5913u32, FixedSqrtINTEL = 5923u32, FixedRecipINTEL = 5924u32, FixedRsqrtINTEL = 5925u32, @@ -3119,6 +3360,18 @@ pub enum Op { TypeStructContinuedINTEL = 6090u32, ConstantCompositeContinuedINTEL = 6091u32, SpecConstantCompositeContinuedINTEL = 6092u32, + ConvertFToBF16INTEL = 6116u32, + ConvertBF16ToFINTEL = 6117u32, + ControlBarrierArriveINTEL = 6142u32, + ControlBarrierWaitINTEL = 6143u32, + GroupIMulKHR = 6401u32, + GroupFMulKHR = 6402u32, + GroupBitwiseAndKHR = 6403u32, + GroupBitwiseOrKHR = 6404u32, + GroupBitwiseXorKHR = 6405u32, + GroupLogicalAndKHR = 6406u32, + GroupLogicalOrKHR = 6407u32, + GroupLogicalXorKHR = 6408u32, } impl Op { pub fn from_u32(n: u32) -> Option { @@ -3148,16 +3401,16 @@ impl Op { 400u32..=403u32 => unsafe { core::mem::transmute::(n) }, 4416u32 => unsafe { core::mem::transmute::(4416u32) }, 4421u32..=4422u32 => unsafe { core::mem::transmute::(n) }, - 4428u32..=4430u32 => unsafe { core::mem::transmute::(n) }, - 4432u32 => unsafe { core::mem::transmute::(4432u32) }, + 4428u32..=4432u32 => unsafe { core::mem::transmute::(n) }, 4445u32..=4455u32 => unsafe { core::mem::transmute::(n) }, 4472u32..=4477u32 => unsafe { core::mem::transmute::(n) }, - 4479u32 => unsafe { core::mem::transmute::(4479u32) }, + 4479u32..=4483u32 => unsafe { core::mem::transmute::(n) }, 5000u32..=5007u32 => unsafe { core::mem::transmute::(n) }, 5011u32..=5012u32 => unsafe { core::mem::transmute::(n) }, 5056u32 => unsafe { core::mem::transmute::(5056u32) }, + 5249u32..=5281u32 => unsafe { core::mem::transmute::(n) }, 5283u32 => unsafe { core::mem::transmute::(5283u32) }, - 5296u32 => unsafe { core::mem::transmute::(5296u32) }, + 5294u32..=5296u32 => unsafe { core::mem::transmute::(n) }, 5299u32 => unsafe { core::mem::transmute::(5299u32) }, 5334u32..=5339u32 => unsafe { core::mem::transmute::(n) }, 5341u32 => unsafe { core::mem::transmute::(5341u32) }, @@ -3178,6 +3431,7 @@ impl Op { 5840u32..=5843u32 => unsafe { core::mem::transmute::(n) }, 5846u32..=5882u32 => unsafe { core::mem::transmute::(n) }, 5887u32 => unsafe { core::mem::transmute::(5887u32) }, + 5911u32..=5913u32 => unsafe { core::mem::transmute::(n) }, 5923u32..=5934u32 => unsafe { core::mem::transmute::(n) }, 5938u32 => unsafe { core::mem::transmute::(5938u32) }, 5946u32..=5947u32 => unsafe { core::mem::transmute::(n) }, @@ -3186,6 +3440,9 @@ impl Op { 6035u32 => unsafe { core::mem::transmute::(6035u32) }, 6086u32 => unsafe { core::mem::transmute::(6086u32) }, 6090u32..=6092u32 => unsafe { core::mem::transmute::(n) }, + 6116u32..=6117u32 => unsafe { core::mem::transmute::(n) }, + 6142u32..=6143u32 => unsafe { core::mem::transmute::(n) }, + 6401u32..=6408u32 => unsafe { core::mem::transmute::(n) }, _ => return None, }) } @@ -3193,8 +3450,15 @@ impl Op { #[allow(clippy::upper_case_acronyms)] #[allow(non_upper_case_globals)] impl Op { + pub const SDotKHR: Op = Op::SDot; + pub const UDotKHR: Op = Op::UDot; + pub const SUDotKHR: Op = Op::SUDot; + pub const SDotAccSatKHR: Op = Op::SDotAccSat; + pub const UDotAccSatKHR: Op = Op::UDotAccSat; + pub const SUDotAccSatKHR: Op = Op::SUDotAccSat; pub const ReportIntersectionNV: Op = Op::ReportIntersectionKHR; pub const TypeAccelerationStructureNV: Op = Op::TypeAccelerationStructureKHR; + pub const DemoteToHelperInvocationEXT: Op = Op::DemoteToHelperInvocation; pub const DecorateStringGOOGLE: Op = Op::DecorateString; pub const MemberDecorateStringGOOGLE: Op = Op::MemberDecorateString; }