Enumerar modos de origem e destino cofuncionais do VidPN
Este tópico descreve como o gerenciador de rede de apresentação de vídeo (VidPN) e o driver de miniporta de exibição colaboram para enumerar modos disponíveis em origens e destinos de apresentação de vídeo. Antes de ler este material, você deve estar familiarizado com o material nos seguintes tópicos:
De tempos em tempos, o gerenciador VidPN pede ao driver de miniporta de exibição para enumerar os modos que estão disponíveis nas origens e destinos de apresentação de um adaptador de vídeo. Normalmente, a solicitação tem o seguinte padrão:
O gerenciador VidPN cria ou obtém um VidPN que tem modos fixos em algumas, mas não em todas, origens e destinos.
O gerenciador VidPN chama DxgkDdiIsSupportedVidPn para determinar se o VidPN pode ser estendido para formar um VidPN funcional com suporte no adaptador de vídeo. Ou seja, ele pergunta se os modos podem ser fixados nas origens e destinos restantes sem alterar os modos fixados existentes.
O gerenciador VidPN chama DxgkDdiEnumVidPnCofuncModality para obter os modos que estão disponíveis nas origens e destinos que ainda não têm modos fixados.
Um dos argumentos transmitidos para DxgkDdiEnumVidPnCofuncModality é um identificador para um objeto VidPN chamado VidPN restritivo.
DxgkDdiEnumVidPnCofuncModality deve fazer o seguinte:
Inspecionar o VidPN restritivo.
Para cada origem e destino que não tem um modo fixado, ajuste o modo definido para que seja o maior possível que seja cofuncional com as restrições.
Para cada caminho que não tenha uma transformação de dimensionamento fixo, ajuste os sinalizadores de suporte de dimensionamento para que eles sejam cofuncionais com as restrições.
Para cada caminho que não tenha uma transformação de rotação fixo, ajuste os sinalizadores de suporte de rotação para que eles sejam cofuncionais com as restrições.
Para cada origem que tem um modo fixo, relate os métodos de amostragem múltipla disponíveis para essa origem.
Os parágrafos a seguir fornecem detalhes sobre como realizar cada uma das tarefas na lista com marcadores anterior.
Inspecionando o VidPN restritivo
As propriedades a seguir do VidPN restritivo são as restrições que devem ser honradas por DxgkDdiEnumVidPnCofuncModality.
Topologia (o conjunto de associações entre origens e destinos)
Modos fixos
Dimensionamento, suporte de dimensionamento, rotação e suporte de rotação de cada caminho
Base de cores de destino de cada caminho
Intervalos dinâmicos do coeficiente de cor de destino de cada caminho
Tipo de conteúdo (gráficos ou vídeo) de cada caminho
Rampa gama de cada caminho
Para extrair as restrições do VidPN restritivo, realize estas etapas:
Comece chamando a função pfnGetTopology para obter um ponteiro para uma interface de topologia VidPN que representa a topologia do VidPN restritivo.
Chame as funções pfnAcquireFirstPathInfo e pfnAcquireNextPathInfo para obter informações sobre cada caminho na topologia do VidPN restritivo. As informações sobre um caminho específico (ID de origem, ID de destino, transformação de dimensionamento, transformação de rotação, base de cor de destino etc.) estão contidas em uma estrutura D3DKMDT_VIDPN_PRESENT_PATH.
Para cada caminho, transmita a ID de origem do caminho para a função pfnAcquireSourceModeSet para obter a origem do caminho.
Chame a função pfnAcquirePinnedModeInfo para determinar qual modo (se houver) está fixado no conjunto de modos da origem. Se o conjunto de modos da origem tiver um modo fixo, provavelmente não há necessidade de examinar os modos restantes no conjunto. Se o conjunto de modos não tiver um modo fixo, examine os modos restantes no conjunto chamando pfnAcquireFirstModeInfo e pfnAcquireNextModeInfo.
Use um procedimento semelhante para examinar os conjuntos de modos de destino e determinar quais deles têm modos fixos.
Ajuste de conjuntos de modos
Ao inspecionar os conjuntos de modos associados a origens e destinos na topologia do VidPN restritivo, anote quais conjuntos de modos têm modos fixos. Se um conjunto de modos não tiver um modo fixo, determine se ele precisa ser ajustado. Um conjunto de modos deverá ser ajustado se contiver modos que não sejam cofuncionais com as restrições ou se não tiver modos disponíveis que sejam cofuncionais com as restrições.
Para destinos de apresentação de vídeo que têm monitores conectados, você também deve considerar o conjunto de modos suportados pelo monitor. Mesmo que um destino de apresentação de vídeo no adaptador ofereça suporte a um modo específico (dadas as restrições), você só deve listar esse modo no conjunto do destino se o monitor conectado também oferecer suporte ao modo. Para determinar os modos suportados pelo monitor conectado, realize estas etapas:
-
Chame pfnAcquireMonitorSourceModeSet. Se um conjunto de modos não precisar de ajustes, você pode deixá-lo. Se um conjunto de modos precisar ser ajustado, crie um novo conjunto de modos e substitua o conjunto de modos existente pelo novo.
-
Para criar e preencher um novo conjunto de modos de origem, chame pfnCreateNewSourceModeSet.
_DXGK_VIDPNSOURCEMODESET_INTERFACE
Em seguida, chame pfnCreateNewModeInfo e pfnAddMode.
-
Finalmente, chame pfnAssignSourceModeSet para substituir o conjunto de modos de origem existente pelo novo.
Ajustando sinalizadores de suporte de dimensionamento
Para cada caminho na topologia do VidPN restritivo, determine se o caminho tem uma transformação de dimensionamento fixada. Para fazer essa determinação, inspecione vpnPath.ContentTransformation.Scaling, onde vpnPath é a estrutura D3DKMDT_VIDPN_PRESENT_PATH que representa o caminho. Se vpnPath.ContentTransformation.Scaling é definido como D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_CENTERED ou D3DKMDT_VPPS_STRETCHED, a transformação de dimensionamento do caminho é fixada. Caso contrário, a transformação de dimensionamento não será fixada.
Se o caminho não tiver uma transformação de dimensionamento fixada, determine se os sinalizadores de suporte de dimensionamento do caminho precisam ser ajustados. Os sinalizadores de suporte deverão ser ajustados se mostrarem suporte para um tipo de dimensionamento que não seja cofuncional com as restrições ou se não mostrarem suporte para um tipo de dimensionamento que seja cofuncional com as restrições. Para alterar os sinalizadores de suporte de escala, defina os membros da estrutura D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT que contém os sinalizadores.
Ajuste dos sinalizadores de suporte de rotação
O ajuste dos sinalizadores de suporte de rotação de um caminho é semelhante ao ajuste dos sinalizadores de suporte de dimensionamento de um caminho. Suponha que vpnPath seja uma estrutura D3DKMDT_VIDPN_PRESENT_PATH. Se vpnPath.ContentTransformation.Rotation é definido como D3DKMDT_VPPR_IDENTITY, D3DKMDT_VPPR_ROTATE90, D3DKMDT_VPPR_ROTATE180 ou D3DKMDT_VPPR_ROTATE270, a transformação de rotação do caminho é fixada. Caso contrário, a transformação de rotação não será fixada. Os sinalizadores de suporte de rotação estão em vpnPath.ContentTransformation.RotationSupport.
Notificação de métodos de várias amostras
Se o adaptador de vídeo tiver um ou mais codecs de saída de vídeo capazes de suavização por amostragem múltipla, você deverá relatar os métodos de amostragem múltipla disponíveis (dadas as restrições) para cada origem que tenha um modo fixado. Para relatar os métodos de amostragem múltipla disponíveis, realize estas etapas:
- Criar uma matriz de estruturas D3DDDI_MULTISAMPLINGMETHOD
- Transmita a matriz para a função pfnAssignMultisamplingMethodSet da interface do VidPN.
A estrutura D3DDDI_MULTISAMPLINGMETHOD tem dois membros, que você deve definir, que caracterizam um método de amostragem múltipla. O membro NumSamples indica o número de subpixels que são amostrados. O membro NumQualityLevels indica o número de níveis de qualidade nos quais o método pode operar. Você pode especificar qualquer número de níveis de qualidade, desde que cada aumento no nível melhore visivelmente a qualidade da imagem apresentada.
Tabelas dinâmicas de enumeração
Conforme descrito anteriormente, DxgkDdiEnumVidPnCofuncModality deve criar conjuntos de modos que são cofuncionais com o VidPN transmitido no parâmetro hConstrainingVidPn. Em alguns casos, DxgkDdiEnumVidPnCofuncModality deve aumentar seu comportamento de acordo com informações adicionais (uma tabela dinâmica de enumeração) transmitidas nos parâmetros EnumPivotType e EnumPivot.
A tabela dinâmica de enumeração pode ser um dos seguintes:
O conjunto de modos de uma origem de apresentação de vídeo específica
O conjunto de modos de um destino de apresentação de vídeo específico
A transformação de dimensionamento de um determinado caminho de apresentação do VidPN
A transformação de rotação de um determinado caminho de apresentação do VidPN
Se a tabela dinâmica de enumeração for um conjunto de modos, DxgkDdkEnumVidPnCofuncModality deverá deixar esse conjunto inalterado. Se a tabela dinâmica de enumeração for a transformação de dimensionamento (rotação) de um caminho, DxgkDdiEnumVidPnCofuncModality não deverá alterar os sinalizadores de suporte de dimensionamento (rotação) para esse caminho.