コンピューティング シェーダーの概要
コンピューティング シェーダーは、グラフィックス プログラミングを超えて 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、および型指定された順序なしのアクセス ビュー (RWTexture1D、RWTexture2D、RWTexture3D など) をサポートします。
- アトミック命令を使用できます。
- 倍精度サポートが利用できる場合があります。 倍精度を使用できるかどうかを判断する方法については、「 D3D11_FEATURE_DOUBLES」を参照してください。
このセクションの内容
トピック | 説明 |
---|---|
新しいリソースの種類 |
Direct3D 11 では、いくつかの新しいリソースの種類が追加されました。 |
リソースへのアクセス |
リソースにアクセスするには、いくつかの方法があります。 |
Atomic 関数 |
新しいリソースの種類または共有メモリにアクセスするには、インターロックされた組み込み関数を使用します。 インターロックされた関数は、アトミックに動作することが保証されます。 つまり、プログラムされた順序で発生することが保証されます。 このセクションでは、アトミック関数の一覧を示します。 |