diff options
-rw-r--r-- | src/gallium/drivers/softpipe/sp_fs_exec.c | 7 | ||||
-rw-r--r-- | src/gallium/drivers/softpipe/sp_state.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/softpipe/sp_state_shader.c | 10 |
3 files changed, 9 insertions, 11 deletions
diff --git a/src/gallium/drivers/softpipe/sp_fs_exec.c b/src/gallium/drivers/softpipe/sp_fs_exec.c index f5344924a1d..3793d9b3613 100644 --- a/src/gallium/drivers/softpipe/sp_fs_exec.c +++ b/src/gallium/drivers/softpipe/sp_fs_exec.c @@ -177,8 +177,13 @@ exec_run( const struct sp_fragment_shader_variant *var, static void -exec_delete( struct sp_fragment_shader_variant *var ) +exec_delete(struct sp_fragment_shader_variant *var, + struct tgsi_exec_machine *machine) { + if (machine->Tokens == var->tokens) { + tgsi_exec_machine_bind_shader(machine, NULL, 0, NULL); + } + FREE( (void *) var->tokens ); FREE(var); } diff --git a/src/gallium/drivers/softpipe/sp_state.h b/src/gallium/drivers/softpipe/sp_state.h index eb85b0689ea..fa8654fe976 100644 --- a/src/gallium/drivers/softpipe/sp_state.h +++ b/src/gallium/drivers/softpipe/sp_state.h @@ -88,7 +88,8 @@ struct sp_fragment_shader_variant struct quad_header *quad); /* Deletes this instance of the object */ - void (*delete)(struct sp_fragment_shader_variant *shader); + void (*delete)(struct sp_fragment_shader_variant *shader, + struct tgsi_exec_machine *machine); struct sp_fragment_shader_variant *next; }; diff --git a/src/gallium/drivers/softpipe/sp_state_shader.c b/src/gallium/drivers/softpipe/sp_state_shader.c index 1e64431344b..40d32a4dfb0 100644 --- a/src/gallium/drivers/softpipe/sp_state_shader.c +++ b/src/gallium/drivers/softpipe/sp_state_shader.c @@ -38,7 +38,6 @@ #include "draw/draw_vs.h" #include "draw/draw_gs.h" #include "tgsi/tgsi_dump.h" -#include "tgsi/tgsi_exec.h" #include "tgsi/tgsi_scan.h" #include "tgsi/tgsi_parse.h" @@ -182,13 +181,6 @@ softpipe_delete_fs_state(struct pipe_context *pipe, void *fs) assert(fs != softpipe->fs); - if (softpipe->fs_machine->Tokens == state->shader.tokens) { - /* unbind the shader from the tgsi executor if we're - * deleting it. - */ - tgsi_exec_machine_bind_shader(softpipe->fs_machine, NULL, 0, NULL); - } - /* delete variants */ for (var = state->variants; var; var = next_var) { next_var = var->next; @@ -200,7 +192,7 @@ softpipe_delete_fs_state(struct pipe_context *pipe, void *fs) draw_delete_fragment_shader(softpipe->draw, var->draw_shader); #endif - var->delete(var); + var->delete(var, softpipe->fs_machine); } draw_delete_fragment_shader(softpipe->draw, state->draw_shader); |