Partager via


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 vers l’appareil d’affichage.

unnamedParam2

pData [in, out]

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

Valeur de retour

pfnMakeResidentCb retourne l’une des valeurs suivantes :

code de retour Description
S_OK Toutes les allocations ont été effectuées en résident 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 elles ont toujours des opérations de pagination en attente pour qu’elles soient correctement accessibles. Dans ce cas, le pilote en mode utilisateur doit attendre que PagingFenceValue sur l’objet de synchronisation de clôture supervisé 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 peut se produire.
E_OUTOFMEMORY Le gestionnaire de mémoire vidéo ne peut pas effectuer chaque résident d’allocation demandé. Lorsque cela se produit, aucune allocation dans la liste fournie ne verra leur 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 ont augmenté, ou aucun d’entre eux. En outre, NumBytesToTrim indique au pilote combien d’octets doivent être supprimés de la liste des conditions de résidence de l’appareil, en appelant pfnEvictCb, avant de tenter de réaffecter les allocations ayant échoué.
Le budget mémoire associé à une application peut changer de manière asynchrone avec l’application en cours d’exécution. Par conséquent, le découpage du nombre d’octets demandé ne garantit pas que la prochaine tentative d’affectations résidente réussit à mesure que le budget mémoire de l’application peut avoir diminué. En raison de cela, un pilote doit s’assurer qu’il tente d’effectuer une demande de résidence dans une boucle, le découpage entre chaque itération, jusqu’à ce que la requête réussisse ou que le pilote ait réduit tout ce qu’il peut possible d’avancer sur une seule opération et d’utiliser la ressource requise sur cette tentative finale. Si cette tentative finale échoue, l’appareil sous-jacent est mis en erreur et le pilote en mode utilisateur doit abandonner la demande et revenir à l’application. Aucune soumission supplémentaire aux contextes appartenant à un appareil en erreur n’est 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 du découpage 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é effectuées en résident.
- PagingFenceValue doit être ignoré.
Si le pilote doit effectuer des appels pfnMakeResidentCb dans plusieurs lots pour prendre en charge la traduction de ressources à allocation, le pilote doit annuler les appels antérieurs à pfnMakeResidentCb avec des appels équivalents à pfnEvictCb, et propager le code d’erreur au runtime.

Exigences

Exigence Valeur
client minimum pris en charge Windows 10
serveur minimum pris en charge Windows Server 2016
plateforme cible Bureau
d’en-tête d3dumddi.h (include D3dumddi.h)

Voir aussi

D3DDDI_MAKERESIDENT

pfnEvictCb