From aa6af19da5ab023a7541005b67a11dc6b57841dc Mon Sep 17 00:00:00 2001 From: Simon Perretta Date: Fri, 4 Apr 2025 14:43:38 +0100 Subject: [PATCH] pco: temporarily aggressively prevent isp feedback reordering by opt passes Signed-off-by: Simon Perretta Acked-by: Erik Faye-Lund Part-of: --- src/imagination/pco/pco_opt.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/imagination/pco/pco_opt.c b/src/imagination/pco/pco_opt.c index 5c4ba6ef50b..1899b44c081 100644 --- a/src/imagination/pco/pco_opt.c +++ b/src/imagination/pco/pco_opt.c @@ -258,6 +258,24 @@ static inline bool try_back_prop_instr(struct pco_use *uses, pco_instr *instr) pco_ref *pdest_from = &use->instr->dest[0]; + if (pco_ref_is_reg(*pdest_from) && + pco_ref_get_reg_class(*pdest_from) == PCO_REG_CLASS_PIXOUT) { + bool has_isp_fb = false; + + pco_foreach_instr_in_func_from_rev (rev_instr, use->instr) { + if (rev_instr == instr) + break; + + if (rev_instr->op == PCO_OP_ALPHAF || rev_instr->op == PCO_OP_DEPTHF) { + has_isp_fb = true; + break; + } + } + + if (has_isp_fb) + return false; + } + assert(pco_ref_get_bits(*pdest_from) == pco_ref_get_bits(*pdest_to)); assert(pco_ref_get_chans(*pdest_from) == pco_ref_get_chans(*pdest_to)); assert(!pco_ref_has_mods_set(*pdest_from) &&