From eb74297de8662c9fa66cd719c6315567966afe56 Mon Sep 17 00:00:00 2001 From: Lynne Date: Wed, 7 Jun 2023 01:16:29 +0200 Subject: [PATCH 2/2] vulkan: discard dependencies when explicitly waiting for execution This reduces memory needed dramatically, as unneeded resources can be immediately returned to the pool. Although waitforfences is threadsafe, we add a mutex wait around it, as the mutex fence in combination with waitforfences assures us that no other thread will reset the fence in the meanwhile whilst the mutex is locked. This allows is to call ff_vk_exec_discard_deps. --- libavutil/vulkan.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index 4b96c0c200..0cfe334db0 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -480,7 +480,10 @@ FFVkExecContext *ff_vk_exec_get(FFVkExecPool *pool) void ff_vk_exec_wait(FFVulkanContext *s, FFVkExecContext *e) { FFVulkanFunctions *vk = &s->vkfn; + pthread_mutex_lock(&e->lock); vk->WaitForFences(s->hwctx->act_dev, 1, &e->fence, VK_TRUE, UINT64_MAX); + ff_vk_exec_discard_deps(s, e); + pthread_mutex_unlock(&e->lock); } int ff_vk_exec_start(FFVulkanContext *s, FFVkExecContext *e) -- 2.40.1