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

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-64256
65-68240
69-72224
73-76208
77-84192
85-92176
93-100160
101-112144
113-128128
129-144112
145-16896
169-20480
205-25664
257-34048
341-51232
513-76816

コンピュート シェーダーのスレッドは、あらゆる場所から TGSM を読み取ることができます。

関連項目

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

表示: