UraniumCompute 0.1.0
A GPU accelerated parallel task scheduler
VulkanFence.h
1#pragma once
2#include <UnCompute/Backend/FenceBase.h>
3#include <UnCompute/Memory/Memory.h>
4#include <UnCompute/VulkanBackend/VulkanInclude.h>
5
6namespace UN
7{
8 class VulkanFence final : public FenceBase
9 {
10 VkFence m_NativeFence = VK_NULL_HANDLE;
11
12 protected:
13 ResultCode InitInternal(const DescriptorType& desc) override;
14
15 public:
16 explicit VulkanFence(IComputeDevice* pDevice);
17 ~VulkanFence() override;
18
19 void Reset() override;
20 ResultCode SignalOnCpu() override;
21 ResultCode WaitOnCpu(std::chrono::nanoseconds timeout) override;
22
23 inline ResultCode WaitOnCpu() override
24 {
25 return WaitOnCpu(std::chrono::nanoseconds::max());
26 }
27
28 void ResetState() override;
29 FenceState GetState() override;
30
31 [[nodiscard]] inline VkFence GetNativeFence() const
32 {
33 return m_NativeFence;
34 }
35
36 inline static ResultCode Create(IComputeDevice* pDevice, IFence** ppFence)
37 {
38 *ppFence = AllocateObject<VulkanFence>(pDevice);
39 (*ppFence)->AddRef();
40 return ResultCode::Success;
41 }
42 };
43} // namespace UN
Definition: FenceBase.h:8
Interface for all backend-specific compute devices.
Definition: IComputeDevice.h:38
Definition: VulkanFence.h:9
FenceState GetState() override
Get current fence state.
Definition: VulkanFence.cpp:53
void ResetState() override
Reset fence state.
Definition: VulkanFence.cpp:47
ResultCode WaitOnCpu() override
Wait for the fence to signal.
Definition: VulkanFence.h:23
void Reset() override
Reset the object to uninitialized state.
Definition: VulkanFence.cpp:16
ResultCode SignalOnCpu() override
Signal the fence on CPU.
Definition: VulkanFence.cpp:28
Fence descriptor.
Definition: IFence.h:16