ื”ื‘ื ื™ื™ื” ื”ืœื™ืœื™ืช ืฉืœ Firefox ื›ื•ืœืœืช ื›ืขืช ืชืžื™ื›ื” ื‘-WebGPU

ะ’ ืœึทื™ึฐืœึธื” ืคื™ื™ืจืคื•ืงืก ื‘ื•ื ื” ื”ื•ืคื™ืข ืชืžื™ื›ื” ื‘ืžืคืจื˜ WebGPU, ื”ืžืกืคืง ืžืžืฉืง ืชื›ื ื•ืช ืœืขื™ื‘ื•ื“ ื’ืจืคื™ ืชืœืช ืžื™ืžื“ ื•ืžื—ืฉื•ื‘ ื‘ืฆื“ GPU, ื“ื•ืžื” ืžื‘ื—ื™ื ื” ืจืขื™ื•ื ื™ืช ืœ-API Vulkan, ืžึทืชึถื›ึถืช ะธ ื™ืฉื™ืจ 3D 12. ื”ืžืคืจื˜ ืžืคื•ืชื— ืขืœ ื™ื“ื™ ืžื•ื–ื™ืœื”, ื’ื•ื’ืœ, ืืคืœ, ืžื™ืงืจื•ืกื•ืคื˜ ื•ื—ื‘ืจื™ ืงื”ื™ืœื” ื‘ ืงื‘ื•ืฆืช ืขื‘ื•ื“ื”, ืฉื ื•ืฆืจ ืขืœ ื™ื“ื™ ืืจื’ื•ืŸ W3C.

ื”ืžื˜ืจื” ื”ืขื™ืงืจื™ืช ืฉืœ WebGPU ื”ื™ื ืœืกืคืง ืžืžืฉืง ืชื›ื ื•ืช ืžืื•ื‘ื˜ื—, ื™ื“ื™ื“ื•ืชื™ ืœืžืฉืชืžืฉ, ื ื™ื™ื“ ื•ืขื ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ืขื‘ื•ืจ ืคืœื˜ืคื•ืจืžืช ื”ืื™ื ื˜ืจื ื˜ ื›ื“ื™ ืœืžื ืฃ ืืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื•ื”ื™ื›ื•ืœื•ืช ื”ื’ืจืคื™ื•ืช ื”ืชืœืช-ืžืžื“ื™ื•ืช ื”ื ื™ืชื ื•ืช ืขืœ ื™ื“ื™ ืžืžืฉืงื™ API ื’ืจืคื™ ืžืขืจื›ืช ืžื•ื“ืจื ื™ื™ื, ื›ื’ื•ืŸ Direct3D 3 ื‘-Windows, Metal ื‘-macOS, ื•-Vulkan ื‘ืœื™ื ื•ืงืก. ืžื‘ื—ื™ื ื” ืงื•ื ืกืคื˜ื•ืืœื™ืช, WebGPU ืฉื•ื ื” ืž-WebGL ื‘ืื•ืชื” ืžื™ื“ื” ืฉื‘ื• ื•ื•ืœืงืŸ ืฉื•ื ื” ืž-OpenGL, ื•ื‘ืžืงื‘ื™ืœ ื”ื•ื ืื™ื ื• ืžื‘ื•ืกืก ืขืœ API ื’ืจืคื™ ืกืคืฆื™ืคื™, ืืœื ื”ื•ื ืฉื›ื‘ื” ืื•ื ื™ื‘ืจืกืœื™ืช ืฉืžืฉืชืžืฉืช ื‘ื“ืจืš ื›ืœืœ ื‘ืื•ืชื ืคืจื™ืžื™ื˜ื™ื‘ื™ื ื‘ืจืžื” ื ืžื•ื›ื” ืฉื ืžืฆืืช ื‘ื•ื•ืœืงืŸ, ืžืชื›ืช ื•-Direct12D.

