微軟發布了用於將 Direct3D 9 命令轉換為 Direct12D 3 的 D9D3On12 層的源代碼

微軟發布了好消息 就是最近 廣為人知 通過博客文章 打開D3D9On12層的源代碼 通過設備驅動程序接口 (DDI) 設備的實現,它將 Direct3D 9 (D3D9) 命令轉換為 Direct3D 12 (D3D12) 命令。

Microsoft 的這一舉措現在將使開發人員能夠比以往更輕鬆地將游戲從 DirectX11 過渡到 DirectX12。 因為 DX12 轉換層本質上是一個幫助程序庫,用於將圖形概念和命令從 DX11 樣式域轉換為 DX12 樣式域。

我們上次提到 D3D9On12 映射層已經有一段時間了。 作為快速更新,它將 D3D9 命令映射到充當 D3D12 設備驅動程序接口 (DDI) 的 D3D9。 擁有此映射層允許較舊的 D3D9 應用程序在可能沒有 D3D9 驅動程序的現代系統上運行。 自上一篇博文以來,我們添加了對 Alpha 到 Coverage 擴展的支持,修復了一些錯誤,並清理了開源代碼庫.

這無疑是個好消息 使用該層的各種項目現在可以受益,因為它允許遺留應用程序在僅支持 D3D12 的環境中工作,即 例如 這對於基於項目實現 D3D9 很有用 vkd3d 和 VKD3D-Proton,因為它們為 Linux 提供了 Direct3D 12 實現,該實現通過將 D3D12 調用轉換為 Vulkan 圖形 API 來工作。

D3D9On12 是將圖形命令從 D3D9 映射到 D3D12 的圖層。 D3D9On12 不是 D3D9 API 的實現,而是 D3D9 DDI(設備驅動程序接口)用戶模式的實現。 這意味著它不是一個名為 d3d9.dll 的二進製文件,而是名為 d3d9on12.dll。

當應用程序創建 D3D9 設備時,它們可以選擇成為 D3D9On12 設備,而不是本機 D3D9 設備。 發生這種情況時,d3d9on12.dll 由 D3D9 運行時加載並初始化。 當應用程序調用渲染命令時,D3D9 將驗證這些命令,然後將這些命令轉換為 DDI D3D9 並將其發送到 D3D9On12,就像任何 D3D9 驅動程序一樣。

D3D9On12 將獲取這些命令並將其轉換為 D3D12 API 調用,這些調用由 D3D12 運行時進一步驗證,該運行時可選地包括 D3D12 調試層,然後將其轉換為 D3D12 DDI 並發送到 D3D12 驅動程序。

還提到 該項目基於 Windows 10 中包含的類似子系統的代碼。 需要注意的是,發布代碼D3D9On12 將提供機會 以便社區代表 參與錯誤修復和添加優化, 它還可以作為研究 DDI D3D9 驅動程序的實現以及為 D3D12 中的各種圖形 API 的轉換創建此類層的框架的示例。

為什麼要開源?
D3D9On12 成為 Windows 10 的一部分已有幾年了,在此期間,它的穩定性和可用性不斷提高。 使其開源:

允許社區貢獻額外的錯誤修復或性能改進。
作為如何使用 D3D12TranslationLayer 的另一個示例
讓有興趣的人看看 D3D9 DDI 實現是什麼樣子的

同時,還發布了 DXBC Signer 軟件包,允許您對 DXBC 文件進行簽名。 由第三方工具包生成的任意文件。 D3D9On12 使用此包對通過將著色器轉換為新模型生成的 DXBC 進行簽名。

終於 如果您有興趣了解更多信息,您可以查看微軟在其博客中發布的詳細信息 在下面的鏈接中。


發表您的評論

您的電子郵件地址將不會被發表。 必填字段標有 *

*

*

  1. 負責數據:MiguelÁngelGatón
  2. 數據用途:控制垃圾郵件,註釋管理。
  3. 合法性:您的同意
  4. 數據通訊:除非有法律義務,否則不會將數據傳達給第三方。
  5. 數據存儲:Occentus Networks(EU)託管的數據庫
  6. 權利:您可以隨時限制,恢復和刪除您的信息。