반응형

OpenGL을 공부하려 찾다가 새로운 것을 찾았네요.. 벌컨이라고 OpenGL 다음 버전에 해당되는 API라고 합니다.


위키피아에는 벌칸(Vulkan)을 아래처럼 소개하고 있습니다.  

벌컨(Vulkan)은 오버헤드가 적은 크로스 플랫폼 3D 그래픽스 및 컴퓨팅 API이다. 이는 GDC 2015에서 크로노스 그룹에 의해 처음으로 소개되었다.

초기의 Vulkan API는 OpenGL의 차세대 버전으로 준비되었는데, 현재는 "OpenGL" 이라는 이름을 이어가지 않고 Vulkan 이라는 이름으로 결정되었다.


안드로이드 누가(7.0)에서 OpenGL 3.2와 벌칸 1.0을 같이 지원한다고 하니.. 지금 당장 해볼 수는 없을 거 같고.. 그래서 피시쪽을 알아봤더니 그래픽 카드에서 지원만 하면 사용이 가능하다고 하는 군요..


https://vulkan-tutorial.com/Introduction 글 중 중간 아래부분에 그래픽카드사별로 링크가 걸려있습니다.

  • A graphics card and driver compatible with Vulkan (NVIDIAAMDIntel)



1차 시도 ... 윈도우 10, intel i3, HD 4600  실패

노트북을 쓰는지라 동작만 하면 좋겠다는 생각에 Intel 링크를 타고 들어갔더니 제가 사용중인 4600이 다행이 있군요.. 사용하는 윈도우 운영체제에 맞는 64비트용 드라이버를 다운로드 받았습니다.


드라이버가 설치된 버전보다 이전 버전이라고 했지만 그냥 설치해봅니다. 


다시 깔긴 했는데 제대로 된건지 확인할 방법이 없어 구글링을 해보니 아래 주소에 현재 피시가 벌컨을 지원하는지 여부를 테스트 프로그램이 있네요..

https://github.com/skeeto/vulkan-test


예상과 달리 벌컨 드라이버가 설치안되었다고 에러가 보입니다.



무작정  https://vulkan.lunarg.com/에서 윈도우용 VulKan SDK를 다운로드 받아 설치해봅니다.


시작 메뉴에 추가된 Vulkan SDK 1.0.30.0 하위 항목에 있는 vulkaninfo를 실행시켜봤는데..



현재 컴퓨터에서는 벌칸 드라이버가 제대로 설치안되는 듯합니다.. 다른 피시에서 다시 해봐야 겠습니다..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
===========
VULKAN INFO
===========
 
Vulkan API Version: 1.0.30
 
INFO: [loader] Code 0 : Found manifest file C:\VulkanSDK\1.0.30.0\Bin\VkLayer_api_dump.json, version "1.0.0"
INFO: [loader] Code 0 : Found manifest file C:\VulkanSDK\1.0.30.0\Bin\VkLayer_core_validation.json, version "1.0.0"
INFO: [loader] Code 0 : Found manifest file C:\VulkanSDK\1.0.30.0\Bin\VkLayer_image.json, version "1.0.0"
INFO: [loader] Code 0 : Found manifest file C:\VulkanSDK\1.0.30.0\Bin\VkLayer_object_tracker.json, version "1.0.0"
INFO: [loader] Code 0 : Found manifest file C:\VulkanSDK\1.0.30.0\Bin\VkLayer_parameter_validation.json, version "1.0.0"
INFO: [loader] Code 0 : Found manifest file C:\VulkanSDK\1.0.30.0\Bin\VkLayer_screenshot.json, version "1.0.0"
INFO: [loader] Code 0 : Found manifest file C:\VulkanSDK\1.0.30.0\Bin\VkLayer_swapchain.json, version "1.0.0"
INFO: [loader] Code 0 : Found manifest file C:\VulkanSDK\1.0.30.0\Bin\VkLayer_threading.json, version "1.0.0"
INFO: [loader] Code 0 : Found manifest file C:\VulkanSDK\1.0.30.0\Bin\VkLayer_unique_objects.json, version "1.0.0"
INFO: [loader] Code 0 : Found manifest file C:\VulkanSDK\1.0.30.0\Bin\VkLayer_vktrace_layer.json, version "1.0.0"
INFO: [loader] Code 0 : Found manifest file C:\Program Files\RenderDoc\renderdoc.json, version "1.0.0"
ERROR: [loader] Code 0 : Registry lookup failed can't get ICD manifest files, do you have a Vulkan driver installed
C:\releasebuild\LoaderAndValidationLayers\demos\vulkaninfo.c:682: failed with VK_ERROR_OUT_OF_HOST_MEMORY
cs



