Blender V4.3
vk_fence.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include "vk_fence.hh"
10#include "vk_backend.hh"
11#include "vk_common.hh"
12#include "vk_context.hh"
13#include "vk_memory.hh"
14
15namespace blender::gpu {
16
18{
19 if (vk_fence_ != VK_NULL_HANDLE) {
21 VKDevice &device = VKBackend::get().device;
22 vkDestroyFence(device.vk_handle(), vk_fence_, vk_allocation_callbacks);
23 vk_fence_ = VK_NULL_HANDLE;
24 }
25}
26
28{
29 if (vk_fence_ == VK_NULL_HANDLE) {
31 VKDevice &device = VKBackend::get().device;
32 VkFenceCreateInfo vk_fence_create_info = {};
33 vk_fence_create_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
34 vk_fence_create_info.flags = VK_FENCE_CREATE_SIGNALED_BIT;
35 vkCreateFence(device.vk_handle(), &vk_fence_create_info, vk_allocation_callbacks, &vk_fence_);
36 }
37 VKContext &context = *VKContext::get();
38 context.rendering_end();
39 context.descriptor_set_get().upload_descriptor_sets();
40 context.render_graph.submit_synchronization_event(vk_fence_);
41 signalled_ = true;
42}
43
45{
46 if (!signalled_) {
47 return;
48 }
49 VKContext &context = *VKContext::get();
50 context.render_graph.wait_synchronization_event(vk_fence_);
51 signalled_ = false;
52}
53
54} // namespace blender::gpu
static VKBackend & get()
Definition vk_backend.hh:92
static VKContext * get()
Definition vk_context.hh:97
void signal() override
Definition vk_fence.cc:27
void wait() override
Definition vk_fence.cc:44
#define VK_ALLOCATION_CALLBACKS
Definition vk_memory.hh:58