주의 : 이 문서는 초심자 튜토리얼이 아닙니다. 기본 개념 정도는 안다고 가정합니다. 초심자는 [ Vulkan Tutorial ] 이나 [ Vulkan Samples Tutorial ] 을 보면서 같이 보시기 바랍니다.

주의 : 완벽히 이해하고 쓴 글이 아니라 공부하다가 정리한 것이므로 잘못된 내용이 있을 수 있습니다.

주의 : 이상하면 참고자료를 확인하세요.



Ecosystem


"Software Ecosystem" 이라는 것은 우리 말로 하면 "소프트웨어 생태계" 정도가 될 것 같습니다. 이것의 의미는 다음과 같습니다.


같은 환경에서 개발되고 같이 진화하는( coevolve ) 소프트웨어 프로젝트의 집합


출처 : [ 1 ]


기본적으로 Vulkan 의 기능을 구성하는 많은 extension 및 layer 들은 이러한 ecosystem 을 공유하고 있다고 보시면 됩니다. 그런데 이런 환경을 구성하기 위해서는 중심이 되는 컴포넌트가 필요합니다.


이를 Vulkan 에서는 이런 역할을 수행하는 컴포넌트를 "Loader" 라 부르고 있으며, [ 2 ] 에서 소스 코드를 제공하고 있습니다. 물론 LunarG 를 설치하시면 따로 소스 코드를 빌드할 필요는 없습니다.


High level architecture


[ 3 ] 에서는 Vulkan ecosystem 의 고수준 아키텍쳐를 보여 주고 있습니다.


그림1. Vulkan High Level Architecture. 출처 : [ 3 ].


그림1 에서 볼 수 있듯이 Vulkan Loader 는 Appliation, Layer, ICD 를 연결하는 인터페이스( interface ) 역할을 해 주고 있습니다. 


"ICD" 는 "Installable Client Driver" 의 머릿글자로 Physical Device 와 Loader 사이에서 인터페이스 역할을 합니다. 우리가 OS 개발자나 Driver 개발자는 아니기 때문에, 현재 단계에서는 이 부분에 대해서 깊게 살펴 보지는 않겠습니다( 뭐... 능력도 안 됩니다 ㅠㅠ ).


Layer


Vulkan 은 기본적으로 런타임에 Error-Checking 이나 Debugging 을 위한 기능을 지원하지 않습니다. Memory 관리나 Multi-Threading 과 같은 기능이 성능 향상에 큰 영향을 줬지만, 이러한 기능을 배제하는 것도 성능에 영향을 줍니다.


하지만 개발 도중에 그런 기능들을 사용할 수 없다면, 안 그래도 사용하기 어려운 Vulkan 을 더욱 사용하기 어렵게 만들게 될 것입니다. 그래서 Vulkan 은 Layer 라는 형태로 그런 기능들을 지원하고 있습니다.


Layer 는 라이브러리 형태로 배포되며 이것은 Vulkan 의 API 를 hooking 하거나 기능을 추가합니다. 예를 들어 validation 을 해야 한다고 하면 특정 API 를 hooking 해서 로그를 삽입한다든가 하는 일을 할 수 있겠죠.


현재 LunarG 1.1.84 버전에서는 다음과 같은 layer 들을 제공하고 있습니다.


  • VK_LAYER_LUNARG_api_dump
  • VK_LAYER_LUNARG_assistant_layer
  • VK_LAYER_LUNARG_core_validation
  • VK_LAYER_LNUARG_divce_simulation
  • VK_LAYER_LUNARG_monitor
  • VK_LAYER_LUNARG_object_tracker
  • VK_LAYER_LUNARG_parameter_validation
  • VK_LAYER_LUNARG_screenshot
  • VK_LAYER_GOOGLE_thrading
  • VK_LAYER_GOOGLE_unique_objects


이런 레이어들은 전부 Open Source 입니다. 예를 들어 validation layer 와 관련한 Source 는 [ https://github.com/KhronosGroup/Vulkan-ValidationLayers ] 에 있습니다.


다음 몇 개의 연구 시리즈에서는 각 레이어들이 어떤 의미를 가지고 있고, 어떻게 사용되는지 알아 보도록 하겠습니다.


참고자료


[ 1 ] Software Ecosystem, Wikipedia.


[ 2 ] KhronosGroup/Vulkan-Loader, GitHub.


[ 3 ] Architecture of the Vulkan Loader Interfaces, LunarG.


[ 4 ] Vulkan Specification, Khronos.

+ Recent posts