Partager via


Utilisation des segments de mémoire pour décrire l'espace d'adressage du GPU

Le gestionnaire de mémoire vidéo (VidMm) est chargé de gérer l’espace d’adressage de l’unité de traitement graphique (GPU). Avant de pouvoir le faire, le pilote de miniport (KMD) d’affichage en mode noyau doit décrire l’espace d’adressage du GPU sur VidMm à l’aide de segments de mémoire.

KMD crée des segments de mémoire pour généraliser et virtualiser les ressources de mémoire vidéo. Il peut configurer des segments de mémoire en fonction des types de mémoire pris en charge par le matériel (par exemple, mémoire tampon frame ou ouverture de mémoire système).

Pendant l’initialisation du pilote, le KMD doit retourner la liste des types de segments qui décrivent comment VidMm peut gérer les ressources de mémoire. Le KMD spécifie le nombre de types de segments qu’il prend en charge et décrit chaque type de segment en répondant aux appels à sa fonction DxgkDdiQueryAdapterInfo. Le pilote décrit chaque segment à l’aide d’une structure DXGK_SEGMENTDESCRIPTOR . Pour plus d’informations, consultez Initialisation de l’utilisation des segments de mémoire.

Par la suite, le nombre et les types de segments restent inchangés. VidMm :

  • Garantit que chaque processus reçoit une part équitable des ressources dans n’importe quel segment particulier,

  • Gère tous les segments indépendamment.

Les segments ne se chevauchent pas. Par conséquent, VidMm peut allouer une quantité équitable de ressources de mémoire vidéo à partir d’un segment, quelle que soit la quantité de ressources qu’une application contient à partir d’un autre segment.

Le KMD affecte un identificateur de segment à chacun de ses segments de mémoire. Plus tard, lorsque VidMm demande de créer des allocations pour les ressources vidéo et de restituer ces ressources, le KMD :

  • Identifie les segments qui prennent en charge la requête.

  • Spécifie, dans l’ordre, les segments que le pilote préfère VidMm à utiliser.

Pour plus d’informations, consultez Spécification de segments lors de la création d’allocations.

Le KMD n’est pas nécessaire pour spécifier toutes les ressources de mémoire vidéo disponibles pour le GPU dans ses segments de mémoire. Toutefois, le KMD doit spécifier toutes les ressources de mémoire que VidMm gère parmi tous les processus s’exécutant sur le système. Par exemple :

  • Un microcode de nuanceur de vertex qui implémente un pipeline de fonction fixe peut résider dans l’espace d’adressage GPU, mais en dehors de la mémoire gérée par VidMm (autrement dit, pas dans un segment). Cette configuration est possible, car le microcode est toujours disponible pour tous les processus et n’est jamais la source de contention entre les processus.

  • Pour les ressources telles que les mémoires tampons de vertex, les textures, les cibles de rendu et le code de nuanceur spécifique à l’application, VidMm doit allouer des ressources de mémoire vidéo à partir de l’un des segments de mémoire du pilote. Cette exigence est due au fait que les types de ressources doivent être assez disponibles pour tous les processus.

La figure suivante montre comment le KMD peut configurer des segments de mémoire à partir de l’espace d’adressage GPU.

Diagramme illustrant la division de l’espace d’adressage GPU en segments de mémoire.

La mémoire vidéo masquée à partir de VidMm ne peut pas être mappée dans l’espace utilisateur ou mise exclusivement à la disposition d’un processus particulier. Cela interrompt les règles fondamentales de la mémoire virtuelle qui nécessitent que tous les processus s’exécutant sur le système aient accès à toutes les mémoires.