From d59e4b8ce6497097954028df2469fc7b404a106b Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 14 Oct 2020 10:40:14 -0400 Subject: [PATCH] zink: round out handling for streamout buffer stride setting during draw this adds cases for tess and geometry shaders in the xfb path for grabbing stride off the shader Reviewed-by: Erik Faye-Lund Part-of: --- src/gallium/drivers/zink/zink_draw.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c index 858718eb13b..0dd24d02a3a 100644 --- a/src/gallium/drivers/zink/zink_draw.c +++ b/src/gallium/drivers/zink/zink_draw.c @@ -299,7 +299,10 @@ zink_draw_vbo(struct pipe_context *pctx, if (!shader) continue; - if (i == MESA_SHADER_VERTEX && ctx->num_so_targets) { + if (ctx->num_so_targets && + (i == PIPE_SHADER_GEOMETRY || + (i == PIPE_SHADER_TESS_EVAL && !ctx->gfx_stages[PIPE_SHADER_GEOMETRY]) || + (i == PIPE_SHADER_VERTEX && !ctx->gfx_stages[PIPE_SHADER_GEOMETRY] && !ctx->gfx_stages[PIPE_SHADER_TESS_EVAL]))) { for (unsigned i = 0; i < ctx->num_so_targets; i++) { struct zink_so_target *t = zink_so_target(ctx->so_targets[i]); t->stride = shader->streamout.so_info.stride[i] * sizeof(uint32_t);