DXGK_SEGMENTFLAGS structure (d3dkmddi.h)

La structure DXGK_SEGMENTFLAGS identifie les propriétés d’un segment fourni par le pilote via un appel à sa fonction DxgkDdiQueryAdapterInfo .

Syntaxe

typedef struct _DXGK_SEGMENTFLAGS {
  union {
    struct {
      UINT Aperture : 1;
      UINT Agp : 1;
      UINT CpuVisible : 1;
      UINT UseBanking : 1;
      UINT CacheCoherent : 1;
      UINT PitchAlignment : 1;
      UINT PopulatedFromSystemMemory : 1;
      UINT PreservedDuringStandby : 1;
      UINT PreservedDuringHibernate : 1;
      UINT PartiallyPreservedDuringHibernate : 1;
      UINT DirectFlip : 1;
      UINT Use64KBPages : 1;
      UINT ReservedSysMem : 1;
      UINT SupportsCpuHostAperture : 1;
      UINT SupportsCachedCpuHostAperture : 1;
      UINT ApplicationTarget : 1;
      UINT VprSupported : 1;
      UINT VprPreservedDuringStandby : 1;
      UINT EncryptedPagingSupported : 1;
      UINT LocalBudgetGroup : 1;
      UINT NonLocalBudgetGroup : 1;
      UINT PopulatedByReservedDDRByFirmware : 1;
#if ...
      UINT Reserved : 10;
#elif
      UINT Reserved : 11;
#elif
      UINT Reserved : 21;
#else
      UINT Reserved : 22;
#endif
    };
    UINT Value;
  };
} DXGK_SEGMENTFLAGS;

Membres

Aperture

[out] Valeur UINT qui spécifie si le segment est un segment d’ouverture au lieu d’un segment de mémoire. Un segment d’ouverture n’a pas de pages physiques pouvant contenir du contenu pour une allocation. Lorsque le gestionnaire de mémoire vidéo page une allocation dans un segment de mémoire, le gestionnaire de mémoire transfère le contenu de l’allocation du magasin de stockage de mémoire système vers l’emplacement du segment. Lorsque le gestionnaire de mémoire vidéo page une allocation dans un segment d’ouverture, le gestionnaire de mémoire mappe les pages physiques du magasin de stockage d’allocation dans le segment.

Si le pilote spécifie ce membre, il doit également implémenter les types d’opération map-aperture-segment et unmap-aperture-segment pour sa fonction DxgkDdiBuildPagingBuffer .

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

Agp

[out] Valeur UINT qui spécifie si le segment est un segment d’ouverture de type AGP**, qui utilise une partie de l’ouverture AGP exposée par le jeu de puces. Le gestionnaire de mémoire vidéo alloue la page pour l’ouverture sous-jacente et communique avec le pilote GART (Graphic Address Remapping Table) pour mapper et démapper la mémoire de l’ouverture. Étant donné qu’il ne peut exister qu’un seul segment AGP, le pilote ne doit pas spécifier l’indicateur de champ de bits Agp avec d’autres indicateurs de champ binaire DXGK_SEGMENTFLAGS.

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

CpuVisible

[out] Valeur UINT qui spécifie si le segment de mémoire est accessible au processeur à l’adresse spécifiée par le membre CpuTranslatedAddress de la structure DXGK_SEGMENTDESCRIPTOR qui décrit le segment de mémoire.

Ce membre n’a aucune signification pour un segment d’ouverture, y compris le segment d’ouverture de type AGP. La seule exception se produit lorsque le pilote d’affichage en mode utilisateur n’a pas configuré d’adresse virtuelle de remplacement pour une allocation principale (autrement dit, lorsque le pilote n’a pas défini UseAlternateVA dans le membre Flags de la structure D3DDDICB_LOCKFLAGS lors d’un appel à la fonction pfnLockCb ).

Pour plus d’informations, consultez Notes.

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

UseBanking

[out] Valeur UINT qui spécifie si le segment est divisé en banques que le pilote utilise pour fournir des indications au gestionnaire de mémoire vidéo sur l’emplacement des allocations dans le segment. Le pilote doit également spécifier des informations bancaires valides dans les membres NbOfBanks et pBankRangeTable de la structure DXGK_SEGMENTDESCRIPTOR qui décrit le segment.

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

CacheCoherent

