Mozilla hat besletten om stipe foar de WebGPU API en WGSL (WebGPU Shading Language) yn Firefox yn te skeakeljen. Foar it platfoarm Windows WebGPU-stipe sil standert ynskeakele wêze yn Firefox 141, pland foar 22 july. WebGPU-stipe is dan pland om ynskeakele te wurden yn builds foar de folgjende moannen: Linux и macOS, en nei in skoftke yn 'e ferzje foar it platfoarm AndroidOm WebGPU manuell yn te skeakeljen, kinne jo de parameters "dom.webgpu.enabled" en "gfx.webrender.all" brûke op 'e about:config-side.
Yn Chrome waard WebGPU-stipe standert oanbean yn ferzje 113, útbrocht yn maaie 2023. Yn Safari is it plan om WebGPU-stipe dizze hjerst standert ynskeakele te wurden (eksperimintele stipe is beskikber sûnt novimber 2021). Yn Firefox is eksperimintele WebGPU-stipe oanwêzich sûnt 2020, mar waard allinich standert ynskeakele yn nachtlike builds fan Firefox. De WebGPU-ymplemintaasje fan Firefox is basearre op 'e WGPU-projektkoade, skreaun yn Rust en kin rinne boppe op 'e Direct3D 12, Vulkan, OpenGL, en Metal graphics API's.
WebGPU biedt in ferlykbere API as Vulkan, Metal, en Direct3D 12 foar it útfieren fan operaasjes oan 'e GPU-kant. Neist 3D-grafiken omfettet WebGPU ek mooglikheden relatearre oan it offloaden fan berekkeningen nei de GPU-kant en it útfieren fan shaders. Konseptueel ferskilt WebGPU fan 'e âlde WebGL-spesifikaasje op deselde manier as de Vulkan-grafyk-API ferskilt fan OpenGL. Tagelyk is WebGPU net basearre op in spesifike grafyk-API, mar is it in universele laach dy't deselde leechnivo-primitiven brûkt dy't beskikber binne yn Vulkan, Metal, en Direct3D.
WebGPU stelt JavaScript-applikaasjes yn steat om de organisaasje, ferwurking en oerdracht fan kommando's nei de GPU te kontrolearjen, en assosjearre boarnen, ûnthâld, buffers, tekstuerobjekten en gearstalde grafyske shaders te behearjen. Dizze oanpak makket hegere prestaasjes fan grafyske applikaasjes mooglik troch overhead te ferminderjen en de effisjinsje fan it wurkjen mei de GPU te ferheegjen.
Mei WebGPU kinne jo platfoarm-agnostyske, komplekse 3D-projekten meitsje dy't likegoed prestearje as standalone programma's dy't direkt Vulkan, Metal of Direct3D brûke. WebGPU biedt ek ekstra mooglikheden foar it portearjen fan native grafyske programma's nei in formulier dat yn browsers kin rinne, tanksij kompilaasje nei WebAssembly.
Wichtige funksjes fan WebGPU en ferskillen mei WebGL:
- Separate behear fan boarnen, tariedend wurk en oerdracht fan kommando's nei de GPU (yn WebGL wie ien objekt tagelyk ferantwurdlik foar alles). Trije aparte konteksten wurde foarsjoen: GPUDevice foar it meitsjen fan boarnen lykas tekstueren en buffers; GPUCommandEncoder foar kodearring fan yndividuele kommando's, ynklusyf de rendering- en berekkeningsstadia; GPUCommandBuffer om troch te gean nei de GPU-runwachtrige. It resultaat kin werjûn wurde yn in gebiet dat is assosjearre mei ien of mear canvas-eleminten, of rendered sûnder útfier (bygelyks by it útfieren fan berekkeningstaken). De skieding fan stadia makket it makliker om operaasjes foar oanmeitsjen fan boarnen en foarsjenningen te skieden yn ferskate handlers dy't kinne rinne op ferskate triedden.
- In oare oanpak foar it behanneljen fan steaten. WebGPU leveret twa objekten - GPURenderPipeline en GPUComputePipeline, wêrtroch jo ferskate steaten kinne kombinearje dy't foarôf definieare binne troch de ûntwikkelder, wat it mooglik makket foar de browser om gjin boarnen te fergrieme op ekstra wurk, lykas it opnij kompilearjen fan shaders. Stipe steaten omfetsje: shaders, vertexbuffer en attribútlayouts, kleverige groeplayouts, blending, djipte en patroanen, post-render útfierformaten.
- In binend model, in protte lykas Vulkan's ark foar boarnegroepearring. Om boarnen yn groepen te groepearjen, leveret de WebGPU in GPUBindGroup-objekt, dat, op it stuit fan it skriuwen fan kommando's, kin wurde assosjearre mei oare ferlykbere objekten foar gebrûk yn shaders. It oanmeitsjen fan sokke groepen lit de bestjoerder de nedige tariedende aksjes fan tefoaren útfiere, en lit de blêder de boarnebindingen feroarje tusken tekenoproppen folle flugger. De yndieling fan boarnebindingen kin foarôf definieare wurde mei it GPUBindGroupLayout-objekt.
Boarne: opennet.ru
