unref const buffers during context destroy
authorBrian <brian.paul@tungstengraphics.com>
Wed, 26 Dec 2007 14:16:12 +0000 (07:16 -0700)
committerBrian <brian.paul@tungstengraphics.com>
Tue, 1 Jan 2008 17:21:21 +0000 (10:21 -0700)
src/mesa/state_tracker/st_context.c

index 1d26da474e0ffcd695b7778797a6e2e23f818dda..668ac139f724363c8e908ca769ba05d91d02c848 100644 (file)
@@ -51,6 +51,7 @@
 #include "st_extensions.h"
 #include "st_program.h"
 #include "pipe/p_context.h"
+#include "pipe/p_winsys.h"
 #include "pipe/draw/draw_context.h"
 #include "pipe/cso_cache/cso_cache.h"
 
@@ -136,6 +137,9 @@ struct st_context *st_create_context(struct pipe_context *pipe,
 
 static void st_destroy_context_priv( struct st_context *st )
 {
+   struct pipe_winsys *ws = st->pipe->winsys;
+   uint i;
+
    draw_destroy(st->draw);
    st_destroy_atoms( st );
    st_destroy_draw( st );
@@ -146,6 +150,12 @@ static void st_destroy_context_priv( struct st_context *st )
 
    _mesa_delete_program_cache(st->ctx, st->pixel_xfer.cache);
 
+   for (i = 0; i < Elements(st->state.constants); i++) {
+      if (st->state.constants[i].buffer) {
+         ws->buffer_reference(ws, &st->state.constants[i].buffer, NULL);
+      }
+   }
+
    st->pipe->destroy( st->pipe );
    free( st );
 }