struttura DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 (d3dkmddi.h)

La struttura DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 identifica le proprietà per un'allocazione.

Sintassi

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;

Members

CpuVisible

[out] Valore UINT che specifica se l'allocazione è accessibile direttamente dalla CPU. Il driver miniport di visualizzazione deve impostare questo flag per il driver di visualizzazione in modalità utente per chiamare correttamente la funzione pfnLockCb sull'allocazione. Se questo flag non è impostato sull'allocazione, pfnLockCb restituisce un errore.

Si noti che solo il processo che ha creato un'allocazione condivisa può bloccare tale allocazione.

L'impostazione di questo membro equivale all'impostazione del primo bit del membro Value a 32 bit (0x00000001).

PermanentSysMem

[out] Valore UINT che specifica se una copia dell'allocazione deve essere mantenuta nella memoria di sistema anche quando il contenuto si trova in un segmento di memoria. Per impostazione predefinita, un archivio di backup della memoria di sistema di superficie viene perso durante il trasferimento di un'allocazione a un segmento di memoria. Quando viene specificato il flag PermanentSysMem e l'allocazione viene rimossa da un segmento di memoria, il contenuto dell'allocazione viene eliminato e non viene eseguito il paging se l'allocazione non è dirty ( ovvero l'allocazione non è stata la destinazione di un'operazione di scrittura perché è stata inserita nella pagina).

Una chiamata a pfnLockCb nell'allocazione restituisce sempre l'archivio di backup della memoria di sistema per l'allocazione. Se l'allocazione si trova in un segmento di memoria quando il driver di visualizzazione in modalità utente chiama pfnUnlockCb, la risorsa del segmento di memoria per l'allocazione viene aggiornata con il nuovo contenuto. Questo aggiornamento viene visualizzato, per il driver miniport di visualizzazione, come normale operazione di paging tramite la funzione DxgkDdiBuildPagingBuffer . Si noti che se il driver miniport di visualizzazione richiede una dimensione minima dell'area o un allineamento per un'operazione di paging, questo requisito deve essere riflesso nell'area bloccata. Quando il driver imposta PermanentSysMem, il driver deve anche impostare il membro CpuVisible . Il driver non deve impostare PermanentSysMem sulla superficie primaria.

L'impostazione di questo membro equivale all'impostazione del secondo bit del membro Value a 32 bit (0x00000002).

Cached

[out] Valore UINT che specifica se l'archivio di backup dell'allocazione deve essere allocato come memoria memorizzata nella cache; per impostazione predefinita, l'archivio di backup dell'allocazione viene archiviato come memoria combinata in scrittura. Quando un'allocazione di memoria memorizzata nella cache viene usata in un segmento che non è coerente nella cache (ad esempio, un segmento di memoria o un segmento AGP), la gestione memoria video garantisce la coerenza per il contenuto dell'allocazione scaricandola dalla cache del processore al momento appropriato.

Quando il driver imposta Cached e imposta anche il membro ExistingSysMem o ExistingKernelSysMem , il driver indica al gestore della memoria video che la memoria esistente è stata mappata nella cache. Se la memoria esistente è stata mappata nella cache, ma il driver non riesce a impostare il membro memorizzato nella cache, gestione memoria video non può garantire la coerenza dei dati e si verifica un danneggiamento. Il driver deve impostare il membro memorizzato nella cache per un'allocazione che deve essere letta dall'applicazione o dal driver di visualizzazione in modalità utente. Il driver non deve mai impostare il membro memorizzato nella cache per un'allocazione di sola scrittura.

Quando il driver imposta questo membro, il driver deve anche impostare il membro CpuVisible . Il driver non deve impostare Cached sulla superficie primaria.

L'impostazione di questo membro equivale all'impostazione del terzo bit del membro Value a 32 bit (0x00000004).

Protected

[out] Valore UINT che specifica se l'archivio di backup dell'allocazione deve essere allocato nella memoria kernel anziché nello spazio indirizzi utente per proteggere l'allocazione da potenziali accessi diretti alla CPU da parte di un'applicazione. Il driver non può impostare questo membro in combinazione con il membro PermanentSysMem, ExistingSysMem o ExistingKernelSysMem . Il driver non deve impostare Protected sulla superficie primaria.

