Module: Mesa
Branch: master
Commit: 9aa7a2d10ce6c191171a13a3e2f7dc185861f069
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9aa7a2d10ce6c191171a13a3e2f7dc185861f069

Author: Eric Anholt <[email protected]>
Date:   Wed Jan 20 12:01:50 2021 -0800

mesa/st: Assume that the default variant is always first in the list.

Since we always precompile now, we can remove some checks for presence of
the first variant or for it being the wrong key.

Acked-by: Alyssa Rosenzweig <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8601>

---

 src/mesa/state_tracker/st_atom_shader.c | 11 +++------
 src/mesa/state_tracker/st_program.c     | 43 ++++++++++++++-------------------
 2 files changed, 21 insertions(+), 33 deletions(-)

diff --git a/src/mesa/state_tracker/st_atom_shader.c 
b/src/mesa/state_tracker/st_atom_shader.c
index 4e7bbb7aa21..b95ac91eddb 100644
--- a/src/mesa/state_tracker/st_atom_shader.c
+++ b/src/mesa/state_tracker/st_atom_shader.c
@@ -90,10 +90,7 @@ st_update_fp( struct st_context *st )
 
    if (st->shader_has_one_variant[MESA_SHADER_FRAGMENT] &&
        !stfp->ati_fs && /* ATI_fragment_shader always has multiple variants */
-       !stfp->Base.ExternalSamplersUsed && /* external samplers need variants 
*/
-       stfp->variants &&
-       !st_fp_variant(stfp->variants)->key.drawpixels &&
-       !st_fp_variant(stfp->variants)->key.bitmap) {
+       !stfp->Base.ExternalSamplersUsed /* external samplers need variants */) 
{
       shader = stfp->variants->driver_shader;
    } else {
       struct st_fp_variant_key key;
@@ -175,9 +172,7 @@ st_update_vp( struct st_context *st )
    assert(stvp->Base.Target == GL_VERTEX_PROGRAM_ARB);
 
    if (st->shader_has_one_variant[MESA_SHADER_VERTEX] &&
-       stvp->variants &&
-       st_common_variant(stvp->variants)->key.passthrough_edgeflags == 
st->vertdata_edgeflags &&
-       !st_common_variant(stvp->variants)->key.is_draw_shader) {
+       !st->vertdata_edgeflags) {
       st->vp_variant = st_common_variant(stvp->variants);
    } else {
       struct st_common_variant_key key;
@@ -249,7 +244,7 @@ st_update_common_program(struct st_context *st, struct 
gl_program *prog,
    stp = st_program(prog);
    st_reference_prog(st, dst, stp);
 
-   if (st->shader_has_one_variant[prog->info.stage] && stp->variants)
+   if (st->shader_has_one_variant[prog->info.stage])
       return stp->variants->driver_shader;
 
    struct st_common_variant_key key;
diff --git a/src/mesa/state_tracker/st_program.c 
b/src/mesa/state_tracker/st_program.c
index ef6bfd61d89..68918ba833a 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -847,6 +847,21 @@ st_create_vp_variant(struct st_context *st,
    return vpv;
 }
 
+static void
+st_add_variant(struct st_variant **list, struct st_variant *v)
+{
+   struct st_variant *first = *list;
+
+   /* Make sure that the default variant stays the first in the list, and 
insert
+    * any later variants in as the second entry.
+    */
+   if (first) {
+      v->next = first->next;
+      first->next = v;
+   } else {
+      *list = v;
+   }
+}
 
 /**
  * Find/create a vertex program variant.
@@ -881,9 +896,7 @@ st_get_vp_variant(struct st_context *st,
             vpv->vert_attrib_mask |= 1u << attr;
          }
 
-         /* insert into list */
-         vpv->base.next = stp->variants;
-         stp->variants = &vpv->base;
+         st_add_variant(&stp->variants, &vpv->base);
       }
    }
 
@@ -1547,25 +1560,7 @@ st_get_fp_variant(struct st_context *st,
       if (fpv) {
          fpv->base.st = key->st;
 
-         if (key->bitmap || key->drawpixels) {
-            /* Regular variants should always come before the
-             * bitmap & drawpixels variants, (unless there
-             * are no regular variants) so that
-             * st_update_fp can take a fast path when
-             * shader_has_one_variant is set.
-             */
-            if (!stfp->variants) {
-               stfp->variants = &fpv->base;
-            } else {
-               /* insert into list after the first one */
-               fpv->base.next = stfp->variants->next;
-               stfp->variants->next = &fpv->base;
-            }
-         } else {
-            /* insert into list */
-            fpv->base.next = stfp->variants;
-            stfp->variants = &fpv->base;
-         }
+         st_add_variant(&stfp->variants, &fpv->base);
       }
    }
 
@@ -1829,9 +1824,7 @@ st_get_common_variant(struct st_context *st,
          st_common_variant(v)->key = *key;
          v->st = key->st;
 
-         /* insert into list */
-         v->next = prog->variants;
-         prog->variants = v;
+         st_add_variant(&prog->variants, v);
       }
    }
 

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to