Partager via


DXGK_ALLOCATIONINFOFLAGS structure (d3dkmddi.h)

La structure DXGK_ALLOCATIONINFOFLAGS identifie les propriétés d’une allocation.

Syntaxe

typedef struct _DXGK_ALLOCATIONINFOFLAGS {
  union {
    struct {
      UINT CpuVisible : 1;
      UINT PermanentSysMem : 1;
      UINT Cached : 1;
      UINT Protected : 1;
      UINT ExistingSysMem : 1;
      UINT ExistingKernelSysMem : 1;
      UINT FromEndOfSegment : 1;
      UINT Swizzled : 1;
      UINT Overlay : 1;
      UINT Capture : 1;
      UINT UseAlternateVA : 1;
      UINT SynchronousPaging : 1;
      UINT LinkMirrored : 1;
      UINT LinkInstanced : 1;
      UINT HistoryBuffer : 1;
      UINT AccessedPhysically : 1;
      UINT ExplicitResidencyNotification : 1;
      UINT HardwareProtected : 1;
      UINT CpuVisibleOnDemand : 1;
      UINT Reserved : 4;
      UINT DXGK_ALLOC_RESERVED16 : 1;
      UINT DXGK_ALLOC_RESERVED15 : 1;
      UINT DXGK_ALLOC_RESERVED14 : 1;
      UINT DXGK_ALLOC_RESERVED13 : 1;
      UINT DXGK_ALLOC_RESERVED12 : 1;
      UINT DXGK_ALLOC_RESERVED11 : 1;
      UINT DXGK_ALLOC_RESERVED10 : 1;
      UINT DXGK_ALLOC_RESERVED9 : 1;
      UINT DXGK_ALLOC_RESERVED4 : 1;
      UINT DXGK_ALLOC_RESERVED3 : 1;
      UINT DXGK_ALLOC_RESERVED2 : 1;
      UINT DXGK_ALLOC_RESERVED1 : 1;
      UINT DXGK_ALLOC_RESERVED0 : 1;
    };
    UINT Value;
  };
} DXGK_ALLOCATIONINFOFLAGS;

Membres

CpuVisible

[out] Valeur UINT qui spécifie si l’allocation est directement accessible par le processeur. Le pilote de miniport d’affichage doit définir cet indicateur pour que le pilote d’affichage en mode utilisateur appelle correctement la fonction pfnLockCb sur l’allocation. Si cet indicateur n’est pas défini sur l’allocation, pfnLockCb retourne une erreur.

Notez que seul le processus qui a créé une allocation partagée peut verrouiller cette allocation.

Définir ce membre revient à définir le premier bit du membre Value 32 bits (0x00000001).

PermanentSysMem

[out] Valeur UINT qui spécifie si une copie de l’allocation doit être conservée dans la mémoire système même lorsque le contenu se trouve dans un segment de mémoire. Par défaut, un magasin de stockage de mémoire système surface est perdu lors du transfert d’une allocation vers un segment de mémoire. Lorsque l’indicateur PermanentSysMem est spécifié et que l’allocation est supprimée d’un segment de mémoire, le contenu de l’allocation est ignoré et non paginé si l’allocation n’est pas sale (autrement dit, l’allocation n’était pas la cible d’une opération d’écriture puisqu’elle a été paginée dans).

Un appel à pfnLockCb sur l’allocation retourne toujours le magasin de stockage de mémoire système pour l’allocation. Si l’allocation se trouve dans un segment de mémoire lorsque le pilote d’affichage en mode utilisateur appelle pfnUnlockCb, la ressource de segment de mémoire pour l’allocation est mise à jour avec le nouveau contenu. Cette mise à jour apparaît, pour le pilote miniport d’affichage, comme une opération de pagination régulière via la fonction DxgkDdiBuildPagingBuffer . Notez que si le pilote de miniport d’affichage nécessite une taille de région ou un alignement minimal pour une opération de pagination, cette exigence doit être reflétée dans la région qui est verrouillée. Lorsque le pilote définit PermanentSysMem, il doit également définir le membre CpuVisible . Le pilote ne doit pas définir PermanentSysMem sur la surface primaire.

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

Cached

