diff --git a/renderdoc/driver/vulkan/vk_common.cpp b/renderdoc/driver/vulkan/vk_common.cpp index 41981bfdc..f568fbf60 100644 --- a/renderdoc/driver/vulkan/vk_common.cpp +++ b/renderdoc/driver/vulkan/vk_common.cpp @@ -51,6 +51,12 @@ VkAccessFlags MakeAccessMask(VkImageLayout layout) return VkAccessFlags(0); } +void ReplacePresentableImageLayout(VkImageLayout &layout) +{ + if(layout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR) + layout = VK_IMAGE_LAYOUT_GENERAL; +} + int SampleCount(VkSampleCountFlagBits countFlag) { switch(countFlag) diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index d88ee0553..6ab2de968 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -55,6 +55,8 @@ VkPrimitiveTopology MakeVkPrimitiveTopology(PrimitiveTopology Topo); // set conservative access bits for this image layout VkAccessFlags MakeAccessMask(VkImageLayout layout); +void ReplacePresentableImageLayout(VkImageLayout &layout); + void DoPipelineBarrier(VkCommandBuffer cmd, uint32_t count, VkImageMemoryBarrier *barriers); void DoPipelineBarrier(VkCommandBuffer cmd, uint32_t count, VkBufferMemoryBarrier *barriers); void DoPipelineBarrier(VkCommandBuffer cmd, uint32_t count, VkMemoryBarrier *barriers); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 7c2960afd..82065e7ef 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -663,6 +663,8 @@ bool WrappedVulkan::Serialise_BeginCaptureFrame(bool applyInitialState) { for(size_t i=0; i < imgBarriers.size(); i++) { + ReplacePresentableImageLayout(imgBarriers[i].oldLayout); + ReplacePresentableImageLayout(imgBarriers[i].newLayout); imgBarriers[i].srcAccessMask = MakeAccessMask(imgBarriers[i].oldLayout); imgBarriers[i].dstAccessMask = MakeAccessMask(imgBarriers[i].newLayout); } diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index 9ccfb64a6..d2bff0e6a 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -1665,8 +1665,14 @@ bool WrappedVulkan::Serialise_vkCmdPipelineBarrier( bufBarriers.push_back(bufMemBarriers[i]); for(uint32_t i=0; i < imgCount; i++) + { if(imgMemBarriers[i].image != VK_NULL_HANDLE) + { imgBarriers.push_back(imgMemBarriers[i]); + ReplacePresentableImageLayout(imgBarriers.back().oldLayout); + ReplacePresentableImageLayout(imgBarriers.back().newLayout); + } + } } SAFE_DELETE_ARRAY(bufMemBarriers); diff --git a/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp index ea103f0a0..671c7b153 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_sync_funcs.cpp @@ -699,8 +699,14 @@ bool WrappedVulkan::Serialise_vkCmdWaitEvents( bufBarriers.push_back(bufMemBarriers[i]); for(uint32_t i=0; i < imgCount; i++) + { if(imgBarriers[i].image != VK_NULL_HANDLE) + { imgBarriers.push_back(imgMemBarriers[i]); + ReplacePresentableImageLayout(imgBarriers.back().oldLayout); + ReplacePresentableImageLayout(imgBarriers.back().newLayout); + } + } } SAFE_DELETE_ARRAY(bufMemBarriers);