共用方式為


系結模型與 Direct3D 11 的差異

DirectX12 系結背後的其中一個主要設計決策是將其與其他管理工作分開。 這會對應用程式提供一些需求,以管理某些潛在危害。

D3D12 系結模型的主要優點是,它可讓應用程式經常變更紋理系結,而不需要大量的 CPU 效能成本。 其他優點是著色器可以存取非常大量的資源,著色器不需要事先知道將系結多少資源,而且無論硬體或應用程式內容流程為何,都可以使用統一資源系結模型。

為了改善效能,系結模型不需要系統追蹤應用程式要求 GPU 使用哪些系結,而且系結與多線程命令清單之間有全新的整合。

下列各節列出自 D3D11 以來資源系結模型的一些變更。

記憶體駐留管理與綁定分開

應用程式可以明確控制哪些表面需要供 GPU 直接使用(稱為「常駐」)。 相反地,他們可以在資源上套用其他狀態,例如明確將其設為非常駐狀態,或讓 OS 針對需要最小記憶體使用量的特定類別應用程式選擇。 這裡的重點是,應用程式對駐留項目的管理與如何為著色器提供資源存取權限的方式完全分離。

將常駐管理與著色器存取資源的機制分離,可降低渲染的系統/硬體成本,因為OS不需要不斷檢查本地綁定狀態,以便了解要將哪些資源常駐。 此外,著色器不再需要知道它們可能需要參考的確切表面,只要整個可能可存取的資源集已事先駐駐。

物件生命週期管理與繫結分開

不同於先前的 API,系統不再追蹤資源系結至管線。 這用來讓系統保持應用程式已發行的運作資源,因為它們仍由未完成的 GPU 工作參考。

釋放任何資源,例如紋理之前,應用程式現在必須確定 GPU 已完成參考它。 這表示應用程式可以安全地釋放資源之前,GPU 必須已完成參考資源的命令清單執行。

驅動資源狀態追蹤與系結分離

系統不再檢查資源系結,以瞭解何時發生需要額外的驅動程式或 GPU 工作的資源轉換。 對於許多 GPU 和驅動程式來說,一個常見的例子是需要知道何時表面從渲染目標視圖(RTV)轉換為著色器資源視圖(SRV)。 應用程式本身現在必須識別系統可能關心的任何資源轉換是否透過專用 API 發生。

CPU GPU映射記憶體的同步獨立於系結

系統不再檢查資源系結,以了解轉譯是否需要延遲,因為它取決於已對應給 CPU 存取的資源,但尚未取消對應。 應用程式現在必須負責同步處理 CPU 和 GPU 記憶體存取。 為了協助解決此問題,系統會提供機制讓應用程式要求 CPU 線程的睡眠,直到工作完成為止。 輪詢也可以完成,但可能效率較低。

資源系結