WebGPU: conseils et solutions de dépannage

François Beaufort
François Beaufort

Ce document explique pourquoi WebGPU peut être inutilisable ou ne fonctionne pas comme prévu dans le navigateur Chrome, et fournit des étapes claires pour résoudre les problèmes lorsque cela est possible.

L'exemple suivant illustre une erreur JavaScript que vous pouvez obtenir lorsque gpu n'est pas disponible dans navigator:

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

Cela peut être dû à l'une des raisons suivantes. Consultez-les dans cet ordre précis:

  1. WebGPU nécessite Chrome 113 ou une version ultérieure sur ChromeOS, macOS, Windows et Chrome 121 ou version ultérieure sur Android. Vérifiez votre version sur chrome://version et mettez-la à jour si nécessaire.

  2. WebGPU n'est accessible qu'aux contextes sécurisés. Si vous diffusez votre code via un protocole non sécurisé (par exemple, http: ou file:), utilisez le protocole sécurisé https: ou traitez ce problème lors du développement de votre application Web de l'une des manières suivantes:

    • Diffusez votre code localement sur http://localhost ou http://127.0.0.1 à l'aide de l'une des commandes suivantes: npx http-server ou python3 -m http.server.

    • Ajoutez l'origine à "Origines non sécurisées traitées comme sécurisées". lister les chrome://flags/#unsafely-treat-insecure-origin-as-secure, puis redémarrez Chrome.

    • Installez Node.js et exécutez npx servez --ssl pour diffuser votre dossier via HTTPS avec un faux certificat. Vous continuerez à recevoir un avertissement dans Chrome que vous pouvez ignorer en cliquant sur "Avancés" puis sur "Passer à...".

    • Exposez votre serveur Web local sur Internet à l'aide de ngrok.

L'adaptateur GPU est vide.

Voici un exemple d'erreur JavaScript que vous pouvez obtenir lorsque l'adaptateur que vous obtenez en appelant requestAdapter() a une valeur nulle:

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

Cela se produit pour l'une des raisons suivantes. Consultez-les dans cet ordre précis:

  1. WebGPU est désactivé lorsque l'utilisateur a désactivé l'option "Utiliser l'accélération graphique si disponible" dans chrome://settings/system. Vérifiez si ce paramètre est désactivé et réactivez-le

  2. WebGPU n'est pas encore compatible avec cette plate-forme. Vous pouvez activer l'indicateur chrome://flags/#enable-unsafe-webgpu et redémarrer Chrome. Pour bénéficier de la compatibilité expérimentale avec Linux, vous devez également activer l'indicateur chrome://flags/#enable-vulkan. Pour en savoir plus, consultez la page Compatibilité de WebGPU avec Chrome headless.

  3. Le matériel GPU a été spécifiquement ajouté à la liste de blocage. Si vous voyez le message "WebGPU has been disabled via blocklist or the command line" (WebGPU a été désactivé via une liste de blocage ou la ligne de commande) Dans chrome://gpu, vous pouvez désactiver la liste de blocage des adaptateurs WebGPU en activant l'option chrome://flags/#enable-unsafe-webgpu et en redémarrant Chrome.

  4. Aucun adaptateur GPU correspondant ne correspond aux options transmises dans requestAdapter(). Essayez d'appeler requestAdapter() avec d'autres options.

  5. WebGPU nécessite un GPU (matériel ou émulé par logiciel). Pour vérifier si Chrome détecte un GPU, accédez à chrome://gpu.

WebGPU est plus lent que WebGL

  1. Ouvrez chrome://gpu et vérifiez que vous pouvez lire "WebGPU: accélération matérielle". Si le message "WebGPU: logiciel uniquement, accélération matérielle non disponible" s'affiche, vous devrez peut-être mettre à jour vos pilotes de GPU.

  2. La traduction directe des concepts WebGL vers WebGPU peut ne pas tirer pleinement parti des optimisations uniques de WebGPU. Consultez la page De WebGL à WebGPU pour découvrir certaines de leurs différences.

Limites spécifiques à Windows

Tenez compte des limites suivantes lorsque vous utilisez WebGPU sur des appareils Windows:

  • Chrome ne permet pas d'utiliser plusieurs adaptateurs GPU simultanément. Consultez le problème chromium:329211593.

  • Chrome utilise toujours le même adaptateur GPU que celui qui a été alloué pour les autres charges de travail Chrome. Pour les ordinateurs portables, il s'agit généralement de la carte graphique intégrée, en raison de la consommation d'énergie (économie d'énergie, par exemple). Cela signifie que l'option powerPreference n'a aucune incidence lorsque vous appelez requestAdapter().