方法 :ドライバーのサポートの確認

ここでは、ハードウェア アクセラレーションでマルチスレッド機能 (リソースの作成コマンド リストなど) がサポートされているかどうかを確認する方法について説明します。

ドライバーがマルチスレッドをサポートしているかどうかを確認するには

  1. ID3D11Device インターフェイス オブジェクトを初期化します。既定では、マルチスレッドが有効になります。
  2. ID3D11Device::CheckFeatureSupport を呼び出します。D3D11_FEATURE_THREADING 値を Feature パラメーターに、D3D11_FEATURE_DATA_THREADING 構造体を pFeatureSupportData パラメーターに、D3D11_FEATURE_DATA_THREADING 構造体のサイズを FeatureSupportDataSize パラメーターにそれぞれ渡します。
  3. ID3D11Device::CheckFeatureSupport メソッドが正常に終了すると、前の手順で渡した D3D11_FEATURE_DATA_THREADING 構造体がマルチスレッド サポート情報で初期化されます。
    • DriverConcurrentCreates TRUE の場合、そのドライバーは複数のスレッドで複数のリソースを同時に (並行して) 作成できます。また、そのドライバーはコマンド リストもサポートしています。つまり、別のスレッドでオブジェクトを作成しながら、イミディエイト コンテキストで発行されたレンダリング コマンドを同時に実行できます。この処理によってフレーム レートが不安定になる可能性も最小限に抑えられています。
    • DriverConcurrentCreates が FALSE の場合、そのドライバーは同時作成をサポートしていません。つまり、可能な同時実行数は大幅に制限されています。また、種類の異なるオブジェクトを複数のスレッドで同時に作成することもできません。さらに、別のスレッドでリソースを作成しながら、イミディエイト コンテキストでレンダリング コマンドを発行することもできません。

ランタイムでは、ドライバーのサポートにかかわりなく、マルチスレッドとコマンド リストをサポートしています。ドライバーがマルチスレッドまたはコマンド リストのいずれかをサポートしていない場合は、ランタイムがその機能をエミュレートします。マルチスレッドの詳細については、「Direct3D 11 のマルチスレッドの概要」を参照してください。

関連項目

マルチスレッド