From a673ee181ddedcc2b7362fd78c0f4587a5cf7dc7 Mon Sep 17 00:00:00 2001 From: baldurk Date: Fri, 9 Sep 2016 20:42:21 +0200 Subject: [PATCH] Don't transition from undefined when doing implicit renderpass barriers * This would discard the resource. Instead transition from whichever state it's currently in. --- renderdoc/driver/vulkan/vk_core.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 6b46e4fa8..28d39d5aa 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -2177,6 +2177,20 @@ void WrappedVulkan::ReplayLog(uint32_t startEventID, uint32_t endEventID, Replay // first apply implicit transitions to the right subpass std::vector imgBarriers = GetImplicitRenderPassBarriers(); + // don't transition from undefined, or contents will be discarded, instead transition from + // the current state. + for(size_t i = 0; i < imgBarriers.size(); i++) + { + if(imgBarriers[i].oldLayout == VK_IMAGE_LAYOUT_UNDEFINED) + { + // TODO find overlapping range and transition that instead + imgBarriers[i].oldLayout = + m_ImageLayouts[GetResourceManager()->GetNonDispWrapper(imgBarriers[i].image)->id] + .subresourceStates[0] + .newLayout; + } + } + GetResourceManager()->RecordBarriers(m_BakedCmdBufferInfo[GetResID(cmd)].imgbarriers, m_ImageLayouts, (uint32_t)imgBarriers.size(), &imgBarriers[0]);