Partager via


DXGKDDI_SYSTEM_DISPLAY_ENABLE fonction de rappel (dispmprt.h)

Le système d’exploitation appelle le pilote d’affichage en mode noyau (KMD) DxgkddiSystemDisplayEnable fonction pour demander que KMD réinitialise l’appareil d’affichage actuel à un état spécifié.

Syntaxe

DXGKDDI_SYSTEM_DISPLAY_ENABLE DxgkddiSystemDisplayEnable;

NTSTATUS DxgkddiSystemDisplayEnable(
  [in]  PVOID MiniportDeviceContext,
  [in]  D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
  [in]  PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS Flags,
  [out] UINT *Width,
  [out] UINT *Height,
  [out] D3DDDIFORMAT *ColorFormat
)
{...}

Paramètres

[in] MiniportDeviceContext

Gérer un bloc de contexte associé à un adaptateur d’affichage. La fonction DxgkDdiAddDevice a précédemment fourni ce handle à Dxgkrnl.

[in] TargetId

Valeur D3DDDI_VIDEO_PRESENT_TARGET_ID qui spécifie l’identificateur de la vidéo cible présente sur l’adaptateur d’affichage auquel l’appareil d’affichage est connecté. Cet identificateur peut être pour la cible qui a été laissée dans l’état actuel du réseau présent vidéo (VidPn) lors de l’appel précédent à DxgkDdiCommitVidPn.

[in] Flags

Pointeur vers une valeur DXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS qui contient une OR au niveau du bit des indicateurs. Ce membre est réservé par le système d’exploitation.

[out] Width

Largeur du mode d’affichage de l’appareil spécifié, en pixels.

[out] Height

Hauteur du mode d’affichage de l’appareil spécifié, en pixels.

[out] ColorFormat

Pointeur vers une valeur D3DDDIFORMAT qui spécifie le format de couleur de l’appareil d’affichage.

Valeur de retour

DxgkDdiSystemDisplayEnable retourne STATUS_SUCCESS si elle réussit. Si la cible spécifiée par le paramètre TargetId n’est pas connectée à un appareil d’affichage, la fonction retourne STATUS_NOT_SUPPORTED. Sinon, elle retourne l’un des codes d’erreur définis dans Ntstatus.h.

Remarques

Le système d’exploitation appelle DxgkddiSystemDisplayEnable pendant une opération de vérification de bogues après une erreur d’arrêt du système.

Étapes requises par KMD

Le kmD doit suivre ces étapes lorsque sa fonction DxgkDdiSystemDisplayEnable est appelée :

  1. Annulez toutes les opérations GPU ou réinitialisez le GPU à l’état inactif.
  2. Le système d’exploitation indique la cible actuelle de la vidéo via le paramètre TargetId . Le pilote doit conserver l’affichage associé à cette cible sous tension et visible. Si le pilote ne peut pas activer l’affichage, il doit échouer à cet appel à cette fonction. Dans ce cas, le système d’exploitation peut appeler DxgkDdiResetDevice et provoquer une vérification de bogue système.
  3. Vérifiez la connectivité de l’affichage associé à cette cible. Si la cible n’a pas d’affichage connecté, le pilote doit terminer l’appel à cette fonction et retourner le code d’erreur STATUS_NOT_SUPPORTED.
  4. Désactivez le signal pour tous les autres affichages connectés à l’adaptateur d’affichage. Si ce n’est pas possible, le pilote doit tenter de placer une image vide sur tous les autres affichages. Si ce n’est pas possible, le pilote doit laisser la dernière image sur l’écran inchangée.
  5. Conservez le mode d’affichage actuel sur la cible indiquée et fournissez ce mode au système d’exploitation dans le cadre de cet appel de fonction.
  6. Si le pilote ne peut pas conserver le mode d’affichage actuel ou si la cible ne fait pas partie de la topologie active, le pilote doit tenter de définir une mémoire tampon d’images sur une autre cible capable d’une résolution d’affichage d’au moins 640 x 480 pixels dans un format de 24 bits par pixel. Si ce n’est pas possible, le pilote peut échouer cet appel de fonction, ce qui entraîne une vérification de bogue système et l’affichage d’un écran noir.

KMD n’a pas besoin d’utiliser un mode de mémoire tampon de trame linéaire. Toutefois, KMD doit prendre en charge les opérations d’écriture dans cette mémoire tampon d’images à partir de sources qui ont le format D3DDDIFMT_A8R8G8B8 de l’énumération D3DDDIFORMAT.

Restrictions relatives à l’image source

Une fois que KMD donne le contrôle du système d’exploitation sur les fonctionnalités d’affichage, le système d’exploitation peut appeler la fonction DxgkDdiSystemDisplayWrite pour mettre à jour l’image d’écran et écrire un bloc d’images provenant de sources spécifiées à l’écran qui a été réinitialisé par la fonction DxgkDdiSystemDisplayEnable.

DxgkDdiSystemDisplayWrite fournit au pilote l’adresse de départ de l’image source, ainsi que la progression, la largeur et la hauteur. Le format de couleur de l’image source est toujours D3DDDIFMT_X8R8G8B8. Le système d’exploitation garantit que l’image source est en mémoire non paginée.

KMD doit écrire cette image source dans l’écran actuel à partir des positions spécifiées par le PositionX et paramètres positionY de la fonction DxgkDdiSystemDisplayWrite.

Il est recommandé que le pilote utilise l’UC pour écrire l’image à partir de la source dans la mémoire tampon d’images, car une vérification de bogue système peut être due à des répétées détection du délai d’attente et de récupération (TDR) instances qui entraînent l’exécution du GPU dans une condition inconnue.

Utiliser la mémoire non paginée

Les fonctions en mode noyau Windows peuvent ne pas être disponibles pendant l’appel de cette fonction.

DxgkDdiSystemDisplayEnable peut être appelée à n’importe quel runtime d’intégration. Il doit donc être en mémoire non modifiable. DxgkDdiSystemDisplayEnable ne doit appeler aucun code qui est en mémoire paginable et ne doit pas manipuler les données qui sont en mémoire paginable.

Basculement automatique de l’affichage

Un pilote de commutateur d’affichage automatique DxgkDdiSystemDisplayEnable DDI doit s’assurer que l’actualisation automatique du panneau (PSR) est désactivée à la fin de l’appel. Pour plus d’informations, consultez commutateur d’affichage automatique.

Exigences

Exigence Valeur
client minimum pris en charge Windows 8 (WDDM 1.2)
serveur minimum pris en charge Windows Server 2012
plateforme cible Bureau
d’en-tête dispmprt.h
IRQL N’importe quel niveau (voir section Remarques)

Voir aussi

D3DDDIFORMAT

DxgkCbAcquirePostDisplayOwnership

DxgkDdiAddDevice

DxgkDdiCommitVidPn

DxgkDdiResetDevice

DxgkDdiStopDeviceAndReleasePostDisplayOwnership

DxgkDdiSystemDisplayWrite