From bc148d070131d67ff44e32bfa6de766b890fd968 Mon Sep 17 00:00:00 2001 From: IndecisiveTurtle <47210458+raphaelthegreat@users.noreply.github.com> Date: Mon, 23 Jun 2025 12:16:03 +0300 Subject: [PATCH] buffer_cache: Dont create buffers on ReadMemory --- src/video_core/buffer_cache/buffer_cache.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/video_core/buffer_cache/buffer_cache.cpp b/src/video_core/buffer_cache/buffer_cache.cpp index d16c64064..5f4996d21 100644 --- a/src/video_core/buffer_cache/buffer_cache.cpp +++ b/src/video_core/buffer_cache/buffer_cache.cpp @@ -140,8 +140,14 @@ void BufferCache::InvalidateMemory(VAddr device_addr, u64 size) { } void BufferCache::ReadMemory(VAddr device_addr, u64 size) { - Buffer& buffer = slot_buffers[FindBuffer(device_addr, size)]; - DownloadBufferMemory(buffer, device_addr, size); + ForEachBufferInRange(device_addr, size, [this, device_addr, size](BufferId buffer_id, Buffer& buffer) { + const VAddr buffer_start = buffer.CpuAddr(); + const VAddr buffer_end = buffer_start + buffer.SizeBytes(); + const VAddr download_start = std::max(buffer_start, device_addr); + const VAddr download_end = std::min(buffer_end, device_addr + size); + const u64 download_size = download_end - download_start; + DownloadBufferMemory(buffer, download_start, download_size); + }); } void BufferCache::DownloadBufferMemory(const Buffer& buffer, VAddr device_addr, u64 size) {