ld (sm4 - asm)
指定された整数アドレスを使用して、フィルター処理 (ポイント サンプリングなど) を行わずに、指定されたバッファーまたはテクスチャからデータをフェッチします。 ソース データは、TextureCube 以外の任意のリソースの種類から取得できます。
ld[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle] |
---|
アイテム | 説明 |
---|---|
dest |
[in] 演算の結果のアドレス。 |
srcAddress |
[in] サンプルを実行するために必要なテクスチャ座標。 |
srcResource |
[in] フェッチ元のテクスチャまたはバッファーを識別するために宣言されている必要があるテクスチャ レジスタ (t#)。 |
解説
この命令は、sample 命令に代わる簡略化された方法です。 sample とは異なり、ld はバッファーからデータをフェッチすることもできます。 ld は、マルチサンプル リソースからフェッチすることもできます (ピクセル シェーダーでのみ)。
srcAddress は、サンプルを実行するために必要なテクスチャ座標のセットを符号なし整数の形式で提供します。 srcAddress が範囲外 [0...(ディメンション内のテクセル数 -1)] の場合、範囲外の動作が呼び出されます。ld は srcResource の形式の不足していないすべてのコンポーネントで 0 を返し、不足しているコンポーネントには既定値を返します。 範囲外のアドレス動作をより柔軟に制御したいアプリケーションでは、サンプラー状態として定義されたアドレス ラップ/ミラー/クランプ/境界線動作が受け入れられるため、sample 命令を代わりに使用する必要があります。
srcAddress.a (POS-swizzle) は、常に符号なし整数ミップマップ レベルを提供します。 値が [0...(リソース内のミップレベルの数 -1)]) の範囲外の場合、範囲外の動作が呼び出されます。 リソースがバッファーであり、ミップマップを持つことができない場合、srcAddress.a は無視されます
srcAddress.gb (POS-swizzle) は、バッファーおよび texture1D (非配列) では無視されます。 srcAddress.b (POS-swizzle) は、texture1D 配列と texture2D では無視されます。
texture1D 配列の場合、srcAddress.g (POS-swizzle) は配列インデックスを符号なし整数として提供します。 値が使用可能な配列インデックス [0...(配列サイズ -1)] の範囲外の場合、範囲外の動作が呼び出されます。
texture2D 配列の場合、srcAddress.b (POS-swizzle) は配列インデックスを提供します。それ以外の場合は texture1D の場合と同じセマンティクスを使用します。
何もバインドされていない t# からフェッチすると、すべてのコンポーネントに対して 0 が返されます。
アドレス オフセット
省略可能な [_aoffimmi(u,v,w)] サフィックス (即時整数によるアドレス オフセット) は、ld のテクスチャ座標が、指定された即時テクセル空間整数定数値のセットによってオフセットされることを示します。 リテラル値は、整数範囲 [-8,7] を持つ 4 ビット 2 の補数のセットです。 この修飾子は、配列を含む texture1D/2D/3D にのみ定義され、バッファーには定義されません。
オフセットは、ld によってアクセスされるミップレベルを基準にして、テクセル空間内のテクスチャ座標に追加されます。
アドレス オフセットは、texture1D/2D 配列の配列軸に沿って適用されません。
_aoffimmi v,w コンポーネントは、texture1D では無視されます。
_aoffimmi w コンポーネントは、texture2D では無視されます。
ld のテクスチャ座標は符号なし整数であるため、オフセットによってアドレスが 0 未満になると、大きなアドレスにラップされ、範囲外アクセスが発生します。
戻り値の型コントロール
ld によって宛先レジスタに返されるデータ形式は、sample 命令で説明したのと同じ方法で決定されます。これは srcResource パラメータ (t#) にバインドされた形式に基づいています。
sample 命令と同様に、ld の戻り値は、形式に存在しないコンポーネントの形式に固有の既定値を持つ 4 つのベクトルです。 srcResource のスウィズルにより、テクスチャの読み込みから返される 4 つのコンポーネントの結果をスウィズルする方法が決まります。その後、dest の .mask によって、dest 内で更新されるコンポーネントが決まります。
32 ビット浮動小数点値が ld によって 32 ビット レジスタに読み取られると、ビットは変更されません。つまり、非正規値は非正規のままになります。 これは sample 命令とは異なります。
その他の詳細
ld 命令に関連付けられたフィルター処理がないため、LOD バイアスなどの概念は ld には適用されません。 したがって、サンプラー s# パラメータはありません。
制限
- srcResource は、TextureCube ではなく t# レジスタである必要があります。 srcResource は、定数バッファーにすることも、t# レジスタにバインドすることもできません。
- srcResource での相対アドレス指定は許可されていません。
- srcAddress は、一時 (r#/x#)、定数 (cb#)、入力 (v#) のいずれかのレジスタである必要があります。
- dest は、一時 (r#/x#) または出力 (o*#) のいずれかのレジスタである必要があります。
この命令は、次のシェーダー ステージに適用されます。
頂点シェーダー | ジオメトリ シェーダー | ピクセル シェーダー |
---|---|---|
x | x | x |
最小シェーダー モデル
この関数は、次のシェーダー モデルでサポートされています。
シェーダー モデル | サポートされています |
---|---|
シェーダー モデル 5 | はい |
シェーダー モデル 4.1 | はい |
シェーダー モデル 4 | はい |
シェーダー モデル 3 (DirectX HLSL) | いいえ |
シェーダー モデル 2 (DirectX HLSL) | いいえ |
シェーダー モデル 1 (DirectX HLSL) | いいえ |