Direct3D 11 功能
程式設計指南包含如何使用 Direct3D 11 可程式化管線來建立遊戲的即時 3D 圖形,以及用於科學和桌面應用程式的相關資訊。
計算著色器
計算著色器是專為一般用途資料平行處理而設計的可程式化著色器。 換句話說,計算著色器允許 GPU 做為一般用途的平行處理器。 計算著色器類似于其他可程式化管線著色器 (,例如頂點、圖元、幾何) 存取輸入和輸出的方式。 計算著色器技術也稱為 DirectCompute 技術。 計算著色器已整合到 Direct3D 中,而且可透過 Direct3D 裝置存取。 它可以使用 Direct3D 裝置,直接與圖形著色器共用記憶體資源。 不過,它不會直接連線到其他著色器階段。
當 API (與其相關聯的軟體堆疊之間轉換的成本) ,而 CPU 會耗用太多額外負荷時,計算著色器是針對以互動式速率執行計算的大規模市場應用程式所設計。
計算著色器有自己的一組狀態。 計算著色器不一定有強制的 1-1 對應至任一輸入記錄,例如頂點著色器 () 或輸出記錄 (,例如圖元著色器) 。 支援圖形著色器的某些功能,但已移除其他功能,以便新增新的計算著色器特定功能。
為了支援計算著色器特定的功能,現在有數個新的資源類型可供使用,例如讀取/寫入緩衝區、紋理和結構化緩衝區。
如需詳細資訊,請參閱 計算著色器概觀 。
動態著色器連結
轉譯系統在管理著色器時必須處理顯著的複雜性,同時提供優化著色器程式碼的機會。 這會成為更大的挑戰,因為著色器必須在各種硬體組態的轉譯場景中支援各種不同的材質。 為了解決這項挑戰,著色器開發人員通常已採用兩種一般方法之一。 它們已建立功能完整的大型一般用途著色器,這些著色器可供各種不同的場景專案使用,這些著色器會因彈性而取捨一些效能,或為每個幾何資料流程、材質類型或光線類型組合建立個別著色器。
這些大型、一般用途的著色器會使用不同的預處理器定義來重新編譯相同的著色器來處理這項挑戰,而後者的方法會使用暴力密碼破解開發人員能力來達成相同的結果。 著色器排列分解通常是開發人員的問題,開發人員現在必須在遊戲和資產管線內管理數千個不同的著色器排列。
Direct3D 11 和著色器模型 5 引進物件導向語言建構,並提供著色器連結的執行時間支援,以協助開發人員程式著色器。
如需詳細資訊 ,請參閱動態連結 。
多執行緒
許多圖形應用程式都是 CPU 系結,因為場景圖形周遊、物件排序和物理模擬等昂貴活動。 由於多核心系統逐漸可供使用,因此 Direct3D 11 已改善其多執行緒支援,以在多個 CPU 執行緒與 D3D11 圖形 API 之間啟用有效率的互動。
Direct3D 11 可讓下列功能支援多執行緒:
- 並行物件現在會在個別的執行緒中建立 - 建立物件自由執行緒的進入點函式,讓許多執行緒可以同時建立物件。 例如,應用程式現在可以在一個執行緒上編譯著色器或載入紋理,同時在另一個執行緒上轉譯。
- 命令清單可以在多個執行緒上建立 - 命令清單是圖形命令的記錄序列。 使用 Direct3D 11,您可以在多個 CPU 執行緒上建立命令清單,以在多個執行緒上平行周遊場景資料庫或物理處理。 這會釋放主要轉譯執行緒,將命令緩衝區分派至硬體。
如需詳細資訊,請參閱 MultiThreading 。
鑲嵌
鑲嵌可用來呈現具有不同詳細層級的單一模型。 此方法會產生更精確的幾何模型,視場景所需的詳細資料層級而定。 在詳細資料層級允許較低幾何模型的場景中使用鑲嵌,以減少轉譯期間耗用的記憶體頻寬需求。
在 Direct3D 中,鑲嵌會在 GPU 上實作,以從粗細 (較不詳細) 輸入修補程式計算更平滑的曲線表面。 每個 (四角形或三角形) 修補面會細分成較小的三角形臉部,以更接近您想要的表面。
如需在圖形管線中實作鑲嵌的詳細資訊,請參閱 鑲嵌概觀。
功能的完整清單
這是 Direct3D 11 中功能的完整清單。
您可以使用下列著色器類型來執行鑲嵌式 (請參閱鑲嵌概 觀) :
- 輪廓著色器
- 網域著色器
Direct3D 11 支援多執行緒 (請參閱 MultiThreading)
- 多執行緒資源/著色器/物件建立
- 多執行緒顯示清單建立
Direct3D 11 使用下列功能擴充著色器, (請參閱 著色器模型 5)
可定址的資源 - 紋理、常數緩衝區和取樣器
其他資源類型,例如讀取/寫入緩衝區和紋理 (請參閱 新的資源類型) 。
子 例 程
計算著色器 (請參閱 計算著色 器概觀) - 著色器,可將數個軟體執行緒或執行緒群組之間的問題空間除以加速計算,以及在著色器暫存器之間共用資料,以大幅減少輸入著色器所需的資料量。 計算著色器可以大幅改善的演算法包括後置處理、動畫、物理和人工智慧。
幾何著色器 (請參閱 幾何著色器功能)
- 實例 - 允許幾何著色器輸出最多 1024 個頂點,或最多 1024 個實例和頂點的任何組合,最多 1024 個 (每個頂點最多 32 個實例) 。
像素著色器
涵蓋範圍作為 PS 輸入
輸入的可程式化插補 - 圖元著色器可以在多重取樣方格的任何位置評估圖元內的屬性
屬性的中心取樣必須遵守下列規則:
如果涵蓋基本類型中的所有樣本,不論樣本模式在圖元中心是否有樣本位置,屬性都會在圖元中心進行評估。
否則,會在第一個涵蓋的範例中評估 屬性,也就是所有範例索引中具有最低索引的樣本。 在此情況下,範例涵蓋範圍會在將邏輯 AND 作業套用至涵蓋範圍和取樣遮罩點陣化狀態之後決定。
如果未涵蓋任何範例 (,例如在基本類型界限外執行的協助程式圖元上,以) 填滿 2x2 圖元戳記,則會以下列其中一種方式評估屬性:
- 如果樣本遮罩點陣化狀態是圖元中樣本的子集,則樣本遮罩點陣化狀態所涵蓋的第一個樣本就是評估點。
- 否則,在完整的樣本遮罩條件中,圖元中心是評估點。
Direct3D 11 會展開紋理 (請參閱紋理 概觀) 下列功能
Gather4
- 支援多重元件紋理 - 指定要從中載入的通道
- 支援可程式化位移
串流
- 限制 WDDM 預先載入的紋理夾
16K 紋理限制
紋理篩選需要 8 位的子材質和子 mip 精確度
新的紋理壓縮格式 (1 個新的 LDR 格式和 1 個新的 HDR 格式)
Direct3D 11 支援保守的 oDepth - 此演算法可讓圖元著色器比較圖元著色器的個別圖元深度值與點陣化程式中的深度值。 結果可啟用早期深度擷取作業,同時維持從圖元著色器輸出 oDepth 的能力。
Direct3D 11 支援大型記憶體
- 允許資源 > 4GB
- 保留資源 32 位的索引,但資源較大
Direct3D 11 支援串流輸出改善
- 可定址資料流程輸出
- 將資料流程輸出計數增加至 4
- 將所有資料流程輸出緩衝區變更為多重元素
Direct3D 11 支援著色器模型 5 (請參閱 著色器模型 5)
- 雙精度浮點數
- 計數位集指令
- 尋找第一個位集指令
- 攜帶/溢位處理
- FFT 的位反轉指示
- 條件式交換內建函式
- 緩衝區上的快取器
- 低精確度倒數
- 著色器轉換指示 - fp16 到 fp32,反之亦然
- 結構化緩衝區,這是包含結構化專案的新緩衝區類型。
Direct3D 11 支援唯讀深度或樣板檢視
- 停用唯讀元件的寫入,允許使用紋理做為輸入和深度清除
Direct3D 11 支援間接繪製 - Direct3D 10 會實作 DrawAuto,其會採用 GPU) 所產生的內容 (,並在 GPU) 上轉譯它 (。 Direct3D 11 一般化 DrawAuto,以便使用 DrawInstanced 和 DrawIndexedInstanced 的計算著色器呼叫它。
Direct3D 11 支援其他功能
- 浮點檢視區
- 個別資源 mipmap 限制
- 深度偏差 - 此演算法會使用轉譯器狀態來更新深度偏差的行為。 結果會排除計算偏差可能是 NaN 的案例。
- 資源限制 - 資源索引仍然需要 < = 32 位,但資源可以大於 4 GB。
- 轉譯器精確度
- MSAA 需求
- 計數器減少
- 已移除 1 位格式和文字篩選
在舊版中新增的功能
如需先前版本中新增的功能清單,請參閱下列主題:
相關主題