ID3D12Resource::WriteToSubresource メソッド (d3d12.h)
CPU を使用してデータをサブリソースにコピーし、CPU が未定義のレイアウトを持つほとんどのテクスチャの内容を変更できるようにします。
構文
HRESULT WriteToSubresource(
UINT DstSubresource,
[in, optional] const D3D12_BOX *pDstBox,
[in] const void *pSrcData,
UINT SrcRowPitch,
UINT SrcDepthPitch
);
パラメーター
DstSubresource
型: UINT
サブリソースのインデックスを指定します。
[in, optional] pDstBox
型: const D3D12_BOX*
リソース データのコピー先となるサブリソースの部分を定義するボックスへのポインター。 NULL の場合、データはオフセットなしで宛先サブリソースに書き込まれます。 ソースのディメンションは、変換先に合っている必要があります ( D3D12_BOXを参照)。
空のボックスを使用すると、操作が不要になります。 上の値が下の値以上の場合、または左の値が右の値以上であるか、前面の値が戻り値以上の場合、ボックスは空になります。 ボックスが空の場合、このメソッドは操作を実行しません。
[in] pSrcData
型: const void*
メモリ内のソース データへのポインター。
SrcRowPitch
型: UINT
ソース データの 1 行から次の行までの距離。
SrcDepthPitch
型: UINT
ソース データの 1 つの深度スライスから次のデータまでの距離。
戻り値
型: HRESULT
このメソッドは、Direct3D 12リターン コードのいずれかを返します。
注釈
リソースは、まず Map を使用してマップする必要があります。 WriteToSubresource と ReadFromSubresource を介した CPU アクセスを有効にするには、テクスチャがD3D12_RESOURCE_STATE_COMMON状態である必要があります。ただし、バッファーはしません。
効率を高める場合は、ボックス内のエクステントの境界と配置が (ピクセルあたり 64 / [バイト] ) ピクセルの水平方向であることを確認します。 垂直方向の境界と配置は 2 行にする必要があります。ただし、ピクセル単位の 1 バイト形式が使用されている場合を除き、4 行をお勧めします。 呼び出しごとに 1 つの深度スライスが効率的に処理されます。 128 バイトでアラインされたポインターとストライドを提供することは推奨されますが、必須ではありません。
サブ ミップマップ レベルに書き込む場合は、上記よりも大きな幅と高さを使用することをお勧めします。 これは、小さなミップマップ レベルが実際には大きなメモリ ブロック内に格納され、オフセット量が不透明になり、キャッシュ ラインへの配置に干渉する可能性があるためです。
WriteToSubresource と ReadFromSubresource を使用すると、UMA アダプターのコピーがほぼゼロに最適化されますが、テクスチャ データがローカル のビデオ メモリに存在できないため、ディスクリート/NUMA アダプターの効率が非常に低下する可能性があります。 一般的なアプリケーションは、アダプター アーキテクチャが UMA であることを認識しない限り、個別にわかりやすいアップロード手法にこだわる必要があります。 アップロードの詳細については、「 CopyTextureRegion」を参照してください。UMA の詳細については、「 D3D12_FEATURE_DATA_ARCHITECTURE」を参照してください。
UMA システムでは、このルーチンを使用して、 ループタイリングと呼ばれるループ最適化によるメモリコピーのコストを最小限に抑えることができます。 アップロードを CPU キャッシュに快適に収まるチャックに分割することで、CPU とメインメモリの間の有効帯域幅がより厳密に理論上の最大値を達成します。
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | d3d12.h |
Library | D3d12.lib |
[DLL] | D3d12.dll |