-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 08/12/2011 10:38 AM, Paul Berry wrote: > 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 a plain int and y was an ivecN, the lowering pass ^^^ One "a" should suffice.
> 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}. > --- > src/glsl/lower_instructions.cpp | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/src/glsl/lower_instructions.cpp b/src/glsl/lower_instructions.cpp > index 806f863..23aa19b 100644 > --- a/src/glsl/lower_instructions.cpp > +++ b/src/glsl/lower_instructions.cpp > @@ -166,6 +166,10 @@ lower_instructions_visitor::div_to_mul_rcp(ir_expression > *ir) > else > op0 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[0], > NULL); > > + vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT, > + ir->type->vector_elements, > + ir->type->matrix_columns); > + > op0 = new(ir) ir_expression(ir_binop_mul, vec_type, op0, op1); > > if (ir->operands[1]->type->base_type == GLSL_TYPE_INT) { -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/ iEYEARECAAYFAk5Jgn8ACgkQX1gOwKyEAw/L+QCgoPj3qiC4QYapE34OkSIoyTvQ LzMAnA33vY8QGj6QZ/1H7voXWx9oL7u/ =a64F -----END PGP SIGNATURE----- _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev