Mesa (master): pan/mdg: implement nir_intrinsic_image_size

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jan 27 12:52:33 UTC 2021


Module: Mesa
Branch: master
Commit: 7584a25919a0ac015a6e1e8dc78c5c4326fa485a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=7584a25919a0ac015a6e1e8dc78c5c4326fa485a

Author: Italo Nicola <italonicola at collabora.com>
Date:   Wed Dec 16 03:52:15 2020 +0000

pan/mdg: implement nir_intrinsic_image_size

To implement it in midgard, we just need to read the image_size sysval.

Signed-off-by: Italo Nicola <italonicola at collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8066>

---

 src/panfrost/midgard/midgard_compile.c |  6 ++++++
 src/panfrost/util/pan_sysval.c         | 15 +++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/src/panfrost/midgard/midgard_compile.c b/src/panfrost/midgard/midgard_compile.c
index dc6ab9aaf6c..63e60d42bcb 100644
--- a/src/panfrost/midgard/midgard_compile.c
+++ b/src/panfrost/midgard/midgard_compile.c
@@ -1646,6 +1646,12 @@ emit_intrinsic(compiler_context *ctx, nir_intrinsic_instr *instr)
                 emit_image_op(ctx, instr, false);
                 break;
 
+        case nir_intrinsic_image_size: {
+                unsigned nr_comp = nir_intrinsic_dest_components(instr);
+                emit_sysval_read(ctx, &instr->instr, nr_comp, 0);
+                break;
+        }
+
         case nir_intrinsic_load_uniform:
         case nir_intrinsic_load_ubo:
         case nir_intrinsic_load_global:
diff --git a/src/panfrost/util/pan_sysval.c b/src/panfrost/util/pan_sysval.c
index 80e4469f754..a80c5ab3f8a 100644
--- a/src/panfrost/util/pan_sysval.c
+++ b/src/panfrost/util/pan_sysval.c
@@ -48,6 +48,19 @@ panfrost_sysval_for_sampler(nir_intrinsic_instr *instr)
         return PAN_SYSVAL(SAMPLER, uindex);
 }
 
+static int
+panfrost_sysval_for_image_size(nir_intrinsic_instr *instr)
+{
+        nir_src index = instr->src[0];
+        assert(nir_src_is_const(index));
+
+        bool is_array = nir_intrinsic_image_array(instr);
+        uint32_t uindex = nir_src_as_uint(index);
+        unsigned dim = nir_intrinsic_dest_components(instr) - is_array;
+
+        return PAN_SYSVAL(IMAGE_SIZE, PAN_TXS_SYSVAL_ID(uindex, dim, is_array));
+}
+
 static unsigned
 panfrost_nir_sysval_for_intrinsic(nir_intrinsic_instr *instr)
 {
@@ -67,6 +80,8 @@ panfrost_nir_sysval_for_intrinsic(nir_intrinsic_instr *instr)
                 return panfrost_sysval_for_ssbo(instr);
         case nir_intrinsic_load_sampler_lod_parameters_pan:
                 return panfrost_sysval_for_sampler(instr);
+        case nir_intrinsic_image_size:
+                return panfrost_sysval_for_image_size(instr);
         default:
                 return ~0;
         }



More information about the mesa-commit mailing list