[out] Valeur UINT qui spécifie si le magasin de stockage d’allocation doit être alloué en tant que mémoire mise en cache ; par défaut, le magasin de stockage d’allocation est stocké en tant que mémoire combinée en écriture. Lorsqu’une allocation de mémoire mise en cache est utilisée dans un segment qui n’est pas cohérent (par exemple, un segment de mémoire ou un segment AGP), le gestionnaire de mémoire vidéo garantit la cohérence du contenu de l’allocation en le vidant du cache du processeur au moment approprié.

Lorsque le pilote définit Cached et définit également le membre ExistingSysMem ou ExistingKernelSysMem , le pilote indique au gestionnaire de mémoire vidéo que la mémoire existante a été mappée en cache. Si la mémoire existante était mappée, mais que le pilote ne parvient pas à définir le membre mis en cache, le gestionnaire de mémoire vidéo ne peut pas garantir la cohérence des données et une altération se produit. Le pilote doit définir le membre mis en cache pour une allocation qui doit être lue par l’application ou le pilote d’affichage en mode utilisateur. Le pilote ne doit jamais définir le membre mis en cache pour une allocation en écriture seule.

Lorsque le pilote définit ce membre, le pilote doit également définir le membre CpuVisible . Le pilote ne doit pas définir Mis en cache sur la surface primaire.

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

Protected

[out] Valeur UINT qui spécifie si le magasin de stockage d’allocation doit être alloué dans la mémoire du noyau au lieu de l’espace d’adressage utilisateur pour protéger l’allocation contre un accès direct potentiel au processeur par une application. Le pilote ne peut pas définir ce membre en association avec le membre PermanentSysMem, ExistingSysMem ou ExistingKernelSysMem . Le pilote ne doit pas définir Protégé sur la surface primaire.

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

ExistingSysMem

[out] Valeur UINT qui spécifie si le gestionnaire de mémoire vidéo doit utiliser la plage de mémoire système existante comme magasin de stockage pour l’allocation. La plage de mémoire système doit être une adresse valide en mode utilisateur pour le processus actuel pour la taille de l’allocation. La plage de mémoire système doit également être alignée sur la page et doit avoir une taille de page multiple.

Si la plage de mémoire système est une adresse virtuelle pouvant être mise en cache, le pilote doit définir le membre mis en cache pour informer le gestionnaire de mémoire vidéo afin de garantir la cohérence du cache sur l’allocation. Si le membre mis en cache n’est pas spécifié, le gestionnaire de mémoire vidéo détermine que la plage de mémoire système est non mise en cache, écriture combinée ou mise en cache ; Toutefois, dans ce cas, le pilote garantit la cohérence du cache ou détermine que la cohérence du cache n’est pas un problème pour l’utilisation spécifiée.

Notez que ce type d’allocation a implicitement la même sémantique de verrou qu’une allocation dans laquelle le membre PermanentSysMem est défini.

Le pilote ne peut pas définir ExistingSysMem en combinaison avec le membre PermanentSysMem, Protected ou ExistingKernelSysMem . Le pilote ne doit pas définir ExistingSysMem sur la surface primaire.

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

ExistingKernelSysMem

[out] Valeur UINT qui spécifie si le gestionnaire de mémoire vidéo doit utiliser la plage de mémoire système existante comme magasin de stockage pour l’allocation. La plage de mémoire système doit être une adresse valide en mode noyau alignée sur une page et une page de taille multiple.

Si la plage de mémoire système est une adresse virtuelle pouvant être mise en cache, le pilote doit définir le membre mis en cache pour informer le gestionnaire de mémoire vidéo afin de garantir la cohérence du cache sur l’allocation. Si le membre mis en cache n’est pas spécifié, le gestionnaire de mémoire vidéo détermine que la plage de mémoire système est non mise en cache, écriture combinée ou mise en cache ; Toutefois, dans ce cas, le pilote garantit la cohérence du cache ou détermine que la cohérence du cache n’est pas un problème pour l’utilisation spécifiée.

Notez que ce type d’allocation a implicitement la même sémantique de verrou qu’une allocation dans laquelle le membre PermanentSysMem est défini.

