From: Alyssa Rosenzweig Date: Sat, 18 Jan 2020 14:34:39 +0000 (-0500) Subject: pan/midgard: Fix recursive csel scheduling X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4af8d5b0645bd96ed71691811e07c01b52af6094;p=mesa.git 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: --- 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 */