WebGPU ืžืกืคืงืช ืœื™ื™ืฉื•ืžื™ JavaScript ืขื ืฉืœื™ื˜ื” ื‘ืจืžื” ื ืžื•ื›ื” ื™ื•ืชืจ ืขืœ ื”ืืจื’ื•ืŸ, ื”ืขื™ื‘ื•ื“ ื•ื”ืฉื™ื“ื•ืจ ืฉืœ ื”ืคืงื•ื“ื•ืช ืœ-GPU, ื ื™ื”ื•ืœ ืžืฉืื‘ื™ื ืžืฉื•ื™ื›ื™ื, ื–ื™ื›ืจื•ืŸ, ืžืื’ืจื™ื, ืื•ื‘ื™ื™ืงื˜ื™ ื˜ืงืกื˜ื•ืจื” ื•ื”ืฆืœืœื•ืช ื’ืจืคื™ืงื” ืžื”ื™ื“ื•ืจ. ื’ื™ืฉื” ื–ื• ืžืืคืฉืจืช ืœืš ืœื”ืฉื™ื’ ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื ื™ื•ืชืจ ืขื‘ื•ืจ ื™ื™ืฉื•ืžื™ ื’ืจืคื™ืงื” ืขืœ ื™ื“ื™ ื”ืคื—ืชืช ืขืœื•ื™ื•ืช ื”ืชืงื•ืจื” ื•ื”ื’ื‘ืจืช ื™ืขื™ืœื•ืช ื”ืขื‘ื•ื“ื” ืขื ื”-GPU.

WebGPU ืžืืคืฉืจ ืœื™ืฆื•ืจ ืคืจื•ื™ืงื˜ื™ื ืชืœืช-ืžืžื“ื™ื™ื ืžื•ืจื›ื‘ื™ื ืžืœืื™ื ืขื‘ื•ืจ ื”ืื™ื ื˜ืจื ื˜ ืฉืขื•ื‘ื“ื™ื ืœื ื™ื•ืชืจ ื’ืจื•ืข ืžืชื•ื›ื ื•ืช ืขืฆืžืื™ื•ืช ื”ื ื™ื’ืฉื•ืช ื™ืฉื™ืจื•ืช ืœื•ื•ืœืงืŸ, ืžืชื›ืช ืื• Direct3D, ืืš ืื™ื ืŸ ืงืฉื•ืจื•ืช ืœืคืœื˜ืคื•ืจืžื•ืช ืกืคืฆื™ืคื™ื•ืช. WebGPU ืžืกืคืง ื’ื ื™ื›ื•ืœื•ืช ื ื•ืกืคื•ืช ื‘ืขืช ื”ืขื‘ืจื” ืฉืœ ืชื•ื›ื ื™ื•ืช ื’ืจืคื™ืงื” ืžืงื•ืจื™ื•ืช ืœื˜ื•ืคืก ื”ืžื•ืชืื ืœืื™ื ื˜ืจื ื˜ ื‘ืืžืฆืขื•ืช ืฉื™ืžื•ืฉ ื‘ื˜ื›ื ื•ืœื•ื’ื™ื™ืช WebAssembly. ื‘ื ื•ืกืฃ ืœื’ืจืคื™ืงื” ืชืœืช ืžื™ืžื“ื™ืช, WebGPU ืžื›ืกื” ื’ื ื™ื›ื•ืœื•ืช ื”ืงืฉื•ืจื•ืช ืœื”ื•ืจื“ืช ื—ื™ืฉื•ื‘ื™ื ืœ-GPU ื•ืชืžื™ื›ื” ื‘ืคื™ืชื•ื— ื”ืฆืœืœื”. Shaders ื™ื›ื•ืœ ืœื”ื™ื•ื•ืฆืจ ื‘ืฉืคืช ื”ืฆืœืœื” ืฉืœ WebGPU ืื• ืœืฆื™ื•ืŸ ื‘ืคื•ืจืžื˜ SPIR-V ื”ื‘ื™ื ื™ื™ื, ื•ืœืื—ืจ ืžื›ืŸ ืœืชืจื’ื ืœืฉืคื•ืช ื”ืฆืœืœื” ื”ื ืชืžื›ื•ืช ืขืœ ื™ื“ื™ ืžื ื”ืœื™ ื”ืชืงื ื™ื ื ื•ื›ื—ื™ื™ื.

