texldl - vs

特定のサンプラーを使用してテクスチャをサンプリングします。 サンプリングされる特定のミップマップの詳細レベルは、テクスチャ座標の 4 番目のコンポーネントとして指定する必要があります。

構文

texldl dst、src0、src1

 

この場合、

  • dst は宛先レジスタです。
  • src0 は、テクスチャ サンプルのテクスチャ座標を提供するソース レジスタです。
  • src1 はソース サンプラー レジスタ (s#) を識別します。ここで、 # はサンプリングするテクスチャ サンプラー番号を指定します。 サンプラーは、 D3DSAMPLERSTATETYPE 列挙 (たとえば、D3DSAMP_MINFILTER) によって定義されたテクスチャとコントロール状態に関連付けられています。

注釈

頂点シェーダーのバージョン 1_1 2_0 2_x 2_sw 3_0 3_sw
texldl x x

 

texldl は、src1 によって参照されるサンプラー ステージで設定されたテクスチャを検索します。 詳細レベルは src0.w から選択されます。 この値には負の値を指定できます。この場合、選択された詳細レベルは、MAGFILTER を使用した "0 番目の 1" (最大のマップ) になります。 src0.w は浮動小数点値であるため、小数部の値を使用して、2 つの mip レベル間を補間します (MIPFILTER が LINEAR の場合)。 サンプラーの状態 MIPMAPLODBIAS と MAXMIPLEVEL が受け入れられます。 サンプラーの状態の詳細については、「 D3DSAMPLERSTATETYPE」を参照してください。

テクスチャが設定されていないサンプラーからシェーダー プログラムのサンプルが作成された場合、宛先レジスタで 0001 が取得されます。

これは、参照デバイス アルゴリズムの近似値です。

LOD = src0.w + LODBIAS;
if (LOD <= 0 )
{
   LOD = 0;
   Filter = MagFilter;
   tex = Lookup( MAX(MAXMIPLEVEL, LOD), Filter );
}
else
{
   Filter = MinFilter;
   LOD = MAX( MAXMIPLEVEL, LOD);
   tex = Lookup( Floor(LOD), Filter );
   if( MipFilter == LINEAR )
   {
      tex1 = Lookup( Ceil(LOD), Filter );                        
      tex = (1 - frac(src0.w))*tex + frac(src0.w)*tex1;
   }
}

制限:

  • テクスチャ座標はテクスチャ サイズでスケーリングしないでください。
  • dst は 一時レジスタ (r#) である必要があります。
  • dst は書き込みマスクを受け付けることができます。 宛先登録マスクに関するページを参照してください。
  • 不足しているコンポーネントの既定値は 0 または 1 で、テクスチャの形式によって異なります。
  • src1 は サンプラー (Direct3D 9 asm-vs) (s#) である必要があります。 src1 は negate 修飾子を使用できません。 src1 では swizzle を使用できます。これは、書き込みマスクが適用される前にサンプリング後に適用されます。 サンプラーは、シェーダーの先頭で ( dcl_samplerType (sm3 - vs asm) を使用して) 宣言されている必要があります。
  • テクスチャ サンプルの実行に必要な座標の数は、サンプラーの宣言方法によって異なります。 キューブとして宣言されている場合は、3 成分のテクスチャ座標 (.rgb) が必要です。 検証では、texldl に指定された座標は、サンプラー用に宣言されたテクスチャ ディメンションに対して十分です。 ただし、サンプル用に宣言されたディメンションと等しいディメンションを持つテクスチャ (API を介して) をアプリケーションが実際に設定することは保証されません。 このような場合、ランタイムは不一致の検出を試みます (場合によってはデバッグのみ)。 テクスチャ座標に存在するサイズよりも小さいサイズのテクスチャのサンプリングは許可され、追加のテクスチャ座標コンポーネントは無視されるものと見なされます。 逆に、テクスチャ座標に存在するよりも多くの次元を持つテクスチャのサンプリングは許可されません。
  • src0 (テクスチャ座標) が 一時レジスタ (r#) の場合は、ルックアップに必要なコンポーネント (上記) が以前に書き込まれている必要があります。
  • 符号なしの RGB テクスチャをサンプリングすると、0.0 から 1.0 の間の浮動小数点値が生成されます。
  • 符号付きテクスチャをサンプリングすると、-1.0 から 1.0 の間の浮動小数点値が生成されます。
  • 浮動小数点テクスチャをサンプリングする場合、Float16 はデータがMAX_FLOAT16内で範囲を指定することを意味します。 Float32 は、パイプラインの最大範囲が使用されることを意味します。 いずれの範囲外のサンプリングも未定義です。
  • 依存読み取り制限はありません。

頂点シェーダーの手順