DirectX 12開發(1)

DirectX 12 概述

  DirectX 12是微軟在2014年的GDC上正式發佈了新一代的圖形API。DX12搭載在最新的操做系統Windows 10上。相比以前的版本,Direct3D 12 更快更有效,能夠支持更豐富的場景,更多 的物體,更酷炫的特性,可以充分利用主流 GPU。c++

新特性

Work submission

  當程序給GPU提交渲染任務(work submission)時,Direct3D 12給與程序很高的控制權。程序首先會記錄渲染指令到指令列表(command lists)裏,而後提交這些指令列表到一個GPU的指令隊列(command queque)中。Direct3D 12支持CPU多線程來同時處理多指令列表的記錄。固然,指令列表提交至指令隊列的過程也是線程自由的。 編程

  指令列表提交後的執行對於CPU來講是異步的。也就是,當程序提交指令列表到指令隊列後,CPU不會等命令的執行,而是直接回到程序中。這樣就能夠保證CPU在任什麼時候刻都能提交大量的渲染 指令列表。Direct3D 12提供了在CPU和GPU之間的同步通訊原語(synchronization primitives)用來獲知GPU執行渲染任務的進展。緩存

Memory Management

  Direct3D 12 API所處理的數據存儲在被稱爲資源堆(resource heap)的內存對象上。
資源堆能夠存在於本地顯存或系統內存中,並有必定的緩存(cache)、CPU可訪問或者GPU可訪問等的特性。一個應用能夠經過使用各類堆建立API的參數來控制資源堆內存的屬性和配置。多線程

  在一個資源堆內,程序能夠自由地分配資源,好比紋理和緩衝(buffer)。這是一個相對輕量級的操做,在一個現有的資源堆裏建立資源是不產生實際的內存分配操做的。爲了讓GPU能正確地訪問這些資源,應用程序須要建立資源描述符視圖(descriptor views),好比:着色器資源視圖(shader resource views)或無序訪問視圖(unordered access views)。 異步

  爲了讀取或寫入CPU的資源堆內存,應用程序必須映射一個基於堆的資源用於 CPU 訪問。在Diect3D 12中,爲了確保GPU內存分配數據的連續性以及在流水線操做中的正確,通常採用環形緩衝(ring buffer)或相相似的技術。API提供了同步原語確保這種類型的流水線操做。操作系統

編程模型

  一個DX12的應用程序的最基本套路:線程

Initialize();
while(!exit)
{
    Update();
    Render();
}
Release();

和之前的D3D應用程序相似,在Initialize()中執行初始化,在Update()中更新程序邏輯,在Render()中提交渲染命令,在Release()中釋放回收資源。code

參考

《DX12 Whitepaper》對象

相關文章
相關標籤/搜索