Vue d’ensemble du pilote d’affichage indirect
Le modèle de pilote d’affichage indirect (IDD) fournit un modèle de pilote en mode utilisateur simple pour prendre en charge les moniteurs qui ne sont pas connectés aux sorties d’affichage GPU traditionnelles. Quelques scénarios typiques où un IDD est nécessaire incluent :
- Diffuser la sortie d’affichage sur un réseau vers un client distant (affichage distant).
- Créer des moniteurs virtuels pour des applications telles que des environnements de bureau virtuel (affichages virtuels).
- Connecter un dongle à un PC via USB avec un moniteur classique (VGA, DVI, HDMI, DP, etc.) connecté à celui-ci.
Implémentation de IDD
Un IDD est le pilote UMDF fourni par un tiers pour l’appareil. Vous pouvez développer un IDD en utilisant les fonctionnalités exposées par l’IddCx (Indirect Display Driver Class eXtension) pour interagir avec les sous-systèmes graphiques de Windows de la manière suivante :
- Créer l’adaptateur graphique représentant le périphérique d’affichage indirect.
- Signaler la connexion et la déconnexion des moniteurs du système.
- Fournir des descriptions des moniteurs connectés.
- Fournir les modes d’affichage disponibles.
- Prendre en charge d’autres fonctionnalités d’affichage, telles que le curseur de souris matériel, le gamma, les communications I2C et le contenu protégé.
- Traiter les images du bureau pour les afficher sur le moniteur.
Étant donné qu’un IDD est un pilote UMDF, il est également responsable de la mise en œuvre de toutes les fonctionnalités UMDF telles que les communications avec l’appareil, la gestion de l’alimentation, le plug and play, etc.
L’IDD s’exécute dans la Session 0 sans aucun composant s’exécutant dans la session utilisateur, de sorte qu’une éventuelle instabilité du pilote n’affecte pas la stabilité du système dans son ensemble.
Le diagramme suivant fournit une vue d’ensemble architecturale.
Modèle en mode utilisateur
L’IDD est un modèle uniquement en mode utilisateur, sans prise en charge des composants en mode noyau. En tant que tel, le pilote peut utiliser toutes les API DirectX afin de traiter l’image du bureau. En effet, l’IddCx fournit l’image du bureau à encoder dans une surface DirectX.
Le pilote ne doit pas appeler des API en mode utilisateur qui ne sont pas appropriées pour une utilisation par le pilote, telles que GDI, les API de gestion de fenêtres, OpenGL ou Vulkan.
L’IDD doit être construit en tant que pilote Windows universel afin qu’il puisse être utilisé sur plusieurs plateformes Windows.
Lors de la compilation :
- L’IDD UMDF déclare la version d’IddCx contre laquelle il a été construit.
- Le système d’exploitation s’assure que la version correcte d’IddCx est chargée lorsque le pilote est chargé.
Conventions de nommage des fonctions et des rappels d’IddCx
Préfixe | Type | Notes |
---|---|---|
EVT_IDD_CX_XXX | Fonction de rappel IDD | Les IDD implémentent à la fois des rappels spécifiques à IddCx, tels que EVT_IDD_CX_ADAPTER_COMMIT_MODES, et des rappels WDF pertinents, tels que EVT_WDF_DEVICE_D0_EXIT. |
IddCxXxx | Fonction | Fonctions d’extension de classe IddCx fournies par le système que les IDD peuvent appeler ; par exemple, IddCxAdapterInitAsync. |
PFN_IDDCX_XXX | Pointeurs vers les fonctions IddCx | Les IDD n’utilisent pas ces pointeurs. Au lieu de cela, les pilotes doivent utiliser les fonctions équivalentes IddCxXxx. |
Exemple de code
Microsoft fournit un exemple de mise en œuvre d’IDD sur le référentiel GitHub des exemples de pilotes Windows. Cet exemple montre comment connecter un moniteur, comment répondre à un ensemble de modes et comment recevoir des images.