nir: keep track of the number of input, output, and uniform slots

This commit is contained in:
Connor Abbott 2014-08-05 10:54:27 -07:00 committed by Jason Ekstrand
parent c2f36cf125
commit 494790b2a9
3 changed files with 16 additions and 4 deletions

View file

@ -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;
}

View file

@ -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) \

View file

@ -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