次の方法で共有


fcall (sm5 - asm)

インターフェイス関数の呼び出し。

fcall fp#[arrayIndex][callSite]
項目 説明
Fp#
[入力]関数ポインター。
arrayIndex
[in] オプション。 関数ポインター配列へのオフセットを指定します。 fp# がインデックス可能として宣言されていない場合、このパラメーターはリテラル符号なし整数である必要があります。 それ以外の場合、arrayIndex は、シェーダー レジスタからのリテラル ベース + オフセットの形式になります。 たとえば、fcall fp1[r1.w + 0][0] などです。
callSite
[in] オプション。 実行する関数本体 fb# を選択する、選択した関数テーブルへのリテラル符号なし整数オフセット。

解説

fp#[arrayIndex][] は、 fp# の宣言に記載されている関数テーブルの選択肢からシェーダーの外部にある API から選択された特定の関数テーブルに解決されます。

fp#arrayIndex の # の合計で、関数テーブルを選択します。 たとえば、インターフェイスが fp4[4][3] (配列サイズ 4) として宣言されている場合、 fcall は fcallfp4[2][3] と fp5[1][3] に相当します。これは、4+2 = 5+1 であるためです。

制限

  • arrayIndex が動的インデックス作成を使用する場合、隣接するシェーダー呼び出しで arrayIndex が分岐した場合の動作は未定義になります。これは、ロックステップで実行される可能性があります。 HLSL コンパイラは、このケースを禁止しようとします。

    隣接する呼び出しは、ロックステップの実行を中断しないため、フロー制御のために非アクティブになる可能性があります。

  • fp# + arrayIndex で範囲外のインデックスが指定されている場合、動作は未定義です。

  • ここで説明する未定義のケースでは、デバイスが失われる可能性を含め、現在の D3D デバイスの動作が未定義になることを意味します。 ただし、現在の D3D デバイスの外部にあるメモリは、コードとしてアクセスまたは実行されません。

この命令は、次のシェーダー ステージに適用されます。

Vertex Hull Domain ジオメトリ ピクセル Compute
X X X X X X

最小シェーダー モデル

この命令は、次のシェーダー モデルでサポートされています。

シェーダー モデル サポートされています
シェーダー モデル 5 はい
シェーダー モデル 4.1 no
シェーダー モデル 4 no
シェーダー モデル 3 (DirectX HLSL) no
シェーダー モデル 2 (DirectX HLSL) no
シェーダー モデル 1 (DirectX HLSL) no

シェーダー モデル 5 アセンブリ (DirectX HLSL)