From 96b43aa54da8d3469a8a848eadd32e4ef908a62d Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 12 Sep 2015 17:23:30 +0200 Subject: [PATCH] Allow the queued capturing of frame 1 immediately. Refs #150 --- renderdoc/driver/d3d11/d3d11_device.cpp | 14 ++++++++++++++ renderdoc/driver/d3d11/d3d11_device.h | 2 ++ renderdoc/driver/dxgi/dxgi_wrapped.cpp | 4 ++++ .../Windows/Dialogs/CaptureDialog.Designer.cs | 2 +- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/d3d11/d3d11_device.cpp b/renderdoc/driver/d3d11/d3d11_device.cpp index 5a6da3b3f..f9ca6b0e4 100644 --- a/renderdoc/driver/d3d11/d3d11_device.cpp +++ b/renderdoc/driver/d3d11/d3d11_device.cpp @@ -2988,6 +2988,20 @@ bool WrappedID3D11Device::EndFrameCapture(void *dev, void *wnd) } } +void WrappedID3D11Device::FirstFrame(IDXGISwapChain *swap) +{ + DXGI_SWAP_CHAIN_DESC swapdesc; + swap->GetDesc(&swapdesc); + + // if we have to capture the first frame, begin capturing immediately + if(m_State == WRITING_IDLE && RenderDoc::Inst().ShouldTriggerCapture(0)) + { + StartFrameCapture(this, swapdesc.OutputWindow); + + m_AppControlledCapture = false; + } +} + HRESULT WrappedID3D11Device::Present(IDXGISwapChain *swap, UINT SyncInterval, UINT Flags) { if((Flags & DXGI_PRESENT_TEST) != 0) diff --git a/renderdoc/driver/d3d11/d3d11_device.h b/renderdoc/driver/d3d11/d3d11_device.h index 4b4967653..23c656a8a 100644 --- a/renderdoc/driver/d3d11/d3d11_device.h +++ b/renderdoc/driver/d3d11/d3d11_device.h @@ -305,6 +305,8 @@ public: const FetchDrawcall *GetDrawcall(uint32_t frameID, uint32_t eventID); + void FirstFrame(IDXGISwapChain *swap); + vector GetDebugMessages(); void AddDebugMessage(DebugMessage msg) { if(m_State < WRITING) m_DebugMessages.push_back(msg); } void AddDebugMessage(DebugMessageCategory c, DebugMessageSeverity sv, DebugMessageSource src, std::string d); diff --git a/renderdoc/driver/dxgi/dxgi_wrapped.cpp b/renderdoc/driver/dxgi/dxgi_wrapped.cpp index 37ad5418e..b3cd1f0c1 100644 --- a/renderdoc/driver/dxgi/dxgi_wrapped.cpp +++ b/renderdoc/driver/dxgi/dxgi_wrapped.cpp @@ -272,6 +272,10 @@ WrappedIDXGISwapChain2::WrappedIDXGISwapChain2(IDXGISwapChain* real, HWND wnd, W } SAFE_ADDREF(m_pDevice); + + // we do a 'fake' present right at the start, so that we can capture frame 1, by + // going from this fake present to the first present. + m_pDevice->FirstFrame(this); } WrappedIDXGISwapChain2::~WrappedIDXGISwapChain2() diff --git a/renderdocui/Windows/Dialogs/CaptureDialog.Designer.cs b/renderdocui/Windows/Dialogs/CaptureDialog.Designer.cs index 19face360..bc3e525cb 100644 --- a/renderdocui/Windows/Dialogs/CaptureDialog.Designer.cs +++ b/renderdocui/Windows/Dialogs/CaptureDialog.Designer.cs @@ -196,7 +196,7 @@ 0, 0}); this.queuedCapFrame.Minimum = new decimal(new int[] { - 2, + 1, 0, 0, 0});