softpipe: more texture transfer fixes.
authorBrian Paul <brianp@vmware.com>
Wed, 18 Mar 2009 16:17:48 +0000 (10:17 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 18 Mar 2009 16:24:19 +0000 (10:24 -0600)
Need to null-out pointers after freeing transfer objects.
Fix mix-ups between tc->transfer and tc->tex_trans fields.

src/gallium/drivers/softpipe/sp_tile_cache.c

index 6db7930ec8334349535a690931a8e96af08d30d1..69292753f133ec2f3a1667e56401f52fa52ed482 100644 (file)
@@ -246,8 +246,8 @@ sp_tile_cache_set_texture(struct pipe_context *pipe,
 
    pipe_texture_reference(&tc->texture, texture);
 
-   if (tc->transfer) {
-      struct pipe_screen *screen = tc->transfer->texture->screen;
+   if (tc->tex_trans) {
+      struct pipe_screen *screen = tc->tex_trans->texture->screen;
 
       if (tc->tex_trans_map) {
          screen->transfer_unmap(screen, tc->tex_trans);
@@ -255,6 +255,7 @@ sp_tile_cache_set_texture(struct pipe_context *pipe,
       }
 
       screen->tex_transfer_destroy(tc->tex_trans);
+      tc->tex_trans = NULL;
    }
 
    /* mark as entries as invalid/empty */
@@ -556,11 +557,14 @@ sp_get_cached_tile_tex(struct softpipe_context *sp,
           tc->tex_z != z) {
          /* get new transfer (view into texture) */
 
-         if (tc->transfer) {
-            if (tc->tex_trans_map)
+         if (tc->tex_trans) {
+            if (tc->tex_trans_map) {
                tc->screen->transfer_unmap(tc->screen, tc->tex_trans);
+               tc->tex_trans_map = NULL;
+            }
 
             screen->tex_transfer_destroy(tc->tex_trans);
+            tc->tex_trans = NULL;
          }
 
          tc->tex_trans = screen->get_tex_transfer(screen, tc->texture, face, level, z,