L'impostazione di questo membro equivale all'impostazione del quarto bit del membro Valore a 32 bit (0x00000008).

ExistingSysMem

[out] Valore UINT che specifica se la gestione memoria video deve usare l'intervallo di memoria di sistema esistente come archivio di backup per l'allocazione. L'intervallo di memoria di sistema deve essere un indirizzo in modalità utente valido per il processo corrente per le dimensioni dell'allocazione. Anche l'intervallo di memoria di sistema deve essere allineato alla pagina e deve essere una pagina con più dimensioni.

Se l'intervallo di memoria di sistema è un indirizzo virtuale memorizzabile nella cache, il driver deve impostare il membro memorizzato nella cache per informare il gestore della memoria video per garantire la coerenza della cache nell'allocazione. Se il membro memorizzato nella cache non è specificato, gestione memoria video determina che l'intervallo di memoria di sistema non è memorizzabile, scrivere combinato o memorizzabile nella cache; Tuttavia, in questa situazione, il driver garantisce la coerenza della cache o determina che la coerency della cache non è un problema per l'utilizzo specificato.

Si noti che questo tipo di allocazione ha in modo implicito la stessa semantica di blocco di un'allocazione in cui è impostato il membro PermanentSysMem .

Il driver non può impostare ExistingSysMem in combinazione con il membro PermanentSysMem, Protected o ExistingKernelSysMem . Il driver non deve impostare ExistingSysMem sulla superficie primaria.

L'impostazione di questo membro equivale all'impostazione del quinto bit del membro Valore a 32 bit (0x00000010).

ExistingKernelSysMem

[out] Valore UINT che specifica se la gestione memoria video deve usare l'intervallo di memoria di sistema esistente come archivio di backup per l'allocazione. L'intervallo di memoria di sistema deve essere un indirizzo in modalità kernel valido allineato in una pagina e una pagina con più dimensioni.

Se l'intervallo di memoria di sistema è un indirizzo virtuale memorizzabile nella cache, il driver deve impostare il membro memorizzato nella cache per informare il gestore della memoria video per garantire la coerenza della cache nell'allocazione. Se il membro memorizzato nella cache non è specificato, gestione memoria video determina che l'intervallo di memoria di sistema non è memorizzabile, scrivere combinato o memorizzabile nella cache; Tuttavia, in questa situazione, il driver garantisce la coerenza della cache o determina che la coerency della cache non è un problema per l'utilizzo specificato.

Si noti che questo tipo di allocazione ha in modo implicito la stessa semantica di blocco di un'allocazione in cui è impostato il membro PermanentSysMem .

Il driver non può impostare ExistingKernelSysMem in combinazione con il membro PermanentSysMem, Protected o ExistingSysMem . Il driver non deve impostare ExistingKernelSysMem sulla superficie primaria.

L'impostazione di questo membro equivale all'impostazione del sesto bit del membro Value a 32 bit (0x00000020).

FromEndOfSegment

[out] Valore UINT che specifica se l'allocazione deve essere allocata dalla fine di un segmento durante il paging. Lo strumento di gestione memoria video analizza uno spazio di indirizzi del segmento e cerca spazio per l'allocazione dalla fine del segmento invece di eseguire l'analisi dall'inizio del segmento (ovvero il comportamento predefinito). Tuttavia, le informazioni sui segmenti hinted e preferred prendono precedenza su questo flag.

L'impostazione di questo membro equivale all'impostazione del settimo bit del membro Value a 32 bit (0x00000040).

DisableLargePageMapping

[out] Valore UINT che specifica se il mapping di pagine di grandi dimensioni per l'allocazione deve essere disabilitato. Il supporto per pagine large per i driver è stato aggiunto a partire da WDDM2.1. Le pagine di grandi dimensioni vengono usate durante la conversione di indirizzi virtuali, in cui la tabella di pagina di livello più basso viene sostituita da una pagina di grandi dimensioni con una copertura uguale alla tabella di pagina di livello 0. Questo flag disabilita e usa una tabella di pagina per la conversione degli indirizzi.

