Neuerungen bei der WebGPU (Chrome 127)

François Beaufort
François Beaufort

Experimenteller Support für OpenGL ES auf Android

Sie können jetzt über das OpenGL ES-Backend auf eine 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. Weitere Informationen finden Sie im folgenden Beispiel und in Issue dawn:1545.

// 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-Back-End auf dem Android-Gerät angezeigt.
OpenGL ES-Adapterinformationen unter 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“, „WebGPU Developer Features“ und „Enable command line on non-rooted devices“.
  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 anstelle von Vulkan zu verwenden, und starten Sie Chrome neu.

GPUAdapter-Attribut „info“

Identifikationsinformationen zu einem Adapter können jetzt synchron mit dem Attribut „GPUAdapter info“ abgerufen werden. 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 aus Chrome entfernt, damit Webentwickler genügend Zeit für die notwendige Umstellung haben. Weitere Informationen finden Sie im folgenden Beispiel, im Chrome-Status und in 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-Interoperabilität

Da WebAssembly-Haufen 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 Fehlermeldungen beim Befehls-Encoder

Einige von Befehlscodierungsprogrammen ausgelöste Validierungsfehler werden jetzt mit verbesserten Kontextinformationen versehen. Wenn Sie beispielsweise versucht haben, einen Compute-Pass zu starten, während ein Render-Pass noch geöffnet war, führte dies zum folgenden Fehler.

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)

Damit wird zwar der Grund für den Fehler beschrieben, aber nicht angegeben, welcher Aufruf tatsächlich den Validierungsfehler verursacht hat. Der folgende Fehler zeigt die verbesserte Fehlermeldung mit dem Befehl, der den Fehler ausgelöst hat. Siehe Änderung 192245.

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 stellt nicht mehr wgpuSurfaceGetPreferredFormat() bereit, das C-Äquivalent von Dawns wgpu::Surface::GetPreferredFormat(). Verwenden Sie stattdessen wgpu::Surface::GetCapabilities(), um eine Liste der unterstützten Formate abzurufen, und dann formats[0], um das für diese Oberfläche bevorzugte Texturformat abzurufen. Bis dahin wird beim Aufrufen von wgpu::Surface::GetPreferredFormat() eine Warnung zur Einstellung ausgegeben. Siehe Problem 290.

Die unterstützten Texturnutzungen 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. Eine vollständige Liste der Commits

Das ist neu bei WebGPU

Eine Liste aller Themen, die in der Reihe Was ist neu in WebGPU behandelt wurden.

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