Switch模擬器Ryujinx進度報告2022-8月

Switch模擬器Ryujinx進度報告2022-8月

Switch模擬器Ryujinx進度報告2022-8月

又一個月過去了,這意味著來自您最喜歡的任天堂Switch模擬器的另一份進度報告。

我們對 GPU、CPU、核心和服務模擬進行了常規的滾動改進,做了大量的程式碼清理,最後釋出了新的 LDN 版本。

顯示卡:

使用 OpenGL 驅動程式運行遊戲並不陌生,本月也不例外。《數碼寶貝物語:網路偵探

》、《熱血少女Zero》和《雷頓神秘之旅 卡特莉艾爾與大富豪的陰謀

》等遊戲會表現出小的紋理破壞,通常以線條或彩色頂點的形式出現,而這些都不是。這最終是由於Ryujinx用於將紋理資料重新整理到CPU的方法效率相當低下並且容易出現自己的錯誤。雖然單獨修復重新整理機制中的潛在問題很重要,但為修復這些OpenGL標題而提出的解決方案是為這些紋理資料傳輸實現一條新的快速路徑,從而完全繞過重新整理。

Switch模擬器Ryujinx進度報告2022-8月

Switch模擬器Ryujinx進度報告2022-8月

Switch模擬器Ryujinx進度報告2022-8月

Switch模擬器Ryujinx進度報告2022-8月

在Vulkan合併後,AMD和英特爾GPU的所有者很快意識到,當選擇API時,Mii編輯器小程式有些崩潰。雖然它在OpenGL中工作正常,但嘗試在Vulkan中開啟Mii編輯器會導致徹底崩潰或表現出圖形錯誤,例如某些視覺元素根本沒有顯示:

Switch模擬器Ryujinx進度報告2022-8月

這個特殊問題被追蹤到一個無效的布林常量(1位元組)的賦值,然後直接分配給一個整數(4個位元組)。這導致某些 GPU 供應商出現 SPIR-V 解析失敗,因此此處的解決方法是刪除這些無效分配。

Switch模擬器Ryujinx進度報告2022-8月

關於Vulkan的話題:分娩並非沒有出牙疼痛和一些小的倒退。其中一個迴歸表現為在《集合啦!動物森友會》和《萊莎的鍊金工房》中在Vulkan和 OpenGL 圖形 API 上的閃爍。

Switch模擬器Ryujinx進度報告2022-8月

Switch模擬器Ryujinx進度報告2022-8月

這兩個問題都可以追溯到最終Vulkan rebase期間的疏忽,在新新增的取樣器池快取之後,紋理繫結將使用錯誤的取樣器池。這裡只需要一行修復即可將正確的取樣器池作為引數傳遞。

撇開“紋理”這個詞不談,本月對定義的格式及其相關的格式表進行了一些更一般的內務處理更改。ETC2紋理格式被新增到Vulkan中,儘管奇怪的翻轉,這次實際上是NVIDIA不支援它們的使用。AMD和英特爾的所有者應該看到Vegas Party,輻射島和任何其他使用上述格式的人都可以玩。

整個格式表也進行了重構,以便為格式提供有意義的名稱,而不是使用所謂的“幻數”。程式設計中的幻數是原始使用的值,並且沒有關於其使用的有意義的上下文。

Switch模擬器Ryujinx進度報告2022-8月

最佳做法是為這些幻數分配一個常量,以便將來貢獻者能夠理解其含義。這並不總是那麼容易,特別是在逆向工程和模擬中,你可能直到很久以後才確切知道某物是什麼。值得慶幸的是,我們對Switch的瞭解已經成熟多年。英偉達最近也釋出了大量文件!即使對於許多閱讀這些報告的非編碼人員來說,可讀性的差異也是天差地別:

Switch模擬器Ryujinx進度報告2022-8月

某些顏色格式(如 RGBX)沒有 alpha(透明度),因此,當應用某些需要 alpha 的操作時,理想情況下,這些操作不應接觸沒有所需元件的顏色格式。不幸的是,這不可能輕易做到,但我們可以讓它們表現得好像alpha總是一個靜態的1(完全不透明)。這解決了 穆拉納秘寶 中的一個問題,即地面被渲染為黑色矩形而不是。。。好吧,不是一個黑色的矩形。

Switch模擬器Ryujinx進度報告2022-8月

Switch模擬器Ryujinx進度報告2022-8月

《異度之刃3》是一個有趣的版本。一方面,遊戲在圖形上似乎在硬體方面表現非常出色。另一方面,穩定性被擊中或錯過,不是一個,而是三個不同的崩潰,都以選單為中心。

其中第一個要調查和解決的問題是 OpenGL 獨有的,它以 TDR(超時檢測和恢復)的形式表示。

OpenGL 不允許指定頂點緩衝區的大小,這可能表示函式有時可能會從緩衝區邊界之外呼叫地址。為了解決此問題,需要建立第二個臨時緩衝區來容納這些越界訪問方案。具有諷刺意味的是,這個問題是眾所周知的。最明顯的次要修復實際上是超級馬里奧奧德賽中的瀑布。

