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.
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.