El W3C presenta un esborrany d'estàndard WebGPU

El W3C ha publicat els primers esborranys de les especificacions WebGPU i WebGPU Shading Language (WGSL), que defineixen les API per dur a terme operacions de GPU com ara la representació i la computació, així com un llenguatge shader per escriure programes que s'executen a la GPU. conceptualment semblant a les API Vulkan, Metal i Direct3D 12. Les especificacions van ser preparades per un grup de treball que incloïa enginyers de Mozilla, Google, Apple i Microsoft.

Conceptualment, WebGPU difereix de WebGL de la mateixa manera que l'API de gràfics Vulkan difereix d'OpenGL, però no es basa en una API de gràfics específica, sinó que és una capa universal que utilitza les mateixes primitives de baix nivell que es troben a Vulkan, Metal i Direct3D. WebGPU proporciona aplicacions JavaScript amb un control de baix nivell sobre l'organització, processament i transmissió d'ordres a la GPU, gestionant els recursos associats, la memòria, les memòries intermèdies, els objectes de textura i els ombrejats de gràfics compilats. Aquest enfocament us permet aconseguir un major rendiment per a les aplicacions gràfiques reduint els costos generals i augmentant l'eficiència de treballar amb la GPU.

WebGPU permet crear projectes 3D complexos per a la web que no funcionen pitjor que els programes autònoms que accedeixen directament a Vulkan, Metal o Direct3D, però no estan vinculats a plataformes específiques. WebGPU també proporciona capacitats addicionals per portar programes de gràfics nadius a un formulari habilitat per a la web mitjançant la compilació a WebAssembly. A més dels gràfics en 3D, WebGPU també inclou capacitats relacionades amb la descàrrega de càlculs a la GPU i l'execució de shaders.

Característiques principals de WebGPU:

  • Gestió separada de recursos, treball preparatori i transmissió d'ordres a la GPU (a WebGL, un objecte era responsable de tot alhora). Es proporcionen tres contextos separats: GPUDevice per crear recursos com ara textures i buffers; GPUCommandEncoder per codificar ordres individuals, incloses les etapes de representació i càlcul; GPUCommandBuffer per passar a la cua d'execució de la GPU. El resultat es pot representar en una àrea associada a un o més elements del llenç o processar-se sense sortida (per exemple, quan s'executen tasques computacionals). La separació d'etapes facilita la separació de les operacions de creació i subministrament de recursos en diferents controladors que es poden executar en diferents fils.
  • Un enfocament diferent del maneig dels estats. WebGPU proporciona dos objectes: GPURenderPipeline i GPUComputePipeline, que us permeten combinar diferents estats predefinits pel desenvolupador, cosa que fa possible que el navegador no malgasti recursos en treballs addicionals, com ara recompilar shaders. Els estats admesos inclouen: shaders, buffer de vèrtex i dissenys d'atributs, dissenys de grups enganxosos, combinació, profunditat i patrons, formats de sortida posteriors a la renderització.
  • Un model d'enllaç, com les eines d'agrupació de recursos de Vulkan. Per agrupar els recursos en grups, la WebGPU proporciona un objecte GPUBindGroup, que, en el moment d'escriure les ordres, es pot associar amb altres objectes similars per utilitzar-los en shaders. La creació d'aquests grups permet que el controlador realitzi les accions preparatòries necessàries amb antelació i permet al navegador canviar els enllaços de recursos entre trucades de dibuix molt més ràpidament. La disposició dels enllaços de recursos es pot predefinir mitjançant l'objecte GPUBindGroupLayout.

Font: opennet.ru

Afegeix comentari