Enumeración de dispositivos secundarios de un adaptador de pantalla
En la siguiente secuencia de pasos se describe cómo colabora el controlador de puerto de visualización, el controlador de minipuerto de pantalla y el administrador de red de vídeo presente (VidPN) en el momento de la inicialización para enumerar los dispositivos secundarios de un adaptador de pantalla.
El controlador de puerto de visualización llama a la función DxgkDdiStartDevice del controlador de minipuerto de pantalla. DxgkDdiStartDevice devuelve (en el parámetro NumberOfChildren ) el número de dispositivos que son (o se pueden acoplar) elementos secundarios del adaptador de pantalla. DxgkDdiStartDevice también devuelve (en el parámetro NumberOfVideoPresentSources ) el número N de orígenes de vídeo presentes admitidos por el adaptador de pantalla. Los vídeos presentes fuentes se identificarán posteriormente por los números 0, 1, ... N -1.
El controlador de puerto de visualización llama a la función DxgkDdiQueryChildRelations del controlador de miniporte de pantalla, que enumera los dispositivos secundarios del adaptador de pantalla. DxgkDdiQueryChildRelations rellena una matriz de estructuras de DXGK_CHILD_DESCRIPTOR : una para cada dispositivo secundario. Tenga en cuenta que todos los dispositivos secundarios del adaptador de pantalla están incorporados: los monitores y otros dispositivos externos que se conectan al adaptador de pantalla no se consideran dispositivos secundarios. Para obtener más información, vea Dispositivos secundarios del adaptador de pantalla. DxgkDdiQueryChildRelations debe enumerar posibles dispositivos secundarios, así como los dispositivos secundarios que están físicamente presentes en el momento de la inicialización. Por ejemplo, si conectar un equipo portátil a una estación de acoplamiento dará como resultado la aparición de una nueva salida de vídeo, DxgkDdiQueryChildRelations debe enumerar esa salida de vídeo independientemente de si el equipo está acoplado en el momento de la inicialización. Además, si la conexión de un dongle a un conector de salida de vídeo permitirá que varios monitores compartan el conector, DxgkDdiQueryChildRelations debe enumerar un dispositivo secundario para cada rama del dongle, independientemente de si el dongle está conectado en el momento de la inicialización.
Para cada dispositivo secundario (enumerado en el paso 1) que tiene un valor de reconocimiento de HPD de HpdAwarenessInterruptible o HpdAwarenessPolled, el controlador de puerto de pantalla llama a la función DxgkDdiQueryChildStatus del controlador de miniporte de pantalla para determinar si el dispositivo secundario tiene un dispositivo externo conectado a él.
El controlador de puerto de visualización crea un PDO para cada dispositivo secundario que cumple una de las condiciones siguientes:
- El dispositivo secundario tiene un valor de reconocimiento hpdAwarenessAlwaysConnected.
- El dispositivo secundario tiene un valor de reconocimiento de HPD de HpdAwarenessPolled o HpdAwarenessInterruptible, y el sistema operativo conoce una consulta o notificación anterior de que el dispositivo secundario tiene un dispositivo externo conectado.
El controlador de puerto de visualización llama a la función DxgkDdiQueryDeviceDescriptor del controlador de miniporte de pantalla para cada dispositivo secundario que cumpla una de las condiciones siguientes:
- Se sabe que el dispositivo secundario tiene un dispositivo externo conectado.
- Se supone que el dispositivo secundario tiene un dispositivo externo conectado.
- El dispositivo secundario tiene un tipo de TypeOther.
DxgkDdiQueryDeviceDescriptor devuelve un bloque Datos de información de visualización extendida (EDID) si el monitor conectado (u otro dispositivo de visualización) admite descriptores EDID.
Nota: Durante la inicialización, el controlador de puerto de visualización llama a DxgkDdiQueryDeviceDescriptor para cada monitor para obtener el primer bloque de 128 bytes del EDID del monitor. Esto proporciona al controlador de puerto de visualización lo que necesita en el momento de la inicialización: id. de hardware PnP, id. de instancia, identificadores compatibles y texto del dispositivo. Más adelante, el controlador de función de clase de supervisión (Monitor.sys) llama a DxgkDdiQueryDeviceDescriptor para cada monitor para obtener el primer bloque EDID de 128 bytes y bloques de extensión EDID de 128 bytes adicionales. Esto significa que se llamará dos veces al controlador de minipuerto de pantalla para proporcionar el primer bloque de 128 bytes del EDID de cada monitor.
El administrador vidPN obtiene identificadores para todos los orígenes de vídeo y destinos de presentación de vídeo admitidos por el adaptador de pantalla. Los orígenes de los vídeos presentes se identifican por los números 0, 1, ... N - 1, donde N es el número de orígenes devueltos por la función DxgkDdiStartDevice del controlador de miniporte de pantalla. Los destinos de presentación de vídeo tienen identificadores enteros únicos creados previamente por el controlador de miniporte de pantalla durante DxgkDdiQueryChildRelations. Cada dispositivo secundario de tipo TypeVideoOutput está asociado a un destino de presentación de vídeo y el miembro ChildUid de la estructura de DXGK_CHILD_DESCRIPTOR del dispositivo secundario se usa como identificador para el destino del vídeo presente.
El administrador de VidPN usa el procedimiento siguiente para crear una VidPN inicial.
Si se registra en el registro una última vidPN válida conocida, úsela como vidPN inicial.
De lo contrario, llame a la función DxgkDdiRecommendFunctionalVidPn del controlador de miniporte de pantalla para obtener una VidPN inicial.
Si DxgkDdiRecommendFunctionalVidPn no devuelve un VidPN funcional aceptable, cree un VidPN simple que contenga una ruta de acceso presente de vídeo; es decir, un par (origen, destino). Llame a la función DxgkDdiIsSupportedVidPn del controlador de minipuerto de pantalla para comprobar que funcionará el vidPN propuesto. Si DxgkDdiIsSupportedVidPn informa de que el VidPN propuesto no funcionará, siga intentando hasta que se encuentre una VidPN adecuada.
Llame a la función DxgkDdiEnumVidPnCofuncModality del controlador de miniporte de pantalla para determinar los modos de origen y destino que están disponibles para VidPN.