Condividi tramite


DXGK_ALLOCATIONINFOFLAGS struttura (d3dkmddi.h)

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

Sintassi

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;

Members

CpuVisible

[out] Valore UINT che specifica se l'allocazione è accessibile direttamente dalla CPU. Il driver miniport visualizzato 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 a impostare il primo bit del membro Valore 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 del sistema di superficie viene perso quando si trasferisce 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 impaginato se l'allocazione non è sporca, ovvero l'allocazione non era la destinazione di un'operazione di scrittura perché è stata impaginata.

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 segmento di memoria per l'allocazione viene aggiornata con il nuovo contenuto. Questo aggiornamento viene visualizzato, per il driver miniport visualizzato, come operazione di paging regolare tramite la funzione DxgkDdiBuildPagingBuffer . Si noti che se il driver miniport visualizzato richiede una dimensione minima dell'area o l'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 a impostare il secondo bit del membro Valore 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 coesistenza del contenuto dell'allocazione scaricandolo dalla cache del processore al momento appropriato.

Quando il driver imposta Cache e imposta anche il membro ExistingSysMem o ExistingKernelSysMem , il driver indica alla gestione memoria video che la memoria esistente è stata mappata nella cache. Se la memoria esistente è stata mappata, ma il driver non riesce a impostare il membro memorizzato nella cache, la gestione memoria video non può garantire la coherency dei dati e si verifica il danneggiamento. Il driver deve impostare il membro memorizzato nella cache per un'allocazione che deve essere letto 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 Cache sulla superficie primaria.

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

Protected

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

L'impostazione di questo membro equivale a impostare il 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 di modalità utente valido per il processo corrente per le dimensioni dell'allocazione. L'intervallo di memoria di sistema deve anche essere allineato a pagina e deve essere una pagina più dimensioni.

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

Si noti che questo tipo di allocazione include 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 a impostare il 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 più dimensioni.

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

Si noti che questo tipo di allocazione include 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 a impostare il sesto bit del membro Valore a 32 bit (0x00000020).

FromEndOfSegment

[out] Valore UINT che specifica se l'allocazione deve essere allocata dalla fine di un segmento durante il paging. La gestione memoria video analizza uno spazio indirizzi segmento e cerca la stanza per l'allocazione dalla fine del segmento anziché l'analisi dall'inizio del segmento (ovvero il comportamento predefinito). Tuttavia, le informazioni sul segmento consigliate e consigliate hanno precedenti su questo flag.

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

Swizzled

[out] Valore UINT che specifica se l'allocazione è swizzled e richiede supporto speciale da parte della gestione memoria video per bloccare l'allocazione. Per altre informazioni sulle allocazioni swizzled, vedere Blocco di allocazioni Swizzled.

L'impostazione di questo membro equivale a impostare l'ottavo bit del membro Valore a 32 bit (0x00000080).

Overlay

