[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