spirv: Add supported_capabilities to vtn_builder

Acked-by: Konstantin Seurer <konstantin.seurer@gmail.com>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Iván Briano <ivan.briano@intel.com>
Acked-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28905>
This commit is contained in:
Faith Ekstrand 2024-04-25 07:38:43 -05:00 committed by Marge Bot
parent 4b3561b14d
commit 29aa6cefcc
2 changed files with 152 additions and 0 deletions

View File

@ -6826,6 +6826,157 @@ vtn_create_builder(const uint32_t *words, size_t word_count,
b->options = dup_options;
b->values = vtn_zalloc_array(b, struct vtn_value, value_id_bound);
b->supported_capabilities = (struct spirv_capabilities) {
.Matrix = true,
.Shader = true,
.Geometry = true,
.GeometryPointSize = true,
.UniformBufferArrayDynamicIndexing = true,
.SampledImageArrayDynamicIndexing = true,
.StorageBufferArrayDynamicIndexing = true,
.StorageImageArrayDynamicIndexing = true,
.ImageRect = true,
.SampledRect = true,
.Sampled1D = true,
.Image1D = true,
.SampledCubeArray = true,
.ImageCubeArray = true,
.SampledBuffer = true,
.ImageBuffer = true,
.ImageQuery = true,
.DerivativeControl = true,
.InterpolationFunction = true,
.MultiViewport = true,
.SampleRateShading = true,
.ClipDistance = true,
.CullDistance = true,
.InputAttachment = true,
.ImageGatherExtended = true,
.StorageImageExtendedFormats = true,
.Vector16 = true,
.DotProduct = true,
.DotProductInputAll = true,
.DotProductInput4x8Bit = true,
.DotProductInput4x8BitPacked = true,
.ExpectAssumeKHR = true,
.Linkage = options->caps.linkage,
.SparseResidency = options->caps.sparse_residency,
.MinLod = options->caps.min_lod,
.AtomicStorage = options->caps.atomic_storage,
.Float64 = options->caps.float64,
.Int64 = options->caps.int64,
.Int16 = options->caps.int16,
.Int8 = options->caps.int8,
.TransformFeedback = options->caps.transform_feedback,
.GeometryStreams = options->caps.geometry_streams,
.Int64Atomics = options->caps.int64_atomics,
.StorageImageMultisample = options->caps.storage_image_ms,
.Addresses = options->caps.address,
.Kernel = options->caps.kernel,
.Float16Buffer = options->caps.kernel,
.GenericPointer = options->caps.generic_pointers,
.ImageBasic = options->caps.kernel_image,
.ImageReadWrite = options->caps.kernel_image_read_write,
.LiteralSampler = options->caps.literal_sampler,
.ImageMSArray = options->caps.image_ms_array,
.Tessellation = options->caps.tessellation,
.TessellationPointSize = options->caps.tessellation,
.DrawParameters = options->caps.draw_parameters,
.StorageImageReadWithoutFormat = options->caps.image_read_without_format,
.StorageImageWriteWithoutFormat = options->caps.image_write_without_format,
.DeviceGroup = options->caps.device_group,
.MultiView = options->caps.multiview,
.GroupNonUniform = options->caps.subgroup_basic,
.SubgroupVoteKHR = options->caps.subgroup_vote,
.GroupNonUniformVote = options->caps.subgroup_vote,
.SubgroupBallotKHR = options->caps.subgroup_ballot,
.GroupNonUniformBallot = options->caps.subgroup_ballot,
.GroupNonUniformShuffle = options->caps.subgroup_shuffle,
.GroupNonUniformShuffleRelative = options->caps.subgroup_shuffle,
.GroupNonUniformQuad = options->caps.subgroup_quad,
.GroupNonUniformArithmetic = options->caps.subgroup_arithmetic,
.GroupNonUniformClustered = options->caps.subgroup_arithmetic,
.Groups = options->caps.groups,
.SubgroupDispatch = options->caps.subgroup_dispatch,
.VariablePointersStorageBuffer = options->caps.variable_pointers,
.VariablePointers = options->caps.variable_pointers,
.StorageUniformBufferBlock16 = options->caps.storage_16bit,
.StorageUniform16 = options->caps.storage_16bit,
.StoragePushConstant16 = options->caps.storage_16bit,
.StorageInputOutput16 = options->caps.storage_16bit,
.ShaderLayer = options->caps.shader_viewport_index_layer,
.ShaderViewportIndex = options->caps.shader_viewport_index_layer,
.ShaderViewportIndexLayerEXT = options->caps.shader_viewport_index_layer,
.StorageBuffer8BitAccess = options->caps.storage_8bit,
.UniformAndStorageBuffer8BitAccess = options->caps.storage_8bit,
.StoragePushConstant8 = options->caps.storage_8bit,
.ShaderNonUniformEXT = options->caps.descriptor_indexing,
.InputAttachmentArrayDynamicIndexingEXT = options->caps.descriptor_array_dynamic_indexing,
.UniformTexelBufferArrayDynamicIndexingEXT = options->caps.descriptor_array_dynamic_indexing,
.StorageTexelBufferArrayDynamicIndexingEXT = options->caps.descriptor_array_dynamic_indexing,
.UniformBufferArrayNonUniformIndexingEXT = options->caps.descriptor_array_non_uniform_indexing,
.SampledImageArrayNonUniformIndexingEXT = options->caps.descriptor_array_non_uniform_indexing,
.StorageBufferArrayNonUniformIndexingEXT = options->caps.descriptor_array_non_uniform_indexing,
.StorageImageArrayNonUniformIndexingEXT = options->caps.descriptor_array_non_uniform_indexing,
.InputAttachmentArrayNonUniformIndexingEXT = options->caps.descriptor_array_non_uniform_indexing,
.UniformTexelBufferArrayNonUniformIndexingEXT = options->caps.descriptor_array_non_uniform_indexing,
.StorageTexelBufferArrayNonUniformIndexingEXT = options->caps.descriptor_array_non_uniform_indexing,
.RuntimeDescriptorArrayEXT = options->caps.runtime_descriptor_array,
.StencilExportEXT = options->caps.stencil_export,
.SampleMaskPostDepthCoverage = options->caps.post_depth_coverage,
.DenormFlushToZero = options->caps.float_controls,
.DenormPreserve = options->caps.float_controls,
.SignedZeroInfNanPreserve = options->caps.float_controls,
.RoundingModeRTE = options->caps.float_controls,
.RoundingModeRTZ = options->caps.float_controls,
.PhysicalStorageBufferAddresses = options->caps.physical_storage_buffer_address,
.ComputeDerivativeGroupQuadsNV = options->caps.derivative_group,
.ComputeDerivativeGroupLinearNV = options->caps.derivative_group,
.Float16 = options->caps.float16,
.FragmentShaderSampleInterlockEXT = options->caps.fragment_shader_sample_interlock,
.FragmentShaderPixelInterlockEXT = options->caps.fragment_shader_pixel_interlock,
.ShaderSMBuiltinsNV = options->caps.shader_sm_builtins_nv,
.DemoteToHelperInvocation = options->caps.demote_to_helper_invocation,
.ShaderClockKHR = options->caps.shader_clock,
.VulkanMemoryModel = options->caps.vk_memory_model,
.VulkanMemoryModelDeviceScope = options->caps.vk_memory_model_device_scope,
.ImageReadWriteLodAMD = options->caps.amd_image_read_write_lod,
.IntegerFunctions2INTEL = options->caps.integer_functions2,
.FragmentMaskAMD = options->caps.amd_fragment_mask,
.ImageGatherBiasLodAMD = options->caps.amd_image_gather_bias_lod,
.AtomicFloat16AddEXT = options->caps.float16_atomic_add,
.AtomicFloat32AddEXT = options->caps.float32_atomic_add,
.AtomicFloat64AddEXT = options->caps.float64_atomic_add,
.SubgroupShuffleINTEL = options->caps.intel_subgroup_shuffle,
.SubgroupBufferBlockIOINTEL = options->caps.intel_subgroup_buffer_block_io,
.RayCullMaskKHR = options->caps.ray_cull_mask,
.RayTracingKHR = options->caps.ray_tracing,
.RayQueryKHR = options->caps.ray_query,
.RayTraversalPrimitiveCullingKHR = options->caps.ray_traversal_primitive_culling,
.Int64ImageEXT = options->caps.image_atomic_int64,
.FragmentShadingRateKHR = options->caps.fragment_shading_rate,
.WorkgroupMemoryExplicitLayoutKHR = options->caps.workgroup_memory_explicit_layout,
.WorkgroupMemoryExplicitLayout8BitAccessKHR = options->caps.workgroup_memory_explicit_layout &&
options->caps.storage_8bit,
.WorkgroupMemoryExplicitLayout16BitAccessKHR = options->caps.workgroup_memory_explicit_layout &&
options->caps.storage_16bit,
.AtomicFloat16MinMaxEXT = options->caps.float16_atomic_min_max,
.AtomicFloat32MinMaxEXT = options->caps.float32_atomic_min_max,
.AtomicFloat64MinMaxEXT = options->caps.float64_atomic_min_max,
.MeshShadingEXT = options->caps.mesh_shading,
.MeshShadingNV = options->caps.mesh_shading_nv,
.PerViewAttributesNV = options->caps.per_view_attributes_nv,
.ShaderViewportMaskNV = options->caps.shader_viewport_mask_nv,
.GroupNonUniformRotateKHR = options->caps.subgroup_rotate,
.FragmentFullyCoveredEXT = options->caps.fragment_fully_covered,
.FragmentDensityEXT = options->caps.fragment_density,
.RayTracingPositionFetchKHR = options->caps.ray_tracing_position_fetch,
.RayQueryPositionFetchKHR = options->caps.ray_tracing_position_fetch,
.FragmentBarycentricKHR = options->caps.fragment_barycentric,
.ShaderEnqueueAMDX = options->caps.shader_enqueue,
.CooperativeMatrixKHR = options->caps.cooperative_matrix,
.QuadControlKHR = options->caps.quad_control,
};
/* In GLSLang commit 8297936dd6eb3, their handling of barrier() was fixed
* to provide correct memory semantics on compute shader barrier()

View File

@ -672,6 +672,7 @@ struct vtn_builder {
enum vtn_generator generator_id;
SpvSourceLanguage source_lang;
struct spirv_capabilities supported_capabilities;
struct spirv_capabilities enabled_capabilities;
/* True if we need to fix up CS OpControlBarrier */