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 番目の 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-ps) (s#) である必要があります。 src1 は negate 修飾子を使用できません ( 宛先レジスタ書き込みマスクに関するページを参照してください)。 src1 では swizzle を使用できます ( 「ソース レジスタ スウィズリング」を参照)、これはサンプリング後に適用されますが、書き込みマスクの前に適用されます (宛先レジスタ書き込みマスクを参照)。 サンプラーは、シェーダーの先頭で ( 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 は、パイプラインの最大範囲が使用されることを意味します。 いずれの範囲外のサンプリングも未定義です。
- 依存読み取り制限はありません。
関連トピック