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

Author: Ian Romanick <ian.d.roman...@intel.com>
Date:   Fri Jul 21 16:01:31 2023 -0700

nir/builder: Teach nir_pack_bits and nir_unpack_bits about 32_4x8

Also teach it how to pack and unpack 32-bits to or from 32-bits.

Reviewed-by: Alyssa Rosenzweig <aly...@rosenzweig.io>
Reviewed-by: Caio Oliveira <caio.olive...@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24741>

---

 src/compiler/nir/nir_builder.h | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h
index 6fe3c84e0c7..c77c95130a2 100644
--- a/src/compiler/nir/nir_builder.h
+++ b/src/compiler/nir/nir_builder.h
@@ -1122,8 +1122,13 @@ nir_pack_bits(nir_builder *b, nir_def *src, unsigned 
dest_bit_size)
       break;
 
    case 32:
-      if (src->bit_size == 16)
-         return nir_pack_32_2x16(b, src);
+      switch (src->bit_size) {
+      case 32: return src;
+      case 16: return nir_pack_32_2x16(b, src);
+      case 8: return nir_pack_32_4x8(b, src);
+      default: break;
+      }
+
       break;
 
    default:
@@ -1144,7 +1149,7 @@ static inline nir_def *
 nir_unpack_bits(nir_builder *b, nir_def *src, unsigned dest_bit_size)
 {
    assert(src->num_components == 1);
-   assert(src->bit_size > dest_bit_size);
+   assert(src->bit_size >= dest_bit_size);
    const unsigned dest_num_components = src->bit_size / dest_bit_size;
    assert(dest_num_components <= NIR_MAX_VEC_COMPONENTS);
 
@@ -1161,8 +1166,13 @@ nir_unpack_bits(nir_builder *b, nir_def *src, unsigned 
dest_bit_size)
       break;
 
    case 32:
-      if (dest_bit_size == 16)
-         return nir_unpack_32_2x16(b, src);
+      switch (dest_bit_size) {
+      case 32: return src;
+      case 16: return nir_unpack_32_2x16(b, src);
+      case 8: return nir_unpack_32_4x8(b, src);
+      default: break;
+      }
+
       break;
 
    default:

Reply via email to