L'impostazione di questo membro equivale all'impostazione dell'ottavo bit del membro Value a 32 bit (0x00000080).

Overlay

[out] Valore UINT che specifica se l'allocazione è per un'operazione di sovrimpressione. Le allocazioni di sovrimpressione vengono aggiunte in memoria e la gestione memoria video non può rimuoverle a meno che non si verifichi il processo TDR (Timeout Detection and Recovery), Plug and Play (PnP) stop o la sincronizzazione di livello tre. Si noti che prima che si verifichi la sincronizzazione di tre livelli, le sovrimpressioni vengono in genere eliminate definitivamente. Per impostazione predefinita, le allocazioni di sovrapposizione sono limitate e non possono occupare più dell'ultimo 20% di un segmento. Se un'allocazione di sovrimpressione viene allocata in un segmento di apertura, il driver miniport di visualizzazione deve limitare le dimensioni di qualsiasi altra allocazione che usa tale segmento di apertura come segmento di rimozione all'80% delle dimensioni del segmento. Il driver miniport di visualizzazione indica che un'allocazione può usare un segmento per la rimozione specificando il bit appropriato per il segmento nel membro EvictionSegmentSet della struttura DXGK_ALLOCATIONINFO per l'allocazione. Se il driver miniport di visualizzazione non limita le dimensioni di un'altra allocazione, la gestione memoria video non può rimuovere tale allocazione tramite il segmento perché l'allocazione bloccata (ovvero l'allocazione di sovrimpressione) occupa l'area necessaria per la rimozione. In questo caso, il contenuto dell'altra allocazione che viene rimossa viene perso e l'applicazione proprietaria dell'allocazione persa non può più eseguire il rendering con tale allocazione.

L'impostazione di questo membro equivale all'impostazione del nono bit del membro Value a 32 bit (0x00000100).

Capture

[out] Valore UINT che specifica se l'allocazione viene utilizzata per un'operazione di acquisizione. Le allocazioni di acquisizione vengono aggiunte in memoria in modo analogo alle allocazioni di sovrapposizione. Di conseguenza, i problemi che si applicano alle allocazioni di sovrapposizione si applicano anche alle allocazioni di acquisizione. Per altre informazioni su questi problemi, vedere la descrizione del flag Overlay . Si noti che prima che si verifichi la sincronizzazione di tre livelli , le acquisizioni vengono in genere arrestate.

L'impostazione di questo membro equivale all'impostazione del decimo bit del membro Valore a 32 bit (0x00000200).

CreateInVpr

[out] Valore UINT che specifica se l'allocazione deve essere creata nell'intervallo protetto da video. Questo membro viene usato per la tecnologia DRM (Hardware Digital Rights Management) nelle versioni >WDDM = WDDM 2.1.

L'impostazione di questo membro equivale all'impostazione dell'undicesimo bit del membro Value a 32 bit (0x00000400).

Reserved00

[in] Per le versioni WDDM precedenti a WDDM 2.1, questo membro è riservato e deve essere impostato su zero.

L'impostazione di questo membro equivale all'impostazione dell'undicesimo bit del membro Value a 32 bit (0x00000400).

DXGK_ALLOC_RESERVED17

[in] Questo membro è riservato e deve essere impostato su zero.

L'impostazione di questo membro equivale all'impostazione del dodicesimo bit del membro Value a 32 bit (0x00000800).

Reserved02

[in] Questo membro è riservato e deve essere impostato su zero.

L'impostazione di questo membro equivale all'impostazione del tredicesimo bit del membro Value a 32 bit (0x00001000).

MapApertureCpuVisible

