- WebGPU est officiellement pris en charge dans la version Windows de Firefox 141 après une longue période de développement
- WebGPU est une interface GPU basée sur le web destinée au traitement graphique moderne et au calcul haute performance, et devrait nettement élever le niveau des jeux, de la visualisation et du calcul local
- L’implémentation de WebGPU dans Firefox est construite sur la bibliothèque WGPU basée sur Rust, avec la prise en charge de plusieurs backends comme Direct3D 12, Metal et Vulkan
- Pour l’instant, l’activation officielle ne concerne que Windows ; la prise en charge de Mac, Linux et Android est prévue par la suite
- Des travaux supplémentaires restent encore à mener, notamment sur les performances et la conformité au standard
Ce que signifie la prise en charge de WebGPU sur Windows
- Développé pendant de longues années, WebGPU est désormais intégré officiellement à Firefox 141 dans l’environnement Windows
- WebGPU est un standard moderne qui permet aux contenus web d’interagir directement avec le GPU de l’utilisateur afin d’offrir des graphiques haute performance et du calcul parallèle
- Cette technologie devrait considérablement repousser les limites de performance dans des domaines variés comme les jeux web, la visualisation de données et le machine learning
- Il est possible d’apprendre et de s’exercer via le tutoriel WebGPU, les exemples WebGPU et la documentation MDN
- WebGPU est défini par le standard WebGPU du W3C et le standard WGSL ; Mozilla participe activement au processus de standardisation depuis 2017
État de WebGPU selon les navigateurs
- Dans Chrome, la prise en charge de WebGPU existe déjà depuis 2023
- Dans Safari 26, la sortie est prévue cet automne
- Firefox 141 ne prend officiellement en charge que Windows pour le moment, avec une extension prévue à Mac/Linux/Android dans de futures mises à jour
- Dans la version Firefox Nightly, il était jusqu’à présent possible d’utiliser WebGPU à titre expérimental sur toutes les plateformes sauf Android
Implémentation de WebGPU dans Firefox
- Le WebGPU de Firefox a été développé sur la base de la bibliothèque open source Rust WGPU
- WGPU se connecte à des API graphiques bas niveau comme Direct3D 12, Metal et Vulkan, adaptées au matériel de différentes plateformes
- Mozilla est l’un des principaux contributeurs au projet WGPU
- Pour les développeurs Rust, la meilleure porte d’entrée pour contribuer au WebGPU de Firefox est de commencer par le projet WGPU
- WGPU est aussi largement utilisé en dehors de Firefox et bénéficie d’une communauté active
Principaux défis et travaux d’amélioration
- WebGPU est une API vaste et complexe ; jusqu’à présent, la stabilisation s’est concentrée sur les principales démos et les cas d’usage réels
- Domaines nécessitant des améliorations supplémentaires :
- Résoudre la baisse de performances causée par l’IPC non bufferisé avec le processus sandbox GPU (bug 1968122, amélioration des performances prévue dans Firefox 142)
- La détection de la fin des tâches GPU uniquement via un timer à intervalle augmente la latence d’attente (bug 1870699, une meilleure approche est en cours de développement)
- L’absence de prise en charge de importExternalTexture empêche la lecture directe des données vidéo du décodeur vers le GPU (bug 1827116, développement en cours)
- En cas de problème en usage réel, il est nécessaire de le signaler en joignant des détails dans le composant WebGPU de Bugzilla
Suite du programme
- Après Windows, la prise en charge officielle sera étendue à Mac, Linux puis Android
- Des améliorations continues sont prévues en matière de performances, de compatibilité et de conformité au standard
- La prise en charge officielle de WebGPU devrait ouvrir de nouvelles possibilités pour les applications web
1 commentaires
Avis Hacker News
C’est une nouvelle vraiment enthousiasmante, félicitations à l’équipe Firefox
Mon entreprise travaille à faire tourner Unreal dans le navigateur, et nous avons construit un RHI WebGPU personnalisé adapté à Unreal Engine 5
Pour ceux qui veulent voir une démo technique par eux-mêmes, voir les liens ci-dessous
(cela ne fonctionne que sur les navigateurs de bureau basés sur Chromium et sur certains téléphones Android)
Cropout : https://play-dev.simplystream.com/?token=aa91857c-ab14-4c24-963a-36203784474b
Configurateur auto : https://garage.cjponyparts.com/
Testé sur Firefox 142 (nightly)
Cropout est resté longtemps bloqué à 0 % avec plus de 1 200 requêtes réseau
Au final, ça charge jusqu’au menu, mais l’arrière-plan est noir et seuls les éléments d’interface sont visibles
Il y avait beaucoup d’erreurs lors de l’analyse des shaders, ainsi que d’autres erreurs diverses
Le configurateur auto affiche plusieurs erreurs, reste bloqué à 0 % et ne charge pas
Un message indique : « fichiers du jeu manquants, impossible d’initialiser les shaders globaux et le contenu »
J’aurais aimé que ce soit partagé après au moins un minimum de tests sur Firefox aussi
Il est indiqué que cela « ne fonctionne que sur les navigateurs basés sur Chromium », mais comme ce post parle précisément du WebGPU de Firefox,
je me demande si vous prévoyez de tester ou de publier une version compatible avec Firefox
En lançant « cropout » sur Chrome Android sur un Pixel 7a, ça reste bloqué à 0 %
Le « configurateur auto » progresse jusqu’à 97–98 %, mais n’avance plus ensuite
Je me demande si cela fonctionne sur Windows avec Firefox 141
Sinon, j’aimerais savoir pourquoi
Sur Google Chrome pour macOS, le premier lien est resté bloqué à 0 % sans bouger,
et la deuxième démo s’est arrêtée à 98 % ou 97 %
Le même phénomène s’est produit aussi sur Safari
En voyant l’état actuel des API graphiques, j’ai presque l’impression qu’on a régressé par rapport à l’époque d’OpenGL
J’ai l’impression que les API modernes n’apportent ni vraie simplicité d’usage, ni véritable portabilité, ni vrai cross-platform
Construire des wrappers personnalisés pour différents backends graphiques comme Vulkan, Metal ou DirectX12 ressemble plutôt à une perte de temps
Ça donne un peu l’impression de revenir aux tableaux de
charà la place des chaînes pour gagner en performanceJe ne sais pas quelle promesse a été faite, ni par qui
Le but d’une API graphique a toujours été avant tout d’envoyer du code et des données au GPU aussi vite que possible, pas de privilégier l’expérience développeur
Je trouve que WebGPU encapsule plutôt bien le calcul et le rendu dans le navigateur
Ce n’est pas encore parfait, mais à mon avis c’est plus intuitif et plus facile à explorer que WebGL ou OpenGL
Je ne vois pas vraiment le problème
Il existe depuis longtemps des API bas niveau dans la pile graphique (par exemple Gallium dans Mesa), et maintenant elles sont standardisées et choisies directement par les utilisateurs
Les API haut niveau existent toujours, et OpenGL reste pris en charge sur des plateformes raisonnables
WebGPU était aussi tout à fait utilisable en code natif
Le vrai manque de portabilité de ces API bas niveau est presque entièrement dû à Apple et aux fabricants de consoles
Cela dit, on n’attendait de toute façon pas vraiment de coopération de la part des fabricants de consoles
La leçon tirée de l’ère OpenGL, c’est que le fait que toutes les plateformes utilisent la même API haut niveau ne garantit pas forcément de bons résultats
Au final, ce qui compte, c’est d’avoir une API qui contrôle bien le matériel de la plateforme concernée
Il a toujours fallu des wrappers qui traduisent OpenGL tel quel, et autrefois il n’y avait aucun moyen d’y échapper
Chercher la meilleure solution pour chaque type de matériel est peu pratique
Ce qui compte vraiment, c’est de fournir une couche de traduction facile
Si on veut vraiment aller en profondeur au niveau matériel, il faut au contraire une API qui permette d’y accéder directement, plutôt qu’une interface simple ou générique
OpenGL est devenu beaucoup trop complexe après la version 2.0, et WebGPU encapsule les fonctionnalités de Vk, D3D12 et Metal de manière plutôt pratique
Je pense que c’est bien mieux conçu qu’OpenGL
À part cela, D3D11 et Metalv1 sont probablement le meilleur équilibre entre ergonomie et performance (surtout les performances de D3D11, que Vulkan et D3D12 ont du mal à égaler)
Je suis d’accord moi aussi
Je vais continuer à développer avec l’interop OpenGL et CUDA
Vulkan a une complexité tellement suringénierée pour si peu d’avantages concrets à l’usage que j’ai fini par préférer CUDA
J’espère toujours que WebGPU s’étendra avec succès au-delà du navigateur
et devienne une API cross-platform facile à utiliser traitée dans la spécification officielle (autrement dit, un remplaçant d’OpenGL)
Mais en dehors de l’écosystème Rust, je n’ai pas l’impression qu’il y ait un grand mouvement vers l’usage de WebGPU en code natif
Par exemple, je n’ai jamais entendu parler d’un gros projet utilisant Dawn
C’est sans doute aussi parce que WebGPU est arrivé trop tard, et que la plupart avaient déjà construit leur propre couche d’abstraction au-dessus de dx, vulkan et metal
Au final, je pense que ça ne se diffusera pas
Il y a un peu de simplicité, mais beaucoup trop de fonctions manquent
Certaines fonctions devenues optionnelles dans Vulkan (comme les render passes) restent obligatoires dans WebGPU
Les bind groups sont statiques, ce qui est au contraire peu pratique
Et WebGPU a aussi de nombreuses limitations et des éléments inutiles
Par exemple, on ne peut pas écrire directement dans une sous-région de buffer depuis l’hôte, il faut obligatoirement passer par un buffer intermédiaire (staging buffer)
Faute d’alternative, je l’utiliserai sur le web, mais sur desktop je vais continuer avec un framework OpenGL + interop CUDA
J’espère qu’une API graphique moderne plus raisonnable verra le jour
Si une tâche qui pourrait se limiter à
cuMemAllocetcuMemcpydevient compliquée à cause d’allocations et de bindings de buffers complexes, de pipelines, de synchronisation explicite, de binding groups, de descriptor sets et d’autres éléments inutiles, je n’ai pas envie de l’utiliserWebGPU n’offre ni le niveau d’optimisation ni le contrôle fin de Vulkan, et les performances ne sont généralement pas au niveau de Vulkan
Les diverses extensions présentes dans Vulkan ne sont pas encore prises en charge dans WebGPU non plus
Il existe déjà des middlewares pour cela
En dehors du navigateur, je ne pense pas qu’il soit nécessaire d’attendre WebGPU
À l’origine, il y a les contraintes d’un design d’API centré sur la sandbox du navigateur
Le nom lui-même a aussi été un gros problème à mon avis
Je suis un développeur purement natif, donc pendant des années j’ai simplement considéré « web gpu » comme une technologie réservée au web et je n’y ai pas prêté attention, alors qu’en réalité c’était une erreur
Je suis très heureux à l’idée que notre crate gpu-allocator https://github.com/Traverse-Research/gpu-allocator/ soit connue par bien plus de monde
Jusqu’à présent, nous l’utilisions dans le backend dx12 de wgpu ou dans notre propre produit de benchmark GPU evolve https://www.evolvebenchmark.com/
J’espère qu’elle pourra désormais être utilisée plus largement
Je découvre seulement maintenant que WebGPU était déjà utilisable dans Firefox Nightly sur macOS
J’ai téléchargé la nightly mac depuis https://www.mozilla.org/en-US/firefox/channel/desktop/
et j’ai lancé la démo https://huggingface.co/spaces/reach-vb/github-issue-generator-webgpu, qui a bien fonctionné
Cette démo compile le modèle SmolLM2 en WebAssembly pour l’utiliser dans l’extraction de données structurées
Jusqu’ici, je pensais que cela ne fonctionnait que dans Chrome, mais sur Firefox stable j’obtiens une erreur disant que « WebGPU n’est pas pris en charge »
La prise en charge de macOS arrivera officiellement bientôt
En plus de Windows, nous prévoyons aussi de prendre en charge bientôt Mac, Linux, et enfin Android pour WebGPU
Le passage disant « nous prévoyons aussi de prendre en charge Mac, Linux, et enfin Android pour WebGPU » me fait plaisir
Mais à ce stade, j’ai du mal à avoir de grands espoirs
Si la prise en charge de WebGPU dans les navigateurs Linux a été impossible jusqu’ici, c’est probablement parce qu’il est trop difficile d’ajouter une nouvelle surface d’attaque
Ce genre de complexité montre à quel point l’énormité des standards du web rend le développement des navigateurs difficile
L’impact de décisions de conception remontant à l’époque de Netscape est encore visible aujourd’hui, et semble être à la racine des inquiétudes autour de l’uniformisation des navigateurs, du financement, etc.
WebGPU est déjà pris en charge sur Android/Linux, WebOS/Linux et ChromeOS/Linux
Mais cela montre bien que, pour les navigateurs, la prise en charge de ce type de charge de travail sur GNU/Linux reste une priorité faible pour les éditeurs
J’attends aussi une implémentation pour Linux
Je me demande quelles démos il y aura à essayer quand WebGPU arrivera
L’une des démos les plus impressionnantes que j’ai vues est
https://github.com/ArthurBrussee/brush
entraînement et rendu de Gaussian splatting basé sur WebGPU
Je signale aussi des démos basées sur Unity
La plupart des sites de démo sont des démos web
Personnellement, j’aime bien Compute Toys https://compute.toys/
Ça permet d’expérimenter des compute shaders WebGPU dans un style proche de Shadertoy
Pour plus de démos variées, voir https://github.com/mikbry/awesome-webgpu
Il y a aussi un projet d’expérimentation directe : https://github.com/s-macke/WebGPU-Lab
Les exemples du moteur Bevy sont proposés à la fois en WebGL et en WebGPU
C’est utile pour comparer et apprendre
Liens de référence : https://bevy.org/examples-webgpu/, https://bevy.org/examples
Comme démo assez impressionnante, je voudrais citer https://huggingface.co/spaces/webml-community/kokoro-webgpu
Ça fonctionne même sans WebGPU, mais c’est alors très lent
On dirait que Firefox va prendre en charge WebGPU sur Linux avant Chrome
alors que dawn (l’implémentation WebGPU de Google) fonctionne plutôt bien sur Linux, Firefox semble tout de même passer devant sur ce support
Bravo à tout le monde, le support de WebGPU arrive enfin
J’étais un peu mal à l’aise à l’idée d’expérimenter avec WebGPU uniquement dans Chrome
Safari a lui aussi commencé à le prendre en charge récemment dans ses versions preview
J’utilise wgpu dans un projet majeur depuis presque deux ans
Avec cette extension de WebGPU, j’espère qu’il y aura plus de mainteneurs
et que les tickets que j’ai ouverts il y a 18 mois seront résolus plus vite
Je n’ai pas encore touché à Rust, mais j’espère avoir un jour la motivation et le temps de contribuer moi-même
Je dépends des bindings wgpu-native, mais les mises à jour y arrivent lentement
Par exemple, on est enfin passé à la v25 la semaine dernière, alors que la v26 est sortie il y a seulement quelques jours