異度之刃3
Switch模擬器Ryujinx進(jìn)度報告2022-7月
現(xiàn)在是八月。
七月發(fā)生了太多事情,以至于感覺比區(qū)區(qū)的 31 天要長得多。 一個新的 異度之刃,精靈寶可夢,patreon 目標(biāo)終于實現(xiàn)了; 我們真的要記住這個月。 那么,我們?yōu)檫@份進(jìn)度報告準(zhǔn)備了什么? 我們對所有更改進(jìn)行了定期總結(jié),對 AMD 進(jìn)行了一些討論(最近似乎是一個片段),而且,不要忽視它,這是一個大標(biāo)志,如果您需要了解 Vulkan 請閱讀之前的文章!
沒有必要再拖延了,所以在我們開始之前,請先看看我們的 patreon 目標(biāo)。
Patreon目標(biāo):
Vulkan GPU 后端 – 已合并!
ARB 著色器 – 2021 年 4 月達(dá)到的目標(biāo)。
工作正在進(jìn)行中,請稍等片刻,直到我們能夠?qū)⒋烁陆桓兜轿覀儩M意的狀態(tài)。
通過使用 OpenGL API 提高 NVIDIA GPU 上的著色器編譯速度,ARB 著色器將進(jìn)一步減少首次運(yùn)行時的卡頓。
2000 美元/月 – 紋理包/替換功能 – 快到了!
這將有助于替換游戲中的圖形紋理,從而實現(xiàn)自定義紋理增強(qiáng)、備用控制器按鈕圖形等。
一旦目標(biāo)得以維持,預(yù)計到達(dá)時間:~3-4 周
2500 美元/月 – 一名全職開發(fā)人員 – 尚未見面。
這筆每月捐款將允許該項目的創(chuàng)始人 gdkchan 全職開發(fā) Ryujinx。 我們所有的貢獻(xiàn)者目前只在業(yè)余時間從事該項目!
5000 美元/月 – 額外的全職開發(fā)人員 – 尚未見面。
這筆每月捐款將允許額外的 Ryujinx 團(tuán)隊開發(fā)人員全職從事該項目。
顯卡:
分辨率縮放修復(fù)本月讓我們邁出了一大步,riperiperi 解決了縮放某些 Unity(虛幻引擎) 游戲時特別煩人的錯誤,例如 時光之帽 和 Cruis’n Blast(賽車競速游戲)。 當(dāng)這些游戲的縮放比例超過原始分辨率時,這些游戲會在屏幕上涂上紅色,這使得縮放這些游戲有點像一把雙刃劍。 幸運(yùn)的是,這里的解決方案是簡單的 避免縮放這些反叛紋理 ,同時繼續(xù)縮放其它所有內(nèi)容。
解決了屏幕上出現(xiàn)的紅色渲染錯誤
解決了屏幕上的紅色渲染錯誤
SD高達(dá)戰(zhàn)斗聯(lián)盟演示在發(fā)布時啟動,但不幸的是在游戲中崩潰。 原因被追查為 DMA 線性紋理副本的快速路徑中的錯誤,但通過 強(qiáng)制 FindTexture 方法僅匹配具有 精確 副本高度 的線性紋理,游戲現(xiàn)在啟動并且看起來運(yùn)行良好。
SD高達(dá)戰(zhàn)斗聯(lián)盟
我們?nèi)绾喂芾聿蓸悠鞒氐膯栴}終于在本月出現(xiàn),在 女仆向右跑 中表現(xiàn)不佳。 考慮到這款游戲在視覺上的基礎(chǔ)性,令人驚訝的是它在現(xiàn)代硬件上難以達(dá)到 30FPS 以上。 紋理池緩存的硬限制為 4,這意味著如果游戲需要使用超過4這個值,則 4 個中的一個將被刪除,并且需要在需要時重新創(chuàng)建,從而導(dǎo)致創(chuàng)建時的一些主要性能下降。 通過創(chuàng)建采樣器池緩存并更好地評估何時可以安全地處理池,大大提高了超過 4 個限制的游戲的性能。 大多數(shù)游戲只使用一個紋理池,所以不會影響到其它游戲。
女仆向右跑
JUMP 大亂斗 豪華版 是一款在相當(dāng)長一段時間內(nèi)都 非常接近 圖形準(zhǔn)確的游戲,唯一剩下的主要視覺錯誤和場景中出現(xiàn)綠光。
JUMP 大亂斗 豪華版出現(xiàn)的綠光
這里的問題是著色器上的一個簡單的數(shù)據(jù)丟失錯誤。 由于解碼器在某些情況下沒有考慮分支指令,因此生成的著色器代碼會跳過一些重要信息。 通過修復(fù)這個遺漏, gdkchan 終于在這個特殊的游戲上解決了。
JUMP大亂斗豪華版 正常的樣子
關(guān)于它們可能不應(yīng)該存在的大型光源的主題:幻影異聞錄,容我們說, 太陽的光 導(dǎo)致游戲幾乎無法玩的 這是游戲使用的綻放的問題,并且再次是生成的著色器的問題。 通過支持條件退出,我們的視網(wǎng)膜得到了保護(hù)!
幻影異聞錄
新的 怪物獵人:崛起 DLC 需要進(jìn)行一些困難的更改才能渲染,這些更改正在逐步推出。 其中第一個允許游戲通過將無約束消除擴(kuò)展到與常量句柄相結(jié)合的著色器來達(dá)到其初始屏幕。
怪物獵人崛起
其中的第二個通過 擴(kuò)展著色器優(yōu)化器以傳播 phi 節(jié)點來 。 不幸的是,我們在這里沒有圖像比較,因為即使是渲染游戲也需要更多的 WIP 更改。 希望在未來的報告中會有完整的整個 DLC 包得前后對比!
自著色器緩存 2.0 以來,積壓中的一些舊更改終于能夠完成,包括在覆蓋抖動中添加 alpha。 對于任何不知道的人:“抖動”是指計算機(jī)圖形中的一種效果,其中對象或紋理使它們看起來參差不齊:
二哈?
在復(fù)古視頻游戲中,這被用來為原本泥濘的紋理增加深度; 它最終變得相當(dāng)標(biāo)準(zhǔn)化,作為一種在攝像機(jī)向后移動時使固體物體呈現(xiàn)半透明以保持玩家視野的方法。
寶可夢傳說:阿爾宙斯 在環(huán)境模型(例如樹木和巖石)上使用抖動,但以前沒有模擬這種效果,因為它需要在新著色器格式中引入新的著色器專用化。 gdkchan 在緩存重寫之前嘗試對此進(jìn)行修復(fù),但如果沒有著色器專用化,抖動仿真將需要存在于每個單獨的片段著色器上,即使著色器永遠(yuǎn)不會使用它。 這些問題都 在這個新的實現(xiàn)中得到了解決。
寶可夢傳說:阿爾宙斯
還刪除了 DMA 處理程序中的一些冗余分配, 由于播放期間的 動畫 卡頓較低,這可能會導(dǎo)致 FMV(全動態(tài)視頻)播放的一些小優(yōu)化。 這里的結(jié)果很難衡量,但這有望消除視頻播放中較簡單的瓶頸之一。
為了結(jié)束 GPU 部分,我們 添加了一個微不足道的 Vulkan 后端 。 不是太大,這里沒有大的變化,只有 40,000 行代碼。非常優(yōu)秀!
flatpak 需要快速更新 以確保它不會在選擇 Vulkan 時崩潰,我們現(xiàn)在 避免為未使用的常量緩沖區(qū)添加著色器緩沖區(qū)描述符 ; 一個影響 OpenGL 的更改,但可能會給 Vulkan 帶來輕微的性能提升。
CPU/服務(wù):
7 月還帶來了一些新的 CPU 和服務(wù)修復(fù)、實現(xiàn)和存根; 其中第一個是幾個 BSD(網(wǎng)絡(luò)套接字)修復(fù)。 現(xiàn)在可以在“接收”方法中使用 DontWait 標(biāo)志,并且現(xiàn)在可以 的情況 處理通過網(wǎng)絡(luò)交換字節(jié)大小選項 新發(fā)布的《超級馬里奧奧德賽 Online》模組部分需要這些更改中的第二個,并修復(fù)了《神界原罪 2》中的崩潰回溯。
超級馬里奧奧德賽 Online
當(dāng)我們嘗試模擬整個 Switch 時,有一些服務(wù)是大多數(shù)用戶甚至可能不會想到的 PC 模擬器。 其中之一是恰當(dāng)命名的“GetTemperature”服務(wù),您可能已經(jīng)猜到了,它以攝氏度為單位報告 Switch 的內(nèi)部溫度。 此服務(wù)導(dǎo)致自制啟動器在啟動期間崩潰,因為它試圖探測此數(shù)據(jù)。 ( 存根設(shè)置了 42 攝氏度的恒定溫度 顯然采取了 69 攝氏度……),這似乎滿足了自制軟件的環(huán)境需求。
42
隨著在 Switch 上發(fā)布 傳送門 合集,在我們的服務(wù)和 CPU 模擬中都發(fā)現(xiàn)了兩個問題。 第一個是我們的 Vi 服務(wù)中的一個不準(zhǔn)確 問題,通過 gdkchan 的 RE 很快解決了 ,第二個是 FCVT Half to Double 轉(zhuǎn)換指令的實現(xiàn)。 通過這些更改,傳送門 1 和 2 都可以啟動,傳送門 1 基本上沒有錯誤。 Portal 2 仍然存在一些圖形問題,即不應(yīng)該剔除的對象。
傳送門 合集
用戶界面:
用戶界面開發(fā)在 7 月份非?;鸨?,盡管沒有多少普通用戶會看到很多事情發(fā)生。 到目前為止,我們已經(jīng)多次提到我們向 Avalonia 的轉(zhuǎn)變,就在最近,我們指出項目的第 1 部分正在合并。
好吧,第 1 部分可以離開了,因為 7 月合并了第 2 部分和第 3 部分,從而使新 UI 與當(dāng)前的 GTK 實現(xiàn)相提并論。
第 2 部分 實現(xiàn)了完整的設(shè)置窗口:
UI設(shè)置窗口
第 3 部分 添加了剩余的上下文窗口:
上下文界面
但是,雖然這些是核心更改,但它們?yōu)槿魏呜暙I(xiàn)者現(xiàn)在可以帶來的修復(fù)、添加和調(diào)整打開了閘門。 項目文件被清理了 一次 、 兩次 ,然后進(jìn)行了一些 生活質(zhì)量調(diào)整 。
這包括為所有項目啟用“分層編譯”。 Avalonia 是一個完全“JITed”的框架,而 GTK 被認(rèn)為是“Native”,這意味著 .NET 運(yùn)行時通常必須在第一次運(yùn)行時做很多工作,即使在程序編譯后也是如此; 分層編譯允許 .NET 啟動應(yīng)用程序而無需應(yīng)用其所有代碼優(yōu)化,從而加快 GUI 啟動時間并總體上減少應(yīng)用程序延遲。 隨著程序越來越頻繁地啟動,.NET 可以隨著時間的推移逐漸開始執(zhí)行這些優(yōu)化,而不是一次全部轉(zhuǎn)儲。 這也為 GTK 啟用了,但作為一個“原生”框架,GTK 不需要像 Avalonia 那樣在 GUI 啟動上做那么多工作。 當(dāng)我們第一次運(yùn)行啟用此功能的 Avalonia 應(yīng)用程序時,我們看到從 14 秒縮短到 3 秒。
“提前”編譯還完成了與分層編譯類似的任務(wù),通過將一些首次運(yùn)行成本轉(zhuǎn)移到編譯過程中來減少延遲。 這種方法的缺點是文件大小最多增加了 3 倍,開發(fā)團(tuán)隊認(rèn)為對于分層編譯的微小改進(jìn)來說成本太高了。
既然已經(jīng)實現(xiàn)了功能對等,Emmaus(首席 UI 開發(fā)人員)也開始從 GTK 分支出來。 而 用戶配置文件編輯器現(xiàn)在使用單個內(nèi)容對話框, 不是每個選項的新單獨窗口。 這意味著更流暢的體驗,更少的混亂和打開和關(guān)閉窗口之間的延遲,也為即將到來的數(shù)據(jù)管理器( 保存管理器 已經(jīng)在工作)的進(jìn)一步此類內(nèi)容對話框奠定了基礎(chǔ)。
用戶配置
除了這些之外,還進(jìn)行了許多其它雜項更改,包括:
1)一些語法修復(fù) 工具提示和選項 包括 GTK 。
2)對 Avalonia 的工具提示進(jìn)行了改進(jìn) ,然后 向后移植到 GTK。
3)簡體中文區(qū)域設(shè)置 并 添加了繁體中文。
4)彈出菜單添加了邊框。
5)錯誤修復(fù) 鼠標(biāo)輸入 、 顯示控制臺切換 和 光標(biāo)隱藏 已實現(xiàn)。
6)添加了一種解決方法, 允許單擊時切換菜單項 而不是僅在其復(fù)選框中切換(當(dāng) Avalonia 解決此疏忽時將被刪除)。
7)修復(fù)了 嘗試切換控制器中間映射時程序崩潰的錯誤。
正如您可能看到的,這一切都開始了,在 Avalonia 成為每個人在啟動時都會看到的默認(rèn) UI 之前,我們已經(jīng)有一個更長的錯誤和問題列表需要解決。 解決這些問題后,將開始更改更新程序以向您提供所有新 UI 項目而不是舊項目的過程。 現(xiàn)在,您必須保持耐心,而在后臺繼續(xù)進(jìn)行無縫體驗的工作!
雜項/基礎(chǔ)設(shè)施:
讓我們遠(yuǎn)離本月的變化。 我們項目的基礎(chǔ)架構(gòu)和 QoL 進(jìn)行了一些重大修改,包括:
1)確保我們首先加載最新的 FFmpeg 庫 (避免由于過時的依賴項導(dǎo)致崩潰)。
2)完全刪除 Windows 的 FFmpeg 依賴項 并打包我們自己的綁定。
3)Ryujinx.Audio 并將其 重新格式化 為 MIT 許可證,以與項目的其余部分保持一致。 這是上述“分層編譯”功能與我們的許可兼容所必需的。
4)現(xiàn)在可以通過熱鍵調(diào)整分辨率縮放 。 默認(rèn)為未映射,但在合并 Avalonia 時可以映射,或者當(dāng)前可以通過直接編輯 Ryujinx 數(shù)據(jù)文件夾中的“config.json”進(jìn)行映射。
你們中更多人會感興趣的一個特殊變化是非官方稱為“Windows 11 FixTM”。 用戶注意到,在更新到 Windows 11 后,Ryujinx 在某些游戲中變得幾乎無法玩,因為大量且持續(xù)的卡頓顯然無緣無故地降低了 FPS。
討厭的win11
由于 Horizon OS 的運(yùn)行方式,Windows 等操作系統(tǒng)需要繞過許多怪癖才能準(zhǔn)確。 其中之一是我們需要以 4Kb 大小映射內(nèi)存。 Windows 11 似乎有一個獨特的錯誤,這個過程有時會比在 Windows 10 上花費(fèi)的時間長數(shù)百倍,我們?nèi)匀徊恢罏槭裁磿@樣
通過 將內(nèi)存取消映射處理程序移動到本機(jī)處理程序, 我們可以大量減少這些有問題的 4Kb 映射的數(shù)量,從而挽救 Windows 11 的困境。
“嘿 Ryujinx 團(tuán)隊,我們聽說 AMD 終于修復(fù)了他們的 OpenGL 驅(qū)動程序?”
好在它終于發(fā)生了。 AMD 已經(jīng)承認(rèn) OpenGL 的存在。 正如你可以想象的那樣,這是一個值得慶祝的日子。 我們點了披薩,打開香檳,分享了在《超級馬里奧奧德賽》中 AMD GPU 只能達(dá)到 13FPS 的黑暗日子的美好回憶……
超級馬里奧:奧德賽
等等,什么? 它不僅仍然很糟糕,而且 AMD 也設(shè)法破壞了 超級馬里奧:奧德賽 上的渲染? 咻咻咻咻咻咻
回到更嚴(yán)肅的討論:它并不像這里在 超級馬里奧:奧德賽 上看到的那么糟糕,在某些游戲中,我們確實必須給予 AMD 功勞,因為它在某些情況下顯著的對OpenGL 進(jìn)行了改善。
AMD的NGL/OPGL/Vulkan對比
讀過我們的 Vulkan 文章的人應(yīng)該熟悉這張圖,但這里添加的是“NGL”數(shù)據(jù)集,您可以將其解讀為 AMD 新 22.7.1 驅(qū)動程序的“New GL”。 除了奇怪的是 超級馬里奧:奧德賽 之外,我們測試的所有地方的性能都受到了全面的沖擊,超級馬里奧:奧德賽 的性能和圖形渲染都出現(xiàn)了倒退。 《馬里奧賽車 8 豪華版》性能大幅提升,但同樣存在全新的視覺錯誤。
馬里奧賽車8:豪華版
Vulkan 仍然是 AMD GPU 系統(tǒng)的最佳選擇,但至少 OpenGL 在某些游戲中是一個可行的選擇。 密特羅德 生存恐懼 實際上是這里的異常值,比舊驅(qū)動程序增加了驚人的 269%,甚至在 Vulkan 上提高了 143%(盡管我們相當(dāng)肯定這只是由于 API 瓶頸,因為即使是 Nvidia 也看到了更好的 OpenGL 性能這個示例)。
無論哪種方式,我們都希望這可以解決這個問題。 我們很高興 AMD 終于做了 一些事情 來解決他們的性能障礙,但這應(yīng)該被視為許多改進(jìn)中的第一個。 聲稱 OpenGL 已“修復(fù)”還為時過早,我們都希望看到 AMD 繼續(xù)關(guān)注剩余的性能問題、渲染錯誤和缺乏擴(kuò)展(這也適用于 Vulkan?。?。
結(jié)束語
就是這樣! 對于那些正在尋找 異度之刃 3 帶來的改變的人來說,你將不得不等待下個月,但它的要點是 Vulkan 目前存在隨機(jī)崩潰,并且 OpenGL 在著色器編譯時非常慢,你幾乎看不到一些過場動畫! 除此之外,性能看起來不錯,但我們還不能稱之為玩起來很愉快。
模擬器是在數(shù)千小時的工作基礎(chǔ)上構(gòu)建和維護(hù)的,涵蓋從逆向工程、CPU 和 GPU 仿真、服務(wù) HLE 一直到 UI 和 UX 的方方面面。 我們的大門始終向任何有興趣在 Switch 仿真和 C# 的前沿應(yīng)用到真正獨特的項目的人敞開。 如果這聽起來對您來說小菜一碟,請查看我們的 Github 或加入 Discord 。
大家下個月見!