From 2068972bb3c0671e1d0b2ac286158a17b4abc8d8 Mon Sep 17 00:00:00 2001 From: columbarius Date: Sun, 13 Aug 2023 19:01:19 +0200 Subject: [PATCH] vulkan: Add wait functions vulkan_wait_idle waits until the device is idle and all referenced objects can be destroyed. vulkan_wait_fence waits until a fence is triggered by a finished queueSubmit. vulkan: wait on fence --- spa/plugins/vulkan/vulkan-utils.c | 14 ++++++++++++++ spa/plugins/vulkan/vulkan-utils.h | 3 +++ 2 files changed, 17 insertions(+) diff --git a/spa/plugins/vulkan/vulkan-utils.c b/spa/plugins/vulkan/vulkan-utils.c index 780fe89a4..de88a7053 100644 --- a/spa/plugins/vulkan/vulkan-utils.c +++ b/spa/plugins/vulkan/vulkan-utils.c @@ -435,6 +435,20 @@ int vulkan_vkresult_to_errno(VkResult result) return vkresult_to_errno(result); } +int vulkan_wait_fence(struct vulkan_base *s, VkFence fence) +{ + VK_CHECK_RESULT(vkWaitForFences(s->device, 1, &fence, VK_TRUE, UINT64_MAX)); + + return 0; +} + +int vulkan_wait_idle(struct vulkan_base *s) +{ + VK_CHECK_RESULT(vkDeviceWaitIdle(s->device)); + + return 0; +} + int vulkan_base_init(struct vulkan_base *s, struct vulkan_base_info *info) { if (!s->initialized) { diff --git a/spa/plugins/vulkan/vulkan-utils.h b/spa/plugins/vulkan/vulkan-utils.h index b4d28a46c..69a8fe44b 100644 --- a/spa/plugins/vulkan/vulkan-utils.h +++ b/spa/plugins/vulkan/vulkan-utils.h @@ -52,5 +52,8 @@ VkFormat vulkan_id_to_vkformat(uint32_t id); int vulkan_vkresult_to_errno(VkResult result); +int vulkan_wait_fence(struct vulkan_base *s, VkFence fence); +int vulkan_wait_idle(struct vulkan_base *s); + int vulkan_base_init(struct vulkan_base *s, struct vulkan_base_info *info); void vulkan_base_deinit(struct vulkan_base *s);