Firefox nattlige bygg inkluderer nå WebGPU-støtte

В natt Firefox bygger dukket opp spesifikasjonsstøtte WebGPU, som gir et programmeringsgrensesnitt for 3D-grafikkbehandling og GPU-sidedatabehandling, konseptuelt lik API Vulkan, Metal и Direkte3D 12. Spesifikasjonen utvikles av Mozilla, Google, Apple, Microsoft og fellesskapsmedlemmer i arbeidsgruppeopprettet av W3C.

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 kan opprettes i WebGPU Shading Language eller spesifiseres i det mellomliggende SPIR-V-formatet, og deretter oversettes til shader-språk som støttes av gjeldende drivere.

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.

Firefox nattlige bygg inkluderer nå WebGPU-støtte

I Firefox, for å aktivere WebGPU i about:config, er det en innstilling "dom.webgpu.enabled". CanvasContext-gjengivelse krever også at kompositering er aktivert WebRender ("gfx.webrender.all" i about:config), skrevet i Rust og outsourcing av gjengivelsesoperasjoner for sideinnhold til GPU. WebGPU-implementering er basert på prosjektkode
wgpu, skrevet i Rust og i stand til å kjøre på toppen av DX12, Vulkan og Metal APIer på Linux, Android, Windows og macOS (støtte for DX11 og OpenGL ES 3.0 er også under utvikling). Parallelt utvikler Google en annen implementering, som er tilgjengelig i Kanariegren Chromium og er aktivert ved å bruke "chrome://flags/#enable-unsafe-webgpu"-flagget, men fungerer så langt bare på macOS og Windows.

Kilde: opennet.ru

Legg til en kommentar