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:
parent
c948251d2b
commit
b67a4ba4ad
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue