From 61e0725d9d0f627c192ab45acd05e8aa4c695264 Mon Sep 17 00:00:00 2001 From: GPUCode Date: Mon, 6 Feb 2023 18:24:40 +0200 Subject: [PATCH] renderer_vulkan: Barrier frame attachment --- .../renderer_vulkan/renderer_vulkan.cpp | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index 5277c2470..5debd3fef 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -951,7 +951,29 @@ void RendererVulkan::DrawScreens(Frame* frame, const Layout::FramebufferLayout& } } - scheduler.Record([](vk::CommandBuffer cmdbuf) { cmdbuf.endRenderPass(); }); + scheduler.Record([image = frame->image](vk::CommandBuffer cmdbuf) { + const vk::ImageMemoryBarrier render_barrier = { + .srcAccessMask = vk::AccessFlagBits::eColorAttachmentWrite, + .dstAccessMask = vk::AccessFlagBits::eTransferRead, + .oldLayout = vk::ImageLayout::eGeneral, + .newLayout = vk::ImageLayout::eGeneral, + .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, + .image = image, + .subresourceRange{ + .aspectMask = vk::ImageAspectFlagBits::eColor, + .baseMipLevel = 0, + .levelCount = 1, + .baseArrayLayer = 0, + .layerCount = VK_REMAINING_ARRAY_LAYERS, + }, + }; + + cmdbuf.endRenderPass(); + cmdbuf.pipelineBarrier(vk::PipelineStageFlagBits::eColorAttachmentOutput, + vk::PipelineStageFlagBits::eTransfer, + vk::DependencyFlagBits::eByRegion, {}, {}, render_barrier); + }); } void RendererVulkan::SwapBuffers() {