diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index fb7e51cbb92..28016b4fbc0 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -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); }