[Mesa-dev] [PATCH] gallium: add PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY

Roland Scheidegger sroland at vmware.com
Thu Oct 13 00:09:30 UTC 2016


Am 12.10.2016 um 15:29 schrieb Marek Olšák:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> For performance tuning in drivers. It filters out window system
> framebuffers and OpenGL renderbuffers.
> 
> radeonsi will use this to guess whether a depth buffer will be read
> by a shader. There is no guarantee about what will actually happen.
> 
> This is a departure from PIPE_BIND flags which are defined to be strict
> but they are useless in practice.
> ---
>  src/gallium/include/pipe/p_defines.h | 1 +
>  src/mesa/state_tracker/st_texture.c  | 3 ++-
>  2 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
> index db96c51..037ed92 100644
> --- a/src/gallium/include/pipe/p_defines.h
> +++ b/src/gallium/include/pipe/p_defines.h
> @@ -443,20 +443,21 @@ enum pipe_flush_flags
>  #define PIPE_BIND_SCANOUT     (1 << 19) /*  */
>  #define PIPE_BIND_SHARED      (1 << 20) /* get_texture_handle ??? */
>  #define PIPE_BIND_LINEAR      (1 << 21)
>  
>  
>  /**
>   * Flags for the driver about resource behaviour:
>   */
>  #define PIPE_RESOURCE_FLAG_MAP_PERSISTENT (1 << 0)
>  #define PIPE_RESOURCE_FLAG_MAP_COHERENT   (1 << 1)
> +#define PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY (1 << 2)
>  #define PIPE_RESOURCE_FLAG_DRV_PRIV    (1 << 16) /* driver/winsys private */
>  #define PIPE_RESOURCE_FLAG_ST_PRIV     (1 << 24) /* state-tracker/winsys private */
>  
>  /**
>   * Hint about the expected lifecycle of a resource.
>   * Sorted according to GPU vs CPU access.
>   */
>  enum pipe_resource_usage {
>     PIPE_USAGE_DEFAULT,        /* fast GPU access */
>     PIPE_USAGE_IMMUTABLE,      /* fast GPU access, immutable */
> diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c
> index a2c36ac..7b72ffd 100644
> --- a/src/mesa/state_tracker/st_texture.c
> +++ b/src/mesa/state_tracker/st_texture.c
> @@ -84,21 +84,22 @@ st_texture_create(struct st_context *st,
>     memset(&pt, 0, sizeof(pt));
>     pt.target = target;
>     pt.format = format;
>     pt.last_level = last_level;
>     pt.width0 = width0;
>     pt.height0 = height0;
>     pt.depth0 = depth0;
>     pt.array_size = layers;
>     pt.usage = PIPE_USAGE_DEFAULT;
>     pt.bind = bind;
> -   pt.flags = 0;
> +   /* only set this for OpenGL textures, not renderbuffers */
> +   pt.flags = PIPE_RESOURCE_FLAG_TEXTURING_MORE_LIKELY;
>     pt.nr_samples = nr_samples;
>  
>     newtex = screen->resource_create(screen, &pt);
>  
>     assert(!newtex || pipe_is_referenced(&newtex->reference));
>  
>     return newtex;
>  }
>  
>  
> 

I guess, why not... I bet though there are apps which create everything
as a texture, regardless if they actually use it for sampling or not. So
you still need to try to not perform too bad if you got the hint wrong :-).
It's really GL which is useless there, not the PIPE_BIND flags ;-).

Acked-by: Roland Scheidegger <sroland at vmware.com>



More information about the mesa-dev mailing list