メモリ セグメントの使用の初期化

メモリ セグメントは、Windows Vista 以降 (WDDM) のディスプレイ ドライバー モデルのコンテキストで、グラフィックス処理装置の (GPU) アドレス空間をビデオ メモリ マネージャーに記述します。 メモリ セグメントは、ビデオ メモリ リソースを一般化して仮想化します。 メモリ セグメントは、ハードウェアがサポートするメモリの種類 (フレーム バッファー メモリやシステム メモリのアパーチャなど) に従って構成されます。

メモリ セグメントの使用方法を初期化するために、Microsoft DirectX グラフィックス カーネル サブシステム (Dxgkrnl.sys) は、ディスプレイ ミニポート ドライバーの DxgkDdiQueryAdapterInfo 関数を呼び出します。 DxgkDdiQueryAdapterInfo 呼び出しから メモリ セグメント に関する情報を返すようにディスプレイ ミニポート ドライバーを指示するには、グラフィックス サブシステムは、 DXGKARG_QUERYADAPTERINFO 構造体の型メンバーの DXGKQAITYPE_QUERY Standard Edition GMENT または DXGKQAITYPE_QUERY Standard Edition GMENT3のいずれかを 指定します。

グラフィックス サブシステムは、セグメント情報のディスプレイ ミニポート ドライバーの DxgkDdiQueryAdapterInfo 関数を 2 回呼び出します。 DxgkDdiQueryAdapterInfo 最初の呼び出しは、ドライバーでサポートされているセグメントの数を取得し、2 番目の呼び出しは、各セグメントに関する詳細情報を取得します。 DxgkDdiQueryAdapterInfo の 呼び出しでは、ドライバーは、 DXGKARG_QUERYADAPTERINFOpOutputData メンバーを、設定された DXGK_QUERY Standard Edition GMENTOUT 構造体 (Windows ディスプレイ ドライバー モデル (WDDM) 1.2 より前のドライバー バージョンの場合) または設定された DXGK_QUERY Standard Edition GMENTOUT3 構造体 (WDDM 1.2 以降のドライバーの場合) を指します。

最初の呼び出しでは、 DXGK_QUERYSEGMENTOUT ( WDDM 1.2 より前のドライバー バージョンの場合) または DXGK_QUERYSEGMENTOUT3 (WDDM 1.2 以降のドライバーの場合) の pSegmentDescriptor メンバーが NULLに設定されます。 ドライバーは、 DXGK_QUERYSEGMENTOUT または DXGK_QUERYSEGMENTOUT3NbSegment メンバーにのみ、サポートされているセグメントの種類の数を入力する必要があります。 この番号は、 DxgkDdiQueryAdapterInfo への 2 回目の呼び出しからドライバーが必要とする未入力の DXGK_Standard Edition GMENTDESCRIPTOR (WDDM 1.2 より前のドライバー バージョンの場合) または DXGK_Standard Edition GMENTDESCRIPTOR3(WDDM 1.2 以降のドライバーの場合) の構造体の数も示します。

2 番目の呼び出しでは、ドライバーは、 DXGK_QUERYSEGMENTOUT または DXGK_QUERYSEGMENTOUT3のすべてのメンバーを入力する必要があります。 2 番目の呼び出しでは、ドライバーは配列に、 DXGK_SEGMENTDESCRIPTOR または DXGK_QUERYSEGMENTOUT またはメンバー内 DXGK_QUERYpSegmentDescriptorDXGK_SEGMENTDESCRIPTOR3 構造体の NbSegment のサイズを設定する必要があります。

DxgkDdiQueryAdapterInfo 両方の呼び出しで、 DXGKARG_QUERYADAPTERINFOpInputData メンバーは、AGP 絞りの場所とプロパティに関する情報を含む DXGK_QUERYSEGMENTIN 構造体を指します。 AGP アパーチャがない場合、または AGP アパーチャが存在するが適切な GART ドライバーがインストールされていない場合は、AGP アパーチャに関する情報が 0 に設定されます。 AGP の絞りが存在しない場合、ディスプレイ ミニポート ドライバーは、 DXGK_QUERYSEGMENTOUT または DXGK_QUERYSEGMENTOUT3pSegmentDescriptor配列で、AGP 型の絞りセグメントをサポートしていることを示すべきではありません。 このような状況で AGP タイプの絞りセグメントが示されている場合、アダプターは初期化に失敗します。

初期化中はメモリが豊富であるため、ページング バッファーのメモリを特定のセグメントから割り当てることができます。 ビデオ メモリ マネージャーは、 DXGK_QUERYSEGMENTOUT または DXGK_QUERYSEGMENTOUT3PagingBufferSegmentIdメンバーで指定されたセグメントからページング バッファーのメモリを割り当てます。 ドライバーは、 DxgkDdiQueryAdapterInfoの 2 番目の呼び出しでページング バッファー セグメントの識別子を示します。 また、ドライバーは、 DXGK_QUERYSEGMENTOUT または DXGK_QUERYSEGMENTOUT3PagingBufferSizeメンバーのページング バッファーに割り当てる必要があるサイズ (バイト単位) も指定する必要があります。

メモリ セグメントとページング バッファーの操作の詳細については、 「メモリ セグメントの処理」 および 「ビデオ メモリ リソースのページング」を参照してください。