Link

Vulkan ์ดˆ๊ธฐํ™”

OpenGL๊ณผ๋Š” ๋‹ฌ๋ฆฌ, Vulkan์€ ๊ทธ๋ž˜ํ”ฝ ๋ช…๋ น์„ ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹  ๋งค์šฐ ๊ธด ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ด ์ดˆ๊ธฐํ™” ๊ณผ์ •์„ ๋‹จ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด VkBootstrap ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋งŽ์€ ์–‘์˜ ์ž‘์—…์„ ๊ฐ„์†Œํ™”ํ•ด์ค๋‹ˆ๋‹ค.

Vulkan์€ ๋งค์šฐ โ€œ์ง์ ‘์ ์ธโ€ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋งค์šฐ ๋ช…์‹œ์ ์ธ API์ž…๋‹ˆ๋‹ค. ํ™•์žฅ์„ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜, ์‚ฌ์šฉํ•  GPU(๋“ค)์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜, Vulkan ๋ช…๋ น์— ์‚ฌ์šฉํ•  ์ดˆ๊ธฐ VkInstance์™€ VkDevice ๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Vulkan์€ OpenGL๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ „์—ญ ์ƒํƒœ(global state)๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  API ํ˜ธ์ถœ์—์„œ VkDevice์™€ VkInstance๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” vulkan-1.dll์„ ์ง์ ‘ ๋งํฌํ•˜์ง€๋งŒ ์ด๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ โ€œ์ˆ˜๋™์œผ๋กœโ€ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. vulkan-1.dll์„ ๋งํ‚นํ•˜๋Š” ๊ฒƒ์€ ํ™•์žฅ ํ•จ์ˆ˜๋„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฏ€๋กœ, ๋ณ„๋„๋กœ ๋ถˆ๋Ÿฌ์™€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ํ™•์žฅ ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋„๋ก Volk ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ํŠœํ† ๋ฆฌ์–ผ ์ฑ•ํ„ฐ์—์„œ๋Š” ์ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ ์ดํ›„ ํ™œ์šฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

VkInstance

๋ชจ๋“  ๊ฒƒ์˜ ํ•ต์‹ฌ์ธ VkInstance์ž…๋‹ˆ๋‹ค. ์ด๋Š” Vulkan API ๋ฌธ๋งฅ(Context)์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. VkInstance๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, ์›ํ•œ๋‹ค๋ฉด ๊ฒ€์ฆ ๋ ˆ์ด์–ด๋ฅผ ํ™œ์„ฑํ™” ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, VK_KHR_surface์™€ ๊ฐ™์€ ํ•„์š”ํ•œ ํ™•์žฅ๋„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, Vulkan ๋“œ๋ผ์ด๋ฒ„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ์•ผ ํ•  ๋•Œ ์‚ฌ์šฉํ•  ๋กœ๊ฑฐ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. VkInstance๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ฒ€์ฆ ๋ ˆ์ด์–ด์™€ ํ™•์žฅ์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ „์ฒด ์‹คํ–‰ ๋™์•ˆ ๋‹จ ํ•˜๋‚˜์˜ VkInstance๋งŒ ์ƒ์„ฑํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ „์—ญ Vulkan ๋ฌธ๋งฅ ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

VkPhysicalDevice

VkInstance๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ GPU๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Vulkan์—์„œ๋Š” ์‹œ์Šคํ…œ์— ์กด์žฌํ•˜๋Š” GPU์™€ ํ•ด๋‹น GPU ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์ •๋ณด๋“ค์€ GPU๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” VkPhysicalDevice๋ฅผ ํ†ตํ•ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฒŒ์ด๋ฐ ์ „์šฉ GPU๊ฐ€ ์žฅ์ฐฉ๋œ ๊ฒŒ์ด๋ฐ ์ „์šฉ PC์˜ ๊ฒฝ์šฐ ๋‹จ ํ•˜๋‚˜์˜ VkPhysicalDevice๋งŒ์„ ์กด์žฌํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ GPU๋“ค ์ค‘ ๊ณ ๋ฅผ ํ•„์š” ์—†์ด ํ•˜๋‚˜๋งŒ ์„ ํƒํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋” ํฅ๋ฏธ๋กœ์šด ์ƒํ™ฉ์€ ๋žฉํƒ‘์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋žฉํƒ‘์€ ๋ณดํ†ต 2๊ฐœ์˜ GPU๋ฅผ ๊ฐ–๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์ €์ „๋ ฅ์˜ CPU ๋‚ด์žฅ GPU์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๊ณ ์„ฑ๋Šฅ์˜ ์ „์šฉ GPU์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ Œ๋”๋ง์— ์‚ฌ์šฉํ•  GPU๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋ฉฐ, ์ตœ์ ์˜ ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋ฐฐํ„ฐ๋ฆฌ ์ˆ˜๋ช…์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ €์ „๋ ฅ GPU๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

