プログラミング
GloriousEggrollのProtonがProton 11にリベース
GloriousEggroll's Proton has been rebased on Proton 11 (github.com)
要約
このリリースでは、GE-ProtonがProton 11ベースに移行し、特にビデオ再生システムが大幅に刷新されたことが発表されています。長年の複雑なQuartz-GStreamerパスをQuartz-winedmo-ffmpegパスに一本化し、GStreamerライブラリを完全に排除することで、ビデオ再生の安定性と互換性を向上させました。この再構築にはAIが活用されましたが、AI生成コードに関するCodeWeaversのポリシーのため、Valveの公式Protonへのアップストリームは困難とされています。
全文翻訳
GloriousEggroll / proton-ge-custom Public ValveSoftware/Protonからフォーク Uh oh! 読み込み中にエラーが発生しました。このページをリロードしてください。通知 通知設定を変更するにはサインインする必要があります。Fork 390 Star 14.5k GE-Proton11-1リリース 最新 最新 比較 比較するタグを選択してください 申し訳ありません、問題が発生しました。フィルター 読み込み中 申し訳ありません、問題が発生しました。Uh oh! 読み込み中にエラーが発生しました。このページをリロードしてください。結果が見つかりませんでした 全てのタグを表示 GloriousEggrollが2024年6月24日02:06にリリース このリリース以来マスターに11コミット GE-Proton11-1 fd07a03
待望のビデオ再生システム再構築とProton 11へのリベースがついに完了しました!GE-Proton11-1が利用可能になりました!
Protonの更新点:
d7vkを追加(デフォルトでは無効)。有効にするには PROTON_USE_D7VK=1 を使用します。Tex Murphy: OverseerではProtonfix経由で有効になっています。
Discordブリッジを追加。(デフォルトでは無効)。有効にするには PROTON_DISCORD_BRIDGE=1 を使用します。(proton-cachyos)
optiscalerサポートを追加。(デフォルトでは無効)。有効にするには PROTON_USE_OPTISCALER=1 を使用します。(proton-cachyos)
winealsaチャンネル数オーバーライドオプションを追加。(デフォルトでは無効)。調整するには WINEALSA_CHANNELS を使用します。可能な値はスピーカーの数で、2(空間オーディオを無効にする)、4(フロント2、リア2)、6(5.1)、8(7.1)などです。(Vyrolian)
winealsa空間ダウンミックスオーバーライドオプションを追加。(デフォルトでは無効)。有効にするには WINEALSA_SPACIAL=1 を使用します。(Vyrolian)
wine-waylandでデフォルトモニターが設定されていない場合に、ホストのxrandrに頼ることなくデフォルトモニターの自動検出が機能するように、xrandrをビルドに追加しました。これは、誤ってwine-waylandのモニター設定を忘れても、デフォルトでは左端に表示される代わりに、xrandrによって検出されたデフォルトモニターに表示されるようになることを意味します。
Star Citizenのパッチを更新
Task Bar Heroのパッチを追加(thaylorz)
VRChatウェブカメラ顔追跡のパッチを追加(LilFishyChan)
ビルド全体を最新のProton 11 bleeding-edgeにリベース
VR用のスタンドアロンパッチをProton 11にリベース(これにより、Steam以外のVRゲームでSteam外のumuで使用できます)
古いゲーム向けにwine-native rsx3dライブラリを作成(Tex Murphyのようなゲームはもはやサードパーティのrsx3d winetricksを必要としません)
.exeの動的リロケーションを有効にし、リロケーションを持つファイルのみをリロケーションします。特にXIVの場合、これは低アドレス空間がすべての人や物によって埋め尽くされ、結果として一部のプラグインがフックを適用できずにゲームを不安定な状態にする問題を修正します。(0x0ade)
--ビデオ再生の再構築--
Q. 問題は何でしたか?
A. 元々、Protonは2つの異なるバックエンドでビデオ再生のために2つの方法を使用していました。1つ目は通常winedmo->ffmpegです。2つ目は通常quartz->gstreamerです。ほとんどのゲーム、特に古いゲームでは、quartz->gstreamerパスがデフォルトでした。winedmoは最近(Proton 9か10のどちらだったか覚えていませんが)ビデオ再生を修正するための現代的なアプローチとして導入されました。問題は、quartz->gstreamerパスの内部構造が複雑で変換が困難であったため、2つのパスが使用されていたことです。ffmpegとgstreamerの両方が実質的に同じことを行い、同じコーデックを処理できることを考えると、両方を使用することは意味がありません。特にgstreamerは独立してビルドする必要のあるいくつかの異なるライブラリ(gst-base, gst-good, gst-bad, gst-ugly, gst-orc, gst-libavなど)に分割されており、gstreamerにはX11 vs Wayland vs Surfacelessのような表面表示の問題もあります。
Q. どのように「修正」しましたか?
A. ご存じのとおり、前回のGE-Protonリリースは3月でした。現在は6月です。4ヶ月の空白があり、これはGEリリースの通常とは全く異なります。なぜでしょうか?それは、私が過去4ヶ月間をかけてquartz->gstreamerパスをquartz->winedmo->ffmpegを使用するように変換し、Protonビルドからすべてのgstreamerライブラリを完全に削除したからです。はい、この作業にはAIを使用しました。残念ながら、CodeWeaversのポリシーではAI生成コードを受け付けていないため、おそらくアップストリームされることはありません。
「どうやってAIを使ったんだ?」と疑問に思うかもしれませんが、それなしで行うのと同じ方法です。唯一の違いは、問題が発生したり、コードが不正確だったりしたときに、AIがコードロジックを比較するために使用されたことです。では、それはどのように機能するのでしょうか?
まず、ベースの再構築を行いました。私はwineからwinegstreamerを完全に削除し、AIエージェントに現在のコードを見てもらい、quartzがwinedmoを使用するように変換できる部分を変換させました。
次に、ビデオ再構築リストにあるゲームの約80%はquartzパスを使用し、quartz、lavfilters、amstream、dshow、wmp9、wmp11などのwinedllオーバーライドを伴うprotonfixesに依存していました。これは、有効で動作するインスタンスのwinedebugログを取得できたため、非常に好都合でした。
各ゲームのログを収集した後、私はprotonfixを削除し、クリーンなプレフィックスを作成し、次に壊れたインスタンスを実行してログを取りました。その後、動作するログと壊れたログをAIエージェントに与えて比較し、オーバーライドが有効で動作しているときにWINEが何をしていたのか、ネイティブで壊れているときに何をしていたのかを確認しました。ほとんどすべての場合で、エージェントはすぐに違いを特定し、オーバーライドが有効であったかのようにビデオが機能するために必要なネイティブコードを修正または実装することができました。これは少量の試行錯誤と再試行で可能でした。
さらに、ゲームがビデオファイルを提供している場合、私はAIエージェントにそれらのファイルを指示し、どのような種類のファイルであるかを適切に分析させて、それらを再生する機能をwineに実装できるようにしました。
Darksiders Warmastered EditionやNukitashi 2のような「ゼロから」修正する必要があり、多くの試行錯誤が必要なゲームはごくわずかでした。
このプロセスで、私は以前The MediumやMetal Gear Solid Vで使用されていたオーディオ修正など、他のゲームを壊さない解決策を実装し、いくつかのゲーム固有のハックを排除することにも成功しました。
また、多くのビジュアルノベル(VN)ゲームが修正されたこともわかるでしょう。これらのゲームの多くは同じいくつかのエンジンを使用しており、1つか2つを修正すれば、同じエンジンを使用している残りのゲームも修正されました。実際、私たちは32ビットビデオ再生に必要な一部のライブラリが不足しているSteamランタイム4のバグまで発見し、アップストリームに報告して修正させることができました(この理由でliblzmaとxzがビルドに追加されています)。
以下は、古いquartzの動作と新しい動作の詳細な内訳です:
• 現在のQuartzフロー
Quartz / DirectShowを使用するゲームの場合:
ゲームはIGraphBuilder::RenderFile()を呼び出すか、手動でグラフを構築します。
quartz/filesource.cはメディアを識別します:
利用可能な場合は拡張子/レジストリ。
拡張子のないASFファイル(例: Persona 4 Arena Ultimax)のASFヘッダー sniffing。
ASFファイルの場合、RenderFile()は現在次のものを試行します:
最初にAsyncReader。
非同期レンダリングが失敗した場合はWMAsfReaderにフォールバック。
FilterGraph2_Render()はグラフを自動プラグインします。
一般的なfiltermapper列挙の前に、Quartzは明示的に既知の良好なパスを試行します:
MPEGストリーム -> MPEG-I Stream Splitter
MPEGビデオ -> Wine MPEGビデオデコーダー
AC3オーディオ -> winedmo AC3デコーダー
WMAオーディオ -> winedmo WMAデコーダーをラップするDMOWrapperFilter
これらのいずれも適用されない場合、通常のIFilterMapper2_EnumMatchingFilters()にフォールバックします。
デコードは、winegstreamerの代わりにFFmpegをバックエンドとするwinedmoを介してルーティングされるようになりました。
オーディオレンダラーは圧縮オーディオを拒否し、PCM / float PCMのみを受け入れ、グラフに最初にデコーダーを挿入することを強制します。
ビデオ出力は引き続き通常のQuartzビデオレンダラーパスに着地します:
グラフが構築するものに応じて、DDraw / VMRスタイルのサーフェス。
以前
再構築前は、Quartzは標準のWine DirectShowパスに大きく依存していました:
ソースフィルターの選択は主に拡張子/レジストリ駆動でした。
ASFファイルは通常、直接WMAsfReaderに行きました。
フィルター挿入は、一般的なfiltermapper列挙に大きく依存していました。
一部の圧縮オーディオが誤ってDSoundRenderに到達し、バッファ作成の失敗や部分的なレンダリングの失敗を引き起こす可能性がありました。
多くのメディア処理はまだ...