Capturer l'écosystème WebGPU

François Beaufort
François Beaufort
Corentin Wallez
Corentin Wallez

WebGPU est souvent perçu comme une API graphique Web qui accorde un accès unifié et rapide aux GPU en exposant des fonctionnalités matérielles de pointe et en permettant des opérations de rendu et de calcul sur un GPU, à l'instar de Direct3D 12, Metal et Vulkan.

Cependant, WebGPU dépasse les limites d'une simple API JavaScript. Il s'agit d'un composant fondamental semblable à WebAssembly, dont les implications s'étendent bien au-delà du Web en raison de son écosystème naissant. L'équipe Chrome considère WebGPU comme plus qu'une simple technologie Web. Il s'agit d'un écosystème florissant centré sur une technologie essentielle.

Explorer l'écosystème actuel

L'aventure commence par la spécification JavaScript, une initiative collaborative impliquant de nombreuses organisations comme Apple, Google, Intel, Mozilla et Microsoft. Actuellement, tous les principaux navigateurs Web ont implémenté WebGPU ou sont en train de l'implémenter.

En parallèle, Mozilla et Google ont compris le potentiel de WebGPU dans les applications spécifiques à la plate-forme et ont séparé les implémentations WebGPU des navigateurs, permettant ainsi une utilisation autonome.

Pour Chrome, cela s'est matérialisé sous la forme Dawn, une bibliothèque C/C++ qui traduit les appels WebGPU en commandes de pilote de GPU. Dawn permet aux applications C et C++ d'utiliser WebGPU de manière native, en fournissant une abstraction GPU portable et ergonomique grâce à l'expertise du fournisseur de navigateurs.

Comme l'indique l'article de blog WebGPU: l'API graphique multiplate-forme de demain, le portage d'une application WebGPU spécifique à une plate-forme sur le Web est simple. Emscripten, la chaîne d'outils C++ WebAssembly, est déjà compatible avec WebGPU, nécessitant peu de modifications pour son portage sur le Web.

Vous pouvez également exécuter votre code WebGPU JavaScript en dehors du navigateur avec l'environnement d'exécution JavaScript Node.js, car celui-ci inclut un module WebGPU basé sur Dawn. Il vous permet d'exécuter votre code sans modification côté serveur ou dans d'autres contextes spécifiques à la plate-forme.

Un écosystème similaire existe pour Rust avec wgpu, l'implémentation Firefox de WebGPU. Wgpu peut être directement intégré aux applications Rust, qui peuvent ensuite être portées sur le Web à l'aide de web-sys. De plus, l'environnement d'exécution Deno JavaScript est compatible avec WebGPU via wgpu. Consultez l'article de blog Wgpu Alliance with Deno.

Cela établit un écosystème parallèle entre Rust et C++, comme illustré dans le schéma suivant.

Schéma de l'écosystème WebGPU en 2023.
Écosystème WebGPU en 2023

Horizons émergents

L'écosystème WebGPU s'étend au-delà des domaines JavaScript, C++ et Rust.

Votre langage de programmation préféré contient peut-être déjà des liaisons pour WebGPU, car les ingénieurs travaillant sur les implémentations de WebGPU développent également un en-tête C commun pour WebGPU. Il peut servir à cibler Dawn, wgpu, etc., afin de faciliter la création de liaisons pour les langages à l'aide de C FFI.

L'équipe Chrome envisage également d'utiliser Dawn comme backend de rendu par défaut pour tous les éléments de l'interface utilisateur du navigateur, y compris les menus, les barres d'outils, les outils pour les développeurs et le contenu Web. Cela élimine la nécessité d'implémenter des implémentations de rendu distinctes pour chaque API native, ce qui simplifie le processus de développement. Cette fonctionnalité est actuellement en phase expérimentale sur macOS et Windows, derrière l'indicateur chrome://flags/#skia-graphite.

Remerciements

Image principale de Daniel Öberg sur Unsplash.