diff options
author | Ian Romanick <[email protected]> | 2014-04-04 11:08:00 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2014-04-11 12:26:01 -0700 |
commit | 943b2d52bf5df6adde3c0abcb91d9a3899476ab0 (patch) | |
tree | adbf8d2db208faa99c8b05b61a357715c7f7ea84 | |
parent | 881c52f13f4a8ca1c80ca1766238d5100ddf283b (diff) |
linker: Fold set_uniform_binding into call site
In the next patch, we'll see that using
gl_shader_program::UniformStorage is not correct for uniform blocks.
That means we can't use ::UniformStorage to select between the sampler
path and the block path. Instead we want to just use the type of the
variable. That's never passed to set_uniform_binding, and it's easier
to just remove the function (especially for later patches in the series)
than to add another parameter.
Signed-off-by: Ian Romanick <[email protected]>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76323
Reviewed-by: Kenneth Graunke <[email protected]>
Cc: "10.1" <[email protected]>
Cc: [email protected]
-rw-r--r-- | src/glsl/link_uniform_initializers.cpp | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/src/glsl/link_uniform_initializers.cpp b/src/glsl/link_uniform_initializers.cpp index 6f15e69565e..bbdeec9039c 100644 --- a/src/glsl/link_uniform_initializers.cpp +++ b/src/glsl/link_uniform_initializers.cpp @@ -151,25 +151,6 @@ set_block_binding(void *mem_ctx, gl_shader_program *prog, } void -set_uniform_binding(void *mem_ctx, gl_shader_program *prog, - const char *name, const glsl_type *type, int binding) -{ - struct gl_uniform_storage *const storage = - get_storage(prog->UniformStorage, prog->NumUserUniformStorage, name); - - if (storage == NULL) { - assert(storage != NULL); - return; - } - - if (storage->type->is_sampler()) { - set_sampler_binding(mem_ctx, prog, name, type, binding); - } else if (storage->block_index != -1) { - set_block_binding(mem_ctx, prog, name, type, binding); - } -} - -void set_uniform_initializer(void *mem_ctx, gl_shader_program *prog, const char *name, const glsl_type *type, ir_constant *val) @@ -268,8 +249,18 @@ link_set_uniform_initializers(struct gl_shader_program *prog) mem_ctx = ralloc_context(NULL); if (var->data.explicit_binding) { - linker::set_uniform_binding(mem_ctx, prog, var->name, - var->type, var->data.binding); + const glsl_type *const type = var->type; + + if (type->is_sampler() + || (type->is_array() && type->fields.array->is_sampler())) { + linker::set_sampler_binding(mem_ctx, prog, var->name, + type, var->data.binding); + } else if (var->is_in_uniform_block()) { + linker::set_block_binding(mem_ctx, prog, var->name, + type, var->data.binding); + } else { + assert(!"Explicit binding not on a sampler or UBO."); + } } else if (var->constant_value) { linker::set_uniform_initializer(mem_ctx, prog, var->name, var->type, var->constant_value); |