ダウンレベルのハードウェア上のコンピュート シェーダー

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 には、Texture1DTexture2D、および 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 とする必要があります。

この制限は、特に次の場合に適用されます。

スレッド グループ共有メモリー (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 を読み取ることができます。

関連項目

ダウンレベルのハードウェア上の Direct3D 11