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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
Some(match n as u32 {
0u32 => SamplerFilterMode::Nearest,
1u32 => SamplerFilterMode::Linear,
_ => return None,
})
}
fn from_u64(n: u64) -> Option<Self> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
Some(match n as u32 {
0u32 => LinkageType::Export,
1u32 => LinkageType::Import,
_ => return None,
})
}
fn from_u64(n: u64) -> Option<Self> {
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<Self> {
Some(match n as u32 {
0u32 => AccessQualifier::ReadOnly,
1u32 => AccessQualifier::WriteOnly,
2u32 => AccessQualifier::ReadWrite,
_ => return None,
})
}
fn from_u64(n: u64) -> Option<Self> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
Some(match n as u32 {
0u32 => KernelEnqueueFlags::NoWait,
1u32 => KernelEnqueueFlags::WaitKernel,
2u32 => KernelEnqueueFlags::WaitWorkGroup,
_ => return None,
})
}
fn from_u64(n: u64) -> Option<Self> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
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<Self> {
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> {
Self::from_i64(n as i64)
}
}