W3C Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° стандарт WebGPU

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 ΠΏΡ€Π°Π²ΠΈ възмоТно ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° слоТни 3D ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Π·Π° ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ работят Π½Π΅ ΠΏΠΎ-лошо ΠΎΡ‚ самостоятСлни ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°Ρ‚ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Vulkan, Metal ΠΈΠ»ΠΈ Direct3D, Π½ΠΎ Π½Π΅ са ΠΎΠ±Π²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ. WebGPU ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° прСдоставя Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ Π·Π° прСнасянС Π½Π° СстСствСни Π³Ρ€Π°Ρ„ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π² ΡƒΠ΅Π± Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° Ρ„ΠΎΡ€ΠΌΠ° Ρ‡Ρ€Π΅Π· компилация Π² WebAssembly. Π’ допълнСниС към 3D Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, WebGPU Π²ΠΊΠ»ΡŽΡ‡Π²Π° ΠΈ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Ρ€Π°Π·Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° изчислСния към GPU ΠΈ изпълнСниС Π½Π° ΡˆΠ΅ΠΉΠ΄ΡŠΡ€ΠΈ.

Основни характСристики Π½Π° WebGPU:

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

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€