diff options
author | Timothy Arceri <[email protected]> | 2016-07-27 15:20:44 +1000 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2016-08-11 08:33:30 +1000 |
commit | 549222f5f8ef4616f5e6ddeb5c29ea6446684e5e (patch) | |
tree | 943867460a46d24bfdf9ca32c54f7e13a74b585f | |
parent | 82e153daff954a9bf09c8fb7e1adfeedb17a1fc3 (diff) |
glsl: use UniformHash to find storage location
There is no need to be looping over all the uniforms.
Reviewed-by: Eric Anholt <[email protected]>
-rw-r--r-- | src/compiler/glsl/link_uniform_initializers.cpp | 29 |
1 files changed, 11 insertions, 18 deletions
diff --git a/src/compiler/glsl/link_uniform_initializers.cpp b/src/compiler/glsl/link_uniform_initializers.cpp index 17660a75741..3750021033f 100644 --- a/src/compiler/glsl/link_uniform_initializers.cpp +++ b/src/compiler/glsl/link_uniform_initializers.cpp @@ -22,6 +22,7 @@ */ #include "main/core.h" +#include "program/hash_table.h" #include "ir.h" #include "linker.h" #include "ir_uniform.h" @@ -33,14 +34,13 @@ namespace linker { gl_uniform_storage * -get_storage(gl_uniform_storage *storage, unsigned num_storage, - const char *name) +get_storage(struct gl_shader_program *prog, const char *name) { - for (unsigned int i = 0; i < num_storage; i++) { - if (strcmp(name, storage[i].name) == 0) - return &storage[i]; - } + unsigned id; + if (prog->UniformHash->get(id, name)) + return &prog->UniformStorage[id]; + assert(!"No uniform storage found!"); return NULL; } @@ -108,13 +108,10 @@ set_opaque_binding(void *mem_ctx, gl_shader_program *prog, element_name, binding); } } else { - struct gl_uniform_storage *const storage = - get_storage(prog->UniformStorage, prog->NumUniformStorage, name); + struct gl_uniform_storage *const storage = get_storage(prog, name); - if (storage == NULL) { - assert(storage != NULL); + if (!storage) return; - } const unsigned elements = MAX2(storage->array_elements, 1); @@ -207,14 +204,10 @@ set_uniform_initializer(void *mem_ctx, gl_shader_program *prog, return; } - struct gl_uniform_storage *const storage = - get_storage(prog->UniformStorage, - prog->NumUniformStorage, - name); - if (storage == NULL) { - assert(storage != NULL); + struct gl_uniform_storage *const storage = get_storage(prog, name); + + if (!storage) return; - } if (val->type->is_array()) { const enum glsl_base_type base_type = |