GPU๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„, VkPhysicalDevice๋ฅผ ํ†ตํ•ด GPU์˜ ๊ธฐ๋Šฅ, ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ, ๊ทธ๋ฆฌ๊ณ  ์ง€์›ํ•˜๋Š” ํ™•์žฅ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ VRAM์˜ ํฌ๊ธฐ์™€ GPU๊ฐ€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋Š” ์ง€๋ฅผ ์ •ํ™•ํžˆ ์•Œ์•„์•ผ ํ•˜๋Š” ๊ณ ๊ธ‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

VkDevice

VkPhysicalDevice๋กœ VkDevice๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. VkDevice๋Š” GPU ํ•˜๋“œ์›จ์–ด์˜ ์‹ค์ œ ๋“œ๋ผ์ด๋ฒ„์ด๋ฉฐ, GPU์—๊ฒŒ ์†Œํ†ตํ•˜๋Š” ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ๊ธฐ๋Šฅ๊ณผ ์ดˆ๊ธฐํ™”๋ฅผ ์ œ์™ธํ•œ ๋Œ€๋ถ€๋ถ„์˜ Vulkan ๋ช…๋ น์€ VkDevice๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์žฅ์น˜(device)๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” ํ™œ์„ฑํ™”ํ•  ํ™•์žฅ ๋ชฉ๋ก์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ™•์žฅ์€ ํ™œ์„ฑํ™”ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์—์„œ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์—”์ง„์ด ์—ฌ๋Ÿฌ VkDevice๋ฅผ ๋™์‹œ์— ๋‹ค๋ฃฐ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์—ฌ๋Ÿฌ GPU๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋‹ค๋ฃจ์ง€ ์•Š์ง€๋งŒ, ์—ฌ๋Ÿฌ GPU๊ฐ„ ์ปดํ“จํŠธ ์…ฐ์ด๋”๋ฅผ ์ž‘๋™ํ•  ๋•Œ ์•Œ์•„๋‘๋ฉด ์œ ์šฉํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.

์Šค์™‘์ฒด์ธ(Swapchain)

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

