开源图形驱动也可以流畅 Wine “原生的” DX9!

想在 Linux 里 Wine 点什么 Direct X 游戏? 买 A 卡啦? Intel 集显啦? 用 nouveau 开源驱动啦? 哈哈哈哈哈哈哈哈(大雾

其实我们改改 Gallium3D (Mesa) 再改改 Wine 的话, Direct X 9 还是可以跑得刷刷的快的哦~! (虽然这个其实不是新闻了)

首先解释一下原理, Gallium3D 拥有一种被称为 “State Tracker” 的机制, 下面的介绍翻译自维基百科:

Gallium3D 提供了一个统一的 API, 将标准的硬件功能暴露出来, 比如现代硬件中的着色器单元. 因此, 如 OpenGL 1.x/2.x, OpenGL 3.x, OpenVG, GPGPU 平台, 或者甚至 Direct3D (存在于 Wine 兼容层中) 都将只需要一个后端 – 被称为 state tracker, 来描述 Gallium3D 的 API 调用.

至于写本文的目的呢, 除了给大家介绍这样一个好玩的功能以外, 主要是非常希望有人能参与这个项目的继续开发 (现在这个项目又快被抛弃了(没准已经被抛弃了)).

(猫比较懒, 没有制作打好 patch 并改名的 PKGBUILD, 因此…嗯)

1. 首先我们需要的 patch 们在这里: http://download.ixit.cz/d3d9/mesa-10.0-d3d-0b75a4b.patch (mesa) 和这里: http://ix.io/b0y (wine)
注意经本猫测试, mesa 10.1.0 目测和这个 patch 不能直接兼容, 所以我们用 10.0.3 的 mesa 来测试~

2. 从 ABS 里下载需要的 PKGBUILD. 如果有安装 yaourt 工具的话, 可以直接跑:

$ yaourt -G mesa lib32-mesa wine

(如果你使用的是 32 位系统, lib32-mesa 可以省去)
(如果遇到奇怪的 404 Not Found 问题, 可以去这里这里下载…)

3. 修改 mesa 的 PKGBUILD.
3.1 首先修改版本为 10.0.3, 理由之前已经解释过了.
3.2 在 source 数组中新增 mesa-10.0-d3d-0b75a4b.patch, 并相应修改 md5sums 数组. (如果你和本猫一样懒, 可以直接把 md5sums 数组的内容写成两个 ‘SKIP’)
3.3 在运行 autoreconf 前, 加入这样的语句:

patch -p1 -i "$srcdir/mesa-10.0-d3d-0b75a4b.patch"

3.4 修改编译选项, 在 “–enable-gallium-llvm \” 后面加入:

--enable-nine \

4. OK! 跑 makepkg 吧~ (如果有提示缺少依赖的话, 装上就好)

5. 依葫芦画瓢, 给 lib32-mesa 以及 wine 加上相应的补丁, 然后编译吧~ (lib32-mesa 和 mesa 需要做相同的修改哟)

6. 安装上编好的包, 重启!

7. 打开注册表编辑器 regedit, 找到 HKCU->Software->Wine->Direct3D (最后一层如果没有, 就右键创建), 然后创建一个名为 UseNative 的 DWORD 值, 值为 1. (想关掉”原生” Direct3D 支持的话, 把这个键值改为 0 即可.)

8. 打开你想测试的 wine 游戏试试吧!

PS: 本猫提供了一些编好的包可以自己用哦, 包括 mesa/lib32-mesa 10.0.3 的 patch 好的版本, 以及 wine-multimedia 改好的版本(多了一个 multimedia 补丁, 主要是 pulseaudio 支持等音频方面的修改) 地址在: http://pkgbuild.com/~fyan/staging/wine_d3d9/

补丁作者测试了 Crysis 和 Bioshock 有显著的 fps 提升, 幅度可以达到近一倍; 而本猫测试了 Skyrim, Civilization V 等游戏, 甚至能有两倍的 fps 提升哟 😛 (虽然和闭源驱动相比还是有相当差距…)

附测试结果: (我的显卡是 Nvidia 650 Ti)
游戏名/开源驱动+Wine(fps)/开源驱动+Wine+Direct3D ST(fps)/闭源驱动+Wine(fps)/开源驱动+Linux 原生版本(fps)
Skyrim/8/25/60/
Civilization V/20/40/60/
东方辉针城/60/120/60/ (嗯, 这里 Direct3D 的 ST bug 掉了, 游戏速度无比快…)
Left 4 Dead 2/25/50/60/40 (超过 Linux 原生版本了!!!)
Kerbal Space Program/10/35/60/25 (又超过 Linux 原生版本了!!!)

参考资料 (补丁作者自己写的介绍原文): http://ixit.cz/faster-wine-games-with-open-source-drivers-d3d9-aka-gallium-nine/

QR Code Business Card