Partager via


EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN fonction de rappel (iddcx.h)

EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN est appelée par le système d’exploitation pour informer le pilote d’affichage indirect (IDD) d’une modification du 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

Handle IDDCX_MONITOR opaque créé par le pilote utilisé par le système d’exploitation pour identifier le moniteur affecté par la modification du mode.

[in] pInArgs

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

Valeur de retour

(NTSTATUS) Si l’opération réussit, la fonction de rappel doit retourner STATUS_SUCCESS, ou une autre valeur d’état pour laquelle NT_SUCCESS(status) a la valeur 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é. Voir les remarques.

Remarques

Le système d’exploitation appelle EvtIddCxMonitorAssignSwapChain afin que l’IDD puisse configurer son mécanisme de traitement d’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 possède ensuite l’objet IDARG_IN_SETSWAPCHAIN.hSwapChain et est responsable de l’appel de WdfObjectDelete pour libérer l’objet swapchain lorsqu’il cesse de traiter les images. Le traitement de la chaîne d’échange peut arrêter le traitement des images lorsque EvtIddCxMonitorUnassignSwapChain est appelée ou lorsqu’une erreur se produit dans la boucle de traitement d’images une fois la réussite retournée à EvtIddCxMonitorAssignSwapChain. Cela s’applique à la fois aux adaptateurs de console et d’ID distants et à toutes les versions IddCx.

À compter de Windows 10, version 1903, pour réduire l’impact utilisateur (par exemple, le temps passé à attendre IddCx pour vérifier le pilote), IddCx vérifie immédiatement le 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 informe le compositeur de bureau. Une nouvelle chaîne d’échange doit être créée. Par conséquent, le système d’exploitation appelle à nouveau EvtIddCxMonitorAssignSwapChain. Un pilote d’ID doit utiliser ce code de retour uniquement s’il existe une bonne chance que l’erreur qui s’est produite ne se reproduise pas. Autrement dit, un pilote d’ID ne doit pas laisser les utilisateurs avec un ordinateur de bureau inutilisable, car il a renvoyé le code d’erreur mais n’a rien fait pour garantir que la même défaillance ne se produit pas à nouveau. Par exemple, si un pilote rencontre une erreur lors de la création de l’appareil 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 crée une chaîne d’échange sur le nouvel adaptateur de rendu et évite 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’entraîne 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 entre les formats pris en charge du cadre au frame. Le pilote doit vérifier le format de chaque mémoire tampon acquise.

Exigences

Exigence Valeur
client minimum pris en charge Windows 10
serveur minimum pris en charge Windows Server 2016
plateforme cible Windows
d’en-tête iddcx.h
IRQL requires_same

Voir aussi

EvtIddCxMonitorUnassignSwapChain

IDARG_IN_SETSWAPCHAIN