์Šค์™‘์ฒด์ธ์€ ์ฃผ์–ด์ง„ ํฌ๊ธฐ๋กœ ์ƒ์„ฑ๋˜๋ฉฐ, ์ฐฝ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๋ฉด ์Šค์™‘์ฒด์ธ์„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์Šค์™‘์ฒด์ธ ์ด๋ฏธ์ง€์˜ ํฌ๋งท์€ ํ”Œ๋žซํผ๊ณผ GPU์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์Šค์™‘์ฒด์ธ์—์„œ ์š”๊ตฌํ•˜๋Š” ํฌ๋งท์˜ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํฌ๋งท์˜ ์ด๋ฏธ์ง€๋ฅผ ๋ Œ๋”๋งํ•˜๋ฉด ๊ทธ๋ž˜ํ”ฝ ์ด์ƒ์ด๋‚˜ ํฌ๋ž˜์‹œ๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์Šค์™‘์ฒด์ธ์€ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์šด์˜์ฒด์ œ์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฏธ์ง€์™€ ์ด๋ฏธ์ง€๋ทฐ(image-view)์˜ ๋ชฉ๋ก์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์Šค์™‘์ฒด์ธ์„ ๋” ์ ๊ฑฐ๋‚˜ ๋” ๋งŽ์€ ์ด๋ฏธ์ง€๋กœ ์ƒ์„ฑํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋”๋ธ” ๋ฒ„ํผ๋ง ํ˜น์€ ํŠธ๋ฆฌํ”Œ ๋ฒ„ํผ๋ง์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด 2,3๊ฐœ์˜ ์ด๋ฏธ์ง€๋งŒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์Šค์™‘์ฒด์ธ์„ ๋งŒ๋“ค ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ‘œ์‹œ ๋ชจ๋“œ(Present Mode)๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์Šค์™‘์ฒด์ธ์ด ํ™”๋ฉด ํ‘œ์‹œ์™€ ์–ด๋–ป๊ฒŒ ๋™๊ธฐํ™”ํ• ์ง€๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ํ‘œ์‹œ ๋ชจ๋“œ์˜ ์ž์„ธํ•œ ์„ค๋ช…์€ ์•„๋ž˜ Vulkan ์‚ฌ์–‘ ํŽ˜์ด์ง€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Vulkan Spec: VkPresentModeKHR

  • VK_PRESENT_MODE_IMMEDIATE_KHR ์Šค์™‘์ฒด์ธ์„ ์•„๋ฌด๊ฒƒ๋„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›๋Š” ์ฆ‰์‹œ ํ‘œ์‹œํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ™”๋ฉด ์ฐข์–ด์ง(tearing)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • VK_PRESENT_MODE_FIFO_KHR ์ƒˆ๋กœ๊ณ ์นจ ์ฃผ๊ธฐ์— ๋”ฐ๋ผ ํ‘œ์‹œํ•  ์ด๋ฏธ์ง€ ํ(queue)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ๊ฐ€ ๊ฐ€๋“ ์ฐจ๋ฉด ์ด๋ฏธ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์–ด ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธธ ๋•Œ ๊นŒ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋Œ€๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” โ€œ๊ฐ•ํ•œ VSyncโ€ ํ‘œ์‹œ ๋ชจ๋“œ์ด๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ FPS๊ฐ€ ํ™”๋ฉด์˜ ์ฃผ์‚ฌ์œจ์— ๊ณ ์ •๋ฉ๋‹ˆ๋‹ค.
  • VK_PRESENT_MODE_FIFO_RELAXED_KHR . Fifo VSync๊ณผ ๊ฑฐ์˜ ๊ฐ™์ง€๋งŒ VSync VSync๊ฐ€ ์œ ์—ฐํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ FPS๊ฐ€ ํ™”๋ฉด์˜ ์ตœ์  FPS๋ณด๋‹ค ๋‚ฎ๋‹ค๋ฉด, ์ด๋ฏธ์ง€๋ฅผ ์ฆ‰์‹œ ํ‘œ์‹œํ•˜์—ฌ ์ฐข์–ด์ง(tearing) ํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ™”๋ฉด์ด 60Hz๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ ๋ Œ๋”๋ง์ด 55Hz๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด, ์ผ๋ฐ˜์ ์ธ Fifo์—์„œ๋Š” ๋‹ค์Œ VSync์ฃผ๊ธฐ ๊นŒ์ง€ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ 30FPS๊นŒ์ง€ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด ๋ชจ๋“œ๋Š” ๊ทธ๋Œ€๋กœ 55FPS๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด ๊ณผ์ •์—์„œ ํ™”๋ฉด ์ฐข์–ด์ง์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • VK_PRESENT_MODE_MAILBOX_KHR . ์ด ๋ชจ๋“œ๋Š” ์ด๋ฏธ์ง€ ๋ชฉ๋ก์„ ์œ ์ง€ํ•˜๋ฉฐ, ํ•œ ์ด๋ฏธ์ง€๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๋™์•ˆ ๋‚˜๋จธ์ง€ ์ด๋ฏธ์ง€์— ๊ณ„์†ํ•ด์„œ ๋ Œ๋”๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•  ์‹œ์ ์ด ๋˜๋ฉด ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋ Œ๋”๋ง ๋œ ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์—„๊ฒฉํ•œ VSync ์—†์ด ํŠธ๋ฆฌํ”Œ ๋ฒ„ํผ๋ง์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์ ํ•ฉํ•œ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

VK_PRESENT_MODE_IMMEDIATE_KHR์€ ์ฐข์–ด์ง ํ˜„์ƒ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทน๋„๋กœ ๋‚ฎ์€ ์ง€์—ฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ฐข์–ด์ง ํ˜„์ƒ์„ ๊ฐ์ˆ˜ํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ MAILBOX ํ˜น์€ FIFO์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์—„๊ฒฉํ•œ VSync๋ฅผ ์›ํ•˜๋Š” ์ง€, ํ˜น์€ ํŠธ๋ฆฌํ”Œ ๋ฒ„ํผ๋ง์„ ์„ ํ˜ธํ•˜๋Š” ์ง€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” FIFO_RELAXED ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ Œ๋”๋ง ์†๋„์˜ ์ƒํ•œ์„ ์„ค์ •ํ•ด์ฃผ๋ฉฐ, ๋งŽ์€ ๊ฐ์ฒด๋ฅผ ๋ Œ๋”๋งํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ”„๋ ˆ์ž„ ์†๋„๊ฐ€ 5000FPS๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€ ๊ณผ์—ด ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ž‘์—… ๋ถ€ํ•˜๊ฐ€ ์žˆ๋‹ค๋ฉด MAILBOX๊ฐ€ ๋” ์ ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Next: Vulkan Initialization Code