From 81efd5f1d1a534679662d46b61244acc12fbc307 Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Wed, 29 Jul 2026 00:37:37 -0400 Subject: [PATCH] [TEST] Adjustments on memory reclamations --- src/video_core/buffer_cache/buffer_cache.h | 6 ++---- src/video_core/texture_cache/texture_cache.h | 9 ++------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 5009e12e5e..be72f1ed12 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h @@ -61,9 +61,7 @@ u64 BufferCache

::ReclaimMemory(u64 target_bytes, bool allow_download) { return 0; } in_reclaim = true; - const size_t sentenced_before = sentenced_buffers.Size(); sentenced_buffers.Reclaim(runtime.CompletedSyncPoint()); - const bool drained = sentenced_buffers.Size() != sentenced_before; u64 freed = 0; const auto clean_up = [&](BufferId buffer_id) { if (freed >= target_bytes) { @@ -88,7 +86,7 @@ u64 BufferCache

::ReclaimMemory(u64 target_bytes, bool allow_download) { sentenced_buffers.Reclaim(runtime.CompletedSyncPoint()); in_reclaim = false; usage_refresh_countdown = 0; - reclaim_stalled = freed == 0 && !drained; + reclaim_stalled = freed == 0; return freed; } @@ -103,7 +101,7 @@ void BufferCache

::EnsureHeadroom(bool allow_download) { return; } const u64 target = (limit / 100) * RECLAIM_TARGET_PERCENT; - ReclaimMemory(usage - target, allow_download); + ReclaimMemory((std::min)(usage - target, total_used_memory), allow_download); } template diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index b6f1d04fa2..d92705ead2 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -172,15 +172,10 @@ u64 TextureCache

::ReclaimMemory(u64 target_bytes, bool allow_download) { } in_reclaim = true; const u64 drain_point = runtime.CompletedSyncPoint(); - const size_t sentenced_before = sentenced_images.Size() + sentenced_image_view.Size() + - sentenced_framebuffers.Size(); TickEvictionDownloads(drain_point); sentenced_images.Reclaim(drain_point); sentenced_image_view.Reclaim(drain_point); sentenced_framebuffers.Reclaim(drain_point); - const bool drained = sentenced_images.Size() + sentenced_image_view.Size() + - sentenced_framebuffers.Size() != - sentenced_before; u64 freed = 0; const auto evict = [&](ImageId image_id) { if (freed >= target_bytes) { @@ -225,7 +220,7 @@ u64 TextureCache

::ReclaimMemory(u64 target_bytes, bool allow_download) { sentenced_framebuffers.Reclaim(exit_point); in_reclaim = false; usage_refresh_countdown = 0; - reclaim_stalled = freed == 0 && !drained; + reclaim_stalled = freed == 0; return freed; } @@ -240,7 +235,7 @@ void TextureCache

::EnsureHeadroom(bool allow_download) { return; } const u64 target = (limit / 100) * RECLAIM_TARGET_PERCENT; - ReclaimMemory(usage - target, allow_download); + ReclaimMemory((std::min)(usage - target, total_used_memory), allow_download); } template