Freigeben des Sicherungsspeichers mit KMD

Ab Windows 11 Version 22H2 wurde die WDDM-API erweitert, um den Zugriff auf einen Speicher zur Unterstützung der Grafikzuordnung über den Kernelmodustreiber (KMD) zu ermöglichen. Mit dieser API können sowohl der Benutzermodustreiber (UMD) als auch KMD auf denselben Zuordnungsspeicher zugreifen. Dieses Feature kann verwendet werden, wenn UMD auf dem Host oder auf einem virtuellen Computer mithilfe der GPU-Paravirtualisierung (GPU-PV) ausgeführt wird.

Dieses Feature wurde auf Windows 10 Version 20H1 zurückportiert. Der DDI ist für WDDM 3.1-Treiber oder neuer verfügbar.

WDDM-Grafikzuordnungen und Sicherungsspeicher

Jede Grafikzuordnung im WDDM-Modell verfügt über einen Sicherungsspeicher, bei dem es sich um einen Speicherpuffer handelt, der den Zuordnungsinhalt enthält, wenn er sich nicht im Videospeicher befindet.

Eine Grafikzuordnung wird durch Aufrufen von D3DKMTCreateAllocation erstellt. UMD übergibt private Daten für diese Zuordnung, die Dxgkrnl über einen Aufruf an DXGKDDI_CREATEALLOCATION an KMD übergibt. KMD gibt die gewünschten Zuordnungsflags an Dxgkrnl zurück.

Überprüfen der Featureverfügbarkeit

Um zu überprüfen, ob das Feature für die Freigabe des Sicherungsspeichers verfügbar ist, muss KMD zunächst einen der folgenden Rückrufe aufrufen, wobei FeatureId auf DXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD festgelegt ist:

Das Feature kann nur verwendet werden, wenn der Rückruf erfolgreich ist und Aktivieren auf TRUE festgelegt ist.

Ablauf des Features

Nachdem KMD erfolgreich ermittelt hat, dass das Feature aktiviert ist, ruft UMD D3DKMTCreateAllocation auf, um eine freigegebene CPU-sichtbare Zuordnung zu erstellen, und weist KMD über private Daten an, dass die Zuordnung für KMD freigegeben werden muss. Im Verlauf dieses Aufrufs geschieht Folgendes:

  • KMD legt DXGK_ALLOCATIONINFOFLAGS2ShareBackingStoreWithKmd-Flag fest, wenn das Betriebssystem den DXGKDDI_CREATEALLOCATION Rückruf von KMD aufruft. Wenn das Feature nicht aktiviert ist, darf KMD das ShareBackingStoreWithKmd-Flag nicht festlegen.

  • Dxgkrnl ruft den DXGKDDI_SETALLOCATIONBACKINGSTORE DDI auf, um KMD eine Kernelmodusadresse für den Speicher zur Unterstützung der Zuordnung zu geben.

  • UMD ruft D3DKMTLock2 auf, um die Benutzermodusadresse der Zuordnung abzurufen.

Eigenschaften der Zuordnung

Die auf diese Weise erstellte Zuordnung muss über die folgenden Eigenschaften verfügen:

  • Die Zuordnung darf nur im Systemspeichersegment erfolgen.
  • Die Zuordnung muss als freigegeben erstellt werden.
  • Die Zuordnung kann den vorhandenen Systemspeicher nicht als Sicherungsspeicher verwenden.
  • UMD kann jeden Vorgang wie bei einer regulären Zuordnung ausführen.
    • UMD kann D3DKMTLock2 aufrufen, um einen Zeiger auf die Zuordnung zu erhalten.
    • UMD kann D3DKMTMakeResident aufrufen, um die Zuordnung für die GPU zugänglich zu machen.