summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>2022-02-06 09:57:48 -0500
committerMarge Bot <emma+marge@anholt.net>2022-02-18 23:48:32 +0000
commitaea6d7f17f93c43e70891fd4d77637a37738c8a1 (patch)
treeb0ff8ee7271ce11c3b4a371e9c7994b80706ec1b
parent06b2d9766634588f28e33f9b90c71c039992507a (diff)
asahi: Handle tiling of 2D arrays and 3D
Nothing special required, just need to respect the Z coordinate. Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14903>
-rw-r--r--src/gallium/drivers/asahi/agx_pipe.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/gallium/drivers/asahi/agx_pipe.c b/src/gallium/drivers/asahi/agx_pipe.c
index d908fa00104..71cda6567ad 100644
--- a/src/gallium/drivers/asahi/agx_pipe.c
+++ b/src/gallium/drivers/asahi/agx_pipe.c
@@ -302,13 +302,14 @@ agx_transfer_map(struct pipe_context *pctx,
transfer->base.stride = box->width * bytes_per_pixel;
transfer->base.layer_stride = transfer->base.stride * box->height;
transfer->map = calloc(transfer->base.layer_stride, box->depth);
- assert(box->depth == 1);
if ((usage & PIPE_MAP_READ) && BITSET_TEST(rsrc->data_valid, level)) {
for (unsigned z = 0; z < box->depth; ++z) {
uint8_t *map = agx_rsrc_offset(rsrc, level, box->z + z);
+ uint8_t *dst = (uint8_t *) transfer->map +
+ transfer->base.layer_stride * z;
- agx_detile(map, transfer->map,
+ agx_detile(map, dst,
u_minify(resource->width0, level), bytes_per_pixel * 8,
transfer->base.stride / bytes_per_pixel,
box->x, box->y, box->x + box->width, box->y + box->height);
@@ -355,8 +356,10 @@ agx_transfer_unmap(struct pipe_context *pctx,
for (unsigned z = 0; z < transfer->box.depth; ++z) {
uint8_t *map = agx_rsrc_offset(rsrc, transfer->level,
transfer->box.z + z);
+ uint8_t *src = (uint8_t *) trans->map +
+ transfer->layer_stride * z;
- agx_tile(map, trans->map,
+ agx_tile(map, src,
u_minify(transfer->resource->width0, transfer->level),
bytes_per_pixel * 8,
transfer->stride / bytes_per_pixel,