svga: use pipe_sampler_view_release() in svga_cleanup_tss_binding()
authorBrian Paul <brianp@vmware.com>
Tue, 27 Nov 2012 22:17:27 +0000 (15:17 -0700)
committerBrian Paul <brianp@vmware.com>
Fri, 25 Jan 2013 22:57:35 +0000 (15:57 -0700)
Fixes a crash when the Redway3D Turbine demo exits.  We've made this
change in other places in the past.  The root issue is texture objects
are being shared by multiple contexts and sampler views get shared too.
Sampler views have a context pointer and if that context gets deleted
we may try to reference that context when finally deleting the sampler
view.

pipe_sampler_view_release() avoids this problem because it takes
an explicit context.

Reviewed-by: Zack Rusin <zackr@vmware.com>
src/gallium/drivers/svga/svga_state_tss.c

index 572eeabccb3362b0441d3248166411755822f623..861a0dff03b333427843ee5e2278fc67d134d4c6 100644 (file)
@@ -45,7 +45,7 @@ void svga_cleanup_tss_binding(struct svga_context *svga)
       struct svga_hw_view_state *view = &svga->state.hw_draw.views[i];
 
       svga_sampler_view_reference(&view->v, NULL);
-      pipe_sampler_view_reference( &svga->curr.sampler_views[i], NULL );
+      pipe_sampler_view_release(&svga->pipe, &svga->curr.sampler_views[i]);
       pipe_resource_reference( &view->texture, NULL );
 
       view->dirty = 1;