PFND3DDDI_LOCK Rückruffunktion (d3dumddi.h)

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

Syntax

PFND3DDDI_LOCK Pfnd3dddiLock;

HRESULT Pfnd3dddiLock(
  HANDLE hDevice,
  D3DDDIARG_LOCK *unnamedParam2
)
{...}

Parameter

hDevice

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

unnamedParam2

pData [in, out]

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

Rückgabewert

Lock gibt einen der folgenden Werte zurück:

Rückgabecode Beschreibung
S_OK Die Ressource wurde erfolgreich gesperrt.
E_OUTOFMEMORY Die Sperre konnte nicht den erforderlichen Arbeitsspeicher zuordnen, damit sie abgeschlossen werden konnte.
D3DDDIERR_WASSTILLDRAWING Die Ressource befand sich nicht im Leerlauf, wenn die Microsoft Direct3D-Runtime die Lock-Funktion mit dem Bitfeldflag DoNotWait aufgerufen hat, das im Flags-Element von D3DDDIARG_LOCK festgelegt ist.

Hinweise

Die Microsoft Direct3D-Runtime ruft die Sperrfunktion des Benutzermodusanzeigetreibers auf, um eine Ressource oder eine Oberfläche innerhalb der Ressource zu sperren. Diese gesperrte Ressource oder Oberfläche kann mithilfe von Lese- und Schreibvorgängen von der CPU gelesen oder in diese geschrieben werden. Wenn die Laufzeit die Sperre aufruft, muss der Benutzermodus-Anzeigetreiber die PfnLockCb-Rückruffunktion der Laufzeit aufrufen, um eine Zuordnung zu sperren, die der Ressource oder Oberfläche entspricht. Beachten Sie, dass der Anzeigetreiber für den Benutzermodus mehrere Zuordnungen für jede Ressource oder Oberfläche zuordnen kann, der Benutzermodusanzeigetreiber möglicherweise den Zuordnungszeiger, der von pfnLockCb zurückgegeben wird, entsprechend zu konvertieren oder zu verarbeiten, bevor der Lock-Aufruf an die Laufzeit zurückgegeben wird.

Auf Lock-Aufrufe folgen in der Regel übereinstimmende Aufrufe der Unlock-Funktion des Treibers, bevor der Treiber Aufrufe seiner draw-primitiven Funktionen empfängt (d. a. Aufrufe von DrawIndexedPrimitive, DrawIndexedPrimitive2, DrawPrimitive und DrawPrimitive2). Diese Reihenfolge garantiert, dass ein Treiber niemals aufgefordert wird, aus einer gesperrten Ressource zu zeichnen. Gelegentlich muss die Laufzeit jedoch beim Ausführen von Softwaretransformationen und -beleuchtungen eine der draw-primitiven Funktionen des Treibers aufrufen, bevor eine Ressource entsperrt wird (derzeit zeigen nur Vertexpuffer dieses Verhalten). Die Laufzeit markiert Vertexpuffer, bei denen dieses ungewöhnliche Verhalten auftreten kann, mit dem Bitfeldflag MightDrawFromLocked im Flags-Member der D3DDDIARG_CREATERESOURCE - und D3DDDIARG_LOCK-Strukturen (d. a. sowohl bei der Erstellung als auch zur Sperrzeit). Wenn die Hardware aktiv aus einem gesperrten Vertexpuffer gerendert wird, muss der Treiber keine besonderen Aktionen ausführen, da die Laufzeit keine Daten im gesperrten Vertexpuffer überschreibt.

Die Laufzeit ruft die Lock-Funktion des Benutzermodusanzeigetreibers auf, um auch vorab zugewiesene Systemspeicheroberflächen zu sperren. Dieser Vorgang ermöglicht es dem Benutzermodus-Anzeigetreiber, Verweise auf solche Oberflächen ordnungsgemäß zu synchronisieren, die sich möglicherweise im Hardwarebefehlsdatenstrom befinden. Der Benutzermodus-Anzeigetreiber kann die Synchronisierung wie folgt ausführen:

  • Leeren (d. h. aufrufen der PfnRenderCb-Rückruffunktion der Laufzeit) alle ausstehenden Befehle nach Bedarf.
  • Aufrufen von pfnLockCb mit dem entsprechenden Zuordnungshandle für Befehle, die bereits an Hardware übermittelt wurden.
Der Benutzermodus-Anzeigetreiber gibt einen Zeiger auf den Speicher für die gesperrte Oberfläche und den Pitch der Oberfläche in den pSurfData - und Pitch-Elementen der D3DDDIARG_LOCK-Struktur zurück. Bei vorab zugewiesenen Systemspeicheroberflächen ignoriert die Laufzeit jedoch den vom Treiber festgelegten Arbeitsspeicher und die Pitch, obwohl der Treiber weiterhin einen Fehler beim Lock-Aufruf (und somit ein Failback zur Anwendung) ausführen kann. Die Laufzeit legt das NotifyOnly-Bitfeldflag im Flags-Member der D3DDDIARG_LOCK-Struktur fest, um Sperraufrufe , die vorab zugewiesene Systemspeicheroberflächen sperren, von anderen Lock-Aufrufen zu unterscheiden.

Anforderungen

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

Weitere Informationen

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb