diff --git a/src/gallium/drivers/zink/zink_blit.c b/src/gallium/drivers/zink/zink_blit.c index 9038efe7e2d..3cfd51dd50d 100644 --- a/src/gallium/drivers/zink/zink_blit.c +++ b/src/gallium/drivers/zink/zink_blit.c @@ -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, ®ion); @@ -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, ®ion, 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); }