В
L'objectif principal de WebGPU est de fournir une interface de programmation sécurisée, conviviale, portable et hautes performances pour la plate-forme Web afin de tirer parti des technologies et des capacités graphiques 3D fournies par les API graphiques système modernes, telles que Direct3D 12 sous Windows, Metal. sur macOS et Vulkan sur Linux. Conceptuellement, WebGPU diffère de WebGL de la même manière que Vulkan diffère d'OpenGL, et en même temps, il n'est pas basé sur une API graphique spécifique, mais est une couche universelle qui utilise généralement les mêmes primitives de bas niveau que celles trouvées dans Vulkan, Métal et Direct3D.
WebGPU fournit aux applications JavaScript un contrôle de niveau inférieur sur l'organisation, le traitement et la transmission des commandes au GPU, en gérant les ressources associées, la mémoire, les tampons, les objets de texture et les 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 à part entière 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 offre également des fonctionnalités supplémentaires lors du portage de programmes graphiques natifs sous une forme Web grâce à l'utilisation de la technologie WebAssembly. En plus des graphiques 3D, WebGPU couvre également les fonctionnalités liées au déchargement des calculs vers le GPU et à la prise en charge du développement de shaders. Shaders
WebGPU utilise une gestion séparée des ressources, des travaux préparatoires et la transmission des commandes au 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 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.
La deuxième différence entre WebGPU et WebGL réside dans une approche différente de la gestion 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.
La troisième fonctionnalité de WebGPU est appelée le modèle de liaison, en grande partie
qui rappelle les outils de regroupement de ressources présents dans 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.
Dans Firefox, le paramètre « dom.webgpu.enabled » est fourni dans about:config pour activer WebGPU. Le rendu CanvasContext nécessite également l'activation de la composition
Source: opennet.ru