コンピューティング シェーダーの概要

コンピューティング シェーダーは、グラフィックス プログラミングを超えて 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 です)。
  • 順序なしのアクセス ビューとして使用できるのは、 RWStructuredBuffers と 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) です。
  • RWStructuredBuffers、RWByteAddressBuffer、および型指定された順序なしのアクセス ビュー (RWTexture1DRWTexture2DRWTexture3D など) をサポートします。
  • アトミック命令を使用できます。
  • 倍精度サポートが利用できる場合があります。 倍精度を使用できるかどうかを判断する方法については、「 D3D11_FEATURE_DOUBLES」を参照してください。

このセクションの内容

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

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

方法: コンピューティング シェーダーを作成する