Usando taxa de proporção e modos de dimensionamento personalizados
Para dar suporte ao dimensionamento estendido de preservação da taxa de proporção e aos modos de dimensionamento personalizados disponíveis a partir do Windows 7 (em que DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN7), os seguintes recursos são adicionados ao VidPN apresentar dados de caminho usados por drivers de miniporto de exibição:
D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT estrutura:
Membros AspectRatioCenteredMax e Custom
D3DKMDT_VIDPN_PRESENT_PATH_SCALING enumeração:
valores D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX e D3DKMDT_VPPS_CUSTOM
Especificando modos de dimensionamento
O comportamento e a aparência da área de trabalho no monitor usando esses modos de dimensionamento são descritos em Dimensionando a imagem da área de trabalho. Quando o DMM (gerenciador de modo de exibição) chama a função DxgkDdiEnumVidPnCofuncModality , o driver deve definir os membros de D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT de acordo com os tipos de dimensionamento aos quais o caminho presente do VidPN dá suporte, da seguinte maneira:
Dimensionamento de identidade
Se o caminho puder exibir conteúdo sem transformação, defina o membro Identity de D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT como um valor diferente de zero. Quando DxgkDdiEnumVidPnCofuncModality for chamado, defina o membro Scaling da estrutura D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION como D3DKMDT_VPPS_IDENTITY.
Dimensionamento centralizado
Se o caminho puder exibir conteúdo não dimensionado e centralizado no destino, defina D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. Centralizado. Quando DxgkDdiEnumVidPnCofuncModality for chamado, defina D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION. Dimensionamento para D3DKMDT_VPPS_CENTERED.
Dimensionamento estendido
Se o caminho puder exibir o conteúdo que é dimensionado para se ajustar ao destino sem preservar a taxa de proporção da origem, defina D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. Alongado. Quando DxgkDdiEnumVidPnCofuncModality for chamado, defina D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION. Dimensionamento para D3DKMDT_VPPS_STRETCHED.
Taxa de proporção preservando o dimensionamento estendido
Se o caminho puder dimensionar o conteúdo de origem para se ajustar ao destino, preservando a taxa de proporção da origem, defina D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. AspectRatioCenteredMax. Quando DxgkDdiEnumVidPnCofuncModality for chamado, defina D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION. Dimensionamento para D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX.
Dimensionamento personalizado
Se o caminho puder exibir um ou mais modos de dimensionamento que não são descritos pelos outros membros da estrutura D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT , defina D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. Personalizado. Quando DxgkDdiEnumVidPnCofuncModality for chamado, defina D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION. Dimensionamento para D3DKMDT_VPPS_CUSTOM. Os IHVs (fornecedores independentes de hardware) podem usar valores de escape privados para informar ao driver como interpretar o dimensionamento personalizado em um determinado destino.
Se os modos de origem e destino fixados atuais tiverem a mesma taxa de proporção, mas forem tamanhos diferentes, o driver de miniporta de exibição deverá definir apenas os membros Estendido e Centralizado . Nesse caso, o DMM limpará qualquer valor diferente de zero do membro AspectRatioCenteredMax .
Dimensionamento de API para DDI
A correspondência de valores de dimensionamento de API no modo de usuário para os valores de dimensionamento DDI do driver de miniporta de exibição na enumeração D3DKMDT_VIDPN_PRESENT_PATH_SCALING é mostrada na tabela a seguir.
SetDisplayConfig Valor de dimensionamento de API | Valor de dimensionamento de DDI |
---|---|
DC_IDENTITY |
D3DKMDT_VPPS_IDENTITY |
DC_CENTERED |
D3DKMDT_VPPS_CENTERED |
DC_STRETCHED |
D3DKMDT_VPPS_STRETCHED |
DC_ASPRATIOMAX |
D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX |
DC_CUSTOM |
D3DKMDT_VPPS_CUSTOM |
DC_PREFERRED |
D3DKMDT_VPPS_PREFERRED |
Esse mapeamento pode ser usado com as tabelas em Dimensionamento da Imagem da Área de Trabalho para entender como os tipos de dimensionamento do modo de usuário são convertidos em tipos de dimensionamento DDI enviados para o driver de miniporto de exibição.
Versões de dimensionamento e driver
O comportamento de diferentes versões de driver de miniporta de exibição em execução em diferentes versões do sistema operacional é mostrado na tabela a seguir.
Versão do driver Versão do sistema operacional
< DXGKDDI_INTERFACE_VERSION DXGKDDI_INTERFACE_VERSION_WIN7
e
>= DXGKDDI_INTERFACE_VERSION_VISTA
> DXGKDDI_INTERFACE_VERSION = DXGKDDI_INTERFACE_VERSION_WIN7
Windows Vista
O driver tem o comportamento do Windows Vista.
O driver deve marcar a versão do sistema operacional durante a inicialização e nunca deve expor ou usar os membros AspectRatioCenteredMax e Custom do D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT. Se o driver violar esse requisito, o DMM ignorará AspectRatioCenteredMax e Custom e reconhecerá apenas os membros Identity, Centered ou Stretched . Se o driver tentar fixar o modo de dimensionamento D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX em qualquer caminho VidPN, o DMM retornará o código status STATUS_GRAPHICS_INVALID_PATH_CONTENT_GEOMETRY_TRANSFORMATION e tratará esse modo de dimensionamento da mesma forma que o modo estendido de tela inteira.
Windows 7
O sistema operacional limpa os valores dos membros AspectRatioCenteredMax e Custom e pressupõe que o driver não dá suporte a dimensionamento estendido de preservação de taxa de proporção e modos de dimensionamento personalizados. O DMM definirá apenas modos de dimensionamento D3DKMDT_VPPS_IDENTITY, D3DKMDT_VPPS_STRETCHED ou D3DKMDT_VPPS_CENTERED. O driver se comporta como no Windows Vista.
O driver deve dar suporte ao membro AspectRatioCenteredMax e o sistema operacional o usa de aplicativos Painel de Controle. Opcionalmente, o driver pode implementar a funcionalidade personalizada definindo o membro Personalizado .
O DMM sempre confirmará que a interface >do driver = DXGKDDI_INTERFACE_VERSION_WIN7 antes de tentar marcar e usar os membros AspectRatioCenteredMax ou Custom do D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT.
Importante Um driver de miniporta de exibição que dá suporte aos valores D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX ou D3DKMDT_VPPS_CUSTOM nunca deve definir um valor de D3DKMDT_VPPS_NOTSPECIFIED.
Dimensionamento com vários adaptadores
Os valores dos tipos de dimensionamento D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX e D3DKMDT_VPPS_CUSTOM introduzidos com o Windows 7 são armazenados no banco de dados de conexão CCD associado a uma GPU (unidade de processamento gráfico). Se o usuário mover um monitor de uma GPU com um driver que dá suporte a esses membros de dimensionamento para outra GPU, talvez a segunda GPU não tenha suporte do driver original. Nesse caso, o sistema operacional mapeará esses tipos de dimensionamento para o dimensionamento padrão do sistema.
Se ambas as GPUs derem suporte aos tipos de dimensionamento D3DKMDT_VPPS_ASPECTRATIOCENTEREDMAX e D3DKMDT_VPPS_CUSTOM, e o driver da primeira GPU implementar o D3DKMDT_VPPS_CUSTOM solicitação de dimensionamento personalizada, se o usuário alternar o monitor para a segunda GPU, o driver da segunda GPU provavelmente não saberá como interpretar a solicitação de dimensionamento personalizada. Nesse caso, o segundo driver deve falhar em uma chamada para a função DxgkDdiCommitVidPn e deve retornar o STATUS_GRAPHICS_VIDPN_MODALITY_NOT_SUPPORTED código status; o sistema operacional mapeará esse tipo de dimensionamento para o dimensionamento padrão do sistema.