WebGPU podrška će biti omogućena u Chromeu

Google je najavio podrazumevanu podršku za WebGPU grafički API i WebGPU Shading Language (WGSL) u Chrome 113 grani, koja je zakazana za puštanje 2. maja. WebGPU pruža API sličan Vulkanu, Metalu i Direct3D 12 za izvođenje operacija na strani GPU-a kao što su renderiranje i izračunavanje, a također vam omogućava da koristite jezik shadera za pisanje programa na strani GPU-a. Implementacija WebGPU-a bit će u početku omogućena samo u verzijama za ChromeOS, macOS i Windows. Za Linux i Android, WebGPU podrška će biti aktivirana kasnije.

Pored Chrome-a, eksperimentalna podrška za WebGPU testirana je od aprila 2020. u Firefoxu i od novembra 2021. u Safariju. Da biste omogućili WebGPU u Firefoxu, postavite zastavice dom.webgpu.enabled i gfx.webgpu.force-enabled u about:config. Još uvijek nema planova za omogućavanje WebGPU-a po defaultu 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. U toku je i rad na dodavanju podrške za WebGPU popularnim JavaScript bibliotekama koje izvorno koriste WebGL. Na primjer, puna WebGPU podrška je već 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 nije baziran na specifičnom grafičkom API-ju, već je sloj opće namjene koji koristi iste primitive niskog nivoa koji se nalaze u Vulkanu, Metal i Direct3D. WebGPU pruža JavaScript aplikacijama kontrolu niskog 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 grafičkih aplikacija smanjenjem troškova i povećanjem efikasnosti GPU-a.

WebGPU omogućava kreiranje složenih 3D projekata za Web koji rade kao i samostalnih programa koji direktno koriste Vulkan, Metal ili Direct3D, ali nisu vezani za određene platforme. WebGPU takođe pruža dodatne opcije za prenošenje izvornih grafičkih programa na web-omogućen obrazac kompajliranjem u WebAssembly. Pored 3D grafike, WebGPU takođe pokriva mogućnosti povezane sa prebacivanjem kalkulacija na GPU stranu i izvršavanjem shadera.

Ključne karakteristike WebGPU-a:

  • Odvojeno upravljanje resursima, pripremni rad i prenos komandi GPU-u (u WebGL-u je jedan objekat bio odgovoran za sve odjednom). Obezbeđena su tri odvojena konteksta: GPDevice za kreiranje resursa kao što su teksture i baferi; GPUCommandEncoder za kodiranje pojedinačnih komandi, uključujući faze prikazivanja i izračunavanja; GPUCommandBuffer za prolazak u red za pokretanje GPU-a. 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 resursa i obezbjeđivanja u različite rukovaoce koji se mogu izvoditi na različitim nitima.
  • Drugačiji pristup rukovanju stanjima. WebGPU obezbeđuje 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, izlazne formate nakon renderovanja.
  • Model povezivanja, sličan Vulkanovim alatima za grupisanje resursa. Za grupisanje resursa u grupe, WebGPU obezbjeđuje GPUBindGroup objekat koji može biti vezan za druge slične objekte za upotrebu u shaderima tokom snimanja komande. 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.

izvor: opennet.ru

Dodajte komentar