ID3D11DeviceContext::CopyResource メソッド (d3d11.h)
GPU を使用して、ソース リソースの内容全体をコピー先リソースにコピーします。
構文
void CopyResource(
[in] ID3D11Resource *pDstResource,
[in] ID3D11Resource *pSrcResource
);
パラメーター
[in] pDstResource
種類: ID3D11Resource*
宛先リソースを表す ID3D11Resource インターフェイスへのポインター。
[in] pSrcResource
種類: ID3D11Resource*
ソース リソースを表す ID3D11Resource インターフェイスへのポインター。
戻り値
なし
解説
この方法は、GPU がコピー操作を実行する (CPU による memcpy と同様) という点で異常です。 その結果、パフォーマンスを向上させるために設計されたいくつかの制限があります。 たとえば、ソース リソースと移行先リソースは次のようになります。
- 異なるリソースである必要があります。
- 同じ型である必要があります。
- 同じ寸法 (必要に応じて幅、高さ、深さ、サイズを含む) を持つ必要があります。
- 互換性のある DXGI 形式が必要です。つまり、形式は同一であるか、少なくとも同じ型グループに含まれている必要があります。 たとえば、DXGI_FORMAT_R32G32B32_FLOAT テクスチャは、両方の形式が DXGI_FORMAT_R32G32B32_TYPELESS グループに含まれるため、DXGI_FORMAT_R32G32B32_UINT テクスチャにコピーできます。 CopyResource では、いくつかの形式の種類間でコピーできます。 詳細については、「 Direct3D 10.1 を使用した変換の書式設定」を参照してください。
- 現在マップできません。
変更できないリソースを宛先として使用することはできません。 フィーチャ レベルがD3D_FEATURE_LEVEL_10_1以上の場合は、 深度ステンシル リソースをソースまたは宛先として使用できます。 機能レベル9_xの場合、D3D11_BIND_DEPTH_STENCIL フラグを使用して作成されたリソースは 、CopyResource のソースとしてのみ使用できます。 マルチサンプリング機能を使用して作成されたリソース ( DXGI_SAMPLE_DESCを参照) は、ソースと宛先の両方に同じマルチサンプリング数と品質がある場合にのみ、ソースと宛先として使用できます。 ソースと宛先の数と品質が異なる場合、または一方がマルチサンプリングされていて、もう一方がマルチサンプリングされていない場合、 ID3D11DeviceContext::CopyResource の呼び出しは失敗します。 ID3D11DeviceContext::ResolveSubresource を使用して、マルチサンプリングされたリソースをマルチサンプリングされていないリソースに解決します。
メソッドは非同期呼び出しであり、コマンド バッファー キューに追加できます。 これにより、データのコピー時に発生する可能性があるパイプライン の停止を削除しようとします。 詳細については、「パフォーマンスに 関する考慮事項」を参照してください。
リソース内のデータの一部のみをコピーする必要がある場合は、代わりに ID3D11DeviceContext::CopySubresourceRegion を使用することをお勧めします。
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | d3d11.h |
Library | D3D11.lib |