共用方式為


較舊硬體的計算著色器

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_OPTIONSComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x 成員中傳 回 true

10Level9 參考 一節列出了各種 ID3D11DeviceID3D11DeviceContext 方法在不同 10Level9 功能層級上行為的差異。

未排序的存取檢視 (UAV)

在舊版硬體上支援 Raw(RWByteAddressBuffer)和 Structured(RWStructuredBuffer)非排序存取檢視,但有下列限制:

舊型硬體不支援類型化的UAV。 這包括 Texture1DTexture2DTexture3D UAV。

較低階硬體上的像素著色器不支援無序訪問。

著色器資源檢視【SRV】

舊版硬體支援原始和結構化緩衝區作為著色器資源檢視,以便進行唯讀存取,因為它們位於 Direct3D 11 硬體上。 頂點著色器、幾何著色器、圖元著色器以及計算著色器都支援這些資源類型。

線程群組

計算著色器可以在線程群組內的多個線程上平行執行。

下層硬體支援線程群組,但有下列限制:

線程群組維度

針對下層硬體定義的線程群組限制為 768 的 X 和 Y 維度。 這小於 Direct3D 11 硬體的 1024 最大值。 最大 Z 維度為 64 不變。

群組中的線程總數(X × Y × Z) 限制為 768。 這小於 Direct3D 11 硬體的 1024 限制。

如果超過這些數位,著色器編譯將會失敗。

Two-Dimensional 線程索引

線程群組中的特定線程會使用指定的 3D 向量來編製索引(x,y,z)。

對於在舊版硬體上運作的計算著色器,線程群組僅支援兩個維度。 這表示 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_SKIP_OPTIMIZATION 的 D3DCompile

當您將 cs_4_0 作為著色器目標並使用 D3DCOMPILE_SKIP_OPTIMIZATION 編譯選項時,D3DCompile 會返回 E_NOTIMPL。 cs_5_0著色器目標適用於 D3DCOMPILE_SKIP_OPTIMIZATION

下層硬體上的 Direct3D 11