WebGPU tugi on Chrome'is lubatud

Google on teatanud WebGPU graafika API ja WGSL-i (WebGPU Shading Language) vaiketoe lisamisest Chrome 113-sse, mis on kavas avaldada 2. mail. WebGPU pakub Vulkanile, Metalile ja Direct3D 12-le sarnast programmeerimisliidest GPU-poolsete toimingute (nt renderdamine ja andmetöötlus) teostamiseks ning võimaldab kasutada ka varjundikeelt GPU poolel töötavate programmide kirjutamiseks. WebGPU juurutamine on esialgu lubatud ainult ChromeOS-i, macOS-i ja Windowsi järgudes. Linuxi ja Androidi jaoks aktiveeritakse WebGPU tugi hiljem.

Lisaks Chrome'ile on WebGPU eksperimentaalset tuge testitud alates 2020. aasta aprillist Firefoxis ja alates 2021. aasta novembrist Safaris. WebGPU lubamiseks Firefoxis peaksite failis about:config määrama lipud dom.webgpu.enabled ja gfx.webgpu.force-enabled. Pole veel plaanis WebGPU-d Firefoxis ja Safaris vaikimisi lubada. Firefoxi ja Chrome'i jaoks välja töötatud WebGPU juurutused on saadaval eraldi teekidena – Dawn (C++) ja wgpu (Rust), mida saate kasutada WebGPU toe integreerimiseks oma rakendustesse. Samuti on käimas töö WebGPU toe lisamiseks populaarsetele JavaScripti teekidele, mis kasutavad algselt WebGL-i. Näiteks WebGPU täielikust toest on juba teatatud Babylon.js-is ning osalisest toest kolmes.js, PlayCanvas ja TensorFlow.js.

Põhimõtteliselt erineb WebGPU WebGL-ist samamoodi, nagu Vulkani graafika API erineb OpenGL-ist, kuid WebGPU ei põhine konkreetsel graafika API-l, vaid on universaalne kiht, mis kasutab samu madala taseme primitiive, mida leidub Vulkanis, Metallis ja Direct3D. WebGPU pakub JavaScripti rakendustele madalal tasemel juhtimist GPU-le käskude korraldamise, töötlemise ja edastamise, seotud ressursside, mälu, puhvrite, tekstuuriobjektide ja kompileeritud graafikavarjurite haldamise üle. See lähenemisviis võimaldab teil saavutada graafikarakenduste suurema jõudluse, vähendades üldkulusid ja suurendades GPU-ga töötamise tõhusust.

WebGPU võimaldab luua veebi jaoks keerulisi 3D-projekte, mis ei toimi halvemini kui eraldiseisvad programmid, mis kasutavad otseselt Vulkani, Metalli või Direct3D-d, kuid ei ole seotud konkreetsete platvormidega. WebGPU pakub ka lisavõimalusi omamaiste graafikaprogrammide teisaldamiseks veebitoega vormile WebAssemblysse kompileerimise kaudu. Lisaks 3D-graafikale sisaldab WebGPU ka võimalusi, mis on seotud arvutuste mahalaadimisega GPU-le ja varjundite käivitamisega.

WebGPU põhifunktsioonid:

  • Eraldi ressursside haldamine, ettevalmistustööd ja käskude edastamine GPU-le (WebGL-is vastutas kõige eest korraga üks objekt). Pakutakse kolm erinevat konteksti: GPUDevice ressursside (nt tekstuurid ja puhvrid) loomiseks; GPUCommandEncoder üksikute käskude kodeerimiseks, sealhulgas renderdamise ja arvutamise etapid; GPUCommandBuffer, mis tuleb GPU-s täitmiseks järjekorda panna. Tulemust saab renderdada alal, mis on seotud ühe või mitme lõuendielemendiga, või töödelda ilma väljundita (näiteks arvutusülesannete täitmisel). Etappide eraldamine hõlbustab ressursside loomise ja ettevalmistamise toimingute eraldamist erinevateks töötlejateks, mis võivad töötada erinevatel lõimedel.
  • Teistsugune lähenemine olekute töötlemisele. WebGPU pakub kahte objekti – GPURenderPipeline ja GPUComputePipeline, mis võimaldavad kombineerida erinevaid arendaja poolt eelnevalt defineeritud olekuid, mis võimaldab brauseril mitte raisata ressursse lisatööle, näiteks varjutajate ümberkompileerimisele. Toetatud olekud hõlmavad varjutajaid, tipupuhvri ja atribuutide paigutust, kleepuvate rühmade paigutust, segamist, sügavust ja mustreid ning renderdamisjärgseid väljundvorminguid.
  • Siduv mudel, mis sarnaneb paljuski Vulkani ressursside rühmitamise funktsioonidega. Ressursside rühmitamiseks pakub WebGPU GPUBindGroupi objekti, mida saab käskude kirjutamise ajal varjutajates kasutamiseks seostada teiste sarnaste objektidega. Selliste rühmade loomine võimaldab draiveril eelnevalt vajalikud ettevalmistavad toimingud teha ning brauseril saab palju kiiremini ressursside sidumist joonistuskutsete vahel muuta. Ressursisidemete paigutust saab eelnevalt määratleda, kasutades objekti GPUBindGroupLayout.

Allikas: opennet.ru

Lisa kommentaar