計算著色器概觀

計算著色器是可程式化著色器階段,可擴充 Microsoft Direct3D 11 超過圖形程式設計。 計算著色器技術也稱為 DirectCompute 技術。

如同其他可程式化著色器 (頂點和幾何著色器,例如) ,計算著色器是使用 HLSL 設計及實作,但這與相似度結束之處有關。 計算著色器提供高速一般用途運算,並且利用了圖形處理器 (GPU) 大量平行處理器的優勢。 計算著色器提供了記憶體共用以及執行緒同步功能,讓平行程式設計方法更有效率。 您可以呼叫 ID3D11DeviceCoNtext::D ispatchID3D11DeviceCoNtext::D ispatchIndirect 方法,以在計算著色器中執行命令。 計算著色器可在許多執行緒上平行執行。

在 Direct3D 10.x 硬體上使用計算著色器

Microsoft Direct3D 10 上的計算著色器也稱為 DirectCompute 4.x。

如果您使用 Direct3D 11 API 和更新的驅動程式, 功能層級 10 和 10.1 Direct3D 硬體可以選擇性地支援使用 cs_4_0 和 cs_4_1 設定檔的有限 DirectCompute 形式。 當您在此硬體上使用 DirectCompute 時,請記住下列限制:

  • 執行緒數目上限限制為每個群組D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP (768) 。
  • numthreads的 X 和 Y 維度限制為 D3D11_CS_4_X_THREAD_GROUP_MAX_X (768) 和 D3D11_CS_4_X_THREAD_GROUP_MAX_Y (768) 。
  • numthreads的 Z 維度限制為 1。
  • 分派的 Z 維度限制為D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION (1) 。
  • 只有一個未排序的存取檢視可以系結至著色器 (D3D11_CS_4_X_UAV_REGISTER_COUNT為 1) 。
  • 只有 RWStructuredBuffersRWByteAddressBuffers可作為 unordered-access 檢視。
  • 執行緒只能在群組共用記憶體中存取自己的區域進行寫入,但可以從任何位置讀取。
  • 存取群組共用記憶體以進行寫入時,必須使用SV_GroupIndex或SV_GroupThreadID
  • 群組共用 記憶體限制為每個群組 16KB。
  • 單一線程限制為 群組共用 記憶體的 256 位元組區域,以供寫入。
  • 沒有不可部分完成的指令可供使用。
  • 沒有雙精確度值可用。

在 Direct3D 11.x 硬體上使用計算著色器

Direct3D 11 上的計算著色器也稱為 DirectCompute 5.0。

當您搭配cs_5_0 設定檔使用 DirectCompute 時,請記住下列專案:

  • 執行緒數目上限限制為每個群組D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP (1024) 。
  • numthreads的 X 和 Y 維度限制為 D3D11_CS_THREAD_GROUP_MAX_X (1024) 和 D3D11_CS_THREAD_GROUP_MAX_Y (1024) 。
  • numthreads的 Z 維度限制為D3D11_CS_THREAD_GROUP_MAX_Z (64) 。
  • 分派的最大維度限制為D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535) 。
  • 可以系結至著色器的未排序存取檢視數目上限為 D3D11_PS_CS_UAV_REGISTER_COUNT (8) 。
  • 支援 RWStructuredBuffersRWByteAddressBuffers和 typed unordered-access 檢視 (RWTexture1DRWTexture2DRWTexture3D等等) 。
  • 不可部分完成的指令可供使用。
  • 可能會提供雙精確度支援。 如需如何判斷雙精確度是否可用的詳細資訊,請參閱 D3D11_FEATURE_DOUBLES

本節內容

主題 描述
新增資源類型
Direct3D 11 中已新增數個新的資源類型。
存取資源
有數種方式可以存取 資源
Atomic 函式
若要存取新的資源類型或共用記憶體,請使用連結的內建函式。 保證會以不可部分完成的方式操作內嵌函式。 也就是說,它們保證會依程式設計的順序發生。 本節列出不可部分完成的函式。

圖形管線

如何:建立計算著色器