Mozilla se rozhodla povolit ve Firefoxu podporu pro WebGPU API a WGSL (WebGPU Shading Language). Pro platformu Windows Podpora WebGPU bude ve Firefoxu 141, která je naplánována na 22. července, standardně povolena. Podpora WebGPU by pak měla být povolena v buildech v následujících měsících: Linux и macOSa po nějaké době i ve verzi pro platformu AndroidChcete-li ručně povolit WebGPU, můžete použít parametry „dom.webgpu.enabled“ a „gfx.webrender.all“ na stránce about:config.
V prohlížeči Chrome byla podpora WebGPU standardně nabízena ve verzi 113, vydané v květnu 2023. V Safari se plánuje, že podpora WebGPU bude standardně povolena letos na podzim (experimentální podpora je k dispozici od listopadu 2021). Ve Firefoxu je experimentální podpora WebGPU přítomna od roku 2020, ale standardně byla povolena pouze v nočních sestaveních Firefoxu. Implementace WebGPU ve Firefoxu je založena na kódu projektu WGPU, napsaném v Rustu a schopném běhu nad grafickými API Direct3D 12, Vulkan, OpenGL a Metal.
WebGPU poskytuje podobné API jako Vulkan, Metal a Direct3D 12 pro provádění operací na straně GPU. Kromě 3D grafiky pokrývá WebGPU také možnosti související s přesměrováním výpočtů na stranu GPU a spouštěním shaderů. Koncepčně se WebGPU liší od staré specifikace WebGL podobně, jako se grafické API Vulkan liší od OpenGL. Zároveň WebGPU není založeno na specifickém grafickém API, ale je univerzální vrstvou, která používá stejné nízkoúrovňové primitivy, jaké jsou k dispozici ve Vulkanu, Metalu a Direct3D.
WebGPU umožňuje JavaScriptovým aplikacím řídit organizaci, zpracování a přenos příkazů do GPU a spravovat související zdroje, paměť, vyrovnávací paměti, texturní objekty a kompilované grafické shadery. Tento přístup umožňuje vyšší výkon grafických aplikací snížením režijních nákladů a zvýšením efektivity práce s GPU.
S WebGPU můžete vytvářet platformně nezávislé, komplexní 3D projekty, které fungují stejně dobře jako samostatné programy přímo využívající Vulkan, Metal nebo Direct3D. WebGPU také poskytuje další možnosti pro portování nativních grafických programů do podoby, kterou lze spustit v prohlížečích, a to díky kompilaci do WebAssembly.
Klíčové vlastnosti WebGPU a rozdíly oproti WebGL:
- Samostatná správa zdrojů, přípravné práce a přenos příkazů do GPU (ve WebGL za vše odpovídal jeden objekt najednou). K dispozici jsou tři samostatné kontexty: GPUDevice pro vytváření zdrojů, jako jsou textury a vyrovnávací paměti; GPUCommandEncoder pro kódování jednotlivých příkazů, včetně fází vykreslování a výpočtu; GPUCommandBuffer k předání do fronty běhu GPU. Výsledek lze vykreslit v oblasti spojené s jedním nebo více prvky plátna nebo vykreslit bez výstupu (například při spouštění výpočetních úloh). Oddělení fází usnadňuje oddělení operací vytváření zdrojů a zajišťování do různých obslužných programů, které mohou běžet na různých vláknech.
- Jiný přístup k zacházení se stavy. WebGPU poskytuje dva objekty – GPURenderPipeline a GPUComputePipeline, které vám umožňují kombinovat různé stavy předdefinované vývojářem, což prohlížeči umožňuje neplýtvat prostředky na další práci, jako je rekompilace shaderů. Mezi podporované stavy patří: shadery, rozvržení vyrovnávací paměti vertexů a atributů, rozvržení lepivých skupin, prolnutí, hloubka a vzory, výstupní formáty po vykreslení.
- Závazný model, podobně jako Vulkanovy nástroje pro seskupování zdrojů. Pro seskupení zdrojů do skupin poskytuje WebGPU objekt GPUBindGroup, který může být v době psaní příkazů spojen s jinými podobnými objekty pro použití v shaderech. Vytvoření takových skupin umožňuje ovladači provést potřebné přípravné akce předem a umožňuje prohlížeči mnohem rychleji měnit vazby prostředků mezi voláními draw. Rozvržení vazeb prostředků lze předdefinovat pomocí objektu GPUBindGroupLayout.
Zdroj: opennet.ru