[out] Valore UINT che specifica se l'allocazione è per un'operazione di sovrapposizione. Le allocazioni di sovrapposizione vengono aggiunte in memoria e la gestione memoria video non può rimuoverle a meno che non si verifichi il processo di rilevamento e ripristino di timeout, Plug and Play (PnP) o la sincronizzazione a livello tre. Si noti che prima che si verifichi la sincronizzazione di tre livelli, le sovrimpressione vengono in genere eliminate. Per impostazione predefinita, le allocazioni di sovrapposizione sono limitate e non possono occupare più dell'ultimo 20% di un segmento. Se un'allocazione di sovrapposizione viene allocata in un segmento di apertura, il driver miniport visualizzato deve limitare le dimensioni di qualsiasi altra allocazione che usa tale segmento di apertura come segmento di rimozione al 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 visualizzato non limita le dimensioni di un'altra allocazione, la gestione memoria video non può eliminare tale allocazione attraverso il segmento perché l'allocazione aggiunta (ovvero l'allocazione di sovrapposizione) occupa l'area necessaria per la rimozione. In questo caso, il contenuto dell'altra allocazione che viene rimosso viene perso e l'applicazione che possiede l'allocazione persa non può più eseguire il rendering con tale allocazione.

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

Capture

[out] Valore UINT che specifica se l'allocazione viene usata per un'operazione di acquisizione. Le allocazioni di acquisizione vengono aggiunte in memoria in modo analogo alle allocazioni di sovrapposizione. Pertanto, 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 Di sovrapposizione . Si noti che prima che si verifichi la sincronizzazione di tre livelli , le acquisizioni vengono in genere arrestate.

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

UseAlternateVA

[out] Valore UINT che specifica se l'allocazione primaria può essere bloccata. UseAlternateVA è valido solo per l'allocazione primaria. Se UseAlternateVA viene specificato per qualsiasi altra allocazione, l'allocazione non viene creata. Quando viene creata un'allocazione primaria usando UseAlternateVA, viene configurato un intervallo di scorrimento per l'allocazione primaria quando viene creata l'allocazione.

L'impostazione di questo membro equivale a impostare l'undicesimo bit del membro Valore a 32 bit (0x00000400).

SynchronousPaging

[out] Valore UINT che specifica se l'allocazione deve essere impaginata in modo sincrono. Se il driver miniport visualizzato imposta questo bit per un'allocazione, la gestione memoria video attenderà fino a quando l'allocazione non è più occupato (ovvero, la gestione memoria video attenderà fino a quando l'unità di elaborazione grafica (GPU) segnala tutte le recinzioni che fanno riferimento all'allocazione) prima che la gestione memoria video invii un buffer di paging che fa riferimento all'allocazione.

Analogamente, la gestione memoria video attenderà il completamento di un'operazione di paging in un'allocazione sincrona prima che la gestione memoria video consenta al driver di inviare un buffer DMA (Non Paging Direct Memory Access).

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

LinkMirrored

[out] Valore UINT che specifica se deve essere replicata una singola istanza di un'allocazione in tutte le schede fisiche in una scheda logica, ovvero un collegamento. La gestione memoria video chiama il driver nella pagina e rimuove l'allocazione in tutte le schede fisiche con un singolo archivio di backup condiviso nella memoria di sistema.

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

LinkInstanced

[out] Valore UINT che specifica se le diverse istanze di un'allocazione verranno impaginate e rimosse da tutte le schede fisiche in una scheda logica, ovvero un collegamento. Un archivio di backup della memoria di sistema esiste per scheda fisica in una scheda logica.

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

HistoryBuffer

[out] Valore UINT che specifica se il driver di visualizzazione in modalità utente alloca un buffer di cronologia. Il driver miniport visualizzato 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 visualizzato 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 a impostare il quindicesimo bit del membro Valore a 32 bit (0x00004000).

Supportato a partire da Windows 8.1.

AccessedPhysically

Il driver in modalità kernel imposta il flag sulle allocazioni, a cui si accede dall'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).

Supportato a partire da Windows 10.

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

Supportato a partire da Windows 10.

HardwareProtected

Quando questo membro è impostato, l'allocazione conterrà il contenuto usato per la gestione dei diritti digitali hardware (DRM).

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.

Reserved

Riservato per l'utilizzo nel sistema. Disponibile a partire da Windows 10.

DXGK_ALLOC_RESERVED16

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED15

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED14

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED13

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED12

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED11

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED10

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED9

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED4

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED3

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED2

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED1

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

DXGK_ALLOC_RESERVED0

[in] Questo membro è riservato e deve essere impostato su zero. Supportato a partire da Windows 8.

Value

[out] Membro dell'unione che DXGK_ALLOCATIONINFOFLAGS 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 precedente a WDDM 2.0 usa questa struttura per specificare questi flag per la gestione memoria video. I driver destinati alle versioni >WDDM = WDDM 2.0 devono usare DXGK_ALLOCATIONINFOFLAGS_WDDM2_0.

È 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 Vista
Intestazione d3dkmddi.h (include D3dkmddi.h)

Vedi anche

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS_WDDM2_0

DxgkDdiBuildPagingBuffer

pfnLockCb

pfnUnlockCb