Share via


texldl - ps

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

構文

texldl dst, src0, src1

この場合

  • dst はデスティネーション レジスタです。
  • src0 は、テクスチャー サンプルのテクスチャー座標が格納されたソース レジスタです。「テクスチャー座標レジスタ」を参照してください。
  • src1 はソース サンプラ レジスタ (s#) を識別します。# はサンプリングするテクスチャー サンプラ番号を示します。サンプラには、D3DSAMPLERSTATETYPE 列挙 (たとえば D3DSAMP_MINFILTER) で定義されるテクスチャおよび制御の状態が関連付けられています。

解説 

ピクセル シェーダーのバージョン 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texldl x x

texldl は、src1 が参照するサンプラ ステージで設定されるテクスチャーをルックアップします。詳細レベルは src0.w から選択されます。この値は負になることがあり、その場合に選択される詳細レベルは、MAGFILTER での 0 番目のもの (最大マップ) になります。src0.w は浮動小数点値なので、2 つのミップ レベル間の補間には小数の値が使われます (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-ps) (s#) でなければなりません。src1 で正負の反転修飾子を使うことはできません (「デスティネーション レジスタ書き込みマスク」を参照)。src1 ではスィズルを使用できます (「ソース レジスタのスィズル」を参照)。スィズルはサンプリング後、書き込みマスク (「デスティネーション レジスタ書き込みマスク」を参照) が受け入れられる前に適用されます。サンプラ は、シェーダーの先頭で (dcl_samplerType (sm2, sm3 - ps asm) を使って) 宣言しなければなりません。
  • テクスチャー サンプリングの実行に必要な座標の数は、サンプラがどのように宣言されているかによって異なります。キューブとして宣言されている場合は、3 要素のテクスチャー座標 (.rgb) が必要です。検証によって、tex_ldl に指定された座標が、サンプラに宣言されたテクスチャーの次元に足りるかどうかが確認されます。ただし、サンプラに対して宣言したものと等しいディメンジョンのテクスチャーを、アプリケーションが API を通じて実際に設定するとは限りません。このような場合は、ランタイムが不一致を検出しようとします (場合によってはデバッグ時のみ)。テクスチャー座標内にあるものより低いディメンジョンでテクスチャーをサンプリングすることは可能であり、その際、不要なテクスチャー座標成分は無視されます。逆に、テクスチャー座標内にあるものより高いディメンジョンでテクスチャーをサンプリングしても無効です。
  • src0 (テクスチャー座標) が テンポラリ レジスタ の場合は、上記のルックアップに必要な要素があらかじめ書き込まれている必要があります。
  • 符号なし RGB テクスチャーをサンプリングすると、0.0 ~ 1.0 の浮動小数点値の結果が得られます。
  • 符号付きテクスチャーのサンプリング結果は、-1.0 ~ 1.0 の浮動小数点数値になります。
  • 浮動小数点テクスチャーをサンプリングする場合、Float16 は、データの範囲が MAX_FLOAT16 までに収まることを意味します。Float32 はパイプラインの最大範囲が使われることを意味します。これら以外の範囲のサンプリングは未定義です。
  • 従属読み込みの制限はありません。