Freigeben über


Rendern auf einer diskreten GPU mithilfe adapterübergreifender Ressourcen

Ab Windows 8.1 verwendet eine diskrete GPU eine adapterübergreifende Ressource wie:

  • Ein Ziel für Bitblockübertragung (Bitblt) oder aktuelle Vorgänge, jedoch ohne Dehnung oder Farbkonvertierung.
  • Die Ressource, die das Betriebssystem den Benutzermodusanzeigetreiber anfordert, um den Bitblt- oder Present-Vorgang von und zu ausführen.

Eine integrierte GPU verwendet eine adapterübergreifende Ressource wie:

  • Eine Textur während der Komposition durch den Desktopfenster-Manager (DWM).
  • Ein Renderziel für die GDI-Hardwarebeschleunigung.
  • Eine primäre Anzeige.
  • Nicht als Renderziel für 3D-Vorgänge.

In den folgenden Abschnitten werden die Architektur und prozesse beschrieben, die in drei möglichen Szenarien involviert sind, in denen eine Anwendung auf einer diskreten GPU innerhalb eines Hybridsystems gerendert wird.

Umgeleitetes Bitblt-Präsentationsmodell

Diagramm: Umgeleitetes Bitbltmodell für Hybridgrafiken zum Rendern auf einer diskreten GPU.

  1. Eine adapterübergreifende Ressource für ein Fenster der obersten Ebene wird im Kernelmodus als Standardzuordnung für die integrierte GPU erstellt.
  2. Wenn diese Ressource auf der diskreten GPU geöffnet wird, ruft das DirectX-Grafikkernsubsystem (Dxgkrnl.sys) die DxgkDdiGetStandardAllocationDriverData-Funktion auf und erstellt eine neue Ressource auf der diskreten GPU mit demselben Sicherungsspeicher (Massenspeichergerät) wie für die integrierte GPU.
  3. Die Direct3D-Runtime weist den Benutzermodusanzeigetreiber der diskreten GPU an, die adapterübergreifende Ressource mithilfe privater Treiberdaten zu öffnen.
  4. Eine DirectX-Anwendung wird auf der diskreten GPU in einer Backpufferressource gerendert. Sehen Sie sich den Vorgang "Rendern" in der Abbildung an.
  5. Wenn eine DirectX-Anwendung eine Present-Methode aufruft, ruft die Direct3D-Runtime die PresentDXGI-Funktion (oder pfnPresent) des Benutzermodustreibers der diskreten GPU auf, um den Rückpuffer in die adapterübergreifende Ressource zu kopieren. Sehen Sie sich den Vorgang "Präsentieren" in der Abbildung an.
  6. Wenn eine GDI-Anwendung (Windows Graphics Device Interface) in einem Fenster der obersten Ebene gerendert wird, ruft das DirectX-Grafikkernsubsystem die DxgkDdiRenderKm-Funktion des integrierten Grafik-Miniporttreibers der integrierten GPU auf und gibt an, dass die adapterübergreifende Ressource ein Renderziel ist. Sehen Sie sich die Verbindung zwischen der GDI-Anwendung und der adapterübergreifenden Oberfläche in der Abbildung an.
  7. Der DWM-Prozess öffnet die adapterübergreifende Ressource in der integrierten GPU und verwendet sie während der Komposition als Quelltextur. Sehen Sie sich den Vorgang "Komposition" in der Abbildung an.

Direct Flip-Präsentationsmodell

Diagramm, das das direkte Flipmodell für Hybridgrafiken zum Rendern auf einer diskreten GPU veranschaulicht.

  1. Die Direct3D-Runtime weist den Benutzermodusanzeigetreiber der diskreten GPU an, eine adapterübergreifende Ressource für jede Swap chain-Oberfläche zu erstellen.
  2. Auf der diskreten GPU legt die Direct3D-Runtime möglicherweise die Primary - und VidPnSourceId-Member der D3DDDI_ALLOCATIONINFO-Struktur fest, wenn der Modus "Direct Flip" verfügbar ist. Diese Memberwerte sollten übergeben werden, wenn die PfnAllocateCb-Funktion aufgerufen wird.
  3. Die Direct3D-Runtime weist den Benutzermodus-Anzeigetreiber der integrierten GPU an, eine adapterübergreifende Ressource zu öffnen, die vom DWM verwaltet werden soll.
  4. Eine Anwendung wird auf der diskreten GPU gerendert, wobei die Renderzieltextur als Ziel verwendet wird. Sehen Sie sich den Vorgang "Rendern" in der Abbildung an.
  5. Wenn eine Anwendung eine Present-Methode aufruft, ruft die Direct3D-Runtime die BltDXGI-Funktion (oder pfnBlt) des Benutzermodustreibers der diskreten GPU auf, um eine Kopie an die adapterübergreifende Ressource durchzuführen. Die Runtime ruft dann die PresentDXGI-Funktion (oder pfnPresent) des Benutzermodustreibers der diskreten GPU auf, wobei die Quelle auf die adapterübergreifende Ressource und die Zielzuordnung auf NULL festgelegt ist. Sehen Sie sich den Vorgang "Kopieren" in der Abbildung an.
  6. Der DWM führt seine Komposition mithilfe der Ressource aus der integrierten GPU aus. Wenn ein Direkter Flip-Vorgang erforderlich ist (DXGK_SEGMENTFLAGS.DirectFlip ist festgelegt), weist DWM den display-Miniporttreiber der integrierten GPU an, einen Flip-Vorgang von einer adapterübergreifenden Zuordnung zu einer anderen auszuführen. Sehen Sie sich den Vorgang "DWM-Flip" in der Abbildung an.

Vollbildmodell

  1. Die Direct3D-Runtime weist den Benutzermodusanzeigetreiber der integrierten GPU an, eine adapterübergreifende freigegebene primäre Zuordnung für jede Swap chain-Oberfläche zu erstellen.
  2. Die Direct3D-Runtime weist den Benutzermodusanzeigetreiber der diskreten GPU an, die adapterübergreifenden Ressourcen zu öffnen.
  3. Eine Anwendung wird auf der diskreten GPU gerendert, wobei die Renderzieltextur als Ziel verwendet wird.
  4. Wenn die Anwendung eine Present-Methode aufruft, weist die Direct3D-Runtime den Benutzermodus-Anzeigetreiber der diskreten GPU an, eine Kopie in eine adapterübergreifende Ressource durchzuführen.
  5. Der integrierte Anzeigetreiber für den Benutzermodus und der Miniporttreiber der integrierten GPU werden angewiesen, auf diese adapterübergreifende Ressource umzublättern.