From 2f94fb9680cb6b1c35bee33f802ff25fa3560bd2 Mon Sep 17 00:00:00 2001 From: Takoroka <137927095+Takoroka@users.noreply.github.com> Date: Sat, 31 Oct 2026 23:24:24 -0400 Subject: vk_pipeline_cache: destroy graphics pipelines unused for 9000 frames Each built pipeline holds ~0.45 MB of driver memory and none was ever destroyed, so it grew with every place a session went. One unused for 9000 frames is destroyed once the GPU is past it and built again from the driver's pipeline cache (2-3 ms) if it is needed later; the transitions between pipelines are cleared, and pipelines used this session still go to the used list. Mario Kart World's title screen, 10 minutes: 1,714 evicted, 1,700-1,850 kept instead of a count that only grows. (cherry picked from commit 24a37800034f83ec1d8fe9e8e5642d27eb2935b8) --- src/video_core/renderer_vulkan/vk_rasterizer.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/video_core/renderer_vulkan/vk_rasterizer.cpp') diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 0826820714..d659e44fe2 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -1193,6 +1193,7 @@ void RasterizerVulkan::FlushCommands() { void RasterizerVulkan::TickFrame() { draw_counter = 0; + pipeline_cache.TickFrame(); guest_descriptor_queue.TickFrame(); compute_pass_descriptor_queue.TickFrame(); descriptor_buffer_ring.TickFrame(); -- cgit v1.2.3