아래 링크에 따르면 6세대 이상의 CPU에서만 지원되는 듯합니다.( 윈도우 드라이버에 한해서 얘기하는듯 합니다.)

https://software.intel.com/en-us/forums/developing-games-and-graphics-on-intel/topic/699818




2차 시도.. Ubuntu 16.04, intel i3, HD 4600  성공

포기 할까 하다가 아래 링크를 발견했습니다.  혹시나 해서 우분투 리눅스로 부팅하여 다시 해봅니다.

https://01.org/linuxgraphics/blogs/jekstrand/2016/open-source-vulkan-drivers-intel-hardware


소스코드로 설치하는 방법과 패키지 설치를 지원하고 있는데.. 다행히 우분투도 있군요.. 또하나 지원하는 것은 레드햇입니다. PPA를 이용해서 설치를 했는데 현재는 16.04만 지원하고 14.04는 추후 지원될거 같다고 합니다. 


$ sudo apt-add-repository ppa:canonical-x/vulkan

$ sudo apt update

$ sudo apt install vulkan-utils mesa-vulkan-drivers



다시 https://vulkan.lunarg.com/ 으로 가서 이번엔 리눅스용 Vulkan SDK를 다운로드 받아 설치했습니다.


$ chmod +x vulkansdk-linux-x86_64-1.0.30.0.run 

$ ./vulkansdk-linux-x86_64-1.0.30.0.run 



설치라기보다는 그냥 압축이 풀립니다. 아래 경로로 이동합니다.
$ ls
Getting_Started.html  build_examples.sh  config  examples  samples       source
Release_Notes.html    build_samples.sh   doc     install   setup-env.sh  x86_64

$ pwd
/home/webnautes/VulkanSDK/1.0.30.0


예제코드를 컴파일하기전에 필요하다고 하는 패키지를 설치해줍니다.
$ sudo apt install libxcb1-dev xorg-dev


이제 예제코드를 컴파일해봤는데 에러 없이 잘 되네요.. 
./build_examples.sh

예제를 실행시켜 봅니다. 에러가 나네요..
1
2
3
4
5
$ cd examples/build
$ ./cube
WARNING: Haswell Vulkan support is incomplete
../../../../../src/intel/vulkan/anv_device.c:414: FINISHME: Get correct values for VkPhysicalDeviceLimits
vulkan: No DRI3 support
Could not find both graphics and present queues
cs

다행히 방법을 찾아서 http://askubuntu.com/a/808876

다음 파일 내용을 포함하는  /etc/X11/xorg.conf 파일을 작성하고 재부팅해서 다시 예제를 실행시켜봤습니다.
1
2
3
4
5
6
Section "Device"
    Identifier  "Intel Graphics"
    Driver      "intel"
    Option      "SwapBuffersWait" "0"
    Option      "DRI" "3"
EndSection
cs



상당히 빨리 직육면체가 돕니다.. 키보드를 눌렀더니 멈추어서 캡처를 했네요..

1
2
3
$ pwd
/home/webnautes/VulkanSDK/1.0.30.0/examples/build
$ ./cube
cs



GLFW를 설치해줍니다.
$ git clone https://github.com/glfw/glfw.git glfw
$ cd clfw
$ cmake .
$ make
$ sudo make install

마지막으로  glm을 설치해줍니다.
$ sudo apt install libglm-dev


이제 예제 코드를 컴파일 해봅니다. VulkanTest라는 디렉토리를 만든 후,  그 안에 main.cpp라는 이름으로 다음 내용을 추가해줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
 
#define GLM_FORCE_RADIANS
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
#include <glm/vec4.hpp>
#include <glm/mat4x4.hpp>
 
#include <iostream>
 
int main() {
    glfwInit();
 
    glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
    GLFWwindow* window = glfwCreateWindow(800600"Vulkan window", nullptr, nullptr);
 
    uint32_t extensionCount = 0;
    vkEnumerateInstanceExtensionProperties(nullptr, &extensionCount, nullptr);
 
    std::cout << extensionCount << " extensions supported" << std::endl;
 
    glm::mat4 matrix;
    glm::vec4 vec;
    auto test = matrix * vec;
 
    while(!glfwWindowShouldClose(window)) {
        glfwPollEvents();
    }
 
    glfwDestroyWindow(window);
 
    glfwTerminate();
 
    return 0;
}
cs


makefile이라는 이름으로 다음 내용을 추가해줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
VULKAN_SDK_PATH = /home/webnautes/VulkanSDK/1.0.30.0/x86_64
 
