diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 53b8f95f2..3ef9a7e5b 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -898,7 +898,7 @@ bool WrappedVulkan::EndFrameCapture(void *dev, void *wnd) VkImageMemoryBarrier bbBarrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, NULL, - 0, 0, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, + 0, VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, Unwrap(backbuffer), { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 } @@ -906,7 +906,7 @@ bool WrappedVulkan::EndFrameCapture(void *dev, void *wnd) VkImageMemoryBarrier readBarrier = { VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, NULL, - 0, 0, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, + 0, VK_ACCESS_TRANSFER_WRITE_BIT, VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, readbackIm, // was never wrapped { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 } @@ -919,7 +919,10 @@ bool WrappedVulkan::EndFrameCapture(void *dev, void *wnd) // barrier to switch backbuffer back to present layout std::swap(bbBarrier.oldLayout, bbBarrier.newLayout); + std::swap(bbBarrier.srcAccessMask, bbBarrier.dstAccessMask); + readBarrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; + readBarrier.dstAccessMask = VK_ACCESS_HOST_READ_BIT; readBarrier.oldLayout = readBarrier.newLayout; readBarrier.newLayout = VK_IMAGE_LAYOUT_GENERAL; diff --git a/renderdoc/driver/vulkan/vk_initstate.cpp b/renderdoc/driver/vulkan/vk_initstate.cpp index 66c4c7f1e..1fe362420 100644 --- a/renderdoc/driver/vulkan/vk_initstate.cpp +++ b/renderdoc/driver/vulkan/vk_initstate.cpp @@ -1088,13 +1088,14 @@ bool WrappedVulkan::Prepare_InitialState(WrappedVkRes *res) // transfer back to whatever it was srcimBarrier.oldLayout = srcimBarrier.newLayout; - srcimBarrier.srcAccessMask = 0; + srcimBarrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT; srcimBarrier.dstAccessMask = 0; for (size_t si = 0; si < layout->subresourceStates.size(); si++) { srcimBarrier.subresourceRange = layout->subresourceStates[si].subresourceRange; srcimBarrier.newLayout = layout->subresourceStates[si].newLayout; + srcimBarrier.dstAccessMask = MakeAccessMask(srcimBarrier.newLayout); DoPipelineBarrier(cmd, 1, &srcimBarrier); }