La société Google a annoncé l'intégration par défaut de l'API graphique WebGPU et du langage de shader WGSL (WebGPU Shading Language) dans la version Chrome 113, prévue pour le 2 mai. WebGPU offre une interface de programmation similaire à Vulkan, Metal et Direct3D 12 pour l'exécution d'opérations cÎté GPU, telles que le rendu et les calculs, et permet l'utilisation d'un langage de shader pour écrire des programmes s'exécutant sur le GPU. L'implémentation de WebGPU sera d'abord disponible uniquement dans les versions pour ChromeOS, macOS et Windows. Le support de WebGPU pour Linux et Android sera activé ultérieurement.
En plus de Chrome, le support expĂ©rimental de WebGPU est testĂ© depuis avril 2020 dans Firefox et depuis novembre 2021 dans Safari. Pour activer WebGPU dans Firefox, il faut dĂ©finir les indicateurs dom.webgpu.enabled et gfx.webgpu.force-enabled dans about:config. Aucune information n'a encore Ă©tĂ© communiquĂ©e sur les projets d'activation par dĂ©faut de WebGPU dans Firefox et Safari. Les implĂ©mentations de WebGPU pour Firefox et Chrome sont disponibles sous forme de bibliothĂšques distinctes â Dawn (C++) et wgpu (Rust), qui peuvent ĂȘtre utilisĂ©es pour intĂ©grer le support de WebGPU dans vos applications. Des travaux sont Ă©galement en cours pour ajouter le support de WebGPU dans des bibliothĂšques JavaScript populaires qui utilisent initialement WebGL. Par exemple, le support complet de WebGPU a dĂ©jĂ Ă©tĂ© annoncĂ© dans Babylon.js, et partiel dans Three.js, PlayCanvas et TensorFlow.js.
Conceptuellement, WebGPU diffĂšre de WebGL de la mĂȘme maniĂšre que l'API graphique Vulkan se distingue d'OpenGL, mais WebGPU ne repose pas sur une API graphique spĂ©cifique et reprĂ©sente une couche universelle utilisant les mĂȘmes primitives de bas niveau que celles prĂ©sentes dans Vulkan, Metal et Direct3D. WebGPU fournit aux applications JavaScript des moyens de contrĂŽle de bas niveau sur l'organisation, le traitement et l'envoi de commandes au GPU, la gestion des ressources associĂ©es, de la mĂ©moire, des buffers, des objets de texture et des shaders graphiques compilĂ©s. Une telle approche permet d'atteindre des performances plus Ă©levĂ©es pour les applications graphiques en rĂ©duisant les coĂ»ts et en amĂ©liorant l'efficacitĂ© de l'utilisation du GPU.
WebGPU permet de crĂ©er pour le Web des projets 3D complexes, fonctionnant aussi bien que des programmes autonomes utilisant directement Vulkan, Metal ou Direct3D, mais sans ĂȘtre liĂ©s Ă des plateformes spĂ©cifiques. WebGPU offre Ă©galement des possibilitĂ©s supplĂ©mentaires pour porter des programmes graphiques natifs sous une forme capable de fonctionner avec des technologies web, grĂące Ă la compilation en WebAssembly. En plus de la 3D, WebGPU englobe Ă©galement des possibilitĂ©s liĂ©es au dĂ©chargement de calculs vers le GPU et Ă l'exĂ©cution de shaders.
Caractéristiques clés de WebGPU :
- Gestion sĂ©parĂ©e des ressources, des travaux prĂ©paratoires et de l'envoi de commandes au GPU (dans WebGL, un seul objet gĂ©rait tout cela). Trois contextes sĂ©parĂ©s sont fournis : GPUDevice pour la crĂ©ation de ressources telles que des textures et des tampons ; GPUCommandEncoder pour l'encodage de commandes individuelles, y compris les phases de rendu et de calcul ; GPUCommandBuffer pour ĂȘtre mis en file d'attente pour exĂ©cution sur le GPU. Le rĂ©sultat peut ĂȘtre dessinĂ© dans une zone associĂ©e Ă un ou plusieurs Ă©lĂ©ments canvas, ou traitĂ© sans affichage (par exemple, lors de l'exĂ©cution de tĂąches de calcul). La sĂ©paration des Ă©tapes facilite la dissociation de la crĂ©ation de ressources et des opĂ©rations prĂ©paratoires dans diffĂ©rents gestionnaires, qui peuvent ĂȘtre exĂ©cutĂ©s dans des threads diffĂ©rents.
- Une approche diffĂ©rente dans le traitement des Ă©tats. Dans WebGPU, deux objets sont proposĂ©s â GPURenderPipeline et GPUComputePipeline, permettant de combiner divers Ă©tats dĂ©finis Ă l'avance par le dĂ©veloppeur, ce qui permet au navigateur de ne pas consacrer de ressources Ă des travaux supplĂ©mentaires, comme la recompilation des shaders. Parmi les Ă©tats pris en charge : shaders, dispositions des tampons de vertex et d'attributs, dispositions des groupes attachĂ©s, mĂ©lange, profondeur et modĂšles, formats de sortie aprĂšs rendu.
- Un modĂšle d'association, semblable aux mĂ©canismes de regroupement de ressources prĂ©sents dans Vulkan. Pour regrouper des ressources dans WebGPU, un objet GPUBindGroup est fourni, qui peut ĂȘtre liĂ© Ă d'autres objets similaires lors de l'enregistrement des commandes pour ĂȘtre utilisĂ© dans les shaders. La crĂ©ation de tels groupes permet au pilote d'effectuer Ă l'avance les prĂ©paratifs nĂ©cessaires, et au navigateur de changer les liaisons de ressources beaucoup plus rapidement entre les appels de rendu. La disposition des liaisons de ressources peut ĂȘtre dĂ©finie Ă l'avance Ă l'aide de l'objet GPUBindGroupLayout.
Source : opennet.ru
