計算シェーダーの概要

計算シェーダーは、グラフィックス プログラミングを超えて Microsoft Direct3D 11 を拡張するプログラミング可能なシェーダー ステージです。 コンピューティング シェーダー テクノロジは、DirectCompute テクノロジとも呼ばれる。

他のプログラミング可能なシェーダー (頂点シェーダーやジオメトリ シェーダーなど) と同様に、計算シェーダーは HLSL で設計および実装されますが、これは類似性が終了する場所に関する問題です。 計算シェーダーは、高速な汎用コンピューティングを提供し、グラフィックス処理装置 (GPU) 上の多数の並列プロセッサを利用します。 計算シェーダーは、メモリ共有とスレッド同期機能を提供し、より効果的な並列プログラミング手法を可能にします。 ID3D11DeviceContext::D ispatchまたは ID3D11DeviceContext::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) に制限されます。
  • シェーダーにバインドできる順序指定されていないアクセス ビューは 1 つのみです (D3D11 _ CS _ 4 _ X _ UAV _ REGISTER COUNT は _ 1)。
  • 順序 指定されていないアクセスビューとして使用できるのは、RWStructuredBuffer s と RWByteAddressBufferののみです。
  • スレッドは、書き込み用のグループ間のメモリ内の独自のリージョンにのみアクセスできます。しかし、任意の場所から読み取る場合があります。
  • SV _GroupIndex または SV _ GroupThreadID は、書き込みのためにグループのハードメモリにアクセスするときに使用する必要があります。
  • グループのハードメモリ は、グループあたり 16 KB に制限されます。
  • 1 つのスレッドは、書き込み用のグループハード メモリの 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) です。
  • RWStructuredBuffer s、RWByteAddressBuffer、および型指定された順序指定されていないアクセス ビュー(RWTexture1D、RWTexture2D、RWTexture3Dなど) をサポートします。
  • アトミック命令を使用できます。
  • 倍精度のサポートを利用できる場合があります。 倍精度が使用可能かどうかを判断する方法については 、「D3D11 _ FEATURE _ DOUBLES 」を参照してください

このセクションの内容

トピック 説明
新しいリソースの種類
Direct3D 11 には、いくつかの新しいリソースの種類が追加されました。
リソースへのアクセス
リソース にアクセスするには、いくつかの方法 があります
アトミック関数
新しいリソースの種類または共有メモリにアクセスするには、インターロック組み込み関数を使用します。 インタロックされた関数は、アトミックに動作する保証があります。 つまり、プログラムされた順序で発生が保証されます。 このセクションでは、アトミック関数の一覧を示します。

グラフィックス パイプライン

方法: 計算シェーダーを作成する