[in] Se impostato, indica che il driver richiede l'accesso della CPU alla memoria durante una chiamata DxgkDdiBuildPagingBuffer per un'operazione di DXGK_OPERATION_MAP_APERTURE_SEGMENT2 . MapApertureCpuVisible fa parte della funzionalità MapAperatureSegingBuffer diDxgkDdiBuildPagingBuffer2, quindi il driver deve impostare DXGK_VIDMMCAPS MapAperature2Supported per usare questo campo. Se MapAperature2Supported non è impostato ma il driver specifica MapApertureCpuVisible, la chiamata a DxgkDdiCreateAllocation avrà esito negativo. Per altre informazioni, vedere Il mapping DMA di IOMMU . Supportato a partire da Windows Server 2022.

Reserved03

[in] Questo membro è riservato e deve essere impostato su zero.

HistoryBuffer

[out] Valore UINT che specifica se il driver di visualizzazione in modalità utente alloca un buffer di cronologia. Il driver miniport di visualizzazione deve impostare questo flag per indicare che il driver in modalità utente può gestire la creazione e la distruzione dei buffer di cronologia.

Quando il driver miniport di visualizzazione imposta HistoryBuffer, deve anche impostare il flag CpuVisible . Se il driver supporta segmenti di apertura coerenti con la cache, deve anche impostare Cached e tutti gli altri membri devono essere impostati su zero.

L'impostazione di questo membro equivale all'impostazione del quindicesimo bit del membro Value a 32 bit (0x00004000).

AccessedPhysically

Il driver in modalità kernel imposta il flag per le allocazioni, a cui viene eseguito l'accesso tramite l'indirizzo fisico. Tale allocazione verrà allocata in modo contiguo dai segmenti di memoria GPU. Le allocazioni non saranno contigue quando allocate dalla memoria di sistema.

L'impostazione di questo membro equivale a impostare il sedicesimo bit del membro Valore a 32 bit (0x00008000).

ExplicitResidencyNotification

Quando viene specificato questo flag, il driver riceve un'operazione buffer di paging NotifyResidency quando la residenza di allocazione viene modificata (rimossa, commit). Il flag può essere impostato solo quando viene impostato il flag AccessedPhysically .

L'impostazione di questo membro equivale a impostare il diciassettesimo bit del membro Valore a 32 bit (0x00010000).

HardwareProtected

Quando questo membro è impostato, l'allocazione conterrà il contenuto usato per DRM hardware.

CpuVisibleOnDemand

Quando questo membro è impostato, la gestione memoria video tenterà di allocare l'indirizzo virtuale per l'allocazione quando viene mappato/bloccato. In questo modo l'allocazione non ha un indirizzo virtuale permanente, che riduce la quantità di spazio indirizzi virtuale usato. Si comporta in modo analogo al flag CpuVisible in che è un'allocazione direttamente accessibile dalla CPU, ma ottiene solo l'indirizzo virtuale per esso "su richiesta" anziché essere assegnato definitivamente.

DXGK_ALLOC_RESERVED16

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED15

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED14

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED13

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED12

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED11

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED10

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED9

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED4

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED3

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED2

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED1

[in] Questo membro è riservato e deve essere impostato su zero.

DXGK_ALLOC_RESERVED0

[in] Questo membro è riservato e deve essere impostato su zero.

Value

[out] Membro dell'unione che DXGK_ALLOCATIONINFOFLAGS_WDDM2_0 contiene che può contenere un valore a 32 bit che identifica le proprietà dell'allocazione.

Commenti

Un driver miniport visualizzato destinato a qualsiasi versione >WDDM = WDDM 2.0 usa questa struttura per specificare questi flag per la gestione memoria video. I driver destinati alle versioni WDDM precedenti a WDDM 2.0 devono usare DXGK_ALLOCATIONINFOFLAGS.

È possibile specificare le proprietà di un'allocazione impostando bit nel membro Valore a 32 bit o impostando singoli membri della struttura nell'unione contenente la struttura DXGK_ALLOCATIONINFOFLAGS .

Requisiti

Requisito Valore
Client minimo supportato Windows 10
Intestazione d3dkmddi.h (include D3dkmddi.h)

Vedi anche

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb