mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 08:40:11 +01:00
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:
parent
5836e2430c
commit
a7f8555b96
1 changed files with 2 additions and 423 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue