Partager via


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

Voir aussi

ID3D12Device