i965/blorp: Only set src_z for gen8+ 3D textures
authorJason Ekstrand <jason.ekstrand@intel.com>
Fri, 10 Jun 2016 21:44:32 +0000 (14:44 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 22 Jun 2016 19:26:43 +0000 (12:26 -0700)
Otherwise, we end up with a bogus value in the third component.  On gen6-7
where we always use 2D textures, this can cause problems if the
SurfaceArray bit is set in the SURFACE_STATE.

Acked-by: Chad Versace <chad.versace@intel.com>
src/mesa/drivers/dri/i965/brw_blorp_blit.cpp

index 782d285cb7ccaf99391025f0fbdd659cf4a4c07e..cdb6b330cdc48852bb42f8cec6e28a2488eb7a52 100644 (file)
@@ -1846,8 +1846,15 @@ brw_blorp_blit_miptrees(struct brw_context *brw,
    brw_blorp_setup_coord_transform(&params.wm_push_consts.y_transform,
                                    src_y0, src_y1, dst_y0, dst_y1, mirror_y);
 
-   params.wm_push_consts.src_z =
-      params.src.mt->target == GL_TEXTURE_3D ? params.src.layer : 0;
+   if (brw->gen >= 8 && params.src.mt->target == GL_TEXTURE_3D) {
+      /* On gen8+ we use actual 3-D textures so we need to pass the layer
+       * through to the sampler.
+       */
+      params.wm_push_consts.src_z = params.src.layer;
+   } else {
+      /* On gen7 and earlier, we fake everything with 2-D textures */
+      params.wm_push_consts.src_z = 0;
+   }
 
    if (params.dst.num_samples <= 1 && dst_mt->num_samples > 1) {
       /* We must expand the rectangle we send through the rendering pipeline,