From 52d26919b5131aa2861eb0f2ee5a2fae8b2ebaec Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 24 Feb 2022 14:02:07 +0000 Subject: [PATCH] Fix image barriers when selecting BeginRP with discards --- renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 53a417e25..e206ee76c 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -1699,6 +1699,8 @@ bool WrappedVulkan::Serialise_vkCmdBeginRenderPass(SerialiserType &ser, VkComman rdcarray imgBarriers = GetImplicitRenderPassBarriers(); + ApplyRPLoadDiscards(commandBuffer, RenderPassBegin.renderArea); + // if we're just replaying the vkCmdBeginRenderPass on its own, we use the first loadRP // instead of the real thing. This then doesn't require us to finish off any subpasses etc. // we need to manually do the subpass 0 barriers, since loadRP expects the image to already @@ -1709,11 +1711,18 @@ bool WrappedVulkan::Serialise_vkCmdBeginRenderPass(SerialiserType &ser, VkComman unwrappedInfo.renderPass = Unwrap(rpinfo.loadRPs[0]); unwrappedInfo.framebuffer = Unwrap(fbinfo.loadFBs[0]); + if(m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest) + { + for(VkImageMemoryBarrier &barrier : imgBarriers) + { + if(barrier.oldLayout == VK_IMAGE_LAYOUT_UNDEFINED) + barrier.oldLayout = VK_IMAGE_LAYOUT_GENERAL; + } + } + DoPipelineBarrier(commandBuffer, imgBarriers.size(), imgBarriers.data()); } - ApplyRPLoadDiscards(commandBuffer, RenderPassBegin.renderArea); - ActionFlags drawFlags = ActionFlags::PassBoundary | ActionFlags::BeginPass; uint32_t eventId = HandlePreCallback(commandBuffer, drawFlags);