On Mon, Feb 24, 2014 at 3:36 PM, Roland Scheidegger <srol...@vmware.com> wrote: > Am 25.02.2014 00:00, schrieb Matt Turner: >> --- >> src/glsl/opt_algebraic.cpp | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp >> index 778638c..50342ac 100644 >> --- a/src/glsl/opt_algebraic.cpp >> +++ b/src/glsl/opt_algebraic.cpp >> @@ -421,6 +421,9 @@ ir_algebraic_visitor::handle_expression(ir_expression >> *ir) >> } >> if (is_vec_one(op_const[1])) >> return ir->operands[0]; >> + if (is_vec_two(op_const[1]) && ir->type->is_integer()) { >> + return rshift(ir->operands[0], new(mem_ctx) ir_constant(1)); >> + } >> break; >> >> case ir_binop_dot: >> > > Does glsl require any particular rounding behavior for negative numbers > (like c99 does, which wouldn't work with shift emulation)? A quick look > didn't find anything but it might be implied somewhere...
Hm. I'll have to do some spec searching. > Also, if you do this for two, wouldn't it make sense to extend that to > power-of-two numbers or is that too much cpu work? There's not a direct way to check if the operand is a power of two without some additional infrastructure, so I punted for now. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev