st/mesa: don't track shader variants in st_context
authorMarek Olšák <marek.olsak@amd.com>
Sat, 10 Jun 2017 17:58:06 +0000 (19:58 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 21 Jun 2017 23:51:02 +0000 (01:51 +0200)
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/mesa/state_tracker/st_atom_shader.c
src/mesa/state_tracker/st_context.h

index 875279da636e2bdd9e97ae9c1ea20beacd22bfb5..37aee8366de8b0d5eb5739abf997a4c60b036104 100644 (file)
@@ -128,12 +128,11 @@ st_update_fp( struct st_context *st )
 
    key.external = st_get_external_sampler_key(st, &stfp->Base);
 
-   st->fp_variant = st_get_fp_variant(st, stfp, &key);
+   void *shader = st_get_fp_variant(st, stfp, &key)->driver_shader;
 
    st_reference_fragprog(st, &st->fp, stfp);
 
-   cso_set_fragment_shader_handle(st->cso_context,
-                                  st->fp_variant->driver_shader);
+   cso_set_fragment_shader_handle(st->cso_context, shader);
 }
 
 
@@ -196,13 +195,12 @@ st_update_gp( struct st_context *st )
    stgp = st_common_program(st->ctx->GeometryProgram._Current);
    assert(stgp->Base.Target == GL_GEOMETRY_PROGRAM_NV);
 
-   st->gp_variant = st_get_basic_variant(st, PIPE_SHADER_GEOMETRY,
-                                         &stgp->tgsi, &stgp->variants);
+   void *shader = st_get_basic_variant(st, PIPE_SHADER_GEOMETRY, &stgp->tgsi,
+                                       &stgp->variants)->driver_shader;
 
    st_reference_prog(st, &st->gp, stgp);
 
-   cso_set_geometry_shader_handle(st->cso_context,
-                                  st->gp_variant->driver_shader);
+   cso_set_geometry_shader_handle(st->cso_context, shader);
 }
 
 
@@ -220,13 +218,12 @@ st_update_tcp( struct st_context *st )
    sttcp = st_common_program(st->ctx->TessCtrlProgram._Current);
    assert(sttcp->Base.Target == GL_TESS_CONTROL_PROGRAM_NV);
 
-   st->tcp_variant = st_get_basic_variant(st, PIPE_SHADER_TESS_CTRL,
-                                          &sttcp->tgsi, &sttcp->variants);
+   void *shader = st_get_basic_variant(st, PIPE_SHADER_TESS_CTRL, &sttcp->tgsi,
+                                       &sttcp->variants)->driver_shader;
 
    st_reference_prog(st, &st->tcp, sttcp);
 
-   cso_set_tessctrl_shader_handle(st->cso_context,
-                                  st->tcp_variant->driver_shader);
+   cso_set_tessctrl_shader_handle(st->cso_context, shader);
 }
 
 
@@ -244,13 +241,12 @@ st_update_tep( struct st_context *st )
    sttep = st_common_program(st->ctx->TessEvalProgram._Current);
    assert(sttep->Base.Target == GL_TESS_EVALUATION_PROGRAM_NV);
 
-   st->tep_variant = st_get_basic_variant(st, PIPE_SHADER_TESS_EVAL,
-                                          &sttep->tgsi, &sttep->variants);
+   void *shader = st_get_basic_variant(st, PIPE_SHADER_TESS_EVAL, &sttep->tgsi,
+                                       &sttep->variants)->driver_shader;
 
    st_reference_prog(st, &st->tep, sttep);
 
-   cso_set_tesseval_shader_handle(st->cso_context,
-                                  st->tep_variant->driver_shader);
+   cso_set_tesseval_shader_handle(st->cso_context, shader);
 }
 
 
@@ -268,10 +264,10 @@ st_update_cp( struct st_context *st )
    stcp = st_compute_program(st->ctx->ComputeProgram._Current);
    assert(stcp->Base.Target == GL_COMPUTE_PROGRAM_NV);
 
-   st->cp_variant = st_get_cp_variant(st, &stcp->tgsi, &stcp->variants);
+   void *shader = st_get_cp_variant(st, &stcp->tgsi,
+                                    &stcp->variants)->driver_shader;
 
    st_reference_compprog(st, &st->cp, stcp);
 
-   cso_set_compute_shader_handle(st->cso_context,
-                                 st->cp_variant->driver_shader);
+   cso_set_compute_shader_handle(st->cso_context, shader);
 }
index f640e23dcc1db56eef82d45376014dea6541479f..6497587b1f4f98c66fee6a060da4106b01f8638c 100644 (file)
@@ -185,11 +185,6 @@ struct st_context
    struct st_compute_program *cp;   /**< Currently bound compute program */
 
    struct st_vp_variant *vp_variant;
-   struct st_fp_variant *fp_variant;
-   struct st_basic_variant *gp_variant;
-   struct st_basic_variant *tcp_variant;
-   struct st_basic_variant *tep_variant;
-   struct st_basic_variant *cp_variant;
 
    struct {
       struct pipe_resource *pixelmap_texture;