agx: Wait for outstanding stores before barriers
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Tue, 30 May 2023 02:51:29 +0000 (22:51 -0400)
committerMarge Bot <emma+marge@anholt.net>
Thu, 20 Jul 2023 15:33:28 +0000 (15:33 +0000)
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24258>

src/asahi/compiler/agx_insert_waits.c

index 3ac4ea7..355455e 100644 (file)
@@ -84,6 +84,16 @@ agx_insert_waits_local(agx_context *ctx, agx_block *block)
          }
       }
 
+      /* Check for barriers */
+      if (I->op == AGX_OPCODE_THREADGROUP_BARRIER ||
+          I->op == AGX_OPCODE_MEMORY_BARRIER) {
+
+         for (unsigned slot = 0; slot < ARRAY_SIZE(slots); ++slot) {
+            if (slots[slot].nr_pending)
+               wait_mask |= BITSET_BIT(slot);
+         }
+      }
+
       /* Try to assign a free slot */
       if (instr_is_async(I)) {
          for (unsigned slot = 0; slot < ARRAY_SIZE(slots); ++slot) {