pan/bi: Add bi_bytemask_of_read_components helpers
Same purpose as the Midgard version, but the implementation is *dramatically* simpler thanks to our more regular IR. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4150>
This commit is contained in:
committed by
Marge Bot
parent
e94754a7c4
commit
e623007eb7
@@ -74,3 +74,24 @@ bi_has_arg(bi_instruction *ins, unsigned arg)
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
uint16_t
|
||||
bi_bytemask_of_read_components(bi_instruction *ins, unsigned node)
|
||||
{
|
||||
uint16_t mask = 0x0;
|
||||
|
||||
bi_foreach_src(ins, s) {
|
||||
if (ins->src[s] != node) continue;
|
||||
nir_alu_type T = ins->src_types[s];
|
||||
unsigned size = nir_alu_type_get_type_size(T);
|
||||
unsigned bytes = (MAX2(size, 8) / 8);
|
||||
unsigned cmask = (1 << bytes) - 1;
|
||||
|
||||
for (unsigned i = 0; i < ARRAY_SIZE(ins->swizzle[s]); ++i) {
|
||||
unsigned c = ins->swizzle[s][i];
|
||||
mask |= (cmask << (c * bytes));
|
||||
}
|
||||
}
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
@@ -475,6 +475,7 @@ bool bi_has_outmod(bi_instruction *ins);
|
||||
bool bi_has_source_mods(bi_instruction *ins);
|
||||
bool bi_is_src_swizzled(bi_instruction *ins, unsigned s);
|
||||
bool bi_has_arg(bi_instruction *ins, unsigned arg);
|
||||
uint16_t bi_bytemask_of_read_components(bi_instruction *ins, unsigned node);
|
||||
|
||||
/* BIR passes */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user