diff options
| author | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-11-01 01:11:09 -0400 |
|---|---|---|
| committer | Takoroka <137927095+Takoroka@users.noreply.github.com> | 2026-11-01 08:40:02 -0500 |
| commit | 594e07ee5302098e417858608dd03c46336274f5 (patch) | |
| tree | 1f7b2c32127a35128c7bf418d938deb42f32c346 /src/video_core/buffer_cache | |
| parent | adae7635708e155d967e84d7ad84bf63c5203409 (diff) | |
buffer_cache: collect Switch 2 buffers from 512 MiB
The collector ran on Switch 2 titles only once their buffers reached
1 GiB (aggressively at 2 GiB), so geometry of scenes long gone stayed in
VRAM: Mario Kart World's title screen grew from 0.2 to 0.9 GB of buffers
in ten minutes, most of a ~1.4 GB climb in VRAM in use. It now starts at
512 MiB (aggressive at 1 GiB); it only evicts buffers unused for 120
frames or more.
(cherry picked from commit fb5d797636f2269591b68fda7c8d65787a9e3a9f)
Diffstat (limited to 'src/video_core/buffer_cache')
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index e90af3214d..53874e75cc 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -141,9 +141,10 @@ void BufferCache<P>::TickFrame() { // title 1's buffers were ~200 MiB of an 8 GB GPU's ~6.8 GB in use, yet this collector // ran aggressively every frame on the device-wide figure, evicting up to 64 buffers (and // downloading the GPU-written ones, ~5% of the GPU thread) that were recreated later. - // Collect when the buffers themselves are large. - if (buffer_bytes >= 1_GiB) { - RunGarbageCollector(buffer_bytes >= 2_GiB); + // Collect when the buffers themselves are large. At 1 GiB it held geometry of scenes + // long gone: title 1's title screen grew to ~0.9 GB of buffers in ten minutes. + if (buffer_bytes >= 512_MiB) { + RunGarbageCollector(buffer_bytes >= 1_GiB); } } else if (total_used_memory >= minimum_memory) { RunGarbageCollector(total_used_memory >= critical_memory); |
