From 3b328fd25104bf1f4f5b77e15dc332f9daae550e Mon Sep 17 00:00:00 2001 From: Aliya Pazylbekova Date: Tue, 30 Apr 2019 18:05:07 -0400 Subject: [PATCH] Add processing of dirtied objects during non-active capture from https://github.com/baldurk/renderdoc/commit/4ff4a791 --- .../driver/vulkan/wrappers/vk_queue_funcs.cpp | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp index f207b35d1..d77b4a5c4 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp @@ -853,6 +853,29 @@ VkResult WrappedVulkan::vkQueueSubmit(VkQueue queue, uint32_t submitCount, if(GetResourceManager()->HasCurrentResource(*it)) GetResourceManager()->MarkDirtyResource(*it); } + + // with EXT_descriptor_indexing a binding might have been updated after + // vkCmdBindDescriptorSets, so we need to track dirtied here at the last second. + for(auto it = record->bakedCommands->cmdInfo->boundDescSets.begin(); + it != record->bakedCommands->cmdInfo->boundDescSets.end(); ++it) + { + VkResourceRecord *setrecord = GetRecord(*it); + + SCOPED_LOCK(setrecord->descInfo->refLock); + + const std::map> &frameRefs = + setrecord->descInfo->bindFrameRefs; + + for(auto refit = frameRefs.begin(); refit != frameRefs.end(); ++refit) + { + if(refit->second.second == eFrameRef_PartialWrite || + refit->second.second == eFrameRef_ReadBeforeWrite) + { + if(GetResourceManager()->HasCurrentResource(refit->first)) + GetResourceManager()->MarkDirtyResource(refit->first); + } + } + } } }