Mesa (main): mesa/st: lower psiz for shader precompile

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Nov 4 02:23:15 UTC 2021


Module: Mesa
Branch: main
Commit: 4af7842ede49ff2915893d3aed2f60d8bc949924
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4af7842ede49ff2915893d3aed2f60d8bc949924

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Wed Jun 23 12:44:12 2021 -0400

mesa/st: lower psiz for shader precompile

if the driver is requesting that psiz always be set, precompile the first
variant with psiz since that's most likely to be what's eventually used

Acked-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13588>

---

 src/mesa/state_tracker/st_program.c | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index ad8055e3c55..4dc5c42123f 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -1955,6 +1955,35 @@ st_destroy_program_variants(struct st_context *st)
                   destroy_shader_program_variants_cb, st);
 }
 
+static bool
+is_last_vertex_stage(struct gl_context *ctx, struct gl_program *prog)
+{
+   struct gl_program *last = NULL;
+   /* fixedfunc */
+   if (prog->Id == 0)
+      return true;
+
+   /* shader info accurately set */
+   if (prog->info.next_stage == MESA_SHADER_FRAGMENT)
+      return true;
+   if (prog->info.next_stage != MESA_SHADER_VERTEX)
+      return false;
+
+   /* check bound programs */
+   if (ctx->GeometryProgram._Current)
+      last = ctx->GeometryProgram._Current;
+   else if (ctx->TessEvalProgram._Current)
+      last = ctx->TessEvalProgram._Current;
+   else
+      last = ctx->VertexProgram._Current;
+   if (last)
+      return prog == last;
+
+   /* assume this will be the last vertex stage;
+    * at worst, another variant without psiz is created later
+    */
+   return true;
+}
 
 /**
  * Compile one shader variant.
@@ -1983,6 +2012,12 @@ st_precompile_shader_variant(struct st_context *st,
          key.clamp_color = true;
       }
 
+      if (prog->Target == GL_VERTEX_PROGRAM_ARB ||
+          prog->Target == GL_TESS_EVALUATION_PROGRAM_NV ||
+          prog->Target == GL_GEOMETRY_PROGRAM_NV) {
+         if (st->ctx->API == API_OPENGLES2 || !st->ctx->VertexProgram.PointSizeEnabled)
+            key.export_point_size = st->lower_point_size && is_last_vertex_stage(st->ctx, prog);
+      }
       key.st = st->has_shareable_shaders ? NULL : st;
       st_get_common_variant(st, p, &key);
       break;



More information about the mesa-commit mailing list