structure DXGK_SEGMENTFLAGS (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 qui peuvent contenir du contenu pour une allocation. Lorsque le gestionnaire de mémoire vidéo pages 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 à l’emplacement du segment. Lorsque le gestionnaire de mémoire vidéo pages 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 son DxgkDdiBuildPagingBuffer fonction.
La définition de ce membre équivaut à définir le premier bit du membre valeur de 32 bits (0x00000001).
Agp
[out] Valeur UINT qui spécifie si le segment est un segment AGP**-type d’ouverture, qui utilise une partie de l’ouverture AGP exposée par le microprogramme. Le gestionnaire de mémoire vidéo alloue la page pour l’ouverture sous-jacente et communique avec le pilote de table de remapping d’adresses graphiques (GART) pour mapper et annuler le mappage de la mémoire pour l’ouverture. Étant donné qu’il n’existe qu’un seul segment AGP, le pilote ne doit pas spécifier l’indicateur de champ binaire avec d’autres indicateurs de champ binaire DXGK_SEGMENTFLAGS.
La définition de ce membre équivaut à définir le deuxième bit du membre valeur 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é une autre adresse virtuelle pour une allocation principale (autrement dit, lorsque le pilote n’a pas défini UseAlternateVA dans les indicateurs membre de la structure D3DDDICB_LOCKFLAGS lors d’un appel à la fonction pfnLockCb).
Pour plus d’informations, consultez les remarques.
La définition de ce membre équivaut à définir le troisième bit du membre valeur 32 bits (0x00000004).
UseBanking
[out] Valeur UINT qui spécifie si le segment est divisé en banques que le pilote utilise pour fournir des conseils au gestionnaire de mémoire vidéo sur le placement des allocations au sein du segment. Le pilote doit également spécifier des informations bancaires valides dans le NbOfBanks et pBankRangeTable membres de la structure DXGK_SEGMENTDESCRIPTOR qui décrit le segment.
La définition de ce membre équivaut à définir le quatrième bit du membre valeur 32 bits (0x00000008).
CacheCoherent
[out] Valeur UINT qui spécifie si le segment d’ouverture peut conserver la cohérence du cache avec les pages pouvant être mappées dans l’ouverture. Ce membre ne peut être défini qu’avec la définition du membre Aperture (autrement dit, CacheCoherent n’a aucune signification pour un segment de mémoire).
La définition de ce membre équivaut à définir le cinquième bit du membre valeur 32 bits membre (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 PitchAlignedSize membre de DXGK_ALLOCATIONINFO pour allouer des ressources pour le segment. Une allocation 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.
La définition de ce membre équivaut à définir le sixième bit du membre valeur de 32 bits (0x00000020).
PopulatedFromSystemMemory
[out] Valeur UINT qui spécifie si le segment de mémoire est réellement 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 signale 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.
La définition de ce membre équivaut à définir le septième bit du membre valeur 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.
La définition de ce membre équivaut à définir le huitième bit du membre valeur 32 bits (0x00000080).
Prise 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 du 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.
La définition de ce membre équivaut à définir le neuvième bit du membre valeur 32 bits membre (0x00000100).
Prise 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 du 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.
La définition de ce membre équivaut à définir le dixième bit du membre valeur 32 bits (0x00000200).
Prise 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.
La définition de ce membre équivaut à définir le onzee bit du membre valeur 32 bits (0x00000400).
Prise en charge à partir de Windows 8.
Use64KBPages
[out] Quand il est défini, le segment de mémoire GPU prend en charge 64 Ko de pages. Sinon, 4 pages de 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 de DXGK_ALLOCATIONINFO, doit être multiple de 64 Ko.
Prise 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.
Prise 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.
Prise en charge à partir de Windows 10.
SupportsCachedCpuHostAperture
[out] Lorsqu’il est défini, cela indique que le matériel prend en charge l’ouverture cohérente de l’hôte processeur du cache d’UC. En outre, l’indicateur SupportsCpuHostAperture doit être défini. L’indicateur est généralement défini par les pilotes d’émulation GPU logiciels.
Prise 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.
Prise en charge à partir de Windows 10.
VprSupported
[out] Quand elle est définie, indique que la région protégée par 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] Quand 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 compte par rapport au groupe de budget du segment de mémoire local.
NonLocalBudgetGroup
[out] Lorsqu’il est défini, indique que ce segment compte par rapport au groupe budgétaire 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 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 qui DXGK_SEGMENTFLAGS contient une valeur 32 bits qui identifie les propriétés du segment.
Remarques
Le pilote peut spécifier des propriétés du segment en définissant des bits dans le membre valeur 32 bits ou en définissant des membres individuels de la structure dans l’union qui DXGK_SEGMENTFLAGS contient.
Notez que pour un segment d’ouverture de type AGP, le pilote doit définir exclusivement le Agp membre de la structure dans l’union contenant DXGK_SEGMENTFLAGS. Bien que le segment d’ouverture de type AGP soit une ouverture et visible par l’UC, si d’autres membres sont définis, l’adaptateur ne parvient pas à 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éfinie, le pilote doit utiliser une allocation primaire soutenue par une section (DXGK_VIDMMCAPS.SectionBackedPrimary est définie) lorsque la fonction DxgkDdiQueryAdapterInfo du pilote est appelée. En utilisant une base de sections principale, 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.UseAlternateVAet utilisez une allocation primaire soutenue par une 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 PreservedDuringStandby, PreservedDuringHibernateet PartiellementPreservedDuringHibernate membres détermine si un segment est vidé de son contenu lorsque le système entre dans un état système à faible alimentation (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 secours | É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 vidé |
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 de cette table marquées « non valides ».
Si le mode veille hybride est activé, le système agit comme s’il est mis en veille prolongée : il purge les segments qui ne sont pas conservés pendant la mise en veille prolongée, même s’il passe à un état de faible alimentation.
Exigences
Exigence | Valeur |
---|---|
client minimum pris en charge | Disponible à partir de Windows Vista. |
d’en-tête | d3dkmddi.h (include D3dkmddi.h) |