Verwenden von Speichersegmenten zur Beschreibung des GPU-Adressraums
Der Videospeicher-Manager (VidMm) ist für die Verwaltung des Adressraums der GPU verantwortlich. Bevor dies möglich ist, muss der Kernelmodus-Miniporttreiber (KMD) den Adressraum der GPU mithilfe von Speichersegmenten in VidMm beschreiben.
KMD erstellt Speichersegmente zum Generalisieren und Virtualisieren von Videospeicherressourcen. Es kann Speichersegmente entsprechend den Speichertypen konfigurieren, die die Hardware unterstützt (z. B. Framepufferspeicher oder Systemspeicher-Blende).
Während der Treiberinitialisierung muss die KMD die Liste der Segmenttypen zurückgeben, die beschreiben, wie VidMm Speicherressourcen verwalten kann. Der KMD gibt die Anzahl der Segmenttypen an, die er unterstützt, und beschreibt jeden Segmenttyp, indem er auf Aufrufe der DxgkDdiQueryAdapterInfo-Funktion reagiert. Der Treiber beschreibt jedes Segment mithilfe einer DXGK_SEGMENTDESCRIPTOR-Struktur. Weitere Informationen finden Sie unter Initialisieren der Verwendung von Speichersegmenten.
Danach bleiben die Anzahl und Die Typen von Segmenten unverändert. VidMm:
Stellt sicher, dass jeder Prozess einen fairen Anteil an den Ressourcen in einem bestimmten Segment erhält,
Verwaltet alle Segmente unabhängig.
Segmente überschneiden sich nicht. Daher kann VidMm eine faire Menge an Videospeicherressourcen aus einem Segment zuordnen, unabhängig von der Menge der Ressourcen, die eine Anwendung aus einem anderen Segment enthält.
Der KMD weist jedem seiner Speichersegmente einen Segmentbezeichner zu. Wenn VidMm später die Erstellung von Zuordnungen für Videoressourcen und das Rendern dieser Ressourcen anfordert, führt das KMD Folgendes aus:
Identifiziert die Segmente, die die Anforderung unterstützen.
Gibt in der Reihenfolge die Segmente an, die der Treiber bevorzugt von VidMm verwenden lässt.
Weitere Informationen finden Sie unter Angeben von Segmenten beim Erstellen von Zuordnungen.
Der KMD ist nicht erforderlich, um alle Videospeicherressourcen anzugeben, die der GPU in seinen Speichersegmenten zur Verfügung stehen. Die KMD muss jedoch alle Speicherressourcen angeben, die VidMm unter allen Prozessen verwaltet,die auf dem System ausgeführt werden. Zum Beispiel:
Ein Vertex-Shader-Mikrocode, der eine Pipeline mit fester Funktion implementiert, kann sich im GPU-Adressraum befinden, aber außerhalb des von VidMm verwalteten Arbeitsspeichers (d. h. nicht Teil eines Segments). Diese Konfiguration ist möglich, da der Mikrocode immer für alle Prozesse verfügbar ist und niemals die Quelle der Konzipierung zwischen Prozessen ist.
Für Ressourcen wie Vertexpuffer, Texturen, Renderziele und anwendungsspezifischen Shadercode muss VidMm Videospeicherressourcen aus einem der Speichersegmente des Treibers zuweisen. Diese Anforderung liegt daran, dass die Ressourcentypen für alle Prozesse relativ verfügbar sein müssen.
Die folgende Abbildung zeigt ein Beispiel, wie eine KMD Speichersegmente aus dem GPU-Adressraum konfigurieren kann.
Die Zahlen in der Abbildung entsprechen den folgenden Speichersegmenten:
Das lineare Segment mit CPU-Zugriff: Auf dieses Segment kann von der CPU zugegriffen werden und wird als linearer Adressraum organisiert.
Nicht für die CPU zugängliches lineares Segment: Dieses Segment ist als linearer Adressraum organisiert, aber für die CPU nicht zugänglich. Sie wird für Ressourcen verwendet, für die kein CPU-Zugriff erforderlich ist.
Read-only AGP Blendensegment: Dieses Segment wird für den schreibgeschützten Zugriff auf den AGP-Speicher (Beschleunigter Grafikport) verwendet.
Blendensegment: Dieses Segment wird für Ressourcen verwendet, auf die über die AGP-Blende zugegriffen wird.
Die Ausgeblendeten Felder stellen Speichersegmente dar, die der KMD nicht für VidMm verfügbar macht. Videospeicher, der von VidMm ausgeblendet ist, kann nicht in den Benutzerbereich eingebunden oder exklusiv für einen bestimmten Prozess zur Verfügung gestellt werden. Dadurch werden die grundlegenden Regeln des virtuellen Speichers unterbrochen, die alle Prozesse erfordern, die auf dem System ausgeführt werden, um Zugriff auf den gesamten Arbeitsspeicher zu haben.