[Mesa-dev] [PATCH 2/2] ilo: fix textureSize() for single-layered array textures

Chia-I Wu olvaffe at gmail.com
Fri Jun 7 00:45:00 PDT 2013


We returned 0 instead of 1 for the number of layers when the array texutre is
single-layered.  This fixes it on GEN7+.

Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
---
 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 f9533ff..c3211b5 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 <olv at lunarg.com>
  */
 
+#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;
-- 
1.7.10.4



More information about the mesa-dev mailing list