[Mesa-dev] [PATCH] glsl: add lowering for double divide to rcp/mul

Ilia Mirkin imirkin at alum.mit.edu
Thu Feb 19 14:52:49 PST 2015


On Thu, Feb 19, 2015 at 5:47 PM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> It looks like no hw does div anyways, so we should just
> lower at the GLSL level.

Sounds like radeonsi has helpers for DDIV, but they can work this out
when they add support in mesa. Like not using DIV_TO_MUL_RCP lowering.

>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
>  src/glsl/lower_instructions.cpp | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/src/glsl/lower_instructions.cpp b/src/glsl/lower_instructions.cpp
> index e8a69e7..ac6715b 100644
> --- a/src/glsl/lower_instructions.cpp
> +++ b/src/glsl/lower_instructions.cpp
> @@ -199,7 +199,7 @@ lower_instructions_visitor::sub_to_add_neg(ir_expression *ir)
>  void
>  lower_instructions_visitor::div_to_mul_rcp(ir_expression *ir)
>  {
> -   assert(ir->operands[1]->type->is_float());
> +   assert(ir->operands[1]->type->is_float() || ir->operands[1]->type->is_double());
>
>     /* New expression for the 1.0 / op1 */
>     ir_rvalue *expr;
> @@ -327,7 +327,7 @@ lower_instructions_visitor::mod_to_floor(ir_expression *ir)
>     /* Don't generate new IR that would need to be lowered in an additional
>      * pass.
>      */
> -   if (lowering(DIV_TO_MUL_RCP) && ir->type->is_float())
> +   if (lowering(DIV_TO_MUL_RCP) && (ir->type->is_float() || ir->type->is_double()))
>        div_to_mul_rcp(div_expr);
>
>     ir_expression *const floor_expr =
> @@ -1014,7 +1014,7 @@ lower_instructions_visitor::visit_leave(ir_expression *ir)
>     case ir_binop_div:
>        if (ir->operands[1]->type->is_integer() && lowering(INT_DIV_TO_MUL_RCP))
>          int_div_to_mul_rcp(ir);
> -      else if (ir->operands[1]->type->is_float() && lowering(DIV_TO_MUL_RCP))
> +      else if ((ir->operands[1]->type->is_float() || ir->operands[1]->type->is_double())&& lowering(DIV_TO_MUL_RCP))

80 chars. And space around &&.

With that fixed, Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>

>          div_to_mul_rcp(ir);
>        break;
>
> --
> 1.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list