Freigeben über


PFND3DDDI_LOCKASYNC Rückruffunktion (d3dumddi.h)

Die LockAsync--Funktion sperrt die angegebene Ressource oder eine Oberfläche innerhalb der Ressource.

Syntax

PFND3DDDI_LOCKASYNC Pfnd3dddiLockasync;

HRESULT Pfnd3dddiLockasync(
  HANDLE hDevice,
  D3DDDIARG_LOCKASYNC *unnamedParam2
)
{...}

Parameter

hDevice

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

unnamedParam2

pData- [in, out]

Ein Zeiger auf eine D3DDDIARG_LOCKASYNC Struktur, die die Ressource oder Oberfläche innerhalb der zu sperrenden Ressource beschreibt.

Rückgabewert

LockAsync- gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK Die Ressource wurde erfolgreich gesperrt.
E_OUTOFMEMORY LockAsync konnte den erforderlichen Arbeitsspeicher nicht zuordnen, damit er abgeschlossen werden kann.
D3DDDIERR_WASSTILLDRAWING Das Umbenennen der Zuordnung, die der Ressource entspricht, die die D3DDDIARG_LOCKASYNC Struktur angibt, ist fehlgeschlagen.
Der Treiber gibt diesen Wert nur zurück, wenn das Bitfeld-Flag "Verwerfen" im Flags-Element von D3DDDIARG_LOCKASYNC festgelegt wurde.
E_NOTIMPL Der Anzeigetreiber für den Benutzermodus unterstützt LockAsync für die angegebene Ressource nicht.

Bemerkungen

Auf Mehreren Prozessorcomputern ruft die Microsoft Direct3D-Laufzeit möglicherweise die meisten Funktionen des Anzeigetreibers für den Benutzermodus aus einem Workerthread anstelle des Hauptanwendungsthreads auf. Diese Optimierung mit mehreren Prozessorn ist für den Anzeigetreiber für den Benutzermodus transparent. Wenn die Laufzeit die Optimierung mehrerer Prozessor verwendet, wird möglicherweise LockAsync- aufgerufen, anstatt die Lock-Funktion, um eine Ressource zu sperren.

Ein Benutzermodusanzeigetreiber implementiert optional LockAsync-; Die Direct3D-Laufzeit ruft LockAsync- nur dann auf, wenn der Treiber die LockAsync-implementiert, UnlockAsync-und Funktionen " umbenennen". Ein Anzeigetreiber im Benutzermodus sollte jedoch LockAsync- und die UnlockAsync- implementieren und Funktionen umbenennen, da Anwendungen, die dynamische Ressourcen häufig sperren, eine höhere Leistung erzielen können.

Wenn die Direct3D-Laufzeit die Optimierung mehrerer Prozessor verwendet, ruft sie die meisten Benutzermodusanzeigetreiberfunktionen aus einem Workerthread auf, der von der Laufzeit verwaltet wird; Die Laufzeit ruft jedoch LockAsync- im Hauptthread der Anwendung auf.

Wenn ein Benutzermodusanzeigetreiber eine DDI-Version von 0x0000000B oder höher verfügbar macht (der Treiber gibt diesen Wert im DriverVersion-Element der D3D10DDIARG_OPENADAPTER Struktur in einem Aufruf der OpenAdapter-Funktion des Treibers zurück), ruft die Direct3D-Laufzeit LockAsync erneut auf. Wenn die Laufzeit LockAsync erneut aufruft, kann ein Thread innerhalb von LockAsync ausgeführt werden, während ein anderer Thread, der auf dasselbe Anzeigegerät verweist, innerhalb einer anderen Anzeigetreiberfunktion im Benutzermodus ausgeführt wird. Darüber hinaus ruft die Laufzeit auf dieser Art von Treiber LockAsync für Systemspeicheroberflächen auf. Wenn das Verwerfen Bitfeldkennzeichnung im Flags Mitglied der D3DDDIARG_LOCKASYNCfestgelegt ist, sollte der Treiber versuchen, die Zuordnung, die der Ressource entspricht, umzubenennen. In der Regel ruft der Treiber zum Umbenennen einer Zuordnung die pfnLockCb--Funktion mit dem Zuordnungshandle auf, das der zu sperrenden Ressource entspricht.

