structure DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 (d3dkmddi.h)

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

Syntaxe

typedef struct _DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 {
  union {
    struct {
      UINT CpuVisible : 1;
      UINT PermanentSysMem : 1;
      UINT Cached : 1;
      UINT Protected : 1;
      UINT ExistingSysMem : 1;
      UINT ExistingKernelSysMem : 1;
      UINT FromEndOfSegment : 1;
      UINT DisableLargePageMapping : 1;
      UINT Overlay : 1;
      UINT Capture : 1;
      UINT CreateInVpr : 1;
      UINT Reserved00 : 1;
      UINT DXGK_ALLOC_RESERVED17 : 1;
      UINT Reserved02 : 1;
      UINT MapApertureCpuVisible : 1;
      UINT Reserved03 : 1;
      UINT HistoryBuffer : 1;
      UINT AccessedPhysically : 1;
      UINT ExplicitResidencyNotification : 1;
      UINT HardwareProtected : 1;
      UINT CpuVisibleOnDemand : 1;
      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_WDDM2_0;

Membres

CpuVisible

[out] Valeur UINT qui spécifie si l’allocation est directement accessible par le processeur. Le pilote 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 équivaut à 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 du 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 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.

La définition de ce membre équivaut à 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 dans le cache (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 Mis en cache 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 a été mappée en cache, 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 par 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.

La définition de ce membre équivaut à 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 plutôt que dans l’espace d’adressage utilisateur pour protéger l’allocation d’un accès direct potentiel au processeur par une application. Le pilote ne peut pas définir ce membre en combinaison avec le membre PermanentSysMem, ExistingSysMem ou ExistingKernelSysMem . Le pilote ne doit pas définir Protégé sur la surface primaire.

La définition de ce membre équivaut à 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 en mode utilisateur valide pour le processus en cours 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 n’est pas mis en cache, que l’écriture est combinée ou qu’elle peut être 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.

La définition de ce membre équivaut à 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 multiple en taille.

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 n’est pas mis en cache, que l’écriture est combinée ou qu’elle peut être 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.

La définition de ce membre équivaut à 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 prennent place sur cet indicateur.

La définition de ce membre équivaut à définir le septième bit du membre Value 32 bits (0x00000040).

DisableLargePageMapping

[out] Valeur UINT qui spécifie si le mappage de pages volumineux pour l’allocation doit être désactivé. La prise en charge des grandes pages pour les pilotes a été ajoutée à partir de WDDM2.1. Les pages volumineuses sont utilisées lors de la traduction d’adresses virtuelles, où la table de pages de niveau le plus bas est remplacée par une grande page qui a une couverture égale à celle de la table de page de niveau 0. Cet indicateur désactive cela et utilise une table de pages pour la traduction d’adresses.

La définition de ce membre équivaut à 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 dans la 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’attente (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 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 en cours d’expulsion est perdu et l’application qui possède l’allocation perdue ne peut plus s’afficher avec cette allocation.

La définition de ce membre équivaut à 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 Superposition . Notez qu’avant la synchronisation de niveau 3 , les captures sont généralement arrêtées.

La définition de ce membre équivaut à définir le dixième bit du membre Value 32 bits (0x00000200).

CreateInVpr

[out] Valeur UINT qui spécifie si l’allocation doit être créée dans la plage protégée par vidéo. Ce membre est utilisé pour la gestion des droits numériques matériels (DRM) dans les versions >WDDM = WDDM 2.1.

La définition de ce membre équivaut à définir le onzième bit du membre Value 32 bits (0x00000400).

Reserved00

[in] Pour les versions WDDM antérieures à WDDM 2.1, ce membre est réservé et doit être défini sur zéro.

La définition de ce membre équivaut à définir le onzième bit du membre Value 32 bits (0x00000400).

DXGK_ALLOC_RESERVED17

[in] Ce membre est réservé et doit être défini sur zéro.

La définition de ce membre équivaut à définir le douzième bit du membre Value 32 bits (0x00000800).

Reserved02

[in] Ce membre est réservé et doit être défini sur zéro.

La définition de ce membre équivaut à définir le treizième bit du membre Value 32 bits (0x00001000).

MapApertureCpuVisible

[in] Lorsqu’il est défini, indique que le pilote nécessite un accès processeur à la mémoire lors d’un appel DxgkDdiBuildPagingBuffer pour une opération de DXGK_OPERATION_MAP_APERTURE_SEGMENT2 . MapApertureCpuVisible fait partie de la fonctionnalité MapAperatureSegment2 de DxgkDdiBuildPagingBuffer. Le pilote doit donc définir DXGK_VIDMMCAPS MapAperature2Supported pour utiliser ce champ. Si MapAperature2Supported n’est pas défini, mais que le pilote spécifie MapApertureCpuVisible, l’appel à DxgkDdiCreateAllocation échoue. Pour plus d’informations, consultez La remappage iommu DMA . Pris en charge à partir de Windows Server 2022.

Reserved03

[in] Ce membre est réservé et doit être défini sur zéro.

HistoryBuffer

[out] Valeur UINT qui spécifie si le pilote d’affichage en mode utilisateur alloue une mémoire tampon d’historique. Le pilote 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 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 Mis en cache et tous les autres membres doivent être définis sur zéro.

La définition de ce membre équivaut à définir le quinzième bit du membre Value 32 bits (0x00004000).

AccessedPhysically

Le pilote en mode noyau définit l’indicateur sur les allocations, qui sont accessibles par leur adresse physique. Cette 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).

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

HardwareProtected

Lorsque ce membre est défini, l’allocation contient le contenu utilisé pour la gestion des droits numériques (DRM) 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.

DXGK_ALLOC_RESERVED16

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED15

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED14

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED13

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED12

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED11

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED10

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED9

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED4

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED3

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED2

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED1

[in] Ce membre est réservé et doit être défini sur zéro.

DXGK_ALLOC_RESERVED0

[in] Ce membre est réservé et doit être défini sur zéro.

Value

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

Remarques

Un pilote de miniport d’affichage qui cible n’importe quelle version >de WDDM = 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 de WDDM antérieures à WDDM 2.0 doivent utiliser DXGK_ALLOCATIONINFOFLAGS.

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 10
En-tête d3dkmddi.h (include D3dkmddi.h)

Voir aussi

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb