Les versions nocturnes de Firefox incluent désormais la prise en charge de WebGPU

В chaque nuit Firefox construit apparu prise en charge des spécifications WebGPU, qui fournit une interface de programmation pour le traitement graphique 3D et le calcul côté GPU, conceptuellement similaire à l'API Volcan, Métal и Direct3D 12. La spécification est développée par Mozilla, Google, Apple, Microsoft et les membres de la communauté en groupe de travail, créé par l'organisation W3C.

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 boîte être créé dans le langage de shader WebGPU ou spécifié au format intermédiaire SPIR-V, puis traduit dans les langages de shader pris en charge par les pilotes actuels.

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.

Les versions nocturnes de Firefox incluent désormais la prise en charge de WebGPU

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 WebRenderName (« gfx.webrender.all » dans about:config), écrit en Rust et externalisant les opérations de rendu du contenu des pages vers le GPU. L'implémentation de WebGPU est basée sur le code du projet
wgpu, écrit en Rust et capable de fonctionner sur les API DX12, Vulkan et Metal sous Linux, Android, Windows et macOS (la prise en charge de DX11 et OpenGL ES 3.0 est également en développement). En parallèle, Google développe une autre implémentation, disponible dans Branche des Canaries Chromium est activé à l'aide de l'indicateur « chrome://flags/#enable-unsafe-webgpu », mais jusqu'à présent, il ne fonctionne que sur macOS et Windows.

Source: opennet.ru

Ajouter un commentaire