OpenGL ๋ฐ Vulkan์˜ ๋ฌด๋ฃŒ ๊ตฌํ˜„์ธ Mesa 22.3 ์ถœ์‹œ

OpenGL ๋ฐ Vulkan API์˜ ๋ฌด๋ฃŒ ๊ตฌํ˜„์ธ Mesa 22.3.0์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Mesa 22.3.0 ๋ธŒ๋žœ์น˜์˜ ์ฒซ ๋ฒˆ์งธ ๋ฆด๋ฆฌ์Šค๋Š” ์‹คํ—˜์  ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ตœ์ข… ์•ˆ์ •ํ™”๋˜๋ฉด ์•ˆ์ •์ ์ธ ๋ฒ„์ „ 22.3.1์ด ๋ฆด๋ฆฌ์Šค๋ฉ๋‹ˆ๋‹ค.

Mesa 22.3์€ Intel GPU์šฉ anv, AMD GPU์šฉ radv, Qualcomm GPU์šฉ tu ๋ฐ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋ชจ๋“œ(vn)์—์„œ Vulkan 1.3 ๊ทธ๋ž˜ํ”ฝ API์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Vulkan 1.1 ์ง€์›์€ lavapipe(lvp) ์†Œํ”„ํŠธ์›จ์–ด ๋ž˜์Šคํ„ฐ๋ผ์ด์ €์—์„œ ๊ตฌํ˜„๋˜๊ณ  Vulkan 1.0์€ v3dv ๋“œ๋ผ์ด๋ฒ„(Raspberry Pi 4์˜ Broadcom VideoCore VI GPU)์—์„œ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

Mesa๋Š” ๋˜ํ•œ 4.6, iris(Intel), radeonsi(AMD), zink ๋ฐ llvmpipe ๋“œ๋ผ์ด๋ฒ„์— ๋Œ€ํ•œ ์™„์ „ํ•œ OpenGL 965 ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. OpenGL 4.5 ์ง€์›์€ AMD(r600), NVIDIA(nvc0) ๋ฐ Qualcomm Adreno(freedreno) GPU, virgl(QEMU/KVM์šฉ virgil4.3D ๊ฐ€์ƒ GPU)์šฉ OpenGL 3, d4.2d3 ๋“œ๋ผ์ด๋ฒ„(OpenGL ๊ตฌ์„ฑ ๋ ˆ์ด์–ด)์šฉ OpenGL 12์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DirectX 12 ์œ„์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค).

