Partager via


Partage du magasin de stockage avec le KMD

À partir de la version 22H2 de Windows 11 (WDDM 3.1), WDDM a été étendu pour permettre l’accès à un stockage de secours d’une allocation graphique depuis le pilote en mode noyau (KMD). Un stockage de secours fait référence à une mémoire tampon allouée qui contient le contenu d’une allocation graphique lorsqu’elle n’est pas résidente dans la mémoire vidéo.

Cette fonctionnalité permet au pilote en mode utilisateur (UMD) et au KMD d’accéder à la même mémoire d’allocation. Cette fonctionnalité peut être utilisée lorsque l'UMD s'exécute sur l'hôte ou dans une machine virtuelle via paravirtualisation GPU (GPU-PV).

Cette fonctionnalité a été rétroportée à la version 20H1 de Windows 10. Le DDI est disponible pour les pilotes WDDM 3.1 ou versions ultérieures.

Allocations de mémoire graphique WDDM et magasins de stockage

Chaque allocation graphique dans le modèle WDDM possède un stockage de secours. Une allocation graphique est créée lorsque l’UMD appelle la fonction Dxgkrnl D3DKMTCreateAllocation. L’UMD transmet des données privées pour cette allocation, que Dxgkrnl transmet au KMD via un appel à DxgkddiCreateAllocation. Le KMD retourne les indicateurs d'allocation souhaités à Dxgkrnl.

Vérification de la disponibilité de la fonctionnalité

Pour vérifier si la fonctionnalité de partage du magasin de stockage est disponible, le KMD doit d'abord appeler l'un des rappels suivants avec FeatureId défini sur DXGK_FEATURE_SHARE_BACKING_STORE_WITH_KMD :

La fonctionnalité ne peut être utilisée que si le rappel réussit et l'option Enable est définie sur TRUE.

Flux de fonctionnalité

Une fois que le KMD détermine avec succès que la fonctionnalité est activée, l’UMD appelle D3DKMTCreateAllocation pour créer une allocation partagée visible par le CPU et informe le KMD via des données privées que l’allocation doit être partagée avec le KMD. Au cours de cet appel, les événements suivants se produisent :

  • Le KMD définit l’indicateur DXGK_ALLOCATIONINFOFLAGS2 ShareBackingStoreWithKmd lorsque l’OS appelle le callback DxgkddiCreateAllocation du KMD. Si la fonctionnalité n’est pas activée, le KMD ne doit pas définir l’indicateur ShareBackingStoreWithKmd.

  • Dxgkrnl appelle le DDI DXGKDDI_SETALLOCATIONBACKINGSTORE pour donner au KMD une adresse en mode noyau du magasin de stockage d'allocation.

  • L'UMD appelle D3DKMTLock2 pour obtenir l'adresse en mode utilisateur de l'allocation.

Propriétés de l'allocation

L'allocation créée de cette façon doit avoir les propriétés suivantes :

  • L'allocation n'est autorisée que dans le segment de mémoire système.
  • L'allocation doit être créée en tant que partage.
  • L’allocation ne peut pas utiliser la mémoire système existante comme stockage de secours.
  • L'UMD peut effectuer n'importe quelle opération, comme pour une allocation normale.
    • L'UMD peut appeler D3DKMTLock2 pour obtenir un pointeur vers l'allocation.
    • L'UMD peut appeler D3DKMTMakeResident pour rendre l'allocation accessible par le GPU.