From 3d94144d3857c66889fe29ee94e059f0455481f6 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Sun, 13 Dec 2020 16:32:55 -0500 Subject: [PATCH] zink: add buffer_subdata hook this just sets some flags to help optimize mapping Reviewed-by: Erik Faye-Lund Part-of: --- src/gallium/drivers/zink/zink_resource.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 34b6fd4b448..44561d0843d 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -887,6 +887,28 @@ zink_transfer_unmap(struct pipe_context *pctx, slab_free(&ctx->transfer_pool, ptrans); } +static void +zink_buffer_subdata(struct pipe_context *ctx, struct pipe_resource *buffer, + unsigned usage, unsigned offset, unsigned size, const void *data) +{ + struct pipe_transfer *transfer = NULL; + struct pipe_box box; + uint8_t *map = NULL; + + usage |= PIPE_MAP_WRITE; + + if (!(usage & PIPE_MAP_DIRECTLY)) + usage |= PIPE_MAP_DISCARD_RANGE; + + u_box_1d(offset, size, &box); + map = zink_transfer_map(ctx, buffer, 0, usage, &box, &transfer); + if (!map) + return; + + memcpy(map, data, size); + zink_transfer_unmap(ctx, transfer); +} + static struct pipe_resource * zink_resource_get_separate_stencil(struct pipe_resource *pres) { @@ -1007,7 +1029,7 @@ zink_context_resource_init(struct pipe_context *pctx) pctx->transfer_unmap = u_transfer_helper_deinterleave_transfer_unmap; pctx->transfer_flush_region = u_transfer_helper_transfer_flush_region; - pctx->buffer_subdata = u_default_buffer_subdata; + pctx->buffer_subdata = zink_buffer_subdata; pctx->texture_subdata = u_default_texture_subdata; pctx->invalidate_resource = zink_resource_invalidate; }