From 7ac6b8e742fd78ef1b9c2762dc9cd51ee5d8757e Mon Sep 17 00:00:00 2001
From: riperiperi <rhy3756547@hotmail.com>
Date: Sat, 6 Jan 2024 20:16:01 +0000
Subject: [PATCH] 16k external flush workaround

---
 src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs b/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
index 12461e96e..adaacd915 100644
--- a/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
+++ b/src/Ryujinx.Graphics.Gpu/Memory/Buffer.cs
@@ -561,6 +561,18 @@ namespace Ryujinx.Graphics.Gpu.Memory
         /// <param name="size">Size in bytes</param>
         public void ExternalFlush(ulong address, ulong size)
         {
+            ulong maxAddress = Math.Max(address, Address);
+            ulong minEndAddress = Math.Min(address + size, Address + Size);
+
+            if (maxAddress >= minEndAddress)
+            {
+                // Access doesn't overlap.
+                return;
+            }
+
+            address = maxAddress;
+            size = minEndAddress - address;
+
             _context.Renderer.BackgroundContextAction(() =>
             {
                 var ranges = _modifiedRanges;