WebGPU: conseils et solutions de dépannage

François Beaufort
François Beaufort

Ce document explique pourquoi WebGPU peut ne pas fonctionner ou ne pas fonctionner comme prévu dans le navigateur Chrome, et fournit des étapes claires pour résoudre les problèmes, le cas échéant.

L'exemple suivant montre une erreur JavaScript que vous pouvez rencontrer 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. Vérifiez-les dans l'ordre suivant:

  1. WebGPU nécessite Chrome 113 ou version ultérieure sur ChromeOS, macOS et 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:, file:), utilisez le protocole https: sécurisé ou corrigez ce problème lors du développement de votre application Web de l'une des manières suivantes:

    • Servez votre code en local 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 à la liste "Origines non sécurisées traitées comme sécurisées" de 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 recevrez toujours un avertissement dans Chrome, que vous pourrez ignorer en cliquant sur "Avancé", puis sur "Accéder à…".

    • Exposez votre serveur Web local sur Internet avec ngrok.

L'adaptateur GPU est nul

Voici un exemple d'erreur JavaScript pouvant se produire lorsque l'adaptateur obtenu en appelant requestAdapter() est nul:

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. Vérifiez-les dans l'ordre suivant:

  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é, puis 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 la compatibilité expérimentale avec Linux, vous devez également activer l'indicateur chrome://flags/#enable-vulkan. Pour en savoir plus, consultez la page Compatibilité avec WebGPU dans Chrome sans tête.

  3. Le matériel du GPU a été ajouté à une liste de blocage spécifique. Si le message "WebGPU a été désactivé via la liste de blocage ou la ligne de commande" s'affiche dans chrome://gpu, vous pouvez désactiver la liste de blocage des adaptateurs WebGPU en activant le flag chrome://flags/#enable-unsafe-webgpu et en redémarrant Chrome.

  4. Aucun adaptateur GPU ne correspond aux options transmises dans requestAdapter(). Essayez d'appeler requestAdapter() avec différentes options.

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

  6. Le processus GPU a planté plusieurs fois. Vous pouvez actualiser la page ou redémarrer Chrome. Pour en savoir plus, consultez les bonnes pratiques concernant la perte d'appareil WebGPU.

WebGPU est plus lent que WebGL

  1. Ouvrez chrome://gpu et assurez-vous de pouvoir lire "WebGPU: accélération matérielle". Si vous voyez "WebGPU: logiciel uniquement, accélération matérielle indisponible", vous devrez peut-être mettre à jour les pilotes de votre GPU.

  2. La traduction directe des concepts WebGL vers WebGPU ne permet peut-être pas de profiter pleinement des optimisations uniques de WebGPU. Consultez De WebGL à WebGPU pour en savoir plus sur leurs différences.

Limites spécifiques à Windows

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

  • Chrome n'est pas compatible avec l'utilisation simultanée de plusieurs adaptateurs GPU. Voir le problème chromium:329211593.

  • Chrome utilise toujours la même carte graphique qui a été allouée aux 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 l'aspect consommation d'énergie (par exemple, économie d'énergie). Cela signifie que l'option powerPreference n'a aucun impact lors de l'appel de requestAdapter().