region.size = size;
struct zink_batch *batch = &ctx->batch;
- zink_batch_no_rp(ctx);
- zink_batch_reference_resource_rw(batch, src, false);
- zink_batch_reference_resource_rw(batch, dst, true);
util_range_add(&dst->base.b, &dst->valid_buffer_range, dst_offset, dst_offset + size);
zink_resource_buffer_barrier(ctx, src, VK_ACCESS_TRANSFER_READ_BIT, 0);
zink_resource_buffer_barrier(ctx, dst, VK_ACCESS_TRANSFER_WRITE_BIT, 0);
- VKCTX(CmdCopyBuffer)(batch->state->cmdbuf, src->obj->buffer, dst->obj->buffer, 1, ®ion);
+ VkCommandBuffer cmdbuf = get_cmdbuf(ctx, src, dst);
+ zink_batch_reference_resource_rw(batch, src, false);
+ zink_batch_reference_resource_rw(batch, dst, true);
+ VKCTX(CmdCopyBuffer)(cmdbuf, src->obj->buffer, dst->obj->buffer, 1, ®ion);
}
void
struct zink_resource *buf = dst->base.b.target == PIPE_BUFFER ? dst : src;
struct zink_batch *batch = &ctx->batch;
bool needs_present_readback = false;
- zink_batch_no_rp(ctx);
bool buf2img = buf == src;
region.imageExtent.width = src_box->width;
region.imageExtent.height = src_box->height;
+ /* never promote to unordered if swapchain was acquired */
+ VkCommandBuffer cmdbuf = needs_present_readback ? ctx->batch.state->cmdbuf : get_cmdbuf(ctx, buf, img);
zink_batch_reference_resource_rw(batch, img, buf2img);
zink_batch_reference_resource_rw(batch, buf, !buf2img);
* - vkCmdCopyBufferToImage spec
*/
if (buf2img)
- VKCTX(CmdCopyBufferToImage)(batch->state->cmdbuf, buf->obj->buffer, img->obj->image, img->layout, 1, ®ion);
+ VKCTX(CmdCopyBufferToImage)(cmdbuf, buf->obj->buffer, img->obj->image, img->layout, 1, ®ion);
else
- VKCTX(CmdCopyImageToBuffer)(batch->state->cmdbuf, img->obj->image, img->layout, buf->obj->buffer, 1, ®ion);
+ VKCTX(CmdCopyImageToBuffer)(cmdbuf, img->obj->image, img->layout, buf->obj->buffer, 1, ®ion);
}
if (needs_present_readback)
zink_kopper_present_readback(ctx, img);
region.extent.height = src_box->height;
struct zink_batch *batch = &ctx->batch;
- zink_batch_no_rp(ctx);
+ VkCommandBuffer cmdbuf = 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);
- VKCTX(CmdCopyImage)(batch->state->cmdbuf, src->obj->image, src->layout,
+ VKCTX(CmdCopyImage)(cmdbuf, src->obj->image, src->layout,
dst->obj->image, dst->layout,
1, ®ion);
} else if (dst->base.b.target == PIPE_BUFFER &&