panfrost: Add a sysval for local_work_dim
authorIcecream95 <ixn@disroot.org>
Mon, 28 Dec 2020 11:47:54 +0000 (00:47 +1300)
committerMarge Bot <eric+marge@anholt.net>
Mon, 18 Jan 2021 20:49:45 +0000 (20:49 +0000)
Fixes Piglit test get-work-dim.cl.

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8358>

src/gallium/drivers/panfrost/pan_cmdstream.c
src/panfrost/bifrost/bifrost_compile.c
src/panfrost/midgard/midgard_compile.c
src/panfrost/util/pan_ir.h
src/panfrost/util/pan_sysval.c

index bc84498..a0e2ab9 100644 (file)
@@ -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),
index e0cae3b..a6a70cc 100644 (file)
@@ -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;
 
index 46eadd5..64123ea 100644 (file)
@@ -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;
 
index bc318ed..4c90587 100644 (file)
@@ -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)          \
index 2129e5d..f28d3a1 100644 (file)
@@ -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);