EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN fonction de rappel (iddcx.h)

EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN est appelé par le système d’exploitation pour informer le pilote d’affichage indirect (IDD) d’un changement de mode pour les moniteurs sur l’adaptateur.

Syntaxe

EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN EvtIddCxMonitorAssignSwapchain;

NTSTATUS EvtIddCxMonitorAssignSwapchain(
  [in] IDDCX_MONITOR MonitorObject,
  [in] const IDARG_IN_SETSWAPCHAIN *pInArgs
)
{...}

Paramètres

[in] MonitorObject

Un handle de IDDCX_MONITOR opaque créé par le pilote utilisé par le système d’exploitation pour identifier le moniteur qui a été affecté par le changement de mode.

[in] pInArgs

Pointeur vers une structure IDARG_IN_SETSWAPCHAIN contenant des informations que le pilote doit utiliser pour définir la chaîne d’échange indirecte.

Valeur retournée

(NTSTATUS) Si l’opération réussit, la fonction de rappel doit retourner STATUS_SUCCESS ou une autre valeur status pour laquelle NT_SUCCESS(status) est égal à TRUE. Si une erreur se produit, l’IDD doit retourner STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN s’il y a de bonnes chances que l’erreur ne se reproduise pas. Sinon, il doit retourner un code d’erreur NTSTATUS approprié. Consultez la section Notes.

Remarques

Le système d’exploitation appelle EvtIddCxMonitorAssignSwapChain afin que l’IDD puisse configurer son mécanisme de traitement des images. Par exemple, un IDD peut créer un thread pour initialiser des appareils D3D, puis effectuer une boucle sur les trames de traitement (voir l’exemple de pilote d’ID).

Si EvtIddCxMonitorAssignSwapChain retourne la réussite, l’IDD est alors propriétaire de l’objet IDARG_IN_SETSWAPCHAIN.hSwapChain et est responsable d’appeler WdfObjectDelete pour libérer l’objet swapchain lorsqu’il arrête le traitement des trames. Le traitement de la chaîne d’échange peut arrêter le traitement des trames quand EvtIddCxMonitorUnassignSwapChain est appelé ou lorsqu’une erreur se produit dans la boucle de traitement des images après le retour de la réussite à EvtIddCxMonitorAssignSwapChain. Cela s’applique à la console et aux adaptateurs d’ID distants et à toutes les versions d’IddCx.

À compter de Windows 10 version 1903, pour réduire l’impact sur les utilisateurs (par exemple, le temps passé à attendre qu’IddCx vérifie le pilote), IddCx vérifie immédiatement le bogue du pilote si EvtIddCxMonitorAssignSwapChain signale un code d’erreur autre que STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN.

Si le pilote retourne STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN, IddCx en informe le compositeur de bureau. Une nouvelle chaîne d’échange doit être créée, de sorte que le système d’exploitation appelle à nouveau EvtIddCxMonitorAssignSwapChain. Un pilote d’ID doit utiliser ce code de retour uniquement s’il y a de bonnes chances que l’erreur qui vient de se produire ne se reproduise pas. Autrement dit, un pilote d’ID ne doit pas laisser les utilisateurs avec un bureau inutilisable, car il a renvoyé le code d’erreur mais n’a rien fait pour garantir que le même échec ne se produira pas à nouveau. Par exemple, si un pilote rencontre une erreur lors de la création du périphérique D3D sur l’adaptateur de rendu, il peut appeler IddCxAdapterSetRenderAdapter pour passer à une autre carte (peut-être un autre GPU ou WARP), puis retourner STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN. Le système d’exploitation va créer une nouvelle chaîne d’échange sur le nouvel adaptateur de rendu et, espérons-le, évitera l’erreur. Bien que ce code d’erreur soit défini à partir de Windows 10 version 1903, un pilote d’ID peut retourner ce code d’erreur sur les versions précédentes du système d’exploitation, ce qui n’a aucun effet.

La résolution des surfaces dans la chaîne d’échange sera toujours la même résolution que le mode cible défini.

Le format des surfaces sera l’un des formats pris en charge par le pilote, mais le format de chaque mémoire tampon acquise peut changer d’un format à l’autre. Le pilote doit case activée le format de chaque mémoire tampon acquise.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 10
Serveur minimal pris en charge Windows Server 2016
Plateforme cible Windows
En-tête iddcx.h
IRQL requires_same

Voir aussi

EvtIddCxMonitorUnassignSwapChain

IDARG_IN_SETSWAPCHAIN