[out] Valeur UINT qui spécifie si le segment d’ouverture peut maintenir la cohérence du cache avec les pages pouvant être mises en cache qui sont mappées à l’ouverture. Ce membre peut être défini uniquement avec la définition du membre Aperture (autrement dit, CacheCoherent n’a aucune signification pour un segment de mémoire).

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

PitchAlignment

[out] Valeur UINT qui spécifie si une allocation mappée au segment doit être alignée. Pour ce type de segment, le gestionnaire de mémoire vidéo utilise le membre Size de la structure DXGK_ALLOCATIONINFO pour l’allocation afin d’allouer un magasin de stockage pour l’allocation. Toutefois, le gestionnaire de mémoire vidéo utilise le membre PitchAlignedSize de DXGK_ALLOCATIONINFO pour allouer des ressources au segment. Une allocation qui est ciblée pour ce type de segment a généralement une taille différente pour le magasin de stockage et pour le segment. Lorsque la taille du magasin de stockage ne correspond pas à la taille du segment, le pilote doit déterminer comment déplacer correctement les données dans l’allocation. Ce type de segment ne peut pas être utilisé pour l’éviction.

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

PopulatedFromSystemMemory

[out] Valeur UINT qui spécifie si le segment de mémoire est effectivement rempli à partir de la mémoire système allouée par le pilote lors de l’initialisation. Si le segment de mémoire est rempli à partir de la mémoire système réservée par le BIOS et n’est pas accessible au système d’exploitation (autrement dit, le système d’exploitation ne compte pas cette mémoire système lorsque le système d’exploitation indique la quantité totale de mémoire système), le pilote ne doit pas définir cet indicateur. Cet indicateur n’est pas valide et est ignoré sur les segments d’ouverture.

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

PreservedDuringStandby

[out] Valeur UINT qui spécifie si le segment est conservé dans une transition vers un état d’alimentation du système de secours.

Pour plus d’informations sur les options de transition d’alimentation, consultez Remarques.

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

Pris en charge à partir de Windows 8.

PreservedDuringHibernate

[out] Valeur UINT qui spécifie si le segment est conservé dans une transition vers un état d’alimentation système en veille prolongée. Ne définissez pas cet indicateur, sauf si le membre PreservedDuringStandby est également défini. Pour plus d’informations sur les options de transition d’alimentation, consultez Remarques.

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

Pris en charge à partir de Windows 8.

PartiallyPreservedDuringHibernate

[out] Valeur UINT qui spécifie si le segment est partiellement conservé dans une transition vers un état d’alimentation système en veille prolongée. Ne définissez pas cet indicateur, sauf si le membre PreservedDuringStandby est également défini. Pour plus d’informations sur les options de transition d’alimentation, consultez Remarques.

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

Pris en charge à partir de Windows 8.

DirectFlip

[out] Valeur UINT qui spécifie si un segment prend en charge les allocations Direct Flip. Dans ce cas, le pilote doit s’assurer que les allocations Direct Flip peuvent être épinglées et analysées à partir de ce segment.

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

Pris en charge à partir de Windows 8.

Use64KBPages

[out] Lorsqu’il est défini, le segment de mémoire GPU prend en charge les pages de 64 Ko. Sinon, les pages de 4 Ko sont prises en charge. Lorsque le pilote définit la limite et qu’une allocation peut être paginée sur le segment, l’alignement de l’allocation, retourné par le pilote en mode noyau à partir de DXGK_ALLOCATIONINFO, doit être multiple de 64 Ko.

Pris en charge à partir de Windows 10.

ReservedSysMem

[out] Réservé à l’utilisation du système et ne doit pas être défini par le pilote en mode noyau.

Pris en charge à partir de Windows 10.

SupportsCpuHostAperture

[out] Lorsqu’il est défini, le segment peut être mappé via l’ouverture de l’hôte du processeur. Cet indicateur ne peut pas être utilisé en combinaison avec l’indicateur CpuVisible .

Pris en charge à partir de Windows 10.

SupportsCachedCpuHostAperture

[out] Lorsqu’elle est définie, cela indique que le matériel prend en charge l’ouverture d’hôte de processeur cohérente du cache du processeur. En outre, l’indicateur SupportsCpuHostAperture doit être défini. L’indicateur est généralement défini par les pilotes d’émulation GPU logiciels.

Pris en charge à partir de Windows 10.

ApplicationTarget

[out] Lorsqu’il est défini, il indique que ce segment doit être ciblé par les budgets d’application.

Pris en charge à partir de Windows 10.

VprSupported

