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 auf einen GPUAdapter aus dem OpenGL ES-Backend zugreifen, wenn Sie den experimentellen WebGPU-Kompatibilitätsmodus in Chrome für Android anfordern. Dies 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 Problem 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-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“, „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 und 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. Starten Sie Chrome neu.

GPUAdapter-Attribut „info“

Identifikationsinformationen zu einem Adapter können jetzt synchron mit dem GPUAdapter-Attribut info abgerufen werden. Bisher war der Aufruf der asynchronen GPUAdapter-Methode requestAdapterInfo() die einzige Möglichkeit, Adapterinformationen zu erhalten. requestAdapterInfo() wurde jedoch aus der WebGPU-Spezifikation entfernt und wird im Laufe dieses Jahres auch aus Chrome entfernt, damit Webentwickler genügend Zeit für die erforderliche 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 der WebAssembly-Interoperabilität

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(). Weitere Informationen finden Sie in Problem 339049388.

Verbesserte Fehlermeldungen für 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 angezeigt.

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 angegeben, welcher Aufruf den Validierungsfehler verursacht hat. Der folgende Fehler zeigt die verbesserte Meldung, die den Befehl enthält, der den Fehler ausgelöst hat. Weitere Informationen finden Sie in Ä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 webgpu.h C API stellt wgpuSurfaceGetPreferredFormat() nicht mehr zur Verfügung, das C-Äquivalent von Dawns wgpu::Surface::GetPreferredFormat(). 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 zu erhalten. In der Zwischenzeit wird beim Aufruf von wgpu::Surface::GetPreferredFormat() eine Warnung zur Einstellung ausgegeben. Weitere Informationen finden Sie in Problem 290.

Die unterstützten Texturverwendungen einer Oberfläche sind jetzt über wgpu::SurfaceCapabilities::usages verfügbar, wenn Sie wgpu::Surface::GetCapabilities() aufrufen. Sie sollten immer wgpu::TextureUsage::RenderAttachment enthalten. Weitere Informationen finden Sie in Problem 301.

Dies sind nur einige der wichtigsten Highlights. Eine vollständige Liste der Commits finden Sie hier.

Neues in WebGPU

Eine Liste aller Themen, die in der Reihe „Neues in WebGPU“ behandelt wurden.

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