i965: Consistently do depth resolves before blitting.
authorEric Anholt <eric@anholt.net>
Thu, 23 May 2013 20:36:26 +0000 (13:36 -0700)
committerEric Anholt <eric@anholt.net>
Tue, 28 May 2013 19:40:30 +0000 (12:40 -0700)
We were protected for a long time by the fact that depth was Y tiled and
you couldn't blit Y.  Now that we can blit Y, we were failing to resolve
depth in glCopyPixels().

Note in the comment about swrast, that the swrast map path does resolves
appropriately already.

Reviewed-and-tested-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Acked-by: Paul Berry <stereotype441@gmail.com>
src/mesa/drivers/dri/intel/intel_blit.c
src/mesa/drivers/dri/intel/intel_mipmap_tree.c

index 41c1c3a248da629f43648519666c30e810d0bef4..1f6ad09946e3ce4b9f850b6dc0742576f2f8c9b4 100644 (file)
@@ -140,6 +140,12 @@ intel_miptree_blit(struct intel_context *intel,
       return false;
    }
 
+   /* The blitter has no idea about HiZ, so we need to get the real depth
+    * data into the two miptrees before we do anything.
+    */
+   intel_miptree_slice_resolve_depth(intel, src_mt, src_level, src_slice);
+   intel_miptree_slice_resolve_depth(intel, dst_mt, dst_level, dst_slice);
+
    if (src_flip)
       src_y = src_mt->level[src_level].height - src_y - height;
 
index eedf80c31dc22f3cce16999d3186d26c0fb3b81e..c3e55f4f65e8091fe9d083eb2775388ca49da5c7 100644 (file)
@@ -919,12 +919,6 @@ intel_miptree_copy_slice(struct intel_context *intel,
        dst_mt, dst_x, dst_y, dst_mt->region->pitch,
        width, height);
 
-   /* Since we are about to copy depth data using either the blitter or swrast
-    * (neither of which respect HiZ), we need to do a depth resolve first.
-    */
-   intel_miptree_slice_resolve_depth(intel, src_mt, level, slice);
-   intel_miptree_slice_resolve_depth(intel, dst_mt, level, slice);
-
    if (!intel_miptree_blit(intel,
                            src_mt, level, slice, 0, 0, false,
                            dst_mt, level, slice, 0, 0, false,