跳到主要内容

高通骁龙 8cx 上的原生 Vulkan

·1 分钟

骁龙 X 系列终于发布了,新平台的 GPU 驱动终于包含对 Vulkan API 的原生支持。

有意思的是,该 Vulkan 驱动可以直接移植到老的 8cx 平台上使用,下面介绍一下方法。

这个方法不需要修改驱动文件,也不需要关闭安全启动/驱动签名验证。

注意 #

如果你能够使用微软的 Vulkan 兼容包(基于 Mesa dozen Vulkan 到 DirectX 12 转译层),最好还是用它。强行在老设备上使用骁龙 X 的 Vulkan 驱动非常不稳定,特别是 Vulkan 窗口位于后台的时候。

当然 Vulkan 兼容包只支持 8cx Gen 3,如果你跟我一样用的是 Gen 2,那还是继续往下看吧。

下载骁龙 X 的 GPU 驱动 #

首先我们需要一份骁龙 X 的 GPU 驱动。幸运的是 WOA Project 维护了一系列的高通 SoC 公版驱动包,这些驱动来自高通的参考设计设备。

其中骁龙 X 对应的路径在 https://github.com/WOA-Project/Qualcomm-Reference-Drivers/tree/master/8380_CRD

下面有很多个不同的版本,选最新的(本文发布时是 200.0.18.0),然后下载里面的 qcdx8380.cab

解压并提取必要文件 #

下载之后解压,并提取以下文件到一个单独目录(比如 C:\qcvk):

adreno_utils.dll
libgsluser.dll
qcgpuarm64xcompilercore.DLL
qcvkarm64xcompiler.dll
qcvkarm64xum.dll
qcvk_icd_arm64x.json

将 Vulkan ICD 注册到系统 #

在注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\Drivers 下(没有的键自己创建即可)新建 DWORD,名字为 qcvk_icd_arm64x.json 文件的全路径,(如 C:\qcvk\qcvk_icd_arm64x.json),值为 0。

在注册表中注册 ICD

获取 Vulkan Loader #

如果你使用的是 24H2(26100),系统应该已经自带了 Vulkan Loader C:\Windows\system32\vulkan-1.dll,你可以跳过这一节。

Vulkan 程序使用 Vulkan Loader 加载 Vulkan 驱动,如果你要运行 x64 Vulkan 应用,直接安装 LunarG 的 Vulkan Runtime 即可。

但 LunarG 官网暂时还没有 ARM64 的 Vulkan Loader 二进制下载,目前你可以:

  • 自己编译,源码在 https://github.com/KhronosGroup/Vulkan-Loader

  • 使用 MSYS2 的二进制包:https://packages.msys2.org/package/mingw-w64-clang-aarch64-vulkan-loader?repo=clangarm64
    点击 File 处的链接下载,并用 7-zip 解压 clangarm64/bin 下的 vulkan-1.dll

获取到 vulkan-1.dll 之后,建议将它直接放在 Vulkan 应用 EXE 的路径下。不要放到 system32,以免与 LunarG Vulkan Runtime 安装的 x64 vulkan-1.dll 冲突。

然后就完成了! #

没错,就这么简单。

现在你应该可以尝试运行使用 Vulkan 的程序了,以下是 ARM64 PPSSPP 在 8cx Gen 2 上使用 Vulkan 运行 Yellow Rose of Texas 演示程序的截图。

PPSSPP 截图 1

PPSSPP 截图 2

致谢 #

Gustave Monce (gus33000) 的概念验证,他将这个驱动移植到了骁龙 855 手机。