From 6b88e6226fc4725115a4359fc6cff334c5022a67 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sat, 23 Jan 2016 16:16:00 +0100 Subject: [PATCH] Handle more inputs than just 16, just in case --- renderdoc/driver/shaders/spirv/spirv_disassemble.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp index ae4cbb057..bd8f5fcc8 100644 --- a/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_disassemble.cpp @@ -3109,9 +3109,6 @@ void SPVModule::MakeReflection(const string &entryPoint, ShaderReflection *refle reflection->DebugInfo.entryFile = 0; reflection->DebugInfo.entryFunc = entryPoint; - create_array_uninit(mapping->InputAttributes, 16); - for(size_t i=0; i < 16; i++) mapping->InputAttributes[i] = -1; - // TODO need to fetch these reflection->DispatchThreadsDimension[0] = 0; reflection->DispatchThreadsDimension[1] = 0; @@ -3487,6 +3484,15 @@ void SPVModule::MakeReflection(const string &entryPoint, ShaderReflection *refle std::sort(inputs.begin(), inputs.end(), sig_param_sort()); std::sort(outputs.begin(), outputs.end(), sig_param_sort()); + size_t numInputs = 16; + + for(size_t i=0; i < inputs.size(); i++) + if(inputs[i].systemValue == eAttr_None) + numInputs = RDCMAX(numInputs, (size_t)inputs[i].regIndex+1); + + create_array_uninit(mapping->InputAttributes, numInputs); + for(size_t i=0; i < numInputs; i++) mapping->InputAttributes[i] = -1; + for(size_t i=0; i < inputs.size(); i++) if(inputs[i].systemValue == eAttr_None) mapping->InputAttributes[ inputs[i].regIndex ] = (int32_t)i;