From 3a674fc6eb8e8ba3e7621ab2484c87b55f96813b Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 12 Aug 2022 10:23:09 -0400 Subject: [PATCH] zink: add use_local_size flag to compute programs Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_program.c | 12 ++++++------ src/gallium/drivers/zink/zink_types.h | 2 ++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 89137569256..2849bfc5b2b 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -698,13 +698,9 @@ hash_compute_pipeline_state(const void *key) void zink_program_update_compute_pipeline_state(struct zink_context *ctx, struct zink_compute_program *comp, const uint block[3]) { - struct zink_shader *zs = comp->shader; - bool use_local_size = !(zs->nir->info.workgroup_size[0] || - zs->nir->info.workgroup_size[1] || - zs->nir->info.workgroup_size[2]); - if (ctx->compute_pipeline_state.use_local_size != use_local_size) + if (ctx->compute_pipeline_state.use_local_size != comp->use_local_size) ctx->compute_pipeline_state.dirty = true; - ctx->compute_pipeline_state.use_local_size = use_local_size; + ctx->compute_pipeline_state.use_local_size = comp->use_local_size; if (ctx->compute_pipeline_state.use_local_size) { for (int i = 0; i < ARRAY_SIZE(ctx->compute_pipeline_state.local_size); i++) { @@ -743,6 +739,10 @@ create_compute_program(struct zink_context *ctx, nir_shader *nir) util_dynarray_init(&comp->shader_cache[0], NULL); util_dynarray_init(&comp->shader_cache[1], NULL); + comp->use_local_size = !(nir->info.workgroup_size[0] || + nir->info.workgroup_size[1] || + nir->info.workgroup_size[2]); + comp->pipelines = _mesa_hash_table_create(NULL, NULL, equals_compute_pipeline_state); diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h index 4d5d3852fe3..1d53b5351e9 100644 --- a/src/gallium/drivers/zink/zink_types.h +++ b/src/gallium/drivers/zink/zink_types.h @@ -803,6 +803,8 @@ struct zink_gfx_program { struct zink_compute_program { struct zink_program base; + bool use_local_size; + struct zink_shader_module *curr; struct zink_shader_module *module; //base