From 7916d5ed88a29177f1dc2a11fbacbd95e512e025 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Fri, 7 Jun 2013 15:10:19 +0800 Subject: [PATCH] ilo: fix textureSize() for single-layered array textures We returned 0 instead of 1 for the number of layers when the array texutre is single-layered. This fixed it on GEN7+. --- src/gallium/drivers/ilo/ilo_gpe_gen7.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/ilo/ilo_gpe_gen7.c b/src/gallium/drivers/ilo/ilo_gpe_gen7.c index f9533ff4806..c3211b53873 100644 --- a/src/gallium/drivers/ilo/ilo_gpe_gen7.c +++ b/src/gallium/drivers/ilo/ilo_gpe_gen7.c @@ -25,6 +25,7 @@ * Chia-I Wu */ +#include "util/u_resource.h" #include "brw_defines.h" #include "intel_reg.h" @@ -1591,8 +1592,23 @@ ilo_gpe_init_view_surface_for_texture_gen7(const struct ilo_dev_info *dev, surface_format << BRW_SURFACE_FORMAT_SHIFT | ilo_gpe_gen6_translate_winsys_tiling(tex->tiling) << 13; - if (surface_type != BRW_SURFACE_3D && depth > 1) - dw[0] |= GEN7_SURFACE_IS_ARRAY; + /* + * From the Ivy Bridge PRM, volume 4 part 1, page 63: + * + * "If this field (Surface Array) is enabled, the Surface Type must be + * SURFTYPE_1D, SURFTYPE_2D, or SURFTYPE_CUBE. If this field is + * disabled and Surface Type is SURFTYPE_1D, SURFTYPE_2D, or + * SURFTYPE_CUBE, the Depth field must be set to zero." + * + * For non-3D sampler surfaces, resinfo (the sampler message) always + * returns zero for the number of layers when this field is not set. + */ + if (surface_type != BRW_SURFACE_3D) { + if (util_resource_is_array_texture(&tex->base)) + dw[0] |= GEN7_SURFACE_IS_ARRAY; + else + assert(depth == 1); + } if (tex->valign_4) dw[0] |= GEN7_SURFACE_VALIGN_4; -- 2.30.2