Neuerungen bei der WebGPU (Chrome 127)

François Beaufort
François Beaufort

Experimentelle Unterstützung für OpenGL ES unter Android

Sie können jetzt über das OpenGL ES-Backend auf ein GPUAdapter zugreifen, wenn Sie in Chrome für Android den experimentellen WebGPU-Kompatibilitätsmodus anfordern. Das ist besonders nützlich für Android-Geräte, die Vulkan 1.1 oder höher nicht unterstützen. Hier finden Sie ein Beispiel.

// Request a GPUAdapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ compatibilityMode: true });
Auf der WebGPU-Berichtsseite werden GPUAdapter-Informationen aus dem OpenGL ES-Backend auf einem Android-Gerät angezeigt.
OpenGL ES-Adapterinformationen auf webgpureport.org

Da sich diese Funktion noch in der Testphase befindet, müssen Sie die folgenden Schritte ausführen:

  1. Aktivieren Sie die folgenden Chrome-Flags: „Unsafe WebGPU Support“ (Unsichere WebGPU-Unterstützung), „WebGPU Developer Features“ (WebGPU-Entwicklerfunktionen) und „Enable command line on non-rooted devices“ (Befehlszeile auf nicht gerooteten Geräten aktivieren).
  2. Aktivieren Sie das USB-Debugging auf Ihrem Android-Gerät.
  3. Verbinden Sie Ihr Android-Gerät mit Ihrer Workstation, führen Sie adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' aus, um das OpenGL ES-Backend gegenüber Vulkan zu bevorzugen, und starten Sie Chrome neu.

GPUAdapter-Attribut „info“

Das Abrufen von Identifikationsinformationen zu einem Adapter kann jetzt synchron mit dem GPUAdapter-Attribut info erfolgen. Bisher war der Aufruf der asynchronen GPUAdapter-Methode requestAdapterInfo() die einzige Möglichkeit, Adapterinformationen abzurufen. requestAdapterInfo() wurde jedoch aus der WebGPU-Spezifikation entfernt und wird im Laufe des Jahres auch aus Chrome entfernt, damit Webentwickler genügend Zeit für die erforderliche Umstellung haben. Sehen Sie sich das folgende Beispiel Chrome-Status und Problem 335383516 an.

const adapter = await navigator.gpu.requestAdapter();
const info = adapter.info;

// During the transition period, you can use the following:
// const info = adapter.info || await adapter.requestAdapterInfo();

console.log(`Vendor: ${info.vendor}`); // "arm"
console.log(`Architecture: ${info.architecture}`); // "valhall"

Verbesserungen bei der WebAssembly-Interop-Funktion

Da WebAssembly-Heaps direkt an WebGPU übergeben werden, sind die Größen der folgenden BufferSource-Argumente nicht mehr auf 2 GB beschränkt: dynamicOffsetsData in setBindGroup(), Quelle data in writeBuffer() und Quelle data Pin writeTexture(). Siehe Problem 339049388.

Verbesserte Fehlerbehebung bei der Befehlscodierung

Einige Validierungsfehler, die von Befehlscodierern ausgelöst werden, enthalten jetzt verbesserte Kontextinformationen. Wenn Sie beispielsweise versuchen, einen Compute-Pass zu starten, während ein Render-Pass noch geöffnet ist, wird der folgende Fehler ausgegeben.

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
    at CheckCurrentEncoder (..\..\third_party\dawn\src\dawn\native\EncodingContext.h:106)

Hier wird zwar der Grund für den Fehler beschrieben, aber nicht, welcher Aufruf den Validierungsfehler verursacht hat. Die folgende Fehlermeldung zeigt die verbesserte Benachrichtigung, die den Befehl enthält, der den Fehler ausgelöst hat. Weitere Informationen

Command cannot be recorded while [CommandEncoder (unlabeled)] is locked and [RenderPassEncoder (unlabeled)] is currently open.
 - While encoding [CommandEncoder (unlabeled)].BeginComputePass([ComputePassDescriptor]).

Dawn-Updates

Die C-API webgpu.h macht wgpuSurfaceGetPreferredFormat(), das C-Äquivalent von wgpu::Surface::GetPreferredFormat() von Dawn, nicht mehr verfügbar. Verwenden Sie stattdessen wgpu::Surface::GetCapabilities(), um die Liste der unterstützten Formate abzurufen, und dann formats[0], um das für diese Oberfläche bevorzugte Texturformat abzurufen. In der Zwischenzeit wird beim Aufrufen von wgpu::Surface::GetPreferredFormat() eine Warnung zur Einstellung ausgegeben. Siehe Problem 290.

Die unterstützten Texturverwendungen einer Oberfläche sind jetzt über wgpu::SurfaceCapabilities::usages verfügbar, wenn wgpu::Surface::GetCapabilities() aufgerufen wird. Sie müssen immer wgpu::TextureUsage::RenderAttachment enthalten. Siehe Problem 301.

Dies sind nur einige der wichtigsten Neuerungen. Vollständige Liste der Commits

Neues zu WebGPU

Eine Liste mit allen Themen, die in der Reihe Neu in WebGPU behandelt wurden.

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113