diff --git a/src/vulkan/wsi/wsi_common_metal.c b/src/vulkan/wsi/wsi_common_metal.c index a2ef8a8cfc8..534c0e08445 100644 --- a/src/vulkan/wsi/wsi_common_metal.c +++ b/src/vulkan/wsi/wsi_common_metal.c @@ -525,16 +525,22 @@ wsi_metal_destroy_image(const struct wsi_metal_swapchain *metal_chain, return; } - /* Required since we allocate 2 per queue */ + /* Required since we allocate 2 per queue, stored with the following layout: + * cmd_pool 0: 0, queue_count + * cmd_pool 1: 1, 1 + queue_count + * ... + */ if (image->blit.cmd_buffers) { - int cmd_buffer_count = - chain->blit.queue != NULL ? 2 : wsi->queue_family_count * 2; + int queue_count = + chain->blit.queue != NULL ? 1 : wsi->queue_family_count; - for (uint32_t i = 0; i < cmd_buffer_count; i++) { + for (uint32_t i = 0; i < queue_count; i++) { if (!chain->cmd_pools[i]) continue; wsi->FreeCommandBuffers(chain->device, chain->cmd_pools[i], 1, &image->blit.cmd_buffers[i]); + wsi->FreeCommandBuffers(chain->device, chain->cmd_pools[i], + 1, &image->blit.cmd_buffers[i + queue_count]); } vk_free(&chain->alloc, image->blit.cmd_buffers); image->blit.cmd_buffers = NULL;