From 27d26834f5508cfa34b5741534583ccbddbcdb9b Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 10 Jan 2022 13:45:13 +0000 Subject: [PATCH] Struct array stride is only 16-aligned for cbuffers in D3D. Closes #2441 --- renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp index 5dca11f78..120323a2b 100644 --- a/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp +++ b/renderdoc/driver/shaders/dxbc/dxbc_reflect.cpp @@ -59,7 +59,11 @@ static ShaderConstantType MakeShaderConstantType(bool cbufferPacking, DXBC::CBuf { uint32_t stride = type.descriptor.bytesize / RDCMAX(1U, type.descriptor.elements); RDCASSERTMSG("Stride is too large for uint16_t", stride <= 0xffff); - ret.descriptor.arrayByteStride = AlignUp16(RDCMIN(stride, 0xffffu) & 0xffff); + + ret.descriptor.arrayByteStride = RDCMIN(stride, 0xffffu) & 0xffff; + // in D3D only cbuffers have 16-byte aligned structs + if(cbufferPacking) + ret.descriptor.arrayByteStride = AlignUp16(ret.descriptor.arrayByteStride); ret.descriptor.rows = ret.descriptor.columns = 0; }