zink: force scanout sync when mapping scanout resource
this is just for unit tests where the scanout object is redundant and
the only time a flush occurs is from stalling on readback
Fixes: 104603fa76
("zink: create separate linear tiling image for scanout")
Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10239>
This commit is contained in:
parent
2138aef7c9
commit
874535752b
|
@ -1003,8 +1003,17 @@ zink_transfer_map(struct pipe_context *pctx,
|
||||||
|
|
||||||
if (usage & PIPE_MAP_READ) {
|
if (usage & PIPE_MAP_READ) {
|
||||||
zink_transfer_copy_bufimage(ctx, staging_res, res, trans);
|
zink_transfer_copy_bufimage(ctx, staging_res, res, trans);
|
||||||
|
/* TODO: remove for wsi */
|
||||||
|
struct zink_resource *scanout = NULL;
|
||||||
|
if (res->scanout_obj) {
|
||||||
|
scanout = ctx->flush_res;
|
||||||
|
ctx->flush_res = res;
|
||||||
|
}
|
||||||
/* need to wait for rendering to finish */
|
/* need to wait for rendering to finish */
|
||||||
zink_fence_wait(pctx);
|
zink_fence_wait(pctx);
|
||||||
|
/* TODO: remove for wsi */
|
||||||
|
if (res->scanout_obj)
|
||||||
|
ctx->flush_res = scanout;
|
||||||
}
|
}
|
||||||
|
|
||||||
ptr = base = map_resource(screen, staging_res);
|
ptr = base = map_resource(screen, staging_res);
|
||||||
|
@ -1019,10 +1028,19 @@ zink_transfer_map(struct pipe_context *pctx,
|
||||||
if (zink_resource_has_usage(res, ZINK_RESOURCE_ACCESS_READ))
|
if (zink_resource_has_usage(res, ZINK_RESOURCE_ACCESS_READ))
|
||||||
resource_sync_reads(ctx, res);
|
resource_sync_reads(ctx, res);
|
||||||
if (zink_resource_has_usage(res, ZINK_RESOURCE_ACCESS_RW)) {
|
if (zink_resource_has_usage(res, ZINK_RESOURCE_ACCESS_RW)) {
|
||||||
|
/* TODO: remove for wsi */
|
||||||
|
struct zink_resource *scanout = NULL;
|
||||||
|
if (res->scanout_obj) {
|
||||||
|
scanout = ctx->flush_res;
|
||||||
|
ctx->flush_res = res;
|
||||||
|
}
|
||||||
if (usage & PIPE_MAP_READ)
|
if (usage & PIPE_MAP_READ)
|
||||||
resource_sync_writes_from_batch_usage(ctx, res);
|
resource_sync_writes_from_batch_usage(ctx, res);
|
||||||
else
|
else
|
||||||
zink_fence_wait(pctx);
|
zink_fence_wait(pctx);
|
||||||
|
/* TODO: remove for wsi */
|
||||||
|
if (res->scanout_obj)
|
||||||
|
ctx->flush_res = scanout;
|
||||||
}
|
}
|
||||||
VkImageSubresource isr = {
|
VkImageSubresource isr = {
|
||||||
res->aspect,
|
res->aspect,
|
||||||
|
|
Loading…
Reference in New Issue