Mesa (staging/20.2): iris: fix source/destination layers for 3D blits

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Nov 18 00:47:18 UTC 2020


Module: Mesa
Branch: staging/20.2
Commit: 36ccd8d9fd40cd15b5ace3047f907d5d9452b243
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=36ccd8d9fd40cd15b5ace3047f907d5d9452b243

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Mon Oct 26 12:39:12 2020 -0700

iris: fix source/destination layers for 3D blits

See commit ea326912575fad09af59486ad62d126c4ea0ede7 for the
corresponding fix in anv.

Fixes Piglit's fbo-generatemipmap-3d.

Cc: mesa-stable
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7321>
(cherry picked from commit 382451ff9d7bfa4f807e8ca447180642c91b92e6)

---

 .pick_status.json                    |  2 +-
 src/gallium/drivers/iris/iris_blit.c | 17 +++++++++++++++--
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 29142218806..880bb85a876 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -4045,7 +4045,7 @@
         "description": "iris: fix source/destination layers for 3D blits",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": null
     },
diff --git a/src/gallium/drivers/iris/iris_blit.c b/src/gallium/drivers/iris/iris_blit.c
index 283d30bcfe2..6f019a2db6b 100644
--- a/src/gallium/drivers/iris/iris_blit.c
+++ b/src/gallium/drivers/iris/iris_blit.c
@@ -485,15 +485,28 @@ iris_blit(struct pipe_context *ctx, const struct pipe_blit_info *info)
    else
       main_mask = PIPE_MASK_RGBA;
 
+   float src_z_step = (float)info->src.box.depth / (float)info->dst.box.depth;
+
+   /* There is no interpolation to the pixel center during rendering, so
+    * add the 0.5 offset ourselves here.
+    */
+   float depth_center_offset = 0;
+   if (src_res->surf.dim == ISL_SURF_DIM_3D)
+      depth_center_offset = 0.5 / info->dst.box.depth * info->src.box.depth;
+
    if (info->mask & main_mask) {
       for (int slice = 0; slice < info->dst.box.depth; slice++) {
+         unsigned dst_z = info->dst.box.z + slice;
+         float src_z = info->src.box.z + slice * src_z_step +
+                       depth_center_offset;
+
          iris_batch_maybe_flush(batch, 1500);
          iris_batch_sync_region_start(batch);
 
          blorp_blit(&blorp_batch,
-                    &src_surf, info->src.level, info->src.box.z + slice,
+                    &src_surf, info->src.level, src_z,
                     src_fmt.fmt, src_fmt.swizzle,
-                    &dst_surf, info->dst.level, info->dst.box.z + slice,
+                    &dst_surf, info->dst.level, dst_z,
                     dst_fmt.fmt, dst_fmt.swizzle,
                     src_x0, src_y0, src_x1, src_y1,
                     dst_x0, dst_y0, dst_x1, dst_y1,



More information about the mesa-commit mailing list