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+.
This commit is contained in:
Chia-I Wu
2013-06-07 15:10:19 +08:00
parent d6c2708e1e
commit 7916d5ed88

View File

@@ -25,6 +25,7 @@
* Chia-I Wu <olv@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;