freedreno/ir3: separate arrays from groups
authorRob Clark <robdclark@gmail.com>
Mon, 29 Jan 2018 17:32:24 +0000 (12:32 -0500)
committerRob Clark <robdclark@gmail.com>
Sat, 10 Feb 2018 19:54:58 +0000 (14:54 -0500)
Signed-off-by: Rob Clark <robdclark@gmail.com>
src/gallium/drivers/freedreno/ir3/ir3_group.c

index 2719b6459e31978ebfdc32a9be062b9cda38ab0b..961fae5c1e96c645a30d5a16c8ba8086d0277225 100644 (file)
@@ -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))