diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 29e97705159..9d9bb79125a 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -1111,9 +1111,9 @@ gfx_program_create(struct zink_context *ctx, } if (stages[MESA_SHADER_TESS_EVAL] && !stages[MESA_SHADER_TESS_CTRL]) { util_queue_fence_wait(&stages[MESA_SHADER_TESS_EVAL]->precompile.fence); - prog->shaders[MESA_SHADER_TESS_EVAL]->non_fs.generated_tcs = - prog->shaders[MESA_SHADER_TESS_CTRL] = - zink_shader_tcs_create(screen, vertices_per_patch); + if (!prog->shaders[MESA_SHADER_TESS_EVAL]->non_fs.generated_tcs) + prog->shaders[MESA_SHADER_TESS_EVAL]->non_fs.generated_tcs = zink_shader_tcs_create(screen, vertices_per_patch); + prog->shaders[MESA_SHADER_TESS_CTRL] = prog->shaders[MESA_SHADER_TESS_EVAL]->non_fs.generated_tcs; prog->stages_present |= BITFIELD_BIT(MESA_SHADER_TESS_CTRL); } prog->stages_remaining = prog->stages_present;