From 3ed35bf2532d375360edf40d7fae902ad76ae208 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 4 Oct 2021 13:07:24 +0100 Subject: [PATCH] Fix assignment of 64-bit vertex input element locations. Closes #2380 --- renderdoc/driver/shaders/spirv/spirv_reflect.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp index 51991b271..190d957e7 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp @@ -1638,6 +1638,10 @@ void Reflector::AddSignatureParameter(const bool isInput, const ShaderStage stag sig.channelUsedMask = sig.regChannelMask; + uint32_t regStep = 1; + if(sig.varType == VarType::Double || sig.varType == VarType::ULong || sig.varType == VarType::SLong) + regStep = 2; + for(uint32_t a = 0; a < arraySize; a++) { rdcstr n = varName; @@ -1651,7 +1655,7 @@ void Reflector::AddSignatureParameter(const bool isInput, const ShaderStage stag { sigarray.push_back(sig); - regIndex++; + regIndex += regStep; if(isInput) patchData.inputs.push_back(patch); @@ -1667,7 +1671,7 @@ void Reflector::AddSignatureParameter(const bool isInput, const ShaderStage stag { SigParameter s = sig; s.varName = StringFormat::Fmt("%s:%s%u", n.c_str(), rowmajor ? "row" : "col", m); - s.regIndex += m; + s.regIndex += m * regStep; sigarray.push_back(s); @@ -1676,7 +1680,7 @@ void Reflector::AddSignatureParameter(const bool isInput, const ShaderStage stag else patchData.outputs.push_back(patch); - regIndex++; + regIndex += regStep; // increment the matrix column access chain patch.accessChain.back()++; @@ -1687,7 +1691,7 @@ void Reflector::AddSignatureParameter(const bool isInput, const ShaderStage stag patch.accessChain.pop_back(); } - sig.regIndex += RDCMAX(1U, varType->matrix().count); + sig.regIndex += RDCMAX(1U, varType->matrix().count) * regStep; // increment the array index access chain (if it exists) if(isArray) {