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)