Podrška za WebGPU bit će omogućena u Chromeu

Google je najavio uključivanje zadane podrške za WebGPU grafički API i WGSL (WebGPU Shading Language) u Chrome 113, čije je izdanje zakazano za 2. svibnja. WebGPU pruža programsko sučelje slično Vulkanu, Metalu i Direct3D 12 za izvođenje operacija na strani GPU-a kao što su renderiranje i računanje, a također dopušta upotrebu jezika shadera za pisanje programa koji se pokreću na strani GPU-a. Implementacija WebGPU-a u početku će biti omogućena samo na verzijama ChromeOS-a, macOS-a i Windowsa. Za Linux i Android podrška za WebGPU bit će aktivirana kasnije.

Osim u Chromeu, eksperimentalna podrška za WebGPU testirana je od travnja 2020. u Firefoxu i od studenog 2021. u Safariju. Da biste omogućili WebGPU u Firefoxu, trebali biste postaviti oznake dom.webgpu.enabled i gfx.webgpu.force-enabled u about:config. Još uvijek nema planova za uključivanje WebGPU-a prema zadanim postavkama u Firefoxu i Safariju. WebGPU implementacije razvijene za Firefox i Chrome dostupne su u obliku zasebnih biblioteka - Dawn (C++) i wgpu (Rust), koje možete koristiti za integraciju WebGPU podrške u svoje aplikacije. Također se radi na dodavanju WebGPU podrške popularnim JavaScript bibliotekama koje izvorno koriste WebGL. Na primjer, puna podrška za WebGPU već je najavljena u Babylon.js, a djelomična podrška u Three.js, PlayCanvas i TensorFlow.js.

Konceptualno, WebGPU se razlikuje od WebGL-a na isti način na koji se Vulkan grafički API razlikuje od OpenGL-a, ali WebGPU se ne temelji na specifičnom grafičkom API-ju, već je univerzalni sloj koji koristi iste primitive niske razine koje se nalaze u Vulkanu, Metalu i Direct3D. WebGPU omogućuje JavaScript aplikacijama nisku razinu kontrole 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 složenih 3D projekata za web koji ne rade ništa lošije od samostalnih programa koji izravno koriste Vulkan, Metal ili Direct3D, ali nisu vezani za određene platforme. WebGPU također pruža dodatne mogućnosti za prijenos izvornih grafičkih programa u obrazac omogućen za web putem kompilacije u WebAssembly. Uz 3D grafiku, WebGPU također uključuje mogućnosti koje se odnose na prijenos kalkulacija na GPU i izvršavanje shadera.

Ključne značajke WebGPU-a:

  • Odvojeno upravljanje resursima, pripremni rad i prijenos naredbi na GPU (u WebGL-u jedan je objekt bio odgovoran za sve odjednom). Dostupna su tri odvojena konteksta: GPUDevice 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čiji pristup obradi stanja. 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.
  • Model vezivanja sličan Vulkanovim značajkama grupiranja resursa. Za grupiranje resursa zajedno, WebGPU pruža objekt GPUBindGroup, koji se može povezati s drugim sličnim objektima za korištenje u shaderima tijekom 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.

Izvor: opennet.ru

Dodajte komentar