glsl: Don't convert reductions of ivec to a dot-product
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 25 Jun 2014 02:12:24 +0000 (19:12 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 25 Jun 2014 17:56:32 +0000 (10:56 -0700)
commit316dafa27d237c9b70580d8fe4591792e939bcd6
tree9c30819cd7e09196bb900e6cd922c0fdb74f5813
parent4ccbbbdd741555174d78c4271610683f18fea661
glsl: Don't convert reductions of ivec to a dot-product

Mesa has an optimization that converts expressions like "v.x + v.y + v.z
+ v.w" into dot(v, 1.0).  And therein lies the rub: the other operand to
the dot-product is always a float... even if the vector is an ivec or
uvec.  This results in an assertion failure in ir_builder.

If the base type of the operand is not float, don't try the
optimization.  Dot-product is not valid on integer data.

Fixes piglit vs-integer-reduction.shader_test and OpenGL ES conformance
test ES2-CTS.gtf.GL2Tests.glGetUniform.glGetUniform.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Christoph Brill <egore911@gmail.com>
src/glsl/opt_algebraic.cpp