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:

    1. Um sinalizador que indica que a extensão do dispositivo é para uma exibição secundária
    2. 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.

    1. 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.
    2. A resposta à solicitação de IOCTL_VIDEO_SET_CURRENT_MODE deve ser específica para a exibição secundária.
    3. 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.
    4. 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).