commit | c89f75b655552d7f225626f7e606c048175f6dae | [log] [tgz] |
---|---|---|
author | Chris Forbes <chrisforbes@google.com> | Wed Sep 19 17:07:39 2018 -0700 |
committer | Chris Forbes <chrisforbes@google.com> | Fri Sep 21 18:37:52 2018 +0000 |
tree | cca640d1df8b265bfe0d9ec59816b68938104bd7 | |
parent | 2ecc8b712b08e895a41f4f1852b35ac8b744c4b8 [diff] |
Fix code generation for vec.swiz *= mat Khronos test CL: https://gerrit.khronos.org/#/c/2944/ Bug: b/116259485 Change-Id: Ie10b3eb16da39f332966a5b957acb0232140a942 Reviewed-on: https://swiftshader-review.googlesource.com/20748 Reviewed-by: Nicolas Capens <nicolascapens@google.com> Reviewed-by: Alexis Hétu <sugoi@google.com> Tested-by: Chris Forbes <chrisforbes@google.com>
diff --git a/src/OpenGL/compiler/OutputASM.cpp b/src/OpenGL/compiler/OutputASM.cpp index c18ecf7..3fe64fa 100644 --- a/src/OpenGL/compiler/OutputASM.cpp +++ b/src/OpenGL/compiler/OutputASM.cpp
@@ -748,6 +748,11 @@ case EOpVectorTimesMatrixAssign: assert(visit == PreVisit); { + // The left operand may contain a swizzle serving double-duty as + // swizzle and writemask, so it's important that we traverse it + // first. Otherwise we may end up never setting up our left + // operand correctly. + left->traverse(this); right->traverse(this); int size = leftType.getNominalSize();