diff options
author | Alyssa Rosenzweig <[email protected]> | 2020-01-18 09:34:39 -0500 |
---|---|---|
committer | Marge Bot <[email protected]> | 2020-01-18 14:40:05 +0000 |
commit | 4af8d5b0645bd96ed71691811e07c01b52af6094 (patch) | |
tree | 8d7c7e0f881d268c0c8c5139ef7cca83a669b2b0 /src | |
parent | 564a782ff78ebbb7c56a6a4ed84cac4818c91485 (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.c | 4 |
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 */ |