spirv: Check capabilities using the supported_capabilities table

Reviewed-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 09:20:20 -05:00 committed by Marge Bot
parent 5836e2430c
commit a7f8555b96

View file

@ -4746,13 +4746,6 @@ vtn_stage_for_execution_model(SpvExecutionModel model)
}
}
#define spv_check_supported(name, cap) do { \
if (!(b->options && b->options->caps.name)) \
vtn_warn("Unsupported SPIR-V capability: %s (%u)", \
spirv_capability_to_string(cap), cap); \
} while(0)
void
vtn_handle_entry_point(struct vtn_builder *b, const uint32_t *w,
unsigned count)
@ -4829,422 +4822,8 @@ vtn_handle_preamble_instruction(struct vtn_builder *b, SpvOp opcode,
spirv_capability_to_string(cap), cap);
}
switch (cap) {
case SpvCapabilityMatrix:
case SpvCapabilityShader:
case SpvCapabilityGeometry:
case SpvCapabilityGeometryPointSize:
case SpvCapabilityUniformBufferArrayDynamicIndexing:
case SpvCapabilitySampledImageArrayDynamicIndexing:
case SpvCapabilityStorageBufferArrayDynamicIndexing:
case SpvCapabilityStorageImageArrayDynamicIndexing:
case SpvCapabilityImageRect:
case SpvCapabilitySampledRect:
case SpvCapabilitySampled1D:
case SpvCapabilityImage1D:
case SpvCapabilitySampledCubeArray:
case SpvCapabilityImageCubeArray:
case SpvCapabilitySampledBuffer:
case SpvCapabilityImageBuffer:
case SpvCapabilityImageQuery:
case SpvCapabilityDerivativeControl:
case SpvCapabilityInterpolationFunction:
case SpvCapabilityMultiViewport:
case SpvCapabilitySampleRateShading:
case SpvCapabilityClipDistance:
case SpvCapabilityCullDistance:
case SpvCapabilityInputAttachment:
case SpvCapabilityImageGatherExtended:
case SpvCapabilityStorageImageExtendedFormats:
case SpvCapabilityVector16:
case SpvCapabilityDotProduct:
case SpvCapabilityDotProductInputAll:
case SpvCapabilityDotProductInput4x8Bit:
case SpvCapabilityDotProductInput4x8BitPacked:
case SpvCapabilityExpectAssumeKHR:
break;
case SpvCapabilityLinkage:
spv_check_supported(linkage, cap);
break;
case SpvCapabilitySparseResidency:
spv_check_supported(sparse_residency, cap);
break;
case SpvCapabilityMinLod:
spv_check_supported(min_lod, cap);
break;
case SpvCapabilityAtomicStorage:
spv_check_supported(atomic_storage, cap);
break;
case SpvCapabilityFloat64:
spv_check_supported(float64, cap);
break;
case SpvCapabilityInt64:
spv_check_supported(int64, cap);
break;
case SpvCapabilityInt16:
spv_check_supported(int16, cap);
break;
case SpvCapabilityInt8:
spv_check_supported(int8, cap);
break;
case SpvCapabilityTransformFeedback:
spv_check_supported(transform_feedback, cap);
break;
case SpvCapabilityGeometryStreams:
spv_check_supported(geometry_streams, cap);
break;
case SpvCapabilityInt64Atomics:
spv_check_supported(int64_atomics, cap);
break;
case SpvCapabilityStorageImageMultisample:
spv_check_supported(storage_image_ms, cap);
break;
case SpvCapabilityAddresses:
spv_check_supported(address, cap);
break;
case SpvCapabilityKernel:
case SpvCapabilityFloat16Buffer:
spv_check_supported(kernel, cap);
break;
case SpvCapabilityGenericPointer:
spv_check_supported(generic_pointers, cap);
break;
case SpvCapabilityImageBasic:
spv_check_supported(kernel_image, cap);
break;
case SpvCapabilityImageReadWrite:
spv_check_supported(kernel_image_read_write, cap);
break;
case SpvCapabilityLiteralSampler:
spv_check_supported(literal_sampler, cap);
break;
case SpvCapabilityImageMSArray:
spv_check_supported(image_ms_array, cap);
break;
case SpvCapabilityTessellation:
case SpvCapabilityTessellationPointSize:
spv_check_supported(tessellation, cap);
break;
case SpvCapabilityDrawParameters:
spv_check_supported(draw_parameters, cap);
break;
case SpvCapabilityStorageImageReadWithoutFormat:
spv_check_supported(image_read_without_format, cap);
break;
case SpvCapabilityStorageImageWriteWithoutFormat:
spv_check_supported(image_write_without_format, cap);
break;
case SpvCapabilityDeviceGroup:
spv_check_supported(device_group, cap);
break;
case SpvCapabilityMultiView:
spv_check_supported(multiview, cap);
break;
case SpvCapabilityGroupNonUniform:
spv_check_supported(subgroup_basic, cap);
break;
case SpvCapabilitySubgroupVoteKHR:
case SpvCapabilityGroupNonUniformVote:
spv_check_supported(subgroup_vote, cap);
break;
case SpvCapabilitySubgroupBallotKHR:
case SpvCapabilityGroupNonUniformBallot:
spv_check_supported(subgroup_ballot, cap);
break;
case SpvCapabilityGroupNonUniformShuffle:
case SpvCapabilityGroupNonUniformShuffleRelative:
spv_check_supported(subgroup_shuffle, cap);
break;
case SpvCapabilityGroupNonUniformQuad:
spv_check_supported(subgroup_quad, cap);
break;
case SpvCapabilityGroupNonUniformArithmetic:
case SpvCapabilityGroupNonUniformClustered:
spv_check_supported(subgroup_arithmetic, cap);
break;
case SpvCapabilityGroups:
spv_check_supported(groups, cap);
break;
case SpvCapabilitySubgroupDispatch:
spv_check_supported(subgroup_dispatch, cap);
break;
case SpvCapabilityVariablePointersStorageBuffer:
case SpvCapabilityVariablePointers:
spv_check_supported(variable_pointers, cap);
break;
case SpvCapabilityStorageUniformBufferBlock16:
case SpvCapabilityStorageUniform16:
case SpvCapabilityStoragePushConstant16:
case SpvCapabilityStorageInputOutput16:
spv_check_supported(storage_16bit, cap);
break;
case SpvCapabilityShaderLayer:
case SpvCapabilityShaderViewportIndex:
case SpvCapabilityShaderViewportIndexLayerEXT:
spv_check_supported(shader_viewport_index_layer, cap);
break;
case SpvCapabilityStorageBuffer8BitAccess:
case SpvCapabilityUniformAndStorageBuffer8BitAccess:
case SpvCapabilityStoragePushConstant8:
spv_check_supported(storage_8bit, cap);
break;
case SpvCapabilityShaderNonUniformEXT:
spv_check_supported(descriptor_indexing, cap);
break;
case SpvCapabilityInputAttachmentArrayDynamicIndexingEXT:
case SpvCapabilityUniformTexelBufferArrayDynamicIndexingEXT:
case SpvCapabilityStorageTexelBufferArrayDynamicIndexingEXT:
spv_check_supported(descriptor_array_dynamic_indexing, cap);
break;
case SpvCapabilityUniformBufferArrayNonUniformIndexingEXT:
case SpvCapabilitySampledImageArrayNonUniformIndexingEXT:
case SpvCapabilityStorageBufferArrayNonUniformIndexingEXT:
case SpvCapabilityStorageImageArrayNonUniformIndexingEXT:
case SpvCapabilityInputAttachmentArrayNonUniformIndexingEXT:
case SpvCapabilityUniformTexelBufferArrayNonUniformIndexingEXT:
case SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT:
spv_check_supported(descriptor_array_non_uniform_indexing, cap);
break;
case SpvCapabilityRuntimeDescriptorArrayEXT:
spv_check_supported(runtime_descriptor_array, cap);
break;
case SpvCapabilityStencilExportEXT:
spv_check_supported(stencil_export, cap);
break;
case SpvCapabilitySampleMaskPostDepthCoverage:
spv_check_supported(post_depth_coverage, cap);
break;
case SpvCapabilityDenormFlushToZero:
case SpvCapabilityDenormPreserve:
case SpvCapabilitySignedZeroInfNanPreserve:
case SpvCapabilityRoundingModeRTE:
case SpvCapabilityRoundingModeRTZ:
spv_check_supported(float_controls, cap);
break;
case SpvCapabilityFloatControls2:
spv_check_supported(float_controls2, cap);
break;
case SpvCapabilityPhysicalStorageBufferAddresses:
spv_check_supported(physical_storage_buffer_address, cap);
break;
case SpvCapabilityComputeDerivativeGroupQuadsNV:
case SpvCapabilityComputeDerivativeGroupLinearNV:
spv_check_supported(derivative_group, cap);
break;
case SpvCapabilityFloat16:
spv_check_supported(float16, cap);
break;
case SpvCapabilityFragmentShaderSampleInterlockEXT:
spv_check_supported(fragment_shader_sample_interlock, cap);
break;
case SpvCapabilityFragmentShaderPixelInterlockEXT:
spv_check_supported(fragment_shader_pixel_interlock, cap);
break;
case SpvCapabilityShaderSMBuiltinsNV:
spv_check_supported(shader_sm_builtins_nv, cap);
break;
case SpvCapabilityDemoteToHelperInvocation:
spv_check_supported(demote_to_helper_invocation, cap);
break;
case SpvCapabilityShaderClockKHR:
spv_check_supported(shader_clock, cap);
break;
case SpvCapabilityVulkanMemoryModel:
spv_check_supported(vk_memory_model, cap);
break;
case SpvCapabilityVulkanMemoryModelDeviceScope:
spv_check_supported(vk_memory_model_device_scope, cap);
break;
case SpvCapabilityImageReadWriteLodAMD:
spv_check_supported(amd_image_read_write_lod, cap);
break;
case SpvCapabilityIntegerFunctions2INTEL:
spv_check_supported(integer_functions2, cap);
break;
case SpvCapabilityFragmentMaskAMD:
spv_check_supported(amd_fragment_mask, cap);
break;
case SpvCapabilityImageGatherBiasLodAMD:
spv_check_supported(amd_image_gather_bias_lod, cap);
break;
case SpvCapabilityAtomicFloat16AddEXT:
spv_check_supported(float16_atomic_add, cap);
break;
case SpvCapabilityAtomicFloat32AddEXT:
spv_check_supported(float32_atomic_add, cap);
break;
case SpvCapabilityAtomicFloat64AddEXT:
spv_check_supported(float64_atomic_add, cap);
break;
case SpvCapabilitySubgroupShuffleINTEL:
spv_check_supported(intel_subgroup_shuffle, cap);
break;
case SpvCapabilitySubgroupBufferBlockIOINTEL:
spv_check_supported(intel_subgroup_buffer_block_io, cap);
break;
case SpvCapabilityRayCullMaskKHR:
spv_check_supported(ray_cull_mask, cap);
break;
case SpvCapabilityRayTracingKHR:
spv_check_supported(ray_tracing, cap);
break;
case SpvCapabilityRayQueryKHR:
spv_check_supported(ray_query, cap);
break;
case SpvCapabilityRayTraversalPrimitiveCullingKHR:
spv_check_supported(ray_traversal_primitive_culling, cap);
break;
case SpvCapabilityInt64ImageEXT:
spv_check_supported(image_atomic_int64, cap);
break;
case SpvCapabilityFragmentShadingRateKHR:
spv_check_supported(fragment_shading_rate, cap);
break;
case SpvCapabilityWorkgroupMemoryExplicitLayoutKHR:
spv_check_supported(workgroup_memory_explicit_layout, cap);
break;
case SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR:
spv_check_supported(workgroup_memory_explicit_layout, cap);
spv_check_supported(storage_8bit, cap);
break;
case SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR:
spv_check_supported(workgroup_memory_explicit_layout, cap);
spv_check_supported(storage_16bit, cap);
break;
case SpvCapabilityAtomicFloat16MinMaxEXT:
spv_check_supported(float16_atomic_min_max, cap);
break;
case SpvCapabilityAtomicFloat32MinMaxEXT:
spv_check_supported(float32_atomic_min_max, cap);
break;
case SpvCapabilityAtomicFloat64MinMaxEXT:
spv_check_supported(float64_atomic_min_max, cap);
break;
case SpvCapabilityMeshShadingEXT:
spv_check_supported(mesh_shading, cap);
break;
case SpvCapabilityMeshShadingNV:
spv_check_supported(mesh_shading_nv, cap);
break;
case SpvCapabilityPerViewAttributesNV:
spv_check_supported(per_view_attributes_nv, cap);
break;
case SpvCapabilityShaderViewportMaskNV:
spv_check_supported(shader_viewport_mask_nv, cap);
break;
case SpvCapabilityGroupNonUniformRotateKHR:
spv_check_supported(subgroup_rotate, cap);
break;
case SpvCapabilityFragmentFullyCoveredEXT:
spv_check_supported(fragment_fully_covered, cap);
break;
case SpvCapabilityFragmentDensityEXT:
spv_check_supported(fragment_density, cap);
break;
case SpvCapabilityRayTracingPositionFetchKHR:
case SpvCapabilityRayQueryPositionFetchKHR:
spv_check_supported(ray_tracing_position_fetch, cap);
break;
case SpvCapabilityFragmentBarycentricKHR:
spv_check_supported(fragment_barycentric, cap);
break;
case SpvCapabilityShaderEnqueueAMDX:
spv_check_supported(shader_enqueue, cap);
break;
case SpvCapabilityCooperativeMatrixKHR:
spv_check_supported(cooperative_matrix, cap);
break;
case SpvCapabilityQuadControlKHR:
spv_check_supported(quad_control, cap);
break;
default:
vtn_fail("Unhandled capability: %s (%u)",
if (!spirv_capabilities_get(&b->supported_capabilities, cap)) {
vtn_warn("Unsupported SPIR-V capability: %s (%u)",
spirv_capability_to_string(cap), cap);
}