GPUBuffer
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.
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. mapState
Schreibgeschützt-
Ein enumerierter Wert, der den abgebildeten Zustand des
GPUBuffer
darstellt. size
Schreibgeschützt-
Eine Zahl, die die Länge der Speicherzuweisung des
GPUBuffer
in Bytes darstellt. usage
Schreibgeschützt-
Die Bitweise-Flags, die die erlaubten Verwendungen des
GPUBuffer
darstellen.
Instanzmethoden
destroy()
-
Zerstört den
GPUBuffer
. getMappedRange()
-
Gibt einen
ArrayBuffer
zurück, der die abgebildeten Inhalte desGPUBuffer
im angegebenen Bereich enthält. mapAsync()
-
Bildet den angegebenen Bereich des
GPUBuffer
ab. Gibt einPromise
zurück, das gelöst wird, wenn der Inhalt desGPUBuffer
bereit ist, mitGPUBuffer.getMappedRange()
zugegriffen zu werden. unmap()
-
Hebt die Abbildung des abgebildeten Bereichs des
GPUBuffer
auf, 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 denGPUBuffer
zum Lesen abzubilden.GPUBuffer.getMappedRange()
wird verwendet, um einenArrayBuffer
zurückzugeben, der den Inhalt desGPUBuffer
enthält.GPUBuffer.unmap()
wird verwendet, um denGPUBuffer
wieder 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
Specification |
---|
WebGPU # gpubuffer |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API