[Mesa-dev] [PATCH 4/9] glsl: Optimize ir_triop_lrp(x, y, a) with a = 0.0f or 1.0f

Ian Romanick idr at freedesktop.org
Tue Feb 26 10:31:25 PST 2013


On 02/19/2013 05:03 PM, Matt Turner wrote:
> ---
>   src/glsl/opt_algebraic.cpp |   16 +++++++++++++---
>   1 files changed, 13 insertions(+), 3 deletions(-)
>
> diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp
> index 75948db..952941e 100644
> --- a/src/glsl/opt_algebraic.cpp
> +++ b/src/glsl/opt_algebraic.cpp
> @@ -186,12 +186,12 @@ ir_algebraic_visitor::swizzle_if_required(ir_expression *expr,
>   ir_rvalue *
>   ir_algebraic_visitor::handle_expression(ir_expression *ir)
>   {
> -   ir_constant *op_const[2] = {NULL, NULL};
> -   ir_expression *op_expr[2] = {NULL, NULL};
> +   ir_constant *op_const[3] = {NULL, NULL, NULL};
> +   ir_expression *op_expr[3] = {NULL, NULL, NULL};
>      ir_expression *temp;
>      unsigned int i;
>
> -   assert(ir->get_num_operands() <= 2);
> +   assert(ir->get_num_operands() <= 3);

Doesn't this part of the change have to occur before other patches in 
this series?  What happens if you run piglit on the commit just before 
this?  I'd prefer bisects not hit spurious failures.

>      for (i = 0; i < ir->get_num_operands(); i++) {
>         if (ir->operands[i]->type->is_matrix())
>   	 return ir;
> @@ -415,6 +415,16 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
>
>         break;
>
> +   case ir_triop_lrp:
> +     if (is_vec_zero(op_const[2])) {
> +        this->progress = true;
> +        return swizzle_if_required(ir, ir->operands[0]);
> +     } else if (is_vec_one(op_const[2])) {
> +        this->progress = true;
> +        return swizzle_if_required(ir, ir->operands[1]);
> +     }
> +     break;
> +
>      default:
>         break;
>      }
>



More information about the mesa-dev mailing list