svga: Remove stale references to delete shader results.
authorJosé Fonseca <jfonseca@vmware.com>
Tue, 5 Jan 2010 17:56:26 +0000 (17:56 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Tue, 5 Jan 2010 17:56:26 +0000 (17:56 +0000)
To ensure that a new result that happens to have the same address
of the old one will be detected as a change.

src/gallium/drivers/svga/svga_pipe_fs.c
src/gallium/drivers/svga/svga_pipe_vs.c

index a461a86dd316ea0915569fa4598caa527b0560ee..5f1213e46a3e530c592fd541c62f12c657297dbc 100644 (file)
@@ -111,6 +111,13 @@ void svga_delete_fs_state(struct pipe_context *pipe, void *shader)
       util_bitmask_clear( svga->fs_bm, result->id );
 
       svga_destroy_shader_result( result );
+
+      /*
+       * Remove stale references to this result to ensure a new result on the
+       * same address will be detected as a change.
+       */
+      if(result == svga->state.hw_draw.fs)
+         svga->state.hw_draw.fs = NULL;
    }
 
    FREE((void *)fs->base.tokens);
index 02709e12bd764dc0a2f2540e9551fc9a633ccc21..fd9864c51a62d3aa28126139ecdbfd1101b8bb50 100644 (file)
@@ -176,6 +176,13 @@ static void svga_delete_vs_state(struct pipe_context *pipe, void *shader)
       util_bitmask_clear( svga->vs_bm, result->id );
 
       svga_destroy_shader_result( result );
+
+      /*
+       * Remove stale references to this result to ensure a new result on the
+       * same address will be detected as a change.
+       */
+      if(result == svga->state.hw_draw.vs)
+         svga->state.hw_draw.vs = NULL;
    }
 
    FREE((void *)vs->base.tokens);