ダウンレベルのハードウェア上のコンピュート シェーダー
Direct3D 11 ではコンピュート シェーダーを使用できます。このシェーダーは、操作上の制限がいくつかあるものの、Direct3D 10.x のほとんどのハードウェアでも動作します。
ダウンレベルのハードウェアでのコンピュート シェーダーは、Direct3d 10.x と互換性のあるデバイスでのみサポートされます。Direct3D 9.x ハードウェアでは、コンピュート シェーダーを使用できません。
Unordered Access View (UAV)
ダウンレベルのハードウェアでは、未処理の UAV (RWByteAddressBuffer) と構造化された UAV (RWStructuredBuffer) が次の制限付きでサポートされています。
- ID3D11DeviceContext::CSSetUnorderedAccessViews を使用して、一度に 1 つの UAV のみをパイプラインにバインドできます。
- 未処理の UAV の基本オフセットは、256 バイト境界でアライメントする必要があります (Direct3D 11 ハードウェアでは、16 バイトのアライメントが必要)。
型付きの UAV は、ダウンレベルのハードウェアではサポートされていません。この UAV には、Texture1D、Texture2D、および Texture3D があります。
ダウンレベルのハードウェア上のピクセル シェーダーでは、順序を設定していないアクセスはサポートされていません。
シェーダー リソース ビュー (SRV)
シェーダー リソース ビューとしての未処理バッファーと構造化バッファーでは、Direct3D ハードウェア上に存在する場合に、ダウンレベルのハードウェアに対する読み取り専用アクセスがサポートされています。これらの種類のリソースは、コンピュート シェーダーの他に、頂点シェーダー、ジオメトリ シェーダー、およびピクセル シェーダーでサポートされています。
スレッド グループ
コンピュート シェーダーは、同じスレッド グループにある多数のスレッドで並列実行できます。
ダウンレベルのハードウェアでは、スレッド グループが次の制限付きでサポートされています。
スレッド グループの次元
ダウンレベルのハードウェアで定義するスレッド グループは、X 次元と Y 次元が 768 に制限されており、Direct3D 11 ハードウェアでの最大値 1024 より少なくなっています。Z 次元の最大値は 64 で変わりません。
グループの合計スレッド数 (X Y Z) は 768 に制限されており、Direct3D 11 ハードウェアでの制限値 1024 より少なくなっています。
これらの数値を超えると、シェーダーのコンパイルは失敗します。
2 次元のスレッド インデックス
スレッド グループ内の個々のスレッドには、(x,y,z) によって与えられる 3D ベクトルを使用してインデックスが付けられます。
ダウンレベルのハードウェアで動作するコンピュート シェーダーでは、2 次元のみがスレッド グレープでサポートされています。つまり、3D ベクトルの Z 値は必ず 1 とする必要があります。
この制限は、特に次の場合に適用されます。
- ID3D11DeviceContext::Dispatch—ThreadGroupCountZ 引数に 1 を指定する必要があります。
- ID3D11DeviceContext::DispatchIndirect— この関数は、ダウンレベルのハードウェアではサポートされていません。
- numthreads— Z 値を 1 とする必要があります。
スレッド グループ共有メモリー (TGSM)
ダウンレベルのハードウェアでは、スレッド フループ共有メモリーが 16 KB に制限されています。Direct3D 11 ハードウェアでは、これよりも多い 32 KB を使用できます。
コンピュート シェーダーのスレッドからは、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 を読み取ることができます。