diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index ed280dbfc..68ecd0ab2 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -852,6 +852,19 @@ void WrappedVulkan::AttemptCapture() } } +void WrappedVulkan::FirstFrame(VkSwapchainKHR swap) +{ + SwapchainInfo *swapdesc = GetRecord(swap)->swapInfo; + + // if we have to capture the first frame, begin capturing immediately + if(m_State == WRITING_IDLE && RenderDoc::Inst().ShouldTriggerCapture(0)) + { + RenderDoc::Inst().StartFrameCapture(LayerDisp(m_Instance), swapdesc ? swapdesc->wndHandle : NULL); + + m_AppControlledCapture = false; + } +} + bool WrappedVulkan::Serialise_BeginCaptureFrame(bool applyInitialState) { if(m_State < WRITING && !applyInitialState) diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index ae1ed1a86..45f227914 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -494,6 +494,8 @@ private: void FinishCapture(); void EndCaptureFrame(VkImage presentImage); + void FirstFrame(VkSwapchainKHR swap); + string MakeRenderPassOpString(bool store); void StartFrameCapture(void *dev, void *wnd); diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index aa5cf9659..377f0ede3 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -471,6 +471,8 @@ VkResult WrappedVulkan::vkCreateSwapchainKHR(VkDevice device, SAFE_DELETE_ARRAY(images); } + + FirstFrame(*pSwapChain); } else {