fwiw, I didn't notice yet any case where this matters for textures, but for images, you could try (from deqp gles31 module) dEQP-GLES31.functional.layout_binding.image.image2d.fragment_binding_array as an example
(perhaps I should have mentioned that in the commit msg) I'm not 100% sure if we just avoid this issue with textures (at least when indirect deref not involves) simply by virtue of a lowering pass.. BR, -R On Mon, Jun 11, 2018 at 6:15 PM, Timothy Arceri <[email protected]> wrote: > 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 <[email protected]> > > > 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 <[email protected]> >> --- >> 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 { >> > _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
