下層硬體上的計算著色器
Direct3D 11 可讓您使用在大部分 Direct3D 10.x 硬體上運作的 計算著色器 ,但作業有一些限制。 計算著色器技術也稱為 DirectCompute 技術。 本主題討論如何在 Direct3D 10 硬體上的 Direct3D 11 應用程式中使用 計算著色器 。
支援舊版硬體上的計算著色器,僅適用于與 Direct3D 10.x 相容的裝置。 計算著色器無法在 Direct3D 9.x 硬體上使用。
若要檢查 Direct3D 10.x 硬體是否支援計算著色器,請呼叫 ID3D11Device::CheckFeatureSupport。 在 CheckFeatureSupport 呼叫中,將D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS值傳遞至 Feature 參數、將 D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS 結構的指標傳遞至 pFeatureSupportData 參數,並將 D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS 結構的大小傳遞至 FeatureSupportDataSize 參數。 如果 Direct3D 10.x 硬體支援計算著色器,CheckFeatureSupport會在D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x 成員中傳回TRUE。
10Level9 參考區段列出各種ID3D11Device和ID3D11DeviceCoNtext方法在不同 10Level9 功能層級的行為差異。
未排序的 Access 檢視 (UAV)
舊版硬體支援原始 (RWByteAddressBuffer) 和結構化 (RWStructuredBuffer) 未排序存取檢視,但有下列限制:
- 一次只能透過 ID3D11DeviceCoNtext::CSSetUnorderedAccessViews系結至管線。
- 原始 UAV 的基底位移必須對齊 256 位元組界限 (,而不是 Direct3D 11 硬體) 所需的 16 位元組對齊。
舊版硬體不支援具類型的 UAV。 這包括 Texture1D、 Texture2D和 Texture3D UAV。
下層硬體上的圖元著色器不支援未排序的存取。
(SRV) 著色器資源檢視
舊版硬體支援原始和結構化緩衝區作為著色器資源檢視,以供唯讀存取,因為它們位於 Direct3D 11 硬體上。 頂點著色器、幾何著色器、圖元著色器以及計算著色器都支援這些資源類型。
執行緒群組
計算著色器可以線上程群組內的許多執行緒上平行執行。
下層硬體支援執行緒群組,但有下列限制:
執行緒群組維度
針對下層硬體定義的執行緒群組限制為 768 的 X 和 Y 維度。 這小於 Direct3D 11 硬體的最大值 1024。 64 的最大 Z 維度保持不變。
群組 (X × Y × Z) 中的執行緒總數限制為 768。 這小於 Direct3D 11 硬體的 1024 限制。
如果超過這些數位,著色器編譯將會失敗。
Two-Dimensional執行緒索引
執行緒群組內的特定執行緒是使用 (由 x,y,z) 指定的 3D 向量來編制索引。
對於在舊版硬體上運作的計算著色器,執行緒群組僅支援兩個維度。 這表示 3D 向量中的 Z 值必須一律為 1。
這項限制特別適用于下列各項:
- ID3D11DeviceCoNtext::D ispatch— ThreadGroupCountZ 引數必須為 1。
- ID3D11DeviceCoNtext::D ispatchIndirect— 舊版硬體不支援此函式。
- numthreads- Z 值必須是 1。
執行緒群組共用記憶體 (TGSM)
下層硬體上的執行緒群組共用記憶體限制為 16Kb。 這小於 Direct3D 11 硬體可用的 32Kb。
計算著色器執行緒只能寫入自己的 TGSM 區域。 這個僅限寫入區域的大小上限為 256 個位元組或更少,隨著為群組宣告的執行緒數目增加而減少上限。
下錶針對群組中的執行緒數目,定義 TGSM 區域的每個執行緒大小上限:
群組中的執行緒數目 | 每個執行緒的 TGSM 大小上限 |
---|---|
0-64 | 256 |
65-68 | 240 |
69-72 | 224 |
73-76 | 208 |
77-84 | 192 |
85-92 | 176 |
93-100 | 160 |
101-112 | 144 |
113-128 | 128 |
129-144 | 112 |
145-168 | 96 |
169-204 | 80 |
205-256 | 64 |
257-340 | 48 |
341-512 | 32 |
513-768 | 16 |
計算著色器執行緒可以從任何位置讀取 TGSM。
D3DCompile with D3DCOMPILE_SKIP_OPTIMIZATION
當您傳遞cs_4_0做為著色器目標以及D3DCOMPILE_SKIP_OPTIMIZATION編譯選項時,D3DCompile會傳回E_NOTIMPL。 cs_5_0著色器目標適用于 D3DCOMPILE_SKIP_OPTIMIZATION。
相關主題