From acc99433c7c0e527424828452c978d7a69f8b52a Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Sun, 27 Aug 2023 02:13:40 +0200 Subject: 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 BufferCache

::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

::UpdateDrawIndirect() { .size = static_cast(size), .buffer_id = FindBuffer(*cpu_addr, static_cast(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), -- cgit v1.2.3