vulkan是类似opengl这样的封装层,或者叫中间层,用于屏蔽不同类型GPU的差异,向上层应用程序提供统一的接口,用过Java SDK或者其他中间件做过开发的很好理解这个概念,所以vulkan也有自己的vulkan SDK,LunarXchange提供了Windows、Linux、Mac和Android等版本的SDK,不过Linux版的SDK只有X86版本的,所以Jetson这种arm64版的得自己下载源码编译:
对于GPU的支持vulkan的driver, NVIDIA对其GPU提供了vulkan driver,以便于使用vulkan开发的程序能通过vulkan访问NVIDIA的GPU。用于Jetson平台序列的板子的JetPack里都已安装好了vulkan driver,无需手工安装,而X86平台上则需要选择相关的GPU driver程序来安装,而且要注意的是NVIDIA的GPU driver不是随便哪个版本都含有支持vulkan的,这点很怪异,需要从这里去选择下载: https://developer.nvidia.com/vulkan-driver
点击Linux那个链接进入到这个页面可以看到,支持vulkan的只是特定的GPU driver版本:
所以如果X86机器上安装的不是这里列出的版本之一,安装vulkan sdk后,执行vulkaninfo时就会报类似这样的错:
/build/vulkan-UL09PJ/vulkan-1.1.70+dfsg1/demos/vulkaninfo.c:768: failed with VK_ERROR_INCOMPATIBLE_DRIVER
X86机器上下载上面的driver安装即可,对于Jetson平台,JetPack已经安装好了支持vulkan的driver,JetPack 4.5内含的是vulkank库版本是1.2.141,但是一般只提供有so库文件(/usr/lib/aarch64-linux-gnu/和/usr/lib/aarch64-linux-gnu/tegra/下),并没有头文件,所以当需要在Jetson板子上编译需要vulkan sdk的头文件和lib支持的程序的话,还得自己从 GitHub - KhronosGroup/Vulkan-Loader: Vulkan Loader下载源码,并按下面的步骤编译:
- 确保下面这些支持包已存在,否则执行下面这个命令安装:
sudo apt-get update && sudo apt-get install git build-essential libx11-xcb-dev libxkbcommon-dev libwayland-dev libxrandr-dev cmake
- 下载和JetPack4.5里使用的版本一致的源码:git clone -b v1.2.141 GitHub - KhronosGroup/Vulkan-Loader: Vulkan Loader 或者下载最新版:git clone GitHub - KhronosGroup/Vulkan-Loader: Vulkan Loader
- cd Vulkan-Loader && mkdir build && cd build
- ../scripts/update_deps.py
- cmake -DCMAKE_BUILD_TYPE=Release -DVULKAN_HEADERS_INSTALL_DIR=$(pwd)/Vulkan-Headers/build/install ..
- make
- cd Vulkan-Headers
- ln -s ../loader lib
当在Jetson板子上编译其他程序,例如ncnn,需要用到vulkan sdk时,设置对应的环境变量指向include和lib所在的父目录即可:
export VULKAN_SDK=/home/ubuntu/Vulkan-Loader/build/Vulkan-Headers
在一个没有vulkan的环境,假如只是使用vulkan不需要编译环境,那么可以直接安装sdk即可,例如在Ubuntu下,执行下面的命令即可安装vulkan sdk:
wget -qO - http://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add -
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-bionic.list http://packages.lunarg.com/vulkan/lunarg-vulkan-bionic.list
sudo apt update
sudo apt install vulkan-sdk