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
Loading…
Siehe auch
- Die WebGPU API