From 29aa6cefccf92978d768a4aedfa399ac4aebd981 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Thu, 25 Apr 2024 07:38:43 -0500 Subject: [PATCH] spirv: Add supported_capabilities to vtn_builder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Acked-by: Konstantin Seurer Reviewed-by: Alyssa Rosenzweig Reviewed-by: Iván Briano Acked-By: Mike Blumenkrantz Part-of: --- src/compiler/spirv/spirv_to_nir.c | 151 ++++++++++++++++++++++++++++++ src/compiler/spirv/vtn_private.h | 1 + 2 files changed, 152 insertions(+) diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index f8f59333978..a277ce3d351 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -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() diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h index 4f4715a101e..bc7e0d9c749 100644 --- a/src/compiler/spirv/vtn_private.h +++ b/src/compiler/spirv/vtn_private.h @@ -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 */