GetDriverInfo2 のサポート

DirectX 8.0 DDI では、ドライバーの情報のクエリを実行する新しいメカニズムが導入されています。 このメカニズムは、既存の DdGetDriverInfo エントリ ポイントを拡張して、ドライバーからの追加情報に関するクエリを実行します。 現時点では、このメカニズムは DX8 スタイル D3D 機能のクエリにのみ使用されます。

次の内容をお読みいただくと、GetDriverInfo2 メカニズムが必要な理由について疑問が湧くことでしょう。 D3DCAP8 構造体を返すことによってドライバーが処理する新しい GetDriverInfo GUID を単に定義することが望ましいと考えることでしょう。 次の段落で紹介する GetDriverInfo2 は、DirectX 8.0 レベルの機能を有効にするために Windows オペレーティング システムに必要な変更を最小限に抑え、DirectX 8.0 ランタイムの再配布を実用的にするメカニズムです。

この GetDriverInfo の拡張機能は、GUID_GetDriverInfo2 を使用した DdGetDriverInfo 呼び出しの形式を取ります。 GUID を使用した DdGetDriverInfo の呼び出しをドライバーが受信すると、DD_GETDRIVERINFODATA のデータ構造の lpvData フィールドに渡されたデータ構造を調べて、要求されている情報を確認する必要があります。 以下で説明するように、lpvData は、DD_GETDRIVERINFO2DATA または DD_STEREOMODE 構造体を指定できます。

GUID_GetDriverInfo2 は、GUID_DDStereoMode と同じ GUID 値です。 ドライバーが GUID_DDStereoMode を処理しない場合は問題ではありません。 ただし、DirectX 8.0 ドライバーが GUID_DDStereoMode を処理する場合は、GUID_GetDriverInfo2(GUID_DDStereoMode) を使用して DdGetDriverInfo を呼び出すと、ランタイムによって DD_STEREOMODE 構造体の dwHeight フィールドが特別な値 D3DGDI2_MAGIC に設定されることに注意してください。 このフィールドは、DD_GETDRIVERINFO2DATA 構造体の dwMagic フィールドに対応しています。 そのため、lpvData ポインターを DD_STEREOMODE 構造体へのポインターまたは DD_GETDRIVERINFO2DATA 構造体へのポインターにキャストし、値 D3DGDI2_MAGIC の対応するフィールド (dwHeight または dwMagic) の値を確認すれば、ステレオ モード機能を判断する呼び出しと Direct3D 8.0 機能の要求を区別できます。

ドライバーが GetDriverInfo2 の呼び出しであると判断した場合、ランタイムによって要求されている情報の型を判断する必要があります。 この型は、DD_GETDRIVERINFO2DATA データ構造の dwType フィールドにあります。

最後に、ドライバーは要求されたデータを指定されたバッファーにコピーします。 DD_GETDRIVERINFODATA データ構造の lpvData フィールドが、要求されたデータをコピーするバッファーを指定することに注意してください。 lpvData は、DD_GETDRIVERINFO2DATA 構造体も指定します。 つまり、ドライバーによって返されるデータは、DD_GETDRIVERINFO2DATA 構造体を上書きします (したがって、DD_GETDRIVERINFO2DATA 構造体がバッファーの最初のいくつかの DWORD を占有することになります)。

GetDriverInfo2 で呼び出して、DirectX 8.0 の機能をレポートするには、ドライバーが返す DD_HALINFO 構造体の dwFlags フィールドに新しいフラグ DDHALINFO_GETDRIVERINFO2 を設定する必要があります。 このフラグが設定されていない場合、ランタイムは GetDriverInfo2 の呼び出しをドライバーに送信せず、ドライバーが DirectX 8.0 レベル ドライバーとして認識されません。

ランタイムは、D3DGDI2_TYPE_DXVERSION の型で GetDriverInfo2 を使用して、アプリケーションで使用されている現在の DX ランタイム バージョンをドライバーに通知します。 ランタイムは、DD_GETDRIVERINFODATA の lpvData フィールドで DD_DXVERSION 構造体へのポインターを指定します。