状態更新コールバック関数の使用
ユーザー モード ディスプレイ ドライバーは、Direct3D ランタイム バージョン 10 状態更新コールバック関数を使用して、ステートレス ドライバーを実現したり、コマンド バッファーのプリアンブル データを構築できます。
Direct3D ランタイムは、D3D10DDI_CORELAYER_DEVICECALLBACKS 構造体内の状態更新コールバック関数を指すポインターを提供し、この構造体をポインターで指すことによって pUMCallbacks メンバー (D3D10DDIARG_CREATEDEVICE 構造体のメンバー) は CreateDevice(D3D10) 関数を呼び出します。
ユーザー モードのディスプレイ ドライバーは、たとえば、pfnStateIaIndexBufCb 状態更新コールバック関数を呼び出しますが、ドライバーはドライバーの IaSetIndexBuffer 関数の呼び出し内にあります。 この呼び出しは十分に可能性があり、その理由は特にユーザー モードのディスプレイ ドライバーが pfnStateIaIndexBufCb コールバック関数を使用してプリアンブルを構築する可能性があり、IaSetIndexBuffer への呼び出しによってコマンド バッファーのサイズが使い果たされ、フラッシュが発生する可能性があるからです。 このような状況では、pfnStateIaIndexBufCb への呼び出しは、元の呼び出しと同じ「新しい」バインド情報を IaSetIndexBuffer に渡します。 この状況では、より最適なプリアンブルが得られます。