スウィズリングとは、ソース レジスタ コンポーネントを任意の一時レジスタ コンポーネントにコピーする機能を指します。 スウィズリングはソース レジスタ データには影響しません。 命令が実行される前に、ソース レジスタ内のデータが一時レジスタにコピーされます。
ソース スウィズリング
ソース スウィズルを使用すると、計算のためにレジスタを読み取る前に、ソース レジスタの個々のコンポーネントが同じソース レジスタの 4 つのコンポーネントの値を受け取ることができます。
たとえば、.zxxy スウィズルは次のことを意味します。
- .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 | x | x | x |
.w | x | x | x | x | x | x | x | x | x |
.xyzw (既定値) | x | x | x | x | x | x | x | x | x |
.zfxw | x | x | x | x | x | ||||
.zxyw | x | x | x | x | x | ||||
.wzyx | x | x | x | x | x | ||||
任意のスウィズル | x | x | x | x |
* 宛先書き込みマスクが .w (.a) の場合にのみ使用できます。
任意のスウィズル
スウィズルは任意の順序でソースレジスタに適用できます。つまり、任意のソース レジスタが任意の順序で任意のコンポーネント マスクを受け取ることができます。
スウィズルのレプリケート
スウィズルをレプリケートすると、あるコンポーネントが別のコンポーネントにコピーされます。 これは、.x、.y、.z、.w スウィズル コンポーネント (または .r、.g、.b、.a と同等のもの) の 1 つを指定する必要があります。
関連トピック