From b2676c286198a357176c23a11253ba0bc0fb4647 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 4 Nov 2015 12:22:24 +0100 Subject: [PATCH] Store last swapchain presented and use it instead if none is specified --- renderdoc/driver/vulkan/vk_core.cpp | 19 +++++++++++++++++++ renderdoc/driver/vulkan/vk_core.h | 2 ++ .../driver/vulkan/wrappers/vk_wsi_funcs.cpp | 1 + 3 files changed, 22 insertions(+) diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 359a7d392..e4b61549d 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -702,6 +702,25 @@ bool WrappedVulkan::EndFrameCapture(void *dev, void *wnd) for(size_t i=0; i < swapInfo.images.size(); i++) GetResourceManager()->MarkResourceFrameReferenced(GetResID(swapInfo.images[i].im), eFrameRef_Read); } + else + { + // if a swapchain wasn't specified or found, use the last one presented + swaprecord = GetResourceManager()->GetResourceRecord(m_LastSwap); + + if(swaprecord) + { + GetResourceManager()->MarkResourceFrameReferenced(swaprecord->GetResourceID(), eFrameRef_Read); + RDCASSERT(swaprecord->swapInfo); + + const SwapchainInfo &swapInfo = *swaprecord->swapInfo; + + backbuffer = swapInfo.images[swapInfo.lastPresent].im; + + // mark all images referenced as well + for(size_t i=0; i < swapInfo.images.size(); i++) + GetResourceManager()->MarkResourceFrameReferenced(GetResID(swapInfo.images[i].im), eFrameRef_Read); + } + } // transition back to IDLE atomically { diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 6ee49d3be..f589143fa 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -389,6 +389,8 @@ private: // capture-side data + ResourceId m_LastSwap; + // holds the current list of coherent mapped memory. Locked against concurrent use vector m_CoherentMaps; Threading::CriticalSection m_CoherentMapsLock; diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index f04a7d683..c6762e8f0 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -488,6 +488,7 @@ VkResult WrappedVulkan::vkQueuePresentKHR( // need to record which image was last flipped so we can get the correct backbuffer // for a thumbnail in EndFrameCapture swapInfo.lastPresent = pPresentInfo->imageIndices[0]; + m_LastSwap = swaprecord->GetResourceID(); VkImage backbuffer = swapInfo.images[pPresentInfo->imageIndices[0]].im;