Google a annoncé aujourd’hui qu’il activerait la prise en charge de WebGPU dans son navigateur Chrome par défaut à partir de la version 113, actuellement en version bêta. En développement depuis 2017, WebGPU est une API graphique de nouvelle génération qui vise à apporter les avantages des API à faible surcharge telles que Direct3D 12 de Microsoft, Apple Metal et Vulkan aux navigateurs Web et autres applications.
La prise en charge de WebGPU est disponible mais désactivée par défaut dans Chrome depuis un certain temps maintenant, car l’API n’était pas finalisée et les choses pouvaient se casser d’une mise à jour à l’autre. Google dit que Mozilla et Apple prendront éventuellement en charge WebGPU dans Firefox et Safari, et les navigateurs comme Microsoft Edge et Opera qui s’appuient sur le moteur de navigateur Chromium peuvent vraisemblablement choisir de l’activer comme Google l’a fait.
Chrome 113 prend en charge WebGPU sur Windows, macOS et ChromeOS pour commencer, avec « la prise en charge d’autres plates-formes » comme Linux et Android « à venir plus tard cette année ». Cette version du navigateur devrait être déployée pour tous les utilisateurs de Chrome dans le courant du mois de mai.
La prise en charge de Chrome est un grand coup de pouce pour toute nouvelle norme, qu’il s’agisse d’une API nouvelle ou mise à jour, d’un format d’image ou d’un codec vidéo. Chrome représente environ les deux tiers de la part de marché des navigateurs dans le monde, selon les données de StatCounter, et près de 80 % de toutes les parts de marché des navigateurs si vous comptez les autres navigateurs basés sur Chromium. Une fois que Safari et Firefox auront ajouté la prise en charge, pratiquement tous les navigateurs Web du monde entier pourront exécuter du code WebGPU. Il est donc utile d’expliquer brièvement ce qu’est WebGPU et pourquoi il existe.
Qu’est-ce que WebGPU ?
WebGPU est en quelque sorte le successeur de WebGL, une API beaucoup plus ancienne qui permet de restituer des graphiques basés sur OpenGL dans votre navigateur sans nécessiter de plug-ins tiers supplémentaires tels que Flash d’Adobe. Bien que révolutionnaire lorsqu’il a été annoncé en 2009, WebGL souffre aujourd’hui de bon nombre des mêmes problèmes qu’OpenGL : il ne tire pas parti de toutes les fonctionnalités des GPU actuels, il peut perdre des performances en raison de la surcharge du pilote, et il n’a qu’un nombre limité et prise en charge kludgey des charges de travail de calcul GPU.
« Alors que WebGL sert principalement à dessiner des images mais peut être réutilisé (avec beaucoup d’efforts) pour effectuer d’autres types de calculs, WebGPU offre un support de premier ordre pour effectuer des calculs généraux sur le GPU », indique le projet de document expliquant pourquoi WebGPU existe. La nouvelle API permettra d’améliorer les graphismes dans des frameworks comme Babylon.js et des moteurs de jeu comme Unity ; prendra en charge les charges de travail accélérées par GPU comme celles utilisées pour l’apprentissage automatique et l’IA ; et peut permettre aux applications photo et vidéo basées sur le Web (entre autres) d’utiliser plus facilement le type d’accélération GPU dont bénéficient les applications natives.
WebGPU est développé par un groupe de travail qui comprend des membres de Google, Microsoft, Apple, Mozilla, Intel et de nombreuses autres sociétés. Par conséquent, l’API a été conçue pour être aussi largement compatible que possible. WebGPU n’est pas une implémentation directe d’une API graphique existante, mais plutôt sa propre API qui repose sur et s’interface avec Direct3D 12, Metal et Vulkan. Cet explicateur de Surma, ingénieur chez Shopify et ancien Googler, résume bien (c’est nous qui soulignons) :
« Alors que WebGL n’est qu’un mince wrapper autour d’OpenGL, WebGPU a choisi une approche différente. Il introduit ses propres abstractions et ne reflète directement aucune de ces API natives. Cela s’explique en partie par le fait qu’aucune API unique n’est disponible sur tous les systèmes, mais également par le fait que de nombreux concepts (tels que la gestion de la mémoire de très bas niveau) ne sont pas idiomatiques pour une API Web. Au lieu de cela, WebGPU a été conçu pour se sentir à la fois « webby » et pour s’asseoir confortablement sur l’une des API graphiques natives tout en faisant abstraction de leurs idiosyncrasies. Il est standardisé dans le W3C avec tous les principaux fournisseurs de navigateurs ayant un siège à la table. »
Cela a l’avantage de rendre le code WebGPU très portable – écrivez du code WebGPU, et tant que les utilisateurs disposent d’un matériel et d’un navigateur qui le prennent en charge, vous devriez obtenir le même résultat sur un système Windows exécutant Direct3D et un téléphone Android exécutant Vulkan. Et cela évite certains des hacks qui maintiennent WebGL en cours d’exécution – par exemple, WebGL sur Windows et macOS n’utilise même pas OpenGL directement, mais plutôt un traducteur appelé ANGLE qui transforme les appels d’API OpenGL en appels d’API Direct3D et Metal à la place. Avec WebGPU, il n’est pas nécessaire de démarrer un projet séparé pour écrire autour d’une implémentation OpenGL lente ou mal entretenue.
WebGPU possède également son propre langage de shader (WGSL), que l’équipe Chrome travaille toujours à prendre en charge. L’annonce d’aujourd’hui indique que Google « prévoit de fournir un accès plus approfondi aux cœurs de shader » via WGSL dans une future version. Comme le reste de l’API WebGPU, WGSL est destiné à être indépendant de la plate-forme et facilement traduisible dans le langage de shader préféré du système d’exploitation sur lequel vous l’exécutez.
Enfin, malgré le « web » dans son nom, l’API WebGPU n’est pas limitée aux navigateurs. Le projet wgpu est une version de WebGPU pour Rust qui permet d’écrire et d’exécuter des applications WebGPU en dehors des navigateurs Web.
Si vous souhaitez expérimenter WebGPU maintenant, la version bêta de Chrome 113 est disponible ici. Un référentiel GitHub d’exemples de code est disponible ici, et il existe également une documentation officielle sur WebGPU et WGSL.