[Mesa-dev] [PATCH v4] gallium/util: Break recursion in pipe_resource_reference

Marek Olšák maraeo at gmail.com
Wed Jun 14 16:17:29 UTC 2017


On Wed, Jun 14, 2017 at 11:44 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Michel Dänzer <michel.daenzer at amd.com>
>
> It calling itself recursively prevented it from being inlined, resulting
> in a copy being generated in every compilation unit referencing it. This
> bloated the text segment of the Gallium mega-driver *_dri.so by ~4%,
> and might also have impacted performance.
>
> Fixes: ecd6fce2611e ("mesa/st: support lowering multi-planar YUV")
> v2:
> * Add comment above pipe_resource_next_reference [Samuel Pitoiset]
> v3:
> * Use loop to unreference the full chain of resources referenced via
>   the next members [Timothy Arceri]
> v4:
> * Stop chasing ->next chain at the first sub-resource which isn't
>   destroyed [Nicolai Hähnle]
>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
>  src/gallium/auxiliary/util/u_inlines.h | 10 ++++++++--
>  1 file changed, 8 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h
> index 6a3d5043cf..4fc683a574 100644
> --- a/src/gallium/auxiliary/util/u_inlines.h
> +++ b/src/gallium/auxiliary/util/u_inlines.h
> @@ -137,8 +137,14 @@ pipe_resource_reference(struct pipe_resource **ptr, struct pipe_resource *tex)
>
>     if (pipe_reference_described(&(*ptr)->reference, &tex->reference,
>                                  (debug_reference_descriptor)debug_describe_resource)) {
> -      pipe_resource_reference(&old_tex->next, NULL);
> -      old_tex->screen->resource_destroy(old_tex->screen, old_tex);
> +      /* Avoid recursion, which would prevent inlining this function */
> +      do {
> +         struct pipe_resource *next = old_tex->next;
> +
> +         old_tex->screen->resource_destroy(old_tex->screen, old_tex);
> +         old_tex = next;
> +      } while (pipe_reference_described(&old_tex->reference, NULL,
> +                                        (debug_reference_descriptor)debug_describe_resource));

Reviewed-by: Marek Olšák <marek.olsak at amd.com>

Marek

>     }
>     *ptr = tex;
>  }
> --
> 2.11.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list