WebGPU podrška dodana noćnim verzijama Firefoxa

В noć Firefox gradi pojavila podrška specifikacijama WebGPU, koji pruža programsko sučelje za obradu 3D grafike i računanje na strani GPU-a, konceptualno slično API-ju vulkan, metal и Direct3D 12. Specifikacije razvijaju Mozilla, Google, Apple, Microsoft i članovi zajednice radna grupa, koju je kreirala organizacija W3C.

Ključni cilj WebGPU-a je da obezbedi siguran, user-friendly, prenosiv i programski interfejs visokih performansi za Web platformu kako bi se iskoristile 3D grafičke tehnologije i mogućnosti koje pružaju moderni sistemski grafički API-ji, kao što je Direct3D 12 na Windows, Metal na macOS-u i Vulkan na Linuxu. Konceptualno, WebGPU se razlikuje od WebGL-a na isti način na koji se Vulkan razlikuje od OpenGL-a, a u isto vrijeme nije baziran na specifičnom grafičkom API-ju, već je univerzalni sloj koji općenito koristi iste primitive niskog nivoa koji se nalaze u Vulkanu, Metal i Direct3D.

WebGPU pruža JavaScript aplikacijama kontrolu nižeg nivoa nad organizacijom, obradom i prijenosom komandi na GPU, upravljanjem povezanim resursima, memorijom, baferima, objektima teksture i kompajliranim grafičkim shaderima. Ovaj pristup vam omogućava da postignete veće performanse za grafičke aplikacije smanjenjem režijskih troškova i povećanjem efikasnosti rada sa GPU-om.

WebGPU omogućava kreiranje punopravnih složenih 3D projekata za Web koji ne rade ništa lošije od samostalnih programa koji direktno pristupaju Vulkanu, Metalu ili Direct3D-u, ali nisu vezani za određene platforme. WebGPU takođe pruža dodatne mogućnosti prilikom prenosa izvornih grafičkih programa u web-omogućen oblik korišćenjem WebAssembly tehnologije. Pored 3D grafike, WebGPU takođe pokriva mogućnosti koje se odnose na prenošenje kalkulacija na GPU i podršku razvoju shadera. Shaders može biti kreiran u WebGPU jeziku za sjenčanje ili specificiran u srednjem SPIR-V formatu, a zatim preveden na jezike shadera koje podržavaju trenutni upravljački programi.

WebGPU koristi odvojeno upravljanje resursima, pripremni rad i prijenos komandi GPU-u (u WebGL-u je jedan objekt bio odgovoran za sve odjednom). Navedena su tri odvojena konteksta:
GPUDevice za kreiranje resursa kao što su teksture i baferi; GPUCommandEncoder za kodiranje pojedinačnih naredbi, uključujući faze renderiranja i izračunavanja; GPUCommandBuffer koji se stavlja u red čekanja za izvršenje na GPU-u. Rezultat se može prikazati u području povezanom s jednim ili više elemenata platna ili obraditi bez izlaza (na primjer, kada se izvršavaju računski zadaci). Razdvajanje faza olakšava odvajanje operacija kreiranja i pripreme resursa u različite rukovaoce koji se mogu izvoditi na različitim nitima.

Druga razlika između WebGPU-a i WebGL-a je drugačiji pristup rukovanju stanjima. WebGPU nudi dva objekta - GPURenderPipeline i GPUComputePipeline, koji vam omogućavaju da kombinujete različita stanja unapred definisana od strane programera, što omogućava pretraživaču da ne troši resurse na dodatni rad, kao što je ponovno kompajliranje shadera. Podržana stanja uključuju: shadere, međumemoriju vrhova i rasporede atributa, rasporede lepljivih grupa, mešanje, dubinu i obrasce i izlazne formate nakon renderovanja.

Treća karakteristika WebGPU-a se uglavnom zove model vezivanja
podsjeća na alate za grupisanje resursa prisutne u Vulkanu.
Za grupisanje resursa, WebGPU obezbjeđuje GPUbindGroup objekat, koji se može povezati sa drugim sličnim objektima za upotrebu u shaderima prilikom pisanja naredbi. Kreiranje takvih grupa omogućava drajveru da izvrši neophodne pripremne radnje unapred, i omogućava pretraživaču da promeni vezivanja resursa između poziva za crtanje mnogo brže. Izgled povezivanja resursa može se unaprijed definirati korištenjem GPUBindGroupLayout objekta.

WebGPU podrška dodana noćnim verzijama Firefoxa

U Firefoxu, da biste omogućili WebGPU u about:config, postoji postavka “dom.webgpu.enabled”. CanvasContext renderiranje također zahtijeva da se omogući komponiranje WebRender (“gfx.webrender.all” u about:config), napisano u Rust-u i prebacuje operacije prikazivanja sadržaja stranice na GPU. Implementacija WebGPU-a je bazirana na kodu projekta
wgpu, napisan u Rust-u i sposoban da radi preko DX12, Vulkan i Metal API-ja na Linuxu, Androidu, Windows-u i macOS-u (podrška za DX11 i OpenGL ES 3.0 je također u razvoju). Paralelno, Google razvija još jednu implementaciju, koja je dostupna u Canary branch Chromium i omogućen je pomoću oznake “chrome://flags/#enable-unsafe-webgpu”, ali do sada radi samo na macOS-u i Windows-u.

izvor: opennet.ru

Dodajte komentar