GPUCommandEncoder: copyBufferToBuffer() 方法
copyBufferToBuffer()
方法是 GPUCommandEncoder
接口的一个方法,它用于编码将数据从一个 GPUBuffer
复制到另一个 GPUBuffer
的命令。
语法
js
copyBufferToBuffer(source, sourceOffset, destination, destinationOffset, size)
参数
source
-
要从中复制的
GPUBuffer
。 sourceOffset
-
以字节为单位的偏移量,表示从
source
中开始复制的位置。 destination
-
要复制到的
GPUBuffer
。 destinationOffset
-
在
destination
中开始复制到的偏移量(以字节为单位)。 size
-
要复制的字节数。
返回值
无 (Undefined
)。
验证
调用 copyBufferToBuffer()
时必须满足以下条件,否则会生成 GPUValidationError
并且 GPUCommandEncoder
将变为无效
source
的GPUBuffer.usage
包含GPUBufferUsage.COPY_SRC
标志。destination
的GPUBuffer.usage
包含GPUBufferUsage.COPY_DST
标志。size
、sourceOffset
和destinationOffset
都是 4 的倍数。source
的GPUBuffer.size
大于或等于sourceOffset
+size
。destination
的GPUBuffer.size
大于或等于destinationOffset
+size
。source
和destination
是不同的GPUBuffer
(不能从同一个缓冲区复制到同一个缓冲区)。
示例
在我们 基本的计算演示 中,我们使用 copyBufferToBuffer()
将 output
缓冲区的内容复制到 stagingBuffer
。
js
// ...
// Create an output buffer to read GPU calculations to, and a staging buffer to be mapped for JavaScript access
const output = device.createBuffer({
size: BUFFER_SIZE,
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});
const stagingBuffer = device.createBuffer({
size: BUFFER_SIZE,
usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,
});
// ...
// Create GPUCommandEncoder to encode commands to issue to the GPU
const commandEncoder = device.createCommandEncoder();
// ...
// Copy output buffer to staging buffer
commandEncoder.copyBufferToBuffer(
output,
0, // Source offset
stagingBuffer,
0, // Destination offset
BUFFER_SIZE,
);
// ...
规范
规范 |
---|
WebGPU # dom-gpucommandencoder-copybuffertobuffer |
浏览器兼容性
BCD 表格仅在浏览器中加载