From 4af8d5b0645bd96ed71691811e07c01b52af6094 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Sat, 18 Jan 2020 09:34:39 -0500 Subject: [PATCH] pan/midgard: Fix recursive csel scheduling Corner case causing invalid scheduling on shaders with nested csels, i.e. GLSL code resembling: (foo ? bool1 : bool2) ? x : y By explicitly disallowing csels this is fixed. Fixes INSTR_INVALID_ENC on a glamor shader (noticeable with slowdown and visual corruption when scrolling "too far" on GTK apps). Signed-off-by: Alyssa Rosenzweig Tested-by: Marge Bot Part-of: --- src/panfrost/midgard/midgard_schedule.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/panfrost/midgard/midgard_schedule.c b/src/panfrost/midgard/midgard_schedule.c index 2106d0d1ace..f369b09e2ab 100644 --- a/src/panfrost/midgard/midgard_schedule.c +++ b/src/panfrost/midgard/midgard_schedule.c @@ -669,6 +669,10 @@ mir_comparison_mobile( if (instructions[i]->type != TAG_ALU_4) return ~0; + /* If it would itself require a condition, that's recursive */ + if (OP_IS_CSEL(instructions[i]->alu.op)) + return ~0; + /* We'll need to rewrite to .w but that doesn't work for vector * ops that don't replicate (ball/bany), so bail there */ -- 2.30.2