[Mesa-dev] [PATCH] glsl: Use a separate div_to_mul_rcp lowering flag for integers.

Bryan Cain bryancain3 at gmail.com
Sun Aug 28 18:51:10 PDT 2011


On 08/28/2011 07:38 PM, Eric Anholt wrote:
> On Sat, 27 Aug 2011 20:18:55 -0700, Kenneth Graunke <kenneth at whitecape.org> wrote:
>> From: Bryan Cain <bryancain3 at gmail.com>
>>
>> Using multiply and reciprocal for integer division involves potentially
>> lossy floating point conversions.  This is okay for older GPUs that
>> represent integers as floating point, but undesirable for GPUs with
>> native integer division instructions.
>>
>> TGSI, for example, has UDIV/IDIV instructions for integer division,
>> so it makes sense to handle this directly.  Likewise for i965.
>>
>> Signed-off-by: Bryan Cain <bryancain3 at gmail.com>
>> Signed-off-by: Kenneth Graunke <kenneth at whitecape.org>
>
>> ---
>>     case ir_binop_div:
>> -      if (lowering(DIV_TO_MUL_RCP))
>> +      if (lowering(INT_DIV_TO_MUL_RCP) && ir->operands[1]->type->is_integer())
>> +	 int_div_to_mul_rcp(ir);
>> +      else if (lowering(DIV_TO_MUL_RCP))
>>  	 div_to_mul_rcp(ir);
>>        break;
>>  
> Sure looks odd to me for one of these to be checking the type and ther
> other not.

It works, though.  If it's not an integer type, it's going to be a float
type.


More information about the mesa-dev mailing list