[Mesa-dev] [PATCH 5/6] glsl: Optimize (v.x + v.y) + (v.z + v.w) into dot(v, 1.0).

Eric Anholt eric at anholt.net
Tue Mar 11 15:04:18 PDT 2014


Matt Turner <mattst88 at 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.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 818 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140311/b93603b4/attachment.pgp>


More information about the mesa-dev mailing list