デスティネーション レジスタのマスキング
マスキングでは、命令の結果によってデスティネーション レジスタのどの要素が更新されるかを指定します。テクスチャー レジスタには一連の規則があり、非テクスチャー レジスタにはまた別の一連の規則があります。
- デスティネーション レジスタのマスキング - このトピックでは、デスティネーション レジスタにマスクを適用する際の規則について説明します。
- テクスチャー レジスタのマスク - テクスチャー レジスタには、いくつかの特有の規則があります。
次の表に示すように、マスキング (r は有効な頂点シェーダー「頂点シェーダー レジスタ」の 1 つです) はベクトル データの個々の要素に対して適用することができます。
要素修飾子 | 説明 |
---|---|
r.{x | デスティネーション マスク |
- 一般には、デスティネーション レジスタの書き込みマスクを指定するのが適切なコーディング スタイルです。それによってコードが読みやすくなり、保守しやすくなります。
- x が y の前にあり、y が z の前にあり、z が w の前にある限り、どのような要素の組み合わせを指定してもかまいません (指定しなくてもかまいません)。
- oPts および oFog 出力レジスタでは、1 つのマスクだけを使用しなければなりません。
- exp、expp、log、logp、pow、rcp、rsq の各命令では、デスティネーション レジスタで 1 つの書き込みマスクを使用する必要があります。
- バージョン 1.0 では、frc 命令に .x、.y、または .xy のいずれかのマスクの組み合わせが必要でした。バージョン 2.0 には、マスクの制限はありません。
- sincos には、.x、.y、または .xyz のいずれかのマスクの組み合わせが必要です。
- m3x2 には、.xy 書き込みマスクが必要です。
- m3x3 および m4x3 には、.xyz 書き込みマスクが必要です。
- m3x4 および m4x4 には、.xyz 書き込みマスクまたはデフォルトの書き込みマスク (xyzw) が必要です。
テクスチャー レジスタのマスク
テクスチャー座標レジスタで修飾子を使用する際の検証規則は、他のレジスタの検証規則より厳格です。
- oTn が書き込まれる場合は、それ以前のすべてのレジスタ (oTn-1 ~ oT0) も書き込まれる必要があります。
- 任意の oT# レジスタに対する "組み合わせの" 書き込みマスクは、次のいずれかでなければなりません。
- .x
- .xy
- .xyz
- .xyzw (要素修飾子をまったく使わないのと同等)
たとえば、頂点シェーダーは別々の命令でテクスチャー レジスタに出力することができます。
oT1.y
oT0.y
oT2
oT0.xz
oT1.x
または、命令を組み合わせることもできます。
oT0.xyz
oT1.xy
oT2.xyzw
これらの制限は、テクスチャー座標レジスタにのみ適用されます。