From 24ec36b4e0cb532e77d58235c992c8f166004f52 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 3 Nov 2020 23:32:21 +0000 Subject: [PATCH] Batch moves of indirect drawcall nodes --- renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp index a2c22cfe6..7405d57a2 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_queue_funcs.cpp @@ -688,12 +688,17 @@ void WrappedVulkan::InsertDrawsAndRefreshIDs(BakedCmdBufferInfo &cmdBufInfo) SDChunk *chunk = m_StructuredFile->chunks[chunkIndex]; uint32_t baseAddedChunk = (uint32_t)m_StructuredFile->chunks.size(); + m_StructuredFile->chunks.reserve(m_StructuredFile->chunks.size() + eidShift); for(int32_t e = 0; e < eidShift; e++) m_StructuredFile->chunks.push_back(chunk->Duplicate()); // now copy the subdraw so we're not inserting into the array from itself VulkanDrawcallTreeNode node = cmdBufNodes[i + 1]; + cmdBufNodes.resize(cmdBufNodes.size() + eidShift); + for(size_t e = cmdBufNodes.size() - 1; e > i + 1 + eidShift; e--) + cmdBufNodes[e] = std::move(cmdBufNodes[e - eidShift]); + // then insert enough duplicates for(int32_t e = 0; e < eidShift; e++) { @@ -709,7 +714,7 @@ void WrappedVulkan::InsertDrawsAndRefreshIDs(BakedCmdBufferInfo &cmdBufInfo) for(rdcpair &use : node.resourceUsage) use.second.eventId++; - cmdBufNodes.insert(i + 2 + e, node); + cmdBufNodes[i + 2 + e] = node; } } }