Partager via


D3DDDICB_LOCKFLAGS structure (d3dukmdt.h)

La structure D3DDDICB_LOCKFLAGS identifie comment verrouiller une allocation.

Syntaxe

typedef struct _D3DDDICB_LOCKFLAGS {
  union {
    struct {
      UINT ReadOnly : 1;
      UINT WriteOnly : 1;
      UINT DonotWait : 1;
      UINT IgnoreSync : 1;
      UINT LockEntire : 1;
      UINT DonotEvict : 1;
      UINT AcquireAperture : 1;
      UINT Discard : 1;
      UINT NoExistingReference : 1;
      UINT UseAlternateVA : 1;
      UINT IgnoreReadSync : 1;
      UINT Reserved : 21;
    };
    UINT Value;
  };
} D3DDDICB_LOCKFLAGS;

Membres

ReadOnly

Valeur UINT qui spécifie si l’allocation verrouillée ne peut être lue qu’à partir de. Définir ce membre revient à définir le premier bit du membre Value 32 bits (0x00000001).

WriteOnly

Valeur UINT qui spécifie si l’allocation verrouillée peut uniquement être écrite. Définir ce membre revient à définir le deuxième bit du membre Value 32 bits (0x00000002).

DonotWait

Valeur UINT qui spécifie si le gestionnaire de mémoire vidéo doit attendre pour verrouiller l’allocation. Si ce membre est défini, le gestionnaire de mémoire échoue à l’appel à pfnLockCb avec D3DERR_WASSTILLDRAWING si le matériel graphique utilise l’allocation.

Définir ce membre revient à définir le troisième bit du membre value 32 bits (0x00000004).

IgnoreSync

Valeur UINT qui spécifie si le gestionnaire de mémoire vidéo doit case activée si le matériel graphique utilise l’allocation. Si ce membre est défini, le gestionnaire de mémoire ne doit pas case activée.

IgnoreSync peut être défini uniquement avec une allocation qui peut être placée dans un segment d’ouverture. Il ne peut pas être défini avec une allocation swizzled ou avec une allocation mise en cache lorsque la cohérence du cache n’est pas prise en charge par la carte graphique.

Définir ce membre revient à définir le quatrième bit du membre Value 32 bits (0x00000008).

LockEntire

Valeur UINT qui spécifie si la région d’allocation entière est verrouillée plutôt qu’une simple sous-région.

Définir ce membre revient à définir le cinquième bit du membre Value 32 bits (0x00000010).

DonotEvict

Valeur UINT qui spécifie si le gestionnaire de mémoire vidéo doit supprimer l’allocation afin que le verrouillage puisse réussir. Si ce membre est défini, le gestionnaire de mémoire ne doit pas supprimer l’allocation. Si l’allocation doit être supprimée pour gérer la demande de verrouillage, le gestionnaire de mémoire échoue à l’appel à pfnLockCb avec D3DERR_NOTAVAILABLE. L’éviction peut être nécessaire lorsque toutes les ouvertures de balayage sont épuisées.

Définir ce membre revient à définir le sixième bit du membre Value 32 bits (0x00000020).

AcquireAperture

Valeur UINT qui spécifie si le gestionnaire de mémoire vidéo doit appeler la fonction DxgkDdiAcquireSwizzlingRange du pilote miniport d’affichage pour configurer une ouverture sans balayage pour l’allocation.

Une allocation qui a été verrouillée sans définir AcquireAperture ne peut pas être verrouillée à nouveau avec AcquireAperture défini.

AcquireAperture ne peut pas être défini si l’allocation ne peut se trouver que dans un segment d’ouverture.

Définir ce membre revient à définir le septième bit du membre Value 32 bits (0x00000040).

Discard

Valeur UINT qui spécifie si le gestionnaire de mémoire vidéo peut renommer ou mettre en mémoire tampon plusieurs fois l’allocation. Pour plus d’informations sur le renommage des allocations, consultez Demande de renommer une allocation.

Ignorer est ignoré pour les allocations épinglées, primaires ou partagées.

Définir ce membre revient à définir le huitième bit du membre Value 32 bits (0x00000080).

NoExistingReference

Valeur UINT qui spécifie si le pilote d’affichage en mode utilisateur n’a actuellement pas mis en file d’attente dans sa mémoire tampon de commandes une référence à une instance de l’allocation qui est verrouillée. Le pilote doit utiliser le membre NoExistingReference après que le gestionnaire de mémoire vidéo a échoué à la demande de verrouillage en utilisant uniquement l’indicateur Ignorer et après que le pilote a vidé sa mémoire tampon de commandes actuelle dans le noyau. Le pilote doit utiliser NoExistingReference en combinaison avec Discard.

Définir ce membre revient à définir le neuvième bit du membre Value 32 bits (0x00000100).

UseAlternateVA

Valeur UINT qui spécifie si le pilote de miniport d’affichage peut verrouiller une allocation à une adresse physique différente de l’emplacement du segment actuel de l’allocation ou avec un encombrement mémoire différent de celui précédemment alloué. Lorsque cet indicateur est spécifié, le pilote miniport d’affichage peut mettre à jour l’adresse de base et la taille de la plage d’adresses physiques via laquelle l’allocation est accessible par le processeur (en mettant à jour les membres RangeSize et CPUTranslatedAddress de la structure DXGKARG_ACQUIRESWIZZLINGRANGE dans un appel à la fonction DxgkDdiAcquireSwizzlingRange ). Lorsque cet indicateur est spécifié, le gestionnaire de mémoire vidéo tente d’allouer une nouvelle adresse virtuelle pour gérer la demande de verrouillage au lieu d’utiliser l’adresse virtuelle du magasin de stockage de stockage d’allocation. Toutefois, si le gestionnaire de mémoire vidéo ne peut pas allouer la nouvelle adresse virtuelle, la demande de verrouillage échoue.

