pan/midgard: Add mir_choose_bundle helper
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Sun, 22 Sep 2019 13:01:07 +0000 (09:01 -0400)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 30 Sep 2019 12:40:13 +0000 (08:40 -0400)
It's not always obvious what the optimal bundle type should be. Let's
break out the logic to decide.

Currently set for purely in-order operation.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/panfrost/midgard/midgard_schedule.c

index 8f324805cdb0af3edb1f9fce8d3c71acdc97675c..969460235d16cdb93b445cccce45758aef52cfd3 100644 (file)
@@ -861,6 +861,31 @@ mir_choose_instruction(
         return instructions[best_index];
 }
 
+/* Still, we don't choose instructions in a vacuum. We need a way to choose the
+ * best bundle type (ALU, load/store, texture). Nondestructive. */
+
+static unsigned
+mir_choose_bundle(
+                midgard_instruction **instructions,
+                BITSET_WORD *worklist, unsigned count)
+{
+        /* At the moment, our algorithm is very simple - use the bundle of the
+         * best instruction, regardless of what else could be scheduled
+         * alongside it. This is not optimal but it works okay for in-order */
+
+        struct midgard_predicate predicate = {
+                .tag = ~0,
+                .destructive = false
+        };
+
+        midgard_instruction *chosen = mir_choose_instruction(instructions, worklist, count, &predicate);
+
+        if (chosen)
+                return chosen->type;
+        else
+                return ~0;
+}
+
 /* Schedule a single block by iterating its instruction to create bundles.
  * While we go, tally about the bundle sizes to compute the block size. */