Google har annonceret, at support til grafisk API WebGPU og shadersprog WGSL (WebGPU Shading Language) vil blive aktiveret som standard i Chrome version 113, som forventes frigivet den 2. maj. WebGPU tilbyder et programmeringsgrænseflade, der ligner Vulkan, Metal og Direct3D 12 til udførelse af operationer på GPU-siden, såsom rendering og beregning, samt muligheden for at bruge shadersprog til at skrive programmer, der kører på GPU'en. Implementeringen af WebGPU vil først blive inkluderet i opbygninger til ChromeOS, macOS og Windows. Support til WebGPU for Linux og Android vil blive aktiveret senere.
Udover Chrome testes eksperimentel støtte til WebGPU i Firefox siden april 2020 og i Safari siden november 2021. For at aktivere WebGPU i Firefox skal du justere indstillingerne i about:config for dom.webgpu.enabled og gfx.webgpu.force-enabled. Der er endnu ikke nogen meddelelse om planer for at aktivere WebGPU som standard i Firefox og Safari. Implementeringer af WebGPU til Firefox og Chrome er tilgængelige som separate biblioteker — Dawn (C++) og wgpu (Rust), som kan bruges til at integrere støtte til WebGPU i dine applikationer. Der arbejdes også på at tilføje støtte til WebGPU i populære JavaScript-biblioteker, der oprindeligt bruger WebGL. For eksempel er fuld support til WebGPU allerede blevet erklæret i Babylon.js, mens delvis støtte er tilstede i Three.js, PlayCanvas og TensorFlow.js.
Konceptermæssigt adskiller WebGPU sig fra WebGL på samme måde, som Vulkan API adskiller sig fra OpenGL; men WebGPU er ikke afhængig af et specifikt grafisk API, men udgør et universelt lag, der bruger de samme lavnivåprimitiver, som findes i Vulkan, Metal og Direct3D. WebGPU giver JavaScript-applikationer midler til lavnivåkontrol af organisering, behandling og overførsel af kommandoer til GPU'en, håndtering af tilknyttede ressourcer, hukommelse, buffere, teksturobjekter og kompilerede grafiske shaders. Denne tilgang muliggør højere ydeevne for grafiske applikationer ved at reducere overhead og øge effektiviteten i arbejdet med GPU.
WebGPU giver mulighed for at skabe komplekse 3D-projekter til web, der fungerer lige så godt som autonome programmer, der bruger 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 fungere på webteknologier, takket være kompilering til WebAssembly. Udover 3D-grafik dækker WebGPU også muligheder relateret til at flytte beregninger til GPU-siden og udføre 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
