Mesa (main): nir: Add modes filter to nir_sort_variables

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 24 20:25:11 UTC 2021


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

Author: Enrico Galli <enrico.galli at intel.com>
Date:   Thu Jun 10 13:46:15 2021 -0700

nir: Add modes filter to nir_sort_variables

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10989>

---

 src/compiler/nir/nir.c | 17 +++++++++++------
 src/compiler/nir/nir.h |  7 ++++---
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c
index 41fe6ae0cec..70b934e0ce0 100644
--- a/src/compiler/nir/nir.c
+++ b/src/compiler/nir/nir.c
@@ -280,14 +280,20 @@ var_sort_cmp(const void *_a, const void *_b, void *_cmp)
 }
 
 void
-nir_sort_variables(nir_shader *shader,
-                   int (*cmp)(const nir_variable *, const nir_variable *))
+nir_sort_variables_with_modes(nir_shader *shader,
+                              int (*cmp)(const nir_variable *,
+                                         const nir_variable *),
+                              nir_variable_mode modes)
 {
-   const unsigned num_vars = exec_list_length(&shader->variables);
+   unsigned num_vars = 0;
+   nir_foreach_variable_with_modes(var, shader, modes) {
+      ++num_vars;
+   }
    struct var_cmp *vars = ralloc_array(shader, struct var_cmp, num_vars);
    unsigned i = 0;
-   nir_foreach_variable_in_shader(var, shader) {
-      vars[i++] = (struct var_cmp) {
+   nir_foreach_variable_with_modes_safe(var, shader, modes) {
+      exec_node_remove(&var->node);
+      vars[i++] = (struct var_cmp){
          .var = var,
          .cmp = cmp,
       };
@@ -296,7 +302,6 @@ nir_sort_variables(nir_shader *shader,
 
    util_qsort_r(vars, num_vars, sizeof(*vars), var_sort_cmp, cmp);
 
-   exec_list_make_empty(&shader->variables);
    for (i = 0; i < num_vars; i++)
       exec_list_push_tail(&shader->variables, &vars[i].var->node);
 
diff --git a/src/compiler/nir/nir.h b/src/compiler/nir/nir.h
index 9af1264191c..59e46d05541 100644
--- a/src/compiler/nir/nir.h
+++ b/src/compiler/nir/nir.h
@@ -3622,9 +3622,10 @@ nir_variable *nir_find_variable_with_driver_location(nir_shader *shader,
                                                      nir_variable_mode mode,
                                                      unsigned location);
 
-void nir_sort_variables(nir_shader *shader,
-                        int (*compar)(const nir_variable *,
-                                      const nir_variable *));
+void nir_sort_variables_with_modes(nir_shader *shader,
+                                   int (*compar)(const nir_variable *,
+                                                 const nir_variable *),
+                                   nir_variable_mode modes);
 
 /** creates a function and adds it to the shader's list of functions */
 nir_function *nir_function_create(nir_shader *shader, const char *name);



More information about the mesa-commit mailing list