Habilitando o DualView
Para uma implementação mínima do DualView, execute as seguintes ações:
Pouco antes do HwVidFindAdapter do driver de miniporta retornar, chame o novo ponto de entrada do driver de porta de vídeo, VideoPortCreateSecondaryDisplay, para gerar uma extensão de dispositivo para o modo de exibição secundário. Na extensão do dispositivo secundário, adicione dois novos membros privados:
- Um sinalizador que indica que a extensão do dispositivo é para uma exibição secundária
- Um ponteiro que contém o endereço da extensão de dispositivo da exibição primária
Quatro alterações devem ser feitas na rotina de retorno de chamada HwVidStartIO do driver de miniport, modificando a maneira como ele responde às quatro solicitações IOCTL mostradas. O quarto item na lista a seguir apresenta duas maneiras de realizar o mesmo resultado.
- Em resposta à solicitação de IOCTL_VIDEO_MAP_VIDEO_MEMORY , o ponteiro e o comprimento do buffer de quadro de cada exibição devem ser definidos corretamente.
- A resposta à solicitação de IOCTL_VIDEO_SET_CURRENT_MODE deve ser específica para a exibição secundária.
- A resposta à solicitação de IOCTL_VIDEO_RESET_DEVICE depende se o dispositivo é o monitor primário ou secundário. Se o dispositivo for a tela primária, execute as operações necessárias. No entanto, se o dispositivo for a exibição secundária, é recomendável que nenhuma ação seja tomada.
- Altere a resposta para a solicitação IOCTL_VIDEO_SHARE_VIDEO_MEMORY para obter um mapa correto de ambas as exibições. Observe que, para implementações do DirectDraw, você pode modificar a função DdMapMemory do DirectDraw para obter o mapa correto de ambas as exibições.
O driver de vídeo deve cuidar do ajuste entre o endereço do buffer de quadro lógico e o deslocamento de memória de vídeo físico. Isso é especialmente importante para implementações do DirectDraw, pois no Dualview a superfície primária pode começar em qualquer lugar diferente do local de memória 0. O driver de exibição deve notificar o DirectDraw preenchendo pHalInfo-vmiData.pvPrimary> e pHalInfo-vmiData.fpPrimary> com os deslocamentos de memória de vídeo apropriados no tratamento de DrvGetDirectDrawInfo.
Notas de implementação adicionais
HwVidInitialize é chamado apenas uma vez para o objeto de dispositivo primário. Todos os objetos de dispositivo secundários devem ser inicializados nesta chamada.
Para uma chamada DrvAssertMode na qual bEnable está definido como FALSE, o driver de miniporto deve marcar o status das outras exibições. Ele deve evitar desativar o chip de vídeo enquanto outros modos de exibição ainda estão ativos.
Nunca suponha que as operações de desenho tenham o mesmo contexto de desenho (por exemplo, profundidade de cor e passo). Isso é especialmente importante para chips que usam buffers de quadro de bloco.
A GDI só pode definir a exibição primária em um dispositivo interno. Alguns sistemas, como computadores laptop, têm LCDs (dispositivos de monitor internos), mas também podem ser conectados a monitores externos. O driver de miniporta deve marcar uma exibição como removível passando o sinalizador VIDEO_DUALVIEW_REMOVABLE ao chamar VideoPortCreateSecondaryDisplay.
Em computadores laptop no modo DualView, os comutadores de tecla de acesso devem ser desabilitados. Em um sistema habilitado para ACPI de vídeo, o driver de miniporto deve rejeitar IOCTL_VIDEO_VALIDATE_CHILD_STATE_CONFIGURATION solicitações.
Para computadores laptop que dão suporte a dispositivos multichild, o driver de miniporta deve lidar com solicitações IOCTL_VIDEO_GET_CHILD_STATE e retornar relações filho lógicas (discutidas na seção a seguir).
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de