Partager via


Énumération des modes sources et cibles VidPN cofonctionnels

Cette rubrique décrit comment le gestionnaire de réseau de présentation vidéo (VidPN) et le pilote miniport d'affichage collaborent pour énumérer les modes disponibles sur les sources et cibles de présentation vidéo. Avant de lire ce document, vous devez être familier avec les sujets suivants :

De temps en temps, le gestionnaire VidPN demande au pilote miniport d'affichage d'énumérer les modes disponibles sur les sources et cibles de présentation vidéo d'un adaptateur d'affichage. En général, la demande suit le schéma suivant :

  1. Le gestionnaire VidPN crée ou obtient un VidPN qui a des modes épinglés sur certaines, mais pas toutes, de ses sources et cibles.

  2. Le gestionnaire VidPN appelle DxgkDdiIsSupportedVidPn pour déterminer si le VidPN peut être étendu pour former un VidPN fonctionnel pris en charge sur l'adaptateur d'affichage. C'est-à-dire qu'il demande si des modes peuvent être épinglés sur les sources et cibles restantes sans modifier les modes épinglés existants.

  3. Le gestionnaire VidPN appelle DxgkDdiEnumVidPnCofuncModality pour obtenir les modes disponibles sur les sources et cibles qui n'ont pas encore de modes épinglés.

L'un des arguments passés à DxgkDdiEnumVidPnCofuncModality est un handle vers un objet VidPN appelé le VidPN contraignant.

DxgkDdiEnumVidPnCofuncModality doit faire ce qui suit :

  • Inspecter le VidPN contraignant.

  • Pour chaque source et cible qui n'a pas de mode épinglé, ajuster l'ensemble de modes afin qu'il soit le plus grand ensemble de modes possible cofonctionnel avec les contraintes.

  • Pour chaque chemin qui n'a pas de transformation de mise à l'échelle épinglée, ajuster les indicateurs de support de mise à l'échelle afin qu'ils soient cofonctionnels avec les contraintes.

  • Pour chaque chemin qui n'a pas de transformation de rotation épinglée, ajuster les indicateurs de support de rotation afin qu'ils soient cofonctionnels avec les contraintes.

  • Pour chaque source qui a un mode épinglé, rapporter les méthodes de multisampling disponibles pour cette source.

Les paragraphes suivants donnent des détails sur la façon d'exécuter chacune des tâches de la liste précédente.

Inspection du VidPN contraignant

