diff --git a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp index f06f1f74c..bac16f1b8 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_descriptor_funcs.cpp @@ -285,7 +285,10 @@ VkResult WrappedVulkan::vkAllocDescriptorSets( record->AddParent(GetResourceManager()->GetResourceRecord(layoutID)); // just always treat descriptor sets as dirty - GetResourceManager()->MarkDirtyResource(id); + if(m_State != WRITING_CAPFRAME) + GetResourceManager()->MarkDirtyResource(id); + else + GetResourceManager()->MarkPendingDirty(id); record->layout = layoutID; m_CreationInfo.m_DescSetLayout[layoutID].CreateBindingsArray(record->descBindings); diff --git a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp index 137f61988..f94d1aea9 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp @@ -387,8 +387,17 @@ VkResult WrappedVulkan::vkQueueSubmit( GetResourceManager()->ApplyTransitions(m_CmdBufferInfo[cmd].imgtransitions, m_ImageInfo); VkResourceRecord *record = GetRecord(pCmdBuffers[i]); - for(auto it = record->bakedCommands->dirtied.begin(); it != record->bakedCommands->dirtied.end(); ++it) - GetResourceManager()->MarkDirtyResource(*it); + + if(m_State == WRITING_CAPFRAME) + { + for(auto it = record->bakedCommands->dirtied.begin(); it != record->bakedCommands->dirtied.end(); ++it) + GetResourceManager()->MarkPendingDirty(*it); + } + else + { + for(auto it = record->bakedCommands->dirtied.begin(); it != record->bakedCommands->dirtied.end(); ++it) + GetResourceManager()->MarkDirtyResource(*it); + } if(m_State == WRITING_CAPFRAME) { diff --git a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp index 0b4e7f45d..fac35f8e0 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_resource_funcs.cpp @@ -94,7 +94,10 @@ VkResult WrappedVulkan::vkAllocMemory( // VKTODOMED always treat memory as dirty for now, so its initial state // is guaranteed to be prepared - GetResourceManager()->MarkDirtyResource(id); + if(m_State != WRITING_CAPFRAME) + GetResourceManager()->MarkDirtyResource(id); + else + GetResourceManager()->MarkPendingDirty(id); } else { @@ -157,10 +160,6 @@ VkResult WrappedVulkan::vkMapMemory( it->second.refData = NULL; } } - else if(m_State >= WRITING) - { - GetResourceManager()->MarkDirtyResource(id); - } } return ret; diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index 465eee58a..561db8e60 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -958,6 +958,8 @@ VkResult WrappedVulkan::vkQueuePresentWSI( GetResourceManager()->MarkUnwrittenResources(); GetResourceManager()->ClearReferencedResources(); + + GetResourceManager()->FlushPendingDirty(); } }