GPUBuffer

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.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Das GPUBuffer-Interface der WebGPU API repräsentiert einen Speicherblock, der zur Speicherung von Rohdaten verwendet werden kann, um GPU-Operationen auszuführen.

Eine GPUBuffer-Objektinstanz wird mit der GPUDevice.createBuffer()-Methode erstellt.

Instanzeigenschaften

label Experimentell

Ein String, der eine Bezeichnung bietet, die verwendet werden kann, um das Objekt zu identifizieren, zum Beispiel in GPUError-Meldungen oder Konsolenwarnungen.

mapState Experimentell Schreibgeschützt

Ein enumerierter Wert, der den abgebildeten Zustand des GPUBuffer darstellt.

size Experimentell Schreibgeschützt

Eine Zahl, die die Länge der Speicherzuweisung des GPUBuffer in Bytes repräsentiert.

usage Experimentell Schreibgeschützt

Die bitweisen Flags, die die zulässigen Verwendungen des GPUBuffer darstellen.

Instanzmethoden

destroy() Experimentell

Zerstört den GPUBuffer.

getMappedRange() Experimentell

Gibt einen ArrayBuffer zurück, der den abgebildeten Inhalt des GPUBuffer im angegebenen Bereich enthält.

mapAsync() Experimentell

Abbilden des angegebenen Bereichs des GPUBuffer. Gibt ein Promise zurück, das aufgelöst wird, wenn der Inhalt des GPUBuffer bereit ist, mit GPUBuffer.getMappedRange() zugegriffen zu werden.

unmap() Experimentell

Hebt die Abbildung des GPUBuffer-Bereichs auf, wodurch sein Inhalt wieder für die GPU-Nutzung verfügbar wird.

Beispiele

In unserem einfachen Berechnungs-Demo erstellen wir einen Ausgabepuffer, um GPU-Berechnungen zu lesen, und einen Staging-Puffer, der zur JavaScript-Zugriff abgebildet wird.

js
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 zu JavaScript zu lesen, damit sie dann in die Konsole protokolliert werden können:

js
// 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

Specification
WebGPU
# gpubuffer

Browser-Kompatibilität

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
GPUBuffer
Experimental
destroy
Experimental
getMappedRange
Experimental
label
Experimental
mapAsync
Experimental
mapState
Experimental
size
Experimental
unmap
Experimental
usage
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
In development. Supported in a pre-release version.
In development. Supported in a pre-release version.
No support
No support
Experimental. Expect behavior to change in the future.
See implementation notes.
User must explicitly enable this feature.
Has more compatibility info.

Siehe auch