ID3D12Device ::MakeResident, méthode (d3d12.h)
Rend les objets résidant pour l’appareil.
Syntaxe
HRESULT MakeResident(
UINT NumObjects,
[in] ID3D12Pageable * const *ppObjects
);
Paramètres
NumObjects
Type : UINT
Nombre d’objets dans le tableau ppObjects à rendre résident pour l’appareil.
[in] ppObjects
Type : ID3D12Pageable*
Pointeur vers un bloc de mémoire qui contient un tableau de pointeurs d’interface ID3D12Pageable pour les objets.
Même si la plupart des objets D3D12 héritent d’ID3D12Pageable, les modifications de résidence ne sont prises en charge que sur les objets suivants : Tas de descripteur, Tas, Ressources validées et Segments de requête
Valeur retournée
Type : HRESULT
Cette méthode retourne l’un des codes de retour Direct3D 12.
Remarques
MakeResident charge les données associées à une ressource à partir du disque et réalloue la mémoire à partir du pool de mémoire approprié de la ressource. Cette méthode doit être appelée sur l’objet qui possède la mémoire physique.
Utilisez cette méthode, et Evict, pour gérer la mémoire vidéo GPU, en notant que cette opération a été effectuée automatiquement dans D3D11, mais doit maintenant être effectuée par l’application dans D3D12.
MakeResident et Evict peuvent aider les applications à gérer le budget de résidence sur de nombreux adaptateurs. MakeResident permet de pager explicitement les données, puis d’empêcher la sortie de page afin que le GPU puisse accéder aux données. L’évicte active la sortie de page.
Certaines architectures GPU ne bénéficient pas de la manipulation de résidence, en raison du manque d’espace d’adressage virtuel GPU suffisant. Utilisez D3D12_FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT et IDXGIAdapter3 ::QueryVideoMemoryInfo pour reconnaître quand l’espace VA gpu maximal par processus est trop petit ou à peu près de la même taille que le budget de résidence. Pour ces architectures, le budget de résidence est toujours limité par la quantité d’espace d’adressage virtuel GPU. L’évicte ne libérera aucun budget de résidence sur ces systèmes.
Les applications doivent gérer les échecs MakeResident , même s’il semble y avoir suffisamment de budget de résidence disponible. La fragmentation de la mémoire physique et les particularités de l’architecture de l’adaptateur peuvent empêcher l’utilisation de grandes plages contiguës. Les applications doivent libérer davantage de budget de résidence avant de réessayer.
MakeResident est comptabilisé, de sorte que Evict doit être appelé la même quantité de fois que MakeResident avant qu’Evict prenne effet. Les objets qui prennent en charge la résidence sont rendus résidents lors de la création, de sorte qu’un seul appel d’éviction supprime réellement l’objet.
Les applications doivent utiliser des clôtures pour s’assurer que le GPU n’utilise pas d’objets non résidents. MakeResident doit retourner avant que le GPU exécute une liste de commandes qui référence l’objet . Evict doit être appelé une fois que le GPU a terminé l’exécution d’une liste de commandes qui fait référence à l’objet .
Les objets supprimés consomment toujours la même adresse virtuelle GPU et la même quantité d’espace d’adressage virtuel GPU. Par conséquent, les descripteurs de ressources et autres références d’adresses virtuelles GPU ne sont pas invalidés après l’expulsion.
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | d3d12.h |
Bibliothèque | D3D12.lib |
DLL | D3D12.dll |