D7VK 2.2 改進了在 Linux 上播放 Windows 經典遊戲時對 Direct3D 3 的支持

  • D7VK 2.2 顯著改進了 Direct3D 3 支持,修復了設備問題、執行緩衝區和頂點變換問題。
  • 此次更新還改善了紋理管理和顏色鍵透明度,並減少了某些 Direct3D 5 和 6 路徑的開銷。
  • D7VK 2.2 基於 DXVK 3.1,並繼續改進在 Linux 上使用 Wine 和 Proton 運行經典 Windows 遊戲的體驗。

D7VK 2.2

D7VK 2.2現已發布,它是專為在 Linux 上運行經典 Windows 遊戲而設計的圖形轉換層的新版本。該專案源自 DXVK,專注於將舊的 Direct3D 7、6、5 和 3 API 轉換為 Vulkan,以便與 Wine 和 Proton 配合使用。新版本將大量精力投入到先前一直存在缺陷的領域之一:Direct3D 3 支援。

此次更新距離D7VK 2.1發布僅幾週,進一步完善了這項技術。對於那些希望在現代 Linux 系統上暢玩 90 年代末和 2000 年代初經典遊戲的玩家來說,這項技術尤其具有吸引力。除了改進 Direct3D 3 之外,D7VK 2.2 還包含大量錯誤修復和內部調整,並且基於最新的 DXVK 3.1 版本。

D7VK 2.2 主要針對 Direct3D 3。

D7VK 2.2的主要新特性與 Direct3D 3 相關。 Direct3D 3 API 先前在支援該專案的其他舊技術方面略顯落後。儘管開發者收集並測試的 Direct3D 3 遊戲已經可以與 D7VK 相容,但仍有一些特殊情況和行為尚未正確實現。

這尤其成問題,因為使用 Direct3D 3 的遊戲目錄很難重建。這些都是非常古老的遊戲,其中許多已經絕版或難以找到,這使得測試所有可能在實際應用中遇到的實現方式變得極具挑戰性。

在這個版本中,開發者對 Direct3D 3 實現的大部分進行了修改,使其更接近與 D7VK 相容的其他 API 所達到的成熟度等級。

D3D3 設備的行為符合原始設計。

其中一項技術改進涉及重新設計 Direct3D 3 設備的參考計數系統。 D7VK 2.2 修改了這個機制,使其行為與原生 API 實作的行為相符。

這種細節對使用者來說可能無關緊要,但在翻譯層面卻至關重要。舊遊戲可能依賴與物件創建和銷毀相關的特定行為,而看似微小的差異可能會導致難以診斷的錯誤。

因此,新的實現方式降低了某些遊戲無法以 D7VK 未預料的方式管理其圖形設備的可能性。

D7VK 2.2 引入了使用顏色鍵實現透明度的改進

D7VK 2.2 也修改了純 Direct3D 3 裝置上的色彩鍵控管理。先前,該專案採用的是一種非常簡單的模型,即在某些情況下此功能始終保持啟用狀態。

新版本可以精確控制何時啟用該功能,更忠實地再現 Direct3D 3 的行為。這對於使用基於特定顏色的透明度技術的舊遊戲來說尤其重要。

此外,與歸一化顏色範圍相關的計算也得到了最佳化。這些值現在僅在表面描述發生變化時才會更新,從而可以快取並在以後重複使用。

對於使用顏色鍵透明度的遊戲,其效能應該會有小幅到中度的提升,遊戲行為也會更加正確。

執行緩衝區中的邊界情況已修正。

D7VK 2.2 的另一個重要面向是對 Direct3D 3執行緩衝區驗證的修訂。該專案重新組織了部分邏輯,以解決測試過程中發現的各種極端情況。

為了驗證 API 的預期行為,開發者也能夠依賴專門針對 Direct3D 3 的 Wine 測試。這些測試可以將 D7VK 的行為與相容實現的預期行為進行比較,並檢測出僅使用知名遊戲時可能忽略的差異。

