La prise en charge de WebGPU sera activée dans Chrome

Google a annoncé l'inclusion de la prise en charge par défaut de l'API graphique WebGPU et du WGSL (WebGPU Shading Language) dans Chrome 113, dont la sortie est prévue le 2 mai. WebGPU fournit une interface de programmation similaire à Vulkan, Metal et Direct3D 12 pour effectuer des opérations côté GPU telles que le rendu et le calcul, et permet également l'utilisation d'un langage de shader pour écrire des programmes qui s'exécutent côté GPU. L'implémentation WebGPU ne sera initialement activée que sur les versions ChromeOS, macOS et Windows. Pour Linux et Android, le support WebGPU sera activé ultérieurement.

Outre Chrome, un support expérimental du WebGPU est testé depuis avril 2020 dans Firefox et depuis novembre 2021 dans Safari. Pour activer WebGPU dans Firefox, vous devez définir les indicateurs dom.webgpu.enabled et gfx.webgpu.force-enabled dans about:config. Il n'est pas encore prévu d'activer WebGPU par défaut dans Firefox et Safari. Les implémentations WebGPU développées pour Firefox et Chrome sont disponibles sous la forme de bibliothèques distinctes - Dawn (C++) et wgpu (Rust), que vous pouvez utiliser pour intégrer la prise en charge WebGPU dans vos applications. Des travaux sont également en cours pour ajouter la prise en charge de WebGPU aux bibliothèques JavaScript populaires qui utilisent nativement WebGL. Par exemple, une prise en charge complète de WebGPU a déjà été annoncée dans Babylon.js, et une prise en charge partielle dans Three.js, PlayCanvas et TensorFlow.js.

Conceptuellement, WebGPU diffère de WebGL de la même manière que l'API graphique Vulkan diffère d'OpenGL, mais WebGPU 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 les programmes autonomes utilisant directement Vulkan, Metal ou Direct3D, mais qui 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