Le W3C dévoile le projet de norme WebGPU

Le W3C a publié les premières versions des spécifications WebGPU et WebGPU Shading Language (WGSL), qui définissent des API pour effectuer des opérations sur le GPU telles que le rendu et le calcul, ainsi qu'un langage de shader pour écrire des programmes exécutés sur le GPU. conceptuellement similaire aux API Vulkan, Metal et Direct3D 12. Les spécifications ont été préparées par un groupe de travail comprenant des ingénieurs de Mozilla, Google, Apple et Microsoft.

Conceptuellement, WebGPU diffère de WebGL de la même manière que l'API graphique Vulkan diffère d'OpenGL, mais il n'est pas basé sur une API graphique spécifique, mais est une couche universelle qui utilise les mêmes primitives de bas niveau que celles trouvées dans Vulkan, Metal et Direct3D. WebGPU fournit aux applications JavaScript un contrôle de bas niveau sur l'organisation, le traitement et la transmission des commandes au GPU, la gestion des ressources associées, de la mémoire, des tampons, des objets de texture et des shaders graphiques compilés. Cette approche vous permet d'obtenir des performances plus élevées pour les applications graphiques en réduisant les frais généraux et en augmentant l'efficacité du travail avec le GPU.

WebGPU permet de créer des projets 3D complexes pour le Web qui ne fonctionnent pas moins bien que des programmes autonomes accédant directement à Vulkan, Metal ou Direct3D, mais ne sont pas liés à des plates-formes spécifiques. WebGPU fournit également des fonctionnalités supplémentaires pour porter des programmes graphiques natifs sous une forme Web via la compilation dans WebAssembly. En plus des graphiques 3D, WebGPU inclut également des fonctionnalités liées au déchargement des calculs vers le GPU et à l'exécution de shaders.

Principales fonctionnalités de WebGPU :

  • Gestion séparée des ressources, travaux préparatoires et transmission des commandes au GPU (en 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 rendu et de calcul ; GPUCommandBuffer à mettre en file d'attente pour exécution sur le GPU. Le résultat peut être rendu dans une zone associée à un ou plusieurs éléments du canevas, ou traité sans sortie (par exemple, lors de l'exécution de tâches de calcul). La séparation des étapes facilite la séparation des opérations de création et de préparation des ressources en différents gestionnaires pouvant s'exécuter sur différents threads.
  • Une approche différente du traitement des états. WebGPU propose deux objets - GPURenderPipeline et GPUComputePipeline, qui vous permettent de combiner différents états prédéfinis par le développeur, ce 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 dispositions de tampon de sommets et d'attributs, les dispositions de groupes collants, la fusion, la profondeur et les motifs, ainsi que les formats de sortie post-rendu.
  • Un modèle de liaison très similaire aux fonctionnalités de regroupement de ressources de Vulkan. Pour regrouper les ressources, WebGPU fournit un objet GPUBindGroup, qui peut être associé à d'autres objets similaires à utiliser dans les shaders lors de l'écriture de commandes. La création de tels groupes permet au pilote d'effectuer les actions préparatoires nécessaires à l'avance et permet au navigateur de modifier beaucoup plus rapidement les liaisons de ressources entre les appels de tirage. La disposition des liaisons de ressources peut être prédéfinie à l'aide de l'objet GPUBindGroupLayout.

Source: opennet.ru

Ajouter un commentaire