From 761a04a464e19bb2de6624a40a812f18f4864ac6 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 25 Feb 2021 23:22:53 -0500 Subject: [PATCH] zink: move streamout to draw_vbo this isn't part of descriptor updating Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/gallium/drivers/zink/zink_draw.c | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/zink/zink_draw.c b/src/gallium/drivers/zink/zink_draw.c index 935439e5ac4..d2bd0afd1b0 100644 --- a/src/gallium/drivers/zink/zink_draw.c +++ b/src/gallium/drivers/zink/zink_draw.c @@ -328,16 +328,6 @@ update_descriptors(struct zink_context *ctx, struct zink_screen *screen, bool is if (!shader) continue; enum pipe_shader_type stage = pipe_shader_type_from_mesa(shader->nir->info.stage); - if (ctx->num_so_targets && - (stage == PIPE_SHADER_GEOMETRY || - (stage == PIPE_SHADER_TESS_EVAL && !ctx->gfx_stages[PIPE_SHADER_GEOMETRY]) || - (stage == PIPE_SHADER_VERTEX && !ctx->gfx_stages[PIPE_SHADER_GEOMETRY] && !ctx->gfx_stages[PIPE_SHADER_TESS_EVAL]))) { - for (unsigned j = 0; j < ctx->num_so_targets; j++) { - struct zink_so_target *t = zink_so_target(ctx->so_targets[j]); - if (t) - t->stride = shader->streamout.so_info.stride[j] * sizeof(uint32_t); - } - } for (int j = 0; j < shader->num_bindings; j++) { int index = shader->bindings[j].index; @@ -733,6 +723,23 @@ zink_draw_vbo(struct pipe_context *pctx, barrier_vertex_buffers(ctx); barrier_draw_buffers(ctx, dinfo, dindirect, index_buffer); + for (int i = 0; i < ZINK_SHADER_COUNT; i++) { + struct zink_shader *shader = ctx->gfx_stages[i]; + if (!shader) + continue; + enum pipe_shader_type stage = pipe_shader_type_from_mesa(shader->nir->info.stage); + if (ctx->num_so_targets && + (stage == PIPE_SHADER_GEOMETRY || + (stage == PIPE_SHADER_TESS_EVAL && !ctx->gfx_stages[PIPE_SHADER_GEOMETRY]) || + (stage == PIPE_SHADER_VERTEX && !ctx->gfx_stages[PIPE_SHADER_GEOMETRY] && !ctx->gfx_stages[PIPE_SHADER_TESS_EVAL]))) { + for (unsigned j = 0; j < ctx->num_so_targets; j++) { + struct zink_so_target *t = zink_so_target(ctx->so_targets[j]); + if (t) + t->stride = shader->streamout.so_info.stride[j] * sizeof(uint32_t); + } + } + } + if (gfx_program->base.num_descriptors) update_descriptors(ctx, screen, false);