반응형

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

반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.


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

+ Recent posts