WebGPU-støtte vil være aktivert i Chrome

Google har annonsert inkludering av standardstøtte for WebGPU-grafikk-API og WGSL (WebGPU Shading Language) i Chrome 113, som er planlagt utgitt 2. mai. WebGPU gir et programmeringsgrensesnitt som ligner på Vulkan, Metal og Direct3D 12 for å utføre GPU-sideoperasjoner som gjengivelse og databehandling, og tillater også bruk av et shader-språk for å skrive programmer som kjører på GPU-siden. WebGPU-implementeringen vil i utgangspunktet bare være aktivert på ChromeOS-, macOS- og Windows-bygg. For Linux og Android vil WebGPU-støtte bli aktivert på et senere tidspunkt.

I tillegg til Chrome har eksperimentell støtte for WebGPU blitt testet siden april 2020 i Firefox og siden november 2021 i Safari. For å aktivere WebGPU i Firefox, bør du sette dom.webgpu.enabled og gfx.webgpu.force-enabled flaggene i about:config. Det er ennå ingen planer om å aktivere WebGPU som standard i Firefox og Safari. WebGPU-implementeringer utviklet for Firefox og Chrome er tilgjengelige i form av separate biblioteker – Dawn (C++) og wgpu (Rust), som du kan bruke til å integrere WebGPU-støtte i applikasjonene dine. Det arbeides også med å legge til WebGPU-støtte til populære JavaScript-biblioteker som bruker WebGL. For eksempel er full støtte for WebGPU allerede annonsert i Babylon.js, og delvis støtte i Three.js, PlayCanvas og TensorFlow.js.

Konseptuelt skiller WebGPU seg fra WebGL på omtrent samme måte som Vulkan graphics API skiller seg fra OpenGL, men WebGPU er ikke basert på et spesifikt grafikk API, men er et universelt lag som bruker de samme lavnivå-primitivene som finnes i Vulkan, Metal og Direct3D. WebGPU gir JavaScript-applikasjoner med lavnivåkontroll over organisasjonen, prosessering og overføring av kommandoer til GPUen, administrerer 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 komplekse 3D-prosjekter for nettet som ikke yter dårligere enn frittstående programmer som direkte bruker Vulkan, Metal eller Direct3D, men som ikke er knyttet til spesifikke plattformer. WebGPU gir også tilleggsfunksjoner for å portere innfødte grafikkprogrammer til en nettaktivert form gjennom kompilering til WebAssembly. I tillegg til 3D-grafikk, inkluderer WebGPU også muligheter knyttet til å laste ned beregninger til GPUen og utføre shaders.

Hovedfunksjoner til WebGPU:

  • Separat styring 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.
  • En annen tilnærming til behandling 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.
  • En bindende modell som ligner på Vulkans ressursgrupperingsfunksjoner. 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.

Kilde: opennet.ru

Legg til en kommentar