V zostaveniach Firefox podpora špecifikácie , poskytujúcej programové rozhranie na spracovanie 3D grafiky a výpočtov na strane GPU, konceptuálne podobné s API , a . Špecifikácia sa vyvíja v rámci Moziilly, Googlu, Applu, Microsoftu a zástupcov komunity v , ktorá bola vytvorená pod organizáciou W3C.
Kľúčovým cieľom WebGPU je vytvorenie bezpečného, pohodlného, prenosného a vysoko výkonného programového rozhrania pre použitie v webovej platforme technológií a možností 3D grafiky, poskytovaných modernými systémovými grafickými API, ako sú Direct3D 12 vo Windows, Metal v macOS a Vulkan v Linuxe. Konceptuálne sa WebGPU líši od WebGL približne rovnako ako Vulkan od OpenGL a nezakladá sa na konkrétnom grafickom API, ale predstavuje univerzálnu vrstvu, ktorá v zásade využíva rovnaké nízkoúrovňové primitíva, aké sú v Vulkan, Metal a Direct3D.
WebGPU poskytuje aplikáciám na JavaScripte prostriedky pre nižšiu úroveň kontroly nad organizáciou, spracovaním a prenosom príkazov na GPU, správou súvisiacich zdrojov, pamäťou, zásobníkmi, objektmi textúr a skompilovanými grafickými shadermi. Takýto prístup umožňuje dosiahnuť vyšší výkon grafických aplikácií vďaka zníženiu režijných nákladov a zvýšenej efektívnosti pri práci s GPU.
WebGPU umožňuje vytvárať pre web úplné komplexné 3D projekty, ktoré fungujú rovnako dobre ako samostatné programy, priamo komunikujúce s Vulkan, Metal alebo Direct3D, ale nie sú viazané na konkrétne platformy. WebGPU taktiež poskytuje ďalšie možnosti pri portovaní nativných grafických programov do formy, schopnej fungovať na báze webových technológií, vďaka aplikácii technológie WebAssembly. Okrem 3D grafiky WebGPU pokrýva aj možnosti spojené s presunom výpočtov na stranu GPU a podporou vývoja shaderov. Shadery byť vytvárané v jazyku WebGPU Shading Language alebo definované v medziformáte SPIR-V, ktorý sa následne prekladá do jazykov shaderov, podporovaných aktuálnymi ovládačmi.
V WebGPU sa uplatňuje oddelené riadenie zdrojov, prípravných prác a prenosu príkazov do GPU (v WebGL bol jeden objekt zodpovedný za všetko naraz). Poskytujú 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 výpočtov; GPUCommandBuffer na zaradenie do fronty na vykonanie do GPU. Výsledok môže byť vykreslený v oblasti spätej s jedným alebo viacerými prvkami canvas, alebo spracovaný bez výstupu (napríklad pri spúšťaní výpočtových úloh). Rozdelenie fáz uľahčuje rozdelenie vytvárania zdrojov a prípravných operácií do rôznych spracovateľov, ktoré môžu byť vykonávané v rôznych vláknach.
Druhým rozdielom WebGPU od WebGL je iný prístup k spracovaniu stavov. V WebGPU sa navrhujú dva objekty — GPURenderPipeline a GPUComputePipeline, ktoré umožňujú kombinovať rôzne stavy, vopred definované vývojárom, čo umožňuje prehliadaču nehádzať zdroje na vykonávanie dodatočnej práce, ako je prekompilácia shaderov. Medzi podporované stavy patria: shadery, rozloženia vertexových buffrov a atribútov, rozloženia pripojených skupín, miešanie, hĺbka a šablóny, formáty výstupu po vykreslení.
Tretia vlastnosť WebGPU sa nazýva model viazania, do veľkej miery
pripomínajúci existujúce prostriedky zoskupovania zdrojov vo Vulcanu.
Na zoskupenie zdrojov do skupín v WebGPU sa poskytuje objekt GPUBindGroup, ktorý je počas zápisu príkazov možné spojiť s inými podobnými objektmi na použitie v shadroch. Vytvorenie takýchto skupín umožňuje ovládaču vopred vykonať potrebné prípravné kroky a prehliadaču umožňuje výrazne rýchlejšie meniť viazania zdrojov medzi výkresovými volaniami. Rozloženie viazaní zdrojov môže byť definované vopred pomocou objektu GPUBindGroupLayout.

Vo Firefoxe je na povolenie WebGPU v about:config predpísaná nastavenie "dom.webgpu.enabled". Na vykreslenie CanvasContext je tiež potrebné povoliť systém kompozície ("gfx.webrender.all" v about:config), napísaný v jazyku Rust a presúvajúci na GPU operácie vykresľovania obsahu stránky. Implementácia WebGPU je založená na kóde projektu
, napísaného v jazyku Rust a schopného fungovať nad API DX12, Vulkan a Metal v Linuxe, Android, Windows a macOS (dokončujú sa aj podpora DX11 a OpenGL ES 3.0). Paralelne spoločnosť Google vyvíja inú implementáciu, ktorá je dostupná v Chromium a aktivuje sa pomocou vlajky „chrome://flags/#enable-unsafe-webgpu“, ale zatiaľ funguje len v macOS a Windows.
Zdroj: opennet.ru
