WebGPU podrška dodana noćnim verzijama Firefoxa

В noć Firefox međugradnje pojavio podrška za specifikaciju WebGPU, koji pruža programsko sučelje za obradu 3D grafike i GPU računalstvo, konceptualno slično API-ju Vulkan, Metal и Direct3D 12. Specifikaciju razvijaju Mozilla, Google, Apple, Microsoft i članovi zajednice u radna skupina, koju je izradila organizacija W3C.

Ključni cilj WebGPU-a je osigurati sigurno, user-friendly, prenosivo i programsko sučelje visokih performansi za web platformu kako bi se iskoristile tehnologije 3D grafike i mogućnosti koje pružaju moderni sistemski grafički API-ji, kao što su Direct3D 12 na Windowsima, 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 istovremeno se ne temelji na specifičnom grafičkom API-ju, već je univerzalni sloj koji općenito koristi iste primitive niske razine koje se nalaze u Vulkanu, Metal i Direct3D.

WebGPU omogućuje JavaScript aplikacijama kontrolu niže razine nad organizacijom, obradom i prijenosom naredbi GPU-u, upravljanje pridruženim resursima, memorijom, međuspremnicima, objektima teksture i sastavljenim grafičkim shaderima. Ovaj vam pristup omogućuje postizanje većih performansi za grafičke aplikacije smanjenjem režijskih troškova i povećanjem učinkovitosti rada s GPU-om.

WebGPU omogućuje stvaranje punopravnih složenih 3D projekata za web koji rade ništa lošije od samostalnih programa koji izravno pristupaju Vulkanu, Metalu ili Direct3D, ali nisu vezani za određene platforme. WebGPU također pruža dodatne mogućnosti prilikom prijenosa izvornih grafičkih programa u obrazac omogućen za web korištenjem tehnologije WebAssembly. Uz 3D grafiku, WebGPU također uključuje mogućnosti koje se odnose na prijenos kalkulacija na GPU i podršku razvoju shadera. Shaderi moći biti izrađen u WebGPU Shading Language ili specificiran u srednjem SPIR-V formatu, a zatim preveden u shader jezike koje podržavaju trenutni upravljački programi.

WebGPU koristi zasebno upravljanje resursima, pripremnim radom i prijenosom naredbi na GPU (u WebGL-u je jedan objekt bio odgovoran za sve odjednom). Navedena su tri odvojena konteksta:
GPUDuređaj za stvaranje resursa kao što su teksture i međuspremnici; GPUCommandEncoder za kodiranje pojedinačnih naredbi, uključujući faze renderiranja i izračuna; GPUCommandBuffer koji će biti stavljen u red čekanja za izvršenje na GPU-u. Rezultat se može prikazati u području koje je povezano s jednim ili više elemenata platna ili se može obraditi bez izlaza (na primjer, kada se izvode računalni zadaci). Odvajanje faza olakšava razdvajanje operacija stvaranja i pripreme resursa u različite rukovatelje 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ćuju kombiniranje različitih stanja unaprijed definiranih od strane programera, što omogućuje pregledniku da ne troši resurse na dodatni rad, kao što je ponovno kompajliranje shadera. Podržana stanja uključuju: shadere, međuspremnik vrhova i rasporede atributa, rasporede ljepljivih grupa, miješanje, dubinu i uzorke te izlazne formate nakon renderiranja.

Treća značajka WebGPU-a uglavnom se naziva model vezivanja
podsjeća na alate za grupiranje resursa prisutne u Vulkanu.
Za grupiranje resursa zajedno, WebGPU pruža objekt GPUBindGroup, koji se može povezati s drugim sličnim objektima za korištenje u shaderima prilikom pisanja naredbi. Stvaranje takvih grupa omogućuje vozaču da izvrši potrebne pripremne radnje unaprijed, a pregledniku omogućuje mnogo bržu promjenu veza resursa između poziva crtanja. Raspored povezivanja resursa može se unaprijed definirati pomoću objekta GPUBindGroupLayout.

WebGPU podrška dodana noćnim verzijama Firefoxa

U Firefoxu, kako biste omogućili WebGPU u about:config, postoji postavka “dom.webgpu.enabled”. CanvasContext renderiranje također zahtijeva da bude omogućeno sastavljanje WebRender ("gfx.webrender.all" u about:config), napisan u Rustu i prepušta operacije renderiranja sadržaja stranice GPU-u. Implementacija WebGPU-a temelji se na kodu projekta
wgpu, napisan u Rustu i sposoban za rad povrh DX12, Vulkan i Metal API-ja na Linuxu, Androidu, Windowsu i macOS-u (podrška za DX11 i OpenGL ES 3.0 također je u razvoju). Paralelno, Google razvija drugu implementaciju, koja je dostupna u Kanarinska grana Chromium i omogućen je pomoću oznake “chrome://flags/#enable-unsafe-webgpu”, ali zasad radi samo na macOS-u i Windowsima.

Izvor: opennet.ru

Dodajte komentar