DXVK 是一个开源的转换层,可以将 Direct3D 8/9/10/11 调用转换为 Vulkan。它被 Linux 版 Proton/Steam、Intel Windows 驱动程序和 VirtualBox 7.x 使用,并且可用于在 Windows 下使用 Vulkan 运行基于 Direct3D 的游戏。
发展历史
DXVK 最初由 Philip "doitsujin" Rebohle 开发,当时他刚毕业并正在寻找第一份工作。该项目最初源于他对《尼尔:机械纪元》(Nier: Automata)的热爱,旨在让这款游戏能在 Linux 上运行。当时,他对 Wine 的 Direct3D 11 转 OpenGL 转换层性能低下感到不满,同时也深受 AMD 驱动程序错误的困扰,导致无法在 Windows 上游玩该游戏。他萌生了将游戏图形渲染转换为当时刚发布的 Vulkan API 的想法,并于 2017 年底实现了这一目标。Rebohle 于 2018 年 1 月公开了该项目。由于这种方法显然具有更广泛的应用前景,Valve 很快便联系了他并提供了一份工作合约。他随后受雇致力于提升 Linux 版 Steam 对 Windows 游戏的兼容性。
2019 年,DXVK 通过合并 d9vk 项目,获得了对 Direct3D 9 的支持。
2022 年 11 月,2.0 版本发布,改进了 Direct3D 9 的内存管理、着色器编译和状态缓存机制,并增加了对 Direct3D 11 功能级别 12_1 的支持。17 该版本现要求支持 Vulkan 1.3。
2023 年 1 月 24 日发布的 2.1 版本实现了 HDR 支持,并提升了部分老游戏的画质。
2023 年 5 月 12 日发布的 2.2 版本增加了对 D3D11On12 的支持。
2024 年 7 月 10 日发布的 2.4 版本增加了对 Direct3D 8 的支持。
2024 年 11 月 11 日发布的 2.5 版本对内存和资源管理进行了全面重构,使得部分游戏的显存(VRAM)占用减少了多达 1 GB。此外,Direct3D 8 和 9 也获得了对软件光标的支持。2026年6月,DXVK 3.0 用 dxbc-spirv 替代了原有的 DXBC 着色器转换代码,从而降低了部分游戏的内存占用,并将更多的着色器编译工作从应用程序线程中剥离出来。该版本还开始要求具备 Vulkan 1.4 时代的驱动程序支持。建议在 Windows 上使用 AMD RDNA 1.0 和 RDNA 2.0 架构显卡的用户不要使用 DXVK 3.0,因为“这些 GPU 的 Windows 驱动程序已不再接收功能更新,仅能使用缓慢的旧版绑定模型,且存在其他驱动程序中未见的严重性能问题”。
最新版本引入了一些新功能和修复,旨在改善通过 Wine、Proton 和 Steam Play 在 Linux 上运行 Windows 应用程序或游戏时的体验。
新版本增加了对 DXGI 呈现参数(present parameters)的基本支持。该功能允许应用程序在向屏幕呈现帧时,告知 Windows 哪些区域发生了变化,哪些区域可以复用上一帧的内容,从而避免在显示帧时进行不必要的计算或处理。
DXVK 对此功能的支持解决了 VirtualDJ 中的 UI 渲染问题,并改善了 Linux 上对各种游戏启动器的支持。
DXVK 3.1 还实现了直接在缓冲区(buffer)上创建渲染目标视图(render target views)的功能。这修复了《战地 3》(Battlefield 3)在某些情况下长期存在的云层渲染错误问题。
当 DXVK 在 Intel GPU 上运行时,现在会利用 Intel 提供的额外 Vulkan 功能(如果可用)。这类似于 AMDAGS 和 NVAPI 扩展,为未来 Intel 专有的 D3D11 特性支持做好了准备。
新版本还改进了对外部覆盖层(overlays)的支持,并修复了部分游戏的问题。现在,渲染工作被更积极地限制在图像中真正需要渲染的区域,特别是在使用分块渲染(tiling)架构的 GPU 上。
为了便于排查问题,新版本为 NVIDIA 用户增加了一个配置选项,允许显式禁用 VK_NVX_* 扩展(注意:这也会导致 DLSS 支持被禁用)。
其他更改主要涉及错误修复,包括:
- 修复了《洛奇》(Mabinogi)和《巫师 1》(The Witcher 1)的渲染问题。
- 修复了应用程序尝试编译 D3D12 专用着色器时发生的崩溃问题。
- 针对在启用描述符堆(descriptor heaps)时 NVIDIA GPU 发生的崩溃问题提供了变通修复方案。
- 修复了《幽灵行动:断点》(Ghost Recon Breakpoint)、《镜之边缘》(Mirror's Edge)和《RaceRoom
Racing Experience》的相关问题。
更多详情及源代码,请参阅 GitHub 发布页面。
Ubuntu下如何安装 DXVK 3.1
Proton 及其衍生版本(如 Proton-GE)已内置 DXVK。请根据您使用的游戏启动器,选择下载并使用最新版本的 Proton。对于 Wine,您可以运行 winetricks --gui,选择“Select the default wineprefix”(选择默认 wineprefix),然后选择“Install a Windows DLL or component”(安装 Windows DLL 或组件),最后选择安装 DXVK (latest)。
若要使用 DXVK,请在终端中设置环境变量 DXVK_HUD=version,或者在启动器的首选项对话框中进行设置。