Mesa (main): zink: use last_vertex_stage pointer to optimize streamout emission during draw

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jul 7 03:16:05 UTC 2021


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Tue May 11 12:43:38 2021 -0400

zink: use last_vertex_stage pointer to optimize streamout emission during draw

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11746>

---

 src/gallium/drivers/zink/zink_draw.c | 18 ++++--------------
 1 file changed, 4 insertions(+), 14 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c
index 8339922212c..8b2f1b30634 100644
--- a/src/gallium/drivers/zink/zink_draw.c
+++ b/src/gallium/drivers/zink/zink_draw.c
@@ -638,20 +638,10 @@ zink_draw_vbo(struct pipe_context *pctx,
    zink_query_update_gs_states(ctx);
 
    if (have_streamout) {
-      for (int i = 0; i < ZINK_SHADER_COUNT; i++) {
-         struct zink_shader *shader = ctx->gfx_stages[i];
-         if (!shader)
-            continue;
-         enum pipe_shader_type stage = pipe_shader_type_from_mesa(shader->nir->info.stage);
-         if ((stage == PIPE_SHADER_GEOMETRY ||
-             (stage == PIPE_SHADER_TESS_EVAL && !ctx->gfx_stages[PIPE_SHADER_GEOMETRY]) ||
-             (stage == PIPE_SHADER_VERTEX && !ctx->gfx_stages[PIPE_SHADER_GEOMETRY] && !ctx->gfx_stages[PIPE_SHADER_TESS_EVAL]))) {
-            for (unsigned j = 0; j < ctx->num_so_targets; j++) {
-               struct zink_so_target *t = zink_so_target(ctx->so_targets[j]);
-               if (t)
-                  t->stride = shader->streamout.so_info.stride[j] * sizeof(uint32_t);
-            }
-         }
+      for (unsigned j = 0; j < ctx->num_so_targets; j++) {
+         struct zink_so_target *t = zink_so_target(ctx->so_targets[j]);
+         if (t)
+            t->stride = ctx->last_vertex_stage->streamout.so_info.stride[j] * sizeof(uint32_t);
       }
 
       for (unsigned i = 0; i < ctx->num_so_targets; i++) {



More information about the mesa-commit mailing list