[Mesa-dev] [PATCH 11/16] nir: keep track of the number of input, output, and uniform slots

Connor Abbott cwabbott0 at gmail.com
Fri Aug 15 17:12:15 PDT 2014


Signed-off-by: Connor Abbott <connor.abbott at intel.com>
---
 src/glsl/nir/nir.c                        |  4 ++++
 src/glsl/nir/nir.h                        |  6 ++++++
 src/glsl/nir/nir_lower_variables_scalar.c | 10 ++++++----
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c
index 725b598..c173e15 100644
--- a/src/glsl/nir/nir.c
+++ b/src/glsl/nir/nir.c
@@ -45,6 +45,10 @@ nir_shader_create(void *mem_ctx)
    exec_list_make_empty(&shader->globals);
    exec_list_make_empty(&shader->system_values);
    shader->reg_alloc = 0;
+   
+   shader->num_inputs = 0;
+   shader->num_outputs = 0;
+   shader->num_uniforms = 0;
 
    return shader;
 }
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
index 0e14423..ba85975 100644
--- a/src/glsl/nir/nir.h
+++ b/src/glsl/nir/nir.h
@@ -1138,6 +1138,12 @@ typedef struct nir_shader {
 
    /** next available global register index */
    unsigned reg_alloc;
+   
+   /**
+    * the highest index a load_input_*, load_uniform_*, etc. intrinsic can
+    * access plus one
+    */
+   unsigned num_inputs, num_uniforms, num_outputs;
 } nir_shader;
 
 #define nir_foreach_overload(shader, overload) \
diff --git a/src/glsl/nir/nir_lower_variables_scalar.c b/src/glsl/nir/nir_lower_variables_scalar.c
index 0e2ea8c..24b5207 100644
--- a/src/glsl/nir/nir_lower_variables_scalar.c
+++ b/src/glsl/nir/nir_lower_variables_scalar.c
@@ -75,7 +75,7 @@ type_size(const struct glsl_type *type)
  */
 
 static void
-assign_var_locations(struct hash_table *ht)
+assign_var_locations(struct hash_table *ht, unsigned *size)
 {
    unsigned location = 0;
 
@@ -93,14 +93,16 @@ assign_var_locations(struct hash_table *ht)
       var->data.driver_location = location;
       location += type_size(var->type);
    }
+   
+   *size = location;
 }
 
 static void
 assign_var_locations_shader(nir_shader *shader)
 {
-   assign_var_locations(shader->inputs);
-   assign_var_locations(shader->outputs);
-   assign_var_locations(shader->uniforms);
+   assign_var_locations(shader->inputs, &shader->num_inputs);
+   assign_var_locations(shader->outputs, &shader->num_outputs);
+   assign_var_locations(shader->uniforms, &shader->num_uniforms);
 }
 
 static void
-- 
1.9.3



More information about the mesa-dev mailing list