GPUCommandEncoder: copyBufferToBuffer() Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Die copyBufferToBuffer()-Methode der GPUCommandEncoder-Schnittstelle kodiert einen Befehl, der Daten von einem GPUBuffer zu einem anderen kopiert.
Syntax
copyBufferToBuffer(source, destination)
copyBufferToBuffer(source, destination, size)
copyBufferToBuffer(source, sourceOffset, destination, destinationOffset, size)
Parameter
source-
Der
GPUBuffer, von dem kopiert wird. sourceOffsetOptional-
Der Offset in Bytes im
source, ab dem mit dem Kopieren begonnen wird. destination-
Der
GPUBuffer, in den kopiert wird. destinationOffsetOptional-
Der Offset in Bytes im
destination, ab dem in den Buffer kopiert wird. sizeOptional-
Die Anzahl der Bytes, die kopiert werden sollen.
Hinweis:
Der sourceOffset und destinationOffset können weggelassen werden, wenn Sie einen Teil des Quell-Buffers mit einem Offset von 0 in beiden Buffern kopieren. sourceOffset, destinationOffset und size können weggelassen werden, wenn Sie den gesamten Quell-Buffer in den Ziel-Buffer kopieren.
Rückgabewert
Keiner (Undefined).
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn copyBufferToBuffer() aufgerufen wird, sonst wird ein GPUValidationError erzeugt und der GPUCommandEncoder wird ungültig:
- Der
source'sGPUBuffer.usageenthält dasGPUBufferUsage.COPY_SRC-Flag. - Der
destination'sGPUBuffer.usageenthält dasGPUBufferUsage.COPY_DST-Flag. size,sourceOffsetunddestinationOffsetsind alle Vielfache von 4.- Der
source'sGPUBuffer.sizeist größer oder gleichsourceOffset+size. - Der
destination'sGPUBuffer.sizeist größer oder gleichdestinationOffset+size. sourceunddestinationsind unterschiedlicheGPUBuffers (Sie können nicht vom selben Buffer kopieren und zu diesem zurückkopieren).
Beispiele
In unserem einfachen Compute-Demo verwenden wir copyBufferToBuffer(), um den Inhalt unseres outputBuffer in den stagingBuffer zu kopieren.
// …
// Create an output buffer to read GPU calculations to, and a staging buffer to be mapped for JavaScript access
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,
});
// …
// Create GPUCommandEncoder to encode commands to issue to the GPU
const commandEncoder = device.createCommandEncoder();
// …
// Copy output buffer to staging buffer
commandEncoder.copyBufferToBuffer(
outputBuffer,
0, // Source offset
stagingBuffer,
0, // Destination offset
BUFFER_SIZE,
);
// Since we are copying the entire buffer, this can be shortened to
// commandEncoder.copyBufferToBuffer(outputBuffer, stagingBuffer);
// …
Spezifikationen
| Specification |
|---|
| WebGPU> # dom-gpucommandencoder-copybuffertobuffer> |
Browser-Kompatibilität
Loading…
Siehe auch
- Die WebGPU API