From 5d313fb5ecefc5af111852fe6995b13c720d1dd6 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 15 Feb 2021 14:09:51 -0500 Subject: [PATCH] zink: unset generated TCS if its parent TESS is unset ensure this doesn't get pulled in during the next program update Fixes: 334759d8509 ("zink: implement passthrough tcs shader injection") Reviewed-by: Hoe Hao Cheng Part-of: --- src/gallium/drivers/zink/zink_program.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 9efcd010f86..a0f4a212e8c 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -698,7 +698,15 @@ 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) { + if (!cso) { + /* if unsetting a TESS that uses a generated TCS, ensure the TCS is unset */ + if (ctx->gfx_stages[PIPE_SHADER_TESS_EVAL]->generated) + ctx->gfx_stages[PIPE_SHADER_TESS_CTRL] = NULL; + } + } + bind_stage(ctx, PIPE_SHADER_TESS_EVAL, cso); } static void