Neuerungen bei der WebGPU (Chrome 127)

François Beaufort
François Beaufort

Experimentelle Unterstützung von OpenGL ES unter Android

Du kannst jetzt über das OpenGL ES-Backend auf ein GPUAdapter zugreifen, wenn du den experimentellen WebGPU-Kompatibilitätsmodus in Chrome für Android anforderst. 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 });
<ph type="x-smartling-placeholder">
</ph> Die WebGPU-Berichtsseite zeigt GPUAdapter-Informationen aus dem OpenGL ES-Backend auf einem Android-Gerät an.
Informationen zum OpenGL ES-Adapter unter webgpureport.org

Da sich diese Funktion noch in der Testphase befindet, sind folgende Schritte erforderlich:

  1. Aktiviere die folgenden Chrome-Flags: „Unsafe WebGPU Support“, „WebGPU Developer Features“ und „Enable Command line on non-rooted devices“.
  2. USB-Debugging auf Ihrem Android-Gerät aktivieren
  3. Verbinde dein Android-Gerät mit deiner Workstation, führe adb shell 'echo "_ --use-webgpu-adapter=opengles" > /data/local/tmp/chrome-command-line' aus, um das OpenGL ES-Back-End gegenüber Vulkan vorzuziehen, und starte Chrome neu.

GPUAdapter-Informationsattribut

Mit dem GPUAdapter-Attribut info können jetzt synchron Informationen zu einem Adapter abgerufen werden. 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 im Laufe des Jahres in Chrome entfernt, damit Webentwicklern genügend Zeit für die erforderliche Umstellung bleibt. Beispiele: Chrome-Status und 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 der WebAssembly-Interoperabilität

Damit 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 Nummer 339049388.

Verbesserte Fehler im Befehls-Encoder

Einige von Befehls-Encodern ausgelöste Validierungsfehler enthalten jetzt verbesserte Kontextinformationen. Der Versuch, einen Compute-Pass zu starten, während eine Rendering-Karte noch geöffnet war, führte beispielsweise zu folgendem 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)

Hier wird der Grund für den Fehler beschrieben, aber nicht angegeben, welcher Aufruf tatsächlich den Validierungsfehler verursacht hat. Der folgende Fehler zeigt die verbesserte Meldung, die den Befehl enthält, 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]).

Updates zur Morgendämmerung

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

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

Hier werden nur einige der wichtigsten Vorteile behandelt. Vollständige Liste der Commits

Das ist neu bei WebGPU

Eine Liste aller behandelten Themen der Reihe What's New in WebGPU.

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