Google kuulutas vÀlja WebGPU ja WGSL (WebGPU Shading Language) toe lubamise vaikimisi Chrome 113 versioonis, mille vÀljalaskmine on planeeritud 2. maiks. WebGPU pakub GPU-l opereerimiseks, nagu renderdamine ja arvutused, sarnast liidest nagu Vulkan, Metal ja Direct3D 12 ning vÔimaldab kasutada varjude keelt GPU-l töötavate programmide kirjutamiseks. WebGPU rakendus sisaldub alguses vaid ChromeOS, macOS ja Windowsi kogudes. Linuxi ja Androidi jaoks aktiveeritakse WebGPU toetus hiljem.
Lisaks Chrome'ile katsetatakse katsetatavat WebGPU tuge Firefoxis alates aprillist 2020 ja Safari's alates novembrist 2021. WebGPU lubamiseks Firefoxis tuleb seadetes about:config sĂ€ttida lipud dom.webgpu.enabled ja gfx.webgpu.force-enabled. Firefoxi ja Safari vaikimisi WebGPU toe plaanidest pole veel infot. Firefoxile ja Chrome'ile arendatavad WebGPU lahendused on saadaval eraldi raamatukogude vormis â Dawn (C++) ja wgpu (Rust), mida saab kasutada WebGPU toe integreerimiseks oma rakendustesse. Samuti töötatakse populaarsete JavaScript-raamatukogude WebGPU toe lisamise kallal, mis algselt kasutasid WebGL. NĂ€iteks on Babylon.js-l juba tĂ€ielik WebGPU tugi ja osaline tugi Three.js, PlayCanvas ja TensorFlow.js.
Kontseptuaalselt erineb WebGPU WebGL-ist ligikaudu sama palju, kui grafika API Vulkan erineb OpenGL-ist, kuid WebGPU ei pĂ”hine konkreetsel grafika API-l, vaid esindab universaalset kihti, mis kasutab samu madalat asenduselemente, mis on olemas Vulkanis, Metal'is ja Direct3D-s. WebGPU annab JavaScripti rakendustele madala taseme kontrolli GPU korralduse, töötlemise ja kĂ€sku edastamise ĂŒle, hallates seotud ressursse, mĂ€lu, tamponeid, tekstuuriobjekte ja kompileeritud grafika shadereid. Selline lĂ€henemine vĂ”imaldab saavutada kĂ”rgemat grafika rakenduste tulemuslikkust madalamatest kuludest ja tĂ”husamast GPU kasutamisest.
WebGPU vÔimaldab luua veebis keerulisi 3D-projekte, mis toimivad sama hÀsti kui eraldiseisvad programmid, mis kasutavad otse Vulkanit, Metalit vÔi Direct3D, kuid ei ole seotud konkreetsete platvormidega. WebGPU pakub lisavÔimalusi ka natiivsete graafikaprogrammide portimiseks veebitehnoloogiatele, tÀnu kompileerimisele WebAssembly'sse. Lisaks 3D-graafikale katab WebGPU ka vÔimalused, mis on seotud arvutuste edastamisega GPU-le ja shaderite tÀitmisega.
WebGPU peamised omadused:
- Erakordne ressursside haldamine, ettevalmistustööd ja kĂ€skude edastamine GPU-s (WebGL-is vastutas ĂŒhe objekt kĂ”igi eest). Pakutakse kolme eraldi konteksti: GPUDevice ressursside, nagu tekstuuride ja puhverside, loomiseks; GPUCommandEncoder eraldi kĂ€skude kodeerimiseks, sealhulgas renderdamise ja arvutusetapid; GPUCommandBuffer, et jĂ€rjekorda panna tĂ€itmiseks GPU-s. Tulemuse saab joonistada ala, mis on seotud ĂŒhe vĂ”i mitme canvas elemendiga, vĂ”i töödelda ilma vĂ€ljundita (nĂ€iteks arvutusĂŒlesannete kĂ€ivitamisel). Etappide jagamine lihtsustab ressursside loomise ja ettevalmistustööde eraldamist erinevatesse töötlejatesse, mis vĂ”ivad töötada erinevates voogudes.
- Teistsugune lĂ€henemine olekute töötlemisele. WebGPU-s on ette nĂ€htud kaks objekti â GPURenderPipeline ja GPUComputePipeline, mis vĂ”imaldavad kombineerida erinevaid olekuid, mille on eelnevalt mÀÀratlenud arendaja, mis vĂ”imaldab brauseril mitte raisata ressursse tĂ€iendava töö, nagu nĂ€iteks shaderite uuesti kompileerimise, tegemiseks. Toetatud olekute hulka kuuluvad: shaderid, tipupuhvrite ja atribuutide paigutused, kĂŒlge kinnitatud rĂŒhmade paigutused, segamine, sĂŒgavus ja ĆĄabloonid, renderdamise jĂ€reltoodetud formaadid.
- Sidumismudel, mis sarnaneb suuresti Vulkanis esinevatele ressursside rĂŒhmitamise vahenditele. WebGPU-s on ressursside rĂŒhmadeks ĂŒhendamiseks ette nĂ€htud objekt GPUBindGroup, mida saab kĂ€skude kirjutamise ajal siduda teiste sarnaste objektide abil, et neid shaderites kasutada. Selliste grupide loomine annab draiverile vĂ”imaluse eelnevalt tĂ€ita vajalikud ettevalmistustööd ja vĂ”imaldab brauseril ressursi sidumisi oluliselt kiiremini vahetada renderdamiskutsungite vahel. Ressursi sidumiste paigutust saab eelnevalt mÀÀratleda GPUBindGroupLayout objekti abil.
Allikas: opennet.ru
