Fix matrix byte size in DXIL MakeCBufferVariableType

Account for cbuffer D3D matrix row/column alignment (16 bytes)
This commit is contained in:
Jake Turner
2024-06-27 12:52:03 +01:00
parent 41adeb65b1
commit 8608e7bc97
@@ -1191,8 +1191,14 @@ static DXBC::CBufferVariableType MakeCBufferVariableType(const TypeInfo &typeInf
var.type.name += "x";
var.type.name += ToStr(var.type.cols);
var.type.bytesize =
VarTypeByteSize(var.type.varType) * var.type.rows * var.type.cols * var.type.elements;
// D3D matrices in cbuffers always take up a float4 per row/column.
uint32_t matrixByteStride = AlignUp16(VarTypeByteSize(var.type.varType));
if(var.type.varClass == CLASS_MATRIX_ROWS)
matrixByteStride *= var.type.rows;
else
matrixByteStride *= var.type.cols;
var.type.bytesize = matrixByteStride * var.type.elements;
}
else
{