From 469f17a60738b24bde7329381ba7eac876562714 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 9 Feb 2022 13:03:59 +0000 Subject: [PATCH] Vulkan images in preinitialized layout must always be patched to general * Originally the idea was that on first use in a Loading pass we'd transition from preinitialized to whatever the application wanted, and then subsequently on repeated replays it would be left in general. However this doesn't account for initial contents and initial frame states, which will end up putting the image in GENERAL anyway. This is fine as it still satisfies the requirements if needed. --- .../driver/vulkan/wrappers/vk_cmd_funcs.cpp | 24 ++----------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index d5f94f8f6..160334242 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -3835,17 +3835,7 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier( // now sanitise layouts before passing to vulkan for(VkImageMemoryBarrier &barrier : imgBarriers) { - if(!IsLoading(m_State) && barrier.oldLayout == VK_IMAGE_LAYOUT_PREINITIALIZED) - { - // This is a transition from PRENITIALIZED, but we've already done this barrier once (when - // loading); Since we couldn't transition back to PREINITIALIZED, we instead left the - // image in GENERAL. - barrier.oldLayout = VK_IMAGE_LAYOUT_GENERAL; - } - else - { - SanitiseReplayImageLayout(barrier.oldLayout); - } + SanitiseOldImageLayout(barrier.oldLayout); SanitiseReplayImageLayout(barrier.newLayout); } @@ -4101,17 +4091,7 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier2(SerialiserType &ser, continue; } - if(!IsLoading(m_State) && barrier.oldLayout == VK_IMAGE_LAYOUT_PREINITIALIZED) - { - // This is a transition from PRENITIALIZED, but we've already done this barrier once (when - // loading); Since we couldn't transition back to PREINITIALIZED, we instead left the - // image in GENERAL. - barrier.oldLayout = VK_IMAGE_LAYOUT_GENERAL; - } - else - { - SanitiseReplayImageLayout(barrier.oldLayout); - } + SanitiseOldImageLayout(barrier.oldLayout); SanitiseReplayImageLayout(barrier.newLayout); }