Partager via


PFND3DDDI_LOCK fonction de rappel (d3dumddi.h)

La fonction Lock verrouille la ressource donnée ou une surface au sein de la ressource.

Syntaxe

PFND3DDDI_LOCK Pfnd3dddiLock;

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

Paramètres

hDevice

Handle de l’appareil d’affichage (contexte graphique).

unnamedParam2

pData [in, out]

Pointeur vers une structure de D3DDDIARG_LOCK qui décrit la ressource ou la surface dans la ressource à verrouiller.

Valeur retournée

Lock retourne l’une des valeurs suivantes :

Code de retour Description
S_OK La ressource est correctement verrouillée.
E_OUTOFMEMORY Lock n’a pas pu allouer la mémoire nécessaire pour qu’il se termine.
D3DDDIERR_WASSTILLDRAWING La ressource n’était pas inactive lorsque le runtime Microsoft Direct3D a appelé la fonction Lock avec l’indicateur de champ de bits DoNotWait défini dans le membre Flags de D3DDDIARG_LOCK .

Remarques

Le runtime Microsoft Direct3D appelle la fonction Lock du pilote d’affichage en mode utilisateur pour verrouiller une ressource ou une surface au sein de la ressource. Cette ressource ou surface verrouillée peut être lue à partir de ou dans laquelle elle peut être écrite à l’aide d’opérations de lecture et d’écriture à partir du processeur. Lorsque le runtime appelle Lock, le pilote d’affichage en mode utilisateur doit appeler la fonction de rappel pfnLockCb du runtime pour verrouiller une allocation correspondant à la ressource ou à la surface. Notez que dans la mesure où le pilote d’affichage en mode utilisateur peut allouer plusieurs allocations pour chaque ressource ou surface, le pilote d’affichage en mode utilisateur peut être nécessaire pour convertir ou traiter de manière appropriée le pointeur d’allocation renvoyé par pfnLockCb avant de renvoyer l’appel de verrouillage au runtime.

En règle générale, les appels à Lock sont suivis d’appels correspondants à la fonction Unlock du pilote avant que le pilote ne reçoive tous les appels à ses fonctions draw-primitives (autrement dit, les appels à DrawIndexedPrimitive, DrawIndexedPrimitive2, DrawPrimitive et DrawPrimitive2). Cette commande garantit qu’un pilote n’est jamais invité à puiser dans une ressource verrouillée. Toutefois, à l’occasion, lors de la transformation logicielle et de l’éclairage, le runtime doit appeler l’une des fonctions de dessin primitif du pilote avant de déverrouiller une ressource (actuellement, seules les mémoires tampons de vertex présentent ce comportement). Le runtime marque les tampons de vertex sur lesquels ce comportement inhabituel peut se produire avec l’indicateur de champ de bits MightDrawFromLocked dans le membre Indicateurs des structures D3DDDIARG_CREATERESOURCE et D3DDDIARG_LOCK (c’est-à-dire, à la fois lors de la création et au moment du verrouillage). Lorsque le matériel effectue un rendu actif à partir d’une mémoire tampon de vertex verrouillée, le pilote n’est pas tenu d’effectuer une action spéciale, car le runtime ne remplace pas les données dans la mémoire tampon de vertex verrouillée .

Le runtime appelle la fonction Lock du pilote d’affichage en mode utilisateur pour verrouiller également les surfaces de mémoire système préallouées. Cette opération permet au pilote d’affichage en mode utilisateur de synchroniser correctement les références à ces surfaces qui peuvent se trouver dans le flux de commandes matérielles. Le pilote d’affichage en mode utilisateur peut effectuer la synchronisation en :

  • Vidage (autrement dit, appel de la fonction de rappel pfnRenderCb du runtime) toutes les commandes en attente si nécessaire.
  • Appel de pfnLockCb avec le handle d’allocation approprié pour les commandes qui ont déjà été envoyées au matériel.
Le pilote d’affichage en mode utilisateur retourne un pointeur vers la mémoire de la surface verrouillée et le pitch de la surface dans les membres pSurfData et Pitch de la structure D3DDDIARG_LOCK. Toutefois, pour les surfaces de mémoire système préallouées, le runtime ignore la mémoire et le pitch du jeu de pilotes, bien que le pilote puisse toujours échouer l’appel de verrouillage (et donc revenir à l’application). Le runtime définit l’indicateur de champ de bits NotifyOnly dans le membre Indicateurs de la structure D3DDDIARG_LOCK pour différencier les appels lock qui verrouillent les surfaces de mémoire système préallouées des autres appels lock .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et les versions ultérieures des systèmes d’exploitation Windows.
Plateforme cible Universal
En-tête d3dumddi.h (inclure D3dumddi.h)

Voir aussi

D3DDDIARG_LOCK

D3DDDI_ALLOCATIONINFO

D3DDDI_DEVICEFUNCS

pfnLockCb

pfnRenderCb