Le pilote ne peut pas définir ExistingKernelSysMem en combinaison avec le membre PermanentSysMem, Protected ou ExistingSysMem . Le pilote ne doit pas définir ExistingKernelSysMem sur la surface primaire.

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

FromEndOfSegment

[out] Valeur UINT qui spécifie si l’allocation doit être allouée à partir de la fin d’un segment pendant la pagination. Le gestionnaire de mémoire vidéo analyse un espace d’adressage de segment et recherche de l’espace pour l’allocation à partir de la fin du segment au lieu de l’analyse à partir du début du segment (qui est le comportement par défaut). Toutefois, les informations de segment conseillées et préférées ont un précédent sur cet indicateur.

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

Swizzled

[out] Valeur UINT qui spécifie si l’allocation est swizzled et nécessite une prise en charge spéciale par le gestionnaire de mémoire vidéo pour verrouiller l’allocation. Pour plus d’informations sur les allocations swizzled, consultez Verrouillage des allocations swizzled.

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

Overlay

[out] Valeur UINT qui spécifie si l’allocation est destinée à une opération de superposition. Les allocations de superposition sont épinglées en mémoire, et le gestionnaire de mémoire vidéo ne peut pas les supprimer, sauf si le processus de détection et de récupération du délai d’expiration (TDR), l’arrêt de Plug-and-Play (PnP) ou la synchronisation de niveau 3 n’a pas lieu. Notez qu’avant la synchronisation de niveau 3, les superpositions sont généralement détruites. Par défaut, les allocations de superposition sont limitées et ne peuvent pas occuper plus de 20 % d’un segment. Si une allocation de superposition est allouée dans un segment d’ouverture, le pilote de miniport d’affichage doit limiter la taille de toute autre allocation qui utilise ce segment d’ouverture comme segment d’éviction à 80 % de la taille du segment. Le pilote de miniport d’affichage indique qu’une allocation peut utiliser un segment pour l’éviction en spécifiant le bit approprié pour le segment dans le membre EvictionSegmentSet de la structure DXGK_ALLOCATIONINFO pour l’allocation. Si le pilote de miniport d’affichage ne limite pas la taille d’une autre allocation, le gestionnaire de mémoire vidéo ne peut pas supprimer cette allocation par le biais du segment, car l’allocation épinglée (autrement dit, l’allocation de superposition) occupe la zone requise pour l’éviction. Dans ce cas, le contenu de l’autre allocation qui est supprimée est perdu, et l’application qui possède l’allocation perdue ne peut plus s’afficher avec cette allocation.

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

Capture

[out] Valeur UINT qui spécifie si l’allocation est utilisée pour une opération de capture. Les allocations de capture sont épinglées dans la mémoire de la même façon que les allocations de superposition. Par conséquent, les problèmes qui s’appliquent aux allocations de superposition s’appliquent également aux allocations de capture. Pour plus d’informations sur ces problèmes, consultez la description de l’indicateur de superposition . Notez qu’avant la synchronisation de niveau 3 , les captures sont généralement arrêtées.

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

UseAlternateVA

[out] Valeur UINT qui spécifie si l’allocation principale peut être verrouillée. UseAlternateVA est valide uniquement pour l’allocation principale. Si UseAlternateVA est spécifié pour toute autre allocation, l’allocation n’est pas créée. Lorsqu’une allocation primaire est créée à l’aide de UseAlternateVA, une plage de basculement pour l’allocation primaire est configurée lors de la création de l’allocation.

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

SynchronousPaging

[out] Valeur UINT qui spécifie si l’allocation doit être paginée de façon synchrone. Si le pilote de miniport d’affichage définit ce bit pour une allocation, le gestionnaire de mémoire vidéo attend que l’allocation ne soit plus occupée (autrement dit, le gestionnaire de mémoire vidéo attend que l’unité de traitement graphique (GPU) signale toutes les clôtures qui référencent l’allocation) avant que le gestionnaire de mémoire vidéo envoie une mémoire tampon de pagination qui référence l’allocation.

De même, le gestionnaire de mémoire vidéo attend qu’une opération de pagination sur une allocation synchrone se termine avant que le gestionnaire de mémoire vidéo autorise le pilote à envoyer une mémoire tampon d’accès direct à la mémoire (DMA) sans pagination.

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

