В
Hovedmålet med WebGPU er å tilby et sikkert, brukervennlig, bærbart og høyytelses programmeringsgrensesnitt for nettplattformen for å utnytte 3D-grafikkteknologiene og -funksjonene som tilbys av moderne systemgrafikk-APIer, som Direct3D 12 på Windows, Metal på macOS og Vulkan på Linux. Konseptuelt skiller WebGPU seg fra WebGL på omtrent samme måte som Vulkan skiller seg fra OpenGL, og samtidig er den ikke basert på et spesifikt grafikk-API, men er et universelt lag som generelt bruker de samme lavnivå-primitivene som finnes i Vulkan, Metal og Direct3D.
WebGPU gir JavaScript-applikasjoner med kontroll på lavere nivå over organisering, prosessering og overføring av kommandoer til GPU, administrasjon av tilknyttede ressurser, minne, buffere, teksturobjekter og kompilerte grafikkskyggere. Denne tilnærmingen lar deg oppnå høyere ytelse for grafikkapplikasjoner ved å redusere overheadkostnader og øke effektiviteten ved arbeid med GPU.
WebGPU gjør det mulig å lage fullverdige komplekse 3D-prosjekter for nettet som ikke fungerer dårligere enn frittstående programmer som har direkte tilgang til Vulkan, Metal eller Direct3D, men som ikke er knyttet til spesifikke plattformer. WebGPU gir også ekstra funksjoner når du porterer innfødte grafikkprogrammer til en form som kan kjøres på nettteknologier, takket være bruken av WebAssembly-teknologi. I tillegg til 3D-grafikk, inkluderer WebGPU også muligheter knyttet til å overføre beregninger til GPUen og støtte utvikling av shader. Shaders
WebGPU bruker separat administrasjon av ressurser, forberedende arbeid og overføring av kommandoer til GPU (i WebGL var ett objekt ansvarlig for alt på en gang). Tre separate kontekster er gitt:
GPUenhet for å lage ressurser som teksturer og buffere; GPUCommandEncoder for koding av individuelle kommandoer, inkludert gjengivelses- og beregningstrinn; GPUCommandBuffer som skal stå i kø for kjøring på GPU. Resultatet kan gjengis i et område assosiert med ett eller flere lerretselementer, eller behandles uten utdata (for eksempel når du kjører beregningsoppgaver). Å separere stadiene gjør det lettere å skille ressursopprettings- og forberedelsesoperasjoner i forskjellige behandlere som kan kjøre på forskjellige tråder.
Den andre forskjellen mellom WebGPU og WebGL er en annen tilnærming til håndtering av tilstander. WebGPU tilbyr to objekter - GPURenderPipeline og GPUComputePipeline, som lar deg kombinere ulike tilstander forhåndsdefinert av utvikleren, noe som gjør at nettleseren ikke kaster bort ressurser på tilleggsarbeid, for eksempel rekompilere shaders. Støttede tilstander inkluderer: skyggelegging, toppunktbuffer og attributtoppsett, klebrige gruppeoppsett, blanding, dybde og mønstre og utdataformater etter gjengivelse.
Den tredje funksjonen til WebGPU kalles i stor grad bindingsmodellen
minner om ressursgrupperingsverktøyene som finnes i Vulkan.
For å gruppere ressurser sammen, tilbyr WebGPU et GPUBindGroup-objekt, som kan assosieres med andre lignende objekter for bruk i shaders mens du skriver kommandoer. Oppretting av slike grupper lar sjåføren utføre de nødvendige forberedende handlingene på forhånd, og lar nettleseren endre ressursbindinger mellom tegneanrop mye raskere. Oppsettet av ressursbindinger kan forhåndsdefineres ved å bruke GPUBindGroupLayout-objektet.
I Firefox, for å aktivere WebGPU i about:config, er det en innstilling "dom.webgpu.enabled". CanvasContext-gjengivelse krever også at kompositering er aktivert
Kilde: opennet.ru