Firefox Nightly ๋นŒ๋“œ์—๋Š” ์ด์ œ WebGPU ์ง€์›์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

ะ’ ์•ผ๊ฐ„ ํŒŒ์ด์–ดํญ์Šค ๋นŒ๋“œ ์ถœ์—ฐ ํ•œ ์‚ฌ์–‘ ์ง€์› ์›น GPU, ๊ฐœ๋…์ ์œผ๋กœ API์™€ ์œ ์‚ฌํ•œ 3D ๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ๋ฐ GPU ์ธก ์ปดํ“จํŒ…์„ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. VULKAN, ๊ธˆ์† ะธ ๋‹ค์ด๋ ‰ํŠธ3D 12. ์ด ์‚ฌ์–‘์€ Mozilla, Google, Apple, Microsoft ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์„ฑ์›์ด ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค. ์‹ค๋ฌด๊ทธ๋ฃน, W3C ์กฐ์ง์—์„œ ๋งŒ๋“  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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 ์…ฐ์ด๋”ฉ ์–ธ์–ด๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์ค‘๊ฐ„ SPIR-V ํ˜•์‹์œผ๋กœ ์ง€์ •๋œ ํ›„ ํ˜„์žฌ ๋“œ๋ผ์ด๋ฒ„์—์„œ ์ง€์›ํ•˜๋Š” ์…ฐ์ด๋” ์–ธ์–ด๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

WebGPU๋Š” ๋ณ„๋„์˜ ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ, ์ค€๋น„ ์ž‘์—…, GPU์— ๋Œ€ํ•œ ๋ช…๋ น ์ „์†ก์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(WebGL์—์„œ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด๊ฐ€ ๋ชจ๋“  ๊ฒƒ์„ ๋™์‹œ์— ๋‹ด๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค). ์„ธ ๊ฐ€์ง€ ๋ณ„๋„์˜ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
ํ…์Šค์ฒ˜, ๋ฒ„ํผ ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ GPUDevice ๋ Œ๋”๋ง ๋ฐ ๊ณ„์‚ฐ ๋‹จ๊ณ„๋ฅผ ํฌํ•จํ•˜์—ฌ ๊ฐœ๋ณ„ ๋ช…๋ น์„ ์ธ์ฝ”๋”ฉํ•˜๊ธฐ ์œ„ํ•œ GPUCommandEncoder GPUCommandBuffer๋Š” GPU์—์„œ์˜ ์‹คํ–‰์„ ์œ„ํ•ด ๋Œ€๊ธฐ์—ด์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์บ”๋ฒ„์Šค ์š”์†Œ์™€ ์—ฐ๊ฒฐ๋œ ์˜์—ญ์—์„œ ๋ Œ๋”๋ง๋˜๊ฑฐ๋‚˜ ์ถœ๋ ฅ ์—†์ด ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ์ปดํ“จํŒ… ์ž‘์—…์„ ์‹คํ–‰ํ•  ๋•Œ). ๋‹จ๊ณ„๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋ฆฌ์†Œ์Šค ์ƒ์„ฑ ๋ฐ ์ค€๋น„ ์ž‘์—…์„ ์„œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๊ธฐ๋กœ ๋” ์‰ฝ๊ฒŒ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WebGPU์™€ WebGL์˜ ๋‘ ๋ฒˆ์งธ ์ฐจ์ด์ ์€ ์ƒํƒœ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. WebGPU๋Š” GPURenderPipeline๊ณผ GPUComputePipeline์ด๋ผ๋Š” ๋‘ ๊ฐ€์ง€ ๊ฐœ์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฏธ๋ฆฌ ์ •์˜ํ•œ ๋‹ค์–‘ํ•œ ์ƒํƒœ๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ธŒ๋ผ์šฐ์ €๋Š” ์…ฐ์ด๋” ์žฌ์ปดํŒŒ์ผ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€ ์ž‘์—…์— ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ์ƒํƒœ์—๋Š” ์…ฐ์ด๋”, ์ •์  ๋ฒ„ํผ ๋ฐ ์†์„ฑ ๋ ˆ์ด์•„์›ƒ, ๊ณ ์ • ๊ทธ๋ฃน ๋ ˆ์ด์•„์›ƒ, ๋ธ”๋ Œ๋”ฉ, ๊นŠ์ด ๋ฐ ํŒจํ„ด, ๋ Œ๋”๋ง ํ›„ ์ถœ๋ ฅ ํ˜•์‹์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

WebGPU์˜ ์„ธ ๋ฒˆ์งธ ๊ธฐ๋Šฅ์€ ํฌ๊ฒŒ ๋ฐ”์ธ๋”ฉ ๋ชจ๋ธ(Binding Model)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
Vulkan์— ์žˆ๋Š” ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃนํ™” ๋„๊ตฌ๋ฅผ ์—ฐ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
๋ฆฌ์†Œ์Šค๋ฅผ ํ•จ๊ป˜ ๊ทธ๋ฃนํ™”ํ•˜๊ธฐ ์œ„ํ•ด WebGPU๋Š” ๋ช…๋ น์„ ์ž‘์„ฑํ•˜๋Š” ๋™์•ˆ ์…ฐ์ด๋”์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ๊ฐœ์ฒด์™€ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” GPUBindGroup ๊ฐœ์ฒด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๋ฉด ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํ•„์š”ํ•œ ์ค€๋น„ ์ž‘์—…์„ ๋ฏธ๋ฆฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๊ทธ๋ฆฌ๊ธฐ ํ˜ธ์ถœ ๊ฐ„์˜ ๋ฆฌ์†Œ์Šค ๋ฐ”์ธ๋”ฉ์„ ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค ๋ฐ”์ธ๋”ฉ์˜ ๋ ˆ์ด์•„์›ƒ์€ GPUBindGroupLayout ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฏธ๋ฆฌ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Firefox Nightly ๋นŒ๋“œ์—๋Š” ์ด์ œ WebGPU ์ง€์›์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

Firefox์˜ ๊ฒฝ์šฐ about:config์—์„œ WebGPU๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "dom.webgpu.enabled" ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค. CanvasContext ๋ Œ๋”๋ง์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ•ฉ์„ฑ๋„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Web ๋ Œ๋” (about:config์˜ "gfx.webrender.all"), Rust๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ํŽ˜์ด์ง€ ์ฝ˜ํ…์ธ  ๋ Œ๋”๋ง ์ž‘์—…์„ GPU์— ์•„์›ƒ์†Œ์‹ฑํ•ฉ๋‹ˆ๋‹ค. WebGPU ๊ตฌํ˜„์€ ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
wgpu, Rust๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ Linux, Android, Windows ๋ฐ macOS์˜ DX12, Vulkan ๋ฐ Metal API ์œ„์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(DX11 ๋ฐ OpenGL ES 3.0 ์ง€์›๋„ ๊ฐœ๋ฐœ ์ค‘์ž…๋‹ˆ๋‹ค). ๋™์‹œ์— Google์€ ๋‹ค์Œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ตฌํ˜„์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์นด๋‚˜๋ฆฌ์•„ ๊ฐ€์ง€ Chromium์€ "chrome://flags/#enable-unsafe-webgpu" ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™œ์„ฑํ™”๋˜์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€๋Š” macOS ๋ฐ Windows์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€