Fix nonsquare matrix construction from scalar Matrix is laid out in column-major order, so the stride between elements on the main diagonal is #rows + 1, not #columns + 1. Bug: b/116263076 Change-Id: I00994b663bc4229e24f8ae1b7fa518caa0e7ea71 Reviewed-on: https://swiftshader-review.googlesource.com/20768 Reviewed-by: Nicolas Capens <nicolascapens@google.com> Tested-by: Chris Forbes <chrisforbes@google.com>
diff --git a/src/OpenGL/compiler/parseConst.cpp b/src/OpenGL/compiler/parseConst.cpp index c3e0b0c..26af408 100644 --- a/src/OpenGL/compiler/parseConst.cpp +++ b/src/OpenGL/compiler/parseConst.cpp
@@ -30,7 +30,7 @@ infoSink(sink), size(0), isMatrix(false), - matrixSize(0) { + matrixRows(0) { } bool error; @@ -53,7 +53,7 @@ TInfoSink& infoSink; size_t size; // size of the constructor ( 4 for vec4) bool isMatrix; - int matrixSize; // dimension of the matrix (nominal size and not the instance size) + int matrixRows; // number of rows in the matrix (nominal size and not the instance size) }; // @@ -124,7 +124,7 @@ if (node->getType().isMatrix()) { isMatrix = true; - matrixSize = node->getType().getNominalSize(); + matrixRows = node->getType().getSecondarySize(); } } @@ -142,7 +142,7 @@ constructorType = EOpNull; size = 0; isMatrix = false; - matrixSize = 0; + matrixRows = 0; } return false; } @@ -203,7 +203,7 @@ for(size_t i = index; i < totalSize; i++) { if (i >= instanceSize) return; - if (element - i == 0 || (i - element) % (matrixSize + 1) == 0 ) + if (element - i == 0 || (i - element) % (matrixRows + 1) == 0 ) leftUnionArray[i].cast(basicType, rightUnionArray[0]); else leftUnionArray[i].setFConst(0.0f);