[Mesa-dev] [PATCH 1/3] st/mesa: recreate sampler view on context change v2

Brian Paul brianp at vmware.com
Mon Mar 24 08:36:23 PDT 2014


On 03/24/2014 08:06 AM, Christian König wrote:
> From: Christian König <christian.koenig at amd.com>
>
> With shared glx contexts it is possible that a texture is create and used
> in one context and then used in another one resulting in incorrect
> sampler view usage.
>
> v2: avoid template copy
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> Cc: "10.0 10.1" <mesa-stable at lists.freedesktop.org>
> ---
>   src/mesa/state_tracker/st_atom_texture.c | 7 +++++++
>   1 file changed, 7 insertions(+)
>
> diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c
> index 3557a3f..dc7f635 100644
> --- a/src/mesa/state_tracker/st_atom_texture.c
> +++ b/src/mesa/state_tracker/st_atom_texture.c
> @@ -198,6 +198,13 @@ st_get_texture_sampler_view_from_stobj(struct st_texture_object *stObj,
>      if (!stObj->sampler_view) {
>         stObj->sampler_view =
>            st_create_texture_sampler_view_from_stobj(pipe, stObj, samp, format);
> +
> +   } else if (stObj->sampler_view->context != pipe) {
> +      /* Recreate view in correct context, use existing view as template */
> +      struct pipe_sampler_view *sv =
> +         pipe->create_sampler_view(pipe, stObj->pt, stObj->sampler_view);
> +      pipe_sampler_view_reference(&stObj->sampler_view, NULL);
> +      stObj->sampler_view = sv;
>      }
>
>      return stObj->sampler_view;
>

My concern with this is if there really are multiple contexts using one 
texture, we're going to continuously destroy and create sampler views 
when we validate state.  Right?

Ultimately, the right solution might be to have a list of sampler views 
per texture, one sampler view per context.  Since there usually aren't 
too many contexts sharing textures, a linked list would probably be OK.

-Brian





More information about the mesa-dev mailing list