WebGPU: conseils et solutions de dépannage

François Beaufort
François Beaufort

Ce document explique pourquoi WebGPU peut être inopérant ou ne pas fonctionner comme prévu dans le navigateur Chrome, en indiquant clairement comment résoudre les problèmes dans la mesure du possible.

L'exemple suivant présente 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')

L'une des raisons suivantes peut expliquer ce problème. Consultez-les dans cet ordre spécifique:

  1. WebGPU nécessite Chrome 113 ou version ultérieure sous 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 actuellement pas accessible depuis un service worker ou un worker partagé. Si vous utilisez un service worker ou un worker partagé, déplacez votre code WebGPU vers un nœud de calcul dédié ou le contexte de fenêtre globale.

  3. WebGPU n'est accessible que pour les 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 résolvez 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 à 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. Un avertissement continuera de s'afficher dans Chrome. Vous pouvez contourner cette éventualité en cliquant sur "Paramètres avancés", puis sur "Continuer à".

    • Exposez votre serveur Web local à Internet avec ngrok.

L'adaptateur GPU est nul

Voici un exemple d'erreur JavaScript que vous pouvez rencontrer 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 peut se produire pour l'une des raisons suivantes. Consultez-les dans cet ordre spécifique:

  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 prise en charge expérimentale de Linux, vous devez également activer l'indicateur chrome://flags/#enable-vulkan. Pour en savoir plus, consultez Compatibilité de WebGPU dans Chrome sans interface graphique.

  3. Le matériel GPU a été spécifiquement ajouté à la liste de blocage. 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 l'indicateur chrome://flags/#enable-unsafe-webgpu et en redémarrant Chrome.

  4. Il n'existe aucun adaptateur GPU correspondant pour les options transmises dans requestAdapter(). Essayez d'appeler requestAdapter() avec d'autres options.

  5. WebGPU nécessite un GPU (émulé matériel ou 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 assurez-vous que vous pouvez lire "WebGPU: accélération matérielle". Si vous lisez "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 en WebGPU ne permet peut-être pas de tirer pleinement parti des optimisations uniques de WebGPU. Consultez De WebGL à WebGPU pour en savoir plus sur leurs différences.

Limites propres à Windows

Tenez compte des limites suivantes lors de l'utilisation de WebGPU sur les appareils Windows:

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

  • Chrome utilise toujours le même adaptateur GPU que celui 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 (par exemple, économie d'énergie). Cela signifie que l'option powerPreference n'a aucune incidence lorsque vous appelez requestAdapter().