From 466debe9a46ab7e0e7ef92e8faed8f526d0467b6 Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 12 Aug 2020 14:47:59 +0100 Subject: [PATCH] Clean background frame references every 20 submits * This means the background references array won't build up even for programs that don't present. --- renderdoc/driver/vulkan/vk_core.h | 2 ++ renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 2f518e739..d85ebe2c0 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -750,6 +750,8 @@ private: rdcarray m_ForcedReferences; Threading::CriticalSection m_ForcedReferencesLock; + volatile int64_t m_QueueCounter = 0; + rdcarray GetForcedReferences() { rdcarray ret; diff --git a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp index dc3367acd..a08e0e51c 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp @@ -975,6 +975,12 @@ VkResult WrappedVulkan::vkQueueSubmit(VkQueue queue, uint32_t submitCount, sub->bakedCommands->AddResourceReferences(GetResourceManager()); } } + + // every 20 submits clean background references, in case the application isn't presenting. + if((Atomic::Inc64(&m_QueueCounter) % 20) == 0) + { + GetResourceManager()->CleanBackgroundFrameReferences(); + } } if(capframe)