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.
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) |