From: Connor Abbott Date: Tue, 5 Aug 2014 17:54:27 +0000 (-0700) Subject: nir: keep track of the number of input, output, and uniform slots X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=494790b2a958f964547fb4362929171efffde153;p=mesa.git nir: keep track of the number of input, output, and uniform slots --- diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c index 27436661d14..be293fb029c 100644 --- a/src/glsl/nir/nir.c +++ b/src/glsl/nir/nir.c @@ -49,6 +49,10 @@ nir_shader_create(void *mem_ctx) 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 8395953ab49..868c769d938 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 63c55c09694..48e43fefc79 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