Jelajahi Sumber

Workaround for MoltenVK barrier issues (#5118)

gdkchan 2 tahun lalu
induk
melakukan
96d1f0da2d
1 mengubah file dengan 13 tambahan dan 0 penghapusan
  1. 13 0
      src/Ryujinx.Graphics.Vulkan/PipelineBase.cs

+ 13 - 0
src/Ryujinx.Graphics.Vulkan/PipelineBase.cs

@@ -80,6 +80,7 @@ namespace Ryujinx.Graphics.Vulkan
 
         private PipelineColorBlendAttachmentState[] _storedBlend;
 
+        private ulong _drawCountSinceBarrier;
         public ulong DrawCount { get; private set; }
         public bool RenderPassActive { get; private set; }
 
@@ -133,6 +134,18 @@ namespace Ryujinx.Graphics.Vulkan
 
         public unsafe void Barrier()
         {
+            if (_drawCountSinceBarrier != DrawCount)
+            {
+                _drawCountSinceBarrier = DrawCount;
+
+                // Barriers apparently have no effect inside a render pass on MoltenVK.
+                // As a workaround, end the render pass.
+                if (Gd.IsMoltenVk)
+                {
+                    EndRenderPass();
+                }
+            }
+
             MemoryBarrier memoryBarrier = new MemoryBarrier()
             {
                 SType = StructureType.MemoryBarrier,