diff --git a/renderdoc/driver/d3d12/d3d12_debug.cpp b/renderdoc/driver/d3d12/d3d12_debug.cpp index 04c402502..c91e94434 100644 --- a/renderdoc/driver/d3d12/d3d12_debug.cpp +++ b/renderdoc/driver/d3d12/d3d12_debug.cpp @@ -1116,11 +1116,29 @@ bool D3D12DebugManager::RenderTexture(TextureDisplay cfg, bool blendAlpha) FillCBuffer(m_GenericVSCbuffer, &vertexData, sizeof(DebugVertexCBuffer)); FillCBuffer(m_GenericPSCbuffer, &pixelData, sizeof(DebugPixelCBufferData)); + // transition resource to D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE + const vector &states = + m_WrappedDevice->GetSubresourceStates(GetResID(resource)); + + vector barriers; + barriers.resize(states.size()); + for(size_t i = 0; i < barriers.size(); i++) + { + barriers[i].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; + barriers[i].Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; + barriers[i].Transition.pResource = resource; + barriers[i].Transition.Subresource = (UINT)i; + barriers[i].Transition.StateBefore = states[i]; + barriers[i].Transition.StateAfter = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE; + } + OutputWindow &outw = m_OutputWindows[m_CurrentOutputWindow]; { ID3D12GraphicsCommandList *list = m_WrappedDevice->GetNewList(); + list->ResourceBarrier((UINT)barriers.size(), &barriers[0]); + list->OMSetRenderTargets(1, &outw.rtv, TRUE, NULL); D3D12_VIEWPORT viewport = {0, 0, (float)outw.width, (float)outw.height, 0.0f, 1.0f}; @@ -1152,6 +1170,12 @@ bool D3D12DebugManager::RenderTexture(TextureDisplay cfg, bool blendAlpha) list->DrawInstanced(4, 1, 0, 0); + // transition back to where they were + for(size_t i = 0; i < barriers.size(); i++) + std::swap(barriers[i].Transition.StateBefore, barriers[i].Transition.StateAfter); + + list->ResourceBarrier((UINT)barriers.size(), &barriers[0]); + list->Close(); m_WrappedDevice->ExecuteLists();