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

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

Mesa 21.2์—๋Š” 4.6, iris(Intel), radeonsi(AMD), zink ๋ฐ llvmpipe ๋“œ๋ผ์ด๋ฒ„์šฉ OpenGL 965์— ๋Œ€ํ•œ ์ „์ฒด ์ง€์›์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. OpenGL 4.5 ์ง€์›์€ AMD(r600) ๋ฐ NVIDIA(nvc0) GPU์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ OpenGL 4.3์€ virgl(QEMU/KVM์šฉ Virgil3D ๊ฐ€์ƒ GPU)์— ๋Œ€ํ•ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. Vulkan 1.2 ์ง€์›์€ Intel ๋ฐ AMD ์นด๋“œ๋Š” ๋ฌผ๋ก  ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋ชจ๋“œ(vn)์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Vulkan 1.1 ์ง€์›์€ Qualcomm GPU ๋ฐ lavapipe ์†Œํ”„ํŠธ์›จ์–ด ๋ž˜์Šคํ„ฐ๋ผ์ด์ €์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Vulkan 1.0์€ Broadcom VideoCore VI GPU(Raspberry Pi 4)์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .

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

  • Asahi OpenGL ๋“œ๋ผ์ด๋ฒ„๋Š” Apple M1 ์นฉ์— ํฌํ•จ๋œ GPU์— ๋Œ€ํ•œ ์ดˆ๊ธฐ ์ง€์›์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” Gallium ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  OpenGL 2.1 ๋ฐ OpenGL ES 2.0์˜ ๊ธฐ๋Šฅ ๋Œ€๋ถ€๋ถ„์„ ์ง€์›ํ•˜์ง€๋งŒ ์•„์ง ๋Œ€๋ถ€๋ถ„์˜ ๊ฒŒ์ž„์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„ ์ฝ”๋“œ๋Š” Gallium ์ฐธ์กฐ noop ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ์ผ๋ถ€ ์ฝ”๋“œ๋Š” ARM Mali GPU์šฉ์œผ๋กœ ๊ฐœ๋ฐœ ์ค‘์ธ Panfrost ๋“œ๋ผ์ด๋ฒ„์—์„œ ์ด์‹๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Crocus OpenGL ๋“œ๋ผ์ด๋ฒ„์—๋Š” Iris ๋“œ๋ผ์ด๋ฒ„์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์ด์ „ Intel GPU(Gen4-Gen7 ๋งˆ์ดํฌ๋กœ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜)์— ๋Œ€ํ•œ ์ง€์›์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. i965 ๋“œ๋ผ์ด๋ฒ„์™€ ๋‹ฌ๋ฆฌ ์ƒˆ ๋“œ๋ผ์ด๋ฒ„๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์ž‘์—…์„ Linux ์ปค๋„์˜ DRI ๋“œ๋ผ์ด๋ฒ„์— ์•„์›ƒ์†Œ์‹ฑํ•˜๊ณ  ์ถœ๋ ฅ ๊ฐœ์ฒด์˜ ์žฌ์‚ฌ์šฉ ์บ์‹œ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ธฐ์„ฑ ์ƒํƒœ ์ถ”์ ๊ธฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” Gallium3D ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
  • PanVk ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ํฌํ•จ๋˜์–ด ARM Mali Midgard ๋ฐ Bifrost GPU์šฉ Vulkan ๊ทธ๋ž˜ํ”ฝ API๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. PanVk๋Š” Collabora ์ง์›์ด ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ OpenGL์„ ์ง€์›ํ•˜๋Š” Panfrost ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ์˜ ์—ฐ์†์œผ๋กœ ์ž๋ฆฌ์žก๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • Midgard GPU(Mali T760 ์ด์ƒ) ๋ฐ Bifrost GPU(Mali G31, G52, G76)์šฉ Panfrost ๋“œ๋ผ์ด๋ฒ„๋Š” OpenGL ES 3.1์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ–ฅํ›„ ๊ณ„ํš์—๋Š” Bifrost ์นฉ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ์ž‘์—…๊ณผ Valhall ์•„ํ‚คํ…์ฒ˜(Mali G77 ์ด์ƒ) ๊ธฐ๋ฐ˜ GPU ์ง€์› ๊ตฌํ˜„์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • 32๋น„ํŠธ x86 ๋นŒ๋“œ๋Š” ์ˆ˜ํ•™ ๊ณ„์‚ฐ์— x87 ์ง€์นจ ๋Œ€์‹  sse2 ์ง€์นจ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • NVIDIA GT50x GPU(GeForce GT 21ร—2)์šฉ Nouveau nv0 ๋“œ๋ผ์ด๋ฒ„๋Š” OpenGL ES 3.1์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Qualcomm Adreno GPU์šฉ์œผ๋กœ ๊ฐœ๋ฐœ๋œ Vulkan ๋“œ๋ผ์ด๋ฒ„ TURNIP ๋ฐ OpenGL ๋“œ๋ผ์ด๋ฒ„ Freedreno๋Š” Adreno a6xx gen4 GPU(a660, a635)๋ฅผ ์ดˆ๊ธฐ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • RADV(AMD) Vulkan ๋“œ๋ผ์ด๋ฒ„์—๋Š” NGG(Next-Gen Geometry) ์…ฐ์ด๋” ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ์ปฌ๋ง์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. MSVC ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Windows ํ”Œ๋žซํผ์—์„œ RADV ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณง ์ถœ์‹œ๋  Intel Xe-HPG(DG2) ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ANV Vulkan ๋“œ๋ผ์ด๋ฒ„(Intel) ๋ฐ Iris OpenGL ๋“œ๋ผ์ด๋ฒ„์—์„œ ์ค€๋น„ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๊ด‘์„  ์ถ”์ ๊ณผ ๊ด€๋ จ๋œ ์ดˆ๊ธฐ ๊ธฐ๋Šฅ ๋ฐ ๊ด‘์„  ์ถ”์  ์…ฐ์ด๋” ์ง€์›์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
  • Vulkan API(llvmpipe์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ Vulkan์˜ ๊ฒฝ์šฐ Vulkan API ํ˜ธ์ถœ์„ Gallium API๋กœ ๋ณ€ํ™˜)์šฉ ์†Œํ”„ํŠธ์›จ์–ด ๋ž˜์Šคํ„ฐ๋ผ์ด์ €๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” lavapipe ๋“œ๋ผ์ด๋ฒ„๋Š” "wideLines" ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค(๋„ˆ๋น„๊ฐ€ 1.0์„ ์ดˆ๊ณผํ•˜๋Š” ์„ ์— ๋Œ€ํ•œ ์ง€์› ์ œ๊ณต).
  • ๋Œ€์ฒด GBM(์ผ๋ฐ˜ ๋ฒ„ํผ ๊ด€๋ฆฌ์ž) ๋ฐฑ์—”๋“œ์˜ ๋™์  ๊ฒ€์ƒ‰ ๋ฐ ๋กœ๋”ฉ์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์€ NVIDIA ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ Wayland ์ง€์›์„ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
  • Zink ๋“œ๋ผ์ด๋ฒ„(์‹œ์Šคํ…œ์— Vulkan API๋งŒ ์ง€์›ํ•˜๋„๋ก ์ œํ•œ๋œ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•˜๋“œ์›จ์–ด ๊ฐ€์† OpenGL์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” Vulkan ์œ„์— OpenGL API ๊ตฌํ˜„)๋Š” OpenGL ํ™•์žฅ GL_ARB_sample_locations, GL_ARB_sparse_buffer, GL_ARB_shader_group_vote, GL_ARB_texture_filter_minmax ๋ฐ GL_ARB_shader_clock์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. DRM ํ˜•์‹ ์ˆ˜์ •์ž๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค(Direct Rendering Manager, VK_EXT_image_drm_format_modifier ํ™•์žฅ ํ™œ์„ฑํ™”).
  • Vulkan ๋“œ๋ผ์ด๋ฒ„ RADV(AMD), ANV(Intel) ๋ฐ lavapipe์— ํ™•์žฅ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • VK_EXT_provoking_vertex(RADV);
    • VK_EXT_extended_dynamic_state2(RADV);
    • VK_EXT_global_priority_query(RADV);
    • VK_EXT_physical_device_drm(RADV);
    • VK_KHR_shader_subgroup_uniform_control_flow(RADV, ANV);
    • VK_EXT_color_write_enable(RADV);
    • VK_EXT_acquire_drm_display(RADV, ANV);
    • VK_EXT_vertex_input_dynamic_state(์šฉ์•”ํŒŒ์ดํ”„);
    • VK_EXT_line_rasterization(์šฉ์•”ํŒŒ์ดํ”„);
    • VK_EXT_multi_draw(ANV, ์šฉ์•”ํŒŒ์ดํ”„, RADV);
    • VK_KHR_separate_length_stencil_layouts(์šฉ์•”ํŒŒ์ดํ”„);
    • VK_EXT_separate_stencil_usage(์šฉ์•”ํŒŒ์ดํ”„);
    • VK_EXT_extended_dynamic_state2(์šฉ์•”ํŒŒ์ดํ”„).

์ถœ์ฒ˜ : opennet.ru

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