Freigeben über


Übermitteln eines Befehlspuffers

Die folgende Abfolge von Vorgängen muss ausgeführt werden, um einen Befehlspuffer über den Windows Vista-Grafikstapel zu übergeben:

  1. Der Benutzermodusanzeigetreiber initiiert eine Befehlspufferübermittlung, wenn die Direct3D-Runtime eine der folgenden Benutzermodusanzeigetreiberfunktionen aufruft, um den angegebenen Vorgang auszuführen:

    Beachten Sie, dass der Benutzermodusanzeigetreiber immer auch eine Befehlspufferübermittlung initiiert, wenn der Befehlspuffer voll ist.

  2. Der Benutzermodusanzeigetreiber ruft die Funktion pfnRenderCb der Direct3D-Runtime auf, um den Befehlspuffer an die Runtime zu übermitteln.

  3. Das DirectX-Grafikkernsubsystem ruft die DxgkDdiRender - oder DxgkDdiRenderKm-Funktion des Anzeigeminiporttreibers auf, um den Befehlspuffer zu überprüfen, einen DMA-Puffer im Hardwareformat zu schreiben und eine Zuordnungsliste zu erstellen, die die verwendeten Oberflächen beschreibt. Beachten Sie, dass der DMA-Puffer noch nicht gepatcht wurde (d. a. zugewiesene physische Adressen). Hinweis Wenn die Runtime die Befehlspufferübermittlung durch Aufrufen der Present-Funktion des Benutzermodusanzeigetreibers initiiert hat, ruft das Grafiksubsystem die DxgkDdiPresent-Funktion des Anzeige-Miniporttreibers anstelle von DxgkDdiRender oder DxgkDdiRenderKm auf.

  4. Der Videospeicher-Manager ruft die DxgkDdiBuildPagingBuffer-Funktion des Anzeigeminiporttreibers auf, um spezielle DMA-Puffer zu erstellen, die als Pagingpuffer bezeichnet werden, die die in der Zuordnungsliste angegebenen Zuordnungen, die den DMA-Puffer begleiten, in und aus gpu-zugänglichem Speicher verschieben. Weitere Informationen finden Sie unter Auslagerung von Videospeicherressourcen.

  5. Der GPU-Planer ruft die DxgkDdiPatch-Funktion des Anzeigeminiporttreibers auf, um den Ressourcen im DMA-Puffer physische Adressen zuzuweisen. Der Scheduler ist jedoch nicht erforderlich, DxgkDdiPatch aufzurufen, um dem Pagingpuffer physische Adressen zuzuweisen, da während des DxgkDdiBuildPagingBuffer-Aufrufs physische Adressen für den Pagingpuffer übergeben und zugewiesen wurden.

  6. Der GPU-Planer ruft die DxgkDdiSubmitCommand-Funktion des Anzeigeminiporttreibers auf, um anzufordern, dass der Treiber den Pagingpuffer in die GPU-Ausführungseinheit einreiht.

  7. Der GPU-Planer ruft die DxgkDdiSubmitCommand-Funktion des Anzeigeminiporttreibers auf, um anzufordern, dass der Treiber den DMA-Puffer in die GPU-Ausführungseinheit einreiht. Jeder an die GPU übermittelte DMA-Puffer enthält einen Zaunbezeichner. Nachdem die GPU die Verarbeitung des DMA-Puffers abgeschlossen hat, generiert die GPU einen Interrupt.

  8. Der Anzeigeminiporttreiber wird über den Interrupt in seiner DxgkDdiInterruptRoutine-Funktion benachrichtigt. Der Anzeigeminiporttreiber sollte aus der GPU den Zaunbezeichner des gerade abgeschlossenen DMA-Puffers lesen.

  9. Der Anzeigeminiporttreiber sollte die DxgkCbNotifyInterrupt-Funktion aufrufen, um den GPU-Planer darüber zu informieren, dass der DMA-Puffer abgeschlossen wurde.

  10. Der Anzeigeminiporttreiber sollte die DxgkCbQueueDpc-Funktion aufrufen, um einen verzögerten Prozeduraufruf (DPC) in die Warteschlange zu stellen.

  11. Der DPC des Anzeigeminiporttreibers wird benachrichtigt, um den Großteil der DMA-Pufferverarbeitung zu verarbeiten.