LinkMirrored

[out] Valeur UINT qui spécifie si une seule instance d’une allocation doit être répliquée sur toutes les cartes physiques d’une carte logique (autrement dit, un lien). Le gestionnaire de mémoire vidéo appelle le pilote à page dans et supprime l’allocation sur toutes les cartes physiques avec un seul magasin de stockage partagé dans la mémoire système.

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

LinkInstanced

[out] Valeur UINT qui spécifie si les différentes instances d’une allocation seront paginées et supprimées de toutes les cartes physiques dans une carte logique (autrement dit, un lien). Un magasin de stockage de mémoire système existe par carte physique dans une carte logique.

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

HistoryBuffer

[out] Valeur UINT qui spécifie si le pilote d’affichage en mode utilisateur alloue une mémoire tampon d’historique. Le pilote de miniport d’affichage doit définir cet indicateur pour indiquer que le pilote en mode utilisateur peut gérer la création et la destruction des mémoires tampons d’historique.

Lorsque le pilote de miniport d’affichage définit HistoryBuffer, il doit également définir l’indicateur CpuVisible . Si le pilote prend en charge les segments d’ouverture cohérents du cache, il doit également définir Mise en cache, et tous les autres membres doivent être définis sur zéro.

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

Pris en charge à partir de Windows 8.1.

AccessedPhysically

Le pilote en mode noyau définit l’indicateur sur les allocations, qui sont accessibles par leur adresse physique. Une telle allocation sera allouée de manière contiguë à partir de segments de mémoire GPU. Les allocations ne sont pas contiguës lorsqu’elles sont allouées à partir de la mémoire système.

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

Pris en charge à partir de Windows 10.

ExplicitResidencyNotification

Lorsque ces indicateurs sont spécifiés, le pilote reçoit une opération de mémoire tampon de pagination NotifyResidency lorsque la résidence de l’allocation est modifiée (supprimée, validée). L’indicateur ne peut être défini que lorsque l’indicateur AccessedPhysical est défini.

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

Pris en charge à partir de Windows 10.

HardwareProtected

Lorsque ce membre est défini, l’allocation contient le contenu utilisé pour la gestion des droits numériques (DRM) du matériel.

CpuVisibleOnDemand

Lorsque ce membre est défini, le gestionnaire de mémoire vidéo tente d’allouer l’adresse virtuelle pour l’allocation lorsqu’elle est mappée/verrouillée. Cela entraîne l’allocation de ne pas avoir d’adresse virtuelle permanente, ce qui réduit la quantité d’espace d’adressage virtuel utilisé. Il se comporte de la même façon que l’indicateur CpuVisible en ce qu’il s’agit d’une allocation directement accessible par le processeur, mais il obtient simplement l’adresse virtuelle pour elle « à la demande » au lieu d’être affecté de manière permanente.

Reserved

Réservé pour le système. Disponible à partir de Windows 10.

DXGK_ALLOC_RESERVED16

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED15

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED14

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED13

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED12

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED11

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED10

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED9

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED4

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED3

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED2

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED1

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

DXGK_ALLOC_RESERVED0

[in] Ce membre est réservé et doit être défini sur zéro. Pris en charge à partir de Windows 8.

Value

[out] Membre de l’union que contient DXGK_ALLOCATIONINFOFLAGS qui peut contenir une valeur de 32 bits qui identifie les propriétés de l’allocation.

Remarques

Un pilote miniport d’affichage qui cible toute version de WDDM antérieure à WDDM 2.0 utilise cette structure pour spécifier ces indicateurs pour le gestionnaire de mémoire vidéo. Les pilotes qui ciblent les versions >WDDM = WDDM 2.0 doivent utiliser DXGK_ALLOCATIONINFOFLAGS_WDDM2_0.

Vous pouvez spécifier les propriétés d’une allocation en définissant des bits dans le membre Value 32 bits ou en définissant des membres individuels de la structure dans l’union que contient la structure DXGK_ALLOCATIONINFOFLAGS .

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
En-tête d3dkmddi.h (include D3dkmddi.h)

Voir aussi

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS_WDDM2_0

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb