次の方法で共有


デスティネーション レジスタのマスキング

マスキングでは、命令の結果によってデスティネーション レジスタのどの要素が更新されるかを指定します。テクスチャー レジスタには一連の規則があり、非テクスチャー レジスタにはまた別の一連の規則があります。

  • デスティネーション レジスタのマスキング - このトピックでは、デスティネーション レジスタにマスクを適用する際の規則について説明します。
  • テクスチャー レジスタのマスク - テクスチャー レジスタには、いくつかの特有の規則があります。

次の表に示すように、マスキング (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    

これらの制限は、テクスチャー座標レジスタにのみ適用されます。