isl/state: Set SurfaceArray based on the surface dimension
authorJason Ekstrand <jason.ekstrand@intel.com>
Tue, 7 Jun 2016 22:30:00 +0000 (15:30 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 22 Jun 2016 19:26:43 +0000 (12:26 -0700)
According to the PRM, you can't set SurfaceArray for 3D or buffer textures.
There doesn't seem to be a good reason not to set it when we can.  On the
other hand, if we don't set it we can end up getting strange results for
1-layer array textures such as textureSize() returning the wrong results.

Reviewed-by: Chad Versace <chad.versace@intel.com>
Cc: "12.0" <mesa-stable@lists.freedesktop.org>
src/intel/isl/isl_surface_state.c

index 89fd69d877f7a35e223e467a91f22cede56714c8..602726a436a48e4f0cc00ef8fa90692726068c82 100644 (file)
@@ -258,7 +258,7 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
       unreachable("bad SurfaceType");
    }
 
-   s.SurfaceArray = info->surf->phys_level0_sa.array_len > 1;
+   s.SurfaceArray = info->surf->dim != ISL_SURF_DIM_3D;
 
    if (info->view->usage & ISL_SURF_USAGE_RENDER_TARGET_BIT) {
       /* For render target surfaces, the hardware interprets field