diff --git a/.pick_status.json b/.pick_status.json index 7299b794a2d..0f0490d3e4d 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -652,7 +652,7 @@ "description": "vulkan/queue: Destroy wait temps if they are skipped", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "because_sha": "8a11d2a31bf931deca05c79871aeaf1441fb777e" }, { diff --git a/src/vulkan/runtime/vk_queue.c b/src/vulkan/runtime/vk_queue.c index a1ff0ba0283..9aef3e9505d 100644 --- a/src/vulkan/runtime/vk_queue.c +++ b/src/vulkan/runtime/vk_queue.c @@ -293,8 +293,16 @@ vk_queue_submit_final(struct vk_queue *queue, continue; /* Waits on dummy vk_syncs are no-ops */ - if (vk_sync_type_is_dummy(submit->waits[i].sync->type)) + if (vk_sync_type_is_dummy(submit->waits[i].sync->type)) { + /* We are about to lose track of this wait, if it has a temporary + * we need to destroy it now, as vk_queue_submit_cleanup will not + * know about it */ + if (submit->_wait_temps[i] != NULL) { + vk_sync_destroy(queue->base.device, submit->_wait_temps[i]); + submit->waits[i].sync = NULL; + } continue; + } /* For emulated timelines, we have a binary vk_sync associated with * each time point and pass the binary vk_sync to the driver.