DirectX11にはマルチスレッドでコマンドを生成できるディファードコンテキストというものがあるのですが、どうもこれNVIDIA製のGPUでしか使えないようで、AMD、IntelはNGのようです。
AMD、Intel製の場合、ソフトウェアでエミュレーションするので、メインスレッドでしか使えない即時コンテキストを使う場合よりも結果が悪くなることがあるようです。
なので、下記のように初期化時にデバイスの情報を取得して、シングルスレッド描画を行う場合とマルチスレッド描画を行う場合とで、処理を分岐させる必要があるようです。
//デバイスのマルチスレッドサポートの機能を調べる。
m_pd3dDevice->CheckFeatureSupport(
D3D11_FEATURE_THREADING,
&m_featureDataThreading,
sizeof(m_featureDataThreading)
);
if (m_featureDataThreading.DriverCommandLists == TRUE) {
//デバイズがディファードコンテキストに対応しているので
//ディファードコンテキストを作成。
m_pd3dDevice->CreateDeferredContext(0, &m_pDeferredDeviceContext);
}
ディファードコンテキストってただのコマンドバッファじゃなかったんですね・・・。