Mesa (main): nir/opt_load_store_vectorize: handle task payloads

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jun 20 18:37:07 UTC 2022


Module: Mesa
Branch: main
Commit: 97b53ad759b5f3b21edb4870779a7ca12e6bca52
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=97b53ad759b5f3b21edb4870779a7ca12e6bca52

Author: Marcin Ślusarz <marcin.slusarz at intel.com>
Date:   Mon Jun 13 14:43:45 2022 +0200

nir/opt_load_store_vectorize: handle task payloads

Reviewed-by: Timur Kristóf <timur.kristof at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17000>

---

 src/compiler/nir/nir_opt_load_store_vectorize.c | 26 ++++++++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/src/compiler/nir/nir_opt_load_store_vectorize.c b/src/compiler/nir/nir_opt_load_store_vectorize.c
index 81844b8031f..4b6dc71b224 100644
--- a/src/compiler/nir/nir_opt_load_store_vectorize.c
+++ b/src/compiler/nir/nir_opt_load_store_vectorize.c
@@ -82,6 +82,8 @@ case nir_intrinsic_##op: {\
    STORE(nir_var_mem_shared, shared, -1, 1, -1, 0)
    LOAD(nir_var_mem_global, global, -1, 0, -1)
    STORE(nir_var_mem_global, global, -1, 1, -1, 0)
+   LOAD(nir_var_mem_task_payload, task_payload, -1, 0, -1)
+   STORE(nir_var_mem_task_payload, task_payload, -1, 1, -1, 0)
    ATOMIC(nir_var_mem_ssbo, ssbo, add, 0, 1, -1, 2)
    ATOMIC(nir_var_mem_ssbo, ssbo, imin, 0, 1, -1, 2)
    ATOMIC(nir_var_mem_ssbo, ssbo, umin, 0, 1, -1, 2)
@@ -138,6 +140,20 @@ case nir_intrinsic_##op: {\
    ATOMIC(nir_var_mem_global, global, fmin, -1, 0, -1, 1)
    ATOMIC(nir_var_mem_global, global, fmax, -1, 0, -1, 1)
    ATOMIC(nir_var_mem_global, global, fcomp_swap, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, add, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, imin, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, umin, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, imax, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, umax, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, and, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, or, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, xor, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, exchange, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, comp_swap, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, fadd, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, fmin, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, fmax, -1, 0, -1, 1)
+   ATOMIC(nir_var_mem_task_payload, task_payload, fcomp_swap, -1, 0, -1, 1)
    default:
       break;
 #undef ATOMIC
@@ -611,6 +627,7 @@ create_entry(struct vectorize_ctx *ctx,
    restrict_modes |= nir_var_shader_temp | nir_var_function_temp;
    restrict_modes |= nir_var_uniform | nir_var_mem_push_const;
    restrict_modes |= nir_var_system_value | nir_var_mem_shared;
+   restrict_modes |= nir_var_mem_task_payload;
    if (get_variable_mode(entry) & restrict_modes)
       entry->access |= ACCESS_RESTRICT;
 
@@ -1355,13 +1372,15 @@ handle_barrier(struct vectorize_ctx *ctx, bool *progress, nir_function_impl *imp
       switch (intrin->intrinsic) {
       case nir_intrinsic_group_memory_barrier:
       case nir_intrinsic_memory_barrier:
-         modes = nir_var_mem_ssbo | nir_var_mem_shared | nir_var_mem_global;
+         modes = nir_var_mem_ssbo | nir_var_mem_shared | nir_var_mem_global |
+                 nir_var_mem_task_payload;
          break;
       /* prevent speculative loads/stores */
       case nir_intrinsic_discard_if:
       case nir_intrinsic_discard:
       case nir_intrinsic_terminate_if:
       case nir_intrinsic_terminate:
+      case nir_intrinsic_launch_mesh_workgroups:
          modes = nir_var_all;
          break;
       case nir_intrinsic_demote_if:
@@ -1373,7 +1392,7 @@ handle_barrier(struct vectorize_ctx *ctx, bool *progress, nir_function_impl *imp
          modes = nir_var_mem_ssbo | nir_var_mem_global;
          break;
       case nir_intrinsic_memory_barrier_shared:
-         modes = nir_var_mem_shared;
+         modes = nir_var_mem_shared | nir_var_mem_task_payload;
          break;
       case nir_intrinsic_scoped_barrier:
          if (nir_intrinsic_memory_scope(intrin) == NIR_SCOPE_NONE)
@@ -1381,7 +1400,8 @@ handle_barrier(struct vectorize_ctx *ctx, bool *progress, nir_function_impl *imp
 
          modes = nir_intrinsic_memory_modes(intrin) & (nir_var_mem_ssbo |
                                                        nir_var_mem_shared |
-                                                       nir_var_mem_global);
+                                                       nir_var_mem_global |
+                                                       nir_var_mem_task_payload);
          acquire = nir_intrinsic_memory_semantics(intrin) & NIR_MEMORY_ACQUIRE;
          release = nir_intrinsic_memory_semantics(intrin) & NIR_MEMORY_RELEASE;
          switch (nir_intrinsic_memory_scope(intrin)) {



More information about the mesa-commit mailing list