์ฃผ์š” ํ˜์‹ :

  • Qualcomm Adreno GPU์šฉ freedreno ๋“œ๋ผ์ด๋ฒ„๋Š” OpenGL 4.5 ๊ทธ๋ž˜ํ”ฝ API์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•˜๊ณ  ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋“œ๋ผ์ด๋ฒ„(vn)๋Š” Vulkan 1.3 API๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Panfrost ๋“œ๋ผ์ด๋ฒ„๋Š” ๋””์Šคํฌ์— ์…ฐ์ด๋”๋ฅผ ์บ์‹œํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  Mali T620 GPU์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” OpenGL 3.1 ์‚ฌ์–‘ ๋ฐ OpenGL ES 3.1๊ณผ ํ˜ธํ™˜๋ฉ๋‹ˆ๋‹ค.
  • RADV(AMD) Vulkan ๋“œ๋ผ์ด๋ฒ„์— GFX11/RDNA3 GPU(Radeon RX 7000 ์‹œ๋ฆฌ์ฆˆ)์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ด‘์„  ์ถ”์  ์ฝ”๋“œ๊ฐ€ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. R8G8B8, B8G8R8 ๋ฐ R16G16B16 ํ”ฝ์…€ ํ˜•์‹๊ณผ 64๋น„ํŠธ ๊ผญ์ง“์  ๋ฒ„ํผ ํ˜•์‹์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. VK_EXT_extended_dynamic_state2 ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์„ ๊ฒฐ์ •ํ•˜๋Š” ExtendedDynamicState2PatchControlPoints ํ”Œ๋ž˜๊ทธ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Radeon Raytracing ๋ถ„์„๊ธฐ๊ฐ€ ํ†ตํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํŒจํ‚ค์ง€์—๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ณ‘๋ ฌ ์ปดํ“จํŒ…์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ C ์–ธ์–ด์˜ ํ™•์žฅ๊ณผ API๋ฅผ ์ •์˜ํ•˜๋Š” OpenCL 3.0 ์‚ฌ์–‘์ด ๊ตฌํ˜„๋œ Rusticle ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” Rust๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ Mesa์—์„œ ์ œ๊ณต๋˜๋Š” Gallium ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ๋˜์—ˆ์œผ๋ฉฐ Mesa์— ์žˆ๋Š” Clover OpenCL ํ”„๋ŸฐํŠธ์—”๋“œ์™€ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Clover๋Š” ์˜ค๋žซ๋™์•ˆ ๋ฒ„๋ ค์กŒ๊ณ  Rustel์€ ํ–ฅํ›„ ๋Œ€์ฒดํ’ˆ์œผ๋กœ ์ž๋ฆฌ ์žก์•˜์Šต๋‹ˆ๋‹ค. Rust ๋ฐ Rusticl์— ๋Œ€ํ•œ ์ง€์›์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ๋ช…์‹œ์  ์˜ต์…˜ "-D gallium-rusticl=true -Dllvm=enabled -Drust_std=2021"์„ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋นŒ๋“œํ•  ๋•Œ ์ถ”๊ฐ€ ์ข…์†์„ฑ์œผ๋กœ Rustc ์ปดํŒŒ์ผ๋Ÿฌ, Bindgen ๋ฐ”์ธ๋”ฉ ์ƒ์„ฑ๊ธฐ, LLVM, SPIRV-Tools ๋ฐ SPIRV-LLVM-Translator๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
  • RadeonSI ๋“œ๋ผ์ด๋ฒ„์—๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ OpenGL์„ ํ†ตํ•œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๋ Œ๋”๋ง ์ง€์›์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋‹จ์ผ ํŒŒ์ผ์— ์ €์žฅํ•˜๋Š” ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ์…ฐ์ด๋” ์บ์‹œ์ธ Mesa-DB๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • OpenGL ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • llvmpipe์— ๋Œ€ํ•œ GL_ARB_shader_clock.
    • zink์˜ ๊ฒฝ์šฐ GL_KHR_blend_equation_advanced_coherent.
    • llvmpipe์— ๋Œ€ํ•œ GL_NV_shader_atomic_float.
  • Vulkan ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ์šฉ์•”ํŒŒ์ดํ”„์— ๋Œ€ํ•œ VK_KHR_shader_clock.
    • RADV, ์šฉ์•”ํŒŒ์ดํ”„์šฉ VK_EXT_attachment_feedback_loop_layout.
    • RADV์— ๋Œ€ํ•œ VK_KHR_global_priority.
    • RADV์˜ ๊ฒฝ์šฐ VK_EXT_load_store_op_none.
    • RADV์— ๋Œ€ํ•œ VK_EXT_mutable_descriptor_type.
    • LVP์— ๋Œ€ํ•œ VK_EXT_shader_atomic_float.
    • LVP์˜ ๊ฒฝ์šฐ VK_EXT_shader_atomic_float2
    • v3dv์— ๋Œ€ํ•œ VK_EXT_image_robustness.
    • ์šฉ์•”ํŒŒ์ดํ”„, RADV ๋ฐ ANV์— ๋Œ€ํ•œ VK_EXT_extended_dynamic_state3.
    • RADV์šฉ VK_EXT_extended_dynamic_state2.
    • v3dv์— ๋Œ€ํ•œ VK_EXT_pipeline_robustness.
    • ANV์šฉ VK_EXT_mesh_shader.

์ถœ์ฒ˜ : opennet.ru

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