Module: Mesa Branch: main Commit: 5f3cb4c4904ab175d86aa352a2404e7fda8b7937 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5f3cb4c4904ab175d86aa352a2404e7fda8b7937
Author: Mike Blumenkrantz <[email protected]> Date: Thu Jun 10 06:17:03 2021 -0400 zink: create compute programs on bind this simplifies the launch_grid codepath and gets shader binds out the shader update bitmask Reviewed-by: Hoe Hao Cheng <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12532> --- src/gallium/drivers/zink/zink_draw.cpp | 16 ---------------- src/gallium/drivers/zink/zink_program.c | 11 +++++++---- 2 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/gallium/drivers/zink/zink_draw.cpp b/src/gallium/drivers/zink/zink_draw.cpp index 196a7a8f7ee..0cf9167ab7a 100644 --- a/src/gallium/drivers/zink/zink_draw.cpp +++ b/src/gallium/drivers/zink/zink_draw.cpp @@ -174,20 +174,6 @@ zink_bind_vertex_buffers(struct zink_batch *batch, struct zink_context *ctx) ctx->vertex_buffers_dirty = false; } -static void -update_compute_program(struct zink_context *ctx) -{ - const unsigned bits = 1 << PIPE_SHADER_COMPUTE; - if (ctx->dirty_shader_stages & bits) { - struct zink_compute_program *comp = zink_create_compute_program(ctx, ctx->compute_stage); - _mesa_hash_table_insert(&ctx->compute_program_cache, comp->shader, comp); - ctx->compute_pipeline_state.dirty = true; - ctx->curr_compute = comp; - ctx->dirty_shader_stages &= bits; - zink_batch_reference_program(&ctx->batch, &ctx->curr_compute->base); - } -} - static void update_gfx_program(struct zink_context *ctx) { @@ -775,8 +761,6 @@ zink_launch_grid(struct pipe_context *pctx, const struct pipe_grid_info *info) update_barriers(ctx, true); - update_compute_program(ctx); - if (zink_program_has_descriptors(&ctx->curr_compute->base)) screen->descriptors_update(ctx, true); diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index b710f9c875b..7f3881c0a2c 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -540,8 +540,6 @@ zink_create_compute_program(struct zink_context *ctx, struct zink_shader *shader assert(comp->module->shader); _mesa_hash_table_insert(&comp->base.shader_cache[0], shader, comp->module); - ctx->dirty_shader_stages &= ~(1 << PIPE_SHADER_COMPUTE); - comp->pipelines = _mesa_hash_table_create(NULL, hash_compute_pipeline_state, equals_compute_pipeline_state); @@ -883,8 +881,13 @@ bind_stage(struct zink_context *ctx, enum pipe_shader_type stage, if (entry) { ctx->compute_pipeline_state.dirty = true; ctx->curr_compute = entry->data; - } else - ctx->dirty_shader_stages |= 1 << stage; + } else { + struct zink_compute_program *comp = zink_create_compute_program(ctx, shader); + _mesa_hash_table_insert(&ctx->compute_program_cache, comp->shader, comp); + ctx->compute_pipeline_state.dirty = true; + ctx->curr_compute = comp; + zink_batch_reference_program(&ctx->batch, &ctx->curr_compute->base); + } } else if (!shader) ctx->curr_compute = NULL; ctx->compute_stage = shader;
