aboutsummaryrefslogtreecommitdiffstats
path: root/libavutil
diff options
context:
space:
mode:
authorLynne <dev@lynne.ee>2023-06-07 01:16:29 +0200
committerLynne <dev@lynne.ee>2023-06-07 23:59:16 +0200
commit5f1be341c2bdc12f77c3209370144b15661a4958 (patch)
tree466adc7f3fd1a68c2ae45ce9b729d53c3146d65b /libavutil
parent975cd48bb3a45aefe314be3b9f8f3b8f0e4f614c (diff)
downloadffmpeg-5f1be341c2bdc12f77c3209370144b15661a4958.tar.gz
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.
Diffstat (limited to 'libavutil')
-rw-r--r--libavutil/vulkan.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c
index b1c585292e..26b9b6f1fb 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)