diff --git a/mlir/include/mlir/Dialect/SPIRV/SPIRVBase.td b/mlir/include/mlir/Dialect/SPIRV/SPIRVBase.td --- a/mlir/include/mlir/Dialect/SPIRV/SPIRVBase.td +++ b/mlir/include/mlir/Dialect/SPIRV/SPIRVBase.td @@ -200,29 +200,48 @@ def SPV_KHR_post_depth_coverage : StrEnumAttrCase<"SPV_KHR_post_depth_coverage">; def SPV_KHR_shader_atomic_counter_ops : StrEnumAttrCase<"SPV_KHR_shader_atomic_counter_ops">; def SPV_KHR_shader_ballot : StrEnumAttrCase<"SPV_KHR_shader_ballot">; +def SPV_KHR_shader_clock : StrEnumAttrCase<"SPV_KHR_shader_clock">; def SPV_KHR_shader_draw_parameters : StrEnumAttrCase<"SPV_KHR_shader_draw_parameters">; def SPV_KHR_storage_buffer_storage_class : StrEnumAttrCase<"SPV_KHR_storage_buffer_storage_class">; def SPV_KHR_subgroup_vote : StrEnumAttrCase<"SPV_KHR_subgroup_vote">; def SPV_KHR_variable_pointers : StrEnumAttrCase<"SPV_KHR_variable_pointers">; def SPV_KHR_vulkan_memory_model : StrEnumAttrCase<"SPV_KHR_vulkan_memory_model">; +def SPV_EXT_demote_to_helper_invocation : StrEnumAttrCase<"SPV_EXT_demote_to_helper_invocation">; +def SPV_EXT_descriptor_indexing : StrEnumAttrCase<"SPV_EXT_descriptor_indexing">; def SPV_EXT_fragment_fully_covered : StrEnumAttrCase<"SPV_EXT_fragment_fully_covered">; def SPV_EXT_fragment_invocation_density : StrEnumAttrCase<"SPV_EXT_fragment_invocation_density">; def SPV_EXT_fragment_shader_interlock : StrEnumAttrCase<"SPV_EXT_fragment_shader_interlock">; def SPV_EXT_physical_storage_buffer : StrEnumAttrCase<"SPV_EXT_physical_storage_buffer">; def SPV_EXT_shader_stencil_export : StrEnumAttrCase<"SPV_EXT_shader_stencil_export">; +def SPV_EXT_shader_viewport_index_layer : StrEnumAttrCase<"SPV_EXT_shader_viewport_index_layer">; +def SPV_AMD_gpu_shader_half_float_fetch : StrEnumAttrCase<"SPV_AMD_gpu_shader_half_float_fetch">; +def SPV_AMD_shader_ballot : StrEnumAttrCase<"SPV_AMD_shader_ballot">; def SPV_AMD_shader_explicit_vertex_parameter : StrEnumAttrCase<"SPV_AMD_shader_explicit_vertex_parameter">; +def SPV_AMD_shader_fragment_mask : StrEnumAttrCase<"SPV_AMD_shader_fragment_mask">; +def SPV_AMD_shader_image_load_store_lod : StrEnumAttrCase<"SPV_AMD_shader_image_load_store_lod">; +def SPV_AMD_texture_gather_bias_lod : StrEnumAttrCase<"SPV_AMD_texture_gather_bias_lod">; +def SPV_GOOGLE_decorate_string : StrEnumAttrCase<"SPV_GOOGLE_decorate_string">; +def SPV_GOOGLE_hlsl_functionality1 : StrEnumAttrCase<"SPV_GOOGLE_hlsl_functionality1">; def SPV_GOOGLE_user_type : StrEnumAttrCase<"SPV_GOOGLE_user_type">; +def SPV_INTEL_device_side_avc_motion_estimation : StrEnumAttrCase<"SPV_INTEL_device_side_avc_motion_estimation">; +def SPV_INTEL_media_block_io : StrEnumAttrCase<"SPV_INTEL_media_block_io">; +def SPV_INTEL_shader_integer_functions2 : StrEnumAttrCase<"SPV_INTEL_shader_integer_functions2">; +def SPV_INTEL_subgroups : StrEnumAttrCase<"SPV_INTEL_subgroups">; + def SPV_NV_compute_shader_derivatives : StrEnumAttrCase<"SPV_NV_compute_shader_derivatives">; +def SPV_NV_cooperative_matrix : StrEnumAttrCase<"SPV_NV_cooperative_matrix">; def SPV_NV_fragment_shader_barycentric : StrEnumAttrCase<"SPV_NV_fragment_shader_barycentric">; def SPV_NV_geometry_shader_passthrough : StrEnumAttrCase<"SPV_NV_geometry_shader_passthrough">; def SPV_NV_mesh_shader : StrEnumAttrCase<"SPV_NV_mesh_shader">; def SPV_NV_ray_tracing : StrEnumAttrCase<"SPV_NV_ray_tracing">; def SPV_NV_sample_mask_override_coverage : StrEnumAttrCase<"SPV_NV_sample_mask_override_coverage">; +def SPV_NV_shader_image_footprint : StrEnumAttrCase<"SPV_NV_shader_image_footprint">; def SPV_NV_shader_sm_builtins : StrEnumAttrCase<"SPV_NV_shader_sm_builtins">; +def SPV_NV_shader_subgroup_partitioned : StrEnumAttrCase<"SPV_NV_shader_subgroup_partitioned">; def SPV_NV_shading_rate : StrEnumAttrCase<"SPV_NV_shading_rate">; def SPV_NV_stereo_view_rendering : StrEnumAttrCase<"SPV_NV_stereo_view_rendering">; def SPV_NV_viewport_array2 : StrEnumAttrCase<"SPV_NV_viewport_array2">; @@ -235,17 +254,26 @@ SPV_KHR_float_controls, SPV_KHR_physical_storage_buffer, SPV_KHR_multiview, SPV_KHR_no_integer_wrap_decoration, SPV_KHR_post_depth_coverage, SPV_KHR_shader_atomic_counter_ops, SPV_KHR_shader_ballot, - SPV_KHR_shader_draw_parameters, SPV_KHR_storage_buffer_storage_class, - SPV_KHR_subgroup_vote, SPV_KHR_variable_pointers, - SPV_KHR_vulkan_memory_model, SPV_EXT_fragment_fully_covered, - SPV_EXT_fragment_invocation_density, SPV_EXT_fragment_shader_interlock, - SPV_EXT_physical_storage_buffer, SPV_EXT_shader_stencil_export, - SPV_AMD_shader_explicit_vertex_parameter, SPV_GOOGLE_user_type, - SPV_NV_compute_shader_derivatives, SPV_NV_fragment_shader_barycentric, - SPV_NV_geometry_shader_passthrough, SPV_NV_mesh_shader, SPV_NV_ray_tracing, - SPV_NV_sample_mask_override_coverage, SPV_NV_shader_sm_builtins, - SPV_NV_shading_rate, SPV_NV_stereo_view_rendering, - SPV_NV_viewport_array2, SPV_NVX_multiview_per_view_attributes, + SPV_KHR_shader_clock, SPV_KHR_shader_draw_parameters, + SPV_KHR_storage_buffer_storage_class, SPV_KHR_subgroup_vote, + SPV_KHR_variable_pointers, SPV_KHR_vulkan_memory_model, + SPV_EXT_demote_to_helper_invocation, SPV_EXT_descriptor_indexing, + SPV_EXT_fragment_fully_covered, SPV_EXT_fragment_invocation_density, + SPV_EXT_fragment_shader_interlock, SPV_EXT_physical_storage_buffer, + SPV_EXT_shader_stencil_export, SPV_EXT_shader_viewport_index_layer, + SPV_AMD_gpu_shader_half_float_fetch, SPV_AMD_shader_ballot, + SPV_AMD_shader_explicit_vertex_parameter, SPV_AMD_shader_fragment_mask, + SPV_AMD_shader_image_load_store_lod, SPV_AMD_texture_gather_bias_lod, + SPV_GOOGLE_decorate_string, SPV_GOOGLE_hlsl_functionality1, SPV_GOOGLE_user_type, + SPV_INTEL_device_side_avc_motion_estimation, SPV_INTEL_media_block_io, + SPV_INTEL_shader_integer_functions2, SPV_INTEL_subgroups, + SPV_NV_compute_shader_derivatives, SPV_NV_cooperative_matrix, + SPV_NV_fragment_shader_barycentric, SPV_NV_geometry_shader_passthrough, + SPV_NV_mesh_shader, SPV_NV_ray_tracing, SPV_NV_sample_mask_override_coverage, + SPV_NV_shader_image_footprint, SPV_NV_shader_sm_builtins, + SPV_NV_shader_subgroup_partitioned, SPV_NV_shading_rate, + SPV_NV_stereo_view_rendering, SPV_NV_viewport_array2, + SPV_NVX_multiview_per_view_attributes ]> { let cppNamespace = "::mlir::spirv"; } @@ -257,209 +285,707 @@ // Begin enum section. Generated from SPIR-V spec; DO NOT MODIFY! def SPV_C_Matrix : I32EnumAttrCase<"Matrix", 0>; -def SPV_C_Shader : I32EnumAttrCase<"Shader", 1>; -def SPV_C_Geometry : I32EnumAttrCase<"Geometry", 2>; -def SPV_C_Tessellation : I32EnumAttrCase<"Tessellation", 3>; def SPV_C_Addresses : I32EnumAttrCase<"Addresses", 4>; def SPV_C_Linkage : I32EnumAttrCase<"Linkage", 5>; def SPV_C_Kernel : I32EnumAttrCase<"Kernel", 6>; -def SPV_C_Vector16 : I32EnumAttrCase<"Vector16", 7>; -def SPV_C_Float16Buffer : I32EnumAttrCase<"Float16Buffer", 8>; def SPV_C_Float16 : I32EnumAttrCase<"Float16", 9>; def SPV_C_Float64 : I32EnumAttrCase<"Float64", 10>; def SPV_C_Int64 : I32EnumAttrCase<"Int64", 11>; -def SPV_C_Int64Atomics : I32EnumAttrCase<"Int64Atomics", 12>; -def SPV_C_ImageBasic : I32EnumAttrCase<"ImageBasic", 13>; -def SPV_C_ImageReadWrite : I32EnumAttrCase<"ImageReadWrite", 14>; -def SPV_C_ImageMipmap : I32EnumAttrCase<"ImageMipmap", 15>; -def SPV_C_Pipes : I32EnumAttrCase<"Pipes", 17>; -def SPV_C_Groups : I32EnumAttrCase<"Groups", 18>; -def SPV_C_DeviceEnqueue : I32EnumAttrCase<"DeviceEnqueue", 19>; -def SPV_C_LiteralSampler : I32EnumAttrCase<"LiteralSampler", 20>; -def SPV_C_AtomicStorage : I32EnumAttrCase<"AtomicStorage", 21>; +def SPV_C_Groups : I32EnumAttrCase<"Groups", 18> { + list availability = [ + Extension<[SPV_AMD_shader_ballot]> + ]; +} def SPV_C_Int16 : I32EnumAttrCase<"Int16", 22>; -def SPV_C_TessellationPointSize : I32EnumAttrCase<"TessellationPointSize", 23>; -def SPV_C_GeometryPointSize : I32EnumAttrCase<"GeometryPointSize", 24>; -def SPV_C_ImageGatherExtended : I32EnumAttrCase<"ImageGatherExtended", 25>; -def SPV_C_StorageImageMultisample : I32EnumAttrCase<"StorageImageMultisample", 27>; -def SPV_C_UniformBufferArrayDynamicIndexing : I32EnumAttrCase<"UniformBufferArrayDynamicIndexing", 28>; -def SPV_C_SampledImageArrayDynamicIndexing : I32EnumAttrCase<"SampledImageArrayDynamicIndexing", 29>; -def SPV_C_StorageBufferArrayDynamicIndexing : I32EnumAttrCase<"StorageBufferArrayDynamicIndexing", 30>; -def SPV_C_StorageImageArrayDynamicIndexing : I32EnumAttrCase<"StorageImageArrayDynamicIndexing", 31>; -def SPV_C_ClipDistance : I32EnumAttrCase<"ClipDistance", 32>; -def SPV_C_CullDistance : I32EnumAttrCase<"CullDistance", 33>; -def SPV_C_ImageCubeArray : I32EnumAttrCase<"ImageCubeArray", 34>; -def SPV_C_SampleRateShading : I32EnumAttrCase<"SampleRateShading", 35>; -def SPV_C_ImageRect : I32EnumAttrCase<"ImageRect", 36>; -def SPV_C_SampledRect : I32EnumAttrCase<"SampledRect", 37>; -def SPV_C_GenericPointer : I32EnumAttrCase<"GenericPointer", 38>; def SPV_C_Int8 : I32EnumAttrCase<"Int8", 39>; -def SPV_C_InputAttachment : I32EnumAttrCase<"InputAttachment", 40>; -def SPV_C_SparseResidency : I32EnumAttrCase<"SparseResidency", 41>; -def SPV_C_MinLod : I32EnumAttrCase<"MinLod", 42>; def SPV_C_Sampled1D : I32EnumAttrCase<"Sampled1D", 43>; -def SPV_C_Image1D : I32EnumAttrCase<"Image1D", 44>; -def SPV_C_SampledCubeArray : I32EnumAttrCase<"SampledCubeArray", 45>; def SPV_C_SampledBuffer : I32EnumAttrCase<"SampledBuffer", 46>; -def SPV_C_ImageBuffer : I32EnumAttrCase<"ImageBuffer", 47>; -def SPV_C_ImageMSArray : I32EnumAttrCase<"ImageMSArray", 48>; -def SPV_C_StorageImageExtendedFormats : I32EnumAttrCase<"StorageImageExtendedFormats", 49>; -def SPV_C_ImageQuery : I32EnumAttrCase<"ImageQuery", 50>; -def SPV_C_DerivativeControl : I32EnumAttrCase<"DerivativeControl", 51>; -def SPV_C_InterpolationFunction : I32EnumAttrCase<"InterpolationFunction", 52>; -def SPV_C_TransformFeedback : I32EnumAttrCase<"TransformFeedback", 53>; -def SPV_C_GeometryStreams : I32EnumAttrCase<"GeometryStreams", 54>; -def SPV_C_StorageImageReadWithoutFormat : I32EnumAttrCase<"StorageImageReadWithoutFormat", 55>; -def SPV_C_StorageImageWriteWithoutFormat : I32EnumAttrCase<"StorageImageWriteWithoutFormat", 56>; -def SPV_C_MultiViewport : I32EnumAttrCase<"MultiViewport", 57>; -def SPV_C_SubgroupDispatch : I32EnumAttrCase<"SubgroupDispatch", 58>; -def SPV_C_NamedBarrier : I32EnumAttrCase<"NamedBarrier", 59>; -def SPV_C_PipeStorage : I32EnumAttrCase<"PipeStorage", 60>; -def SPV_C_GroupNonUniform : I32EnumAttrCase<"GroupNonUniform", 61>; -def SPV_C_GroupNonUniformVote : I32EnumAttrCase<"GroupNonUniformVote", 62>; -def SPV_C_GroupNonUniformArithmetic : I32EnumAttrCase<"GroupNonUniformArithmetic", 63>; -def SPV_C_GroupNonUniformBallot : I32EnumAttrCase<"GroupNonUniformBallot", 64>; -def SPV_C_GroupNonUniformShuffle : I32EnumAttrCase<"GroupNonUniformShuffle", 65>; -def SPV_C_GroupNonUniformShuffleRelative : I32EnumAttrCase<"GroupNonUniformShuffleRelative", 66>; -def SPV_C_GroupNonUniformClustered : I32EnumAttrCase<"GroupNonUniformClustered", 67>; -def SPV_C_GroupNonUniformQuad : I32EnumAttrCase<"GroupNonUniformQuad", 68>; -def SPV_C_ShaderLayer : I32EnumAttrCase<"ShaderLayer", 69>; -def SPV_C_ShaderViewportIndex : I32EnumAttrCase<"ShaderViewportIndex", 70>; -def SPV_C_SubgroupBallotKHR : I32EnumAttrCase<"SubgroupBallotKHR", 4423>; -def SPV_C_DrawParameters : I32EnumAttrCase<"DrawParameters", 4427>; -def SPV_C_SubgroupVoteKHR : I32EnumAttrCase<"SubgroupVoteKHR", 4431>; -def SPV_C_StorageBuffer16BitAccess : I32EnumAttrCase<"StorageBuffer16BitAccess", 4433>; -def SPV_C_StorageUniform16 : I32EnumAttrCase<"StorageUniform16", 4434>; -def SPV_C_StoragePushConstant16 : I32EnumAttrCase<"StoragePushConstant16", 4435>; -def SPV_C_StorageInputOutput16 : I32EnumAttrCase<"StorageInputOutput16", 4436>; -def SPV_C_DeviceGroup : I32EnumAttrCase<"DeviceGroup", 4437>; -def SPV_C_MultiView : I32EnumAttrCase<"MultiView", 4439>; -def SPV_C_VariablePointersStorageBuffer : I32EnumAttrCase<"VariablePointersStorageBuffer", 4441>; -def SPV_C_VariablePointers : I32EnumAttrCase<"VariablePointers", 4442>; -def SPV_C_AtomicStorageOps : I32EnumAttrCase<"AtomicStorageOps", 4445>; -def SPV_C_SampleMaskPostDepthCoverage : I32EnumAttrCase<"SampleMaskPostDepthCoverage", 4447>; -def SPV_C_StorageBuffer8BitAccess : I32EnumAttrCase<"StorageBuffer8BitAccess", 4448>; -def SPV_C_UniformAndStorageBuffer8BitAccess : I32EnumAttrCase<"UniformAndStorageBuffer8BitAccess", 4449>; -def SPV_C_StoragePushConstant8 : I32EnumAttrCase<"StoragePushConstant8", 4450>; -def SPV_C_DenormPreserve : I32EnumAttrCase<"DenormPreserve", 4464>; -def SPV_C_DenormFlushToZero : I32EnumAttrCase<"DenormFlushToZero", 4465>; -def SPV_C_SignedZeroInfNanPreserve : I32EnumAttrCase<"SignedZeroInfNanPreserve", 4466>; -def SPV_C_RoundingModeRTE : I32EnumAttrCase<"RoundingModeRTE", 4467>; -def SPV_C_RoundingModeRTZ : I32EnumAttrCase<"RoundingModeRTZ", 4468>; -def SPV_C_Float16ImageAMD : I32EnumAttrCase<"Float16ImageAMD", 5008>; -def SPV_C_ImageGatherBiasLodAMD : I32EnumAttrCase<"ImageGatherBiasLodAMD", 5009>; -def SPV_C_FragmentMaskAMD : I32EnumAttrCase<"FragmentMaskAMD", 5010>; -def SPV_C_StencilExportEXT : I32EnumAttrCase<"StencilExportEXT", 5013>; -def SPV_C_ImageReadWriteLodAMD : I32EnumAttrCase<"ImageReadWriteLodAMD", 5015>; -def SPV_C_ShaderClockKHR : I32EnumAttrCase<"ShaderClockKHR", 5055>; -def SPV_C_SampleMaskOverrideCoverageNV : I32EnumAttrCase<"SampleMaskOverrideCoverageNV", 5249>; -def SPV_C_GeometryShaderPassthroughNV : I32EnumAttrCase<"GeometryShaderPassthroughNV", 5251>; -def SPV_C_ShaderViewportIndexLayerEXT : I32EnumAttrCase<"ShaderViewportIndexLayerEXT", 5254>; -def SPV_C_ShaderViewportMaskNV : I32EnumAttrCase<"ShaderViewportMaskNV", 5255>; -def SPV_C_ShaderStereoViewNV : I32EnumAttrCase<"ShaderStereoViewNV", 5259>; -def SPV_C_PerViewAttributesNV : I32EnumAttrCase<"PerViewAttributesNV", 5260>; -def SPV_C_FragmentFullyCoveredEXT : I32EnumAttrCase<"FragmentFullyCoveredEXT", 5265>; -def SPV_C_MeshShadingNV : I32EnumAttrCase<"MeshShadingNV", 5266>; -def SPV_C_ImageFootprintNV : I32EnumAttrCase<"ImageFootprintNV", 5282>; -def SPV_C_FragmentBarycentricNV : I32EnumAttrCase<"FragmentBarycentricNV", 5284>; -def SPV_C_ComputeDerivativeGroupQuadsNV : I32EnumAttrCase<"ComputeDerivativeGroupQuadsNV", 5288>; -def SPV_C_FragmentDensityEXT : I32EnumAttrCase<"FragmentDensityEXT", 5291>; -def SPV_C_GroupNonUniformPartitionedNV : I32EnumAttrCase<"GroupNonUniformPartitionedNV", 5297>; -def SPV_C_ShaderNonUniform : I32EnumAttrCase<"ShaderNonUniform", 5301>; -def SPV_C_RuntimeDescriptorArray : I32EnumAttrCase<"RuntimeDescriptorArray", 5302>; -def SPV_C_InputAttachmentArrayDynamicIndexing : I32EnumAttrCase<"InputAttachmentArrayDynamicIndexing", 5303>; -def SPV_C_UniformTexelBufferArrayDynamicIndexing : I32EnumAttrCase<"UniformTexelBufferArrayDynamicIndexing", 5304>; -def SPV_C_StorageTexelBufferArrayDynamicIndexing : I32EnumAttrCase<"StorageTexelBufferArrayDynamicIndexing", 5305>; -def SPV_C_UniformBufferArrayNonUniformIndexing : I32EnumAttrCase<"UniformBufferArrayNonUniformIndexing", 5306>; -def SPV_C_SampledImageArrayNonUniformIndexing : I32EnumAttrCase<"SampledImageArrayNonUniformIndexing", 5307>; -def SPV_C_StorageBufferArrayNonUniformIndexing : I32EnumAttrCase<"StorageBufferArrayNonUniformIndexing", 5308>; -def SPV_C_StorageImageArrayNonUniformIndexing : I32EnumAttrCase<"StorageImageArrayNonUniformIndexing", 5309>; -def SPV_C_InputAttachmentArrayNonUniformIndexing : I32EnumAttrCase<"InputAttachmentArrayNonUniformIndexing", 5310>; -def SPV_C_UniformTexelBufferArrayNonUniformIndexing : I32EnumAttrCase<"UniformTexelBufferArrayNonUniformIndexing", 5311>; -def SPV_C_StorageTexelBufferArrayNonUniformIndexing : I32EnumAttrCase<"StorageTexelBufferArrayNonUniformIndexing", 5312>; -def SPV_C_RayTracingNV : I32EnumAttrCase<"RayTracingNV", 5340>; -def SPV_C_VulkanMemoryModel : I32EnumAttrCase<"VulkanMemoryModel", 5345>; -def SPV_C_VulkanMemoryModelDeviceScope : I32EnumAttrCase<"VulkanMemoryModelDeviceScope", 5346>; -def SPV_C_PhysicalStorageBufferAddresses : I32EnumAttrCase<"PhysicalStorageBufferAddresses", 5347>; -def SPV_C_ComputeDerivativeGroupLinearNV : I32EnumAttrCase<"ComputeDerivativeGroupLinearNV", 5350>; -def SPV_C_CooperativeMatrixNV : I32EnumAttrCase<"CooperativeMatrixNV", 5357>; -def SPV_C_FragmentShaderSampleInterlockEXT : I32EnumAttrCase<"FragmentShaderSampleInterlockEXT", 5363>; -def SPV_C_FragmentShaderShadingRateInterlockEXT : I32EnumAttrCase<"FragmentShaderShadingRateInterlockEXT", 5372>; -def SPV_C_ShaderSMBuiltinsNV : I32EnumAttrCase<"ShaderSMBuiltinsNV", 5373>; -def SPV_C_FragmentShaderPixelInterlockEXT : I32EnumAttrCase<"FragmentShaderPixelInterlockEXT", 5378>; -def SPV_C_DemoteToHelperInvocationEXT : I32EnumAttrCase<"DemoteToHelperInvocationEXT", 5379>; -def SPV_C_SubgroupShuffleINTEL : I32EnumAttrCase<"SubgroupShuffleINTEL", 5568>; -def SPV_C_SubgroupBufferBlockIOINTEL : I32EnumAttrCase<"SubgroupBufferBlockIOINTEL", 5569>; -def SPV_C_SubgroupImageBlockIOINTEL : I32EnumAttrCase<"SubgroupImageBlockIOINTEL", 5570>; -def SPV_C_SubgroupImageMediaBlockIOINTEL : I32EnumAttrCase<"SubgroupImageMediaBlockIOINTEL", 5579>; -def SPV_C_IntegerFunctions2INTEL : I32EnumAttrCase<"IntegerFunctions2INTEL", 5584>; -def SPV_C_SubgroupAvcMotionEstimationINTEL : I32EnumAttrCase<"SubgroupAvcMotionEstimationINTEL", 5696>; -def SPV_C_SubgroupAvcMotionEstimationIntraINTEL : I32EnumAttrCase<"SubgroupAvcMotionEstimationIntraINTEL", 5697>; -def SPV_C_SubgroupAvcMotionEstimationChromaINTEL : I32EnumAttrCase<"SubgroupAvcMotionEstimationChromaINTEL", 5698>; +def SPV_C_GroupNonUniform : I32EnumAttrCase<"GroupNonUniform", 61> { + list availability = [ + MinVersion + ]; +} +def SPV_C_ShaderLayer : I32EnumAttrCase<"ShaderLayer", 69> { + list availability = [ + MinVersion + ]; +} +def SPV_C_ShaderViewportIndex : I32EnumAttrCase<"ShaderViewportIndex", 70> { + list availability = [ + MinVersion + ]; +} +def SPV_C_SubgroupBallotKHR : I32EnumAttrCase<"SubgroupBallotKHR", 4423> { + list availability = [ + Extension<[SPV_KHR_shader_ballot]> + ]; +} +def SPV_C_SubgroupVoteKHR : I32EnumAttrCase<"SubgroupVoteKHR", 4431> { + list availability = [ + Extension<[SPV_KHR_subgroup_vote]> + ]; +} +def SPV_C_StorageBuffer16BitAccess : I32EnumAttrCase<"StorageBuffer16BitAccess", 4433> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_16bit_storage]> + ]; +} +def SPV_C_StoragePushConstant16 : I32EnumAttrCase<"StoragePushConstant16", 4435> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_16bit_storage]> + ]; +} +def SPV_C_StorageInputOutput16 : I32EnumAttrCase<"StorageInputOutput16", 4436> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_16bit_storage]> + ]; +} +def SPV_C_DeviceGroup : I32EnumAttrCase<"DeviceGroup", 4437> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_device_group]> + ]; +} +def SPV_C_AtomicStorageOps : I32EnumAttrCase<"AtomicStorageOps", 4445> { + list availability = [ + Extension<[SPV_KHR_shader_atomic_counter_ops]> + ]; +} +def SPV_C_SampleMaskPostDepthCoverage : I32EnumAttrCase<"SampleMaskPostDepthCoverage", 4447> { + list availability = [ + Extension<[SPV_KHR_post_depth_coverage]> + ]; +} +def SPV_C_StorageBuffer8BitAccess : I32EnumAttrCase<"StorageBuffer8BitAccess", 4448> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_8bit_storage]> + ]; +} +def SPV_C_StoragePushConstant8 : I32EnumAttrCase<"StoragePushConstant8", 4450> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_8bit_storage]> + ]; +} +def SPV_C_DenormPreserve : I32EnumAttrCase<"DenormPreserve", 4464> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_float_controls]> + ]; +} +def SPV_C_DenormFlushToZero : I32EnumAttrCase<"DenormFlushToZero", 4465> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_float_controls]> + ]; +} +def SPV_C_SignedZeroInfNanPreserve : I32EnumAttrCase<"SignedZeroInfNanPreserve", 4466> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_float_controls]> + ]; +} +def SPV_C_RoundingModeRTE : I32EnumAttrCase<"RoundingModeRTE", 4467> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_float_controls]> + ]; +} +def SPV_C_RoundingModeRTZ : I32EnumAttrCase<"RoundingModeRTZ", 4468> { + list availability = [ + MinVersion, + Extension<[SPV_KHR_float_controls]> + ]; +} +def SPV_C_ImageFootprintNV : I32EnumAttrCase<"ImageFootprintNV", 5282> { + list availability = [ + Extension<[SPV_NV_shader_image_footprint]> + ]; +} +def SPV_C_FragmentBarycentricNV : I32EnumAttrCase<"FragmentBarycentricNV", 5284> { + list availability = [ + Extension<[SPV_NV_fragment_shader_barycentric]> + ]; +} +def SPV_C_ComputeDerivativeGroupQuadsNV : I32EnumAttrCase<"ComputeDerivativeGroupQuadsNV", 5288> { + list availability = [ + Extension<[SPV_NV_compute_shader_derivatives]> + ]; +} +def SPV_C_GroupNonUniformPartitionedNV : I32EnumAttrCase<"GroupNonUniformPartitionedNV", 5297> { + list availability = [ + Extension<[SPV_NV_shader_subgroup_partitioned]> + ]; +} +def SPV_C_VulkanMemoryModel : I32EnumAttrCase<"VulkanMemoryModel", 5345> { + list availability = [ + MinVersion + ]; +} +def SPV_C_VulkanMemoryModelDeviceScope : I32EnumAttrCase<"VulkanMemoryModelDeviceScope", 5346> { + list availability = [ + MinVersion + ]; +} +def SPV_C_ComputeDerivativeGroupLinearNV : I32EnumAttrCase<"ComputeDerivativeGroupLinearNV", 5350> { + list availability = [ + Extension<[SPV_NV_compute_shader_derivatives]> + ]; +} +def SPV_C_SubgroupShuffleINTEL : I32EnumAttrCase<"SubgroupShuffleINTEL", 5568> { + list availability = [ + Extension<[SPV_INTEL_subgroups]> + ]; +} +def SPV_C_SubgroupBufferBlockIOINTEL : I32EnumAttrCase<"SubgroupBufferBlockIOINTEL", 5569> { + list availability = [ + Extension<[SPV_INTEL_subgroups]> + ]; +} +def SPV_C_SubgroupImageBlockIOINTEL : I32EnumAttrCase<"SubgroupImageBlockIOINTEL", 5570> { + list availability = [ + Extension<[SPV_INTEL_subgroups]> + ]; +} +def SPV_C_SubgroupImageMediaBlockIOINTEL : I32EnumAttrCase<"SubgroupImageMediaBlockIOINTEL", 5579> { + list availability = [ + Extension<[SPV_INTEL_media_block_io]> + ]; +} +def SPV_C_SubgroupAvcMotionEstimationINTEL : I32EnumAttrCase<"SubgroupAvcMotionEstimationINTEL", 5696> { + list availability = [ + Extension<[SPV_INTEL_device_side_avc_motion_estimation]> + ]; +} +def SPV_C_SubgroupAvcMotionEstimationIntraINTEL : I32EnumAttrCase<"SubgroupAvcMotionEstimationIntraINTEL", 5697> { + list availability = [ + Extension<[SPV_INTEL_device_side_avc_motion_estimation]> + ]; +} +def SPV_C_SubgroupAvcMotionEstimationChromaINTEL : I32EnumAttrCase<"SubgroupAvcMotionEstimationChromaINTEL", 5698> { + list availability = [ + Extension<[SPV_INTEL_device_side_avc_motion_estimation]> + ]; +} +def SPV_C_Shader : I32EnumAttrCase<"Shader", 1> { + list implies = [SPV_C_Matrix]; +} +def SPV_C_Vector16 : I32EnumAttrCase<"Vector16", 7> { + list implies = [SPV_C_Kernel]; +} +def SPV_C_Float16Buffer : I32EnumAttrCase<"Float16Buffer", 8> { + list implies = [SPV_C_Kernel]; +} +def SPV_C_Int64Atomics : I32EnumAttrCase<"Int64Atomics", 12> { + list implies = [SPV_C_Int64]; +} +def SPV_C_ImageBasic : I32EnumAttrCase<"ImageBasic", 13> { + list implies = [SPV_C_Kernel]; +} +def SPV_C_Pipes : I32EnumAttrCase<"Pipes", 17> { + list implies = [SPV_C_Kernel]; +} +def SPV_C_DeviceEnqueue : I32EnumAttrCase<"DeviceEnqueue", 19> { + list implies = [SPV_C_Kernel]; +} +def SPV_C_LiteralSampler : I32EnumAttrCase<"LiteralSampler", 20> { + list implies = [SPV_C_Kernel]; +} +def SPV_C_GenericPointer : I32EnumAttrCase<"GenericPointer", 38> { + list implies = [SPV_C_Addresses]; +} +def SPV_C_Image1D : I32EnumAttrCase<"Image1D", 44> { + list implies = [SPV_C_Sampled1D]; +} +def SPV_C_ImageBuffer : I32EnumAttrCase<"ImageBuffer", 47> { + list implies = [SPV_C_SampledBuffer]; +} +def SPV_C_NamedBarrier : I32EnumAttrCase<"NamedBarrier", 59> { + list implies = [SPV_C_Kernel]; + list availability = [ + MinVersion + ]; +} +def SPV_C_GroupNonUniformVote : I32EnumAttrCase<"GroupNonUniformVote", 62> { + list implies = [SPV_C_GroupNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_GroupNonUniformArithmetic : I32EnumAttrCase<"GroupNonUniformArithmetic", 63> { + list implies = [SPV_C_GroupNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_GroupNonUniformBallot : I32EnumAttrCase<"GroupNonUniformBallot", 64> { + list implies = [SPV_C_GroupNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_GroupNonUniformShuffle : I32EnumAttrCase<"GroupNonUniformShuffle", 65> { + list implies = [SPV_C_GroupNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_GroupNonUniformShuffleRelative : I32EnumAttrCase<"GroupNonUniformShuffleRelative", 66> { + list implies = [SPV_C_GroupNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_GroupNonUniformClustered : I32EnumAttrCase<"GroupNonUniformClustered", 67> { + list implies = [SPV_C_GroupNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_GroupNonUniformQuad : I32EnumAttrCase<"GroupNonUniformQuad", 68> { + list implies = [SPV_C_GroupNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_StorageUniform16 : I32EnumAttrCase<"StorageUniform16", 4434> { + list implies = [SPV_C_StorageBuffer16BitAccess]; + list availability = [ + MinVersion, + Extension<[SPV_KHR_16bit_storage]> + ]; +} +def SPV_C_UniformAndStorageBuffer8BitAccess : I32EnumAttrCase<"UniformAndStorageBuffer8BitAccess", 4449> { + list implies = [SPV_C_StorageBuffer8BitAccess]; + list availability = [ + MinVersion, + Extension<[SPV_KHR_8bit_storage]> + ]; +} +def SPV_C_UniformTexelBufferArrayDynamicIndexing : I32EnumAttrCase<"UniformTexelBufferArrayDynamicIndexing", 5304> { + list implies = [SPV_C_SampledBuffer]; + list availability = [ + MinVersion + ]; +} +def SPV_C_Geometry : I32EnumAttrCase<"Geometry", 2> { + list implies = [SPV_C_Shader]; +} +def SPV_C_Tessellation : I32EnumAttrCase<"Tessellation", 3> { + list implies = [SPV_C_Shader]; +} +def SPV_C_ImageReadWrite : I32EnumAttrCase<"ImageReadWrite", 14> { + list implies = [SPV_C_ImageBasic]; +} +def SPV_C_ImageMipmap : I32EnumAttrCase<"ImageMipmap", 15> { + list implies = [SPV_C_ImageBasic]; +} +def SPV_C_AtomicStorage : I32EnumAttrCase<"AtomicStorage", 21> { + list implies = [SPV_C_Shader]; +} +def SPV_C_ImageGatherExtended : I32EnumAttrCase<"ImageGatherExtended", 25> { + list implies = [SPV_C_Shader]; +} +def SPV_C_StorageImageMultisample : I32EnumAttrCase<"StorageImageMultisample", 27> { + list implies = [SPV_C_Shader]; +} +def SPV_C_UniformBufferArrayDynamicIndexing : I32EnumAttrCase<"UniformBufferArrayDynamicIndexing", 28> { + list implies = [SPV_C_Shader]; +} +def SPV_C_SampledImageArrayDynamicIndexing : I32EnumAttrCase<"SampledImageArrayDynamicIndexing", 29> { + list implies = [SPV_C_Shader]; +} +def SPV_C_StorageBufferArrayDynamicIndexing : I32EnumAttrCase<"StorageBufferArrayDynamicIndexing", 30> { + list implies = [SPV_C_Shader]; +} +def SPV_C_StorageImageArrayDynamicIndexing : I32EnumAttrCase<"StorageImageArrayDynamicIndexing", 31> { + list implies = [SPV_C_Shader]; +} +def SPV_C_ClipDistance : I32EnumAttrCase<"ClipDistance", 32> { + list implies = [SPV_C_Shader]; +} +def SPV_C_CullDistance : I32EnumAttrCase<"CullDistance", 33> { + list implies = [SPV_C_Shader]; +} +def SPV_C_SampleRateShading : I32EnumAttrCase<"SampleRateShading", 35> { + list implies = [SPV_C_Shader]; +} +def SPV_C_SampledRect : I32EnumAttrCase<"SampledRect", 37> { + list implies = [SPV_C_Shader]; +} +def SPV_C_InputAttachment : I32EnumAttrCase<"InputAttachment", 40> { + list implies = [SPV_C_Shader]; +} +def SPV_C_SparseResidency : I32EnumAttrCase<"SparseResidency", 41> { + list implies = [SPV_C_Shader]; +} +def SPV_C_MinLod : I32EnumAttrCase<"MinLod", 42> { + list implies = [SPV_C_Shader]; +} +def SPV_C_SampledCubeArray : I32EnumAttrCase<"SampledCubeArray", 45> { + list implies = [SPV_C_Shader]; +} +def SPV_C_ImageMSArray : I32EnumAttrCase<"ImageMSArray", 48> { + list implies = [SPV_C_Shader]; +} +def SPV_C_StorageImageExtendedFormats : I32EnumAttrCase<"StorageImageExtendedFormats", 49> { + list implies = [SPV_C_Shader]; +} +def SPV_C_ImageQuery : I32EnumAttrCase<"ImageQuery", 50> { + list implies = [SPV_C_Shader]; +} +def SPV_C_DerivativeControl : I32EnumAttrCase<"DerivativeControl", 51> { + list implies = [SPV_C_Shader]; +} +def SPV_C_InterpolationFunction : I32EnumAttrCase<"InterpolationFunction", 52> { + list implies = [SPV_C_Shader]; +} +def SPV_C_TransformFeedback : I32EnumAttrCase<"TransformFeedback", 53> { + list implies = [SPV_C_Shader]; +} +def SPV_C_StorageImageReadWithoutFormat : I32EnumAttrCase<"StorageImageReadWithoutFormat", 55> { + list implies = [SPV_C_Shader]; +} +def SPV_C_StorageImageWriteWithoutFormat : I32EnumAttrCase<"StorageImageWriteWithoutFormat", 56> { + list implies = [SPV_C_Shader]; +} +def SPV_C_SubgroupDispatch : I32EnumAttrCase<"SubgroupDispatch", 58> { + list implies = [SPV_C_DeviceEnqueue]; + list availability = [ + MinVersion + ]; +} +def SPV_C_PipeStorage : I32EnumAttrCase<"PipeStorage", 60> { + list implies = [SPV_C_Pipes]; + list availability = [ + MinVersion + ]; +} +def SPV_C_DrawParameters : I32EnumAttrCase<"DrawParameters", 4427> { + list implies = [SPV_C_Shader]; + list availability = [ + MinVersion, + Extension<[SPV_KHR_shader_draw_parameters]> + ]; +} +def SPV_C_MultiView : I32EnumAttrCase<"MultiView", 4439> { + list implies = [SPV_C_Shader]; + list availability = [ + MinVersion, + Extension<[SPV_KHR_multiview]> + ]; +} +def SPV_C_VariablePointersStorageBuffer : I32EnumAttrCase<"VariablePointersStorageBuffer", 4441> { + list implies = [SPV_C_Shader]; + list availability = [ + MinVersion, + Extension<[SPV_KHR_variable_pointers]> + ]; +} +def SPV_C_Float16ImageAMD : I32EnumAttrCase<"Float16ImageAMD", 5008> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_AMD_gpu_shader_half_float_fetch]> + ]; +} +def SPV_C_ImageGatherBiasLodAMD : I32EnumAttrCase<"ImageGatherBiasLodAMD", 5009> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_AMD_texture_gather_bias_lod]> + ]; +} +def SPV_C_FragmentMaskAMD : I32EnumAttrCase<"FragmentMaskAMD", 5010> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_AMD_shader_fragment_mask]> + ]; +} +def SPV_C_StencilExportEXT : I32EnumAttrCase<"StencilExportEXT", 5013> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_EXT_shader_stencil_export]> + ]; +} +def SPV_C_ImageReadWriteLodAMD : I32EnumAttrCase<"ImageReadWriteLodAMD", 5015> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_AMD_shader_image_load_store_lod]> + ]; +} +def SPV_C_ShaderClockKHR : I32EnumAttrCase<"ShaderClockKHR", 5055> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_KHR_shader_clock]> + ]; +} +def SPV_C_FragmentFullyCoveredEXT : I32EnumAttrCase<"FragmentFullyCoveredEXT", 5265> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_EXT_fragment_fully_covered]> + ]; +} +def SPV_C_MeshShadingNV : I32EnumAttrCase<"MeshShadingNV", 5266> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_NV_mesh_shader]> + ]; +} +def SPV_C_FragmentDensityEXT : I32EnumAttrCase<"FragmentDensityEXT", 5291> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_EXT_fragment_invocation_density, SPV_NV_shading_rate]> + ]; +} +def SPV_C_ShaderNonUniform : I32EnumAttrCase<"ShaderNonUniform", 5301> { + list implies = [SPV_C_Shader]; + list availability = [ + MinVersion + ]; +} +def SPV_C_RuntimeDescriptorArray : I32EnumAttrCase<"RuntimeDescriptorArray", 5302> { + list implies = [SPV_C_Shader]; + list availability = [ + MinVersion + ]; +} +def SPV_C_StorageTexelBufferArrayDynamicIndexing : I32EnumAttrCase<"StorageTexelBufferArrayDynamicIndexing", 5305> { + list implies = [SPV_C_ImageBuffer]; + list availability = [ + MinVersion + ]; +} +def SPV_C_RayTracingNV : I32EnumAttrCase<"RayTracingNV", 5340> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_NV_ray_tracing]> + ]; +} +def SPV_C_PhysicalStorageBufferAddresses : I32EnumAttrCase<"PhysicalStorageBufferAddresses", 5347> { + list implies = [SPV_C_Shader]; + list availability = [ + MinVersion, + Extension<[SPV_EXT_physical_storage_buffer, SPV_KHR_physical_storage_buffer]> + ]; +} +def SPV_C_CooperativeMatrixNV : I32EnumAttrCase<"CooperativeMatrixNV", 5357> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_NV_cooperative_matrix]> + ]; +} +def SPV_C_FragmentShaderSampleInterlockEXT : I32EnumAttrCase<"FragmentShaderSampleInterlockEXT", 5363> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_EXT_fragment_shader_interlock]> + ]; +} +def SPV_C_FragmentShaderShadingRateInterlockEXT : I32EnumAttrCase<"FragmentShaderShadingRateInterlockEXT", 5372> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_EXT_fragment_shader_interlock]> + ]; +} +def SPV_C_ShaderSMBuiltinsNV : I32EnumAttrCase<"ShaderSMBuiltinsNV", 5373> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_NV_shader_sm_builtins]> + ]; +} +def SPV_C_FragmentShaderPixelInterlockEXT : I32EnumAttrCase<"FragmentShaderPixelInterlockEXT", 5378> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_EXT_fragment_shader_interlock]> + ]; +} +def SPV_C_DemoteToHelperInvocationEXT : I32EnumAttrCase<"DemoteToHelperInvocationEXT", 5379> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_EXT_demote_to_helper_invocation]> + ]; +} +def SPV_C_IntegerFunctions2INTEL : I32EnumAttrCase<"IntegerFunctions2INTEL", 5584> { + list implies = [SPV_C_Shader]; + list availability = [ + Extension<[SPV_INTEL_shader_integer_functions2]> + ]; +} +def SPV_C_TessellationPointSize : I32EnumAttrCase<"TessellationPointSize", 23> { + list implies = [SPV_C_Tessellation]; +} +def SPV_C_GeometryPointSize : I32EnumAttrCase<"GeometryPointSize", 24> { + list implies = [SPV_C_Geometry]; +} +def SPV_C_ImageCubeArray : I32EnumAttrCase<"ImageCubeArray", 34> { + list implies = [SPV_C_SampledCubeArray]; +} +def SPV_C_ImageRect : I32EnumAttrCase<"ImageRect", 36> { + list implies = [SPV_C_SampledRect]; +} +def SPV_C_GeometryStreams : I32EnumAttrCase<"GeometryStreams", 54> { + list implies = [SPV_C_Geometry]; +} +def SPV_C_MultiViewport : I32EnumAttrCase<"MultiViewport", 57> { + list implies = [SPV_C_Geometry]; +} +def SPV_C_VariablePointers : I32EnumAttrCase<"VariablePointers", 4442> { + list implies = [SPV_C_VariablePointersStorageBuffer]; + list availability = [ + MinVersion, + Extension<[SPV_KHR_variable_pointers]> + ]; +} +def SPV_C_SampleMaskOverrideCoverageNV : I32EnumAttrCase<"SampleMaskOverrideCoverageNV", 5249> { + list implies = [SPV_C_SampleRateShading]; + list availability = [ + Extension<[SPV_NV_sample_mask_override_coverage]> + ]; +} +def SPV_C_GeometryShaderPassthroughNV : I32EnumAttrCase<"GeometryShaderPassthroughNV", 5251> { + list implies = [SPV_C_Geometry]; + list availability = [ + Extension<[SPV_NV_geometry_shader_passthrough]> + ]; +} +def SPV_C_PerViewAttributesNV : I32EnumAttrCase<"PerViewAttributesNV", 5260> { + list implies = [SPV_C_MultiView]; + list availability = [ + Extension<[SPV_NVX_multiview_per_view_attributes]> + ]; +} +def SPV_C_InputAttachmentArrayDynamicIndexing : I32EnumAttrCase<"InputAttachmentArrayDynamicIndexing", 5303> { + list implies = [SPV_C_InputAttachment]; + list availability = [ + MinVersion + ]; +} +def SPV_C_UniformBufferArrayNonUniformIndexing : I32EnumAttrCase<"UniformBufferArrayNonUniformIndexing", 5306> { + list implies = [SPV_C_ShaderNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_SampledImageArrayNonUniformIndexing : I32EnumAttrCase<"SampledImageArrayNonUniformIndexing", 5307> { + list implies = [SPV_C_ShaderNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_StorageBufferArrayNonUniformIndexing : I32EnumAttrCase<"StorageBufferArrayNonUniformIndexing", 5308> { + list implies = [SPV_C_ShaderNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_StorageImageArrayNonUniformIndexing : I32EnumAttrCase<"StorageImageArrayNonUniformIndexing", 5309> { + list implies = [SPV_C_ShaderNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_InputAttachmentArrayNonUniformIndexing : I32EnumAttrCase<"InputAttachmentArrayNonUniformIndexing", 5310> { + list implies = [SPV_C_InputAttachment, SPV_C_ShaderNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_UniformTexelBufferArrayNonUniformIndexing : I32EnumAttrCase<"UniformTexelBufferArrayNonUniformIndexing", 5311> { + list implies = [SPV_C_SampledBuffer, SPV_C_ShaderNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_StorageTexelBufferArrayNonUniformIndexing : I32EnumAttrCase<"StorageTexelBufferArrayNonUniformIndexing", 5312> { + list implies = [SPV_C_ImageBuffer, SPV_C_ShaderNonUniform]; + list availability = [ + MinVersion + ]; +} +def SPV_C_ShaderViewportIndexLayerEXT : I32EnumAttrCase<"ShaderViewportIndexLayerEXT", 5254> { + list implies = [SPV_C_MultiViewport]; + list availability = [ + Extension<[SPV_EXT_shader_viewport_index_layer]> + ]; +} +def SPV_C_ShaderViewportMaskNV : I32EnumAttrCase<"ShaderViewportMaskNV", 5255> { + list implies = [SPV_C_ShaderViewportIndexLayerEXT]; + list availability = [ + Extension<[SPV_NV_viewport_array2]> + ]; +} +def SPV_C_ShaderStereoViewNV : I32EnumAttrCase<"ShaderStereoViewNV", 5259> { + list implies = [SPV_C_ShaderViewportMaskNV]; + list availability = [ + Extension<[SPV_NV_stereo_view_rendering]> + ]; +} def SPV_CapabilityAttr : I32EnumAttr<"Capability", "valid SPIR-V Capability", [ - SPV_C_Matrix, SPV_C_Shader, SPV_C_Geometry, SPV_C_Tessellation, - SPV_C_Addresses, SPV_C_Linkage, SPV_C_Kernel, SPV_C_Vector16, - SPV_C_Float16Buffer, SPV_C_Float16, SPV_C_Float64, SPV_C_Int64, - SPV_C_Int64Atomics, SPV_C_ImageBasic, SPV_C_ImageReadWrite, SPV_C_ImageMipmap, - SPV_C_Pipes, SPV_C_Groups, SPV_C_DeviceEnqueue, SPV_C_LiteralSampler, - SPV_C_AtomicStorage, SPV_C_Int16, SPV_C_TessellationPointSize, - SPV_C_GeometryPointSize, SPV_C_ImageGatherExtended, - SPV_C_StorageImageMultisample, SPV_C_UniformBufferArrayDynamicIndexing, + SPV_C_Matrix, SPV_C_Addresses, SPV_C_Linkage, SPV_C_Kernel, SPV_C_Float16, + SPV_C_Float64, SPV_C_Int64, SPV_C_Groups, SPV_C_Int16, SPV_C_Int8, + SPV_C_Sampled1D, SPV_C_SampledBuffer, SPV_C_GroupNonUniform, SPV_C_ShaderLayer, + SPV_C_ShaderViewportIndex, SPV_C_SubgroupBallotKHR, SPV_C_SubgroupVoteKHR, + SPV_C_StorageBuffer16BitAccess, SPV_C_StoragePushConstant16, + SPV_C_StorageInputOutput16, SPV_C_DeviceGroup, SPV_C_AtomicStorageOps, + SPV_C_SampleMaskPostDepthCoverage, SPV_C_StorageBuffer8BitAccess, + SPV_C_StoragePushConstant8, SPV_C_DenormPreserve, SPV_C_DenormFlushToZero, + SPV_C_SignedZeroInfNanPreserve, SPV_C_RoundingModeRTE, SPV_C_RoundingModeRTZ, + SPV_C_ImageFootprintNV, SPV_C_FragmentBarycentricNV, + SPV_C_ComputeDerivativeGroupQuadsNV, SPV_C_GroupNonUniformPartitionedNV, + SPV_C_VulkanMemoryModel, SPV_C_VulkanMemoryModelDeviceScope, + SPV_C_ComputeDerivativeGroupLinearNV, SPV_C_SubgroupShuffleINTEL, + SPV_C_SubgroupBufferBlockIOINTEL, SPV_C_SubgroupImageBlockIOINTEL, + SPV_C_SubgroupImageMediaBlockIOINTEL, SPV_C_SubgroupAvcMotionEstimationINTEL, + SPV_C_SubgroupAvcMotionEstimationIntraINTEL, + SPV_C_SubgroupAvcMotionEstimationChromaINTEL, SPV_C_Shader, SPV_C_Vector16, + SPV_C_Float16Buffer, SPV_C_Int64Atomics, SPV_C_ImageBasic, SPV_C_Pipes, + SPV_C_DeviceEnqueue, SPV_C_LiteralSampler, SPV_C_GenericPointer, SPV_C_Image1D, + SPV_C_ImageBuffer, SPV_C_NamedBarrier, SPV_C_GroupNonUniformVote, + SPV_C_GroupNonUniformArithmetic, SPV_C_GroupNonUniformBallot, + SPV_C_GroupNonUniformShuffle, SPV_C_GroupNonUniformShuffleRelative, + SPV_C_GroupNonUniformClustered, SPV_C_GroupNonUniformQuad, + SPV_C_StorageUniform16, SPV_C_UniformAndStorageBuffer8BitAccess, + SPV_C_UniformTexelBufferArrayDynamicIndexing, SPV_C_Geometry, + SPV_C_Tessellation, SPV_C_ImageReadWrite, SPV_C_ImageMipmap, + SPV_C_AtomicStorage, SPV_C_ImageGatherExtended, SPV_C_StorageImageMultisample, + SPV_C_UniformBufferArrayDynamicIndexing, SPV_C_SampledImageArrayDynamicIndexing, SPV_C_StorageBufferArrayDynamicIndexing, SPV_C_StorageImageArrayDynamicIndexing, SPV_C_ClipDistance, SPV_C_CullDistance, - SPV_C_ImageCubeArray, SPV_C_SampleRateShading, SPV_C_ImageRect, - SPV_C_SampledRect, SPV_C_GenericPointer, SPV_C_Int8, SPV_C_InputAttachment, - SPV_C_SparseResidency, SPV_C_MinLod, SPV_C_Sampled1D, SPV_C_Image1D, - SPV_C_SampledCubeArray, SPV_C_SampledBuffer, SPV_C_ImageBuffer, + SPV_C_SampleRateShading, SPV_C_SampledRect, SPV_C_InputAttachment, + SPV_C_SparseResidency, SPV_C_MinLod, SPV_C_SampledCubeArray, SPV_C_ImageMSArray, SPV_C_StorageImageExtendedFormats, SPV_C_ImageQuery, SPV_C_DerivativeControl, SPV_C_InterpolationFunction, SPV_C_TransformFeedback, - SPV_C_GeometryStreams, SPV_C_StorageImageReadWithoutFormat, - SPV_C_StorageImageWriteWithoutFormat, SPV_C_MultiViewport, - SPV_C_SubgroupDispatch, SPV_C_NamedBarrier, SPV_C_PipeStorage, - SPV_C_GroupNonUniform, SPV_C_GroupNonUniformVote, - SPV_C_GroupNonUniformArithmetic, SPV_C_GroupNonUniformBallot, - SPV_C_GroupNonUniformShuffle, SPV_C_GroupNonUniformShuffleRelative, - SPV_C_GroupNonUniformClustered, SPV_C_GroupNonUniformQuad, SPV_C_ShaderLayer, - SPV_C_ShaderViewportIndex, SPV_C_SubgroupBallotKHR, SPV_C_DrawParameters, - SPV_C_SubgroupVoteKHR, SPV_C_StorageBuffer16BitAccess, SPV_C_StorageUniform16, - SPV_C_StoragePushConstant16, SPV_C_StorageInputOutput16, SPV_C_DeviceGroup, - SPV_C_MultiView, SPV_C_VariablePointersStorageBuffer, SPV_C_VariablePointers, - SPV_C_AtomicStorageOps, SPV_C_SampleMaskPostDepthCoverage, - SPV_C_StorageBuffer8BitAccess, SPV_C_UniformAndStorageBuffer8BitAccess, - SPV_C_StoragePushConstant8, SPV_C_DenormPreserve, SPV_C_DenormFlushToZero, - SPV_C_SignedZeroInfNanPreserve, SPV_C_RoundingModeRTE, SPV_C_RoundingModeRTZ, - SPV_C_Float16ImageAMD, SPV_C_ImageGatherBiasLodAMD, SPV_C_FragmentMaskAMD, - SPV_C_StencilExportEXT, SPV_C_ImageReadWriteLodAMD, SPV_C_ShaderClockKHR, - SPV_C_SampleMaskOverrideCoverageNV, SPV_C_GeometryShaderPassthroughNV, - SPV_C_ShaderViewportIndexLayerEXT, SPV_C_ShaderViewportMaskNV, - SPV_C_ShaderStereoViewNV, SPV_C_PerViewAttributesNV, - SPV_C_FragmentFullyCoveredEXT, SPV_C_MeshShadingNV, SPV_C_ImageFootprintNV, - SPV_C_FragmentBarycentricNV, SPV_C_ComputeDerivativeGroupQuadsNV, - SPV_C_FragmentDensityEXT, SPV_C_GroupNonUniformPartitionedNV, + SPV_C_StorageImageReadWithoutFormat, SPV_C_StorageImageWriteWithoutFormat, + SPV_C_SubgroupDispatch, SPV_C_PipeStorage, SPV_C_DrawParameters, + SPV_C_MultiView, SPV_C_VariablePointersStorageBuffer, SPV_C_Float16ImageAMD, + SPV_C_ImageGatherBiasLodAMD, SPV_C_FragmentMaskAMD, SPV_C_StencilExportEXT, + SPV_C_ImageReadWriteLodAMD, SPV_C_ShaderClockKHR, + SPV_C_FragmentFullyCoveredEXT, SPV_C_MeshShadingNV, SPV_C_FragmentDensityEXT, SPV_C_ShaderNonUniform, SPV_C_RuntimeDescriptorArray, - SPV_C_InputAttachmentArrayDynamicIndexing, - SPV_C_UniformTexelBufferArrayDynamicIndexing, - SPV_C_StorageTexelBufferArrayDynamicIndexing, + SPV_C_StorageTexelBufferArrayDynamicIndexing, SPV_C_RayTracingNV, + SPV_C_PhysicalStorageBufferAddresses, SPV_C_CooperativeMatrixNV, + SPV_C_FragmentShaderSampleInterlockEXT, + SPV_C_FragmentShaderShadingRateInterlockEXT, SPV_C_ShaderSMBuiltinsNV, + SPV_C_FragmentShaderPixelInterlockEXT, SPV_C_DemoteToHelperInvocationEXT, + SPV_C_IntegerFunctions2INTEL, SPV_C_TessellationPointSize, + SPV_C_GeometryPointSize, SPV_C_ImageCubeArray, SPV_C_ImageRect, + SPV_C_GeometryStreams, SPV_C_MultiViewport, SPV_C_VariablePointers, + SPV_C_SampleMaskOverrideCoverageNV, SPV_C_GeometryShaderPassthroughNV, + SPV_C_PerViewAttributesNV, SPV_C_InputAttachmentArrayDynamicIndexing, SPV_C_UniformBufferArrayNonUniformIndexing, SPV_C_SampledImageArrayNonUniformIndexing, SPV_C_StorageBufferArrayNonUniformIndexing, SPV_C_StorageImageArrayNonUniformIndexing, SPV_C_InputAttachmentArrayNonUniformIndexing, SPV_C_UniformTexelBufferArrayNonUniformIndexing, - SPV_C_StorageTexelBufferArrayNonUniformIndexing, SPV_C_RayTracingNV, - SPV_C_VulkanMemoryModel, SPV_C_VulkanMemoryModelDeviceScope, - SPV_C_PhysicalStorageBufferAddresses, SPV_C_ComputeDerivativeGroupLinearNV, - SPV_C_CooperativeMatrixNV, SPV_C_FragmentShaderSampleInterlockEXT, - SPV_C_FragmentShaderShadingRateInterlockEXT, SPV_C_ShaderSMBuiltinsNV, - SPV_C_FragmentShaderPixelInterlockEXT, SPV_C_DemoteToHelperInvocationEXT, - SPV_C_SubgroupShuffleINTEL, SPV_C_SubgroupBufferBlockIOINTEL, - SPV_C_SubgroupImageBlockIOINTEL, SPV_C_SubgroupImageMediaBlockIOINTEL, - SPV_C_IntegerFunctions2INTEL, SPV_C_SubgroupAvcMotionEstimationINTEL, - SPV_C_SubgroupAvcMotionEstimationIntraINTEL, - SPV_C_SubgroupAvcMotionEstimationChromaINTEL + SPV_C_StorageTexelBufferArrayNonUniformIndexing, + SPV_C_ShaderViewportIndexLayerEXT, SPV_C_ShaderViewportMaskNV, + SPV_C_ShaderStereoViewNV ]> { let cppNamespace = "::mlir::spirv"; } diff --git a/mlir/utils/spirv/gen_spirv_dialect.py b/mlir/utils/spirv/gen_spirv_dialect.py --- a/mlir/utils/spirv/gen_spirv_dialect.py +++ b/mlir/utils/spirv/gen_spirv_dialect.py @@ -138,10 +138,72 @@ return uniqued_cases, duplicated_cases -def get_capability_mapping(operand_kinds): - """Returns the capability mapping from duplicated cases to their canonicalized +def toposort(dag, sort_fn): + """Topologically sorts the given dag. + + Arguments: + - dag: a dict mapping from a node to its incoming nodes. + - sort_fn: a function for sorting nodes in the same batch. + + Returns: + A list containing topologically sorted nodes. + """ + + # Returns the next batch of nodes without incoming edges + def get_next_batch(dag): + while True: + no_prev_nodes = set(node for node, prev in dag.items() if not prev) + if not no_prev_nodes: + break + yield sorted(no_prev_nodes, key=sort_fn) + dag = { + node: (prev - no_prev_nodes) + for node, prev in dag.items() + if node not in no_prev_nodes + } + assert not dag, 'found cyclic dependency' + + sorted_nodes = [] + for batch in get_next_batch(dag): + sorted_nodes.extend(batch) + + return sorted_nodes + + +def toposort_capabilities(all_cases, capability_mapping): + """Returns topologically sorted capability (symbol, value) pairs. + + Arguments: + - all_cases: all capability cases (containing symbol, value, and implied + capabilities). + - capability_mapping: mapping from duplicated capability symbols to the + canonicalized symbol chosen for SPIRVBase.td. + + Returns: + A list containing topologically sorted capability (symbol, value) pairs. + """ + dag = {} + name_to_value = {} + for case in all_cases: + # Get the current capability. + cur = case['enumerant'] + name_to_value[cur] = case['value'] + # Ignore duplicated symbols. + if cur in capability_mapping: + continue + + # Get capabilities implied by the current capability. + prev = case.get('capabilities', []) + uniqued_prev = set([capability_mapping.get(c, c) for c in prev]) + dag[cur] = uniqued_prev + + sorted_caps = toposort(dag, lambda x: name_to_value[x]) + # Attach the capability's value as the second component of the pair. + return [(c, name_to_value[c]) for c in sorted_caps] - case. + +def get_capability_mapping(operand_kinds): + """Returns the capability mapping from duplicated cases to canonicalized ones. Arguments: - operand_kinds: all operand kinds' grammar spec @@ -164,7 +226,7 @@ return capability_mapping -def get_availability_spec(enum_case, capability_mapping, for_op): +def get_availability_spec(enum_case, capability_mapping, for_op, for_cap): """Returns the availability specification string for the given enum case. Arguments: @@ -174,11 +236,15 @@ canonicalized symbol chosen for SPIRVBase.td. - for_op: bool value indicating whether this is the availability spec for an op itself. + - for_cap: bool value indicating whether this is the availability spec for + capabilities themselves. Returns: - A `let availability = [...];` string if with availability spec or empty string if without availability spec """ + assert not (for_op and for_cap), 'cannot set both for_op and for_cap' + min_version = enum_case.get('version', '') if min_version == 'None': min_version = '' @@ -206,6 +272,7 @@ exts = 'Extension<[]>' caps = enum_case.get('capabilities', []) + implies = '' if caps: canonicalized_caps = [] for c in caps: @@ -213,8 +280,19 @@ canonicalized_caps.append(capability_mapping[c]) else: canonicalized_caps.append(c) - caps = 'Capability<[{}]>'.format(', '.join( - ['SPV_C_{}'.format(c) for c in sorted(set(canonicalized_caps))])) + prefixed_caps = [ + 'SPV_C_{}'.format(c) for c in sorted(set(canonicalized_caps)) + ] + if for_cap: + # If this is generating the availability for capabilities, we need to + # put the capability "requirements" in implies field because now + # the "capabilities" field in the source grammar means so. + caps = '' + implies = 'list implies = [{}];'.format( + ', '.join(prefixed_caps)) + else: + caps = 'Capability<[{}]>'.format(', '.join(prefixed_caps)) + implies = '' # TODO(antiagainst): delete this once ODS can support dialect-specific content # and we can use omission to mean no requirements. if for_op and not caps: @@ -227,7 +305,7 @@ avail = '{} availability = [\n {}\n ];'.format( 'let' if for_op else 'list', joined_spec) - return avail + return '{}{}{}'.format(implies, '\n ' if implies and avail else '', avail) def gen_operand_kind_enum_attr(operand_kind, capability_mapping): @@ -258,9 +336,15 @@ for case in operand_kind['enumerants']: name_to_case_dict[case['enumerant']] = case - kind_cases = [(case['enumerant'], case['value']) - for case in operand_kind['enumerants']] - kind_cases, _ = uniquify_enum_cases(kind_cases) + if kind_name == 'Capability': + # Special treatment for capability cases: we need to sort them topologically + # because a capability can refer to another via the 'implies' field. + kind_cases = toposort_capabilities(operand_kind['enumerants'], + capability_mapping) + else: + kind_cases = [(case['enumerant'], case['value']) + for case in operand_kind['enumerants']] + kind_cases, _ = uniquify_enum_cases(kind_cases) max_len = max([len(symbol) for (symbol, _) in kind_cases]) # Generate the definition for each enum case @@ -268,12 +352,9 @@ '{category}EnumAttrCase<"{symbol}", {value}>{avail}' case_defs = [] for case in kind_cases: - if kind_name == 'Capability': - avail = '' - else: - avail = get_availability_spec(name_to_case_dict[case[0]], - capability_mapping, - False) + avail = get_availability_spec(name_to_case_dict[case[0]], + capability_mapping, + False, kind_name == 'Capability') case_def = fmt_str.format( category=kind_category, acronym=kind_acronym, @@ -558,7 +639,7 @@ operands = instruction.get('operands', []) # Op availability - avail = get_availability_spec(instruction, capability_mapping, True) + avail = get_availability_spec(instruction, capability_mapping, True, False) if avail: avail = '\n\n {0}'.format(avail)