GPUCommandEncoder: copyBufferToBuffer() method
Khả dụng hạn chế
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Phương thức copyBufferToBuffer() của giao diện GPUCommandEncoder mã hóa một lệnh sao chép dữ liệu từ một GPUBuffer sang buffer khác.
Cú pháp
copyBufferToBuffer(source, destination)
copyBufferToBuffer(source, destination, size)
copyBufferToBuffer(source, sourceOffset, destination, destinationOffset, size)
Tham số
source-
GPUBuffernguồn để sao chép từ đó. sourceOffsetOptional-
Độ lệch, tính bằng byte, trong
sourcenơi bắt đầu sao chép. destination-
GPUBufferđích để sao chép tới. destinationOffsetOptional-
Độ lệch, tính bằng byte, trong
destinationnơi bắt đầu sao chép. sizeOptional-
Số byte cần sao chép.
Note:
sourceOffset và destinationOffset có thể được bỏ qua nếu bạn đang sao chép một phần của source buffer với độ lệch 0 ở cả source và destination. sourceOffset, destinationOffset, và size có thể được bỏ qua nếu bạn đang sao chép toàn bộ source buffer sang destination buffer.
Giá trị trả về
Không có (Undefined).
Kiểm tra hợp lệ
Các tiêu chí sau phải được đáp ứng khi gọi copyBufferToBuffer(), nếu không một GPUValidationError sẽ được tạo và GPUCommandEncoder trở nên không hợp lệ:
usagecủasourcebao gồm cờGPUBufferUsage.COPY_SRC.usagecủadestinationbao gồm cờGPUBufferUsage.COPY_DST.size,sourceOffset, vàdestinationOffsetđều là bội số của 4.GPUBuffer.sizecủasourcelớn hơn hoặc bằngsourceOffset+size.GPUBuffer.sizecủadestinationlớn hơn hoặc bằngdestinationOffset+size.sourcevàdestinationlà haiGPUBufferkhác nhau (bạn không thể sao chép từ và sang cùng một buffer).
Ví dụ
Trong bản demo compute cơ bản của chúng tôi, copyBufferToBuffer() được dùng để sao chép nội dung của outputBuffer sang stagingBuffer.
// …
// Tạo một output buffer để đọc các phép tính GPU, và một staging buffer để map cho JavaScript truy cập
const outputBuffer = 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,
});
// …
// Tạo GPUCommandEncoder để mã hóa các lệnh gửi tới GPU
const commandEncoder = device.createCommandEncoder();
// …
// Sao chép output buffer sang staging buffer
commandEncoder.copyBufferToBuffer(
outputBuffer,
0, // Độ lệch nguồn
stagingBuffer,
0, // Độ lệch đích
BUFFER_SIZE,
);
// Vì đang sao chép toàn bộ buffer, có thể rút gọn thành
// commandEncoder.copyBufferToBuffer(outputBuffer, stagingBuffer);
// …
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| WebGPU> # dom-gpucommandencoder-copybuffertobuffer> |