diff --git a/.pick_status.json b/.pick_status.json index 0acceafe5e1..245e740be90 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3253,7 +3253,7 @@ "description": "zink: fix streamout for tess stage", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "2891e0b74e6c6dc4a93bc73536949dbb93c2bb50" }, diff --git a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c index 5ee0de23cbb..506b8512aa4 100644 --- a/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c +++ b/src/gallium/drivers/zink/nir_to_spirv/nir_to_spirv.c @@ -2931,8 +2931,8 @@ nir_to_spirv(struct nir_shader *s, const struct zink_so_info *so_info, emit_cf_list(&ctx, &entry->body); - /* vertex shader emits copied xfb outputs at the end of the shader */ - if (so_info && ctx.stage == MESA_SHADER_VERTEX) + /* vertex/tess shader emits copied xfb outputs at the end of the shader */ + if (so_info && (ctx.stage == MESA_SHADER_VERTEX || ctx.stage == MESA_SHADER_TESS_EVAL)) emit_so_outputs(&ctx, so_info); spirv_builder_return(&ctx.builder); // doesn't belong here, but whatevz diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 3ab700d71fd..9efcd010f86 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -691,7 +691,7 @@ zink_create_tes_state(struct pipe_context *pctx, else nir = (struct nir_shader *)shader->ir.nir; - return zink_shader_create(zink_screen(pctx->screen), nir, NULL); + return zink_shader_create(zink_screen(pctx->screen), nir, &shader->stream_output); } static void