From 36f5c907573c5da70b051fbc37da7de9edc4d2d6 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 16 Jun 2020 11:31:33 +0100 Subject: [PATCH] Add missing references not being tracked in background on vulkan --- .../driver/vulkan/wrappers/vk_queue_funcs.cpp | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp index 704a922e2..9cbd89214 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp @@ -1032,7 +1032,32 @@ VkResult WrappedVulkan::vkQueueSubmit(VkQueue queue, uint32_t submitCount, { VkResourceRecord *record = GetRecord(pSubmits[s].pCommandBuffers[i]); + for(auto it = record->bakedCommands->cmdInfo->boundDescSets.begin(); + it != record->bakedCommands->cmdInfo->boundDescSets.end(); ++it) + { + VkResourceRecord *setrecord = GetRecord(*it); + + SCOPED_LOCK(setrecord->descInfo->refLock); + + for(auto refit = setrecord->descInfo->bindFrameRefs.begin(); + refit != setrecord->descInfo->bindFrameRefs.end(); ++refit) + { + GetResourceManager()->MarkResourceFrameReferenced(refit->first, refit->second.second); + + if(refit->second.first & DescriptorSetData::SPARSE_REF_BIT) + { + VkResourceRecord *sparserecord = + GetResourceManager()->GetResourceRecord(refit->first); + + GetResourceManager()->MarkSparseMapReferenced(sparserecord->resInfo); + } + } + } + record->bakedCommands->AddResourceReferences(GetResourceManager()); + + for(VkResourceRecord *sub : record->bakedCommands->cmdInfo->subcmds) + sub->bakedCommands->AddResourceReferences(GetResourceManager()); } } }