← 返回信息流
AI 资讯Hacker News·1 天前

GloriousEggroll的Proton已基于Proton 11重编译

原标题:GloriousEggroll's Proton has been rebased on 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 进行代码逻辑对比和错误排查。具体流程包括:

    1. 基础重构:移除 winegstreamer,让 AI 分析代码并将 quartz 指向 winedmo
    2. 日志对比分析:约 80% 的游戏依赖 protonfixes 中的 DLL 覆盖(如 lavfilters, amstream, dshow 等)。作者收集了这些游戏在覆盖生效时的正常 winedebug 日志,以及移除覆盖后的失败日志,输入 AI 进行对比。AI 能够快速识别差异,并自动补充缺失的原生代码以实现视频播放。
    3. 针对性修复:对于提供视频文件的游戏,作者让 AI 分析文件格式以优化 Wine 的播放能力。少数游戏(如《暗黑血统:战神版》和《Nukitashi 2》)需要从头修复,经过多次试错才成功。
    4. 清理遗留问题:移除了部分游戏特定的 Hack(如针对《The Medium》和《合金装备 V》的音频修复),并发现了 Steam Runtime 4 中缺失 32 位视频播放所需库的 Bug,已在构建中添加了 liblzmaxz
  • 新旧流程对比

    • 新流程:更确定化。游戏调用 IGraphBuilder::RenderFile() -> 源检测/ASF嗅探 -> 选择 AsyncReaderWMAsfReader -> 显式匹配已知解码器/分离器 -> 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 下的
查看原文 →github.com