From f5a35918db04dfe051e903a89323d9d8ba47c78a Mon Sep 17 00:00:00 2001 From: Icecream95 Date: Tue, 29 Dec 2020 00:44:56 +1300 Subject: [PATCH] panfrost: Add a sysval for local_group_size Reviewed-by: Alyssa Rosenzweig Part-of: --- src/gallium/drivers/panfrost/pan_cmdstream.c | 15 +++++++++++++++ src/panfrost/bifrost/bifrost_compile.c | 1 + src/panfrost/midgard/midgard_compile.c | 1 + src/panfrost/util/pan_ir.h | 1 + src/panfrost/util/pan_sysval.c | 2 ++ 5 files changed, 20 insertions(+) diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 1ca15a7d4f0..bc844980842 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -844,6 +844,17 @@ panfrost_upload_num_work_groups_sysval(struct panfrost_batch *batch, uniform->u[2] = ctx->compute_grid->grid[2]; } +static void +panfrost_upload_local_group_size_sysval(struct panfrost_batch *batch, + struct sysval_uniform *uniform) +{ + struct panfrost_context *ctx = batch->ctx; + + uniform->u[0] = ctx->compute_grid->block[0]; + uniform->u[1] = ctx->compute_grid->block[1]; + uniform->u[2] = ctx->compute_grid->block[2]; +} + static void panfrost_upload_sysvals(struct panfrost_batch *batch, void *buf, struct panfrost_shader_state *ss, @@ -877,6 +888,10 @@ panfrost_upload_sysvals(struct panfrost_batch *batch, void *buf, panfrost_upload_num_work_groups_sysval(batch, &uniforms[i]); break; + case PAN_SYSVAL_LOCAL_GROUP_SIZE: + panfrost_upload_local_group_size_sysval(batch, + &uniforms[i]); + break; case PAN_SYSVAL_SAMPLER: panfrost_upload_sampler_sysval(batch, st, PAN_SYSVAL_ID(sysval), diff --git a/src/panfrost/bifrost/bifrost_compile.c b/src/panfrost/bifrost/bifrost_compile.c index 35292e6ca78..e0cae3bb954 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -700,6 +700,7 @@ bi_emit_intrinsic(bi_builder *b, nir_intrinsic_instr *instr) case nir_intrinsic_load_viewport_offset: case nir_intrinsic_load_num_work_groups: case nir_intrinsic_load_sampler_lod_parameters_pan: + case nir_intrinsic_load_local_group_size: bi_load_sysval(b, &instr->instr, 3, 0); break; case nir_intrinsic_load_blend_const_color_r_float: diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index 253cdedc53f..46eadd53c86 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -1809,6 +1809,7 @@ emit_intrinsic(compiler_context *ctx, nir_intrinsic_instr *instr) case nir_intrinsic_load_viewport_offset: case nir_intrinsic_load_num_work_groups: case nir_intrinsic_load_sampler_lod_parameters_pan: + case nir_intrinsic_load_local_group_size: emit_sysval_read(ctx, &instr->instr, 3, 0); break; diff --git a/src/panfrost/util/pan_ir.h b/src/panfrost/util/pan_ir.h index 6de184eec1f..bc318edf582 100644 --- a/src/panfrost/util/pan_ir.h +++ b/src/panfrost/util/pan_ir.h @@ -50,6 +50,7 @@ enum { PAN_SYSVAL_SSBO = 4, PAN_SYSVAL_NUM_WORK_GROUPS = 5, PAN_SYSVAL_SAMPLER = 7, + PAN_SYSVAL_LOCAL_GROUP_SIZE = 8, }; #define PAN_TXS_SYSVAL_ID(texidx, dim, is_array) \ diff --git a/src/panfrost/util/pan_sysval.c b/src/panfrost/util/pan_sysval.c index cbc957e50a2..2129e5de565 100644 --- a/src/panfrost/util/pan_sysval.c +++ b/src/panfrost/util/pan_sysval.c @@ -58,6 +58,8 @@ panfrost_nir_sysval_for_intrinsic(nir_intrinsic_instr *instr) return PAN_SYSVAL_VIEWPORT_OFFSET; case nir_intrinsic_load_num_work_groups: return PAN_SYSVAL_NUM_WORK_GROUPS; + case nir_intrinsic_load_local_group_size: + return PAN_SYSVAL_LOCAL_GROUP_SIZE; case nir_intrinsic_load_ssbo_address: case nir_intrinsic_get_ssbo_size: return panfrost_sysval_for_ssbo(instr);