Podjetje Google je napovedalo, da bo v privzetem nastavitvenju vključno z grafičnim API-jem WebGPU in jezikom senčil WGSL (WebGPU Shading Language) v različici Chrome 113, katere izid je predviden za 2. maj. WebGPU ponuja programskega vmesnika, ki je podoben Vulkan, Metal in Direct3D 12, za izvajanje operacij na strani GPU, kot so risanje in izračuni, ter omogoča uporabo jezika senčil za pisanje programov, ki delujejo na strani GPU. Izvedba WebGPU bo sprva vključena le v različice za ChromeOS, macOS in Windows. Podpora za WebGPU bo zatem omogočena za Linux in Android.
Poleg Chromesa se eksperimentalna podpora za WebGPU testira od aprila 2020 v Firefoxu in od novembra 2021 v Safariju. Za omogočanje WebGPU v Firefoxu je potrebno v about:config nastaviti zastavici dom.webgpu.enabled in gfx.webgpu.force-enabled. O načrtih za vključitev WebGPU privzeto v Firefox in Safari zaenkrat ni poročil. Razvoj realizacij WebGPU za Firefox in Chrome je na voljo v obliki ločenih knjižnic — Dawn (C++) in wgpu (Rust), ki jih je mogoče uporabiti za integracijo podpore WebGPU v vaše aplikacije. Prav tako poteka delo na dodajanju podpore WebGPU v priljubljene JavaScript knjižnice, ki prvotno uporabljajo WebGL. Na primer, popolna podpora za WebGPU je že napovedana v Babylon.js, delna pa v Three.js, PlayCanvas in TensorFlow.js.
Konceptualno se WebGPU razlikuje od WebGL približno tako, kot se grafični API Vulkan razlikuje od OpenGL, pri čemer pa WebGPU ni odvisen od specifičnega grafičnega API-ja, temveč predstavlja univerzalno plast, ki uporablja iste nizko-nivojske primitivne tipe, ki so na voljo v Vulkan, Metal in Direct3D. WebGPU aplikacijam v JavaScriptu omogoča nizko-nivojski nadzor nad organizacijo, obdelavo in prenosom ukazov na GPU, upravljanje povezanih virov, pomnilnika, zbirki podatkov, objekti teksturami in prevedenimi grafičnimi senčili. Takšen pristop omogoča dosego višje zmogljivosti grafičnih aplikacij z zmanjšanjem stroškov in povečanjem učinkovitosti pri delu z GPU.
WebGPU omogoča ustvarjanje kompleksnih 3D projektov za splet, ki delujejo enako dobro kot samostojne aplikacije, ki neposredno uporabljajo Vulkan, Metal ali Direct3D, a niso vezane na specifične platforme. WebGPU prav tako nudi dodatne možnosti pri prenosu nativnih grafičnih programov v obliko, ki je sposobna delovati na osnovi spletnih tehnologij, zahvaljujoč prevajanju v WebAssembly. Poleg 3D grafike WebGPU zajema tudi možnosti, povezane z izvozom izračunov na GPU in izvajanjem senčilnikov.
Ključne značilnosti WebGPU:
- Ločeno upravljanje z viri, pripravami in posredovanjem ukazov v GPU (v WebGL je en objekt odgovarjal za vse hkrati). Na voljo so trije ločeni konteksti: GPUDevice za ustvarjanje virov, kot so teksture in predpomnilniki; GPUCommandEncoder za kodiranje posameznih ukazov, vključno s fazami upodabljanja in izračunavanja; GPUCommandBuffer za prenos v čakalno vrsto za izvajanje na GPU. Rezultat je mogoče upodobiti v območju, povezanim z enim ali več elementi canvas, ali obdelati brez izhoda (na primer pri izvajanju izračunskih nalog). Ločitev faz poenostavi razporeditev ustvarjanja virov in pripravljalne operacije v različne obdelovalnike, ki se lahko izvajajo v različnih niti.
- Držen pristop pri obdelavi stanj. V WebGPU sta na voljo dva objekta — GPURenderPipeline in GPUComputePipeline, ki omogočata združevanje različnih stanj, vnaprej opredeljenih s strani razvijalca, kar omogoča brskalniku, da ne troši virov za dodatno delo, kot je ponovna kompilacija senčilnikov. Med podprtimi stanji so: senčilniki, razporeditve predpomnilnikov in atributov, razporeditve pripetih skupin, mešanje, globina in predloge ter formati izhoda po upodabljanju.
- Model povezivanja koja u velikoj meri podseća na postojeće mehanizme grupisanja resursa u Vulkanu. Za grupisanje resursa u WebGPU koristi se objekat GPUBindGroup, koji se prilikom zapisivanja komandi može povezati s drugim sličnim objektima za korišćenje u šejderima. Kreiranje ovakvih grupa omogućava drajveru da unapred izvrši potrebne pripremne radnje, dok pregledniku omogućava značajno bržu promenu veza resursa između poziva za renderovanje. Raspored veza resursa može se unapred odrediti pomoću objekta GPUBindGroupLayout.
Izvor: opennet.ru
