anv/lower_ycbcr: Use the binding array size for bounds checks
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 7 Aug 2018 22:11:57 +0000 (15:11 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 17 Aug 2018 15:50:28 +0000 (10:50 -0500)
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 <tarceri@itsqueeze.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
src/intel/vulkan/anv_nir_lower_ycbcr_textures.c

index 5a971d9be39c16ff879500a362916efdec7e924e..71e511f34b77630a785c14ecc15fb730e1417f9f 100644 (file)
@@ -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;