PFND3DDDI_SETASYNCCALLBACKSCB Rückruffunktion (d3dumddi.h)

Die PfnSetAsyncCallbacksCb-Funktion benachrichtigt die Microsoft Direct3D-Runtime, ob die Runtime Aufrufe der Rückruffunktionen der Laufzeit von einem Workerthread startet oder nicht mehr empfängt.

Syntax

PFND3DDDI_SETASYNCCALLBACKSCB Pfnd3dddiSetasynccallbackscb;

HRESULT Pfnd3dddiSetasynccallbackscb(
  HANDLE hDevice,
  BOOL Enable
)
{...}

Parameter

hDevice

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

Enable

Ein boolescher Wert, der angibt, ob die Runtime Aufrufe der Rückruffunktionen der Laufzeit von einem Workerthread startet oder nicht mehr empfängt. TRUE gibt an, dass die Runtime Aufrufe ihrer Rückruffunktionen von einem Workerthread empfängt. FALSE gibt an, dass die Laufzeit keine Aufrufe ihrer Rückruffunktionen von einem Workerthread mehr empfängt.

Rückgabewert

pfnSetAsyncCallbacksCb gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK Die Direct3D-Runtime wurde erfolgreich benachrichtigt.
E_INVALIDARG Die Parameter wurden überprüft und als falsch ermittelt.

Diese Funktion gibt möglicherweise auch andere HRESULT-Werte zurück.

Hinweise

Wenn ein Anzeigetreiber im Benutzermodus eigene Optimierungen mit mehreren Prozessoren implementiert (d. h., der Treiber erstellt einen Workerthread und verarbeitet Befehle in diesem Thread), muss der Treiber pfnSetAsyncCallbacksCb aufrufen, um die Direct3D-Runtime zu benachrichtigen, ob die Runtime Aufrufe der Rückruffunktionen der Laufzeit vom Workerthread startet oder nicht mehr empfängt. Darüber hinaus dürfen solche Treiber die Funktionen LockAsync, UnlockAsync und Rename nicht implementieren. Dadurch wird sichergestellt, dass die Runtime nicht versucht, ihre eigenen Optimierungen mit mehreren Prozessoren zu verwenden.

Der Anzeigetreiber für den Benutzermodus kann pfnSetAsyncCallbacksCb nur im Standard Anwendungsthread aufrufen (d. a. im Thread, der in den Treiber aufgerufen hat). Der Workerthread des Treibers kann pfnSetAsyncCallbacksCb nicht aufrufen. Zu einem beliebigen Zeitpunkt kann nur ein Thread, der auf ein bestimmtes Renderinggerät verweist, in einer der Rückruffunktionen der Laufzeit ausgeführt werden.

Bevor der Benutzermodusanzeigetreiber eine der Rückruffunktionen der Laufzeit in einem anderen Thread als dem Standard Anwendungsthread aufruft, muss der Treiber TRUE an den Enable-Parameter in einem Aufruf von pfnSetAsyncCallbacksCb übergeben. Bevor der Benutzermodusanzeigetreiber eine der Rückruffunktionen der Laufzeit im Standard Anwendungsthread aufruft, muss der Treiber false an den Enable-Parameter in einem Aufruf von pfnSetAsyncCallbacksCb übergeben.

Innerhalb der Implementierung von Flush für jedes Renderinggerät ruft der Treiber pfnSetAsyncCallbacksCb auf und übergibt FALSE an den Enable-Parameter .

Wenn der Treiber true an den Enable-Parameter in einem Aufruf von pfnSetAsyncCallbacksCb übergibt, versetzt sich die Laufzeit in einen Zustand, in dem sie nicht sofort auf Situationen reagiert, in denen sie in ihren Rückruffunktionen nicht sofort auf situationen reagiert, in denen sie verloren gegangen ist. Wenn die Laufzeit ein Gerät erkennt, das in einer Rückruffunktion in diesem Zustand verloren gegangen ist, legt sie stattdessen ein Bit fest, das angibt, dass das Ereignis aufgetreten ist. Wenn der Treiber false an den Enable-Parameter in einem Aufruf von pfnSetAsyncCallbacksCb übergibt, überprüft die Laufzeit das Bit, um festzustellen, ob ein Gerät verloren gegangen ist. Wenn das Bit festgelegt ist, führt die Runtime ihre typische Behandlung durch, die beim Gerät verloren geht. Nach diesem Punkt empfängt der Treiber die meisten Aufrufe seiner Funktionen aus der Runtime nicht mehr.

Nur DirectX 9- und DirectX 9L-Versionen der Runtime unterstützen pfnSetAsyncCallbacksCb. DirectX 10 und höhere Versionen der Laufzeit legen den pfnSetAsyncCallbacksCb-Member der D3DDDI_DEVICECALLBACKS-Struktur auf NULL fest, wenn die Runtime die CreateDevice(D3D10) -Funktion des Benutzermodusanzeigetreibers aufruft, um ein Renderinggerät zu erstellen.

Hinweis DirectX-Versionen vor 9 unterstützen keine Optimierungen mit mehreren Prozessoren.
 
Treiber können die Rückruffunktionen der Laufzeit nur aus einem Workerthread aufrufen, wenn die Laufzeit zuvor den pfnSetAsyncCallbacksCb-Member von D3DDDI_DEVICECALLBACKS in einem Aufruf der CreateDevice-Funktion des Treibers auf ungleich NULL festgelegt hat.

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

CreateDevice

CreateDevice(D3D10)

D3DDDI_DEVICECALLBACKS

Leerung

LockAsync

Umbenennen

UnlockAsync