From 0fe19f51c0aeabd17e63d77897666148d2c43477 Mon Sep 17 00:00:00 2001 From: riperiperi Date: Mon, 24 Jan 2022 13:34:44 +0000 Subject: [PATCH] Insert barriers around vkCmdBlitImage (may fix some amd flicker) --- Ryujinx.Graphics.Vulkan/TextureCopy.cs | 28 ++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/Ryujinx.Graphics.Vulkan/TextureCopy.cs b/Ryujinx.Graphics.Vulkan/TextureCopy.cs index b93638ff3..a8ef7bc22 100644 --- a/Ryujinx.Graphics.Vulkan/TextureCopy.cs +++ b/Ryujinx.Graphics.Vulkan/TextureCopy.cs @@ -55,6 +55,20 @@ namespace Ryujinx.Graphics.Vulkan var filter = linearFilter && !dstInfo.Format.IsDepthOrStencil() ? Filter.Linear : Filter.Nearest; + TextureView.InsertImageBarrier( + api, + commandBuffer, + srcImage, + TextureStorage.DefaultAccessMask, + AccessFlags.AccessTransferReadBit, + PipelineStageFlags.PipelineStageAllCommandsBit, + PipelineStageFlags.PipelineStageTransferBit, + srcAspectFlags, + srcLayer, + srcLevel, + layers, + levels); + for (int level = 0; level < levels; level++) { var srcSl = new ImageSubresourceLayers(srcAspectFlags, (uint)srcLevel, (uint)srcLayer, (uint)layers); @@ -81,6 +95,20 @@ namespace Ryujinx.Graphics.Vulkan layers = Math.Max(1, layers >> 1); } } + + TextureView.InsertImageBarrier( + api, + commandBuffer, + dstImage, + AccessFlags.AccessTransferWriteBit, + TextureStorage.DefaultAccessMask, + PipelineStageFlags.PipelineStageTransferBit, + PipelineStageFlags.PipelineStageAllCommandsBit, + dstAspectFlags, + dstLayer, + dstLevel, + layers, + levels); } public static void Copy(