diff options
author | Marek Olšák <[email protected]> | 2016-01-30 16:34:20 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2016-02-09 21:19:50 +0100 |
commit | 7046c588eb76a188b9b6b35d44bc9f25d6d2acd4 (patch) | |
tree | 87a75a2434986f65c2dcc7f959ec3af7c4a3b1c0 /src | |
parent | 75be3ee9f9f7078a415498547637365035650cf9 (diff) |
st/mesa: unify destroy_program_variants cases for TCS, TES, GS
Reviewed-by: Edward O'Callaghan <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/state_tracker/st_program.c | 66 |
1 files changed, 16 insertions, 50 deletions
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index d8b7f376a02..624586e6d67 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -1431,65 +1431,31 @@ destroy_program_variants(struct st_context *st, struct gl_program *target) } break; case GL_GEOMETRY_PROGRAM_NV: - { - struct st_geometry_program *stgp = - (struct st_geometry_program *) target; - struct st_basic_variant *gpv, **prevPtr = &stgp->variants; - - for (gpv = stgp->variants; gpv; ) { - struct st_basic_variant *next = gpv->next; - if (gpv->key.st == st) { - /* unlink from list */ - *prevPtr = next; - /* destroy this variant */ - delete_basic_variant(st, gpv, stgp->Base.Base.Target); - } - else { - prevPtr = &gpv->next; - } - gpv = next; - } - } - break; case GL_TESS_CONTROL_PROGRAM_NV: - { - struct st_tessctrl_program *sttcp = - (struct st_tessctrl_program *) target; - struct st_basic_variant *tcpv, **prevPtr = &sttcp->variants; - - for (tcpv = sttcp->variants; tcpv; ) { - struct st_basic_variant *next = tcpv->next; - if (tcpv->key.st == st) { - /* unlink from list */ - *prevPtr = next; - /* destroy this variant */ - delete_basic_variant(st, tcpv, sttcp->Base.Base.Target); - } - else { - prevPtr = &tcpv->next; - } - tcpv = next; - } - } - break; case GL_TESS_EVALUATION_PROGRAM_NV: { - struct st_tesseval_program *sttep = - (struct st_tesseval_program *) target; - struct st_basic_variant *tepv, **prevPtr = &sttep->variants; - - for (tepv = sttep->variants; tepv; ) { - struct st_basic_variant *next = tepv->next; - if (tepv->key.st == st) { + struct st_geometry_program *gp = (struct st_geometry_program*)target; + struct st_tessctrl_program *tcp = (struct st_tessctrl_program*)target; + struct st_tesseval_program *tep = (struct st_tesseval_program*)target; + struct st_basic_variant **variants = + target->Target == GL_GEOMETRY_PROGRAM_NV ? &gp->variants : + target->Target == GL_TESS_CONTROL_PROGRAM_NV ? &tcp->variants : + target->Target == GL_TESS_EVALUATION_PROGRAM_NV ? &tep->variants : + NULL; + struct st_basic_variant *v, **prevPtr = variants; + + for (v = *variants; v; ) { + struct st_basic_variant *next = v->next; + if (v->key.st == st) { /* unlink from list */ *prevPtr = next; /* destroy this variant */ - delete_basic_variant(st, tepv, sttep->Base.Base.Target); + delete_basic_variant(st, v, target->Target); } else { - prevPtr = &tepv->next; + prevPtr = &v->next; } - tepv = next; + v = next; } } break; |