이 게시물은 Inflearn의 "삼각형" 님의 "삼각형의 실전! Vulkan 중급" 강의를 학습 목적으로 정리한 게시물입니다.
정리하는 과정에서 살을 붙이거나 강의의 핵심 내용이 누락되었을 수 있습니다.
좀 더 심도있고 깊은 내용을 듣고 싶으시다면 아래 링크를 참고해주세요.
https://www.inflearn.com/course/%EC%8B%A4%EC%A0%84-vulkan/dashboard
삼각형의 실전! Vulkan 중급| 삼각형 - 인프런 강의
현재 평점 3.3점인 강의를 만나보세요. 이 강의를 통해 수강생은 Vulkan의 핵심 개념을 이해할 수 있습니다. 이를 바탕으로 GPU를 효과적으로 사용하는 코드를 작성할 수 있습니다. Vulkan, Graphics
www.inflearn.com
Vulkan Device란?
Vulkan에서 Device는 렌더링이나 컴퓨팅 작업을 수행하기 위해 반드시 필요한 핵심 자원.
Vulkan에는 두 종류의 디바이스가 존재한다.
- Physical Device
실제 GPU 하드웨어를 의미하며, 예를 들어 NVIDIA나 AMD 그래픽카드가 이에 해당 - Logical Device
Physical Device를 추상화한 논리적 인터페이스로,
애플리케이션이 하드웨어 세부 구현에 직접 의존하지 않고 GPU를 사용할 수 있도록 해줌.
즉, Vulkan Logical Device는 Physical Device를 감싸는 소프트웨어적 표현이며,
이 덕분에 하드웨어 제조사(NVIDIA, AMD 등)에 따라 다른 드라이버 구현이 있더라도
Vulkan API를 통해 동일한 방식으로 GPU 리소스에 접근 가능.
예를 들어 NVIDIA GPU와 AMD GPU가 모두 Vulkan을 지원한다면,
애플리케이션 입장에서는 두 장치 모두를 Vulkan Logical Device로 동일하게 다룰 수 있다.
즉, 하드웨어의 차이와 상관없이 동일한 Vulkan 명령으로 그래픽 및 컴퓨팅 연산을 수행할 수 있게 되는 것이다.
Vulkan Queue란?
Vulkan Queue는 렌더링, 컴퓨팅, 메모리 전송 등의 명령(Command)을 실제로 실행하는 하드웨어 스케줄링 단위.
Vulkan에서 Queue는 별도의 자원이 아니라, Vulkan Device 내부에 존재하는 하드웨어적 구성 요소.
즉, Logical Device가 명령을 수행하기 위해 사용하는 실행 경로라고 볼 수 있음.
GPU 내부에는 다양한 목적의 Queue들이 존재한다
Graphics Queue | 그래픽 파이프라인 명령(vkCmdDraw 등)을 처리 |
Compute Queue | GPGPU 연산 명령(vkCmdDispatch)을 처리 |
Transfer Queue (DMA) | 메모리 복사, 버퍼 업로드 등 데이터 전송 명령을 처리 |
ACE (Asynchronous Compute Engine) | 그래픽 파이프라인과 별도로 비동기 연산을 수행 (AMD GPU 등에서 주로 사용) |
이러한 Queue들은 GPU의 하드웨어 명령 프로세서(Graphics Command Processor, ACE, DMA 엔진 등) 에 매핑되어 있으며,
각 GPU 제조사에 따라 구조와 개수가 다륾.
개발자는 Vulkan에서 vkGetPhysicalDeviceQueueFamilyProperties() 함수를 사용하여 GPU가 지원하는 Queue Family 목록을 조회 가능.
이 정보에는 각 Queue Family가 지원하는 기능(그래픽, 컴퓨팅, 전송 등)과 Queue 개수가 포함.
이 중에서 애플리케이션의 목적(예: 렌더링, 계산 등)에 적합한 Queue를 선택하여 vkCreateDevice() 시점에 함께 생성해야 한다.
typedef enum VkQueueFlagBits {
VK_QUEUE_GRAPHICS_BIT = 0x00000001,
VK_QUEUE_COMPUTE_BIT = 0x00000002,
VK_QUEUE_TRANSFER_BIT = 0x00000004,
VK_QUEUE_SPARSE_BINDING_BIT = 0x00000008,
VK_QUEUE_PROTECTED_BIT = 0x00000010,
VK_QUEUE_VIDEO_DECODE_BIT_KHR = 0x00000020,
VK_QUEUE_VIDEO_ENCODE_BIT_KHR = 0x00000040,
VK_QUEUE_OPTICAL_FLOW_BIT_NV = 0x00000100,
VK_QUEUE_DATA_GRAPH_BIT_ARM = 0x00000400,
VK_QUEUE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkQueueFlagBits;
vkGetPhysicalDeviceQueueFamilyProperties()를 통해 각 Queue Family의 속성(VkQueueFamilyProperties)에 접근하면,
queueFlags 멤버를 통해 해당 Queue가 지원하는 기능을 확인할 수 있다.
이 queueFlags에는 다음과 같은 비트 플래그들이 설정될 수 있다:
- VK_QUEUE_GRAPHICS_BIT — 그래픽 명령(vkCmdDraw 등) 실행 가능
- VK_QUEUE_COMPUTE_BIT — 컴퓨트 명령(vkCmdDispatch) 실행 가능
- VK_QUEUE_TRANSFER_BIT — 데이터 전송 명령(vkCmdCopyBuffer 등) 실행 가능
- VK_QUEUE_SPARSE_BINDING_BIT — 희소 리소스 바인딩 지원
일반적인 렌더링 파이프라인에서는 그래픽 명령(Draw, Present 등)을 수행해야 하기 때문에,
선택한 Queue Family에는 반드시 VK_QUEUE_GRAPHICS_BIT 플래그가 활성화되어 있어야 한다!
'DirectX > [Inflearn_삼각형] Vulkan' 카테고리의 다른 글
5. Vulkan Surface (0) | 2025.10.15 |
---|---|
4. Vulkan Extension (0) | 2025.10.13 |
3. Vulkan Instance (0) | 2025.10.09 |
2. Vulkan Loader (0) | 2025.10.09 |
1. Vulkan이란? (0) | 2025.10.09 |
댓글