V zbirke Firefox podpora specifikacije , ki zagotavlja programski vmesnik za obdelavo 3D grafike in izračune na GPU, konceptualno podoben API-ju , in . Specifikacija se razvija z sodelovanjem Mozilla, Google, Apple, Microsoft in predstavnikov skupnosti v , ustanovljeni pod okriljem W3C.
Ključna naloga WebGPU je ustvarjanje varnega, enostavnega, prenosljivega in visoko zmogljivega programskega vmesnika za uporabo na spletni platformi za tehnologije in možnosti 3D grafike, ki jih ponujajo sodobni sistemski grafični API-ji, kot so Direct3D 12 v operacijskem sistemu Windows, Metal v macOS in Vulkan v Linuxu. Konceptualno se WebGPU razlikuje od WebGL tako, kot se Vulkan razlikuje od OpenGL, in ne temelji na specifičnem grafičnem API-ju, temveč predstavlja univerzalni sloj, ki na splošno uporablja iste nizkotovne prvine, kot so v Vulkan, Metal in Direct3D.
WebGPU aplikacijam v JavaScriptu omogoča nižjo stopnjo nadzora nad organizacijo, obdelavo in prenosom nalog na GPU, upravljanje povezanih virov, pomnilnika, pomnilniških blokov, teksturnih objektov in skompiliranih grafičnih senčil. Tak pristop omogoča dosego višje zmogljivosti grafičnih aplikacij z zmanjšanjem stroškov in povečanjem učinkovitosti dela z GPU.
WebGPU omogoča ustvarjanje polnovrednih zapletenih 3D projektov za splet, ki delujejo enako dobro kot samostojne programe, ki neposredno komunicirajo z Vulkan, Metal ali Direct3D, vendar niso vezani na specifične platforme. WebGPU ponuja tudi dodatne možnosti pri prenosu nativnih grafičnih programov v obliko, ki lahko deluje na podlagi spletnih tehnologij, z uporabo tehnologije WebAssembly. Poleg 3D grafike WebGPU zajema tudi možnosti, povezane z prenosom izračunov na stran GPU in podporo za razvoj senčil. Senčila lahko se ustvarjajo v jeziku WebGPU Shading Language ali določati v vmesnem formatu SPIR-V, nato pa se prevajajo v jezike senčil, ki jih podpirajo trenutni gonilniki.
V WebGPU se uporablja ločeno upravljanje virov, pripravnimi nalogami in prenosom nalog na GPU (v WebGL je en objekt odgovoren za vse). Na voljo so trije ločeni konteksti:
GPUDevice za ustvarjanje virov, kot so teksture in buffri; GPUCommandEncoder za kodiranje posameznih ukazov, vključno s fazami upodabljanja in izračunavanja; GPUCommandBuffer za nalaganje v vrsto za izvajanje na GPU. Rezultat je lahko narisan v prostoru, ki je povezan z enim ali več elementi canvas, ali obdelan brez izhoda (na primer, pri izvajanju izračunskih nalog). Ločevanje faz olajša razporeditev ustvarjanja virov in pripravljalnih operacij v različne obdelovalce, ki jih je mogoče izvajati v različnih nitih.
Druga razlika med WebGPU in WebGL je drugačen pristop k obdelavi stanj. V WebGPU sta na voljo dva objekta — GPURenderPipeline in GPUComputePipeline, ki omogočata kombiniranje različnih stanj, vnaprej določenih s strani razvijalca, kar omogoča brskalniku, da ne troši virov za dodatno delo, kot je ponovna kompilacija senčil. Med podprtimi stanji so: senčila, razporeditve vertikalnih buffrov in atributov, razporeditve pritrjenih skupin, mešanje, globina in predloge, formati izhoda po upodabljanju.
Tretja značilnost WebGPU se imenuje model povezovanja, ki v veliki meri
spominja na obstoječa orodja za skupinsko upravljanje virov v Vulkan.
Za združevanje virov v skupine WebGPU ponuja objekt GPUBindGroup, ki ga je mogoče med zapisovanjem ukazov povezati z drugimi podobnimi objekti za uporabo v senčilih. Ustvarjanje takih skupin omogoča gonilniku, da vnaprej izvede potrebne pripravljalne korake, brskalniku pa omogoča znatno hitrejšo spremembo povezav virov med klici za upodabljanje. Razporeditev povezav virov je mogoče vnaprej določiti s pomočjo objekta GPUBindGroupLayout.

V Firefoksu mora biti za omogočanje WebGPU v about:config aktivirana nastavitev „dom.webgpu.enabled“. Za upodabljanje CanvasContext je prav tako potrebno omogočiti sistem sestavljanja („gfx.webrender.all“ v about:config), napisan v jeziku Rust in prenaša na GPU operacije upodabljanja vsebine strani. Uresničitev WebGPU temelji na kodi projekta
, napisanega v jeziku Rust in sposobnega delovati nad API DX12, Vulkan in Metal v Linuxu, Androidu, Windows in macOS (v razvoju je tudi podpora za DX11 in OpenGL ES 3.0). Hkrati podjetje Google razvija drugo uresničitev, ki je na voljo v Chromium se aktivira putem oznake „chrome://flags/#enable-unsafe-webgpu“, ali trenutno radi samo na macOS-u i Windows-u.
Izvor: opennet.ru
