zink: flag previous vertex stages as dirty when toggling a later stage
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Sun, 24 Jan 2021 15:46:53 +0000 (10:46 -0500)
committerMarge Bot <eric+marge@anholt.net>
Fri, 29 Jan 2021 15:38:06 +0000 (15:38 +0000)
this ensures that the correct variant is used for streamout and halfz

Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8682>

src/gallium/drivers/zink/zink_program.c

index 021866b..bf45e0a 100644 (file)
@@ -629,7 +629,11 @@ static void
 zink_bind_gs_state(struct pipe_context *pctx,
                    void *cso)
 {
-   bind_stage(zink_context(pctx), PIPE_SHADER_GEOMETRY, cso);
+   struct zink_context *ctx = zink_context(pctx);
+   if (!!ctx->gfx_stages[PIPE_SHADER_GEOMETRY] != !!cso)
+      ctx->dirty_shader_stages |= BITFIELD_BIT(PIPE_SHADER_VERTEX) |
+                                  BITFIELD_BIT(PIPE_SHADER_TESS_EVAL);
+   bind_stage(ctx, PIPE_SHADER_GEOMETRY, cso);
 }
 
 static void *
@@ -669,7 +673,10 @@ static void
 zink_bind_tes_state(struct pipe_context *pctx,
                    void *cso)
 {
-   bind_stage(zink_context(pctx), PIPE_SHADER_TESS_EVAL, cso);
+   struct zink_context *ctx = zink_context(pctx);
+   if (!!ctx->gfx_stages[PIPE_SHADER_TESS_EVAL] != !!cso)
+      ctx->dirty_shader_stages |= BITFIELD_BIT(PIPE_SHADER_VERTEX);
+   bind_stage(ctx, PIPE_SHADER_TESS_EVAL, cso);
 }
 
 static void