
Després d'anys de desenvolupament, l'equip de Chrome llança WebGPU
Fa pocs dies Google va donar a conèixer mitjançant un va anunciar el suport predeterminat per a l'API de gràfics WebGPU i el llenguatge d'ombrejat WebGPU (WGSL) a la branca Chrome 113, el llançament del qual està programat per al 2 de maig.
Per als que desconeixen de WebGPU, han de saber que proporciona una API similar a Vulkan, Metall i Direct3D 12 per realitzar operacions del costat de la GPU, com el processament i el càlcul, i també us permet utilitzar un llenguatge d'ombreig per escriure programes del costat de la GPU.
sobre WebGPU
conceptualment, WebGPU difereix de WebGL de la mateixa manera que l'API de gràfics de Vulkan difereix d'OpenGL, però WebGPU no es basa en una API de gràfics específica, sinó que és una capa dús general que utilitza les mateixes primitives de baix nivell que es troben a Vulkan. Metall i Direct3D. WebGPU proporciona a les aplicacions de JavaScript un control de baix nivell sobre l'organització, el processament i la transmissió d'ordres a la GPU, la gestió dels recursos associats, la memòria, els búfers, els objectes de textura i els ombrejadors de gràfics compilats. Aquest enfocament us permet aconseguir aplicacions gràfiques de major rendiment en reduir la sobrecàrrega i augmentar l'eficiència de la GPU.
WebGPU permet crear projectes 3D complexos per a la Web que funcionen tan bé com a programes independents que utilitzen directament Vulkan, Metall o Direct3D, però que no estan vinculats a plataformes específiques. La WebGPU també proporciona opcions 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 3D, WebGPU també cobreix les possibilitats associades amb la descàrrega de càlculs al costat de la GPU i l'execució d'ombrejadors.
De les característiques clau de WebGPU, podem destacar les següents:
- Gestió separada de recursos, treball preparatori i transmissió de comandes a la GPU (a WebGL, un objecte era responsable de tot alhora). Es proporcionen tres contextos separats: GPUDevice per crear recursos com a textures i búfers; GPUCommandEncoder per codificar ordres individuals, incloses les etapes de processament i càlcul; GPUCommandBuffer per passar a la cua dexecució de GPU.
El resultat es pot representar en una àrea associada amb un o més elements del llenç, o processar-se sense sortida (per exemple, en executar tasques computacionals). La separació d'etapes facilita la separació de les operacions de creació i aprovisionament de recursos a diferents controladors que es poden executar en diferents subprocessos. - Un enfocament diferent per al maneig destats. WebGPU proporciona dos objectes, GPURenderPipeline i GPUComputePipeline, que us permeten combinar diferents estats predefinits pel desenvolupador, la qual cosa fa possible que el navegador no desaprofiti recursos en treball addicional, com tornar a compilar ombrejadors. Els estats admesos inclouen: ombrejadors, memòria intermèdia de vèrtexs i dissenys d'atributs, dissenys de grups fixos, mescla, profunditat i patrons, formats de sortida posteriors al renderitzat.
- Un model vinculant, molt semblant a les eines d‟agrupació de recursos de Vulkan. Per agrupar recursos en grups, WebGPU proporciona un objecte GPUBindGroup que es pot vincular a altres objectes similars per utilitzar en ombrejadors durant l'enregistrament d'ordres.
La creació d'aquests grups permet que el controlador faci les accions preparatòries necessàries amb antelació i permet que el navegador canviï els enllaços de recursos entre trucades de dibuix molt més ràpid. El disseny dels enllaços de recursos es pot predefinir mitjançant l'objecte GPUBindGroupLayout.
A més de Chrome, el suport WebGPU experimental s'ha provat des de l'abril del 2020 al Firefox i des de novembre de 2021 a Safari. Per habilitar WebGPU al Firefox, cal configurar els indicadors dom.webgpu.enabled i gfx.webgpu.force-enabled a about:config.
Encara no hi ha plans per habilitar WebGPU per defecte a Firefox i Safari. Les implementacions de WebGPU desenvolupades per a Firefox i Chrome estan disponibles en forma de biblioteques separades: Dawn (C++) i wgpu (Rust) que pot utilitzar per integrar la compatibilitat amb WebGPU a les seves aplicacions.
També cal destacar que s'està treballant per afegir compatibilitat amb WebGPU a biblioteques populars de JavaScript de forma nativa utilitzant WebGL. Per exemple, el suport complet de WebGPU ja està declarat a Babylon.js i parcial a Three.js , PlayCanvas i TensorFlow.js.
La implementació de WebGPU només s'habilitarà inicialment en compilacions per a ChromeOS, macOS i Windows, mentre que per a Linux i Android, la compatibilitat amb el WebGPU s'activarà en una data posterior.
Finalment si estàs interessat en poder conèixer més a l'respecte, pots consultar els detalls en el següent enllaç.