Traiter les budgets de résidence
Dans windows Display Driver Model (WDDM) v2, les processus se voient attribuer des budgets pour la quantité de mémoire qu’ils peuvent conserver résident. Ce budget peut changer au fil du temps, mais ne sera généralement imposé que lorsque le système est sous pression de la mémoire. Avant Microsoft Direct3D 12, le budget est géré par le pilote de mode utilisateur sous la forme de notifications De trim et d’échecs MakeResident avec STATUS_NO_MEMORY. La notification TrimToBudget , l’évicte et les appels MakeResident ayant échoué retournent tous le budget le plus récent sous la forme d’une valeur entier NumBytesToTrim qui indique la quantité à réduire pour s’adapter au nouveau budget.
Pour les applications Direct3D 12, le budget est entièrement géré par l’application. La taille du budget est destinée à indiquer à l’application ce qu’elle doit faire. En utilisant la taille du budget comme indicateur, l’application peut décider du nombre de ressources à conserver, de la résolution et de la qualité des ressources à conserver.
Pour gérer correctement ces budgets, le noyau doit savoir quelle mémoire doit participer au budget. Il existe un nouveau bit ApplicationTarget dans DXGK_SEGMENTFLAGS2 structure qui doit être défini sur les segments que le pilote en mode noyau souhaite inclure dans la logique de budgétisation. Par exemple, sur une unité de traitement graphique discrète (GPU) avec 1 segment de VRAM adapté à l’utilisation de l’application et 1 segment de VRAM automatiquement utilisé pour des ressources à usage spécial, le pilote marquera probablement uniquement le segment VRAM principal comme ApplicationTarget. Pour les GPU intégrés, le segment d’ouverture main est généralement celui marqué. Il n’existe aucune limite au nombre de segments pouvant être marqués comme ApplicationTarget. Le noyau les agrège et présente l’application avec une taille unifiée.