diff --git a/renderdoc/driver/d3d12/d3d12_device.cpp b/renderdoc/driver/d3d12/d3d12_device.cpp index 4f460f6f2..d3fa46994 100644 --- a/renderdoc/driver/d3d12/d3d12_device.cpp +++ b/renderdoc/driver/d3d12/d3d12_device.cpp @@ -448,6 +448,11 @@ WrappedID3D12Device::~WrappedID3D12Device() if(RenderDoc::Inst().GetCrashHandler()) RenderDoc::Inst().GetCrashHandler()->UnregisterMemoryRegion(this); + + if(!RenderDoc::Inst().IsReplayApp()) + { + FirstFrame(NULL); + } } HRESULT WrappedID3D12Device::QueryInterface(REFIID riid, void **ppvObject) @@ -752,7 +757,10 @@ void WrappedID3D12Device::CheckForDeath() void WrappedID3D12Device::FirstFrame(WrappedIDXGISwapChain4 *swap) { - DXGI_SWAP_CHAIN_DESC swapdesc = swap->GetDescWithHWND(); + DXGI_SWAP_CHAIN_DESC swapdesc = {}; + + if(swap) + swapdesc = swap->GetDescWithHWND(); // if we have to capture the first frame, begin capturing immediately if(IsBackgroundCapturing(m_State) && RenderDoc::Inst().ShouldTriggerCapture(0)) diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index b2f0f0c6f..a50566535 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -1146,14 +1146,12 @@ void WrappedVulkan::EndCaptureFrame(VkImage presentImage) m_FrameCaptureRecord->AddChunk(scope.Get()); } -void WrappedVulkan::FirstFrame(VkSwapchainKHR swap) +void WrappedVulkan::FirstFrame() { - SwapchainInfo *swapdesc = GetRecord(swap)->swapInfo; - // if we have to capture the first frame, begin capturing immediately if(IsBackgroundCapturing(m_State) && RenderDoc::Inst().ShouldTriggerCapture(0)) { - RenderDoc::Inst().StartFrameCapture(LayerDisp(m_Instance), swapdesc ? swapdesc->wndHandle : NULL); + RenderDoc::Inst().StartFrameCapture(LayerDisp(m_Instance), NULL); m_AppControlledCapture = false; } diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index aa8e6f59b..b27763f14 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -767,7 +767,7 @@ private: bool Serialise_BeginCaptureFrame(SerialiserType &ser); void EndCaptureFrame(VkImage presentImage); - void FirstFrame(VkSwapchainKHR swap); + void FirstFrame(); bool CheckMemoryRequirements(const char *resourceName, ResourceId memId, VkDeviceSize memoryOffset, VkMemoryRequirements mrq); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 5cdca2e7d..99ec6702f 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -2312,6 +2312,8 @@ VkResult WrappedVulkan::vkCreateDevice(VkPhysicalDevice physicalDevice, SAFE_DELETE_ARRAY(props); SAFE_DELETE_ARRAY(modQueues); + FirstFrame(); + return ret; } diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index 7d23190c3..303bcec2f 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -594,8 +594,6 @@ void WrappedVulkan::WrapAndProcessCreatedSwapchain(VkDevice device, SAFE_DELETE_ARRAY(images); } - - FirstFrame(*pSwapChain); } else {