struttura D3DDDICB_LOCKFLAGS (d3dukmdt.h)
La struttura D3DDDICB_LOCKFLAGS identifica come bloccare un'allocazione.
Sintassi
typedef struct _D3DDDICB_LOCKFLAGS {
union {
struct {
UINT ReadOnly : 1;
UINT WriteOnly : 1;
UINT DonotWait : 1;
UINT IgnoreSync : 1;
UINT LockEntire : 1;
UINT DonotEvict : 1;
UINT AcquireAperture : 1;
UINT Discard : 1;
UINT NoExistingReference : 1;
UINT UseAlternateVA : 1;
UINT IgnoreReadSync : 1;
UINT Reserved : 21;
};
UINT Value;
};
} D3DDDICB_LOCKFLAGS;
Members
ReadOnly
Valore UINT che specifica se l'allocazione bloccata può essere letta solo da. L'impostazione di questo membro equivale all'impostazione del primo bit del membro Value a 32 bit (0x00000001).
WriteOnly
Valore UINT che specifica se l'allocazione bloccata può essere scritta solo in . L'impostazione di questo membro equivale all'impostazione del secondo bit del membro Value a 32 bit (0x00000002).
DonotWait
Valore UINT che specifica se la gestione memoria video deve attendere il blocco dell'allocazione. Se questo membro è impostato, la gestione memoria non riesce a eseguire la chiamata a pfnLockCb con D3DERR_WASSTILLDRAWING se l'hardware grafico usa l'allocazione.
L'impostazione di questo membro equivale all'impostazione del terzo bit del membro Value a 32 bit (0x00000004).
IgnoreSync
Valore UINT che specifica se la gestione memoria video deve verificare se l'hardware grafico usa l'allocazione. Se questo membro è impostato, il gestore della memoria non deve controllare.
IgnoreSync può essere impostato solo con un'allocazione che può essere inserita in un segmento di apertura. Non può essere impostato con un'allocazione swizzled o con un'allocazione memorizzata nella cache quando la coerency della cache non è supportata dalla scheda grafica.
L'impostazione di questo membro equivale all'impostazione del quarto bit del membro Valore a 32 bit (0x00000008).
LockEntire
Valore UINT che specifica se l'intera area di allocazione è bloccata anziché solo una sottoregione.
L'impostazione di questo membro equivale all'impostazione del quinto bit del membro Valore a 32 bit (0x00000010).
DonotEvict
Valore UINT che specifica se la gestione memoria video deve rimuovere l'allocazione in modo che il blocco possa avere esito positivo. Se questo membro è impostato, il gestore della memoria non deve rimuovere l'allocazione. Se l'allocazione deve essere rimossa per gestire la richiesta di blocco, gestione memoria non riesce la chiamata a pfnLockCb con D3DERR_NOTAVAILABLE. L'eliminazione potrebbe essere necessaria quando tutte le aperture deswizzling sono esaurite.
L'impostazione di questo membro equivale all'impostazione del sesto bit del membro Value a 32 bit (0x00000020).
AcquireAperture
Valore UINT che specifica se la gestione memoria video deve chiamare la funzione DxgkDdiAcquireSwizzlingRange del driver del miniport di visualizzazione per configurare un'apertura diswizzling per l'allocazione.
Non è possibile bloccare di nuovo un'allocazione bloccata senza impostare AcquireAperture con il set AcquireAperture .
AcquireAperture non può essere impostato se l'allocazione può trovarsi solo in un segmento di apertura.
L'impostazione di questo membro equivale all'impostazione del settimo bit del membro Value a 32 bit (0x00000040).
Discard
Valore UINT che specifica se la gestione memoria video può rinominare o memorizzare più buffer nell'allocazione. Per altre informazioni sulla ridenominazione delle allocazioni, vedere Richiesta di ridenominazione di un'allocazione.
Discard viene ignorato per le allocazioni aggiunte, primarie o condivise.
L'impostazione di questo membro equivale all'impostazione dell'ottavo bit del membro Value a 32 bit (0x00000080).
NoExistingReference
Valore UINT che specifica se il driver di visualizzazione in modalità utente non ha attualmente accodato nel buffer dei comandi un riferimento a un'istanza dell'allocazione bloccata. Il driver deve usare il membro NoExistingReference dopo che la gestione memoria video non riesce la richiesta di blocco usando solo il flag Discard e dopo che il driver scarica il buffer dei comandi corrente nel kernel. Il driver deve usare NoExistingReference in combinazione con Discard.
L'impostazione di questo membro equivale all'impostazione del nono bit del membro Value a 32 bit (0x00000100).
UseAlternateVA
Valore UINT che specifica se il driver miniport di visualizzazione può bloccare un'allocazione in un indirizzo fisico diverso rispetto alla posizione del segmento corrente dell'allocazione o con un footprint di memoria diverso rispetto a quello allocato in precedenza. Quando viene specificato questo flag, il driver miniport di visualizzazione può aggiornare l'indirizzo di base e le dimensioni dell'intervallo di indirizzi fisici accessibile dalla CPU (aggiornando i membri RangeSize e CPUTranslatedAddress della struttura DXGKARG_ACQUIRESWIZZLINGRANGE in una chiamata alla funzione DxgkDdiAcquireSwizzlingRange ). Quando viene specificato questo flag, gestione memoria video tenta di allocare un nuovo indirizzo virtuale per gestire la richiesta di blocco anziché usare l'indirizzo virtuale dell'archivio di backup dell'allocazione. Tuttavia, se la gestione memoria video non può allocare il nuovo indirizzo virtuale, la richiesta di blocco ha esito negativo.
Questo flag viene usato anche per bloccare le allocazioni swizzled o affiancate che si trovano attualmente in un segmento di apertura non AGP. In questo tipo di blocco, gestione memoria video esegue il mapping dell'indirizzo virtuale alternativo a un intervallo di indirizzi fisico che può essere nonwizzled o fino a quando non è in tempo reale e quindi reindirizza l'accesso alla memoria alle pagine di memoria di sistema.
La gestione memoria video crea l'indirizzo virtuale alternativo quando l'allocazione viene bloccata per la prima volta con UseAlternateVA e rilascia l'indirizzo virtuale in uno degli scenari seguenti:
- L'allocazione non è accessibile alla CPU e l'intervallo di scorrimento viene rilasciato per il riutilizzo da un'altra allocazione.
- L'allocazione non è accessibile alla CPU e viene rimossa.
- L'allocazione viene eliminata definitivamente.
- L'allocazione viene inserita dopo che è stata rimossa durante il blocco.
UseAlternateVA non può essere usato per un'allocazione condivisa.
Non è possibile bloccare di nuovo un'allocazione bloccata con il set UseAlternateVA .
IgnoreReadSync
Valore UINT che specifica se la gestione memoria video deve attendere solo le operazioni di scrittura gpu (Graphics Processing Unit) in sospeso per completare l'allocazione. Se questo membro è impostato, la gestione memoria non è necessaria per attendere il completamento delle operazioni di lettura della GPU. Ovvero, non appena viene completata l'ultima operazione di scrittura della GPU, il blocco può restituire anche se la GPU potrebbe ancora leggere dall'allocazione.
IgnoreReadSync può essere impostato solo con un'allocazione che può essere inserita in un segmento di apertura. Non può essere impostato con un'allocazione swizzled o con un'allocazione memorizzata nella cache quando la coerency della cache non è supportata dalla scheda grafica.
L'impostazione di questo membro equivale all'impostazione dell'undicesimo bit del membro Value a 32 bit (0x00000400).
Reserved
Questo membro è riservato e deve essere impostato su zero. L'impostazione di questo membro su zero equivale all'impostazione dei restanti 21 bit (0xFFFFF800) del membro Value a 32 bit su zeri.
Value
Membro dell'unione contenuto in D3DDDICB_LOCKFLAGS che può contenere un valore a 32 bit che identifica come bloccare un'allocazione.
Commenti
Quando si usa una struttura D3DDDICB_LOCKFLAGS per specificare come bloccare un'allocazione, è necessario rispettare le regole seguenti:
- La specifica simultanea dei membri ReadOnly e WriteOnly non è valida.
- Il membro IgnoreSync non ha alcun effetto se specificato con il membro Discard .
- Il membro DonotWait non ha alcun effetto se specificato con il membro Discard .
- Specificare simultaneamente i membri IgnoreSync e AcquireAperture non è valido.
- Poiché specificando il membro UseAlternateVA viene indicato che viene acquisita un'apertura, è necessario impostare anche il membro AcquireAperture .
- Le allocazioni ritirate o offerte non possono essere bloccate. Vedere anche Richiesta di ridenominazione di un'allocazione.
- Un'allocazione può essere bloccata solo se è stata creata con il membro CpuVisible impostato nella struttura DXGK_ALLOCATIONINFOFLAGS .
- Solo il proprietario (autore) di un'allocazione condivisa può bloccarlo, a meno che non si tratti di un'allocazione primaria non gestita GDI.
- Un'allocazione bloccata con un intervallo swizzled deve essere sbloccata prima di poter essere bloccata di nuovo.
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Disponibile in Windows Vista e versioni successive dei sistemi operativi Windows. |
Intestazione | d3dukmdt.h (include D3dukmdt.h) |