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