From: Icecream95 Date: Mon, 28 Dec 2020 11:47:54 +0000 (+1300) Subject: panfrost: Add a sysval for local_work_dim X-Git-Tag: upstream/21.2.3~9343 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=24867386eef385a65d6452889db678f1ffa8879e;p=platform%2Fupstream%2Fmesa.git panfrost: Add a sysval for local_work_dim Fixes Piglit test get-work-dim.cl. Reviewed-by: Alyssa Rosenzweig Part-of: --- diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index bc84498..a0e2ab9 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -856,6 +856,15 @@ panfrost_upload_local_group_size_sysval(struct panfrost_batch *batch, } static void +panfrost_upload_work_dim_sysval(struct panfrost_batch *batch, + struct sysval_uniform *uniform) +{ + struct panfrost_context *ctx = batch->ctx; + + uniform->u[0] = ctx->compute_grid->work_dim; +} + +static void panfrost_upload_sysvals(struct panfrost_batch *batch, void *buf, struct panfrost_shader_state *ss, enum pipe_shader_type st) @@ -892,6 +901,10 @@ panfrost_upload_sysvals(struct panfrost_batch *batch, void *buf, panfrost_upload_local_group_size_sysval(batch, &uniforms[i]); break; + case PAN_SYSVAL_WORK_DIM: + panfrost_upload_work_dim_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 e0cae3b..a6a70cc 100644 --- a/src/panfrost/bifrost/bifrost_compile.c +++ b/src/panfrost/bifrost/bifrost_compile.c @@ -689,6 +689,7 @@ bi_emit_intrinsic(bi_builder *b, nir_intrinsic_instr *instr) break; case nir_intrinsic_load_ssbo_address: + case nir_intrinsic_load_work_dim: bi_load_sysval(b, &instr->instr, 1, 0); break; diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c index 46eadd5..64123ea 100644 --- a/src/panfrost/midgard/midgard_compile.c +++ b/src/panfrost/midgard/midgard_compile.c @@ -1798,6 +1798,7 @@ emit_intrinsic(compiler_context *ctx, nir_intrinsic_instr *instr) break; case nir_intrinsic_load_ssbo_address: + case nir_intrinsic_load_work_dim: emit_sysval_read(ctx, &instr->instr, 1, 0); break; diff --git a/src/panfrost/util/pan_ir.h b/src/panfrost/util/pan_ir.h index bc318ed..4c90587 100644 --- a/src/panfrost/util/pan_ir.h +++ b/src/panfrost/util/pan_ir.h @@ -51,6 +51,7 @@ enum { PAN_SYSVAL_NUM_WORK_GROUPS = 5, PAN_SYSVAL_SAMPLER = 7, PAN_SYSVAL_LOCAL_GROUP_SIZE = 8, + PAN_SYSVAL_WORK_DIM = 9, }; #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 2129e5d..f28d3a1 100644 --- a/src/panfrost/util/pan_sysval.c +++ b/src/panfrost/util/pan_sysval.c @@ -60,6 +60,8 @@ panfrost_nir_sysval_for_intrinsic(nir_intrinsic_instr *instr) return PAN_SYSVAL_NUM_WORK_GROUPS; case nir_intrinsic_load_local_group_size: return PAN_SYSVAL_LOCAL_GROUP_SIZE; + case nir_intrinsic_load_work_dim: + return PAN_SYSVAL_WORK_DIM; case nir_intrinsic_load_ssbo_address: case nir_intrinsic_get_ssbo_size: return panfrost_sysval_for_ssbo(instr);