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