PFND3DDDI_MAKERESIDENTCB fonction de rappel (d3dumddi.h)

pfnMakeResidentCb est utilisé pour indiquer au système d’exploitation d’ajouter une ressource à la liste de résidence de l’appareil et d’incrémenter le nombre de références de résidence sur cette allocation.

Syntaxe

PFND3DDDI_MAKERESIDENTCB Pfnd3dddiMakeresidentcb;

HRESULT Pfnd3dddiMakeresidentcb(
  HANDLE hDevice,
  D3DDDI_MAKERESIDENT *unnamedParam2
)
{...}

Paramètres

hDevice

Handle pour le périphérique d’affichage.

unnamedParam2

pData [in, out]

Pointeur vers une structure D3DDDI_MAKERESIDENT qui décrit les pages mémoire à rendre résidentes.

Valeur retournée

pfnMakeResidentCb retourne l’une des valeurs suivantes :

Code de retour Description
S_OK Toutes les allocations ont été rendues résidentes sur le GPU à la sortie de cette fonction et sont prêtes à être accessibles immédiatement.
E_PENDING Les allocations ont été ajoutées à la liste des conditions de résidence de l’appareil, mais les opérations de pagination sont toujours en attente avant de pouvoir y accéder. Dans ce cas, le pilote en mode utilisateur doit attendre que PagingFenceValue sur l’objet de synchronisation de clôture surveillé associé à hPagingQueue soit signalé avant d’envoyer des mémoires tampons de commande qui référencent des allocations ou une erreur de page GPU.
E_OUTOFMEMORY Le gestionnaire de mémoire vidéo ne peut pas rendre toutes les allocations demandées résidentes. Dans ce cas, aucune allocation dans la liste fournie ne verra son nombre de résidences modifié. En d’autres mots, il s’agit d’une opération atomique où toutes les allocations obtiennent leur nombre de résidences augmentées, ou aucune d’entre elles. De plus, NumBytesToTrim indique au pilote combien d’octets doivent être supprimés de la liste des conditions de résidence des appareils, en appelant pfnEvictCb, avant de tenter de réaffecter les allocations ayant échoué.
Le budget de mémoire associé à une application peut changer de façon asynchrone avec l’application en cours d’exécution. Par conséquent, la réduction du nombre d’octets demandé ne garantira pas que la prochaine tentative d’affectations résidente réussira, car le budget mémoire de l’application a peut-être diminué. Pour cette raison, un pilote doit s’assurer qu’il tente une demande de résidence dans une boucle, en coupant entre chaque itération, jusqu’à ce que la requête aboutisse ou que le pilote ait supprimé tout ce qu’il peut pour avancer sur une seule opération et utiliser la ressource requise lors de cette dernière tentative. Si cette dernière tentative échoue, l’appareil sous-jacent est mis en erreur et le pilote en mode utilisateur doit abandonner la demande et revenir à l’application. Aucune autre soumission à l’un des contextes appartenant à un appareil en erreur ne sera autorisée par le noyau.
Pour le pilote en mode utilisateur DirectX 12.0, pfnMakeResidentCb se comporte légèrement différemment, car il n’est plus responsable de la suppression ou de la pagination dans les allocations. Cela permet de s’assurer que l’état de toutes les allocations après le retour de l’appel reste le même qu’avant l’appel. Cela signifie que si E_OUTOFMEMORY est retourné par la fonction :
- Toutes les allocations restent dans leur état d’origine.
- Les allocations n’ont pas été rendues résidentes.
- PagingFenceValue doit être ignoré.
Si le pilote doit effectuer des appels pfnMakeResidentCb dans plusieurs lots pour prendre en charge la traduction de ressource en allocation, le pilote doit annuler tous les appels antérieurs à pfnMakeResidentCb avec des appels équivalents à pfnEvictCb et propager le code d’erreur au runtime.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10
Serveur minimal pris en charge Windows Server 2016
Plateforme cible Desktop (Expérience utilisateur)
En-tête d3dumddi.h (inclure D3dumddi.h)

Voir aussi

D3DDDI_MAKERESIDENT

pfnEvictCb