W3C-konsortiet har præsenteret de første udkast til specifikationerne for WebGPU og WebGPU Shading Language (WGSL), som definerer et API til udførelse af operationer på GPU'en, såsom rendering og beregninger, samt et shader-sprog til at skrive programmer, der kører på GPU'en. Det er konceptuelt ens med API'erne Vulkan, Metal og Direct3D 12. Specifikationerne er udarbejdet af en arbejdsgruppe, som inkluderer ingeniører fra Mozilla, Google, Apple og Microsoft.
Konceptuelt adskiller WebGPU sig fra WebGL på omtrent samme måde, som den grafiske API Vulkan adskiller sig fra OpenGL, men den bygger ikke på et specifikt grafisk API; i stedet repræsenterer den et universelt lag, der bruger de samme lavniveau-primitiver, som findes i Vulkan, Metal og Direct3D. WebGPU giver JavaScript-applikationer midler til lavniveau-kontrol over organiseringen, behandlingen og overførslen af kommandoer til GPU'en samt styring af relaterede ressourcer, hukommelse, buffere, teksturobjekter og kompilerede grafiske shaders. Denne tilgang muliggør højere ydeevne af grafiske applikationer ved at reducere overhead og øge effektiviteten af GPU-arbejdet.
WebGPU gør det muligt at skabe komplekse 3D-projekter til web, der fungerer lige så godt som selvstændige programmer, der direkte interagerer med Vulkan, Metal eller Direct3D, men uden at være bundet til specifikke platforme. WebGPU tilbyder også ekstra muligheder ved portering af native grafiske programmer til en form, der kan køre på webteknologier, takket være kompilering til WebAssembly. Udover 3D-grafik omfatter WebGPU også muligheder relateret til udførelse af beregninger på GPU'en og kørsel af shaders.
Nøglefunktioner i WebGPU:
- Separat styring af ressourcer, forberedende arbejder og overførsel af kommandoer til GPU (i WebGL svarede et objekt for alt på én gang). Der tilbydes tre separate kontekster: GPUDevice til oprettelse af ressourcer, såsom teksturer og buffere; GPUCommandEncoder til kodning af individuelle kommandoer, herunder rendering og beregningsstadier; GPUCommandBuffer til køen af kommandoer til udførelse på GPU. Resultatet kan blive gengivet i et område, der er relateret til en eller flere canvas-elementer, eller behandlet uden visuelt output (for eksempel ved kørsel af beregningsopgaver). Opdeling af stadierne gør det lettere at adskille oprettelsen af ressourcer og forberedende operationer i forskellige behandlere, der kan køre i forskellige tråde.
- Anderledes tilgang ved behandling af tilstande. I WebGPU foreslås to objekter — GPURenderPipeline og GPUComputePipeline, der muliggør kombination af forskellige tilstande, der er forhåndsdefineret af udvikleren, hvilket giver mulighed for, at browseren ikke bruger ressourcer på at udføre ekstra arbejde som genkompilering af shaders. Blandt de understøttede tilstande er: shaders, layout af vertexbuffere og attributter, layout af tilknyttede grupper, blanding, dybde og skabeloner, outputformater efter rendering.
- Bindingsmodellen minderer meget om de tilstedeværende ressourcer gruppering værktøjer i Vulkan. For at gruppere ressourcer i WebGPU er der et GPUBindGroup objekt, som under kommandooptagelse kan bindes til andre tilsvarende objekter til brug i shaders. Oprettelse af sådanne grupper giver driveren mulighed for at udføre de nødvendige forberedende handlinger på forhånd, og giver browseren mulighed for betydeligt hurtigere at ændre ressourcebindinger mellem tegneanrop. Layoutet for ressourcebindingerne kan defineres på forhånd ved hjælp af objektet GPUBindGroupLayout.
Kilde: opennet.ru
