ソース レジスタのスウィズリング (HLSL PS リファレンス)
Swizzling は、ソース レジスタ コンポーネントを一時レジスタ コンポーネントにコピーする機能を指します。 Swizzling はソース レジスタ データには影響しません。 命令が実行される前に、ソース レジスタ内のデータが一時レジスタにコピーされます。
ソース スウィズリング
ソース スウィズルを使用すると、計算のためにレジスタを読み取る前に、ソース レジスタの個々のコンポーネントが同じソース レジスタの 4 つのコンポーネントの値を受け取ることができます。
たとえば、.zxxy swizzle は次のことを意味します。
- .x コンポーネントは.z コンポーネントの値を受け取ります
- .y コンポーネントは.x コンポーネントの値を受け取ります
- .z コンポーネントは .x コンポーネントの値を受け取ります
- .w コンポーネントは.y コンポーネントの値を受け取ります
コンポーネントは任意の順序で表示できます。 4 つ未満のコンポーネントを指定すると、最後のコンポーネントが繰り返されます。 次に例を示します。
.xy = .xyyy
.wzx = .wzxx
.z = .zzzz
コンポーネントが指定されていない場合、スウィズリングは適用されません。
一部の手順では、ソース スウィズルに制限があります。 これらは、優先される命令参照ページに一覧表示されます。
ピクセル シェーダーのバージョン | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
.x | x | x | x | x | x | x | |||
。Y | x | x | x | x | x | x | |||
。Z | ○* | ○* | ○* | x | x | x | x | x | x |
。W | x | x | x | x | x | x | x | x | x |
.xyzw (既定値) | x | x | x | x | x | x | x | x | x |
.yzxw | x | x | x | x | x | ||||
.zxyw | x | x | x | x | x | ||||
.wzyx | x | x | x | x | x | ||||
任意のスウィズル | x | x | x | x |
* 宛先書き込みマスクが .w (.a) の場合にのみ使用できます。
任意のスウィズル
スウィズルは任意の順序でソースレジスタに適用できます。つまり、任意のソース レジスタは、任意の順序で任意のコンポーネント マスクを受け取ることができます。
Swizzle をレプリケートする
スウィズルをレプリケートすると、あるコンポーネントが別のコンポーネントにコピーされます。 これは、.x、.y、.z、.w swizzle コンポーネント (または .r、.g、.b、.a 相当) のいずれかを指定する必要があります。
関連トピック