Konzorcium W3C predstavilo prvé návrhy špecifikácií WebGPU a WebGPU Shading Language (WGSL), ktoré definujú API pre vykonávanie operácií na GPU, ako napríklad renderovanie a výpočty, ako aj jazyk tiene pre písanie programov, ktoré bežia na GPU. Konceptuálne je podobný API Vulkan, Metal a Direct3D 12. Špecifikácie pripravila pracovná skupina, do ktorej patrili inžinieri z Mozilla, Google, Apple a Microsoft.
Konceptuálne sa WebGPU líši od WebGL približne tak, ako sa grafické API Vulkan líši od OpenGL, ale nezávisí od konkrétneho grafického API, iba predstavuje univerzálnu vrstvenie, využívajúcu tie isté nízkoúrovňové primitívy, ktoré sú k dispozícii vo Vulkane, Metale a Direct3D. WebGPU poskytuje aplikáciám v JavaScripte prostriedky na nízkoúrovňovú kontrolu nad organizáciou, spracovaním a odosielaním príkazov do GPU, ako aj správou súvisiacich prostriedkov, pamäti, búferov, textúr a skompilovaných grafických tieňov. Takýto prístup umožňuje dosiahnuť vyšší výkon grafických aplikácií znížením režijných nákladov a zvýšením efektivity práce s GPU.
WebGPU umožňuje vytvárať pre Web komplexné 3D projekty, ktoré fungujú rovnako dobre, ako samostatné programy, ktoré priamo komunikujú s Vulkanom, Metalom alebo Direct3D, ale nie sú viazané na konkrétne platformy. WebGPU tiež poskytuje ďalšie možnosti pri portovaní natívnych grafických aplikácií do formy, ktorá dokáže pracovať na báze webových technológií, vďaka kompilácii do WebAssembly. Okrem 3D grafiky WebGPU pokrýva aj možnosti súvisiace s presunom výpočtov na stranu GPU a vykonávaním tieňov.
Kľúčové vlastnosti WebGPU:
- Oddelené riadenie zdrojov, prípravných prác a odovzdávania príkazov do GPU (v WebGL jeden objekt zodpovedal za všetko naraz). Poskytuje sa tri samostatné kontexty: GPUDevice na vytváranie zdrojov, ako sú textúry a buffery; GPUCommandEncoder na kódovanie jednotlivých príkazov vrátane fáz vykresľovania a počítania; GPUCommandBuffer na odosielanie do frontu na vykonanie v GPU. Výsledok môže byť vykreslený v oblasti spjatej s jedným alebo viacerými prvkami canvas, alebo spracovaný bez výstupu (napríklad pri spúšťaní počítacích úloh). Rozdelenie fáz zjednodušuje rozloženie vytvárania zdrojov a prípravné operácie do rôznych spracovateľov, ktoré môžu byť vykonané v rôznych vláknach.
- Iný prístup pri spracovávaní stavov. V WebGPU sú navrhnuté dva objekty — GPURenderPipeline a GPUComputePipeline, ktoré umožňujú kombinovať rôzne stavy, vopred definované vývojárom, čo umožňuje prehliadaču neužiť prostriedky na ďalšiu prácu, ako je prekompilácia shaderov. Medzi podporované stavy patria: shadery, rozloženia vertex bufferov a atribútov, rozloženia pripojených skupín, miešanie, hĺbka a šablóny, formáty výstupu po vykresľovaní.
- Model viazania, ktorý pripomína existujúce v Vulkan prostriedky skupinovania zdrojov. Na zlúčenie zdrojov do skupín poskytuje WebGPU objekt GPUBindGroup, ktorý je možné pri zápise príkazov previazať s inými takýmito objektmi na použitie v shadroch. Vytváranie takýchto skupín umožňuje ovládaču vopred vykonať potrebné prípravné kroky a prehliadaču uľahčuje značné zrýchlenie zmeny väzieb zdrojov medzi volaniami vykresľovania. Rozloženie väzieb zdrojov môže byť definované vopred pomocou objektu GPUBindGroupLayout.
Zdroj: opennet.ru