對於這樣一個古老的 API 來說,這項工作尤其有價值,因為可供測試的標題很少,而且並不總是涵蓋原始實作的所有可能性。

增強對 Direct3D 5 和 3 紋理的穩健性

此次更新不僅限於 Direct3D 3。 D7VK 2.2 也改進了 Direct3D 5 和 Direct3D 3 所使用的紋理的處理,以防止底層表面在使用時超出範圍。

這項改變提高了圖形資源處理的穩定性,並能解決僅在特定操作序列下才會出現的錯誤。開發者也指出,這項改進對最初於 1997 年發布的《青蛙過河》(Frogger )遊戲產生了積極影響。

該補丁表明,旨在解決資源管理問題的內部變更最終可能會對特定遊戲產生明顯的影響,即使該修改並非專門為這些遊戲設計。

D7VK 2.2 也修正了變換和矩陣問題。

D7VK 2.2 也修正了一個與 Direct3D 3 執行緩衝區轉換相關的錯誤。此問題是由頂點輸入所使用的 FVF 格式判斷錯誤所引起的。

舊版投影矩陣計算中的一個問題也已修復。該錯誤是在 Wine 測試中發現的,該測試運行異常,可能會對某些 Direct3D 6、5 和 3 應用程式造成負面影響。

這些變化進一步證明了D7VK相容性測試的重要性。許多舊版圖形API的問題並不一定會在最受歡迎的遊戲中出現,而是在特定的功能組合中才會顯現,而這些組合可能多年都難以發現。

減少對傳統繪製路徑的開銷

新版本還重新組織了繪圖路徑。 Begin() / Vertex() / End() Direct3D 6 和 Direct3D 5 均使用此修改。此修改可降低記憶體消耗並略微提高效能。

《青蛙過河》再次成為這次改動的受益遊戲之一。雖然這項優化無法讓所有復古遊戲的幀率翻倍,但確實有助於減少舊版 API 路由上累積的部分開銷。

D7VK 在先前的版本中已經進行了大量的效能最佳化,因此目前的工作越來越專注於改進實現和消除不必要的成本。

D7VK 2.2 是 DXVK 3.1 的一部分

此版本的另一個重要特點是 D7VK 2.2 已被DXVK 3.1取代。這使得該專案能夠受益於更新的基礎,並使其實現與 DXVK 的發展保持同步。

這兩個項目之間的關係尤其重要。 D7VK 起源於 DXVK 的一個分支,專門處理標準 DXVK 用法中未涵蓋的舊版 Direct3D API,而兩者都使用 Vulkan 作為源自 Windows 的圖形呼叫的目標。

由於這種關係,DXVK 的結構改進可以作為 D7VK 繼續發展的基礎,而無需從頭開始開發與 Vulkan 通訊所需的所有基礎設施。

一個旨在復興經典遊戲的項目

D7VK 在 Linux 生態系統中有著非常明確的目標:讓使用 Direct3D 7、6、5 和 3 的 Windows 遊戲能夠透過 Vulkan 運作。這使其與 DXVK 有所區別,後者主要專注於 Direct3D 9、10 和 11。

對於依賴 Wine 無法直接以相同方式實現的圖形技術,或者可以從更精確地轉換為 Vulkan 中受益的遊戲來說,該專案的重要性就更加凸顯了。

透過將 D7VK 與 Wine 或 Proton 結合使用,Linux 用戶可以恢復 20 世紀末和 21 世紀初的大量軟體,而無需使用舊的 Windows 系統。

對於那些使用 Wine 或 Proton 在 Linux 系統上玩遊戲,並且有興趣重溫經典遊戲的用戶來說,D7VK 2.2 強化了兼容性基礎架構中最重要的部分之一。雖然許多改進對用戶來說可能並不明顯,但每項修復都提高了那些在 Direct3D 3、5、6 或 7 時代失聯的遊戲能夠在現代 Linux 系統上再次正常運行的可能性。


在 Google 中將其新增為首選來源