[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