diff options
author | Mike Blumenkrantz <michael.blumenkrantz@gmail.com> | 2022-06-11 10:59:59 -0400 |
---|---|---|
committer | Dylan Baker <dylan.c.baker@intel.com> | 2022-06-15 16:13:00 -0700 |
commit | 3fb2d7b7a8b7e937a38b51ab5f817f2f9595149e (patch) | |
tree | 6a6e3bf6e411ffa16af60eaec87fd5e760133e5d | |
parent | 245ef2b49dd0c3bd55ab08dc956ae4c0b7cd3317 (diff) |
zink: fix cubemap lowering for array samplers
each sampler is 1 driver location, so use the base variable
Fixes: 2d745904ca7 ("zink: add a gently mangled version of the d3d12 cubemap -> array compiler pass")
fixes:
dEQP-GL45-ES31.functional.shaders.opaque_type_indexing.sampler.const_expression.*.samplercubearray
Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17008>
(cherry picked from commit de6af39534c6372395e09134809b8d6d98bd4bc7)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/gallium/drivers/zink/zink_lower_cubemap_to_array.c | 4 |
2 files changed, 4 insertions, 2 deletions
diff --git a/.pick_status.json b/.pick_status.json index f423423441e..2325f9ff503 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1111,7 +1111,7 @@ "description": "zink: fix cubemap lowering for array samplers", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "2d745904ca7022afdc86cb66e294cedfafa0fcb1" }, diff --git a/src/gallium/drivers/zink/zink_lower_cubemap_to_array.c b/src/gallium/drivers/zink/zink_lower_cubemap_to_array.c index a9c2754df38..523ba186abd 100644 --- a/src/gallium/drivers/zink/zink_lower_cubemap_to_array.c +++ b/src/gallium/drivers/zink/zink_lower_cubemap_to_array.c @@ -391,7 +391,9 @@ rewrite_cube_var_type(nir_builder *b, nir_tex_instr *tex) nir_foreach_variable_with_modes(var, b->shader, nir_var_uniform) { if (!glsl_type_is_sampler(glsl_without_array(var->type))) continue; - if (var->data.driver_location == index) { + unsigned size = glsl_type_is_array(var->type) ? glsl_get_length(var->type) : 1; + if (var->data.driver_location == index || + (var->data.driver_location < index && var->data.driver_location + size > index)) { sampler = var; break; } |