系結模型與 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 執行緒睡眠,直到工作完成為止。 輪詢也可以完成,但效率較低。

資源系結