이 게시물은 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
OpenGL은 드라이버이지만 Vulkan은 드라이버가 아닌 로더다!
- Vulkan 라이브러리는 어플리케이션 / 레이어 / 드라이버 사이의 중개자
ICD: Installable Client Driver의 약자
(우리가 흔히 알고 있는 드라이버의 개념)
1. Vulkan Application의 요청 → Vulkan API 호출!
2. Vulkan Loader → API 호출을 가로채서 검사, 로깅, 디버깅 등을 수행
3. Vulkan ICD → GPU 벤더가 제공하는 Vulkan API 호출을 하드웨어 명령으로 변환
4. GPU → 실제 연산 수행
레이어 구조
Layer는 GPU 드라이버(ICD)에 명령이 전달되기 전에 API 호출을 검사한다.
따라서,
- 호출을 intercept
- 로그 작성
- 디버깅 정보 생성
같은 추가 연산을 수행하게 된다.
이 과정이 CPU 측 오버헤드를 유발하며, 렌더링 퍼포먼스에 영향을 준다.
Layer 방식의 장점 중 하나는 디버깅 기능을 선택적으로 사용할 수 있다는 점이다.
예를 들어, Debugging Layer는 개발 과정에서 버그를 추적하고 검증하는 데 유용하지만,
실제 릴리즈 단계에서는 더 이상 필요하지 않다.
코드가 안정화된 이후에도 디버깅용 레이어를 포함하면
불필요한 검증 로직과 디버깅 심볼로 인해 성능 저하가 발생할 수 있다.
Vulkan의 Layer 구조는 이러한 기능을 개발 단계에서만 활성화하고,
릴리즈 빌드에서는 완전히 제외할 수 있도록 설계된 구조이다.
이를 통해 최종 릴리즈 시에는 최소한의 오버헤드로 최대 성능을 확보할 수 있다.
현재 활성화된 레이어 확인
// Provided by VK_VERSION_1_0
VkResult vkEnumerateInstanceLayerProperties(
uint32_t* pPropertyCount,
VkLayerProperties* pProperties);
첫 번째 인자에 0이 담긴 포인터를, 두 번째 인자에 NULL을 넘기면, 첫 번째 인자에 개수를 반환한다
uint32_t layerCount = 0;
VK_CHECK_ERROR(vkEnumerateInstanceLayerProperties(&layerCount, nullptr));
그리고 다시 호출해서, 첫 번째 인자엔 개수와 두 번째 인자에는 VkLayerPropertie를 담는 벡터의 포인터를 넣어서 다시 호출하면 이 때는 활성화된 Layer의 정보를 획득할 수 있다.
std::vector<VkLayerProperties> layerProps(layerCount);
VK_CHECK_ERROR(vkEnumerateInstanceLayerProperties(&layerCount, layerProps.data()));
for (const auto& layerProp : layerProps)
{
std::cout << layerProp.layerName << std::endl;
}
'DirectX > [Inflearn_삼각형] Vulkan' 카테고리의 다른 글
4. Vulkan Extension (0) | 2025.10.13 |
---|---|
3. Vulkan Device (+Vulkan Queue) (0) | 2025.10.09 |
3. Vulkan Instance (0) | 2025.10.09 |
1. Vulkan이란? (0) | 2025.10.09 |
댓글