WebGPU-tuki lisätty Firefoxin öisiin koontiversioihin

В Firefox rakentaa ilmestyi spesifikaatiotuki WebGPU, joka tarjoaa ohjelmointirajapinnan 3D-grafiikkakäsittelyyn ja GPU-puolen laskentaan, käsitteellisesti samanlainen kuin API vulkan, Metalli и Suora3D 12. Määrittelyä kehittävät Mozilla, Google, Apple, Microsoft ja yhteisön jäsenet työryhmäW3C:n luoma.

WebGPU:n päätavoite on tarjota turvallinen, käyttäjäystävällinen, kannettava ja tehokas ohjelmointirajapinta Web-alustalle hyödyntämään nykyaikaisten järjestelmägrafiikkasovellusliittymien tarjoamia 3D-grafiikkatekniikoita ja -ominaisuuksia, kuten Direct3D 12 Windowsissa, Metal macOS:ssä ja Vulkan Linuxissa. Käsitteellisesti WebGPU eroaa WebGL:stä paljolti samalla tavalla kuin Vulkan eroaa OpenGL:stä, ja samaan aikaan se ei perustu tiettyyn grafiikkasovellusliittymään, vaan on universaali kerros, joka yleensä käyttää samoja matalan tason primitiivisiä kuin Vulkanissa, Metallia ja Direct3D:tä.

WebGPU tarjoaa JavaScript-sovelluksille alemman tason hallinnan komentojen organisoinnissa, käsittelyssä ja siirtämisessä GPU:lle sekä niihin liittyvien resurssien, muistin, puskureiden, pintakuvioobjektien ja koottujen grafiikan varjostimien hallintaan. 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 täysimittaisten monimutkaisten 3D-projektien luomisen Webille, jotka eivät toimi huonommin kuin erilliset ohjelmat, jotka käyttävät suoraan Vulkania, Metalia tai Direct3D:tä, mutta joita ei ole sidottu tiettyihin alustoihin. WebGPU tarjoaa myös lisäominaisuuksia siirrettäessä alkuperäisiä grafiikkaohjelmia web-yhteensopivaan muotoon WebAssembly-tekniikan avulla. 3D-grafiikan lisäksi WebGPU kattaa myös ominaisuudet, jotka liittyvät laskelmien siirtämiseen GPU:lle ja Shader-kehityksen tukemiseen. Varjostimet voida luodaan WebGPU Shading Language -kielellä tai määritellään SPIR-V-välimuodossa ja käännetään sitten nykyisten ohjainten tukemille Shader-kielille.

WebGPU käyttää erillistä resurssien hallintaa, valmistelutyötä ja komentojen välittämistä 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 kangaselementtiin, 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ä.

Toinen ero WebGPU:n ja WebGL:n välillä on 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.

WebGPU:n kolmatta ominaisuutta kutsutaan suurelta osin sidosmalliksi
muistuttaa Vulkanissa olevia resurssien ryhmittelytyökaluja.
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 sidoksia piirtokutsujen välillä paljon nopeammin. Resurssisidosten asettelu voidaan määrittää valmiiksi GPUBindGroupLayout-objektin avulla.

WebGPU-tuki lisätty Firefoxin öisiin koontiversioihin

Firefoxissa WebGPU:n ottamiseksi käyttöön about:configissa on asetus "dom.webgpu.enabled". CanvasContext-renderöinti edellyttää myös, että kompositio on käytössä WebRender ("gfx.webrender.all" noin:configissa), kirjoitettu ruosteella ja ulkoistaa sivun sisällön renderöintitoiminnot GPU:lle. WebGPU-toteutus perustuu projektikoodiin
wgpu, kirjoitettu Rustilla ja pystyy toimimaan DX12-, Vulkan- ja Metal-sovellusliittymien päällä Linuxissa, Androidissa, Windowsissa ja macOS:ssä (DX11- ja OpenGL ES 3.0 -tuki on myös kehitteillä). Samaan aikaan Google kehittää toista toteutusta, joka on saatavilla vuonna Kanarian haara Chromium ja on käytössä "chrome://flags/#enable-unsafe-webgpu"-lipulla, mutta toimii toistaiseksi vain macOS- ja Windows-käyttöjärjestelmissä.

Lähde: opennet.ru

Lisää kommentti