DXGKDDI_SETVIDPNSOURCEADDRESS función de devolución de llamada (d3dkmddi.h)
La función DxgkDdiSetVidPnSourceAddress establece la dirección de la superficie principal asociada a un origen de vídeo presente determinado.
Sintaxis
DXGKDDI_SETVIDPNSOURCEADDRESS DxgkddiSetvidpnsourceaddress;
NTSTATUS DxgkddiSetvidpnsourceaddress(
IN_CONST_HANDLE hAdapter,
IN_CONST_PDXGKARG_SETVIDPNSOURCEADDRESS pSetVidPnSourceAddress
)
{...}
Parámetros
hAdapter
Identificador de un bloque de contexto asociado a un adaptador de pantalla. El controlador de miniporte de pantalla proporcionó anteriormente este identificador al subsistema del kernel de gráficos de DirectX en el parámetro de salida MiniportDeviceContext de la función DxgkDdiAddDevice .
pSetVidPnSourceAddress
Puntero a una estructura de DXGKARG_SETVIDPNSOURCEADDRESS que contiene argumentos de función.
Valor devuelto
DxgkDdiSetVidPnSourceAddress devuelve STATUS_SUCCESS si se realiza correctamente; de lo contrario, devuelve uno de los códigos de error definidos en Ntstatus.h.
A partir de Windows 8, el controlador de miniporte de pantalla puede producir un error en una llamada a DxgkDdiSetVidPnSourceAddress, devolviendo STATUS_INVALID_PARAMETER, cuando el miembro SharedPrimaryTransition está establecido en pSetVidPnSourceAddress-Flags>. Sin embargo, este error no se espera a menos que haya un error en la implementación del controlador en modo de usuario de la función CheckDirectFlipSupport o en DWM. Si se produce un error de este tipo, el sistema operativo no conmutará sin problemas al modo de composición y la presentación será incorrecta.
Comentarios
DxgkDdiSetVidPnSourceAddress se llama solo con las principales que encajan con la topología de red de la red (VidPN) actualmente confirmada. Por ejemplo, el formato de D3DDDIFMT_A8R8G8B8 se determina para ajustarse a un VidPN que se confirma en un formato de D3DDDIFMT_X8R8G8B8 y viceversa.
El subsistema del kernel de gráficos de DirectX llama a DxgkDdiSetVidPnSourceAddress para cambiar el modo de presentación y para realizar operaciones de volteo basadas en E/S asignadas a memoria (MMIO). Las marcas de campo de bits del miembro Flags de la estructura DXGKARG_SETVIDPNSOURCEADDRESS a la que apunta el parámetro pSetVidPnSourceAddress indican el tipo de operación de visualización que se va a realizar. Para cambiar el modo de presentación, el subsistema del kernel de gráficos establece el miembro ContextCount de DXGKARG_SETVIDPNSOURCEADDRESS en cero. En esta situación, el contenido de la matriz que especifica el miembro Context de DXGKARG_SETVIDPNSOURCEADDRESS no está definido. Para realizar una operación de volteo, el subsistema del kernel de gráficos establece ContextCount en el número de contextos y Context en la matriz de identificadores de contexto del controlador para los contextos que contribuyen a la operación de volteo.
Si el controlador de minipuerto de pantalla indicado anteriormente, en una llamada a su función DxgkDdiQueryAdapterInfo , admite un volteo basado en MMIO (estableciendo la marca de campo de bits FlipOnVSyncMmIo en el miembro FlipCaps de la estructura de DXGK_DRIVERCAPS en TRUE), la función DxgkDdiSetVidPnSourceAddress del controlador se llama posteriormente en el nivel de solicitud de interrupción del dispositivo (DIRQL) con fines de volteo. La función DxgkDdiSetVidPnSourceAddress del controlador debe programar la DAC y empezar a examinarla, en la siguiente sincronización vertical, la superficie principal cuya dirección se especifica en el miembro PrimaryAddress de DXGKARG_SETVIDPNSOURCEADDRESS. El controlador también debe pasar el tipo de interrupción DXGK_INTERRUPT_CRTC_VSYNC en el parámetro InterruptType en una llamada a la función DxgkCbNotifyInterrupt para informar de la dirección de examen efectiva. El controlador debe seguir la llamada a DxgkCbNotifyInterrupt con una llamada a la función DxgkCbNotifyDpc .
DxgkDdiSetVidPnSourceAddress debe estar en memoria no paginable. DxgkDdiSetVidPnSourceAddress 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.
situaciones de Clone-View
En situaciones de vista clonada, el controlador de minipuerto de pantalla debe controlar las operaciones de volteo adecuadamente, como se describe en esta sección.
Cuando se ejecuta DWM, el subsistema del kernel de gráficos de DirectX se sincroniza cuando se produce una sincronización vertical. Sin embargo, el subsistema del kernel de gráficos de DirectX solo puede sincronizarse cuando se produce una sincronización vertical de una sola señal de salida del adaptador de gráficos. El subsistema del kernel de gráficos de DirectX debe voltear inmediatamente cualquier otra señal de salida del adaptador de gráficos para evitar el desmontaje.
El programador de GPU detectará una única sincronización vertical y determinará que la superficie volteada está disponible tan pronto como se produzca el primer volteo del monitor. Como resultado, el controlador de minipuerto de pantalla podría representarse en una superficie que el segundo monitor sigue mostrando.
Las aplicaciones de vídeo (por ejemplo, Reproductor multimedia de Windows) no son conscientes de las situaciones de vista de clonación y esperan tener un intervalo de sincronización vertical predecible. Si el programador de GPU detectó las sincronizaciones verticales de ambos monitores, el intervalo de sincronización vertical (y, por lo tanto, el volteo) sería impredecible y se desfadría con el tiempo, lo que haría que las aplicaciones dwM y de vídeo no funcionaran correctamente.
Para situaciones de vista clonada, el controlador de minipuerto de pantalla debe realizar un volteo de sincronización vertical en el monitor principal y un volteo inmediato basado en MMIO en el monitor secundario.
La función DxgkDdiSetVidPnSourceAddress del controlador de miniporte de pantalla debe registrar la dirección a la que se va a voltear en el objeto del adaptador de gráficos.
Para dirigir al controlador de miniporte de pantalla que no espere al siguiente retroceso vertical del monitor secundario, el subsistema del kernel de gráficos directX establece la marca de campo de bits FlipImmediate en TRUE en una llamada a la función DxgkDdiSetVidPnSourceAddress del controlador.
Consulte los requisitos para llamar a esta función con superposiciones multiplano en la presentación de VidPN de superposición multiplane.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows Vista |
Encabezado | d3dkmddi.h |
IRQL | PASSIVE_LEVEL. Se llama en DIRQL si el controlador admite un volteo basado en MMIO. |