Le W3C a récemment publié les premières versions des spécifications WebGPU et WebGPU Shading Language (WGSL), qui définissent les API permettant d'effectuer des opérations GPU telles que le rendu et le calcul, ainsi qu'un langage de shading pour écrire des programmes côté GPU.
Ces spécifications sont conceptuellement similaires aux API Vulkan, Metal et Direct3D 12. Elles ont été élaborées par un groupe de travail composé d'ingénieurs de Mozilla, Google, Apple et Microsoft.
L'objectif du GPU pour le groupe de travail Web est de fournir une interface entre la plate-forme Web et les capacités graphiques et informatiques 3D modernes des plates-formes système natives. En savoir plus sur les objectifs, la portée et les livrables.
Le GPU for Web Community Group a développé les spécifications adoptées par ce groupe de travail. Le groupe communautaire continue de pousser le travail technique sur les spécifications et d'incuber de nouvelles fonctionnalités. Ce groupe de travail travaille avec le groupe communautaire pour définir les spécifications de la voie de recommandation.
Conceptuellement, WebGPU diffère de WebGL de la même manière que l'API graphique de Vulkan diffère d'OpenGL , mais il n'est pas basé sur une API graphique spécifique ; il s'agit plutôt d'une couche universelle qui utilise les mêmes primitives de bas niveau que l'on retrouve dans Vulkan, Metal et Direct3D.
WebGPU offre aux applications JavaScript un contrôle de bas niveau sur l'organisation, le traitement et la transmission des commandes au GPU , ainsi que sur la gestion des ressources associées : mémoire, tampons, objets texture et shaders graphiques compilés. Cette approche permet d'améliorer les performances des applications graphiques en réduisant la surcharge et en optimisant l'efficacité du GPU.
WebGPU vous permet de créer des projets 3D complexes pour le Web qui ne fonctionnent pas de la même manière que les programmes autonomes qui accèdent directement à Vulkan, Metal ou Direct3D, mais qui ne sont pas liés à des plateformes spécifiques.
WebGPU offre également des fonctionnalités supplémentaires pour porter des programmes graphiques natifs vers une application web en les compilant en WebAssembly. Outre les graphismes 3D, WebGPU prend également en charge le transfert de calculs vers le GPU et l'exécution de shaders.
Principales fonctionnalités WebGPU:
- Gestion séparée des ressources, travail préparatoire et transfert de commande vers le GPU (dans WebGL, un objet était responsable de tout à la fois). Trois contextes distincts sont fournis: GPUDevice pour créer des ressources telles que des textures et des tampons; GPUCommandEncoder pour encoder des commandes individuelles, y compris les étapes de traitement et de calcul; GPUCommandBuffer en file d'attente pour exécution sur le GPU. Le résultat peut être rendu dans une zone associée à une ou plusieurs toiles, ou rendu sans rendu (par exemple, lors de l'exécution de tâches de calcul). Le staging permet de séparer facilement la création de ressources et les opérations préparatoires sur différents contrôleurs pouvant s'exécuter sur différents threads.
- Une approche différente de la gestion du statutOui WebGPU propose deux objets, GPURenderPipeline et GPUComputePipeline, que vous permettent de combiner différents états prédéfinis par le développeur, qui permet au navigateur de ne pas gaspiller de ressources sur des travaux supplémentaires tels que la recompilation des shaders. Les états pris en charge incluent les shaders, les tampons de sommets et les dispositions d'attributs, les dispositions de groupe attachées, la fusion, la profondeur et les modèles, ainsi que les formats de sortie de post-traitement.
- Un modèle de liaison semblable aux outils de pool de ressources Vulkan. Pour regrouper les ressources en groupes, WebGPU fournit un objet GPUBindGroup qui, lors de la saisie de commandes, peut être lié à d'autres objets du même type pour une utilisation dans les shaders. La création de tels groupes permet au conducteur de prendre les actions préparatoires nécessaires à l'avance, et le navigateur permet au navigateur de modifier les liaisons de ressources beaucoup plus rapidement entre les appels de dessin. La disposition des liens de ressources peut être prédéfinie à l'aide de l'objet GPUBindGroupLayout.
Enfin, si vous souhaitez en savoir plus sur cet article, vous trouverez les détails en suivant ce lien.