From ee3e4bf150cc8374bd6479d3f5ee5d0f81e3d559 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 19 Sep 2019 18:01:40 +0100 Subject: [PATCH] Fix DXGI implicit backbuffer index tracking * When DXGI_PRESENT_TEST flag is present, the backbuffer index doesn't increment. * Resizing the buffers resets the index back to 0. --- renderdoc/driver/dxgi/dxgi_wrapped.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/dxgi/dxgi_wrapped.cpp b/renderdoc/driver/dxgi/dxgi_wrapped.cpp index a21fe6c56..cbd0b5d28 100644 --- a/renderdoc/driver/dxgi/dxgi_wrapped.cpp +++ b/renderdoc/driver/dxgi/dxgi_wrapped.cpp @@ -352,6 +352,8 @@ HRESULT WrappedIDXGISwapChain4::ResizeBuffers( WrapBuffersAfterResize(); + m_LastPresentedBuffer = -1; + return ret; } @@ -386,6 +388,8 @@ HRESULT WrappedIDXGISwapChain4::ResizeBuffers1(_In_ UINT BufferCount, _In_ UINT WrapBuffersAfterResize(); + m_LastPresentedBuffer = -1; + return ret; } @@ -534,8 +538,11 @@ HRESULT WrappedIDXGISwapChain4::Present( SyncInterval = 0; } - TickLastPresentedBuffer(); - m_pDevice->Present(this, SyncInterval, Flags); + if((Flags & DXGI_PRESENT_TEST) == 0) + { + TickLastPresentedBuffer(); + m_pDevice->Present(this, SyncInterval, Flags); + } return m_pReal->Present(SyncInterval, Flags); } @@ -548,8 +555,11 @@ HRESULT WrappedIDXGISwapChain4::Present1(UINT SyncInterval, UINT Flags, SyncInterval = 0; } - TickLastPresentedBuffer(); - m_pDevice->Present(this, SyncInterval, Flags); + if((Flags & DXGI_PRESENT_TEST) == 0) + { + TickLastPresentedBuffer(); + m_pDevice->Present(this, SyncInterval, Flags); + } return m_pReal1->Present1(SyncInterval, Flags, pPresentParameters); }