Files
gps/tools/local/circt/include/mlir/Dialect/SPIRV/IR/SPIRVEnumAvailability.cpp.inc
T
2026-07-12 11:01:51 +03:00

1187 lines
188 KiB
C++

/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
|* *|
|* SPIR-V Enum Availability Definitions *|
|* *|
|* Automatically generated file, do not edit! *|
|* From: SPIRVBase.td *|
|* *|
\*===----------------------------------------------------------------------===*/
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(Capability value) {
switch (value) {
case Capability::Groups: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_ballot}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SubgroupBallotKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_shader_ballot}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SubgroupVoteKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_subgroup_vote}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::StorageBuffer16BitAccess: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_16bit_storage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::StoragePushConstant16: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_16bit_storage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::StorageInputOutput16: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_16bit_storage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::DeviceGroup: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_device_group}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::AtomicStorageOps: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_shader_atomic_counter_ops}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SampleMaskPostDepthCoverage: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_post_depth_coverage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::StorageBuffer8BitAccess: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_8bit_storage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::StoragePushConstant8: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_8bit_storage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::DenormPreserve: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_float_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::DenormFlushToZero: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_float_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SignedZeroInfNanPreserve: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_float_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RoundingModeRTE: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_float_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RoundingModeRTZ: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_float_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ImageFootprintNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_shader_image_footprint}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FragmentBarycentricKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_fragment_shader_barycentric, ::mlir::spirv::Extension::SPV_NV_fragment_shader_barycentric}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::MeshShadingEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ComputeDerivativeGroupQuadsNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_compute_shader_derivatives}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::GroupNonUniformPartitionedNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_shader_subgroup_partitioned}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ComputeDerivativeGroupLinearNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_compute_shader_derivatives}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::BindlessTextureNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_bindless_texture}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SubgroupShuffleINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_subgroups}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SubgroupBufferBlockIOINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_subgroups}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SubgroupImageBlockIOINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_subgroups}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SubgroupImageMediaBlockIOINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_media_block_io}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RoundToInfinityINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_float_controls2}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FloatingPointModeINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_float_controls2}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FunctionPointersINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_function_pointers}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::IndirectReferencesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_function_pointers}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::AsmINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_inline_assembly}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::AtomicFloat32MinMaxEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_atomic_float_min_max}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::AtomicFloat64MinMaxEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_atomic_float_min_max}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::AtomicFloat16MinMaxEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_atomic_float_min_max}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::VectorAnyINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_vector_compute}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ExpectAssumeKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_expect_assume}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SubgroupAvcMotionEstimationINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_device_side_avc_motion_estimation}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SubgroupAvcMotionEstimationIntraINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_device_side_avc_motion_estimation}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SubgroupAvcMotionEstimationChromaINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_device_side_avc_motion_estimation}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::VariableLengthArrayINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_variable_length_array}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FunctionFloatControlINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_float_controls2}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FPGAMemoryAttributesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ArbitraryPrecisionIntegersINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_arbitrary_precision_integers}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ArbitraryPrecisionFloatingPointINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_arbitrary_precision_floating_point}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::UnstructuredLoopControlsINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_unstructured_loop_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FPGALoopControlsINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_loop_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::KernelAttributesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_kernel_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FPGAKernelAttributesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_kernel_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FPGAMemoryAccessesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_accesses}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FPGAClusterAttributesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_cluster_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::LoopFuseINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_loop_fuse}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::MemoryAccessAliasingINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_memory_access_aliasing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FPGABufferLocationINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_buffer_location}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ArbitraryPrecisionFixedPointINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_arbitrary_precision_fixed_point}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::USMStorageClassesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_usm_storage_classes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::IOPipesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_io_pipes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::BlockingPipesALTERA: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_ALTERA_blocking_pipes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FPGARegINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_reg}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::DotProductInputAll: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_integer_dot_product}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::DotProductInput4x8BitPacked: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_integer_dot_product}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::DotProduct: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_integer_dot_product}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RayCullMaskKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_cull_mask}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::CooperativeMatrixKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_cooperative_matrix}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ReplicatedCompositesEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_replicated_composites}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::BitInstructions: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_bit_instructions}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::AtomicFloat32AddEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_atomic_float_add}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::AtomicFloat64AddEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_atomic_float_add}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::LongCompositesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_long_composites}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::OptNoneINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_optnone}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::AtomicFloat16AddEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_atomic_float16_add}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::DebugInfoModuleINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_debug_module}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SplitBarrierINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_split_barrier}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::GroupUniformArithmeticKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_uniform_group_instructions}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::StorageUniform16: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_16bit_storage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::UniformAndStorageBuffer8BitAccess: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_8bit_storage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::VectorComputeINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_vector_compute}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FPFastMathModeINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fp_fast_math_mode}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::DotProductInput4x8Bit: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_integer_dot_product}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::GroupNonUniformRotateKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_subgroup_rotate}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FragmentShadingRateKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_fragment_shading_rate}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::DrawParameters: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_shader_draw_parameters}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::WorkgroupMemoryExplicitLayoutKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_workgroup_memory_explicit_layout}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::WorkgroupMemoryExplicitLayout16BitAccessKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_workgroup_memory_explicit_layout}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::MultiView: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_multiview}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::VariablePointersStorageBuffer: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_variable_pointers}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RayQueryProvisionalKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_query}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RayQueryKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_query}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RayTracingKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::Float16ImageAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_gpu_shader_half_float_fetch}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ImageGatherBiasLodAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_texture_gather_bias_lod}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FragmentMaskAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_fragment_mask}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::StencilExportEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_stencil_export}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ImageReadWriteLodAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_image_load_store_lod}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::WeakLinkageAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_weak_linkage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::Int64ImageEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_image_int64}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ShaderClockKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_shader_clock}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FragmentFullyCoveredEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_fully_covered}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FragmentDensityEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_invocation_density, ::mlir::spirv::Extension::SPV_NV_shading_rate}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RayTracingNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RayTracingMotionBlurNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_ray_tracing_motion_blur}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::PhysicalStorageBufferAddresses: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_physical_storage_buffer, ::mlir::spirv::Extension::SPV_KHR_physical_storage_buffer}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RayTracingProvisionalKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FragmentShaderSampleInterlockEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_shader_interlock}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FragmentShaderShadingRateInterlockEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_shader_interlock}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ShaderSMBuiltinsNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_shader_sm_builtins}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::FragmentShaderPixelInterlockEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_shader_interlock}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::IntegerFunctions2INTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_shader_integer_functions2}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::TensorsARM: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_ARM_tensors}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::StorageTensorArrayDynamicIndexingEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_ARM_tensors}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::StorageTensorArrayNonUniformIndexingEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_ARM_tensors}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::GraphARM: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_ARM_graph}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::WorkgroupMemoryExplicitLayout8BitAccessKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_workgroup_memory_explicit_layout}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::VariablePointers: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_variable_pointers}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::RayTraversalPrimitiveCullingKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_query, ::mlir::spirv::Extension::SPV_KHR_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::SampleMaskOverrideCoverageNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_sample_mask_override_coverage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::GeometryShaderPassthroughNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_geometry_shader_passthrough}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::PerViewAttributesNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NVX_multiview_per_view_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ShaderViewportIndexLayerEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_viewport_index_layer}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ShaderViewportMaskNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_viewport_array2}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::ShaderStereoViewNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_stereo_view_rendering}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::Bfloat16ConversionINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_bfloat16_conversion}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::CacheControlsINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_cache_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::BFloat16TypeKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_bfloat16}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::BFloat16DotProductKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_bfloat16}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::BFloat16CooperativeMatrixKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_bfloat16}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::TensorFloat32RoundingINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_tensor_float32_conversion}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::MaskedGatherScatterINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_masked_gather_scatter}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::Float8EXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_float8}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Capability::Float8CooperativeMatrixEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_float8}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(Capability value) {
switch (value) {
case Capability::GroupNonUniform: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case Capability::ShaderLayer: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::ShaderViewportIndex: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::UniformDecoration: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_6); }
case Capability::VulkanMemoryModel: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::VulkanMemoryModelDeviceScope: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::DotProductInputAll: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_6); }
case Capability::DotProductInput4x8BitPacked: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_6); }
case Capability::DotProduct: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_6); }
case Capability::CooperativeMatrixKHR: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_6); }
case Capability::ReplicatedCompositesEXT: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_0); }
case Capability::NamedBarrier: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_1); }
case Capability::GroupNonUniformVote: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case Capability::GroupNonUniformArithmetic: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case Capability::GroupNonUniformBallot: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case Capability::GroupNonUniformShuffle: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case Capability::GroupNonUniformShuffleRelative: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case Capability::GroupNonUniformClustered: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case Capability::GroupNonUniformQuad: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case Capability::UniformTexelBufferArrayDynamicIndexing: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::DotProductInput4x8Bit: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_6); }
case Capability::SubgroupDispatch: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_1); }
case Capability::PipeStorage: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_1); }
case Capability::ShaderNonUniform: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::RuntimeDescriptorArray: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::StorageTexelBufferArrayDynamicIndexing: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::DemoteToHelperInvocation: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_6); }
case Capability::InputAttachmentArrayDynamicIndexing: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::UniformBufferArrayNonUniformIndexing: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::SampledImageArrayNonUniformIndexing: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::StorageBufferArrayNonUniformIndexing: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::StorageImageArrayNonUniformIndexing: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::InputAttachmentArrayNonUniformIndexing: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::UniformTexelBufferArrayNonUniformIndexing: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Capability::StorageTexelBufferArrayNonUniformIndexing: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(AddressingModel value) {
switch (value) {
case AddressingModel::Physical32: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Addresses}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case AddressingModel::Physical64: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Addresses}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case AddressingModel::PhysicalStorageBuffer64: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::PhysicalStorageBufferAddresses}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(AddressingModel value) {
switch (value) {
case AddressingModel::PhysicalStorageBuffer64: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_physical_storage_buffer, ::mlir::spirv::Extension::SPV_KHR_physical_storage_buffer}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(BuiltIn value) {
switch (value) {
case BuiltIn::Position: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::PointSize: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::ClipDistance: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ClipDistance}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::CullDistance: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::CullDistance}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::VertexId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::InstanceId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::PrimitiveId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry, ::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV, ::mlir::spirv::Capability::MeshShadingEXT, ::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::InvocationId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry, ::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::Layer: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry, ::mlir::spirv::Capability::MeshShadingEXT, ::mlir::spirv::Capability::ShaderLayer, ::mlir::spirv::Capability::ShaderViewportIndexLayerEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::ViewportIndex: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT, ::mlir::spirv::Capability::MultiViewport, ::mlir::spirv::Capability::ShaderViewportIndex, ::mlir::spirv::Capability::ShaderViewportIndexLayerEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::TessLevelOuter: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::TessLevelInner: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::TessCoord: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::PatchVertices: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::FragCoord: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::PointCoord: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::FrontFacing: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SampleId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::SampleRateShading}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SamplePosition: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::SampleRateShading}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SampleMask: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::FragDepth: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::HelperInvocation: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::WorkDim: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::GlobalSize: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::EnqueuedWorkgroupSize: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::GlobalOffset: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::GlobalLinearId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SubgroupSize: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniform, ::mlir::spirv::Capability::Kernel, ::mlir::spirv::Capability::SubgroupBallotKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SubgroupMaxSize: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::NumSubgroups: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniform, ::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::NumEnqueuedSubgroups: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SubgroupId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniform, ::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SubgroupLocalInvocationId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniform, ::mlir::spirv::Capability::Kernel, ::mlir::spirv::Capability::SubgroupBallotKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::VertexIndex: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::InstanceIndex: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SubgroupEqMask: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformBallot, ::mlir::spirv::Capability::SubgroupBallotKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SubgroupGeMask: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformBallot, ::mlir::spirv::Capability::SubgroupBallotKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SubgroupGtMask: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformBallot, ::mlir::spirv::Capability::SubgroupBallotKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SubgroupLeMask: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformBallot, ::mlir::spirv::Capability::SubgroupBallotKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SubgroupLtMask: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformBallot, ::mlir::spirv::Capability::SubgroupBallotKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::BaseVertex: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::DrawParameters}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::BaseInstance: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::DrawParameters}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::DrawIndex: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::DrawParameters, ::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::PrimitiveShadingRateKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentShadingRateKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::DeviceIndex: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::DeviceGroup}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::ViewIndex: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MultiView}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::ShadingRateKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentShadingRateKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::FragStencilRefEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StencilExportEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::ViewportMaskNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ShaderViewportMaskNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SecondaryPositionNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ShaderStereoViewNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SecondaryViewportMaskNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ShaderStereoViewNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::PositionPerViewNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::PerViewAttributesNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::ViewportMaskPerViewNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::PerViewAttributesNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::FullyCoveredEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentFullyCoveredEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::BaryCoordKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentBarycentricKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::BaryCoordNoPerspKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentBarycentricKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::FragSizeEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentDensityEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::FragInvocationCountEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentDensityEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::PrimitivePointIndicesEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::PrimitiveLineIndicesEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::PrimitiveTriangleIndicesEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::CullPrimitiveEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::LaunchIdKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::LaunchSizeKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::WorldRayOriginKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::WorldRayDirectionKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::ObjectRayOriginKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::ObjectRayDirectionKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::RayTminKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::RayTmaxKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::InstanceCustomIndexKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::ObjectToWorldKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::WorldToObjectKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::HitTNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::HitKindKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::CurrentRayTimeNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingMotionBlurNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::IncomingRayFlagsKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::RayGeometryIndexKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::WarpsPerSMNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ShaderSMBuiltinsNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SMCountNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ShaderSMBuiltinsNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::WarpIDNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ShaderSMBuiltinsNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::SMIDNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ShaderSMBuiltinsNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case BuiltIn::CullMaskKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayCullMaskKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(BuiltIn value) {
switch (value) {
case BuiltIn::BaseVertex: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_shader_draw_parameters}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::BaseInstance: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_shader_draw_parameters}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::DrawIndex: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_shader_draw_parameters, ::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::PrimitiveShadingRateKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_fragment_shading_rate}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::DeviceIndex: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_device_group}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::ViewIndex: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_multiview}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::ShadingRateKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_fragment_shading_rate}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::BaryCoordNoPerspAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_explicit_vertex_parameter}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::BaryCoordNoPerspCentroidAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_explicit_vertex_parameter}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::BaryCoordNoPerspSampleAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_explicit_vertex_parameter}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::BaryCoordSmoothAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_explicit_vertex_parameter}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::BaryCoordSmoothCentroidAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_explicit_vertex_parameter}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::BaryCoordSmoothSampleAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_explicit_vertex_parameter}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::BaryCoordPullModelAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_explicit_vertex_parameter}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::FragStencilRefEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_stencil_export}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::ViewportMaskNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_viewport_array2}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::SecondaryPositionNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_stereo_view_rendering}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::SecondaryViewportMaskNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_stereo_view_rendering}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::PositionPerViewNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NVX_multiview_per_view_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::ViewportMaskPerViewNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NVX_multiview_per_view_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::FullyCoveredEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_fully_covered}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::BaryCoordKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_fragment_shader_barycentric, ::mlir::spirv::Extension::SPV_NV_fragment_shader_barycentric}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::BaryCoordNoPerspKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_fragment_shader_barycentric, ::mlir::spirv::Extension::SPV_NV_fragment_shader_barycentric}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::FragSizeEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_invocation_density, ::mlir::spirv::Extension::SPV_NV_shading_rate}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::FragInvocationCountEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_invocation_density, ::mlir::spirv::Extension::SPV_NV_shading_rate}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::PrimitivePointIndicesEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::PrimitiveLineIndicesEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::PrimitiveTriangleIndicesEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::CullPrimitiveEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::LaunchIdKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::LaunchSizeKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::WorldRayOriginKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::WorldRayDirectionKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::ObjectRayOriginKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::ObjectRayDirectionKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::RayTminKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::RayTmaxKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::InstanceCustomIndexKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::ObjectToWorldKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::WorldToObjectKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::HitTNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::HitKindKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::CurrentRayTimeNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_ray_tracing_motion_blur}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::IncomingRayFlagsKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::RayGeometryIndexKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::WarpsPerSMNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_shader_sm_builtins}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::SMCountNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_shader_sm_builtins}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::WarpIDNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_shader_sm_builtins}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::SMIDNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_shader_sm_builtins}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case BuiltIn::CullMaskKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_cull_mask}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(BuiltIn value) {
switch (value) {
case BuiltIn::SubgroupEqMask: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case BuiltIn::SubgroupGeMask: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case BuiltIn::SubgroupGtMask: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case BuiltIn::SubgroupLeMask: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
case BuiltIn::SubgroupLtMask: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(Decoration value) {
switch (value) {
case Decoration::RelaxedPrecision: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::SpecId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel, ::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Block: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::BufferBlock: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::RowMajor: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Matrix}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::ColMajor: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Matrix}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::ArrayStride: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::MatrixStride: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Matrix}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::GLSLShared: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::GLSLPacked: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::CPacked: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::NoPerspective: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Flat: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Patch: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Centroid: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Sample: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::SampleRateShading}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Invariant: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Constant: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Uniform: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader, ::mlir::spirv::Capability::UniformDecoration}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::UniformId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader, ::mlir::spirv::Capability::UniformDecoration}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::SaturatedConversion: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Stream: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GeometryStreams}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Location: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Component: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Index: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Binding: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::DescriptorSet: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Offset: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::XfbBuffer: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::TransformFeedback}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::XfbStride: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::TransformFeedback}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::FuncParamAttr: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::FPFastMathMode: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::LinkageAttributes: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Linkage}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::NoContraction: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::InputAttachmentIndex: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::InputAttachment}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::Alignment: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::MaxByteOffset: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Addresses}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::AlignmentId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::MaxByteOffsetId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Addresses}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::OverrideCoverageNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::SampleMaskOverrideCoverageNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::PassthroughNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GeometryShaderPassthroughNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::ViewportRelativeNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ShaderViewportMaskNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::SecondaryViewportRelativeNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ShaderStereoViewNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::PerPrimitiveEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::PerVertexKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentBarycentricKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::NonUniform: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ShaderNonUniform}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::RestrictPointer: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::PhysicalStorageBufferAddresses}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::AliasedPointer: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::PhysicalStorageBufferAddresses}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::BindlessSamplerNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::BindlessTextureNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::BindlessImageNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::BindlessTextureNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::BoundSamplerNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::BindlessTextureNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::BoundImageNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::BindlessTextureNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::SIMTCallINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::ReferencedIndirectlyINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::IndirectReferencesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::ClobberINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::AsmINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::SideEffectsINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::AsmINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::VectorComputeVariableINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::FuncParamIOKindINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::VectorComputeFunctionINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::StackCallINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::GlobalVariableOffsetINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::FunctionRoundingModeINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FunctionFloatControlINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::FunctionDenormModeINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FunctionFloatControlINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::RegisterINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::MemoryINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::NumbanksINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::BankwidthINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::MaxPrivateCopiesINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::SinglepumpINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::DoublepumpINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::MaxReplicatesINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::SimpleDualPortINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::MergeINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::BankBitsINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::ForcePow2DepthINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::BurstCoalesceINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAccessesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::CacheSizeINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAccessesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::DontStaticallyCoalesceINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAccessesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::PrefetchINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAMemoryAccessesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::StallEnableINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAClusterAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::FuseLoopsInFunctionINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::LoopFuseINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::AliasScopeINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MemoryAccessAliasingINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::NoAliasINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MemoryAccessAliasingINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::BufferLocationINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGABufferLocationINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::IOPipeStorageINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::IOPipesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::FunctionFloatingPointModeINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FunctionFloatControlINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::SingleElementVectorINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::VectorComputeCallableFunctionINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::MediaBlockIOINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::CacheControlLoadINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::CacheControlsINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Decoration::CacheControlStoreINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::CacheControlsINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(Decoration value) {
switch (value) {
case Decoration::NoSignedWrap: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_no_integer_wrap_decoration}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::NoUnsignedWrap: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_no_integer_wrap_decoration}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::ExplicitInterpAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_explicit_vertex_parameter}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::OverrideCoverageNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_sample_mask_override_coverage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::PassthroughNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_geometry_shader_passthrough}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::SecondaryViewportRelativeNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_stereo_view_rendering}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::PerPrimitiveEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::PerVertexKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_fragment_shader_barycentric, ::mlir::spirv::Extension::SPV_NV_fragment_shader_barycentric}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::RestrictPointer: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_physical_storage_buffer, ::mlir::spirv::Extension::SPV_KHR_physical_storage_buffer}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::AliasedPointer: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_physical_storage_buffer, ::mlir::spirv::Extension::SPV_KHR_physical_storage_buffer}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::ReferencedIndirectlyINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_function_pointers}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::UserTypeGOOGLE: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_GOOGLE_user_type}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::RegisterINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::MemoryINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::NumbanksINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::BankwidthINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::MaxPrivateCopiesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::SinglepumpINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::DoublepumpINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::MaxReplicatesINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::SimpleDualPortINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::MergeINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::BankBitsINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case Decoration::ForcePow2DepthINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_memory_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(Decoration value) {
switch (value) {
case Decoration::UniformId: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
case Decoration::MaxByteOffset: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_1); }
case Decoration::AlignmentId: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_2); }
case Decoration::MaxByteOffsetId: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_2); }
case Decoration::NonUniform: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case Decoration::CounterBuffer: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
case Decoration::UserSemantic: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMaxVersion(Decoration value) {
switch (value) {
case Decoration::BufferBlock: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(Dim value) {
switch (value) {
case Dim::Dim1D: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Image1D, ::mlir::spirv::Capability::Sampled1D}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Dim::Dim2D: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ImageMSArray, ::mlir::spirv::Capability::Kernel, ::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Dim::Cube: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ImageCubeArray, ::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Dim::Rect: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ImageRect, ::mlir::spirv::Capability::SampledRect}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Dim::Buffer: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ImageBuffer, ::mlir::spirv::Capability::SampledBuffer}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Dim::SubpassData: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::InputAttachment}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(ExecutionMode value) {
switch (value) {
case ExecutionMode::Invocations: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SpacingEqual: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SpacingFractionalEven: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SpacingFractionalOdd: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::VertexOrderCw: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::VertexOrderCcw: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::PixelCenterInteger: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::OriginUpperLeft: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::OriginLowerLeft: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::EarlyFragmentTests: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::PointMode: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::Xfb: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::TransformFeedback}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::DepthReplacing: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::DepthGreater: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::DepthLess: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::DepthUnchanged: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::LocalSizeHint: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::InputPoints: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::InputLines: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::InputLinesAdjacency: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::Triangles: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry, ::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::InputTrianglesAdjacency: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::Quads: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::Isolines: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::OutputVertices: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry, ::mlir::spirv::Capability::MeshShadingEXT, ::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::OutputPoints: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry, ::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::OutputLineStrip: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::OutputTriangleStrip: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::VecTypeHint: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::ContractionOff: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::Initializer: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::Finalizer: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SubgroupSize: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::SubgroupDispatch}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SubgroupsPerWorkgroup: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::SubgroupDispatch}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SubgroupsPerWorkgroupId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::SubgroupDispatch}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::LocalSizeHintId: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SubgroupUniformControlFlowKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::PostDepthCoverage: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::SampleMaskPostDepthCoverage}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::DenormPreserve: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::DenormPreserve}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::DenormFlushToZero: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::DenormFlushToZero}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SignedZeroInfNanPreserve: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::SignedZeroInfNanPreserve}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::RoundingModeRTE: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RoundingModeRTE}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::RoundingModeRTZ: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RoundingModeRTZ}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::EarlyAndLateFragmentTestsAMD: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::StencilRefReplacingEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StencilExportEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::StencilRefUnchangedFrontAMD: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StencilExportEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::StencilRefGreaterFrontAMD: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StencilExportEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::StencilRefLessFrontAMD: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StencilExportEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::StencilRefUnchangedBackAMD: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StencilExportEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::StencilRefGreaterBackAMD: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StencilExportEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::StencilRefLessBackAMD: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StencilExportEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::OutputLinesEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::OutputPrimitivesEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::DerivativeGroupQuadsNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ComputeDerivativeGroupQuadsNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::DerivativeGroupLinearNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ComputeDerivativeGroupLinearNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::OutputTrianglesEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::PixelInterlockOrderedEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentShaderPixelInterlockEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::PixelInterlockUnorderedEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentShaderPixelInterlockEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SampleInterlockOrderedEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentShaderSampleInterlockEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SampleInterlockUnorderedEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentShaderSampleInterlockEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::ShadingRateInterlockOrderedEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentShaderShadingRateInterlockEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::ShadingRateInterlockUnorderedEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FragmentShaderShadingRateInterlockEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SharedLocalMemorySizeINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::RoundingModeRTPINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RoundToInfinityINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::RoundingModeRTNINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RoundToInfinityINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::FloatingPointModeALTINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RoundToInfinityINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::FloatingPointModeIEEEINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RoundToInfinityINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::MaxWorkgroupSizeINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::KernelAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::MaxWorkDimINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::KernelAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::NoGlobalOffsetINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::KernelAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::NumSIMDWorkitemsINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAKernelAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::SchedulerTargetFmaxMhzINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAKernelAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::StreamingInterfaceINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGAKernelAttributesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionMode::NamedBarrierCountINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(ExecutionMode value) {
switch (value) {
case ExecutionMode::SubgroupUniformControlFlowKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_subgroup_uniform_control_flow}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::PostDepthCoverage: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_post_depth_coverage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::DenormPreserve: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_float_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::DenormFlushToZero: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_float_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::SignedZeroInfNanPreserve: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_float_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::RoundingModeRTE: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_float_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::RoundingModeRTZ: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_float_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::EarlyAndLateFragmentTestsAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_early_and_late_fragment_tests}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::StencilRefReplacingEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_shader_stencil_export}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::StencilRefUnchangedFrontAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_early_and_late_fragment_tests, ::mlir::spirv::Extension::SPV_EXT_shader_stencil_export}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::StencilRefGreaterFrontAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_early_and_late_fragment_tests, ::mlir::spirv::Extension::SPV_EXT_shader_stencil_export}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::StencilRefLessFrontAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_early_and_late_fragment_tests, ::mlir::spirv::Extension::SPV_EXT_shader_stencil_export}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::StencilRefUnchangedBackAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_early_and_late_fragment_tests, ::mlir::spirv::Extension::SPV_EXT_shader_stencil_export}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::StencilRefGreaterBackAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_early_and_late_fragment_tests, ::mlir::spirv::Extension::SPV_EXT_shader_stencil_export}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::StencilRefLessBackAMD: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_shader_early_and_late_fragment_tests, ::mlir::spirv::Extension::SPV_EXT_shader_stencil_export}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::OutputLinesEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::OutputPrimitivesEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::DerivativeGroupQuadsNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_compute_shader_derivatives}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::DerivativeGroupLinearNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_compute_shader_derivatives}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::OutputTrianglesEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::PixelInterlockOrderedEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_shader_interlock}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::PixelInterlockUnorderedEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_shader_interlock}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::SampleInterlockOrderedEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_shader_interlock}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::SampleInterlockUnorderedEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_shader_interlock}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::ShadingRateInterlockOrderedEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_shader_interlock}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::ShadingRateInterlockUnorderedEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_fragment_shader_interlock}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::MaxWorkgroupSizeINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_kernel_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::MaxWorkDimINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_kernel_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::NoGlobalOffsetINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_kernel_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case ExecutionMode::NumSIMDWorkitemsINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_kernel_attributes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(ExecutionMode value) {
switch (value) {
case ExecutionMode::Initializer: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_1); }
case ExecutionMode::Finalizer: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_1); }
case ExecutionMode::SubgroupSize: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_1); }
case ExecutionMode::SubgroupsPerWorkgroup: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_1); }
case ExecutionMode::SubgroupsPerWorkgroupId: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_2); }
case ExecutionMode::LocalSizeId: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_2); }
case ExecutionMode::LocalSizeHintId: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_2); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(ExecutionModel value) {
switch (value) {
case ExecutionModel::Vertex: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::TessellationControl: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::TessellationEvaluation: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Tessellation}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::Geometry: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Geometry}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::Fragment: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::GLCompute: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::Kernel: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::RayGenerationKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::IntersectionKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::AnyHitKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::ClosestHitKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::MissKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::CallableKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::TaskEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ExecutionModel::MeshEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(FPEncoding value) {
switch (value) {
case FPEncoding::BFloat16KHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::BFloat16TypeKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case FPEncoding::Float8E4M3EXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Float8EXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case FPEncoding::Float8E5M2EXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Float8EXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(FunctionControl value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case FunctionControl::OptNoneINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::OptNoneINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(GroupOperation value) {
switch (value) {
case GroupOperation::Reduce: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformArithmetic, ::mlir::spirv::Capability::GroupNonUniformBallot, ::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case GroupOperation::InclusiveScan: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformArithmetic, ::mlir::spirv::Capability::GroupNonUniformBallot, ::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case GroupOperation::ExclusiveScan: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformArithmetic, ::mlir::spirv::Capability::GroupNonUniformBallot, ::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case GroupOperation::ClusteredReduce: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformClustered}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case GroupOperation::PartitionedReduceNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformPartitionedNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case GroupOperation::PartitionedInclusiveScanNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformPartitionedNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case GroupOperation::PartitionedExclusiveScanNV: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GroupNonUniformPartitionedNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(GroupOperation value) {
switch (value) {
case GroupOperation::PartitionedReduceNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_shader_subgroup_partitioned}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case GroupOperation::PartitionedInclusiveScanNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_shader_subgroup_partitioned}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case GroupOperation::PartitionedExclusiveScanNV: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_NV_shader_subgroup_partitioned}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(GroupOperation value) {
switch (value) {
case GroupOperation::ClusteredReduce: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_3); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(ImageFormat value) {
switch (value) {
case ImageFormat::Rgba32f: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba16f: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R32f: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba8: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba8Snorm: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg32f: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg16f: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R11fG11fB10f: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R16f: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba16: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgb10A2: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg16: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg8: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R16: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R8: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba16Snorm: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg16Snorm: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg8Snorm: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R16Snorm: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R8Snorm: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba32i: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba16i: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba8i: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R32i: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg32i: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg16i: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg8i: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R16i: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R8i: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba32ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba16ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgba8ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R32ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rgb10a2ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg32ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg16ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::Rg8ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R16ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R8ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::StorageImageExtendedFormats}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R64ui: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Int64ImageEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageFormat::R64i: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Int64ImageEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(ImageOperands value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case ImageOperands::Bias: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageOperands::Offset: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ImageGatherExtended}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageOperands::ConstOffsets: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::ImageGatherExtended}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageOperands::MinLod: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MinLod}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageOperands::MakeTexelAvailable: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageOperands::MakeTexelVisible: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageOperands::NonPrivateTexel: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case ImageOperands::VolatileTexel: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(ImageOperands value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case ImageOperands::MakeTexelAvailable: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case ImageOperands::MakeTexelVisible: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case ImageOperands::NonPrivateTexel: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case ImageOperands::VolatileTexel: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case ImageOperands::SignExtend: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
case ImageOperands::ZeroExtend: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
case ImageOperands::Nontemporal: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_6); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(LinkageType value) {
switch (value) {
case LinkageType::Export: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Linkage}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case LinkageType::Import: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Linkage}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case LinkageType::LinkOnceODR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Linkage}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case LinkageType::Weak: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::WeakLinkageAMD}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(LinkageType value) {
switch (value) {
case LinkageType::LinkOnceODR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_linkonce_odr}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case LinkageType::Weak: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_AMD_weak_linkage}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(LoopControl value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case LoopControl::InitiationIntervalINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGALoopControlsINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case LoopControl::LoopCoalesceINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGALoopControlsINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case LoopControl::MaxConcurrencyINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGALoopControlsINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case LoopControl::MaxInterleavingINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGALoopControlsINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case LoopControl::DependencyArrayINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGALoopControlsINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case LoopControl::SpeculatedIterationsINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGALoopControlsINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case LoopControl::PipelineEnableINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGALoopControlsINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case LoopControl::NoFusionINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPGALoopControlsINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(LoopControl value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case LoopControl::InitiationIntervalINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_loop_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case LoopControl::LoopCoalesceINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_loop_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case LoopControl::MaxConcurrencyINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_loop_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case LoopControl::MaxInterleavingINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_loop_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case LoopControl::DependencyArrayINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_loop_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case LoopControl::SpeculatedIterationsINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_loop_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case LoopControl::PipelineEnableINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_loop_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case LoopControl::NoFusionINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_fpga_loop_controls}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(LoopControl value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case LoopControl::DependencyInfinite: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_1); }
case LoopControl::DependencyLength: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_1); }
case LoopControl::MinIterations: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
case LoopControl::MaxIterations: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
case LoopControl::IterationMultiple: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
case LoopControl::PeelCount: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
case LoopControl::PartialCount: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(MemoryAccess value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case MemoryAccess::MakePointerAvailable: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemoryAccess::MakePointerVisible: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemoryAccess::NonPrivatePointer: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemoryAccess::AliasScopeINTELMask: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MemoryAccessAliasingINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemoryAccess::NoAliasINTELMask: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MemoryAccessAliasingINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(MemoryAccess value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case MemoryAccess::AliasScopeINTELMask: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_memory_access_aliasing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case MemoryAccess::NoAliasINTELMask: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_memory_access_aliasing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(MemoryAccess value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case MemoryAccess::MakePointerAvailable: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case MemoryAccess::MakePointerVisible: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case MemoryAccess::NonPrivatePointer: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(MemoryModel value) {
switch (value) {
case MemoryModel::Simple: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemoryModel::GLSL450: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemoryModel::OpenCL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Kernel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemoryModel::Vulkan: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(MemoryModel value) {
switch (value) {
case MemoryModel::Vulkan: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_vulkan_memory_model}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(MemorySemantics value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case MemorySemantics::UniformMemory: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemorySemantics::AtomicCounterMemory: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::AtomicStorage}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemorySemantics::OutputMemory: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemorySemantics::MakeAvailable: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemorySemantics::MakeVisible: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case MemorySemantics::Volatile: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(MemorySemantics value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case MemorySemantics::Volatile: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_vulkan_memory_model}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(MemorySemantics value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case MemorySemantics::OutputMemory: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case MemorySemantics::MakeAvailable: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
case MemorySemantics::MakeVisible: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(Scope value) {
switch (value) {
case Scope::QueueFamily: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::VulkanMemoryModel}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case Scope::ShaderCallKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(Scope value) {
switch (value) {
case Scope::QueueFamily: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_5); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(StorageClass value) {
switch (value) {
case StorageClass::Uniform: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::Output: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::Private: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader, ::mlir::spirv::Capability::VectorComputeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::Generic: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::GenericPointer}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::PushConstant: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::AtomicCounter: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::AtomicStorage}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::StorageBuffer: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::Shader}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::CallableDataKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::IncomingCallableDataKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::RayPayloadKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::HitAttributeKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::IncomingRayPayloadKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::ShaderRecordBufferKHR: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::RayTracingKHR, ::mlir::spirv::Capability::RayTracingNV}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::PhysicalStorageBuffer: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::PhysicalStorageBufferAddresses}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::TaskPayloadWorkgroupEXT: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::MeshShadingEXT}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::CodeSectionINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FunctionPointersINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::DeviceOnlyINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::USMStorageClassesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case StorageClass::HostOnlyINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::USMStorageClassesINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(StorageClass value) {
switch (value) {
case StorageClass::StorageBuffer: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_storage_buffer_storage_class, ::mlir::spirv::Extension::SPV_KHR_variable_pointers}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::CallableDataKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::IncomingCallableDataKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::RayPayloadKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::HitAttributeKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::IncomingRayPayloadKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::ShaderRecordBufferKHR: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_ray_tracing, ::mlir::spirv::Extension::SPV_NV_ray_tracing}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::PhysicalStorageBuffer: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_physical_storage_buffer, ::mlir::spirv::Extension::SPV_KHR_physical_storage_buffer}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::TaskPayloadWorkgroupEXT: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_EXT_mesh_shader}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::CodeSectionINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_function_pointers}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::DeviceOnlyINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_usm_storage_classes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
case StorageClass::HostOnlyINTEL: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_INTEL_usm_storage_classes}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
default: break;
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(StorageClass value) {
switch (value) {
case StorageClass::TaskPayloadWorkgroupEXT: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_4); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Extension>> getExtensions(PackedVectorFormat value) {
switch (value) {
case PackedVectorFormat::PackedVectorFormat4x8Bit: { static const ::mlir::spirv::Extension exts[] = {::mlir::spirv::Extension::SPV_KHR_integer_dot_product}; ArrayRef<::mlir::spirv::Extension> ref(exts, std::size(exts)); return ::llvm::ArrayRef<::mlir::spirv::Extension>(ref); }
}
return std::nullopt;
}
std::optional<::mlir::spirv::Version> getMinVersion(PackedVectorFormat value) {
switch (value) {
case PackedVectorFormat::PackedVectorFormat4x8Bit: { return ::mlir::spirv::Version(::mlir::spirv::Version::V_1_6); }
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
std::optional<::llvm::ArrayRef<::mlir::spirv::Capability>> getCapabilities(FPFastMathMode value) {
assert(::llvm::popcount(static_cast<uint32_t>(value)) <= 1 && "cannot have more than one bit set");
switch (value) {
case FPFastMathMode::AllowContractFastINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPFastMathModeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
case FPFastMathMode::AllowReassocINTEL: { static const ::mlir::spirv::Capability caps[] = {::mlir::spirv::Capability::FPFastMathModeINTEL}; ArrayRef<::mlir::spirv::Capability> ref(caps, std::size(caps)); return ::llvm::ArrayRef<::mlir::spirv::Capability>(ref); }
default: break;
}
return std::nullopt;
}
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv
namespace mlir::spirv {
} // namespace mlir::spirv