跳到主要内容

:material-chevron-right-circle: vkCmdCopyBuffer

函数原型

void vkCmdCopyBuffer(
VkCommandBuffer commandBuffer,
VkBuffer srcBuffer,
VkBuffer dstBuffer,
uint32_t regionCount,
const VkBufferCopy* pRegions);

描述

在两个buffer缓冲区之间复制数据 。

参数

  • commandBuffer : 录制指令的命令缓冲区。
  • srcBuffer : 源缓冲区,必须有 VK_BUFFER_USAGE_TRANSFER_SRC_BIT。
  • dstBuffer : 目标缓冲区,必须有 VK_BUFFER_USAGE_TRANSFER_DST_BIT。
  • regionCount : 要复制的区域数量(通常为 1)。
  • pRegions : 指向一个或多个 VkBufferCopy 结构体,定义了每个 copy 的偏移和大小。

补充

VkBufferCopy 结构体定义:

typedef struct VkBufferCopy {
VkDeviceSize srcOffset; // 源缓冲区偏移
VkDeviceSize dstOffset; // 目标缓冲区偏移
VkDeviceSize size; // 要复制的字节数
} VkBufferCopy;

返回值

代码示例

VkBufferCopy copyRegion = {
.srcOffset = 0,
.dstOffset = 0,
.size = 1024 // 复制 1024 字节
};

vkCmdCopyBuffer(
commandBuffer,
stagingBuffer,
vertexBuffer,
1,
&copyRegion
);