Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
GPUBuffer
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more support for this feature? Tell us why.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist in Web Workers verfügbar.
Die GPUBuffer-Schnittstelle der WebGPU API repräsentiert einen Speicherblock, der verwendet werden kann, um rohe Daten zu speichern, die in GPU-Operationen verwendet werden.
Eine GPUBuffer-Objektinstanz wird mit der Methode GPUDevice.createBuffer() erstellt.
Instanzeigenschaften
label-
Ein String, der ein Etikett bereitstellt, das verwendet werden kann, um das Objekt zu identifizieren, zum Beispiel in
GPUError-Meldungen oder Konsolenwarnungen. mapStateSchreibgeschützt-
Ein enumerierter Wert, der den abgebildeten Zustand des
GPUBufferdarstellt. sizeSchreibgeschützt-
Eine Zahl, die die Länge der Speicherzuweisung des
GPUBufferin Bytes darstellt. usageSchreibgeschützt-
Die Bitweise-Flags, die die erlaubten Verwendungen des
GPUBufferdarstellen.
Instanzmethoden
destroy()-
Zerstört den
GPUBuffer. getMappedRange()-
Gibt einen
ArrayBufferzurück, der die abgebildeten Inhalte desGPUBufferim angegebenen Bereich enthält. mapAsync()-
Bildet den angegebenen Bereich des
GPUBufferab. Gibt einPromisezurück, das gelöst wird, wenn der Inhalt desGPUBufferbereit ist, mitGPUBuffer.getMappedRange()zugegriffen zu werden. unmap()-
Hebt die Abbildung des abgebildeten Bereichs des
GPUBufferauf, damit sein Inhalt wieder von der GPU verwendet werden kann.
Beispiele
In unserem grundlegenden Berechnungsbeispiel erstellen wir einen Ausgabepuffer, um GPU-Berechnungen zu lesen, und einen Staging-Puffer, der für den Zugriff durch JavaScript abgebildet wird.
const output = 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,
});
Später, sobald der stagingBuffer die Ergebnisse der GPU-Berechnung enthält, wird eine Kombination von GPUBuffer-Methoden verwendet, um die Daten zurück an JavaScript zu lesen, damit sie in der Konsole protokolliert werden können:
GPUBuffer.mapAsync()wird verwendet, um denGPUBufferzum Lesen abzubilden.GPUBuffer.getMappedRange()wird verwendet, um einenArrayBufferzurückzugeben, der den Inhalt desGPUBufferenthält.GPUBuffer.unmap()wird verwendet, um denGPUBufferwieder aufzuheben, sobald wir den Inhalt nach Bedarf in JavaScript gelesen haben.
// map staging buffer to read results back to JS
await stagingBuffer.mapAsync(
GPUMapMode.READ,
0, // Offset
BUFFER_SIZE, // Length
);
const copyArrayBuffer = stagingBuffer.getMappedRange(0, BUFFER_SIZE);
const data = copyArrayBuffer.slice(0);
stagingBuffer.unmap();
console.log(new Float32Array(data));
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # gpubuffer> |
Browser-Kompatibilität
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Siehe auch
- Die WebGPU API