Collabora๋Š” DirectX ์œ„์—์„œ OpenCL ๋ฐ OpenGL์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

์ฝœ๋ผ๋ณด ํšŒ์‚ฌ ์ œ์‹œ DirectX 1.2(D3.3D12)๋ฅผ ์ง€์›ํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„ ์œ„์— OpenCL 3 ๋ฐ OpenGL 12 API ์ž‘์—…์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ ˆ์ด์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” Mesa์šฉ ์ƒˆ๋กœ์šด Gallium ๋“œ๋ผ์ด๋ฒ„์ž…๋‹ˆ๋‹ค. ์•”ํ˜ธ ์ถœํŒ ๋œ MIT ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ.

์ œ์•ˆ๋œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด OpenCL ๋ฐ OpenGL์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์žฅ์น˜์—์„œ Mesa๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ OpenGL/OpenCL ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ D3D12 ์œ„์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์ž‘์ ์œผ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. GPU ์ œ์กฐ์—…์ฒด์˜ ๊ฒฝ์šฐ D3D12๋ฅผ ์ง€์›ํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•˜์œ„ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด OpenCL ๋ฐ OpenGL์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰๊ฐ์ ์ธ ๊ณ„ํš ์ค‘์—๋Š” OpenCL 1.2 ๋ฐ OpenGL 3.3์˜ ํ˜ธํ™˜์„ฑ ํ…Œ์ŠคํŠธ๋ฅผ ์™„์ „ํžˆ ํ†ต๊ณผํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ํ™•์ธํ•˜๊ณ , Mesa์˜ ์ฃผ์š” ๊ตฌ์„ฑ์— ๊ฐœ๋ฐœ ๋‚ด์šฉ์„ ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์€ Microsoft ์—”์ง€๋‹ˆ์–ด์™€ ๊ณต๋™์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์—ด๋ฆฌ๋‹ค ๋„๊ตฌ D3D11On12 D3D11์—์„œ D3D12 ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๊ฒŒ์ž„ ์ „์†ก์šฉ D3D12TranslationLayer, ์ด๋Š” D3D12 ์œ„์— ํ‘œ์ค€ ๊ทธ๋ž˜ํ”ฝ ๊ธฐ๋ณธ ์š”์†Œ๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„์—๋Š” Gallium ๋“œ๋ผ์ด๋ฒ„, OpenCL ์ปดํŒŒ์ผ๋Ÿฌ, OpenCL ๋Ÿฐํƒ€์ž„ ๋ฐ NIR-DXIL ์…ฐ์ด๋” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Mesa์—์„œ ์‚ฌ์šฉ๋˜๋Š” NIR ์…ฐ์ด๋”์˜ ์ค‘๊ฐ„ ํ‘œํ˜„์„ DirectX 12์—์„œ ์ง€์›๋˜๊ณ  ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” DXIL(DirectX Intermediate Language) ๋ฐ”์ด๋„ˆ๋ฆฌ ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. LLVM 3.7 ๋น„ํŠธ์ฝ”๋“œ(DirectX Shader ์ปดํŒŒ์ผ๋Ÿฌ Microsoft์˜ ๊ธฐ๋ณธ์ ์œผ๋กœ LLVM 3.7์˜ ํ™•์žฅ ํฌํฌ์ž…๋‹ˆ๋‹ค. OpenCL ์ปดํŒŒ์ผ๋Ÿฌ๋Š” LLVM ํ”„๋กœ์ ํŠธ ๋ฐ ๋„๊ตฌ ๊ฐœ๋ฐœ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. SPIRV-LLVM.

OpenCL ํ™•์žฅ์ด ํฌํ•จ๋œ ์†Œ์Šค๋Š” clang์„ ์‚ฌ์šฉํ•˜์—ฌ LLVM IR(์ค‘๊ฐ„ ์˜์‚ฌ ์ฝ”๋“œ)๋กœ ์ปดํŒŒ์ผ๋œ ๋‹ค์Œ SPIR-V ํ˜•์‹์˜ OpenCL ์ปค๋„์˜ ์ค‘๊ฐ„ ํ‘œํ˜„์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. SPIR-V ํ‘œํ˜„์˜ ์ฝ”์–ด๋Š” Mesa๋กœ ์ „๋‹ฌ๋˜์–ด NIR ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜๋˜๊ณ  ์ตœ์ ํ™”๋˜์–ด NIR-DXIL๋กœ ์ „๋‹ฌ๋˜์–ด DirectX 12 ๊ธฐ๋ฐ˜ ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•˜๋Š” GPU์—์„œ ์‹คํ–‰ํ•˜๊ธฐ์— ์ ํ•ฉํ•œ DXIL ํ˜•์‹์˜ ์ปดํ“จํŒ… ์…ฐ์ด๋”๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
Mesa์—์„œ ์‚ฌ์šฉ๋˜๋Š” OpenCL ๊ตฌํ˜„์ธ Clover ๋Œ€์‹  DirectX 12 API๋กœ ๋” ์ง์ ‘์ ์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด OpenCL ๋Ÿฐํƒ€์ž„์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Collabora๋Š” DirectX ์œ„์—์„œ OpenCL ๋ฐ OpenGL์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

OpenCL ๋ฐ OpenGL ๋“œ๋ผ์ด๋ฒ„๋Š” Mesa์—์„œ ์ œ๊ณต๋˜๋Š” Gallium ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ค€๋น„๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด OpenGL ๊ด€๋ จ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š๊ณ ๋„ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ณธ์งˆ์ ์œผ๋กœ OpenGL ํ˜ธ์ถœ์„ ์ตœ์‹  GPU๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝ ๊ธฐ๋ณธ ์š”์†Œ์— ๋” ๊ฐ€๊น๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Gallium ๋“œ๋ผ์ด๋ฒ„๋Š” OpenGL ๋ช…๋ น์„ ํ—ˆ์šฉํ•˜๊ณ  NIR-DXIL ๋ณ€ํ™˜๊ธฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ
D3D12 ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ GPU์—์„œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น ๋ฒ„ํผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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