diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index a233e0a2fc5..bd73ec186a1 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -1460,6 +1460,20 @@ zink_destroy_screen(struct pipe_screen *pscreen) { struct zink_screen *screen = zink_screen(pscreen); + if (!screen->device_lost && screen->queue) { + VkResult result = VKSCR(QueueWaitIdle)(screen->queue); + + if (result != VK_SUCCESS) + mesa_loge("ZINK: vkQueueWaitIdle failed (%s)", vk_Result_to_str(result)); + + if (screen->queue_sparse && screen->queue_sparse != screen->queue) { + result = VKSCR(QueueWaitIdle)(screen->queue_sparse); + + if (result != VK_SUCCESS) + mesa_loge("ZINK: vkQueueWaitIdle failed (%s)", vk_Result_to_str(result)); + } + } + if (screen->renderdoc_capture_all && p_atomic_dec_zero(&num_screens)) screen->renderdoc_api->EndFrameCapture(RENDERDOC_DEVICEPOINTER_FROM_VKINSTANCE(screen->instance), NULL);