W3C afslører udkast til WebGPU-standard

W3C har udgivet de første udkast til WebGPU- og WebGPU Shading Language-specifikationerne (WGSL), som definerer API'er til udførelse af GPU-operationer såsom rendering og computing, samt et shader-sprog til at skrive programmer, der kører på GPU'en. Begrebsmæssigt ligner API'erne Vulkan, Metal og Direct3D 12. Specifikationerne blev udarbejdet af en arbejdsgruppe, der omfattede ingeniører fra Mozilla, Google, Apple og Microsoft.

Konceptuelt adskiller WebGPU sig fra WebGL på samme måde, som Vulkan grafik API adskiller sig fra OpenGL, men den er ikke baseret på en specifik grafik API, men er et universelt lag, der bruger de samme lavniveau primitiver som findes i Vulkan, Metal og Direkte 3D. WebGPU leverer JavaScript-applikationer med kontrol på lavt niveau over organisationen, behandling og transmission af kommandoer til GPU'en, styring af tilknyttede ressourcer, hukommelse, buffere, teksturobjekter og kompilerede grafikskyggere. Denne tilgang giver dig mulighed for at opnå højere ydeevne for grafikapplikationer ved at reducere overheadomkostninger og øge effektiviteten ved at arbejde med GPU'en.

WebGPU gør det muligt at skabe komplekse 3D-projekter til nettet, der ikke fungerer dårligere end selvstændige programmer, der direkte tilgår Vulkan, Metal eller Direct3D, men ikke er bundet til specifikke platforme. WebGPU giver også yderligere muligheder for portering af native grafikprogrammer til en webaktiveret form gennem kompilering i WebAssembly. Ud over 3D-grafik inkluderer WebGPU også funktioner relateret til at overføre beregninger til GPU'en og udføre shaders.

Nøglefunktioner i WebGPU:

  • Separat styring af ressourcer, forberedende arbejde og overførsel af kommandoer til GPU'en (i WebGL var et objekt ansvarlig for alt på én gang). Der er tre separate kontekster: GPUDenhed til at skabe ressourcer såsom teksturer og buffere; GPUCommandEncoder til kodning af individuelle kommandoer, inklusive gengivelses- og beregningstrin; GPUCommandBuffer skal stå i kø til udførelse på GPU'en. Resultatet kan gengives i et område, der er knyttet til et eller flere lærredselementer, eller behandles uden output (f.eks. ved kørsel af computeropgaver). Adskillelse af stadierne gør det lettere at adskille ressourceoprettelse og forberedelsesoperationer i forskellige handlere, der kan køre på forskellige tråde.
  • En anden tilgang til behandlingstilstande. WebGPU tilbyder to objekter - GPURenderPipeline og GPUComputePipeline, som giver dig mulighed for at kombinere forskellige tilstande foruddefineret af udvikleren, hvilket gør det muligt for browseren ikke at spilde ressourcer på yderligere arbejde, såsom genkompilering af shaders. Understøttede tilstande omfatter: shaders, vertexbuffer og attributlayouter, sticky gruppelayouts, blanding, dybde og mønstre og outputformater efter gengivelse.
  • En bindende model, der ligner Vulkans ressourcegrupperingsfunktioner. For at gruppere ressourcer sammen giver WebGPU et GPUBindGroup-objekt, som kan associeres med andre lignende objekter til brug i shaders, mens du skriver kommandoer. Oprettelse af sådanne grupper gør det muligt for chaufføren at udføre de nødvendige forberedende handlinger på forhånd og giver browseren mulighed for at ændre ressourcebindinger mellem draw-kald meget hurtigere. Layoutet af ressourcebindinger kan foruddefineres ved hjælp af GPUBindGroupLayout-objektet.

Kilde: opennet.ru

Tilføj en kommentar