2017-05-15 16 views
0

2つの異なるデバイスで別々のスレッドで使用されている共有DX11テクスチャがあります。DX11共有テクスチャの更新

スレッド1(デバイス1上で動作する):すべてのフレームと呼ばれ、共有テクスチャ

スレッド2(デバイス2上で動作する)を更新するには、別のテクスチャにコピーし、共有組織を消費します。周波数は、MSDNによると、スレッド1

よりもはるかに少ないです「共有テクスチャが1つのデバイスID3D11DeviceContextに更新された場合::フラッシュがそのデバイス上で呼び出さなければなりません。」

しかし、すべてのフレームでthread1をフラッシュすることは非常に高価で、大量のパフォーマンスが低下します。デバイスコンテキストがスレッドセーフではないため、スレッド1でデバイス1をフラッシュできません。

スレッド2がスレッドを消費する必要があるときに共有テクスチャを効率的に更新する方法はありますか?

ありがとうございました! MSDNは共有テクスチャを扱う際にあまり役に立ちません。 あなたがIDXGIKeyedMutexを使用できる2つのスレッド(またはプロセス間)の間での共有リソースへのアクセスを同期するために、テキスト

答えて

0

を強調しました。 https://msdn.microsoft.com/en-us/library/windows/desktop/ee913554(v=vs.85).aspx#dxgi_1.1_synchronized_shared_surfaces

2つのDX10デバイス間のリソース共有のみを示していますが、提供されているサンプルコードも確認できます。 DX11デバイスでも同じです。 重要な部分は、まずIDXGIResourceの共有テクスチャをQueryInterfaceに、次にIDXGIKeyedMutexを共有テクスチャに割り当てます。その後、AcquireSyncとReleaseSync関数を使用して、同期にmutexを使用します。

+0

残念なことに、スレッドが最初に実行される定義済みの順序がないため、キーミューテックスは機能しません。両方のスレッドをランダムな間隔で呼び出すことができるため、このシナリオではキーミューテックスは不適切です – Sid

関連する問題