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 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 Problem 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“, „WebGPU Developer Features“ und „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 der Aufruf 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 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(). Problem 339049388 ansehen

Verbesserte Fehler bei der Befehlscodierung

Einige Validierungsfehler, die von Befehlscodierern ausgegeben 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 der Grund für den Fehler beschrieben, es wird jedoch nicht angegeben, welcher Aufruf den Validierungsfehler verursacht hat. Die folgende Fehlermeldung zeigt die verbesserte Benachrichtigung, die den Befehl enthält, der den Fehler ausgelöst hat. Änderung 192245

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

Änderungen bei Dawn

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 Einstellungswarnung ausgegeben. 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. Weitere Informationen

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

Neu bei WebGPU

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

Chrome 155–156

Chrome 153–154

Chrome 151–152

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