texldp - ps
射影テクスチャーのロード命令です。この命令は、サンプリング直前に入力テクスチャー座標を第 4 成分 (.a または .w) で除算します。
構文
texldp dst, src0, src1 |
---|
この場合
- dst はデスティネーション レジスタです。
- src0 は、テクスチャー サンプルのテクスチャー座標が格納されたソース レジスタです。「テクスチャー座標レジスタ」を参照してください。
- src1 はサンプラー (Direct3D 9 asm-ps) (s#) を識別します。# はサンプリングするテクスチャー サンプラ番号を示します。サンプラーには、D3DSAMPLERSTATETYPE によって定義されるテクスチャーとサンプラー ステートが関連付けられます。
texldp の使用制限については、「texld」を参照してください。
解説
texldp は、サンプリング実行前に src0 から読み取った座標の射影を行います。個々のテクスチャー座標を src0.w で除算してから、テクスチャーをサンプリングします。texldb を実行しても、src0 の内容は変化しません (dst が同じレジスタである場合を除く)。texldp を使用する代わりに、シェーダー内で手動で射影除算を実行することもできます。ただし、シェーダー コード内で除算を行うと、通常、texldp 命令で実行する場合より時間がかかります。このような追加の計算はできる限り避けるようにしてください。
src0 のテクスチャー サンプリングの実行に必要な座標の数は、s# がどのように宣言されているか、および w 要素によって異なります。サンプラ タイプは、dcl_samplerType (sm2, sm3 - ps asm) で宣言します。src1 を 2D サンプラとして宣言する場合、src0 には xyw 座標を格納する必要があります。src1 をキューブ サンプラまたはボリューム サンプラとして宣言する場合、src0 には xyzw 座標を格納する必要があります。xyzw 座標を使用した 2D テクスチャーのサンプリングも可能です (z 座標は無視されます)。
ソース テクスチャーに含まれている成分が 4 つより少ない場合、欠けている成分には既定値が設定されます。既定値は、次の表に示すテクスチャー フォーマットにより異なります。
テクスチャー フォーマット | 不足の成分に使用されるデフォルト値 |
---|---|
D3DFMT_R5G6B5、D3DFMT_R8G8B8、D3DFMT_L8、D3DFMT_L16、D3DFMT_R3G3B2、D3DFMT_CxV8U8、 D3DFMT_L6V5U5 | A = 1.0 |
D3DFMT_V8U8、D3DFMT_V16U16、D3DFMT_G16R16、D3DFMT_G16R16F、D3DFMT_G32R32F | B = A = 1.0 |
D3DFMT_A8 | R = G = B = 0.0 |
D3DFMT_R16F、D3DFMT_R32F | G = B = A = 1.0 |
すべての深度/ステンシル フォーマット | R = B = 0.0, A = 1.0 |
この命令は、次のバージョンでサポートされています。
ピクセル シェーダーのバージョン | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texldp | x | x | x | x | x |
ps_2_0 および ps_2_x
dst はテンポラリ レジスタ (r#) でなければなりません。.xyzw マスク (既定のマスク) のみを使用できます。
src0 はテクスチャー座標レジスタ (t#) またはテンポラリ レジスタ (r#) でなければなりません。修飾子またはスィズルは指定できません。
src1 はサンプラー (Direct3D 9 asm-ps) (s#) であることが必要です。また、src1 に修飾子またはスィズルは指定できません。
(D3DPSHADERCAPS2_0 で) D3DD3DPSHADERCAPS2_0_NODEPENDENTREADLIMIT CAP ビットが設定されていない場合、テクスチャー命令 (texld、texldp、texldb - ps、texldd) の順序について依存関係が発生するのは、最大 3 レベルまでです。第 1 の順序依存テクスチャー命令は、テクスチャー命令です。ここで、
- src0 はテンポラリ レジスタ (r#) です。
- dst は既に書き込まれていて、ここで再度書き込みが実行されます。
第 2 の順序従属テクスチャー命令は、そのテクスチャー命令を実行する前の内容が、第 1 の順序従属テクスチャー命令の結果に依存する (場合によっては間接的に) テンポラリ レジスタ (r#) に対して、読み取りまたは書き込みを行うテクスチャー命令で定義されます。第 n の順序従属テクスチャー命令は、第 (n - 1) 順位のテクスチャー命令から派生します。
ps_3_0
ps_3_0 の場合、src1 はサンプラー (Direct3D 9 asm-ps) (s#) であることが必要です。また、src1 に修飾子は指定できません。src1 ではスィズルを使用できます。スィズルを適用すると、dst に書き込まれる前に、テクスチャー ルックアップ結果がスィズルされます。