From c9d6e579ecaa72c50cc2ef108a7ead5e24ae2512 Mon Sep 17 00:00:00 2001 From: Rob Clark Date: Mon, 11 Jun 2018 14:49:12 -0400 Subject: [PATCH] mesa/st/nir: fix driver_location for arrays of image/sampler 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 Reviewed-by: Timothy Arceri --- 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 { -- 2.30.2