Switch模擬器Ryujinx進度報告2022-8月

4年來,使用者已經注意到,在水煙效果中可以看到三角形的偽像,在《前進!奇諾比奧隊長》中也可以看到。這是由導致 異度之刃3中TDR的完全相同的問題引起的,並展示了為什麼您今天應該總是推遲一件事,而明天可能會解決兩件事!

Switch模擬器Ryujinx進度報告2022-8月

在遊戲過程中和 異度之刃 3 的選單中,Vulkan 仍然可能會出現 DeviceLoss 崩潰,儘管我們還不確定原因,並且 OpenGL 在這裡修復的問題不會影響 NVIDIA Vulkan,正如人們所期望的那樣。還有一個與記憶體相關的最終崩潰,與選定的圖形API無關。為什麼他們都選擇發生在完全相同的選單上,做完全相同的事情,並且似乎出於完全不同的原因,這暫時超出了我們的理解範圍;我們希望在不久的將來為您取得更多進展。

不過,我們還沒有完成 異度之刃3,因為本月已經推出了第二個修復程式,這次是專門針對AMD使用者的。AMD不滿足於讓NVIDIA成為本月格式支援缺陷的唯一罪犯,AMD不支援Vulkan上的RGB16頂點格式,因此需要回退格式。如果不支援 RGB16,則使用 RGBA16 頂點格式解決了這些 GPU 在嘗試啟動遊戲時面臨的即時崩潰問題。還添加了用於清除渲染目標的 HLE 宏,因為 AMD 驅動程式強烈反對清除單個切片。

如果你希望我們逃離異度之刃的領地,再想一想。最近的一項變化帶來了 異度之刃:最終版解析度縮放的迴歸,看起來有點不對勁。某些比例值未跨紋理和影象正確更新,導致上述問題。遊戲現在再次正確縮放。

Switch模擬器Ryujinx進度報告2022-8月

Switch模擬器Ryujinx進度報告2022-8月

結束本月GPU部分的一些小變化包括:

如果支援該功能,則不會再觸發幾何著色器直通的回退。修復了英偉達上《漫威終極聯盟 3》中的迴歸問題。

更改一些以前未定義的 SPIR-V 值以進行初始化,而不是保留為可能未定義的值,因為 NVIDIA 驅動程式似乎不喜歡這樣做。修復了 塞爾達傳說:織夢島 中的傾斜模糊效果,以及使用Vulkan時可能出現的一些閃爍。

新超級馬里奧兄弟 U 豪華版中的 OpenGL 獨佔迴歸導致零引用異常崩潰。透過在嘗試獲取紋理的圖層計數之前確保幀緩衝區確實存在,迴歸已得到修復。

OpenGL 著色器重新編譯現在再次採用多執行緒處理。在 Vulkan 合併之後,OpenGL 在啟動時用單個執行緒重新編譯著色器,而不是預期的最大值 8 個!

中央處理器:

CPU重新編譯器繼續改進,本月見證了一堆新指令的新增,這些指令的名稱聽起來很複雜,這些名稱變得有點模糊。

更多 32 位Thumb指令:

LDM/STM

LDAEX/STLEX

LDR/STR

LDRD/STRD

更多 32 位指令:

SHA256

MRS Rd

第二批是現在最有趣的,似乎無處不在,這是最新的馬里奧卡丁車8 Deluxe更新所要求的:2。1。0。作為直接的Wii U埠,馬里奧卡丁車8豪華版是為數不多的在32位指令集上執行的值得注意的Switch遊戲之一,因此從一開始我們就對其進行了測試。有了這些新的指令,遊戲將恢復到一如既往的輝煌。

Switch模擬器Ryujinx進度報告2022-8月

SHA256指令專門接受了硬體加速處理,並添加了檢查以確保指令支援vex編碼;沒有這個,就有可能進行無效分配。

核心/服務:

雖然Ryujinx目前阻止了與任天堂線上服務的連線,但這並不意味著我們不必與一系列網路的問題作鬥爭。如果某些應用程式“認為”它們已連線到 Internet,則在啟動時會有不同的反應:嘗試連線到伺服器、呼叫不同的服務或只是通常很煩人。

考慮到這一點,讓我們看一下本月最終確定的幾個服務實現:

“載入網路服務許可證金同步”是 精靈寶可夢:阿爾宙斯 在啟用訪客網際網路接入時需要的。遊戲仍然有點卡住載入,但一次一個路障,對吧?

“結束自由通訊”可以防止某些標題(如《噴射戰士 3:試玩版》)在第一個初始螢幕之後崩潰。

Switch模擬器Ryujinx進度報告2022-8月

“解析器集選項請求”被存根,這允許 危險老鼠 運行遊戲。

Switch模擬器Ryujinx進度報告2022-8月

