st/mesa: move fragment shader tgsi tokens into st_fp_variant
authorMarek Olšák <maraeo@gmail.com>
Mon, 23 Jan 2012 12:26:04 +0000 (13:26 +0100)
committerMarek Olšák <maraeo@gmail.com>
Wed, 25 Jan 2012 11:35:18 +0000 (12:35 +0100)
The TGSI code may vary depending on the clamp_color bit.

src/mesa/state_tracker/st_cb_program.c
src/mesa/state_tracker/st_debug.c
src/mesa/state_tracker/st_program.c
src/mesa/state_tracker/st_program.h

index 2abb4d8f0829035702bf962256fe745301e37d17..617e7ce6429dae44df40df74f6402383868f2d69 100644 (file)
@@ -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;
    }
index e1e373d07d42c851ce15f2cbfd4661591b33efdf..850fab9250340fd63410486d07534dab06f1f7f8 100644 (file)
@@ -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);
 }
index 3ae79ddbf4bd19c576a8626ad646af2d3addc3b0..978de88f05481b03f81e75ef0a3ae647f50e985e 100644 (file)
@@ -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");
    }
 
index 0ae3420ecb4008e90062465c3a2fd7bcfb862b45..6c4b4f6c37229fe60f69f6d700fafad52de551e3 100644 (file)
@@ -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;
 };