Do nočních sestav Firefoxu byla přidána podpora WebGPU

В noční Sestaví Firefox se objevil podpora specifikace WebGPU, který poskytuje programovací rozhraní pro zpracování 3D grafiky a výpočty na straně GPU, koncepčně podobné API Vulkan, metal и Direct3D 12. Specifikace vyvíjejí Mozilla, Google, Apple, Microsoft a členové komunity v pracovní skupina, vytvořený organizací W3C.

Hlavním cílem WebGPU je poskytnout bezpečné, uživatelsky přívětivé, přenosné a vysoce výkonné programovací rozhraní pro webovou platformu pro využití 3D grafických technologií a schopností poskytovaných moderními systémovými grafickými API, jako je Direct3D 12 na Windows, Metal na macOS a Vulkan na Linuxu. Koncepčně se WebGPU liší od WebGL v podstatě stejným způsobem, jakým se Vulkan liší od OpenGL, a zároveň není založeno na specifickém grafickém API, ale je univerzální vrstvou, která obecně používá stejná nízkoúrovňová primitiva jako ve Vulkanu, Metal a Direct3D.

WebGPU poskytuje aplikacím JavaScriptu nižší úroveň kontroly nad organizací, zpracováním a přenosem příkazů do GPU, správu souvisejících zdrojů, paměti, vyrovnávacích pamětí, texturových objektů a kompilovaných grafických shaderů. Tento přístup umožňuje dosáhnout vyššího výkonu pro grafické aplikace snížením režijních nákladů a zvýšením efektivity práce s GPU.

WebGPU umožňuje vytvářet plnohodnotné komplexní 3D projekty pro web, které nefungují hůře než samostatné programy, které přímo přistupují k 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 webové podoby pomocí technologie WebAssembly. Kromě 3D grafiky pokrývá WebGPU také možnosti související s přesunem výpočtů na GPU a podporou vývoje shaderů. Shadery plechovka být vytvořeny ve WebGPU Shading Language nebo specifikovány v přechodném formátu SPIR-V a poté přeloženy do shader jazyků podporovaných aktuálními ovladači.

WebGPU využívá oddělenou správu zdrojů, přípravné práce a přenos příkazů do GPU (ve WebGL byl za vše zodpovědný 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 bude zařazen do fronty pro spuštění na GPU. Výsledek lze vykreslit v oblasti spojené s jedním nebo více prvky plátna nebo zpracovat 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í a přípravy zdrojů do různých obslužných programů, které mohou běžet na různých vláknech.

Druhým rozdílem mezi WebGPU a WebGL je odlišný přístup k zacházení se stavy. WebGPU nabízí dva objekty – GPURenderPipeline a GPUComputePipeline, které umožňují kombinovat různé stavy předem definované 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 a výstupní formáty po vykreslení.

Třetí vlastnost WebGPU se z velké části nazývá model vazby
připomínající nástroje pro seskupování zdrojů přítomné ve Vulkanu.
Pro seskupení zdrojů poskytuje WebGPU objekt GPUBindGroup, který lze přiřadit k dalším podobným objektům pro použití v shaderech při psaní příkazů. Vytvoření takových skupin umožňuje ovladači provádět 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.

Do nočních sestav Firefoxu byla přidána podpora WebGPU

Ve Firefoxu je k povolení WebGPU v about:config k dispozici nastavení „dom.webgpu.enabled“. Vykreslování CanvasContext také vyžaduje, aby bylo povoleno skládání WebRender (“gfx.webrender.all” v about:config), napsaný v Rustu a outsourcing operací vykreslování obsahu stránky na GPU. Implementace WebGPU je založena na kódu projektu
wgpu, napsaný v Rustu a schopný běžet nad rozhraními DX12, Vulkan a Metal API na Linuxu, Androidu, Windows a macOS (ve vývoji je také podpora DX11 a OpenGL ES 3.0). Souběžně s tím Google vyvíjí další implementaci, která je dostupná v Kanárská větev Chromium a je povoleno pomocí příznaku „chrome://flags/#enable-unsafe-webgpu“, ale zatím funguje pouze na macOS a Windows.

Zdroj: opennet.ru

Přidat komentář