From f69fcede0ad161cb85cc4cf921cdcc75ca8d7e0f Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 7 Aug 2018 15:11:57 -0700 Subject: anv/lower_ycbcr: Use the binding array size for bounds checks Because lower_ycbcr gets called before apply_pipeline_layout, the indices are all logical and the binding layout HW size is actually too big for the bounds check. We should just use the regular logical array size instead. Fixes: f3e91e78a33 "anv: add nir lowering pass for ycbcr textures" Reviewed-by: Timothy Arceri Reviewed-by: Lionel Landwerlin (cherry picked from commit 320dacb0a051cd1736e0976f70467b68281edfbf) --- src/intel/vulkan/anv_nir_lower_ycbcr_textures.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/intel/vulkan/anv_nir_lower_ycbcr_textures.c b/src/intel/vulkan/anv_nir_lower_ycbcr_textures.c index 5a971d9be39..71e511f34b7 100644 --- a/src/intel/vulkan/anv_nir_lower_ycbcr_textures.c +++ b/src/intel/vulkan/anv_nir_lower_ycbcr_textures.c @@ -340,18 +340,16 @@ try_lower_tex_ycbcr(struct anv_pipeline_layout *layout, if (binding->immutable_samplers == NULL) return false; - unsigned texture_index = tex->texture_index; + assert(tex->texture_index == 0); + unsigned array_index = 0; if (deref->deref_type != nir_deref_type_var) { assert(deref->deref_type == nir_deref_type_array); nir_const_value *const_index = nir_src_as_const_value(deref->arr.index); if (!const_index) return false; - size_t hw_binding_size = - anv_descriptor_set_binding_layout_get_hw_size(binding); - texture_index += MIN2(const_index->u32[0], hw_binding_size - 1); + array_index = MIN2(const_index->u32[0], binding->array_size - 1); } - const struct anv_sampler *sampler = - binding->immutable_samplers[texture_index]; + const struct anv_sampler *sampler = binding->immutable_samplers[array_index]; if (sampler->conversion == NULL) return false; -- cgit v1.2.3