Mesa (main): nir/format_convert: add ssa version of uint packing

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jul 7 14:26:37 UTC 2021


Module: Mesa
Branch: main
Commit: b67a4ba4ad7ed70bbd9ff91cbf7a57e9bb7b77c8
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b67a4ba4ad7ed70bbd9ff91cbf7a57e9bb7b77c8

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Sat May  1 11:45:28 2021 -0400

nir/format_convert: add ssa version of uint packing

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10619>

---

 src/compiler/nir/nir_format_convert.h | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/compiler/nir/nir_format_convert.h b/src/compiler/nir/nir_format_convert.h
index 265a86d6f6b..11765ae07d1 100644
--- a/src/compiler/nir/nir_format_convert.h
+++ b/src/compiler/nir/nir_format_convert.h
@@ -36,6 +36,15 @@ nir_shift_imm(nir_builder *b, nir_ssa_def *value, int left_shift)
       return value;
 }
 
+static inline nir_ssa_def *
+nir_shift(nir_builder *b, nir_ssa_def *value, nir_ssa_def *left_shift)
+{
+   return nir_bcsel(b,
+                    nir_ige(b, left_shift, nir_imm_int(b, 0)),
+                    nir_ishl(b, value, left_shift),
+                    nir_ushr(b, value, nir_ineg(b, left_shift)));
+}
+
 static inline nir_ssa_def *
 nir_mask_shift(struct nir_builder *b, nir_ssa_def *src,
                uint32_t mask, int left_shift)
@@ -144,6 +153,19 @@ nir_format_pack_uint_unmasked(nir_builder *b, nir_ssa_def *color,
    return packed;
 }
 
+static inline nir_ssa_def *
+nir_format_pack_uint_unmasked_ssa(nir_builder *b, nir_ssa_def *color,
+                                  nir_ssa_def *bits)
+{
+   nir_ssa_def *packed = nir_imm_int(b, 0);
+   nir_ssa_def *offset = nir_imm_int(b, 0);
+   for (unsigned i = 0; i < bits->num_components; i++) {
+      packed = nir_ior(b, packed, nir_ishl(b, nir_channel(b, color, i), offset));
+      offset = nir_iadd(b, offset, nir_channel(b, bits, i));
+   }
+   return packed;
+}
+
 static inline nir_ssa_def *
 nir_format_pack_uint(nir_builder *b, nir_ssa_def *color,
                      const unsigned *bits, unsigned num_components)



More information about the mesa-commit mailing list