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