glsl: disallow incompatible matrices multiplication
authorAndrii Simiklit <andrii.simiklit@globallogic.com>
Tue, 10 Sep 2019 14:00:32 +0000 (17:00 +0300)
committerEric Anholt <eric@anholt.net>
Fri, 27 Sep 2019 21:42:09 +0000 (21:42 +0000)
commitb32bb888c70576bf7e48f22703028eb1a43da651
tree8d2232d112bdde987a8d3adc4011d998890b3f54
parent67e897729050aeec9b798621dfee6151bedf3864
glsl: disallow incompatible matrices multiplication

glsl 4.4 spec section '5.9 expressions':
"The operator is multiply (*), where both operands are matrices or one operand is a vector and the
 other a matrix. A right vector operand is treated as a column vector and a left vector operand as a
 row vector. In all these cases, it is required that the number of columns of the left operand is equal
 to the number of rows of the right operand. Then, the multiply (*) operation does a linear
 algebraic multiply, yielding an object that has the same number of rows as the left operand and the
 same number of columns as the right operand. Section 5.10 “Vector and Matrix Operations”
 explains in more detail how vectors and matrices are operated on."

This fix disallows a multiplication of incompatible matrices like:
mat4x3(..) * mat4x3(..)
mat4x2(..) * mat4x2(..)
mat3x2(..) * mat3x2(..)
....

CC: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=111664
Signed-off-by: Andrii Simiklit <andrii.simiklit@globallogic.com>
src/compiler/glsl_types.cpp