ΠΠΎΠ½ΡΠΎΡΡΠΈΡΠΌ 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 ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ².
ΠΠ»ΡΡΠ΅Π²ΡΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ WebGPU:
- Π Π°Π·Π΄Π΅Π»ΡΠ½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠ°ΠΌΠΈ ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ Π² GPU (Π² WebGL ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΎΡΠ²Π΅ΡΠ°Π» Π·Π° Π²ΡΡ ΡΠ°Π·ΠΎΠΌ). ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΡΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°: GPUDevice Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡΡΡΡ ΠΈ Π±ΡΡΠ΅ΡΡ; GPUCommandEncoder Π΄Π»Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄, Π²ΠΊΠ»ΡΡΠ°Ρ ΡΡΠ°Π΄ΠΈΠΈ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ; GPUCommandBuffer Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² GPU. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΡΠΈΡΠΎΠ²Π°Π½ Π² ΠΎΠ±Π»Π°ΡΡΠΈ, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌΠΈ canvas, ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ Π±Π΅Π· Π²ΡΠ²ΠΎΠ΄Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π°Π΄Π°Ρ). Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π΄ΠΈΠΉ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π·Π½Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΡΠ°Π·Π½ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠ°Π·Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ .
- ΠΠ½ΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ. Π WebGPU ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ Π΄Π²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ° — GPURenderPipeline ΠΈ GPUComputePipeline, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΡ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ, ΡΡΠΎ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΡ Π½Π΅ ΡΡΠ°ΡΠΈΡΡ ΡΠ΅ΡΡΡΡΡ Π½Π° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ ΠΏΠ΅ΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΡ ΡΠ΅ΠΉΠ΄Π΅ΡΠΎΠ². Π‘ΡΠ΅Π΄ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ: ΡΠ΅ΠΉΠ΄Π΅ΡΡ, ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠΈ Π²Π΅ΡΡΠΈΠ½Π½ΡΡ Π±ΡΡΠ΅ΡΠΎΠ² ΠΈ Π°ΡΡΠΈΠ±ΡΡΠΎΠ², ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠΈ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΠ½Π½ΡΡ Π³ΡΡΠΏΠΏ, ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΠ΅, Π³Π»ΡΠ±ΠΈΠ½Π° ΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ, ΡΠΎΡΠΌΠ°ΡΡ Π²ΡΠ²ΠΎΠ΄Π° ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°.
- ΠΠΎΠ΄Π΅Π»Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΡ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΠ°Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡΠΈΠ΅ Π² Vulkan ΡΡΠ΅Π΄ΡΡΠ²Π° Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΡΡΡΡΠΎΠ². ΠΠ»Ρ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² Π² Π³ΡΡΠΏΠΏΡ Π² WebGPU ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ GPUBindGroup, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΡΠ·Π°ΡΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠ΅ΠΉΠ΄Π΅ΡΠ°Ρ . Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π³ΡΡΠΏΠΏ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΡ Π·Π°ΡΠ°Π½Π΅Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π° Π±ΡΠ°ΡΠ·Π΅ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅ ΠΌΠ΅Π½ΡΡΡ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. Π Π°ΡΠΊΠ»Π°Π΄ΠΊΠ° ΠΏΡΠΈΠ²ΡΠ·ΠΎΠΊ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π·Π°ΡΠ°Π½Π΅Π΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° GPUBindGroupLayout.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru