Commit 98dc8eb7d9

Robin Voetter <robin@voetter.nl>
2021-05-13 01:30:54
SPIR-V: Add generated SPIR-V features
1 parent 4fe0a0b
Changed files (2)
lib
lib/std/target/spirv.zig
@@ -0,0 +1,2135 @@
+//! This file is auto-generated by tools/update_spirv_features.zig.
+//! TODO: Dependencies of capabilities on extensions.
+//! TODO: Dependencies of extensions on extensions.
+//! TODO: Dependencies of extensions on versions.
+
+const std = @import("../std.zig");
+const CpuFeature = std.Target.Cpu.Feature;
+const CpuModel = std.Target.Cpu.Model;
+
+pub const Feature = enum {
+    v1_1,
+    v1_2,
+    v1_3,
+    v1_4,
+    v1_5,
+    SPV_AMD_shader_fragment_mask,
+    SPV_AMD_gpu_shader_int16,
+    SPV_AMD_gpu_shader_half_float,
+    SPV_AMD_texture_gather_bias_lod,
+    SPV_AMD_shader_ballot,
+    SPV_AMD_gcn_shader,
+    SPV_AMD_shader_image_load_store_lod,
+    SPV_AMD_shader_explicit_vertex_parameter,
+    SPV_AMD_shader_trinary_minmax,
+    SPV_AMD_gpu_shader_half_float_fetch,
+    SPV_GOOGLE_hlsl_functionality1,
+    SPV_GOOGLE_user_type,
+    SPV_GOOGLE_decorate_string,
+    SPV_EXT_demote_to_helper_invocation,
+    SPV_EXT_descriptor_indexing,
+    SPV_EXT_fragment_fully_covered,
+    SPV_EXT_shader_stencil_export,
+    SPV_EXT_physical_storage_buffer,
+    SPV_EXT_shader_atomic_float_add,
+    SPV_EXT_shader_atomic_float_min_max,
+    SPV_EXT_shader_image_int64,
+    SPV_EXT_fragment_shader_interlock,
+    SPV_EXT_fragment_invocation_density,
+    SPV_EXT_shader_viewport_index_layer,
+    SPV_INTEL_loop_fuse,
+    SPV_INTEL_fpga_dsp_control,
+    SPV_INTEL_fpga_reg,
+    SPV_INTEL_fpga_memory_accesses,
+    SPV_INTEL_fpga_loop_controls,
+    SPV_INTEL_io_pipes,
+    SPV_INTEL_unstructured_loop_controls,
+    SPV_INTEL_blocking_pipes,
+    SPV_INTEL_device_side_avc_motion_estimation,
+    SPV_INTEL_fpga_memory_attributes,
+    SPV_INTEL_fp_fast_math_mode,
+    SPV_INTEL_media_block_io,
+    SPV_INTEL_shader_integer_functions2,
+    SPV_INTEL_subgroups,
+    SPV_INTEL_fpga_cluster_attributes,
+    SPV_INTEL_kernel_attributes,
+    SPV_INTEL_arbitrary_precision_integers,
+    SPV_KHR_8bit_storage,
+    SPV_KHR_shader_clock,
+    SPV_KHR_device_group,
+    SPV_KHR_16bit_storage,
+    SPV_KHR_variable_pointers,
+    SPV_KHR_no_integer_wrap_decoration,
+    SPV_KHR_subgroup_vote,
+    SPV_KHR_multiview,
+    SPV_KHR_shader_ballot,
+    SPV_KHR_vulkan_memory_model,
+    SPV_KHR_physical_storage_buffer,
+    SPV_KHR_workgroup_memory_explicit_layout,
+    SPV_KHR_fragment_shading_rate,
+    SPV_KHR_shader_atomic_counter_ops,
+    SPV_KHR_shader_draw_parameters,
+    SPV_KHR_storage_buffer_storage_class,
+    SPV_KHR_linkonce_odr,
+    SPV_KHR_terminate_invocation,
+    SPV_KHR_non_semantic_info,
+    SPV_KHR_post_depth_coverage,
+    SPV_KHR_expect_assume,
+    SPV_KHR_ray_tracing,
+    SPV_KHR_ray_query,
+    SPV_KHR_float_controls,
+    SPV_NV_viewport_array2,
+    SPV_NV_shader_subgroup_partitioned,
+    SPV_NVX_multiview_per_view_attributes,
+    SPV_NV_ray_tracing,
+    SPV_NV_shader_image_footprint,
+    SPV_NV_shading_rate,
+    SPV_NV_stereo_view_rendering,
+    SPV_NV_compute_shader_derivatives,
+    SPV_NV_shader_sm_builtins,
+    SPV_NV_mesh_shader,
+    SPV_NV_geometry_shader_passthrough,
+    SPV_NV_fragment_shader_barycentric,
+    SPV_NV_cooperative_matrix,
+    SPV_NV_sample_mask_override_coverage,
+    Matrix,
+    Shader,
+    Geometry,
+    Tessellation,
+    Addresses,
+    Linkage,
+    Kernel,
+    Vector16,
+    Float16Buffer,
+    Float16,
+    Float64,
+    Int64,
+    Int64Atomics,
+    ImageBasic,
+    ImageReadWrite,
+    ImageMipmap,
+    Pipes,
+    Groups,
+    DeviceEnqueue,
+    LiteralSampler,
+    AtomicStorage,
+    Int16,
+    TessellationPointSize,
+    GeometryPointSize,
+    ImageGatherExtended,
+    StorageImageMultisample,
+    UniformBufferArrayDynamicIndexing,
+    SampledImageArrayDynamicIndexing,
+    StorageBufferArrayDynamicIndexing,
+    StorageImageArrayDynamicIndexing,
+    ClipDistance,
+    CullDistance,
+    ImageCubeArray,
+    SampleRateShading,
+    ImageRect,
+    SampledRect,
+    GenericPointer,
+    Int8,
+    InputAttachment,
+    SparseResidency,
+    MinLod,
+    Sampled1D,
+    Image1D,
+    SampledCubeArray,
+    SampledBuffer,
+    ImageBuffer,
+    ImageMSArray,
+    StorageImageExtendedFormats,
+    ImageQuery,
+    DerivativeControl,
+    InterpolationFunction,
+    TransformFeedback,
+    GeometryStreams,
+    StorageImageReadWithoutFormat,
+    StorageImageWriteWithoutFormat,
+    MultiViewport,
+    SubgroupDispatch,
+    NamedBarrier,
+    PipeStorage,
+    GroupNonUniform,
+    GroupNonUniformVote,
+    GroupNonUniformArithmetic,
+    GroupNonUniformBallot,
+    GroupNonUniformShuffle,
+    GroupNonUniformShuffleRelative,
+    GroupNonUniformClustered,
+    GroupNonUniformQuad,
+    ShaderLayer,
+    ShaderViewportIndex,
+    FragmentShadingRateKHR,
+    SubgroupBallotKHR,
+    DrawParameters,
+    WorkgroupMemoryExplicitLayoutKHR,
+    WorkgroupMemoryExplicitLayout8BitAccessKHR,
+    WorkgroupMemoryExplicitLayout16BitAccessKHR,
+    SubgroupVoteKHR,
+    StorageBuffer16BitAccess,
+    StorageUniformBufferBlock16,
+    UniformAndStorageBuffer16BitAccess,
+    StorageUniform16,
+    StoragePushConstant16,
+    StorageInputOutput16,
+    DeviceGroup,
+    MultiView,
+    VariablePointersStorageBuffer,
+    VariablePointers,
+    AtomicStorageOps,
+    SampleMaskPostDepthCoverage,
+    StorageBuffer8BitAccess,
+    UniformAndStorageBuffer8BitAccess,
+    StoragePushConstant8,
+    DenormPreserve,
+    DenormFlushToZero,
+    SignedZeroInfNanPreserve,
+    RoundingModeRTE,
+    RoundingModeRTZ,
+    RayQueryProvisionalKHR,
+    RayQueryKHR,
+    RayTraversalPrimitiveCullingKHR,
+    RayTracingKHR,
+    Float16ImageAMD,
+    ImageGatherBiasLodAMD,
+    FragmentMaskAMD,
+    StencilExportEXT,
+    ImageReadWriteLodAMD,
+    Int64ImageEXT,
+    ShaderClockKHR,
+    SampleMaskOverrideCoverageNV,
+    GeometryShaderPassthroughNV,
+    ShaderViewportIndexLayerEXT,
+    ShaderViewportIndexLayerNV,
+    ShaderViewportMaskNV,
+    ShaderStereoViewNV,
+    PerViewAttributesNV,
+    FragmentFullyCoveredEXT,
+    MeshShadingNV,
+    ImageFootprintNV,
+    FragmentBarycentricNV,
+    ComputeDerivativeGroupQuadsNV,
+    FragmentDensityEXT,
+    ShadingRateNV,
+    GroupNonUniformPartitionedNV,
+    ShaderNonUniform,
+    ShaderNonUniformEXT,
+    RuntimeDescriptorArray,
+    RuntimeDescriptorArrayEXT,
+    InputAttachmentArrayDynamicIndexing,
+    InputAttachmentArrayDynamicIndexingEXT,
+    UniformTexelBufferArrayDynamicIndexing,
+    UniformTexelBufferArrayDynamicIndexingEXT,
+    StorageTexelBufferArrayDynamicIndexing,
+    StorageTexelBufferArrayDynamicIndexingEXT,
+    UniformBufferArrayNonUniformIndexing,
+    UniformBufferArrayNonUniformIndexingEXT,
+    SampledImageArrayNonUniformIndexing,
+    SampledImageArrayNonUniformIndexingEXT,
+    StorageBufferArrayNonUniformIndexing,
+    StorageBufferArrayNonUniformIndexingEXT,
+    StorageImageArrayNonUniformIndexing,
+    StorageImageArrayNonUniformIndexingEXT,
+    InputAttachmentArrayNonUniformIndexing,
+    InputAttachmentArrayNonUniformIndexingEXT,
+    UniformTexelBufferArrayNonUniformIndexing,
+    UniformTexelBufferArrayNonUniformIndexingEXT,
+    StorageTexelBufferArrayNonUniformIndexing,
+    StorageTexelBufferArrayNonUniformIndexingEXT,
+    RayTracingNV,
+    VulkanMemoryModel,
+    VulkanMemoryModelKHR,
+    VulkanMemoryModelDeviceScope,
+    VulkanMemoryModelDeviceScopeKHR,
+    PhysicalStorageBufferAddresses,
+    PhysicalStorageBufferAddressesEXT,
+    ComputeDerivativeGroupLinearNV,
+    RayTracingProvisionalKHR,
+    CooperativeMatrixNV,
+    FragmentShaderSampleInterlockEXT,
+    FragmentShaderShadingRateInterlockEXT,
+    ShaderSMBuiltinsNV,
+    FragmentShaderPixelInterlockEXT,
+    DemoteToHelperInvocationEXT,
+    SubgroupShuffleINTEL,
+    SubgroupBufferBlockIOINTEL,
+    SubgroupImageBlockIOINTEL,
+    SubgroupImageMediaBlockIOINTEL,
+    RoundToInfinityINTEL,
+    FloatingPointModeINTEL,
+    IntegerFunctions2INTEL,
+    FunctionPointersINTEL,
+    IndirectReferencesINTEL,
+    AsmINTEL,
+    AtomicFloat32MinMaxEXT,
+    AtomicFloat64MinMaxEXT,
+    AtomicFloat16MinMaxEXT,
+    VectorComputeINTEL,
+    VectorAnyINTEL,
+    ExpectAssumeKHR,
+    SubgroupAvcMotionEstimationINTEL,
+    SubgroupAvcMotionEstimationIntraINTEL,
+    SubgroupAvcMotionEstimationChromaINTEL,
+    VariableLengthArrayINTEL,
+    FunctionFloatControlINTEL,
+    FPGAMemoryAttributesINTEL,
+    FPFastMathModeINTEL,
+    ArbitraryPrecisionIntegersINTEL,
+    UnstructuredLoopControlsINTEL,
+    FPGALoopControlsINTEL,
+    KernelAttributesINTEL,
+    FPGAKernelAttributesINTEL,
+    FPGAMemoryAccessesINTEL,
+    FPGAClusterAttributesINTEL,
+    LoopFuseINTEL,
+    FPGABufferLocationINTEL,
+    USMStorageClassesINTEL,
+    IOPipesINTEL,
+    BlockingPipesINTEL,
+    FPGARegINTEL,
+    AtomicFloat32AddEXT,
+    AtomicFloat64AddEXT,
+    LongConstantCompositeINTEL,
+};
+
+pub usingnamespace CpuFeature.feature_set_fns(Feature);
+
+pub const all_features = blk: {
+    @setEvalBranchQuota(2000);
+    const len = @typeInfo(Feature).Enum.fields.len;
+    std.debug.assert(len <= CpuFeature.Set.needed_bit_count);
+    var result: [len]CpuFeature = undefined;
+    result[@enumToInt(Feature.v1_1)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V version 1.1",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.v1_2)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V version 1.2",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_1,
+        }),
+    };
+    result[@enumToInt(Feature.v1_3)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V version 1.3",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_2,
+        }),
+    };
+    result[@enumToInt(Feature.v1_4)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V version 1.4",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+        }),
+    };
+    result[@enumToInt(Feature.v1_5)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V version 1.5",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_4,
+        }),
+    };
+    result[@enumToInt(Feature.SPV_AMD_shader_fragment_mask)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_AMD_shader_fragment_mask",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_AMD_gpu_shader_int16)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_AMD_gpu_shader_int16",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_AMD_gpu_shader_half_float)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_AMD_gpu_shader_half_float",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_AMD_texture_gather_bias_lod)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_AMD_texture_gather_bias_lod",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_AMD_shader_ballot)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_AMD_shader_ballot",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_AMD_gcn_shader)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_AMD_gcn_shader",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_AMD_shader_image_load_store_lod)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_AMD_shader_image_load_store_lod",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_AMD_shader_explicit_vertex_parameter)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_AMD_shader_explicit_vertex_parameter",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_AMD_shader_trinary_minmax)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_AMD_shader_trinary_minmax",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_AMD_gpu_shader_half_float_fetch)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_AMD_gpu_shader_half_float_fetch",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_GOOGLE_hlsl_functionality1)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_GOOGLE_hlsl_functionality1",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_GOOGLE_user_type)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_GOOGLE_user_type",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_GOOGLE_decorate_string)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_GOOGLE_decorate_string",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_demote_to_helper_invocation)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_demote_to_helper_invocation",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_descriptor_indexing)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_descriptor_indexing",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_fragment_fully_covered)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_fragment_fully_covered",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_shader_stencil_export)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_shader_stencil_export",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_physical_storage_buffer)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_physical_storage_buffer",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_shader_atomic_float_add)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_shader_atomic_float_add",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_shader_atomic_float_min_max)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_shader_atomic_float_min_max",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_shader_image_int64)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_shader_image_int64",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_fragment_shader_interlock)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_fragment_shader_interlock",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_fragment_invocation_density)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_fragment_invocation_density",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_EXT_shader_viewport_index_layer)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_EXT_shader_viewport_index_layer",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_loop_fuse)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_loop_fuse",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_fpga_dsp_control)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_fpga_dsp_control",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_fpga_reg)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_fpga_reg",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_fpga_memory_accesses)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_fpga_memory_accesses",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_fpga_loop_controls)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_fpga_loop_controls",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_io_pipes)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_io_pipes",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_unstructured_loop_controls)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_unstructured_loop_controls",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_blocking_pipes)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_blocking_pipes",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_device_side_avc_motion_estimation)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_device_side_avc_motion_estimation",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_fpga_memory_attributes)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_fpga_memory_attributes",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_fp_fast_math_mode)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_fp_fast_math_mode",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_media_block_io)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_media_block_io",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_shader_integer_functions2)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_shader_integer_functions2",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_subgroups)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_subgroups",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_fpga_cluster_attributes)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_fpga_cluster_attributes",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_kernel_attributes)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_kernel_attributes",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_INTEL_arbitrary_precision_integers)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_INTEL_arbitrary_precision_integers",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_8bit_storage)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_8bit_storage",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_shader_clock)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_shader_clock",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_device_group)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_device_group",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_16bit_storage)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_16bit_storage",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_variable_pointers)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_variable_pointers",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_no_integer_wrap_decoration)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_no_integer_wrap_decoration",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_subgroup_vote)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_subgroup_vote",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_multiview)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_multiview",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_shader_ballot)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_shader_ballot",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_vulkan_memory_model)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_vulkan_memory_model",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_physical_storage_buffer)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_physical_storage_buffer",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_workgroup_memory_explicit_layout)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_workgroup_memory_explicit_layout",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_fragment_shading_rate)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_fragment_shading_rate",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_shader_atomic_counter_ops)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_shader_atomic_counter_ops",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_shader_draw_parameters)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_shader_draw_parameters",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_storage_buffer_storage_class)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_storage_buffer_storage_class",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_linkonce_odr)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_linkonce_odr",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_terminate_invocation)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_terminate_invocation",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_non_semantic_info)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_non_semantic_info",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_post_depth_coverage)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_post_depth_coverage",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_expect_assume)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_expect_assume",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_ray_tracing)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_ray_tracing",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_ray_query)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_ray_query",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_KHR_float_controls)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_KHR_float_controls",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_viewport_array2)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_viewport_array2",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_shader_subgroup_partitioned)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_shader_subgroup_partitioned",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NVX_multiview_per_view_attributes)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NVX_multiview_per_view_attributes",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_ray_tracing)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_ray_tracing",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_shader_image_footprint)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_shader_image_footprint",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_shading_rate)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_shading_rate",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_stereo_view_rendering)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_stereo_view_rendering",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_compute_shader_derivatives)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_compute_shader_derivatives",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_shader_sm_builtins)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_shader_sm_builtins",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_mesh_shader)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_mesh_shader",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_geometry_shader_passthrough)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_geometry_shader_passthrough",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_fragment_shader_barycentric)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_fragment_shader_barycentric",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_cooperative_matrix)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_cooperative_matrix",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.SPV_NV_sample_mask_override_coverage)] = .{
+        .llvm_name = null,
+        .description = "SPIR-V extension SPV_NV_sample_mask_override_coverage",
+        .dependencies = featureSet(&[_]Feature{}),
+    };
+    result[@enumToInt(Feature.Matrix)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Matrix",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.Shader)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Shader",
+        .dependencies = featureSet(&[_]Feature{
+            .Matrix,
+        }),
+    };
+    result[@enumToInt(Feature.Geometry)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Geometry",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.Tessellation)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Tessellation",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.Addresses)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Addresses",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.Linkage)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Linkage",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.Kernel)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Kernel",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.Vector16)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Vector16",
+        .dependencies = featureSet(&[_]Feature{
+            .Kernel,
+        }),
+    };
+    result[@enumToInt(Feature.Float16Buffer)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Float16Buffer",
+        .dependencies = featureSet(&[_]Feature{
+            .Kernel,
+        }),
+    };
+    result[@enumToInt(Feature.Float16)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Float16",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.Float64)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Float64",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.Int64)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Int64",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.Int64Atomics)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Int64Atomics",
+        .dependencies = featureSet(&[_]Feature{
+            .Int64,
+        }),
+    };
+    result[@enumToInt(Feature.ImageBasic)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageBasic",
+        .dependencies = featureSet(&[_]Feature{
+            .Kernel,
+        }),
+    };
+    result[@enumToInt(Feature.ImageReadWrite)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageReadWrite",
+        .dependencies = featureSet(&[_]Feature{
+            .ImageBasic,
+        }),
+    };
+    result[@enumToInt(Feature.ImageMipmap)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageMipmap",
+        .dependencies = featureSet(&[_]Feature{
+            .ImageBasic,
+        }),
+    };
+    result[@enumToInt(Feature.Pipes)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Pipes",
+        .dependencies = featureSet(&[_]Feature{
+            .Kernel,
+        }),
+    };
+    result[@enumToInt(Feature.Groups)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Groups",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.DeviceEnqueue)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability DeviceEnqueue",
+        .dependencies = featureSet(&[_]Feature{
+            .Kernel,
+        }),
+    };
+    result[@enumToInt(Feature.LiteralSampler)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability LiteralSampler",
+        .dependencies = featureSet(&[_]Feature{
+            .Kernel,
+        }),
+    };
+    result[@enumToInt(Feature.AtomicStorage)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability AtomicStorage",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.Int16)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Int16",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.TessellationPointSize)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability TessellationPointSize",
+        .dependencies = featureSet(&[_]Feature{
+            .Tessellation,
+        }),
+    };
+    result[@enumToInt(Feature.GeometryPointSize)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GeometryPointSize",
+        .dependencies = featureSet(&[_]Feature{
+            .Geometry,
+        }),
+    };
+    result[@enumToInt(Feature.ImageGatherExtended)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageGatherExtended",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.StorageImageMultisample)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageImageMultisample",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.UniformBufferArrayDynamicIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability UniformBufferArrayDynamicIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.SampledImageArrayDynamicIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SampledImageArrayDynamicIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.StorageBufferArrayDynamicIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageBufferArrayDynamicIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.StorageImageArrayDynamicIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageImageArrayDynamicIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ClipDistance)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ClipDistance",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.CullDistance)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability CullDistance",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ImageCubeArray)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageCubeArray",
+        .dependencies = featureSet(&[_]Feature{
+            .SampledCubeArray,
+        }),
+    };
+    result[@enumToInt(Feature.SampleRateShading)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SampleRateShading",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ImageRect)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageRect",
+        .dependencies = featureSet(&[_]Feature{
+            .SampledRect,
+        }),
+    };
+    result[@enumToInt(Feature.SampledRect)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SampledRect",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.GenericPointer)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GenericPointer",
+        .dependencies = featureSet(&[_]Feature{
+            .Addresses,
+        }),
+    };
+    result[@enumToInt(Feature.Int8)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Int8",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.InputAttachment)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability InputAttachment",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.SparseResidency)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SparseResidency",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.MinLod)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability MinLod",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.Sampled1D)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Sampled1D",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.Image1D)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Image1D",
+        .dependencies = featureSet(&[_]Feature{
+            .Sampled1D,
+        }),
+    };
+    result[@enumToInt(Feature.SampledCubeArray)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SampledCubeArray",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.SampledBuffer)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SampledBuffer",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.ImageBuffer)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageBuffer",
+        .dependencies = featureSet(&[_]Feature{
+            .SampledBuffer,
+        }),
+    };
+    result[@enumToInt(Feature.ImageMSArray)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageMSArray",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.StorageImageExtendedFormats)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageImageExtendedFormats",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ImageQuery)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageQuery",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.DerivativeControl)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability DerivativeControl",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.InterpolationFunction)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability InterpolationFunction",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.TransformFeedback)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability TransformFeedback",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.GeometryStreams)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GeometryStreams",
+        .dependencies = featureSet(&[_]Feature{
+            .Geometry,
+        }),
+    };
+    result[@enumToInt(Feature.StorageImageReadWithoutFormat)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageImageReadWithoutFormat",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.StorageImageWriteWithoutFormat)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageImageWriteWithoutFormat",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.MultiViewport)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability MultiViewport",
+        .dependencies = featureSet(&[_]Feature{
+            .Geometry,
+        }),
+    };
+    result[@enumToInt(Feature.SubgroupDispatch)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SubgroupDispatch",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_1,
+            .DeviceEnqueue,
+        }),
+    };
+    result[@enumToInt(Feature.NamedBarrier)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability NamedBarrier",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_1,
+            .Kernel,
+        }),
+    };
+    result[@enumToInt(Feature.PipeStorage)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability PipeStorage",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_1,
+            .Pipes,
+        }),
+    };
+    result[@enumToInt(Feature.GroupNonUniform)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GroupNonUniform",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+        }),
+    };
+    result[@enumToInt(Feature.GroupNonUniformVote)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GroupNonUniformVote",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .GroupNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.GroupNonUniformArithmetic)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GroupNonUniformArithmetic",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .GroupNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.GroupNonUniformBallot)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GroupNonUniformBallot",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .GroupNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.GroupNonUniformShuffle)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GroupNonUniformShuffle",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .GroupNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.GroupNonUniformShuffleRelative)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GroupNonUniformShuffleRelative",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .GroupNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.GroupNonUniformClustered)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GroupNonUniformClustered",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .GroupNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.GroupNonUniformQuad)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GroupNonUniformQuad",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .GroupNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.ShaderLayer)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShaderLayer",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+        }),
+    };
+    result[@enumToInt(Feature.ShaderViewportIndex)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShaderViewportIndex",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+        }),
+    };
+    result[@enumToInt(Feature.FragmentShadingRateKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FragmentShadingRateKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.SubgroupBallotKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SubgroupBallotKHR",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.DrawParameters)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability DrawParameters",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.WorkgroupMemoryExplicitLayoutKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability WorkgroupMemoryExplicitLayoutKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.WorkgroupMemoryExplicitLayout8BitAccessKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability WorkgroupMemoryExplicitLayout8BitAccessKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .WorkgroupMemoryExplicitLayoutKHR,
+        }),
+    };
+    result[@enumToInt(Feature.WorkgroupMemoryExplicitLayout16BitAccessKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability WorkgroupMemoryExplicitLayout16BitAccessKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.SubgroupVoteKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SubgroupVoteKHR",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.StorageBuffer16BitAccess)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageBuffer16BitAccess",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+        }),
+    };
+    result[@enumToInt(Feature.StorageUniformBufferBlock16)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageUniformBufferBlock16",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+        }),
+    };
+    result[@enumToInt(Feature.UniformAndStorageBuffer16BitAccess)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability UniformAndStorageBuffer16BitAccess",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .StorageBuffer16BitAccess,
+            .StorageUniformBufferBlock16,
+        }),
+    };
+    result[@enumToInt(Feature.StorageUniform16)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageUniform16",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .StorageBuffer16BitAccess,
+            .StorageUniformBufferBlock16,
+        }),
+    };
+    result[@enumToInt(Feature.StoragePushConstant16)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StoragePushConstant16",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+        }),
+    };
+    result[@enumToInt(Feature.StorageInputOutput16)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageInputOutput16",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+        }),
+    };
+    result[@enumToInt(Feature.DeviceGroup)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability DeviceGroup",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+        }),
+    };
+    result[@enumToInt(Feature.MultiView)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability MultiView",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.VariablePointersStorageBuffer)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability VariablePointersStorageBuffer",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.VariablePointers)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability VariablePointers",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_3,
+            .VariablePointersStorageBuffer,
+        }),
+    };
+    result[@enumToInt(Feature.AtomicStorageOps)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability AtomicStorageOps",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.SampleMaskPostDepthCoverage)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SampleMaskPostDepthCoverage",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.StorageBuffer8BitAccess)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageBuffer8BitAccess",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+        }),
+    };
+    result[@enumToInt(Feature.UniformAndStorageBuffer8BitAccess)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability UniformAndStorageBuffer8BitAccess",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .StorageBuffer8BitAccess,
+        }),
+    };
+    result[@enumToInt(Feature.StoragePushConstant8)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StoragePushConstant8",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+        }),
+    };
+    result[@enumToInt(Feature.DenormPreserve)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability DenormPreserve",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_4,
+        }),
+    };
+    result[@enumToInt(Feature.DenormFlushToZero)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability DenormFlushToZero",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_4,
+        }),
+    };
+    result[@enumToInt(Feature.SignedZeroInfNanPreserve)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SignedZeroInfNanPreserve",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_4,
+        }),
+    };
+    result[@enumToInt(Feature.RoundingModeRTE)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RoundingModeRTE",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_4,
+        }),
+    };
+    result[@enumToInt(Feature.RoundingModeRTZ)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RoundingModeRTZ",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_4,
+        }),
+    };
+    result[@enumToInt(Feature.RayQueryProvisionalKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RayQueryProvisionalKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.RayQueryKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RayQueryKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.RayTraversalPrimitiveCullingKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RayTraversalPrimitiveCullingKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .RayQueryKHR,
+            .RayTracingKHR,
+        }),
+    };
+    result[@enumToInt(Feature.RayTracingKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RayTracingKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.Float16ImageAMD)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Float16ImageAMD",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ImageGatherBiasLodAMD)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageGatherBiasLodAMD",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.FragmentMaskAMD)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FragmentMaskAMD",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.StencilExportEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StencilExportEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ImageReadWriteLodAMD)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageReadWriteLodAMD",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.Int64ImageEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability Int64ImageEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ShaderClockKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShaderClockKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.SampleMaskOverrideCoverageNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SampleMaskOverrideCoverageNV",
+        .dependencies = featureSet(&[_]Feature{
+            .SampleRateShading,
+        }),
+    };
+    result[@enumToInt(Feature.GeometryShaderPassthroughNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GeometryShaderPassthroughNV",
+        .dependencies = featureSet(&[_]Feature{
+            .Geometry,
+        }),
+    };
+    result[@enumToInt(Feature.ShaderViewportIndexLayerEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShaderViewportIndexLayerEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .MultiViewport,
+        }),
+    };
+    result[@enumToInt(Feature.ShaderViewportIndexLayerNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShaderViewportIndexLayerNV",
+        .dependencies = featureSet(&[_]Feature{
+            .MultiViewport,
+        }),
+    };
+    result[@enumToInt(Feature.ShaderViewportMaskNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShaderViewportMaskNV",
+        .dependencies = featureSet(&[_]Feature{
+            .ShaderViewportIndexLayerNV,
+        }),
+    };
+    result[@enumToInt(Feature.ShaderStereoViewNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShaderStereoViewNV",
+        .dependencies = featureSet(&[_]Feature{
+            .ShaderViewportMaskNV,
+        }),
+    };
+    result[@enumToInt(Feature.PerViewAttributesNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability PerViewAttributesNV",
+        .dependencies = featureSet(&[_]Feature{
+            .MultiView,
+        }),
+    };
+    result[@enumToInt(Feature.FragmentFullyCoveredEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FragmentFullyCoveredEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.MeshShadingNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability MeshShadingNV",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ImageFootprintNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ImageFootprintNV",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FragmentBarycentricNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FragmentBarycentricNV",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.ComputeDerivativeGroupQuadsNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ComputeDerivativeGroupQuadsNV",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FragmentDensityEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FragmentDensityEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ShadingRateNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShadingRateNV",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.GroupNonUniformPartitionedNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability GroupNonUniformPartitionedNV",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.ShaderNonUniform)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShaderNonUniform",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ShaderNonUniformEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShaderNonUniformEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.RuntimeDescriptorArray)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RuntimeDescriptorArray",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.RuntimeDescriptorArrayEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RuntimeDescriptorArrayEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.InputAttachmentArrayDynamicIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability InputAttachmentArrayDynamicIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .InputAttachment,
+        }),
+    };
+    result[@enumToInt(Feature.InputAttachmentArrayDynamicIndexingEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability InputAttachmentArrayDynamicIndexingEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .InputAttachment,
+        }),
+    };
+    result[@enumToInt(Feature.UniformTexelBufferArrayDynamicIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability UniformTexelBufferArrayDynamicIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .SampledBuffer,
+        }),
+    };
+    result[@enumToInt(Feature.UniformTexelBufferArrayDynamicIndexingEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability UniformTexelBufferArrayDynamicIndexingEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .SampledBuffer,
+        }),
+    };
+    result[@enumToInt(Feature.StorageTexelBufferArrayDynamicIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageTexelBufferArrayDynamicIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ImageBuffer,
+        }),
+    };
+    result[@enumToInt(Feature.StorageTexelBufferArrayDynamicIndexingEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageTexelBufferArrayDynamicIndexingEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ImageBuffer,
+        }),
+    };
+    result[@enumToInt(Feature.UniformBufferArrayNonUniformIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability UniformBufferArrayNonUniformIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.UniformBufferArrayNonUniformIndexingEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability UniformBufferArrayNonUniformIndexingEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.SampledImageArrayNonUniformIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SampledImageArrayNonUniformIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.SampledImageArrayNonUniformIndexingEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SampledImageArrayNonUniformIndexingEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.StorageBufferArrayNonUniformIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageBufferArrayNonUniformIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.StorageBufferArrayNonUniformIndexingEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageBufferArrayNonUniformIndexingEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.StorageImageArrayNonUniformIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageImageArrayNonUniformIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.StorageImageArrayNonUniformIndexingEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageImageArrayNonUniformIndexingEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.InputAttachmentArrayNonUniformIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability InputAttachmentArrayNonUniformIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .InputAttachment,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.InputAttachmentArrayNonUniformIndexingEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability InputAttachmentArrayNonUniformIndexingEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .InputAttachment,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.UniformTexelBufferArrayNonUniformIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability UniformTexelBufferArrayNonUniformIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .SampledBuffer,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.UniformTexelBufferArrayNonUniformIndexingEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability UniformTexelBufferArrayNonUniformIndexingEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .SampledBuffer,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.StorageTexelBufferArrayNonUniformIndexing)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageTexelBufferArrayNonUniformIndexing",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ImageBuffer,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.StorageTexelBufferArrayNonUniformIndexingEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability StorageTexelBufferArrayNonUniformIndexingEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .ImageBuffer,
+            .ShaderNonUniform,
+        }),
+    };
+    result[@enumToInt(Feature.RayTracingNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RayTracingNV",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.VulkanMemoryModel)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability VulkanMemoryModel",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+        }),
+    };
+    result[@enumToInt(Feature.VulkanMemoryModelKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability VulkanMemoryModelKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+        }),
+    };
+    result[@enumToInt(Feature.VulkanMemoryModelDeviceScope)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability VulkanMemoryModelDeviceScope",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+        }),
+    };
+    result[@enumToInt(Feature.VulkanMemoryModelDeviceScopeKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability VulkanMemoryModelDeviceScopeKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+        }),
+    };
+    result[@enumToInt(Feature.PhysicalStorageBufferAddresses)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability PhysicalStorageBufferAddresses",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.PhysicalStorageBufferAddressesEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability PhysicalStorageBufferAddressesEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .v1_5,
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ComputeDerivativeGroupLinearNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ComputeDerivativeGroupLinearNV",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.RayTracingProvisionalKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RayTracingProvisionalKHR",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.CooperativeMatrixNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability CooperativeMatrixNV",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.FragmentShaderSampleInterlockEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FragmentShaderSampleInterlockEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.FragmentShaderShadingRateInterlockEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FragmentShaderShadingRateInterlockEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.ShaderSMBuiltinsNV)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ShaderSMBuiltinsNV",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.FragmentShaderPixelInterlockEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FragmentShaderPixelInterlockEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.DemoteToHelperInvocationEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability DemoteToHelperInvocationEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.SubgroupShuffleINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SubgroupShuffleINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.SubgroupBufferBlockIOINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SubgroupBufferBlockIOINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.SubgroupImageBlockIOINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SubgroupImageBlockIOINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.SubgroupImageMediaBlockIOINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SubgroupImageMediaBlockIOINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.RoundToInfinityINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability RoundToInfinityINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FloatingPointModeINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FloatingPointModeINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.IntegerFunctions2INTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability IntegerFunctions2INTEL",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.FunctionPointersINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FunctionPointersINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.IndirectReferencesINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability IndirectReferencesINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.AsmINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability AsmINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.AtomicFloat32MinMaxEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability AtomicFloat32MinMaxEXT",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.AtomicFloat64MinMaxEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability AtomicFloat64MinMaxEXT",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.AtomicFloat16MinMaxEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability AtomicFloat16MinMaxEXT",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.VectorComputeINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability VectorComputeINTEL",
+        .dependencies = featureSet(&[_]Feature{
+            .VectorAnyINTEL,
+        }),
+    };
+    result[@enumToInt(Feature.VectorAnyINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability VectorAnyINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.ExpectAssumeKHR)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ExpectAssumeKHR",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.SubgroupAvcMotionEstimationINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SubgroupAvcMotionEstimationINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.SubgroupAvcMotionEstimationIntraINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SubgroupAvcMotionEstimationIntraINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.SubgroupAvcMotionEstimationChromaINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability SubgroupAvcMotionEstimationChromaINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.VariableLengthArrayINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability VariableLengthArrayINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FunctionFloatControlINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FunctionFloatControlINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FPGAMemoryAttributesINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FPGAMemoryAttributesINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FPFastMathModeINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FPFastMathModeINTEL",
+        .dependencies = featureSet(&[_]Feature{
+            .Kernel,
+        }),
+    };
+    result[@enumToInt(Feature.ArbitraryPrecisionIntegersINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability ArbitraryPrecisionIntegersINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.UnstructuredLoopControlsINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability UnstructuredLoopControlsINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FPGALoopControlsINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FPGALoopControlsINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.KernelAttributesINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability KernelAttributesINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FPGAKernelAttributesINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FPGAKernelAttributesINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FPGAMemoryAccessesINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FPGAMemoryAccessesINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FPGAClusterAttributesINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FPGAClusterAttributesINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.LoopFuseINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability LoopFuseINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FPGABufferLocationINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FPGABufferLocationINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.USMStorageClassesINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability USMStorageClassesINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.IOPipesINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability IOPipesINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.BlockingPipesINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability BlockingPipesINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.FPGARegINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability FPGARegINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    result[@enumToInt(Feature.AtomicFloat32AddEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability AtomicFloat32AddEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.AtomicFloat64AddEXT)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability AtomicFloat64AddEXT",
+        .dependencies = featureSet(&[_]Feature{
+            .Shader,
+        }),
+    };
+    result[@enumToInt(Feature.LongConstantCompositeINTEL)] = .{
+        .llvm_name = null,
+        .description = "Enable SPIR-V capability LongConstantCompositeINTEL",
+        .dependencies = featureSet(&[_]Feature{
+        }),
+    };
+    const ti = @typeInfo(Feature);
+    for (result) |*elem, i| {
+        elem.index = i;
+        elem.name = ti.Enum.fields[i].name;
+    }
+    break :blk result;
+};
lib/std/target.zig
@@ -431,6 +431,7 @@ pub const Target = struct {
     pub const powerpc = @import("target/powerpc.zig");
     pub const riscv = @import("target/riscv.zig");
     pub const sparc = @import("target/sparc.zig");
+    pub const spirv = @import("target/spirv.zig");
     pub const systemz = @import("target/systemz.zig");
     pub const ve = @import("target/ve.zig");
     pub const wasm = @import("target/wasm.zig");
@@ -594,7 +595,7 @@ pub const Target = struct {
             pub const Set = struct {
                 ints: [usize_count]usize,
 
-                pub const needed_bit_count = 172;
+                pub const needed_bit_count = 288;
                 pub const byte_count = (needed_bit_count + 7) / 8;
                 pub const usize_count = (byte_count + (@sizeOf(usize) - 1)) / @sizeOf(usize);
                 pub const Index = std.math.Log2Int(std.meta.Int(.unsigned, usize_count * @bitSizeOf(usize)));
@@ -1123,6 +1124,7 @@ pub const Target = struct {
                     .amdgcn => &amdgpu.all_features,
                     .riscv32, .riscv64 => &riscv.all_features,
                     .sparc, .sparcv9, .sparcel => &sparc.all_features,
+                    .spirv32, .spirv64 => &spirv.all_features,
                     .s390x => &systemz.all_features,
                     .i386, .x86_64 => &x86.all_features,
                     .nvptx, .nvptx64 => &nvptx.all_features,