Detalhes da implementação avançada do DualView

Uma implementação dualview ideal deve reconhecer quando suas exibições secundárias estão habilitadas ou desabilitadas. Quando as exibições secundárias estão desabilitadas, a exibição primária deve se comportar como faria sem o DualView habilitado. Isso significa que:

  • A exibição primária pode acessar todas as partes da memória de vídeo.
  • Em um computador laptop, a exibição primária pode ser alternada para qualquer um dos dispositivos de exibição filho.

Arranjo de memória de vídeo

Em uma implementação dualview ideal, o uso do buffer de memória é otimizado para que toda a memória de vídeo seja usada pela exibição primária quando a exibição secundária estiver desabilitada. No entanto, essa otimização é opcional; a estratégia de alocação de memória de vídeo a ser usada cabe completamente ao gravador de driver.

Quando as exibições secundárias são desabilitadas, a exibição primária deve ser capaz de acessar todas as partes da memória de vídeo para maximizar o desempenho do sistema. No entanto, quando as exibições secundárias estão habilitadas, o driver de miniporte não deve se apropriar apenas da memória da exibição primária. Em vez disso, um driver de miniporte deve reservar memória de vídeo para exibições secundárias, antes de alterar para o modo DualView. Começando com o Windows XP (e continuando para versões posteriores do sistema operacional), há uma nova solicitação de vídeo, IOCTL_VIDEO_SWITCH_DUALVIEW para ajudar os gravadores de driver a lidar com a organização da memória de vídeo. Quando o Windows XP (e posterior) manipula uma chamada para a função ChangeDisplaySettings (descrita na documentação do SDK do Windows), ele envia a solicitação IOCTL_VIDEO_SWITCH_DUALVIEW para cada exibição relacionada ao DualView antes de tentar alterar o modo. Os drivers podem usar essas informações para fazer arranjos de memória de vídeo antes de suas necessidades.

A figura a seguir ilustra uma disposição da memória de vídeo com o DualView desabilitado.

Diagrama mostrando a disposição da memória quando o DualView está desabilitado, com a exibição primária acessando toda a memória de vídeo.

A figura a seguir ilustra uma disposição sugerida da memória de vídeo com o DualView habilitado. Cada exibição tem seu próprio buffer de tela e heap fora da tela.

Diagrama mostrando a disposição da memória quando o DualView está habilitado, com buffers de tela separados e heaps fora da tela para cada exibição.

Relações filho

Um chip de vídeo móvel típico tem vários dispositivos filho, como LCD, CRT e TV. No modo SingleView, conforme mostrado na figura a seguir, a exibição primária possui todos esses dispositivos filho, enquanto a exibição secundária não possui nenhum deles. Um usuário pode alternar a exibição primária de um dispositivo filho para outro. Somente um dispositivo pode estar ativo por vez.

Diagrama ilustrando o modo SingleView, em que a exibição primária possui todos os dispositivos filho e apenas um dispositivo está ativo por vez.

No modo DualView, no entanto, cada filho pode ser atribuído a uma exibição diferente; a pergunta surge sobre qual exibição está associada a qual filho. As relações entre exibições e dispositivos podem ser descritas de duas maneiras: em termos de relações físicas filho e em termos de relações filho lógicas.

As relações físicas filho refletem a relação entre o chip de vídeo do adaptador e seus dispositivos de exibição. Depois que o sistema é inicializado, a relação física entre o chip de vídeo e os dispositivos de exibição nunca muda. Na figura anterior e na figura a seguir, o chip de vídeo possui os dispositivos de exibição LCD, CRT e TV; portanto, todos os três dispositivos de exibição são filhos físicos do chip de vídeo.

As relações filho lógicas refletem as relações dinâmicas entre as exibições e os dispositivos de exibição. Na figura a seguir, o DualView foi habilitado e a situação é que a exibição primária (Exibição 1) é proprietária do dispositivo LCD, enquanto a exibição secundária (Exibição 2) possui os dispositivos CRT e TV. Outra maneira de dizer isso é que o dispositivo LCD é o filho lógico da exibição primária, enquanto os dispositivos CRT e TV são os filhos lógicos da exibição secundária. O driver de miniporto relata relações filho lógicas por meio da solicitação IOCTL_VIDEO_GET_CHILD_STATE .

Diagrama que descreve o modo DualView, em que cada dispositivo filho é atribuído a uma exibição diferente e as relações filho lógicas são dinâmicas.

Um ponto adicional permanece. Quando o DualView está habilitado, a exibição primária pode alternar automaticamente os filhos. No modo SingleView, somente o CRT, que está associado à exibição primária (e somente), está ativo. Todos os outros dispositivos de exibição estão inativos. Depois que o DualView tiver sido habilitado, a figura anterior mostrará que a exibição primária mudou para exibição no dispositivo LCD, enquanto o CRT é um filho da exibição secundária. Essa opção pode ser necessária para um computador laptop devido ao fato de que a exibição secundária é removível, o que significa que o dispositivo LCD não pode ser associado a essa exibição. Se e como fazer essa opção estão totalmente sob o controle de drivers de miniport.