From 656b3814c28e514ef77379dac734890387c4761a Mon Sep 17 00:00:00 2001 From: Benjamin Cheng Date: Fri, 24 Apr 2026 09:08:53 -0400 Subject: [PATCH] radv/wsi: Re-use transfer queue if it exists This avoids writing past the end of pdev->vk_queue_to_radv if all the queue families are available. Cc: mesa-stable Closes: https://gitlab.freedesktop.org/mesa/mesa/-/work_items/14834 Reviewed-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_wsi.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c index 9d32f0c92fc..78a88981ba8 100644 --- a/src/amd/vulkan/radv_wsi.c +++ b/src/amd/vulkan/radv_wsi.c @@ -54,10 +54,22 @@ radv_wsi_get_prime_blit_queue(VkDevice _device) if (pdev->info.gfx_level >= GFX9 && !(instance->debug_flags & RADV_DEBUG_NO_DMA_BLIT)) { - pdev->vk_queue_to_radv[pdev->num_queues++] = RADV_QUEUE_TRANSFER; + uint32_t queue_family_index = pdev->num_queues; + for (uint32_t i = 0; i < pdev->num_queues; i++) { + if (pdev->vk_queue_to_radv[i] == RADV_QUEUE_TRANSFER) { + queue_family_index = i; + break; + } + } + + if (queue_family_index == pdev->num_queues) { + assert(pdev->num_queues < RADV_MAX_QUEUE_FAMILIES); + pdev->vk_queue_to_radv[pdev->num_queues++] = RADV_QUEUE_TRANSFER; + } + const VkDeviceQueueCreateInfo queue_create = { .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, - .queueFamilyIndex = pdev->num_queues - 1, + .queueFamilyIndex = queue_family_index, .queueCount = 1, };