diff options
author | Alexandros Frantzis <[email protected]> | 2019-07-05 14:27:11 +0300 |
---|---|---|
committer | Chia-I Wu <[email protected]> | 2019-07-06 19:30:37 -0700 |
commit | e5b54d001897b44cc75c8d5ca15330fd9d26af8a (patch) | |
tree | 489bdda73f8856c3de987436f3fe201bebad1764 /src/gallium/drivers/virgl/virgl_texture.c | |
parent | f8975f8f2f51e265609d17875b6850c7b2ac5313 (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 <[email protected]>
Reviewed-by: Chia-I Wu <[email protected]>
Diffstat (limited to 'src/gallium/drivers/virgl/virgl_texture.c')
-rw-r--r-- | src/gallium/drivers/virgl/virgl_texture.c | 63 |
1 files changed, 3 insertions, 60 deletions
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, |