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