From: David Riley Date: Wed, 1 May 2019 00:33:59 +0000 (-0700) Subject: virgl: Store mapped hw resource with transfer object. X-Git-Tag: upstream/19.3.0~6731 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e94a9a7f38de13230d1fb8767c45e6c8f4e59c64;p=platform%2Fupstream%2Fmesa.git virgl: Store mapped hw resource with transfer object. Signed-off-by: David Riley Reviewed-by: Gurchetan Singh --- diff --git a/src/gallium/drivers/virgl/virgl_buffer.c b/src/gallium/drivers/virgl/virgl_buffer.c index fd00b17..4243475 100644 --- a/src/gallium/drivers/virgl/virgl_buffer.c +++ b/src/gallium/drivers/virgl/virgl_buffer.c @@ -38,7 +38,6 @@ static void *virgl_buffer_transfer_map(struct pipe_context *ctx, struct virgl_screen *vs = virgl_screen(ctx->screen); struct virgl_resource *vbuf = virgl_resource(resource); struct virgl_transfer *trans; - void *ptr; bool readback; bool flush = false; @@ -60,14 +59,14 @@ static void *virgl_buffer_transfer_map(struct pipe_context *ctx, if (readback || flush) vs->vws->resource_wait(vs->vws, vbuf->hw_res); - ptr = vs->vws->resource_map(vs->vws, vbuf->hw_res); - if (!ptr) { + trans->hw_res_map = vs->vws->resource_map(vs->vws, vbuf->hw_res); + if (!trans->hw_res_map) { virgl_resource_destroy_transfer(&vctx->transfer_pool, trans); return NULL; } *transfer = &trans->base; - return ptr + trans->offset; + return trans->hw_res_map + trans->offset; } static void virgl_buffer_transfer_unmap(struct pipe_context *ctx, diff --git a/src/gallium/drivers/virgl/virgl_resource.h b/src/gallium/drivers/virgl/virgl_resource.h index abe8578..380e145 100644 --- a/src/gallium/drivers/virgl/virgl_resource.h +++ b/src/gallium/drivers/virgl/virgl_resource.h @@ -58,6 +58,7 @@ struct virgl_transfer { struct util_range range; struct list_head queue_link; struct pipe_transfer *resolve_transfer; + void *hw_res_map; }; void virgl_resource_destroy(struct pipe_screen *screen, diff --git a/src/gallium/drivers/virgl/virgl_texture.c b/src/gallium/drivers/virgl/virgl_texture.c index deb637e..19ae6ff 100644 --- a/src/gallium/drivers/virgl/virgl_texture.c +++ b/src/gallium/drivers/virgl/virgl_texture.c @@ -146,14 +146,14 @@ static void *texture_transfer_map_plain(struct pipe_context *ctx, if (readback || flush) vws->resource_wait(vws, vtex->hw_res); - void *ptr = vws->resource_map(vws, vtex->hw_res); - if (!ptr) { + trans->hw_res_map = vws->resource_map(vws, vtex->hw_res); + if (!trans->hw_res_map) { virgl_resource_destroy_transfer(&vctx->transfer_pool, trans); return NULL; } *transfer = &trans->base; - return ptr + trans->offset; + return trans->hw_res_map + trans->offset; } static void *texture_transfer_map_resolve(struct pipe_context *ctx,