マルチスレッドによるオブジェクトの作成

リソースとオブジェクトの作成には ID3D11Device インターフェイスを使用し、レンダリングには ID3D11DeviceContext を使用します。

次に、リソースの作成方法の例をいくつか示します。

マルチスレッドによるオブジェクトの作成には、次の制限があります。

  • 種類が異なるものであっても、複数のオブジェクトを同時に作成することはできません。
  • イミディエイト コンテキストでのレンダリング中に、オブジェクトを作成することはできません。

また、長時間を要するオブジェクトの作成をバックグラウンド スレッドで実行することも避けてください。長時間を要する作成処理によって、イミディエイト コンテキストのレンダリングがブロックされ、仮想フレーム レートが乱れることがあります。

可能な同時実行数は、ソフトウェア ドライバーに実装されているサポートのレベルによって異なります。詳細については、「方法 :ドライバーのサポートの確認」を参照してください。

マルチスレッドに関する注意事項

可能な同時実行数は、ドライバーのマルチスレッド対応実装によって異なります。ドライバーが同時作成をサポートしている場合は、アプリケーションでの同時処理で問題が発生する可能性は低くなります。ドライバーがオブジェクトの同時作成をサポートしていない場合、可能な同時実行数は大幅に制限されます。個々のドライバーのサポート状況を知るには、そのドライバーに対して、D3D11_FEATURE_DATA_THREADING 構造体のメンバーである DriverConcurrentCreates 値を照会します。

同時処理によって、必ずしもパフォーマンスが向上するわけではありません。たとえば、テクスチャーの作成とロードは、通常、メモリーの帯域幅によって制限されます。一度に 1 つずつテクスチャーを作成してロードする方法に比べ (それによって複数の CPU コアがアイドル状態になるとしても)、複数のテクスチャーを作成してロードする方法のほうが高速であるとは限りません。しかし、複数のスレッドを使用した複数のシェーダーの作成は、メモリー帯域幅などのシステム リソースにそれほど依存しないため、パフォーマンスの向上が望めます。

関連項目

マルチスレッド