gallium: tweak the new shader delete funcs
authorBrian Paul <brian.paul@tungstengraphics.com>
Thu, 24 Apr 2008 17:56:06 +0000 (11:56 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Thu, 24 Apr 2008 18:15:05 +0000 (12:15 -0600)
src/gallium/auxiliary/cso_cache/cso_context.c

index cfb91d3..febecbb 100644 (file)
@@ -485,10 +485,12 @@ enum pipe_error cso_set_fragment_shader_handle(struct cso_context *ctx,
 
 void cso_delete_fragment_shader(struct cso_context *ctx, void *handle )
 {
-   if (handle == ctx->fragment_shader)
+   if (handle == ctx->fragment_shader) {
+      /* unbind before deleting */
       ctx->pipe->bind_fs_state(ctx->pipe, NULL);
+      ctx->fragment_shader = NULL;
+   }
    ctx->pipe->delete_fs_state(ctx->pipe, handle);
-   ctx->fragment_shader = NULL;
 }
 
 /* Not really working:
@@ -564,10 +566,12 @@ enum pipe_error cso_set_vertex_shader_handle(struct cso_context *ctx,
 
 void cso_delete_vertex_shader(struct cso_context *ctx, void *handle )
 {
-   if (handle == ctx->vertex_shader)
+   if (handle == ctx->vertex_shader) {
+      /* unbind before deleting */
       ctx->pipe->bind_vs_state(ctx->pipe, NULL);
+      ctx->vertex_shader = NULL;
+   }
    ctx->pipe->delete_vs_state(ctx->pipe, handle);
-   ctx->vertex_shader = NULL;
 }