Compartilhar via


Visão geral do driver de exibição indireta

O modelo de driver de exibição indireta (IDD) fornece um modelo simples de driver no modo de usuário para oferecer suporte a monitores que não estão conectados às saídas de exibição tradicionais da GPU. Alguns cenários típicos em que um IDD é necessário incluem:

  • Transmissão da saída da tela em uma rede para um cliente remoto (exibição remota).
  • Criação de monitores virtuais para aplicativos como ambientes de área de trabalho virtual (exibições virtuais).
  • Conectar um dongle a um PC via USB que tenha um monitor comum (VGA, DVI, HDMI, DP, etc.) conectado a ele.

Implementação de IDD

Um IDD é o driver UMDF fornecido por terceiros para o dispositivo. Você pode desenvolver um IDD usando a funcionalidade exposta pelo IddCx (Indirect Display Driver Class eXtension) para fazer interface com os subsistemas gráficos do Windows das seguintes maneiras:

  • Crie o adaptador gráfico que representa o dispositivo de exibição indireta.
  • Relate monitores sendo conectados e desconectados do sistema.
  • Forneça descrições dos monitores conectados.
  • Forneça os modos de exibição disponíveis.
  • Ofereça suporte a outras funcionalidades de exibição, como cursor do mouse de hardware, gama, comunicações I2C e conteúdo protegido.
  • Processe as imagens da área de trabalho a serem exibidas no monitor.

Como um IDD é um driver UMDF, ele também é responsável por implementar todas as funcionalidades do UMDF como comunicações de dispositivo, gerenciamento de energia, plug and play e assim por diante.

O IDD é executado na Sessão 0 sem nenhum componente em execução na sessão do usuário, portanto, qualquer instabilidade do driver não afeta a estabilidade do sistema como um todo.

O diagrama a seguir fornece uma visão geral da arquitetura.

Diagrama que mostra o driver de exibição indireto dentro da arquitetura UMDF.

Modelo de modo de usuário

O IDD é um modelo somente no modo de usuário sem suporte para componentes do modo kernel. Dessa forma, o driver é capaz de usar qualquer API do DirectX para processar a imagem da área de trabalho. Na verdade, o IddCx fornece a imagem da área de trabalho a ser codificada em uma superfície DirectX.

O driver não deve chamar APIs de modo de usuário que não são apropriadas para uso do driver, como GDI, APIs de janelas, OpenGL ou Vulkan.

O IDD deve ser criado como um driver universal do Windows para que possa ser usado em várias plataformas Windows.

No momento da compilação:

  • O IDD UMDF declara a versão do IddCx em que foi criado.
  • O sistema operacional garante que a versão correta do IddCx seja carregada quando o driver for carregado.

Retorno de chamada IddCx e convenções de nomenclatura de função

Prefix Tipo Observações
EVT_IDD_CX_XXX Função de retorno de chamada IDD Os IDDs implementam retornos de chamada específicos do IddCx, como EVT_IDD_CX_ADAPTER_COMMIT_MODES, e retornos de chamada WDF relevantes, como EVT_WDF_DEVICE_D0_EXIT.
IddCxXxx Função Funções de extensão de classe IddCx fornecidas pelo sistema que os IDDs podem chamar, por exemplo, IddCxAdapterInitAsync.
PFN_IDDCX_XXX Ponteiros para funções IddCx Os IDDs não usam esses ponteiros. Em vez disso, os drivers devem usar as funções equivalentes IddCxXxx.

Código de exemplo

A Microsoft fornece um exemplo de implementação de IDD no GitHub de exemplos de driver do Windows. Este exemplo demonstra como conectar um monitor, como responder a um conjunto de modos e como receber quadros.