EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN função de retorno de chamada (iddcx.h)

EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN é chamado pelo sistema operacional para informar o driver de exibição indireto (IDD) de uma alteração de modo para monitores no adaptador.

Sintaxe

EVT_IDD_CX_MONITOR_ASSIGN_SWAPCHAIN EvtIddCxMonitorAssignSwapchain;

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

Parâmetros

[in] MonitorObject

Um identificador de IDDCX_MONITOR opaco criado pelo driver usado pelo sistema operacional para identificar o monitor que foi afetado pela alteração do modo.

[in] pInArgs

Ponteiro para uma estrutura de IDARG_IN_SETSWAPCHAIN que contém informações para o driver usar para definir a cadeia de troca indireta.

Retornar valor

(NTSTATUS) Se a operação for bem-sucedida, a função de retorno de chamada deverá retornar STATUS_SUCCESS ou outro valor status para o qual NT_SUCCESS(status) é igual a TRUE. Se ocorrer um erro, a IDD deverá retornar STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN se houver uma boa chance de que o erro não ocorra novamente. Caso contrário, ele deverá retornar um código de erro NTSTATUS apropriado. Consulte Observações.

Comentários

O sistema operacional chama EvtIddCxMonitorAssignSwapChain para que a IDD possa configurar seu mecanismo de processamento de quadros. Por exemplo, uma IDD pode criar um novo thread para inicializar dispositivos D3D e, em seguida, fazer loop em quadros de processamento (consulte o exemplo do driver de ID).

Se EvtIddCxMonitorAssignSwapChain retornar êxito, a IDD será proprietária do objeto IDARG_IN_SETSWAPCHAIN.hSwapChain e será responsável por chamar WdfObjectDelete para liberar o objeto swapchain quando parar de processar quadros. O processamento de swapchain pode parar o processamento de quadros quando EvtIddCxMonitorUnassignSwapChain é chamado ou quando ocorre um erro no loop de processamento de quadros após o êxito ser retornado para EvtIddCxMonitorAssignSwapChain. Isso se aplica a adaptadores de console e ID remoto e a todas as versões do IddCx.

A partir do Windows 10, versão 1903, para reduzir o impacto do usuário (por exemplo, o tempo gasto aguardando o IddCx verificar o driver), o IddCx verificará imediatamente o driver se EvtIddCxMonitorAssignSwapChain relatar um código de erro diferente de STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN.

Se o driver retornar STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN, o IddCx informará o compositor da área de trabalho. Um novo swapchain precisa ser criado, portanto, o sistema operacional chamará novamente EvtIddCxMonitorAssignSwapChain. Um driver de ID deve usar esse código de retorno somente se houver uma boa chance de que o erro que acabou de ocorrer não ocorra novamente. Ou seja, um driver de ID não deve deixar os usuários com uma área de trabalho inutilizável porque ele retornou o código de erro, mas não fez nada para garantir que a mesma falha não ocorrerá novamente. Por exemplo, se um driver encontrar um erro ao criar o dispositivo D3D no adaptador de renderização, ele poderá chamar IddCxAdapterSetRenderAdapter para alterar para outro adaptador (talvez outra GPU ou WARP) e retornar STATUS_GRAPHICS_INDIRECT_DISPLAY_ABANDON_SWAPCHAIN. O sistema operacional criará uma nova cadeia de troca no novo adaptador de renderização e, com sorte, evitará o erro. Embora esse código de erro seja definido começando com Windows 10 versão 1903, um driver de ID pode retornar esse código de erro em versões anteriores do sistema operacional, resultando em nenhum efeito.

A resolução das superfícies na cadeia de troca sempre será a mesma resolução que o modo de destino definido.

O formato das superfícies será um dos formatos compatíveis com o driver, mas o formato de cada buffer adquirido pode mudar entre os formatos com suporte de quadro para quadro. O driver deve marcar o formato de cada buffer adquirido.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 10
Servidor mínimo com suporte Windows Server 2016
Plataforma de Destino Windows
Cabeçalho iddcx.h
IRQL requires_same

Confira também

EvtIddCxMonitorUnassignSwapChain

IDARG_IN_SETSWAPCHAIN