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: