From fda6fc2322274bfaceddf9cfca65a120237dc366 Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 3 Aug 2026 10:50:26 +0100 Subject: [PATCH] Fix calculation of array size when calculating struct sizes * Non-tightly packed arrays can be larger based on the stride than base size multiplied by element count, e.g. with a 4-byte uint with a 16-byte array stride. --- renderdoc/driver/shaders/spirv/spirv_reflect.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp index dd60e7bc7..715acc3e3 100644 --- a/renderdoc/driver/shaders/spirv/spirv_reflect.cpp +++ b/renderdoc/driver/shaders/spirv/spirv_reflect.cpp @@ -484,9 +484,13 @@ StructSizes CalculateStructProps(uint32_t emptyStructSize, const ShaderConstant } } - ret.scalarSize *= RDCMAX(c.type.elements, 1U); - ret.baseSize *= RDCMAX(c.type.elements, 1U); - ret.extendedSize *= RDCMAX(c.type.elements, 1U); + if(c.type.elements > 1) + { + const uint32_t nonFinalArraySize = (c.type.elements - 1) * c.type.arrayByteStride; + ret.scalarSize += nonFinalArraySize; + ret.baseSize += nonFinalArraySize; + ret.extendedSize += nonFinalArraySize; + } return ret; }