Konsorcium W3C představilo první návrhy specifikací WebGPU a WebGPU Shading Language (WGSL), které definují API pro provádění operací na GPU, jako je rendering a výpočty, a také jazyk shaderů pro psaní programů pracujících na straně GPU. Konceptuálně je podobný API Vulkan, Metal a Direct3D 12. Specifikace byly připraveny pracovní skupinou, do které byli zapojeni inženýři z Mozilla, Google, Apple a Microsoft.
Konceptuálně se WebGPU od WebGL liší zhruba stejně, jako se grafické API Vulkan liší od OpenGL, ale není založen na konkrétním grafickém API a představuje univerzální vrstvu, která používá stejné nízkoúrovňové primitiva, jaká jsou v Vulkan, Metal a Direct3D. WebGPU poskytuje aplikacím v JavaScriptu prostředky pro nízkoúrovňovou kontrolu organizace, zpracování a přenos příkazů na GPU, řízení souvisejících zdrojů, paměti, bufferů, objektů textur a zkompilovaných grafických shaderů. Takový přístup umožňuje dosáhnout vyšší výkonnosti grafických aplikací snížením režijní zátěže a zvýšením účinnosti práce s GPU.
WebGPU umožňuje vytvářet pro Web složité 3D projekty, které fungují stejně dobře jako samostatné programy přímo komunikující s Vulkan, Metal nebo Direct3D, ale nejsou vázány na konkrétní platformy. WebGPU také poskytuje další možnosti při portování nativních grafických programů do formy schopné fungovat na základě webových technologií díky kompilaci do WebAssembly. Kromě 3D grafiky WebGPU zahrnuje také možnosti spojené s přesunem výpočtů na stranu GPU a prováděním shaderů.
Klíčové vlastnosti WebGPU:
- Oddělená správa zdrojů, přípravných prací a předávání příkazů na GPU (ve WebGL byl jeden objekt zodpovědný za všechno najednou). Jsou poskytovány tři oddělené kontexty: GPUDevice pro vytváření zdrojů, jako jsou textury a bufferové paměti; GPUCommandEncoder pro kódování jednotlivých příkazů, včetně fází renderování a výpočtů; GPUCommandBuffer pro odesílání do fronty k vykonání na GPU. Výsledek může být vykreslen v oblasti spojené s jedním nebo více elementy canvasu, nebo zpracován bez výstupu (například při spuštění výpočtových úloh). Oddělení fází usnadňuje rozložení vytváření zdrojů a přípravných operací do různých zpracovatelů, které mohou běžet v různých vláknech.
- Odlišný přístup při zpracování stavů. Ve WebGPU jsou nabízeny dva objekty — GPURenderPipeline a GPUComputePipeline, které umožňují kombinovat různá zařízení, dříve definovaná vývojářem, což umožňuje prohlížeči neužívat zdroje na dodatečné úkoly, jako je překompilace shaderů. Mezi podporované stavy patří: shadery, rozložení vertex bufferů a atributů, rozložení připojených skupin, míchání, hloubka a šablony, formáty výstupu po renderování.
- Model vazby, která v mnoha ohledech připomíná současné prostředky seskupování zdrojů ve Vulkánu. Pro seskupení zdrojů do skupin poskytuje WebGPU objekt GPUBindGroup, který lze při zápisu příkazů spojit s dalšími podobnými objekty pro použití ve shaderech. Vytváření těchto skupin umožňuje ovladači provést potřebné přípravné kroky předem a prohlížeči to umožňuje výrazně rychleji měnit vazby zdrojů mezi výkony vykreslování. Rozložení vazeb zdrojů lze určit předem pomocí objektu GPUBindGroupLayout.
Zdroj: opennet.ru
