编译 AMDVLK 驱动

@Ta 08-07 11:08发布,08-07 15:11修改 5270点击
  1. 下载新版本 cmake
wget -c "https://github.com/Kitware/CMake/releases/download/v3.30.2/cmake-3.30.2-linux-$(uname -m).tar.gz"

tar vxf "cmake-3.30.2-linux-$(uname -m).tar.gz"

# 把新版 cmake 加入 PATH
# 注意 $PWD 表示当前目录,只有当你恰好在解压了 cmake 的父文件夹时才有效。
# 如果你当前在其他目录,请把命令里的 $PWD 替换为 cmake 父文件夹的完整路径。
export PATH="$PWD/cmake-3.30.2-linux-$(uname -m)/bin:$PATH"

cmake --version
  1. 安装依赖包
sudo apt install build-essential cmake curl git ninja-build pkg-config python3 python3-jinja2 python3-ruamel.yaml

sudo apt install libssl-dev libx11-dev libxcb1-dev x11proto-dri2-dev libxcb-dri3-dev libxcb-dri2-0-dev libxcb-present-dev libxshmfence-dev libxrandr-dev libwayland-dev
  1. 安装新版本 Vulkan Headers
git clone --depth=1 -b vulkan-sdk-1.3.280 https://github.com/KhronosGroup/Vulkan-Headers.git

cd Vulkan-Headers

mkdir build
cd build

cmake -GNinja -DCMAKE_INSTALL_PREFIX=/usr ..

sudo ninja install

cd ../..
  1. 安装新版本 Vulkan Loader
git clone --depth=1 -b vulkan-sdk-1.3.280 https://github.com/KhronosGroup/Vulkan-Loader.git

cd Vulkan-Loader

mkdir build
cd build

cmake -GNinja -DCMAKE_INSTALL_PREFIX=/usr ..

ninja
sudo ninja install

cd ../..
  1. 编译 DirectXShaderCompiler
git clone --depth=1 -b release-1.7.2308 https://github.com/microsoft/DirectXShaderCompiler.git

cd DirectXShaderCompiler

git submodule update --init --recursive --depth=1

cmake -H. -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Release -C ./cmake/caches/PredefinedParams.cmake -DCMAKE_INSTALL_PREFIX=/usr

cd build

ninja

# 这两个文件不存在,但编译时也不会用到,所以创建空白的文件代替,防止安装出错
touch bin/llvm-as bin/llvm-dis

sudo ninja install

cd ../..

编译过程中出现以下报错是正常现象,不会影响编译:

[10:07:24][ERROR   ] Failed to run "['git', 'describe']" in "/parent/work/amdvlk.kylin/DirectXShaderCompiler/external/SPIRV-Tools": fatal: 没有发现名称,无法描述任何东西。
  1. 编译 glslang
git clone --depth=1 -b vulkan-sdk-1.3.280 https://github.com/KhronosGroup/glslang.git

cd glslang

# 这一步会通过 git 下载源代码到 External 文件夹
./update_glslang_sources.py

cmake -H. -Bbuild -GNinja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr

cd build

ninja
sudo ninja install

cd ../..
  1. 安装 repo 命令
sudo wget -O /usr/local/bin/repo https://storage.googleapis.com/git-repo-downloads/repo

sudo chmod +x /usr/local/bin/repo

repo --version
  1. 配置 git 身份信息

[email protected] 改成你的邮箱,把 Your Name 改成你的用户名(随便写都行)。

git config --global user.email "[email protected]"
git config --global user.name "Your Name"
  1. 下载 AMDVLK 源代码
mkdir amdvlk
cd amdvlk

# 设置repo镜像源,防止连不上谷歌的服务器
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

repo init -u https://github.com/GPUOpen-Drivers/AMDVLK.git -b master --depth=1

# 这一步会从 github 下载大量代码,请保持网络连接稳定(-j 后面的 4 为并发连接数,你可以改成你想要的数值)
repo sync -j4
  1. 编译 AMDVLK
cd drivers

cmake -G Ninja -S xgl -B build -DCMAKE_INSTALL_PREFIX=/usr

cd build

# 请不要先运行非 sudo 的 ninja 命令,否则您会后悔。
# 因为开了全程序优化,重新链接一次动态库需要十分钟。
# 每次运行 ninja 命令都会重新链接一次动态库。
# 直接用 root 权限编译并安装可以防止链接两次。
sudo ninja install

在 AMDVLK 和 Mesa RADV 驱动之间切换

# 使用 AMDVLK 驱动运行 vkcube
export VK_ICD_FILENAMES="/etc/vulkan/icd.d/amd_icd64.json"
export AMD_VULKAN_ICD=AMDVLK
vkcube

# 使用 MESA RADV 驱动运行 vkcube
export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.$(uname -m).json"
export AMD_VULKAN_ICD=RADV
vkcube

AMDVLK 对 OpenGL / OpenGL ES 程序没有效果

注意:这只是一个Vulkan驱动,对 OpenGL / OpenGL ES 程序(比如glmark2 / glmark2-es2等)没有任何效果。

默认会使用哪个驱动?

不确定,取决于 Vulkan Loader 的默认加载顺序。

使用 vkmark 跑分对比 AMDVLK 和 Mesa RADV 驱动

如果要跑分对比 AMDVLK 和 Mesa RADV 驱动,可以使用 vkmark,以下是编译方法。

开始编译前,请先按最上面第1步的方法安装新版cmake并把它加入PATH

sudo apt install meson python3-pip libglm-dev libassimp-dev libxcb1-dev libxcb-icccm4-dev libwayland-dev wayland-protocols libdrm-dev libgbm-dev

# 如果你没有自己编译安装 Vulkan Headers 和 Vulkan Loader,你可能还需要安装 libvulkan-dev 这个包。
# 如果已经编译安装过了,请不要安装 libvulkan-dev 这个包,否则你编译安装的 Vulkan Headers 和 Vulkan Loader 就被覆盖了。

sudo pip3 install --upgrade meson

git clone --depth=1 https://github.com/vkmark/vkmark.git

cd vkmark

mkdir build
cd build

meson ..

ninja

# vkmark 无需安装,请直接在 build 文件夹运行

# 确保自己在 `vkmark/build` 文件夹
pwd

# 使用 AMDVLK 驱动运行 vkmark
export VK_ICD_FILENAMES="/etc/vulkan/icd.d/amd_icd64.json"
export AMD_VULKAN_ICD=AMDVLK
./src/vkmark --winsys-dir=./src --data-dir=../data

# 使用 MESA RADV 驱动运行 vkmark
export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/radeon_icd.$(uname -m).json"
export AMD_VULKAN_ICD=RADV
./src/vkmark --winsys-dir=./src --data-dir=../data
回复列表(0|隐藏机器人聊天)
帖子没有回复
添加新回复
回复需要登录