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 eine GPUAdapter zugreifen, wenn Sie den experimentellen WebGPU-Kompatibilitätsmodus in Chrome für Android anfordern. Das ist besonders nützlich für Android-Geräte, die Vulkan 1.1 oder höher nicht unterstützen. Sehen Sie sich das folgende Beispiel und issue dawn:1545 an.

// 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 identifizierenden Informationen zu einem Adapter kann jetzt synchron mit dem GPUAdapter-Attribut info erfolgen. Bisher war das Aufrufen der asynchronen GPUAdapter-Methode requestAdapterInfo() die einzige Möglichkeit, Adapterinformationen abzurufen. requestAdapterInfo() wurde jedoch aus der WebGPU-Spezifikation entfernt und wird später in diesem Jahr auch in Chrome entfernt, um Webentwicklern genügend Zeit für die erforderliche Umstellung zu geben. Weitere Informationen finden Sie im folgenden Beispiel, im Chrome-Status und im Problem 335383516.

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(), source data in writeBuffer() und source data Pin writeTexture(). Siehe Problem 339049388.

Verbesserte Fehlermeldungen für den Befehlscodierer

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 Highlights. Vollständige Liste der Commits

Neuigkeiten zu WebGPU

Eine Liste aller Themen, die in der Reihe What's New in WebGPU behandelt wurden.

Chrome 149–150

Chrome 147–148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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