Un nouveau groupe WebKit pour définir WebGPU, une API alternative bas niveau à WebGL

Par:
fredericmazue

mer, 08/02/2017 - 11:04

L'équipe WebKit d'Apple vient de proposer la création d'un nouveau groupe communautaire au W3C, afin de développer un nouveau standard d'APIs donnant accès aux fonctionnalités des GPU pour la programmation bas niveau, aussi bien pour les graphiques que pour le calcul : WebGPU.

Afin que la discussion sur ce sujet démarre activement, l'équipe WebKit d'Apple fournit déjà une proposition d'API et un protoype de cette API pour le projet open source de WebKit.

Qu'est-ce qui motive la création de ce groupe ? Répondre aux besoins grandissants de 3D et de performances brutes au sein des navigateurs, explique le billet sur le blog de WebKit qui annonce la création du groupe.

Le billet s'appuie sur l'histoire du Web. Au début il n'y avait rien :-) Seulement du contenu statique dans les pages Web, ornées d'images embarqués. Puis est venu JavaScript pour modifier dynamiquement les pages, mais sans véritable notion de traitement de graphismes. Est donc venu le canvas de HTML5 avec son API de rendu 2D. Mais les jeux vidéos (principalement) ont demandé plus, et est arrivé WebGL pour le rendu 3D. Puis toujours en raison de besoins grandissants est arrivé le standard WebGL 2 que Firefox et Google Chrome commencent à supporter.

Mais bien que le standard WebGL 2 ne soit pas encore entièrement défini, celui-ci ne paraît déjà plus suffisant. En effet WebGL est construit sur OpenGL ES, une librairie d'assez haut niveau d'abstraction, qui en tant que telle ne donne pas accès aux fonctionnalités de bas niveaux pour programmer au petits oignons des animations qui ébouriffent, comme le permettent Direct3D de Microsoft, Metal d'Apple ou Vulkan du Khronos Group. De plus (ou plutôt de moins :-) OpenGL ne s'intéresse pas du tout aux possibilités de calculs parallèles qui sont apparues avec les processeurs GPU récents.

WebGPU veut donc donner accès à tout cela via un standard, toujours au sein du canvas :

let canvas = document.querySelector("canvas");
let gpu = canvas.getContext("webgpu");

mais avec une API plus orientée objet que ne l'est WebGL est-il souligné. Le billet donne encore quelques exemple de rendu de triangles, de création de pipelines, etc.