diff options
Diffstat (limited to 'src/mesa/state_tracker/st_program.c')
-rw-r--r-- | src/mesa/state_tracker/st_program.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 0e67fcca17b..65a56319964 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -1046,6 +1046,27 @@ destroy_program_variants(struct st_context *st, struct gl_program *program) } } break; + case MESA_GEOMETRY_PROGRAM: + { + struct st_geometry_program *stgp = + (struct st_geometry_program *) program; + struct st_gp_varient *gpv, **prev = &stgp->varients; + + for (gpv = stgp->varients; gpv; ) { + struct st_gp_varient *next = gpv->next; + if (gpv->key.st == st) { + /* unlink from list */ + *prev = next; + /* destroy this variant */ + delete_gp_varient(st, gpv); + } + else { + prev = &gpv; + } + gpv = next; + } + } + break; default: _mesa_problem(NULL, "Unexpected program target in " "destroy_program_variants_cb()"); |