Në në Firefox mbështetje e specifikimit , duke ofruar një ndërfaqe programore për përpunimin e grafikës 3D dhe llogaritjeve në anën e GPU, konceptualisht e ngjashme me API-në , dhe . Specifikimi zhvillohet nga Mozilla, Google, Apple, Microsoft dhe përfaqësues të komunitetit në , që është krijuar nën organizatën W3C.
Objektivi kryesor i WebGPU është krijimi i një ndërfaqe sigurie, të lehtë për t'u përdorur, të transportueshme dhe me performancë të lartë për përdorim në platformat Web të teknologjive dhe mundësive të grafikës 3D, të ofruara nga API-të moderne grafike si Direct3D 12 në Windows, Metal në macOS dhe Vulkan në Linux. Konceptualisht WebGPU ndahet nga WebGL në të njëjtën mënyrë siç ndahen Vulkan dhe OpenGL, dhe nuk bazohet në një API grafik specifik, por paraqet një ndërfaqe universale që në përgjithësi përdor të njëjtat primitive me nivel të ulët si ato në Vulkan, Metal dhe Direct3D.
WebGPU ofron aplikacioneve në JavaScript mjete për kontroll më të ulët mbi organizimin, përpunimin dhe transmetimin e komandave te GPU, menaxhimin e burimeve të lidhura, kujtesës, bufereve, objekteve të teksturave dhe shenjuesve grafikë të përpiluar. Qasja e tillë lejon arritjen e performancës më të lartë të aplikacioneve grafike duke reduktuar shpenzimet dhe duke rritur efikasitetin e punës me GPU.
WebGPU ofron mundësi për të krijuar për Web projekte komplekse 3D, që funksionojnë po aq mirë sa programet e veçanta që lidhen drejtpërdrejt me Vulkan, Metal ose Direct3D, por që nuk janë të lidhura me platforma specifike. WebGPU gjithashtu ofron mundësi të tjera gjatë portimit të programave grafike natyrore në një formë që mund të funksionojë mbi teknologjitë web, përmes përdorimit të teknologjisë WebAssembly. Përveç grafikës 3D, WebGPU përfshin gjithashtu mundësitë që lidhen me llogaritjen në anën e GPU dhe mbështetje për zhvillimin e shenjuesve. Shenjuesit mund të krijohen në gjuhën WebGPU Shading Language ose të përcaktohen në formatin e ndërmjetëm SPIR-V, pas së cilës do të përkthehen në gjuhët e shenjuesve që mbështeten nga driverat aktualë.
Në WebGPU aplikohet menaxhim i ndarë i burimeve, punëve përgatitore dhe transmetimit të komandave në GPU (në WebGL një objekt ishte përgjegjës për gjithçka). Ofrohen tre kontekste të veçanta:
GPUDevice për krijimin e burimeve si tekstura dhe bufe; GPUCommandEncoder për kodimin e komandave të veçanta, duke përfshirë fazat e renderimit dhe llogaritjes; GPUCommandBuffer për t'u dërguar në radhë për ekzekutim në GPU. Rezultati mund të vizatohet në një zonë që lidhet me një ose disa elementë canvas, ose të përprocessed pa dalje (p.sh., gjatë ekzekutimit të detyrave të llogaritjes). Ndërprerja e fazave e thjeshton ndarjen e krijimit të burimeve dhe operacioneve përgatitore në trajtues të ndryshëm, të cilat mund të ekzekutohen në Thjeshtësi të ndryshme.
Një ndryshim tjetër midis WebGPU dhe WebGL është qasja ndryshe për trajtimin e gjendjeve. Në WebGPU ofrohen dy objekte - GPURenderPipeline dhe GPUComputePipeline, që lejojnë kombinimin e gjendjeve të ndryshme, të paracaktuara nga zhvilluesi, çka i jep mundësinë shfletuesit të mos harxhojë burime për të bërë punë të tjera, si rikompilimin e shaders. Mes gjendjeve të mbështetura janë: shaders, shfaqje të bufereve të majave dhe atributeve, shfaqje grupesh të lidhura, përzierje, thellësi dhe shabllone, formate dalëse pas renderimit.
Karakteristika e tretë e WebGPU quhet modeli i lidhjes, në një masë të madhe
i ngjashëm me mjetet e grupimit të burimeve të pranishme në Vulkan.
Për të mbledhur burimet në grupe, WebGPU ofron objektin GPUBindGroup, i cili gjatë regjistrimit të komandave mund të lidhet me objekte të tjera të ngjashme për t'u përdorur në shaders. Krijimi i grupeve të tilla i jep mundësinë driver-it të kryejë paraprakisht veprimet e nevojshme përgatitore dhe shfletuesit i lejon të ndryshojë ndërlidhjet e burimeve midis thirrjeve të vizatimit në mënyrë më të shpejtë. Shfaqja e lidhjeve të burimeve mund të përcaktohet paraprakisht përmes objektit GPUBindGroupLayout.

Në Firefox për aktivizimin e WebGPU në about:config është parashikuar një cilësim "dom.webgpu.enabled". Për vizatimin e CanvasContext gjithashtu kërkohet aktivizimi i sistemit të kompozimit ("gfx.webrender.all" në about:config), e shkruar në gjuhën Rust dhe duke bërë që operacionet e vizatimit të përmbajtjes së faqes të kalojnë në GPU. Zbatimi i WebGPU është i bazuar në kodin e projektit
, i shkruar në gjuhën Rust dhe i aftë për të punuar përmbi API DX12, Vulkan dhe Metal në Linux, Android, Windows dhe macOS (në zhvillim është gjithashtu mbështetje për DX11 dhe OpenGL ES 3.0). Parallealisht, kompania Google zhvillon një zbatim tjetër, i cili është i disponueshëm në Chromium aktivizohet me ndihmën e flamurit «chrome://flags/#enable-unsafe-webgpu», por aktualisht funksionon vetëm në macOS dhe Windows.
Burimi: opennet.ru
