GPUCommandEncoder: copyBufferToBuffer()-Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
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 in einen anderen kopiert.
Syntax
copyBufferToBuffer(source, destination)
copyBufferToBuffer(source, destination, size)
copyBufferToBuffer(source, sourceOffset, destination, destinationOffset, size)
Parameter
source-
Der
GPUBuffer, von dem kopiert werden soll. sourceOffsetOptional-
Der Offset, in Bytes, ab dem im
sourcemit dem Kopieren begonnen wird. destination-
Der
GPUBuffer, in den kopiert werden soll. destinationOffsetOptional-
Der Offset, in Bytes, ab dem im
destinationmit dem Kopieren begonnen wird. sizeOptional-
Die Anzahl der Bytes, die kopiert werden sollen.
Hinweis:
Der sourceOffset und der destinationOffset können weggelassen werden, wenn Sie einen Teil des Quell-Puffers mit einem Offset von 0 in beiden Puffern kopieren. Der sourceOffset, destinationOffset und size können weggelassen werden, wenn Sie den gesamten Quell-Puffer in den Ziel-Puffer kopieren.
Rückgabewert
Keiner (undefined).
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn copyBufferToBuffer() aufgerufen wird. Andernfalls wird ein GPUValidationError erzeugt und der GPUCommandEncoder wird ungültig:
- Der
GPUBuffer.usagedessourceenthält dasGPUBufferUsage.COPY_SRC-Flag. - Der
GPUBuffer.usagedesdestinationenthält dasGPUBufferUsage.COPY_DST-Flag. size,sourceOffsetunddestinationOffsetsind alle Vielfache von 4.- Die
GPUBuffer.sizedessourceist größer oder gleichsourceOffset+size. - Die
GPUBuffer.sizedesdestinationist größer oder gleichdestinationOffset+size. sourceunddestinationsind verschiedeneGPUBuffer(es kann nicht vom gleichen Puffer aus und in denselben Puffer kopiert werden).
Beispiele
In unserem Basis-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
| Spezifikation |
|---|
| WebGPU> # dom-gpucommandencoder-copybuffertobuffer> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API