๊ทธ๋ž˜ํ”ฝ ํ‘œ์ค€ Vulkan 1.3 ๊ณต๊ฐœ

1.3๋…„ ๊ฐ„์˜ ์ž‘์—… ๋์— ๊ทธ๋ž˜ํ”ฝ ํ‘œ์ค€ ์ปจ์†Œ์‹œ์—„์ธ Khronos๋Š” GPU์˜ ๊ทธ๋ž˜ํ”ฝ ๋ฐ ์ปดํ“จํŒ… ๊ธฐ๋Šฅ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•œ API๋ฅผ ์ •์˜ํ•˜๋Š” Vulkan 1.3 ์‚ฌ์–‘์„ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์‚ฌ์–‘์—๋Š” 3.1๋…„์— ๊ฑธ์ณ ์ถ•์ ๋œ ์ˆ˜์ • ๋ฐ ํ™•์žฅ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Vulkan 1.2 ์‚ฌ์–‘์˜ ์š”๊ตฌ ์‚ฌํ•ญ์€ OpenGL ES XNUMX ํด๋ž˜์Šค ๊ทธ๋ž˜ํ”ฝ ์žฅ๋น„์šฉ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ์ด๋Š” Vulkan XNUMX๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  GPU์—์„œ ์ƒˆ๋กœ์šด ๊ทธ๋ž˜ํ”ฝ API์— ๋Œ€ํ•œ ์ง€์›์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. Vulkan SDK ๋„๊ตฌ๋Š” XNUMX์›” ์ค‘์ˆœ์— ์ถœ์‹œ๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์‚ฌ์–‘ ์™ธ์—๋„ "Vulkan Milestone" ์—๋””์…˜์˜ ์ผ๋ถ€๋กœ ์ง€์›๋  ์ค‘๊ธ‰ ๋ฐ ๊ณ ๊ธ‰ ๋ชจ๋ฐ”์ผ ๋ฐ ๋ฐ์Šคํฌํ†ฑ ์žฅ์น˜์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ํ™•์žฅ์„ ์ œ๊ณตํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

