aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/buffer_cache/buffer_cache.h
diff options
context:
space:
mode:
authorMaranBr <maranbr@outlook.com>2026-06-27 08:38:04 +0200
committercrueter <crueter@eden-emu.dev>2026-06-27 08:38:04 +0200
commitb4b41ee62c0f18c929b7b9926e5f0597c2c45783 (patch)
tree7038df120e21484fc5307ac80636da480dc3c54d /src/video_core/buffer_cache/buffer_cache.h
parent0d6a2158f058b384efcdb438908cc8cdd0ed6676 (diff)
[buffer_cache] Add option to control GPU buffer readback (#4126)
Added an option to control the GPU buffer readback, as it causes issues if the hardware cannot keep up with the additional workload. Some games require this to render certain effects properly. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4126
Diffstat (limited to 'src/video_core/buffer_cache/buffer_cache.h')
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index 3494895f66..740d99558e 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -1634,15 +1634,17 @@ bool BufferCache<P>::SynchronizeBuffer(Buffer& buffer, DAddr device_addr, u32 si
if (total_size_bytes == 0) {
return true;
}
- u64 min_offset = (std::numeric_limits<u64>::max)();
- u64 max_offset = 0;
- for (const auto& copy : upload_copies) {
- min_offset = (std::min)(min_offset, copy.dst_offset);
- max_offset = (std::max)(max_offset, copy.dst_offset + copy.size);
- }
- const DAddr sync_addr = buffer.CpuAddr() + min_offset;
- const u64 sync_size = max_offset - min_offset;
- DownloadBufferMemory(buffer, sync_addr, sync_size);
+ if (Settings::values.enable_gpu_buffer_readback.GetValue()) {
+ u64 min_offset = (std::numeric_limits<u64>::max)();
+ u64 max_offset = 0;
+ for (const auto& copy : upload_copies) {
+ min_offset = (std::min)(min_offset, copy.dst_offset);
+ max_offset = (std::max)(max_offset, copy.dst_offset + copy.size);
+ }
+ const DAddr sync_addr = buffer.CpuAddr() + min_offset;
+ const u64 sync_size = max_offset - min_offset;
+ DownloadBufferMemory(buffer, sync_addr, sync_size);
+ }
const std::span<BufferCopy> copies_span(upload_copies.data(), upload_copies.size());
UploadMemory(buffer, total_size_bytes, largest_copy, copies_span);
any_buffer_uploaded = true;