On 03/24/2014 08:06 AM, Christian König wrote:
From: Christian König <christian.koe...@amd.com>

Release the references to the sampler views before
destroying the pipe context.

v2: remove TODO and unrelated change

Signed-off-by: Christian König <christian.koe...@amd.com>
Cc: "10.0 10.1" <mesa-sta...@lists.freedesktop.org>
---
  src/mesa/state_tracker/st_atom.h         |  2 ++
  src/mesa/state_tracker/st_atom_texture.c |  8 ++++++++
  src/mesa/state_tracker/st_context.c      | 10 ++++++++++
  3 files changed, 20 insertions(+)

diff --git a/src/mesa/state_tracker/st_atom.h b/src/mesa/state_tracker/st_atom.h
index 60d89d7..394c6ad 100644
--- a/src/mesa/state_tracker/st_atom.h
+++ b/src/mesa/state_tracker/st_atom.h
@@ -45,6 +45,8 @@ void st_destroy_atoms( struct st_context *st );

  void st_validate_state( struct st_context *st );

+void st_atom_texture_cleanup( struct st_context *st,
+                              struct gl_texture_object *texObj );

Let's call this st_release_texture_sample_view() and put it in st_texture.h. The function doesn't really pertain to state atoms and seems to go along with the other texture / sampler view functions in st_texture.h.



  extern const struct st_tracked_state st_update_array;
  extern const struct st_tracked_state st_update_framebuffer;
diff --git a/src/mesa/state_tracker/st_atom_texture.c 
b/src/mesa/state_tracker/st_atom_texture.c
index dc7f635..2826d12 100644
--- a/src/mesa/state_tracker/st_atom_texture.c
+++ b/src/mesa/state_tracker/st_atom_texture.c
@@ -373,6 +373,14 @@ update_geometry_textures(struct st_context *st)
     }
  }

+void st_atom_texture_cleanup(struct st_context *st,
+                             struct gl_texture_object *texObj)
+{
+   struct st_texture_object *stObj = st_texture_object(texObj);
+
+   if (stObj->sampler_view && stObj->sampler_view->context == st->pipe)
+      pipe_sampler_view_reference(&stObj->sampler_view, NULL);
+}

Move to st_texture.c



  const struct st_tracked_state st_update_fragment_texture = {
     "st_update_texture",                                     /* name */
diff --git a/src/mesa/state_tracker/st_context.c 
b/src/mesa/state_tracker/st_context.c
index 0ffc762..816a095 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"
@@ -280,6 +281,13 @@ static void st_destroy_context_priv( struct st_context *st 
)
     free( st );
  }

+static void st_destroy_tex_sampler( GLuint id, void *data, void *userData )

I know we're not consistent about this in the state tracker, but we can drop the st_ prefix on static functions. And I'd probably put a "_cb" suffix (for callback) on the function as we do in shared.c. And put a comment on it:

/**
 * 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_atom_texture_cleanup(st, texObj);
+}

  void st_destroy_context( struct st_context *st )
  {
@@ -288,6 +296,8 @@ void st_destroy_context( struct st_context *st )
     struct gl_context *ctx = st->ctx;
     GLuint i;

+   _mesa_HashWalk(ctx->Shared->TexObjects, st_destroy_tex_sampler, st);
+
     /* need to unbind and destroy CSO objects before anything else */
     cso_release_all(st->cso_context);



Looks good otherwise.

-Brian


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to