From e2d4078cfd34d9d0d87f9398fdbf5140248a60d5 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 27 Dec 2017 15:58:10 +0000 Subject: [PATCH] Remove bool applyInitialState from D3D Serialise_BeginCaptureFrame * Instead we just skip the chunk wholesale when we're doing a partial replay and don't want to apply it. --- renderdoc/driver/d3d11/d3d11_context.cpp | 13 +++++++------ renderdoc/driver/d3d11/d3d11_context.h | 2 +- renderdoc/driver/d3d12/d3d12_commands.cpp | 5 ++++- renderdoc/driver/d3d12/d3d12_device.cpp | 12 +++++------- renderdoc/driver/d3d12/d3d12_device.h | 2 +- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/renderdoc/driver/d3d11/d3d11_context.cpp b/renderdoc/driver/d3d11/d3d11_context.cpp index af1b3118d..de5c23ccc 100644 --- a/renderdoc/driver/d3d11/d3d11_context.cpp +++ b/renderdoc/driver/d3d11/d3d11_context.cpp @@ -243,8 +243,7 @@ void DoSerialise(SerialiserType &ser, HiddenCounter &el) } template -bool WrappedID3D11DeviceContext::Serialise_BeginCaptureFrame(SerialiserType &ser, - bool applyInitialState) +bool WrappedID3D11DeviceContext::Serialise_BeginCaptureFrame(SerialiserType &ser) { D3D11RenderState state(D3D11RenderState::Empty); @@ -348,9 +347,8 @@ bool WrappedID3D11DeviceContext::Serialise_BeginCaptureFrame(SerialiserType &ser SERIALISE_CHECK_READ_ERRORS(); - if(IsReplayingAndReading() && applyInitialState) + if(IsReplayingAndReading()) { - if(applyInitialState) { m_DoStateVerify = false; { @@ -428,7 +426,7 @@ void WrappedID3D11DeviceContext::BeginCaptureFrame() WriteSerialiser &ser = m_ScratchSerialiser; SCOPED_SERIALISE_CHUNK(SystemChunk::CaptureBegin); - Serialise_BeginCaptureFrame(ser, false); + Serialise_BeginCaptureFrame(ser); { SCOPED_LOCK(m_AnnotLock); @@ -1124,7 +1122,10 @@ ReplayStatus WrappedID3D11DeviceContext::ReplayLog(CaptureState readType, uint32 SystemChunk header = ser.ReadChunk(); RDCASSERTEQUAL(header, SystemChunk::CaptureBegin); - Serialise_BeginCaptureFrame(ser, !partial); + if(partial) + ser.SkipCurrentChunk(); + else + Serialise_BeginCaptureFrame(ser); ser.EndChunk(); diff --git a/renderdoc/driver/d3d11/d3d11_context.h b/renderdoc/driver/d3d11/d3d11_context.h index 88232751f..8b43ba4de 100644 --- a/renderdoc/driver/d3d11/d3d11_context.h +++ b/renderdoc/driver/d3d11/d3d11_context.h @@ -269,7 +269,7 @@ public: void EndFrame(); template - bool Serialise_BeginCaptureFrame(SerialiserType &ser, bool applyInitialState); + bool Serialise_BeginCaptureFrame(SerialiserType &ser); void BeginCaptureFrame(); void EndCaptureFrame(); diff --git a/renderdoc/driver/d3d12/d3d12_commands.cpp b/renderdoc/driver/d3d12/d3d12_commands.cpp index b4c3955f2..50dc8349c 100644 --- a/renderdoc/driver/d3d12/d3d12_commands.cpp +++ b/renderdoc/driver/d3d12/d3d12_commands.cpp @@ -545,7 +545,10 @@ ReplayStatus WrappedID3D12CommandQueue::ReplayLog(CaptureState readType, uint32_ SystemChunk header = ser.ReadChunk(); RDCASSERTEQUAL(header, SystemChunk::CaptureBegin); - m_pDevice->Serialise_BeginCaptureFrame(ser, !partial); + if(partial) + ser.SkipCurrentChunk(); + else + m_pDevice->Serialise_BeginCaptureFrame(ser); ser.EndChunk(); diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index e71d3fcdd..a1c1a6e21 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -1179,7 +1179,7 @@ bool WrappedID3D12Device::Serialise_CaptureScope(SerialiserType &ser) } template -bool WrappedID3D12Device::Serialise_BeginCaptureFrame(SerialiserType &ser, bool applyInitialState) +bool WrappedID3D12Device::Serialise_BeginCaptureFrame(SerialiserType &ser) { std::vector barriers; @@ -1190,7 +1190,7 @@ bool WrappedID3D12Device::Serialise_BeginCaptureFrame(SerialiserType &ser, bool SERIALISE_CHECK_READ_ERRORS(); - if(applyInitialState && !barriers.empty()) + if(IsReplayingAndReading() && !barriers.empty()) { // apply initial resource states ID3D12GraphicsCommandList *list = GetNewList(); @@ -1206,10 +1206,8 @@ bool WrappedID3D12Device::Serialise_BeginCaptureFrame(SerialiserType &ser, bool return true; } -template bool WrappedID3D12Device::Serialise_BeginCaptureFrame(ReadSerialiser &ser, - bool applyInitialState); -template bool WrappedID3D12Device::Serialise_BeginCaptureFrame(WriteSerialiser &ser, - bool applyInitialState); +template bool WrappedID3D12Device::Serialise_BeginCaptureFrame(ReadSerialiser &ser); +template bool WrappedID3D12Device::Serialise_BeginCaptureFrame(WriteSerialiser &ser); void WrappedID3D12Device::EndCaptureFrame(ID3D12Resource *presentImage) { @@ -1277,7 +1275,7 @@ void WrappedID3D12Device::StartFrameCapture(void *dev, void *wnd) SCOPED_SERIALISE_CHUNK(SystemChunk::CaptureBegin); - Serialise_BeginCaptureFrame(ser, false); + Serialise_BeginCaptureFrame(ser); // need to hold onto this as it must come right after the capture chunk, // before any command lists diff --git a/renderdoc/driver/d3d12/d3d12_device.h b/renderdoc/driver/d3d12/d3d12_device.h index 198e5553b..0e639fd5c 100644 --- a/renderdoc/driver/d3d12/d3d12_device.h +++ b/renderdoc/driver/d3d12/d3d12_device.h @@ -469,7 +469,7 @@ public: bool EndFrameCapture(void *dev, void *wnd); template - bool Serialise_BeginCaptureFrame(SerialiserType &ser, bool applyInitialState); + bool Serialise_BeginCaptureFrame(SerialiserType &ser); template bool Serialise_DynamicDescriptorWrite(SerialiserType &ser, const DynamicDescriptorWrite *write);