summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/zink/zink_context.c
diff options
context:
space:
mode:
authorErik Faye-Lund <[email protected]>2019-11-08 12:53:43 +0100
committerErik Faye-Lund <[email protected]>2019-11-12 12:40:49 +0000
commite1c87bbb4bcaa9b5946bc88f9f5d7868372d8400 (patch)
tree57e71940b869a4694e5cab3e01f63d164fccee81 /src/gallium/drivers/zink/zink_context.c
parent935299188086c87e1ccb159cf9cf205a31c57468 (diff)
zink: implement buffer-to-buffer copies
Diffstat (limited to 'src/gallium/drivers/zink/zink_context.c')
-rw-r--r--src/gallium/drivers/zink/zink_context.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c
index 30d19c6ffa2..2be6ce351be 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -1510,6 +1510,18 @@ zink_resource_copy_region(struct pipe_context *pctx,
vkCmdCopyImage(batch->cmdbuf, src->image, src->layout,
dst->image, dst->layout,
1, &region);
+ } else if (dst->base.target == PIPE_BUFFER &&
+ src->base.target == PIPE_BUFFER) {
+ VkBufferCopy region;
+ region.srcOffset = src_box->x;
+ region.dstOffset = dstx;
+ region.size = src_box->width;
+
+ struct zink_batch *batch = zink_batch_no_rp(ctx);
+ zink_batch_reference_resoure(batch, src);
+ zink_batch_reference_resoure(batch, dst);
+
+ vkCmdCopyBuffer(batch->cmdbuf, src->buffer, dst->buffer, 1, &region);
} else
debug_printf("zink: TODO resource copy\n");
}