PFND3DDDI_PRESENT Rückruffunktion (d3dumddi.h)

Die Present-Funktion benachrichtigt den Anzeigetreiber im Benutzermodus, dass eine Anwendung das Rendern abgeschlossen hat, und fordert an, dass der Treiber die Quelloberfläche entweder durch Kopieren oder Kippen anzeigt oder dass der Treiber einen Farbfüllvorgang ausführt.

Syntax

PFND3DDDI_PRESENT Pfnd3dddiPresent;

HRESULT Pfnd3dddiPresent(
  HANDLE hDevice,
  const D3DDDIARG_PRESENT *unnamedParam2
)
{...}

Parameter

hDevice

Ein Handle für das Anzeigegerät (Grafikkontext).

unnamedParam2

pData [in]

Ein Zeiger auf eine D3DDDIARG_PRESENT-Struktur , die die anzuzeigende Ressource beschreibt.

Rückgabewert

Present gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK Die Ressource wird erfolgreich angezeigt.
E_OUTOFMEMORY Present konnte nicht den erforderlichen Arbeitsspeicher zuordnen, damit dieser vollständig abgeschlossen werden konnte.

Hinweise

Die Microsoft Direct3D-Runtime ruft die Present-Funktion des Benutzermodusanzeigetreibers auf, um den Benutzermodusanzeigetreiber zu benachrichtigen, dass das Rendern einer Anwendung abgeschlossen ist, und um anzufordern, dass der Treiber die Quelloberfläche anzeigt oder dass der Treiber einen Farbfüllvorgang ausführt. Wenn der hSrcResource-Member der D3DDDIARG_PRESENT Struktur, auf die der pData-Parameter verweist, ungleich NULL ist, fordert Present an, dass der Benutzermodusanzeigetreiber neue Inhalte auf dem Bildschirm anzeigt; Wenn hSrcResourceNULL ist, fordert Present an, dass der Benutzermodusanzeigetreiber einen Farbfüllvorgang auf dem Bildschirm ausführt.

Wenn der hDstResource-Member der D3DDDIARG_PRESENT-StrukturNULL ist, ist die Zieloberfläche unbekannt. Darüber hinaus werden die Zieloberfläche und eine Liste der Beschneidungsrechtecke im Kernelmodus bestimmt, bevor der Hardwarebefehlsstream über DMA an den Grafikprozessor gesendet wird.

Daher kann der Anzeigetreiber im Benutzermodus keine Hardwareanweisungen generieren, um den aktuellen Vorgang auszuführen. Diese Hardwareanweisungen müssen vom Anzeigeminiporttreiber generiert werden. Wenn der hSrcResource-Member von D3DDDIARG_PRESENT jedoch nicht NULL ist, muss der Benutzermodusanzeigetreiber das Zuordnungshandle zur Quelloberfläche ableiten und dieses Handle in den hSrcAllocation-Member der D3DDDICB_PRESENT-Struktur in einem Aufruf der pfnPresentCb-Funktion einfügen. Der Display-Miniporttreiber kann dann die Hardwareanweisungen erfolgreich generieren. Der Benutzermodusanzeigetreiber leitet das Zuordnungshandle in der Regel von den Ressourceninformationen in der D3DDDIARG_PRESENT-Struktur ab.

Wenn der hDstResource-Member von D3DDDIARG_PRESENT nicht NULL ist, ist die Zieloberfläche für die vorhandene bekannt, und der Benutzermodusanzeigetreiber muss den hDstAllocation-Member von D3DDDICB_PRESENT mit dem entsprechenden Zuordnungshandle ausfüllen.

Wenn ein Benutzermodusanzeigetreiber eine DDI-Version von weniger als 0x0000000C verfügbar macht (der Treiber gibt diesen Wert im DriverVersion-Member der D3D10DDIARG_OPENADAPTER-Struktur in einem Aufruf der OpenAdapter-Funktion des Treibers zurück), ruft die Direct3D-Runtime zuerst die Flush-Funktion des Benutzermodusanzeigetreibers auf, um alle ausstehenden Hardwarebefehle im Befehlspuffer zu übermitteln, bevor die Laufzeit die Present-Funktion des Benutzermodusanzeigetreibers aufruft. Auf diese Weise wird die Present-Funktion des Benutzermodus-Anzeigetreibers mit Rendervorgängen serialisiert (d. a. Aufrufe der pfnRenderCb-Funktion ). Wenn ein Anzeigetreiber im Benutzermodus eine DDI-Version von 0x0000000C oder höher verfügbar macht und die aufrufende Anwendung im Fenstermodus ausgeführt wird, ruft die Laufzeit auch Flush auf, bevor Present aufgerufen wird. Wenn ein Anzeigetreiber im Benutzermodus eine DDI-Version von 0x0000000C oder höher verfügbar macht und die aufrufende Anwendung im Vollbildmodus ausgeführt wird, ruft die Laufzeit Flush nicht auf, bevor Present aufgerufen wird. Dieses Verhalten ermöglicht Treibern, die ihr eigenes Threading implementieren, um aktuelle Aufrufe in die Warteschlange zu stellen. Ein Treiber, der eine DDI-Version von 0x0000000C oder höher verfügbar macht, muss pfnRenderCb aufrufen, um alle ausstehenden Befehlspuffer intern zu leeren, bevor der Treiber die pfnPresentCb-Funktion aufruft .

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Verfügbar in Windows Vista und höheren Versionen der Windows-Betriebssysteme.
Zielplattform Desktop
Kopfzeile d3dumddi.h (include D3dumddi.h)

Weitere Informationen

D3DDDIARG_PRESENT

D3DDDI_DEVICEFUNCS

DxgkDdiPresent

DxgkDdiRender

Leerung

pfnRenderCb