WebGPU-tuki otetaan käyttöön Chromessa

Google on ilmoittanut sisällyttävänsä oletustuen WebGPU-grafiikkasovellusliittymälle ja WGSL:lle (WebGPU Shading Language) Chrome 113:ssa, joka on määrä julkaista 2. toukokuuta. WebGPU tarjoaa Vulkanin, Metalin ja Direct3D 12:n kaltaisen ohjelmointirajapinnan GPU-puolen toimintojen, kuten renderöinnin ja laskennan, suorittamiseen, ja mahdollistaa myös Shader-kielen käytön grafiikkasuorittimen puolella toimivien ohjelmien kirjoittamiseen. WebGPU-toteutus on aluksi käytössä vain ChromeOS-, macOS- ja Windows-koontiversioissa. Linuxille ja Androidille WebGPU-tuki aktivoidaan myöhemmin.

Chromen lisäksi WebGPU:n kokeellista tukea on testattu huhtikuusta 2020 lähtien Firefoxissa ja marraskuusta 2021 lähtien Safarissa. Voit ottaa WebGPU:n käyttöön Firefoxissa asettamalla dom.webgpu.enabled- ja gfx.webgpu.force-enabled-liput tiedostoon about:config. WebGPU:ta ei ole vielä tarkoitus ottaa oletuksena käyttöön Firefoxissa ja Safarissa. Firefoxille ja Chromelle kehitetyt WebGPU-toteutukset ovat saatavilla erillisinä kirjastoina - Dawn (C++) ja wgpu (Rust), joiden avulla voit integroida WebGPU-tuen sovelluksiisi. Työtä on myös meneillään WebGPU-tuen lisäämiseksi suosittuihin JavaScript-kirjastoihin, jotka käyttävät natiivisti WebGL:ää. Esimerkiksi WebGPU:n täysi tuki on jo ilmoitettu Babylon.js:ssa ja osittainen tuki Three.js:ssä, PlayCanvasissa ja TensorFlow.js:ssa.

Käsitteellisesti WebGPU eroaa WebGL:stä paljolti samalla tavalla kuin Vulkan-grafiikkasovellusliittymä eroaa OpenGL:stä, mutta WebGPU ei perustu tiettyyn grafiikkasovellusliittymään, vaan se on universaali kerros, joka käyttää samoja matalan tason primitiivisiä kuin Vulkan, Metal ja Metal. Direct3D. WebGPU tarjoaa JavaScript-sovelluksille matalan tason hallinnan komentojen organisoinnissa, käsittelyssä ja siirtämisessä GPU:lle, niihin liittyvien resurssien, muistin, puskureiden, pintakuvioobjektien ja koottujen grafiikan varjostimien hallinnassa. Tämän lähestymistavan avulla voit saavuttaa korkeamman suorituskyvyn grafiikkasovelluksissa vähentämällä yleiskustannuksia ja lisäämällä GPU:n kanssa työskentelyn tehokkuutta.

WebGPU mahdollistaa monimutkaisten 3D-projektien luomisen Webille, jotka eivät toimi huonommin kuin erilliset ohjelmat, jotka käyttävät suoraan Vulkan-, Metal- tai Direct3D-ohjelmaa, mutta joita ei ole sidottu tiettyihin alustoihin. WebGPU tarjoaa myös lisäominaisuuksia alkuperäisten grafiikkaohjelmien siirtämiseen web-yhteensopivaan muotoon WebAssembly-koon avulla. 3D-grafiikan lisäksi WebGPU sisältää myös ominaisuuksia, jotka liittyvät laskelmien siirtämiseen GPU:lle ja varjostimien suorittamiseen.

WebGPU:n tärkeimmät ominaisuudet:

  • Erillinen resurssien hallinta, valmistelutyöt ja komentojen välitys GPU:lle (WebGL:ssä yksi objekti vastasi kaikesta kerralla). Tarjolla on kolme erillistä kontekstia: GPUDevice resurssien, kuten pintakuvioiden ja puskureiden, luomiseen; GPUCommandEncoder yksittäisten komentojen koodaamiseen, mukaan lukien renderöinti- ja laskentavaiheet; GPUCommandBuffer jonoon GPU:ssa suoritettavaa varten. Tulos voidaan renderöidä alueelle, joka liittyy yhteen tai useampaan kanvaselementtiin, tai se voidaan käsitellä ilman tulosta (esimerkiksi laskentatehtäviä suoritettaessa). Vaiheiden erottaminen helpottaa resurssien luonti- ja valmistelutoimintojen erottamista eri käsittelijöiksi, jotka voivat toimia eri säikeissä.
  • Erilainen lähestymistapa tilojen käsittelyyn. WebGPU tarjoaa kaksi objektia - GPURenderPipeline ja GPUComputePipeline, joiden avulla voit yhdistää erilaisia ​​kehittäjän ennalta määrittämiä tiloja, jolloin selain ei tuhlaa resursseja lisätyöhön, kuten varjostajien uudelleen kääntämiseen. Tuettuja tiloja ovat: varjostimet, vertex-puskuri- ja attribuuttiasettelut, tahmeat ryhmäasettelut, sekoitus, syvyys ja kuviot sekä renderöinnin jälkeiset tulostusmuodot.
  • Sitova malli, joka muistuttaa paljon Vulkanin resurssien ryhmittelyominaisuuksia. Resurssien ryhmittelyä varten WebGPU tarjoaa GPUBindGroup-objektin, joka voidaan liittää muihin vastaaviin objekteihin käytettäväksi varjostimissa komentojen kirjoittamisen aikana. Tällaisten ryhmien luominen antaa kuljettajalle mahdollisuuden suorittaa tarvittavat valmistelutoimet etukäteen, ja selain voi muuttaa resurssien sidontaa piirtokutsujen välillä paljon nopeammin. Resurssisidosten asettelu voidaan määrittää valmiiksi GPUBindGroupLayout-objektin avulla.

Lähde: opennet.ru

Lisää kommentti