I sammenstillinger af Firefox understøttelse af specifikationen , som tilbyder et programmeringsinterface til behandling af 3D-grafik og beregninger på GPU-siden, konceptuelt svarende til API , og . Specifikationen udvikles af Mozilla, Google, Apple, Microsoft og repræsentanter fra samfundet i , oprettet af W3C.
Hovedmålet med WebGPU er at skabe et sikkert, brugervenligt, bærbart og højtydende programmeringsinterface til brug på webplatforme til teknologier og muligheder for 3D-grafik, der tilbydes af moderne systemgrafiske API'er, såsom Direct3D 12 i Windows, Metal i macOS og Vulkan i Linux. Konceptuelt adskiller WebGPU sig fra WebGL i omtrent samme grad som Vulkan adskiller sig fra OpenGL, og den baserer sig ikke på et specifikt grafisk API, men repræsenterer et universelt lag, der generelt anvender de samme lavniveau-primitiver, der findes i Vulkan, Metal og Direct3D.
WebGPU giver JavaScript-applikationer værktøjer til lavere niveau kontrol over organiseringen, behandlingen og overførslen af kommandoer til GPU, håndtering af tilknyttede ressourcer, hukommelse, buffere, teksturobjekter og kompilerede grafiske shadere. Denne tilgang muliggør højere ydeevne for grafiske applikationer ved at reducere overhead og øge effektiviteten ved arbejde med GPU.
WebGPU muliggør oprettelsen af komplette komplekse 3D-projekter til web, der fungerer ligeså godt som isolerede programmer, der direkte interagerer med Vulkan, Metal eller Direct3D, men som ikke er bundet til specifikke platforme. WebGPU tilbyder også yderligere muligheder ved portering af native grafiske programmer til en form, der kan arbejde baseret på webteknologier, takket være brugen af WebAssembly. Udover 3D-grafik inkluderer WebGPU også muligheder relateret til at udføre beregninger på GPU-siden og understøttelse af udvikling af shadere. Shadere kan oprettes i WebGPU Shading Language eller defineres i det mellemformat SPIR-V, hvorefter de kan oversættes til shadersprog, der understøttes af de aktuelle drivere.
I WebGPU anvendes adskilt kontrol af ressourcer, forberedende arbejde og overførsel af kommandoer til GPU (i WebGL svarede ét objekt for alt på én gang). Der tilbydes tre separate kontekster:
GPUDevice til at oprette ressourcer som teksturer og buffere; GPUCommandEncoder til at kode individuelle kommandoer, herunder rendering og beregningsstadier; GPUCommandBuffer til at sende til køen for udførelse på GPU'en. Resultatet kan tegnes i et område tilknyttet et eller flere canvas-elementer, eller behandles uden output (f.eks. ved kørsel af beregningstasks). Opdelingen af stadierne forenkler adskillelsen af oprettelse af ressourcer og forberedende operationer i forskellige håndterere, der kan udføres i forskellige tråde.
En anden forskel mellem WebGPU og WebGL er den forskellige tilgang til håndtering af tilstande. I WebGPU tilbydes to objekter — GPURenderPipeline og GPUComputePipeline, som muliggør kombinationen af forskellige tilstande, der er foruddefineret af udvikleren, hvilket giver browseren mulighed for ikke at bruge ressourcer på yderligere arbejde, såsom genkompilering af shaders. Blandt de understøttede tilstande er: shaders, layout af vertex-buffere og attributter, layout af tilknyttede grupper, blanding, dybde og skabeloner, outputformater efter rendering.
Den tredje funktion i WebGPU kaldes bindingsmodellen, som i høj grad
minder om de eksisterende ressourcer i Vulkan.
For at gruppere ressourcer i WebGPU tilbydes objektet GPUBindGroup, som under kommandoskrivning kan bindes til andre lignende objekter til brug i shaders. Oprettelsen af sådanne grupper giver driveren mulighed for at udføre nødvendige forberedende handlinger på forhånd og muliggør for browseren at ændre ressourcens bindinger meget hurtigere mellem opkald til rendering. Ressourcebindingens layout kan defineres på forhånd ved hjælp af objektet GPUBindGroupLayout.

I Firefox er der i about:config en indstilling "dom.webgpu.enabled" for at aktivere WebGPU. For at tegne CanvasContext kræves også aktivering af kompositionssystemet ("gfx.webrender.all" i about:config), skrevet i Rust, som flytter rendering af indholdet på siden til GPU'en. Implementationen af WebGPU bygger på koden fra projektet
, skrevet i Rust og i stand til at køre over API'erne DX12, Vulkan, og Metal i Linux, Android, Windows og macOS (under udvikling er også understøttelsen af DX11 og OpenGL ES 3.0). Samtidig udvikler Google en anden implementation, som er tilgængelig i Chromium aktiveres ved hjælp af flaget «chrome://flags/#enable-unsafe-webgpu», men fungerer kun på macOS og Windows.
Kilde: opennet.ru
