Loader는 Application을 Layer 및 클라이언트 드라이버(ICD)에 매핑하는 역할을 한다.

 

 

목차

     

     


     

     

     

    Vulkan


     

     

     

    Vulkan Loader의 역할

     

     

     

    Vulkan LoaderApplication의 요청을 받아 Layer들이 순차적으로 실행되게 한다.

    그리고 마지막에 Driver가 호출되도록 한다.

     

     

    Vulkan API 호출 시

    • Layer A → Layer B → Layer C → Vulkan ICD 순서로 호출
    • '레이어 구조' 라고 부른다.

     

     

    Vulkan Loader의 장점

     

    장점 #1:  레이어 구조 -   Release 때 불필요한 부분 제외

    Vulkan 프로그래밍 시 위와 같이 순서대로 모두 실행되어야 한다.

    하.지.만. 배포하는 Release 때는 불필요한 Layer가 있을 수 있다. 

     

     

    만약 위와 같이 개발 시점에만 필요하고 Release 때에 Layer B가 필요하지 않다면

    Vulkan Loader에서 Layer B를 로드하지 않도록 설정하면 된다.  

    (반면에 OpenGL는 레이어 구조가 없기 때문에 개발에만 필요한 기능들이 Release도 포함되게 된다.)

     

     

     

    장점 #2:  레이어 구조 -   소스 코드 없이 분석 가능

     

    프로그램에 문제가 발생한 경우에 소스 코드 없이 문제를 분석할 수 있다.

    Vulkan Loader에 디버깅에 필요한 Layer들이 로드하도록 설정하면 된다.

     

     

     

    장점 #3:  레이어 구조 -   에러 처리 부분

     

     

    에러 처리는 개발 시에만 필요하고 Release에는 필요하지 않다.

    위의 그림을 보면 OpenGL의 경우, 에러를 처리하는 부분이 크다. 반면에 Vulkan은 에러를 처리하는 부분을 Release 시 제외 시킨다.

     

    OpenGL의 경우, 개발을 할 때나 Release 할 때나 동일한 OpenGL 드라이버를 사용한다. 그래서 OpenGL은 에러 처리를 항상 포함할 수 밖에 없다.  에러 처리는 막대한 CPU를사용하기 때문에 OpenGL은 성능르 더 내기 어렵다. 

     

    Vulkan의 경우, OpenGL에서 에러 처리를 하던 부분을 Layer로 만들었다. 이를 Vulkan Validation Layers라 부른다.


     

     

    Vulkan Validation Layers

     

    Vulkan의 잘못된 사용을 알려주기 위해 Khronos에서 제공하는 Layer다.

     

    • Vulkan Validation Layers는 개발에만 사용하고 Release에는 사용하지 않는다.
    • Vulkan Validation Layers는 NDK에 포함되어 있지 않기 때문에 공식 사이트에서 다운받을 수 있다.

     

     

    Vulkan Validation Layers 설치하기

     

    1. 웹사이트에서 다운로드

     

      https://github.com/KhronosGroup/Vulkan-ValidationLayers/releases 

     

    2. 다운로드 압축 해제

     

     

    Android Studio에서 압축해제한 파일을 복사해서 사용한다.


     

     

    Vulkan 코딩 컨벤션

     

    매크로:  VK 접두사

    • VK_API_MAJOR_VERSION
    • VK_API_MINOR_VERSION

     

    클래스:  Vk 접두사

    • VkInstance
    • VkDevice

     

    함수:  vk 접두사

    • vkDevice
    • vkCreativeInstance
    • vkCreativeDevice