ะ
WebGPU์ ์ฃผ์ ๋ชฉํ๋ Windows, Metal์ Direct3D 3์ ๊ฐ์ ์ต์ ์์คํ ๊ทธ๋ํฝ API๊ฐ ์ ๊ณตํ๋ 12D ๊ทธ๋ํฝ ๊ธฐ์ ๋ฐ ๊ธฐ๋ฅ์ ํ์ฉํ ์ ์๋๋ก ์น ํ๋ซํผ์ ์์ ํ๊ณ ์ฌ์ฉ์ ์นํ์ ์ด๋ฉฐ ์ด์ ๊ฐ๋ฅํ ๊ณ ์ฑ๋ฅ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. macOS์์๋ Vulkan, Linux์์๋ Vulkan์ ์ฌ์ฉํฉ๋๋ค. ๊ฐ๋ ์ ์ผ๋ก WebGPU๋ Vulkan์ด OpenGL๊ณผ ๋ค๋ฅธ ๊ฒ๊ณผ ๊ฑฐ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก WebGL๊ณผ ๋ค๋ฅด๋ฉฐ ๋์์ ํน์ ๊ทธ๋ํฝ API๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก Vulkan์์ ๋ฐ๊ฒฌ๋๋ ๋์ผํ ํ์ ์์ค ๊ธฐ๋ณธ ์์๋ฅผ ์ฌ์ฉํ๋ ๋ฒ์ฉ ๋ ์ด์ด์ ๋๋ค. ๋ฉํ๊ณผ Direct3D.
WebGPU๋ ๊ตฌ์ฑ, ์ฒ๋ฆฌ, GPU์ ๋ํ ๋ช ๋ น ์ ์ก, ๊ด๋ จ ๋ฆฌ์์ค, ๋ฉ๋ชจ๋ฆฌ, ๋ฒํผ, ํ ์ค์ฒ ๊ฐ์ฒด ๋ฐ ์ปดํ์ผ๋ ๊ทธ๋ํฝ ์ ฐ์ด๋ ๊ด๋ฆฌ์ ๋ํ ํ์ ์์ค ์ ์ด ๊ธฐ๋ฅ์ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ค๋ฒํค๋ ๋น์ฉ์ ์ค์ด๊ณ GPU ์์ ํจ์จ์ฑ์ ๋์ฌ ๊ทธ๋ํฝ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๋์ผ ์ ์์ต๋๋ค.
WebGPU๋ฅผ ์ฌ์ฉํ๋ฉด Vulkan, Metal ๋๋ Direct3D์ ์ง์ ์ก์ธ์คํ์ง๋ง ํน์ ํ๋ซํผ์ ์ฐ๊ฒฐ๋์ง ์๋ ๋
๋ฆฝ ์คํํ ํ๋ก๊ทธ๋จ๋ณด๋ค ๋์์ง ์๊ฒ ์๋ํ๋ ์น์ฉ ๋ณธ๊ฒฉ์ ์ธ ๋ณต์กํ 3D ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. WebGPU๋ ๋ํ WebAssembly ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๊ทธ๋ํฝ ํ๋ก๊ทธ๋จ์ ์น ์ง์ ํ์์ผ๋ก ํฌํ
ํ ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. 3D ๊ทธ๋ํฝ ์ธ์๋ WebGPU๋ ๊ณ์ฐ์ GPU๋ก ์คํ๋ก๋ํ๊ณ ์
ฐ์ด๋ ๊ฐ๋ฐ์ ์ง์ํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ๋ ํฌํจํฉ๋๋ค. ์
ฐ์ด๋
WebGPU๋ ๋ณ๋์ ๋ฆฌ์์ค ๊ด๋ฆฌ, ์ค๋น ์์
, GPU์ ๋ํ ๋ช
๋ น ์ ์ก์ ์ฌ์ฉํฉ๋๋ค(WebGL์์๋ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ชจ๋ ๊ฒ์ ๋์์ ๋ด๋นํ์ต๋๋ค). ์ธ ๊ฐ์ง ๋ณ๋์ ์ปจํ
์คํธ๊ฐ ์ ๊ณต๋ฉ๋๋ค.
ํ
์ค์ฒ, ๋ฒํผ ๋ฑ์ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ธฐ ์ํ GPUDevice ๋ ๋๋ง ๋ฐ ๊ณ์ฐ ๋จ๊ณ๋ฅผ ํฌํจํ์ฌ ๊ฐ๋ณ ๋ช
๋ น์ ์ธ์ฝ๋ฉํ๊ธฐ ์ํ GPUCommandEncoder GPUCommandBuffer๋ GPU์์์ ์คํ์ ์ํด ๋๊ธฐ์ด์ ์ถ๊ฐ๋ฉ๋๋ค. ๊ฒฐ๊ณผ๋ ํ๋ ์ด์์ ์บ๋ฒ์ค ์์์ ์ฐ๊ฒฐ๋ ์์ญ์์ ๋ ๋๋ง๋๊ฑฐ๋ ์ถ๋ ฅ ์์ด ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค(์: ์ปดํจํ
์์
์ ์คํํ ๋). ๋จ๊ณ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋ฆฌ์์ค ์์ฑ ๋ฐ ์ค๋น ์์
์ ์๋ก ๋ค๋ฅธ ์ค๋ ๋์์ ์คํํ ์ ์๋ ์๋ก ๋ค๋ฅธ ์ฒ๋ฆฌ๊ธฐ๋ก ๋ ์ฝ๊ฒ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
WebGPU์ WebGL์ ๋ ๋ฒ์งธ ์ฐจ์ด์ ์ ์ํ ์ฒ๋ฆฌ์ ๋ํ ์ ๊ทผ ๋ฐฉ์์ด ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋๋ค. WebGPU๋ GPURenderPipeline๊ณผ GPUComputePipeline์ด๋ผ๋ ๋ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๊ฐ ๋ฏธ๋ฆฌ ์ ์ํ ๋ค์ํ ์ํ๋ฅผ ๊ฒฐํฉํ ์ ์์ผ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ๋ ์ ฐ์ด๋ ์ฌ์ปดํ์ผ๊ณผ ๊ฐ์ ์ถ๊ฐ ์์ ์ ๋ฆฌ์์ค๋ฅผ ๋ญ๋นํ์ง ์์๋ ๋ฉ๋๋ค. ์ง์๋๋ ์ํ์๋ ์ ฐ์ด๋, ์ ์ ๋ฒํผ ๋ฐ ์์ฑ ๋ ์ด์์, ๊ณ ์ ๊ทธ๋ฃน ๋ ์ด์์, ๋ธ๋ ๋ฉ, ๊น์ด ๋ฐ ํจํด, ๋ ๋๋ง ํ ์ถ๋ ฅ ํ์์ด ํฌํจ๋ฉ๋๋ค.
WebGPU์ ์ธ ๋ฒ์งธ ๊ธฐ๋ฅ์ ํฌ๊ฒ ๋ฐ์ธ๋ฉ ๋ชจ๋ธ(Binding Model)์ด๋ผ๊ณ ํฉ๋๋ค.
Vulkan์ ์๋ ๋ฆฌ์์ค ๊ทธ๋ฃนํ ๋๊ตฌ๋ฅผ ์ฐ์์ํต๋๋ค.
๋ฆฌ์์ค๋ฅผ ํจ๊ป ๊ทธ๋ฃนํํ๊ธฐ ์ํด WebGPU๋ ๋ช
๋ น์ ์์ฑํ๋ ๋์ ์
ฐ์ด๋์์ ์ฌ์ฉํ ์ ์๋๋ก ๋ค๋ฅธ ์ ์ฌํ ๊ฐ์ฒด์ ์ฐ๊ฒฐํ ์ ์๋ GPUBindGroup ๊ฐ์ฒด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ทธ๋ฃน์ ์์ฑํ๋ฉด ๋๋ผ์ด๋ฒ๊ฐ ํ์ํ ์ค๋น ์์
์ ๋ฏธ๋ฆฌ ์ํํ ์ ์๊ณ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ทธ๋ฆฌ๊ธฐ ํธ์ถ ๊ฐ์ ๋ฆฌ์์ค ๋ฐ์ธ๋ฉ์ ํจ์ฌ ๋น ๋ฅด๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ฆฌ์์ค ๋ฐ์ธ๋ฉ์ ๋ ์ด์์์ GPUBindGroupLayout ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋ฆฌ ์ ์ํ ์ ์์ต๋๋ค.
Firefox์ ๊ฒฝ์ฐ about:config์์ WebGPU๋ฅผ ํ์ฑํํ๋ ค๋ฉด "dom.webgpu.enabled" ์ค์ ์ด ์์ต๋๋ค. CanvasContext ๋ ๋๋ง์ ์ฌ์ฉํ๋ ค๋ฉด ํฉ์ฑ๋ ํ์ฑํํด์ผ ํฉ๋๋ค.
์ถ์ฒ : opennet.ru