From 0034f5a9487b66467ff415a2ba3490b32443062f Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Mon, 16 Jun 2025 16:11:25 +0200 Subject: [PATCH] radv: allow ds<->color copies on compute/transfer queues This should be supported just fine. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_formats.c | 10 ++++++++++ src/amd/vulkan/radv_physical_device.c | 2 +- src/amd/vulkan/radv_physical_device.h | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_formats.c b/src/amd/vulkan/radv_formats.c index 6ec8698df97..df3085ab992 100644 --- a/src/amd/vulkan/radv_formats.c +++ b/src/amd/vulkan/radv_formats.c @@ -387,6 +387,16 @@ radv_physical_device_get_format_properties(struct radv_physical_device *pdev, Vk if (vk_format_has_depth(format) && vk_format_has_stencil(format)) tiled &= ~VK_FORMAT_FEATURE_2_BLIT_DST_BIT; + if (radv_compute_queue_enabled(pdev)) { + tiled |= VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_COMPUTE_QUEUE_BIT_KHR | + VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_COMPUTE_QUEUE_BIT_KHR; + } + + if (radv_transfer_queue_enabled(pdev)) { + tiled |= VK_FORMAT_FEATURE_2_DEPTH_COPY_ON_TRANSFER_QUEUE_BIT_KHR | + VK_FORMAT_FEATURE_2_STENCIL_COPY_ON_TRANSFER_QUEUE_BIT_KHR; + } + /* Don't support linear depth surfaces */ linear = 0; } diff --git a/src/amd/vulkan/radv_physical_device.c b/src/amd/vulkan/radv_physical_device.c index 0eae2ab3d89..41947767749 100644 --- a/src/amd/vulkan/radv_physical_device.c +++ b/src/amd/vulkan/radv_physical_device.c @@ -72,7 +72,7 @@ radv_taskmesh_enabled(const struct radv_physical_device *pdev) pdev->info.has_gang_submit; } -static bool +bool radv_transfer_queue_enabled(const struct radv_physical_device *pdev) { const struct radv_instance *instance = radv_physical_device_instance(pdev); diff --git a/src/amd/vulkan/radv_physical_device.h b/src/amd/vulkan/radv_physical_device.h index c6cfba6c520..511e500d7cc 100644 --- a/src/amd/vulkan/radv_physical_device.h +++ b/src/amd/vulkan/radv_physical_device.h @@ -304,6 +304,8 @@ VkResult create_drm_physical_device(struct vk_instance *vk_instance, struct _drm void radv_physical_device_destroy(struct vk_physical_device *vk_pdev); +bool radv_transfer_queue_enabled(const struct radv_physical_device *pdev); + bool radv_compute_queue_enabled(const struct radv_physical_device *pdev); static inline uint32_t