From 77a3e11b327cb1e8cddb4b69a51544fd04940d21 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 12 Oct 2022 17:31:41 +0100 Subject: [PATCH] Upconvert initial layouts to GENERAL when promoting loadOp to LOAD * We were doing this in vkCreateRenderPass but not vkCreateRenderPass2 --- .../driver/vulkan/wrappers/vk_misc_funcs.cpp | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index b76ba6f54..f4b501126 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -1028,20 +1028,16 @@ bool WrappedVulkan::Serialise_vkCreateRenderPass(SerialiserType &ser, VkDevice d if(m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest) { if(att[i].loadOp == VK_ATTACHMENT_LOAD_OP_DONT_CARE) - { att[i].loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; - } + if(att[i].stencilLoadOp == VK_ATTACHMENT_LOAD_OP_DONT_CARE) + att[i].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD; + if(att[i].loadOp == VK_ATTACHMENT_LOAD_OP_LOAD && att[i].initialLayout == VK_IMAGE_LAYOUT_UNDEFINED) { att[i].initialLayout = VK_IMAGE_LAYOUT_GENERAL; } - if(att[i].stencilLoadOp == VK_ATTACHMENT_LOAD_OP_DONT_CARE) - { - att[i].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD; - if(att[i].initialLayout == VK_IMAGE_LAYOUT_UNDEFINED) - att[i].initialLayout = VK_IMAGE_LAYOUT_GENERAL; - } + if(att[i].stencilLoadOp == VK_ATTACHMENT_LOAD_OP_LOAD && att[i].initialLayout == VK_IMAGE_LAYOUT_UNDEFINED) { @@ -1292,6 +1288,26 @@ bool WrappedVulkan::Serialise_vkCreateRenderPass2(SerialiserType &ser, VkDevice att[i].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD; } + if(m_ReplayOptions.optimisation != ReplayOptimisationLevel::Fastest) + { + if(att[i].loadOp == VK_ATTACHMENT_LOAD_OP_DONT_CARE) + att[i].loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; + if(att[i].stencilLoadOp == VK_ATTACHMENT_LOAD_OP_DONT_CARE) + att[i].stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD; + + if(att[i].loadOp == VK_ATTACHMENT_LOAD_OP_LOAD && + att[i].initialLayout == VK_IMAGE_LAYOUT_UNDEFINED) + { + att[i].initialLayout = VK_IMAGE_LAYOUT_GENERAL; + } + + if(att[i].stencilLoadOp == VK_ATTACHMENT_LOAD_OP_LOAD && + att[i].initialLayout == VK_IMAGE_LAYOUT_UNDEFINED) + { + att[i].initialLayout = VK_IMAGE_LAYOUT_GENERAL; + } + } + // renderpass can't start or end in presentable layout on replay SanitiseOldImageLayout(att[i].initialLayout); SanitiseNewImageLayout(att[i].finalLayout);