summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2018-06-11 14:49:12 -0400
committerRob Clark <[email protected]>2018-06-19 13:02:28 -0400
commitc9d6e579ecaa72c50cc2ef108a7ead5e24ae2512 (patch)
treeb6eb019edeb675bfeee9c8cb73852c6926ef646b /src
parent228457234c2b986d8acc88f2419e861c391b18e1 (diff)
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 <[email protected]> Reviewed-by: Timothy Arceri <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/mesa/state_tracker/st_glsl_to_nir.cpp16
1 files 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 {