В Firefoxi versioonid spetsifikatsiooni tugi , mis pakub programmeerimisliidest 3D-graafika töötlemiseks ja GPU-poolseks arvutamiseks, kontseptuaalselt sarnaselt API-ga , и Spetsifikatsiooni töötavad välja Mozilla, Google, Apple, Microsoft ja kogukonna esindajad. , mille on loonud W3C organisatsioon.
Ключевой задачей WebGPU является создание безопасного, удобного, переносимого и высокопроизводительного программного интерфейса для использования в Web-платформе технологий и возможностей 3D-графики, предоставляемых современными системными графическими API, такими как Direct3D 12 в Windows, Metal в macOS и Vulkan в Linux. Концептуально WebGPU отличается от WebGL примерно так же, как Vulkan отличается от OpenGL, и при этом не основывается на конкретном графическом API, а представляет собой универсальную прослойку, в общем виде использующую те же низкоуровневые примитивы, что имеются в Vulkan, Metal и Direct3D.
WebGPU pakub JavaScripti rakendustele tööriistu madalama taseme juhtimiseks käskude korraldamise, töötlemise ja GPU-le edastamise üle, hallates seotud ressursse, mälu, puhvreid, tekstuuriobjekte ja kompileeritud graafikavarjundajaid. See lähenemisviis võimaldab graafikarakenduste suuremat jõudlust, vähendades üldkulusid ja suurendades GPU-ga töötamise efektiivsust.
WebGPU võimaldab luua veebi jaoks täisväärtuslikke ja keerukaid 3D-projekte, mis töötavad sama hästi kui eraldiseisvad programmid, millel on otsene juurdepääs Vulkanile, Metalile või Direct3D-le, kuid mis ei ole seotud konkreetsete platvormidega. WebGPU pakub ka lisavõimalusi natiivsete graafikaprogrammide portimisel veebitehnoloogiatel põhinevasse vormingusse tänu WebAssembly tehnoloogia kasutamisele. Lisaks 3D-graafikale hõlmab WebGPU ka arvutuste GPU poolele edastamisega seotud võimalusi ja varjutajate arendamise tuge. Varjutajad loodud WebGPU varjunduskeeles või määratud SPIR-V vahepealses vormingus ja seejärel tõlgitud varjunduskeeltesse, mida toetavad praegused draiverid.
WebGPU haldab ressursse eraldi, teeb ettevalmistustööd ja saadab käske GPU-le eraldi (WebGL-is vastutas üks objekt korraga kõige eest). Pakutakse kolme eraldi konteksti:
GPUDevice ressursside, näiteks tekstuuride ja puhvrite loomiseks; GPUCommandEncoder üksikute käskude, sh renderdamise ja arvutusetappide kodeerimiseks; GPUCommandBuffer GPU-l täitmiseks järjekorda panemiseks. Tulemuse saab joonistada ühe või mitme lõuendielemendiga seotud alale või töödelda vaikselt (näiteks arvutusülesannete käivitamisel). Etappide eraldamine lihtsustab ressursside loomise ja ettevalmistamise toimingute eraldamist erinevateks käitlejateks, mida saab käivitada erinevatel lõimedel.
Teine erinevus WebGPU ja WebGL vahel on erinev lähenemine olekute käsitlemisele. WebGPU pakub kahte objekti, GPURenderPipeline ja GPUComputePipeline, mis võimaldavad kombineerida arendaja poolt eelnevalt määratletud erinevaid olekuid, mis võimaldab brauseril vältida ressursside raiskamist lisatööle, näiteks varjutajate uuesti kompileerimisele. Toetatud olekute hulgas on: varjutajad, tipupuhver ja atribuutide paigutused, lisatud rühmade paigutused, segamine, sügavus ja mallid, väljundvormingud pärast renderdamist.
WebGPU kolmandat omadust nimetatakse sidumismudeliks, mis on suures osas
meenutab Vulkanis esinevaid ressursside rühmitamise tööriistu.
Ressursside grupeerimiseks pakub WebGPU GPUBindGroup objekti, mille saab käskude kirjutamise ajal varjundajates kasutamiseks linkida teiste sarnaste objektidega. Selliste rühmade loomine võimaldab draiveril eelnevalt teha vajalikke ettevalmistavaid toiminguid ja brauseril ressursisidemeid draw-kõnede vahel palju kiiremini muuta. Ressursisidemete paigutuse saab eelnevalt määratleda GPUBindGroupLayout objekti abil.

Firefoxil on WebGPU lubamiseks säte nimega "dom.webgpu.enabled" failis about:config. CanvasContexti renderdamiseks peab ka komposiitsüsteem olema lubatud. ("gfx.webrender.all" failis about:config), kirjutatud Rustis ja suunab lehe sisu renderdamise toimingud GPU-le. WebGPU implementatsioon põhineb projekti koodil
, написанного на языке Rust и способного работать поверх API DX12, Vulkan и Metal в Linux, Android, Windows и macOS (в разработке также находится поддержка DX11 и OpenGL ES 3.0). Параллельно компанией Google развивается другая реализация, которая доступна в Chromium и включается при помощи флага «chrome://flags/#enable-unsafe-webgpu», но работает пока только в macOS и Windows.
Allikas: opennet.ru
