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;
}
/** 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) \
*/
static void
-assign_var_locations(struct hash_table *ht)
+assign_var_locations(struct hash_table *ht, unsigned *size)
{
unsigned location = 0;
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