В
L'objectiu clau de WebGPU és proporcionar una interfície de programació segura, fàcil d'utilitzar, portàtil i d'alt rendiment per a la plataforma web per aprofitar les tecnologies i les capacitats de gràfics 3D que ofereixen les API de gràfics del sistema modern, com ara Direct3D 12 a Windows, Metall. a macOS i Vulkan a Linux. Conceptualment, WebGPU difereix de WebGL de la mateixa manera que Vulkan difereix d'OpenGL i, al mateix temps, no es basa en una API de gràfics específica, sinó que és una capa universal que generalment utilitza els mateixos primitius de baix nivell que es troben a Vulkan. Metall i Direct3D.
WebGPU proporciona aplicacions JavaScript amb un control de nivell inferior sobre l'organització, el processament i la transmissió d'ordres a la GPU, gestionant els recursos associats, la memòria, els buffers, 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 complets 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 en portar programes de gràfics nadius a un format habilitat per a la web mitjançant l'ús de la tecnologia WebAssembly. A més dels gràfics en 3D, WebGPU també cobreix les capacitats relacionades amb la descàrrega de càlculs a la GPU i el suport al desenvolupament de shader. Shaders
WebGPU utilitza una gestió separada dels recursos, el treball preparatori i la transmissió d'ordres a la GPU (a WebGL, un objecte era responsable de tot alhora). Es proporcionen tres contextos diferents:
Dispositiu GPU per crear recursos com textures i buffers; GPUCommandEncoder per codificar ordres individuals, incloses les etapes de representació i càlcul; GPUCommandBuffer s'ha de posar a la cua per a l'execució a 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 de càlcul). La separació de les etapes facilita la separació de les operacions de creació i preparació de recursos en diferents controladors que es poden executar en diferents fils.
La segona diferència entre WebGPU i WebGL és un enfocament diferent per gestionar els estats. WebGPU ofereix dos objectes: GPURenderPipeline i GPUComputePipeline, que us permeten combinar diversos estats predefinits pel desenvolupador, cosa que permet 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 i formats de sortida posteriors a la renderització.
La tercera característica de WebGPU s'anomena, en gran part, el model d'enllaç
recorda les eines d'agrupació de recursos presents a Vulkan.
Per agrupar recursos, WebGPU proporciona un objecte GPUBindGroup, que es pot associar amb altres objectes similars per utilitzar-los en shaders mentre escriu ordres. 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.
A Firefox, per habilitar WebGPU a about:config, hi ha una configuració "dom.webgpu.enabled". La representació de CanvasContext també requereix que la composició estigui activada
Font: opennet.ru