GloriousEggroll的Proton已基于Proton 11重编译
速览
知名Linux游戏兼容性工具GloriousEggroll的Proton版本已更新至基于Proton 11。此次重编译旨在利用Proton 11的新特性提升游戏兼容性与性能。该更新对Linux平台玩家及Valve的Steam Deck等设备具有重要意义。
AI 深度解读
GloriousEggroll 的 Proton 已基于 Proton 11 重构:视频播放引擎重大革新
背景
GloriousEggroll(简称 GE)是 Linux 游戏生态中至关重要的第三方 Proton 维护者。Proton 是 Valve 开发的基于 Wine 的兼容性层,旨在让 Windows 游戏能在 Linux 上运行。GE-Proton 作为社区维护的分支,通常比官方 Proton 更新更频繁,并包含大量针对特定游戏的修复补丁(protonfixes)。
长期以来,Proton 在处理游戏内视频播放时存在架构上的复杂性。原有的实现依赖两条不同的后端路径:一条是较新的 winedmo -> ffmpeg 路径,另一条是较旧的 quartz -> gstreamer 路径。对于大多数游戏,尤其是老游戏,系统默认使用 quartz -> gstreamer 路径。然而,GStreamer 库结构复杂(分为 base、good、bad、ugly 等多个子库),且在不同显示协议(X11、Wayland、Surfaceless)下存在表面显示问题。这种双重路径不仅增加了维护负担,也导致了视频播放的不稳定性。
经过长达四个月的重构,GloriousEggroll 宣布 GE-Proton11-1 版本正式发布。此次更新不仅将底层基于最新的 Proton 11 bleeding-edge 版本进行了重基(rebase),更彻底重构了视频播放后端,移除了对 GStreamer 的依赖,转而全面采用 winedmo + FFmpeg 方案。
核心内容
1. 视频播放引擎的重构(The Video Playback Rework)
这是本次更新的核心亮点。作者详细解释了重构的动机、过程及结果:
-
问题根源:原有的
quartz->gstreamer路径内部逻辑复杂,且 GStreamer 需要构建多个独立库,维护成本高。相比之下,FFmpeg 和 GStreamer 都能处理相同的编解码器,因此保留两条路径并无必要。 -
解决方案:作者花费四个月时间,将
quartz路径从依赖 GStreamer 转换为依赖winedmo->ffmpeg。在此过程中,作者完全从 Proton 构建中剔除了所有 GStreamer 库。 -
AI 辅助开发:作者承认使用了 AI 辅助代码转换。虽然 CodeWeavers(Wine 的主要维护者)的政策不接受纯 AI 生成的代码用于上游合并,但作者利用 AI 进行代码逻辑对比和错误排查。具体流程包括:
- 基础重构:移除
winegstreamer,让 AI 分析代码并将quartz指向winedmo。 - 日志对比分析:约 80% 的游戏依赖
protonfixes中的 DLL 覆盖(如lavfilters,amstream,dshow等)。作者收集了这些游戏在覆盖生效时的正常winedebug日志,以及移除覆盖后的失败日志,输入 AI 进行对比。AI 能够快速识别差异,并自动补充缺失的原生代码以实现视频播放。 - 针对性修复:对于提供视频文件的游戏,作者让 AI 分析文件格式以优化 Wine 的播放能力。少数游戏(如《暗黑血统:战神版》和《Nukitashi 2》)需要从头修复,经过多次试错才成功。
- 清理遗留问题:移除了部分游戏特定的 Hack(如针对《The Medium》和《合金装备 V》的音频修复),并发现了 Steam Runtime 4 中缺失 32 位视频播放所需库的 Bug,已在构建中添加了
liblzma和xz。
- 基础重构:移除
-
新旧流程对比:
- 新流程:更确定化。游戏调用
IGraphBuilder::RenderFile()-> 源检测/ASF嗅探 -> 选择AsyncReader或WMAsfReader-> 显式匹配已知解码器/分离器 ->winedmo/FFmpeg 解码 -> PCM 音频送至DSoundRender-> 解码后的视频送至 Quartz 视频渲染器。 - 旧流程:依赖扩展名/注册表选择源 -> ASF 文件直接走
WMAsfReader-> 依赖通用的FilterMapper枚举 -> 部分压缩音频可能错误直达DSoundRender导致失败 -> 严重依赖winegstreamer和游戏特定覆盖。
- 新流程:更确定化。游戏调用
2. Proton 11 重基与功能更新
GE-Proton11-1 基于最新的 Proton 11 开发版本,并引入了多项新功能:
- d7vk 支持:添加了 d7vk(DirectX 9 到 Vulkan 的转换层),默认未启用。用户可通过设置环境变量
PROTON_USE_D7VK=1启用。目前已在《Tex Murphy: Overseer》中通过 protonfixes 启用。 - Discord 桥接支持:添加了 Discord 桥接功能,默认未启用。用户可通过设置环境变量
PROTON_DISCORD_BRIDGE=1启用(源自 proton-cachyos)。 - Optiscaler 支持:添加了 Optiscaler(一种基于 AI 的图像缩放工具)支持,默认未启用。用户可通过设置环境变量
PROTON_USE_OPTISCALER=1启用(源自 proton-cachyos)。 - WineALSA 音频通道覆盖:
- 新增
WINEALSA_CHANNELS选项,允许用户指定扬声器数量(如 2 用于禁用空间音频,4 用于 2.0 立体声,6 用于 5.1,8 用于 7.1)。 - 新增
WINEALSA_SPACIAL=1选项,用于覆盖空间音频混音(源自 Vyrolian)。
- 新增
- Xrandr 集成:将
xrandr加入构建中,使得 Wine-Wayland 在无默认显示器设置时,能自动通过xrandr检测并使用默认显示器,避免默认显示在最左侧的问题。 - Star Citizen 补丁更新:更新了《星际公民》的相关补丁。
- 新增游戏补丁:
- 《Task Bar Hero》(由 thaylorz 提供)。
- 《VRChat》摄像头面部追踪(由 LilFishyChan 提供)。
- VR 独立补丁重基:VR 的独立补丁已重基至 Proton 11,允许用户在非 Steam 平台上使用 UMU 运行非 Steam VR 游戏。
- Wine-Native RSX3D 库:创建了
wine-native rsx3d库,用于支持老游戏(如《Tex Murphy》系列),使其不再需要第三方winetricks中的 rsx3d。 - EXE 动态重定位优化:启用了
.exe动态重定位,并仅对具有重定位信息的文件进行重定位。这一改动特别解决了《最终幻想 XIV》(XIV)中因地址空间不足导致插件挂钩失败、游戏状态不稳定的问题(由 0x0ade 提供)。
关键要点
- 彻底移除 GStreamer:Proton 构建中不再包含 GStreamer 库,视频播放统一转向
winedmo+FFmpeg路径,简化了依赖并解决了跨显示协议(X11/Wayland)的显示问题。 - AI 辅助代码重构:作者利用 AI 对比工作日志与失败日志,自动化识别并修复了大部分游戏的视频播放问题,大幅提高了修复效率。
- Proton 11 底层更新:GE-Proton 正式跟进 Proton 11 bleeding-edge 版本,确保底层兼容性。
- 新特性默认关闭:d7vk、Discord 桥接、Optiscaler 等新特性均未默认启用,需用户手动设置环境变量开启。
- 音频与显示优化:新增了 WineALSA 的通道数和空间音频混音控制选项;改进了 Wayland 下的
