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.
navigator.gpu ist nicht definiert
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:
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.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.
WebGPU ist nur in sicheren Kontexten zugänglich. Wenn Sie den Code über ein unsicheres Protokoll bereitstellen, z. B.
http:
oderfile:
, verwenden Sie entweder das sicherehttps:
-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
oderhttp://127.0.0.1
bereit:npx http-server
oderpython3 -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:
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 wiederWebGPU 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 Flagchrome://flags/#enable-vulkan
aktivieren. Weitere Informationen finden Sie unter WebGPU-Unterstützung in Headless Chrome.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 Flagchrome://flags/#enable-unsafe-webgpu
und starten Sie Chrome neu.Für die in
requestAdapter()
übergebenen Optionen gibt es keinen passenden GPU-Adapter. RuferequestAdapter()
über verschiedene Optionen an.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
Ö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.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 vonrequestAdapter()
keine Auswirkungen hat.