switch ステートメント
セレクターの値に応じて、スイッチ本体内の別のステートメント ブロックに制御を転送します。
[Attribute] switch( Selector ) { case 0 : { StatementBlock; } break; case 1 : { StatementBlock; } break; case n : { StatementBlock; } break; default : { StatementBlock; } break;
パラメーター
-
属性
-
ステートメントのコンパイル方法を制御する省略可能なパラメーター。 属性が指定されていない場合、コンパイラはハードウェア スイッチを使用するか、一連の if ステートメントを出力できます。
属性 説明 フラット化 (flatten) ステートメントを一連の if ステートメントとしてコンパイルし、それぞれ flatten 属性を使用します。 分岐 branch 属性を持つ一連の if ステートメントとしてステートメントをコンパイルします。 メモ:シェーダー モデル 2.x またはシェーダー モデル 3.0 を使用する場合、動的分岐を使用するたびにリソースが消費されます。 そのため、これらのプロファイルをターゲットにしたときに動的分岐を過剰に使用すると、コンパイル エラーが発生する可能性があります。 forcecase ハードウェアで switch ステートメントを強制します。 メモ:機能レベル 10_0 以降のハードウェアが必要です。 call スイッチ内の個々のケースの本体はハードウェア サブルーチンに移動され、スイッチは一連のサブルーチン呼び出しになります。 メモ:機能レベル 10_0 以降のハードウェアが必要です。 -
セレクター
-
変数。 中かっこ内の case ステートメントは、それぞれこの変数チェックして、SwitchValue が特定の CaseValue と一致するかどうかを確認します。
-
StatementBlock
-
1 つ以上の ステートメント。
注釈
[branch] switch(a)
{
case 0:
return 0;
case 1:
return 1;
case 2:
return 3;
default:
return 6;
}
次に相当します。
[branch] if( a == 2 )
return 3;
else if( a == 1 )
return 1;
else if( a == 0 )
return 0;
else
return 6;
forcecase 属性と呼び出しフロー制御属性の使用例を次に示します。
[forcecase] switch(a)
{
case 0:
return 0;
case 1:
return 1;
case 2:
return 3;
default:
return 6;
}
[call] switch(a)
{
case 0:
return 0;
case 1:
return 1;
case 2:
return 3;
default:
return 6;
}
要件
要件 | 値 |
---|---|
ヘッダー |
|