W3C avduker utkast til WebGPU-standard

ΠšΠΎΠ½ΡΠΎΡ€Ρ†ΠΈΡƒΠΌ W3C прСдставил ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‡Π΅Ρ€Π½ΠΎΠ²Ρ‹Π΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ спСцификаций WebGPU ΠΈ WebGPU Shading Language (WGSL), ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… API для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° GPU, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ ΠΈ вычислСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ язык ΡˆΠ΅ΠΉΠ΄Ρ€ΠΎΠ² для написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° сторонС GPU. ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ схоТий с API Vulkan, Metal ΠΈ Direct3D 12. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Ρ‹ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ вошли ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ ΠΈΠ· Mozilla, Google, Apple ΠΈ Microsoft.

ΠšΠΎΠ½Ρ†Π΅ΠΏΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ WebGPU отличаСтся ΠΎΡ‚ WebGL ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ графичСский API Vulkan отличаСтся ΠΎΡ‚ OpenGL, Π½ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅ основываСтся Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ графичСском API, Π° прСдставляСт собой ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΡƒΡŽ прослойку, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ Ρ‚Π΅ ΠΆΠ΅ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π² Vulkan, Metal ΠΈ Direct3D. WebGPU прСдоставляСт прилоТСниям Π½Π° JavaScript срСдства для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΠΎΠ³ΠΎ контроля Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΊ GPU, управлСния связанными рСсурсами, ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ тСкстур ΠΈ скомпилированными графичСскими ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°ΠΌΠΈ. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ графичСских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π·Π° счёт сниТСния Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности Ρ€Π°Π±ΠΎΡ‚Ρ‹ с GPU.

WebGPU Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ для Web слоТныС 3D-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π½Π΅ Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ обособлСнныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ΡΡ с Vulkan, Metal ΠΈΠ»ΠΈ Direct3D, Π½ΠΎ Π½Π΅ привязанныС ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°ΠΌ. WebGPU Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ возмоТности ΠΏΡ€ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… графичСских ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Ρ„ΠΎΡ€ΠΌΡƒ, ΡΠΏΠΎΡΠΎΠ±Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π° Π±Π°Π·Π΅ web-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, благодаря компиляции Π² WebAssembly. ΠšΡ€ΠΎΠΌΠ΅ 3D-Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ WebGPU ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈ возмоТности, связанныС с выносом вычислСний Π½Π° сторону GPU ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ².

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