本文于 2025-11-21 15:10 更新,部分内容具有时效性,如有失效,请留言
vkd3d 团队正式发布 vkd3d 1.18。作为 Wine 项目维护的开源库,vkd3d 的使命是将 Microsoft Direct3D 图形调用转换为 Vulkan,从而让大量依赖 Direct3D 12 的 Windows 应用与游戏在仅支持 Vulkan 的平台上运行(例如 Linux 系统、Steam Deck 等)。
本次更新内容丰富,涵盖 D3D12 接口扩展、HLSL 编译器优化、旧版字节码改进,以及 Metal / GLSL 实验性后端增强,堪称跨平台兼容性的一次重要升级。

⭐ 更广的 Direct3D 12 支持
vkd3d 1.18 增加了对 ID3D12Device4::CreateCommandList1() 的支持,这是现代 Windows 游戏广泛使用的新接口之一,进一步提升了与最新游戏引擎的兼容度。
⭐ HLSL 编译器的大幅提升(本次最大亮点)
新版对 HLSL 处理进行了全面升级,重点包括:
✔ 更智能的优化
- 执行更多常量折叠(Constant Folding)
- 简化数学表达式
- 在旧版 Shader Model 需要的场景中自动扁平化 if/else 分支
这些优化能显著提升翻译效率、减少运行异常。
✔ 更广泛的 Shader Model 支持
- 改进旧版 Shader Model 1–3 的转换能力
- 增加 StructuredBuffer 加载
- 实现多个常用 HLSL inline 内联函数
这对许多老游戏和旧引擎的兼容性非常关键。
⭐ 旧版 Direct3D 字节码更好用了
对旧版 Direct3D 的字节码(D3D Bytecode)进行了重要增强:
- 新实现了 tex、texcoord、texbem、bem 等纹理操作指令
这些改进能帮助早期 DirectX 游戏更可靠地翻译 Shader,使画面效果更稳定、Bug 更少。
⭐ 实验性后端:Metal 与 GLSL 同样进步显著
🔧 Metal Shading Language (MSL) 后端
MSL 路径新增以下能力:
- 支持 Compute Shader(计算着色器)
- 支持更多数学函数
- 支持整数/浮点数除法与取余
- 正确转换有符号 min/max 运算
- 支持 直接 HLSL → MSL 转换
这对 macOS 及 iOS 平台意义重大,特别是在跨平台游戏移植领域。
🔧 GLSL 后端
GLSL 方向新增了:
- 屏幕空间导数(Screen-space derivatives)
- sin/cos 等三角函数
- 无符号除法
- 纹素偏移(Texel offset)
- 多种常见 Shader I/O 功能
使 Vulkan → OpenGL 的兼容性更好、更稳定。
⭐ 其他改进
- 文本格式的着色器输出现在带 尾随零字节(null terminator),方便传给要求 C-string 的 API
- 为旧的 D3DBC Shader 新增更多元数据
- 新增凹凸贴图相关参数
- Metal 后端更清晰地公开计算线程组大小(对 Compute Shader 很关键)
本次更新整体围绕“兼容性、优化与跨平台”展开,对 Wine、Proton、Linux Gaming、游戏移植都有重要意义。

