From e623007eb786ddc5fb06133f3d7c27f9a2eb18f9 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Wed, 11 Mar 2020 14:46:01 -0400 Subject: [PATCH] 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 Part-of: --- src/panfrost/bifrost/bir.c | 21 +++++++++++++++++++++ src/panfrost/bifrost/compiler.h | 1 + 2 files changed, 22 insertions(+) diff --git a/src/panfrost/bifrost/bir.c b/src/panfrost/bifrost/bir.c index 5fe0ae48409..48c06ab776e 100644 --- a/src/panfrost/bifrost/bir.c +++ b/src/panfrost/bifrost/bir.c @@ -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; +} diff --git a/src/panfrost/bifrost/compiler.h b/src/panfrost/bifrost/compiler.h index cd0d4f56536..467735bcf0a 100644 --- a/src/panfrost/bifrost/compiler.h +++ b/src/panfrost/bifrost/compiler.h @@ -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 */ -- 2.30.2