From: Mike Blumenkrantz Date: Thu, 16 Jun 2022 18:33:46 +0000 (-0400) Subject: zink: fix buffer transfer flushes with offsets X-Git-Tag: upstream/22.3.5~7198 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ce5aa07db1091a83321229c802f256a44f37aded;p=platform%2Fupstream%2Fmesa.git zink: fix buffer transfer flushes with offsets the src and dst ofsets need to be adjusted by the base map offset in order to flush the correct region cc: mesa-stable Reviewed-by: Dave Airlie Part-of: --- diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 8a59a52..569b625 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -1972,10 +1972,11 @@ zink_transfer_flush_region(struct pipe_context *pctx, struct zink_screen *screen = zink_screen(pctx->screen); struct zink_resource *m = trans->staging_res ? zink_resource(trans->staging_res) : res; - ASSERTED VkDeviceSize size, src_offset; + ASSERTED VkDeviceSize size, src_offset, dst_offset = 0; if (m->obj->is_buffer) { size = box->width; - src_offset = trans->offset; + src_offset = box->x + (trans->staging_res ? trans->offset : ptrans->box.x); + dst_offset = box->x + ptrans->box.x; } else { size = (VkDeviceSize)box->width * box->height * util_format_get_blocksize(m->base.b.format); src_offset = trans->offset + @@ -1994,7 +1995,7 @@ zink_transfer_flush_region(struct pipe_context *pctx, struct zink_resource *staging_res = zink_resource(trans->staging_res); if (ptrans->resource->target == PIPE_BUFFER) - zink_copy_buffer(ctx, res, staging_res, box->x, src_offset, box->width); + zink_copy_buffer(ctx, res, staging_res, dst_offset, src_offset, size); else zink_transfer_copy_bufimage(ctx, res, staging_res, trans); }