[Mesa-dev] [PATCH 1/2] st/mesa: fix sampler view handling with shared textures v4

Brian Paul brianp at vmware.com
Tue Mar 25 12:38:54 PDT 2014


On 03/25/2014 11:28 AM, Christian König wrote:
> From: Christian König <christian.koenig at amd.com>
>
> Release the references to the sampler views before
> destroying the pipe context.
>
> v2: remove TODO and unrelated change
> v3: move to st_texture.[ch], rename callback, add comment
> v4: fix rebase mess up and add further cleanups
>
> 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_context.c | 17 +++++++++++++++++
>   src/mesa/state_tracker/st_texture.c |  7 +++++++
>   src/mesa/state_tracker/st_texture.h |  4 ++++
>   3 files changed, 28 insertions(+)
>
> diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c
> index 0ffc762..807a86f 100644
> --- a/src/mesa/state_tracker/st_context.c
> +++ b/src/mesa/state_tracker/st_context.c
> @@ -33,6 +33,7 @@
>   #include "main/shaderobj.h"
>   #include "main/version.h"
>   #include "main/vtxfmt.h"
> +#include "main/hash.h"
>   #include "program/prog_cache.h"
>   #include "vbo/vbo.h"
>   #include "glapi/glapi.h"
> @@ -66,6 +67,7 @@
>   #include "st_gen_mipmap.h"
>   #include "st_program.h"
>   #include "st_vdpau.h"
> +#include "st_texture.h"
>   #include "pipe/p_context.h"
>   #include "util/u_inlines.h"
>   #include "util/u_upload_mgr.h"
> @@ -280,6 +282,19 @@ static void st_destroy_context_priv( struct st_context *st )
>      free( st );
>   }
>
> +
> +/**
> + * Callback to release the sampler view attached to a texture object.
> + * Called by _mesa_HashWalk().
> + */
> +static void
> +destroy_tex_sampler_cb(GLuint id, void *data, void *userData)
> +{
> +   struct gl_texture_object *texObj = (struct gl_texture_object *) data;
> +   struct st_context *st = (struct st_context *) userData;
> +
> +   st_texture_release_sampler_view(st, st_texture_object(texObj));
> +}
>
>   void st_destroy_context( struct st_context *st )
>   {
> @@ -288,6 +303,8 @@ void st_destroy_context( struct st_context *st )
>      struct gl_context *ctx = st->ctx;
>      GLuint i;
>
> +   _mesa_HashWalk(ctx->Shared->TexObjects, destroy_tex_sampler_cb, st);
> +
>      /* need to unbind and destroy CSO objects before anything else */
>      cso_release_all(st->cso_context);
>
> diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c
> index b5ccc76..a3b3453 100644
> --- a/src/mesa/state_tracker/st_texture.c
> +++ b/src/mesa/state_tracker/st_texture.c
> @@ -412,3 +412,10 @@ st_create_color_map_texture(struct gl_context *ctx)
>      return pt;
>   }
>
> +void
> +st_texture_release_sampler_view(struct st_context *st,
> +                                struct st_texture_object *stObj)
> +{
> +   if (stObj->sampler_view && stObj->sampler_view->context == st->pipe)
> +      pipe_sampler_view_reference(&stObj->sampler_view, NULL);
> +}
> diff --git a/src/mesa/state_tracker/st_texture.h b/src/mesa/state_tracker/st_texture.h
> index bce2a09..b4a27a0 100644
> --- a/src/mesa/state_tracker/st_texture.h
> +++ b/src/mesa/state_tracker/st_texture.h
> @@ -227,4 +227,8 @@ st_texture_image_copy(struct pipe_context *pipe,
>   extern struct pipe_resource *
>   st_create_color_map_texture(struct gl_context *ctx);
>
> +extern void
> +st_texture_release_sampler_view(struct st_context *st,
> +                                struct st_texture_object *stObj);
> +
>   #endif
>


Reviewed-by: Brian Paul <brianp at vmware.com>




More information about the mesa-dev mailing list