1#include "Foundation/Logging/Logger.h"
2#include "SyncObjectsD3D11.h"
3#include "GraphicsDeviceD3D11.h"
10void Cogs::SyncObjectsD3D11::setDevice(ResourcePointer<ID3D11Device5>& device5)
12 this->device5 = device5;
19 if (HRESULT hr = device5->CreateFence(0, D3D11_FENCE_FLAG_NONE, IID_PPV_ARGS(fence.fence.internalPointer())); SUCCEEDED(hr)) {
20 return fences.addResource(fence);
28 if (HandleIsValid(fenceHandle)) {
31 CloseHandle(fence.event);
33 fences.removeResource(fenceHandle);
39 if (HandleIsValid(fenceHandle)) {
47 if (!HandleIsValid(fenceHandle)) {
48 LOG_WARNING_ONCE(logger,
"isFenceSignalled: fenceHandle is invalid.");
53 return fence.value == fence.fence->GetCompletedValue();
58 if (!HandleIsValid(fenceHandle)) {
59 LOG_WARNING_ONCE(logger,
"waitFence: fenceHandle is invalid.");
65 if (fence.value == fence.fence->GetCompletedValue()) {
70 if (fence.event ==
nullptr) {
71 fence.event = CreateEvent(
nullptr, TRUE, FALSE,
nullptr);
74 else if (ResetEvent(fence.event) == 0) {
75 LOG_WARNING(logger,
"ResetEvent failed: 0x%x", GetLastError());
78 fence.fence->SetEventOnCompletion(fence.value, fence.event);
81 DWORD result = WaitForSingleObject(fence.event, timeout_ms);
90 LOG_WARNING(logger,
"WaitForSingleObject failed: 0x%x", GetLastError());
Log implementation class.
constexpr Log getLogger(const char(&name)[LEN]) noexcept
Handle template class used to provide opaque, non-converting handles.
static const Handle_t NoHandle
Represents a handle to nothing.
bool isFenceSignalled(FenceHandle fenceHandle) override
Poll to see if a fence has been signalled.
void releaseFence(FenceHandle fenceHandle) override
Release an existing fence object.
FenceHandle createFence() override
Create a new fence object.
bool waitFence(FenceHandle fenceHandle, uint32_t timeout_ms) override
Try to let CPU wait for a fence to be signalled.
void resetFence(FenceHandle fenceHandle) override
Explicitly set fence into unsignalled state unsignalled.