Der Treiber sollte die Verwerfen Bitfeldkennzeichnung im Flags Member der D3DDDICB_LOCK Struktur festlegen, wenn der Treiber pfnLockCbaufruft. Der Treiber sollte die NoExistingReference- Bitfeldflagge von D3DDDICB_LOCK festlegen, wenn der Treiber pfnLockCb nur aufruft, wenn die NoExistingReferences Bitfeldflagge auf TRUE- im Flags Member von D3DDDIARG_LOCKASYNC festgelegt ist und der Treiber keine internen Verweise auf die Ressource in die Warteschlange weist.

Wenn der Treiber die Zuordnung nicht umbenennen kann, sollte die LockAsync--Funktion des Treibers den Fehler zurück an die Laufzeit zurückgeben, und der Treiber sollte den Befehlspuffer nicht leeren. Wenn die Umbenennung erfolgreich ist, sollte der Treiber Zeiger auf Ressourcenspeicher, Neigungs- und Segmentabstand und einen Handle für die Ressource zurückgeben, die die umbenannte Zuordnung in den Elementen von D3DDDIARG_LOCKASYNCdarstellt. Der Treiber sollte seine internen Tracking-Strukturen nicht mit dem neuen Zuordnungshandle aktualisieren, das pfnLockCb zurückgibt. Stattdessen sollte der Treiber warten, bis seine Umbenennen Funktion aufgerufen wird.

Wenn das NoOverwrite Bitfeldkennzeichen im Flags Mitglied der D3DDDIARG_LOCKASYNC festgelegt ist, sollte der Treiber die entsprechende Zuordnung mit der Semantik ohne Überschreiben sperren. Der Treiber sollte pfnLockCb aufrufen, wobei das IgnoreSync-Bitfeld-Flag im Flags Mitglied von D3DDDICB_LOCK festgelegt ist und dann Zeiger auf Ressourcenspeicher, Pitch und Slice Pitch an die Direct3D-Laufzeit in den Membern von D3DDDIARG_LOCKASYNCzurückgeben soll. Wenn der Treiber Erfolg (S_OK) von einem Aufruf an seine LockAsync- zurückgibt, wobei die NoOverwrite Bitfeldflagge festgelegt ist, kann es aufgerufen werden, mit einer gesperrten Oberfläche zu rendern. Der Treiber sollte erfolglos von einem Aufruf an die LockAsync- mit NoOverwrite- nur für Oberflächen zurückgeben, die während gesperrt gerendert werden können. Der Videospeicher-Manager erfordert, dass die Zuordnungen, die den Oberflächen entsprechen, in AGP- oder Blendensegmenten unterstützt werden müssen; andernfalls treten Aufrufe der pfnRenderCb--Funktion fehl, wenn der Befehlspuffer auf eine gesperrte Zuordnung verweist.

Zusammenfassend sollte der Treiber keine Aufrufe der LockAsync--Funktion ausführen, wenn das Umbenennen fehlschlägt oder die Semantik ohne Überschreibung für die Ressource nicht unterstützt wird. Die Direct3D-Laufzeit wird jedoch von diesen Fehlern wiederhergestellt. Für alle anderen Situationen sollten Treiber Erfolg von LockAsync- zurückgeben, um die Leistung auf mehreren Prozessorcomputern zu verbessern.

Anforderungen

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

Siehe auch

CreateResource-

D3DDDIARG_CREATERESOURCE

D3DDDIARG_LOCKASYNC

D3DDDICB_LOCK

D3DDDI_DEVICEFUNCS

Sperren

umbenennen

UnlockAsync-

pfnLockCb

pfnRenderCb