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. sourceOffset
Optional-
Der Offset in Bytes im
source
, ab dem mit dem Kopieren begonnen wird. destination
-
Der
GPUBuffer
, in den kopiert wird. destinationOffset
Optional-
Der Offset in Bytes im
destination
, ab dem in den Buffer kopiert wird. size
Optional-
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.usage
enthält dasGPUBufferUsage.COPY_SRC
-Flag. - Der
destination
'sGPUBuffer.usage
enthält dasGPUBufferUsage.COPY_DST
-Flag. size
,sourceOffset
unddestinationOffset
sind alle Vielfache von 4.- Der
source
'sGPUBuffer.size
ist größer oder gleichsourceOffset
+size
. - Der
destination
'sGPUBuffer.size
ist größer oder gleichdestinationOffset
+size
. source
unddestination
sind unterschiedlicheGPUBuffer
s (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
Siehe auch
- Die WebGPU API