[out] Lorsqu’elle est définie, indique que la région protégée vidéo (VPR) est prise en charge.

VprPreservedDuringStandby

[out] Lorsqu’il est défini, indique que le contenu des VPN est conservé pendant la veille.

EncryptedPagingSupported

[out] Lorsqu’elle est définie, indique que les allocations protégées par le matériel sont chiffrées pendant la pagination.

LocalBudgetGroup

[out] Lorsqu’il est défini, indique que ce segment est comptabilisé par rapport au groupe de budget du segment de mémoire local.

NonLocalBudgetGroup

[out] Lorsqu’il est défini, indique que ce segment est comptabilisé dans le groupe de budget du segment de mémoire non local.

PopulatedByReservedDDRByFirmware

[out] Lorsqu’il est défini, indique que ce segment est rempli à partir de la mémoire DDR du système réservé par le microprogramme. Disponible à partir de Windows Server 2022 (WDDM 2.9).

Reserved

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

Value

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

Remarques

Le pilote peut spécifier les propriétés du segment 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 DXGK_SEGMENTFLAGS contient.

Notez que pour un segment d’ouverture de type AGP, le pilote doit définir exclusivement le membre Agp de la structure dans l’union que DXGK_SEGMENTFLAGS contient. Bien que le segment d’ouverture de type AGP soit une ouverture et visible par le processeur, si d’autres membres sont définis, l’adaptateur ne parvient pas à s’initialiser.

Dans le cas particulier où l’allocation utilise un segment d’ouverture sur une allocation primaire partagée (DXGKARG_GETSTANDARDALLOCATIONDRIVERDATA.StandardAllocationType est D3DKMDT_STANDARDALLOCATION_SHAREDPRIMARYSURFACE) et DXGK_ALLOCATIONINFOFLAGS. UseAlternateVA n’est pas défini, le pilote doit utiliser une allocation primaire soutenue par section (DXGK_VIDMMCAPS.SectionBackedPrimary est défini) lorsque la fonction DxgkDdiQueryAdapterInfo du pilote est appelée. À l’aide d’un serveur principal soutenu par section, vous pouvez éviter les limitations de CpuVisible pour le segment d’ouverture.

Vous pouvez éviter les limitations de CpuVisible pour un segment d’ouverture à l’aide d’une allocation primaire partagée, soutenue par une section. Dans ce cas, utilisez un segment d’ouverture sur une allocation principale partagée (DXGKARG_GETSTANDARDALLOCATIONDRIVERDATA.StandardAllocationType est D3DKMDT_STANDARDALLOCATION_SHAREDPRIMARYSURFACE), ne définissez pas DXGK_ALLOCATIONINFOFLAGS. UtilisezAlternateVA, et utilisez une allocation primaire soutenue par section ( définissez DXGK_VIDMMCAPS.SectionBackedPrimary) lorsque la fonction DxgkDdiQueryAdapterInfo du pilote est appelée.

Paramètres de secours optimisés

La combinaison de valeurs pour les membres PreservedDuringStandby, PreservedDuringHibernate et PartiallyPreservedDuringHibernate détermine si un segment est vidé de son contenu lorsque le système passe à l’état système à faible consommation (de secours), comme suit.

Conservé pendant la veille Conservé pendant la mise en veille prolongée Partiellement conservé pendant la mise en veille prolongée État de veille État de mise en veille prolongée
1 1 1 non valide non valide
1 1 0 non purgé non purgé
1 0 1 non purgé partiellement purgée
1 0 0 non purgé Purgé
0 1 1 non valide non valide
0 1 0 non valide non valide
0 0 1 non valide non valide
0 0 0 Purgé Purgé

Le système d’exploitation ne reconnaît pas les combinaisons dans cette table qui sont marquées « non valides ».

Si le mode veille hybride est activé, le système agit comme s’il était en veille prolongée : il vide les segments qui ne sont pas conservés pendant la mise en veille prolongée, même s’il passe à un état de faible consommation.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Disponible à partir de Windows Vista.
En-tête d3dkmddi.h (inclure D3dkmddi.h)

Voir aussi

DXGKARG_QUERYADAPTERINFO

DXGK_ALLOCATIONINFO

DXGK_QUERYSEGMENTIN

DXGK_SEGMENTDESCRIPTOR

DXGK_SEGMENTDESCRIPTOR3

DxgkDdiBuildPagingBuffer

DxgkDdiQueryAdapterInfo