summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2020-01-18 09:34:39 -0500
committerMarge Bot <[email protected]>2020-01-18 14:40:05 +0000
commit4af8d5b0645bd96ed71691811e07c01b52af6094 (patch)
tree8d7c7e0f881d268c0c8c5139ef7cca83a669b2b0 /src
parent564a782ff78ebbb7c56a6a4ed84cac4818c91485 (diff)
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 <[email protected]> Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3463> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/merge_requests/3463>
Diffstat (limited to 'src')
-rw-r--r--src/panfrost/midgard/midgard_schedule.c4
1 files changed, 4 insertions, 0 deletions
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 */