본문 바로가기
DirectX/[Inflearn_삼각형] Vulkan

2. Vulkan Loader

by 헛둘이 2025. 10. 9.

이 게시물은 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은 드라이버가 아닌 로더다!

 

https://docs.vulkan.org/guide/latest/_images/loader_overview.png

- 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

댓글