DXGI 1.4 改善
下列功能已在 Microsoft DirectX Graphics Infrastructure (DXGI) 1.4 中新增或變更,主要是為了支援 Direct3D 12。
更便宜的配接器列舉
對於 Direct3D 12,您無法再從裝置回溯到用來建立它的 IDXGIAdapter。 也無法再將D3D_DRIVER_TYPE_WARP提供給 D3D12CreateDevice。 為了簡化開發,您可以使用 IDXGIFactory4 來處理這兩者。 IDXGIFactory4::EnumAdapterByLuid (設計為與 ID3D12Device::GetAdapterLuid) 可讓應用程式擷取 Direct3D 12 裝置建立所在適配卡的相關信息。 IDXGIFactory4::EnumWarpAdapter 提供一個配接器,可用來 D3D12CreateDevice 使用 WARP 轉譯器。
視訊記憶體預算追蹤
鼓勵應用程式開發人員使用視訊記憶體保留系統,通知 OS 應用程式無法不需使用的實體視訊記憶體數量。
進程可用的物理記憶體數量稱為「視訊記憶體預算」。 隨著背景進程喚醒和睡眠,預算可能會明顯波動:當使用者切換到另一個應用程式時,和會大幅波動。 當預算變更並輪詢目前預算和目前耗用的記憶體數量時,應用程式可以收到通知。 如果應用程式未維持在其預算內,程式將會間歇性凍結,以允許其他應用程式執行和/或建立 API 將傳回失敗。 IDXGIAdapter3 介面提供與這項功能相關的方法,特別是 QueryVideoMemoryInfo 和 RegisterVideoMemoryBudgetChangeNotificationEvent。
如需詳細資訊,請參閱 落地的 Direct3D 12 主題。
Direct3D 12 交換鏈變更
某些現有的 Direct3D 11 交換鏈功能已被取代,以達到 Direct3D 12 中的額外負荷降低。 雖然已對 Direct3D 12 概念進行其他變更,或為 Direct3D 12 功能提供更好的支援。
不變的反緩衝區身分識別
在 Direct3D 11 中,應用程式只能呼叫 getBuffer getBuffer(0, ... ... ) 一次。 每次呼叫 Present 會隱含變更傳回介面的資源識別。 Direct3D 12 不再支援隱含資源識別變更,因為需要 CPU 額外負荷和彈性資源描述元設計。 因此,應用程式必須針對以交換鏈建立的每個緩衝區,手動呼叫 getBuffer 。 在呼叫 present之後,應用程式必須手動轉譯為序列中的下一個緩衝區。 建議應用程式為每個緩衝區建立描述元的快取,而不是在每個 Present重新建立許多物件。
多重配接器支援
在多 GPU 適配卡上建立交換鏈時,備份緩衝區全都會建立在節點 1 上,而且只支援單一命令佇列。 ResizeBuffers1 可讓應用程式在不同的節點上建立反緩衝區,讓不同的命令佇列與每個節點搭配使用。 這些功能可讓替代框架轉譯 (AFR) 技術與交換鏈搭配使用。 請參閱 多配接器系統。
其他
- 命令佇列對象必須傳遞至 CreateSwapChain 方法,而不是 Direct3D 12 裝置物件。
- 僅支援下列兩個翻轉模型交換效果:
- 當應用程式在呈現之前完全轉譯到反緩衝區,或想要輕鬆地支援多配接器案例時,應該優先使用DXGI_SWAP_EFFECT_FLIP_DISCARD。
DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL應該由依賴部分簡報優化或定期從先前呈現的退格器讀取的應用程式使用。 - SetFullscreenState 不再獨佔擁有顯示器,因此使用者起始的作系統元素可以順暢地出現在應用程式輸出前面。 磁碟區設定是這種情況的範例。