網路套接字實現中的兩個疏忽不是一個,而是兩個疏忽得到了解決,最終結果是 我的世界 在來賓網際網路被禁用時可以啟動。如果啟用此設定,遊戲仍將崩潰;如果《我的世界》是一款出於某種原因讓你對Switch感興趣的遊戲,請記住這一點。

Switch模擬器Ryujinx進度報告2022-8月

gdkchan還利用 August 廣泛優化了核心查詢記憶體塊的方式,從連結串列遷移到紅黑樹。如果你沒有參加過計算機科學課程,那麼這些對你來說意義不大,但請放心,新方法的速度要快得多。對於那些已經參加過CS課程的人來說:連結串列具有O(n)複雜性,而紅黑樹是O(log n),這意味著在最壞的情況下,新方法在尋找所需的記憶體塊方面效率要高得多。

圖形使用者介面/雜項:

貢獻者CloneDeath這個月拖了一把拖把到我們的程式碼庫,並決定它需要一個春季清潔在相當。。。一些。。。。不同。。。區域,其他貢獻者加入組合,刪除各種未使用的字串,重新命名函式並減去冗餘程式碼。這不是最迷人的工作,但對於一個如此大的專案,基礎知識同樣重要。

Switch模擬器Ryujinx進度報告2022-8月

我們收到的 WIP Avalonia GUI 的翻譯和區域設定更新比我們所能撼動的要多,但我們非常感謝社群在這方面的廣泛支援!波蘭語和日語區域設定已新增日語(再次是的),中文,德語和土耳其語,所有這些都接收更新以包含最新字串。翻譯列表本身現在排序得更直觀,每個翻譯都以自己的母語顯示。

Switch模擬器Ryujinx進度報告2022-8月

Switch模擬器Ryujinx進度報告2022-8月

我們有一個長期存在的謊言,是時候最終承認了。對於大多數人來說,舊的“清除PPTC快取”按鈕將帶來巨大的震撼……實際上並未清除 PPTC 快取。我們知道,這是不可接受的。直到2022年8月18日(這一天將臭名昭著),才終於有人勇敢地解決了這種公然濫用信任的行為。該函式不是清除 PPTC,而是在下次執行時將重建排隊。此後,這種嚴重的錯誤列印已在UI中進行了更新,以反映真實行為。不久將釋出一段道歉影片,其中包括眼淚和從這次經歷中成長的承諾。

對於一些更改:您的遊戲目錄列表現在只有在與列表相關的設定發生更改時才會重新整理。考慮新增或刪除目錄,或者將遊戲更新到最新版本。以前,即使更改圖形後端或增加解析度也會導致完全重新載入:對那些擁有大型庫或使用網路儲存的人是災難。

Switch模擬器Ryujinx進度報告2022-8月

金手指是影片遊戲的基本組成部分,所以當一些隨機作弊不起作用時,它可能會讓人覺得宇宙本身正試圖讓你走上正確的道路。幸運的是,我們可以忽略宇宙並解決一個小錯誤,該錯誤導致一些作弊不起作用。

我們從七月的Vulkan合併中進行了一些清理。數以百萬計的Flatpak使用者的聲音都立即喊叫起來,並迅速被修復,以確保在此版本中提供一些必需的軟體包。沒有它,即使選擇Vulkan也可能導致相當令人討厭的崩潰。

對於那些不知道的人:Avalonia實際上是一個完全渲染的框架,因此確實利用OpenGL或Vulkan來繪製它自己。隨著 Vulkan 的合併,我們面臨著一項艱鉅的任務,不僅要確保遊戲呈現良好,還要確保它不會破壞迄今為止我們 GUI 過渡中投入的所有工作。幸運的是,所需的修復是次要的,並且一下子就解決了。

Switch模擬器Ryujinx進度報告2022-8月

結束語:

如果你是那些瘋狂地按Ctrl-F來刷每個進度報告的人之一:LDN,Mac或Vulkan 2:Electric Boogaloo(只有我?),那麼我們在LDN方面有好訊息,如果您還沒有聽說過,我們在 8 月份釋出了 LDN 版本 2。5,這使 LDN 內部版本與主版本 1。1。224 保持同步。這意味著更多的遊戲是可玩的,更重要的是,對於那些被困在AMD和英特爾GPU上的可憐的靈魂來說,每個遊戲都更容易玩。因此,我們看到更多的人在LDN上喜歡 噴射戰士 2和馬里奧賽車8豪華版(都是著色器繁重的遊戲)。有關自 2。4 以來更改內容的下載和更全面的列表,請檢視上一篇LDN2。5的文章。

好吧,總之,我們想向所有用他們的時間,知識,金錢或熱情支援該專案的人表示感謝。沒有他們,我們真的不會還在這裡。作為一個開源專案,我們從社群參與和外部貢獻中茁壯成長;如果您在計算機圖形學,低階系統或任何UI和網頁設計方面有一些知識,那麼有一個地方適合您。模擬器可能看起來難以接近,但其有真正無窮無盡的潛力。

最後,我們期待下次的相見!