virgl: Store mapped hw resource with transfer object.

Signed-off-by: David Riley <davidriley@chromium.org>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
This commit is contained in:
David Riley 2019-04-30 17:33:59 -07:00 committed by Gurchetan Singh
parent ebbb05b3c9
commit e94a9a7f38
3 changed files with 7 additions and 7 deletions

View file

@ -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,

View file

@ -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,

View file

@ -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,