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介面提供與此功能相關的方法,特別是QueryVideoMemoryInfoRegisterVideoMemoryBudgetChangeNotificationEvent

如需詳細資訊,請參閱 落地上的 Direct3D 12 主題。

Direct3D 12 交換鏈變更

部分現有的 Direct3D 11 交換鏈功能已被取代,以達到 Direct3D 12 中的額外負荷降低。 雖然已對 Direct3D 12 概念進行其他變更,或為 Direct3D 12 功能提供更好的支援。

非變異的 Backbuffer 身分識別

在 Direct3D 11 中,應用程式只能呼叫 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 不再獨佔擁有顯示器,因此使用者起始的作業系統元素可以順暢地出現在應用程式輸出前面。 磁片區設定是這種情況的範例。

Direct3D 12 硬體功能層級

DXGI 的程式設計指南