// AUTOMATICALLY GENERATED from the SPIR-V JSON grammar: // external/spirv.core.grammar.json. // DO NOT MODIFY! pub type Word = u32; pub const MAGIC_NUMBER: u32 = 0x07230203; pub const MAJOR_VERSION: u8 = 1u8; pub const MINOR_VERSION: u8 = 4u8; 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)" ] 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_KHR = 256u32 ; const MAKE_TEXEL_VISIBLE_KHR = 512u32 ; const NON_PRIVATE_TEXEL_KHR = 1024u32 ; const VOLATILE_TEXEL_KHR = 2048u32 ; const SIGN_EXTEND = 4096u32 ; const ZERO_EXTEND = 8192u32 ; } } 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)" ] 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 ; } } 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)" ] 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)" ] 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 ; } } 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)" ] pub struct FunctionControl : u32 { const NONE = 0u32 ; const INLINE = 1u32 ; const DONT_INLINE = 2u32 ; const PURE = 4u32 ; const CONST = 8u32 ; } } 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)" ] 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_KHR = 4096u32 ; const MAKE_AVAILABLE_KHR = 8192u32 ; const MAKE_VISIBLE_KHR = 16384u32 ; } } 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)" ] pub struct MemoryAccess : u32 { const NONE = 0u32 ; const VOLATILE = 1u32 ; const ALIGNED = 2u32 ; const NONTEMPORAL = 4u32 ; const MAKE_POINTER_AVAILABLE_KHR = 8u32 ; const MAKE_POINTER_VISIBLE_KHR = 16u32 ; const NON_PRIVATE_POINTER_KHR = 32u32 ; } } 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)" ] pub struct KernelProfilingInfo : u32 { const NONE = 0u32 ; const CMD_EXEC_TIME = 1u32 ; } } #[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)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum SourceLanguage { Unknown = 0u32, ESSL = 1u32, GLSL = 2u32, OpenCL_C = 3u32, OpenCL_CPP = 4u32, HLSL = 5u32, } #[allow(non_upper_case_globals)] impl SourceLanguage { pub fn required_capabilities(self) -> &'static [Capability] { match self { SourceLanguage::Unknown | SourceLanguage::ESSL | SourceLanguage::GLSL | SourceLanguage::OpenCL_C | SourceLanguage::OpenCL_CPP | SourceLanguage::HLSL => &[], } } } impl num_traits::FromPrimitive for SourceLanguage { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => SourceLanguage::Unknown, 1u32 => SourceLanguage::ESSL, 2u32 => SourceLanguage::GLSL, 3u32 => SourceLanguage::OpenCL_C, 4u32 => SourceLanguage::OpenCL_CPP, 5u32 => SourceLanguage::HLSL, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [ExecutionModel](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_execution_model_a_execution_model)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum ExecutionModel { Vertex = 0u32, TessellationControl = 1u32, TessellationEvaluation = 2u32, Geometry = 3u32, Fragment = 4u32, GLCompute = 5u32, Kernel = 6u32, TaskNV = 5267u32, MeshNV = 5268u32, RayGenerationNV = 5313u32, IntersectionNV = 5314u32, AnyHitNV = 5315u32, ClosestHitNV = 5316u32, MissNV = 5317u32, CallableNV = 5318u32, } #[allow(non_upper_case_globals)] impl ExecutionModel { pub fn required_capabilities(self) -> &'static [Capability] { match self { ExecutionModel::Geometry => &[Capability::Geometry], ExecutionModel::Kernel => &[Capability::Kernel], ExecutionModel::TaskNV | ExecutionModel::MeshNV => &[Capability::MeshShadingNV], ExecutionModel::RayGenerationNV | ExecutionModel::IntersectionNV | ExecutionModel::AnyHitNV | ExecutionModel::ClosestHitNV | ExecutionModel::MissNV | ExecutionModel::CallableNV => &[Capability::RayTracingNV], ExecutionModel::Vertex | ExecutionModel::Fragment | ExecutionModel::GLCompute => { &[Capability::Shader] } ExecutionModel::TessellationControl | ExecutionModel::TessellationEvaluation => { &[Capability::Tessellation] } } } } impl num_traits::FromPrimitive for ExecutionModel { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => ExecutionModel::Vertex, 1u32 => ExecutionModel::TessellationControl, 2u32 => ExecutionModel::TessellationEvaluation, 3u32 => ExecutionModel::Geometry, 4u32 => ExecutionModel::Fragment, 5u32 => ExecutionModel::GLCompute, 6u32 => ExecutionModel::Kernel, 5267u32 => ExecutionModel::TaskNV, 5268u32 => ExecutionModel::MeshNV, 5313u32 => ExecutionModel::RayGenerationNV, 5314u32 => ExecutionModel::IntersectionNV, 5315u32 => ExecutionModel::AnyHitNV, 5316u32 => ExecutionModel::ClosestHitNV, 5317u32 => ExecutionModel::MissNV, 5318u32 => ExecutionModel::CallableNV, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [AddressingModel](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_addressing_model_a_addressing_model)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum AddressingModel { Logical = 0u32, Physical32 = 1u32, Physical64 = 2u32, PhysicalStorageBuffer64EXT = 5348u32, } #[allow(non_upper_case_globals)] impl AddressingModel { pub fn required_capabilities(self) -> &'static [Capability] { match self { AddressingModel::Logical => &[], AddressingModel::Physical32 | AddressingModel::Physical64 => &[Capability::Addresses], AddressingModel::PhysicalStorageBuffer64EXT => { &[Capability::PhysicalStorageBufferAddressesEXT] } } } } impl num_traits::FromPrimitive for AddressingModel { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => AddressingModel::Logical, 1u32 => AddressingModel::Physical32, 2u32 => AddressingModel::Physical64, 5348u32 => AddressingModel::PhysicalStorageBuffer64EXT, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [MemoryModel](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_memory_model_a_memory_model)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum MemoryModel { Simple = 0u32, GLSL450 = 1u32, OpenCL = 2u32, VulkanKHR = 3u32, } #[allow(non_upper_case_globals)] impl MemoryModel { pub fn required_capabilities(self) -> &'static [Capability] { match self { MemoryModel::OpenCL => &[Capability::Kernel], MemoryModel::Simple | MemoryModel::GLSL450 => &[Capability::Shader], MemoryModel::VulkanKHR => &[Capability::VulkanMemoryModelKHR], } } } impl num_traits::FromPrimitive for MemoryModel { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => MemoryModel::Simple, 1u32 => MemoryModel::GLSL450, 2u32 => MemoryModel::OpenCL, 3u32 => MemoryModel::VulkanKHR, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [ExecutionMode](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_execution_mode_a_execution_mode)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum ExecutionMode { Invocations = 0u32, SpacingEqual = 1u32, SpacingFractionalEven = 2u32, SpacingFractionalOdd = 3u32, VertexOrderCw = 4u32, VertexOrderCcw = 5u32, PixelCenterInteger = 6u32, OriginUpperLeft = 7u32, OriginLowerLeft = 8u32, EarlyFragmentTests = 9u32, PointMode = 10u32, Xfb = 11u32, DepthReplacing = 12u32, DepthGreater = 14u32, DepthLess = 15u32, DepthUnchanged = 16u32, LocalSize = 17u32, LocalSizeHint = 18u32, InputPoints = 19u32, InputLines = 20u32, InputLinesAdjacency = 21u32, Triangles = 22u32, InputTrianglesAdjacency = 23u32, Quads = 24u32, Isolines = 25u32, OutputVertices = 26u32, OutputPoints = 27u32, OutputLineStrip = 28u32, OutputTriangleStrip = 29u32, VecTypeHint = 30u32, ContractionOff = 31u32, Initializer = 33u32, Finalizer = 34u32, SubgroupSize = 35u32, SubgroupsPerWorkgroup = 36u32, SubgroupsPerWorkgroupId = 37u32, LocalSizeId = 38u32, LocalSizeHintId = 39u32, PostDepthCoverage = 4446u32, DenormPreserve = 4459u32, DenormFlushToZero = 4460u32, SignedZeroInfNanPreserve = 4461u32, RoundingModeRTE = 4462u32, RoundingModeRTZ = 4463u32, StencilRefReplacingEXT = 5027u32, OutputLinesNV = 5269u32, OutputPrimitivesNV = 5270u32, DerivativeGroupQuadsNV = 5289u32, DerivativeGroupLinearNV = 5290u32, OutputTrianglesNV = 5298u32, } #[allow(non_upper_case_globals)] impl ExecutionMode { pub fn required_capabilities(self) -> &'static [Capability] { match self { ExecutionMode::LocalSize | ExecutionMode::LocalSizeId => &[], ExecutionMode::DerivativeGroupLinearNV => &[Capability::ComputeDerivativeGroupLinearNV], ExecutionMode::DerivativeGroupQuadsNV => &[Capability::ComputeDerivativeGroupQuadsNV], ExecutionMode::DenormFlushToZero => &[Capability::DenormFlushToZero], ExecutionMode::DenormPreserve => &[Capability::DenormPreserve], ExecutionMode::Invocations | ExecutionMode::InputPoints | ExecutionMode::InputLines | ExecutionMode::InputLinesAdjacency | ExecutionMode::InputTrianglesAdjacency | ExecutionMode::OutputLineStrip | ExecutionMode::OutputTriangleStrip => &[Capability::Geometry], ExecutionMode::OutputPoints => &[Capability::Geometry, Capability::MeshShadingNV], ExecutionMode::Triangles => &[Capability::Geometry, Capability::Tessellation], ExecutionMode::OutputVertices => &[ Capability::Geometry, Capability::Tessellation, Capability::MeshShadingNV, ], ExecutionMode::LocalSizeHint | ExecutionMode::VecTypeHint | ExecutionMode::ContractionOff | ExecutionMode::Initializer | ExecutionMode::Finalizer | ExecutionMode::LocalSizeHintId => &[Capability::Kernel], ExecutionMode::OutputLinesNV | ExecutionMode::OutputPrimitivesNV | ExecutionMode::OutputTrianglesNV => &[Capability::MeshShadingNV], ExecutionMode::RoundingModeRTE => &[Capability::RoundingModeRTE], ExecutionMode::RoundingModeRTZ => &[Capability::RoundingModeRTZ], ExecutionMode::PostDepthCoverage => &[Capability::SampleMaskPostDepthCoverage], ExecutionMode::PixelCenterInteger | ExecutionMode::OriginUpperLeft | ExecutionMode::OriginLowerLeft | ExecutionMode::EarlyFragmentTests | ExecutionMode::DepthReplacing | ExecutionMode::DepthGreater | ExecutionMode::DepthLess | ExecutionMode::DepthUnchanged => &[Capability::Shader], ExecutionMode::SignedZeroInfNanPreserve => &[Capability::SignedZeroInfNanPreserve], ExecutionMode::StencilRefReplacingEXT => &[Capability::StencilExportEXT], ExecutionMode::SubgroupSize | ExecutionMode::SubgroupsPerWorkgroup | ExecutionMode::SubgroupsPerWorkgroupId => &[Capability::SubgroupDispatch], ExecutionMode::SpacingEqual | ExecutionMode::SpacingFractionalEven | ExecutionMode::SpacingFractionalOdd | ExecutionMode::VertexOrderCw | ExecutionMode::VertexOrderCcw | ExecutionMode::PointMode | ExecutionMode::Quads | ExecutionMode::Isolines => &[Capability::Tessellation], ExecutionMode::Xfb => &[Capability::TransformFeedback], } } } impl num_traits::FromPrimitive for ExecutionMode { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => ExecutionMode::Invocations, 1u32 => ExecutionMode::SpacingEqual, 2u32 => ExecutionMode::SpacingFractionalEven, 3u32 => ExecutionMode::SpacingFractionalOdd, 4u32 => ExecutionMode::VertexOrderCw, 5u32 => ExecutionMode::VertexOrderCcw, 6u32 => ExecutionMode::PixelCenterInteger, 7u32 => ExecutionMode::OriginUpperLeft, 8u32 => ExecutionMode::OriginLowerLeft, 9u32 => ExecutionMode::EarlyFragmentTests, 10u32 => ExecutionMode::PointMode, 11u32 => ExecutionMode::Xfb, 12u32 => ExecutionMode::DepthReplacing, 14u32 => ExecutionMode::DepthGreater, 15u32 => ExecutionMode::DepthLess, 16u32 => ExecutionMode::DepthUnchanged, 17u32 => ExecutionMode::LocalSize, 18u32 => ExecutionMode::LocalSizeHint, 19u32 => ExecutionMode::InputPoints, 20u32 => ExecutionMode::InputLines, 21u32 => ExecutionMode::InputLinesAdjacency, 22u32 => ExecutionMode::Triangles, 23u32 => ExecutionMode::InputTrianglesAdjacency, 24u32 => ExecutionMode::Quads, 25u32 => ExecutionMode::Isolines, 26u32 => ExecutionMode::OutputVertices, 27u32 => ExecutionMode::OutputPoints, 28u32 => ExecutionMode::OutputLineStrip, 29u32 => ExecutionMode::OutputTriangleStrip, 30u32 => ExecutionMode::VecTypeHint, 31u32 => ExecutionMode::ContractionOff, 33u32 => ExecutionMode::Initializer, 34u32 => ExecutionMode::Finalizer, 35u32 => ExecutionMode::SubgroupSize, 36u32 => ExecutionMode::SubgroupsPerWorkgroup, 37u32 => ExecutionMode::SubgroupsPerWorkgroupId, 38u32 => ExecutionMode::LocalSizeId, 39u32 => ExecutionMode::LocalSizeHintId, 4446u32 => ExecutionMode::PostDepthCoverage, 4459u32 => ExecutionMode::DenormPreserve, 4460u32 => ExecutionMode::DenormFlushToZero, 4461u32 => ExecutionMode::SignedZeroInfNanPreserve, 4462u32 => ExecutionMode::RoundingModeRTE, 4463u32 => ExecutionMode::RoundingModeRTZ, 5027u32 => ExecutionMode::StencilRefReplacingEXT, 5269u32 => ExecutionMode::OutputLinesNV, 5270u32 => ExecutionMode::OutputPrimitivesNV, 5289u32 => ExecutionMode::DerivativeGroupQuadsNV, 5290u32 => ExecutionMode::DerivativeGroupLinearNV, 5298u32 => ExecutionMode::OutputTrianglesNV, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [StorageClass](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_storage_class_a_storage_class)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum StorageClass { UniformConstant = 0u32, Input = 1u32, Uniform = 2u32, Output = 3u32, Workgroup = 4u32, CrossWorkgroup = 5u32, Private = 6u32, Function = 7u32, Generic = 8u32, PushConstant = 9u32, AtomicCounter = 10u32, Image = 11u32, StorageBuffer = 12u32, CallableDataNV = 5328u32, IncomingCallableDataNV = 5329u32, RayPayloadNV = 5338u32, HitAttributeNV = 5339u32, IncomingRayPayloadNV = 5342u32, ShaderRecordBufferNV = 5343u32, PhysicalStorageBufferEXT = 5349u32, } #[allow(non_upper_case_globals)] impl StorageClass { pub fn required_capabilities(self) -> &'static [Capability] { match self { StorageClass::UniformConstant | StorageClass::Input | StorageClass::Workgroup | StorageClass::CrossWorkgroup | StorageClass::Function | StorageClass::Image => &[], StorageClass::AtomicCounter => &[Capability::AtomicStorage], StorageClass::Generic => &[Capability::GenericPointer], StorageClass::PhysicalStorageBufferEXT => { &[Capability::PhysicalStorageBufferAddressesEXT] } StorageClass::CallableDataNV | StorageClass::IncomingCallableDataNV | StorageClass::RayPayloadNV | StorageClass::HitAttributeNV | StorageClass::IncomingRayPayloadNV | StorageClass::ShaderRecordBufferNV => &[Capability::RayTracingNV], StorageClass::Uniform | StorageClass::Output | StorageClass::Private | StorageClass::PushConstant | StorageClass::StorageBuffer => &[Capability::Shader], } } } impl num_traits::FromPrimitive for StorageClass { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => StorageClass::UniformConstant, 1u32 => StorageClass::Input, 2u32 => StorageClass::Uniform, 3u32 => StorageClass::Output, 4u32 => StorageClass::Workgroup, 5u32 => StorageClass::CrossWorkgroup, 6u32 => StorageClass::Private, 7u32 => StorageClass::Function, 8u32 => StorageClass::Generic, 9u32 => StorageClass::PushConstant, 10u32 => StorageClass::AtomicCounter, 11u32 => StorageClass::Image, 12u32 => StorageClass::StorageBuffer, 5328u32 => StorageClass::CallableDataNV, 5329u32 => StorageClass::IncomingCallableDataNV, 5338u32 => StorageClass::RayPayloadNV, 5339u32 => StorageClass::HitAttributeNV, 5342u32 => StorageClass::IncomingRayPayloadNV, 5343u32 => StorageClass::ShaderRecordBufferNV, 5349u32 => StorageClass::PhysicalStorageBufferEXT, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [Dim](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_dim_a_dim)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum Dim { Dim1D = 0u32, Dim2D = 1u32, Dim3D = 2u32, DimCube = 3u32, DimRect = 4u32, DimBuffer = 5u32, DimSubpassData = 6u32, } #[allow(non_upper_case_globals)] impl Dim { pub fn required_capabilities(self) -> &'static [Capability] { match self { Dim::Dim3D => &[], Dim::DimSubpassData => &[Capability::InputAttachment], Dim::Dim1D => &[Capability::Sampled1D, Capability::Image1D], Dim::DimBuffer => &[Capability::SampledBuffer, Capability::ImageBuffer], Dim::DimRect => &[Capability::SampledRect, Capability::ImageRect], Dim::DimCube => &[Capability::Shader, Capability::ImageCubeArray], Dim::Dim2D => &[ Capability::Shader, Capability::Kernel, Capability::ImageMSArray, ], } } } impl num_traits::FromPrimitive for Dim { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => Dim::Dim1D, 1u32 => Dim::Dim2D, 2u32 => Dim::Dim3D, 3u32 => Dim::DimCube, 4u32 => Dim::DimRect, 5u32 => Dim::DimBuffer, 6u32 => Dim::DimSubpassData, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [SamplerAddressingMode](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_sampler_addressing_mode_a_sampler_addressing_mode)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum SamplerAddressingMode { None = 0u32, ClampToEdge = 1u32, Clamp = 2u32, Repeat = 3u32, RepeatMirrored = 4u32, } #[allow(non_upper_case_globals)] impl SamplerAddressingMode { pub fn required_capabilities(self) -> &'static [Capability] { match self { SamplerAddressingMode::None | SamplerAddressingMode::ClampToEdge | SamplerAddressingMode::Clamp | SamplerAddressingMode::Repeat | SamplerAddressingMode::RepeatMirrored => &[Capability::Kernel], } } } impl num_traits::FromPrimitive for SamplerAddressingMode { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => SamplerAddressingMode::None, 1u32 => SamplerAddressingMode::ClampToEdge, 2u32 => SamplerAddressingMode::Clamp, 3u32 => SamplerAddressingMode::Repeat, 4u32 => SamplerAddressingMode::RepeatMirrored, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [SamplerFilterMode](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_sampler_filter_mode_a_sampler_filter_mode)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum SamplerFilterMode { Nearest = 0u32, Linear = 1u32, } #[allow(non_upper_case_globals)] impl SamplerFilterMode { pub fn required_capabilities(self) -> &'static [Capability] { match self { SamplerFilterMode::Nearest | SamplerFilterMode::Linear => &[Capability::Kernel], } } } impl num_traits::FromPrimitive for SamplerFilterMode { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => SamplerFilterMode::Nearest, 1u32 => SamplerFilterMode::Linear, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [ImageFormat](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_image_format_a_image_format)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum ImageFormat { Unknown = 0u32, Rgba32f = 1u32, Rgba16f = 2u32, R32f = 3u32, Rgba8 = 4u32, Rgba8Snorm = 5u32, Rg32f = 6u32, Rg16f = 7u32, R11fG11fB10f = 8u32, R16f = 9u32, Rgba16 = 10u32, Rgb10A2 = 11u32, Rg16 = 12u32, Rg8 = 13u32, R16 = 14u32, R8 = 15u32, Rgba16Snorm = 16u32, Rg16Snorm = 17u32, Rg8Snorm = 18u32, R16Snorm = 19u32, R8Snorm = 20u32, Rgba32i = 21u32, Rgba16i = 22u32, Rgba8i = 23u32, R32i = 24u32, Rg32i = 25u32, Rg16i = 26u32, Rg8i = 27u32, R16i = 28u32, R8i = 29u32, Rgba32ui = 30u32, Rgba16ui = 31u32, Rgba8ui = 32u32, R32ui = 33u32, Rgb10a2ui = 34u32, Rg32ui = 35u32, Rg16ui = 36u32, Rg8ui = 37u32, R16ui = 38u32, R8ui = 39u32, } #[allow(non_upper_case_globals)] impl ImageFormat { pub fn required_capabilities(self) -> &'static [Capability] { match self { ImageFormat::Unknown => &[], ImageFormat::Rgba32f | ImageFormat::Rgba16f | ImageFormat::R32f | ImageFormat::Rgba8 | ImageFormat::Rgba8Snorm | ImageFormat::Rgba32i | ImageFormat::Rgba16i | ImageFormat::Rgba8i | ImageFormat::R32i | ImageFormat::Rgba32ui | ImageFormat::Rgba16ui | ImageFormat::Rgba8ui | ImageFormat::R32ui => &[Capability::Shader], ImageFormat::Rg32f | ImageFormat::Rg16f | ImageFormat::R11fG11fB10f | ImageFormat::R16f | ImageFormat::Rgba16 | ImageFormat::Rgb10A2 | ImageFormat::Rg16 | ImageFormat::Rg8 | ImageFormat::R16 | ImageFormat::R8 | ImageFormat::Rgba16Snorm | ImageFormat::Rg16Snorm | ImageFormat::Rg8Snorm | ImageFormat::R16Snorm | ImageFormat::R8Snorm | ImageFormat::Rg32i | ImageFormat::Rg16i | ImageFormat::Rg8i | ImageFormat::R16i | ImageFormat::R8i | ImageFormat::Rgb10a2ui | ImageFormat::Rg32ui | ImageFormat::Rg16ui | ImageFormat::Rg8ui | ImageFormat::R16ui | ImageFormat::R8ui => &[Capability::StorageImageExtendedFormats], } } } impl num_traits::FromPrimitive for ImageFormat { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => ImageFormat::Unknown, 1u32 => ImageFormat::Rgba32f, 2u32 => ImageFormat::Rgba16f, 3u32 => ImageFormat::R32f, 4u32 => ImageFormat::Rgba8, 5u32 => ImageFormat::Rgba8Snorm, 6u32 => ImageFormat::Rg32f, 7u32 => ImageFormat::Rg16f, 8u32 => ImageFormat::R11fG11fB10f, 9u32 => ImageFormat::R16f, 10u32 => ImageFormat::Rgba16, 11u32 => ImageFormat::Rgb10A2, 12u32 => ImageFormat::Rg16, 13u32 => ImageFormat::Rg8, 14u32 => ImageFormat::R16, 15u32 => ImageFormat::R8, 16u32 => ImageFormat::Rgba16Snorm, 17u32 => ImageFormat::Rg16Snorm, 18u32 => ImageFormat::Rg8Snorm, 19u32 => ImageFormat::R16Snorm, 20u32 => ImageFormat::R8Snorm, 21u32 => ImageFormat::Rgba32i, 22u32 => ImageFormat::Rgba16i, 23u32 => ImageFormat::Rgba8i, 24u32 => ImageFormat::R32i, 25u32 => ImageFormat::Rg32i, 26u32 => ImageFormat::Rg16i, 27u32 => ImageFormat::Rg8i, 28u32 => ImageFormat::R16i, 29u32 => ImageFormat::R8i, 30u32 => ImageFormat::Rgba32ui, 31u32 => ImageFormat::Rgba16ui, 32u32 => ImageFormat::Rgba8ui, 33u32 => ImageFormat::R32ui, 34u32 => ImageFormat::Rgb10a2ui, 35u32 => ImageFormat::Rg32ui, 36u32 => ImageFormat::Rg16ui, 37u32 => ImageFormat::Rg8ui, 38u32 => ImageFormat::R16ui, 39u32 => ImageFormat::R8ui, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [ImageChannelOrder](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_image_channel_order_a_image_channel_order)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum ImageChannelOrder { R = 0u32, A = 1u32, RG = 2u32, RA = 3u32, RGB = 4u32, RGBA = 5u32, BGRA = 6u32, ARGB = 7u32, Intensity = 8u32, Luminance = 9u32, Rx = 10u32, RGx = 11u32, RGBx = 12u32, Depth = 13u32, DepthStencil = 14u32, sRGB = 15u32, sRGBx = 16u32, sRGBA = 17u32, sBGRA = 18u32, ABGR = 19u32, } #[allow(non_upper_case_globals)] impl ImageChannelOrder { pub fn required_capabilities(self) -> &'static [Capability] { match self { ImageChannelOrder::R | ImageChannelOrder::A | ImageChannelOrder::RG | ImageChannelOrder::RA | ImageChannelOrder::RGB | ImageChannelOrder::RGBA | ImageChannelOrder::BGRA | ImageChannelOrder::ARGB | ImageChannelOrder::Intensity | ImageChannelOrder::Luminance | ImageChannelOrder::Rx | ImageChannelOrder::RGx | ImageChannelOrder::RGBx | ImageChannelOrder::Depth | ImageChannelOrder::DepthStencil | ImageChannelOrder::sRGB | ImageChannelOrder::sRGBx | ImageChannelOrder::sRGBA | ImageChannelOrder::sBGRA | ImageChannelOrder::ABGR => &[Capability::Kernel], } } } impl num_traits::FromPrimitive for ImageChannelOrder { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => ImageChannelOrder::R, 1u32 => ImageChannelOrder::A, 2u32 => ImageChannelOrder::RG, 3u32 => ImageChannelOrder::RA, 4u32 => ImageChannelOrder::RGB, 5u32 => ImageChannelOrder::RGBA, 6u32 => ImageChannelOrder::BGRA, 7u32 => ImageChannelOrder::ARGB, 8u32 => ImageChannelOrder::Intensity, 9u32 => ImageChannelOrder::Luminance, 10u32 => ImageChannelOrder::Rx, 11u32 => ImageChannelOrder::RGx, 12u32 => ImageChannelOrder::RGBx, 13u32 => ImageChannelOrder::Depth, 14u32 => ImageChannelOrder::DepthStencil, 15u32 => ImageChannelOrder::sRGB, 16u32 => ImageChannelOrder::sRGBx, 17u32 => ImageChannelOrder::sRGBA, 18u32 => ImageChannelOrder::sBGRA, 19u32 => ImageChannelOrder::ABGR, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [ImageChannelDataType](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_image_channel_data_type_a_image_channel_data_type)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum ImageChannelDataType { SnormInt8 = 0u32, SnormInt16 = 1u32, UnormInt8 = 2u32, UnormInt16 = 3u32, UnormShort565 = 4u32, UnormShort555 = 5u32, UnormInt101010 = 6u32, SignedInt8 = 7u32, SignedInt16 = 8u32, SignedInt32 = 9u32, UnsignedInt8 = 10u32, UnsignedInt16 = 11u32, UnsignedInt32 = 12u32, HalfFloat = 13u32, Float = 14u32, UnormInt24 = 15u32, UnormInt101010_2 = 16u32, } #[allow(non_upper_case_globals)] impl ImageChannelDataType { pub fn required_capabilities(self) -> &'static [Capability] { match self { ImageChannelDataType::SnormInt8 | ImageChannelDataType::SnormInt16 | ImageChannelDataType::UnormInt8 | ImageChannelDataType::UnormInt16 | ImageChannelDataType::UnormShort565 | ImageChannelDataType::UnormShort555 | ImageChannelDataType::UnormInt101010 | ImageChannelDataType::SignedInt8 | ImageChannelDataType::SignedInt16 | ImageChannelDataType::SignedInt32 | ImageChannelDataType::UnsignedInt8 | ImageChannelDataType::UnsignedInt16 | ImageChannelDataType::UnsignedInt32 | ImageChannelDataType::HalfFloat | ImageChannelDataType::Float | ImageChannelDataType::UnormInt24 | ImageChannelDataType::UnormInt101010_2 => &[Capability::Kernel], } } } impl num_traits::FromPrimitive for ImageChannelDataType { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => ImageChannelDataType::SnormInt8, 1u32 => ImageChannelDataType::SnormInt16, 2u32 => ImageChannelDataType::UnormInt8, 3u32 => ImageChannelDataType::UnormInt16, 4u32 => ImageChannelDataType::UnormShort565, 5u32 => ImageChannelDataType::UnormShort555, 6u32 => ImageChannelDataType::UnormInt101010, 7u32 => ImageChannelDataType::SignedInt8, 8u32 => ImageChannelDataType::SignedInt16, 9u32 => ImageChannelDataType::SignedInt32, 10u32 => ImageChannelDataType::UnsignedInt8, 11u32 => ImageChannelDataType::UnsignedInt16, 12u32 => ImageChannelDataType::UnsignedInt32, 13u32 => ImageChannelDataType::HalfFloat, 14u32 => ImageChannelDataType::Float, 15u32 => ImageChannelDataType::UnormInt24, 16u32 => ImageChannelDataType::UnormInt101010_2, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [FPRoundingMode](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_fp_rounding_mode_a_fp_rounding_mode)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum FPRoundingMode { RTE = 0u32, RTZ = 1u32, RTP = 2u32, RTN = 3u32, } #[allow(non_upper_case_globals)] impl FPRoundingMode { pub fn required_capabilities(self) -> &'static [Capability] { match self { FPRoundingMode::RTE | FPRoundingMode::RTZ | FPRoundingMode::RTP | FPRoundingMode::RTN => &[], } } } impl num_traits::FromPrimitive for FPRoundingMode { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => FPRoundingMode::RTE, 1u32 => FPRoundingMode::RTZ, 2u32 => FPRoundingMode::RTP, 3u32 => FPRoundingMode::RTN, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [LinkageType](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_linkage_type_a_linkage_type)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum LinkageType { Export = 0u32, Import = 1u32, } #[allow(non_upper_case_globals)] impl LinkageType { pub fn required_capabilities(self) -> &'static [Capability] { match self { LinkageType::Export | LinkageType::Import => &[Capability::Linkage], } } } impl num_traits::FromPrimitive for LinkageType { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => LinkageType::Export, 1u32 => LinkageType::Import, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [AccessQualifier](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_access_qualifier_a_access_qualifier)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum AccessQualifier { ReadOnly = 0u32, WriteOnly = 1u32, ReadWrite = 2u32, } #[allow(non_upper_case_globals)] impl AccessQualifier { pub fn required_capabilities(self) -> &'static [Capability] { match self { AccessQualifier::ReadOnly | AccessQualifier::WriteOnly | AccessQualifier::ReadWrite => { &[Capability::Kernel] } } } } impl num_traits::FromPrimitive for AccessQualifier { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => AccessQualifier::ReadOnly, 1u32 => AccessQualifier::WriteOnly, 2u32 => AccessQualifier::ReadWrite, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [FunctionParameterAttribute](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_function_parameter_attribute_a_function_parameter_attribute)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum FunctionParameterAttribute { Zext = 0u32, Sext = 1u32, ByVal = 2u32, Sret = 3u32, NoAlias = 4u32, NoCapture = 5u32, NoWrite = 6u32, NoReadWrite = 7u32, } #[allow(non_upper_case_globals)] impl FunctionParameterAttribute { pub fn required_capabilities(self) -> &'static [Capability] { match self { FunctionParameterAttribute::Zext | FunctionParameterAttribute::Sext | FunctionParameterAttribute::ByVal | FunctionParameterAttribute::Sret | FunctionParameterAttribute::NoAlias | FunctionParameterAttribute::NoCapture | FunctionParameterAttribute::NoWrite | FunctionParameterAttribute::NoReadWrite => &[Capability::Kernel], } } } impl num_traits::FromPrimitive for FunctionParameterAttribute { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => FunctionParameterAttribute::Zext, 1u32 => FunctionParameterAttribute::Sext, 2u32 => FunctionParameterAttribute::ByVal, 3u32 => FunctionParameterAttribute::Sret, 4u32 => FunctionParameterAttribute::NoAlias, 5u32 => FunctionParameterAttribute::NoCapture, 6u32 => FunctionParameterAttribute::NoWrite, 7u32 => FunctionParameterAttribute::NoReadWrite, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [Decoration](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_decoration_a_decoration)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum Decoration { RelaxedPrecision = 0u32, SpecId = 1u32, Block = 2u32, BufferBlock = 3u32, RowMajor = 4u32, ColMajor = 5u32, ArrayStride = 6u32, MatrixStride = 7u32, GLSLShared = 8u32, GLSLPacked = 9u32, CPacked = 10u32, BuiltIn = 11u32, NoPerspective = 13u32, Flat = 14u32, Patch = 15u32, Centroid = 16u32, Sample = 17u32, Invariant = 18u32, Restrict = 19u32, Aliased = 20u32, Volatile = 21u32, Constant = 22u32, Coherent = 23u32, NonWritable = 24u32, NonReadable = 25u32, Uniform = 26u32, UniformId = 27u32, SaturatedConversion = 28u32, Stream = 29u32, Location = 30u32, Component = 31u32, Index = 32u32, Binding = 33u32, DescriptorSet = 34u32, Offset = 35u32, XfbBuffer = 36u32, XfbStride = 37u32, FuncParamAttr = 38u32, FPRoundingMode = 39u32, FPFastMathMode = 40u32, LinkageAttributes = 41u32, NoContraction = 42u32, InputAttachmentIndex = 43u32, Alignment = 44u32, MaxByteOffset = 45u32, AlignmentId = 46u32, MaxByteOffsetId = 47u32, NoSignedWrap = 4469u32, NoUnsignedWrap = 4470u32, ExplicitInterpAMD = 4999u32, OverrideCoverageNV = 5248u32, PassthroughNV = 5250u32, ViewportRelativeNV = 5252u32, SecondaryViewportRelativeNV = 5256u32, PerPrimitiveNV = 5271u32, PerViewNV = 5272u32, PerTaskNV = 5273u32, PerVertexNV = 5285u32, NonUniformEXT = 5300u32, CounterBuffer = 5634u32, UserSemantic = 5635u32, RestrictPointerEXT = 5355u32, AliasedPointerEXT = 5356u32, } #[allow(non_upper_case_globals)] impl Decoration { pub const HlslCounterBufferGOOGLE: Decoration = Decoration::CounterBuffer; pub const HlslSemanticGOOGLE: Decoration = Decoration::UserSemantic; pub fn required_capabilities(self) -> &'static [Capability] { match self { Decoration::BuiltIn | Decoration::Restrict | Decoration::Aliased | Decoration::Volatile | Decoration::Coherent | Decoration::NonWritable | Decoration::NonReadable | Decoration::FPRoundingMode | Decoration::NoSignedWrap | Decoration::NoUnsignedWrap | Decoration::ExplicitInterpAMD | Decoration::CounterBuffer | Decoration::UserSemantic => &[], Decoration::MaxByteOffset | Decoration::MaxByteOffsetId => &[Capability::Addresses], Decoration::PerVertexNV => &[Capability::FragmentBarycentricNV], Decoration::PassthroughNV => &[Capability::GeometryShaderPassthroughNV], Decoration::Stream => &[Capability::GeometryStreams], Decoration::InputAttachmentIndex => &[Capability::InputAttachment], Decoration::CPacked | Decoration::Constant | Decoration::SaturatedConversion | Decoration::FuncParamAttr | Decoration::FPFastMathMode | Decoration::Alignment | Decoration::AlignmentId => &[Capability::Kernel], Decoration::LinkageAttributes => &[Capability::Linkage], Decoration::RowMajor | Decoration::ColMajor | Decoration::MatrixStride => { &[Capability::Matrix] } Decoration::PerPrimitiveNV | Decoration::PerViewNV | Decoration::PerTaskNV => { &[Capability::MeshShadingNV] } Decoration::RestrictPointerEXT | Decoration::AliasedPointerEXT => { &[Capability::PhysicalStorageBufferAddressesEXT] } Decoration::OverrideCoverageNV => &[Capability::SampleMaskOverrideCoverageNV], Decoration::Sample => &[Capability::SampleRateShading], Decoration::RelaxedPrecision | Decoration::Block | Decoration::BufferBlock | Decoration::ArrayStride | Decoration::GLSLShared | Decoration::GLSLPacked | Decoration::NoPerspective | Decoration::Flat | Decoration::Centroid | Decoration::Invariant | Decoration::Uniform | Decoration::UniformId | Decoration::Location | Decoration::Component | Decoration::Index | Decoration::Binding | Decoration::DescriptorSet | Decoration::Offset | Decoration::NoContraction => &[Capability::Shader], Decoration::SpecId => &[Capability::Shader, Capability::Kernel], Decoration::NonUniformEXT => &[Capability::ShaderNonUniformEXT], Decoration::SecondaryViewportRelativeNV => &[Capability::ShaderStereoViewNV], Decoration::ViewportRelativeNV => &[Capability::ShaderViewportMaskNV], Decoration::Patch => &[Capability::Tessellation], Decoration::XfbBuffer | Decoration::XfbStride => &[Capability::TransformFeedback], } } } impl num_traits::FromPrimitive for Decoration { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => Decoration::RelaxedPrecision, 1u32 => Decoration::SpecId, 2u32 => Decoration::Block, 3u32 => Decoration::BufferBlock, 4u32 => Decoration::RowMajor, 5u32 => Decoration::ColMajor, 6u32 => Decoration::ArrayStride, 7u32 => Decoration::MatrixStride, 8u32 => Decoration::GLSLShared, 9u32 => Decoration::GLSLPacked, 10u32 => Decoration::CPacked, 11u32 => Decoration::BuiltIn, 13u32 => Decoration::NoPerspective, 14u32 => Decoration::Flat, 15u32 => Decoration::Patch, 16u32 => Decoration::Centroid, 17u32 => Decoration::Sample, 18u32 => Decoration::Invariant, 19u32 => Decoration::Restrict, 20u32 => Decoration::Aliased, 21u32 => Decoration::Volatile, 22u32 => Decoration::Constant, 23u32 => Decoration::Coherent, 24u32 => Decoration::NonWritable, 25u32 => Decoration::NonReadable, 26u32 => Decoration::Uniform, 27u32 => Decoration::UniformId, 28u32 => Decoration::SaturatedConversion, 29u32 => Decoration::Stream, 30u32 => Decoration::Location, 31u32 => Decoration::Component, 32u32 => Decoration::Index, 33u32 => Decoration::Binding, 34u32 => Decoration::DescriptorSet, 35u32 => Decoration::Offset, 36u32 => Decoration::XfbBuffer, 37u32 => Decoration::XfbStride, 38u32 => Decoration::FuncParamAttr, 39u32 => Decoration::FPRoundingMode, 40u32 => Decoration::FPFastMathMode, 41u32 => Decoration::LinkageAttributes, 42u32 => Decoration::NoContraction, 43u32 => Decoration::InputAttachmentIndex, 44u32 => Decoration::Alignment, 45u32 => Decoration::MaxByteOffset, 46u32 => Decoration::AlignmentId, 47u32 => Decoration::MaxByteOffsetId, 4469u32 => Decoration::NoSignedWrap, 4470u32 => Decoration::NoUnsignedWrap, 4999u32 => Decoration::ExplicitInterpAMD, 5248u32 => Decoration::OverrideCoverageNV, 5250u32 => Decoration::PassthroughNV, 5252u32 => Decoration::ViewportRelativeNV, 5256u32 => Decoration::SecondaryViewportRelativeNV, 5271u32 => Decoration::PerPrimitiveNV, 5272u32 => Decoration::PerViewNV, 5273u32 => Decoration::PerTaskNV, 5285u32 => Decoration::PerVertexNV, 5300u32 => Decoration::NonUniformEXT, 5634u32 => Decoration::CounterBuffer, 5635u32 => Decoration::UserSemantic, 5355u32 => Decoration::RestrictPointerEXT, 5356u32 => Decoration::AliasedPointerEXT, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [BuiltIn](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_built_in_a_built_in)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum BuiltIn { Position = 0u32, PointSize = 1u32, ClipDistance = 3u32, CullDistance = 4u32, VertexId = 5u32, InstanceId = 6u32, PrimitiveId = 7u32, InvocationId = 8u32, Layer = 9u32, ViewportIndex = 10u32, TessLevelOuter = 11u32, TessLevelInner = 12u32, TessCoord = 13u32, PatchVertices = 14u32, FragCoord = 15u32, PointCoord = 16u32, FrontFacing = 17u32, SampleId = 18u32, SamplePosition = 19u32, SampleMask = 20u32, FragDepth = 22u32, HelperInvocation = 23u32, NumWorkgroups = 24u32, WorkgroupSize = 25u32, WorkgroupId = 26u32, LocalInvocationId = 27u32, GlobalInvocationId = 28u32, LocalInvocationIndex = 29u32, WorkDim = 30u32, GlobalSize = 31u32, EnqueuedWorkgroupSize = 32u32, GlobalOffset = 33u32, GlobalLinearId = 34u32, SubgroupSize = 36u32, SubgroupMaxSize = 37u32, NumSubgroups = 38u32, NumEnqueuedSubgroups = 39u32, SubgroupId = 40u32, SubgroupLocalInvocationId = 41u32, VertexIndex = 42u32, InstanceIndex = 43u32, SubgroupEqMask = 4416u32, SubgroupGeMask = 4417u32, SubgroupGtMask = 4418u32, SubgroupLeMask = 4419u32, SubgroupLtMask = 4420u32, BaseVertex = 4424u32, BaseInstance = 4425u32, DrawIndex = 4426u32, DeviceIndex = 4438u32, ViewIndex = 4440u32, BaryCoordNoPerspAMD = 4992u32, BaryCoordNoPerspCentroidAMD = 4993u32, BaryCoordNoPerspSampleAMD = 4994u32, BaryCoordSmoothAMD = 4995u32, BaryCoordSmoothCentroidAMD = 4996u32, BaryCoordSmoothSampleAMD = 4997u32, BaryCoordPullModelAMD = 4998u32, FragStencilRefEXT = 5014u32, ViewportMaskNV = 5253u32, SecondaryPositionNV = 5257u32, SecondaryViewportMaskNV = 5258u32, PositionPerViewNV = 5261u32, ViewportMaskPerViewNV = 5262u32, FullyCoveredEXT = 5264u32, TaskCountNV = 5274u32, PrimitiveCountNV = 5275u32, PrimitiveIndicesNV = 5276u32, ClipDistancePerViewNV = 5277u32, CullDistancePerViewNV = 5278u32, LayerPerViewNV = 5279u32, MeshViewCountNV = 5280u32, MeshViewIndicesNV = 5281u32, BaryCoordNV = 5286u32, BaryCoordNoPerspNV = 5287u32, FragSizeEXT = 5292u32, FragInvocationCountEXT = 5293u32, LaunchIdNV = 5319u32, LaunchSizeNV = 5320u32, WorldRayOriginNV = 5321u32, WorldRayDirectionNV = 5322u32, ObjectRayOriginNV = 5323u32, ObjectRayDirectionNV = 5324u32, RayTminNV = 5325u32, RayTmaxNV = 5326u32, InstanceCustomIndexNV = 5327u32, ObjectToWorldNV = 5330u32, WorldToObjectNV = 5331u32, HitTNV = 5332u32, HitKindNV = 5333u32, IncomingRayFlagsNV = 5351u32, } #[allow(non_upper_case_globals)] impl BuiltIn { pub const SubgroupEqMaskKHR: BuiltIn = BuiltIn::SubgroupEqMask; pub const SubgroupGeMaskKHR: BuiltIn = BuiltIn::SubgroupGeMask; pub const SubgroupGtMaskKHR: BuiltIn = BuiltIn::SubgroupGtMask; pub const SubgroupLeMaskKHR: BuiltIn = BuiltIn::SubgroupLeMask; pub const SubgroupLtMaskKHR: BuiltIn = BuiltIn::SubgroupLtMask; pub const FragmentSizeNV: BuiltIn = BuiltIn::FragSizeEXT; pub const InvocationsPerPixelNV: BuiltIn = BuiltIn::FragInvocationCountEXT; pub fn required_capabilities(self) -> &'static [Capability] { match self { BuiltIn::NumWorkgroups | BuiltIn::WorkgroupSize | BuiltIn::WorkgroupId | BuiltIn::LocalInvocationId | BuiltIn::GlobalInvocationId | BuiltIn::LocalInvocationIndex | BuiltIn::BaryCoordNoPerspAMD | BuiltIn::BaryCoordNoPerspCentroidAMD | BuiltIn::BaryCoordNoPerspSampleAMD | BuiltIn::BaryCoordSmoothAMD | BuiltIn::BaryCoordSmoothCentroidAMD | BuiltIn::BaryCoordSmoothSampleAMD | BuiltIn::BaryCoordPullModelAMD => &[], BuiltIn::ClipDistance => &[Capability::ClipDistance], BuiltIn::CullDistance => &[Capability::CullDistance], BuiltIn::DeviceIndex => &[Capability::DeviceGroup], BuiltIn::BaseVertex | BuiltIn::BaseInstance => &[Capability::DrawParameters], BuiltIn::DrawIndex => &[Capability::DrawParameters, Capability::MeshShadingNV], BuiltIn::BaryCoordNV | BuiltIn::BaryCoordNoPerspNV => { &[Capability::FragmentBarycentricNV] } BuiltIn::FragSizeEXT | BuiltIn::FragInvocationCountEXT => { &[Capability::FragmentDensityEXT, Capability::ShadingRateNV] } BuiltIn::FullyCoveredEXT => &[Capability::FragmentFullyCoveredEXT], BuiltIn::Layer => &[Capability::Geometry], BuiltIn::InvocationId => &[Capability::Geometry, Capability::Tessellation], BuiltIn::PrimitiveId => &[ Capability::Geometry, Capability::Tessellation, Capability::RayTracingNV, ], BuiltIn::WorkDim | BuiltIn::GlobalSize | BuiltIn::EnqueuedWorkgroupSize | BuiltIn::GlobalOffset | BuiltIn::GlobalLinearId | BuiltIn::SubgroupMaxSize | BuiltIn::NumEnqueuedSubgroups => &[Capability::Kernel], BuiltIn::NumSubgroups | BuiltIn::SubgroupId => { &[Capability::Kernel, Capability::GroupNonUniform] } BuiltIn::SubgroupSize | BuiltIn::SubgroupLocalInvocationId => &[ Capability::Kernel, Capability::GroupNonUniform, Capability::SubgroupBallotKHR, ], BuiltIn::TaskCountNV | BuiltIn::PrimitiveCountNV | BuiltIn::PrimitiveIndicesNV | BuiltIn::ClipDistancePerViewNV | BuiltIn::CullDistancePerViewNV | BuiltIn::LayerPerViewNV | BuiltIn::MeshViewCountNV | BuiltIn::MeshViewIndicesNV => &[Capability::MeshShadingNV], BuiltIn::ViewIndex => &[Capability::MultiView], BuiltIn::ViewportIndex => &[Capability::MultiViewport], BuiltIn::PositionPerViewNV | BuiltIn::ViewportMaskPerViewNV => { &[Capability::PerViewAttributesNV, Capability::MeshShadingNV] } BuiltIn::LaunchIdNV | BuiltIn::LaunchSizeNV | BuiltIn::WorldRayOriginNV | BuiltIn::WorldRayDirectionNV | BuiltIn::ObjectRayOriginNV | BuiltIn::ObjectRayDirectionNV | BuiltIn::RayTminNV | BuiltIn::RayTmaxNV | BuiltIn::InstanceCustomIndexNV | BuiltIn::ObjectToWorldNV | BuiltIn::WorldToObjectNV | BuiltIn::HitTNV | BuiltIn::HitKindNV | BuiltIn::IncomingRayFlagsNV => &[Capability::RayTracingNV], BuiltIn::SampleId | BuiltIn::SamplePosition => &[Capability::SampleRateShading], BuiltIn::Position | BuiltIn::PointSize | BuiltIn::VertexId | BuiltIn::InstanceId | BuiltIn::FragCoord | BuiltIn::PointCoord | BuiltIn::FrontFacing | BuiltIn::SampleMask | BuiltIn::FragDepth | BuiltIn::HelperInvocation | BuiltIn::VertexIndex | BuiltIn::InstanceIndex => &[Capability::Shader], BuiltIn::SecondaryPositionNV | BuiltIn::SecondaryViewportMaskNV => { &[Capability::ShaderStereoViewNV] } BuiltIn::ViewportMaskNV => { &[Capability::ShaderViewportMaskNV, Capability::MeshShadingNV] } BuiltIn::FragStencilRefEXT => &[Capability::StencilExportEXT], BuiltIn::SubgroupEqMask | BuiltIn::SubgroupGeMask | BuiltIn::SubgroupGtMask | BuiltIn::SubgroupLeMask | BuiltIn::SubgroupLtMask => &[ Capability::SubgroupBallotKHR, Capability::GroupNonUniformBallot, ], BuiltIn::TessLevelOuter | BuiltIn::TessLevelInner | BuiltIn::TessCoord | BuiltIn::PatchVertices => &[Capability::Tessellation], } } } impl num_traits::FromPrimitive for BuiltIn { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => BuiltIn::Position, 1u32 => BuiltIn::PointSize, 3u32 => BuiltIn::ClipDistance, 4u32 => BuiltIn::CullDistance, 5u32 => BuiltIn::VertexId, 6u32 => BuiltIn::InstanceId, 7u32 => BuiltIn::PrimitiveId, 8u32 => BuiltIn::InvocationId, 9u32 => BuiltIn::Layer, 10u32 => BuiltIn::ViewportIndex, 11u32 => BuiltIn::TessLevelOuter, 12u32 => BuiltIn::TessLevelInner, 13u32 => BuiltIn::TessCoord, 14u32 => BuiltIn::PatchVertices, 15u32 => BuiltIn::FragCoord, 16u32 => BuiltIn::PointCoord, 17u32 => BuiltIn::FrontFacing, 18u32 => BuiltIn::SampleId, 19u32 => BuiltIn::SamplePosition, 20u32 => BuiltIn::SampleMask, 22u32 => BuiltIn::FragDepth, 23u32 => BuiltIn::HelperInvocation, 24u32 => BuiltIn::NumWorkgroups, 25u32 => BuiltIn::WorkgroupSize, 26u32 => BuiltIn::WorkgroupId, 27u32 => BuiltIn::LocalInvocationId, 28u32 => BuiltIn::GlobalInvocationId, 29u32 => BuiltIn::LocalInvocationIndex, 30u32 => BuiltIn::WorkDim, 31u32 => BuiltIn::GlobalSize, 32u32 => BuiltIn::EnqueuedWorkgroupSize, 33u32 => BuiltIn::GlobalOffset, 34u32 => BuiltIn::GlobalLinearId, 36u32 => BuiltIn::SubgroupSize, 37u32 => BuiltIn::SubgroupMaxSize, 38u32 => BuiltIn::NumSubgroups, 39u32 => BuiltIn::NumEnqueuedSubgroups, 40u32 => BuiltIn::SubgroupId, 41u32 => BuiltIn::SubgroupLocalInvocationId, 42u32 => BuiltIn::VertexIndex, 43u32 => BuiltIn::InstanceIndex, 4416u32 => BuiltIn::SubgroupEqMask, 4417u32 => BuiltIn::SubgroupGeMask, 4418u32 => BuiltIn::SubgroupGtMask, 4419u32 => BuiltIn::SubgroupLeMask, 4420u32 => BuiltIn::SubgroupLtMask, 4424u32 => BuiltIn::BaseVertex, 4425u32 => BuiltIn::BaseInstance, 4426u32 => BuiltIn::DrawIndex, 4438u32 => BuiltIn::DeviceIndex, 4440u32 => BuiltIn::ViewIndex, 4992u32 => BuiltIn::BaryCoordNoPerspAMD, 4993u32 => BuiltIn::BaryCoordNoPerspCentroidAMD, 4994u32 => BuiltIn::BaryCoordNoPerspSampleAMD, 4995u32 => BuiltIn::BaryCoordSmoothAMD, 4996u32 => BuiltIn::BaryCoordSmoothCentroidAMD, 4997u32 => BuiltIn::BaryCoordSmoothSampleAMD, 4998u32 => BuiltIn::BaryCoordPullModelAMD, 5014u32 => BuiltIn::FragStencilRefEXT, 5253u32 => BuiltIn::ViewportMaskNV, 5257u32 => BuiltIn::SecondaryPositionNV, 5258u32 => BuiltIn::SecondaryViewportMaskNV, 5261u32 => BuiltIn::PositionPerViewNV, 5262u32 => BuiltIn::ViewportMaskPerViewNV, 5264u32 => BuiltIn::FullyCoveredEXT, 5274u32 => BuiltIn::TaskCountNV, 5275u32 => BuiltIn::PrimitiveCountNV, 5276u32 => BuiltIn::PrimitiveIndicesNV, 5277u32 => BuiltIn::ClipDistancePerViewNV, 5278u32 => BuiltIn::CullDistancePerViewNV, 5279u32 => BuiltIn::LayerPerViewNV, 5280u32 => BuiltIn::MeshViewCountNV, 5281u32 => BuiltIn::MeshViewIndicesNV, 5286u32 => BuiltIn::BaryCoordNV, 5287u32 => BuiltIn::BaryCoordNoPerspNV, 5292u32 => BuiltIn::FragSizeEXT, 5293u32 => BuiltIn::FragInvocationCountEXT, 5319u32 => BuiltIn::LaunchIdNV, 5320u32 => BuiltIn::LaunchSizeNV, 5321u32 => BuiltIn::WorldRayOriginNV, 5322u32 => BuiltIn::WorldRayDirectionNV, 5323u32 => BuiltIn::ObjectRayOriginNV, 5324u32 => BuiltIn::ObjectRayDirectionNV, 5325u32 => BuiltIn::RayTminNV, 5326u32 => BuiltIn::RayTmaxNV, 5327u32 => BuiltIn::InstanceCustomIndexNV, 5330u32 => BuiltIn::ObjectToWorldNV, 5331u32 => BuiltIn::WorldToObjectNV, 5332u32 => BuiltIn::HitTNV, 5333u32 => BuiltIn::HitKindNV, 5351u32 => BuiltIn::IncomingRayFlagsNV, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [Scope](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_scope_a_scope)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum Scope { CrossDevice = 0u32, Device = 1u32, Workgroup = 2u32, Subgroup = 3u32, Invocation = 4u32, QueueFamilyKHR = 5u32, } #[allow(non_upper_case_globals)] impl Scope { pub fn required_capabilities(self) -> &'static [Capability] { match self { Scope::CrossDevice | Scope::Device | Scope::Workgroup | Scope::Subgroup | Scope::Invocation => &[], Scope::QueueFamilyKHR => &[Capability::VulkanMemoryModelKHR], } } } impl num_traits::FromPrimitive for Scope { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => Scope::CrossDevice, 1u32 => Scope::Device, 2u32 => Scope::Workgroup, 3u32 => Scope::Subgroup, 4u32 => Scope::Invocation, 5u32 => Scope::QueueFamilyKHR, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [GroupOperation](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_group_operation_a_group_operation)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum GroupOperation { Reduce = 0u32, InclusiveScan = 1u32, ExclusiveScan = 2u32, ClusteredReduce = 3u32, PartitionedReduceNV = 6u32, PartitionedInclusiveScanNV = 7u32, PartitionedExclusiveScanNV = 8u32, } #[allow(non_upper_case_globals)] impl GroupOperation { pub fn required_capabilities(self) -> &'static [Capability] { match self { GroupOperation::ClusteredReduce => &[Capability::GroupNonUniformClustered], GroupOperation::PartitionedReduceNV | GroupOperation::PartitionedInclusiveScanNV | GroupOperation::PartitionedExclusiveScanNV => { &[Capability::GroupNonUniformPartitionedNV] } GroupOperation::Reduce | GroupOperation::InclusiveScan | GroupOperation::ExclusiveScan => &[ Capability::Kernel, Capability::GroupNonUniformArithmetic, Capability::GroupNonUniformBallot, ], } } } impl num_traits::FromPrimitive for GroupOperation { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => GroupOperation::Reduce, 1u32 => GroupOperation::InclusiveScan, 2u32 => GroupOperation::ExclusiveScan, 3u32 => GroupOperation::ClusteredReduce, 6u32 => GroupOperation::PartitionedReduceNV, 7u32 => GroupOperation::PartitionedInclusiveScanNV, 8u32 => GroupOperation::PartitionedExclusiveScanNV, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [KernelEnqueueFlags](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_kernel_enqueue_flags_a_kernel_enqueue_flags)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum KernelEnqueueFlags { NoWait = 0u32, WaitKernel = 1u32, WaitWorkGroup = 2u32, } #[allow(non_upper_case_globals)] impl KernelEnqueueFlags { pub fn required_capabilities(self) -> &'static [Capability] { match self { KernelEnqueueFlags::NoWait | KernelEnqueueFlags::WaitKernel | KernelEnqueueFlags::WaitWorkGroup => &[Capability::Kernel], } } } impl num_traits::FromPrimitive for KernelEnqueueFlags { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => KernelEnqueueFlags::NoWait, 1u32 => KernelEnqueueFlags::WaitKernel, 2u32 => KernelEnqueueFlags::WaitWorkGroup, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "/// SPIR-V operand kind: [Capability](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_capability_a_capability)"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum Capability { Matrix = 0u32, Shader = 1u32, Geometry = 2u32, Tessellation = 3u32, Addresses = 4u32, Linkage = 5u32, Kernel = 6u32, Vector16 = 7u32, Float16Buffer = 8u32, Float16 = 9u32, Float64 = 10u32, Int64 = 11u32, Int64Atomics = 12u32, ImageBasic = 13u32, ImageReadWrite = 14u32, ImageMipmap = 15u32, Pipes = 17u32, Groups = 18u32, DeviceEnqueue = 19u32, LiteralSampler = 20u32, AtomicStorage = 21u32, Int16 = 22u32, TessellationPointSize = 23u32, GeometryPointSize = 24u32, ImageGatherExtended = 25u32, StorageImageMultisample = 27u32, UniformBufferArrayDynamicIndexing = 28u32, SampledImageArrayDynamicIndexing = 29u32, StorageBufferArrayDynamicIndexing = 30u32, StorageImageArrayDynamicIndexing = 31u32, ClipDistance = 32u32, CullDistance = 33u32, ImageCubeArray = 34u32, SampleRateShading = 35u32, ImageRect = 36u32, SampledRect = 37u32, GenericPointer = 38u32, Int8 = 39u32, InputAttachment = 40u32, SparseResidency = 41u32, MinLod = 42u32, Sampled1D = 43u32, Image1D = 44u32, SampledCubeArray = 45u32, SampledBuffer = 46u32, ImageBuffer = 47u32, ImageMSArray = 48u32, StorageImageExtendedFormats = 49u32, ImageQuery = 50u32, DerivativeControl = 51u32, InterpolationFunction = 52u32, TransformFeedback = 53u32, GeometryStreams = 54u32, StorageImageReadWithoutFormat = 55u32, StorageImageWriteWithoutFormat = 56u32, MultiViewport = 57u32, SubgroupDispatch = 58u32, NamedBarrier = 59u32, PipeStorage = 60u32, GroupNonUniform = 61u32, GroupNonUniformVote = 62u32, GroupNonUniformArithmetic = 63u32, GroupNonUniformBallot = 64u32, GroupNonUniformShuffle = 65u32, GroupNonUniformShuffleRelative = 66u32, GroupNonUniformClustered = 67u32, GroupNonUniformQuad = 68u32, SubgroupBallotKHR = 4423u32, DrawParameters = 4427u32, SubgroupVoteKHR = 4431u32, StorageBuffer16BitAccess = 4433u32, UniformAndStorageBuffer16BitAccess = 4434u32, StoragePushConstant16 = 4435u32, StorageInputOutput16 = 4436u32, DeviceGroup = 4437u32, MultiView = 4439u32, VariablePointersStorageBuffer = 4441u32, VariablePointers = 4442u32, AtomicStorageOps = 4445u32, SampleMaskPostDepthCoverage = 4447u32, StorageBuffer8BitAccess = 4448u32, UniformAndStorageBuffer8BitAccess = 4449u32, StoragePushConstant8 = 4450u32, DenormPreserve = 4464u32, DenormFlushToZero = 4465u32, SignedZeroInfNanPreserve = 4466u32, RoundingModeRTE = 4467u32, RoundingModeRTZ = 4468u32, Float16ImageAMD = 5008u32, ImageGatherBiasLodAMD = 5009u32, FragmentMaskAMD = 5010u32, StencilExportEXT = 5013u32, ImageReadWriteLodAMD = 5015u32, SampleMaskOverrideCoverageNV = 5249u32, GeometryShaderPassthroughNV = 5251u32, ShaderViewportIndexLayerEXT = 5254u32, ShaderViewportMaskNV = 5255u32, ShaderStereoViewNV = 5259u32, PerViewAttributesNV = 5260u32, FragmentFullyCoveredEXT = 5265u32, MeshShadingNV = 5266u32, ShaderNonUniformEXT = 5301u32, RuntimeDescriptorArrayEXT = 5302u32, InputAttachmentArrayDynamicIndexingEXT = 5303u32, UniformTexelBufferArrayDynamicIndexingEXT = 5304u32, StorageTexelBufferArrayDynamicIndexingEXT = 5305u32, UniformBufferArrayNonUniformIndexingEXT = 5306u32, SampledImageArrayNonUniformIndexingEXT = 5307u32, StorageBufferArrayNonUniformIndexingEXT = 5308u32, StorageImageArrayNonUniformIndexingEXT = 5309u32, InputAttachmentArrayNonUniformIndexingEXT = 5310u32, UniformTexelBufferArrayNonUniformIndexingEXT = 5311u32, StorageTexelBufferArrayNonUniformIndexingEXT = 5312u32, RayTracingNV = 5340u32, SubgroupShuffleINTEL = 5568u32, SubgroupBufferBlockIOINTEL = 5569u32, SubgroupImageBlockIOINTEL = 5570u32, SubgroupImageMediaBlockIOINTEL = 5579u32, SubgroupAvcMotionEstimationINTEL = 5696u32, SubgroupAvcMotionEstimationIntraINTEL = 5697u32, SubgroupAvcMotionEstimationChromaINTEL = 5698u32, GroupNonUniformPartitionedNV = 5297u32, VulkanMemoryModelKHR = 5345u32, VulkanMemoryModelDeviceScopeKHR = 5346u32, ImageFootprintNV = 5282u32, FragmentBarycentricNV = 5284u32, ComputeDerivativeGroupQuadsNV = 5288u32, ComputeDerivativeGroupLinearNV = 5350u32, FragmentDensityEXT = 5291u32, PhysicalStorageBufferAddressesEXT = 5347u32, CooperativeMatrixNV = 5357u32, } #[allow(non_upper_case_globals)] impl Capability { pub const StorageUniformBufferBlock16: Capability = Capability::StorageBuffer16BitAccess; pub const StorageUniform16: Capability = Capability::UniformAndStorageBuffer16BitAccess; pub const ShaderViewportIndexLayerNV: Capability = Capability::ShaderViewportIndexLayerEXT; pub const ShadingRateNV: Capability = Capability::FragmentDensityEXT; pub fn required_capabilities(self) -> &'static [Capability] { match self { Capability::Matrix | Capability::Addresses | Capability::Linkage | Capability::Kernel | Capability::Float16 | Capability::Float64 | Capability::Int64 | Capability::Groups | Capability::Int16 | Capability::Int8 | Capability::Sampled1D | Capability::SampledBuffer | Capability::GroupNonUniform | Capability::SubgroupBallotKHR | Capability::SubgroupVoteKHR | Capability::StorageBuffer16BitAccess | Capability::StoragePushConstant16 | Capability::StorageInputOutput16 | Capability::DeviceGroup | Capability::AtomicStorageOps | Capability::SampleMaskPostDepthCoverage | Capability::StorageBuffer8BitAccess | Capability::StoragePushConstant8 | Capability::DenormPreserve | Capability::DenormFlushToZero | Capability::SignedZeroInfNanPreserve | Capability::RoundingModeRTE | Capability::RoundingModeRTZ | Capability::SubgroupShuffleINTEL | Capability::SubgroupBufferBlockIOINTEL | Capability::SubgroupImageBlockIOINTEL | Capability::SubgroupImageMediaBlockIOINTEL | Capability::SubgroupAvcMotionEstimationINTEL | Capability::SubgroupAvcMotionEstimationIntraINTEL | Capability::SubgroupAvcMotionEstimationChromaINTEL | Capability::GroupNonUniformPartitionedNV | Capability::VulkanMemoryModelKHR | Capability::VulkanMemoryModelDeviceScopeKHR | Capability::ImageFootprintNV | Capability::FragmentBarycentricNV | Capability::ComputeDerivativeGroupQuadsNV | Capability::ComputeDerivativeGroupLinearNV => &[], Capability::GenericPointer => &[Capability::Addresses], Capability::SubgroupDispatch => &[Capability::DeviceEnqueue], Capability::GeometryPointSize | Capability::GeometryStreams | Capability::MultiViewport | Capability::GeometryShaderPassthroughNV => &[Capability::Geometry], Capability::GroupNonUniformVote | Capability::GroupNonUniformArithmetic | Capability::GroupNonUniformBallot | Capability::GroupNonUniformShuffle | Capability::GroupNonUniformShuffleRelative | Capability::GroupNonUniformClustered | Capability::GroupNonUniformQuad => &[Capability::GroupNonUniform], Capability::ImageReadWrite | Capability::ImageMipmap => &[Capability::ImageBasic], Capability::StorageTexelBufferArrayDynamicIndexingEXT => &[Capability::ImageBuffer], Capability::StorageTexelBufferArrayNonUniformIndexingEXT => { &[Capability::ImageBuffer, Capability::ShaderNonUniformEXT] } Capability::InputAttachmentArrayDynamicIndexingEXT => &[Capability::InputAttachment], Capability::InputAttachmentArrayNonUniformIndexingEXT => { &[Capability::InputAttachment, Capability::ShaderNonUniformEXT] } Capability::Int64Atomics => &[Capability::Int64], Capability::Vector16 | Capability::Float16Buffer | Capability::ImageBasic | Capability::Pipes | Capability::DeviceEnqueue | Capability::LiteralSampler | Capability::NamedBarrier => &[Capability::Kernel], Capability::Shader => &[Capability::Matrix], Capability::PerViewAttributesNV => &[Capability::MultiView], Capability::ShaderViewportIndexLayerEXT => &[Capability::MultiViewport], Capability::PipeStorage => &[Capability::Pipes], Capability::SampleMaskOverrideCoverageNV => &[Capability::SampleRateShading], Capability::Image1D => &[Capability::Sampled1D], Capability::ImageBuffer | Capability::UniformTexelBufferArrayDynamicIndexingEXT => { &[Capability::SampledBuffer] } Capability::UniformTexelBufferArrayNonUniformIndexingEXT => { &[Capability::SampledBuffer, Capability::ShaderNonUniformEXT] } Capability::ImageCubeArray => &[Capability::SampledCubeArray], Capability::ImageRect => &[Capability::SampledRect], Capability::Geometry | Capability::Tessellation | Capability::AtomicStorage | Capability::ImageGatherExtended | Capability::StorageImageMultisample | Capability::UniformBufferArrayDynamicIndexing | Capability::SampledImageArrayDynamicIndexing | Capability::StorageBufferArrayDynamicIndexing | Capability::StorageImageArrayDynamicIndexing | Capability::ClipDistance | Capability::CullDistance | Capability::SampleRateShading | Capability::SampledRect | Capability::InputAttachment | Capability::SparseResidency | Capability::MinLod | Capability::SampledCubeArray | Capability::ImageMSArray | Capability::StorageImageExtendedFormats | Capability::ImageQuery | Capability::DerivativeControl | Capability::InterpolationFunction | Capability::TransformFeedback | Capability::StorageImageReadWithoutFormat | Capability::StorageImageWriteWithoutFormat | Capability::DrawParameters | Capability::MultiView | Capability::VariablePointersStorageBuffer | Capability::Float16ImageAMD | Capability::ImageGatherBiasLodAMD | Capability::FragmentMaskAMD | Capability::StencilExportEXT | Capability::ImageReadWriteLodAMD | Capability::FragmentFullyCoveredEXT | Capability::MeshShadingNV | Capability::ShaderNonUniformEXT | Capability::RuntimeDescriptorArrayEXT | Capability::RayTracingNV | Capability::FragmentDensityEXT | Capability::PhysicalStorageBufferAddressesEXT | Capability::CooperativeMatrixNV => &[Capability::Shader], Capability::UniformBufferArrayNonUniformIndexingEXT | Capability::SampledImageArrayNonUniformIndexingEXT | Capability::StorageBufferArrayNonUniformIndexingEXT | Capability::StorageImageArrayNonUniformIndexingEXT => { &[Capability::ShaderNonUniformEXT] } Capability::ShaderViewportMaskNV => &[Capability::ShaderViewportIndexLayerNV], Capability::ShaderStereoViewNV => &[Capability::ShaderViewportMaskNV], Capability::UniformAndStorageBuffer16BitAccess => &[ Capability::StorageBuffer16BitAccess, Capability::StorageUniformBufferBlock16, ], Capability::UniformAndStorageBuffer8BitAccess => &[Capability::StorageBuffer8BitAccess], Capability::TessellationPointSize => &[Capability::Tessellation], Capability::VariablePointers => &[Capability::VariablePointersStorageBuffer], } } } impl num_traits::FromPrimitive for Capability { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => Capability::Matrix, 1u32 => Capability::Shader, 2u32 => Capability::Geometry, 3u32 => Capability::Tessellation, 4u32 => Capability::Addresses, 5u32 => Capability::Linkage, 6u32 => Capability::Kernel, 7u32 => Capability::Vector16, 8u32 => Capability::Float16Buffer, 9u32 => Capability::Float16, 10u32 => Capability::Float64, 11u32 => Capability::Int64, 12u32 => Capability::Int64Atomics, 13u32 => Capability::ImageBasic, 14u32 => Capability::ImageReadWrite, 15u32 => Capability::ImageMipmap, 17u32 => Capability::Pipes, 18u32 => Capability::Groups, 19u32 => Capability::DeviceEnqueue, 20u32 => Capability::LiteralSampler, 21u32 => Capability::AtomicStorage, 22u32 => Capability::Int16, 23u32 => Capability::TessellationPointSize, 24u32 => Capability::GeometryPointSize, 25u32 => Capability::ImageGatherExtended, 27u32 => Capability::StorageImageMultisample, 28u32 => Capability::UniformBufferArrayDynamicIndexing, 29u32 => Capability::SampledImageArrayDynamicIndexing, 30u32 => Capability::StorageBufferArrayDynamicIndexing, 31u32 => Capability::StorageImageArrayDynamicIndexing, 32u32 => Capability::ClipDistance, 33u32 => Capability::CullDistance, 34u32 => Capability::ImageCubeArray, 35u32 => Capability::SampleRateShading, 36u32 => Capability::ImageRect, 37u32 => Capability::SampledRect, 38u32 => Capability::GenericPointer, 39u32 => Capability::Int8, 40u32 => Capability::InputAttachment, 41u32 => Capability::SparseResidency, 42u32 => Capability::MinLod, 43u32 => Capability::Sampled1D, 44u32 => Capability::Image1D, 45u32 => Capability::SampledCubeArray, 46u32 => Capability::SampledBuffer, 47u32 => Capability::ImageBuffer, 48u32 => Capability::ImageMSArray, 49u32 => Capability::StorageImageExtendedFormats, 50u32 => Capability::ImageQuery, 51u32 => Capability::DerivativeControl, 52u32 => Capability::InterpolationFunction, 53u32 => Capability::TransformFeedback, 54u32 => Capability::GeometryStreams, 55u32 => Capability::StorageImageReadWithoutFormat, 56u32 => Capability::StorageImageWriteWithoutFormat, 57u32 => Capability::MultiViewport, 58u32 => Capability::SubgroupDispatch, 59u32 => Capability::NamedBarrier, 60u32 => Capability::PipeStorage, 61u32 => Capability::GroupNonUniform, 62u32 => Capability::GroupNonUniformVote, 63u32 => Capability::GroupNonUniformArithmetic, 64u32 => Capability::GroupNonUniformBallot, 65u32 => Capability::GroupNonUniformShuffle, 66u32 => Capability::GroupNonUniformShuffleRelative, 67u32 => Capability::GroupNonUniformClustered, 68u32 => Capability::GroupNonUniformQuad, 4423u32 => Capability::SubgroupBallotKHR, 4427u32 => Capability::DrawParameters, 4431u32 => Capability::SubgroupVoteKHR, 4433u32 => Capability::StorageBuffer16BitAccess, 4434u32 => Capability::UniformAndStorageBuffer16BitAccess, 4435u32 => Capability::StoragePushConstant16, 4436u32 => Capability::StorageInputOutput16, 4437u32 => Capability::DeviceGroup, 4439u32 => Capability::MultiView, 4441u32 => Capability::VariablePointersStorageBuffer, 4442u32 => Capability::VariablePointers, 4445u32 => Capability::AtomicStorageOps, 4447u32 => Capability::SampleMaskPostDepthCoverage, 4448u32 => Capability::StorageBuffer8BitAccess, 4449u32 => Capability::UniformAndStorageBuffer8BitAccess, 4450u32 => Capability::StoragePushConstant8, 4464u32 => Capability::DenormPreserve, 4465u32 => Capability::DenormFlushToZero, 4466u32 => Capability::SignedZeroInfNanPreserve, 4467u32 => Capability::RoundingModeRTE, 4468u32 => Capability::RoundingModeRTZ, 5008u32 => Capability::Float16ImageAMD, 5009u32 => Capability::ImageGatherBiasLodAMD, 5010u32 => Capability::FragmentMaskAMD, 5013u32 => Capability::StencilExportEXT, 5015u32 => Capability::ImageReadWriteLodAMD, 5249u32 => Capability::SampleMaskOverrideCoverageNV, 5251u32 => Capability::GeometryShaderPassthroughNV, 5254u32 => Capability::ShaderViewportIndexLayerEXT, 5255u32 => Capability::ShaderViewportMaskNV, 5259u32 => Capability::ShaderStereoViewNV, 5260u32 => Capability::PerViewAttributesNV, 5265u32 => Capability::FragmentFullyCoveredEXT, 5266u32 => Capability::MeshShadingNV, 5301u32 => Capability::ShaderNonUniformEXT, 5302u32 => Capability::RuntimeDescriptorArrayEXT, 5303u32 => Capability::InputAttachmentArrayDynamicIndexingEXT, 5304u32 => Capability::UniformTexelBufferArrayDynamicIndexingEXT, 5305u32 => Capability::StorageTexelBufferArrayDynamicIndexingEXT, 5306u32 => Capability::UniformBufferArrayNonUniformIndexingEXT, 5307u32 => Capability::SampledImageArrayNonUniformIndexingEXT, 5308u32 => Capability::StorageBufferArrayNonUniformIndexingEXT, 5309u32 => Capability::StorageImageArrayNonUniformIndexingEXT, 5310u32 => Capability::InputAttachmentArrayNonUniformIndexingEXT, 5311u32 => Capability::UniformTexelBufferArrayNonUniformIndexingEXT, 5312u32 => Capability::StorageTexelBufferArrayNonUniformIndexingEXT, 5340u32 => Capability::RayTracingNV, 5568u32 => Capability::SubgroupShuffleINTEL, 5569u32 => Capability::SubgroupBufferBlockIOINTEL, 5570u32 => Capability::SubgroupImageBlockIOINTEL, 5579u32 => Capability::SubgroupImageMediaBlockIOINTEL, 5696u32 => Capability::SubgroupAvcMotionEstimationINTEL, 5697u32 => Capability::SubgroupAvcMotionEstimationIntraINTEL, 5698u32 => Capability::SubgroupAvcMotionEstimationChromaINTEL, 5297u32 => Capability::GroupNonUniformPartitionedNV, 5345u32 => Capability::VulkanMemoryModelKHR, 5346u32 => Capability::VulkanMemoryModelDeviceScopeKHR, 5282u32 => Capability::ImageFootprintNV, 5284u32 => Capability::FragmentBarycentricNV, 5288u32 => Capability::ComputeDerivativeGroupQuadsNV, 5350u32 => Capability::ComputeDerivativeGroupLinearNV, 5291u32 => Capability::FragmentDensityEXT, 5347u32 => Capability::PhysicalStorageBufferAddressesEXT, 5357u32 => Capability::CooperativeMatrixNV, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "SPIR-V [instructions](https://www.khronos.org/registry/spir-v/specs/unified1/SPIRV.html#_a_id_instructions_a_instructions) opcodes"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum Op { Nop = 0u32, Undef = 1u32, SourceContinued = 2u32, Source = 3u32, SourceExtension = 4u32, Name = 5u32, MemberName = 6u32, String = 7u32, Line = 8u32, Extension = 10u32, ExtInstImport = 11u32, ExtInst = 12u32, MemoryModel = 14u32, EntryPoint = 15u32, ExecutionMode = 16u32, Capability = 17u32, TypeVoid = 19u32, TypeBool = 20u32, TypeInt = 21u32, TypeFloat = 22u32, TypeVector = 23u32, TypeMatrix = 24u32, TypeImage = 25u32, TypeSampler = 26u32, TypeSampledImage = 27u32, TypeArray = 28u32, TypeRuntimeArray = 29u32, TypeStruct = 30u32, TypeOpaque = 31u32, TypePointer = 32u32, TypeFunction = 33u32, TypeEvent = 34u32, TypeDeviceEvent = 35u32, TypeReserveId = 36u32, TypeQueue = 37u32, TypePipe = 38u32, TypeForwardPointer = 39u32, ConstantTrue = 41u32, ConstantFalse = 42u32, Constant = 43u32, ConstantComposite = 44u32, ConstantSampler = 45u32, ConstantNull = 46u32, SpecConstantTrue = 48u32, SpecConstantFalse = 49u32, SpecConstant = 50u32, SpecConstantComposite = 51u32, SpecConstantOp = 52u32, Function = 54u32, FunctionParameter = 55u32, FunctionEnd = 56u32, FunctionCall = 57u32, Variable = 59u32, ImageTexelPointer = 60u32, Load = 61u32, Store = 62u32, CopyMemory = 63u32, CopyMemorySized = 64u32, AccessChain = 65u32, InBoundsAccessChain = 66u32, PtrAccessChain = 67u32, ArrayLength = 68u32, GenericPtrMemSemantics = 69u32, InBoundsPtrAccessChain = 70u32, Decorate = 71u32, MemberDecorate = 72u32, DecorationGroup = 73u32, GroupDecorate = 74u32, GroupMemberDecorate = 75u32, VectorExtractDynamic = 77u32, VectorInsertDynamic = 78u32, VectorShuffle = 79u32, CompositeConstruct = 80u32, CompositeExtract = 81u32, CompositeInsert = 82u32, CopyObject = 83u32, Transpose = 84u32, SampledImage = 86u32, ImageSampleImplicitLod = 87u32, ImageSampleExplicitLod = 88u32, ImageSampleDrefImplicitLod = 89u32, ImageSampleDrefExplicitLod = 90u32, ImageSampleProjImplicitLod = 91u32, ImageSampleProjExplicitLod = 92u32, ImageSampleProjDrefImplicitLod = 93u32, ImageSampleProjDrefExplicitLod = 94u32, ImageFetch = 95u32, ImageGather = 96u32, ImageDrefGather = 97u32, ImageRead = 98u32, ImageWrite = 99u32, Image = 100u32, ImageQueryFormat = 101u32, ImageQueryOrder = 102u32, ImageQuerySizeLod = 103u32, ImageQuerySize = 104u32, ImageQueryLod = 105u32, ImageQueryLevels = 106u32, ImageQuerySamples = 107u32, ConvertFToU = 109u32, ConvertFToS = 110u32, ConvertSToF = 111u32, ConvertUToF = 112u32, UConvert = 113u32, SConvert = 114u32, FConvert = 115u32, QuantizeToF16 = 116u32, ConvertPtrToU = 117u32, SatConvertSToU = 118u32, SatConvertUToS = 119u32, ConvertUToPtr = 120u32, PtrCastToGeneric = 121u32, GenericCastToPtr = 122u32, GenericCastToPtrExplicit = 123u32, Bitcast = 124u32, SNegate = 126u32, FNegate = 127u32, IAdd = 128u32, FAdd = 129u32, ISub = 130u32, FSub = 131u32, IMul = 132u32, FMul = 133u32, UDiv = 134u32, SDiv = 135u32, FDiv = 136u32, UMod = 137u32, SRem = 138u32, SMod = 139u32, FRem = 140u32, FMod = 141u32, VectorTimesScalar = 142u32, MatrixTimesScalar = 143u32, VectorTimesMatrix = 144u32, MatrixTimesVector = 145u32, MatrixTimesMatrix = 146u32, OuterProduct = 147u32, Dot = 148u32, IAddCarry = 149u32, ISubBorrow = 150u32, UMulExtended = 151u32, SMulExtended = 152u32, Any = 154u32, All = 155u32, IsNan = 156u32, IsInf = 157u32, IsFinite = 158u32, IsNormal = 159u32, SignBitSet = 160u32, LessOrGreater = 161u32, Ordered = 162u32, Unordered = 163u32, LogicalEqual = 164u32, LogicalNotEqual = 165u32, LogicalOr = 166u32, LogicalAnd = 167u32, LogicalNot = 168u32, Select = 169u32, IEqual = 170u32, INotEqual = 171u32, UGreaterThan = 172u32, SGreaterThan = 173u32, UGreaterThanEqual = 174u32, SGreaterThanEqual = 175u32, ULessThan = 176u32, SLessThan = 177u32, ULessThanEqual = 178u32, SLessThanEqual = 179u32, FOrdEqual = 180u32, FUnordEqual = 181u32, FOrdNotEqual = 182u32, FUnordNotEqual = 183u32, FOrdLessThan = 184u32, FUnordLessThan = 185u32, FOrdGreaterThan = 186u32, FUnordGreaterThan = 187u32, FOrdLessThanEqual = 188u32, FUnordLessThanEqual = 189u32, FOrdGreaterThanEqual = 190u32, FUnordGreaterThanEqual = 191u32, ShiftRightLogical = 194u32, ShiftRightArithmetic = 195u32, ShiftLeftLogical = 196u32, BitwiseOr = 197u32, BitwiseXor = 198u32, BitwiseAnd = 199u32, Not = 200u32, BitFieldInsert = 201u32, BitFieldSExtract = 202u32, BitFieldUExtract = 203u32, BitReverse = 204u32, BitCount = 205u32, DPdx = 207u32, DPdy = 208u32, Fwidth = 209u32, DPdxFine = 210u32, DPdyFine = 211u32, FwidthFine = 212u32, DPdxCoarse = 213u32, DPdyCoarse = 214u32, FwidthCoarse = 215u32, EmitVertex = 218u32, EndPrimitive = 219u32, EmitStreamVertex = 220u32, EndStreamPrimitive = 221u32, ControlBarrier = 224u32, MemoryBarrier = 225u32, AtomicLoad = 227u32, AtomicStore = 228u32, AtomicExchange = 229u32, AtomicCompareExchange = 230u32, AtomicCompareExchangeWeak = 231u32, AtomicIIncrement = 232u32, AtomicIDecrement = 233u32, AtomicIAdd = 234u32, AtomicISub = 235u32, AtomicSMin = 236u32, AtomicUMin = 237u32, AtomicSMax = 238u32, AtomicUMax = 239u32, AtomicAnd = 240u32, AtomicOr = 241u32, AtomicXor = 242u32, Phi = 245u32, LoopMerge = 246u32, SelectionMerge = 247u32, Label = 248u32, Branch = 249u32, BranchConditional = 250u32, Switch = 251u32, Kill = 252u32, Return = 253u32, ReturnValue = 254u32, Unreachable = 255u32, LifetimeStart = 256u32, LifetimeStop = 257u32, GroupAsyncCopy = 259u32, GroupWaitEvents = 260u32, GroupAll = 261u32, GroupAny = 262u32, GroupBroadcast = 263u32, GroupIAdd = 264u32, GroupFAdd = 265u32, GroupFMin = 266u32, GroupUMin = 267u32, GroupSMin = 268u32, GroupFMax = 269u32, GroupUMax = 270u32, GroupSMax = 271u32, ReadPipe = 274u32, WritePipe = 275u32, ReservedReadPipe = 276u32, ReservedWritePipe = 277u32, ReserveReadPipePackets = 278u32, ReserveWritePipePackets = 279u32, CommitReadPipe = 280u32, CommitWritePipe = 281u32, IsValidReserveId = 282u32, GetNumPipePackets = 283u32, GetMaxPipePackets = 284u32, GroupReserveReadPipePackets = 285u32, GroupReserveWritePipePackets = 286u32, GroupCommitReadPipe = 287u32, GroupCommitWritePipe = 288u32, EnqueueMarker = 291u32, EnqueueKernel = 292u32, GetKernelNDrangeSubGroupCount = 293u32, GetKernelNDrangeMaxSubGroupSize = 294u32, GetKernelWorkGroupSize = 295u32, GetKernelPreferredWorkGroupSizeMultiple = 296u32, RetainEvent = 297u32, ReleaseEvent = 298u32, CreateUserEvent = 299u32, IsValidEvent = 300u32, SetUserEventStatus = 301u32, CaptureEventProfilingInfo = 302u32, GetDefaultQueue = 303u32, BuildNDRange = 304u32, ImageSparseSampleImplicitLod = 305u32, ImageSparseSampleExplicitLod = 306u32, ImageSparseSampleDrefImplicitLod = 307u32, ImageSparseSampleDrefExplicitLod = 308u32, ImageSparseSampleProjImplicitLod = 309u32, ImageSparseSampleProjExplicitLod = 310u32, ImageSparseSampleProjDrefImplicitLod = 311u32, ImageSparseSampleProjDrefExplicitLod = 312u32, ImageSparseFetch = 313u32, ImageSparseGather = 314u32, ImageSparseDrefGather = 315u32, ImageSparseTexelsResident = 316u32, NoLine = 317u32, AtomicFlagTestAndSet = 318u32, AtomicFlagClear = 319u32, ImageSparseRead = 320u32, SizeOf = 321u32, TypePipeStorage = 322u32, ConstantPipeStorage = 323u32, CreatePipeFromPipeStorage = 324u32, GetKernelLocalSizeForSubgroupCount = 325u32, GetKernelMaxNumSubgroups = 326u32, TypeNamedBarrier = 327u32, NamedBarrierInitialize = 328u32, MemoryNamedBarrier = 329u32, ModuleProcessed = 330u32, ExecutionModeId = 331u32, DecorateId = 332u32, GroupNonUniformElect = 333u32, GroupNonUniformAll = 334u32, GroupNonUniformAny = 335u32, GroupNonUniformAllEqual = 336u32, GroupNonUniformBroadcast = 337u32, GroupNonUniformBroadcastFirst = 338u32, GroupNonUniformBallot = 339u32, GroupNonUniformInverseBallot = 340u32, GroupNonUniformBallotBitExtract = 341u32, GroupNonUniformBallotBitCount = 342u32, GroupNonUniformBallotFindLSB = 343u32, GroupNonUniformBallotFindMSB = 344u32, GroupNonUniformShuffle = 345u32, GroupNonUniformShuffleXor = 346u32, GroupNonUniformShuffleUp = 347u32, GroupNonUniformShuffleDown = 348u32, GroupNonUniformIAdd = 349u32, GroupNonUniformFAdd = 350u32, GroupNonUniformIMul = 351u32, GroupNonUniformFMul = 352u32, GroupNonUniformSMin = 353u32, GroupNonUniformUMin = 354u32, GroupNonUniformFMin = 355u32, GroupNonUniformSMax = 356u32, GroupNonUniformUMax = 357u32, GroupNonUniformFMax = 358u32, GroupNonUniformBitwiseAnd = 359u32, GroupNonUniformBitwiseOr = 360u32, GroupNonUniformBitwiseXor = 361u32, GroupNonUniformLogicalAnd = 362u32, GroupNonUniformLogicalOr = 363u32, GroupNonUniformLogicalXor = 364u32, GroupNonUniformQuadBroadcast = 365u32, GroupNonUniformQuadSwap = 366u32, CopyLogical = 400u32, PtrEqual = 401u32, PtrNotEqual = 402u32, PtrDiff = 403u32, SubgroupBallotKHR = 4421u32, SubgroupFirstInvocationKHR = 4422u32, SubgroupAllKHR = 4428u32, SubgroupAnyKHR = 4429u32, SubgroupAllEqualKHR = 4430u32, SubgroupReadInvocationKHR = 4432u32, GroupIAddNonUniformAMD = 5000u32, GroupFAddNonUniformAMD = 5001u32, GroupFMinNonUniformAMD = 5002u32, GroupUMinNonUniformAMD = 5003u32, GroupSMinNonUniformAMD = 5004u32, GroupFMaxNonUniformAMD = 5005u32, GroupUMaxNonUniformAMD = 5006u32, GroupSMaxNonUniformAMD = 5007u32, FragmentMaskFetchAMD = 5011u32, FragmentFetchAMD = 5012u32, ImageSampleFootprintNV = 5283u32, GroupNonUniformPartitionNV = 5296u32, WritePackedPrimitiveIndices4x8NV = 5299u32, ReportIntersectionNV = 5334u32, IgnoreIntersectionNV = 5335u32, TerminateRayNV = 5336u32, TraceNV = 5337u32, TypeAccelerationStructureNV = 5341u32, ExecuteCallableNV = 5344u32, TypeCooperativeMatrixNV = 5358u32, CooperativeMatrixLoadNV = 5359u32, CooperativeMatrixStoreNV = 5360u32, CooperativeMatrixMulAddNV = 5361u32, CooperativeMatrixLengthNV = 5362u32, SubgroupShuffleINTEL = 5571u32, SubgroupShuffleDownINTEL = 5572u32, SubgroupShuffleUpINTEL = 5573u32, SubgroupShuffleXorINTEL = 5574u32, SubgroupBlockReadINTEL = 5575u32, SubgroupBlockWriteINTEL = 5576u32, SubgroupImageBlockReadINTEL = 5577u32, SubgroupImageBlockWriteINTEL = 5578u32, SubgroupImageMediaBlockReadINTEL = 5580u32, SubgroupImageMediaBlockWriteINTEL = 5581u32, DecorateString = 5632u32, MemberDecorateString = 5633u32, VmeImageINTEL = 5699u32, TypeVmeImageINTEL = 5700u32, TypeAvcImePayloadINTEL = 5701u32, TypeAvcRefPayloadINTEL = 5702u32, TypeAvcSicPayloadINTEL = 5703u32, TypeAvcMcePayloadINTEL = 5704u32, TypeAvcMceResultINTEL = 5705u32, TypeAvcImeResultINTEL = 5706u32, TypeAvcImeResultSingleReferenceStreamoutINTEL = 5707u32, TypeAvcImeResultDualReferenceStreamoutINTEL = 5708u32, TypeAvcImeSingleReferenceStreaminINTEL = 5709u32, TypeAvcImeDualReferenceStreaminINTEL = 5710u32, TypeAvcRefResultINTEL = 5711u32, TypeAvcSicResultINTEL = 5712u32, SubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713u32, SubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714u32, SubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715u32, SubgroupAvcMceSetInterShapePenaltyINTEL = 5716u32, SubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717u32, SubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718u32, SubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719u32, SubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720u32, SubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721u32, SubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722u32, SubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723u32, SubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724u32, SubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725u32, SubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726u32, SubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727u32, SubgroupAvcMceSetAcOnlyHaarINTEL = 5728u32, SubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729u32, SubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730u32, SubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731u32, SubgroupAvcMceConvertToImePayloadINTEL = 5732u32, SubgroupAvcMceConvertToImeResultINTEL = 5733u32, SubgroupAvcMceConvertToRefPayloadINTEL = 5734u32, SubgroupAvcMceConvertToRefResultINTEL = 5735u32, SubgroupAvcMceConvertToSicPayloadINTEL = 5736u32, SubgroupAvcMceConvertToSicResultINTEL = 5737u32, SubgroupAvcMceGetMotionVectorsINTEL = 5738u32, SubgroupAvcMceGetInterDistortionsINTEL = 5739u32, SubgroupAvcMceGetBestInterDistortionsINTEL = 5740u32, SubgroupAvcMceGetInterMajorShapeINTEL = 5741u32, SubgroupAvcMceGetInterMinorShapeINTEL = 5742u32, SubgroupAvcMceGetInterDirectionsINTEL = 5743u32, SubgroupAvcMceGetInterMotionVectorCountINTEL = 5744u32, SubgroupAvcMceGetInterReferenceIdsINTEL = 5745u32, SubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746u32, SubgroupAvcImeInitializeINTEL = 5747u32, SubgroupAvcImeSetSingleReferenceINTEL = 5748u32, SubgroupAvcImeSetDualReferenceINTEL = 5749u32, SubgroupAvcImeRefWindowSizeINTEL = 5750u32, SubgroupAvcImeAdjustRefOffsetINTEL = 5751u32, SubgroupAvcImeConvertToMcePayloadINTEL = 5752u32, SubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753u32, SubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754u32, SubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755u32, SubgroupAvcImeSetWeightedSadINTEL = 5756u32, SubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757u32, SubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758u32, SubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759u32, SubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760u32, SubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761u32, SubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762u32, SubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763u32, SubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764u32, SubgroupAvcImeConvertToMceResultINTEL = 5765u32, SubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766u32, SubgroupAvcImeGetDualReferenceStreaminINTEL = 5767u32, SubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768u32, SubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769u32, SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770u32, SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771u32, SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772u32, SubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773u32, SubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774u32, SubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775u32, SubgroupAvcImeGetBorderReachedINTEL = 5776u32, SubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777u32, SubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778u32, SubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779u32, SubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780u32, SubgroupAvcFmeInitializeINTEL = 5781u32, SubgroupAvcBmeInitializeINTEL = 5782u32, SubgroupAvcRefConvertToMcePayloadINTEL = 5783u32, SubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784u32, SubgroupAvcRefSetBilinearFilterEnableINTEL = 5785u32, SubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786u32, SubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787u32, SubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788u32, SubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789u32, SubgroupAvcRefConvertToMceResultINTEL = 5790u32, SubgroupAvcSicInitializeINTEL = 5791u32, SubgroupAvcSicConfigureSkcINTEL = 5792u32, SubgroupAvcSicConfigureIpeLumaINTEL = 5793u32, SubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794u32, SubgroupAvcSicGetMotionVectorMaskINTEL = 5795u32, SubgroupAvcSicConvertToMcePayloadINTEL = 5796u32, SubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797u32, SubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798u32, SubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799u32, SubgroupAvcSicSetBilinearFilterEnableINTEL = 5800u32, SubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801u32, SubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802u32, SubgroupAvcSicEvaluateIpeINTEL = 5803u32, SubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804u32, SubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805u32, SubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806u32, SubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807u32, SubgroupAvcSicConvertToMceResultINTEL = 5808u32, SubgroupAvcSicGetIpeLumaShapeINTEL = 5809u32, SubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810u32, SubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811u32, SubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812u32, SubgroupAvcSicGetIpeChromaModeINTEL = 5813u32, SubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814u32, SubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815u32, SubgroupAvcSicGetInterRawSadsINTEL = 5816u32, } #[allow(non_upper_case_globals)] impl Op { pub const DecorateStringGOOGLE: Op = Op::DecorateString; pub const MemberDecorateStringGOOGLE: Op = Op::MemberDecorateString; } impl num_traits::FromPrimitive for Op { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => Op::Nop, 1u32 => Op::Undef, 2u32 => Op::SourceContinued, 3u32 => Op::Source, 4u32 => Op::SourceExtension, 5u32 => Op::Name, 6u32 => Op::MemberName, 7u32 => Op::String, 8u32 => Op::Line, 10u32 => Op::Extension, 11u32 => Op::ExtInstImport, 12u32 => Op::ExtInst, 14u32 => Op::MemoryModel, 15u32 => Op::EntryPoint, 16u32 => Op::ExecutionMode, 17u32 => Op::Capability, 19u32 => Op::TypeVoid, 20u32 => Op::TypeBool, 21u32 => Op::TypeInt, 22u32 => Op::TypeFloat, 23u32 => Op::TypeVector, 24u32 => Op::TypeMatrix, 25u32 => Op::TypeImage, 26u32 => Op::TypeSampler, 27u32 => Op::TypeSampledImage, 28u32 => Op::TypeArray, 29u32 => Op::TypeRuntimeArray, 30u32 => Op::TypeStruct, 31u32 => Op::TypeOpaque, 32u32 => Op::TypePointer, 33u32 => Op::TypeFunction, 34u32 => Op::TypeEvent, 35u32 => Op::TypeDeviceEvent, 36u32 => Op::TypeReserveId, 37u32 => Op::TypeQueue, 38u32 => Op::TypePipe, 39u32 => Op::TypeForwardPointer, 41u32 => Op::ConstantTrue, 42u32 => Op::ConstantFalse, 43u32 => Op::Constant, 44u32 => Op::ConstantComposite, 45u32 => Op::ConstantSampler, 46u32 => Op::ConstantNull, 48u32 => Op::SpecConstantTrue, 49u32 => Op::SpecConstantFalse, 50u32 => Op::SpecConstant, 51u32 => Op::SpecConstantComposite, 52u32 => Op::SpecConstantOp, 54u32 => Op::Function, 55u32 => Op::FunctionParameter, 56u32 => Op::FunctionEnd, 57u32 => Op::FunctionCall, 59u32 => Op::Variable, 60u32 => Op::ImageTexelPointer, 61u32 => Op::Load, 62u32 => Op::Store, 63u32 => Op::CopyMemory, 64u32 => Op::CopyMemorySized, 65u32 => Op::AccessChain, 66u32 => Op::InBoundsAccessChain, 67u32 => Op::PtrAccessChain, 68u32 => Op::ArrayLength, 69u32 => Op::GenericPtrMemSemantics, 70u32 => Op::InBoundsPtrAccessChain, 71u32 => Op::Decorate, 72u32 => Op::MemberDecorate, 73u32 => Op::DecorationGroup, 74u32 => Op::GroupDecorate, 75u32 => Op::GroupMemberDecorate, 77u32 => Op::VectorExtractDynamic, 78u32 => Op::VectorInsertDynamic, 79u32 => Op::VectorShuffle, 80u32 => Op::CompositeConstruct, 81u32 => Op::CompositeExtract, 82u32 => Op::CompositeInsert, 83u32 => Op::CopyObject, 84u32 => Op::Transpose, 86u32 => Op::SampledImage, 87u32 => Op::ImageSampleImplicitLod, 88u32 => Op::ImageSampleExplicitLod, 89u32 => Op::ImageSampleDrefImplicitLod, 90u32 => Op::ImageSampleDrefExplicitLod, 91u32 => Op::ImageSampleProjImplicitLod, 92u32 => Op::ImageSampleProjExplicitLod, 93u32 => Op::ImageSampleProjDrefImplicitLod, 94u32 => Op::ImageSampleProjDrefExplicitLod, 95u32 => Op::ImageFetch, 96u32 => Op::ImageGather, 97u32 => Op::ImageDrefGather, 98u32 => Op::ImageRead, 99u32 => Op::ImageWrite, 100u32 => Op::Image, 101u32 => Op::ImageQueryFormat, 102u32 => Op::ImageQueryOrder, 103u32 => Op::ImageQuerySizeLod, 104u32 => Op::ImageQuerySize, 105u32 => Op::ImageQueryLod, 106u32 => Op::ImageQueryLevels, 107u32 => Op::ImageQuerySamples, 109u32 => Op::ConvertFToU, 110u32 => Op::ConvertFToS, 111u32 => Op::ConvertSToF, 112u32 => Op::ConvertUToF, 113u32 => Op::UConvert, 114u32 => Op::SConvert, 115u32 => Op::FConvert, 116u32 => Op::QuantizeToF16, 117u32 => Op::ConvertPtrToU, 118u32 => Op::SatConvertSToU, 119u32 => Op::SatConvertUToS, 120u32 => Op::ConvertUToPtr, 121u32 => Op::PtrCastToGeneric, 122u32 => Op::GenericCastToPtr, 123u32 => Op::GenericCastToPtrExplicit, 124u32 => Op::Bitcast, 126u32 => Op::SNegate, 127u32 => Op::FNegate, 128u32 => Op::IAdd, 129u32 => Op::FAdd, 130u32 => Op::ISub, 131u32 => Op::FSub, 132u32 => Op::IMul, 133u32 => Op::FMul, 134u32 => Op::UDiv, 135u32 => Op::SDiv, 136u32 => Op::FDiv, 137u32 => Op::UMod, 138u32 => Op::SRem, 139u32 => Op::SMod, 140u32 => Op::FRem, 141u32 => Op::FMod, 142u32 => Op::VectorTimesScalar, 143u32 => Op::MatrixTimesScalar, 144u32 => Op::VectorTimesMatrix, 145u32 => Op::MatrixTimesVector, 146u32 => Op::MatrixTimesMatrix, 147u32 => Op::OuterProduct, 148u32 => Op::Dot, 149u32 => Op::IAddCarry, 150u32 => Op::ISubBorrow, 151u32 => Op::UMulExtended, 152u32 => Op::SMulExtended, 154u32 => Op::Any, 155u32 => Op::All, 156u32 => Op::IsNan, 157u32 => Op::IsInf, 158u32 => Op::IsFinite, 159u32 => Op::IsNormal, 160u32 => Op::SignBitSet, 161u32 => Op::LessOrGreater, 162u32 => Op::Ordered, 163u32 => Op::Unordered, 164u32 => Op::LogicalEqual, 165u32 => Op::LogicalNotEqual, 166u32 => Op::LogicalOr, 167u32 => Op::LogicalAnd, 168u32 => Op::LogicalNot, 169u32 => Op::Select, 170u32 => Op::IEqual, 171u32 => Op::INotEqual, 172u32 => Op::UGreaterThan, 173u32 => Op::SGreaterThan, 174u32 => Op::UGreaterThanEqual, 175u32 => Op::SGreaterThanEqual, 176u32 => Op::ULessThan, 177u32 => Op::SLessThan, 178u32 => Op::ULessThanEqual, 179u32 => Op::SLessThanEqual, 180u32 => Op::FOrdEqual, 181u32 => Op::FUnordEqual, 182u32 => Op::FOrdNotEqual, 183u32 => Op::FUnordNotEqual, 184u32 => Op::FOrdLessThan, 185u32 => Op::FUnordLessThan, 186u32 => Op::FOrdGreaterThan, 187u32 => Op::FUnordGreaterThan, 188u32 => Op::FOrdLessThanEqual, 189u32 => Op::FUnordLessThanEqual, 190u32 => Op::FOrdGreaterThanEqual, 191u32 => Op::FUnordGreaterThanEqual, 194u32 => Op::ShiftRightLogical, 195u32 => Op::ShiftRightArithmetic, 196u32 => Op::ShiftLeftLogical, 197u32 => Op::BitwiseOr, 198u32 => Op::BitwiseXor, 199u32 => Op::BitwiseAnd, 200u32 => Op::Not, 201u32 => Op::BitFieldInsert, 202u32 => Op::BitFieldSExtract, 203u32 => Op::BitFieldUExtract, 204u32 => Op::BitReverse, 205u32 => Op::BitCount, 207u32 => Op::DPdx, 208u32 => Op::DPdy, 209u32 => Op::Fwidth, 210u32 => Op::DPdxFine, 211u32 => Op::DPdyFine, 212u32 => Op::FwidthFine, 213u32 => Op::DPdxCoarse, 214u32 => Op::DPdyCoarse, 215u32 => Op::FwidthCoarse, 218u32 => Op::EmitVertex, 219u32 => Op::EndPrimitive, 220u32 => Op::EmitStreamVertex, 221u32 => Op::EndStreamPrimitive, 224u32 => Op::ControlBarrier, 225u32 => Op::MemoryBarrier, 227u32 => Op::AtomicLoad, 228u32 => Op::AtomicStore, 229u32 => Op::AtomicExchange, 230u32 => Op::AtomicCompareExchange, 231u32 => Op::AtomicCompareExchangeWeak, 232u32 => Op::AtomicIIncrement, 233u32 => Op::AtomicIDecrement, 234u32 => Op::AtomicIAdd, 235u32 => Op::AtomicISub, 236u32 => Op::AtomicSMin, 237u32 => Op::AtomicUMin, 238u32 => Op::AtomicSMax, 239u32 => Op::AtomicUMax, 240u32 => Op::AtomicAnd, 241u32 => Op::AtomicOr, 242u32 => Op::AtomicXor, 245u32 => Op::Phi, 246u32 => Op::LoopMerge, 247u32 => Op::SelectionMerge, 248u32 => Op::Label, 249u32 => Op::Branch, 250u32 => Op::BranchConditional, 251u32 => Op::Switch, 252u32 => Op::Kill, 253u32 => Op::Return, 254u32 => Op::ReturnValue, 255u32 => Op::Unreachable, 256u32 => Op::LifetimeStart, 257u32 => Op::LifetimeStop, 259u32 => Op::GroupAsyncCopy, 260u32 => Op::GroupWaitEvents, 261u32 => Op::GroupAll, 262u32 => Op::GroupAny, 263u32 => Op::GroupBroadcast, 264u32 => Op::GroupIAdd, 265u32 => Op::GroupFAdd, 266u32 => Op::GroupFMin, 267u32 => Op::GroupUMin, 268u32 => Op::GroupSMin, 269u32 => Op::GroupFMax, 270u32 => Op::GroupUMax, 271u32 => Op::GroupSMax, 274u32 => Op::ReadPipe, 275u32 => Op::WritePipe, 276u32 => Op::ReservedReadPipe, 277u32 => Op::ReservedWritePipe, 278u32 => Op::ReserveReadPipePackets, 279u32 => Op::ReserveWritePipePackets, 280u32 => Op::CommitReadPipe, 281u32 => Op::CommitWritePipe, 282u32 => Op::IsValidReserveId, 283u32 => Op::GetNumPipePackets, 284u32 => Op::GetMaxPipePackets, 285u32 => Op::GroupReserveReadPipePackets, 286u32 => Op::GroupReserveWritePipePackets, 287u32 => Op::GroupCommitReadPipe, 288u32 => Op::GroupCommitWritePipe, 291u32 => Op::EnqueueMarker, 292u32 => Op::EnqueueKernel, 293u32 => Op::GetKernelNDrangeSubGroupCount, 294u32 => Op::GetKernelNDrangeMaxSubGroupSize, 295u32 => Op::GetKernelWorkGroupSize, 296u32 => Op::GetKernelPreferredWorkGroupSizeMultiple, 297u32 => Op::RetainEvent, 298u32 => Op::ReleaseEvent, 299u32 => Op::CreateUserEvent, 300u32 => Op::IsValidEvent, 301u32 => Op::SetUserEventStatus, 302u32 => Op::CaptureEventProfilingInfo, 303u32 => Op::GetDefaultQueue, 304u32 => Op::BuildNDRange, 305u32 => Op::ImageSparseSampleImplicitLod, 306u32 => Op::ImageSparseSampleExplicitLod, 307u32 => Op::ImageSparseSampleDrefImplicitLod, 308u32 => Op::ImageSparseSampleDrefExplicitLod, 309u32 => Op::ImageSparseSampleProjImplicitLod, 310u32 => Op::ImageSparseSampleProjExplicitLod, 311u32 => Op::ImageSparseSampleProjDrefImplicitLod, 312u32 => Op::ImageSparseSampleProjDrefExplicitLod, 313u32 => Op::ImageSparseFetch, 314u32 => Op::ImageSparseGather, 315u32 => Op::ImageSparseDrefGather, 316u32 => Op::ImageSparseTexelsResident, 317u32 => Op::NoLine, 318u32 => Op::AtomicFlagTestAndSet, 319u32 => Op::AtomicFlagClear, 320u32 => Op::ImageSparseRead, 321u32 => Op::SizeOf, 322u32 => Op::TypePipeStorage, 323u32 => Op::ConstantPipeStorage, 324u32 => Op::CreatePipeFromPipeStorage, 325u32 => Op::GetKernelLocalSizeForSubgroupCount, 326u32 => Op::GetKernelMaxNumSubgroups, 327u32 => Op::TypeNamedBarrier, 328u32 => Op::NamedBarrierInitialize, 329u32 => Op::MemoryNamedBarrier, 330u32 => Op::ModuleProcessed, 331u32 => Op::ExecutionModeId, 332u32 => Op::DecorateId, 333u32 => Op::GroupNonUniformElect, 334u32 => Op::GroupNonUniformAll, 335u32 => Op::GroupNonUniformAny, 336u32 => Op::GroupNonUniformAllEqual, 337u32 => Op::GroupNonUniformBroadcast, 338u32 => Op::GroupNonUniformBroadcastFirst, 339u32 => Op::GroupNonUniformBallot, 340u32 => Op::GroupNonUniformInverseBallot, 341u32 => Op::GroupNonUniformBallotBitExtract, 342u32 => Op::GroupNonUniformBallotBitCount, 343u32 => Op::GroupNonUniformBallotFindLSB, 344u32 => Op::GroupNonUniformBallotFindMSB, 345u32 => Op::GroupNonUniformShuffle, 346u32 => Op::GroupNonUniformShuffleXor, 347u32 => Op::GroupNonUniformShuffleUp, 348u32 => Op::GroupNonUniformShuffleDown, 349u32 => Op::GroupNonUniformIAdd, 350u32 => Op::GroupNonUniformFAdd, 351u32 => Op::GroupNonUniformIMul, 352u32 => Op::GroupNonUniformFMul, 353u32 => Op::GroupNonUniformSMin, 354u32 => Op::GroupNonUniformUMin, 355u32 => Op::GroupNonUniformFMin, 356u32 => Op::GroupNonUniformSMax, 357u32 => Op::GroupNonUniformUMax, 358u32 => Op::GroupNonUniformFMax, 359u32 => Op::GroupNonUniformBitwiseAnd, 360u32 => Op::GroupNonUniformBitwiseOr, 361u32 => Op::GroupNonUniformBitwiseXor, 362u32 => Op::GroupNonUniformLogicalAnd, 363u32 => Op::GroupNonUniformLogicalOr, 364u32 => Op::GroupNonUniformLogicalXor, 365u32 => Op::GroupNonUniformQuadBroadcast, 366u32 => Op::GroupNonUniformQuadSwap, 400u32 => Op::CopyLogical, 401u32 => Op::PtrEqual, 402u32 => Op::PtrNotEqual, 403u32 => Op::PtrDiff, 4421u32 => Op::SubgroupBallotKHR, 4422u32 => Op::SubgroupFirstInvocationKHR, 4428u32 => Op::SubgroupAllKHR, 4429u32 => Op::SubgroupAnyKHR, 4430u32 => Op::SubgroupAllEqualKHR, 4432u32 => Op::SubgroupReadInvocationKHR, 5000u32 => Op::GroupIAddNonUniformAMD, 5001u32 => Op::GroupFAddNonUniformAMD, 5002u32 => Op::GroupFMinNonUniformAMD, 5003u32 => Op::GroupUMinNonUniformAMD, 5004u32 => Op::GroupSMinNonUniformAMD, 5005u32 => Op::GroupFMaxNonUniformAMD, 5006u32 => Op::GroupUMaxNonUniformAMD, 5007u32 => Op::GroupSMaxNonUniformAMD, 5011u32 => Op::FragmentMaskFetchAMD, 5012u32 => Op::FragmentFetchAMD, 5283u32 => Op::ImageSampleFootprintNV, 5296u32 => Op::GroupNonUniformPartitionNV, 5299u32 => Op::WritePackedPrimitiveIndices4x8NV, 5334u32 => Op::ReportIntersectionNV, 5335u32 => Op::IgnoreIntersectionNV, 5336u32 => Op::TerminateRayNV, 5337u32 => Op::TraceNV, 5341u32 => Op::TypeAccelerationStructureNV, 5344u32 => Op::ExecuteCallableNV, 5358u32 => Op::TypeCooperativeMatrixNV, 5359u32 => Op::CooperativeMatrixLoadNV, 5360u32 => Op::CooperativeMatrixStoreNV, 5361u32 => Op::CooperativeMatrixMulAddNV, 5362u32 => Op::CooperativeMatrixLengthNV, 5571u32 => Op::SubgroupShuffleINTEL, 5572u32 => Op::SubgroupShuffleDownINTEL, 5573u32 => Op::SubgroupShuffleUpINTEL, 5574u32 => Op::SubgroupShuffleXorINTEL, 5575u32 => Op::SubgroupBlockReadINTEL, 5576u32 => Op::SubgroupBlockWriteINTEL, 5577u32 => Op::SubgroupImageBlockReadINTEL, 5578u32 => Op::SubgroupImageBlockWriteINTEL, 5580u32 => Op::SubgroupImageMediaBlockReadINTEL, 5581u32 => Op::SubgroupImageMediaBlockWriteINTEL, 5632u32 => Op::DecorateString, 5633u32 => Op::MemberDecorateString, 5699u32 => Op::VmeImageINTEL, 5700u32 => Op::TypeVmeImageINTEL, 5701u32 => Op::TypeAvcImePayloadINTEL, 5702u32 => Op::TypeAvcRefPayloadINTEL, 5703u32 => Op::TypeAvcSicPayloadINTEL, 5704u32 => Op::TypeAvcMcePayloadINTEL, 5705u32 => Op::TypeAvcMceResultINTEL, 5706u32 => Op::TypeAvcImeResultINTEL, 5707u32 => Op::TypeAvcImeResultSingleReferenceStreamoutINTEL, 5708u32 => Op::TypeAvcImeResultDualReferenceStreamoutINTEL, 5709u32 => Op::TypeAvcImeSingleReferenceStreaminINTEL, 5710u32 => Op::TypeAvcImeDualReferenceStreaminINTEL, 5711u32 => Op::TypeAvcRefResultINTEL, 5712u32 => Op::TypeAvcSicResultINTEL, 5713u32 => Op::SubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL, 5714u32 => Op::SubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL, 5715u32 => Op::SubgroupAvcMceGetDefaultInterShapePenaltyINTEL, 5716u32 => Op::SubgroupAvcMceSetInterShapePenaltyINTEL, 5717u32 => Op::SubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL, 5718u32 => Op::SubgroupAvcMceSetInterDirectionPenaltyINTEL, 5719u32 => Op::SubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL, 5720u32 => Op::SubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL, 5721u32 => Op::SubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL, 5722u32 => Op::SubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL, 5723u32 => Op::SubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL, 5724u32 => Op::SubgroupAvcMceSetMotionVectorCostFunctionINTEL, 5725u32 => Op::SubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL, 5726u32 => Op::SubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL, 5727u32 => Op::SubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL, 5728u32 => Op::SubgroupAvcMceSetAcOnlyHaarINTEL, 5729u32 => Op::SubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL, 5730u32 => Op::SubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL, 5731u32 => Op::SubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL, 5732u32 => Op::SubgroupAvcMceConvertToImePayloadINTEL, 5733u32 => Op::SubgroupAvcMceConvertToImeResultINTEL, 5734u32 => Op::SubgroupAvcMceConvertToRefPayloadINTEL, 5735u32 => Op::SubgroupAvcMceConvertToRefResultINTEL, 5736u32 => Op::SubgroupAvcMceConvertToSicPayloadINTEL, 5737u32 => Op::SubgroupAvcMceConvertToSicResultINTEL, 5738u32 => Op::SubgroupAvcMceGetMotionVectorsINTEL, 5739u32 => Op::SubgroupAvcMceGetInterDistortionsINTEL, 5740u32 => Op::SubgroupAvcMceGetBestInterDistortionsINTEL, 5741u32 => Op::SubgroupAvcMceGetInterMajorShapeINTEL, 5742u32 => Op::SubgroupAvcMceGetInterMinorShapeINTEL, 5743u32 => Op::SubgroupAvcMceGetInterDirectionsINTEL, 5744u32 => Op::SubgroupAvcMceGetInterMotionVectorCountINTEL, 5745u32 => Op::SubgroupAvcMceGetInterReferenceIdsINTEL, 5746u32 => Op::SubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL, 5747u32 => Op::SubgroupAvcImeInitializeINTEL, 5748u32 => Op::SubgroupAvcImeSetSingleReferenceINTEL, 5749u32 => Op::SubgroupAvcImeSetDualReferenceINTEL, 5750u32 => Op::SubgroupAvcImeRefWindowSizeINTEL, 5751u32 => Op::SubgroupAvcImeAdjustRefOffsetINTEL, 5752u32 => Op::SubgroupAvcImeConvertToMcePayloadINTEL, 5753u32 => Op::SubgroupAvcImeSetMaxMotionVectorCountINTEL, 5754u32 => Op::SubgroupAvcImeSetUnidirectionalMixDisableINTEL, 5755u32 => Op::SubgroupAvcImeSetEarlySearchTerminationThresholdINTEL, 5756u32 => Op::SubgroupAvcImeSetWeightedSadINTEL, 5757u32 => Op::SubgroupAvcImeEvaluateWithSingleReferenceINTEL, 5758u32 => Op::SubgroupAvcImeEvaluateWithDualReferenceINTEL, 5759u32 => Op::SubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL, 5760u32 => Op::SubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL, 5761u32 => Op::SubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL, 5762u32 => Op::SubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL, 5763u32 => Op::SubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL, 5764u32 => Op::SubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL, 5765u32 => Op::SubgroupAvcImeConvertToMceResultINTEL, 5766u32 => Op::SubgroupAvcImeGetSingleReferenceStreaminINTEL, 5767u32 => Op::SubgroupAvcImeGetDualReferenceStreaminINTEL, 5768u32 => Op::SubgroupAvcImeStripSingleReferenceStreamoutINTEL, 5769u32 => Op::SubgroupAvcImeStripDualReferenceStreamoutINTEL, 5770u32 => Op::SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL, 5771u32 => Op::SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL, 5772u32 => Op::SubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL, 5773u32 => Op::SubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL, 5774u32 => Op::SubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL, 5775u32 => Op::SubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL, 5776u32 => Op::SubgroupAvcImeGetBorderReachedINTEL, 5777u32 => Op::SubgroupAvcImeGetTruncatedSearchIndicationINTEL, 5778u32 => Op::SubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL, 5779u32 => Op::SubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL, 5780u32 => Op::SubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL, 5781u32 => Op::SubgroupAvcFmeInitializeINTEL, 5782u32 => Op::SubgroupAvcBmeInitializeINTEL, 5783u32 => Op::SubgroupAvcRefConvertToMcePayloadINTEL, 5784u32 => Op::SubgroupAvcRefSetBidirectionalMixDisableINTEL, 5785u32 => Op::SubgroupAvcRefSetBilinearFilterEnableINTEL, 5786u32 => Op::SubgroupAvcRefEvaluateWithSingleReferenceINTEL, 5787u32 => Op::SubgroupAvcRefEvaluateWithDualReferenceINTEL, 5788u32 => Op::SubgroupAvcRefEvaluateWithMultiReferenceINTEL, 5789u32 => Op::SubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL, 5790u32 => Op::SubgroupAvcRefConvertToMceResultINTEL, 5791u32 => Op::SubgroupAvcSicInitializeINTEL, 5792u32 => Op::SubgroupAvcSicConfigureSkcINTEL, 5793u32 => Op::SubgroupAvcSicConfigureIpeLumaINTEL, 5794u32 => Op::SubgroupAvcSicConfigureIpeLumaChromaINTEL, 5795u32 => Op::SubgroupAvcSicGetMotionVectorMaskINTEL, 5796u32 => Op::SubgroupAvcSicConvertToMcePayloadINTEL, 5797u32 => Op::SubgroupAvcSicSetIntraLumaShapePenaltyINTEL, 5798u32 => Op::SubgroupAvcSicSetIntraLumaModeCostFunctionINTEL, 5799u32 => Op::SubgroupAvcSicSetIntraChromaModeCostFunctionINTEL, 5800u32 => Op::SubgroupAvcSicSetBilinearFilterEnableINTEL, 5801u32 => Op::SubgroupAvcSicSetSkcForwardTransformEnableINTEL, 5802u32 => Op::SubgroupAvcSicSetBlockBasedRawSkipSadINTEL, 5803u32 => Op::SubgroupAvcSicEvaluateIpeINTEL, 5804u32 => Op::SubgroupAvcSicEvaluateWithSingleReferenceINTEL, 5805u32 => Op::SubgroupAvcSicEvaluateWithDualReferenceINTEL, 5806u32 => Op::SubgroupAvcSicEvaluateWithMultiReferenceINTEL, 5807u32 => Op::SubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL, 5808u32 => Op::SubgroupAvcSicConvertToMceResultINTEL, 5809u32 => Op::SubgroupAvcSicGetIpeLumaShapeINTEL, 5810u32 => Op::SubgroupAvcSicGetBestIpeLumaDistortionINTEL, 5811u32 => Op::SubgroupAvcSicGetBestIpeChromaDistortionINTEL, 5812u32 => Op::SubgroupAvcSicGetPackedIpeLumaModesINTEL, 5813u32 => Op::SubgroupAvcSicGetIpeChromaModeINTEL, 5814u32 => Op::SubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL, 5815u32 => Op::SubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL, 5816u32 => Op::SubgroupAvcSicGetInterRawSadsINTEL, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "[GLSL.std.450](https://www.khronos.org/registry/spir-v/specs/unified1/GLSL.std.450.html) extended instruction opcode"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum GLOp { Round = 1u32, RoundEven = 2u32, Trunc = 3u32, FAbs = 4u32, SAbs = 5u32, FSign = 6u32, SSign = 7u32, Floor = 8u32, Ceil = 9u32, Fract = 10u32, Radians = 11u32, Degrees = 12u32, Sin = 13u32, Cos = 14u32, Tan = 15u32, Asin = 16u32, Acos = 17u32, Atan = 18u32, Sinh = 19u32, Cosh = 20u32, Tanh = 21u32, Asinh = 22u32, Acosh = 23u32, Atanh = 24u32, Atan2 = 25u32, Pow = 26u32, Exp = 27u32, Log = 28u32, Exp2 = 29u32, Log2 = 30u32, Sqrt = 31u32, InverseSqrt = 32u32, Determinant = 33u32, MatrixInverse = 34u32, Modf = 35u32, ModfStruct = 36u32, FMin = 37u32, UMin = 38u32, SMin = 39u32, FMax = 40u32, UMax = 41u32, SMax = 42u32, FClamp = 43u32, UClamp = 44u32, SClamp = 45u32, FMix = 46u32, IMix = 47u32, Step = 48u32, SmoothStep = 49u32, Fma = 50u32, Frexp = 51u32, FrexpStruct = 52u32, Ldexp = 53u32, PackSnorm4x8 = 54u32, PackUnorm4x8 = 55u32, PackSnorm2x16 = 56u32, PackUnorm2x16 = 57u32, PackHalf2x16 = 58u32, PackDouble2x32 = 59u32, UnpackSnorm2x16 = 60u32, UnpackUnorm2x16 = 61u32, UnpackHalf2x16 = 62u32, UnpackSnorm4x8 = 63u32, UnpackUnorm4x8 = 64u32, UnpackDouble2x32 = 65u32, Length = 66u32, Distance = 67u32, Cross = 68u32, Normalize = 69u32, FaceForward = 70u32, Reflect = 71u32, Refract = 72u32, FindILsb = 73u32, FindSMsb = 74u32, FindUMsb = 75u32, InterpolateAtCentroid = 76u32, InterpolateAtSample = 77u32, InterpolateAtOffset = 78u32, NMin = 79u32, NMax = 80u32, NClamp = 81u32, } impl num_traits::FromPrimitive for GLOp { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 1u32 => GLOp::Round, 2u32 => GLOp::RoundEven, 3u32 => GLOp::Trunc, 4u32 => GLOp::FAbs, 5u32 => GLOp::SAbs, 6u32 => GLOp::FSign, 7u32 => GLOp::SSign, 8u32 => GLOp::Floor, 9u32 => GLOp::Ceil, 10u32 => GLOp::Fract, 11u32 => GLOp::Radians, 12u32 => GLOp::Degrees, 13u32 => GLOp::Sin, 14u32 => GLOp::Cos, 15u32 => GLOp::Tan, 16u32 => GLOp::Asin, 17u32 => GLOp::Acos, 18u32 => GLOp::Atan, 19u32 => GLOp::Sinh, 20u32 => GLOp::Cosh, 21u32 => GLOp::Tanh, 22u32 => GLOp::Asinh, 23u32 => GLOp::Acosh, 24u32 => GLOp::Atanh, 25u32 => GLOp::Atan2, 26u32 => GLOp::Pow, 27u32 => GLOp::Exp, 28u32 => GLOp::Log, 29u32 => GLOp::Exp2, 30u32 => GLOp::Log2, 31u32 => GLOp::Sqrt, 32u32 => GLOp::InverseSqrt, 33u32 => GLOp::Determinant, 34u32 => GLOp::MatrixInverse, 35u32 => GLOp::Modf, 36u32 => GLOp::ModfStruct, 37u32 => GLOp::FMin, 38u32 => GLOp::UMin, 39u32 => GLOp::SMin, 40u32 => GLOp::FMax, 41u32 => GLOp::UMax, 42u32 => GLOp::SMax, 43u32 => GLOp::FClamp, 44u32 => GLOp::UClamp, 45u32 => GLOp::SClamp, 46u32 => GLOp::FMix, 47u32 => GLOp::IMix, 48u32 => GLOp::Step, 49u32 => GLOp::SmoothStep, 50u32 => GLOp::Fma, 51u32 => GLOp::Frexp, 52u32 => GLOp::FrexpStruct, 53u32 => GLOp::Ldexp, 54u32 => GLOp::PackSnorm4x8, 55u32 => GLOp::PackUnorm4x8, 56u32 => GLOp::PackSnorm2x16, 57u32 => GLOp::PackUnorm2x16, 58u32 => GLOp::PackHalf2x16, 59u32 => GLOp::PackDouble2x32, 60u32 => GLOp::UnpackSnorm2x16, 61u32 => GLOp::UnpackUnorm2x16, 62u32 => GLOp::UnpackHalf2x16, 63u32 => GLOp::UnpackSnorm4x8, 64u32 => GLOp::UnpackUnorm4x8, 65u32 => GLOp::UnpackDouble2x32, 66u32 => GLOp::Length, 67u32 => GLOp::Distance, 68u32 => GLOp::Cross, 69u32 => GLOp::Normalize, 70u32 => GLOp::FaceForward, 71u32 => GLOp::Reflect, 72u32 => GLOp::Refract, 73u32 => GLOp::FindILsb, 74u32 => GLOp::FindSMsb, 75u32 => GLOp::FindUMsb, 76u32 => GLOp::InterpolateAtCentroid, 77u32 => GLOp::InterpolateAtSample, 78u32 => GLOp::InterpolateAtOffset, 79u32 => GLOp::NMin, 80u32 => GLOp::NMax, 81u32 => GLOp::NClamp, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } } #[doc = "[OpenCL.std](https://www.khronos.org/registry/spir-v/specs/unified1/OpenCL.ExtendedInstructionSet.100.html) extended instruction opcode"] #[repr(u32)] #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum CLOp { acos = 0u32, acosh = 1u32, acospi = 2u32, asin = 3u32, asinh = 4u32, asinpi = 5u32, atan = 6u32, atan2 = 7u32, atanh = 8u32, atanpi = 9u32, atan2pi = 10u32, cbrt = 11u32, ceil = 12u32, copysign = 13u32, cos = 14u32, cosh = 15u32, cospi = 16u32, erfc = 17u32, erf = 18u32, exp = 19u32, exp2 = 20u32, exp10 = 21u32, expm1 = 22u32, fabs = 23u32, fdim = 24u32, floor = 25u32, fma = 26u32, fmax = 27u32, fmin = 28u32, fmod = 29u32, fract = 30u32, frexp = 31u32, hypot = 32u32, ilogb = 33u32, ldexp = 34u32, lgamma = 35u32, lgamma_r = 36u32, log = 37u32, log2 = 38u32, log10 = 39u32, log1p = 40u32, logb = 41u32, mad = 42u32, maxmag = 43u32, minmag = 44u32, modf = 45u32, nan = 46u32, nextafter = 47u32, pow = 48u32, pown = 49u32, powr = 50u32, remainder = 51u32, remquo = 52u32, rint = 53u32, rootn = 54u32, round = 55u32, rsqrt = 56u32, sin = 57u32, sincos = 58u32, sinh = 59u32, sinpi = 60u32, sqrt = 61u32, tan = 62u32, tanh = 63u32, tanpi = 64u32, tgamma = 65u32, trunc = 66u32, half_cos = 67u32, half_divide = 68u32, half_exp = 69u32, half_exp2 = 70u32, half_exp10 = 71u32, half_log = 72u32, half_log2 = 73u32, half_log10 = 74u32, half_powr = 75u32, half_recip = 76u32, half_rsqrt = 77u32, half_sin = 78u32, half_sqrt = 79u32, half_tan = 80u32, native_cos = 81u32, native_divide = 82u32, native_exp = 83u32, native_exp2 = 84u32, native_exp10 = 85u32, native_log = 86u32, native_log2 = 87u32, native_log10 = 88u32, native_powr = 89u32, native_recip = 90u32, native_rsqrt = 91u32, native_sin = 92u32, native_sqrt = 93u32, native_tan = 94u32, s_abs = 141u32, s_abs_diff = 142u32, s_add_sat = 143u32, u_add_sat = 144u32, s_hadd = 145u32, u_hadd = 146u32, s_rhadd = 147u32, u_rhadd = 148u32, s_clamp = 149u32, u_clamp = 150u32, clz = 151u32, ctz = 152u32, s_mad_hi = 153u32, u_mad_sat = 154u32, s_mad_sat = 155u32, s_max = 156u32, u_max = 157u32, s_min = 158u32, u_min = 159u32, s_mul_hi = 160u32, rotate = 161u32, s_sub_sat = 162u32, u_sub_sat = 163u32, u_upsample = 164u32, s_upsample = 165u32, popcount = 166u32, s_mad24 = 167u32, u_mad24 = 168u32, s_mul24 = 169u32, u_mul24 = 170u32, u_abs = 201u32, u_abs_diff = 202u32, u_mul_hi = 203u32, u_mad_hi = 204u32, fclamp = 95u32, degrees = 96u32, fmax_common = 97u32, fmin_common = 98u32, mix = 99u32, radians = 100u32, step = 101u32, smoothstep = 102u32, sign = 103u32, cross = 104u32, distance = 105u32, length = 106u32, normalize = 107u32, fast_distance = 108u32, fast_length = 109u32, fast_normalize = 110u32, bitselect = 186u32, select = 187u32, vloadn = 171u32, vstoren = 172u32, vload_half = 173u32, vload_halfn = 174u32, vstore_half = 175u32, vstore_half_r = 176u32, vstore_halfn = 177u32, vstore_halfn_r = 178u32, vloada_halfn = 179u32, vstorea_halfn = 180u32, vstorea_halfn_r = 181u32, shuffle = 182u32, shuffle2 = 183u32, printf = 184u32, prefetch = 185u32, } impl num_traits::FromPrimitive for CLOp { #[allow(trivial_numeric_casts)] fn from_i64(n: i64) -> Option { Some(match n as u32 { 0u32 => CLOp::acos, 1u32 => CLOp::acosh, 2u32 => CLOp::acospi, 3u32 => CLOp::asin, 4u32 => CLOp::asinh, 5u32 => CLOp::asinpi, 6u32 => CLOp::atan, 7u32 => CLOp::atan2, 8u32 => CLOp::atanh, 9u32 => CLOp::atanpi, 10u32 => CLOp::atan2pi, 11u32 => CLOp::cbrt, 12u32 => CLOp::ceil, 13u32 => CLOp::copysign, 14u32 => CLOp::cos, 15u32 => CLOp::cosh, 16u32 => CLOp::cospi, 17u32 => CLOp::erfc, 18u32 => CLOp::erf, 19u32 => CLOp::exp, 20u32 => CLOp::exp2, 21u32 => CLOp::exp10, 22u32 => CLOp::expm1, 23u32 => CLOp::fabs, 24u32 => CLOp::fdim, 25u32 => CLOp::floor, 26u32 => CLOp::fma, 27u32 => CLOp::fmax, 28u32 => CLOp::fmin, 29u32 => CLOp::fmod, 30u32 => CLOp::fract, 31u32 => CLOp::frexp, 32u32 => CLOp::hypot, 33u32 => CLOp::ilogb, 34u32 => CLOp::ldexp, 35u32 => CLOp::lgamma, 36u32 => CLOp::lgamma_r, 37u32 => CLOp::log, 38u32 => CLOp::log2, 39u32 => CLOp::log10, 40u32 => CLOp::log1p, 41u32 => CLOp::logb, 42u32 => CLOp::mad, 43u32 => CLOp::maxmag, 44u32 => CLOp::minmag, 45u32 => CLOp::modf, 46u32 => CLOp::nan, 47u32 => CLOp::nextafter, 48u32 => CLOp::pow, 49u32 => CLOp::pown, 50u32 => CLOp::powr, 51u32 => CLOp::remainder, 52u32 => CLOp::remquo, 53u32 => CLOp::rint, 54u32 => CLOp::rootn, 55u32 => CLOp::round, 56u32 => CLOp::rsqrt, 57u32 => CLOp::sin, 58u32 => CLOp::sincos, 59u32 => CLOp::sinh, 60u32 => CLOp::sinpi, 61u32 => CLOp::sqrt, 62u32 => CLOp::tan, 63u32 => CLOp::tanh, 64u32 => CLOp::tanpi, 65u32 => CLOp::tgamma, 66u32 => CLOp::trunc, 67u32 => CLOp::half_cos, 68u32 => CLOp::half_divide, 69u32 => CLOp::half_exp, 70u32 => CLOp::half_exp2, 71u32 => CLOp::half_exp10, 72u32 => CLOp::half_log, 73u32 => CLOp::half_log2, 74u32 => CLOp::half_log10, 75u32 => CLOp::half_powr, 76u32 => CLOp::half_recip, 77u32 => CLOp::half_rsqrt, 78u32 => CLOp::half_sin, 79u32 => CLOp::half_sqrt, 80u32 => CLOp::half_tan, 81u32 => CLOp::native_cos, 82u32 => CLOp::native_divide, 83u32 => CLOp::native_exp, 84u32 => CLOp::native_exp2, 85u32 => CLOp::native_exp10, 86u32 => CLOp::native_log, 87u32 => CLOp::native_log2, 88u32 => CLOp::native_log10, 89u32 => CLOp::native_powr, 90u32 => CLOp::native_recip, 91u32 => CLOp::native_rsqrt, 92u32 => CLOp::native_sin, 93u32 => CLOp::native_sqrt, 94u32 => CLOp::native_tan, 141u32 => CLOp::s_abs, 142u32 => CLOp::s_abs_diff, 143u32 => CLOp::s_add_sat, 144u32 => CLOp::u_add_sat, 145u32 => CLOp::s_hadd, 146u32 => CLOp::u_hadd, 147u32 => CLOp::s_rhadd, 148u32 => CLOp::u_rhadd, 149u32 => CLOp::s_clamp, 150u32 => CLOp::u_clamp, 151u32 => CLOp::clz, 152u32 => CLOp::ctz, 153u32 => CLOp::s_mad_hi, 154u32 => CLOp::u_mad_sat, 155u32 => CLOp::s_mad_sat, 156u32 => CLOp::s_max, 157u32 => CLOp::u_max, 158u32 => CLOp::s_min, 159u32 => CLOp::u_min, 160u32 => CLOp::s_mul_hi, 161u32 => CLOp::rotate, 162u32 => CLOp::s_sub_sat, 163u32 => CLOp::u_sub_sat, 164u32 => CLOp::u_upsample, 165u32 => CLOp::s_upsample, 166u32 => CLOp::popcount, 167u32 => CLOp::s_mad24, 168u32 => CLOp::u_mad24, 169u32 => CLOp::s_mul24, 170u32 => CLOp::u_mul24, 201u32 => CLOp::u_abs, 202u32 => CLOp::u_abs_diff, 203u32 => CLOp::u_mul_hi, 204u32 => CLOp::u_mad_hi, 95u32 => CLOp::fclamp, 96u32 => CLOp::degrees, 97u32 => CLOp::fmax_common, 98u32 => CLOp::fmin_common, 99u32 => CLOp::mix, 100u32 => CLOp::radians, 101u32 => CLOp::step, 102u32 => CLOp::smoothstep, 103u32 => CLOp::sign, 104u32 => CLOp::cross, 105u32 => CLOp::distance, 106u32 => CLOp::length, 107u32 => CLOp::normalize, 108u32 => CLOp::fast_distance, 109u32 => CLOp::fast_length, 110u32 => CLOp::fast_normalize, 186u32 => CLOp::bitselect, 187u32 => CLOp::select, 171u32 => CLOp::vloadn, 172u32 => CLOp::vstoren, 173u32 => CLOp::vload_half, 174u32 => CLOp::vload_halfn, 175u32 => CLOp::vstore_half, 176u32 => CLOp::vstore_half_r, 177u32 => CLOp::vstore_halfn, 178u32 => CLOp::vstore_halfn_r, 179u32 => CLOp::vloada_halfn, 180u32 => CLOp::vstorea_halfn, 181u32 => CLOp::vstorea_halfn_r, 182u32 => CLOp::shuffle, 183u32 => CLOp::shuffle2, 184u32 => CLOp::printf, 185u32 => CLOp::prefetch, _ => return None, }) } fn from_u64(n: u64) -> Option { Self::from_i64(n as i64) } }