[D3D12] Move fences to a separate class, get rid of Vulkan provider

This commit is contained in:
Triang3l
2018-07-19 14:03:52 +03:00
parent d7701ae86b
commit ffcf18f193
5 changed files with 135 additions and 31 deletions

View File

@@ -27,26 +27,18 @@ bool D3D12Context::Initialize() {
auto provider = static_cast<D3D12Provider*>(provider_);
auto dxgi_factory = provider->get_dxgi_factory();
auto device = provider->get_device();
auto direct_queue = provider->get_direct_queue();
context_lost_ = false;
// Create fences for synchronization of reuse and destruction of transient
// objects (like command lists) and for global shutdown.
for (uint32_t i = 0; i < kFrameQueueLength; ++i) {
auto& fence = fences_[i];
if (FAILED(device->CreateFence(0, D3D12_FENCE_FLAG_NONE,
IID_PPV_ARGS(&fence.fence)))) {
XELOGE("Failed to create a frame completion fence");
fences_[i] = CPUFence::Create(device, direct_queue);
if (fences_[i] == nullptr) {
Shutdown();
return false;
}
fence.completion_event = CreateEvent(nullptr, false, false, nullptr);
if (fence.completion_event == nullptr) {
XELOGE("Failed to create a frame completion event");
Shutdown();
return false;
}
fence.queued_value = 0;
}
if (target_window_) {
@@ -114,15 +106,7 @@ void D3D12Context::Shutdown() {
}
for (uint32_t i = 0; i < kFrameQueueLength; ++i) {
auto& fence = fences_[i];
if (fence.fence != nullptr) {
fence.fence->Release();
fence.fence = nullptr;
}
if (fence.completion_event != nullptr) {
CloseHandle(fence.completion_event);
fence.completion_event = nullptr;
}
fences_[i].reset();
}
}