Matt Turner <matts...@gmail.com> writes:

> Cuts five instructions out of SynMark's Gl32VSInstancing benchmark.
> ---
> Could be made more general, but I don't see any cases we could optimize
> in our existing shader collection.
>
>  src/glsl/opt_algebraic.cpp | 35 +++++++++++++++++++++++++++++++++++
>  1 file changed, 35 insertions(+)
>
> diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp
> index eb5544a..17bcdfc 100644
> --- a/src/glsl/opt_algebraic.cpp
> +++ b/src/glsl/opt_algebraic.cpp
> @@ -329,6 +329,41 @@ ir_algebraic_visitor::handle_expression(ir_expression 
> *ir)
>        if (op_const[1] && !op_const[0])
>        reassociate_constant(ir, 1, op_const[1], op_expr[0]);
>  
> +      /* Recognize (v.x + v.y) + (v.z + v.w) as dot(v, 1.0) */
> +      if (options->OptimizeForAOS) {
> +         if (op_expr[0] && op_expr[0]->operation == ir_binop_add &&
> +             op_expr[1] && op_expr[1]->operation == ir_binop_add) {
> +            ir_swizzle *x = op_expr[0]->operands[0]->as_swizzle();
> +            ir_swizzle *y = op_expr[0]->operands[1]->as_swizzle();
> +            ir_swizzle *z = op_expr[1]->operands[0]->as_swizzle();
> +            ir_swizzle *w = op_expr[1]->operands[1]->as_swizzle();
> +
> +            if (!x || x->mask.num_components != 1 || x->mask.has_duplicates 
> ||
> +                !y || y->mask.num_components != 1 || y->mask.has_duplicates 
> ||
> +                !z || z->mask.num_components != 1 || z->mask.has_duplicates 
> ||
> +                !w || w->mask.num_components != 1 || w->mask.has_duplicates) 
> {
> +               break;
> +            }

I don't think you want to be early breaking out of this, because it
means missing the other optimization cases if you got part way into this
one, right?  I'd probably move this thing out to a separate function to
handle it more easily.

Attachment: pgpbgUjHkdMSj.pgp
Description: PGP signature

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to