From acc99433c7c0e527424828452c978d7a69f8b52a Mon Sep 17 00:00:00 2001
From: Fernando Sahmkow <fsahmkow27@gmail.com>
Date: Sun, 27 Aug 2023 02:13:40 +0200
Subject: [PATCH] Buffer Cache: fix discard writes.

---
 src/video_core/buffer_cache/buffer_cache.h | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index f0f450edb..8be7bd594 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -289,8 +289,11 @@ std::pair<typename P::Buffer*, u32> BufferCache<P>::ObtainBuffer(GPUVAddr gpu_ad
         MarkWrittenBuffer(buffer_id, *cpu_addr, size);
         break;
     case ObtainBufferOperation::DiscardWrite: {
-        IntervalType interval{*cpu_addr, size};
+        VAddr cpu_addr_start = Common::AlignDown(*cpu_addr, 64);
+        VAddr cpu_addr_end = Common::AlignUp(*cpu_addr + size, 64);
+        IntervalType interval{cpu_addr_start, cpu_addr_end};
         ClearDownload(interval);
+        common_ranges.subtract(interval);
         break;
     }
     default:
@@ -1159,6 +1162,11 @@ void BufferCache<P>::UpdateDrawIndirect() {
             .size = static_cast<u32>(size),
             .buffer_id = FindBuffer(*cpu_addr, static_cast<u32>(size)),
         };
+        VAddr cpu_addr_start = Common::AlignDown(*cpu_addr, 64);
+        VAddr cpu_addr_end = Common::AlignUp(*cpu_addr + size, 64);
+        IntervalType interval{cpu_addr_start, cpu_addr_end};
+        ClearDownload(interval);
+        common_ranges.subtract(interval);
     };
     if (current_draw_indirect->include_count) {
         update(current_draw_indirect->count_start_address, sizeof(u32),