glsl: Fix type error when lowering integer divisions
authorPaul Berry <stereotype441@gmail.com>
Fri, 12 Aug 2011 17:20:34 +0000 (10:20 -0700)
committerPaul Berry <stereotype441@gmail.com>
Tue, 16 Aug 2011 18:00:46 +0000 (11:00 -0700)
commitaf501e2b29c7fb161671dc5b3395eee1d1b16d3f
tree87fc6636512204a4e359fd3a64d3fa88097cf482
parent9e8f556b199a662c5525b9d03f52a067244fa602
glsl: Fix type error when lowering integer divisions

This patch fixes a bug when lowering an integer division:

  x/y

to a multiplication by a reciprocal:

  int(float(x)*reciprocal(float(y)))

If x was a plain int and y was an ivecN, the lowering pass
incorrectly assigned the type of the product to be float, when in fact
it should be vecN.  This caused mesa to abort with an IR validation
error.

Fixes piglit tests {fs,vs}-op-div-int-ivec{2,3,4}.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/glsl/lower_instructions.cpp