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. 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
| Specification |
|---|
| WebGPU> # gpubuffer> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API