GPUCommandEncoder: copyBufferToBuffer()-Methode
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
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 wird. sourceOffset
Optional-
Der Offset in Bytes in den
source
, ab dem das Kopieren beginnt. destination
-
Der
GPUBuffer
, in den kopiert wird. destinationOffset
Optional-
Der Offset in Bytes in den
destination
, ab dem das Kopieren beginnt. size
Optional-
Die Anzahl der Bytes, die kopiert werden sollen.
Hinweis:
Der sourceOffset
und destinationOffset
können weggelassen werden, wenn ein Teil des Quellpuffers mit einem 0
-Offset in beiden Puffern kopiert wird. sourceOffset
, destinationOffset
und size
können weggelassen werden, wenn der gesamte Quellpuffer in den Zielpuffer kopiert wird.
Rückgabewert
Keiner (Undefined
).
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn copyBufferToBuffer()
aufgerufen wird, andernfalls wird ein GPUValidationError
generiert und der GPUCommandEncoder
wird ungültig:
- Die
GPUBuffer.usage
dessource
enthält dasGPUBufferUsage.COPY_SRC
-Flag. - Die
GPUBuffer.usage
desdestination
enthält dasGPUBufferUsage.COPY_DST
-Flag. size
,sourceOffset
unddestinationOffset
sind Vielfache von 4.- Die
GPUBuffer.size
dessource
ist größer als oder gleichsourceOffset
+size
. - Die
GPUBuffer.size
desdestination
ist größer als oder gleichdestinationOffset
+size
. source
unddestination
sind unterschiedlicheGPUBuffer
s (man kann nicht von und zu demselben Puffer kopieren).
Beispiele
In unserem basic 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
Siehe auch
- Die WebGPU API