๋™์‹œ์— ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์™€ ์žฅ์น˜ ๋“œ๋ผ์ด๋ฒ„์˜ ์ƒˆ๋กœ์šด ์‚ฌ์–‘๊ณผ ์ถ”๊ฐ€ ํ™•์žฅ์— ๋Œ€ํ•œ ์ง€์›์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„ํš์ด ์ œ์‹œ๋ฉ๋‹ˆ๋‹ค. Intel, AMD, ARM ๋ฐ NVIDIA๋Š” Vulkan 1.3์„ ์ง€์›ํ•˜๋Š” ์ œํ’ˆ ์ถœ์‹œ๋ฅผ ์ค€๋น„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, AMD๋Š” ๊ณง AMD Radeon RX Vega ์‹œ๋ฆฌ์ฆˆ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์™€ AMD RDNA ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜์˜ ๋ชจ๋“  ์นด๋“œ์—์„œ Vulkan 1.3์„ ์ง€์›ํ•  ๊ฒƒ์ด๋ผ๊ณ  ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. NVIDIA๋Š” Linux ๋ฐ Windows์šฉ Vulkan 1.3์„ ์ง€์›ํ•˜๋Š” ๋“œ๋ผ์ด๋ฒ„ ๊ฒŒ์‹œ๋ฅผ ์ค€๋น„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ARM์€ Mali GPU์— Vulkan 1.3์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

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

  • ๋‹จ์ˆœํ™”๋œ ๋ Œ๋”๋ง ํŒจ์Šค(๋ Œ๋”๋ง ํŒจ์Šค ๊ฐ„์†Œํ™”, VK_KHR_dynamic_rendering)์— ๋Œ€ํ•œ ์ง€์›์ด ๊ตฌํ˜„๋˜์–ด ๋ Œ๋”๋ง ํŒจ์Šค ๋ฐ ํ”„๋ ˆ์ž„ ๋ฒ„ํผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๋ Œ๋”๋ง์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ž˜ํ”ฝ ํŒŒ์ดํ”„๋ผ์ธ ์ปดํŒŒ์ผ(ํŒŒ์ดํ”„๋ผ์ธ, ๋ฒกํ„ฐ ๊ทธ๋ž˜ํ”ฝ ๊ธฐ๋ณธ ์š”์†Œ ๋ฐ ํ…์Šค์ฒ˜๋ฅผ ํ”ฝ์…€ ํ‘œํ˜„์œผ๋กœ ๋ฐ”๊พธ๋Š” ์ž‘์—… ์ง‘ํ•ฉ)์˜ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ํ™•์žฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • VK_EXT_extended_dynamic_state, VK_EXT_extended_dynamic_state2 - ์ถ”๊ฐ€ ๋™์  ์ƒํƒœ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปดํŒŒ์ผ๋˜๊ณ  ์—ฐ๊ฒฐ๋œ ์ƒํƒœ ๊ฐœ์ฒด์˜ ์ˆ˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
    • VK_EXT_pipeline_creation_cache_control - ํŒŒ์ดํ”„๋ผ์ธ์ด ์ปดํŒŒ์ผ๋˜๋Š” ์‹œ๊ธฐ์™€ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณ ๊ธ‰ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    • VK_EXT_pipeline_creation_feedback - ํ”„๋กœํŒŒ์ผ๋ง ๋ฐ ๋””๋ฒ„๊น…์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋œ ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์ด ์„ ํƒ ์‚ฌํ•ญ์—์„œ ํ•„์ˆ˜ ๊ธฐ๋Šฅ์œผ๋กœ ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋™์‹œ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ  ๋ฐ์ดํ„ฐ ๋ฐ ๋™๊ธฐํ™” ์ž‘์—…์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜๋Š” ๋ฒ„ํผ ์ฐธ์กฐ(VK_KHR_buffer_device_address) ๋ฐ Vulkan ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์˜ ๊ตฌํ˜„์€ ์ด์ œ ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๊ณต๊ธ‰์—…์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ํ•˜์œ„ ๊ทธ๋ฃน ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•œ ํฌ๊ธฐ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ธ๋ถ„ํ™”๋œ ํ•˜์œ„ ๊ทธ๋ฃน ์ œ์–ด(VK_EXT_subgroup_size_control)๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • ๋‚ด์  ์ž‘์—…์˜ ํ•˜๋“œ์›จ์–ด ๊ฐ€์† ๋•๋ถ„์— ๊ธฐ๊ณ„ ํ•™์Šต ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” VK_KHR_shader_integer_dot_product ํ™•์žฅ์ด ์ œ๊ณต๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด 23๊ฐœ์˜ ์ƒˆ๋กœ์šด ํ™•์žฅํŒฉ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค:
    • VK_KHR_copy_commands2
    • VK_KHR_dynamic_rendering
    • VK_KHR_format_feature_flags2
    • VK_KHR_maintenance4
    • VK_KHR_shader_integer_dot_product
    • VK_KHR_shader_non_semantic_info
    • VK_KHR_shader_terminate_invocation
    • VK_KHR_๋™๊ธฐํ™”2
    • VK_KHR_zero_initialize_workgroup_memory
    • VK_EXT_4444_formats
    • VK_EXT_extended_dynamic_state
    • VK_EXT_extended_dynamic_state2
    • VK_EXT_image_๊ฒฌ๊ณ ํ•จ
    • VK_EXT_inline_uniform_block
    • VK_EXT_pipeline_creation_cache_control
    • VK_EXT_pipeline_creation_feedback
    • VK_EXT_private_data
    • VK_EXT_shader_demote_to_helper_invocation
    • VK_EXT_subgroup_size_control
    • VK_EXT_texel_buffer_alignment
    • VK_EXT_texture_compression_astc_hdr
    • VK_EXT_tooling_info
    • VK_EXT_ycbcr_2plane_444_formats
  • ์ƒˆ๋กœ์šด ๊ฐœ์ฒด ์œ ํ˜• VkPrivateDataSlot์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. 37๊ฐœ์˜ ์ƒˆ๋กœ์šด ๋ช…๋ น๊ณผ 60๊ฐœ ์ด์ƒ์˜ ๊ตฌ์กฐ๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • SPIR-V 1.6 ์‚ฌ์–‘์€ ๋ชจ๋“  ํ”Œ๋žซํผ์— ๋ณดํŽธ์ ์ด๊ณ  ๊ทธ๋ž˜ํ”ฝ ๋ฐ ๋ณ‘๋ ฌ ์ปดํ“จํŒ… ๋ชจ๋‘์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ค‘๊ฐ„ ์…ฐ์ด๋” ํ‘œํ˜„์„ ์ •์˜ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. SPIR-V์—๋Š” ๋ณ„๋„์˜ ์…ฐ์ด๋” ์ปดํŒŒ์ผ ๋‹จ๊ณ„๋ฅผ ์ค‘๊ฐ„ ํ‘œํ˜„์œผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ์ž‘์—…์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋‹ค์–‘ํ•œ ๊ณ ๊ธ‰ ์–ธ์–ด์— ๋Œ€ํ•œ ํ”„๋ŸฐํŠธ์—”๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๊ณ ๊ธ‰ ๊ตฌํ˜„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‹จ์ผ ์ค‘๊ฐ„ ์ฝ”๋“œ๊ฐ€ ๋ณ„๋„๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ๋‚ด์žฅ๋œ ์…ฐ์ด๋” ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ OpenGL, Vulkan ๋ฐ OpenCL ๋“œ๋ผ์ด๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜ธํ™˜์„ฑ ํ”„๋กœํŒŒ์ผ์˜ ๊ฐœ๋…์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Google์€ Android ํ”Œ๋žซํผ์šฉ ๊ธฐ๋ณธ ํ”„๋กœํ•„์„ ์ตœ์ดˆ๋กœ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Vulkan 1.0 ์‚ฌ์–‘ ์ด์ƒ์˜ ๊ธฐ๊ธฐ์—์„œ ๊ณ ๊ธ‰ Vulkan ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์› ์ˆ˜์ค€์„ ๋” ์‰ฝ๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์žฅ์น˜์—์„œ๋Š” OTA ์—…๋ฐ์ดํŠธ๋ฅผ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ ๋„ ํ”„๋กœํ•„ ์ง€์›์ด ์ œ๊ณต๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Vulkan API๋Š” ๋“œ๋ผ์ด๋ฒ„์˜ ๊ทผ๋ณธ์ ์ธ ๋‹จ์ˆœํ™”, GPU ๋ช…๋ น ์ƒ์„ฑ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ธก์œผ๋กœ ์ „์†ก, ๋””๋ฒ„๊น… ๋ ˆ์ด์–ด ์—ฐ๊ฒฐ ๊ธฐ๋Šฅ, ๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ API ํ†ตํ•ฉ ๋ฐ ์‚ฌ์ „ ์ปดํŒŒ์ผ๋œ API ์‚ฌ์šฉ์œผ๋กœ ์œ ๋ช…ํ•ฉ๋‹ˆ๋‹ค. GPU ์ธก์—์„œ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ์˜ ์ค‘๊ฐ„ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ๋†’์€ ์„ฑ๋Šฅ๊ณผ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด Vulkan์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— GPU ์ž‘์—…์„ ์ง์ ‘ ์ œ์–ดํ•˜๊ณ  GPU ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์›์„ ์ œ๊ณตํ•˜์—ฌ ๋“œ๋ผ์ด๋ฒ„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋“œ๋ผ์ด๋ฒ„ ์ธก ๊ธฐ๋Šฅ์„ ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋“œ๋ผ์ด๋ฒ„ ์ธก OpenGL์— ๊ตฌํ˜„๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ์ž‘์—…์€ Vulkan์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ค€์œผ๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Vulkan์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ”Œ๋žซํผ์„ ํฌ๊ด„ํ•˜๊ณ  ๋ฐ์Šคํฌํ†ฑ, ๋ชจ๋ฐ”์ผ ๋ฐ ์›น์„ ์œ„ํ•œ ๋‹จ์ผ API๋ฅผ ์ œ๊ณตํ•˜๋ฏ€๋กœ ํ•˜๋‚˜์˜ ๊ณตํ†ต API๋ฅผ ์—ฌ๋Ÿฌ GPU ๋ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  GPU์—์„œ ์ž‘๋™ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์˜๋ฏธํ•˜๋Š” Vulkan์˜ ๋‹ค์ธต ์•„ํ‚คํ…์ฒ˜ ๋•๋ถ„์— OEM์€ ๊ฐœ๋ฐœ ์ค‘์— ์ฝ”๋“œ ๊ฒ€ํ† , ๋””๋ฒ„๊น… ๋ฐ ํ”„๋กœํŒŒ์ผ๋ง์„ ์œ„ํ•ด ์—…๊ณ„ ํ‘œ์ค€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์…ฐ์ด๋” ์ƒ์„ฑ์„ ์œ„ํ•ด LLVM์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  OpenCL๊ณผ ํ•ต์‹ฌ ๊ธฐ์ˆ ์„ ๊ณต์œ ํ•˜๋Š” ์ƒˆ๋กœ์šด ํœด๋Œ€์šฉ ์ค‘๊ฐ„ ํ‘œํ˜„์ธ SPIR-V๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์žฅ์น˜์™€ ํ™”๋ฉด์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด Vulkan์€ OpenGL ES์˜ EGL๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” WSI(Window System Integration) ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. WSI ์ง€์›์€ Wayland์—์„œ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Vulkan์„ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ˆ˜์ •๋˜์ง€ ์•Š์€ Wayland ์„œ๋ฒ„ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. WSI๋ฅผ ํ†ตํ•œ ์ž‘์—… ๊ธฐ๋Šฅ์€ Android, X11(DRI3 ํฌํ•จ), Windows, Tizen, macOS ๋ฐ iOS์—๋„ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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