Compartir a través de


Habilitación de DualView

Para una implementación mínima de DualView, realice las siguientes acciones:

  • Justo antes de que se devuelva el HwVidFindAdapter del controlador de miniporte, llame al nuevo punto de entrada del controlador de puerto de vídeo , VideoPortCreateSecondaryDisplay, para generar una extensión de dispositivo para la vista secundaria. En la extensión del dispositivo secundario, agregue dos nuevos miembros privados:

    1. Marca que indica que la extensión del dispositivo es para una pantalla secundaria.
    2. Puntero que contiene la dirección de la extensión de dispositivo de la pantalla principal.
  • Se deben realizar cuatro cambios en la rutina de devolución de llamada HwVidStartIO del controlador de miniporte, modificando la forma en que responde a las cuatro solicitudes IOCTL mostradas. El cuarto elemento de la lista siguiente presenta dos maneras de lograr el mismo resultado.

    1. En respuesta a la solicitud de IOCTL_VIDEO_MAP_VIDEO_MEMORY , el puntero y la longitud del búfer de fotogramas de cada vista deben establecerse correctamente.
    2. La respuesta a la solicitud de IOCTL_VIDEO_SET_CURRENT_MODE debe realizarse específica de la vista secundaria.
    3. La respuesta a la solicitud de IOCTL_VIDEO_RESET_DEVICE depende de si el dispositivo es la pantalla principal o secundaria. Si el dispositivo es la pantalla principal, realice las operaciones necesarias. Sin embargo, si el dispositivo es la pantalla secundaria, se recomienda no realizar ninguna acción.
    4. Cambie la respuesta a la solicitud de IOCTL_VIDEO_SHARE_VIDEO_MEMORY para obtener un mapa correcto de ambas vistas. Tenga en cuenta que para las implementaciones de DirectDraw, puede modificar la función DdMapMemory de DirectDraw para obtener el mapa correcto de ambas vistas.
  • El controlador de pantalla debe ocuparse del ajuste entre la dirección del búfer de fotogramas lógicos y el desplazamiento de memoria de vídeo físico. Esto es especialmente importante para las implementaciones de DirectDraw, ya que en Dualview la superficie principal puede iniciarse en cualquier lugar distinto de la ubicación de memoria 0. El controlador de pantalla debe notificar a DirectDraw rellenando pHalInfo-vmiData.pvPrimary> y pHalInfo-vmiData.fpPrimary> con los desplazamientos de memoria de vídeo adecuados para controlar DrvGetDirectDrawInfo.

Notas de implementación adicionales

  • Solo se llama a HwVidInitialize para el objeto de dispositivo principal. Cualquier objeto de dispositivo secundario se debe inicializar en esta llamada.

  • Para una llamada DrvAssertMode en la que bEnable se establece en FALSE, el controlador de minipuerto debe comprobar el estado de las otras vistas. Debe evitar desactivar el chip de vídeo mientras que otras vistas siguen activas.

  • Nunca suponga que las operaciones de dibujo tienen el mismo contexto de dibujo (por ejemplo, profundidad de color y intervalo). Esto es especialmente importante para los chips que usan búferes de fotogramas de mosaico.

  • GDI solo puede establecer la vista principal en un dispositivo integrado. Algunos sistemas, como los equipos portátiles, tienen dispositivos de monitor integrados (LCD), pero también se pueden conectar a monitores externos. El controlador de minipuerto debe marcar una vista como extraíble pasando la marca VIDEO_DUALVIEW_REMOVABLE cuando llama a VideoPortCreateSecondaryDisplay.

  • En los equipos portátiles en modo DualView, los conmutadores de teclas de acceso rápido deben deshabilitarse. En un sistema habilitado para ACPI de vídeo, el controlador de minipuerto debe rechazar IOCTL_VIDEO_VALIDATE_CHILD_STATE_CONFIGURATION solicitudes.

  • En el caso de los equipos portátiles que admiten dispositivos multiinquilino, el controlador de minipuerto debe controlar IOCTL_VIDEO_GET_CHILD_STATE solicitudes y devolver relaciones secundarias lógicas (que se describen en la sección siguiente).