swapc (sm5 - asm)
2 つの入力レジスタ間の値のコンポーネントごとの条件付きスワップを実行します。
swapc dst0[.mask], dst1[.mask], src0[.swizzle], src1[.swizzle], src2[.swizzle] |
---|
Item | 説明 |
---|---|
dst0 |
[入力]任意の空でない書き込みマスクを使用して登録します。
dst1 とは異なる必要があります。 |
dst1 |
[入力]任意の空でない書き込みマスクを使用して登録します。
dst0 とは異なる必要があります。 |
src0 |
[入力]4 つの条件を提供します。 0 以外の整数値は true を意味します。 |
src1 |
[入力]スワップする値の 1 つ。 |
src2 |
[入力]スワップする値の 1 つ。 |
注釈
この命令のエンコーディングは、2 つの 4 コンポーネント レジスタ間でスカラーの複数の並列条件付きスワップをコンパクトに表現しようとします。スワップに関係する数値のペアの配置は若干の柔軟性があります。
src0、src1、src2 のレジスタと値の選択は、movc のように、どのような方法でも制約されません。
この命令のセマンティクスは、 movc 命令と同等の操作で記述できます。 次の例では、最悪のケースを示しています。宛先レジスタが最後まで更新されないことを確認します。
swapc dst0[.mask],
dst1[.mask],
src0[.swizzle],
src1[.swizzle],
src2[.swizzle]
expands to:
movc temp[dst0 s mask],
src0[.swizzle],
src2[.swizzle], src1[.swizzle]
movc dst1[.mask],
src0[.swizzle],
src1[.swizzle], src2[.swizzle]
mov dst0.mask, temp
直接ではない場合は、タスクに取り組む方法を選択できます。 たとえば、同じ効果は、最大 4 つの単純なスカラー条件付きスワップのシーケンス、または上記のように、2 つのベクター movc 命令に加えて、拡張の最中の以前の操作によってソース値がクローバーされないようにするためのオーバーヘッドによって実現できます。
並べ替えには、この命令を使用します。
この命令は、次のシェーダー ステージに適用されます。
Vertex | Hull | Domain | ジオメトリ | ピクセル | Compute |
---|---|---|---|---|---|
X | X | X | X | X | X |
最小シェーダー モデル
この命令は、次のシェーダー モデルでサポートされています。
シェーダー モデル | サポートされています |
---|---|
シェーダー モデル 5 | はい |
シェーダー モデル 4.1 | X |
シェーダー モデル 4 | X |
シェーダー モデル 3 (DirectX HLSL) | X |
シェーダー モデル 2 (DirectX HLSL) | X |
シェーダー モデル 1 (DirectX HLSL) | X |