U buildovima Firefox-a podrška za specifikaciju , koji pruža programski interfejs za obradu 3D grafike i proračune na strani GPU-a, konceptualno sličan API-ju , i . Specifikacija se razvija uz podršku Mozille, Google-a, Apple-a, Microsoft-a i predstavnika zajednice u , formiranoj unutar organizacije W3C.
Ključni zadatak WebGPU-a je kreiranje sigurnog, praktičnog, prenosivog i visoko performatnog programskog interfejsa za korišćenje na Web platformama, koji koristi tehnologije i mogućnosti 3D grafike koje pružaju savremeni sistemski grafički API-ji, kao što su Direct3D 12 u Windows-u, Metal u macOS-u i Vulkan u Linux-u. Konceptualno, WebGPU se razlikuje od WebGL-a otprilike na isti način na koji se Vulkan razlikuje od OpenGL-a, a ne oslanja se na konkretni grafički API, već predstavlja univerzalni sloj, koji uopšteno koristi iste niskolevelske primitive koje imaju Vulkan, Metal i Direct3D.
WebGPU omogućava JavaScript aplikacijama da imaju bolju kontrolu nad organizacijom, obradom i prenosom komandi ka GPU-u, upravljanjem povezanim resursima, memorijom, baferima, objektima tekstura i kompajliranim grafičkim šejderima. Ovaj pristup omogućava postizanje viših performansi grafičkih aplikacija smanjenjem troškova i povećanjem efikasnosti rada s GPU-om.
WebGPU omogućava kreiranje potpunih složenih 3D projekata za web koji rade jednako dobro kao samostalne aplikacije koje direktno komuniciraju s Vulkan-om, Metal-om ili Direct3D-om, ali nisu vezane za konkretne platforme. WebGPU takođe pruža dodatne mogućnosti prilikom portovanja nativnih grafičkih programa u oblik koji može raditi na osnovu web tehnologija, zahvaljujući upotrebi WebAssembly tehnologije. Pored 3D grafike, WebGPU obuhvata i mogućnosti povezane s izvođenjem proračuna na strani GPU-a i podršku za razvoj šejdera. Šejderi mogu se kreirati na jeziku WebGPU Shading Language ili zadavati u međufaznom formatu SPIR-V, koji se zatim prevodi u jezike šejdera podržane trenutnim drajverima.
U WebGPU se primenjuje odvojeno upravljanje resursima, pripremnim radovima i prenosom komandi u GPU (u WebGL-u jedan objekat je odgovarao za sve). Dostupna su tri odvojena konteksta:
GPUDevice za kreiranje resursa kao što su teksture i baferi; GPUCommandEncoder za kodiranje pojedinačnih komandi, uključujući faze renderiranja i izračuna; GPUCommandBuffer za stavljanje u red za izvršavanje na GPU-u. Rezultat se može prikazati u okviru povezanom s jednim ili više elemenata canvas, ili obraditi bez prikazivanja (na primjer, tokom izvođenja računalnih zadataka). Razdvajanje faza pojednostavljuje raspodjelu kreiranja resursa i pripremnih operacija na različite rukovatelje koji se mogu izvršavati u različitim nitima.
Druga razlika između WebGPU i WebGL je drugačiji pristup upravljanju stanjima. U WebGPU se nude dva objekta — GPURenderPipeline i GPUComputePipeline, koji omogućavaju kombinovanje različitih stanja unaprijed definiranih od strane programera, čime se omogućava pregledniku da ne troši resurse na dodatni rad kao što je rekonstrukcija šejdera. Među podržanim stanjima su: šejderi, raspored vertex bafera i atributa, raspored povezanih grupa, miješanje, dubina i obrasci, formati izlaza nakon renderiranja.
Treća karakteristika WebGPU-a je model povezivanja, koji u velikoj mjeri
podsjeća na alate za grupisanje resursa prisutne u Vulkan-u.
Za grupisanje resursa u WebGPU dostupan je objekt GPUBindGroup, koji se tokom zapisivanja komandi može povezati s drugim sličnim objektima za korištenje u šejderima. Kreiranje takvih grupa omogućava drajveru da unaprijed izvrši potrebne pripremne korake, dok pregledniku omogućava značajno bržu promjenu veza resursa između poziva za renderiranje. Raspored veza resursa može se unaprijed definirati pomoću objekta GPUBindGroupLayout.

U Firefox-u, da bi se uključio WebGPU, u about:config postoji opcija "dom.webgpu.enabled". Za renderiranje CanvasContext-a također je potrebno uključiti sistem kompozicije ("gfx.webrender.all" u about:config), napisan na jeziku Rust koji prebacuje na GPU izvođenje operacija renderiranja sadržaja stranice. Implementacija WebGPU-a temelji se na kodu projekta
, napisanog na jeziku Rust i sposobnog da radi iznad API-ja DX12, Vulkan i Metal na Linux-u, Android-u, Windows-u i macOS-u (u razvoju je i podrška za DX11 i OpenGL ES 3.0). Paralelno, kompanija Google razvija drugu implementaciju koja je dostupna u Chromium se uključuje putem opcije «chrome://flags/#enable-unsafe-webgpu», ali za sada radi samo na macOS-u i Windows-u.
Izvor: opennet.ru
