2016-11-25 25 views
1

デスクトップの複製を使用して、画面の内容をメモリ内のビットマップにコピーしています。私はデスクトップのテクスチャを受け取った後、テクスチャテクスチャを作成し、デスクトップテクスチャをステージングテクスチャにコピーするためにCopyResourceを使用し、最後にID3D11DeviceContext::Mapを呼び出してステージングテクスチャビットにアクセスしてコピーします。 https://stackoverflow.com/a/27283837/825318ID3D11DeviceContext ::パフォーマンスが遅い

Mapコールには多くの時間がかかります.4Kなどの大型ディスプレイ解像度では、必要に応じて許容できないほど高い100Mmsを要します。 30 fpsの速度を保証します。

テクスチャの内容をより速く取得する方法はありますか?そうでなければ、システムがテクスチャデータをそこにコピーするように、私自身のマッピングアドレスポインタを与える方法はありますか?ありがとう

+1

[ID3D11DeviceContext :: Map](https://msdn.microsoft.com/en-us/library/windows/desktop/ff476457(v=vs.85).aspx)のドキュメントでは、パフォーマンスの低下について説明し、適切な戦略とページの終わり。それらの1つは、揮発性ポインタを使用することです。 –

+0

しかし、これは書き込み専用のサーフェスにのみ適用され、私の仕事はサーフェスからデータを読み込むことです。 – Isso

答えて

3

ほとんどの場合、マップ操作はCopyResourceが完了するのを待っています。これを確認するにはGPUViewを使用できます。この場合、推奨される解決策は、フレームレートを優先してレイテンシを受け入れることです。これを処理する方法は、少なくとも3つのステージングテクスチャを維持し、次のようにそれらの間で回転させることである。

フレーム#1 - テクスチャ#ステージングにコピーリソースを起動1

フレーム#2 - コピーリソースへを開始テクスチャ#1のステージングにスタートコピーリソース(古い内容が既に必要があります - データへのアクセスにテクスチャ#3とマップステージングテクスチャ#1のステージングにコピーリソースを起動

フレーム#4 - テクスチャ#2

フレーム#3のステージング保存する)、データにアクセスするためにステージングテクスチャ#2をマップする

この方法で30 FPSを維持できますが、ほとんどのアプリケーションで許容される〜130msのレイテンシを導入します。

+0

ありがとう!残念ながら、私は最小限の待ち時間が必要なので、あなたのソリューションは実際に私の問題を解決するものではありませんが、それはスマートなアプローチであり、GPUViewは非常に有用なユーティリティであるようです。したがって、私はあなたに恩恵を授与しています。 – Isso

+1

最小限のレイテンシが必要な場合、基本的にCPUをGPUと同期させて、テクスチャがコピーされるとすぐに読み取られるようにする必要があります。これは、GPUとCPUが並行して動作しないことを意味し、これはまさにあなたが元の質問で見ていたものです。 私は何かが欠けている場合は、2つの反対の要件を満たすように見えているように見えます。 – moradin

関連する問題