Pārlūkā Chrome tiks iespējots WebGPU atbalsts

Google ir paziņojusi par noklusējuma atbalsta iekļaušanu WebGPU grafikas API un WGSL (WebGPU Shading Language) pārlūkprogrammā Chrome 113, kuru paredzēts izlaist 2. maijā. WebGPU nodrošina programmēšanas saskarni, kas ir līdzīga Vulkan, Metal un Direct3D 12, lai veiktu GPU puses darbības, piemēram, renderēšanu un skaitļošanu, kā arī ļauj izmantot ēnotāju valodu, lai rakstītu programmas, kas darbojas GPU pusē. WebGPU ieviešana sākotnēji tiks iespējota tikai ChromeOS, macOS un Windows versijās. Operētājsistēmām Linux un Android WebGPU atbalsts tiks aktivizēts vēlāk.

Papildus pārlūkam Chrome WebGPU eksperimentālais atbalsts ir pārbaudīts kopš 2020. gada aprīļa pārlūkprogrammā Firefox un kopš 2021. gada novembra pārlūkprogrammā Safari. Lai pārlūkprogrammā Firefox iespējotu WebGPU, failā about:config ir jāiestata karodziņi dom.webgpu.enabled un gfx.webgpu.force-enabled. Pagaidām nav plānots iespējot WebGPU pēc noklusējuma pārlūkprogrammās Firefox un Safari. Firefox un Chrome izstrādātās WebGPU implementācijas ir pieejamas atsevišķu bibliotēku veidā – Dawn (C++) un wgpu (Rust), kuras varat izmantot, lai integrētu WebGPU atbalstu savās lietojumprogrammās. Notiek arī darbs, lai pievienotu WebGPU atbalstu populārajām JavaScript bibliotēkām, kas sākotnēji izmanto WebGL. Piemēram, WebGPU pilnīgs atbalsts jau ir paziņots Babylon.js, bet daļējs atbalsts programmās Three.js, PlayCanvas un TensorFlow.js.

Konceptuāli WebGPU atšķiras no WebGL tādā pašā veidā, kā Vulkan grafikas API atšķiras no OpenGL, taču WebGPU nav balstīts uz konkrētu grafikas API, bet ir universāls slānis, kas izmanto tos pašus zema līmeņa primitīvus, kas atrodami Vulkan, Metal un Direct3D. WebGPU nodrošina JavaScript lietojumprogrammām zema līmeņa kontroli pār komandu organizēšanu, apstrādi un pārsūtīšanu uz GPU, pārvaldot saistītos resursus, atmiņu, buferus, tekstūras objektus un apkopotos grafikas ēnotājus. Šī pieeja ļauj sasniegt augstāku veiktspēju grafikas lietojumprogrammām, samazinot pieskaitāmās izmaksas un palielinot darba ar GPU efektivitāti.

WebGPU ļauj izveidot sarežģītus 3D projektus tīmeklim, kas darbojas ne sliktāk kā atsevišķas programmas, kas tieši izmanto Vulkan, Metal vai Direct3D, bet nav piesaistītas noteiktām platformām. WebGPU nodrošina arī papildu iespējas vietējo grafikas programmu pārnešanai tīmeklī iespējotā formā, izmantojot kompilāciju WebAssembly. Papildus 3D grafikai WebGPU ietver arī iespējas, kas saistītas ar aprēķinu pārsūtīšanu uz GPU un ēnotāju izpildi.

Galvenās WebGPU funkcijas:

  • Atsevišķa resursu pārvaldība, sagatavošanas darbi un komandu pārsūtīšana uz GPU (WebGL viens objekts bija atbildīgs par visu uzreiz). Tiek nodrošināti trīs atsevišķi konteksti: GPUDevice resursu, piemēram, tekstūru un buferu, izveidei; GPUCommandEncoder atsevišķu komandu kodēšanai, ieskaitot renderēšanas un aprēķināšanas posmus; GPUCommandBuffer, kas jāievieto rindā izpildei GPU. Rezultātu var atveidot apgabalā, kas saistīts ar vienu vai vairākiem audekla elementiem, vai apstrādāt bez izvades (piemēram, palaižot skaitļošanas uzdevumus). Atdalot posmus, ir vieglāk nodalīt resursu izveides un sagatavošanas darbības dažādos apstrādātājos, kas var darboties dažādos pavedienos.
  • Atšķirīga pieeja apstrādei. WebGPU piedāvā divus objektus – GPURenderPipeline un GPUComputePipeline, kas ļauj apvienot dažādus izstrādātāja iepriekš definētus stāvokļus, kas ļauj pārlūkprogrammai netērēt resursus papildu darbam, piemēram, ēnotāju pārkompilēšanai. Atbalstītie stāvokļi ir: ēnotāji, virsotņu bufera un atribūtu izkārtojumi, lipīgo grupu izkārtojumi, sajaukšana, dziļums un modeļi, kā arī pēcrenderēšanas izvades formāti.
  • Saistošs modelis, kas līdzīgs Vulkan resursu grupēšanas funkcijām. Lai grupētu resursus, WebGPU nodrošina GPUBindGroup objektu, ko var saistīt ar citiem līdzīgiem objektiem, lai tos izmantotu ēnotājos, rakstot komandas. Šādu grupu izveide ļauj draiverim iepriekš veikt nepieciešamās sagatavošanas darbības, kā arī ļauj pārlūkprogrammai daudz ātrāk mainīt resursu piesaisti starp izsaukumiem. Resursu saišu izkārtojumu var iepriekš definēt, izmantojot objektu GPUBindGroupLayout.

Avots: opennet.ru

Pievieno komentāru