Mesa (staging/20.3): zink: fix direct image mapping offset

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Dec 14 17:32:27 UTC 2020


Module: Mesa
Branch: staging/20.3
Commit: f5246efd8dfc05893900019ae391b2b9a4ce4d40
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=f5246efd8dfc05893900019ae391b2b9a4ce4d40

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Fri Dec 11 10:53:53 2020 -0500

zink: fix direct image mapping offset

the x and y offsets here were improperly calculated without taking into account:
* layer/level offset
* x/y coord bpp

Fixes: 8d46e35d16e ("zink: introduce opengl over vulkan")
Reviewed-by: Erik Faye-Lund <erik.faye-lund at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8058>
(cherry picked from commit 456b57802eaf95d36e7b950bdb5ffd86a1c0dc63)

---

 .pick_status.json                        | 2 +-
 src/gallium/drivers/zink/zink_resource.c | 9 ++++++---
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 44716939f55..52ec3cab69d 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -301,7 +301,7 @@
         "description": "zink: fix direct image mapping offset",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": "8d46e35d16e3936968958bcab86d61967a673305"
     },
diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c
index dc7b6694b52..d9de6c70a70 100644
--- a/src/gallium/drivers/zink/zink_resource.c
+++ b/src/gallium/drivers/zink/zink_resource.c
@@ -599,9 +599,12 @@ zink_transfer_map(struct pipe_context *pctx,
          vkGetImageSubresourceLayout(screen->dev, res->image, &isr, &srl);
          trans->base.stride = srl.rowPitch;
          trans->base.layer_stride = srl.arrayPitch;
-         ptr = ((uint8_t *)ptr) + box->z * srl.depthPitch +
-                                  box->y * srl.rowPitch +
-                                  box->x;
+         const struct util_format_description *desc = util_format_description(res->format);
+         unsigned offset = srl.offset +
+                           box->z * srl.depthPitch +
+                           (box->y / desc->block.height) * srl.rowPitch +
+                           (box->x / desc->block.width) * (util_format_get_blocksize(res->format) / desc->nr_channels);
+         ptr = ((uint8_t *)ptr) + offset;
       }
    }
 



More information about the mesa-commit mailing list