From 45161202932aa7bd200154f7eaff87a8b1575e94 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 17 Jun 2016 17:13:51 +0200 Subject: [PATCH] Add support for capturing the first frame in Vulkan. * Defined as beginning at the creation of the first swapchain, to the first Present(). * This is mostly useful for samples that don't enter a proper present loop and just present once before exiting. --- renderdoc/driver/vulkan/vk_core.cpp | 13 +++++++++++++ renderdoc/driver/vulkan/vk_core.h | 2 ++ renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp | 2 ++ 3 files changed, 17 insertions(+) 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 {