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 offre un accès unifié et rapide aux GPU en exposant des fonctionnalités matérielles de pointe et en activant les opérations de rendu et de calcul sur un GPU, comme Direct3D 12, Metal et Vulkan.

Cependant, WebGPU dépasse les limites d'une simple API JavaScript. Il s'agit d'un élément de base semblable à WebAssembly, dont les implications s'étendent bien au-delà du Web en raison de son écosystème en plein essor. 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 de base.

Explorer l'écosystème actuel

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

Dans le même temps, Mozilla et Google ont reconnu le potentiel de WebGPU dans les applications spécifiques à la plate-forme et ont séparé les implémentations WebGPU des navigateurs, ce qui permet une utilisation autonome.

Pour Chrome, cela s'est traduit par 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 des fournisseurs de navigateurs.

Comme indiqué dans 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 WebAssembly C++, est déjà compatible avec WebGPU et ne nécessite que des modifications minimales pour le porter sur le Web.

Vous pouvez également exécuter votre code WebGPU JavaScript en dehors du navigateur à l'aide de 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 ni dans d'autres contextes spécifiques à la plate-forme.

Un écosystème similaire existe pour Rust avec wgpu, l'implémentation de WebGPU par Firefox. Wgpu peut être intégré directement 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 Alliance wgpu avec 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.

Il est possible que votre langage de programmation préféré dispose déjà de liaisons pour WebGPU, car les ingénieurs qui travaillent sur les implémentations WebGPU développent également un en-tête C commun pour WebGPU. Vous pouvez l'utiliser pour cibler Dawn, wgpu et d'autres, ce qui facilite la création de liaisons pour les langages utilisant la FFI C.

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