[Vulkan Tutorial] 02-Vulkan Overview

By | 2020-02-02

목차: 01-Overview (Link)
이전 글: 01-Overview (Link)
다음 글: 03- Development Environment (Link)


Origin of Vulkan 

Vulkan은 기존에 개발된 그래픽(Graphics) API와 동일하게 여러 Platform(Window, Mac, Linux, Android, 등)에서 사용 가능하다. Vulkan은 기존에 개발된 그래픽 API의 문제점을 해결하기 위해서 만들어졌다고 한다.

기존 그래픽 API의 문제점 (예: OpenGL)

  • 기존에 개발된 그래픽 API는 Fixed-Function(고정 연산)을 지원하는 GPU가 있던 시기에 만들어졌다. 기존 그래픽 API가 현재 Programmable 한 GPU에서도 동작하도록 하기 위해서 GPU-Vendor가 Driver 단에서 많은 선 처리(?) 연산을 추가하였다. 그 결과 동일한 Application이 GPU-Vendor마다 성능 차이가 발생하고 GPU Driver 업데이트 될 때 마다 성능 차이가 발생한다. 드라이브 업데이트하면 성능이 올라갈 수도 있고 내려갈 수도 있다. 또한, Shader 코드 처리 방법 또한 GPU-Vendor마다 차이가 발생한다. 최악의 경우 하나의 Application이 하나의 GPU에서는 정상적으로 동작하지만, 다른 GPU에서는 정상적으로 동작하지 않을 수도 있다.
  • Mobile 기기가 많이 보급되었다. Mobile의 GPU는 기존 PC GPU와 달리 Tile-Based Rendering을 지원하도록 설계되어 있다. 앞서 설명한 것과 동일하게 기존에 개발된 그래픽 API는 Mobile GPU에 대한 고려가 되어 있지 않다. Fixed-Function GPU 시대에 만들어진 그래픽 API는 현재 Mobile GPU에 적합하지 않다.
  • 마지막으로 기존에 개발된 그래픽 API는 Single Thread만 지원한다. CPU 성능으로 인해서 GPU가 효율적으로 동작하지 않는 경우가 발생할 수 있다.

Vulkan은 위에 정의한 문제를 해결하기 위해서 만들어졌다. 

  • Vulkan은 GPU 드라이버에서 하던 일을 프로그래머가 작성하도록 변경하였다 (Verbose API: 엄청 많은 코드를 작성해야 한다는 의미이다). 프로그래머가 기존 GPU 드라이버가 하던 일을 직접 작성하게 되면 장/단점이 명확하다. 장점은 드라이버가 하던 불필요한 부분을 제거할 수 있음으로 Application 성능이 올라간다. 하지만, 하나의 Application을 작성하는 데 있어서 엄청난 노력이 필요하다. OpenGL처럼 간단히 몇 줄의 코드로 삼각형을 그릴 수 없다는 의미이다.
  • Vulkan은 하나의 Shader Compiler을 사용해서 Byte Code를 생성한다. 모든 GPU-Vendor가 같은 Shader 코드를 사용할 수 있다.
  • Vulkan은 Multi-Threads를 지원한다. 

Vulkan Tutorial을 읽으면서 배우기가 엄청 어렵다는 생각만 든다. 삼각형 하나를 그리기 위해서 아래 Step 따라서 코드를 작성해야 한다. 출처 1 Vulkan Tutorial은 아래 Step 순서대로 설명한다.


What It Takes to Draw a Triangle?

  • [Step 1] Instance and Physical Device Selection
  • [Step 2] Logical Device and Queue Families 
  • [Step 3] Window Surface and Swap Chain 
  • [Step 4] Image Views and Framebuffers
  • [Step 5] Render Passes
  • [Step 6] Graphics Pipeline
  • [Step 7] Command Pools and Command Buffers
  • [Step 8] Main Loop

위 모든 과정에 대해 코드를 작성하면 하나의 삼각형을 그릴 수 있다. 출처 1에 각 Step 별로 대략적인 설명이 있다.하지만 정확히 이해를 하지 못해서 Step별 대략적인 설명을 생략하였다. Vulkan Tutorial 글을 읽으면서 대략적인 설명을 업데이트해 나갈 예정이다. 추가로 Real-Work Application의 경우 위 Step 보다 더 많은 Step이 필요하다고 한다. 예를 들어서 Allocating Vertex Buffers, Creating Uniform Buffer, Uplading Texture Images 등이 추가 된다. 


출처

  1.  https://vulkan-tutorial.com/

Leave a Reply

Your email address will not be published. Required fields are marked *