diff --git a/.pick_status.json b/.pick_status.json index a89ca9ea15c..89c34297652 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -74,7 +74,7 @@ "description": "radv/wsi: Re-use transfer queue if it exists", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/vulkan/radv_wsi.c b/src/amd/vulkan/radv_wsi.c index 835b17e50aa..97a0d80af00 100644 --- a/src/amd/vulkan/radv_wsi.c +++ b/src/amd/vulkan/radv_wsi.c @@ -50,10 +50,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, };