nir: Use a list instead of a hash_table for inputs, outputs, and uniforms

We never did a single hash table lookup in the entire NIR code base that I
found so there was no real benifit to doing it that way.  I suppose that
for linking, we'll probably want to be able to lookup by name but we can
leave building that hash table to the linker.  In the mean time this was
causing problems with GLSL IR -> NIR because GLSL IR doesn't guarantee us
unique names of uniforms, etc.  This was causing massive rendering isues in
the unreal4 Sun Temple demo.

Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
This commit is contained in:
Jason Ekstrand
2015-03-18 12:34:09 -07:00
parent 8f255f948b
commit 639115123e
7 changed files with 32 additions and 45 deletions

View File

@@ -77,14 +77,11 @@ type_size(const struct glsl_type *type)
}
static void
assign_var_locations(struct hash_table *ht, unsigned *size)
assign_var_locations(struct exec_list *var_list, unsigned *size)
{
unsigned location = 0;
struct hash_entry *entry;
hash_table_foreach(ht, entry) {
nir_variable *var = (nir_variable *) entry->data;
foreach_list_typed(nir_variable, var, node, var_list) {
/*
* UBO's have their own address spaces, so don't count them towards the
* number of global uniforms
@@ -102,9 +99,9 @@ assign_var_locations(struct hash_table *ht, unsigned *size)
static void
assign_var_locations_shader(nir_shader *shader)
{
assign_var_locations(shader->inputs, &shader->num_inputs);
assign_var_locations(shader->outputs, &shader->num_outputs);
assign_var_locations(shader->uniforms, &shader->num_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 bool