WebGPU ืžืฉืชืžืฉ ื‘ื ื™ื”ื•ืœ ื ืคืจื“ ืฉืœ ืžืฉืื‘ื™ื, ืขื‘ื•ื“ืช ื”ื›ื ื” ื•ื”ืขื‘ืจืช ืคืงื•ื“ื•ืช ืœ-GPU (ื‘-WebGL, ืื•ื‘ื™ื™ืงื˜ ืื—ื“ ื”ื™ื” ืื—ืจืื™ ืขืœ ื”ื›ืœ ื‘ื‘ืช ืื—ืช). ืžืกื•ืคืงื™ื ืฉืœื•ืฉื” ื”ืงืฉืจื™ื ื ืคืจื“ื™ื:
GPUDevice ืœื™ืฆื™ืจืช ืžืฉืื‘ื™ื ื›ื’ื•ืŸ ืžืจืงืžื™ื ื•ืžืื’ืจื™ื; GPUCommandEncoder ืœืงื™ื“ื•ื“ ืคืงื•ื“ื•ืช ื‘ื•ื“ื“ื•ืช, ื›ื•ืœืœ ืฉืœื‘ื™ ืจื™ื ื“ื•ืจ ื•ื—ื™ืฉื•ื‘; GPUCommandBuffer ืฉื™ืขืžื•ื“ ื‘ืชื•ืจ ืœื‘ื™ืฆื•ืข ื‘-GPU. ื ื™ืชืŸ ืœื”ืฆื™ื’ ืืช ื”ืชื•ืฆืื” ื‘ืื–ื•ืจ ื”ืžืฉื•ื™ืš ืœืืœืžื ื˜ ืื—ื“ ืื• ื™ื•ืชืจ ืฉืœ ืงื ื‘ืก, ืื• ืœืขื‘ื“ ืœืœื ืคืœื˜ (ืœื“ื•ื’ืžื”, ื‘ืขืช ื”ืคืขืœืช ืžืฉื™ืžื•ืช ืžื—ืฉื•ื‘). ื”ืคืจื“ืช ื”ืฉืœื‘ื™ื ืžืงืœื” ืขืœ ื”ืคืจื“ืช ืคืขื•ืœื•ืช ื™ืฆื™ืจืช ืžืฉืื‘ื™ื ื•ื”ื›ื ื” ืœืžื˜ืคืœื™ื ืฉื•ื ื™ื ืฉื™ื›ื•ืœื™ื ืœืคืขื•ืœ ืขืœ ืฉืจืฉื•ืจื™ื ืฉื•ื ื™ื.

ื”ื”ื‘ื“ืœ ื”ืฉื ื™ ื‘ื™ืŸ WebGPU ืœ-WebGL ื”ื•ื ื’ื™ืฉื” ืฉื•ื ื” ืœื˜ื™ืคื•ืœ ื‘ืžืฆื‘ื™ื. WebGPU ืžืฆื™ืข ืฉื ื™ ืื•ื‘ื™ื™ืงื˜ื™ื - GPURenderPipeline ื•-GPUComputePipeline, ื”ืžืืคืฉืจื™ื ืœืฉืœื‘ ืžืฆื‘ื™ื ืฉื•ื ื™ื ืฉื”ื•ื’ื“ืจื• ืžืจืืฉ ืขืœ ื™ื“ื™ ื”ืžืคืชื—, ืžื” ืฉืžืืคืฉืจ ืœื“ืคื“ืคืŸ ืœื ืœื‘ื–ื‘ื– ืžืฉืื‘ื™ื ืขืœ ืขื‘ื•ื“ื” ื ื•ืกืคืช, ื›ืžื• ื”ื™ื“ื•ืจ ืžื—ื“ืฉ ืฉืœ ื”ืฆืœืœื•ืช. ื”ืžืฆื‘ื™ื ื”ื ืชืžื›ื™ื ื›ื•ืœืœื™ื: ื”ืฆืœืœื•ืช, ืคืจื™ืกื•ืช ื—ื™ืฅ ืงื•ื“ืงื•ื“ ื•ืชื›ื•ื ื”, ืคืจื™ืกื•ืช ืงื‘ื•ืฆื•ืช ื“ื‘ื™ืงื•ืช, ืžื™ื–ื•ื’, ืขื•ืžืง ื•ืชื‘ื ื™ื•ืช ื•ืชื‘ื ื™ื•ืช ืคืœื˜ ืœืื—ืจ ืจื™ื ื“ื•ืจ.

