[Mesa-dev] [PATCH 3/7] linker: Fold set_uniform_binding into call site
Kenneth Graunke
kenneth at whitecape.org
Wed Apr 9 08:02:45 PDT 2014
On 04/04/2014 02:01 PM, Ian Romanick wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> 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
Ehhhmm.....then....
> to just remove the function (especially for later patches in the series)
> than to add another parameter.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=76323
> Cc: "10.1" <mesa-stable at lists.freedesktop.org>
> Cc: github at socker.lepus.uberspace.de
> ---
> src/glsl/link_uniform_initializers.cpp | 33 ++++++++++++---------------------
> 1 file changed, 12 insertions(+), 21 deletions(-)
>
> diff --git a/src/glsl/link_uniform_initializers.cpp b/src/glsl/link_uniform_initializers.cpp
> index 6f15e69..bbdeec9 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)
...what exactly is this? ^^^^^^^^^^^^^^^^^^^^^
> -{
> - 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;
Here you're using type, which is var->type, which is exactly what we
were already passing.
AFAICT all you needed to do was change:
if (storage->type->is_sampler())
to
if (type->is_sampler() || (type->is_array() &&
type->fields.array->is_sampler()))
in set_uniform_binding.
> +
> + 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);
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20140409/0089a3ab/attachment-0001.sig>
More information about the mesa-dev
mailing list