Mesa (main): draw: handle tess eval shader when getting num outputs

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Apr 12 04:48:10 UTC 2022


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Apr 12 13:03:44 2022 +1000

draw: handle tess eval shader when getting num outputs

This tripped up some pointsize/prim id interactions with zink.

Acked-by: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15872>

---

 src/gallium/auxiliary/draw/draw_context.c | 2 ++
 src/gallium/auxiliary/draw/draw_private.h | 1 +
 src/gallium/auxiliary/draw/draw_tess.c    | 1 +
 3 files changed, 4 insertions(+)

diff --git a/src/gallium/auxiliary/draw/draw_context.c b/src/gallium/auxiliary/draw/draw_context.c
index 7a94168894b..39d3a61b9cf 100644
--- a/src/gallium/auxiliary/draw/draw_context.c
+++ b/src/gallium/auxiliary/draw/draw_context.c
@@ -945,6 +945,8 @@ draw_current_shader_outputs(const struct draw_context *draw)
 {
    if (draw->gs.geometry_shader)
       return draw->gs.num_gs_outputs;
+   if (draw->tes.tess_eval_shader)
+      return draw->tes.num_tes_outputs;
    return draw->vs.num_vs_outputs;
 }
 
diff --git a/src/gallium/auxiliary/draw/draw_private.h b/src/gallium/auxiliary/draw/draw_private.h
index ffdc8b987a0..bf3fc0810d1 100644
--- a/src/gallium/auxiliary/draw/draw_private.h
+++ b/src/gallium/auxiliary/draw/draw_private.h
@@ -359,6 +359,7 @@ struct draw_context
 
    struct {
       struct draw_tess_eval_shader *tess_eval_shader;
+      uint num_tes_outputs;  /**< convenience, from tess_eval_shader */
       uint position_output;
       uint clipvertex_output;
 
diff --git a/src/gallium/auxiliary/draw/draw_tess.c b/src/gallium/auxiliary/draw/draw_tess.c
index 7aa64f076e4..c1742eb0300 100644
--- a/src/gallium/auxiliary/draw/draw_tess.c
+++ b/src/gallium/auxiliary/draw/draw_tess.c
@@ -602,6 +602,7 @@ void draw_bind_tess_eval_shader(struct draw_context *draw,
    draw_do_flush(draw, DRAW_FLUSH_STATE_CHANGE);
    if (dtes) {
       draw->tes.tess_eval_shader = dtes;
+      draw->tes.num_tes_outputs = dtes->info.num_outputs;
       draw->tes.position_output = dtes->position_output;
       draw->tes.clipvertex_output = dtes->clipvertex_output;
    } else {



More information about the mesa-commit mailing list