フリー スレッド CalcPrivate DDI が遡及的に必要
Direct3D バージョン 11 では、フリー スレッドである Direct3D バージョン 10 DDI 関数の pfnCalcPrivate で始まるユーザー モードのディスプレイ ドライバー関数が必要です。 この遡及的な要件は、Direct3D バージョン 11 DDI の動作と一致し、ドライバーが DDI スレッド処理をサポートしていないことを示している場合でも、フリー スレッドである pfnCalcPrivate* 関数および pfnCalcDeferredContextHandleSize 関数を常に必要とします。 ドライバーがスレッドのサポートを示す方法の詳細については、「スレッド処理、コマンド リスト、および 3-D パイプラインのサポート」を参照してください。 この遡及的な要件の理由は、そのような関数はサイズの即時の値を返すので通常非常に単純であるためです。 より複雑な関数は、関数に渡されるパラメーターに基づいて、返す即時値を決定します。 pfnCalcPrivate で始まる関数の、スタック以外の場所にデータを実際に書き込むという要件は存在しません。 これらの関数のパラメーター以外のデータを読み取るという要件は、まれです。 データを読み取る要件がある場合でも、競合の問題は発生しません。 これにより、Direct3D バージョン 11 API では、必要な最適化が大幅に行われ、コストの高い同期 (たとえば、CreateResource(D3D10) または CreateGeometryShader への呼び出しのようなオブジェクトを作成する呼び出し) を作成ごとに 1 回ではなく 2 回実行することが回避されます。
この遡及的なフリー スレッド要件の顕著な例外は、ディスプレイ デバイスの作成を満たすために使用される CalcPrivateDeviceSize 関数です。 CalcPrivateDeviceSize はアダプター関数テーブル (D3D10_2DDI_ADAPTERFUNCS または D3D10DDI_ADAPTERFUNCS) にあります。 CalcPrivateDeviceSize は、スレッド モデルで緩和を経験した関数のグループの下には分類されません。 CalcPrivateDeviceSize 関数をフリー スレッドにする必要はありません。