diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVBase.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVBase.td --- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVBase.td +++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVBase.td @@ -232,32 +232,6 @@ let instance = "ref"; } -class SPIRVOpInterface : OpInterface { - let cppNamespace = "::mlir::spirv"; -} -// TODO: the following interfaces definitions are duplicating with the above. -// Remove them once we are able to support dialect-specific contents in ODS. -def QueryMinVersionInterface : SPIRVOpInterface<"QueryMinVersionInterface"> { - let methods = [InterfaceMethod< - "", "::llvm::Optional<::mlir::spirv::Version>", "getMinVersion">]; -} -def QueryMaxVersionInterface : SPIRVOpInterface<"QueryMaxVersionInterface"> { - let methods = [InterfaceMethod< - "", "::llvm::Optional<::mlir::spirv::Version>", "getMaxVersion">]; -} -def QueryExtensionInterface : SPIRVOpInterface<"QueryExtensionInterface"> { - let methods = [InterfaceMethod< - "", - "::llvm::SmallVector<::llvm::ArrayRef<::mlir::spirv::Extension>, 1>", - "getExtensions">]; -} -def QueryCapabilityInterface : SPIRVOpInterface<"QueryCapabilityInterface"> { - let methods = [InterfaceMethod< - "", - "::llvm::SmallVector<::llvm::ArrayRef<::mlir::spirv::Capability>, 1>", - "getCapabilities">]; -} - //===----------------------------------------------------------------------===// // SPIR-V target GPU vendor and device definitions //===----------------------------------------------------------------------===// @@ -398,7 +372,7 @@ def SPV_C_Float64 : I32EnumAttrCase<"Float64", 10>; def SPV_C_Int64 : I32EnumAttrCase<"Int64", 11>; def SPV_C_Groups : I32EnumAttrCase<"Groups", 18> { - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_ballot]> ]; } @@ -407,162 +381,162 @@ def SPV_C_Sampled1D : I32EnumAttrCase<"Sampled1D", 43>; def SPV_C_SampledBuffer : I32EnumAttrCase<"SampledBuffer", 46>; def SPV_C_GroupNonUniform : I32EnumAttrCase<"GroupNonUniform", 61> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_ShaderLayer : I32EnumAttrCase<"ShaderLayer", 69> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_ShaderViewportIndex : I32EnumAttrCase<"ShaderViewportIndex", 70> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_SubgroupBallotKHR : I32EnumAttrCase<"SubgroupBallotKHR", 4423> { - list availability = [ + let availability = [ Extension<[SPV_KHR_shader_ballot]> ]; } def SPV_C_SubgroupVoteKHR : I32EnumAttrCase<"SubgroupVoteKHR", 4431> { - list availability = [ + let availability = [ Extension<[SPV_KHR_subgroup_vote]> ]; } def SPV_C_StorageBuffer16BitAccess : I32EnumAttrCase<"StorageBuffer16BitAccess", 4433> { - list availability = [ + let availability = [ Extension<[SPV_KHR_16bit_storage]> ]; } def SPV_C_StoragePushConstant16 : I32EnumAttrCase<"StoragePushConstant16", 4435> { - list availability = [ + let availability = [ Extension<[SPV_KHR_16bit_storage]> ]; } def SPV_C_StorageInputOutput16 : I32EnumAttrCase<"StorageInputOutput16", 4436> { - list availability = [ + let availability = [ Extension<[SPV_KHR_16bit_storage]> ]; } def SPV_C_DeviceGroup : I32EnumAttrCase<"DeviceGroup", 4437> { - list availability = [ + let availability = [ Extension<[SPV_KHR_device_group]> ]; } def SPV_C_AtomicStorageOps : I32EnumAttrCase<"AtomicStorageOps", 4445> { - list availability = [ + let availability = [ Extension<[SPV_KHR_shader_atomic_counter_ops]> ]; } def SPV_C_SampleMaskPostDepthCoverage : I32EnumAttrCase<"SampleMaskPostDepthCoverage", 4447> { - list availability = [ + let availability = [ Extension<[SPV_KHR_post_depth_coverage]> ]; } def SPV_C_StorageBuffer8BitAccess : I32EnumAttrCase<"StorageBuffer8BitAccess", 4448> { - list availability = [ + let availability = [ Extension<[SPV_KHR_8bit_storage]> ]; } def SPV_C_StoragePushConstant8 : I32EnumAttrCase<"StoragePushConstant8", 4450> { - list availability = [ + let availability = [ Extension<[SPV_KHR_8bit_storage]> ]; } def SPV_C_DenormPreserve : I32EnumAttrCase<"DenormPreserve", 4464> { - list availability = [ + let availability = [ Extension<[SPV_KHR_float_controls]> ]; } def SPV_C_DenormFlushToZero : I32EnumAttrCase<"DenormFlushToZero", 4465> { - list availability = [ + let availability = [ Extension<[SPV_KHR_float_controls]> ]; } def SPV_C_SignedZeroInfNanPreserve : I32EnumAttrCase<"SignedZeroInfNanPreserve", 4466> { - list availability = [ + let availability = [ Extension<[SPV_KHR_float_controls]> ]; } def SPV_C_RoundingModeRTE : I32EnumAttrCase<"RoundingModeRTE", 4467> { - list availability = [ + let availability = [ Extension<[SPV_KHR_float_controls]> ]; } def SPV_C_RoundingModeRTZ : I32EnumAttrCase<"RoundingModeRTZ", 4468> { - list availability = [ + let availability = [ Extension<[SPV_KHR_float_controls]> ]; } def SPV_C_ImageFootprintNV : I32EnumAttrCase<"ImageFootprintNV", 5282> { - list availability = [ + let availability = [ Extension<[SPV_NV_shader_image_footprint]> ]; } def SPV_C_FragmentBarycentricNV : I32EnumAttrCase<"FragmentBarycentricNV", 5284> { - list availability = [ + let availability = [ Extension<[SPV_NV_fragment_shader_barycentric]> ]; } def SPV_C_ComputeDerivativeGroupQuadsNV : I32EnumAttrCase<"ComputeDerivativeGroupQuadsNV", 5288> { - list availability = [ + let availability = [ Extension<[SPV_NV_compute_shader_derivatives]> ]; } def SPV_C_GroupNonUniformPartitionedNV : I32EnumAttrCase<"GroupNonUniformPartitionedNV", 5297> { - list availability = [ + let availability = [ Extension<[SPV_NV_shader_subgroup_partitioned]> ]; } def SPV_C_VulkanMemoryModel : I32EnumAttrCase<"VulkanMemoryModel", 5345> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_VulkanMemoryModelDeviceScope : I32EnumAttrCase<"VulkanMemoryModelDeviceScope", 5346> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_ComputeDerivativeGroupLinearNV : I32EnumAttrCase<"ComputeDerivativeGroupLinearNV", 5350> { - list availability = [ + let availability = [ Extension<[SPV_NV_compute_shader_derivatives]> ]; } def SPV_C_SubgroupShuffleINTEL : I32EnumAttrCase<"SubgroupShuffleINTEL", 5568> { - list availability = [ + let availability = [ Extension<[SPV_INTEL_subgroups]> ]; } def SPV_C_SubgroupBufferBlockIOINTEL : I32EnumAttrCase<"SubgroupBufferBlockIOINTEL", 5569> { - list availability = [ + let availability = [ Extension<[SPV_INTEL_subgroups]> ]; } def SPV_C_SubgroupImageBlockIOINTEL : I32EnumAttrCase<"SubgroupImageBlockIOINTEL", 5570> { - list availability = [ + let availability = [ Extension<[SPV_INTEL_subgroups]> ]; } def SPV_C_SubgroupImageMediaBlockIOINTEL : I32EnumAttrCase<"SubgroupImageMediaBlockIOINTEL", 5579> { - list availability = [ + let availability = [ Extension<[SPV_INTEL_media_block_io]> ]; } def SPV_C_SubgroupAvcMotionEstimationINTEL : I32EnumAttrCase<"SubgroupAvcMotionEstimationINTEL", 5696> { - list availability = [ + let availability = [ Extension<[SPV_INTEL_device_side_avc_motion_estimation]> ]; } def SPV_C_SubgroupAvcMotionEstimationIntraINTEL : I32EnumAttrCase<"SubgroupAvcMotionEstimationIntraINTEL", 5697> { - list availability = [ + let availability = [ Extension<[SPV_INTEL_device_side_avc_motion_estimation]> ]; } def SPV_C_SubgroupAvcMotionEstimationChromaINTEL : I32EnumAttrCase<"SubgroupAvcMotionEstimationChromaINTEL", 5698> { - list availability = [ + let availability = [ Extension<[SPV_INTEL_device_side_avc_motion_estimation]> ]; } @@ -601,67 +575,67 @@ } def SPV_C_NamedBarrier : I32EnumAttrCase<"NamedBarrier", 59> { list implies = [SPV_C_Kernel]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_GroupNonUniformVote : I32EnumAttrCase<"GroupNonUniformVote", 62> { list implies = [SPV_C_GroupNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_GroupNonUniformArithmetic : I32EnumAttrCase<"GroupNonUniformArithmetic", 63> { list implies = [SPV_C_GroupNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_GroupNonUniformBallot : I32EnumAttrCase<"GroupNonUniformBallot", 64> { list implies = [SPV_C_GroupNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_GroupNonUniformShuffle : I32EnumAttrCase<"GroupNonUniformShuffle", 65> { list implies = [SPV_C_GroupNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_GroupNonUniformShuffleRelative : I32EnumAttrCase<"GroupNonUniformShuffleRelative", 66> { list implies = [SPV_C_GroupNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_GroupNonUniformClustered : I32EnumAttrCase<"GroupNonUniformClustered", 67> { list implies = [SPV_C_GroupNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_GroupNonUniformQuad : I32EnumAttrCase<"GroupNonUniformQuad", 68> { list implies = [SPV_C_GroupNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_StorageUniform16 : I32EnumAttrCase<"StorageUniform16", 4434> { list implies = [SPV_C_StorageBuffer16BitAccess]; - list availability = [ + let availability = [ Extension<[SPV_KHR_16bit_storage]> ]; } def SPV_C_UniformAndStorageBuffer8BitAccess : I32EnumAttrCase<"UniformAndStorageBuffer8BitAccess", 4449> { list implies = [SPV_C_StorageBuffer8BitAccess]; - list availability = [ + let availability = [ Extension<[SPV_KHR_8bit_storage]> ]; } def SPV_C_UniformTexelBufferArrayDynamicIndexing : I32EnumAttrCase<"UniformTexelBufferArrayDynamicIndexing", 5304> { list implies = [SPV_C_SampledBuffer]; - list availability = [ + let availability = [ MinVersion ]; } @@ -748,157 +722,157 @@ } def SPV_C_SubgroupDispatch : I32EnumAttrCase<"SubgroupDispatch", 58> { list implies = [SPV_C_DeviceEnqueue]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_PipeStorage : I32EnumAttrCase<"PipeStorage", 60> { list implies = [SPV_C_Pipes]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_DrawParameters : I32EnumAttrCase<"DrawParameters", 4427> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_KHR_shader_draw_parameters]> ]; } def SPV_C_MultiView : I32EnumAttrCase<"MultiView", 4439> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_KHR_multiview]> ]; } def SPV_C_VariablePointersStorageBuffer : I32EnumAttrCase<"VariablePointersStorageBuffer", 4441> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_KHR_variable_pointers]> ]; } def SPV_C_Float16ImageAMD : I32EnumAttrCase<"Float16ImageAMD", 5008> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_AMD_gpu_shader_half_float_fetch]> ]; } def SPV_C_ImageGatherBiasLodAMD : I32EnumAttrCase<"ImageGatherBiasLodAMD", 5009> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_AMD_texture_gather_bias_lod]> ]; } def SPV_C_FragmentMaskAMD : I32EnumAttrCase<"FragmentMaskAMD", 5010> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_fragment_mask]> ]; } def SPV_C_StencilExportEXT : I32EnumAttrCase<"StencilExportEXT", 5013> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_EXT_shader_stencil_export]> ]; } def SPV_C_ImageReadWriteLodAMD : I32EnumAttrCase<"ImageReadWriteLodAMD", 5015> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_image_load_store_lod]> ]; } def SPV_C_ShaderClockKHR : I32EnumAttrCase<"ShaderClockKHR", 5055> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_KHR_shader_clock]> ]; } def SPV_C_FragmentFullyCoveredEXT : I32EnumAttrCase<"FragmentFullyCoveredEXT", 5265> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_fully_covered]> ]; } def SPV_C_MeshShadingNV : I32EnumAttrCase<"MeshShadingNV", 5266> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]> ]; } def SPV_C_FragmentDensityEXT : I32EnumAttrCase<"FragmentDensityEXT", 5291> { list implies = [SPV_C_Shader]; - list availability = [ + let 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 = [ + let availability = [ MinVersion ]; } def SPV_C_RuntimeDescriptorArray : I32EnumAttrCase<"RuntimeDescriptorArray", 5302> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_StorageTexelBufferArrayDynamicIndexing : I32EnumAttrCase<"StorageTexelBufferArrayDynamicIndexing", 5305> { list implies = [SPV_C_ImageBuffer]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_RayTracingNV : I32EnumAttrCase<"RayTracingNV", 5340> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]> ]; } def SPV_C_PhysicalStorageBufferAddresses : I32EnumAttrCase<"PhysicalStorageBufferAddresses", 5347> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ 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 = [ + let availability = [ Extension<[SPV_NV_cooperative_matrix]> ]; } def SPV_C_FragmentShaderSampleInterlockEXT : I32EnumAttrCase<"FragmentShaderSampleInterlockEXT", 5363> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_shader_interlock]> ]; } def SPV_C_FragmentShaderShadingRateInterlockEXT : I32EnumAttrCase<"FragmentShaderShadingRateInterlockEXT", 5372> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_shader_interlock]> ]; } def SPV_C_ShaderSMBuiltinsNV : I32EnumAttrCase<"ShaderSMBuiltinsNV", 5373> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_NV_shader_sm_builtins]> ]; } def SPV_C_FragmentShaderPixelInterlockEXT : I32EnumAttrCase<"FragmentShaderPixelInterlockEXT", 5378> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_shader_interlock]> ]; } def SPV_C_DemoteToHelperInvocationEXT : I32EnumAttrCase<"DemoteToHelperInvocationEXT", 5379> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_EXT_demote_to_helper_invocation]> ]; } def SPV_C_IntegerFunctions2INTEL : I32EnumAttrCase<"IntegerFunctions2INTEL", 5584> { list implies = [SPV_C_Shader]; - list availability = [ + let availability = [ Extension<[SPV_INTEL_shader_integer_functions2]> ]; } @@ -922,91 +896,91 @@ } def SPV_C_VariablePointers : I32EnumAttrCase<"VariablePointers", 4442> { list implies = [SPV_C_VariablePointersStorageBuffer]; - list availability = [ + let availability = [ Extension<[SPV_KHR_variable_pointers]> ]; } def SPV_C_SampleMaskOverrideCoverageNV : I32EnumAttrCase<"SampleMaskOverrideCoverageNV", 5249> { list implies = [SPV_C_SampleRateShading]; - list availability = [ + let availability = [ Extension<[SPV_NV_sample_mask_override_coverage]> ]; } def SPV_C_GeometryShaderPassthroughNV : I32EnumAttrCase<"GeometryShaderPassthroughNV", 5251> { list implies = [SPV_C_Geometry]; - list availability = [ + let availability = [ Extension<[SPV_NV_geometry_shader_passthrough]> ]; } def SPV_C_PerViewAttributesNV : I32EnumAttrCase<"PerViewAttributesNV", 5260> { list implies = [SPV_C_MultiView]; - list availability = [ + let availability = [ Extension<[SPV_NVX_multiview_per_view_attributes]> ]; } def SPV_C_InputAttachmentArrayDynamicIndexing : I32EnumAttrCase<"InputAttachmentArrayDynamicIndexing", 5303> { list implies = [SPV_C_InputAttachment]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_UniformBufferArrayNonUniformIndexing : I32EnumAttrCase<"UniformBufferArrayNonUniformIndexing", 5306> { list implies = [SPV_C_ShaderNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_SampledImageArrayNonUniformIndexing : I32EnumAttrCase<"SampledImageArrayNonUniformIndexing", 5307> { list implies = [SPV_C_ShaderNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_StorageBufferArrayNonUniformIndexing : I32EnumAttrCase<"StorageBufferArrayNonUniformIndexing", 5308> { list implies = [SPV_C_ShaderNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_StorageImageArrayNonUniformIndexing : I32EnumAttrCase<"StorageImageArrayNonUniformIndexing", 5309> { list implies = [SPV_C_ShaderNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_InputAttachmentArrayNonUniformIndexing : I32EnumAttrCase<"InputAttachmentArrayNonUniformIndexing", 5310> { list implies = [SPV_C_InputAttachment, SPV_C_ShaderNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_UniformTexelBufferArrayNonUniformIndexing : I32EnumAttrCase<"UniformTexelBufferArrayNonUniformIndexing", 5311> { list implies = [SPV_C_SampledBuffer, SPV_C_ShaderNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_StorageTexelBufferArrayNonUniformIndexing : I32EnumAttrCase<"StorageTexelBufferArrayNonUniformIndexing", 5312> { list implies = [SPV_C_ImageBuffer, SPV_C_ShaderNonUniform]; - list availability = [ + let availability = [ MinVersion ]; } def SPV_C_ShaderViewportIndexLayerEXT : I32EnumAttrCase<"ShaderViewportIndexLayerEXT", 5254> { list implies = [SPV_C_MultiViewport]; - list availability = [ + let availability = [ Extension<[SPV_EXT_shader_viewport_index_layer]> ]; } def SPV_C_ShaderViewportMaskNV : I32EnumAttrCase<"ShaderViewportMaskNV", 5255> { list implies = [SPV_C_ShaderViewportIndexLayerEXT]; - list availability = [ + let availability = [ Extension<[SPV_NV_viewport_array2]> ]; } def SPV_C_ShaderStereoViewNV : I32EnumAttrCase<"ShaderStereoViewNV", 5259> { list implies = [SPV_C_ShaderViewportMaskNV]; - list availability = [ + let availability = [ Extension<[SPV_NV_stereo_view_rendering]> ]; } @@ -1078,17 +1052,17 @@ def SPV_AM_Logical : I32EnumAttrCase<"Logical", 0>; def SPV_AM_Physical32 : I32EnumAttrCase<"Physical32", 1> { - list availability = [ + let availability = [ Capability<[SPV_C_Addresses]> ]; } def SPV_AM_Physical64 : I32EnumAttrCase<"Physical64", 2> { - list availability = [ + let availability = [ Capability<[SPV_C_Addresses]> ]; } def SPV_AM_PhysicalStorageBuffer64 : I32EnumAttrCase<"PhysicalStorageBuffer64", 5348> { - list availability = [ + let availability = [ Extension<[SPV_EXT_physical_storage_buffer, SPV_KHR_physical_storage_buffer]>, Capability<[SPV_C_PhysicalStorageBufferAddresses]> ]; @@ -1101,112 +1075,112 @@ ]>; def SPV_BI_Position : I32EnumAttrCase<"Position", 0> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_PointSize : I32EnumAttrCase<"PointSize", 1> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_ClipDistance : I32EnumAttrCase<"ClipDistance", 3> { - list availability = [ + let availability = [ Capability<[SPV_C_ClipDistance]> ]; } def SPV_BI_CullDistance : I32EnumAttrCase<"CullDistance", 4> { - list availability = [ + let availability = [ Capability<[SPV_C_CullDistance]> ]; } def SPV_BI_VertexId : I32EnumAttrCase<"VertexId", 5> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_InstanceId : I32EnumAttrCase<"InstanceId", 6> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_PrimitiveId : I32EnumAttrCase<"PrimitiveId", 7> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry, SPV_C_RayTracingNV, SPV_C_Tessellation]> ]; } def SPV_BI_InvocationId : I32EnumAttrCase<"InvocationId", 8> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry, SPV_C_Tessellation]> ]; } def SPV_BI_Layer : I32EnumAttrCase<"Layer", 9> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry, SPV_C_ShaderLayer, SPV_C_ShaderViewportIndexLayerEXT]> ]; } def SPV_BI_ViewportIndex : I32EnumAttrCase<"ViewportIndex", 10> { - list availability = [ + let availability = [ Capability<[SPV_C_MultiViewport, SPV_C_ShaderViewportIndex, SPV_C_ShaderViewportIndexLayerEXT]> ]; } def SPV_BI_TessLevelOuter : I32EnumAttrCase<"TessLevelOuter", 11> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_BI_TessLevelInner : I32EnumAttrCase<"TessLevelInner", 12> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_BI_TessCoord : I32EnumAttrCase<"TessCoord", 13> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_BI_PatchVertices : I32EnumAttrCase<"PatchVertices", 14> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_BI_FragCoord : I32EnumAttrCase<"FragCoord", 15> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_PointCoord : I32EnumAttrCase<"PointCoord", 16> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_FrontFacing : I32EnumAttrCase<"FrontFacing", 17> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_SampleId : I32EnumAttrCase<"SampleId", 18> { - list availability = [ + let availability = [ Capability<[SPV_C_SampleRateShading]> ]; } def SPV_BI_SamplePosition : I32EnumAttrCase<"SamplePosition", 19> { - list availability = [ + let availability = [ Capability<[SPV_C_SampleRateShading]> ]; } def SPV_BI_SampleMask : I32EnumAttrCase<"SampleMask", 20> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_FragDepth : I32EnumAttrCase<"FragDepth", 22> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_HelperInvocation : I32EnumAttrCase<"HelperInvocation", 23> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } @@ -1217,383 +1191,383 @@ def SPV_BI_GlobalInvocationId : I32EnumAttrCase<"GlobalInvocationId", 28>; def SPV_BI_LocalInvocationIndex : I32EnumAttrCase<"LocalInvocationIndex", 29>; def SPV_BI_WorkDim : I32EnumAttrCase<"WorkDim", 30> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_BI_GlobalSize : I32EnumAttrCase<"GlobalSize", 31> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_BI_EnqueuedWorkgroupSize : I32EnumAttrCase<"EnqueuedWorkgroupSize", 32> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_BI_GlobalOffset : I32EnumAttrCase<"GlobalOffset", 33> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_BI_GlobalLinearId : I32EnumAttrCase<"GlobalLinearId", 34> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_BI_SubgroupSize : I32EnumAttrCase<"SubgroupSize", 36> { - list availability = [ + let availability = [ Capability<[SPV_C_GroupNonUniform, SPV_C_Kernel, SPV_C_SubgroupBallotKHR]> ]; } def SPV_BI_SubgroupMaxSize : I32EnumAttrCase<"SubgroupMaxSize", 37> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_BI_NumSubgroups : I32EnumAttrCase<"NumSubgroups", 38> { - list availability = [ + let availability = [ Capability<[SPV_C_GroupNonUniform, SPV_C_Kernel]> ]; } def SPV_BI_NumEnqueuedSubgroups : I32EnumAttrCase<"NumEnqueuedSubgroups", 39> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_BI_SubgroupId : I32EnumAttrCase<"SubgroupId", 40> { - list availability = [ + let availability = [ Capability<[SPV_C_GroupNonUniform, SPV_C_Kernel]> ]; } def SPV_BI_SubgroupLocalInvocationId : I32EnumAttrCase<"SubgroupLocalInvocationId", 41> { - list availability = [ + let availability = [ Capability<[SPV_C_GroupNonUniform, SPV_C_Kernel, SPV_C_SubgroupBallotKHR]> ]; } def SPV_BI_VertexIndex : I32EnumAttrCase<"VertexIndex", 42> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_InstanceIndex : I32EnumAttrCase<"InstanceIndex", 43> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_BI_SubgroupEqMask : I32EnumAttrCase<"SubgroupEqMask", 4416> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_GroupNonUniformBallot, SPV_C_SubgroupBallotKHR]> ]; } def SPV_BI_SubgroupGeMask : I32EnumAttrCase<"SubgroupGeMask", 4417> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_GroupNonUniformBallot, SPV_C_SubgroupBallotKHR]> ]; } def SPV_BI_SubgroupGtMask : I32EnumAttrCase<"SubgroupGtMask", 4418> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_GroupNonUniformBallot, SPV_C_SubgroupBallotKHR]> ]; } def SPV_BI_SubgroupLeMask : I32EnumAttrCase<"SubgroupLeMask", 4419> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_GroupNonUniformBallot, SPV_C_SubgroupBallotKHR]> ]; } def SPV_BI_SubgroupLtMask : I32EnumAttrCase<"SubgroupLtMask", 4420> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_GroupNonUniformBallot, SPV_C_SubgroupBallotKHR]> ]; } def SPV_BI_BaseVertex : I32EnumAttrCase<"BaseVertex", 4424> { - list availability = [ + let availability = [ Extension<[SPV_KHR_shader_draw_parameters]>, Capability<[SPV_C_DrawParameters]> ]; } def SPV_BI_BaseInstance : I32EnumAttrCase<"BaseInstance", 4425> { - list availability = [ + let availability = [ Extension<[SPV_KHR_shader_draw_parameters]>, Capability<[SPV_C_DrawParameters]> ]; } def SPV_BI_DrawIndex : I32EnumAttrCase<"DrawIndex", 4426> { - list availability = [ + let availability = [ Extension<[SPV_KHR_shader_draw_parameters, SPV_NV_mesh_shader]>, Capability<[SPV_C_DrawParameters, SPV_C_MeshShadingNV]> ]; } def SPV_BI_DeviceIndex : I32EnumAttrCase<"DeviceIndex", 4438> { - list availability = [ + let availability = [ Extension<[SPV_KHR_device_group]>, Capability<[SPV_C_DeviceGroup]> ]; } def SPV_BI_ViewIndex : I32EnumAttrCase<"ViewIndex", 4440> { - list availability = [ + let availability = [ Extension<[SPV_KHR_multiview]>, Capability<[SPV_C_MultiView]> ]; } def SPV_BI_BaryCoordNoPerspAMD : I32EnumAttrCase<"BaryCoordNoPerspAMD", 4992> { - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_explicit_vertex_parameter]> ]; } def SPV_BI_BaryCoordNoPerspCentroidAMD : I32EnumAttrCase<"BaryCoordNoPerspCentroidAMD", 4993> { - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_explicit_vertex_parameter]> ]; } def SPV_BI_BaryCoordNoPerspSampleAMD : I32EnumAttrCase<"BaryCoordNoPerspSampleAMD", 4994> { - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_explicit_vertex_parameter]> ]; } def SPV_BI_BaryCoordSmoothAMD : I32EnumAttrCase<"BaryCoordSmoothAMD", 4995> { - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_explicit_vertex_parameter]> ]; } def SPV_BI_BaryCoordSmoothCentroidAMD : I32EnumAttrCase<"BaryCoordSmoothCentroidAMD", 4996> { - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_explicit_vertex_parameter]> ]; } def SPV_BI_BaryCoordSmoothSampleAMD : I32EnumAttrCase<"BaryCoordSmoothSampleAMD", 4997> { - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_explicit_vertex_parameter]> ]; } def SPV_BI_BaryCoordPullModelAMD : I32EnumAttrCase<"BaryCoordPullModelAMD", 4998> { - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_explicit_vertex_parameter]> ]; } def SPV_BI_FragStencilRefEXT : I32EnumAttrCase<"FragStencilRefEXT", 5014> { - list availability = [ + let availability = [ Extension<[SPV_EXT_shader_stencil_export]>, Capability<[SPV_C_StencilExportEXT]> ]; } def SPV_BI_ViewportMaskNV : I32EnumAttrCase<"ViewportMaskNV", 5253> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader, SPV_NV_viewport_array2]>, Capability<[SPV_C_MeshShadingNV, SPV_C_ShaderViewportMaskNV]> ]; } def SPV_BI_SecondaryPositionNV : I32EnumAttrCase<"SecondaryPositionNV", 5257> { - list availability = [ + let availability = [ Extension<[SPV_NV_stereo_view_rendering]>, Capability<[SPV_C_ShaderStereoViewNV]> ]; } def SPV_BI_SecondaryViewportMaskNV : I32EnumAttrCase<"SecondaryViewportMaskNV", 5258> { - list availability = [ + let availability = [ Extension<[SPV_NV_stereo_view_rendering]>, Capability<[SPV_C_ShaderStereoViewNV]> ]; } def SPV_BI_PositionPerViewNV : I32EnumAttrCase<"PositionPerViewNV", 5261> { - list availability = [ + let availability = [ Extension<[SPV_NVX_multiview_per_view_attributes, SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV, SPV_C_PerViewAttributesNV]> ]; } def SPV_BI_ViewportMaskPerViewNV : I32EnumAttrCase<"ViewportMaskPerViewNV", 5262> { - list availability = [ + let availability = [ Extension<[SPV_NVX_multiview_per_view_attributes, SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV, SPV_C_PerViewAttributesNV]> ]; } def SPV_BI_FullyCoveredEXT : I32EnumAttrCase<"FullyCoveredEXT", 5264> { - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_fully_covered]>, Capability<[SPV_C_FragmentFullyCoveredEXT]> ]; } def SPV_BI_TaskCountNV : I32EnumAttrCase<"TaskCountNV", 5274> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_BI_PrimitiveCountNV : I32EnumAttrCase<"PrimitiveCountNV", 5275> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_BI_PrimitiveIndicesNV : I32EnumAttrCase<"PrimitiveIndicesNV", 5276> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_BI_ClipDistancePerViewNV : I32EnumAttrCase<"ClipDistancePerViewNV", 5277> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_BI_CullDistancePerViewNV : I32EnumAttrCase<"CullDistancePerViewNV", 5278> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_BI_LayerPerViewNV : I32EnumAttrCase<"LayerPerViewNV", 5279> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_BI_MeshViewCountNV : I32EnumAttrCase<"MeshViewCountNV", 5280> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_BI_MeshViewIndicesNV : I32EnumAttrCase<"MeshViewIndicesNV", 5281> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_BI_BaryCoordNV : I32EnumAttrCase<"BaryCoordNV", 5286> { - list availability = [ + let availability = [ Extension<[SPV_NV_fragment_shader_barycentric]>, Capability<[SPV_C_FragmentBarycentricNV]> ]; } def SPV_BI_BaryCoordNoPerspNV : I32EnumAttrCase<"BaryCoordNoPerspNV", 5287> { - list availability = [ + let availability = [ Extension<[SPV_NV_fragment_shader_barycentric]>, Capability<[SPV_C_FragmentBarycentricNV]> ]; } def SPV_BI_FragSizeEXT : I32EnumAttrCase<"FragSizeEXT", 5292> { - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_invocation_density, SPV_NV_shading_rate]>, Capability<[SPV_C_FragmentDensityEXT]> ]; } def SPV_BI_FragInvocationCountEXT : I32EnumAttrCase<"FragInvocationCountEXT", 5293> { - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_invocation_density, SPV_NV_shading_rate]>, Capability<[SPV_C_FragmentDensityEXT]> ]; } def SPV_BI_LaunchIdNV : I32EnumAttrCase<"LaunchIdNV", 5319> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_LaunchSizeNV : I32EnumAttrCase<"LaunchSizeNV", 5320> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_WorldRayOriginNV : I32EnumAttrCase<"WorldRayOriginNV", 5321> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_WorldRayDirectionNV : I32EnumAttrCase<"WorldRayDirectionNV", 5322> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_ObjectRayOriginNV : I32EnumAttrCase<"ObjectRayOriginNV", 5323> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_ObjectRayDirectionNV : I32EnumAttrCase<"ObjectRayDirectionNV", 5324> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_RayTminNV : I32EnumAttrCase<"RayTminNV", 5325> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_RayTmaxNV : I32EnumAttrCase<"RayTmaxNV", 5326> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_InstanceCustomIndexNV : I32EnumAttrCase<"InstanceCustomIndexNV", 5327> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_ObjectToWorldNV : I32EnumAttrCase<"ObjectToWorldNV", 5330> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_WorldToObjectNV : I32EnumAttrCase<"WorldToObjectNV", 5331> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_HitTNV : I32EnumAttrCase<"HitTNV", 5332> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_HitKindNV : I32EnumAttrCase<"HitKindNV", 5333> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_IncomingRayFlagsNV : I32EnumAttrCase<"IncomingRayFlagsNV", 5351> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_BI_WarpsPerSMNV : I32EnumAttrCase<"WarpsPerSMNV", 5374> { - list availability = [ + let availability = [ Extension<[SPV_NV_shader_sm_builtins]>, Capability<[SPV_C_ShaderSMBuiltinsNV]> ]; } def SPV_BI_SMCountNV : I32EnumAttrCase<"SMCountNV", 5375> { - list availability = [ + let availability = [ Extension<[SPV_NV_shader_sm_builtins]>, Capability<[SPV_C_ShaderSMBuiltinsNV]> ]; } def SPV_BI_WarpIDNV : I32EnumAttrCase<"WarpIDNV", 5376> { - list availability = [ + let availability = [ Extension<[SPV_NV_shader_sm_builtins]>, Capability<[SPV_C_ShaderSMBuiltinsNV]> ]; } def SPV_BI_SMIDNV : I32EnumAttrCase<"SMIDNV", 5377> { - list availability = [ + let availability = [ Extension<[SPV_NV_shader_sm_builtins]>, Capability<[SPV_C_ShaderSMBuiltinsNV]> ]; @@ -1636,89 +1610,89 @@ ]>; def SPV_D_RelaxedPrecision : I32EnumAttrCase<"RelaxedPrecision", 0> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_SpecId : I32EnumAttrCase<"SpecId", 1> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel, SPV_C_Shader]> ]; } def SPV_D_Block : I32EnumAttrCase<"Block", 2> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_BufferBlock : I32EnumAttrCase<"BufferBlock", 3> { - list availability = [ + let availability = [ MaxVersion, Capability<[SPV_C_Shader]> ]; } def SPV_D_RowMajor : I32EnumAttrCase<"RowMajor", 4> { - list availability = [ + let availability = [ Capability<[SPV_C_Matrix]> ]; } def SPV_D_ColMajor : I32EnumAttrCase<"ColMajor", 5> { - list availability = [ + let availability = [ Capability<[SPV_C_Matrix]> ]; } def SPV_D_ArrayStride : I32EnumAttrCase<"ArrayStride", 6> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_MatrixStride : I32EnumAttrCase<"MatrixStride", 7> { - list availability = [ + let availability = [ Capability<[SPV_C_Matrix]> ]; } def SPV_D_GLSLShared : I32EnumAttrCase<"GLSLShared", 8> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_GLSLPacked : I32EnumAttrCase<"GLSLPacked", 9> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_CPacked : I32EnumAttrCase<"CPacked", 10> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_D_BuiltIn : I32EnumAttrCase<"BuiltIn", 11>; def SPV_D_NoPerspective : I32EnumAttrCase<"NoPerspective", 13> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_Flat : I32EnumAttrCase<"Flat", 14> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_Patch : I32EnumAttrCase<"Patch", 15> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_D_Centroid : I32EnumAttrCase<"Centroid", 16> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_Sample : I32EnumAttrCase<"Sample", 17> { - list availability = [ + let availability = [ Capability<[SPV_C_SampleRateShading]> ]; } def SPV_D_Invariant : I32EnumAttrCase<"Invariant", 18> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } @@ -1726,7 +1700,7 @@ def SPV_D_Aliased : I32EnumAttrCase<"Aliased", 20>; def SPV_D_Volatile : I32EnumAttrCase<"Volatile", 21>; def SPV_D_Constant : I32EnumAttrCase<"Constant", 22> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } @@ -1734,207 +1708,207 @@ def SPV_D_NonWritable : I32EnumAttrCase<"NonWritable", 24>; def SPV_D_NonReadable : I32EnumAttrCase<"NonReadable", 25>; def SPV_D_Uniform : I32EnumAttrCase<"Uniform", 26> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_UniformId : I32EnumAttrCase<"UniformId", 27> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_Shader]> ]; } def SPV_D_SaturatedConversion : I32EnumAttrCase<"SaturatedConversion", 28> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_D_Stream : I32EnumAttrCase<"Stream", 29> { - list availability = [ + let availability = [ Capability<[SPV_C_GeometryStreams]> ]; } def SPV_D_Location : I32EnumAttrCase<"Location", 30> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_Component : I32EnumAttrCase<"Component", 31> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_Index : I32EnumAttrCase<"Index", 32> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_Binding : I32EnumAttrCase<"Binding", 33> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_DescriptorSet : I32EnumAttrCase<"DescriptorSet", 34> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_Offset : I32EnumAttrCase<"Offset", 35> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_XfbBuffer : I32EnumAttrCase<"XfbBuffer", 36> { - list availability = [ + let availability = [ Capability<[SPV_C_TransformFeedback]> ]; } def SPV_D_XfbStride : I32EnumAttrCase<"XfbStride", 37> { - list availability = [ + let availability = [ Capability<[SPV_C_TransformFeedback]> ]; } def SPV_D_FuncParamAttr : I32EnumAttrCase<"FuncParamAttr", 38> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_D_FPRoundingMode : I32EnumAttrCase<"FPRoundingMode", 39>; def SPV_D_FPFastMathMode : I32EnumAttrCase<"FPFastMathMode", 40> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_D_LinkageAttributes : I32EnumAttrCase<"LinkageAttributes", 41> { - list availability = [ + let availability = [ Capability<[SPV_C_Linkage]> ]; } def SPV_D_NoContraction : I32EnumAttrCase<"NoContraction", 42> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_D_InputAttachmentIndex : I32EnumAttrCase<"InputAttachmentIndex", 43> { - list availability = [ + let availability = [ Capability<[SPV_C_InputAttachment]> ]; } def SPV_D_Alignment : I32EnumAttrCase<"Alignment", 44> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_D_MaxByteOffset : I32EnumAttrCase<"MaxByteOffset", 45> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_Addresses]> ]; } def SPV_D_AlignmentId : I32EnumAttrCase<"AlignmentId", 46> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_Kernel]> ]; } def SPV_D_MaxByteOffsetId : I32EnumAttrCase<"MaxByteOffsetId", 47> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_Addresses]> ]; } def SPV_D_NoSignedWrap : I32EnumAttrCase<"NoSignedWrap", 4469> { - list availability = [ + let availability = [ Extension<[SPV_KHR_no_integer_wrap_decoration]> ]; } def SPV_D_NoUnsignedWrap : I32EnumAttrCase<"NoUnsignedWrap", 4470> { - list availability = [ + let availability = [ Extension<[SPV_KHR_no_integer_wrap_decoration]> ]; } def SPV_D_ExplicitInterpAMD : I32EnumAttrCase<"ExplicitInterpAMD", 4999> { - list availability = [ + let availability = [ Extension<[SPV_AMD_shader_explicit_vertex_parameter]> ]; } def SPV_D_OverrideCoverageNV : I32EnumAttrCase<"OverrideCoverageNV", 5248> { - list availability = [ + let availability = [ Extension<[SPV_NV_sample_mask_override_coverage]>, Capability<[SPV_C_SampleMaskOverrideCoverageNV]> ]; } def SPV_D_PassthroughNV : I32EnumAttrCase<"PassthroughNV", 5250> { - list availability = [ + let availability = [ Extension<[SPV_NV_geometry_shader_passthrough]>, Capability<[SPV_C_GeometryShaderPassthroughNV]> ]; } def SPV_D_ViewportRelativeNV : I32EnumAttrCase<"ViewportRelativeNV", 5252> { - list availability = [ + let availability = [ Capability<[SPV_C_ShaderViewportMaskNV]> ]; } def SPV_D_SecondaryViewportRelativeNV : I32EnumAttrCase<"SecondaryViewportRelativeNV", 5256> { - list availability = [ + let availability = [ Extension<[SPV_NV_stereo_view_rendering]>, Capability<[SPV_C_ShaderStereoViewNV]> ]; } def SPV_D_PerPrimitiveNV : I32EnumAttrCase<"PerPrimitiveNV", 5271> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_D_PerViewNV : I32EnumAttrCase<"PerViewNV", 5272> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_D_PerTaskNV : I32EnumAttrCase<"PerTaskNV", 5273> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_D_PerVertexNV : I32EnumAttrCase<"PerVertexNV", 5285> { - list availability = [ + let availability = [ Extension<[SPV_NV_fragment_shader_barycentric]>, Capability<[SPV_C_FragmentBarycentricNV]> ]; } def SPV_D_NonUniform : I32EnumAttrCase<"NonUniform", 5300> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_ShaderNonUniform]> ]; } def SPV_D_RestrictPointer : I32EnumAttrCase<"RestrictPointer", 5355> { - list availability = [ + let availability = [ Extension<[SPV_EXT_physical_storage_buffer, SPV_KHR_physical_storage_buffer]>, Capability<[SPV_C_PhysicalStorageBufferAddresses]> ]; } def SPV_D_AliasedPointer : I32EnumAttrCase<"AliasedPointer", 5356> { - list availability = [ + let availability = [ Extension<[SPV_EXT_physical_storage_buffer, SPV_KHR_physical_storage_buffer]>, Capability<[SPV_C_PhysicalStorageBufferAddresses]> ]; } def SPV_D_CounterBuffer : I32EnumAttrCase<"CounterBuffer", 5634> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_D_UserSemantic : I32EnumAttrCase<"UserSemantic", 5635> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_D_UserTypeGOOGLE : I32EnumAttrCase<"UserTypeGOOGLE", 5636> { - list availability = [ + let availability = [ Extension<[SPV_GOOGLE_user_type]> ]; } @@ -1962,33 +1936,33 @@ ]>; def SPV_D_1D : I32EnumAttrCase<"Dim1D", 0> { - list availability = [ + let availability = [ Capability<[SPV_C_Image1D, SPV_C_Sampled1D]> ]; } def SPV_D_2D : I32EnumAttrCase<"Dim2D", 1> { - list availability = [ + let availability = [ Capability<[SPV_C_ImageMSArray, SPV_C_Kernel, SPV_C_Shader]> ]; } def SPV_D_3D : I32EnumAttrCase<"Dim3D", 2>; def SPV_D_Cube : I32EnumAttrCase<"Cube", 3> { - list availability = [ + let availability = [ Capability<[SPV_C_ImageCubeArray, SPV_C_Shader]> ]; } def SPV_D_Rect : I32EnumAttrCase<"Rect", 4> { - list availability = [ + let availability = [ Capability<[SPV_C_ImageRect, SPV_C_SampledRect]> ]; } def SPV_D_Buffer : I32EnumAttrCase<"Buffer", 5> { - list availability = [ + let availability = [ Capability<[SPV_C_ImageBuffer, SPV_C_SampledBuffer]> ]; } def SPV_D_SubpassData : I32EnumAttrCase<"SubpassData", 6> { - list availability = [ + let availability = [ Capability<[SPV_C_InputAttachment]> ]; } @@ -2000,301 +1974,301 @@ ]>; def SPV_EM_Invocations : I32EnumAttrCase<"Invocations", 0> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry]> ]; } def SPV_EM_SpacingEqual : I32EnumAttrCase<"SpacingEqual", 1> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_EM_SpacingFractionalEven : I32EnumAttrCase<"SpacingFractionalEven", 2> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_EM_SpacingFractionalOdd : I32EnumAttrCase<"SpacingFractionalOdd", 3> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_EM_VertexOrderCw : I32EnumAttrCase<"VertexOrderCw", 4> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_EM_VertexOrderCcw : I32EnumAttrCase<"VertexOrderCcw", 5> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_EM_PixelCenterInteger : I32EnumAttrCase<"PixelCenterInteger", 6> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_OriginUpperLeft : I32EnumAttrCase<"OriginUpperLeft", 7> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_OriginLowerLeft : I32EnumAttrCase<"OriginLowerLeft", 8> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_EarlyFragmentTests : I32EnumAttrCase<"EarlyFragmentTests", 9> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_PointMode : I32EnumAttrCase<"PointMode", 10> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_EM_Xfb : I32EnumAttrCase<"Xfb", 11> { - list availability = [ + let availability = [ Capability<[SPV_C_TransformFeedback]> ]; } def SPV_EM_DepthReplacing : I32EnumAttrCase<"DepthReplacing", 12> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_DepthGreater : I32EnumAttrCase<"DepthGreater", 14> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_DepthLess : I32EnumAttrCase<"DepthLess", 15> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_DepthUnchanged : I32EnumAttrCase<"DepthUnchanged", 16> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_LocalSize : I32EnumAttrCase<"LocalSize", 17>; def SPV_EM_LocalSizeHint : I32EnumAttrCase<"LocalSizeHint", 18> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_EM_InputPoints : I32EnumAttrCase<"InputPoints", 19> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry]> ]; } def SPV_EM_InputLines : I32EnumAttrCase<"InputLines", 20> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry]> ]; } def SPV_EM_InputLinesAdjacency : I32EnumAttrCase<"InputLinesAdjacency", 21> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry]> ]; } def SPV_EM_Triangles : I32EnumAttrCase<"Triangles", 22> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry, SPV_C_Tessellation]> ]; } def SPV_EM_InputTrianglesAdjacency : I32EnumAttrCase<"InputTrianglesAdjacency", 23> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry]> ]; } def SPV_EM_Quads : I32EnumAttrCase<"Quads", 24> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_EM_Isolines : I32EnumAttrCase<"Isolines", 25> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_EM_OutputVertices : I32EnumAttrCase<"OutputVertices", 26> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry, SPV_C_MeshShadingNV, SPV_C_Tessellation]> ]; } def SPV_EM_OutputPoints : I32EnumAttrCase<"OutputPoints", 27> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry, SPV_C_MeshShadingNV]> ]; } def SPV_EM_OutputLineStrip : I32EnumAttrCase<"OutputLineStrip", 28> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry]> ]; } def SPV_EM_OutputTriangleStrip : I32EnumAttrCase<"OutputTriangleStrip", 29> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry]> ]; } def SPV_EM_VecTypeHint : I32EnumAttrCase<"VecTypeHint", 30> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_EM_ContractionOff : I32EnumAttrCase<"ContractionOff", 31> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_EM_Initializer : I32EnumAttrCase<"Initializer", 33> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_Kernel]> ]; } def SPV_EM_Finalizer : I32EnumAttrCase<"Finalizer", 34> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_Kernel]> ]; } def SPV_EM_SubgroupSize : I32EnumAttrCase<"SubgroupSize", 35> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_SubgroupDispatch]> ]; } def SPV_EM_SubgroupsPerWorkgroup : I32EnumAttrCase<"SubgroupsPerWorkgroup", 36> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_SubgroupDispatch]> ]; } def SPV_EM_SubgroupsPerWorkgroupId : I32EnumAttrCase<"SubgroupsPerWorkgroupId", 37> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_SubgroupDispatch]> ]; } def SPV_EM_LocalSizeId : I32EnumAttrCase<"LocalSizeId", 38> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_EM_LocalSizeHintId : I32EnumAttrCase<"LocalSizeHintId", 39> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_Kernel]> ]; } def SPV_EM_PostDepthCoverage : I32EnumAttrCase<"PostDepthCoverage", 4446> { - list availability = [ + let availability = [ Extension<[SPV_KHR_post_depth_coverage]>, Capability<[SPV_C_SampleMaskPostDepthCoverage]> ]; } def SPV_EM_DenormPreserve : I32EnumAttrCase<"DenormPreserve", 4459> { - list availability = [ + let availability = [ Extension<[SPV_KHR_float_controls]>, Capability<[SPV_C_DenormPreserve]> ]; } def SPV_EM_DenormFlushToZero : I32EnumAttrCase<"DenormFlushToZero", 4460> { - list availability = [ + let availability = [ Extension<[SPV_KHR_float_controls]>, Capability<[SPV_C_DenormFlushToZero]> ]; } def SPV_EM_SignedZeroInfNanPreserve : I32EnumAttrCase<"SignedZeroInfNanPreserve", 4461> { - list availability = [ + let availability = [ Extension<[SPV_KHR_float_controls]>, Capability<[SPV_C_SignedZeroInfNanPreserve]> ]; } def SPV_EM_RoundingModeRTE : I32EnumAttrCase<"RoundingModeRTE", 4462> { - list availability = [ + let availability = [ Extension<[SPV_KHR_float_controls]>, Capability<[SPV_C_RoundingModeRTE]> ]; } def SPV_EM_RoundingModeRTZ : I32EnumAttrCase<"RoundingModeRTZ", 4463> { - list availability = [ + let availability = [ Extension<[SPV_KHR_float_controls]>, Capability<[SPV_C_RoundingModeRTZ]> ]; } def SPV_EM_StencilRefReplacingEXT : I32EnumAttrCase<"StencilRefReplacingEXT", 5027> { - list availability = [ + let availability = [ Extension<[SPV_EXT_shader_stencil_export]>, Capability<[SPV_C_StencilExportEXT]> ]; } def SPV_EM_OutputLinesNV : I32EnumAttrCase<"OutputLinesNV", 5269> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_EM_OutputPrimitivesNV : I32EnumAttrCase<"OutputPrimitivesNV", 5270> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_EM_DerivativeGroupQuadsNV : I32EnumAttrCase<"DerivativeGroupQuadsNV", 5289> { - list availability = [ + let availability = [ Extension<[SPV_NV_compute_shader_derivatives]>, Capability<[SPV_C_ComputeDerivativeGroupQuadsNV]> ]; } def SPV_EM_DerivativeGroupLinearNV : I32EnumAttrCase<"DerivativeGroupLinearNV", 5290> { - list availability = [ + let availability = [ Extension<[SPV_NV_compute_shader_derivatives]>, Capability<[SPV_C_ComputeDerivativeGroupLinearNV]> ]; } def SPV_EM_OutputTrianglesNV : I32EnumAttrCase<"OutputTrianglesNV", 5298> { - list availability = [ + let availability = [ Extension<[SPV_NV_mesh_shader]>, Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_EM_PixelInterlockOrderedEXT : I32EnumAttrCase<"PixelInterlockOrderedEXT", 5366> { - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_shader_interlock]>, Capability<[SPV_C_FragmentShaderPixelInterlockEXT]> ]; } def SPV_EM_PixelInterlockUnorderedEXT : I32EnumAttrCase<"PixelInterlockUnorderedEXT", 5367> { - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_shader_interlock]>, Capability<[SPV_C_FragmentShaderPixelInterlockEXT]> ]; } def SPV_EM_SampleInterlockOrderedEXT : I32EnumAttrCase<"SampleInterlockOrderedEXT", 5368> { - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_shader_interlock]>, Capability<[SPV_C_FragmentShaderSampleInterlockEXT]> ]; } def SPV_EM_SampleInterlockUnorderedEXT : I32EnumAttrCase<"SampleInterlockUnorderedEXT", 5369> { - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_shader_interlock]>, Capability<[SPV_C_FragmentShaderSampleInterlockEXT]> ]; } def SPV_EM_ShadingRateInterlockOrderedEXT : I32EnumAttrCase<"ShadingRateInterlockOrderedEXT", 5370> { - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_shader_interlock]>, Capability<[SPV_C_FragmentShaderShadingRateInterlockEXT]> ]; } def SPV_EM_ShadingRateInterlockUnorderedEXT : I32EnumAttrCase<"ShadingRateInterlockUnorderedEXT", 5371> { - list availability = [ + let availability = [ Extension<[SPV_EXT_fragment_shader_interlock]>, Capability<[SPV_C_FragmentShaderShadingRateInterlockEXT]> ]; @@ -2325,77 +2299,77 @@ ]>; def SPV_EM_Vertex : I32EnumAttrCase<"Vertex", 0> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_TessellationControl : I32EnumAttrCase<"TessellationControl", 1> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_EM_TessellationEvaluation : I32EnumAttrCase<"TessellationEvaluation", 2> { - list availability = [ + let availability = [ Capability<[SPV_C_Tessellation]> ]; } def SPV_EM_Geometry : I32EnumAttrCase<"Geometry", 3> { - list availability = [ + let availability = [ Capability<[SPV_C_Geometry]> ]; } def SPV_EM_Fragment : I32EnumAttrCase<"Fragment", 4> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_GLCompute : I32EnumAttrCase<"GLCompute", 5> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_EM_Kernel : I32EnumAttrCase<"Kernel", 6> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_EM_TaskNV : I32EnumAttrCase<"TaskNV", 5267> { - list availability = [ + let availability = [ Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_EM_MeshNV : I32EnumAttrCase<"MeshNV", 5268> { - list availability = [ + let availability = [ Capability<[SPV_C_MeshShadingNV]> ]; } def SPV_EM_RayGenerationNV : I32EnumAttrCase<"RayGenerationNV", 5313> { - list availability = [ + let availability = [ Capability<[SPV_C_RayTracingNV]> ]; } def SPV_EM_IntersectionNV : I32EnumAttrCase<"IntersectionNV", 5314> { - list availability = [ + let availability = [ Capability<[SPV_C_RayTracingNV]> ]; } def SPV_EM_AnyHitNV : I32EnumAttrCase<"AnyHitNV", 5315> { - list availability = [ + let availability = [ Capability<[SPV_C_RayTracingNV]> ]; } def SPV_EM_ClosestHitNV : I32EnumAttrCase<"ClosestHitNV", 5316> { - list availability = [ + let availability = [ Capability<[SPV_C_RayTracingNV]> ]; } def SPV_EM_MissNV : I32EnumAttrCase<"MissNV", 5317> { - list availability = [ + let availability = [ Capability<[SPV_C_RayTracingNV]> ]; } def SPV_EM_CallableNV : I32EnumAttrCase<"CallableNV", 5318> { - list availability = [ + let availability = [ Capability<[SPV_C_RayTracingNV]> ]; } @@ -2420,40 +2394,40 @@ ]>; def SPV_GO_Reduce : I32EnumAttrCase<"Reduce", 0> { - list availability = [ + let availability = [ Capability<[SPV_C_GroupNonUniformArithmetic, SPV_C_GroupNonUniformBallot, SPV_C_Kernel]> ]; } def SPV_GO_InclusiveScan : I32EnumAttrCase<"InclusiveScan", 1> { - list availability = [ + let availability = [ Capability<[SPV_C_GroupNonUniformArithmetic, SPV_C_GroupNonUniformBallot, SPV_C_Kernel]> ]; } def SPV_GO_ExclusiveScan : I32EnumAttrCase<"ExclusiveScan", 2> { - list availability = [ + let availability = [ Capability<[SPV_C_GroupNonUniformArithmetic, SPV_C_GroupNonUniformBallot, SPV_C_Kernel]> ]; } def SPV_GO_ClusteredReduce : I32EnumAttrCase<"ClusteredReduce", 3> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_GroupNonUniformClustered]> ]; } def SPV_GO_PartitionedReduceNV : I32EnumAttrCase<"PartitionedReduceNV", 6> { - list availability = [ + let availability = [ Extension<[SPV_NV_shader_subgroup_partitioned]>, Capability<[SPV_C_GroupNonUniformPartitionedNV]> ]; } def SPV_GO_PartitionedInclusiveScanNV : I32EnumAttrCase<"PartitionedInclusiveScanNV", 7> { - list availability = [ + let availability = [ Extension<[SPV_NV_shader_subgroup_partitioned]>, Capability<[SPV_C_GroupNonUniformPartitionedNV]> ]; } def SPV_GO_PartitionedExclusiveScanNV : I32EnumAttrCase<"PartitionedExclusiveScanNV", 8> { - list availability = [ + let availability = [ Extension<[SPV_NV_shader_subgroup_partitioned]>, Capability<[SPV_C_GroupNonUniformPartitionedNV]> ]; @@ -2468,197 +2442,197 @@ def SPV_IF_Unknown : I32EnumAttrCase<"Unknown", 0>; def SPV_IF_Rgba32f : I32EnumAttrCase<"Rgba32f", 1> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_Rgba16f : I32EnumAttrCase<"Rgba16f", 2> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_R32f : I32EnumAttrCase<"R32f", 3> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_Rgba8 : I32EnumAttrCase<"Rgba8", 4> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_Rgba8Snorm : I32EnumAttrCase<"Rgba8Snorm", 5> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_Rg32f : I32EnumAttrCase<"Rg32f", 6> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rg16f : I32EnumAttrCase<"Rg16f", 7> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_R11fG11fB10f : I32EnumAttrCase<"R11fG11fB10f", 8> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_R16f : I32EnumAttrCase<"R16f", 9> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rgba16 : I32EnumAttrCase<"Rgba16", 10> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rgb10A2 : I32EnumAttrCase<"Rgb10A2", 11> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rg16 : I32EnumAttrCase<"Rg16", 12> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rg8 : I32EnumAttrCase<"Rg8", 13> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_R16 : I32EnumAttrCase<"R16", 14> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_R8 : I32EnumAttrCase<"R8", 15> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rgba16Snorm : I32EnumAttrCase<"Rgba16Snorm", 16> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rg16Snorm : I32EnumAttrCase<"Rg16Snorm", 17> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rg8Snorm : I32EnumAttrCase<"Rg8Snorm", 18> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_R16Snorm : I32EnumAttrCase<"R16Snorm", 19> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_R8Snorm : I32EnumAttrCase<"R8Snorm", 20> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rgba32i : I32EnumAttrCase<"Rgba32i", 21> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_Rgba16i : I32EnumAttrCase<"Rgba16i", 22> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_Rgba8i : I32EnumAttrCase<"Rgba8i", 23> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_R32i : I32EnumAttrCase<"R32i", 24> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_Rg32i : I32EnumAttrCase<"Rg32i", 25> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rg16i : I32EnumAttrCase<"Rg16i", 26> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rg8i : I32EnumAttrCase<"Rg8i", 27> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_R16i : I32EnumAttrCase<"R16i", 28> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_R8i : I32EnumAttrCase<"R8i", 29> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rgba32ui : I32EnumAttrCase<"Rgba32ui", 30> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_Rgba16ui : I32EnumAttrCase<"Rgba16ui", 31> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_Rgba8ui : I32EnumAttrCase<"Rgba8ui", 32> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_R32ui : I32EnumAttrCase<"R32ui", 33> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_IF_Rgb10a2ui : I32EnumAttrCase<"Rgb10a2ui", 34> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rg32ui : I32EnumAttrCase<"Rg32ui", 35> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rg16ui : I32EnumAttrCase<"Rg16ui", 36> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_Rg8ui : I32EnumAttrCase<"Rg8ui", 37> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_R16ui : I32EnumAttrCase<"R16ui", 38> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } def SPV_IF_R8ui : I32EnumAttrCase<"R8ui", 39> { - list availability = [ + let availability = [ Capability<[SPV_C_StorageImageExtendedFormats]> ]; } @@ -2677,12 +2651,12 @@ ]>; def SPV_LT_Export : I32EnumAttrCase<"Export", 0> { - list availability = [ + let availability = [ Capability<[SPV_C_Linkage]> ]; } def SPV_LT_Import : I32EnumAttrCase<"Import", 1> { - list availability = [ + let availability = [ Capability<[SPV_C_Linkage]> ]; } @@ -2696,37 +2670,37 @@ def SPV_LC_Unroll : BitEnumAttrCase<"Unroll", 0x0001>; def SPV_LC_DontUnroll : BitEnumAttrCase<"DontUnroll", 0x0002>; def SPV_LC_DependencyInfinite : BitEnumAttrCase<"DependencyInfinite", 0x0004> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_LC_DependencyLength : BitEnumAttrCase<"DependencyLength", 0x0008> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_LC_MinIterations : BitEnumAttrCase<"MinIterations", 0x0010> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_LC_MaxIterations : BitEnumAttrCase<"MaxIterations", 0x0020> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_LC_IterationMultiple : BitEnumAttrCase<"IterationMultiple", 0x0040> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_LC_PeelCount : BitEnumAttrCase<"PeelCount", 0x0080> { - list availability = [ + let availability = [ MinVersion ]; } def SPV_LC_PartialCount : BitEnumAttrCase<"PartialCount", 0x0100> { - list availability = [ + let availability = [ MinVersion ]; } @@ -2743,19 +2717,19 @@ def SPV_MA_Aligned : BitEnumAttrCase<"Aligned", 0x0002>; def SPV_MA_Nontemporal : BitEnumAttrCase<"Nontemporal", 0x0004>; def SPV_MA_MakePointerAvailable : BitEnumAttrCase<"MakePointerAvailable", 0x0008> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_VulkanMemoryModel]> ]; } def SPV_MA_MakePointerVisible : BitEnumAttrCase<"MakePointerVisible", 0x0010> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_VulkanMemoryModel]> ]; } def SPV_MA_NonPrivatePointer : BitEnumAttrCase<"NonPrivatePointer", 0x0020> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_VulkanMemoryModel]> ]; @@ -2769,22 +2743,22 @@ ]>; def SPV_MM_Simple : I32EnumAttrCase<"Simple", 0> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_MM_GLSL450 : I32EnumAttrCase<"GLSL450", 1> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_MM_OpenCL : I32EnumAttrCase<"OpenCL", 2> { - list availability = [ + let availability = [ Capability<[SPV_C_Kernel]> ]; } def SPV_MM_Vulkan : I32EnumAttrCase<"Vulkan", 3> { - list availability = [ + let availability = [ Extension<[SPV_KHR_vulkan_memory_model]>, Capability<[SPV_C_VulkanMemoryModel]> ]; @@ -2801,7 +2775,7 @@ def SPV_MS_AcquireRelease : BitEnumAttrCase<"AcquireRelease", 0x0008>; def SPV_MS_SequentiallyConsistent : BitEnumAttrCase<"SequentiallyConsistent", 0x0010>; def SPV_MS_UniformMemory : BitEnumAttrCase<"UniformMemory", 0x0040> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } @@ -2809,31 +2783,31 @@ def SPV_MS_WorkgroupMemory : BitEnumAttrCase<"WorkgroupMemory", 0x0100>; def SPV_MS_CrossWorkgroupMemory : BitEnumAttrCase<"CrossWorkgroupMemory", 0x0200>; def SPV_MS_AtomicCounterMemory : BitEnumAttrCase<"AtomicCounterMemory", 0x0400> { - list availability = [ + let availability = [ Capability<[SPV_C_AtomicStorage]> ]; } def SPV_MS_ImageMemory : BitEnumAttrCase<"ImageMemory", 0x0800>; def SPV_MS_OutputMemory : BitEnumAttrCase<"OutputMemory", 0x1000> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_VulkanMemoryModel]> ]; } def SPV_MS_MakeAvailable : BitEnumAttrCase<"MakeAvailable", 0x2000> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_VulkanMemoryModel]> ]; } def SPV_MS_MakeVisible : BitEnumAttrCase<"MakeVisible", 0x4000> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_VulkanMemoryModel]> ]; } def SPV_MS_Volatile : BitEnumAttrCase<"Volatile", 0x8000> { - list availability = [ + let availability = [ Extension<[SPV_KHR_vulkan_memory_model]>, Capability<[SPV_C_VulkanMemoryModel]> ]; @@ -2854,7 +2828,7 @@ def SPV_S_Subgroup : I32EnumAttrCase<"Subgroup", 3>; def SPV_S_Invocation : I32EnumAttrCase<"Invocation", 4>; def SPV_S_QueueFamily : I32EnumAttrCase<"QueueFamily", 5> { - list availability = [ + let availability = [ MinVersion, Capability<[SPV_C_VulkanMemoryModel]> ]; @@ -2878,83 +2852,83 @@ def SPV_SC_UniformConstant : I32EnumAttrCase<"UniformConstant", 0>; def SPV_SC_Input : I32EnumAttrCase<"Input", 1>; def SPV_SC_Uniform : I32EnumAttrCase<"Uniform", 2> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_SC_Output : I32EnumAttrCase<"Output", 3> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_SC_Workgroup : I32EnumAttrCase<"Workgroup", 4>; def SPV_SC_CrossWorkgroup : I32EnumAttrCase<"CrossWorkgroup", 5>; def SPV_SC_Private : I32EnumAttrCase<"Private", 6> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_SC_Function : I32EnumAttrCase<"Function", 7>; def SPV_SC_Generic : I32EnumAttrCase<"Generic", 8> { - list availability = [ + let availability = [ Capability<[SPV_C_GenericPointer]> ]; } def SPV_SC_PushConstant : I32EnumAttrCase<"PushConstant", 9> { - list availability = [ + let availability = [ Capability<[SPV_C_Shader]> ]; } def SPV_SC_AtomicCounter : I32EnumAttrCase<"AtomicCounter", 10> { - list availability = [ + let availability = [ Capability<[SPV_C_AtomicStorage]> ]; } def SPV_SC_Image : I32EnumAttrCase<"Image", 11>; def SPV_SC_StorageBuffer : I32EnumAttrCase<"StorageBuffer", 12> { - list availability = [ + let availability = [ Extension<[SPV_KHR_storage_buffer_storage_class, SPV_KHR_variable_pointers]>, Capability<[SPV_C_Shader]> ]; } def SPV_SC_CallableDataNV : I32EnumAttrCase<"CallableDataNV", 5328> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_SC_IncomingCallableDataNV : I32EnumAttrCase<"IncomingCallableDataNV", 5329> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_SC_RayPayloadNV : I32EnumAttrCase<"RayPayloadNV", 5338> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_SC_HitAttributeNV : I32EnumAttrCase<"HitAttributeNV", 5339> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_SC_IncomingRayPayloadNV : I32EnumAttrCase<"IncomingRayPayloadNV", 5342> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_SC_ShaderRecordBufferNV : I32EnumAttrCase<"ShaderRecordBufferNV", 5343> { - list availability = [ + let availability = [ Extension<[SPV_NV_ray_tracing]>, Capability<[SPV_C_RayTracingNV]> ]; } def SPV_SC_PhysicalStorageBuffer : I32EnumAttrCase<"PhysicalStorageBuffer", 5349> { - list availability = [ + let availability = [ Extension<[SPV_EXT_physical_storage_buffer, SPV_KHR_physical_storage_buffer]>, Capability<[SPV_C_PhysicalStorageBufferAddresses]> ]; @@ -3401,23 +3375,7 @@ // Base class for all SPIR-V ops. class SPV_Op traits = []> : - Op, - DeclareOpInterfaceMethods, - DeclareOpInterfaceMethods, - DeclareOpInterfaceMethods - ])> { - // Availability specification for this op itself. - list availability = [ - MinVersion, - MaxVersion, - Extension<[]>, - Capability<[]> - ]; - + Op { // For each SPIR-V op, the following static functions need to be defined // in SPVOps.cpp: // diff --git a/mlir/include/mlir/IR/OpBase.td b/mlir/include/mlir/IR/OpBase.td --- a/mlir/include/mlir/IR/OpBase.td +++ b/mlir/include/mlir/IR/OpBase.td @@ -38,6 +38,12 @@ string result = r; } +//===----------------------------------------------------------------------===// +// Forward declarations +//===----------------------------------------------------------------------===// + +class Availability; + //===----------------------------------------------------------------------===// // Predicate definitions //===----------------------------------------------------------------------===// @@ -1135,6 +1141,9 @@ // The string representation of the enumerant. May be the same as symbol. string str = strVal; + + // The list of availability classes controlling this case's availability. + list availability = ?; } // An enum attribute case stored with StringAttr. @@ -2237,6 +2246,9 @@ // Note: The list of traits will be uniqued by ODS. list traits = props; + // The list of availability classes controlling this op's availability. + list availability = ?; + // Additional code that will be added to the public part of the generated // C++ code of the op declaration. code extraClassDeclaration = ?; diff --git a/mlir/test/Dialect/SPIRV/IR/availability.mlir b/mlir/test/Dialect/SPIRV/IR/availability.mlir --- a/mlir/test/Dialect/SPIRV/IR/availability.mlir +++ b/mlir/test/Dialect/SPIRV/IR/availability.mlir @@ -2,15 +2,15 @@ // CHECK-LABEL: iadd func @iadd(%arg: i32) -> i32 { - // CHECK: min version: v1.0 - // CHECK: max version: v1.5 - // CHECK: extensions: [ ] - // CHECK: capabilities: [ ] + // CHECK-NOT: min version + // CHECK-NOT: max version + // CHECK-NOT: extensions + // CHECK-NOT: capabilities %0 = spv.IAdd %arg, %arg: i32 return %0: i32 } -// CHECK: atomic_compare_exchange_weak +// CHECK-LABEL: atomic_compare_exchange_weak func @atomic_compare_exchange_weak(%ptr: !spv.ptr, %value: i32, %comparator: i32) -> i32 { // CHECK: min version: v1.0 // CHECK: max version: v1.3 @@ -32,8 +32,8 @@ // CHECK-LABEL: module_logical_glsl450 func @module_logical_glsl450() { - // CHECK: spv.module min version: v1.0 - // CHECK: spv.module max version: v1.5 + // CHECK-NOT: spv.module min version + // CHECK-NOT: spv.module max version // CHECK: spv.module extensions: [ ] // CHECK: spv.module capabilities: [ [Shader] ] spv.module Logical GLSL450 { } @@ -42,8 +42,8 @@ // CHECK-LABEL: module_physical_storage_buffer64_vulkan func @module_physical_storage_buffer64_vulkan() { - // CHECK: spv.module min version: v1.0 - // CHECK: spv.module max version: v1.5 + // CHECK-NOT: spv.module min version + // CHECK-NOT: spv.module max version // CHECK: spv.module extensions: [ [SPV_EXT_physical_storage_buffer, SPV_KHR_physical_storage_buffer] [SPV_KHR_vulkan_memory_model] ] // CHECK: spv.module capabilities: [ [PhysicalStorageBufferAddresses] [VulkanMemoryModel] ] spv.module PhysicalStorageBuffer64 Vulkan { } diff --git a/mlir/tools/mlir-tblgen/EnumsGen.cpp b/mlir/tools/mlir-tblgen/EnumsGen.cpp --- a/mlir/tools/mlir-tblgen/EnumsGen.cpp +++ b/mlir/tools/mlir-tblgen/EnumsGen.cpp @@ -573,7 +573,7 @@ static std::vector getAvailabilities(const llvm::Record &def) { std::vector availabilities; - if (def.getValue("availability")) { + if (def.getValue("availability") && !def.isValueUnset("availability")) { std::vector availDefs = def.getValueAsListOfDefs("availability"); availabilities.reserve(availDefs.size()); diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp --- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp +++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp @@ -1996,7 +1996,7 @@ static std::vector getAvailabilities(const llvm::Record &def) { std::vector availabilities; - if (def.getValue("availability")) { + if (def.getValue("availability") && !def.isValueUnset("availability")) { std::vector availDefs = def.getValueAsListOfDefs("availability"); availabilities.reserve(availDefs.size()); @@ -2445,11 +2445,37 @@ // Add the native and interface traits. for (const auto &trait : op.getTraits()) { - if (auto opTrait = dyn_cast(&trait)) + if (const auto *opTrait = dyn_cast(&trait)) opClass.addTrait(opTrait->getFullyQualifiedTraitName()); - else if (auto opTrait = dyn_cast(&trait)) + else if (const auto *opTrait = dyn_cast(&trait)) opClass.addTrait(opTrait->getFullyQualifiedTraitName()); } + + // Add availability interfact traits. + llvm::DenseSet availClasses; + + // Add availability requirements from the op itself. + for (const Availability &avail : getAvailabilities(op.getDef())) + availClasses.insert(avail.getDef()); + + // Add availability requirements from its attributes. + for (const NamedAttribute &namedAttr : op.getAttributes()) { + const auto *enumAttr = llvm::dyn_cast(&namedAttr.attr); + if (!enumAttr) + continue; + + for (const EnumAttrCase &enumerant : enumAttr->getAllCases()) + for (const Availability &caseAvail : + getAvailabilities(enumerant.getDef())) + availClasses.insert(caseAvail.getDef()); + } + + for (const auto *a : availClasses) { + Availability avail(a); + opClass.addTrait(formatv("{0}::{1}::Trait", + avail.getInterfaceClassNamespace(), + avail.getInterfaceClassName())); + } } void OpEmitter::genOpNameGetter() { 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 @@ -320,8 +320,7 @@ exts == DEFAULT_EXT): joined_spec = ',\n '.join( [e for e in [min_version, max_version, exts, caps] if e]) - avail = '{} availability = [\n {}\n ];'.format( - 'let' if for_op else 'list', joined_spec) + avail = 'let availability = [\n {}\n ];'.format(joined_spec) return '{}{}{}'.format(implies, '\n ' if implies and avail else '', avail)