Π’ Chrome Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° WebGPU

Компания Google объявила ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ графичСского API WebGPU ΠΈ языка ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ² WGSL (WebGPU Shading Language) Π² Π²Π΅Ρ‚ΠΊΠ΅ Chrome 113, Ρ€Π΅Π»ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°ΠΌΠ΅Ρ‡Π΅Π½ Π½Π° 2 мая. WebGPU прСдоставляСт схоТий с Vulkan, Metal ΠΈ Direct3D 12 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ интСрфСйс для выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° сторонС GPU, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³ ΠΈ вычислСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ язык ΡˆΠ΅ΠΉΠ΄Ρ€ΠΎΠ² для написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… Π½Π° сторонС GPU. РСализация WebGPU Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π²Π½Π°Ρ‡Π°Π»Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² сборках для ChromeOS, macOS ΠΈ Windows. Для Linux ΠΈ Android ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° WebGPU Π±ΡƒΠ΄Π΅Ρ‚ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ·Π΄Π½Π΅Π΅.

ΠšΡ€ΠΎΠΌΠ΅ Chrome ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° WebGPU тСстируСтся с апрСля 2020 Π³ΠΎΠ΄Π° Π² Firefox ΠΈ с ноября 2021 Π³ΠΎΠ΄Π° Π² Safari. Для Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ WebGPU Π² Firefox Π² about:config слСдуСт Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ„Π»Π°Π³ΠΈ dom.webgpu.enabled ΠΈ gfx.webgpu.force-enabled. О ΠΏΠ»Π°Π½Π°Ρ… ΠΏΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ WebGPU ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Firefox ΠΈ Safari ΠΏΠΎΠΊΠ° Π½Π΅ сообщаСтся. Π Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ для Firefox ΠΈ Chrome Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ WebGPU доступны Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ — Dawn (Π‘++) ΠΈ wgpu (Rust), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ WebGPU Π² свои прилоТСния. Π’Π°ΠΊΠΆΠ΅ вСдётся Ρ€Π°Π±ΠΎΡ‚Π° ΠΏΠΎ добавлСнию ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ WebGPU Π² популярныС JavaScript-Π±ΠΈΠ±Π»ΠΈΡ‚Π΅ΠΊΠΈ, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ WebGL. НапримСр, полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° WebGPU ΡƒΠΆΠ΅ заявлСна Π² Babylon.js, Π° частичная Π² Three.js, PlayCanvas ΠΈ TensorFlow.js.

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

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

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности WebGPU:

  • РаздСльноС ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ рСсурсами, ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΠΌΠΈ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ Π² GPU (Π² WebGL ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΎΡ‚Π²Π΅Ρ‡Π°Π» Π·Π° всё Ρ€Π°Π·ΠΎΠΌ). ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ Ρ‚Ρ€ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… контСкста: GPUDevice для создания рСсурсов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ тСкстуры ΠΈ Π±ΡƒΡ„Π΅Ρ€Ρ‹; GPUCommandEncoder для кодирования ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ стадии Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π° ΠΈ вычислСния; GPUCommandBuffer для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² GPU. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ отрисован Π² области, связанной с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими элСмСнтами canvas, ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π±Π΅Π· Π²Ρ‹Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ запускС Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡). Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ стадий ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ разнСсСниС создания рСсурсов ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ€Π°Π·Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ….
  • Иной ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ состояний. Π’ WebGPU прСдлагаСтся Π΄Π²Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° — GPURenderPipeline ΠΈ GPUComputePipeline, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ состояния, Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ Π½Π΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ рСсурсы Π½Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ пСрСкомпиляция ΡˆΠ΅ΠΉΠ΄Π΅Ρ€ΠΎΠ². Π‘Ρ€Π΅Π΄ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… состояний: ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Ρ‹, раскладки Π²Π΅Ρ€ΡˆΠΈΠ½Π½Ρ‹Ρ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², раскладки ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Ρ‘Π½Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ, смСшиваниС, Π³Π»ΡƒΠ±ΠΈΠ½Π° ΠΈ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° послС Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π°.
  • МодСль связывания, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Vulkan срСдства Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ рСсурсов. Для объСдинСния рСсурсов Π² Π³Ρ€ΡƒΠΏΠΏΡ‹ Π² WebGPU прСдоставляСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ GPUBindGroup, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΎ врСмя записи ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ для использования Π² ΡˆΠ΅ΠΉΠ΄Π΅Ρ€Π°Ρ…. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Ρƒ Π·Π°Ρ€Π°Π½Π΅Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ дСйствия, Π° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρƒ позволяСт Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрСС ΠΌΠ΅Π½ΡΡ‚ΡŒ привязки рСсурсов ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌΠΈ отрисовки. Раскладка привязок рСсурсов ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° GPUBindGroupLayout.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru