Metodo ID3D12Device::MakeResident (d3d12.h)
Rende gli oggetti residenti per il dispositivo.
Sintassi
HRESULT MakeResident(
UINT NumObjects,
[in] ID3D12Pageable * const *ppObjects
);
Parametri
NumObjects
Tipo: UINT
Numero di oggetti nella matrice ppObjects per rendere residente il dispositivo.
[in] ppObjects
Tipo: ID3D12Pageable*
Puntatore a un blocco di memoria contenente una matrice di puntatori dell'interfaccia ID3D12Pageable per gli oggetti.
Anche se la maggior parte degli oggetti D3D12 eredita da ID3D12Pageable, le modifiche di residenza sono supportate solo negli oggetti seguenti: Descrittore Heaps, Heaps, Risorse commit e Query Heaps
Valore restituito
Tipo: HRESULT
Questo metodo restituisce uno dei codici restituiti Direct3D 12.
Commenti
MakeResident carica i dati associati a una risorsa dal disco e riassegnare la memoria dal pool di memoria appropriato della risorsa. Questo metodo deve essere chiamato sull'oggetto che possiede la memoria fisica.
Usare questo metodo e Evict per gestire la memoria video GPU, notando che questa operazione è stata eseguita automaticamente in D3D11, ma ora deve essere eseguita dall'app in D3D12.
MakeResident e Evict può aiutare le applicazioni a gestire il budget di residenza su molti adattatori. MakeResident rientri in modo esplicito nei dati e quindi impedisce la pagina in modo che la GPU possa accedere ai dati. Evict abilita la pagina.
Alcune architetture GPU non possono trarre vantaggio dalla manipolazione della residenza, a causa della mancanza di spazio di indirizzi virtuali GPU sufficiente. Usare D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT e IDXGIAdapter3::QueryVideoMemoryInfo per riconoscere quando lo spazio VA gpu massimo per processo è troppo piccolo o approssimativamente uguale al budget di residenza. Per tali architetture, il budget di residenza sarà sempre vincolato dalla quantità di spazio indirizzi virtuale GPU. L'eliminazione non libera alcun budget di residenza su tali sistemi.
Le applicazioni devono gestire gli errori MakeResident , anche se il budget di residenza è sufficiente. La frammentazione della memoria fisica e l'architettura dell'adattatore possono impedire l'utilizzo di intervalli contigui di grandi dimensioni. Le applicazioni devono liberare più budget di residenza prima di riprovare.
MakeResident viene conteggiato, in modo che Evict debba essere chiamato la stessa quantità di volte in cui MakeResident prima che Evict sia effettivo. Gli oggetti che supportano la residenza vengono resi residenti durante la creazione, quindi una singola chiamata Evict rimuoverà effettivamente l'oggetto.
Le applicazioni devono usare recinzioni per assicurarsi che la GPU non usi oggetti non residenti. MakeResident deve restituire prima che la GPU esegue un elenco di comandi che fa riferimento all'oggetto. L'eliminazione deve essere chiamata dopo il completamento dell'esecuzione di un elenco di comandi che fa riferimento all'oggetto.
Gli oggetti rimossi usano ancora lo stesso indirizzo virtuale GPU e la stessa quantità di spazio indirizzi virtuale GPU. Pertanto, i descrittori delle risorse e altri riferimenti agli indirizzi virtuali GPU non sono invalidati dopo Evict.
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Intestazione | d3d12.h |
Libreria | D3D12.lib |
DLL | D3D12.dll |