ื”ืชื›ื•ื ื” ื”ืฉืœื™ืฉื™ืช ืฉืœ WebGPU ื ืงืจืืช ืžื•ื“ืœ ืžื—ื™ื™ื‘, ื‘ืžื™ื“ื” ืจื‘ื”
ืžื–ื›ื™ืจ ืืช ื›ืœื™ ืงื™ื‘ื•ืฅ ื”ืžืฉืื‘ื™ื ื”ืงื™ื™ืžื™ื ื‘ื•ื•ืœืงืŸ.
ื›ื“ื™ ืœืงื‘ืฅ ืžืฉืื‘ื™ื ื™ื—ื“ื™ื•, WebGPU ืžืกืคืง ืื•ื‘ื™ื™ืงื˜ GPUBindGroup, ืฉื ื™ืชืŸ ืœืฉื™ื™ืš ืœืื•ื‘ื™ื™ืงื˜ื™ื ื“ื•ืžื™ื ืื—ืจื™ื ืœืฉื™ืžื•ืฉ ื‘ื”ืฆืœืœื•ืช ื‘ื–ืžืŸ ื›ืชื™ื‘ืช ืคืงื•ื“ื•ืช. ื™ืฆื™ืจืช ืงื‘ื•ืฆื•ืช ื›ืืœื” ืžืืคืฉืจืช ืœื ื”ื’ ืœื‘ืฆืข ืืช ืคืขื•ืœื•ืช ื”ื”ื›ื ื” ื”ื“ืจื•ืฉื•ืช ืžืจืืฉ, ื•ืžืืคืฉืจืช ืœื“ืคื“ืคืŸ ืœืฉื ื•ืช ื›ืจื™ื›ื•ืช ืžืฉืื‘ื™ื ื‘ื™ืŸ ืงืจื™ืื•ืช ืœืฆื™ื™ืจ ื”ืจื‘ื” ื™ื•ืชืจ ืžื”ืจ. ื ื™ืชืŸ ืœื”ื’ื“ื™ืจ ืžืจืืฉ ืืช ื”ืคืจื™ืกื” ืฉืœ ื›ืจื™ื›ื•ืช ืžืฉืื‘ื™ื ื‘ืืžืฆืขื•ืช ื”ืื•ื‘ื™ื™ืงื˜ GPUBindGroupLayout.

ื”ื‘ื ื™ื™ื” ื”ืœื™ืœื™ืช ืฉืœ Firefox ื›ื•ืœืœืช ื›ืขืช ืชืžื™ื›ื” ื‘-WebGPU

ื‘ืคื™ื™ืจืคื•ืงืก, ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช WebGPU ื‘- about:config, ื™ืฉ ื”ื’ื“ืจื” "dom.webgpu.enabled". ืขื™ื‘ื•ื“ CanvasContext ืžื—ื™ื™ื‘ ื’ื ื”ืคืขืœื” ืฉืœ compositing WebRender ("gfx.webrender.all" ื‘- about:config), ื›ืชื•ื‘ ื‘-Rust ื•ืžื™ืงื•ืจ ื—ื•ืฅ ืฉืœ ืคืขื•ืœื•ืช ืขื™ื‘ื•ื“ ืชื•ื›ืŸ ื“ืฃ ืœ-GPU. ื™ื™ืฉื•ื WebGPU ืžื‘ื•ืกืก ืขืœ ืงื•ื“ ืคืจื•ื™ืงื˜
wgpu, ื›ืชื•ื‘ ื‘-Rust ื•ืžืกื•ื’ืœ ืœืคืขื•ืœ ืขืœ ื’ื‘ื™ ืžืžืฉืงื™ API ืฉืœ DX12, Vulkan ื•-Metal ื‘-Linux, Android, Windows ื•-macOS (ืชืžื™ื›ื” ื‘-DX11 ื•-OpenGL ES 3.0 ื ืžืฆืืช ื’ื ื‘ืคื™ืชื•ื—). ื‘ืžืงื‘ื™ืœ, ื’ื•ื’ืœ ืžืคืชื—ืช ื™ื™ืฉื•ื ื ื•ืกืฃ, ืฉื–ืžื™ืŸ ื‘ ืกื ื™ืฃ ืงื ืจื™ Chromium ื•ืืคืฉืจ ืœื”ืฉืชืžืฉ ื‘ื“ื’ืœ "chrome://flags/#enable-unsafe-webgpu", ืืš ืขื“ ื›ื” ืขื•ื‘ื“ ืจืง ืขืœ macOS ื•-Windows.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”