Share via


Énumération des modes source et cible 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 vous familiariser avec le contenu des rubriques suivantes :

De temps à autre, le gestionnaire VidPN demande au pilote d’affichage miniport d’énumérer les modes disponibles sur les sources et cibles de présentation vidéo d’une carte d’affichage. En règle générale, la demande a le modèle suivant :

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

  2. Le gestionnaire VidPN appelle DxgkDdiIsSupportedVidPn pour déterminer si le VidPN peut être étendu pour former un VidPN fonctionnel pris en charge sur la carte d’affichage. Autrement dit, il demande si les 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 les cibles qui n’ont pas encore de modes épinglés.

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

DxgkDdiEnumVidPnCofuncModality doit effectuer les opérations suivantes :

  • Inspectez le VidPN contraignant.

  • Pour chaque source et cible qui n’a pas de mode épinglé, ajustez l’ensemble de modes afin qu’il s’agit du plus grand ensemble de modes possible qui soit cofonctionnel avec les contraintes.

  • Pour chaque chemin qui n’a pas de transformation de mise à l’échelle épinglée, ajustez les indicateurs de prise en charge de la mise à l’échelle afin qu’ils soient cofonctionnels avec les contraintes.

  • Pour chaque chemin qui n’a pas de transformation de rotation épinglée, ajustez les indicateurs de prise en charge de la rotation afin qu’ils soient cofonctionnels avec les contraintes.

  • Pour chaque source qui a un mode épinglé, indiquez les méthodes multi-échantillonnage disponibles pour cette source.

Les paragraphes suivants donnent des détails sur la façon d’effectuer chacune des tâches de la liste à puces 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 (ensemble d’associations entre les sources et les cibles)

  • Modes épinglés

  • Mise à l’échelle, prise en charge de la mise à l’échelle, rotation et prise en charge de la rotation de chaque chemin

  • Base de couleur cible de chaque chemin

  • Plages dynamiques de coefficient de couleur cible de chaque chemin

  • Type de contenu (graphiques ou vidéo) de chaque chemin d’accès

  • Rampe gamma de chaque chemin

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

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

  • Appelez les fonctions pfnAcquireFirstPathInfo et pfnAcquireNextPathInfo pour obtenir des informations sur chaque chemin dans la topologie de VidPN contraignante. Les informations sur un chemin d’accès particulier (ID source, ID cible, transformation de mise à l’échelle, transformation de rotation, base de couleur cible, etc.) sont contenues dans une structure de 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 le mode défini de la source. Si le mode défini de la source a un mode épinglé, il n’est probablement pas nécessaire d’examiner les modes restants dans l’ensemble. Si le mode défini n’a pas de mode épinglé, examinez les modes restants dans l’ensemble en appelant pfnAcquireFirstModeInfo et pfnAcquireNextModeInfo.

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

Réglage des jeux de modes

Lorsque vous examinez les jeux de modes associés aux sources et aux cibles dans la topologie de VidPN contraignante, notez quels jeux de modes ont des modes épinglés. Si un jeu de modes n’a pas de mode épinglé, déterminez s’il doit être ajusté. Un jeu de modes doit être ajusté s’il contient des modes qui ne sont pas cofonctionnels avec les contraintes ou s’il n’a pas de 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 tenir compte de 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 devez uniquement répertorier ce mode dans le mode de la cible défini si le moniteur connecté prend également en charge le mode. Pour déterminer les modes pris en charge par le moniteur connecté, effectuez les étapes suivantes :

Ajustement des indicateurs de prise en charge de la mise à l’échelle

Pour chaque chemin dans la topologie de VidPN contraignante, déterminez si le chemin a une transformation de mise à l’échelle épinglée. Pour effectuer cette détermination, inspectez vpnPath. ContentTransformation.Scaling, où vpnPath est la structure D3DKMDT_VIDPN_PRESENT_PATH qui représente le chemin d’accès. Si vpnPath. ContentTransformation.Scaling est défini sur D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_CENTERED ou D3DKMDT_VPPS_STRETCHED, puis la transformation de mise à l’échelle pour le chemin d’accès est épinglée. Sinon, la transformation de mise à l’échelle n’est pas épinglée.

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

Ajustement des indicateurs de prise en charge de la rotation

L’ajustement des indicateurs de prise en charge de rotation d’un chemin d’accès est similaire à l’ajustement des indicateurs de prise en charge d’un chemin d’accès à la mise à l’échelle. Supposons que vpnPath est une structure D3DKMDT_VIDPN_PRESENT_PATH. Si vpnPath. ContentTransformation.Rotation est défini sur D3DKMDT_VPPR_IDENTITY, D3DKMDT_VPPR_ROTATE90, D3DKMDT_VPPR_ROTATE180 ou D3DKMDT_VPPR_ROTATE270, puis la transformation de rotation du chemin est épinglée. Sinon, la transformation de rotation n’est pas épinglée. Les indicateurs de prise en charge de la rotation se trouvent dans vpnPath. ContentTransformation.RotationSupport.

Méthodes de multi-échantillonnage de création de rapports

Si l’adaptateur d’affichage a un ou plusieurs codecs de sortie vidéo capables d’anticrénelage par multi-échantillonnage, vous devez signaler les méthodes de multiéchantillonnage disponibles (en fonction des contraintes) pour chaque source qui a un mode épinglé. Pour signaler les méthodes multi-échantillonnage disponibles, effectuez les étapes suivantes :

La structure D3DDDI_MULTISAMPLINGMETHOD a deux membres, que vous devez définir, qui caractérisent une méthode multi-échantillonnage. Le membre NumSamples indique le nombre de sous-exemples qui sont échantillonnées. 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 jeux de modes qui sont cofonctionnels avec le VidPN passé dans son paramètre hConstrainingVidPn . Dans certains cas, DxgkDdiEnumVidPnCofuncModality doit augmenter son comportement en fonction des informations supplémentaires (un pivot d’énumération) transmises dans les paramètres EnumPivotType et EnumPivot .

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

  • Ensemble de modes d’une source de présentation vidéo particulière

  • Ensemble de modes d’une cible de présentation vidéo particulière

  • Transformation de mise à l’échelle d’un chemin d’accès présent VidPN particulier

  • Transformation de rotation d’un chemin d’accès présent VidPN particulier

Si le pivot d’énumération est un ensemble de modes, DxgkDdkEnumVidPnCofuncModality doit laisser ce mode défini inchangé. Si le pivot d’énumération est la transformation de mise à l’échelle (rotation) d’un chemin d’accès, DxgkDdiEnumVidPnCofuncModality ne doit pas modifier les indicateurs de prise en charge de la mise à l’échelle (rotation) pour ce chemin.