Enumeración de los modos de origen y destino de VidPN cofuncional
En este tema se describe cómo colabora el administrador de red de presentación de vídeo (VidPN) y el controlador de minipuerto de la pantalla para enumerar los modos disponibles en los orígenes y destinos de presentación de vídeo. Antes de leer este material, debe estar familiarizado con el material en los temas siguientes:
De vez en cuando, el administrador de VidPN pide al controlador de minipuerto de pantalla que enumere los modos disponibles en los orígenes y destinos de vídeo del adaptador de pantalla. Normalmente, la solicitud tiene el siguiente patrón:
El administrador de VidPN crea u obtiene un VidPN que tiene modos anclados en algunos, pero no todos, de sus orígenes y destinos.
El administrador de VidPN llama a DxgkDdiIsSupportedVidPn para determinar si la VidPN se puede extender para formar una VidPN funcional compatible con el adaptador de pantalla. Es decir, se pregunta si los modos se pueden anclar en los orígenes y destinos restantes sin cambiar los modos anclados existentes.
El administrador VidPN llama a DxgkDdiEnumVidPnCofuncModality para obtener los modos disponibles en los orígenes y destinos que aún no tienen modos anclados.
Uno de los argumentos pasados a DxgkDdiEnumVidPnCofuncModality es un identificador de un objeto VidPN denominado VidPN restringido.
DxgkDdiEnumVidPnCofuncModality debe hacer lo siguiente:
Inspeccionar la VidPN restringida.
Para cada origen y destino que no tiene un modo anclado, ajuste el conjunto de modos para que sea el conjunto de modos más grande posible que sea cofuncional con las restricciones.
Para cada ruta de acceso que no tenga una transformación de escalado anclada, ajuste las marcas de compatibilidad de escalado para que sean cofuncionales con las restricciones.
Para cada ruta de acceso que no tenga una transformación de rotación anclada, ajuste las marcas de compatibilidad de rotación para que sean cofuncionales con las restricciones.
Para cada origen que tenga un modo anclado, notifique los métodos de muestreo múltiple que están disponibles para ese origen.
En los párrafos siguientes se proporcionan detalles sobre cómo realizar cada una de las tareas de la lista con viñetas anterior.
Inspección de la VidPN restringida
Las siguientes propiedades de la VidPN restringida son las restricciones que debe respetar DxgkDdiEnumVidPnCofuncModality.
Topología (conjunto de asociaciones entre orígenes y destinos)
Modos anclados
Escalado, compatibilidad con el escalado, rotación y compatibilidad con la rotación de cada ruta de acceso
Base de color de destino de cada ruta de acceso
Intervalos dinámicos de coeficiente de color de destino de cada ruta de acceso
Tipo de contenido (gráficos o vídeo) de cada ruta de acceso
Rampa gamma de cada ruta de acceso
Para extraer las restricciones de la VidPN restringida, realice los pasos siguientes:
Comience llamando a la función pfnGetTopology para obtener un puntero a una interfaz de topología de VidPN que represente la topología de VidPN restringida.
Llame a las funciones pfnAcquireFirstPathInfo y pfnAcquireNextPathInfo para obtener información sobre cada ruta de acceso de la topología de VidPN restringida. La información sobre una ruta de acceso determinada (ID de origen, ID de destino, transformación de escalado, transformación de rotación, base de color de destino, etc.) se encuentra en una estructura de D3DKMDT_VIDPN_PRESENT_PATH.
Para cada ruta de acceso, pase el ID de origen de la ruta de acceso a la función pfnAcquireSourceModeSet para obtener el origen de la ruta de acceso.
Llame a la función pfnAcquirePinnedModeInfo para determinar qué modo (si existe) está anclado en el modo de origen establecido. Si el conjunto de modos del origen tiene un modo anclado, probablemente no es necesario examinar los modos restantes del conjunto. Si el conjunto de modos no tiene un modo anclado, examine los modos restantes del conjunto llamando a pfnAcquireFirstModeInfo y pfnAcquireNextModeInfo.
Use un procedimiento similar para examinar los conjuntos de modos de destino y determinar qué conjuntos de modos de destino tienen modos anclados.
Ajuste de conjuntos de modos
A medida que inspecciona los conjuntos de modos asociados a orígenes y destinos en la topología de VidPN restringida, tome nota de qué conjuntos de modos tienen modos anclados. Si un conjunto de modos no tiene un modo anclado, determine si es necesario ajustarlo. Se debe ajustar un conjunto de modos si contiene modos que no son cofuncionales con las restricciones o si carece de modos disponibles que son cofuncionales con las restricciones.
En el caso de los destinos de presentación de vídeo que tienen monitores conectados, también debe tener en cuenta el conjunto de modos admitidos por el monitor. Incluso si un destino de presentación de vídeo en el adaptador de pantalla admite un modo determinado (dadas las restricciones), solo debe enumerar ese modo en el conjunto de modos de destino si el monitor conectado también admite el modo. Para determinar los modos admitidos por el monitor conectado, realice los pasos siguientes:
-
Llame a pfnAcquireMonitorSourceModeSet. Si un conjunto de modos no necesita ajustes, puede dejarlo como está. Si es necesario ajustar un conjunto de modos, debe crear un nuevo conjunto de modos y reemplazar el conjunto de modos existente por el nuevo.
-
Para crear y rellenar un nuevo conjunto de modos de origen, llame a pfnCreateNewSourceModeSet.
_DXGK_VIDPNSOURCEMODESET_INTERFACE
A continuación, llame a pfnCreateNewModeInfo y pfnAddMode.
-
Por último, llame a pfnAssignSourceModeSet para reemplazar el conjunto de modos de origen existente por el nuevo.
Ajuste de las marcas de compatibilidad de escalado
Para cada ruta de acceso de la topología de VidPN restringida, determine si la ruta de acceso tiene una transformación de escalado anclada. Para determinarlo, inspeccione vpnPath.ContentTransformation.Scaling, donde vpnPath es la estructura D3DKMDT_VIDPN_PRESENT_PATH que representa la ruta de acceso. Si vpnPath.ContentTransformation.Scaling está establecido en D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_CENTERED o D3DKMDT_VPPS_STRETCHED, significa que la transformación de escalado de la ruta de acceso está anclada. De lo contrario, la transformación de escalado no está anclada.
Si la ruta de acceso no tiene una transformación de escalado anclada, determine si es necesario ajustar las marcas de compatibilidad de escalado de la ruta de acceso. Las marcas de compatibilidad se deben ajustar si muestran compatibilidad con un tipo de escalado que no es cofuncional con las restricciones o si no muestran compatibilidad con un tipo de escalado que es cofuncional con las restricciones. Para modificar las marcas de compatibilidad de escalado, establezca los miembros de la estructura de D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT que contiene las marcas.
Ajuste de las marcas de compatibilidad de rotación
Ajustar las marcas de compatibilidad de rotación de una ruta de acceso es similar a ajustar las marcas de compatibilidad de escalado de una ruta de acceso. Supongamos que vpnPath es una estructura de D3DKMDT_VIDPN_PRESENT_PATH. Si vpnPath.ContentTransformation.Rotation está establecido en D3DKMDT_VPPR_IDENTITY, D3DKMDT_VPPR_ROTATE90, D3DKMDT_VPPR_ROTATE180 o D3DKMDT_VPPR_ROTATE270, significa que la transformación de rotación de la ruta de acceso está anclada. De lo contrario, la transformación de rotación no está anclada. Las marcas de compatibilidad de rotación están en vpnPath.ContentTransformation.RotationSupport.
Notificación de métodos de muestreo múltiple
Si el adaptador de pantalla tiene uno o varios códecs de salida de vídeo que son capaces de suavizar el muestreo múltiple, debe notificar los métodos de muestreo múltiple que están disponibles (dadas las restricciones), para cada origen que tenga un modo anclado. Para notificar los métodos de muestreo múltiple disponibles, realice los pasos siguientes:
- Crear una matriz de estructuras de D3DDDI_MULTISAMPLINGMETHOD
- Pase la matriz a la función pfnAssignMultisamplingMethodSet de la interfaz VidPN.
La estructura D3DDDI_MULTISAMPLINGMETHOD tiene dos miembros, que debe establecer, que caracterizan un método de muestreo múltiple. El miembro NumSamples indica el número de subpíxeles que se muestrean. El miembro NumQualityLevels indica el número de niveles de calidad en los que puede funcionar el método. Puede especificar cualquier número de niveles de calidad siempre que cada aumento en el nivel mejore notablemente la calidad de la imagen presentada.
Pivots de enumeración
Como se ha descrito anteriormente, DxgkDdiEnumVidPnCofuncModality debe crear conjuntos de modos que sean cofuncionales con la VidPN pasada en su parámetro hConstrainingVidPn. En algunos casos, DxgkDdiEnumVidPnCofuncModality debe aumentar su comportamiento según la información adicional (un pivot de enumeración) pasada en los parámetros EnumPivotType y EnumPivot.
El pivot de enumeración puede ser uno de los siguientes:
Conjunto de modos de un origen de presentación de vídeo determinado
Conjunto de modos de un destino de presentación de vídeo determinado
Transformación de escalado de una ruta de acceso de presentación de VidPN determinada
Transformación de rotación de una ruta de acceso de presentación de VidPN determinada
Si el pivot de enumeración es un conjunto de modos, DxgkDdkEnumVidPnCofuncModality debe dejar ese conjunto de modos sin cambios. Si el pivot de enumeración es la transformación de escalado (rotación) de una ruta de acceso, DxgkDdiEnumVidPnCofuncModality no debe cambiar las marcas de compatibilidad de escalado (rotación) para esa ruta de acceso.