summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/virgl
diff options
context:
space:
mode:
authorAlexandros Frantzis <alexandros.frantzis@collabora.com>2019-07-05 14:27:11 +0300
committerChia-I Wu <olvaffe@gmail.com>2019-07-06 19:30:37 -0700
commite5b54d001897b44cc75c8d5ca15330fd9d26af8a (patch)
tree489bdda73f8856c3de987436f3fe201bebad1764 /src/gallium/drivers/virgl
parentf8975f8f2f51e265609d17875b6850c7b2ac5313 (diff)
virgl: Use virgl_resource_transfer_map for textures
Replace custom texture map code (for maps which don't require resolve) with virgl_resource_transfer_map. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com> Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Diffstat (limited to 'src/gallium/drivers/virgl')
-rw-r--r--src/gallium/drivers/virgl/virgl_resource.c1
-rw-r--r--src/gallium/drivers/virgl/virgl_texture.c63
2 files changed, 4 insertions, 60 deletions
diff --git a/src/gallium/drivers/virgl/virgl_resource.c b/src/gallium/drivers/virgl/virgl_resource.c
index 953ec9824c3..7e855a10e0c 100644
--- a/src/gallium/drivers/virgl/virgl_resource.c
+++ b/src/gallium/drivers/virgl/virgl_resource.c
@@ -547,6 +547,7 @@ virgl_resource_create_transfer(struct virgl_context *vctx,
util_range_init(&trans->range);
trans->copy_src_hw_res = NULL;
trans->copy_src_offset = 0;
+ trans->resolve_transfer = NULL;
if (trans->base.resource->target != PIPE_TEXTURE_3D &&
trans->base.resource->target != PIPE_TEXTURE_CUBE &&
diff --git a/src/gallium/drivers/virgl/virgl_texture.c b/src/gallium/drivers/virgl/virgl_texture.c
index f33b3f8808d..792ddc50ff9 100644
--- a/src/gallium/drivers/virgl/virgl_texture.c
+++ b/src/gallium/drivers/virgl/virgl_texture.c
@@ -112,63 +112,6 @@ static void virgl_init_temp_resource_from_box(struct pipe_resource *res,
}
}
-static void *texture_transfer_map_plain(struct pipe_context *ctx,
- struct pipe_resource *resource,
- unsigned level,
- unsigned usage,
- const struct pipe_box *box,
- struct pipe_transfer **transfer)
-{
- struct virgl_context *vctx = virgl_context(ctx);
- struct virgl_winsys *vws = virgl_screen(ctx->screen)->vws;
- struct virgl_resource *vtex = virgl_resource(resource);
- struct virgl_transfer *trans;
- enum virgl_transfer_map_type map_type;
- void *map_addr;
-
- trans = virgl_resource_create_transfer(vctx, resource,
- &vtex->metadata, level, usage, box);
- trans->resolve_transfer = NULL;
-
- assert(resource->nr_samples <= 1);
-
- map_type = virgl_resource_transfer_prepare(vctx, trans);
- switch (map_type) {
- case VIRGL_TRANSFER_MAP_REALLOC:
- if (!virgl_resource_realloc(vctx, vtex)) {
- map_addr = NULL;
- break;
- }
- vws->resource_reference(vws, &trans->hw_res, vtex->hw_res);
- /* fall through */
- case VIRGL_TRANSFER_MAP_HW_RES:
- trans->hw_res_map = vws->resource_map(vws, vtex->hw_res);
- if (trans->hw_res_map)
- map_addr = trans->hw_res_map + trans->offset;
- else
- map_addr = NULL;
- break;
- case VIRGL_TRANSFER_MAP_STAGING:
- map_addr = virgl_staging_map(vctx, trans);
- /* Copy transfers don't make use of hw_res_map at the moment. */
- trans->hw_res_map = NULL;
- break;
- case VIRGL_TRANSFER_MAP_ERROR:
- default:
- trans->hw_res_map = NULL;
- map_addr = NULL;
- break;
- }
-
- if (!map_addr) {
- virgl_resource_destroy_transfer(vctx, trans);
- return NULL;
- }
-
- *transfer = &trans->base;
- return map_addr;
-}
-
static void *texture_transfer_map_resolve(struct pipe_context *ctx,
struct pipe_resource *resource,
unsigned level,
@@ -221,8 +164,8 @@ static void *texture_transfer_map_resolve(struct pipe_context *ctx,
ctx->flush(ctx, NULL, 0);
}
- void *ptr = texture_transfer_map_plain(ctx, resolve_tmp, 0, usage, &dst_box,
- &trans->resolve_transfer);
+ void *ptr = virgl_resource_transfer_map(ctx, resolve_tmp, 0, usage, &dst_box,
+ &trans->resolve_transfer);
if (!ptr)
goto fail;
@@ -295,7 +238,7 @@ static void *virgl_texture_transfer_map(struct pipe_context *ctx,
return texture_transfer_map_resolve(ctx, resource, level, usage, box,
transfer);
- return texture_transfer_map_plain(ctx, resource, level, usage, box, transfer);
+ return virgl_resource_transfer_map(ctx, resource, level, usage, box, transfer);
}
static void flush_data(struct pipe_context *ctx,