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 <alyssa@rosenzweig.io>
Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24741>
This commit is contained in:
Ian Romanick 2023-07-21 16:01:31 -07:00 committed by Marge Bot
parent 25743209c4
commit 52ee4cf229

View file

@ -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: