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
