WebGPU: Tipps und Lösungen zur Fehlerbehebung

François Beaufort
François Beaufort

In diesem Dokument wird erläutert, warum die WebGPU im Chrome-Browser möglicherweise nicht funktioniert oder nicht wie erwartet funktioniert. Es werden klar verständlich erklärt, wie sich die Probleme nach Möglichkeit beheben lassen.

Das folgende Beispiel zeigt einen JavaScript-Fehler, der auftreten kann, 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. Sieh dir die Videos 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. Überprüfen Sie Ihre Version unter chrome://version und aktualisieren Sie sie bei Bedarf.

  2. WebGPU ist nur in sicheren Kontexten zugänglich. Wenn Sie Ihren Code über ein unsicheres Protokoll (z. B. http: oder file:) bereitstellen, verwenden Sie entweder das sichere https:-Protokoll oder beheben Sie dieses bei der Entwicklung Ihrer 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 zu „Als sicher behandelte unsichere Ursprünge“ hinzu. Liste chrome://flags/#unsafely-treat-insecure-origin-as-secure und starten Sie Chrome neu.

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

    • Machen Sie Ihren lokalen Webserver mit ngrok im Internet verfügbar.

Der GPU-Adapter ist null

Das folgende Beispiel zeigt einen JavaScript-Fehler, der auftreten kann, wenn der Adapter, den Sie durch den Aufruf 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 geschieht aus einem der folgenden Gründe. Sieh dir die Videos in dieser Reihenfolge an:

  1. WebGPU ist deaktiviert, wenn der Nutzer die Option „Grafikbeschleunigung verwenden, falls verfügbar“ deaktiviert hat in „chrome://settings/system“. 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 die Meldung „WebGPU has been disabled via blocklist or the Befehlszeile“ (WebGPU wurde über die Sperrliste oder die Befehlszeile deaktiviert) angezeigt wird in chrome://gpu kannst du die Sperrliste der WebGPU-Adapter deaktivieren, indem du das Flag chrome://flags/#enable-unsafe-webgpu aktivierst und Chrome neu startest.

  4. Für die in requestAdapter() übergebenen Optionen gibt es keinen passenden GPU-Adapter. Versuche, requestAdapter() mit verschiedenen Optionen anzurufen.

  5. Für WebGPU ist eine GPU erforderlich (entweder hardware- oder softwareemuliert). Unter chrome://gpu können Sie prüfen, ob Chrome eine GPU erkennt.

WebGPU ist langsamer als WebGL

  1. Öffne chrome://gpu und prüfe, ob du „WebGPU: Hardware accelerated“ lesen kannst. Wenn Sie „WebGPU: Software only, hardware acceleration longer“ (WebGPU: Nur Software, Hardwarebeschleunigung nicht verfügbar) lesen, 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 voll ausgenutzt. Unter Von WebGL zu WebGPU erfahren Sie mehr über die Unterschiede.

Windows-spezifische Einschränkungen

Beachten Sie bei der Verwendung von WebGPU auf Windows-Geräten die folgenden Einschränkungen:

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

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