From: Marek Olšák Date: Mon, 23 Jan 2012 12:26:04 +0000 (+0100) Subject: st/mesa: move fragment shader tgsi tokens into st_fp_variant X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=732f69c94e17aae8dae98cdc84fdb232fdda2484;p=mesa.git st/mesa: move fragment shader tgsi tokens into st_fp_variant The TGSI code may vary depending on the clamp_color bit. --- diff --git a/src/mesa/state_tracker/st_cb_program.c b/src/mesa/state_tracker/st_cb_program.c index 2abb4d8f082..617e7ce6429 100644 --- a/src/mesa/state_tracker/st_cb_program.c +++ b/src/mesa/state_tracker/st_cb_program.c @@ -160,11 +160,6 @@ st_delete_program(struct gl_context *ctx, struct gl_program *prog) if (stfp->glsl_to_tgsi) free_glsl_to_tgsi_visitor(stfp->glsl_to_tgsi); - - if (stfp->tgsi.tokens) { - st_free_tokens(stfp->tgsi.tokens); - stfp->tgsi.tokens = NULL; - } } break; default: @@ -205,11 +200,6 @@ st_program_string_notify( struct gl_context *ctx, st_release_fp_variants(st, stfp); - if (stfp->tgsi.tokens) { - st_free_tokens(stfp->tgsi.tokens); - stfp->tgsi.tokens = NULL; - } - if (st->fp == stfp) st->dirty.st |= ST_NEW_FRAGMENT_PROGRAM; } diff --git a/src/mesa/state_tracker/st_debug.c b/src/mesa/state_tracker/st_debug.c index e1e373d07d4..850fab92503 100644 --- a/src/mesa/state_tracker/st_debug.c +++ b/src/mesa/state_tracker/st_debug.c @@ -94,7 +94,7 @@ st_print_current(void) if (st->vp->Base.Base.Parameters) _mesa_print_parameter_list(st->vp->Base.Base.Parameters); - tgsi_dump( st->fp->tgsi.tokens, 0 ); + tgsi_dump( st->fp->variants[0].tgsi.tokens, 0 ); if (st->fp->Base.Base.Parameters) _mesa_print_parameter_list(st->fp->Base.Base.Parameters); } diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c index 3ae79ddbf4b..978de88f054 100644 --- a/src/mesa/state_tracker/st_program.c +++ b/src/mesa/state_tracker/st_program.c @@ -110,7 +110,8 @@ delete_fp_variant(struct st_context *st, struct st_fp_variant *fpv) cso_delete_fragment_shader(st->cso_context, fpv->driver_shader); if (fpv->parameters) _mesa_free_parameter_list(fpv->parameters); - + if (fpv->tgsi.tokens) + st_free_tokens(fpv->tgsi.tokens); FREE(fpv); } @@ -741,16 +742,16 @@ st_translate_fragment_program(struct st_context *st, fs_output_semantic_index, FALSE, key->clamp_color); - stfp->tgsi.tokens = ureg_get_tokens( ureg, NULL ); + variant->tgsi.tokens = ureg_get_tokens( ureg, NULL ); ureg_destroy( ureg ); } /* fill in variant */ - variant->driver_shader = pipe->create_fs_state(pipe, &stfp->tgsi); + variant->driver_shader = pipe->create_fs_state(pipe, &variant->tgsi); variant->key = *key; if (ST_DEBUG & DEBUG_TGSI) { - tgsi_dump( stfp->tgsi.tokens, 0/*TGSI_DUMP_VERBOSE*/ ); + tgsi_dump( variant->tgsi.tokens, 0/*TGSI_DUMP_VERBOSE*/ ); debug_printf("\n"); } diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h index 0ae3420ecb4..6c4b4f6c372 100644 --- a/src/mesa/state_tracker/st_program.h +++ b/src/mesa/state_tracker/st_program.h @@ -69,6 +69,8 @@ struct st_fp_variant /** Parameters which generated this version of fragment program */ struct st_fp_variant_key key; + struct pipe_shader_state tgsi; + /** Driver's compiled shader */ void *driver_shader; @@ -89,8 +91,6 @@ struct st_fragment_program struct gl_fragment_program Base; struct glsl_to_tgsi_visitor* glsl_to_tgsi; - struct pipe_shader_state tgsi; - struct st_fp_variant *variants; };