W3C konsortsium esitles WebGPU ja WebGPU Shading Language (WGSL) esimeseid kavandeid, mis määratlevad API GPU-operatsioonide, nagu renderdamine ja arvutused, teostamiseks, samuti varjude keele, mis võimaldab kirjutada GPU-l töötavaid programme. See on mõistetelt sarnane API-dega Vulkan, Metal ja Direct3D 12. Spetsiifikad on koostatud töötavate rühmade poolt, kuhu kuuluvad insenerid ettevõtetest Mozilla, Google, Apple ja Microsoft.
Mõisted WebGPU erineb WebGL-st samamoodi nagu graafika API Vulkan erineb OpenGL-st, kuid see ei põhine teatud graafika API-l, vaid on universaalne kiht, mis kasutab samu madala taseme primitiive, mis on olemas Vulkanis, Metals ja Direct3D-s. WebGPU pakub JavaScripti rakendustele madala taseme kontrolli GPU korralduse, töötlemise ja käskude edastamise üle, haldab seotud ressursse, mälu, bufreid, tekstuuri objekte ja kompileeritud graafika varjundeid. Selline lähenemine võimaldab saavutada kõrgemat graafika rakenduste jõudlust, vähendades kulusid ja suurendades GPU tõhusust.
WebGPU võimaldab luua keerulisi 3D-projekte veebis, mis toimivad sama hästi kui iseseisvad programmid, mis sinu otse Vulkaniga, Metaliga või Direct3D-ga suhtlevad, kuid pole seotud konkreetsete platvormidega. WebGPU pakub ka täiendavaid võimalusi, kui üleviida natiivseid graafikaprogramme kujul, mis suudab töötada veebitehnoloogiate põhjal, tänu compileerimisele WebAssembly'ks. Lisaks 3D-graafikale sisaldab WebGPU ka arvutusprotsesside GPU-le suunamise ja varjude teostamise võimalusi.
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