Cet indicateur est également utilisé pour verrouiller les allocations en mosaïque ou en mosaïque qui se trouvent actuellement dans un segment d’ouverture non-AGP. Dans ce type de verrou, le gestionnaire de mémoire vidéo mappe l’adresse virtuelle de remplacement à une plage d’adresses physiques qui peut être déverrouillée ou non à la volée, puis redirige l’accès à la mémoire vers les pages de mémoire système.

Le gestionnaire de mémoire vidéo crée l’autre adresse virtuelle lorsque l’allocation est d’abord verrouillée avec UseAlternateVA et libère l’adresse virtuelle dans l’un des scénarios suivants :

  • L’allocation n’est pas accessible au processeur et la plage swizzling est libérée pour être réutilisée par une autre allocation.
  • L’allocation n’est pas accessible au processeur et est en cours de suppression.
  • L’allocation est en cours de destruction.
  • L’allocation est paginée après son éviction alors qu’elle est verrouillée.
N’oubliez pas que UseAlternateVA ne peut être utilisé sur l’allocation primaire que si l’allocation primaire a été créée en spécifiant l’indicateur de champ binaire UseAlternateVA dans le membre Indicateurs de la structure DXGK_ALLOCATIONINFO dans un appel à la fonction DxgkDdiCreateAllocation du pilote miniport d’affichage. Une allocation primaire créée de cette manière ne peut être verrouillée qu’avec l’indicateur UseAlternateVA .

UseAlternateVA ne peut pas être utilisé sur une allocation partagée.

Une allocation qui a été verrouillée avec le jeu UseAlternateVA ne peut pas être verrouillée à nouveau.

Note Si le pilote d’affichage en mode utilisateur a défini UseAlternateVA dans le membre Flags de la structure D3DDDICB_LOCKFLAGS lors d’un appel à la fonction pfnLockCb , le pilote de miniport d’affichage ne doit pas appeler la fonction DxgkCbExcludeAdapterAccess .
 
Définir ce membre revient à définir le dixième bit du membre Value 32 bits (0x00000200).

IgnoreReadSync

Valeur UINT qui spécifie si le gestionnaire de mémoire vidéo doit attendre uniquement la fin des opérations d’écriture gpu (Graphics Processing Unit) en attente dans l’allocation. Si ce membre est défini, le gestionnaire de mémoire n’est pas tenu d’attendre la fin des opérations de lecture gpu. Autrement dit, dès que la dernière opération d’écriture gpu est terminée, le verrou peut retourner même si le GPU est toujours en cours de lecture à partir de l’allocation.

IgnoreReadSync peut être défini uniquement avec une allocation qui peut être placée dans un segment d’ouverture. Il ne peut pas être défini avec une allocation swizzled ou avec une allocation mise en cache lorsque la cohérence du cache n’est pas prise en charge par la carte graphique.

Définir ce membre revient à définir le onzième bit du membre Value 32 bits (0x00000400).

Reserved

Ce membre est réservé et doit être défini sur zéro. Définir ce membre sur zéro équivaut à définir les 21 bits restants (0xFFFFF800) du membre Value 32 bits sur zéros.

Value

Membre de l’union contenu dans D3DDDICB_LOCKFLAGS pouvant contenir une valeur 32 bits qui identifie comment verrouiller une allocation.

Remarques

Lorsque vous utilisez une structure D3DDDICB_LOCKFLAGS pour spécifier comment verrouiller une allocation, vous devez respecter les règles suivantes :

  • La spécification simultanée des membres ReadOnly et WriteOnly n’est pas valide.
  • Le membre IgnoreSync n’a aucun effet s’il est spécifié avec le membre Discard .
  • Le membre DonotWait n’a aucun effet s’il est spécifié avec le membre Discard .
  • La spécification simultanée des membres IgnoreSync et AcquireAperture n’est pas valide.
  • Étant donné que la spécification du membre UseAlternateVA indique qu’une ouverture est acquise, le membre AcquireAperture doit également être défini.
  • Les allocations retirées ou offertes ne peuvent pas être verrouillées. Voir aussi Demande de renommage d’une allocation.
  • Une allocation ne peut être verrouillée que si elle a été créée avec le membre CpuVisible défini dans la structure DXGK_ALLOCATIONINFOFLAGS .
  • Seul le propriétaire (créateur) d’une allocation partagée peut la verrouiller, sauf s’il s’agit d’une allocation principale non managée GDI.
  • Une allocation qui est verrouillée avec une plage swizzled doit être déverrouillée avant de pouvoir être à nouveau verrouillée.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible dans Windows Vista et versions ultérieures des systèmes d’exploitation Windows.
En-tête d3dukmdt.h (incluez D3dukmdt.h)

Voir aussi

D3DDDICB_LOCK

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiAcquireSwizzlingRange

pfnLockCb