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

Author: Timothy Arceri <tarc...@itsqueeze.com>
Date:   Tue Oct 24 12:34:43 2023 +1100

nir: move build_write_masked_stores() to nir builder

We will reused this in the following patch.

Acked-by: Marek Olšák <marek.ol...@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25860>

---

 src/compiler/nir/nir_builder.h                  | 34 +++++++++++++++++++++
 src/compiler/nir/nir_lower_array_deref_of_vec.c | 40 ++-----------------------
 2 files changed, 37 insertions(+), 37 deletions(-)

diff --git a/src/compiler/nir/nir_builder.h b/src/compiler/nir/nir_builder.h
index c77c95130a2..0084d7e0d9d 100644
--- a/src/compiler/nir/nir_builder.h
+++ b/src/compiler/nir/nir_builder.h
@@ -1640,6 +1640,40 @@ nir_store_deref(nir_builder *build, nir_deref_instr 
*deref,
                                (enum gl_access_qualifier)0);
 }
 
+static inline void
+nir_build_write_masked_store(nir_builder *b, nir_deref_instr *vec_deref,
+                             nir_def *value, unsigned component)
+{
+   assert(value->num_components == 1);
+   unsigned num_components = glsl_get_components(vec_deref->type);
+   assert(num_components > 1 && num_components <= NIR_MAX_VEC_COMPONENTS);
+
+   nir_def *u = nir_undef(b, 1, value->bit_size);
+   nir_def *comps[NIR_MAX_VEC_COMPONENTS];
+   for (unsigned i = 0; i < num_components; i++)
+      comps[i] = (i == component) ? value : u;
+
+   nir_def *vec = nir_vec(b, comps, num_components);
+   nir_store_deref(b, vec_deref, vec, (1u << component));
+}
+
+static inline void
+nir_build_write_masked_stores(nir_builder *b, nir_deref_instr *vec_deref,
+                              nir_def *value, nir_def *index,
+                              unsigned start, unsigned end)
+{
+   if (start == end - 1) {
+      nir_build_write_masked_store(b, vec_deref, value, start);
+   } else {
+      unsigned mid = start + (end - start) / 2;
+      nir_push_if(b, nir_ilt_imm(b, index, mid));
+      nir_build_write_masked_stores(b, vec_deref, value, index, start, mid);
+      nir_push_else(b, NULL);
+      nir_build_write_masked_stores(b, vec_deref, value, index, mid, end);
+      nir_pop_if(b, NULL);
+   }
+}
+
 static inline void
 nir_copy_deref_with_access(nir_builder *build, nir_deref_instr *dest,
                            nir_deref_instr *src,
diff --git a/src/compiler/nir/nir_lower_array_deref_of_vec.c 
b/src/compiler/nir/nir_lower_array_deref_of_vec.c
index c5da05798c9..2a8549eb8c2 100644
--- a/src/compiler/nir/nir_lower_array_deref_of_vec.c
+++ b/src/compiler/nir/nir_lower_array_deref_of_vec.c
@@ -24,40 +24,6 @@
 #include "nir.h"
 #include "nir_builder.h"
 
-static void
-build_write_masked_store(nir_builder *b, nir_deref_instr *vec_deref,
-                         nir_def *value, unsigned component)
-{
-   assert(value->num_components == 1);
-   unsigned num_components = glsl_get_components(vec_deref->type);
-   assert(num_components > 1 && num_components <= NIR_MAX_VEC_COMPONENTS);
-
-   nir_def *u = nir_undef(b, 1, value->bit_size);
-   nir_def *comps[NIR_MAX_VEC_COMPONENTS];
-   for (unsigned i = 0; i < num_components; i++)
-      comps[i] = (i == component) ? value : u;
-
-   nir_def *vec = nir_vec(b, comps, num_components);
-   nir_store_deref(b, vec_deref, vec, (1u << component));
-}
-
-static void
-build_write_masked_stores(nir_builder *b, nir_deref_instr *vec_deref,
-                          nir_def *value, nir_def *index,
-                          unsigned start, unsigned end)
-{
-   if (start == end - 1) {
-      build_write_masked_store(b, vec_deref, value, start);
-   } else {
-      unsigned mid = start + (end - start) / 2;
-      nir_push_if(b, nir_ilt_imm(b, index, mid));
-      build_write_masked_stores(b, vec_deref, value, index, start, mid);
-      nir_push_else(b, NULL);
-      build_write_masked_stores(b, vec_deref, value, index, mid, end);
-      nir_pop_if(b, NULL);
-   }
-}
-
 static bool
 nir_lower_array_deref_of_vec_impl(nir_function_impl *impl,
                                   nir_variable_mode modes,
@@ -117,14 +83,14 @@ nir_lower_array_deref_of_vec_impl(nir_function_impl *impl,
                 * replace it with anything.
                 */
                if (index < num_components)
-                  build_write_masked_store(&b, vec_deref, value, index);
+                  nir_build_write_masked_store(&b, vec_deref, value, index);
             } else {
                if (!(options & nir_lower_indirect_array_deref_of_vec_store))
                   continue;
 
                nir_def *index = deref->arr.index.ssa;
-               build_write_masked_stores(&b, vec_deref, value, index,
-                                         0, num_components);
+               nir_build_write_masked_stores(&b, vec_deref, value, index,
+                                             0, num_components);
             }
             nir_instr_remove(&intrin->instr);
 

Reply via email to