zink: explicitly use stream uploader for staging buffers

this requires adding an offset member to the transfer struct

Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9789>
This commit is contained in:
Mike Blumenkrantz
2020-12-10 16:00:46 -05:00
committed by Marge Bot
parent a3c65ffa3f
commit 8dd8754238
2 changed files with 9 additions and 3 deletions

View File

@@ -36,6 +36,7 @@
#include "util/u_transfer_helper.h" #include "util/u_transfer_helper.h"
#include "util/u_inlines.h" #include "util/u_inlines.h"
#include "util/u_memory.h" #include "util/u_memory.h"
#include "util/u_upload_mgr.h"
#include "frontend/sw_winsys.h" #include "frontend/sw_winsys.h"
@@ -615,7 +616,7 @@ zink_transfer_copy_bufimage(struct zink_context *ctx,
struct pipe_box box = trans->base.box; struct pipe_box box = trans->base.box;
int x = box.x; int x = box.x;
if (buf2img) if (buf2img)
box.x = src->obj->offset; box.x = src->obj->offset + trans->offset;
zink_copy_image_buffer(ctx, NULL, dst, src, trans->base.level, buf2img ? x : dst->obj->offset, zink_copy_image_buffer(ctx, NULL, dst, src, trans->base.level, buf2img ? x : dst->obj->offset,
box.y, box.z, trans->base.level, &box, trans->base.usage); box.y, box.z, trans->base.level, &box, trans->base.usage);
@@ -656,7 +657,11 @@ buffer_transfer_map(struct zink_context *ctx, struct zink_resource *res, unsigne
* mesa/mesa#2966 * mesa/mesa#2966
*/ */
trans->staging_res = pipe_buffer_create(&screen->base, 0, PIPE_USAGE_STAGING, res->base.width0); struct u_upload_mgr *mgr = ctx->base.stream_uploader;
u_upload_alloc(mgr, 0, box->width + box->x,
screen->info.props.limits.minMemoryMapAlignment, &trans->offset,
(struct pipe_resource **)&trans->staging_res, (void **)&ptr);
res = zink_resource(trans->staging_res); res = zink_resource(trans->staging_res);
} }
} }
@@ -845,7 +850,7 @@ zink_transfer_flush_region(struct pipe_context *pctx,
zink_flush_queue(ctx); zink_flush_queue(ctx);
if (ptrans->resource->target == PIPE_BUFFER) if (ptrans->resource->target == PIPE_BUFFER)
zink_copy_buffer(ctx, NULL, res, staging_res, box->x, box->x, box->width); zink_copy_buffer(ctx, NULL, res, staging_res, box->x, box->x + trans->offset, box->width);
else else
zink_transfer_copy_bufimage(ctx, res, staging_res, trans); zink_transfer_copy_bufimage(ctx, res, staging_res, trans);
} }

View File

@@ -102,6 +102,7 @@ struct zink_resource {
struct zink_transfer { struct zink_transfer {
struct pipe_transfer base; struct pipe_transfer base;
struct pipe_resource *staging_res; struct pipe_resource *staging_res;
unsigned offset;
}; };
static inline struct zink_resource * static inline struct zink_resource *