From 7c32e4a3fed471eb44003823660dd87788fc0f4d Mon Sep 17 00:00:00 2001 From: gdk Date: Sat, 9 Apr 2022 20:19:49 -0300 Subject: [PATCH] Add missing barriers around CmdFillBuffer (fixes Monster Hunter Rise flickering on NVIDIA) --- Ryujinx.Graphics.Vulkan/PipelineBase.cs | 22 ++++++++++++++++++++++ Ryujinx.Graphics.Vulkan/PipelineFull.cs | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Ryujinx.Graphics.Vulkan/PipelineBase.cs b/Ryujinx.Graphics.Vulkan/PipelineBase.cs index f2d1644b0..deac8e4a3 100644 --- a/Ryujinx.Graphics.Vulkan/PipelineBase.cs +++ b/Ryujinx.Graphics.Vulkan/PipelineBase.cs @@ -140,7 +140,29 @@ namespace Ryujinx.Graphics.Vulkan var dst = Gd.BufferManager.GetBuffer(CommandBuffer, destination, true).Get(Cbs, offset, size).Value; + BufferHolder.InsertBufferBarrier( + Gd, + Cbs.CommandBuffer, + dst, + BufferHolder.DefaultAccessFlags, + AccessFlags.AccessTransferWriteBit, + PipelineStageFlags.PipelineStageAllCommandsBit, + PipelineStageFlags.PipelineStageTransferBit, + offset, + size); + Gd.Api.CmdFillBuffer(CommandBuffer, dst, (ulong)offset, (ulong)size, value); + + BufferHolder.InsertBufferBarrier( + Gd, + Cbs.CommandBuffer, + dst, + AccessFlags.AccessTransferWriteBit, + BufferHolder.DefaultAccessFlags, + PipelineStageFlags.PipelineStageTransferBit, + PipelineStageFlags.PipelineStageAllCommandsBit, + offset, + size); } public unsafe void ClearRenderTargetColor(int index, ColorF color) diff --git a/Ryujinx.Graphics.Vulkan/PipelineFull.cs b/Ryujinx.Graphics.Vulkan/PipelineFull.cs index 3bd467bec..7a9465626 100644 --- a/Ryujinx.Graphics.Vulkan/PipelineFull.cs +++ b/Ryujinx.Graphics.Vulkan/PipelineFull.cs @@ -192,7 +192,7 @@ namespace Ryujinx.Graphics.Vulkan if (componentMask != 0xf) { - // We can't use CmdClearAttachments if the clear has a custom scissor or is not writing all components, + // We can't use CmdClearAttachments if not writing all components, // because on Vulkan, the pipeline state does not affect clears. var dstTexture = FramebufferParams.GetAttachment(index); if (dstTexture == null)