DXGKDDI_SYSTEM_DISPLAY_ENABLE función de devolución de llamada (dispmprt.h)
El sistema operativo llama al controlador de pantalla en modo kernel (KMD) DxgkddiSystemDisplayEnable función para solicitar que KMD restablezca el dispositivo de visualización actual a un estado especificado.
Sintaxis
DXGKDDI_SYSTEM_DISPLAY_ENABLE DxgkddiSystemDisplayEnable;
NTSTATUS DxgkddiSystemDisplayEnable(
[in] PVOID MiniportDeviceContext,
[in] D3DDDI_VIDEO_PRESENT_TARGET_ID TargetId,
[in] PDXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS Flags,
[out] UINT *Width,
[out] UINT *Height,
[out] D3DDDIFORMAT *ColorFormat
)
{...}
Parámetros
[in] MiniportDeviceContext
Controle a un bloque de contexto asociado a un adaptador de pantalla. La función
[in] TargetId
Valor de D3DDDI_VIDEO_PRESENT_TARGET_ID que especifica el identificador del destino del vídeo presente en el adaptador de pantalla al que está conectado el dispositivo de visualización. Este identificador podría ser para el destino que se dejó en el estado actual de la red de presentación de vídeo (VidPn) durante la llamada anterior a DxgkDdiCommitVidPn.
[in] Flags
Puntero a un valor de DXGKARG_SYSTEM_DISPLAY_ENABLE_FLAGS que contiene un OR bit a bit de marcas. El sistema operativo reserva este miembro.
[out] Width
Ancho del modo de visualización del dispositivo especificado, en píxeles.
[out] Height
Alto del modo de visualización del dispositivo especificado, en píxeles.
[out] ColorFormat
Puntero a un valor de D3DDDIFORMAT que especifica el formato de color del dispositivo para mostrar.
Valor devuelto
dxgkDdiSystemDisplayEnable devuelve STATUS_SUCCESS si se realiza correctamente. Si el destino especificado por el parámetro TargetId no está conectado a un dispositivo para mostrar, la función devuelve STATUS_NOT_SUPPORTED. De lo contrario, devuelve uno de los códigos de error definidos en Ntstatus.h.
Observaciones
El sistema operativo llama a dxgkddiSystemDisplayEnable durante una operación de comprobación de errores después de un error de detención del sistema.
Pasos requeridos por KMD
El KMD debe seguir estos pasos cuando se llama a su función DxgkDdiSystemDisplayEnable:
- Cancele todas las operaciones de GPU o restablezca la GPU al estado inactivo.
- El sistema operativo indica el destino del vídeo presente a través del parámetro TargetId. El controlador debe mantener la pantalla asociada a este destino encendido y visible. Si el controlador no puede encender la pantalla, debe producir un error en la llamada a esta función. En este caso de error, el sistema operativo podría llamar a DxgkDdiResetDevice y provocar que se produzca una comprobación de errores del sistema.
- Compruebe la conectividad de la pantalla asociada a este destino. Si el destino no tiene una pantalla conectada, el controlador debe completar la llamada a esta función y devolver el código de error STATUS_NOT_SUPPORTED.
- Deshabilite la señal en todas las demás pantallas conectadas al adaptador de pantalla. Si esto no es posible, el controlador debe intentar colocar una imagen en blanco en todas las demás pantallas. Si esto no es posible, el controlador debe dejar la última imagen en la pantalla sin cambios.
- Mantenga el modo de visualización actual en el destino indicado y vuelva a proporcionar este modo al sistema operativo como parte de esta llamada de función.
- Si el controlador no puede mantener el modo de visualización actual o si el destino no forma parte de la topología activa, el controlador debe intentar establecer un búfer de fotogramas en otro destino capaz de una resolución de visualización de al menos 640 x 480 píxeles en un formato de 24 bits por píxel. Si esto no es posible, el controlador puede producir un error en esta llamada de función, lo que provocará una comprobación de errores del sistema y la visualización de una pantalla negra.
KMD no tiene que usar un modo de búfer de fotogramas lineal. Sin embargo, KMD debe admitir operaciones de escritura en este búfer de fotogramas de orígenes que tengan el formato D3DDDIFMT_A8R8G8B8 de la enumeración D3DDDIFORMAT.
Restricciones de imágenes de origen
Después de que KMD proporciona el control del sistema operativo sobre la funcionalidad de visualización, el sistema operativo puede llamar a la función DxgkDdiSystemDisplayWrite para actualizar la imagen de pantalla y escribir un bloque de imágenes de orígenes especificados en la pantalla que restableció la función DxgkDdiSystemDisplayEnable.
DxgkDdiSystemDisplayWrite proporciona al controlador la dirección inicial de la imagen de origen, así como el paso, el ancho y el alto. El formato de color de la imagen de origen siempre es D3DDDIFMT_X8R8G8B8. El sistema operativo garantiza que la imagen de origen está en memoria no paginada.
KMD debe escribir esta imagen de origen en la pantalla actual a partir de las posiciones especificadas por el positionX de
Se recomienda que el controlador use la CPU para escribir la imagen desde el origen en el búfer de fotogramas, ya que una comprobación de errores del sistema puede deberse a detección de tiempo de espera y recuperación (TDR) repetidas instancias que dan lugar a que la GPU esté en una condición desconocida.
Usar memoria no paginada
Es posible que las funciones en modo kernel de Windows no estén disponibles mientras se llama a esta función.
dxgkDdiSystemDisplayEnable se puede llamar a en cualquier IRQL, por lo que debe estar en memoria no paginable. DxgkDdiSystemDisplayEnable no debe llamar a ningún código que esté en memoria paginable y no debe manipular ningún dato que esté en memoria paginable.
Cambio automático de pantalla
Un controlador de conmutador de pantalla automático DxgkDdiSystemDisplayEnable DDI debe asegurarse de que la actualización automática del panel (PSR) esté deshabilitada al final de la llamada a él. Para obtener más información, vea conmutador de visualización automática.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows 8 (WDDM 1.2) |
servidor mínimo admitido | Windows Server 2012 |
de la plataforma de destino de |
Escritorio |
encabezado de |
dispmprt.h |
irQL | Cualquier nivel (consulte la sección Comentarios) |
Consulte también
DxgkCbAcquirePostDisplayOwnership