DXGKDDI_SETVIDPNSOURCEADDRESS fonction de rappel (d3dkmddi.h)

La fonction DxgkDdiSetVidPnSourceAddress définit l’adresse de la surface primaire associée à une source vidéo présente particulière.

Syntaxe

DXGKDDI_SETVIDPNSOURCEADDRESS DxgkddiSetvidpnsourceaddress;

NTSTATUS DxgkddiSetvidpnsourceaddress(
  IN_CONST_HANDLE hAdapter,
  IN_CONST_PDXGKARG_SETVIDPNSOURCEADDRESS pSetVidPnSourceAddress
)
{...}

Paramètres

hAdapter

Handle d’un bloc de contexte associé à une carte d’affichage. Le pilote miniport d’affichage a précédemment fourni cette poignée au sous-système du noyau graphique DirectX dans le paramètre de sortie MiniportDeviceContext de la fonction DxgkDdiAddDevice .

pSetVidPnSourceAddress

Pointeur vers une structure de DXGKARG_SETVIDPNSOURCEADDRESS qui contient des arguments de fonction.

Valeur retournée

DxgkDdiSetVidPnSourceAddress retourne STATUS_SUCCESS si elle réussit ; sinon, il retourne l’un des codes d’erreur définis dans Ntstatus.h.

À compter de Windows 8, le pilote miniport d’affichage peut échouer un appel à DxgkDdiSetVidPnSourceAddress, renvoyant STATUS_INVALID_PARAMETER, lorsque le membre SharedPrimaryTransition est défini dans pSetVidPnSourceAddress-Flags>. Toutefois, un tel échec n’est attendu que s’il y a une erreur dans l’implémentation du pilote en mode utilisateur de la fonction CheckDirectFlipSupport ou dans le DWM. Si une telle défaillance se produit, le système d’exploitation ne revient pas en toute transparence en mode composition et la présentation est incorrecte.

Remarques

DxgkDdiSetVidPnSourceAddress est appelé uniquement avec des primaires qui correspondent à la topologie VidPN (Video Present Network) actuellement validée. Par exemple, le format D3DDDIFMT_A8R8G8B8 est déterminé à s’adapter à un VidPN qui est engagé dans un format D3DDDIFMT_X8R8G8B8, et inversement.

Le sous-système du noyau graphique DirectX appelle DxgkDdiSetVidPnSourceAddress pour basculer le mode d’affichage et effectuer des opérations d’E/S mappées en mémoire (MMIO). Les indicateurs de champ de bits dans le membre Flags de la structure DXGKARG_SETVIDPNSOURCEADDRESS vers laquelle pointe le paramètre pSetVidPnSourceAddress indiquent le type d’opération d’affichage à effectuer. Pour basculer le mode d’affichage, le sous-système du noyau graphique définit le membre ContextCount de DXGKARG_SETVIDPNSOURCEADDRESS sur zéro. Dans ce cas, le contenu du tableau que le membre context de DXGKARG_SETVIDPNSOURCEADDRESS spécifie n’est pas défini. Pour effectuer une opération de retournement, le sous-système du noyau graphique définit ContextCount sur le nombre de contextes et Context sur le tableau de handles de contexte de pilote pour les contextes qui contribuent à l’opération de basculement.

Si le pilote miniport d’affichage a précédemment indiqué, lors d’un appel à sa fonction DxgkDdiQueryAdapterInfo , qu’il prend en charge un flip basé sur MMIO (en définissant l’indicateur de champ de bits FlipOnVSyncMmIo dans le membre FlipCaps de la structure DXGK_DRIVERCAPS sur TRUE), la fonction DxgkDdiSetVidPnSourceAddress du pilote est ensuite appelée au niveau de la demande d’interruption d’appareil (DIRQL) à des fins de basculement. La fonction DxgkDdiSetVidPnSourceAddress du pilote doit programmer la DAC et commencer à analyser, à la synchronisation verticale suivante, la surface primaire dont l’adresse est spécifiée dans le membre PrimaryAddress de DXGKARG_SETVIDPNSOURCEADDRESS. Le pilote doit également passer le type d’interruption DXGK_INTERRUPT_CRTC_VSYNC dans le paramètre InterruptType dans un appel à la fonction DxgkCbNotifyInterrupt pour signaler l’adresse d’analyse effective. Le pilote doit suivre l’appel à DxgkCbNotifyInterrupt avec un appel à la fonction DxgkCbNotifyDpc .

DxgkDdiSetVidPnSourceAddress doit être en mémoire non modifiable. DxgkDdiSetVidPnSourceAddress ne doit pas appeler de code qui se trouve dans la mémoire paginable et ne doit pas manipuler les données qui se trouve dans la mémoire paginable.

Clone-View situations

Dans les situations d’affichage de clone, le pilote de miniport d’affichage doit gérer les opérations de retournement de manière appropriée, comme décrit dans cette section.

Lorsque le DWM est en cours d’exécution, le sous-système du noyau graphique DirectX se synchronise automatiquement lorsqu’une synchronisation verticale se produit. Toutefois, le sous-système du noyau graphique DirectX ne peut se synchroniser que lorsqu’une synchronisation verticale d’un seul signal de sortie de carte graphique se produit. Le sous-système du noyau graphique DirectX doit immédiatement retourner tous les autres signaux de sortie de la carte graphique pour éviter la déchirure.

Le planificateur GPU détecte une synchronisation verticale unique et détermine que la surface inversée est disponible dès que le premier basculement du moniteur se produit. Par conséquent, le pilote miniport d’affichage peut être rendu sur une surface que le deuxième moniteur affiche toujours.

Les applications vidéo (par exemple, Lecteur multimédia Windows) ignorent les situations de clone-view et s’attendent à avoir un intervalle de synchronisation verticale prévisible. Si le planificateur GPU a détecté les synchronisations verticales des deux moniteurs, l’intervalle de synchronisation vertical (et donc le basculement) serait imprévisible et dériverait au fil du temps, ce qui entraînerait le fonctionnement des applications DWM et vidéo.

Pour les situations d’affichage de clone, le pilote miniport d’affichage doit effectuer un basculement de synchronisation verticale sur le moniteur principal et un basculement immédiat basé sur MMIO sur le moniteur secondaire.

La fonction DxgkDdiSetVidPnSourceAddress du pilote miniport d’affichage doit enregistrer l’adresse vers laquelle est retourné dans l’objet de la carte graphique.

Pour diriger le pilote miniport d’affichage de ne pas attendre le prochain retracement vertical du moniteur secondaire, le sous-système du noyau graphique DirectX définit l’indicateur de champ de bits FlipImmediate sur TRUE dans un appel à la fonction DxgkDdiSetVidPnSourceAddress du pilote.

Consultez les exigences relatives à l’appel de cette fonction avec des superpositions multiplan dans présentation VidPN multiplane overlay.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista
En-tête d3dkmddi.h
IRQL PASSIVE_LEVEL. Appelé au niveau DIRQL si le pilote prend en charge un basculement basé sur MMIO.

Voir aussi

DXGK_DRIVERCAPS

DXGKARG_SETVIDPNSOURCEADDRESS

DxgkCbNotifyDpc

DxgkCbNotifyInterrupt

DxgkDdiAddDevice

DxgkDdiSetVidPnSourceVisibility

DxgkDdiQueryAdapterInfo