doitsujin

dxvk

DXVK 是一个把 Direct3D 8/9/10/11 转译为 Vulkan 的兼容层,用于在 Linux 与 Wine 上运行老 D3D 游戏。

v3.1.1
发布于
2026年9月16日
18,487
星标
12,600,103
下载
同步于
6 分钟前

最新版本

v3.1.12026年9月16日 01:43
下载慢?可在上方随时切换镜像源

项目说明

项目概述

DXVK 把 Direct3D 8/9/10/11 的绘制调用翻译成 Vulkan 命令,全程以一组替换 DLL 的形式插在游戏与驱动之间。游戏照常加载 d3d11.dll 或 d3d9.dll,实际执行的是 DXVK 的转译层,再由 Vulkan 驱动落到 GPU。它最早用于在 Wine 下跑 Windows 游戏,现在也被拿来当作原生移植的渲染后端。

项目 内容
平台 Linux、Wine,另提供 Windows 构建
语言 / 构建 C++17,Meson 0.58 以上
转译接口 D3D8、D3D9、D3D10、D3D11、DXGI
目标接口 Vulkan 1.3
版本 / 许可 3.1.1 / zlib

让 D3D 游戏以为自己跑在 Windows 上,实际走的是 Vulkan。

核心能力

  • D3D9 转译:处理固定管线与着色器模型,覆盖大量 2000 年代游戏
  • D3D11 转译:由 d3d11.dll 与 dxgi.dll 支撑 DX11 作品
  • DXGI 呈现:交换链、全屏切换与帧率限制由 dxgi.dll 接管
  • 状态合并:把冗余的管线与描述符绑定合并,降低每帧 CPU 提交开销
  • 着色器缓存:编译结果落盘复用,位置由 DXVK_SHADER_CACHE_PATH 指定
  • HUD 诊断:DXVK_HUD 可开 fps、frametimes、drawcalls、pipelines、memory 等十余项计数

集成方式

Wine 前缀

把发布包里的 DLL 复制到前缀对应目录,再在 winecfg 的 Libraries 页为 d3d8、d3d9、d3d10core、d3d11、dxgi 添加 native 覆盖:

export WINEPREFIX=/path/to/wineprefix
cp x64/*.dll $WINEPREFIX/drive_c/windows/system32
cp x32/*.dll $WINEPREFIX/drive_c/windows/syswow64
winecfg

单一 API 只需要其中一部分 DLL:

接口 需要的 DLL
d3d8 d3d8.dll、d3d9.dll
d3d9 d3d9.dll
d3d10 d3d10core.dll、d3d11.dll、dxgi.dll
d3d11 d3d11.dll、dxgi.dll

Steam 启动项

Proton 已内置 DXVK,在启动项里追加环境变量即可,%command% 之前的键值对会先于游戏进程生效:

DXVK_HUD=devinfo,fps DXVK_FILTER_DEVICE_NAME="AMD RADV" %command%

启动器与原生移植

Lutris、Bottles、Heroic 在打开 DXVK 选项后会自动放置 DLL 与覆盖项;用 DXVK Native 做原生移植时,必须通过 DXVK_WSI_DRIVER 显式指定 SDL3、SDL2 或 GLFW 窗口后端。

适用场景

  • 在 Linux 上通过 Wine 或 Proton 跑 Windows 游戏
  • 用 Lutris、Bottles、Heroic 统一管理游戏库
  • 游戏移植时复用现成的 D3D 渲染后端
  • 排查渲染问题,需要 HUD 与分级日志
  • 多显卡机器需要锁定某块 GPU

环境要求

项目 要求
操作系统 Linux 或 Wine 前缀,另提供 Windows 构建
图形接口 支持 Vulkan 1.3 以上的驱动
运行库 支持 Vulkan 的 GPU 驱动,含 32 位 ICD
构建工具 wine 10.0、Meson 0.58、Mingw-w64 10.0、glslang
权限 对目标前缀的 system32、syswow64 有写权限

注意事项

  • 联机风险:替换 D3D 库在多人游戏中可能被判定为作弊,账号存在封禁风险
  • 设备过滤:DXVK_FILTER_DEVICE_NAME 只做子串匹配,写错会过滤掉全部设备并导致无法创建 D3D 设备
  • 编译卡顿:支持 VK_EXT_graphics_pipeline_library 的驱动会在加载期预编译,弱 CPU 上占用会长时间偏高
  • 日志位置:Windows 下日志写在游戏工作目录,Linux 下需要设置 DXVK_LOG_PATH
  • 彻底移除:删掉 DLL 与覆盖设置后执行 wineboot -u,才会恢复原始 DLL

历史版本

排序