[Mesa-dev] [PATCH] mesa/st/nir: fix driver_location for arrays of image/sampler

Timothy Arceri tarceri at itsqueeze.com
Mon Jun 11 22:15:15 UTC 2018


Looks right to me. I guess we have no piglit tests for it, I ran the CTS 
a few times on radeonsi but I was more focused on getting piglit working.

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>

On 12/06/18 04:56, Rob Clark wrote:
> We can have arrays of images or samplers.  But I forgot to handle that
> case long ago.  Suprised no one complained yet.
> 
> Signed-off-by: Rob Clark <robdclark at gmail.com>
> ---
>   src/mesa/state_tracker/st_glsl_to_nir.cpp | 16 +++++++++-------
>   1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
> index c8c2ef6cffd..3fc04c7b8b7 100644
> --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
> @@ -272,12 +272,15 @@ st_nir_assign_uniform_locations(struct gl_context *ctx,
>             uniform->interface_type != NULL)
>            continue;
>   
> -      if (!uniform->data.bindless &&
> -          (uniform->type->is_sampler() || uniform->type->is_image())) {
> -         if (uniform->type->is_sampler())
> -            loc = shaderidx++;
> -         else
> -            loc = imageidx++;
> +      const struct glsl_type *type = glsl_without_array(uniform->type);
> +      if (!uniform->data.bindless && (type->is_sampler() || type->is_image())) {
> +         if (type->is_sampler()) {
> +            loc = shaderidx;
> +            shaderidx += type_size(uniform->type);
> +         } else {
> +            loc = imageidx;
> +            imageidx += type_size(uniform->type);
> +         }
>         } else if (strncmp(uniform->name, "gl_", 3) == 0) {
>            const gl_state_index16 *const stateTokens = uniform->state_slots[0].tokens;
>            /* This state reference has already been setup by ir_to_mesa, but we'll
> @@ -285,7 +288,6 @@ st_nir_assign_uniform_locations(struct gl_context *ctx,
>             */
>   
>            unsigned comps;
> -         const struct glsl_type *type = glsl_without_array(uniform->type);
>            if (glsl_type_is_struct(type)) {
>               comps = 4;
>            } else {
> 


More information about the mesa-dev mailing list