pan/bi: Flatten block lists
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Wed, 6 Jan 2021 19:23:23 +0000 (14:23 -0500)
committerMarge Bot <eric+marge@anholt.net>
Mon, 8 Feb 2021 14:07:29 +0000 (14:07 +0000)
From Midgard scheduler.

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8354>

src/panfrost/bifrost/bi_schedule.c

index cb7b5ea..e970720 100644 (file)
@@ -136,6 +136,25 @@ bi_lower_cubeface(bi_context *ctx,
         return cubeface1;
 }
 
+/* Flatten linked list to array for O(1) indexing */
+
+static bi_instr **
+bi_flatten_block(bi_block *block, unsigned *len)
+{
+        if (list_is_empty(&block->base.instructions))
+                return NULL;
+
+        *len = list_length(&block->base.instructions);
+        bi_instr **instructions = malloc(sizeof(bi_instr *) * (*len));
+
+        unsigned i = 0;
+
+        bi_foreach_instr_in_block(block, ins)
+                instructions[i++] = ins;
+
+        return instructions;
+}
+
 /* Determines messsage type by checking the table and a few special cases. Only
  * case missing is tilebuffer instructions that access depth/stencil, which
  * require a Z_STENCIL message (to implement