Mesa (master): nir: Add a more generic helper for gathering constant initializers

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Nov 18 04:25:33 UTC 2020


Module: Mesa
Branch: master
Commit: 2e8e275075fa6301094e73c1ceda68585f3ae64a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2e8e275075fa6301094e73c1ceda68585f3ae64a

Author: Jason Ekstrand <jason at jlekstrand.net>
Date:   Tue Nov  3 11:33:19 2020 -0600

nir: Add a more generic helper for gathering constant initializers

The one we had was tied to nir_var_mem_constant but we also need it for
global and, one day, I can imagine us needing it for shared (though
there's currently no spec that requires it).

Reviewed-by: Jesse Natalie <jenatali at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7565>

---

 src/compiler/nir/nir.h          |  4 ++++
 src/compiler/nir/nir_lower_io.c | 31 ++++++++++++++++++++++---------
 2 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index 4224835279b..24253b55645 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -4424,6 +4424,10 @@ bool
 nir_lower_vars_to_explicit_types(nir_shader *shader,
                                  nir_variable_mode modes,
                                  glsl_type_size_align_func type_info);
+void
+nir_gather_explicit_io_initializers(nir_shader *shader,
+                                    void *dst, size_t dst_size,
+                                    nir_variable_mode mode);
 
 bool nir_lower_mem_constant_vars(nir_shader *shader,
                                  glsl_type_size_align_func type_info);
diff --git a/src/compiler/nir/nir_lower_io.c b/src/compiler/nir/nir_lower_io.c
index b02c4b1be84..948b657d2c7 100644
--- a/src/compiler/nir/nir_lower_io.c
+++ b/src/compiler/nir/nir_lower_io.c
@@ -2376,6 +2376,25 @@ write_constant(void *dst, size_t dst_size,
    }
 }
 
+void
+nir_gather_explicit_io_initializers(nir_shader *shader,
+                                    void *dst, size_t dst_size,
+                                    nir_variable_mode mode)
+{
+   /* It doesn't really make sense to gather initializers for more than one
+    * mode at a time.  If this ever becomes well-defined, we can drop the
+    * assert then.
+    */
+   assert(util_bitcount(mode) == 1);
+
+   nir_foreach_variable_with_modes(var, shader, mode) {
+      assert(var->data.driver_location < dst_size);
+      write_constant((char *)dst + var->data.driver_location,
+                     dst_size - var->data.driver_location,
+                     var->constant_initializer, var->type);
+   }
+}
+
 bool
 nir_lower_mem_constant_vars(nir_shader *shader,
                             glsl_type_size_align_func type_info)
@@ -2389,15 +2408,9 @@ nir_lower_mem_constant_vars(nir_shader *shader,
       shader->constant_data = rerzalloc_size(shader, shader->constant_data,
                                              old_constant_data_size,
                                              shader->constant_data_size);
-
-      nir_foreach_variable_with_modes(var, shader, nir_var_mem_constant) {
-         assert(var->data.driver_location < shader->constant_data_size);
-         write_constant((char *)shader->constant_data +
-                           var->data.driver_location,
-                        shader->constant_data_size -
-                           var->data.driver_location,
-                        var->constant_initializer, var->type);
-      }
+      nir_gather_explicit_io_initializers(shader, shader->constant_data,
+                                          shader->constant_data_size,
+                                          nir_var_mem_constant);
       progress = true;
    }
 



More information about the mesa-commit mailing list