diff --git a/renderdoc/core/resource_manager.h b/renderdoc/core/resource_manager.h index ca0cb5fc6..358b2862d 100644 --- a/renderdoc/core/resource_manager.h +++ b/renderdoc/core/resource_manager.h @@ -28,6 +28,8 @@ #include #include #include +#include +#include #include "api/replay/rdcflatmap.h" #include "api/replay/resourceid.h" #include "common/threading.h" @@ -727,30 +729,30 @@ protected: // used during capture or replay - map of resources currently alive with their real IDs, used in // capture and replay. - std::map m_CurrentResourceMap; + std::unordered_map m_CurrentResourceMap; // used during replay - maps back and forth from original id to live id and vice-versa - std::map m_OriginalIDs, m_LiveIDs; + std::unordered_map m_OriginalIDs, m_LiveIDs; // used during replay - holds resources allocated and the original id that they represent - std::map m_LiveResourceMap; + std::unordered_map m_LiveResourceMap; // used during capture - holds resource records by id. - std::map m_ResourceRecords; + std::unordered_map m_ResourceRecords; Threading::RWLock m_ResourceRecordLock; // used during replay - holds current resource replacements // replaced -> replacement - std::map m_Replacements; + std::unordered_map m_Replacements; // replacement -> replaced (for looking up original IDs) - std::map m_Replaced; + std::unordered_map m_Replaced; // During initial resources preparation, persistent resources are // postponed until serializing to RDC file. - std::set m_PostponedResourceIDs; + std::unordered_set m_PostponedResourceIDs; // During initial resources preparation, resources that are completely written // over are skipped - std::set m_SkippedResourceIDs; + std::unordered_set m_SkippedResourceIDs; struct ResourceRefTimes { diff --git a/renderdoc/driver/vulkan/vk_info.h b/renderdoc/driver/vulkan/vk_info.h index 8fcf234da..6b25438b3 100644 --- a/renderdoc/driver/vulkan/vk_info.h +++ b/renderdoc/driver/vulkan/vk_info.h @@ -24,6 +24,7 @@ #pragma once +#include #include "driver/shaders/spirv/spirv_reflect.h" #include "vk_common.h" #include "vk_manager.h" @@ -373,7 +374,7 @@ struct VulkanCreationInfo rdcarray discardRectangles; VkDiscardRectangleModeEXT discardMode; }; - std::map m_Pipeline; + std::unordered_map m_Pipeline; struct PipelineLayout { @@ -383,7 +384,7 @@ struct VulkanCreationInfo rdcarray pushRanges; rdcarray descSetLayouts; }; - std::map m_PipelineLayout; + std::unordered_map m_PipelineLayout; struct RenderPass { @@ -435,7 +436,7 @@ struct VulkanCreationInfo // in the layout that the subpass uses rdcarray loadRPs; }; - std::map m_RenderPass; + std::unordered_map m_RenderPass; struct Framebuffer { @@ -455,7 +456,7 @@ struct VulkanCreationInfo // See above in loadRPs - we need to duplicate and make framebuffer equivalents for each rdcarray loadFBs; }; - std::map m_Framebuffer; + std::unordered_map m_Framebuffer; struct Memory { @@ -485,7 +486,7 @@ struct VulkanCreationInfo void SimplifyBindings(); }; - std::map m_Memory; + std::unordered_map m_Memory; struct Buffer { @@ -496,7 +497,7 @@ struct VulkanCreationInfo uint64_t size; uint64_t gpuAddress; }; - std::map m_Buffer; + std::unordered_map m_Buffer; struct BufferView { @@ -508,7 +509,7 @@ struct VulkanCreationInfo uint64_t offset; uint64_t size; }; - std::map m_BufferView; + std::unordered_map m_BufferView; struct Image { @@ -525,7 +526,7 @@ struct VulkanCreationInfo bool cube; TextureCategory creationFlags; }; - std::map m_Image; + std::unordered_map m_Image; struct Sampler { @@ -556,7 +557,7 @@ struct VulkanCreationInfo VkClearColorValue customBorderColor; VkFormat customBorderFormat; }; - std::map m_Sampler; + std::unordered_map m_Sampler; struct YCbCrSampler { @@ -571,7 +572,7 @@ struct VulkanCreationInfo FilterMode chromaFilter; bool forceExplicitReconstruction; }; - std::map m_YCbCrSampler; + std::unordered_map m_YCbCrSampler; struct ImageView { @@ -584,7 +585,7 @@ struct VulkanCreationInfo VkImageSubresourceRange range; VkComponentMapping componentMapping; }; - std::map m_ImageView; + std::unordered_map m_ImageView; struct ShaderModule { @@ -608,7 +609,7 @@ struct VulkanCreationInfo std::map m_Reflections; }; - std::map m_ShaderModule; + std::unordered_map m_ShaderModule; struct DescSetPool { @@ -622,7 +623,7 @@ struct VulkanCreationInfo rdcarray overflow; }; - std::map m_DescSetPool; + std::unordered_map m_DescSetPool; struct QueryPool { @@ -633,15 +634,15 @@ struct VulkanCreationInfo uint32_t queryCount; VkQueryPipelineStatisticFlags pipelineStatistics; }; - std::map m_QueryPool; + std::unordered_map m_QueryPool; - std::map m_Names; - std::map m_SwapChain; - std::map m_DescSetLayout; - std::map m_DescUpdateTemplate; + std::unordered_map m_Names; + std::unordered_map m_SwapChain; + std::unordered_map m_DescSetLayout; + std::unordered_map m_DescUpdateTemplate; // just contains the queueFamilyIndex (after remapping) - std::map m_Queue; + std::unordered_map m_Queue; void erase(ResourceId id) { diff --git a/renderdoc/driver/vulkan/vk_replay.cpp b/renderdoc/driver/vulkan/vk_replay.cpp index fabb9b93d..70041b4ce 100644 --- a/renderdoc/driver/vulkan/vk_replay.cpp +++ b/renderdoc/driver/vulkan/vk_replay.cpp @@ -325,6 +325,9 @@ rdcarray VulkanReplay::GetBuffers() bufs.push_back(GetBuffer(it->first)); } + // sort the buffers by ID + std::sort(bufs.begin(), bufs.end()); + return bufs; }