方法: ドライバーのサポートを確認する
このトピックでは、ハードウェア アクセラレーションでマルチスレッド機能 ( リソースの作成 および コマンド リストを含む) がサポートされているかどうかを確認する方法について説明します。
アプリケーションでは、マルチスレッドのグラフィックス ハードウェアのサポートを確認することをお勧めします。 ドライバーとグラフィックス ハードウェアがマルチスレッド オブジェクトの作成をサポートしていない場合は、次の方法でパフォーマンスが制限される可能性があります。
- 複数のオブジェクト (異なる型であっても) を同時に作成することは制限される場合があります。
- immediate コンテキストを使用してグラフィックス コマンドをレンダリングするときにオブジェクトを作成制限される場合があります。 たとえば、ハードウェアがマルチスレッドをサポートしていない場合、アプリケーションは、作成に非常に長い時間がかかるオブジェクトをバックグラウンド スレッドで作成しないようにする必要があります。 非常に長い時間がかかる作成操作は、即時コンテキストレンダリングをブロックし、視覚的なフレーム レートのスタッターのリスクを高めることができます。
ランタイムは、ドライバーとハードウェアのサポートに関係なく、マルチスレッドとコマンド リストをサポートします。マルチスレッドまたはコマンド リストに対するドライバーとハードウェアのサポートがない場合、ランタイムは機能をエミュレートします。 マルチスレッドの詳細については、「 Direct3D 11 でのマルチスレッドへの導入」を参照してください。
マルチスレッドのドライバーサポートを確認するには:
- ID3D11Device インターフェイス オブジェクトを初期化します。 既定では、マルチスレッドが有効になっています。
- ID3D11Device::CheckFeatureSupport を呼び出します。 Feature パラメーターにD3D11_FEATURE_THREADING値を渡し、D3D11_FEATURE_DATA_THREADING構造体を pFeatureSupportData パラメーターに渡し、D3D11_FEATURE_DATA_THREADING構造体のサイズを FeatureSupportDataSize パラメーターに渡します。
- ID3D11Device::CheckFeatureSupport メソッドが成功した場合、前の手順で渡したD3D11_FEATURE_DATA_THREADING構造体は、マルチスレッド サポートに関する情報で初期化されます。
DriverConcurrentCreates が TRUE の場合、ドライバーは複数のリソースを同時に (同時に) 異なるスレッドに作成できます。
DriverCommandLists が TRUE の場合、ドライバーはコマンド リストをサポートします。 つまり、即時コンテキストによって発行されたレンダリング コマンドは、フレーム レートのスタッターのリスクが低い個別のスレッドでのオブジェクト作成と同時に実行できます。
DriverConcurrentCreates が FALSE の場合、ドライバーは同時実行の作成をサポートしていないため、可能なコンカレンシーの量は非常に制限されます。 グラフィックス ハードウェアは、異なるスレッドで異なる種類のオブジェクトを同時に作成することはできません。 さらに、グラフィックス ハードウェアが別のスレッドでリソースを作成しようとしている間は、グラフィックス ハードウェアで即時コンテキストを使用してレンダリング コマンドを発行することはできません。
関連トピック