From 099656dc7a32cebb9e6d0758e35f8251259877e4 Mon Sep 17 00:00:00 2001 From: Corentin Wallez Date: Tue, 6 Feb 2018 09:53:08 -0500 Subject: [PATCH] D3D12: Fix swapchains after 921fb5e1cef The Swapchain::Configure was changed to not require an initial usage anymore. Previously the code was doing a transition to this usage causing the code to now transition to usage. Fix this by deleting code. Also make TextureD3D12 responsible for the transition to PRESENT. --- src/backend/d3d12/D3D12Backend.cpp | 11 ----------- src/backend/d3d12/TextureD3D12.cpp | 3 +++ src/utils/D3D12Binding.cpp | 23 ----------------------- 3 files changed, 3 insertions(+), 34 deletions(-) diff --git a/src/backend/d3d12/D3D12Backend.cpp b/src/backend/d3d12/D3D12Backend.cpp index bc7fca2363..184133b236 100644 --- a/src/backend/d3d12/D3D12Backend.cpp +++ b/src/backend/d3d12/D3D12Backend.cpp @@ -62,22 +62,11 @@ namespace backend { namespace d3d12 { backendDevice->NextSerial(); } - void ExecuteCommandLists(nxtDevice device, - std::initializer_list commandLists) { - Device* backendDevice = reinterpret_cast(device); - backendDevice->ExecuteCommandLists(commandLists); - } - void WaitForSerial(nxtDevice device, uint64_t serial) { Device* backendDevice = reinterpret_cast(device); backendDevice->WaitForSerial(serial); } - void OpenCommandList(nxtDevice device, ComPtr* commandList) { - Device* backendDevice = reinterpret_cast(device); - return backendDevice->OpenCommandList(commandList); - } - void ASSERT_SUCCESS(HRESULT hr) { ASSERT(SUCCEEDED(hr)); } diff --git a/src/backend/d3d12/TextureD3D12.cpp b/src/backend/d3d12/TextureD3D12.cpp index 1bcfd7b17b..b608f95b83 100644 --- a/src/backend/d3d12/TextureD3D12.cpp +++ b/src/backend/d3d12/TextureD3D12.cpp @@ -44,6 +44,9 @@ namespace backend { namespace d3d12 { resourceState |= D3D12_RESOURCE_STATE_RENDER_TARGET; } } + if (usage & nxt::TextureUsageBit::Present) { + resourceState |= D3D12_RESOURCE_STATE_PRESENT; + } return resourceState; } diff --git a/src/utils/D3D12Binding.cpp b/src/utils/D3D12Binding.cpp index b532a2428c..3a3e7cdfbe 100644 --- a/src/utils/D3D12Binding.cpp +++ b/src/utils/D3D12Binding.cpp @@ -37,10 +37,7 @@ namespace backend { namespace d3d12 { ComPtr GetCommandQueue(nxtDevice device); uint64_t GetSerial(const nxtDevice device); void NextSerial(nxtDevice device); - void ExecuteCommandLists(nxtDevice device, - std::initializer_list commandLists); void WaitForSerial(nxtDevice device, uint64_t serial); - void OpenCommandList(nxtDevice device, ComPtr* commandList); }} // namespace backend::d3d12 namespace utils { @@ -188,24 +185,6 @@ namespace utils { ASSERT_SUCCESS(mSwapChain->Present(1, 0)); - // Transition last frame's render target back to being a render target - if (mRenderTargetResourceState != D3D12_RESOURCE_STATE_PRESENT) { - ComPtr commandList = {}; - backend::d3d12::OpenCommandList(mBackendDevice, &commandList); - - D3D12_RESOURCE_BARRIER resourceBarrier; - resourceBarrier.Transition.pResource = - mRenderTargetResources[mPreviousRenderTargetIndex].Get(); - resourceBarrier.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT; - resourceBarrier.Transition.StateAfter = mRenderTargetResourceState; - resourceBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; - resourceBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; - resourceBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; - commandList->ResourceBarrier(1, &resourceBarrier); - ASSERT_SUCCESS(commandList->Close()); - backend::d3d12::ExecuteCommandLists(mBackendDevice, {commandList.Get()}); - } - backend::d3d12::NextSerial(mBackendDevice); mPreviousRenderTargetIndex = mRenderTargetIndex; @@ -240,8 +219,6 @@ namespace utils { uint32_t mRenderTargetIndex = 0; uint32_t mPreviousRenderTargetIndex = 0; uint64_t mLastSerialRenderTargetWasUsed[kFrameCount] = {}; - - D3D12_RESOURCE_STATES mRenderTargetResourceState; }; class D3D12Binding : public BackendBinding {