From 38c45482909c8f76e2e79d45a0c8e6e47d1c56f4 Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Wed, 4 Dec 2024 21:25:12 +0100 Subject: [PATCH] lavapipe: Advertise vulkan 1.4 Only advertise 1.4 for LLVM_VERSION_MAJOR>=10 because some subgroup operations were promoted. Closes: #12241 Reviewed-by: Dave Airlie Part-of: --- docs/features.txt | 4 +- src/gallium/frontends/lavapipe/lvp_device.c | 119 ++++++++------------ src/gallium/targets/lavapipe/meson.build | 4 +- 3 files changed, 52 insertions(+), 75 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index a455e66e2e7..f8c44224b24 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -505,7 +505,7 @@ Vulkan 1.3 -- all DONE: anv, lvp, nvk, radv, tu, vn, v3dv VK_EXT_tooling_info DONE (anv, hasvk, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_EXT_ycbcr_2plane_444_formats DONE (anv, lvp, nvk, vn) -Vulkan 1.4 -- all DONE: anv, nvk, radv/gfx8+, tu/a7xx+ +Vulkan 1.4 -- all DONE: anv, lvp, nvk, radv/gfx8+, tu/a7xx+ VK_KHR_dynamic_rendering_local_read DONE (anv, lvp, nvk, radv, tu) VK_KHR_global_priority DONE (anv, lvp, nvk, panvk, radv, tu) @@ -514,7 +514,7 @@ Vulkan 1.4 -- all DONE: anv, nvk, radv/gfx8+, tu/a7xx+ VK_KHR_load_store_op_none DONE (anv, lvp, nvk, radv, tu, v3dv) VK_KHR_maintenance5 DONE (anv, lvp, nvk, radv, tu, v3dv, vn) VK_KHR_maintenance6 DONE (anv, lvp, nvk, radv, tu) - VK_KHR_map_memory2 DONE (anv, nvk, panvk, radv, tu) + VK_KHR_map_memory2 DONE (anv, lvp, nvk, panvk, radv, tu) VK_KHR_push_descriptor DONE (anv, hasvk, lvp, nvk, panvk, radv, tu, vn) VK_KHR_shader_expect_assume DONE (anv, dzn, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn) VK_KHR_shader_float_controls2 DONE (anv, lvp, nvk, radv, tu) diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c index 56f76a555c7..c7d577471de 100644 --- a/src/gallium/frontends/lavapipe/lvp_device.c +++ b/src/gallium/frontends/lavapipe/lvp_device.c @@ -61,7 +61,12 @@ defined(VK_USE_PLATFORM_METAL_EXT) #define LVP_USE_WSI_PLATFORM #endif + +#if LLVM_VERSION_MAJOR >= 10 +#define LVP_API_VERSION VK_MAKE_VERSION(1, 4, VK_HEADER_VERSION) +#else #define LVP_API_VERSION VK_MAKE_VERSION(1, 3, VK_HEADER_VERSION) +#endif VKAPI_ATTR VkResult VKAPI_CALL lvp_EnumerateInstanceVersion(uint32_t* pApiVersion) { @@ -453,6 +458,28 @@ lvp_get_features(const struct lvp_physical_device *pdevice, .shaderIntegerDotProduct = true, .maintenance4 = true, + /* Vulkan 1.4 */ + .globalPriorityQuery = true, + .shaderSubgroupRotate = true, + .shaderSubgroupRotateClustered = true, + .shaderFloatControls2 = true, + .shaderExpectAssume = true, + .rectangularLines = true, + .bresenhamLines = true, + .smoothLines = true, + .stippledRectangularLines = true, + .stippledBresenhamLines = true, + .stippledSmoothLines = true, + .vertexAttributeInstanceRateDivisor = instance_divisor, + .vertexAttributeInstanceRateZeroDivisor = instance_divisor, + .indexTypeUint8 = true, + .dynamicRenderingLocalRead = true, + .maintenance5 = true, + .maintenance6 = true, + .pipelineRobustness = true, + .hostImageCopy = true, + .pushDescriptor = true, + /* VK_KHR_acceleration_structure */ .accelerationStructure = true, .accelerationStructureCaptureReplay = false, @@ -478,9 +505,6 @@ lvp_get_features(const struct lvp_physical_device *pdevice, /* VK_EXT_non_seamless_cube_map */ .nonSeamlessCubeMap = true, - /* VK_KHR_global_priority */ - .globalPriorityQuery = true, - /* VK_EXT_attachment_feedback_loop_layout */ .attachmentFeedbackLoopLayout = true, @@ -492,27 +516,12 @@ lvp_get_features(const struct lvp_physical_device *pdevice, .rasterizationOrderDepthAttachmentAccess = true, .rasterizationOrderStencilAttachmentAccess = true, - /* VK_EXT_line_rasterization */ - .rectangularLines = true, - .bresenhamLines = true, - .smoothLines = true, - .stippledRectangularLines = true, - .stippledBresenhamLines = true, - .stippledSmoothLines = true, - - /* VK_EXT_vertex_attribute_divisor */ - .vertexAttributeInstanceRateZeroDivisor = instance_divisor, - .vertexAttributeInstanceRateDivisor = instance_divisor, - /* VK_EXT_multisampled_render_to_single_sampled */ .multisampledRenderToSingleSampled = true, /* VK_EXT_mutable_descriptor_type */ .mutableDescriptorType = true, - /* VK_EXT_index_type_uint8 */ - .indexTypeUint8 = true, - /* VK_EXT_vertex_input_dynamic_state */ .vertexInputDynamicState = true, @@ -591,9 +600,6 @@ lvp_get_features(const struct lvp_physical_device *pdevice, /* VK_EXT_multi_draw */ .multiDraw = true, - /* VK_EXT_pipeline_robustness */ - .pipelineRobustness = true, - /* VK_EXT_depth_clip_enable */ .depthClipEnable = (pdevice->pscreen->get_param(pdevice->pscreen, PIPE_CAP_DEPTH_CLAMP_ENABLE) != 0), @@ -699,9 +705,6 @@ lvp_get_features(const struct lvp_physical_device *pdevice, .nestedCommandBufferRendering = true, .nestedCommandBufferSimultaneousUse = true, - /* VK_KHR_dynamic_rendering_local_read */ - .dynamicRenderingLocalRead = true, - /* VK_EXT_mesh_shader */ .taskShader = true, .meshShader = true, @@ -709,26 +712,15 @@ lvp_get_features(const struct lvp_physical_device *pdevice, .primitiveFragmentShadingRateMeshShader = false, .meshShaderQueries = true, - /* host_image_copy */ - .hostImageCopy = true, - - /* maintenance5 */ - .maintenance5 = true, - /* VK_EXT_ycbcr_2plane_444_formats */ .ycbcr2plane444Formats = true, /* VK_EXT_ycbcr_image_arrays */ .ycbcrImageArrays = true, - /* maintenance6 */ - .maintenance6 = true, /* maintenance7 */ .maintenance7 = true, - /* VK_KHR_shader_expect_assume */ - .shaderExpectAssume = true, - /* VK_KHR_shader_maximal_reconvergence */ .shaderMaximalReconvergence = true, @@ -749,9 +741,6 @@ lvp_get_features(const struct lvp_physical_device *pdevice, .shaderSubgroupRotate = true, .shaderSubgroupRotateClustered = true, - /* KHR_shader_float_controls2 */ - .shaderFloatControls2 = true, - /* VK_KHR_compute_shader_derivatives */ .computeDerivativeGroupQuads = true, .computeDerivativeGroupLinear = true, @@ -1030,10 +1019,22 @@ lvp_get_properties(const struct lvp_physical_device *device, struct vk_propertie .uniformTexelBufferOffsetSingleTexelAlignment = true, .maxBufferSize = UINT32_MAX, - /* VK_KHR_push_descriptor */ + /* Vulkan 1.4 */ + .lineSubPixelPrecisionBits = device->pscreen->get_param(device->pscreen, PIPE_CAP_RASTERIZER_SUBPIXEL_BITS), .maxPushDescriptors = MAX_PUSH_DESCRIPTORS, - - /* VK_EXT_host_image_copy */ + /* FIXME No idea about most of these ones. */ + .earlyFragmentMultisampleCoverageAfterSampleCounting = true, + .earlyFragmentSampleMaskTestBeforeSampleCounting = false, + .depthStencilSwizzleOneSupport = false, + .polygonModePointSize = true, /* This one is correct. */ + .nonStrictSinglePixelWideLinesUseParallelogram = false, + .nonStrictWideLinesUseParallelogram = false, + .blockTexelViewCompatibleMultipleLayers = true, + .maxCombinedImageSamplerDescriptorCount = 3, + .defaultRobustnessStorageBuffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT, + .defaultRobustnessUniformBuffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT, + .defaultRobustnessVertexInputs = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT, + .defaultRobustnessImages = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT, .pCopySrcLayouts = lvp_host_copy_image_layouts, .copySrcLayoutCount = ARRAY_SIZE(lvp_host_copy_image_layouts), .pCopyDstLayouts = lvp_host_copy_image_layouts, @@ -1052,24 +1053,9 @@ lvp_get_properties(const struct lvp_physical_device *device, struct vk_propertie .transformFeedbackRasterizationStreamSelect = false, .transformFeedbackDraw = true, - /* VK_KHR_maintenance5 */ - /* FIXME No idea about most of these ones. */ - .earlyFragmentMultisampleCoverageAfterSampleCounting = true, - .earlyFragmentSampleMaskTestBeforeSampleCounting = false, - .depthStencilSwizzleOneSupport = false, - .polygonModePointSize = true, /* This one is correct. */ - .nonStrictSinglePixelWideLinesUseParallelogram = false, - .nonStrictWideLinesUseParallelogram = false, - - /* maintenance6 */ - .maxCombinedImageSamplerDescriptorCount = 3, - /* VK_EXT_extended_dynamic_state3 */ .dynamicPrimitiveTopologyUnrestricted = VK_TRUE, - /* VK_EXT_line_rasterization */ - .lineSubPixelPrecisionBits = device->pscreen->get_param(device->pscreen, PIPE_CAP_RASTERIZER_SUBPIXEL_BITS), - /* VK_NV_device_generated_commands */ .maxGraphicsShaderGroupCount = 1<<12, .maxIndirectSequenceCount = 1<<20, @@ -1105,12 +1091,6 @@ lvp_get_properties(const struct lvp_physical_device *device, struct vk_propertie /* VK_EXT_multi_draw */ .maxMultiDrawCount = 2048, - /* VK_EXT_pipeline_robustness */ - .defaultRobustnessStorageBuffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT, - .defaultRobustnessUniformBuffers = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT, - .defaultRobustnessVertexInputs = VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2_EXT, - .defaultRobustnessImages = VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2_EXT, - /* VK_EXT_descriptor_buffer */ .combinedImageSamplerDescriptorSingleArray = VK_TRUE, .bufferlessPushDescriptors = VK_TRUE, @@ -1249,20 +1229,17 @@ lvp_get_properties(const struct lvp_physical_device *device, struct vk_propertie #endif ); - /* VK_EXT_nested_command_buffer */ - p->maxCommandBufferNestingLevel = UINT32_MAX; - - /* VK_EXT_host_image_copy */ - lvp_device_get_cache_uuid(p->optimalTilingLayoutUUID); - - /* VK_EXT_vertex_attribute_divisor */ + /* Vulkan 1.4 */ if (device->pscreen->get_param(device->pscreen, PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR) != 0) p->maxVertexAttribDivisor = UINT32_MAX; else p->maxVertexAttribDivisor = 1; - /* maintenance6 */ - p->blockTexelViewCompatibleMultipleLayers = true, + /* VK_EXT_nested_command_buffer */ + p->maxCommandBufferNestingLevel = UINT32_MAX; + + /* VK_EXT_host_image_copy */ + lvp_device_get_cache_uuid(p->optimalTilingLayoutUUID); /* maintenance7 */ p->robustFragmentShadingRateAttachmentAccess = false; diff --git a/src/gallium/targets/lavapipe/meson.build b/src/gallium/targets/lavapipe/meson.build index 9c8730a54ce..08da3c084d1 100644 --- a/src/gallium/targets/lavapipe/meson.build +++ b/src/gallium/targets/lavapipe/meson.build @@ -28,7 +28,7 @@ endif icd_command = [ prog_python, '@INPUT0@', - '--api-version', '1.3', '--xml', '@INPUT1@', + '--api-version', '1.4', '--xml', '@INPUT1@', '--lib-path', join_paths(icd_lib_path, icd_file_name), '--out', '@OUTPUT@', ] @@ -54,7 +54,7 @@ _dev_icd = custom_target( output : _dev_icdname, command : [ prog_python, '@INPUT0@', - '--api-version', '1.1', '--xml', '@INPUT1@', + '--api-version', '1.4', '--xml', '@INPUT1@', '--lib-path', meson.current_build_dir() / icd_file_name, '--out', '@OUTPUT@', ],