Saves us from calling etna_bo_map(..) and saves us from doing the same offset calcs for map() and unmap() operations.
Signed-off-by: Christian Gmeiner <christian.gmei...@gmail.com> Reviewed-by: Lucas Stach <l.st...@pengutronix.de> --- src/gallium/drivers/etnaviv/etnaviv_context.h | 1 + .../drivers/etnaviv/etnaviv_transfer.c | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/gallium/drivers/etnaviv/etnaviv_context.h b/src/gallium/drivers/etnaviv/etnaviv_context.h index 6ad9f3431e1..45b3954c7cb 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_context.h +++ b/src/gallium/drivers/etnaviv/etnaviv_context.h @@ -70,6 +70,7 @@ struct etna_transfer { struct pipe_transfer base; struct pipe_resource *rsc; void *staging; + void *mapped; }; struct etna_vertexbuf_state { diff --git a/src/gallium/drivers/etnaviv/etnaviv_transfer.c b/src/gallium/drivers/etnaviv/etnaviv_transfer.c index 0b7411b47ef..01da393d211 100644 --- a/src/gallium/drivers/etnaviv/etnaviv_transfer.c +++ b/src/gallium/drivers/etnaviv/etnaviv_transfer.c @@ -91,16 +91,15 @@ etna_transfer_unmap(struct pipe_context *pctx, struct pipe_transfer *ptrans) } else if (trans->staging) { /* map buffer object */ struct etna_resource_level *res_level = &rsc->levels[ptrans->level]; - void *mapped = etna_bo_map(rsc->bo) + res_level->offset; if (rsc->layout == ETNA_LAYOUT_TILED) { etna_texture_tile( - mapped + ptrans->box.z * res_level->layer_stride, + trans->mapped + ptrans->box.z * res_level->layer_stride, trans->staging, ptrans->box.x, ptrans->box.y, res_level->stride, ptrans->box.width, ptrans->box.height, ptrans->stride, util_format_get_blocksize(rsc->base.format)); } else if (rsc->layout == ETNA_LAYOUT_LINEAR) { - util_copy_box(mapped, rsc->base.format, res_level->stride, + util_copy_box(trans->mapped, rsc->base.format, res_level->stride, res_level->layer_stride, ptrans->box.x, ptrans->box.y, ptrans->box.z, ptrans->box.width, ptrans->box.height, ptrans->box.depth, @@ -327,8 +326,8 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc, } /* map buffer object */ - void *mapped = etna_bo_map(rsc->bo); - if (!mapped) + trans->mapped = etna_bo_map(rsc->bo); + if (!trans->mapped) goto fail; *out_transfer = ptrans; @@ -337,9 +336,11 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc, ptrans->stride = res_level->stride; ptrans->layer_stride = res_level->layer_stride; - return mapped + res_level->offset + + trans->mapped += res_level->offset + etna_compute_offset(prsc->format, box, res_level->stride, res_level->layer_stride); + + return trans->mapped; } else { unsigned divSizeX = util_format_get_blockwidth(format); unsigned divSizeY = util_format_get_blockheight(format); @@ -350,7 +351,7 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc, if (usage & PIPE_TRANSFER_MAP_DIRECTLY) goto fail; - mapped += res_level->offset; + trans->mapped += res_level->offset; ptrans->stride = align(box->width, divSizeX) * util_format_get_blocksize(format); /* row stride in bytes */ ptrans->layer_stride = align(box->height, divSizeY) * ptrans->stride; size_t size = ptrans->layer_stride * box->depth; @@ -362,7 +363,7 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc, if (usage & PIPE_TRANSFER_READ) { if (rsc->layout == ETNA_LAYOUT_TILED) { etna_texture_untile(trans->staging, - mapped + ptrans->box.z * res_level->layer_stride, + trans->mapped + ptrans->box.z * res_level->layer_stride, ptrans->box.x, ptrans->box.y, res_level->stride, ptrans->box.width, ptrans->box.height, ptrans->stride, util_format_get_blocksize(rsc->base.format)); @@ -370,7 +371,7 @@ etna_transfer_map(struct pipe_context *pctx, struct pipe_resource *prsc, util_copy_box(trans->staging, rsc->base.format, ptrans->stride, ptrans->layer_stride, 0, 0, 0, /* dst x,y,z */ ptrans->box.width, ptrans->box.height, - ptrans->box.depth, mapped, res_level->stride, + ptrans->box.depth, trans->mapped, res_level->stride, res_level->layer_stride, ptrans->box.x, ptrans->box.y, ptrans->box.z); } else { -- 2.20.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev