summaryrefslogtreecommitdiffstats
path: root/src/gallium
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2018-01-29 12:32:24 -0500
committerRob Clark <[email protected]>2018-02-10 14:54:58 -0500
commit0a6ddf964fb90e4520501868ff00fed66e7814f3 (patch)
tree16b21b840cea98b7fedf1ce2c02d9cecd6213364 /src/gallium
parent55f14a1ac4553eb14656540404cf9a6a9abc34fc (diff)
freedreno/ir3: separate arrays from groups
Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r--src/gallium/drivers/freedreno/ir3/ir3_group.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_group.c b/src/gallium/drivers/freedreno/ir3/ir3_group.c
index 2719b6459e3..961fae5c1e9 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_group.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_group.c
@@ -137,6 +137,14 @@ restart:
if (instr->opc == OPC_META_PHI)
conflict = true;
+ /* Mixing array elements and higher register classes
+ * (ie. groups) doesn't really work out in RA. See:
+ *
+ * https://trello.com/c/DqeDkeVf/156-bug-with-stk-70frag
+ */
+ if (instr->regs[0]->flags & IR3_REG_ARRAY)
+ conflict = true;
+
/* we also can't have an instr twice in the group: */
for (j = i + 1; (j < n) && !conflict; j++)
if (in_neighbor_list(ops->get(arr, j), instr, i))