Les propriétés suivantes du VidPN contraignant sont les contraintes qui doivent être respectées par DxgkDdiEnumVidPnCofuncModality.

  • Topologie (l'ensemble des associations entre les sources et les cibles)

  • Modes épinglés

  • Mise à l'échelle, support de mise à l'échelle, rotation, et support de rotation de chaque chemin

  • Base de couleur cible de chaque chemin

  • Plages dynamiques des coefficients de couleur cible de chaque chemin

  • Type de contenu (graphique ou vidéo) de chaque chemin

  • Courbe gamma de chaque chemin

Pour extraire les contraintes du VidPN contraignant, suivez les étapes suivantes :

  • Commencez par appeler la fonction pfnGetTopology pour obtenir un pointeur vers une interface de topologie VidPN qui représente la topologie du VidPN contraignant.

  • Appelez les fonctions pfnAcquireFirstPathInfo et pfnAcquireNextPathInfo pour obtenir des informations sur chaque chemin dans la topologie du VidPN contraignant. Les informations sur un chemin particulier (ID source, ID cible, transformation de mise à l'échelle, transformation de rotation, base de couleur cible, etc.) sont contenues dans une structure D3DKMDT_VIDPN_PRESENT_PATH.

  • Pour chaque chemin, passez l'ID source du chemin à la fonction pfnAcquireSourceModeSet pour obtenir la source du chemin.

  • Appelez la fonction pfnAcquirePinnedModeInfo pour déterminer quel mode (le cas échéant) est épinglé dans l'ensemble de modes de la source. Si l'ensemble de modes de la source a un mode épinglé, il n'est probablement pas nécessaire d'examiner les modes restants de l'ensemble. Si l'ensemble de modes n'a pas de mode épinglé, examinez les modes restants de l'ensemble en appelant pfnAcquireFirstModeInfo et pfnAcquireNextModeInfo.

    Utilisez une procédure similaire pour examiner les ensembles de modes cibles et pour déterminer quels ensembles de modes cibles ont des modes épinglés.

Ajustement des ensembles de modes

Lorsque vous inspectez les ensembles de modes associés aux sources et cibles dans la topologie du VidPN contraignant, notez quels ensembles de modes ont des modes épinglés. Si un ensemble de modes n'a pas de mode épinglé, déterminez s'il doit être ajusté. Un ensemble de modes doit être ajusté s'il contient des modes qui ne sont pas cofonctionnels avec les contraintes ou s'il manque des modes disponibles qui sont cofonctionnels avec les contraintes.

Pour les cibles de présentation vidéo qui ont des moniteurs connectés, vous devez également prendre en compte l'ensemble des modes pris en charge par le moniteur. Même si une cible de présentation vidéo sur l'adaptateur d'affichage prend en charge un mode particulier (compte tenu des contraintes), vous ne devez répertorier ce mode dans l'ensemble de modes de la cible que si le moniteur connecté prend également en charge ce mode. Pour déterminer les modes pris en charge par le moniteur connecté, suivez les étapes suivantes :

Ajustement des indicateurs de support de mise à l'échelle

Pour chaque chemin dans la topologie du VidPN contraignant, déterminez si le chemin a une transformation de mise à l'échelle épinglée. Pour faire cette détermination, inspectez vpnPath.ContentTransformation.Scaling, où vpnPath est la structure D3DKMDT_VIDPN_PRESENT_PATH qui représente le chemin. Si vpnPath.ContentTransformation.Scaling est réglé sur D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_CENTERED, ou D3DKMDT_VPPS_STRETCHED, alors la transformation de mise à l'échelle pour le chemin est épinglée. Sinon, la transformation de mise à l'échelle n'est pas épinglée.

Si le chemin n'a pas de transformation de mise à l'échelle épinglée, déterminez si les indicateurs de support de mise à l'échelle du chemin doivent être ajustés. Les indicateurs de support doivent être ajustés s'ils montrent un support pour un type de mise à l'échelle qui n'est pas cofonctionnel avec les contraintes ou s'ils ne montrent pas de support pour un type de mise à l'échelle qui est cofonctionnel avec les contraintes. Pour modifier les indicateurs de support de mise à l'échelle, définissez les membres de la structure D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT qui contient les indicateurs.

Ajustement des indicateurs de support de rotation

L'ajustement des indicateurs de support de rotation d'un chemin est similaire à l'ajustement des indicateurs de support de mise à l'échelle d'un chemin. Supposons que vpnPath est une structure D3DKMDT_VIDPN_PRESENT_PATH. Si vpnPath.ContentTransformation.Rotation est réglé sur D3DKMDT_VPPR_IDENTITY, D3DKMDT_VPPR_ROTATE90, D3DKMDT_VPPR_ROTATE180, ou D3DKMDT_VPPR_ROTATE270, alors la transformation de rotation pour le chemin est épinglée. Sinon, la transformation de rotation n'est pas épinglée. Les indicateurs de support de rotation se trouvent dans vpnPath.ContentTransformation.RotationSupport.

Rapport des méthodes de multisampling

Si l'adaptateur d'affichage dispose d'un ou plusieurs codecs de sortie vidéo capables d'anticrénelage par multisampling, vous devez alors signaler les méthodes de multisampling disponibles (compte tenu des contraintes) pour chaque source qui a un mode épinglé. Pour signaler les méthodes de multisampling disponibles, suivez les étapes suivantes :

La structure D3DDDI_MULTISAMPLINGMETHOD a deux membres, que vous devez définir, qui caractérisent une méthode de multisampling. Le membre NumSamples indique le nombre de sous-pixels échantillonnés. Le membre NumQualityLevels indique le nombre de niveaux de qualité auxquels la méthode peut fonctionner. Vous pouvez spécifier n'importe quel nombre de niveaux de qualité tant que chaque augmentation de niveau améliore sensiblement la qualité de l'image présentée.

Pivots d'énumération

Comme décrit précédemment, DxgkDdiEnumVidPnCofuncModality doit créer des ensembles de modes qui sont cofonctionnels avec le VidPN passé dans son paramètre hConstrainingVidPn. Dans certains cas, DxgkDdiEnumVidPnCofuncModality doit ajuster son comportement selon des informations supplémentaires (un pivot d'énumération) passées dans les paramètres EnumPivotType et EnumPivot.

Le pivot d'énumération peut être l'un des suivants :

  • L'ensemble de modes d'une source de présentation vidéo particulière

  • L'ensemble de modes d'une cible de présentation vidéo particulière

  • La transformation de mise à l'échelle d'un chemin de présentation VidPN particulier

  • La transformation de rotation d'un chemin de présentation VidPN particulier

Si le pivot d'énumération est un ensemble de modes, alors DxgkDdkEnumVidPnCofuncModality doit laisser cet ensemble de modes inchangé. Si le pivot d'énumération est la transformation de mise à l'échelle (rotation) d'un chemin, alors DxgkDdiEnumVidPnCofuncModality ne doit pas modifier les indicateurs de support de mise à l'échelle (rotation) pour ce chemin.