CFLAGS = -std=c++11 -I$(VULKAN_SDK_PATH)/include
LDFLAGS = -L$(VULKAN_SDK_PATH)/lib `pkg-config --static --libs glfw3` -lvulkan
 
VulkanTest: main.cpp
    g++ $(CFLAGS) -o VulkanTest main.cpp $(LDFLAGS)
 
.PHONY: test clean
 
test: VulkanTest
    LD_LIBRARY_PATH=$(VULKAN_SDK_PATH)/lib VK_LAYER_PATH=$(VULKAN_SDK_PATH)/etc/explicit_layer.d ./VulkanTest
 
clean:
    rm -f VulkanTest
 
cs



make명령으로 컴파일 후.. 실행시켜보면..

$ make

$ ./VulkanTest



일단은 창이 하나뜨는데 화면캡처한거처럼 보이는 군요.. 일단 컴파일 및 실행이 잘되니..  

자세한 건 이후에 봐야 겠습니다.



마지막으로 visual studio code에서 컴파일 및 실행시키려면 tasks.json파일 내용을 다음 내용으로 하면됩니다. 아직  vvisual studio code에 익숙하지 못해서 한 줄로 길게 적었지만 ..잘 동작합니다.  visual studio code 설치 및 사용법은 아래 링크를 확인하세요..

[리눅스/개발환경] - Ubuntu Linux에 Visual Studio Code 설치해서 C/C++컴파일 해보기



그리고 -I와  -L 다음에 있는 경로만  현재 설치된 경로로 바꿔주세요..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
   "version": "0.1.0",
   "command": "bash",
   "isShellCommand": true,
   "args": ["-c"],
   "tasks": [
       {
           "taskName": "saveNcompile",
           "suppressTaskName": true,
           "isBuildCommand": true,
           "args": ["g++ -std=c++11 -I/home/webnautes/VulkanSDK/1.0.30.0/x86_64/include -o main main.cpp -L/home/webnautes/VulkanSDK/1.0.30.0/x86_64/lib `pkg-config --static --libs glfw3` -lvulkan"]
       }, {
           "taskName": "execute",
           "suppressTaskName": true,
           "isTestCommand": true,
           "args": ["gnome-terminal -e \"bash -ic  ./main;bash \""]
       }
   ]
}
 
cs




참고

https://vulkan-tutorial.com/Development_environment

반응형

'OpenGL > Vulkan' 카테고리의 다른 글

Intel HD 4600에서 벌칸(Vulkan) API 사용해보기  (4) 2016.11.15

포스트 작성시에는 문제 없었지만 이후 문제가 생길 수 있습니다.
질문을 남겨주면 가능한 빨리 답변드립니다.

여러분의 응원으로 좋은 컨텐츠가 만들어집니다.
지금 본 내용이 도움이 되었다면 유튜브 구독 부탁드립니다. 감사합니다 ~~

유튜브 구독하기


제가 쓴 책도 한번 검토해보세요 ^^

  1. ddd 2017.03.30 00:54

    Windows 환경에서는 비동기 컴퓨트를 제대로 활용할 수 없는 브로드웰 CPU 내장그래픽까진 지원하지 않고
    스카이레이크 CPU 내장그래픽부터 정식으로 지원한다고 하더군요
    Linux 커널 기반 OS에서는 아이비브릿지 CPU 내장그래픽부터 지원하는걸로 알고 있습니다

    OpenGL처럼 Vulkan도 하드웨어 플랫폼, 소프트웨어 플랫폼 독립성을 지니는 그래픽 API라고 오픈소스 재단이 강조하지만
    하드웨어 및 소프트웨어 개발 업체가 지원 안 해주면 말짱꽝이라 사용자 입장에선 그저 씁쓸할 뿐이죠..

    • Favicon of https://webnautes.tistory.com BlogIcon webnautes 2017.03.30 08:54 신고

      그래서 똑같은 하드웨어인데 리눅스에서만 동작했었군요..
      pc쪽에선 Vulkan이 기존 OpenGL을 대체하는데 시간이 오래 걸릴수도 있겠군요..
      7.0부터 포함시킨 안드로이드가 더빨리 Vulkan을 사용할듯 보이네요..

  2. Favicon of https://dodohan-horangii.tistory.com BlogIcon 도도한호랑이 2019.05.24 11:19 신고

    궁금해서 그런데, 직업이 어떻게 되세요? IT쪽 종사하시는 분인가요? 대학원생이신가요?? 저 혼자서 개발하다보면 제일 어려운게 다양한 개발환경 구축하는 부분인데 항상 도움 잘 받고있습니다~

+ Recent posts