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