diff options
author | Alyssa Rosenzweig <alyssa@rosenzweig.io> | 2022-02-06 09:57:48 -0500 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-02-18 23:48:32 +0000 |
commit | aea6d7f17f93c43e70891fd4d77637a37738c8a1 (patch) | |
tree | b0ff8ee7271ce11c3b4a371e9c7994b80706ec1b | |
parent | 06b2d9766634588f28e33f9b90c71c039992507a (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.c | 9 |
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, |