UraniumCompute 0.1.0
A GPU accelerated parallel task scheduler
IFence.h
1#pragma once
2#include <UnCompute/Backend/IDeviceObject.h>
3#include <chrono>
4
5namespace UN
6{
8 enum class FenceState
9 {
10 Signaled,
11 Reset
12 };
13
15 struct FenceDesc
16 {
17 const char* Name = nullptr;
18 FenceState InitialState = FenceState::Reset;
19
20 inline FenceDesc() = default;
21
22 inline explicit FenceDesc(const char* name, FenceState initialState = FenceState::Reset)
23 : Name(name)
24 , InitialState(initialState)
25 {
26 }
27 };
28
30 class IFence : public IDeviceObject
31 {
32 public:
34
35 [[nodiscard]] virtual const DescriptorType& GetDesc() const = 0;
36
37 virtual ResultCode Init(const DescriptorType& desc) = 0;
38
40 virtual ResultCode SignalOnCpu() = 0;
41
47 virtual ResultCode WaitOnCpu(std::chrono::nanoseconds timeout) = 0;
48
54 virtual ResultCode WaitOnCpu() = 0;
55
57 virtual void ResetState() = 0;
58
60 virtual FenceState GetState() = 0;
61 };
62} // namespace UN
Base interface for all compute backend objects.
Definition: IDeviceObject.h:30
An interface for fences - synchronization primitives that can be either signaled or reset.
Definition: IFence.h:31
virtual ResultCode WaitOnCpu()=0
Wait for the fence to signal.
virtual void ResetState()=0
Reset fence state.
virtual ResultCode SignalOnCpu()=0
Signal the fence on CPU.
virtual ResultCode WaitOnCpu(std::chrono::nanoseconds timeout)=0
Wait for the fence to signal.
virtual FenceState GetState()=0
Get current fence state.
Fence descriptor.
Definition: IFence.h:16
const char * Name
Fence debug name.
Definition: IFence.h:17
FenceState InitialState
Initial fence state.
Definition: IFence.h:18