下層硬體上的計算著色器

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 參考區段列出各種ID3D11DeviceID3D11DeviceCoNtext方法在不同 10Level9 功能層級的行為差異。

未排序的 Access 檢視 (UAV)

舊版硬體支援原始 (RWByteAddressBuffer) 和結構化 (RWStructuredBuffer) 未排序存取檢視,但有下列限制:

舊版硬體不支援具類型的 UAV。 這包括 Texture1DTexture2DTexture3D 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。

這項限制特別適用于下列各項:

執行緒群組共用記憶體 (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

下層硬體上的 Direct3D 11