W3C je predstavil prve osnutke specifikacij WebGPU in WebGPU Shading Language (WGSL), ki definirata API za izvajanje operacij na GPU, kot so risanje in izračuni, ter jezik senčil za pisanje programov, ki delujejo na GPU. Konceptualno je podoben API-jem Vulkan, Metal in Direct3D 12. Specifikacije so pripravljene s strani delovne skupine, v kateri so inženirji iz podjetij Mozilla, Google, Apple in Microsoft.
Konceptualno se WebGPU razlikuje od WebGL približno tako, kot se grafični API Vulkan razlikuje od OpenGL, vendar se ne naslanja na določen grafični API, temveč predstavlja univerzalno plast, ki uporablja iste nizko-nivojske primitivne funkcije, ki jih najdemo v Vulkan, Metal in Direct3D. WebGPU aplikacijam na JavaScript zagotavlja nizko-nivojski nadzor nad organizacijo, obdelavo in prenosom ukazov na GPU, upravljanje povezanih virov, pomnilnika, predpomnilnikov, teksturnih objektov in prevedenih grafičnih senčil. Tak pristop omogoča dosego višje zmogljivosti grafičnih aplikacij z zmanjšanjem stroškov in povečanjem učinkovitosti dela z GPU.
WebGPU omogoča ustvarjanje za splet zapletenih 3D-projektov, ki delujejo enako dobro kot samostojne programe, ki neposredno uporabljajo Vulkan, Metal ali Direct3D, vendar niso vezani na določene platforme. WebGPU prav tako ponuja dodatne možnosti pri prenosu nativnih grafičnih programov v obliko, ki lahko deluje na osnovi spletnih tehnologij, zahvaljujoč prevodu v WebAssembly. Poleg 3D-grafike WebGPU zajema tudi možnosti, povezane z izvajanjem izračunov na GPU in izvajanjem senčil.
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
