From 4fb57db6a1da140d75a6928f1f29a1b172abe35d Mon Sep 17 00:00:00 2001 From: MaranBr Date: Wed, 27 May 2026 15:02:42 -0400 Subject: [PATCH] Better approach --- src/video_core/buffer_cache/buffer_cache.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 56800b1a51..ebd5643fde 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -1623,6 +1623,11 @@ bool BufferCache

::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si u64 largest_copy = 0; const DAddr buffer_start = buffer.cpu_addr_cached; memory_tracker.ForEachUploadRange(device_addr, size, [&](u64 device_addr_out, u64 range_size) { + bool gpu_modified = false; + gpu_modified_ranges.ForEachInRange(device_addr_out, range_size, [&](u64, u64) { gpu_modified = true; }); + if (gpu_modified) { + return; + } upload_copies.push_back(BufferCopy{ .src_offset = total_size_bytes, .dst_offset = device_addr_out - buffer_start, @@ -1634,9 +1639,6 @@ bool BufferCache

::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si if (total_size_bytes == 0) { return true; } - if (memory_tracker.IsRegionGpuModified(device_addr, size)) { - DownloadBufferMemory(buffer, device_addr, size); - } const std::span copies_span(upload_copies.data(), upload_copies.size()); UploadMemory(buffer, total_size_bytes, largest_copy, copies_span); any_buffer_uploaded = true;