panfrost/midgard: Add a condense_writemask() helper

This way we can convert an 8-bit writemask (Midgard specific
representation) into the more common 1-bit/component representation.

8-bit mode is not supported yet, as we're not sure how the writemask is
encoded for this mode.

Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3536>
This commit is contained in:
Boris Brezillon 2020-01-24 09:22:48 +01:00 committed by Marge Bot
parent 2dc63d39d3
commit aa973fc14e

View file

@ -254,6 +254,28 @@ expand_writemask(unsigned mask, unsigned channels)
return o;
}
/* Tansform an expanded writemask (duplicated 8-bit format) into its condensed
* form (one bit per component) */
static inline unsigned
condense_writemask(unsigned expanded_mask,
unsigned bits_per_component)
{
if (bits_per_component == 8)
unreachable("XXX TODO: sort out how 8-bit constant encoding works");
unsigned slots_per_component = bits_per_component / 16;
unsigned max_comp = (16 * 8) / bits_per_component;
unsigned condensed_mask = 0;
for (unsigned i = 0; i < max_comp; i++) {
if (expanded_mask & (1 << (i * slots_per_component)))
condensed_mask |= (1 << i);
}
return condensed_mask;
}
/* Coerce structs to integer */
static inline unsigned