[Mesa-dev] [PATCH] gallium/util: Allow pipe_resource_reference to be inlined again

Timothy Arceri tarceri at itsqueeze.com
Tue Jun 13 09:51:52 UTC 2017


On 13/06/17 19:22, Michel Dänzer 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 ~5%,
> and might also have impacted performance.
> 
> Fixes: ecd6fce2611e ("mesa/st: support lowering multi-planar YUV")
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
>   src/gallium/auxiliary/util/u_inlines.h | 13 ++++++++++++-
>   1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/src/gallium/auxiliary/util/u_inlines.h b/src/gallium/auxiliary/util/u_inlines.h
> index 6a3d5043cf..9a08779f2a 100644
> --- a/src/gallium/auxiliary/util/u_inlines.h
> +++ b/src/gallium/auxiliary/util/u_inlines.h
> @@ -131,13 +131,24 @@ pipe_surface_release(struct pipe_context *pipe, struct pipe_surface **ptr)
>   
>   
>   static inline void
> +pipe_resource_next_reference(struct pipe_resource **ptr, struct pipe_resource *tex)
> +{
> +   struct pipe_resource *old_tex = *ptr;
> +
> +   if (pipe_reference_described(&(*ptr)->reference, &tex->reference,
> +                                (debug_reference_descriptor)debug_describe_resource))

Why don't we need to call pipe_resource_next_reference(&old_tex->next, 
NULL) again here?

> +      old_tex->screen->resource_destroy(old_tex->screen, old_te > +   *ptr = tex;> +}
> +
> +static inline void
>   pipe_resource_reference(struct pipe_resource **ptr, struct pipe_resource *tex)
>   {
>      struct pipe_resource *old_tex = *ptr;
>   
>      if (pipe_reference_described(&(*ptr)->reference, &tex->reference,
>                                   (debug_reference_descriptor)debug_describe_resource)) {
> -      pipe_resource_reference(&old_tex->next, NULL);
> +      pipe_resource_next_reference(&old_tex->next, NULL);
>         old_tex->screen->resource_destroy(old_tex->screen, old_tex);
>      }
>      *ptr = tex;
> 


More information about the mesa-dev mailing list