From eb5c416130fe2431959a4914b4d79892261dce68 Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 22 Jan 2019 18:51:54 +0000 Subject: [PATCH] Reserve space up front when fetching resources on Vulkan/D3D12 --- renderdoc/api/replay/pipestate.inl | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/renderdoc/api/replay/pipestate.inl b/renderdoc/api/replay/pipestate.inl index 33771ed9b..917fe9c86 100644 --- a/renderdoc/api/replay/pipestate.inl +++ b/renderdoc/api/replay/pipestate.inl @@ -1036,6 +1036,12 @@ rdcarray PipeState::GetReadOnlyResources(ShaderStage stage) { const D3D12Pipe::Shader &s = GetD3D12Stage(stage); + size_t size = 0; + for(int space = 0; space < s.spaces.count(); space++) + size += s.spaces[space].srvs.size(); + + ret.reserve(size); + for(int space = 0; space < s.spaces.count(); space++) { for(int reg = 0; reg < s.spaces[space].srvs.count(); reg++) @@ -1087,6 +1093,12 @@ rdcarray PipeState::GetReadOnlyResources(ShaderStage stage) ShaderStageMask mask = MaskForStage(stage); + size_t size = 0; + for(int set = 0; set < descsets.count(); set++) + size += descsets[set].bindings.size(); + + ret.reserve(size); + for(int set = 0; set < descsets.count(); set++) { const VKPipe::DescriptorSet &descset = descsets[set]; @@ -1179,6 +1191,12 @@ rdcarray PipeState::GetReadWriteResources(ShaderStage stage) { const D3D12Pipe::Shader &s = GetD3D12Stage(stage); + size_t size = 0; + for(int space = 0; space < s.spaces.count(); space++) + size += s.spaces[space].uavs.size(); + + ret.reserve(size); + for(int space = 0; space < s.spaces.count(); space++) { for(int reg = 0; reg < s.spaces[space].uavs.count(); reg++) @@ -1226,6 +1244,12 @@ rdcarray PipeState::GetReadWriteResources(ShaderStage stage) ShaderStageMask mask = MaskForStage(stage); + size_t size = 0; + for(int set = 0; set < descsets.count(); set++) + size += descsets[set].bindings.size(); + + ret.reserve(size); + for(int set = 0; set < descsets.count(); set++) { const VKPipe::DescriptorSet &descset = descsets[set];