nir/format_convert: add ssa version of uint packing

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10619>
This commit is contained in:
Mike Blumenkrantz 2021-05-01 11:45:28 -04:00 committed by Marge Bot
parent c948251d2b
commit b67a4ba4ad
1 changed files with 22 additions and 0 deletions

View File

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