WebGPU: Tipps und Lösungen zur Fehlerbehebung

François Beaufort
François Beaufort

In diesem Dokument wird erläutert, warum WebGPU im Chrome-Browser möglicherweise nicht funktioniert oder nicht wie erwartet funktioniert. Außerdem wird erläutert, wie sich die Probleme nach Möglichkeit beheben lassen.

Das folgende Beispiel zeigt einen JavaScript-Fehler, der möglicherweise auftritt, wenn gpu in navigator nicht verfügbar ist:

const adapter = await navigator.gpu.requestAdapter();
cancel Uncaught TypeError: Cannot read properties of undefined (reading 'requestAdapter')

Dies kann einen der folgenden Gründe haben. Schauen Sie sich diese in dieser Reihenfolge an:

  1. Für WebGPU ist Chrome 113 oder höher unter ChromeOS, macOS, Windows und Chrome 121 oder höher unter Android erforderlich. Prüfen Sie Ihre Version unter chrome://version und aktualisieren Sie sie bei Bedarf.

  2. WebGPU ist derzeit nicht für Service Worker oder freigegebene Worker zugänglich. Wenn Sie einen Service Worker oder einen Shared Worker verwenden, verschieben Sie Ihren WebGPU-Code in einen dedizierten Worker oder den globalen Fensterkontext.

  3. WebGPU ist nur in sicheren Kontexten zugänglich. Wenn Sie den Code über ein unsicheres Protokoll bereitstellen, z. B. http: oder file:, verwenden Sie entweder das sichere https:-Protokoll oder beheben Sie dieses Problem bei der Entwicklung der Webanwendung auf eine der folgenden Arten:

    • Stellen Sie Ihren Code mit einem der folgenden Befehle lokal auf http://localhost oder http://127.0.0.1 bereit: npx http-server oder python3 -m http.server.

    • Fügen Sie den Ursprung der Liste „Unsichere Ursprünge, die als sicher behandelt werden“ von chrome://flags/#unsafely-treat-insecure-origin-as-secure hinzu und starten Sie Chrome neu.

    • Installieren Sie Node.js und führen Sie npx servez --ssl aus, um Ihren Ordner über HTTPS mit einem fiktiven Zertifikat bereitzustellen. In Chrome wird weiterhin eine Warnung angezeigt, die Sie umgehen können, indem Sie auf „Erweitert“ und dann auf „Weiter zu...“ klicken.

    • Machen Sie Ihren lokalen Webserver mit ngrok im Internet sichtbar.

Der GPU-Adapter ist null

Das folgende Beispiel zeigt einen JavaScript-Fehler, der auftreten kann, wenn der Adapter, den Sie beim Aufrufen von requestAdapter() erhalten, null ist:

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
cancel Uncaught TypeError: Cannot read properties of undefined (reading requestDevice)

Dies kann einen der folgenden Gründe haben. Schauen Sie sich diese in dieser Reihenfolge an:

  1. WebGPU ist deaktiviert, wenn der Nutzer „Grafikbeschleunigung verwenden, wenn verfügbar“ in chrome://settings/system deaktiviert hat. Prüfe, ob diese Einstellung deaktiviert ist, und aktiviere sie dann wieder

  2. WebGPU wird auf dieser Plattform noch nicht unterstützt. Sie können das Flag chrome://flags/#enable-unsafe-webgpu aktivieren und Chrome neu starten. Für die experimentelle Linux-Unterstützung müssen Sie auch das Flag chrome://flags/#enable-vulkan aktivieren. Weitere Informationen finden Sie unter WebGPU-Unterstützung in Headless Chrome.

  3. Die GPU-Hardware wurde speziell auf die Sperrliste gesetzt. Wenn in chrome://gpu die Meldung „WebGPU wurde über die Sperrliste oder die Befehlszeile deaktiviert“ angezeigt wird, können Sie die Sperrliste für die WebGPU-Adapter deaktivieren. Aktivieren Sie dazu das Flag chrome://flags/#enable-unsafe-webgpu und starten Sie Chrome neu.

  4. Für die in requestAdapter() übergebenen Optionen gibt es keinen passenden GPU-Adapter. Rufe requestAdapter() über verschiedene Optionen an.

  5. WebGPU erfordert eine GPU (entweder hardware- oder softwareemuliert). Unter chrome://gpu kannst du prüfen, ob Chrome eine GPU erkennt.

WebGPU ist langsamer als WebGL

  1. Öffnen Sie chrome://gpu und prüfen Sie, ob „WebGPU: Hardware accelerated“ gelesen wird. Wenn „WebGPU: Software only, hardware acceleration kein“ steht, müssen Sie möglicherweise Ihre GPU-Treiber aktualisieren.

  2. Bei der direkten Übersetzung von WebGL-Konzepten in WebGPU werden die einzigartigen Optimierungen von WebGPU möglicherweise nicht optimal genutzt. Lesen Sie den Artikel Von WebGL zu WebGPU, um mehr über einige der Unterschiede zu erfahren.

Windows-spezifische Einschränkungen

Beachten Sie die folgenden Einschränkungen, wenn Sie WebGPU auf Windows-Geräten verwenden:

  • Chrome unterstützt nicht die gleichzeitige Verwendung mehrerer GPU-Adapter. Siehe Problem „chromium“:329211593.

  • Chrome verwendet immer denselben GPU-Adapter, der anderen Chrome-Arbeitslasten zugewiesen wurde. Bei Laptops ist dies aufgrund des Energieverbrauchs (z. B. Energiesparmodus) in der Regel die integrierte Grafikkarte. Das bedeutet, dass die Option powerPreference beim Aufrufen von requestAdapter() keine Auswirkungen hat.