Initialisieren der Verwendung von Speichersegmenten

Speichersegmente im Kontext des Anzeigetreibermodells für Windows Vista und höher (WDDM) beschreiben den Adressraum der Grafikverarbeitungseinheit (GPU) für den Videospeicher-Manager. Speichersegmente generalisieren und virtualisieren Videospeicherressourcen. Speichersegmente werden entsprechend den Von der Hardware unterstützten Speichertypen konfiguriert (z. B. Framepufferspeicher oder Systemspeicheröffnung).

Um die Verwendung von Speichersegmenten zu initialisieren, ruft das Microsoft DirectX-Grafikkernsubsystem (Dxgkrnl.sys) die DxgkDdiQueryAdapterInfo-Funktion des Anzeigeminiporttreibers auf. Damit der Anzeigeminiporttreiber Informationen zu Speichersegmenten aus dem DxgkDdiQueryAdapterInfo-Aufruf zurückgibt, gibt das Grafiksubsystem entweder den DXGKQAITYPE_QUERYSEGMENT - oder den DXGKQAITYPE_QUERYSEGMENT3-Wert im Type-Member der DXGKARG_QUERYADAPTERINFO-Struktur an.

Das Grafiksubsystem ruft die DxgkDdiQueryAdapterInfo-Funktion des Anzeigeminiporttreibers zweimal für Segmentinformationen auf. Der erste Aufruf von DxgkDdiQueryAdapterInfo ruft die Anzahl der vom Treiber unterstützten Segmente ab, und der zweite Aufruf ruft detaillierte Informationen zu jedem Segment ab. In den Aufrufen von DxgkDdiQueryAdapterInfo verweist der Treiber auf das pOutputData-Element von DXGKARG_QUERYADAPTERINFO auf aufgefüllte DXGK_QUERYSEGMENTOUT-Strukturen (für eine Treiberversion vor Windows Display Driver Model (WDDM) 1.2) oder auf aufgefüllte DXGK_QUERYSEGMENTOUT3-Strukturen (für einen WDDM 1.2-Treiber und höher).

Im ersten Aufruf wird der pSegmentDescriptor-Member von DXGK_QUERYSEGMENTOUT (für eine Treiberversion vor WDDM 1.2) oder DXGK_QUERYSEGMENTOUT3 (für einen WDDM 1.2-Treiber und höher) auf NULL festgelegt. Der Treiber sollte nur den NbSegment-Member von DXGK_QUERYSEGMENTOUT oder DXGK_QUERYSEGMENTOUT3 mit der Anzahl der Segmenttypen füllen, die er unterstützt. Diese Zahl gibt auch die Anzahl der nicht aufgefüllten DXGK_SEGMENTDESCRIPTOR (für eine Treiberversion vor WDDM 1.2) oder DXGK_SEGMENTDESCRIPTOR3 (für einen WDDM 1.2-Treiber und höher) an, die der Treiber für den zweiten Aufruf von DxgkDdiQueryAdapterInfo benötigt.

Im zweiten Aufruf sollte der Treiber alle Member von DXGK_QUERYSEGMENTOUT oder DXGK_QUERYSEGMENTOUT3 ausfüllen. Beim zweiten Aufruf sollte der Treiber ein Array mit der Größe von NbSegment von DXGK_SEGMENTDESCRIPTOR oder DXGK_SEGMENTDESCRIPTOR3 Strukturen im pSegmentDescriptor-Member von DXGK_QUERYSEGMENTOUT oder DXGK_QUERYSEGMENTOUT3 mit Informationen zu den Segmenten auffüllen, die der Treiber unterstützt.

In beiden Aufrufen von DxgkDdiQueryAdapterInfo verweist das pInputData-Element von DXGKARG_QUERYADAPTERINFO auf eine DXGK_QUERYSEGMENTIN-Struktur , die Informationen über den Speicherort und die Eigenschaften der AGP-Blende enthält. Wenn keine AGP-Blende verfügbar ist oder eine vorhanden ist, aber kein geeigneter GART-Treiber installiert ist, werden die Informationen über die AGP-Blende auf Null festgelegt. Wenn keine AGP-Blende vorhanden ist, sollte der Display-Miniporttreiber im pSegmentDescriptor-Array von DXGK_QUERYSEGMENTOUT oder DXGK_QUERYSEGMENTOUT3 nicht angeben, dass er ein Blendensegment vom Typ AGP unterstützt. Wenn unter solchen Umständen ein AGP-Blendensegment angegeben wird, kann der Adapter nicht initialisiert werden.

Während der Initialisierung kann der Arbeitsspeicher für den Pagingpuffer aus einem bestimmten Segment zugeordnet werden, da genügend Arbeitsspeicher vorhanden ist. Der Videospeicher-Manager ordnet Arbeitsspeicher für den Pagingpuffer aus dem Segment zu, das im PagingBufferSegmentId-Element von DXGK_QUERYSEGMENTOUT oder DXGK_QUERYSEGMENTOUT3 angegeben ist. Der Treiber gibt den Bezeichner des Pagingpuffersegments im zweiten Aufruf von DxgkDdiQueryAdapterInfo an. Der Treiber sollte auch die Größe in Bytes angeben, die dem Pagingpuffer im PagingBufferSize-Member von DXGK_QUERYSEGMENTOUT oder DXGK_QUERYSEGMENTOUT3 zugeordnet werden soll.

Weitere Informationen zu Speichersegmenten und zum Arbeiten mit Pagingpuffern finden Sie unter Behandeln von Speichersegmenten und Auslagerung von Videospeicherressourcen.