agx: Use common combine_all_barriers callback
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Tue, 23 May 2023 18:13:00 +0000 (14:13 -0400)
committerMarge Bot <emma+marge@anholt.net>
Wed, 24 May 2023 17:30:03 +0000 (17:30 +0000)
This contains a bugfix: execution scopes are now respected when combining
barriers. Otherwise control barriers can disappear during combining, which is
wrong.

Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23181>

src/asahi/compiler/agx_compile.c

index c044395..c4aa240 100644 (file)
@@ -1935,18 +1935,6 @@ agx_optimize_loop_nir(nir_shader *nir)
    } while (progress);
 }
 
-static bool
-combine_all_barriers(nir_intrinsic_instr *a, nir_intrinsic_instr *b, void *_)
-{
-   nir_intrinsic_set_memory_modes(
-      a, nir_intrinsic_memory_modes(a) | nir_intrinsic_memory_modes(b));
-   nir_intrinsic_set_memory_semantics(
-      a, nir_intrinsic_memory_semantics(a) | nir_intrinsic_memory_semantics(b));
-   nir_intrinsic_set_memory_scope(
-      a, MAX2(nir_intrinsic_memory_scope(a), nir_intrinsic_memory_scope(b)));
-   return true;
-}
-
 static void
 agx_optimize_nir(nir_shader *nir, unsigned *preamble_size)
 {
@@ -2010,7 +1998,7 @@ agx_optimize_nir(nir_shader *nir, unsigned *preamble_size)
     */
    NIR_PASS_V(nir, agx_nir_lower_algebraic_late);
    NIR_PASS_V(nir, nir_opt_constant_folding);
-   NIR_PASS_V(nir, nir_opt_combine_barriers, combine_all_barriers, NULL);
+   NIR_PASS_V(nir, nir_opt_combine_barriers, NULL, NULL);
 
    /* Must run after uses are fixed but before a last round of copyprop + DCE */
    if (nir->info.stage == MESA_SHADER_FRAGMENT)