[Mesa-dev] [PATCH 3/3] glsl: Optimize division by two with a right shift.

Matt Turner mattst88 at gmail.com
Mon Feb 24 15:45:41 PST 2014


On Mon, Feb 24, 2014 at 3:36 PM, Roland Scheidegger <sroland at 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.


More information about the mesa-dev mailing list