Share via


Enumerando modos de origem e destino VidPN cofuncionais

Este tópico descreve como o gerenciador de VidPN (rede de vídeo presente) e o driver de miniporto de exibição colaboram para enumerar modos disponíveis em vídeos que apresentam fontes e destinos. Antes de ler este material, você deve estar familiarizado com o material nos seguintes tópicos:

De tempos em tempos, o gerenciador do VidPN solicita ao driver de miniporto de exibição para enumerar os modos disponíveis no vídeo do adaptador de exibição que apresentam fontes e destinos. Normalmente, a solicitação tem o seguinte padrão:

  1. O gerenciador VidPN cria ou obtém um VidPN que tem modos fixados em algumas, mas não em todos, de suas fontes e destinos.

  2. O gerenciador do VidPN chama DxgkDdiIsSupportedVidPn para determinar se o VidPN pode ser estendido para formar um VidPN funcional com suporte no adaptador de exibição. Ou seja, ele pergunta se os modos podem ser fixados nas fontes e destinos restantes sem alterar os modos fixados existentes.

  3. O gerenciador do VidPN chama DxgkDdiEnumVidPnCofuncModality para obter os modos disponíveis nas fontes e destinos que ainda não têm modos fixados.

Um dos argumentos passados para DxgkDdiEnumVidPnCofuncModality é um identificador para um objeto VidPN chamado VidPN de restrição.

DxgkDdiEnumVidPnCofuncModality deve fazer o seguinte:

  • Inspecione o VidPN de restrição.

  • Para cada origem e destino que não tem um modo fixado, ajuste o modo definido para que ele seja o maior conjunto de modos possível que seja cofunctional com as restrições.

  • Para cada caminho que não tem uma transformação de dimensionamento fixada, ajuste os sinalizadores de suporte de dimensionamento para que eles sejam cofuncionais com as restrições.

  • Para cada caminho que não tem uma transformação de rotação fixa, ajuste os sinalizadores de suporte de rotação para que eles sejam cofuncionais com as restrições.

  • Para cada origem que tenha um modo fixado, relate os métodos multisampling disponíveis para essa origem.

Os parágrafos a seguir fornecem detalhes sobre como executar cada uma das tarefas na lista com marcadores anterior.

Inspecionando o VidPN de restrição

As propriedades a seguir do VidPN de restrição são as restrições que devem ser respeitadas por DxgkDdiEnumVidPnCofuncModality.

  • Topologia (o conjunto de associações entre fontes e destinos)

  • Modos fixados

  • Suporte a dimensionamento, dimensionamento, rotação e rotação de cada caminho

  • Base de cor de destino de cada caminho

  • Intervalos dinâmicos de coeficiente de cor de destino de cada caminho

  • Tipo de conteúdo (elementos gráficos ou vídeo) de cada caminho

  • Rampa gama de cada caminho

Para extrair as restrições do VidPN de restrição, execute as seguintes etapas:

  • Comece chamando a função pfnGetTopology para obter um ponteiro para uma interface de Topologia VidPN que representa a topologia do VidPN de restrição.

  • Chame as funções pfnAcquireFirstPathInfo e pfnAcquireNextPathInfo para obter informações sobre cada caminho na topologia do VidPN de restrição. 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, passe 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 modo da origem. Se o conjunto de modos da origem tiver um modo fixado, provavelmente não haverá necessidade de examinar os modos restantes no conjunto. Se o conjunto de modos não tiver um modo fixado, examine os modos restantes no conjunto chamando pfnAcquireFirstModeInfo e pfnAcquireNextModeInfo.

    Use um procedimento semelhante para examinar os conjuntos de modo de destino e determinar quais conjuntos de modo de destino têm modos fixados.

Ajustar conjuntos de modos

Ao inspecionar os conjuntos de modo associados a fontes e destinos na topologia do VidPN de restrição, anote quais conjuntos de modos têm modos fixados. Se um conjunto de modos não tiver um modo fixado, determine se ele precisa ser ajustado. Um conjunto de modos deverá ser ajustado se contiver modos que não são cofuncionais com as restrições ou se não tiver modos disponíveis que sejam cofuncionais com as restrições.

Para destinos de vídeo presentes que têm monitores conectados, você também deve considerar o conjunto de modos com suporte pelo monitor. Mesmo que um vídeo de destino presente no adaptador de exibição dê suporte a um modo específico (dadas as restrições), você só deverá listar esse modo no modo de destino definido se o monitor conectado também der suporte ao modo. Para determinar os modos compatíveis com o monitor conectado, execute as seguintes etapas:

Ajustar sinalizadores de suporte de dimensionamento

Para cada caminho na topologia do VidPN de restrição, determine se o caminho tem uma transformação de dimensionamento fixada. Para fazer essa determinação, inspecione vpnPath. ContentTransformation.Scaling, em que 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, em seguida, a transformação de dimensionamento para o 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 dimensionamento, defina os membros da estrutura D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT que contém os sinalizadores.

Ajustando sinalizadores de suporte de rotação

Ajustar os 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, em seguida, a transformação de rotação para o caminho é fixada. Caso contrário, a transformação de rotação não será fixada. Os sinalizadores de suporte de rotação estão no vpnPath. ContentTransformation.RotationSupport.

Relatar métodos multisampling

Se o adaptador de exibição tiver um ou mais codecs de saída de vídeo que são capazes de suavização por multisampling, você deverá relatar os métodos multisampling que estão disponíveis (dadas as restrições), para cada fonte que tenha um modo fixado. Para relatar os métodos multisampling disponíveis, execute as seguintes etapas:

A estrutura D3DDDI_MULTISAMPLINGMETHOD tem dois membros, que você deve definir, que caracterizam um método multisampling. O membro NumSamples indica o número de subpixels 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 a qualidade da imagem apresentada.

Dinâmicas de enumeração

Conforme descrito anteriormente, DxgkDdiEnumVidPnCofuncModality deve criar conjuntos de modos que sejam cofunctionais com o VidPN passado em seu parâmetro hConstrainingVidPn . Em alguns casos, DxgkDdiEnumVidPnCofuncModality deve aumentar seu comportamento de acordo com informações adicionais (uma dinâmica de enumeração) passadas nos parâmetros EnumPivotType e EnumPivot .

A dinâmica de enumeração pode ser uma das seguintes:

  • O conjunto de modos de uma fonte de vídeo específica presente

  • O conjunto de modos de um determinado destino de vídeo presente

  • A transformação de dimensionamento de um caminho VidPN específico presente

  • A transformação de rotação de um caminho VidPN específico presente

Se a dinâmica de enumeração for um conjunto de modos, dxgkDdkEnumVidPnCofuncModality deverá deixar esse modo definido inalterado. Se a 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 escala (rotação) para esse caminho.