zink: enable unordered blit/resolve ops

can't do swapchain or u_blitter ops, but these should be fine

Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17667>
This commit is contained in:
Mike Blumenkrantz 2022-07-14 22:27:22 -04:00 committed by Marge Bot
parent 731d7be375
commit 4cfa777e39
1 changed files with 10 additions and 9 deletions

View File

@ -58,12 +58,13 @@ blit_resolve(struct zink_context *ctx, const struct pipe_blit_info *info, bool *
*needs_present_readback = zink_kopper_acquire_readback(ctx, src);
struct zink_batch *batch = &ctx->batch;
zink_batch_no_rp(ctx);
zink_resource_setup_transfer_layouts(ctx, src, dst);
VkCommandBuffer cmdbuf = *needs_present_readback ?
ctx->batch.state->cmdbuf :
zink_get_cmdbuf(ctx, src, dst);
zink_batch_reference_resource_rw(batch, src, false);
zink_batch_reference_resource_rw(batch, dst, true);
zink_resource_setup_transfer_layouts(ctx, src, dst);
VkImageResolve region = {0};
region.srcSubresource.aspectMask = src->aspect;
@ -101,7 +102,7 @@ blit_resolve(struct zink_context *ctx, const struct pipe_blit_info *info, bool *
region.extent.width = info->dst.box.width;
region.extent.height = info->dst.box.height;
region.extent.depth = info->dst.box.depth;
VKCTX(CmdResolveImage)(batch->state->cmdbuf, src->obj->image, src->layout,
VKCTX(CmdResolveImage)(cmdbuf, src->obj->image, src->layout,
dst->obj->image, dst->layout,
1, &region);
@ -167,11 +168,13 @@ blit_native(struct zink_context *ctx, const struct pipe_blit_info *info, bool *n
*needs_present_readback = zink_kopper_acquire_readback(ctx, src);
struct zink_batch *batch = &ctx->batch;
zink_batch_no_rp(ctx);
zink_resource_setup_transfer_layouts(ctx, src, dst);
VkCommandBuffer cmdbuf = *needs_present_readback ?
ctx->batch.state->cmdbuf :
zink_get_cmdbuf(ctx, src, dst);
zink_batch_reference_resource_rw(batch, src, false);
zink_batch_reference_resource_rw(batch, dst, true);
zink_resource_setup_transfer_layouts(ctx, src, dst);
VkImageBlit region = {0};
region.srcSubresource.aspectMask = src->aspect;
region.srcSubresource.mipLevel = info->src.level;
@ -248,7 +251,7 @@ blit_native(struct zink_context *ctx, const struct pipe_blit_info *info, bool *n
}
assert(region.dstOffsets[0].z != region.dstOffsets[1].z);
VKCTX(CmdBlitImage)(batch->state->cmdbuf, src->obj->image, src->layout,
VKCTX(CmdBlitImage)(cmdbuf, src->obj->image, src->layout,
dst->obj->image, dst->layout,
1, &region,
zink_filter(info->filter));
@ -372,8 +375,6 @@ zink_blit(struct pipe_context *pctx,
util_blitter_blit(ctx->blitter, info);
}
end:
src->obj->unordered_read = false;
dst->obj->unordered_read = dst->obj->unordered_write = false;
if (needs_present_readback)
zink_kopper_present_readback(ctx, src);
}