glsl: Try vectorizing when seeing a repeated assignment to a channel.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 8 Apr 2014 23:55:23 +0000 (16:55 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 11 Apr 2014 19:39:37 +0000 (12:39 -0700)
commitae2a03b5736037128fb071595717f300d5b3afd5
tree9a3aec47ed45d1bcb20f5b85077f9e5c19e4e556
parent625cf8c874950a38e7afb404345611f0fad4d490
glsl: Try vectorizing when seeing a repeated assignment to a channel.

When considering assignment expressions like:

    v.x += u.x;
    v.x += u.x;

the vectorizer would incorrectly keep going, attempting to find more
instructions to vectorize.  It would overwrite the saved assignment
to point at the second one, and increment channels a second time,
resulting in try_vectorize thinking the expression was a vec2 instead of
a float.

Instead, if we see a repeated assignment to a channel, just try to
vectorize everything we've found so far.  This clears the saved state
so it will start over.

Fixes Piglit's repeated-channel-assignments.vert.

Cc: "10.1" <mesa-stable@lists.freedesktop.org>
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/glsl/opt_vectorize.cpp